From d7e66afe1f2d36d9119cd0cea6a8fac31986a763 Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Wed, 17 Apr 2024 11:29:51 -0400 Subject: [PATCH] fix flazeface tensor scale and update build platform --- CHANGELOG.md | 9 +- dist/human.esm-nobundle.js | 6 +- dist/human.esm.js | 27802 ++++++++-------- dist/human.esm.js.map | 6 +- dist/human.js | 1436 +- dist/human.node-gpu.js | 6 +- dist/human.node-wasm.js | 6 +- dist/human.node.js | 6 +- dist/tfjs.esm.js | 1448 +- dist/tfjs.version.js | 2 +- package.json | 23 +- src/config.ts | 2 +- src/face/blazeface.ts | 2 +- test/build.log | 102 +- typedoc/assets/icons.js | 15 + typedoc/assets/icons.svg | 1 + typedoc/assets/main.js | 8 +- typedoc/assets/style.css | 62 +- typedoc/classes/Env.html | 88 +- typedoc/classes/GraphModel.html | 90 +- typedoc/classes/Human.html | 158 +- typedoc/classes/Tensor-1.html | 380 +- typedoc/classes/WebCam.html | 70 +- typedoc/classes/models.Models.html | 20 +- typedoc/enums/Rank.html | 16 +- typedoc/functions/draw.all.html | 4 +- typedoc/functions/draw.body.html | 4 +- typedoc/functions/draw.canvas.html | 4 +- typedoc/functions/draw.face.html | 4 +- typedoc/functions/draw.gesture.html | 4 +- typedoc/functions/draw.hand.html | 4 +- typedoc/functions/draw.init.html | 4 +- typedoc/functions/draw.object.html | 4 +- typedoc/functions/draw.person.html | 4 +- typedoc/functions/empty.html | 2 +- typedoc/functions/match.distance.html | 6 +- typedoc/functions/match.find.html | 10 +- typedoc/functions/match.similarity.html | 6 +- typedoc/functions/models.validateModel.html | 2 +- typedoc/hierarchy.html | 1 + typedoc/index.html | 164 +- typedoc/interfaces/BodyConfig.html | 28 +- typedoc/interfaces/BodyKeypoint.html | 24 +- typedoc/interfaces/BodyResult.html | 28 +- typedoc/interfaces/Config.html | 88 +- typedoc/interfaces/DrawOptions.html | 108 +- typedoc/interfaces/FaceAntiSpoofConfig.html | 20 +- typedoc/interfaces/FaceAttentionConfig.html | 20 +- typedoc/interfaces/FaceConfig.html | 38 +- typedoc/interfaces/FaceDescriptionConfig.html | 24 +- typedoc/interfaces/FaceDetectorConfig.html | 52 +- typedoc/interfaces/FaceEmotionConfig.html | 24 +- typedoc/interfaces/FaceGearConfig.html | 24 +- typedoc/interfaces/FaceIrisConfig.html | 24 +- typedoc/interfaces/FaceLivenessConfig.html | 20 +- typedoc/interfaces/FaceMeshConfig.html | 24 +- typedoc/interfaces/FaceResult.html | 88 +- typedoc/interfaces/FilterConfig.html | 84 +- typedoc/interfaces/GenericConfig.html | 20 +- typedoc/interfaces/GestureConfig.html | 8 +- typedoc/interfaces/HandConfig.html | 48 +- typedoc/interfaces/HandResult.html | 44 +- typedoc/interfaces/ModelInfo.html | 14 +- typedoc/interfaces/ObjectConfig.html | 32 +- typedoc/interfaces/ObjectResult.html | 28 +- typedoc/interfaces/PersonResult.html | 32 +- typedoc/interfaces/Result.html | 52 +- typedoc/interfaces/SegmentationConfig.html | 28 +- typedoc/interfaces/WebCamConfig.html | 32 +- typedoc/interfaces/models.KernelOps.html | 10 +- typedoc/interfaces/models.ModelStats.html | 18 +- typedoc/modules/Tensor.html | 4 +- typedoc/modules/draw.html | 24 +- typedoc/modules/match.html | 14 +- typedoc/modules/models.html | 12 +- typedoc/types/AnyCanvas.html | 4 +- typedoc/types/AnyImage.html | 4 +- typedoc/types/AnyVideo.html | 4 +- typedoc/types/BackendEnum.html | 4 +- typedoc/types/BodyAnnotation.html | 2 +- typedoc/types/BodyAnnotationBlazePose.html | 2 +- .../types/BodyAnnotationEfficientPose.html | 2 +- typedoc/types/BodyGesture.html | 4 +- typedoc/types/BodyLandmark.html | 2 +- typedoc/types/BodyLandmarkBlazePose.html | 2 +- typedoc/types/BodyLandmarkEfficientNet.html | 2 +- typedoc/types/BodyLandmarkMoveNet.html | 2 +- typedoc/types/BodyLandmarkPoseNet.html | 2 +- typedoc/types/Box.html | 4 +- typedoc/types/Emotion.html | 2 +- typedoc/types/Events.html | 4 +- typedoc/types/ExternalCanvas.html | 4 +- typedoc/types/FaceGesture.html | 4 +- typedoc/types/FaceLandmark.html | 2 +- typedoc/types/Finger.html | 2 +- typedoc/types/FingerCurl.html | 2 +- typedoc/types/FingerDirection.html | 2 +- typedoc/types/Gender.html | 2 +- typedoc/types/GestureResult.html | 4 +- typedoc/types/HandGesture.html | 4 +- typedoc/types/HandType.html | 2 +- typedoc/types/ImageObjects.html | 4 +- typedoc/types/Input.html | 4 +- typedoc/types/IrisGesture.html | 4 +- typedoc/types/ObjectType.html | 2 +- typedoc/types/Point.html | 4 +- typedoc/types/Race.html | 2 +- typedoc/types/SegmentationEnum.html | 4 +- typedoc/types/Tensor1D.html | 4 +- typedoc/types/Tensor2D.html | 4 +- typedoc/types/Tensor3D.html | 4 +- typedoc/types/Tensor4D.html | 4 +- typedoc/types/TensorLike.html | 4 +- typedoc/types/WarmupEnum.html | 4 +- typedoc/types/match.Descriptor.html | 4 +- typedoc/types/match.MatchOptions.html | 2 +- typedoc/variables/defaults.html | 4 +- typedoc/variables/draw.options.html | 4 +- typedoc/variables/env-1.html | 2 +- 119 files changed, 16130 insertions(+), 17137 deletions(-) create mode 100644 typedoc/assets/icons.js create mode 100644 typedoc/assets/icons.svg create mode 100644 typedoc/hierarchy.html diff --git a/CHANGELOG.md b/CHANGELOG.md index cd15cc83..de6f39ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # @vladmandic/human - Version: **3.2.1** + Version: **3.2.2** Description: **Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition** Author: **Vladimir Mandic ** @@ -9,10 +9,13 @@ ## Changelog -### **3.2.1** 2024/02/15 mandic00@live.com +### **3.2.2** 2024/04/17 mandic00@live.com + +### **release: 3.2.1** 2024/02/15 mandic00@live.com -### **origin/main** 2023/12/06 mandic00@live.com + +### **3.2.1** 2024/02/15 mandic00@live.com ### **3.2.0** 2023/12/06 mandic00@live.com diff --git a/dist/human.esm-nobundle.js b/dist/human.esm-nobundle.js index 12ae17b4..d60aa3c3 100644 --- a/dist/human.esm-nobundle.js +++ b/dist/human.esm-nobundle.js @@ -4,7 +4,7 @@ author: ' */ -var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Object.getOwnPropertyNames;var $n=Object.prototype.hasOwnProperty;var eo=(e,t,n)=>t in e?at(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t)=>{for(var n in t)at(e,n,{get:t[n],enumerable:!0})},X5=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _n(t))!$n.call(e,s)&&s!==n&&at(e,s,{get:()=>t[s],enumerable:!(o=Qn(t,s))||o.enumerable});return e},w=(e,t,n)=>(X5(e,t,"default"),n&&X5(n,t,"default"));var z=(e,t,n)=>(eo(e,typeof t!="symbol"?t+"":t,n),n),q5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var E0=(e,t,n)=>(q5(e,t,"read from private field"),n?n.call(e):t.get(e)),q0=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Q0=(e,t,n,o)=>(q5(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var r={};oe(r,{node:()=>it,version:()=>Je});w(r,vA);w(r,RA);w(r,MA);w(r,PA);w(r,kA);w(r,wA);import*as vA from"@tensorflow/tfjs-core/dist/index.js";import*as RA from"@tensorflow/tfjs-converter/dist/index.js";import*as MA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as PA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as kA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as wA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var U5="4.17.0",to="4.17.0",no="4.17.0",oo="4.17.0",ro="4.17.0",so="4.14.0",Je={tfjs:U5,"tfjs-core":U5,"tfjs-converter":to,"tfjs-backend-cpu":no,"tfjs-backend-webgl":oo,"tfjs-backend-wasm":ro,"tfjs-backend-webgpu":so},it=void 0;function b(...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)}function Y5(e,t){let n=e.endsWith("/")?"":"/",s=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!s.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${s}`);return s}var R=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function lt(e,t,n="config",o=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")lt(e[s],t[s],s,o);else{let A=e&&typeof e[s]!="undefined";A||o.push({reason:"unknown property",where:`${n}.${s} = ${t[s]}`});let a=e&&typeof e[s]==typeof t[s];A&&!a&&o.push({reason:"property type mismatch",where:`${n}.${s} = ${t[s]}`,expected:typeof e[s]})}return t.debug&&n==="config"&&o.length>0&&b("invalid configuration",o),o}function Q(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(s=>{let A=n[s],a=o[s];Array.isArray(A)&&Array.isArray(a)?n[s]=A.concat(...a):t(A)&&t(a)?n[s]=Q(A,a):n[s]=a}),n),{})}var Ce={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var K5=` +var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Object.getOwnPropertyNames;var $n=Object.prototype.hasOwnProperty;var eo=(e,t,n)=>t in e?at(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var oe=(e,t)=>{for(var n in t)at(e,n,{get:t[n],enumerable:!0})},X5=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _n(t))!$n.call(e,s)&&s!==n&&at(e,s,{get:()=>t[s],enumerable:!(o=Qn(t,s))||o.enumerable});return e},w=(e,t,n)=>(X5(e,t,"default"),n&&X5(n,t,"default"));var z=(e,t,n)=>(eo(e,typeof t!="symbol"?t+"":t,n),n),q5=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var E0=(e,t,n)=>(q5(e,t,"read from private field"),n?n.call(e):t.get(e)),q0=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Q0=(e,t,n,o)=>(q5(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var r={};oe(r,{node:()=>it,version:()=>Je});w(r,vA);w(r,RA);w(r,MA);w(r,PA);w(r,kA);w(r,wA);import*as vA from"@tensorflow/tfjs-core/dist/index.js";import*as RA from"@tensorflow/tfjs-converter/dist/index.js";import*as MA from"@tensorflow/tfjs-backend-cpu/dist/index.js";import*as PA from"@tensorflow/tfjs-backend-webgl/dist/index.js";import*as kA from"@tensorflow/tfjs-backend-wasm/dist/index.js";import*as wA from"@tensorflow/tfjs-backend-webgpu/dist/index.js";var U5="4.17.0",to="4.17.0",no="4.17.0",oo="4.17.0",ro="4.17.0",so="4.17.0",Je={tfjs:U5,"tfjs-core":U5,"tfjs-converter":to,"tfjs-backend-cpu":no,"tfjs-backend-webgl":oo,"tfjs-backend-wasm":ro,"tfjs-backend-webgpu":so},it=void 0;function b(...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)}function Y5(e,t){let n=e.endsWith("/")?"":"/",s=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!s.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${s}`);return s}var R=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function lt(e,t,n="config",o=[]){for(let s of Object.keys(t))if(typeof t[s]=="object")lt(e[s],t[s],s,o);else{let A=e&&typeof e[s]!="undefined";A||o.push({reason:"unknown property",where:`${n}.${s} = ${t[s]}`});let a=e&&typeof e[s]==typeof t[s];A&&!a&&o.push({reason:"property type mismatch",where:`${n}.${s} = ${t[s]}`,expected:typeof e[s]})}return t.debug&&n==="config"&&o.length>0&&b("invalid configuration",o),o}function Q(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(s=>{let A=n[s],a=o[s];Array.isArray(A)&&Array.isArray(a)?n[s]=A.concat(...a):t(A)&&t(a)?n[s]=Q(A,a):n[s]=a}),n),{})}var Ce={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var K5=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var ct=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(s,A)=>(n[A]=0,s))},dt=class{constructor(t,n,o){z(this,"uniform",{});z(this,"attribute",{});z(this,"gl");z(this,"id");z(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(b(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(b("filter: could not create shader"),null)});this.gl=t;let s=this.compile(n,this.gl.VERTEX_SHADER),A=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!s||!A)){if(!this.id){b("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,s),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){b(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),ct(n,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);ct(n,"uniform",this.uniform),ct(o,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function t1(){let e=0,t=null,n=!1,o=-1,s=[null,null],A=[],a=null,i=null,c=D0(100,100),d={},y={INTERMEDIATE:1},l=c.getContext("webgl");if(!l){b("filter: cannot get webgl context");return}this.gl=l;function f(v,u){if(!(v===c.width&&u===c.height)){if(c.width=v,c.height=u,!a){let g=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]);a=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,a),l.bufferData(l.ARRAY_BUFFER,g,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,c.width,c.height),s=[null,null]}}function x(v,u){let g=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,g);let E=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,E);let k=l.createTexture();return l.bindTexture(l.TEXTURE_2D,k),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,v,u,0,l.RGBA,l.UNSIGNED_BYTE,null),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,k,0),l.bindTexture(l.TEXTURE_2D,null),l.bindFramebuffer(l.FRAMEBUFFER,null),{fbo:g,texture:k}}function p(v){return s[v]=s[v]||x(c.width,c.height),s[v]}function m(v=0){if(!i)return;let u=null,g=null,E=!1;e===0?u=t:u=p(o).texture||null,e++,n&&!(v&y.INTERMEDIATE)?(g=null,E=e%2===0):(o=(o+1)%2,g=p(o).fbo||null),l.bindTexture(l.TEXTURE_2D,u),l.bindFramebuffer(l.FRAMEBUFFER,g),l.uniform1f(i.uniform.flipY,E?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function h(v){if(d[v])return i=d[v],l.useProgram((i?i.id:null)||null),i;if(i=new dt(l,K5,v),!i)return b("filter: could not get webgl program"),null;let u=Float32Array.BYTES_PER_ELEMENT,g=4*u;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,g,0*u),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,g,2*u),d[v]=i,i}let T={colorMatrix:v=>{let u=new Float32Array(v);u[4]/=255,u[9]/=255,u[14]/=255,u[19]/=255;let g=u[18]===1&&u[3]===0&&u[8]===0&&u[13]===0&&u[15]===0&&u[16]===0&&u[17]===0&&u[19]===0?Q5:J5,E=h(g);E&&(l.uniform1fv(E.uniform.m,u),m())},brightness:v=>{let u=(v||0)+1;T.colorMatrix([u,0,0,0,0,0,u,0,0,0,0,0,u,0,0,0,0,0,1,0])},saturation:v=>{let u=(v||0)*2/3+1,g=(u-1)*-.5;T.colorMatrix([u,g,g,0,0,g,u,g,0,0,g,g,u,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:v=>{let u=(v||0)+1,g=-128*(u-1);T.colorMatrix([u,0,0,0,g,0,u,0,0,g,0,0,u,0,g,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:v=>{v=(v||0)/180*Math.PI;let u=Math.cos(v),g=Math.sin(v),E=.213,k=.715,N=.072;T.colorMatrix([E+u*(1-E)+g*-E,k+u*-k+g*-k,N+u*-N+g*(1-N),0,0,E+u*-E+g*.143,k+u*(1-k)+g*.14,N+u*-N+g*-.283,0,0,E+u*-E+g*-(1-E),k+u*-k+g*k,N+u*(1-N)+g*N,0,0,0,0,0,1,0])},desaturateLuminance:()=>{T.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{T.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{T.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{T.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{T.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])},technicolor:()=>{T.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])},polaroid:()=>{T.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{T.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:v=>{let u=new Float32Array(v),g=1/c.width,E=1/c.height,k=h(e1);k&&(l.uniform1fv(k.uniform.m,u),l.uniform2f(k.uniform.px,g,E),m())},detectEdges:()=>{T.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{T.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{T.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:v=>{let u=v||1;T.convolution.call(this,[0,-1*u,0,-1*u,1+4*u,-1*u,0,-1*u,0])},emboss:v=>{let u=v||1;T.convolution.call(this,[-2*u,-1*u,0,-1*u,1,1*u,0,1*u,2*u])},blur:v=>{let u=v/7/c.width,g=v/7/c.height,E=h($5);E&&(l.uniform2f(E.uniform.px,0,g),m(y.INTERMEDIATE),l.uniform2f(E.uniform.px,u,0),m())},pixelate:v=>{let u=v/c.width,g=v/c.height,E=h(_5);E&&(l.uniform2f(E.uniform.size,u,g),m())}};this.add=function(v){let u=Array.prototype.slice.call(arguments,1),g=T[v];A.push({func:g,args:u})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(v){f(v.width,v.height),e=0,t||(t=l.createTexture()),l.bindTexture(l.TEXTURE_2D,t),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,v);for(let u=0;uy.data())),a=Math.max(A[0][0],A[1][0],A[2][0]),c=(a>1?255:1)/a,d;if(c>1){let y=[r.sub(n[0],o[0]),r.sub(n[1],o[1]),r.sub(n[2],o[2])],l=[r.sub(s[0],o[0]),r.sub(s[1],o[1]),r.sub(s[2],o[2])],f=[r.mul(y[0],c),r.mul(y[1],c),r.mul(y[2],c)],x=r.stack([f[0],f[1],f[2]],2);d=r.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),r.dispose([...y,...l,...f,x])}else d=r.expandDims(t,0);return r.dispose([...n,...o,...s,n,t,e]),d}var x2=3840,l0=null,c0=null,We=null,X,L0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function xt(){L0.inputSum=0,L0.cacheDiff=1,L0.sumMethod=0,L0.inputTensor=void 0}function D0(e,t){let n;if(M.browser)if(M.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof M.Canvas!="undefined")n=new M.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof M.Canvas!="undefined"?n=new M.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function y2(e,t){let n=t||D0(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function f2(e,t,n=!0){var f,x,p;if(!e)return t.debug&&b("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof r.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof r.Tensor){let m=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)m=r.expandDims(e,0);else if(e.shape[2]===4){let h=r.slice3d(e,[0,0,0],[-1,-1,3]);m=r.expandDims(h,0),r.dispose(h)}}else e.shape.length===4&&(e.shape[3]===3?m=r.clone(e):e.shape[3]===4&&(m=r.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(m==null||m.shape.length!==4||m.shape[0]!==1||m.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(m.dtype==="int32"){let h=r.cast(m,"float32");r.dispose(m),m=h}return{tensor:m,canvas:t.filter.return?c0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&b("input stream is not ready"),{tensor:null,canvas:l0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,s=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!s)return t.debug&&b("cannot determine input dimensions"),{tensor:null,canvas:l0};let A=o,a=s;if(A>x2&&(A=x2,a=Math.trunc(A*s/o)),a>x2&&(a=x2,A=Math.trunc(a*o/s)),(((f=t.filter)==null?void 0:f.width)||0)>0?A=t.filter.width:(((x=t.filter)==null?void 0:x.height)||0)>0&&(A=o*((t.filter.height||0)/s)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=s*((t.filter.width||0)/o)),!A||!a)throw new Error("input error: cannot determine dimension");(!l0||l0.width!==A||l0.height!==a)&&(l0=D0(A,a));let i=l0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(o,0),i.scale(-1,1),i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),(!c0||l0.width!==c0.width||l0.height!==c0.height)&&(c0=D0(l0.width,l0.height)),t.filter.enabled&&M.webgl.supported?(X||(X=M.browser?new t1:null),M.filter=!!X,X!=null&&X.add?(X.reset(),t.filter.brightness!==0&&X.add("brightness",t.filter.brightness),t.filter.contrast!==0&&X.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&X.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&X.add("blur",t.filter.blur),t.filter.saturation!==0&&X.add("saturation",t.filter.saturation),t.filter.hue!==0&&X.add("hue",t.filter.hue),t.filter.negative&&X.add("negative"),t.filter.sepia&&X.add("sepia"),t.filter.vintage&&X.add("brownie"),t.filter.sepia&&X.add("sepia"),t.filter.kodachrome&&X.add("kodachrome"),t.filter.technicolor&&X.add("technicolor"),t.filter.polaroid&&X.add("polaroid"),t.filter.pixelate!==0&&X.add("pixelate",t.filter.pixelate),((p=X.get())==null?void 0:p.length)>1?c0=X.apply(l0):c0=X.draw(l0)):(t.debug&&b("input process error: cannot initialize filters"),M.webgl.supported=!1,t.filter.enabled=!1,y2(l0,c0))):(y2(l0,c0),X&&(X=null),M.filter=!!X),!n)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let c,d=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(M.browser&&r.browser)c=r.browser?r.browser.fromPixels(e):null;else{d=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);c=r.tensor(m,[e.height,e.width,d],"int32")}else if((!We||c0.width!==We.width||c0.height!==We.height)&&(We=D0(c0.width,c0.height)),r.browser&&M.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?c=r.browser.fromPixels(c0):(We=y2(c0),c=r.browser.fromPixels(We));else{let T=y2(c0).getContext("2d").getImageData(0,0,A,a);d=T.data.length/A/a;let v=new Uint8Array(T.data.buffer);c=r.tensor(v,[A,a,d])}if(d===4){let m=r.slice3d(c,[0,0,0],[-1,-1,3]);r.dispose(c),c=m}if(!c)throw new Error("input error: cannot create tensor");let y=r.cast(c,"float32"),l=t.filter.equalization?await d2(y):r.expandDims(y,0);if(r.dispose([c,y]),t.filter.autoBrightness){let m=r.max(l),h=await m.data();t.filter.brightness=h[0]>1?1-h[0]/255:1-h[0],r.dispose(m)}return{tensor:l,canvas:t.filter.return?c0:null}}async function n1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!L0.inputTensor)L0.inputTensor=r.clone(t);else if(L0.inputTensor.shape[1]!==t.shape[1]||L0.inputTensor.shape[2]!==t.shape[2])r.dispose(L0.inputTensor),L0.inputTensor=r.clone(t);else{let o={};o.diff=r.sub(t,L0.inputTensor),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;r.dispose([L0.inputTensor,o.diff,o.squared,o.sum]),L0.inputTensor=r.clone(t),n=A<=(e.cacheSensitivity||0)}return n}async function o1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||b("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||b("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=r.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?r.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):r.clone(n),o.diff=r.sub(o.input1,o.input2),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return r.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),A}var Qe,_e,$e,p2=class{constructor(){z(this,"browser");z(this,"node");z(this,"worker");z(this,"platform","");z(this,"agent","");z(this,"backends",[]);z(this,"initial");z(this,"filter");z(this,"tfjs");z(this,"offscreen");z(this,"perfadd",!1);z(this,"tensorflow",{version:void 0,gpu:void 0});z(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});z(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});z(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});z(this,"cpu",{model:void 0,flags:[]});z(this,"kernels",[]);q0(this,Qe,void 0);q0(this,_e,void 0);q0(this,$e,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Je["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return E0(this,Qe)}set Canvas(t){Q0(this,Qe,t),globalThis.Canvas=t}get Image(){return E0(this,_e)}set Image(t){Q0(this,_e,t),globalThis.Image=t}get ImageData(){return E0(this,$e)}set ImageData(t){Q0(this,$e,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(r.engine().registryFactory);try{this.tensorflow={version:r.backend().binding?r.backend().binding.TF_Version:void 0,gpu:r.backend().binding?r.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=D0(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=r.getKernelsForBackend(r.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};Qe=new WeakMap,_e=new WeakMap,$e=new WeakMap;var M=new p2;var u2=class{constructor(){z(this,"config");z(this,"element");z(this,"stream");z(this,"devices",[]);z(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});z(this,"start",async t=>{var s,A;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let a=document.getElementById(t.element);if(a&&a instanceof HTMLVideoElement)this.element=a;else return this.config.debug&&b("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&b("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((s=this.config)==null?void 0:s.width)>0&&(n.video.width={ideal:this.config.width}),((A=this.config)==null?void 0:A.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&b("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&b("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&b("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(a){return b("webcam",a),`webcam error: ${a}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(a=>{this.element?this.element.onloadeddata=()=>a(!0):a(!1)}),await this.element.play(),this.config.debug&&b("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&b("webcam error","no stream"),"webcam error no stream")});z(this,"pause",()=>{this.element&&this.element.pause()});z(this,"play",async()=>{this.element&&await this.element.play()});z(this,"stop",()=>{this.config.debug&&b("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var yt={};oe(yt,{"affectnet-mobilenet":()=>vo,age:()=>Ro,"anti-spoofing":()=>tr,antispoof:()=>lo,blazeface:()=>co,"blazeface-back":()=>Mo,"blazeface-front":()=>Po,"blazepose-detector":()=>ko,"blazepose-full":()=>wo,"blazepose-heavy":()=>Eo,"blazepose-lite":()=>zo,centernet:()=>xo,default:()=>fr,efficientpose:()=>So,"efficientpose-i-lite":()=>nr,"efficientpose-ii-lite":()=>or,"efficientpose-iv":()=>rr,emotion:()=>yo,faceboxes:()=>jo,facemesh:()=>fo,"facemesh-attention":()=>No,"facemesh-attention-pinto":()=>Io,"facemesh-detection-full":()=>Lo,"facemesh-detection-short":()=>Oo,faceres:()=>mo,"faceres-deep":()=>Co,gear:()=>Fo,"gear-e1":()=>Wo,"gear-e2":()=>Do,gender:()=>Ho,"gender-ssrnet-imdb":()=>Bo,handdetect:()=>Go,"handlandmark-full":()=>Vo,"handlandmark-lite":()=>po,"handlandmark-sparse":()=>Zo,handskeleton:()=>Xo,handtrack:()=>uo,"insightface-efficientnet-b0":()=>sr,"insightface-ghostnet-strides1":()=>Ar,"insightface-ghostnet-strides2":()=>ar,"insightface-mobilenet-emore":()=>ir,"insightface-mobilenet-swish":()=>lr,iris:()=>ho,liveness:()=>bo,meet:()=>qo,mobileface:()=>Uo,mobilefacenet:()=>Yo,models:()=>go,"movenet-lightning":()=>To,"movenet-multipose":()=>Ko,"movenet-thunder":()=>Jo,nanodet:()=>Qo,"nanodet-e":()=>cr,"nanodet-g":()=>dr,"nanodet-m":()=>xr,"nanodet-t":()=>yr,posenet:()=>_o,rvm:()=>$o,selfie:()=>er});var lo=853098,co=538928,xo=4030290,yo=820516,fo=1477958,mo=6978814,po=2023432,uo=2964837,ho=2599092,bo=592976,go=0,To=4650216,vo=6920630,Ro=161240,Mo=538928,Po=402048,ko=5928856,wo=6339202,Eo=27502466,zo=2726402,So=5651240,jo=2013002,Io=2387598,No=2382414,Lo=1026192,Oo=201268,Co=13957620,Wo=112438,Do=112438,Fo=1498916,Bo=161236,Ho=201808,Go=3515612,Vo=5431368,Zo=5286322,Xo=5502280,qo=372228,Uo=2183192,Yo=5171976,Ko=9448838,Jo=12477112,Qo=7574558,_o=5032780,$o=3739355,er=212886,tr=853098,nr=2269064,or=5651240,rr=25643252,sr=13013224,Ar=8093408,ar=8049584,ir=6938536,lr=12168584,cr=12319156,dr=7574558,xr=1887474,yr=5294216,fr={antispoof:lo,blazeface:co,centernet:xo,emotion:yo,facemesh:fo,faceres:mo,"handlandmark-lite":po,handtrack:uo,iris:ho,liveness:bo,models:go,"movenet-lightning":To,"affectnet-mobilenet":vo,age:Ro,"blazeface-back":Mo,"blazeface-front":Po,"blazepose-detector":ko,"blazepose-full":wo,"blazepose-heavy":Eo,"blazepose-lite":zo,efficientpose:So,faceboxes:jo,"facemesh-attention-pinto":Io,"facemesh-attention":No,"facemesh-detection-full":Lo,"facemesh-detection-short":Oo,"faceres-deep":Co,"gear-e1":Wo,"gear-e2":Do,gear:Fo,"gender-ssrnet-imdb":Bo,gender:Ho,handdetect:Go,"handlandmark-full":Vo,"handlandmark-sparse":Zo,handskeleton:Xo,meet:qo,mobileface:Uo,mobilefacenet:Yo,"movenet-multipose":Ko,"movenet-thunder":Jo,nanodet:Qo,posenet:_o,rvm:$o,selfie:er,"anti-spoofing":tr,"efficientpose-i-lite":nr,"efficientpose-ii-lite":or,"efficientpose-iv":rr,"insightface-efficientnet-b0":sr,"insightface-ghostnet-strides1":Ar,"insightface-ghostnet-strides2":ar,"insightface-mobilenet-emore":ir,"insightface-mobilenet-swish":lr,"nanodet-e":cr,"nanodet-g":dr,"nanodet-m":xr,"nanodet-t":yr};var T0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},p0={};async function mr(e,t){return T0.debug&&b("load model fetch:",e,t),fetch(e,t)}function r1(e){T0.cacheModels=e.cacheModels,T0.verbose=e.debug,T0.modelBasePath=e.modelBasePath}async function L(e){var d,y,l,f;let t=Y5(T0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),s="indexeddb://"+o;p0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:yt[o],inCache:!1,url:""},T0.cacheSupported=typeof indexedDB!="undefined";let A={};try{A=T0.cacheSupported&&T0.cacheModels?await r.io.listModels():{}}catch(x){T0.cacheSupported=!1}p0[o].inCache=T0.cacheSupported&&T0.cacheModels&&Object.keys(A).includes(s),p0[o].url=p0[o].inCache?s:t;let a=typeof fetch=="undefined"?{}:{fetchFunc:(x,p)=>mr(x,p)},i=new r.GraphModel(p0[o].url,a),c=!1;try{i.findIOHandler(),T0.debug&&b("model load handler:",i.handler)}catch(x){b("error finding model i/o handler:",t,x)}try{let x=await((d=i.handler)==null?void 0:d.load())||null;p0[o].sizeFromManifest=((y=x==null?void 0:x.weightData)==null?void 0:y.byteLength)||0,x?i.loadSync(x):i=await r.loadGraphModel(p0[o].inCache?s:t,a),p0[o].sizeLoadedWeights=((f=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:f.byteLength)||0,T0.verbose&&b("load:",{model:o,url:i.modelUrl,bytes:p0[o].sizeLoadedWeights}),c=!0}catch(x){b("error loading model:",t,x)}if(c&&T0.cacheModels&&T0.cacheSupported&&!p0[o].inCache)try{let x=await i.save(s);T0.debug&&b("model saved:",s,x)}catch(x){b("error saving model:",t,x)}return i}var ft="3.2.1";var Y={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function hr(){let e=Y.gl;e&&(Y.extensions=e.getSupportedExtensions())}function s1(e){var t;if(e.config.backend==="humangl"&&(Y.name in r.engine().registry&&!((t=Y==null?void 0:Y.gl)!=null&&t.getParameter(Y.gl.VERSION))&&(b("humangl error: backend invalid context"),e.models.reset()),!r.findBackend(Y.name))){try{Y.canvas=D0(100,100)}catch(s){b("humangl error: cannot create canvas:",s);return}try{if(Y.gl=Y.canvas.getContext("webgl2",Y.webGLattr),!Y.gl){b("humangl error: cannot get webgl context");return}if(!Y.gl.getParameter(Y.gl.VERSION).includes("2.0")){b("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Y.canvas&&(Y.canvas.addEventListener("webglcontextlost",A=>{throw b("humangl error:",A.type),b("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Y.canvas.addEventListener("webglcontextrestored",A=>{b("humangl error: context restored:",A)}),Y.canvas.addEventListener("webglcontextcreationerror",A=>{b("humangl error: context create:",A)}))}catch(s){b("humangl error: cannot get webgl context:",s);return}try{r.setWebGLContext(2,Y.gl)}catch(s){b("humangl error: cannot set webgl context:",s);return}try{let s=new r.GPGPUContext(Y.gl);r.registerBackend(Y.name,()=>new r.MathBackendWebGL(s),Y.priority)}catch(s){b("humangl error: cannot register webgl backend:",s);return}try{r.getKernelsForBackend("webgl").forEach(A=>{let a={...A,backendName:Y.name};r.registerKernel(a)})}catch(s){b("humangl error: cannot update webgl backend registration:",s);return}try{r.env().flagRegistry.WEBGL_VERSION&&r.env().set("WEBGL_VERSION",2)}catch(s){b("humangl error: cannot set WebGL backend flags:",s);return}hr();let n=r.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&b("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):b("humangl error: no current gl context:",o,Y.gl)}}var O={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function A1(){O.tf255=r.scalar(255,"float32"),O.tf1=r.scalar(1,"float32"),O.tf2=r.scalar(2,"float32"),O.tf05=r.scalar(.5,"float32"),O.tf127=r.scalar(127.5,"float32"),O.rgb=r.tensor1d([.2989,.587,.114],"float32")}async function Tr(){var e;return await M.updateBackend(),(e=M.tensorflow)!=null&&e.version?"tensorflow":M.webgpu.supported&&M.webgpu.backend?"webgpu":M.webgl.supported&&M.webgl.backend?"webgl":M.wasm.supported&&M.wasm.backend?"wasm":"cpu"}function vr(e){let t=[];if(!M.kernels.includes("mod")){let n={kernelName:"Mod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.sub(o.inputs.a,r.mul(r.div(o.inputs.a,o.inputs.b),o.inputs.b)))};r.registerKernel(n),M.kernels.push("mod"),t.push("mod")}if(!M.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.add(r.mul(r.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),r.mod(o.inputs.a,o.inputs.b)))};r.registerKernel(n),M.kernels.push("floormod"),t.push("floormod")}if(!M.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>{let s=r.getBackend();r.setBackend("cpu");let A=r.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return r.setBackend(s),A})};r.registerKernel(n),M.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&b("registered kernels:",t)}var a1={};async function e2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await Tr()),t||M.initial||e.config.backend&&e.config.backend.length>0&&r.getBackend()!==e.config.backend){let s=R();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&b("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&b("running inside electron");let A=Object.keys(r.engine().registryFactory);if(e.config.backend==="humangl"&&!A.includes("humangl")&&(s1(e),A=Object.keys(r.engine().registryFactory)),e.config.debug&&b("available backends:",A),M.browser&&!M.node&&e.config.backend==="tensorflow"&&A.includes("webgl")&&(e.config.debug&&b("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),M.node&&!M.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&A.includes("tensorflow")&&(e.config.debug&&b(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),M.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")b("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let a=await navigator.gpu.requestAdapter();if(e.config.debug&&b("enumerated webgpu adapter:",a),!a)b("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let i="requestAdapterInfo"in a?await a.requestAdapterInfo():void 0;b("webgpu adapter info:",i)}}if(A.includes(e.config.backend)||(b(`error: backend ${e.config.backend} not found in registry`),e.config.backend=M.node?"tensorflow":"webgl",e.config.debug&&b(`override: setting backend ${e.config.backend}`)),e.config.debug&&b("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(r.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&r.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&b("wasm path:",e.config.wasmPath),typeof r.setWasmPaths!="undefined")r.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let a=!1,i=!1;try{a=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&b(`wasm execution: ${i?"simd":"no simd"} ${a?"multithreaded":"singlethreaded"}`),e.config.debug&&!i&&b("warning: wasm simd support is not enabled")}catch(c){b("wasm detection failed")}}try{await r.setBackend(e.config.backend),await r.ready()}catch(a){return b("error: cannot set backend:",e.config.backend,a),!1}e.config.debug&&(a1=JSON.parse(JSON.stringify(r.env().flags)))}if((r.getBackend()==="humangl"||r.getBackend()==="webgl")&&(r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),r.env().flagRegistry.WEBGL_EXP_CONV&&r.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(b("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),r.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),r.getBackend(),e.config.debug){let A=r.env().flags,a={};for(let i of Object.keys(A))a1[i]!==A[i]&&(a[i]=A[i]);e.config.debug&&Object.keys(a).length>0&&b("backend:",r.getBackend(),"flags:",a)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&b("flags:",e.config.flags);for(let[A,a]of Object.entries(e.config.flags))r.env().set(A,a)}r.enableProdMode(),A1(),e.performance.initBackend=Math.trunc(R()-s),e.config.backend=r.getBackend(),await M.updateBackend(),vr(e.config)}return!0}function h2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:s=>{var A;return t.debug&&b("kernelFunc",n,t.backend,s),(A=s==null?void 0:s.inputs)==null?void 0:A.info}};r.registerKernel(o)}M.kernels=r.getKernelsForBackend(r.getBackend()).map(n=>n.kernelName.toLowerCase())}var vt={};oe(vt,{all:()=>$r,body:()=>g2,canvas:()=>_r,face:()=>b2,gesture:()=>R2,hand:()=>T2,init:()=>Tt,object:()=>v2,options:()=>n0,person:()=>Qr});var O0=e=>{if(!e)b("draw error: invalid canvas");else if(!e.getContext)b("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)b("draw error: cannot get canvas context");else return t}return null},ge=e=>Math.round(e*180/Math.PI),H=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Te=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function C0(e,t,n,o,s){let A=t.replace(/\[.*\]/g,"").split(` +`;var ct=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(s,A)=>(n[A]=0,s))},dt=class{constructor(t,n,o){z(this,"uniform",{});z(this,"attribute",{});z(this,"gl");z(this,"id");z(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(b(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(b("filter: could not create shader"),null)});this.gl=t;let s=this.compile(n,this.gl.VERTEX_SHADER),A=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!s||!A)){if(!this.id){b("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,s),this.gl.attachShader(this.id,A),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){b(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),ct(n,"attribute",this.attribute);for(let a in this.attribute)this.attribute[a]=this.gl.getAttribLocation(this.id,a);ct(n,"uniform",this.uniform),ct(o,"uniform",this.uniform);for(let a in this.uniform)this.uniform[a]=this.gl.getUniformLocation(this.id,a)}}};function t1(){let e=0,t=null,n=!1,o=-1,s=[null,null],A=[],a=null,i=null,c=D0(100,100),d={},y={INTERMEDIATE:1},l=c.getContext("webgl");if(!l){b("filter: cannot get webgl context");return}this.gl=l;function f(v,u){if(!(v===c.width&&u===c.height)){if(c.width=v,c.height=u,!a){let g=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]);a=l.createBuffer(),l.bindBuffer(l.ARRAY_BUFFER,a),l.bufferData(l.ARRAY_BUFFER,g,l.STATIC_DRAW),l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}l.viewport(0,0,c.width,c.height),s=[null,null]}}function x(v,u){let g=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,g);let E=l.createRenderbuffer();l.bindRenderbuffer(l.RENDERBUFFER,E);let k=l.createTexture();return l.bindTexture(l.TEXTURE_2D,k),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,v,u,0,l.RGBA,l.UNSIGNED_BYTE,null),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.LINEAR),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,k,0),l.bindTexture(l.TEXTURE_2D,null),l.bindFramebuffer(l.FRAMEBUFFER,null),{fbo:g,texture:k}}function p(v){return s[v]=s[v]||x(c.width,c.height),s[v]}function m(v=0){if(!i)return;let u=null,g=null,E=!1;e===0?u=t:u=p(o).texture||null,e++,n&&!(v&y.INTERMEDIATE)?(g=null,E=e%2===0):(o=(o+1)%2,g=p(o).fbo||null),l.bindTexture(l.TEXTURE_2D,u),l.bindFramebuffer(l.FRAMEBUFFER,g),l.uniform1f(i.uniform.flipY,E?-1:1),l.drawArrays(l.TRIANGLES,0,6)}function h(v){if(d[v])return i=d[v],l.useProgram((i?i.id:null)||null),i;if(i=new dt(l,K5,v),!i)return b("filter: could not get webgl program"),null;let u=Float32Array.BYTES_PER_ELEMENT,g=4*u;return l.enableVertexAttribArray(i.attribute.pos),l.vertexAttribPointer(i.attribute.pos,2,l.FLOAT,!1,g,0*u),l.enableVertexAttribArray(i.attribute.uv),l.vertexAttribPointer(i.attribute.uv,2,l.FLOAT,!1,g,2*u),d[v]=i,i}let T={colorMatrix:v=>{let u=new Float32Array(v);u[4]/=255,u[9]/=255,u[14]/=255,u[19]/=255;let g=u[18]===1&&u[3]===0&&u[8]===0&&u[13]===0&&u[15]===0&&u[16]===0&&u[17]===0&&u[19]===0?Q5:J5,E=h(g);E&&(l.uniform1fv(E.uniform.m,u),m())},brightness:v=>{let u=(v||0)+1;T.colorMatrix([u,0,0,0,0,0,u,0,0,0,0,0,u,0,0,0,0,0,1,0])},saturation:v=>{let u=(v||0)*2/3+1,g=(u-1)*-.5;T.colorMatrix([u,g,g,0,0,g,u,g,0,0,g,g,u,0,0,0,0,0,1,0])},desaturate:()=>{T.saturation(-1)},contrast:v=>{let u=(v||0)+1,g=-128*(u-1);T.colorMatrix([u,0,0,0,g,0,u,0,0,g,0,0,u,0,g,0,0,0,1,0])},negative:()=>{T.contrast(-2)},hue:v=>{v=(v||0)/180*Math.PI;let u=Math.cos(v),g=Math.sin(v),E=.213,k=.715,N=.072;T.colorMatrix([E+u*(1-E)+g*-E,k+u*-k+g*-k,N+u*-N+g*(1-N),0,0,E+u*-E+g*.143,k+u*(1-k)+g*.14,N+u*-N+g*-.283,0,0,E+u*-E+g*-(1-E),k+u*-k+g*k,N+u*(1-N)+g*N,0,0,0,0,0,1,0])},desaturateLuminance:()=>{T.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{T.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{T.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{T.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{T.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])},technicolor:()=>{T.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])},polaroid:()=>{T.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{T.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:v=>{let u=new Float32Array(v),g=1/c.width,E=1/c.height,k=h(e1);k&&(l.uniform1fv(k.uniform.m,u),l.uniform2f(k.uniform.px,g,E),m())},detectEdges:()=>{T.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{T.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{T.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:v=>{let u=v||1;T.convolution.call(this,[0,-1*u,0,-1*u,1+4*u,-1*u,0,-1*u,0])},emboss:v=>{let u=v||1;T.convolution.call(this,[-2*u,-1*u,0,-1*u,1,1*u,0,1*u,2*u])},blur:v=>{let u=v/7/c.width,g=v/7/c.height,E=h($5);E&&(l.uniform2f(E.uniform.px,0,g),m(y.INTERMEDIATE),l.uniform2f(E.uniform.px,u,0),m())},pixelate:v=>{let u=v/c.width,g=v/c.height,E=h(_5);E&&(l.uniform2f(E.uniform.size,u,g),m())}};this.add=function(v){let u=Array.prototype.slice.call(arguments,1),g=T[v];A.push({func:g,args:u})},this.reset=function(){A=[]},this.get=function(){return A},this.apply=function(v){f(v.width,v.height),e=0,t||(t=l.createTexture()),l.bindTexture(l.TEXTURE_2D,t),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MIN_FILTER,l.NEAREST),l.texParameteri(l.TEXTURE_2D,l.TEXTURE_MAG_FILTER,l.NEAREST),l.texImage2D(l.TEXTURE_2D,0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,v);for(let u=0;uy.data())),a=Math.max(A[0][0],A[1][0],A[2][0]),c=(a>1?255:1)/a,d;if(c>1){let y=[r.sub(n[0],o[0]),r.sub(n[1],o[1]),r.sub(n[2],o[2])],l=[r.sub(s[0],o[0]),r.sub(s[1],o[1]),r.sub(s[2],o[2])],f=[r.mul(y[0],c),r.mul(y[1],c),r.mul(y[2],c)],x=r.stack([f[0],f[1],f[2]],2);d=r.reshape(x,[1,t.shape[0]||0,t.shape[1]||0,3]),r.dispose([...y,...l,...f,x])}else d=r.expandDims(t,0);return r.dispose([...n,...o,...s,n,t,e]),d}var x2=3840,l0=null,c0=null,We=null,X,L0={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function xt(){L0.inputSum=0,L0.cacheDiff=1,L0.sumMethod=0,L0.inputTensor=void 0}function D0(e,t){let n;if(M.browser)if(M.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof M.Canvas!="undefined")n=new M.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof M.Canvas!="undefined"?n=new M.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function y2(e,t){let n=t||D0(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function f2(e,t,n=!0){var f,x,p;if(!e)return t.debug&&b("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof r.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof r.Tensor){let m=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)m=r.expandDims(e,0);else if(e.shape[2]===4){let h=r.slice3d(e,[0,0,0],[-1,-1,3]);m=r.expandDims(h,0),r.dispose(h)}}else e.shape.length===4&&(e.shape[3]===3?m=r.clone(e):e.shape[3]===4&&(m=r.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(m==null||m.shape.length!==4||m.shape[0]!==1||m.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(m.dtype==="int32"){let h=r.cast(m,"float32");r.dispose(m),m=h}return{tensor:m,canvas:t.filter.return?c0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&b("input stream is not ready"),{tensor:null,canvas:l0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,s=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!s)return t.debug&&b("cannot determine input dimensions"),{tensor:null,canvas:l0};let A=o,a=s;if(A>x2&&(A=x2,a=Math.trunc(A*s/o)),a>x2&&(a=x2,A=Math.trunc(a*o/s)),(((f=t.filter)==null?void 0:f.width)||0)>0?A=t.filter.width:(((x=t.filter)==null?void 0:x.height)||0)>0&&(A=o*((t.filter.height||0)/s)),(t.filter.height||0)>0?a=t.filter.height:(t.filter.width||0)>0&&(a=s*((t.filter.width||0)/o)),!A||!a)throw new Error("input error: cannot determine dimension");(!l0||l0.width!==A||l0.height!==a)&&(l0=D0(A,a));let i=l0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?i.putImageData(e,0,0):t.filter.flip&&typeof i.translate!="undefined"?(i.translate(o,0),i.scale(-1,1),i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),i.setTransform(1,0,0,1,0,0)):i.drawImage(e,0,0,o,s,0,0,l0.width,l0.height),(!c0||l0.width!==c0.width||l0.height!==c0.height)&&(c0=D0(l0.width,l0.height)),t.filter.enabled&&M.webgl.supported?(X||(X=M.browser?new t1:null),M.filter=!!X,X!=null&&X.add?(X.reset(),t.filter.brightness!==0&&X.add("brightness",t.filter.brightness),t.filter.contrast!==0&&X.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&X.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&X.add("blur",t.filter.blur),t.filter.saturation!==0&&X.add("saturation",t.filter.saturation),t.filter.hue!==0&&X.add("hue",t.filter.hue),t.filter.negative&&X.add("negative"),t.filter.sepia&&X.add("sepia"),t.filter.vintage&&X.add("brownie"),t.filter.sepia&&X.add("sepia"),t.filter.kodachrome&&X.add("kodachrome"),t.filter.technicolor&&X.add("technicolor"),t.filter.polaroid&&X.add("polaroid"),t.filter.pixelate!==0&&X.add("pixelate",t.filter.pixelate),((p=X.get())==null?void 0:p.length)>1?c0=X.apply(l0):c0=X.draw(l0)):(t.debug&&b("input process error: cannot initialize filters"),M.webgl.supported=!1,t.filter.enabled=!1,y2(l0,c0))):(y2(l0,c0),X&&(X=null),M.filter=!!X),!n)return{tensor:null,canvas:c0};if(!c0)throw new Error("canvas error: cannot create output");let c,d=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(M.browser&&r.browser)c=r.browser?r.browser.fromPixels(e):null;else{d=e.data.length/e.height/e.width;let m=new Uint8Array(e.data.buffer);c=r.tensor(m,[e.height,e.width,d],"int32")}else if((!We||c0.width!==We.width||c0.height!==We.height)&&(We=D0(c0.width,c0.height)),r.browser&&M.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?c=r.browser.fromPixels(c0):(We=y2(c0),c=r.browser.fromPixels(We));else{let T=y2(c0).getContext("2d").getImageData(0,0,A,a);d=T.data.length/A/a;let v=new Uint8Array(T.data.buffer);c=r.tensor(v,[A,a,d])}if(d===4){let m=r.slice3d(c,[0,0,0],[-1,-1,3]);r.dispose(c),c=m}if(!c)throw new Error("input error: cannot create tensor");let y=r.cast(c,"float32"),l=t.filter.equalization?await d2(y):r.expandDims(y,0);if(r.dispose([c,y]),t.filter.autoBrightness){let m=r.max(l),h=await m.data();t.filter.brightness=h[0]>1?1-h[0]/255:1-h[0],r.dispose(m)}return{tensor:l,canvas:t.filter.return?c0:null}}async function n1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!L0.inputTensor)L0.inputTensor=r.clone(t);else if(L0.inputTensor.shape[1]!==t.shape[1]||L0.inputTensor.shape[2]!==t.shape[2])r.dispose(L0.inputTensor),L0.inputTensor=r.clone(t);else{let o={};o.diff=r.sub(t,L0.inputTensor),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;r.dispose([L0.inputTensor,o.diff,o.squared,o.sum]),L0.inputTensor=r.clone(t),n=A<=(e.cacheSensitivity||0)}return n}async function o1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||b("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||b("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=r.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?r.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):r.clone(n),o.diff=r.sub(o.input1,o.input2),o.squared=r.mul(o.diff,o.diff),o.sum=r.sum(o.squared);let A=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return r.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),A}var Qe,_e,$e,p2=class{constructor(){z(this,"browser");z(this,"node");z(this,"worker");z(this,"platform","");z(this,"agent","");z(this,"backends",[]);z(this,"initial");z(this,"filter");z(this,"tfjs");z(this,"offscreen");z(this,"perfadd",!1);z(this,"tensorflow",{version:void 0,gpu:void 0});z(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});z(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});z(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});z(this,"cpu",{model:void 0,flags:[]});z(this,"kernels",[]);q0(this,Qe,void 0);q0(this,_e,void 0);q0(this,$e,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:Je["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return E0(this,Qe)}set Canvas(t){Q0(this,Qe,t),globalThis.Canvas=t}get Image(){return E0(this,_e)}set Image(t){Q0(this,_e,t),globalThis.Image=t}get ImageData(){return E0(this,$e)}set ImageData(t){Q0(this,$e,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(r.engine().registryFactory);try{this.tensorflow={version:r.backend().binding?r.backend().binding.TF_Version:void 0,gpu:r.backend().binding?r.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=D0(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=r.getKernelsForBackend(r.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};Qe=new WeakMap,_e=new WeakMap,$e=new WeakMap;var M=new p2;var u2=class{constructor(){z(this,"config");z(this,"element");z(this,"stream");z(this,"devices",[]);z(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});z(this,"start",async t=>{var s,A;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let a=document.getElementById(t.element);if(a&&a instanceof HTMLVideoElement)this.element=a;else return this.config.debug&&b("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&b("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((s=this.config)==null?void 0:s.width)>0&&(n.video.width={ideal:this.config.width}),((A=this.config)==null?void 0:A.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&b("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&b("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&b("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(a){return b("webcam",a),`webcam error: ${a}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(a=>{this.element?this.element.onloadeddata=()=>a(!0):a(!1)}),await this.element.play(),this.config.debug&&b("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&b("webcam error","no stream"),"webcam error no stream")});z(this,"pause",()=>{this.element&&this.element.pause()});z(this,"play",async()=>{this.element&&await this.element.play()});z(this,"stop",()=>{this.config.debug&&b("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var yt={};oe(yt,{"affectnet-mobilenet":()=>vo,age:()=>Ro,"anti-spoofing":()=>tr,antispoof:()=>lo,blazeface:()=>co,"blazeface-back":()=>Mo,"blazeface-front":()=>Po,"blazepose-detector":()=>ko,"blazepose-full":()=>wo,"blazepose-heavy":()=>Eo,"blazepose-lite":()=>zo,centernet:()=>xo,default:()=>fr,efficientpose:()=>So,"efficientpose-i-lite":()=>nr,"efficientpose-ii-lite":()=>or,"efficientpose-iv":()=>rr,emotion:()=>yo,faceboxes:()=>jo,facemesh:()=>fo,"facemesh-attention":()=>No,"facemesh-attention-pinto":()=>Io,"facemesh-detection-full":()=>Lo,"facemesh-detection-short":()=>Oo,faceres:()=>mo,"faceres-deep":()=>Co,gear:()=>Fo,"gear-e1":()=>Wo,"gear-e2":()=>Do,gender:()=>Ho,"gender-ssrnet-imdb":()=>Bo,handdetect:()=>Go,"handlandmark-full":()=>Vo,"handlandmark-lite":()=>po,"handlandmark-sparse":()=>Zo,handskeleton:()=>Xo,handtrack:()=>uo,"insightface-efficientnet-b0":()=>sr,"insightface-ghostnet-strides1":()=>Ar,"insightface-ghostnet-strides2":()=>ar,"insightface-mobilenet-emore":()=>ir,"insightface-mobilenet-swish":()=>lr,iris:()=>ho,liveness:()=>bo,meet:()=>qo,mobileface:()=>Uo,mobilefacenet:()=>Yo,models:()=>go,"movenet-lightning":()=>To,"movenet-multipose":()=>Ko,"movenet-thunder":()=>Jo,nanodet:()=>Qo,"nanodet-e":()=>cr,"nanodet-g":()=>dr,"nanodet-m":()=>xr,"nanodet-t":()=>yr,posenet:()=>_o,rvm:()=>$o,selfie:()=>er});var lo=853098,co=538928,xo=4030290,yo=820516,fo=1477958,mo=6978814,po=2023432,uo=2964837,ho=2599092,bo=592976,go=0,To=4650216,vo=6920630,Ro=161240,Mo=538928,Po=402048,ko=5928856,wo=6339202,Eo=27502466,zo=2726402,So=5651240,jo=2013002,Io=2387598,No=2382414,Lo=1026192,Oo=201268,Co=13957620,Wo=112438,Do=112438,Fo=1498916,Bo=161236,Ho=201808,Go=3515612,Vo=5431368,Zo=5286322,Xo=5502280,qo=372228,Uo=2183192,Yo=5171976,Ko=9448838,Jo=12477112,Qo=7574558,_o=5032780,$o=3739355,er=212886,tr=853098,nr=2269064,or=5651240,rr=25643252,sr=13013224,Ar=8093408,ar=8049584,ir=6938536,lr=12168584,cr=12319156,dr=7574558,xr=1887474,yr=5294216,fr={antispoof:lo,blazeface:co,centernet:xo,emotion:yo,facemesh:fo,faceres:mo,"handlandmark-lite":po,handtrack:uo,iris:ho,liveness:bo,models:go,"movenet-lightning":To,"affectnet-mobilenet":vo,age:Ro,"blazeface-back":Mo,"blazeface-front":Po,"blazepose-detector":ko,"blazepose-full":wo,"blazepose-heavy":Eo,"blazepose-lite":zo,efficientpose:So,faceboxes:jo,"facemesh-attention-pinto":Io,"facemesh-attention":No,"facemesh-detection-full":Lo,"facemesh-detection-short":Oo,"faceres-deep":Co,"gear-e1":Wo,"gear-e2":Do,gear:Fo,"gender-ssrnet-imdb":Bo,gender:Ho,handdetect:Go,"handlandmark-full":Vo,"handlandmark-sparse":Zo,handskeleton:Xo,meet:qo,mobileface:Uo,mobilefacenet:Yo,"movenet-multipose":Ko,"movenet-thunder":Jo,nanodet:Qo,posenet:_o,rvm:$o,selfie:er,"anti-spoofing":tr,"efficientpose-i-lite":nr,"efficientpose-ii-lite":or,"efficientpose-iv":rr,"insightface-efficientnet-b0":sr,"insightface-ghostnet-strides1":Ar,"insightface-ghostnet-strides2":ar,"insightface-mobilenet-emore":ir,"insightface-mobilenet-swish":lr,"nanodet-e":cr,"nanodet-g":dr,"nanodet-m":xr,"nanodet-t":yr};var T0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},p0={};async function mr(e,t){return T0.debug&&b("load model fetch:",e,t),fetch(e,t)}function r1(e){T0.cacheModels=e.cacheModels,T0.verbose=e.debug,T0.modelBasePath=e.modelBasePath}async function L(e){var d,y,l,f;let t=Y5(T0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),s="indexeddb://"+o;p0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:yt[o],inCache:!1,url:""},T0.cacheSupported=typeof indexedDB!="undefined";let A={};try{A=T0.cacheSupported&&T0.cacheModels?await r.io.listModels():{}}catch(x){T0.cacheSupported=!1}p0[o].inCache=T0.cacheSupported&&T0.cacheModels&&Object.keys(A).includes(s),p0[o].url=p0[o].inCache?s:t;let a=typeof fetch=="undefined"?{}:{fetchFunc:(x,p)=>mr(x,p)},i=new r.GraphModel(p0[o].url,a),c=!1;try{i.findIOHandler(),T0.debug&&b("model load handler:",i.handler)}catch(x){b("error finding model i/o handler:",t,x)}try{let x=await((d=i.handler)==null?void 0:d.load())||null;p0[o].sizeFromManifest=((y=x==null?void 0:x.weightData)==null?void 0:y.byteLength)||0,x?i.loadSync(x):i=await r.loadGraphModel(p0[o].inCache?s:t,a),p0[o].sizeLoadedWeights=((f=(l=i.artifacts)==null?void 0:l.weightData)==null?void 0:f.byteLength)||0,T0.verbose&&b("load:",{model:o,url:i.modelUrl,bytes:p0[o].sizeLoadedWeights}),c=!0}catch(x){b("error loading model:",t,x)}if(c&&T0.cacheModels&&T0.cacheSupported&&!p0[o].inCache)try{let x=await i.save(s);T0.debug&&b("model saved:",s,x)}catch(x){b("error saving model:",t,x)}return i}var ft="3.2.2";var Y={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function hr(){let e=Y.gl;e&&(Y.extensions=e.getSupportedExtensions())}function s1(e){var t;if(e.config.backend==="humangl"&&(Y.name in r.engine().registry&&!((t=Y==null?void 0:Y.gl)!=null&&t.getParameter(Y.gl.VERSION))&&(b("humangl error: backend invalid context"),e.models.reset()),!r.findBackend(Y.name))){try{Y.canvas=D0(100,100)}catch(s){b("humangl error: cannot create canvas:",s);return}try{if(Y.gl=Y.canvas.getContext("webgl2",Y.webGLattr),!Y.gl){b("humangl error: cannot get webgl context");return}if(!Y.gl.getParameter(Y.gl.VERSION).includes("2.0")){b("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Y.canvas&&(Y.canvas.addEventListener("webglcontextlost",A=>{throw b("humangl error:",A.type),b("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Y.canvas.addEventListener("webglcontextrestored",A=>{b("humangl error: context restored:",A)}),Y.canvas.addEventListener("webglcontextcreationerror",A=>{b("humangl error: context create:",A)}))}catch(s){b("humangl error: cannot get webgl context:",s);return}try{r.setWebGLContext(2,Y.gl)}catch(s){b("humangl error: cannot set webgl context:",s);return}try{let s=new r.GPGPUContext(Y.gl);r.registerBackend(Y.name,()=>new r.MathBackendWebGL(s),Y.priority)}catch(s){b("humangl error: cannot register webgl backend:",s);return}try{r.getKernelsForBackend("webgl").forEach(A=>{let a={...A,backendName:Y.name};r.registerKernel(a)})}catch(s){b("humangl error: cannot update webgl backend registration:",s);return}try{r.env().flagRegistry.WEBGL_VERSION&&r.env().set("WEBGL_VERSION",2)}catch(s){b("humangl error: cannot set WebGL backend flags:",s);return}hr();let n=r.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&b("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):b("humangl error: no current gl context:",o,Y.gl)}}var O={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function A1(){O.tf255=r.scalar(255,"float32"),O.tf1=r.scalar(1,"float32"),O.tf2=r.scalar(2,"float32"),O.tf05=r.scalar(.5,"float32"),O.tf127=r.scalar(127.5,"float32"),O.rgb=r.tensor1d([.2989,.587,.114],"float32")}async function Tr(){var e;return await M.updateBackend(),(e=M.tensorflow)!=null&&e.version?"tensorflow":M.webgpu.supported&&M.webgpu.backend?"webgpu":M.webgl.supported&&M.webgl.backend?"webgl":M.wasm.supported&&M.wasm.backend?"wasm":"cpu"}function vr(e){let t=[];if(!M.kernels.includes("mod")){let n={kernelName:"Mod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.sub(o.inputs.a,r.mul(r.div(o.inputs.a,o.inputs.b),o.inputs.b)))};r.registerKernel(n),M.kernels.push("mod"),t.push("mod")}if(!M.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>r.add(r.mul(r.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),r.mod(o.inputs.a,o.inputs.b)))};r.registerKernel(n),M.kernels.push("floormod"),t.push("floormod")}if(!M.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:r.getBackend(),kernelFunc:o=>r.tidy(()=>{let s=r.getBackend();r.setBackend("cpu");let A=r.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return r.setBackend(s),A})};r.registerKernel(n),M.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&b("registered kernels:",t)}var a1={};async function e2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await Tr()),t||M.initial||e.config.backend&&e.config.backend.length>0&&r.getBackend()!==e.config.backend){let s=R();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&b("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&b("running inside electron");let A=Object.keys(r.engine().registryFactory);if(e.config.backend==="humangl"&&!A.includes("humangl")&&(s1(e),A=Object.keys(r.engine().registryFactory)),e.config.debug&&b("available backends:",A),M.browser&&!M.node&&e.config.backend==="tensorflow"&&A.includes("webgl")&&(e.config.debug&&b("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),M.node&&!M.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&A.includes("tensorflow")&&(e.config.debug&&b(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),M.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")b("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let a=await navigator.gpu.requestAdapter();if(e.config.debug&&b("enumerated webgpu adapter:",a),!a)b("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let i="requestAdapterInfo"in a?await a.requestAdapterInfo():void 0;b("webgpu adapter info:",i)}}if(A.includes(e.config.backend)||(b(`error: backend ${e.config.backend} not found in registry`),e.config.backend=M.node?"tensorflow":"webgl",e.config.debug&&b(`override: setting backend ${e.config.backend}`)),e.config.debug&&b("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(r.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&r.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&b("wasm path:",e.config.wasmPath),typeof r.setWasmPaths!="undefined")r.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let a=!1,i=!1;try{a=await r.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),i=await r.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&b(`wasm execution: ${i?"simd":"no simd"} ${a?"multithreaded":"singlethreaded"}`),e.config.debug&&!i&&b("warning: wasm simd support is not enabled")}catch(c){b("wasm detection failed")}}try{await r.setBackend(e.config.backend),await r.ready()}catch(a){return b("error: cannot set backend:",e.config.backend,a),!1}e.config.debug&&(a1=JSON.parse(JSON.stringify(r.env().flags)))}if((r.getBackend()==="humangl"||r.getBackend()==="webgl")&&(r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),r.env().flagRegistry.WEBGL_EXP_CONV&&r.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(b("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),r.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),r.getBackend(),e.config.debug){let A=r.env().flags,a={};for(let i of Object.keys(A))a1[i]!==A[i]&&(a[i]=A[i]);e.config.debug&&Object.keys(a).length>0&&b("backend:",r.getBackend(),"flags:",a)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&b("flags:",e.config.flags);for(let[A,a]of Object.entries(e.config.flags))r.env().set(A,a)}r.enableProdMode(),A1(),e.performance.initBackend=Math.trunc(R()-s),e.config.backend=r.getBackend(),await M.updateBackend(),vr(e.config)}return!0}function h2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:s=>{var A;return t.debug&&b("kernelFunc",n,t.backend,s),(A=s==null?void 0:s.inputs)==null?void 0:A.info}};r.registerKernel(o)}M.kernels=r.getKernelsForBackend(r.getBackend()).map(n=>n.kernelName.toLowerCase())}var vt={};oe(vt,{all:()=>$r,body:()=>g2,canvas:()=>_r,face:()=>b2,gesture:()=>R2,hand:()=>T2,init:()=>Tt,object:()=>v2,options:()=>n0,person:()=>Qr});var O0=e=>{if(!e)b("draw error: invalid canvas");else if(!e.getContext)b("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)b("draw error: cannot get canvas context");else return t}return null},ge=e=>Math.round(e*180/Math.PI),H=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Te=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function C0(e,t,n,o,s){let A=t.replace(/\[.*\]/g,"").split(` `).map(i=>i.trim()),a=Math.max(0,n);for(let i=A.length-1;i>=0;i--){let c=i*s.lineHeight+o;s.shadowColor&&s.shadowColor!==""&&(e.fillStyle=s.shadowColor,e.fillText(A[i],a+5,c+16)),e.fillStyle=s.labelColor,e.fillText(A[i],a+4,c+15)}}function U0(e,t,n,o,s){e.fillStyle=Te(o,s),e.beginPath(),e.arc(t,n,s.pointSize,0,2*Math.PI),e.fill()}function Y0(e,t,n,o,s,A){if(e.beginPath(),e.lineWidth=A.lineWidth,A.useCurves){let a=(t+t+o)/2,i=(n+n+s)/2;e.ellipse(a,i,o/2,s/2,0,0,2*Math.PI)}else e.moveTo(t+A.roundRect,n),e.lineTo(t+o-A.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+A.roundRect),e.lineTo(t+o,n+s-A.roundRect),e.quadraticCurveTo(t+o,n+s,t+o-A.roundRect,n+s),e.lineTo(t+A.roundRect,n+s),e.quadraticCurveTo(t,n+s,t,n+s-A.roundRect),e.lineTo(t,n+A.roundRect),e.quadraticCurveTo(t,n,t+A.roundRect,n),e.closePath();e.stroke()}function mt(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Te(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function l1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){mt(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;ot2[e]),KA=Mr.map(e=>t2[e]),JA=Pr.map(e=>t2[e]);function re(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var kr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],wr=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Er=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],zr=[[474,475],[475,476],[476,477],[477,474]],Sr=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],jr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ir=[[469,470],[470,471],[471,472],[472,469]],Nr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],QA={lips:re(kr),leftEye:re(wr),leftEyebrow:re(Er),leftIris:re(zr),rightEye:re(Sr),rightEyebrow:re(jr),rightIris:re(Ir),faceOval:re(Nr)};var Lr=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Or=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Cr=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Wr=[[474,475],[475,476],[476,477],[477,474]],Dr=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Fr=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Br=[[469,470],[470,471],[471,472],[472,469]],Hr=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function se(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Gr={lips:se(Lr),leftEye:se(Or),leftEyebrow:se(Cr),leftIris:se(Wr),rightEye:se(Dr),rightEyebrow:se(Fr),rightIris:se(Br),faceOval:se(Hr)},Vr=Object.entries(Gr).map(([e,t])=>t.map(n=>[n,e])).flat(),_A=new Map(Vr),n2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],Me=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],Pe=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var B;function Zr(e,t){var o,s,A,a,i,c,d,y,l;if(!B.drawLabels||((o=B.faceLabels)==null?void 0:o.length)===0)return;let n=B.faceLabels.slice();if(n=H(n,"[id]",e.id.toFixed(0)),e.score&&(n=H(n,"[score]",100*e.score)),e.gender&&(n=H(n,"[gender]",e.gender)),e.genderScore&&(n=H(n,"[genderScore]",100*e.genderScore)),e.age&&(n=H(n,"[age]",e.age)),e.distance&&(n=H(n,"[distance]",100*e.distance)),e.real&&(n=H(n,"[real]",100*e.real)),e.live&&(n=H(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let f=e.emotion.map(x=>`${Math.trunc(100*x.score)}% ${x.emotion}`);f.length>3&&(f.length=3),n=H(n,"[emotions]",f.join(" "))}(A=(s=e.rotation)==null?void 0:s.angle)!=null&&A.roll&&(n=H(n,"[roll]",ge(e.rotation.angle.roll))),(i=(a=e.rotation)==null?void 0:a.angle)!=null&&i.yaw&&(n=H(n,"[yaw]",ge(e.rotation.angle.yaw))),(d=(c=e.rotation)==null?void 0:c.angle)!=null&&d.pitch&&(n=H(n,"[pitch]",ge(e.rotation.angle.pitch))),(l=(y=e.rotation)==null?void 0:y.gaze)!=null&&l.bearing&&(n=H(n,"[gaze]",ge(e.rotation.gaze.bearing))),C0(t,n,e.box[0],e.box[1],B)}function Xr(e,t){var n,o,s,A;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=B.useDepth?"rgba(255, 200, 255, 0.3)":B.color,t.beginPath();let a=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,i=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],a,i,0,0,2*Math.PI),t.stroke(),B.fillPolygons&&(t.fillStyle=B.useDepth?"rgba(255, 255, 200, 0.3)":B.color,t.fill())}if((s=e.annotations)!=null&&s.rightEyeIris&&((A=e.annotations)!=null&&A.rightEyeIris[0])){t.strokeStyle=B.useDepth?"rgba(255, 200, 255, 0.3)":B.color,t.beginPath();let a=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,i=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],a,i,0,0,2*Math.PI),t.stroke(),B.fillPolygons&&(t.fillStyle=B.useDepth?"rgba(255, 255, 200, 0.3)":B.color,t.fill())}}function qr(e,t){var n;if(B.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*ge(e.rotation.angle.yaw)/90,s=e.box[1]+e.box[3]/2+e.box[2]*ge(e.rotation.angle.pitch)/90,A=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C @@ -118,7 +118,7 @@ var at=Object.defineProperty;var Qn=Object.getOwnPropertyDescriptor;var _n=Objec live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var gt=0;function Qr(e,t,n){let o=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=o.font;for(let A=0;AMt,kpt:()=>Rt});var Rt=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],Mt={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var W0,ke=224,x1,es=5,P2=[8,16,32,32,32];function ts(){let e=[],t=0;for(;tn.x)),y:r.tensor1d(e.map(n=>n.y))}}async function y1(e){if(M.initial&&(W0=null),!W0&&e.body.detector&&e.body.detector.modelPath){W0=await L(e.body.detector.modelPath);let t=W0!=null&&W0.executor?Object.values(W0.modelSignature.inputs):void 0;ke=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&W0&&b("cached model:",W0.modelUrl);return ts(),W0}var d1=[5,5];function ns(e,t){return r.tidy(()=>{let n=r.split(e,12,1),o=r.squeeze(n[0]),s=r.squeeze(n[1]),A=r.squeeze(n[2]),a=r.squeeze(n[3]);o=r.add(r.div(o,ke),t.x),s=r.add(r.div(s,ke),t.y),A=r.mul(r.div(A,ke),d1[0]),a=r.mul(r.div(a,ke),d1[1]);let i=r.sub(o,r.div(A,2)),c=r.sub(s,r.div(a,2)),d=r.add(i,A),y=r.add(c,a);return r.stack([i,c,d,y],1)})}async function os(e,t,n,o){var d,y;let s=[],A={};A.boxes=ns(e,x1),A.scores=r.sigmoid(t),A.nms=await r.image.nonMaxSuppressionAsync(A.boxes,A.scores,1,((d=n.body.detector)==null?void 0:d.minConfidence)||.1,((y=n.body.detector)==null?void 0:y.iouThreshold)||.1);let a=await A.nms.data(),i=await A.scores.data(),c=await A.boxes.array();for(let l of Array.from(a)){let f=i[l],x=c[l],p=[Math.round(x[0]*o[0]),Math.round(x[1]*o[1]),Math.round(x[2]*o[0]),Math.round(x[3]*o[1])],m={score:f,boxRaw:x,box:p};s.push(m)}return Object.keys(A).forEach(l=>r.dispose(A[l])),s}async function f1(e,t,n){let o={};o.res=W0==null?void 0:W0.execute(e,["Identity"]),o.logitsRaw=r.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=r.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=r.squeeze(o.logitsRaw),o.boxes=r.squeeze(o.boxesRaw);let s=await os(o.boxes,o.logits,t,n);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}function ae(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[o[0],o[1],s[0]-o[0],s[1]-o[1]],a=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:a}}function m1(e,t=[1,1]){let n=[e.map(d=>d[0]),e.map(d=>d[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[(o[0]+s[0])/2,(o[1]+s[1])/2],a=Math.max(A[0]-o[0],A[1]-o[1],-A[0]+s[0],-A[1]+s[1]),i=[Math.trunc(A[0]-a),Math.trunc(A[1]-a),Math.trunc(2*a),Math.trunc(2*a)],c=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:c}}function k2(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var P0,kt=256,Pt=Number.MAX_SAFE_INTEGER,rs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},E2=[],ie=[[0,0],[0,0],[0,0],[0,0]],p1=0,u1=e=>1-1/(1+Math.exp(e)),b1=e=>y1(e);async function g1(e){if(M.initial&&(P0=null),P0)e.debug&&b("cached model:",P0.modelUrl);else{P0=await L(e.body.modelPath);let t=P0!=null&&P0.executor?Object.values(P0.modelSignature.inputs):void 0;kt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return P0}function h1(e,t,n){var A,a;let o={};if(!((A=e==null?void 0:e.shape)!=null&&A[1])||!((a=e==null?void 0:e.shape)!=null&&a[2]))return e;let s;if(n&&(o.cropped=r.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let i=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],c=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];ie=[[0,0],i,c,[0,0]],o.pad=r.pad(o.cropped||e,ie),o.resize=r.image.resizeBilinear(o.pad,[t,t]),s=r.div(o.resize,O.tf255)}else e.shape[1]!==t?(o.resize=r.image.resizeBilinear(o.cropped||e,[t,t]),s=r.div(o.resize,O.tf255)):s=r.div(o.cropped||e,O.tf255);return Object.keys(o).forEach(i=>r.dispose(o[i])),s}function ss(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+ie[2][0]+ie[2][1])/t[0]-ie[2][0]),Math.trunc(o.position[1]*(t[1]+ie[1][0]+ie[1][1])/t[1]-ie[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],s=n[3]-n[1];for(let A of e)A.positionRaw=[A.positionRaw[0]/s+n[1],A.positionRaw[1]/o+n[0],A.positionRaw[2]],A.position=[Math.trunc(A.positionRaw[0]*t[0]),Math.trunc(A.positionRaw[1]*t[1]),A.positionRaw[2]]}return e}function As(e){let t=e.find(i=>i.part==="leftPalm"),n=e.find(i=>i.part==="leftWrist"),o=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let s=e.find(i=>i.part==="rightPalm"),A=e.find(i=>i.part==="rightWrist"),a=e.find(i=>i.part==="rightIndex");s.position[2]=((A.position[2]||0)+(a.position[2]||0))/2}async function as(e,t,n){if(!(P0!=null&&P0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=P0==null?void 0:P0.execute(e,rs.landmarks);let s=(await o.poseflag.data())[0],A=await o.ld.data(),a=await o.world.data();Object.keys(o).forEach(p=>r.dispose(o[p]));let i=[],c=5;for(let p=0;pp.position),l=ae(y,[n[0],n[1]]),f={};for(let[p,m]of Object.entries(Mt)){let h=[];for(let T=0;Tg.part===m[T]),u=d.find(g=>g.part===m[T+1]);v&&u&&h.push([v.position,u.position])}f[p]=h}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:d,annotations:f}}async function wt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>R()-p1,s=Pt<(t.body.skipFrames||0);if(t.skipAllowed&&o&&s&&E2!==null)Pt++;else{let c=[];if((a=(A=t.body)==null?void 0:A.detector)!=null&&a.enabled){let d=h1(e,224);c=await f1(d,t,n),r.dispose(d)}else c=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let d=0;dr.dispose(o[d])),s}async function St(e,t){if(!(k0!=null&&k0.executor))return[];let n=(t.object.skipTime||0)>R()-v1,o=zt<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Et.length>0?(zt++,Et):(zt=0,new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[we,we]),i=t.object.enabled?k0==null?void 0:k0.execute(a,["tower_0/detections"]):null;v1=R(),r.dispose(a);let c=await is(i,A,t);Et=c,s(c)}))}var z2={};oe(z2,{connected:()=>It,kpt:()=>jt});var jt=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],It={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var _,P1=0,v0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Nt=Number.MAX_SAFE_INTEGER;async function k1(e){return M.initial&&(_=null),_?e.debug&&b("cached model:",_.modelUrl):_=await L(e.body.modelPath),_}async function ls(e,t){let[n,o]=e.shape,s=r.reshape(e,[o*n]),A=r.max(s,0),a=(await A.data())[0];if(a>t){let i=r.argMax(s,0),c=r.mod(i,n),d=(await c.data())[0],y=r.div(i,n),l=(await y.data())[0];return r.dispose([s,A,i,c,y]),[d,l,a]}return r.dispose([s,A]),[0,0,a]}async function Lt(e,t){if(!(_!=null&&_.executor)||!(_!=null&&_.inputs[0].shape))return[];let n=(t.body.skipTime||0)>R()-P1,o=Nt<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(v0.keypoints).length>0?(Nt++,[v0]):(Nt=0,new Promise(async s=>{let A=r.tidy(()=>{var p,m;let l=r.image.resizeBilinear(e,[((p=_==null?void 0:_.inputs[0].shape)==null?void 0:p[2])||0,((m=_==null?void 0:_.inputs[0].shape)==null?void 0:m[1])||0],!1),f=r.mul(l,O.tf2);return r.sub(f,O.tf1)}),a;if(t.body.enabled&&(a=_==null?void 0:_.execute(A)),P1=R(),r.dispose(A),a){v0.keypoints.length=0;let l=r.squeeze(a);r.dispose(a);let f=r.unstack(l,2);r.dispose(l);for(let x=0;x(t.body.minConfidence||0)&&v0.keypoints.push({score:Math.round(100*h)/100,part:jt[x],positionRaw:[p/_.inputs[0].shape[2],m/_.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/_.inputs[0].shape[2]),Math.round(e.shape[1]*m/_.inputs[0].shape[1])]})}f.forEach(x=>r.dispose(x))}v0.score=v0.keypoints.reduce((l,f)=>f.score>l?f.score:l,0);let i=v0.keypoints.map(l=>l.position[0]),c=v0.keypoints.map(l=>l.position[1]);v0.box=[Math.min(...i),Math.min(...c),Math.max(...i)-Math.min(...i),Math.max(...c)-Math.min(...c)];let d=v0.keypoints.map(l=>l.positionRaw[0]),y=v0.keypoints.map(l=>l.positionRaw[1]);v0.boxRaw=[Math.min(...d),Math.min(...y),Math.max(...d)-Math.min(...d),Math.max(...y)-Math.min(...y)];for(let[l,f]of Object.entries(It)){let x=[];for(let p=0;pT.part===f[p]),h=v0.keypoints.find(T=>T.part===f[p+1]);m&&h&&m.score>(t.body.minConfidence||0)&&h.score>(t.body.minConfidence||0)&&x.push([m.position,h.position])}v0.annotations[l]=x}s([v0])}))}var Fe=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],S2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],j2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],I2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],S1=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],A=e.landmarks.map(a=>[(a[0]+n[0])*t[0],(a[1]+n[1])*t[1]]);return{startPoint:o,endPoint:s,landmarks:A,confidence:e.confidence}},Ot=(e,t,n)=>{let o=t.shape[1],s=t.shape[2],A=[e.startPoint[1]/o,e.startPoint[0]/s,e.endPoint[1]/o,e.endPoint[0]/s],a=r.image.cropAndResize(t,[A],[0],n),i=r.div(a,O.tf255);return r.dispose(a),i},N2=(e,t)=>{let n=S2(e),o=Fe(e),s=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-s[0],n[1]-s[1]],endPoint:[n[0]+s[0],n[1]+s[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},L2=e=>{let t=S2(e),n=Fe(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},j1=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},Ct=[[1,0,0],[0,1,0],[0,0,1]],cs=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),ds=(e,t)=>cs(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var E1=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Ee=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let s=0;s{let n=Math.cos(e),o=Math.sin(e),s=[[n,-o,0],[o,n,0],[0,0,1]],A=E1(t[0],t[1]),a=z1(A,s),i=E1(-t[0],-t[1]);return z1(a,i)},ys=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-Ee(t[0],n),-Ee(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},fs=(e,t)=>[Ee(e,t[0]),Ee(e,t[1])];function N1(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[A[0]/s*(x[0]-s/2),A[1]/s*(x[1]-s/2),x[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,c=i?I1(n,[0,0]):Ct,d=i?a.map(x=>[...fs(x,c),x[2]]):a,y=i?ys(o):Ct,l=S2(t),f=[Ee(l,y[0]),Ee(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2]||0)])}function O1(e,t,n,o){let s=t.landmarks.length>=ut.count?ut.symmetryLine:ve.symmetryLine,A=0,a=Ct,i;if(e&&M.kernels.includes("rotatewithoffset"))if(A=ds(t.landmarks[s[0]],t.landmarks[s[1]]),A&&A!==0&&Math.abs(A)>.2){let d=S2(t),y=[d[0]/n.shape[2],d[1]/n.shape[1]],l=r.image.rotateWithOffset(n,A,0,[y[0],y[1]]);a=I1(-A,d),i=Ot(t,l,[o,o]),r.dispose(l)}else i=Ot(t,n,[o,o]);else i=Ot(t,n,[o,o]);return[A,a,i]}var ms=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},C1=(e,t)=>{let n=ms(e),o=Fe(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var W1=6,G0,O2=null,le=0,Be=null,D1=()=>le;async function F1(e){var t;return M.initial&&(G0=null),G0?e.debug&&b("cached model:",G0.modelUrl):G0=await L((t=e.face.detector)==null?void 0:t.modelPath),le=G0.executor&&G0.inputs[0].shape?G0.inputs[0].shape[2]:256,Be=r.scalar(le,"int32"),O2=r.tensor2d(N1(le)),G0}function ps(e){if(!O2||!Be)return r.zeros([0,0]);let t={};t.boxStarts=r.slice(e,[0,1],[-1,2]),t.centers=r.add(t.boxStarts,O2),t.boxSizes=r.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=r.div(t.boxSizes,Be),t.centersNormalized=r.div(t.centers,Be),t.halfBoxSize=r.div(t.boxSizesNormalized,O.tf2),t.starts=r.sub(t.centersNormalized,t.halfBoxSize),t.ends=r.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=r.mul(t.starts,Be),t.endNormalized=r.mul(t.ends,Be);let n=r.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>r.dispose(t[o])),n}async function B1(e,t){var i,c,d,y,l,f,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=r.image.resizeBilinear(e,[le,le]),n.div=r.div(n.resized,O.tf127),n.normalized=r.sub(n.div,O.tf05);let o=G0==null?void 0:G0.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let p=o.sort((m,h)=>m.size-h.size);n.concat384=r.concat([p[0],p[2]],2),n.concat512=r.concat([p[1],p[3]],2),n.concat=r.concat([n.concat512,n.concat384],1),n.batch=r.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=r.squeeze(o[0]):n.batch=r.squeeze(o);r.dispose(o),n.boxes=ps(n.batch),n.logits=r.slice(n.batch,[0,0],[-1,1]),n.sigmoid=r.sigmoid(n.logits),n.scores=r.squeeze(n.sigmoid),n.nms=await r.image.nonMaxSuppressionAsync(n.boxes,n.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((c=t.face.detector)==null?void 0:c.iouThreshold)||0,((d=t.face.detector)==null?void 0:d.minConfidence)||0);let s=await n.nms.array(),A=[],a=await n.scores.data();for(let p=0;p(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let h={};h.bbox=r.slice(n.boxes,[s[p],0],[1,-1]),h.slice=r.slice(n.batch,[s[p],W1-1],[1,-1]),h.squeeze=r.squeeze(h.slice),h.landmarks=r.reshape(h.squeeze,[W1,-1]);let T=await h.bbox.data(),v={startPoint:[T[0],T[1]],endPoint:[T[2],T[3]],landmarks:await h.landmarks.array(),confidence:m};h.anchor=r.slice(O2,[s[p],0],[1,2]);let u=await h.anchor.data(),g=S1(v,[(e.shape[2]||0)/le,(e.shape[1]||0)/le],u),E=N2(g,((l=t.face.detector)==null?void 0:l.scale)||1.4),k=L2(E);k.size[0]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&k.size[1]>(((x=t.face.detector)==null?void 0:x.minSize)||0)&&A.push(k),Object.keys(h).forEach(N=>r.dispose(h[N]))}}return Object.keys(n).forEach(p=>r.dispose(n[p])),A}var z0,ce=0,Dt=F0.leftEyeLower0,Ft=F0.rightEyeLower0,He={leftBounds:[Dt[0],Dt[Dt.length-1]],rightBounds:[Ft[0],Ft[Ft.length-1]]},Ge={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function X1(e){var t,n;return M.initial&&(z0=null),z0?e.debug&&b("cached model:",z0.modelUrl):z0=await L((t=e.face.iris)==null?void 0:t.modelPath),ce=z0!=null&&z0.executor&&((n=z0.inputs)!=null&&n[0].shape)?z0.inputs[0].shape[2]:0,ce===-1&&(ce=64),z0}function C2(e,t,n,o){for(let s=0;s{let t=e[He.leftBounds[0]][2],n=e[He.rightBounds[0]][2];return t-n},G1=(e,t,n,o,s,A=!1,a=2.3)=>{let i=L2(N2(j1([e[n],e[o]]),a)),c=Fe(i),d=r.image.cropAndResize(t,[[i.startPoint[1]/s,i.startPoint[0]/s,i.endPoint[1]/s,i.endPoint[0]/s]],[0],[ce,ce]);if(A&&M.kernels.includes("flipleftright")){let y=r.image.flipLeftRight(d);r.dispose(d),d=y}return{box:i,boxSize:c,crop:d}},V1=(e,t,n,o=!1)=>{let s=[];for(let A=0;A{let o=e[F0[`${n}EyeUpper0`][Ge.upperCenter]][2],s=e[F0[`${n}EyeLower0`][Ge.lowerCenter]][2],A=(o+s)/2;return t.map((a,i)=>{let c=A;return i===2?c=o:i===4&&(c=s),[a[0],a[1],c]})};async function q1(e,t,n,o){var N,C;if(!(z0!=null&&z0.executor))return e;let{box:s,boxSize:A,crop:a}=G1(e,t,He.leftBounds[0],He.leftBounds[1],n,!0,((N=o.face.iris)==null?void 0:N.scale)||2.3),{box:i,boxSize:c,crop:d}=G1(e,t,He.rightBounds[0],He.rightBounds[1],n,!0,((C=o.face.iris)==null?void 0:C.scale)||2.3),y=r.concat([a,d]);r.dispose(a),r.dispose(d);let l=z0.execute(y);r.dispose(y);let f=await l.data();r.dispose(l);let x=f.slice(0,Ge.numCoordinates*3),{rawCoords:p,iris:m}=V1(x,s,A,!0),h=f.slice(Ge.numCoordinates*3),{rawCoords:T,iris:v}=V1(h,i,c,!1),u=us(e);Math.abs(u)<30?(C2(e,p,"left",null),C2(e,T,"right",null)):u<1?C2(e,p,"left",["EyeUpper0","EyeLower0"]):C2(e,T,"right",["EyeUpper0","EyeLower0"]);let g=Z1(e,m,"left"),E=Z1(e,v,"right");return e.concat(g).concat(E)}async function Y1(e,t){var A,a,i,c,d,y,l,f,x,p;let n={lips:await((a=(A=t.filter(m=>m.size===160))==null?void 0:A[0])==null?void 0:a.data()),irisL:await((c=(i=t.filter(m=>m.size===10))==null?void 0:i[0])==null?void 0:c.data()),eyeL:await((y=(d=t.filter(m=>m.size===142))==null?void 0:d[0])==null?void 0:y.data()),irisR:await((f=(l=t.filter(m=>m.size===10))==null?void 0:l[1])==null?void 0:f.data()),eyeR:await((p=(x=t.filter(m=>m.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let m of Object.values(n))if(!m)return e;let o=Me.reduce((m,h)=>m+=e[h][2],0)/Me.length;for(let m=0;mm+=e[h][2],0)/Pe.length;for(let m=0;mR()-K0.timestamp,o=K0.skipped<(((d=t.face.detector)==null?void 0:d.skipFrames)||0);!t.skipAllowed||!n||!o||K0.boxes.length===0?(K0.boxes=await B1(e,t),K0.timestamp=R(),K0.skipped=0):K0.skipped++;let s=[],A=[],a=0,i=o2;for(let v=0;v[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/i]);for(let N of Object.keys(ve))k.annotations[N]=[k.mesh[ve[N]]]}else if(!K)t.debug&&b("face mesh detection requested, but model is not loaded");else{if((x=t.face.attention)!=null&&x.enabled&&!M.kernels.includes("atan2"))return t.face.attention.enabled=!1,r.dispose(k.tensor),s;let N=K.execute(k.tensor),V=await N.find(D=>D.shape[D.shape.length-1]===1).data();if(k.faceScore=Math.round(100*V[0])/100,k.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(u.confidence=k.faceScore,t.face.mesh.keepInvalid){k.box=j2(u,e),k.boxRaw=I2(u,e),k.size=u.size,k.score=k.boxScore,k.mesh=u.landmarks,k.meshRaw=k.mesh.map(D=>[D[0]/(e.shape[2]||1),D[1]/(e.shape[1]||1),(D[2]||0)/i]);for(let D of Object.keys(ve))k.annotations[D]=[k.mesh[ve[D]]]}}else{let D=N.find(U=>U.shape[U.shape.length-1]===1404),Z=r.reshape(D,[-1,3]),J=await Z.array();r.dispose(Z),(m=t.face.attention)!=null&&m.enabled?J=await Y1(J,N):(h=t.face.iris)!=null&&h.enabled&&(J=await q1(J,k.tensor,o2,t)),k.mesh=L1(J,u,g,E,o2),k.meshRaw=k.mesh.map(U=>[U[0]/(e.shape[2]||0),U[1]/(e.shape[1]||0),(U[2]||0)/i]);for(let U of Object.keys(F0))k.annotations[U]=F0[U].map(m0=>k.mesh[m0]);k.score=k.faceScore;let q={...C1(k.mesh,u),confidence:u.confidence,landmarks:u.landmarks,size:u.size};k.box=j2(q,e),k.boxRaw=I2(q,e),k.size=q.size,A.push(q)}r.dispose(N)}k.score>(((T=t.face.detector)==null?void 0:T.minConfidence)||1)?s.push(k):r.dispose(k.tensor)}return K0.boxes=A,s}async function J1(e){var t,n,o,s,A,a;return M.initial&&(K=null),(t=e.face.attention)!=null&&t.enabled&&(K!=null&&K.signature)&&Object.keys(((n=K==null?void 0:K.signature)==null?void 0:n.outputs)||{}).length<6&&(K=null),K?e.debug&&b("cached model:",K.modelUrl):(o=e.face.attention)!=null&&o.enabled?K=await L(e.face.attention.modelPath):K=await L((s=e.face.mesh)==null?void 0:s.modelPath),o2=K.executor&&((A=K==null?void 0:K.inputs)!=null&&A[0].shape)?(a=K==null?void 0:K.inputs)==null?void 0:a[0].shape[2]:256,K}var Q1=Re,_1=t2;var Gt=[],d0,W2=[],$1=0,e3=0,Ht=Number.MAX_SAFE_INTEGER,Vt=!1;async function t3(e){var t,n,o;return M.initial&&(d0=null),d0?e.debug&&b("cached model:",d0.modelUrl):(d0=await L((t=e.face.emotion)==null?void 0:t.modelPath),Vt=((o=(n=d0==null?void 0:d0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,Vt?Gt=["angry","disgust","fear","happy","neutral","sad","surprise"]:Gt=["angry","disgust","fear","happy","sad","surprise","neutral"]),d0}async function Zt(e,t,n,o){var a,i;if(!d0)return[];let s=Ht<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),A=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>R()-e3;return t.skipAllowed&&A&&s&&$1===o&&W2[n]&&W2[n].length>0?(Ht++,W2[n]):(Ht=0,new Promise(async c=>{var y,l,f;let d=[];if((y=t.face.emotion)!=null&&y.enabled){let x={},p=d0!=null&&d0.inputs[0].shape?d0.inputs[0].shape[2]:0;if(((l=t.face.emotion)==null?void 0:l.crop)>0){let h=(f=t.face.emotion)==null?void 0:f.crop,T=[[h,h,1-h,1-h]];x.resize=r.image.cropAndResize(e,T,[0],[p,p])}else x.resize=r.image.resizeBilinear(e,[p,p],!1);Vt?(x.mul=r.mul(x.resize,255),x.normalize=r.sub(x.mul,[103.939,116.779,123.68]),x.emotion=d0==null?void 0:d0.execute(x.normalize)):(x.channels=r.mul(x.resize,O.rgb),x.grayscale=r.sum(x.channels,3,!0),x.grayscaleSub=r.sub(x.grayscale,O.tf05),x.grayscaleMul=r.mul(x.grayscaleSub,O.tf2),x.emotion=d0==null?void 0:d0.execute(x.grayscaleMul)),e3=R();let m=await x.emotion.data();for(let h=0;h(t.face.emotion.minConfidence||0)&&d.push({score:Math.min(.99,Math.trunc(100*m[h])/100),emotion:Gt[h]});d.sort((h,T)=>T.score-h.score),Object.keys(x).forEach(h=>r.dispose(x[h]))}W2[n]=d,$1=o,c(d)}))}var x0,de=[],o3=0,r3=0,Xt=Number.MAX_SAFE_INTEGER;async function s3(e){var t;return M.initial&&(x0=null),x0?e.debug&&b("cached model:",x0.modelUrl):x0=await L((t=e.face.description)==null?void 0:t.modelPath),x0}function bs(e,t){var A,a;let n=e.image||e.tensor||e;if(!(x0!=null&&x0.inputs[0].shape))return n;let o;if(((A=t.face.description)==null?void 0:A.crop)>0){let i=(a=t.face.description)==null?void 0:a.crop,c=[[i,i,1-i,1-i]];o=r.image.cropAndResize(n,c,[0],[x0.inputs[0].shape[2],x0.inputs[0].shape[1]])}else o=r.image.resizeBilinear(n,[x0.inputs[0].shape[2],x0.inputs[0].shape[1]],!1);let s=r.mul(o,O.tf255);return r.dispose(o),s}async function qt(e,t,n,o){var i,c,d,y;let s={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(x0!=null&&x0.executor))return s;let A=Xt<(((i=t.face.description)==null?void 0:i.skipFrames)||0),a=(((c=t.face.description)==null?void 0:c.skipTime)||0)>R()-o3;return t.skipAllowed&&A&&a&&r3===o&&((d=de==null?void 0:de[n])==null?void 0:d.age)>0&&((y=de==null?void 0:de[n])==null?void 0:y.genderScore)>0?(Xt++,de[n]):(Xt=0,new Promise(async l=>{var f;if((f=t.face.description)!=null&&f.enabled){let x=bs(e,t),p=x0==null?void 0:x0.execute(x);o3=R(),r.dispose(x);let h=await p.find(C=>C.shape[1]===1).data(),T=Math.trunc(200*Math.abs(h[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(s.gender=h[0]<=.5?"female":"male",s.genderScore=Math.min(.99,T));let v=r.argMax(p.find(C=>C.shape[1]===100),1),u=(await v.data())[0];r.dispose(v);let E=await p.find(C=>C.shape[1]===100).data();s.age=Math.round(E[u-1]>E[u+1]?10*u-100*E[u-1]:10*u+100*E[u+1])/10,(Number.isNaN(h[0])||Number.isNaN(E[0]))&&b("faceres error:",{model:x0,result:p});let k=p.find(C=>C.shape[1]===1024),N=k?await k.data():[];s.descriptor=Array.from(N),p.forEach(C=>r.dispose(C))}de[n]=s,r3=o,l(s)}))}var Ve=.1,Ut=.5;function gs(e,t,n){let o=!1,s=n.length-1;for(let A=0;At!=n[s].y>t&&e<(n[s].x-n[A].x)*(t-n[A].y)/(n[s].y-n[A].y)+n[A].x&&(o=!o);return o}async function a3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),s=[];for(let a of F0.silhouette)s.push({x:(e.mesh[a][0]-e.box[0])/e.box[2],y:(e.mesh[a][1]-e.box[1])/e.box[3]});Ve&&Ve>0&&(s=s.map(a=>({x:a.x>.5?a.x+Ve:a.x-Ve,y:a.y>.5?a.y+Ve:a.y-Ve})));for(let a=0;aR()-l3,A=Yt<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&i3===o&&D2[n]?(Yt++,D2[n]):(Yt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[2]:0,y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[1]:0],!1),y=y0==null?void 0:y0.execute(d),l=(await y.data())[0];D2[n]=Math.round(100*l)/100,i3=o,l3=R(),r.dispose([d,y]),c(D2[n])}))}var f0,F2=[],Jt=Number.MAX_SAFE_INTEGER,x3=0,y3=0;async function f3(e){var t;return M.initial&&(f0=null),f0?e.debug&&b("cached model:",f0.modelUrl):f0=await L((t=e.face.liveness)==null?void 0:t.modelPath),f0}async function Qt(e,t,n,o){var a,i;if(!(f0!=null&&f0.executor))return 0;let s=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>R()-y3,A=Jt<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&x3===o&&F2[n]?(Jt++,F2[n]):(Jt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[2]:0,f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[1]:0],!1),y=f0==null?void 0:f0.execute(d),l=(await y.data())[0];F2[n]=Math.round(100*l)/100,x3=o,y3=R(),r.dispose([d,y]),c(F2[n])}))}var B0,_t=[],vs=["white","black","asian","indian","other"],Rs=[15,23,28,35.5,45.5,55.5,65],p3=0,u3=0,$t=Number.MAX_SAFE_INTEGER;async function h3(e){var t;return M.initial&&(B0=null),B0?e.debug&&b("cached model:",B0.modelUrl):B0=await L((t=e.face.gear)==null?void 0:t.modelPath),B0}async function e5(e,t,n,o){var a,i;if(!B0)return{age:0,gender:"unknown",genderScore:0,race:[]};let s=$t<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),A=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>R()-u3;return t.skipAllowed&&A&&s&&p3===o&&_t[n]?($t++,_t[n]):($t=0,new Promise(async c=>{var T,v,u,g;if(!(B0!=null&&B0.inputs[0].shape))return;let d={},y=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let E=(v=t.face.gear)==null?void 0:v.crop;y=[[E,E,1-E,1-E]]}d.resize=r.image.cropAndResize(e,y,[0],[B0.inputs[0].shape[2],B0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(u=t.face.gear)!=null&&u.enabled&&([d.age,d.gender,d.race]=B0.execute(d.resize,["age_output","gender_output","race_output"]));let f=await d.gender.data();l.gender=f[0]>f[1]?"male":"female",l.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[1]))/100;let x=await d.race.data();for(let E=0;E(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[E])/100,race:vs[E]});l.race.sort((E,k)=>k.score-E.score);let m=Array.from(await d.age.data()).map((E,k)=>[Rs[k],E]).sort((E,k)=>k[1]-E[1]),h=m[0][0];for(let E=1;Er.dispose(d[E])),_t[n]=l,p3=o,u3=R(),c(l)}))}var R0,B2=[],g3=0,T3=0,t5=Number.MAX_SAFE_INTEGER;async function v3(e){return M.initial&&(R0=null),R0?e.debug&&b("cached model:",R0.modelUrl):R0=await L(e.face.ssrnet.modelPathAge),R0}async function n5(e,t,n,o){var a,i,c,d;if(!R0)return{age:0};let s=t5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-T3;return t.skipAllowed&&s&&A&&g3===o&&((c=B2[n])!=null&&c.age)&&((d=B2[n])==null?void 0:d.age)>0?(t5++,B2[n]):(t5=0,new Promise(async y=>{var x,p,m;if(!(R0!=null&&R0.inputs)||!R0.inputs[0]||!R0.inputs[0].shape)return;let l={};if(((x=t.face.ssrnet)==null?void 0:x.crop)>0){let h=(p=t.face.ssrnet)==null?void 0:p.crop,T=[[h,h,1-h,1-h]];l.resize=r.image.cropAndResize(e,T,[0],[R0.inputs[0].shape[2],R0.inputs[0].shape[1]])}else l.resize=r.image.resizeBilinear(e,[R0.inputs[0].shape[2],R0.inputs[0].shape[1]],!1);l.enhance=r.mul(l.resize,O.tf255);let f={age:0};if((m=t.face.ssrnet)!=null&&m.enabled&&(l.age=R0.execute(l.enhance)),l.age){let h=await l.age.data();f.age=Math.trunc(10*h[0])/10}Object.keys(l).forEach(h=>r.dispose(l[h])),B2[n]=f,g3=o,T3=R(),y(f)}))}var u0,H2=[],M3=0,P3=0,o5=Number.MAX_SAFE_INTEGER,r5=[.2989,.587,.114];async function k3(e){var t;return M.initial&&(u0=null),u0?e.debug&&b("cached model:",u0.modelUrl):u0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),u0}async function s5(e,t,n,o){var a,i,c,d;if(!u0)return{gender:"unknown",genderScore:0};let s=o5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-P3;return t.skipAllowed&&s&&A&&M3===o&&((c=H2[n])!=null&&c.gender)&&((d=H2[n])==null?void 0:d.genderScore)>0?(o5++,H2[n]):(o5=0,new Promise(async y=>{var p,m,h;if(!(u0!=null&&u0.inputs[0].shape))return;let l={};if(((p=t.face.ssrnet)==null?void 0:p.crop)>0){let T=(m=t.face.ssrnet)==null?void 0:m.crop,v=[[T,T,1-T,1-T]];l.resize=r.image.cropAndResize(e,v,[0],[u0.inputs[0].shape[2],u0.inputs[0].shape[1]])}else l.resize=r.image.resizeBilinear(e,[u0.inputs[0].shape[2],u0.inputs[0].shape[1]],!1);l.enhance=r.tidy(()=>{var v,u;let T;if(((u=(v=u0==null?void 0:u0.inputs)==null?void 0:v[0].shape)==null?void 0:u[3])===1){let[g,E,k]=r.split(l.resize,3,3),N=r.mul(g,r5[0]),C=r.mul(E,r5[1]),V=r.mul(k,r5[2]),D=r.addN([N,C,V]);T=r.mul(r.sub(D,O.tf05),2)}else T=r.mul(r.sub(l.resize,O.tf05),2);return T});let f={gender:"unknown",genderScore:0};(h=t.face.ssrnet)!=null&&h.enabled&&(l.gender=u0.execute(l.enhance));let x=await l.gender.data();f.gender=x[0]>x[1]?"female":"male",f.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(T=>r.dispose(l[T])),H2[n]=f,M3=o,P3=R(),y(f)}))}var S0,A5=[],E3=0,z3=0,S3=Number.MAX_SAFE_INTEGER;async function j3(e){var t;return M.initial&&(S0=null),S0?e.debug&&b("cached model:",S0.modelUrl):S0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),S0}async function a5(e,t,n,o){var a,i;if(!(S0!=null&&S0.executor))return[];let s=S3<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>R()-z3;return t.skipAllowed&&A&&s&&E3===o&&A5[n]?(S3++,A5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.mobilefacenet)!=null&&y.enabled&&(S0!=null&&S0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[S0.inputs[0].shape[2],S0.inputs[0].shape[1]],!1),l.data=S0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}A5[n]=d,E3=o,z3=R(),c(d)})}var j0,i5=[],N3=0,L3=0,O3=Number.MAX_SAFE_INTEGER;async function C3(e){return M.initial&&(j0=null),j0?e.debug&&b("cached model:",j0.modelUrl):j0=await L(e.face.insightface.modelPath),j0}async function l5(e,t,n,o){var a,i;if(!(j0!=null&&j0.executor))return[];let s=O3<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),A=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>R()-L3;return t.skipAllowed&&A&&s&&N3===o&&i5[n]?(O3++,i5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.insightface)!=null&&y.enabled&&(j0!=null&&j0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[j0.inputs[0].shape[2],j0.inputs[0].shape[1]],!1),l.data=j0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}i5[n]=d,N3=o,L3=R(),c(d)})}var Ms=e=>{let t=(l,f)=>Math.atan2(l[1]-f[1],l[0]-f[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,s=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),A=s?e.mesh[473]:e.mesh[468],a=s?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],i=s?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],c=[(a[0]-A[0])/i[0]-n[0],o*(A[1]-a[1])/i[1]-n[1]],d=Math.sqrt(c[0]*c[0]+c[1]*c[1]);return d=Math.min(d,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],c)+Math.PI/2)%Math.PI,strength:d}},D3=(e,t)=>{let n=m=>{let h=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=h,m[1]/=h,m[2]/=h,m},o=(m,h)=>{let T=m[0]-h[0],v=m[1]-h[1],u=m[2]-h[2];return[T,v,u]},s=(m,h)=>{let T=m[1]*h[2]-m[2]*h[1],v=m[2]*h[0]-m[0]*h[2],u=m[0]*h[1]-m[1]*h[0];return[T,v,u]},A=m=>{let[h,T,v,u,g,E,k,N,C]=m,V,D,Z;return u<1?u>-1?(Z=Math.asin(u),D=Math.atan2(-k,h),V=Math.atan2(-E,g)):(Z=-Math.PI/2,D=-Math.atan2(N,C),V=0):(Z=Math.PI/2,D=Math.atan2(N,C),V=0),Number.isNaN(V)&&(V=0),Number.isNaN(D)&&(D=0),Number.isNaN(Z)&&(Z=0),{pitch:2*-V,yaw:2*-D,roll:2*-Z}},a=e.meshRaw;if(!a||a.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let i=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,c=[a[10],a[152],a[234],a[454]].map(m=>[m[0]*t[0]/i,m[1]*t[1]/i,m[2]]),d=n(o(c[1],c[0])),y=n(o(c[3],c[2])),l=n(s(y,d));y=s(d,l);let f=[y[0],y[1],y[2],d[0],d[1],d[2],l[0],l[1],l[2]],x=A(f),p=a.length===478?Ms(e):{bearing:0,strength:0};return{angle:x,matrix:f,gaze:p}};function F3(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var c5=async(e,t)=>{var p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;let n=R(),o,s,A,a,i,c,d,y,l,f=[];e.state="run:face";let x=await K1(t,e.config);if(e.performance.face=M.perfadd?(e.performance.face||0)+Math.trunc(R()-n):Math.trunc(R()-n),!t.shape||t.shape.length!==4)return[];if(!x)return[];for(let S=0;S200?D3(x[S],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?a=(m=e.config.face.emotion)!=null&&m.enabled?Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[]:(e.state="run:emotion",n=R(),a=(h=e.config.face.emotion)!=null&&h.enabled?await Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[],e.performance.emotion=M.perfadd?(e.performance.emotion||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?d=(T=e.config.face.antispoof)!=null&&T.enabled?Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:antispoof",n=R(),d=(v=e.config.face.antispoof)!=null&&v.enabled?await Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.antispoof=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?y=(u=e.config.face.liveness)!=null&&u.enabled?Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:liveness",n=R(),y=(g=e.config.face.liveness)!=null&&g.enabled?await Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.liveness=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?s=(E=e.config.face.gear)!=null&&E.enabled?e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:gear",n=R(),s=(k=e.config.face.gear)!=null&&k.enabled?await e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.gear=Math.trunc(R()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(N=e.config.face.ssrnet)!=null&&N.enabled?n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(C=e.config.face.ssrnet)!=null&&C.enabled?s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null):(e.state="run:ssrnet",n=R(),o=(V=e.config.face.ssrnet)!=null&&V.enabled?await n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(D=e.config.face.ssrnet)!=null&&D.enabled?await s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.ssrnet=Math.trunc(R()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?i=(Z=e.config.face.mobilefacenet)!=null&&Z.enabled?a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),i=(J=e.config.face.mobilefacenet)!=null&&J.enabled?await a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?c=(q=e.config.face.insightface)!=null&&q.enabled?l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),c=(U=e.config.face.insightface)!=null&&U.enabled?await l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?l=qt(x[S].tensor||r.tensor([]),e.config,S,x.length):(e.state="run:description",n=R(),l=await qt(x[S].tensor||r.tensor([]),e.config,S,x.length),e.performance.description=M.perfadd?(e.performance.description||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Description:"),e.config.async&&([o,A,a,i,c,l,s,d,y]=await Promise.all([o,A,a,i,c,l,s,d,y])),e.analyze("Finish Face:"),(m0=e.config.face.ssrnet)!=null&&m0.enabled&&o&&A&&(l={...l,age:o.age,gender:A.gender,genderScore:A.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&s&&(l={...l,age:s.age,gender:s.gender,genderScore:s.genderScore,race:s.race}),(i0=e.config.face.mobilefacenet)!=null&&i0.enabled&&i&&(l.descriptor=i),(g0=e.config.face.insightface)!=null&&g0.enabled&&c&&(l.descriptor=c);let F=(e0=e.config.face.iris)!=null&&e0.enabled?F3(x[S],t.shape[2]):0,w0=(G=e.config.face.detector)!=null&&G.return?r.squeeze(x[S].tensor):null;r.dispose(x[S].tensor),x[S].tensor&&delete x[S].tensor;let t0={...x[S],id:S};l.age&&(t0.age=l.age),l.gender&&(t0.gender=l.gender),l.genderScore&&(t0.genderScore=l.genderScore),l.descriptor&&(t0.embedding=l.descriptor),l.race&&(t0.race=l.race),a&&(t0.emotion=a),d&&(t0.real=d),y&&(t0.live=y),F>0&&(t0.distance=F),W&&(t0.rotation=W),w0&&(t0.tensor=w0),f.push(t0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),f};var M0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>M0.nameMapping[e],getPoints:e=>M0.pointsMapping[e]},ye={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ye.nameMapping[e]},$={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>$.nameMapping[e]},xe=class{constructor(t){z(this,"name");z(this,"curls");z(this,"directions");z(this,"weights");z(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((s,A)=>s+A,0);this.weightsRelative=this.weights.map(s=>s*5/o)}matchAgainst(t,n){let o=0;for(let s in t){let A=t[s],a=this.curls[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}for(let s in n){let A=n[s],a=this.directions[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}return o/10}};var{thumb:V0,index:_0,middle:$0,ring:ze,pinky:Se}=M0,{none:Z0,half:ks,full:X0}=ye,{verticalUp:Ze,verticalDown:ni,horizontalLeft:d5,horizontalRight:ws,diagonalUpRight:Es,diagonalUpLeft:Xe,diagonalDownRight:oi,diagonalDownLeft:ri}=$,fe=new xe("thumbs up");fe.curl(V0,Z0,1);fe.direction(V0,Ze,1);fe.direction(V0,Xe,.25);fe.direction(V0,Es,.25);for(let e of[M0.index,M0.middle,M0.ring,M0.pinky])fe.curl(e,X0,1),fe.direction(e,d5,1),fe.direction(e,ws,1);var s0=new xe("victory");s0.curl(V0,ks,.5);s0.curl(V0,Z0,.5);s0.direction(V0,Ze,1);s0.direction(V0,Xe,1);s0.curl(_0,Z0,1);s0.direction(_0,Ze,.75);s0.direction(_0,Xe,1);s0.curl($0,Z0,1);s0.direction($0,Ze,1);s0.direction($0,Xe,.75);s0.curl(ze,X0,1);s0.direction(ze,Ze,.2);s0.direction(ze,Xe,1);s0.direction(ze,d5,.2);s0.curl(Se,X0,1);s0.direction(Se,Ze,.2);s0.direction(Se,Xe,1);s0.direction(Se,d5,.2);s0.weight(_0,2);s0.weight($0,2);var me=new xe("point");me.curl(V0,X0,1);me.curl(_0,Z0,.5);me.curl($0,X0,.5);me.curl(ze,X0,.5);me.curl(Se,X0,.5);me.weight(_0,2);me.weight($0,2);var pe=new xe("middle finger");pe.curl(V0,Z0,1);pe.curl(_0,X0,.5);pe.curl($0,X0,.5);pe.curl(ze,X0,.5);pe.curl(Se,X0,.5);pe.weight(_0,2);pe.weight($0,2);var qe=new xe("open palm");qe.curl(V0,Z0,.75);qe.curl(_0,Z0,.75);qe.curl($0,Z0,.75);qe.curl(ze,Z0,.75);qe.curl(Se,Z0,.75);var B3=[fe,s0,me,pe,qe];var zs=.7,je={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function H3(e,t,n,o){let s=(t-o)/(e-n),A=Math.atan(s)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function V3(e,t){if(!e||!t)return[0,0];let n=H3(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=H3(e[1],e[2],t[1],t[2]);return[n,o]}function G3(e,t=1){let n=0,o=0,s=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:s=1*t,[n,o,s]}function Ss(e,t,n){let o=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],i=e[1]-n[1],c=t[1]-n[1],d=e[2]-t[2],y=e[2]-n[2],l=t[2]-n[2],f=Math.sqrt(o*o+a*a+d*d),x=Math.sqrt(s*s+i*i+y*y),p=Math.sqrt(A*A+c*c+l*l),m=(p*p+f*f-x*x)/(2*p*f);m>1?m=1:m<-1&&(m=-1);let h=Math.acos(m);h=57.2958*h%180;let T;return h>je.NO_CURL_START_LIMIT?T=ye.none:h>je.HALF_CURL_START_LIMIT?T=ye.half:T=ye.full,T}function Z3(e,t,n,o){let s;return o===Math.abs(e)?e>0?s=$.horizontalLeft:s=$.horizontalRight:o===Math.abs(t)?t>0?s=$.horizontalLeft:s=$.horizontalRight:n>0?s=$.horizontalLeft:s=$.horizontalRight,s}function X3(e,t,n,o){let s;return o===Math.abs(e)?e<0?s=$.verticalDown:s=$.verticalUp:o===Math.abs(t)?t<0?s=$.verticalDown:s=$.verticalUp:n<0?s=$.verticalDown:s=$.verticalUp,s}function js(e,t,n,o,s,A,a,i){let c,d=X3(e,t,n,o),y=Z3(s,A,a,i);return d===$.verticalUp?y===$.horizontalLeft?c=$.diagonalUpLeft:c=$.diagonalUpRight:y===$.horizontalLeft?c=$.diagonalDownLeft:c=$.diagonalDownRight,c}function Is(e,t,n,o){let s=e[0]-t[0],A=e[0]-n[0],a=t[0]-n[0],i=e[1]-t[1],c=e[1]-n[1],d=t[1]-n[1],y=Math.max(Math.abs(s),Math.abs(A),Math.abs(a)),l=Math.max(Math.abs(i),Math.abs(c),Math.abs(d)),f=0,x=0,p=0,m=l/(y+1e-5);m>1.5?f+=je.DISTANCE_VOTE_POWER:m>.66?x+=je.DISTANCE_VOTE_POWER:p+=je.DISTANCE_VOTE_POWER;let h=Math.sqrt(s*s+i*i),T=Math.sqrt(A*A+c*c),v=Math.sqrt(a*a+d*d),u=Math.max(h,T,v),g=e[0],E=e[1],k=n[0],N=n[1];u===h?(k=n[0],N=n[1]):u===v&&(g=t[0],E=t[1]);let D=V3([g,E],[k,N]),Z=G3(D,je.TOTAL_ANGLE_VOTE_POWER);f+=Z[0],x+=Z[1],p+=Z[2];for(let q of o){let U=G3(q,je.SINGLE_ANGLE_VOTE_POWER);f+=U[0],x+=U[1],p+=U[2]}let J;return f===Math.max(f,x,p)?J=X3(c,i,d,l):p===Math.max(x,p)?J=Z3(A,s,a,y):J=js(c,i,d,l,A,s,a,y),J}function q3(e){let t=[],n=[],o=[],s=[];if(!e)return{curls:o,directions:s};for(let A of M0.all){let a=M0.getPoints(A),i=[],c=[];for(let d of a){let y=e[d[0]],l=e[d[1]],f=V3(y,l),x=f[0],p=f[1];i.push(x),c.push(p)}t.push(i),n.push(c)}for(let A of M0.all){let a=A===M0.thumb?1:0,i=M0.getPoints(A),c=e[i[a][0]],d=e[i[a+1][1]],y=e[i[3][1]],l=Ss(c,d,y),f=Is(c,d,y,t[A].slice(a));o[A]=l,s[A]=f}return{curls:o,directions:s}}function G2(e){if(!e||e.length===0)return null;let t=q3(e),n={};for(let o of M0.all)n[M0.getName(o)]={curl:ye.getName(t.curls[o]),direction:$.getName(t.directions[o])};return n}function U3(e){let t=[];if(!e||e.length===0)return t;let n=q3(e);for(let o of B3){let s=o.matchAgainst(n.curls,n.directions);s>=zs&&t.push({name:o.name,confidence:s})}return t}var Y3=e=>{if(!e)return[];let t=[];for(let n=0;nc.part==="leftWrist"),s=e[n].keypoints.find(c=>c.part==="rightWrist"),A=e[n].keypoints.find(c=>c.part==="nose");A&&o&&s&&o.position[1]c.part==="leftShoulder"),i=e[n].keypoints.find(c=>c.part==="rightShoulder");a&&i&&Math.abs(a.positionRaw[1]-i.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${a.position[1]>i.position[1]?"left":"right"}`})}return t},K3=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),s=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/s)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 i=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]));i>10&&t.push({face:n,gesture:`mouth ${Math.trunc(i)}% open`});let c=e[n].mesh[152][2]||0;Math.abs(c)>10&&t.push({face:n,gesture:`head ${c<0?"up":"down"}`})}return t},J3=e=>{var n,o,s,A;if(!e)return[];let t=[];for(let a=0;a.06||h>.06)&&(x=!1),m>h?h>.04&&t.push({iris:a,gesture:"looking right"}):m>.04&&t.push({iris:a,gesture:"looking left"});let T=Math.abs(e[a].mesh[145][1]-e[a].annotations.rightEyeIris[0][1])/e[a].box[3],v=Math.abs(e[a].mesh[374][1]-e[a].annotations.leftEyeIris[0][1])/e[a].box[3];(v<.01||T<.01||v>.022||T>.022)&&(x=!1),(v<.01||T<.01)&&t.push({iris:a,gesture:"looking down"}),(v>.022||T>.022)&&t.push({iris:a,gesture:"looking up"}),x&&t.push({iris:a,gesture:"looking center"})}return t},Q3=e=>{if(!e)return[];let t=[];for(let n=0;n0){let s=o.reduce((a,i)=>(a.position[2]||0)<(i.position[2]||0)?a:i);t.push({hand:n,gesture:`${s.name} forward`});let A=o.reduce((a,i)=>a.position[1][A[0]*t[0],A[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:s,confidence:e.confidence}}function Z2(e,t=1.5){let n=r2(e),o=V2(e),s=[t*o[0]/2,t*o[1]/2],A=[n[0]-s[0],n[1]-s[1]],a=[n[0]+s[0],n[1]+s[1]];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function X2(e){let t=r2(e),n=V2(e),s=Math.max(...n)/2,A=[t[0]-s,t[1]-s],a=[t[0]+s,t[1]+s];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function Ls(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function nn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Ls(n)}var _3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ue(e,t){let n=0;for(let o=0;o[a.x,a.y]),this.anchorsTensor=r.tensor2d(this.anchors),this.inputSize=((A=(s=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:s.shape)==null?void 0:A[2])||0,this.inputSizeTensor=r.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=r.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=r.slice(t,[0,0],[-1,2]),n.boxSizes=r.slice(t,[0,2],[-1,2]),n.div=r.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=r.add(n.div,this.anchorsTensor),n.halfBoxSizes=r.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=r.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=r.mul(n.sub,this.inputSizeTensor),n.add=r.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=r.mul(n.add,this.inputSizeTensor);let o=r.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(s=>r.dispose(n[s])),o}normalizeLandmarks(t,n){let o={};o.reshape=r.reshape(t,[-1,7,2]),o.div=r.div(o.reshape,this.inputSizeTensor),o.landmarks=r.add(o.div,this.anchors[n]?this.anchors[n]:0);let s=r.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}async predict(t,n){var i;let o={};o.resize=r.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=r.div(o.resize,O.tf127),o.image=r.sub(o.div,O.tf1),o.batched=this.model.execute(o.image),o.predictions=r.squeeze(o.batched),o.slice=r.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=r.sigmoid(o.slice),o.scores=r.squeeze(o.sigmoid);let s=await o.scores.data();o.boxes=r.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await r.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((i=n.hand)==null?void 0:i.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let A=await o.nms.array(),a=[];for(let c of A){let d={};d.box=r.slice(o.norm,[c,0],[1,-1]),d.slice=r.slice(o.predictions,[c,5],[1,14]),d.norm=this.normalizeLandmarks(d.slice,c),d.palmLandmarks=r.reshape(d.norm,[-1,2]);let y=await d.box.data(),l=y.slice(0,2),f=y.slice(2,4),x=await d.palmLandmarks.array(),p={startPoint:l,endPoint:f,palmLandmarks:x,confidence:s[c]},m=tn(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(m),Object.keys(d).forEach(h=>r.dispose(d[h]))}return Object.keys(o).forEach(c=>r.dispose(o[c])),a}};var Ds=5,An=1.65,an=[0,5,9,13,17,1,2],Fs=0,Bs=2,ln=0,U2=class{constructor(t,n){z(this,"handDetector");z(this,"handPoseModel");z(this,"inputSize");z(this,"storedBoxes");z(this,"skipped");z(this,"detectedHands");var o,s,A;this.handDetector=t,this.handPoseModel=n,this.inputSize=((A=(s=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:s[0].shape)==null?void 0:A[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(a=>a[0]),o=t.map(a=>a[1]),s=[Math.min(...n),Math.min(...o)],A=[Math.max(...n),Math.max(...o)];return{startPoint:s,endPoint:A}}getBoxForPalmLandmarks(t,n){let o=t.map(A=>f5([...A,1],n)),s=this.calculateLandmarksBoundingBox(o);return Z2(X2(s),Ds)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Z2(X2(n),An);o.palmLandmarks=[];for(let s=0;s[a[0]*(x[0]-this.inputSize/2),a[1]*(x[1]-this.inputSize/2),a[2]*x[2]]),c=y5(o,[0,0]),d=i.map(x=>[...f5(x,c),x[2]]),y=on(s),l=[...r2(n),1],f=[ue(l,y[0]),ue(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2])])}async estimateHands(t,n){let o=!1,s,A=(n.hand.skipTime||0)>R()-ln,a=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&A&&a?this.skipped++:(s=await this.handDetector.predict(t,n),this.skipped=0),s&&s.length>0&&(s.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...s],this.storedBoxes.length>0&&(o=!0));let i=[];for(let c=0;c=n.hand.minConfidence/4){let E=r.reshape(u,[-1,3]),k=await E.array();r.dispose(u),r.dispose(E);let N=this.transformRawCoords(k,m,y,p),C=this.getBoxForHandLandmarks(N);this.storedBoxes[c]={...C,confidence:g};let V={landmarks:N,confidence:g,boxConfidence:d.confidence,fingerConfidence:g,box:{topLeft:C.startPoint,bottomRight:C.endPoint}};i.push(V)}else this.storedBoxes[c]=null;r.dispose(u)}else{let y=Z2(X2(d),An),l={confidence:d.confidence,boxConfidence:d.confidence,fingerConfidence:0,box:{topLeft:y.startPoint,bottomRight:y.endPoint},landmarks:[]};i.push(l)}}return this.storedBoxes=this.storedBoxes.filter(c=>c!==null),this.detectedHands=i.length,i.length>n.hand.maxDetected&&(i.length=n.hand.maxDetected),i}};var cn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Ie,Ne,m5;function Gs(){let e=Ie?new q2(Ie):void 0;e&&Ne&&(m5=new U2(e,Ne))}async function p5(e,t){m5||Gs();let n=await m5.estimateHands(e,t);if(!n)return[];let o=[];for(let s=0;sn[s].landmarks[l]);let a=n[s].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],c=[0,0,0,0];if(a&&a.length>0){for(let y of a)y[0]i[2]&&(i[2]=y[0]),y[1]>i[3]&&(i[3]=y[1]);i[2]-=i[0],i[3]-=i[1],c=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[s].box?[Math.trunc(Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.max(0,n[s].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[s].box.bottomRight[0])-Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[s].box.bottomRight[1])-Math.max(0,n[s].box.topLeft[1]))]:[0,0,0,0],c=[n[s].box.topLeft[0]/(e.shape[2]||0),n[s].box.topLeft[1]/(e.shape[1]||0),(n[s].box.bottomRight[0]-n[s].box.topLeft[0])/(e.shape[2]||0),(n[s].box.bottomRight[1]-n[s].box.topLeft[1])/(e.shape[1]||0)];let d=G2(a);o.push({id:s,score:Math.round(100*n[s].confidence)/100,boxScore:Math.round(100*n[s].boxConfidence)/100,fingerScore:Math.round(100*n[s].fingerConfidence)/100,label:"hand",box:i,boxRaw:c,keypoints:a,annotations:A,landmarks:d})}return o}async function dn(e){var t;return M.initial&&(Ie=null),Ie?e.debug&&b("cached model:",Ie.modelUrl):Ie=await L((t=e.hand.detector)==null?void 0:t.modelPath),Ie}async function xn(e){var t;return M.initial&&(Ne=null),Ne?e.debug&&b("cached model:",Ne.modelUrl):Ne=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),Ne}var r0=[null,null],Vs=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],he=[[0,0],[0,0]],Zs=["hand","fist","pinch","point","face","tip","pinchtip"],fn=4,mn=1.6,Xs=512,qs=1.4,Y2=Number.MAX_SAFE_INTEGER,u5=0,ee=[0,0],o0={boxes:[],hands:[]},pn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function un(e){var t;if(M.initial&&(r0[0]=null),r0[0])e.debug&&b("cached model:",r0[0].modelUrl);else{h2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),r0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=r0[0].executor?Object.values(r0[0].modelSignature.inputs):void 0;he[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[0]}async function hn(e){var t;if(M.initial&&(r0[1]=null),r0[1])e.debug&&b("cached model:",r0[1].modelUrl);else{r0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=r0[1].executor?Object.values(r0[1].modelSignature.inputs):void 0;he[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[1]}async function Us(e,t){let n=[];if(!e||!r0[0])return n;let o={},s=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,Xs),a=Math.round(A*s/8)*8;o.resize=r.image.resizeBilinear(e,[A,a]),o.cast=r.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await r0[0].executeAsync(o.cast,Vs),o.boxes=r.squeeze(o.rawBoxes,[0,2]),o.scores=r.squeeze(o.rawScores,[0]);let i=r.unstack(o.scores,1);r.dispose(i[fn]),i.splice(fn,1),o.filtered=r.stack(i,1),r.dispose(i),o.max=r.max(o.filtered,1),o.argmax=r.argMax(o.filtered,1);let c=0;o.nms=await r.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let d=await o.nms.data(),y=await o.max.data(),l=await o.argmax.data();for(let f of Array.from(d)){let x=r.slice(o.boxes,f,1),p=await x.data();r.dispose(x);let m=[p[1],p[0],p[3]-p[1],p[2]-p[0]],h=k2(m,qs),T=[Math.trunc(m[0]*ee[0]),Math.trunc(m[1]*ee[1]),Math.trunc(m[2]*ee[0]),Math.trunc(m[3]*ee[1])],v=y[f],u=Zs[l[f]],g={id:c++,score:v,box:T,boxRaw:h,label:u};n.push(g)}return Object.keys(o).forEach(f=>r.dispose(o[f])),n.sort((f,x)=>x.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function h5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&r0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let s={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];s.crop=r.image.cropAndResize(e,[A],[0],[he[1][0],he[1][1]],"bilinear"),s.div=r.div(s.crop,O.tf255),[s.score,s.keypoints]=r0[1].execute(s.div,["Identity_1","Identity"]);let a=(await s.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(i>=(n.hand.minConfidence||0)){o.fingerScore=i,s.reshaped=r.reshape(s.keypoints,[-1,3]);let y=(await s.reshaped.array()).map(l=>[l[0]/he[1][1],l[1]/he[1][0],l[2]||0]).map(l=>[l[0]*t.boxRaw[2],l[1]*t.boxRaw[3],l[2]||0]);o.keypoints=y.map(l=>[ee[0]*(l[0]+t.boxRaw[0]),ee[1]*(l[1]+t.boxRaw[1]),l[2]||0]),o.landmarks=G2(o.keypoints);for(let l of Object.keys(pn))o.annotations[l]=pn[l].map(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]:null)}Object.keys(s).forEach(c=>r.dispose(s[c]))}return o}async function b5(e,t){var s,A;if(!((s=r0[0])!=null&&s.executor)||!((A=r0[1])!=null&&A.executor)||!r0[0].inputs[0].shape||!r0[1].inputs[0].shape)return[];ee=[e.shape[2]||0,e.shape[1]||0],Y2++;let n=(t.hand.skipTime||0)>R()-u5,o=Y2<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?o0.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>R()-u5,c=Y2<3*(t.hand.skipFrames||0);t.skipAllowed&&o0.hands.length===t.hand.maxDetected?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):t.skipAllowed&&i&&c&&o0.hands.length>0?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):(o0.boxes=await Us(e,t),u5=R(),o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))),Y2=0);let d=[...o0.boxes];if(o0.boxes.length=0,t.cacheSensitivity>0)for(let y=0;y.05&&l.box[3]/(e.shape[1]||1)>.05&&o0.hands[y].fingerScore&&o0.hands[y].fingerScore>(t.hand.minConfidence||0)){let f=k2(l.box,mn),x=k2(l.boxRaw,mn);o0.boxes.push({...d[y],box:f,boxRaw:x})}}for(let y=0;y({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var s2={};oe(s2,{connected:()=>J2,horizontal:()=>g5,kpt:()=>K2,relative:()=>v5,vertical:()=>T5});var K2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],g5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],T5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],v5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],J2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var j=te(),R5=0;function gn(e,t){var a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0;let n=R();if(!e)return te();let o=Date.now()-e.timestamp,s=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(j.canvas=e.canvas),e.error&&(j.error=e.error),!j.body||e.body.length!==j.body.length)j.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((s-1)*j.body[P].box[F]+W)/s),g0=e.body[P].boxRaw.map((W,F)=>((s-1)*j.body[P].boxRaw[F]+W)/s),e0=e.body[P].keypoints.map((W,F)=>{var w0,t0,ne,Ke,Oe,H5,G5,V5,Z5;return{score:W.score,part:W.part,position:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[0]||0)+(W.position[0]||0))/s:W.position[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[1]||0)+(W.position[1]||0))/s:W.position[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[2]||0)+(W.position[2]||0))/s:W.position[2]],positionRaw:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[0]||0)+(W.positionRaw[0]||0))/s:W.positionRaw[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[1]||0)+(W.positionRaw[1]||0))/s:W.positionRaw[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[2]||0)+(W.positionRaw[2]||0))/s:W.positionRaw[2]],distance:[j.body[P].keypoints[F]?((s-1)*(((w0=j.body[P].keypoints[F].distance)==null?void 0:w0[0])||0)+(((t0=W.distance)==null?void 0:t0[0])||0))/s:(ne=W.distance)==null?void 0:ne[0],j.body[P].keypoints[F]?((s-1)*(((Ke=j.body[P].keypoints[F].distance)==null?void 0:Ke[1])||0)+(((Oe=W.distance)==null?void 0:Oe[1])||0))/s:(H5=W.distance)==null?void 0:H5[1],j.body[P].keypoints[F]?((s-1)*(((G5=j.body[P].keypoints[F].distance)==null?void 0:G5[2])||0)+(((V5=W.distance)==null?void 0:V5[2])||0))/s:(Z5=W.distance)==null?void 0:Z5[2]]}}),G={},S={connected:{}};(a=t.body.modelPath)!=null&&a.includes("efficientpose")?S=z2:(i=t.body.modelPath)!=null&&i.includes("blazepose")?S=M2:(c=t.body.modelPath)!=null&&c.includes("movenet")&&(S=s2);for(let[W,F]of Object.entries(S.connected)){let w0=[];for(let t0=0;t0Oe.part===F[t0]),Ke=e0.find(Oe=>Oe.part===F[t0+1]);ne&&Ke&&w0.push([ne.position,Ke.position])}G[W]=w0}j.body[P]={...e.body[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.hand||e.hand.length!==j.hand.length)j.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((s-1)*j.hand[P].box[W]+S)/s),g0=e.hand[P].boxRaw.map((S,W)=>((s-1)*j.hand[P].boxRaw[W]+S)/s);j.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(j.hand[P].keypoints=e.hand[P].keypoints);let e0=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((S,W)=>S.map((F,w0)=>((s-1)*(j.hand[P].keypoints[W][w0]||1)+(F||0))/s)):[],G={};if(Object.keys(j.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)j.hand[P].annotations=e.hand[P].annotations,G=j.hand[P].annotations;else if(e.hand[P].annotations)for(let S of Object.keys(e.hand[P].annotations))G[S]=(l=(y=(d=e.hand[P])==null?void 0:d.annotations)==null?void 0:y[S])!=null&&l[0]?e.hand[P].annotations[S].map((W,F)=>W.map((w0,t0)=>((s-1)*j.hand[P].annotations[S][F][t0]+w0)/s)):null;j.hand[P]={...e.hand[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.face||e.face.length!==j.face.length)j.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((s-1)*j.face[P].box[S]+G)/s),g0=e.face[P].boxRaw.map((G,S)=>((s-1)*j.face[P].boxRaw[S]+G)/s),e0=e.face[P].annotations;if(Object.keys(j.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)j.face[P].annotations=e.face[P].annotations,e0=j.face[P].annotations;else if(e.face[P].annotations)for(let G of Object.keys(e.face[P].annotations))e0[G]=(p=(x=(f=e.face[P])==null?void 0:f.annotations)==null?void 0:x[G])!=null&&p[0]?e.face[P].annotations[G].map((S,W)=>S.map((F,w0)=>((s-1)*j.face[P].annotations[G][W][w0]+F)/s)):null;if(e.face[P].rotation){let G={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};G.matrix=(m=e.face[P].rotation)==null?void 0:m.matrix,G.angle={roll:((s-1)*(((T=(h=j.face[P].rotation)==null?void 0:h.angle)==null?void 0:T.roll)||0)+(((u=(v=e.face[P].rotation)==null?void 0:v.angle)==null?void 0:u.roll)||0))/s,yaw:((s-1)*(((E=(g=j.face[P].rotation)==null?void 0:g.angle)==null?void 0:E.yaw)||0)+(((N=(k=e.face[P].rotation)==null?void 0:k.angle)==null?void 0:N.yaw)||0))/s,pitch:((s-1)*(((V=(C=j.face[P].rotation)==null?void 0:C.angle)==null?void 0:V.pitch)||0)+(((Z=(D=e.face[P].rotation)==null?void 0:D.angle)==null?void 0:Z.pitch)||0))/s},G.gaze={bearing:((s-1)*(((J=j.face[P].rotation)==null?void 0:J.gaze.bearing)||0)+(((q=e.face[P].rotation)==null?void 0:q.gaze.bearing)||0))/s,strength:((s-1)*(((U=j.face[P].rotation)==null?void 0:U.gaze.strength)||0)+(((m0=e.face[P].rotation)==null?void 0:m0.gaze.strength)||0))/s},j.face[P]={...e.face[P],rotation:G,box:i0,boxRaw:g0,annotations:e0}}else j.face[P]={...e.face[P],box:i0,boxRaw:g0,annotations:e0}}if(!j.object||e.object.length!==j.object.length)j.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((s-1)*j.object[P].box[G]+e0)/s),g0=e.object[P].boxRaw.map((e0,G)=>((s-1)*j.object[P].boxRaw[G]+e0)/s);j.object[P]={...e.object[P],box:i0,boxRaw:g0}}if(e.persons){let P=e.persons;if(!j.persons||P.length!==j.persons.length)j.persons=JSON.parse(JSON.stringify(P));else for(let i0=0;i0((s-1)*j.persons[i0].box[e0]+g0)/s)}e.gesture&&(j.gesture=e.gesture),j.width=e.width,j.height=e.height;let A=R();return R5=M.perfadd?R5+Math.round(A-n):Math.round(A-n),e.performance&&(j.performance={...e.performance,interpolate:R5}),j}var h0;async function M5(e){return!h0||M.initial?h0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",h0.modelUrl),h0}async function Tn(e,t){var s;if(h0||(h0=await M5(t)),!(h0!=null&&h0.executor)||!((s=h0==null?void 0:h0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[h0.inputs[0].shape?h0.inputs[0].shape[1]:0,h0.inputs[0].shape?h0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=h0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r.unstack(n.squeeze,2),n.fg=r.softmax(n.fgRaw),n.mul=r.mul(n.fg,O.tf255),n.expand=r.expandDims(n.mul,2),n.output=r.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.output],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.output,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}var k5={};oe(k5,{distance:()=>P5,find:()=>Js,similarity:()=>Ks});function P5(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let s=0;s{if(e===0)return 1;let A=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(A,1),0)};function Ks(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=P5(e,t,n);return Rn(o,n.order||2,n.min||0,n.max||1)}function Js(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,s=-1;for(let a=0;ai2,validateModel:()=>ot});var Mn=.005,I0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function w5(e){for(let t of g5){let n=e.keypoints.findIndex(s=>s.part===t[0]),o=e.keypoints.findIndex(s=>s.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]s&&s.part===t[0]),o=e.keypoints.findIndex(s=>s&&s.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]d&&d.part===t[0]),s=e.keypoints.findIndex(d=>d&&d.part===t[1]),A=e.keypoints.findIndex(d=>d&&d.part===n[0]),a=e.keypoints.findIndex(d=>d&&d.part===n[1]);if(!e.keypoints[A]||!e.keypoints[a])continue;let i=e.keypoints[o]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[o].position[0])]:[0,0],c=e.keypoints[s]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[s].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[s].position[0])]:[0,0];if(i[0]>i[1]||c[0]>c[1]){let d=e.keypoints[o];e.keypoints[o]=e.keypoints[s],e.keypoints[s]=d}}}function Pn(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=r.pad(e,I0.padding),n.resize=r.image.resizeBilinear(n.pad,[t,t]);let o=r.cast(n.resize,"int32");return Object.keys(n).forEach(a=>r.dispose(n[a])),o}function wn(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+I0.padding[2][0]+I0.padding[2][1])/t[0]-I0.padding[2][0],o.position[1]*(t[1]+I0.padding[1][0]+I0.padding[1][1])/t[1]-I0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ae(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var A0,Q2=0,E5=Number.MAX_SAFE_INTEGER,Le={boxes:[],bodies:[],last:0};async function En(e){var t;return M.initial&&(A0=null),A0?e.debug&&b("cached model:",A0.modelUrl):(h2(["size"],e),A0=await L(e.body.modelPath)),Q2=A0!=null&&A0.executor&&((t=A0==null?void 0:A0.inputs)!=null&&t[0].shape)?A0.inputs[0].shape[2]:0,Q2<64&&(Q2=256),r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),A0}function _s(e,t,n){let o=e[0][0],s=[],A=0;for(let y=0;yt.body.minConfidence){let l=[o[y][1],o[y][0]];s.push({score:Math.round(100*A)/100,part:K2[y],positionRaw:l,position:[Math.round((n.shape[2]||0)*l[0]),Math.round((n.shape[1]||0)*l[1])]})}A=s.reduce((y,l)=>l.score>y?l.score:y,0);let a=[],i=ae(s.map(y=>y.position),[n.shape[2],n.shape[1]]),c={};for(let[y,l]of Object.entries(J2)){let f=[];for(let x=0;xh.part===l[x]),m=s.find(h=>h.part===l[x+1]);p&&m&&p.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&f.push([p.position,m.position])}c[y]=f}let d={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return w5(d),a.push(d),a}function $s(e,t,n){let o=[];for(let s=0;st.body.minConfidence){let i=[];for(let f=0;f<17;f++){let x=A[3*f+2];if(x>t.body.minConfidence){let p=[A[3*f+1],A[3*f+0]];i.push({part:K2[f],score:Math.round(100*x)/100,positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}}let c=[A[52],A[51],A[54]-A[52],A[53]-A[51]],d=[Math.trunc(c[0]*(n.shape[2]||0)),Math.trunc(c[1]*(n.shape[1]||0)),Math.trunc(c[2]*(n.shape[2]||0)),Math.trunc(c[3]*(n.shape[1]||0))],y={};for(let[f,x]of Object.entries(J2)){let p=[];for(let m=0;mv.part===x[m]),T=i.find(v=>v.part===x[m+1]);h&&T&&h.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&p.push([h.position,T.position])}y[f]=p}let l={id:s,score:a,box:d,boxRaw:c,keypoints:[...i],annotations:y};w5(l),o.push(l)}}return o.sort((s,A)=>A.score-s.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function z5(e,t){var s;if(!(A0!=null&&A0.executor)||!((s=A0==null?void 0:A0.inputs)!=null&&s[0].shape))return[];t.skipAllowed||(Le.boxes.length=0),E5++;let n=(t.body.skipTime||0)>R()-Le.last,o=E5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?Le.bodies:new Promise(async A=>{let a={};E5=0,a.input=kn(e,Q2),a.res=A0==null?void 0:A0.execute(a.input),Le.last=R();let i=await a.res.array();Le.bodies=a.res.shape[2]===17?_s(i,t,e):$s(i,t,e);for(let c of Le.bodies)wn(c,[e.shape[2]||1,e.shape[1]||1]),Pn(c.keypoints);Object.keys(a).forEach(c=>r.dispose(a[c])),A(Le.bodies)})}var H0,_2=[],Sn=0,S5=Number.MAX_SAFE_INTEGER,et=0,$2=2.5;async function jn(e){if(!H0||M.initial){H0=await L(e.object.modelPath);let t=H0!=null&&H0.executor?Object.values(H0.modelSignature.inputs):void 0;et=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&b("cached model:",H0.modelUrl);return H0}async function eA(e,t,n){var d,y;let o=0,s=[],A=et;for(let l of[1,2,4]){let f=l*13,x=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)===De.length)),p=await x.array(),m=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)(n.object.minConfidence||0)&&g!==61){let k=(.5+Math.trunc(u%f))/f,N=(.5+Math.trunc(u/f))/f,C=v[u].map(P=>P*(f/l/A)),[V,D]=[k-$2/l*C[0],N-$2/l*C[1]],[Z,J]=[k+$2/l*C[2]-V,N+$2/l*C[3]-D],q=[V,D,Z,J];q=q.map(P=>Math.max(0,Math.min(P,1)));let U=[q[0]*t[0],q[1]*t[1],q[2]*t[0],q[3]*t[1]],m0={id:o++,score:Math.round(100*E)/100,class:g+1,label:De[g].label,box:U.map(P=>Math.trunc(P)),boxRaw:q};s.push(m0)}}r.dispose([x,m,h,T])}let a=s.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),i=s.map(l=>l.score),c=[];if(a&&a.length>0){let l=await r.image.nonMaxSuppressionAsync(a,i,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);c=Array.from(await l.data()),r.dispose(l)}return s=s.filter((l,f)=>c.includes(f)).sort((l,f)=>f.score-l.score),s}async function j5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>R()-Sn,o=S5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&_2.length>0?(S5++,_2):(S5=0,!M.kernels.includes("mod")||!M.kernels.includes("sparsetodense")?_2:new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[et,et],!1),i=r.div(a,O.tf255),c=r.transpose(i,[0,3,1,2]),d;t.object.enabled&&(d=H0.execute(c)),Sn=R();let y=await eA(d,A,t);_2=y,r.dispose([a,i,c,...d]),s(y)}))}var a2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],tA=a2.length,A2=a2.reduce((e,t,n)=>(e[t]=n,e),{}),nA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Ji=nA.map(([e,t])=>[A2[e],A2[t]]),Nn=[["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"]];function Ln(e){let t=e.reduce(({maxX:n,maxY:o,minX:s,minY:A},{position:{x:a,y:i}})=>({maxX:Math.max(n,a),maxY:Math.max(o,i),minX:Math.min(s,a),minY:Math.min(A,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function On(e,[t,n],[o,s]){let A=t/o,a=n/s,i=(d,y)=>({id:y,score:d.score,boxRaw:[d.box[0]/s,d.box[1]/o,d.box[2]/s,d.box[3]/o],box:[Math.trunc(d.box[0]*a),Math.trunc(d.box[1]*A),Math.trunc(d.box[2]*a),Math.trunc(d.box[3]*A)],keypoints:d.keypoints.map(({score:l,part:f,position:x})=>({score:l,part:f,position:[Math.trunc(x.x*a),Math.trunc(x.y*A)],positionRaw:[x.x/o,x.y/o]})),annotations:{}});return e.map((d,y)=>i(d,y))}var tt=class{constructor(t,n){z(this,"priorityQueue");z(this,"numberOfElements");z(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Cn(e,t,n,o){let s=n-e,A=o-t;return s*s+A*A}function O5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,rA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],nt=1,Ue=16,sA=50**2;function Wn(e,t,n,o,s,A,a=2){let i=T=>({y:A.get(T.y,T.x,e),x:A.get(T.y,T.x,A.shape[2]/2+e)}),c=(T,v,u)=>({y:L5(Math.round(T.y/Ue),0,v-1),x:L5(Math.round(T.x/Ue),0,u-1)}),[d,y]=o.shape,l=c(t.position,d,y),f=i(l),p=O5(t.position,f);for(let T=0;T[A2[f],A2[x]]),a=A.map(([,f])=>f),i=A.map(([f])=>f),c=t.shape[2],d=a.length,y=new Array(c),l=N5(e.part,Ue,n);y[e.part.id]={score:e.score,part:a2[e.part.id],position:l};for(let f=d-1;f>=0;--f){let x=a[f],p=i[f];y[x]&&!y[p]&&(y[p]=Wn(f,y[x],p,t,n,s))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function iA(e,t){let[n,o,s]=t.shape,A=new tt(n*o*s,({score:a})=>a);for(let a=0;a{var a;let A=(a=s[o])==null?void 0:a.position;return A?Cn(n,t,A.y,A.x)<=sA:!1})}function lA(e,t){return t.reduce((o,{position:s,score:A},a)=>(Dn(e,s,a)||(o+=A),o),0)/t.length}function cA(e,t,n,o,s,A){let a=[],i=iA(A,t);for(;a.lengthx.score>A);let l=lA(a,y),f=Ln(y);l>A&&a.push({keypoints:y,box:f,score:Math.round(100*l)/100})}return a}async function C5(e,t){if(!(N0!=null&&N0.executor))return[];let n=r.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=r.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=r.sub(r.div(r.cast(a,"float32"),127.5),1),d=N0.execute(i,rA).map(y=>r.squeeze(y,[0]));return d[1]=r.sigmoid(d[1]),d}),o=await Promise.all(n.map(a=>a.buffer()));for(let a of n)r.dispose(a);let s=cA(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?On(s,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function Fn(e){return!N0||M.initial?N0=await L(e.body.modelPath):e.debug&&b("cached model:",N0.modelUrl),N0}var J0,dA=["fgr","pha","r1o","r2o","r3o","r4o"],a0={},D5=0;function Gn(e){r.dispose([a0.r1i,a0.r2i,a0.r3i,a0.r4i,a0.downsample_ratio]),a0.r1i=r.tensor(0),a0.r2i=r.tensor(0),a0.r3i=r.tensor(0),a0.r4i=r.tensor(0),D5=e.segmentation.ratio||.5,a0.downsample_ratio=r.tensor(D5)}async function F5(e){return!J0||M.initial?J0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",J0.modelUrl),Gn(e),J0}var Hn=e=>r.tidy(()=>{let t=r.squeeze(e,[0]),n=r.mul(t,O.tf255);return r.cast(n,"int32")});function W5(e,t){let n=e?Hn(e):r.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?Hn(t):r.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),s=r.concat([n,o],-1);return r.dispose([n,o]),s}function xA(e){return r.tidy(()=>{let t={};return t.unstack=r.unstack(e,-1),t.concat=r.concat(t.unstack,1),t.split=r.split(t.concat,4,1),t.stack=r.concat(t.split,2),t.squeeze=r.squeeze(t.stack,[0]),t.expand=r.expandDims(t.squeeze,-1),t.add=r.add(t.expand,1),t.mul=r.mul(t.add,127.5),t.cast=r.cast(t.mul,"int32"),t.tile=r.tile(t.cast,[1,1,3]),t.alpha=r.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),r.concat([t.tile,t.alpha],-1)})}async function Vn(e,t){if(J0||(J0=await F5(t)),!(J0!=null&&J0.executor))return null;a0.src=r.div(e,255),D5!==t.segmentation.ratio&&Gn(t);let[n,o,s,A,a,i]=await J0.executeAsync(a0,dA),c;switch(t.segmentation.mode||"default"){case"default":c=W5(n,o);break;case"alpha":c=W5(null,o);break;case"foreground":c=W5(n,null);break;case"state":c=xA(s);break;default:c=r.tensor(0)}return r.dispose([a0.src,n,o,a0.r1i,a0.r2i,a0.r3i,a0.r4i]),[a0.r1i,a0.r2i,a0.r3i,a0.r4i]=[s,A,a,i],c}var b0;async function B5(e){return!b0||M.initial?b0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",b0.modelUrl),b0}async function Xn(e,t){var s;if(b0||(b0=await B5(t)),!(b0!=null&&b0.executor)||!((s=b0==null?void 0:b0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[b0.inputs[0].shape?b0.inputs[0].shape[1]:0,b0.inputs[0].shape?b0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=b0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),n.alpha=r.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=r.mul(n.alpha,O.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.mul],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.mul,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}function ot(e,t,n){var d,y;if(!t||!((d=e==null?void 0:e.config)!=null&&d.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],s=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],A=[],a=[],i=t.modelUrl,c=t.executor;if((y=c==null?void 0:c.graph)!=null&&y.nodes)for(let l of Object.values(c.graph.nodes)){let f=l.op.toLowerCase();A.includes(f)||A.push(f)}else!c&&e.config.debug&&b("model not loaded",n);for(let l of A)!o.includes(l)&&!s.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&a.push(l);return e.config.debug&&a.length>0&&b("model validation failed:",n,a),a.length>0?{name:n,missing:a,ops:A,url:i}:null}var i2=class{constructor(t){z(this,"instance");z(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let A of Object.values(p0))t+=A.sizeFromManifest,n+=A.sizeLoadedWeights,o+=A.sizeDesired;let s=o>0?n/o:0;return{numLoadedModels:Object.values(p0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:s,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(p0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,s,A,a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q;M.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?F1(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?c3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((s=this.instance.config.face.liveness)!=null&&s.enabled)&&!this.models.liveness?f3(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((A=this.instance.config.face.description)!=null&&A.enabled)&&!this.models.faceres?s3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((a=this.instance.config.face.emotion)!=null&&a.enabled)&&!this.models.emotion?t3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((i=this.instance.config.face.iris)!=null&&i.enabled)&&!((c=this.instance.config.face.attention)!=null&&c.enabled)&&!this.models.iris?X1(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((d=this.instance.config.face.mesh)!=null&&d.enabled)&&!this.models.facemesh?J1(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((y=this.instance.config.face.gear)!=null&&y.enabled)&&!this.models.gear?h3(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((l=this.instance.config.face.ssrnet)!=null&&l.enabled)&&!this.models.ssrnetage?v3(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((f=this.instance.config.face.ssrnet)!=null&&f.enabled)&&!this.models.ssrnetgender?k3(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((x=this.instance.config.face.mobilefacenet)!=null&&x.enabled)&&!this.models.mobilefacenet?j3(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((p=this.instance.config.face.insightface)!=null&&p.enabled)&&!this.models.insightface?C3(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((m=this.instance.config.body.modelPath)!=null&&m.includes("blazepose"))?g1(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?b1(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((h=this.instance.config.body.modelPath)!=null&&h.includes("efficientpose"))?k1(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?En(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((v=this.instance.config.body.modelPath)!=null&&v.includes("posenet"))?Fn(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((g=(u=this.instance.config.hand.detector)==null?void 0:u.modelPath)!=null&&g.includes("handtrack"))?un(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((k=(E=this.instance.config.hand.detector)==null?void 0:E.modelPath)!=null&&k.includes("handtrack"))?hn(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((C=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&C.includes("handdetect"))&&(n.handdetect=dn(this.instance.config),n.handskeleton=xn(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((V=this.instance.config.object.modelPath)!=null&&V.includes("centernet"))?R1(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((D=this.instance.config.object.modelPath)!=null&&D.includes("nanodet"))?jn(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((Z=this.instance.config.segmentation.modelPath)!=null&&Z.includes("selfie"))?B5(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((J=this.instance.config.segmentation.modelPath)!=null&&J.includes("meet"))?M5(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((q=this.instance.config.segmentation.modelPath)!=null&&q.includes("rvm"))?F5(this.instance.config):null;for(let[U,m0]of Object.entries(n))m0!=null&&m0.then&&m0.then(P=>this.models[U]=P);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(p0).find(s=>s.startsWith(n.name));o&&(n.size=p0[o].sizeLoadedWeights,n.url=p0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let s=ot(this.instance,o,n);s&&t.push(s)}return t}};function Yn(e,t,n,o,s){var i,c,d,y,l,f;let A=0,a=[];for(let x of e){let p={id:A++,face:x,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let g of t)x.box[0]>g.box[0]&&x.box[0]g.box[1]&&x.box[1]+x.box[3]p.body.box[0]&&g.box[0]+g.box[2]p.body.box[1]&&g.box[1]+g.box[3]p.body.box[0]&&g.box[1]+g.box[3]>p.body.box[1]&&g.box[1]+g.box[3]{g&&g.length===4&&(m.push(g[0],g[0]+g[2]),h.push(g[1],g[1]+g[3]))};T(p.face.box),T((y=p.body)==null?void 0:y.box),T((l=p.hands.left)==null?void 0:l.box),T((f=p.hands.right)==null?void 0:f.box);let v=Math.min(...m),u=Math.min(...h);p.box=[v,u,Math.max(...m)-v,Math.max(...h)-u],s!=null&&s[1]&&(s!=null&&s[2])&&(p.boxRaw=[p.box[0]/s[2],p.box[1]/s[1],p.box[2]/s[2],p.box[3]/s[1]]),a.push(p)}return a}var rt=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var gt=0;function Qr(e,t,n){let o=Q(n0,n);if(!t||!e)return;let s=O0(e);if(s){s.lineJoin="round",s.font=o.font;for(let A=0;AMt,kpt:()=>Rt});var Rt=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],Mt={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var W0,ke=224,x1,es=5,P2=[8,16,32,32,32];function ts(){let e=[],t=0;for(;tn.x)),y:r.tensor1d(e.map(n=>n.y))}}async function y1(e){if(M.initial&&(W0=null),!W0&&e.body.detector&&e.body.detector.modelPath){W0=await L(e.body.detector.modelPath);let t=W0!=null&&W0.executor?Object.values(W0.modelSignature.inputs):void 0;ke=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&W0&&b("cached model:",W0.modelUrl);return ts(),W0}var d1=[5,5];function ns(e,t){return r.tidy(()=>{let n=r.split(e,12,1),o=r.squeeze(n[0]),s=r.squeeze(n[1]),A=r.squeeze(n[2]),a=r.squeeze(n[3]);o=r.add(r.div(o,ke),t.x),s=r.add(r.div(s,ke),t.y),A=r.mul(r.div(A,ke),d1[0]),a=r.mul(r.div(a,ke),d1[1]);let i=r.sub(o,r.div(A,2)),c=r.sub(s,r.div(a,2)),d=r.add(i,A),y=r.add(c,a);return r.stack([i,c,d,y],1)})}async function os(e,t,n,o){var d,y;let s=[],A={};A.boxes=ns(e,x1),A.scores=r.sigmoid(t),A.nms=await r.image.nonMaxSuppressionAsync(A.boxes,A.scores,1,((d=n.body.detector)==null?void 0:d.minConfidence)||.1,((y=n.body.detector)==null?void 0:y.iouThreshold)||.1);let a=await A.nms.data(),i=await A.scores.data(),c=await A.boxes.array();for(let l of Array.from(a)){let f=i[l],x=c[l],p=[Math.round(x[0]*o[0]),Math.round(x[1]*o[1]),Math.round(x[2]*o[0]),Math.round(x[3]*o[1])],m={score:f,boxRaw:x,box:p};s.push(m)}return Object.keys(A).forEach(l=>r.dispose(A[l])),s}async function f1(e,t,n){let o={};o.res=W0==null?void 0:W0.execute(e,["Identity"]),o.logitsRaw=r.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=r.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=r.squeeze(o.logitsRaw),o.boxes=r.squeeze(o.boxesRaw);let s=await os(o.boxes,o.logits,t,n);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}function ae(e,t=[1,1]){let n=[e.map(i=>i[0]),e.map(i=>i[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[o[0],o[1],s[0]-o[0],s[1]-o[1]],a=[A[0]/t[0],A[1]/t[1],A[2]/t[0],A[3]/t[1]];return{box:A,boxRaw:a}}function m1(e,t=[1,1]){let n=[e.map(d=>d[0]),e.map(d=>d[1])],o=[Math.min(...n[0]),Math.min(...n[1])],s=[Math.max(...n[0]),Math.max(...n[1])],A=[(o[0]+s[0])/2,(o[1]+s[1])/2],a=Math.max(A[0]-o[0],A[1]-o[1],-A[0]+s[0],-A[1]+s[1]),i=[Math.trunc(A[0]-a),Math.trunc(A[1]-a),Math.trunc(2*a),Math.trunc(2*a)],c=[i[0]/t[0],i[1]/t[1],i[2]/t[0],i[3]/t[1]];return{box:i,boxRaw:c}}function k2(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var P0,kt=256,Pt=Number.MAX_SAFE_INTEGER,rs={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},E2=[],ie=[[0,0],[0,0],[0,0],[0,0]],p1=0,u1=e=>1-1/(1+Math.exp(e)),b1=e=>y1(e);async function g1(e){if(M.initial&&(P0=null),P0)e.debug&&b("cached model:",P0.modelUrl);else{P0=await L(e.body.modelPath);let t=P0!=null&&P0.executor?Object.values(P0.modelSignature.inputs):void 0;kt=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return P0}function h1(e,t,n){var A,a;let o={};if(!((A=e==null?void 0:e.shape)!=null&&A[1])||!((a=e==null?void 0:e.shape)!=null&&a[2]))return e;let s;if(n&&(o.cropped=r.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let i=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],c=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];ie=[[0,0],i,c,[0,0]],o.pad=r.pad(o.cropped||e,ie),o.resize=r.image.resizeBilinear(o.pad,[t,t]),s=r.div(o.resize,O.tf255)}else e.shape[1]!==t?(o.resize=r.image.resizeBilinear(o.cropped||e,[t,t]),s=r.div(o.resize,O.tf255)):s=r.div(o.cropped||e,O.tf255);return Object.keys(o).forEach(i=>r.dispose(o[i])),s}function ss(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+ie[2][0]+ie[2][1])/t[0]-ie[2][0]),Math.trunc(o.position[1]*(t[1]+ie[1][0]+ie[1][1])/t[1]-ie[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],s=n[3]-n[1];for(let A of e)A.positionRaw=[A.positionRaw[0]/s+n[1],A.positionRaw[1]/o+n[0],A.positionRaw[2]],A.position=[Math.trunc(A.positionRaw[0]*t[0]),Math.trunc(A.positionRaw[1]*t[1]),A.positionRaw[2]]}return e}function As(e){let t=e.find(i=>i.part==="leftPalm"),n=e.find(i=>i.part==="leftWrist"),o=e.find(i=>i.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let s=e.find(i=>i.part==="rightPalm"),A=e.find(i=>i.part==="rightWrist"),a=e.find(i=>i.part==="rightIndex");s.position[2]=((A.position[2]||0)+(a.position[2]||0))/2}async function as(e,t,n){if(!(P0!=null&&P0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=P0==null?void 0:P0.execute(e,rs.landmarks);let s=(await o.poseflag.data())[0],A=await o.ld.data(),a=await o.world.data();Object.keys(o).forEach(p=>r.dispose(o[p]));let i=[],c=5;for(let p=0;pp.position),l=ae(y,[n[0],n[1]]),f={};for(let[p,m]of Object.entries(Mt)){let h=[];for(let T=0;Tg.part===m[T]),u=d.find(g=>g.part===m[T+1]);v&&u&&h.push([v.position,u.position])}f[p]=h}return{id:0,score:Math.trunc(100*s)/100,box:l.box,boxRaw:l.boxRaw,keypoints:d,annotations:f}}async function wt(e,t){var A,a,i;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>R()-p1,s=Pt<(t.body.skipFrames||0);if(t.skipAllowed&&o&&s&&E2!==null)Pt++;else{let c=[];if((a=(A=t.body)==null?void 0:A.detector)!=null&&a.enabled){let d=h1(e,224);c=await f1(d,t,n),r.dispose(d)}else c=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let d=0;dr.dispose(o[d])),s}async function St(e,t){if(!(k0!=null&&k0.executor))return[];let n=(t.object.skipTime||0)>R()-v1,o=zt<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Et.length>0?(zt++,Et):(zt=0,new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[we,we]),i=t.object.enabled?k0==null?void 0:k0.execute(a,["tower_0/detections"]):null;v1=R(),r.dispose(a);let c=await is(i,A,t);Et=c,s(c)}))}var z2={};oe(z2,{connected:()=>It,kpt:()=>jt});var jt=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],It={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var _,P1=0,v0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Nt=Number.MAX_SAFE_INTEGER;async function k1(e){return M.initial&&(_=null),_?e.debug&&b("cached model:",_.modelUrl):_=await L(e.body.modelPath),_}async function ls(e,t){let[n,o]=e.shape,s=r.reshape(e,[o*n]),A=r.max(s,0),a=(await A.data())[0];if(a>t){let i=r.argMax(s,0),c=r.mod(i,n),d=(await c.data())[0],y=r.div(i,n),l=(await y.data())[0];return r.dispose([s,A,i,c,y]),[d,l,a]}return r.dispose([s,A]),[0,0,a]}async function Lt(e,t){if(!(_!=null&&_.executor)||!(_!=null&&_.inputs[0].shape))return[];let n=(t.body.skipTime||0)>R()-P1,o=Nt<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(v0.keypoints).length>0?(Nt++,[v0]):(Nt=0,new Promise(async s=>{let A=r.tidy(()=>{var p,m;let l=r.image.resizeBilinear(e,[((p=_==null?void 0:_.inputs[0].shape)==null?void 0:p[2])||0,((m=_==null?void 0:_.inputs[0].shape)==null?void 0:m[1])||0],!1),f=r.mul(l,O.tf2);return r.sub(f,O.tf1)}),a;if(t.body.enabled&&(a=_==null?void 0:_.execute(A)),P1=R(),r.dispose(A),a){v0.keypoints.length=0;let l=r.squeeze(a);r.dispose(a);let f=r.unstack(l,2);r.dispose(l);for(let x=0;x(t.body.minConfidence||0)&&v0.keypoints.push({score:Math.round(100*h)/100,part:jt[x],positionRaw:[p/_.inputs[0].shape[2],m/_.inputs[0].shape[1]],position:[Math.round(e.shape[2]*p/_.inputs[0].shape[2]),Math.round(e.shape[1]*m/_.inputs[0].shape[1])]})}f.forEach(x=>r.dispose(x))}v0.score=v0.keypoints.reduce((l,f)=>f.score>l?f.score:l,0);let i=v0.keypoints.map(l=>l.position[0]),c=v0.keypoints.map(l=>l.position[1]);v0.box=[Math.min(...i),Math.min(...c),Math.max(...i)-Math.min(...i),Math.max(...c)-Math.min(...c)];let d=v0.keypoints.map(l=>l.positionRaw[0]),y=v0.keypoints.map(l=>l.positionRaw[1]);v0.boxRaw=[Math.min(...d),Math.min(...y),Math.max(...d)-Math.min(...d),Math.max(...y)-Math.min(...y)];for(let[l,f]of Object.entries(It)){let x=[];for(let p=0;pT.part===f[p]),h=v0.keypoints.find(T=>T.part===f[p+1]);m&&h&&m.score>(t.body.minConfidence||0)&&h.score>(t.body.minConfidence||0)&&x.push([m.position,h.position])}v0.annotations[l]=x}s([v0])}))}var Fe=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],S2=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],j2=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],I2=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],S1=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],s=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],A=e.landmarks.map(a=>[(a[0]+n[0])*t[0],(a[1]+n[1])*t[1]]);return{startPoint:o,endPoint:s,landmarks:A,confidence:e.confidence}},Ot=(e,t,n)=>{let o=t.shape[1],s=t.shape[2],A=[e.startPoint[1]/o,e.startPoint[0]/s,e.endPoint[1]/o,e.endPoint[0]/s],a=r.image.cropAndResize(t,[A],[0],n),i=r.div(a,O.tf255);return r.dispose(a),i},N2=(e,t)=>{let n=S2(e),o=Fe(e),s=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-s[0],n[1]-s[1]],endPoint:[n[0]+s[0],n[1]+s[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},L2=e=>{let t=S2(e),n=Fe(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},j1=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},Ct=[[1,0,0],[0,1,0],[0,0,1]],cs=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),ds=(e,t)=>cs(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var E1=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Ee=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let s=0;s{let n=Math.cos(e),o=Math.sin(e),s=[[n,-o,0],[o,n,0],[0,0,1]],A=E1(t[0],t[1]),a=z1(A,s),i=E1(-t[0],-t[1]);return z1(a,i)},ys=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-Ee(t[0],n),-Ee(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},fs=(e,t)=>[Ee(e,t[0]),Ee(e,t[1])];function N1(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[A[0]/s*(x[0]-s/2),A[1]/s*(x[1]-s/2),x[2]||0]),i=n&&n!==0&&Math.abs(n)>.2,c=i?I1(n,[0,0]):Ct,d=i?a.map(x=>[...fs(x,c),x[2]]):a,y=i?ys(o):Ct,l=S2(t),f=[Ee(l,y[0]),Ee(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2]||0)])}function O1(e,t,n,o){let s=t.landmarks.length>=ut.count?ut.symmetryLine:ve.symmetryLine,A=0,a=Ct,i;if(e&&M.kernels.includes("rotatewithoffset"))if(A=ds(t.landmarks[s[0]],t.landmarks[s[1]]),A&&A!==0&&Math.abs(A)>.2){let d=S2(t),y=[d[0]/n.shape[2],d[1]/n.shape[1]],l=r.image.rotateWithOffset(n,A,0,[y[0],y[1]]);a=I1(-A,d),i=Ot(t,l,[o,o]),r.dispose(l)}else i=Ot(t,n,[o,o]);else i=Ot(t,n,[o,o]);return[A,a,i]}var ms=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},C1=(e,t)=>{let n=ms(e),o=Fe(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var W1=6,G0,O2=null,le=0,Be=null,D1=()=>le;async function F1(e){var t;return M.initial&&(G0=null),G0?e.debug&&b("cached model:",G0.modelUrl):G0=await L((t=e.face.detector)==null?void 0:t.modelPath),le=G0.executor&&G0.inputs[0].shape?G0.inputs[0].shape[2]:256,Be=r.scalar(le,"int32"),O2=r.tensor2d(N1(le)),G0}function ps(e){if(!O2||!Be)return r.zeros([0,0]);let t={};t.boxStarts=r.slice(e,[0,1],[-1,2]),t.centers=r.add(t.boxStarts,O2),t.boxSizes=r.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=r.div(t.boxSizes,Be),t.centersNormalized=r.div(t.centers,Be),t.halfBoxSize=r.div(t.boxSizesNormalized,O.tf2),t.starts=r.sub(t.centersNormalized,t.halfBoxSize),t.ends=r.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=r.mul(t.starts,Be),t.endNormalized=r.mul(t.ends,Be);let n=r.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>r.dispose(t[o])),n}async function B1(e,t){var i,c,d,y,l,f,x;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=r.image.resizeBilinear(e,[le,le]),n.div=r.div(n.resized,O.tf127),n.normalized=r.sub(n.div,O.tf1);let o=G0==null?void 0:G0.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let p=o.sort((m,h)=>m.size-h.size);n.concat384=r.concat([p[0],p[2]],2),n.concat512=r.concat([p[1],p[3]],2),n.concat=r.concat([n.concat512,n.concat384],1),n.batch=r.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=r.squeeze(o[0]):n.batch=r.squeeze(o);r.dispose(o),n.boxes=ps(n.batch),n.logits=r.slice(n.batch,[0,0],[-1,1]),n.sigmoid=r.sigmoid(n.logits),n.scores=r.squeeze(n.sigmoid),n.nms=await r.image.nonMaxSuppressionAsync(n.boxes,n.scores,((i=t.face.detector)==null?void 0:i.maxDetected)||0,((c=t.face.detector)==null?void 0:c.iouThreshold)||0,((d=t.face.detector)==null?void 0:d.minConfidence)||0);let s=await n.nms.array(),A=[],a=await n.scores.data();for(let p=0;p(((y=t.face.detector)==null?void 0:y.minConfidence)||0)){let h={};h.bbox=r.slice(n.boxes,[s[p],0],[1,-1]),h.slice=r.slice(n.batch,[s[p],W1-1],[1,-1]),h.squeeze=r.squeeze(h.slice),h.landmarks=r.reshape(h.squeeze,[W1,-1]);let T=await h.bbox.data(),v={startPoint:[T[0],T[1]],endPoint:[T[2],T[3]],landmarks:await h.landmarks.array(),confidence:m};h.anchor=r.slice(O2,[s[p],0],[1,2]);let u=await h.anchor.data(),g=S1(v,[(e.shape[2]||0)/le,(e.shape[1]||0)/le],u),E=N2(g,((l=t.face.detector)==null?void 0:l.scale)||1.4),k=L2(E);k.size[0]>(((f=t.face.detector)==null?void 0:f.minSize)||0)&&k.size[1]>(((x=t.face.detector)==null?void 0:x.minSize)||0)&&A.push(k),Object.keys(h).forEach(N=>r.dispose(h[N]))}}return Object.keys(n).forEach(p=>r.dispose(n[p])),A}var z0,ce=0,Dt=F0.leftEyeLower0,Ft=F0.rightEyeLower0,He={leftBounds:[Dt[0],Dt[Dt.length-1]],rightBounds:[Ft[0],Ft[Ft.length-1]]},Ge={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function X1(e){var t,n;return M.initial&&(z0=null),z0?e.debug&&b("cached model:",z0.modelUrl):z0=await L((t=e.face.iris)==null?void 0:t.modelPath),ce=z0!=null&&z0.executor&&((n=z0.inputs)!=null&&n[0].shape)?z0.inputs[0].shape[2]:0,ce===-1&&(ce=64),z0}function C2(e,t,n,o){for(let s=0;s{let t=e[He.leftBounds[0]][2],n=e[He.rightBounds[0]][2];return t-n},G1=(e,t,n,o,s,A=!1,a=2.3)=>{let i=L2(N2(j1([e[n],e[o]]),a)),c=Fe(i),d=r.image.cropAndResize(t,[[i.startPoint[1]/s,i.startPoint[0]/s,i.endPoint[1]/s,i.endPoint[0]/s]],[0],[ce,ce]);if(A&&M.kernels.includes("flipleftright")){let y=r.image.flipLeftRight(d);r.dispose(d),d=y}return{box:i,boxSize:c,crop:d}},V1=(e,t,n,o=!1)=>{let s=[];for(let A=0;A{let o=e[F0[`${n}EyeUpper0`][Ge.upperCenter]][2],s=e[F0[`${n}EyeLower0`][Ge.lowerCenter]][2],A=(o+s)/2;return t.map((a,i)=>{let c=A;return i===2?c=o:i===4&&(c=s),[a[0],a[1],c]})};async function q1(e,t,n,o){var N,C;if(!(z0!=null&&z0.executor))return e;let{box:s,boxSize:A,crop:a}=G1(e,t,He.leftBounds[0],He.leftBounds[1],n,!0,((N=o.face.iris)==null?void 0:N.scale)||2.3),{box:i,boxSize:c,crop:d}=G1(e,t,He.rightBounds[0],He.rightBounds[1],n,!0,((C=o.face.iris)==null?void 0:C.scale)||2.3),y=r.concat([a,d]);r.dispose(a),r.dispose(d);let l=z0.execute(y);r.dispose(y);let f=await l.data();r.dispose(l);let x=f.slice(0,Ge.numCoordinates*3),{rawCoords:p,iris:m}=V1(x,s,A,!0),h=f.slice(Ge.numCoordinates*3),{rawCoords:T,iris:v}=V1(h,i,c,!1),u=us(e);Math.abs(u)<30?(C2(e,p,"left",null),C2(e,T,"right",null)):u<1?C2(e,p,"left",["EyeUpper0","EyeLower0"]):C2(e,T,"right",["EyeUpper0","EyeLower0"]);let g=Z1(e,m,"left"),E=Z1(e,v,"right");return e.concat(g).concat(E)}async function Y1(e,t){var A,a,i,c,d,y,l,f,x,p;let n={lips:await((a=(A=t.filter(m=>m.size===160))==null?void 0:A[0])==null?void 0:a.data()),irisL:await((c=(i=t.filter(m=>m.size===10))==null?void 0:i[0])==null?void 0:c.data()),eyeL:await((y=(d=t.filter(m=>m.size===142))==null?void 0:d[0])==null?void 0:y.data()),irisR:await((f=(l=t.filter(m=>m.size===10))==null?void 0:l[1])==null?void 0:f.data()),eyeR:await((p=(x=t.filter(m=>m.size===142))==null?void 0:x[1])==null?void 0:p.data())};for(let m of Object.values(n))if(!m)return e;let o=Me.reduce((m,h)=>m+=e[h][2],0)/Me.length;for(let m=0;mm+=e[h][2],0)/Pe.length;for(let m=0;mR()-K0.timestamp,o=K0.skipped<(((d=t.face.detector)==null?void 0:d.skipFrames)||0);!t.skipAllowed||!n||!o||K0.boxes.length===0?(K0.boxes=await B1(e,t),K0.timestamp=R(),K0.skipped=0):K0.skipped++;let s=[],A=[],a=0,i=o2;for(let v=0;v[N[0]/(e.shape[2]||0),N[1]/(e.shape[1]||0),(N[2]||0)/i]);for(let N of Object.keys(ve))k.annotations[N]=[k.mesh[ve[N]]]}else if(!K)t.debug&&b("face mesh detection requested, but model is not loaded");else{if((x=t.face.attention)!=null&&x.enabled&&!M.kernels.includes("atan2"))return t.face.attention.enabled=!1,r.dispose(k.tensor),s;let N=K.execute(k.tensor),V=await N.find(D=>D.shape[D.shape.length-1]===1).data();if(k.faceScore=Math.round(100*V[0])/100,k.faceScore<(((p=t.face.detector)==null?void 0:p.minConfidence)||1)){if(u.confidence=k.faceScore,t.face.mesh.keepInvalid){k.box=j2(u,e),k.boxRaw=I2(u,e),k.size=u.size,k.score=k.boxScore,k.mesh=u.landmarks,k.meshRaw=k.mesh.map(D=>[D[0]/(e.shape[2]||1),D[1]/(e.shape[1]||1),(D[2]||0)/i]);for(let D of Object.keys(ve))k.annotations[D]=[k.mesh[ve[D]]]}}else{let D=N.find(U=>U.shape[U.shape.length-1]===1404),Z=r.reshape(D,[-1,3]),J=await Z.array();r.dispose(Z),(m=t.face.attention)!=null&&m.enabled?J=await Y1(J,N):(h=t.face.iris)!=null&&h.enabled&&(J=await q1(J,k.tensor,o2,t)),k.mesh=L1(J,u,g,E,o2),k.meshRaw=k.mesh.map(U=>[U[0]/(e.shape[2]||0),U[1]/(e.shape[1]||0),(U[2]||0)/i]);for(let U of Object.keys(F0))k.annotations[U]=F0[U].map(m0=>k.mesh[m0]);k.score=k.faceScore;let q={...C1(k.mesh,u),confidence:u.confidence,landmarks:u.landmarks,size:u.size};k.box=j2(q,e),k.boxRaw=I2(q,e),k.size=q.size,A.push(q)}r.dispose(N)}k.score>(((T=t.face.detector)==null?void 0:T.minConfidence)||1)?s.push(k):r.dispose(k.tensor)}return K0.boxes=A,s}async function J1(e){var t,n,o,s,A,a;return M.initial&&(K=null),(t=e.face.attention)!=null&&t.enabled&&(K!=null&&K.signature)&&Object.keys(((n=K==null?void 0:K.signature)==null?void 0:n.outputs)||{}).length<6&&(K=null),K?e.debug&&b("cached model:",K.modelUrl):(o=e.face.attention)!=null&&o.enabled?K=await L(e.face.attention.modelPath):K=await L((s=e.face.mesh)==null?void 0:s.modelPath),o2=K.executor&&((A=K==null?void 0:K.inputs)!=null&&A[0].shape)?(a=K==null?void 0:K.inputs)==null?void 0:a[0].shape[2]:256,K}var Q1=Re,_1=t2;var Gt=[],d0,W2=[],$1=0,e3=0,Ht=Number.MAX_SAFE_INTEGER,Vt=!1;async function t3(e){var t,n,o;return M.initial&&(d0=null),d0?e.debug&&b("cached model:",d0.modelUrl):(d0=await L((t=e.face.emotion)==null?void 0:t.modelPath),Vt=((o=(n=d0==null?void 0:d0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,Vt?Gt=["angry","disgust","fear","happy","neutral","sad","surprise"]:Gt=["angry","disgust","fear","happy","sad","surprise","neutral"]),d0}async function Zt(e,t,n,o){var a,i;if(!d0)return[];let s=Ht<(((a=t.face.emotion)==null?void 0:a.skipFrames)||0),A=(((i=t.face.emotion)==null?void 0:i.skipTime)||0)>R()-e3;return t.skipAllowed&&A&&s&&$1===o&&W2[n]&&W2[n].length>0?(Ht++,W2[n]):(Ht=0,new Promise(async c=>{var y,l,f;let d=[];if((y=t.face.emotion)!=null&&y.enabled){let x={},p=d0!=null&&d0.inputs[0].shape?d0.inputs[0].shape[2]:0;if(((l=t.face.emotion)==null?void 0:l.crop)>0){let h=(f=t.face.emotion)==null?void 0:f.crop,T=[[h,h,1-h,1-h]];x.resize=r.image.cropAndResize(e,T,[0],[p,p])}else x.resize=r.image.resizeBilinear(e,[p,p],!1);Vt?(x.mul=r.mul(x.resize,255),x.normalize=r.sub(x.mul,[103.939,116.779,123.68]),x.emotion=d0==null?void 0:d0.execute(x.normalize)):(x.channels=r.mul(x.resize,O.rgb),x.grayscale=r.sum(x.channels,3,!0),x.grayscaleSub=r.sub(x.grayscale,O.tf05),x.grayscaleMul=r.mul(x.grayscaleSub,O.tf2),x.emotion=d0==null?void 0:d0.execute(x.grayscaleMul)),e3=R();let m=await x.emotion.data();for(let h=0;h(t.face.emotion.minConfidence||0)&&d.push({score:Math.min(.99,Math.trunc(100*m[h])/100),emotion:Gt[h]});d.sort((h,T)=>T.score-h.score),Object.keys(x).forEach(h=>r.dispose(x[h]))}W2[n]=d,$1=o,c(d)}))}var x0,de=[],o3=0,r3=0,Xt=Number.MAX_SAFE_INTEGER;async function s3(e){var t;return M.initial&&(x0=null),x0?e.debug&&b("cached model:",x0.modelUrl):x0=await L((t=e.face.description)==null?void 0:t.modelPath),x0}function bs(e,t){var A,a;let n=e.image||e.tensor||e;if(!(x0!=null&&x0.inputs[0].shape))return n;let o;if(((A=t.face.description)==null?void 0:A.crop)>0){let i=(a=t.face.description)==null?void 0:a.crop,c=[[i,i,1-i,1-i]];o=r.image.cropAndResize(n,c,[0],[x0.inputs[0].shape[2],x0.inputs[0].shape[1]])}else o=r.image.resizeBilinear(n,[x0.inputs[0].shape[2],x0.inputs[0].shape[1]],!1);let s=r.mul(o,O.tf255);return r.dispose(o),s}async function qt(e,t,n,o){var i,c,d,y;let s={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(x0!=null&&x0.executor))return s;let A=Xt<(((i=t.face.description)==null?void 0:i.skipFrames)||0),a=(((c=t.face.description)==null?void 0:c.skipTime)||0)>R()-o3;return t.skipAllowed&&A&&a&&r3===o&&((d=de==null?void 0:de[n])==null?void 0:d.age)>0&&((y=de==null?void 0:de[n])==null?void 0:y.genderScore)>0?(Xt++,de[n]):(Xt=0,new Promise(async l=>{var f;if((f=t.face.description)!=null&&f.enabled){let x=bs(e,t),p=x0==null?void 0:x0.execute(x);o3=R(),r.dispose(x);let h=await p.find(C=>C.shape[1]===1).data(),T=Math.trunc(200*Math.abs(h[0]-.5))/100;T>(t.face.description.minConfidence||0)&&(s.gender=h[0]<=.5?"female":"male",s.genderScore=Math.min(.99,T));let v=r.argMax(p.find(C=>C.shape[1]===100),1),u=(await v.data())[0];r.dispose(v);let E=await p.find(C=>C.shape[1]===100).data();s.age=Math.round(E[u-1]>E[u+1]?10*u-100*E[u-1]:10*u+100*E[u+1])/10,(Number.isNaN(h[0])||Number.isNaN(E[0]))&&b("faceres error:",{model:x0,result:p});let k=p.find(C=>C.shape[1]===1024),N=k?await k.data():[];s.descriptor=Array.from(N),p.forEach(C=>r.dispose(C))}de[n]=s,r3=o,l(s)}))}var Ve=.1,Ut=.5;function gs(e,t,n){let o=!1,s=n.length-1;for(let A=0;At!=n[s].y>t&&e<(n[s].x-n[A].x)*(t-n[A].y)/(n[s].y-n[A].y)+n[A].x&&(o=!o);return o}async function a3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),s=[];for(let a of F0.silhouette)s.push({x:(e.mesh[a][0]-e.box[0])/e.box[2],y:(e.mesh[a][1]-e.box[1])/e.box[3]});Ve&&Ve>0&&(s=s.map(a=>({x:a.x>.5?a.x+Ve:a.x-Ve,y:a.y>.5?a.y+Ve:a.y-Ve})));for(let a=0;aR()-l3,A=Yt<(((i=t.face.antispoof)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&i3===o&&D2[n]?(Yt++,D2[n]):(Yt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[2]:0,y0!=null&&y0.inputs[0].shape?y0.inputs[0].shape[1]:0],!1),y=y0==null?void 0:y0.execute(d),l=(await y.data())[0];D2[n]=Math.round(100*l)/100,i3=o,l3=R(),r.dispose([d,y]),c(D2[n])}))}var f0,F2=[],Jt=Number.MAX_SAFE_INTEGER,x3=0,y3=0;async function f3(e){var t;return M.initial&&(f0=null),f0?e.debug&&b("cached model:",f0.modelUrl):f0=await L((t=e.face.liveness)==null?void 0:t.modelPath),f0}async function Qt(e,t,n,o){var a,i;if(!(f0!=null&&f0.executor))return 0;let s=(((a=t.face.liveness)==null?void 0:a.skipTime)||0)>R()-y3,A=Jt<(((i=t.face.liveness)==null?void 0:i.skipFrames)||0);return t.skipAllowed&&s&&A&&x3===o&&F2[n]?(Jt++,F2[n]):(Jt=0,new Promise(async c=>{let d=r.image.resizeBilinear(e,[f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[2]:0,f0!=null&&f0.inputs[0].shape?f0.inputs[0].shape[1]:0],!1),y=f0==null?void 0:f0.execute(d),l=(await y.data())[0];F2[n]=Math.round(100*l)/100,x3=o,y3=R(),r.dispose([d,y]),c(F2[n])}))}var B0,_t=[],vs=["white","black","asian","indian","other"],Rs=[15,23,28,35.5,45.5,55.5,65],p3=0,u3=0,$t=Number.MAX_SAFE_INTEGER;async function h3(e){var t;return M.initial&&(B0=null),B0?e.debug&&b("cached model:",B0.modelUrl):B0=await L((t=e.face.gear)==null?void 0:t.modelPath),B0}async function e5(e,t,n,o){var a,i;if(!B0)return{age:0,gender:"unknown",genderScore:0,race:[]};let s=$t<(((a=t.face.gear)==null?void 0:a.skipFrames)||0),A=(((i=t.face.gear)==null?void 0:i.skipTime)||0)>R()-u3;return t.skipAllowed&&A&&s&&p3===o&&_t[n]?($t++,_t[n]):($t=0,new Promise(async c=>{var T,v,u,g;if(!(B0!=null&&B0.inputs[0].shape))return;let d={},y=[[0,.1,.9,.9]];if(((T=t.face.gear)==null?void 0:T.crop)>0){let E=(v=t.face.gear)==null?void 0:v.crop;y=[[E,E,1-E,1-E]]}d.resize=r.image.cropAndResize(e,y,[0],[B0.inputs[0].shape[2],B0.inputs[0].shape[1]]);let l={age:0,gender:"unknown",genderScore:0,race:[]};(u=t.face.gear)!=null&&u.enabled&&([d.age,d.gender,d.race]=B0.execute(d.resize,["age_output","gender_output","race_output"]));let f=await d.gender.data();l.gender=f[0]>f[1]?"male":"female",l.genderScore=Math.round(100*(f[0]>f[1]?f[0]:f[1]))/100;let x=await d.race.data();for(let E=0;E(((g=t.face.gear)==null?void 0:g.minConfidence)||.2)&&l.race.push({score:Math.round(100*x[E])/100,race:vs[E]});l.race.sort((E,k)=>k.score-E.score);let m=Array.from(await d.age.data()).map((E,k)=>[Rs[k],E]).sort((E,k)=>k[1]-E[1]),h=m[0][0];for(let E=1;Er.dispose(d[E])),_t[n]=l,p3=o,u3=R(),c(l)}))}var R0,B2=[],g3=0,T3=0,t5=Number.MAX_SAFE_INTEGER;async function v3(e){return M.initial&&(R0=null),R0?e.debug&&b("cached model:",R0.modelUrl):R0=await L(e.face.ssrnet.modelPathAge),R0}async function n5(e,t,n,o){var a,i,c,d;if(!R0)return{age:0};let s=t5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-T3;return t.skipAllowed&&s&&A&&g3===o&&((c=B2[n])!=null&&c.age)&&((d=B2[n])==null?void 0:d.age)>0?(t5++,B2[n]):(t5=0,new Promise(async y=>{var x,p,m;if(!(R0!=null&&R0.inputs)||!R0.inputs[0]||!R0.inputs[0].shape)return;let l={};if(((x=t.face.ssrnet)==null?void 0:x.crop)>0){let h=(p=t.face.ssrnet)==null?void 0:p.crop,T=[[h,h,1-h,1-h]];l.resize=r.image.cropAndResize(e,T,[0],[R0.inputs[0].shape[2],R0.inputs[0].shape[1]])}else l.resize=r.image.resizeBilinear(e,[R0.inputs[0].shape[2],R0.inputs[0].shape[1]],!1);l.enhance=r.mul(l.resize,O.tf255);let f={age:0};if((m=t.face.ssrnet)!=null&&m.enabled&&(l.age=R0.execute(l.enhance)),l.age){let h=await l.age.data();f.age=Math.trunc(10*h[0])/10}Object.keys(l).forEach(h=>r.dispose(l[h])),B2[n]=f,g3=o,T3=R(),y(f)}))}var u0,H2=[],M3=0,P3=0,o5=Number.MAX_SAFE_INTEGER,r5=[.2989,.587,.114];async function k3(e){var t;return M.initial&&(u0=null),u0?e.debug&&b("cached model:",u0.modelUrl):u0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),u0}async function s5(e,t,n,o){var a,i,c,d;if(!u0)return{gender:"unknown",genderScore:0};let s=o5<(((a=t.face.ssrnet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.ssrnet)==null?void 0:i.skipTime)||0)>R()-P3;return t.skipAllowed&&s&&A&&M3===o&&((c=H2[n])!=null&&c.gender)&&((d=H2[n])==null?void 0:d.genderScore)>0?(o5++,H2[n]):(o5=0,new Promise(async y=>{var p,m,h;if(!(u0!=null&&u0.inputs[0].shape))return;let l={};if(((p=t.face.ssrnet)==null?void 0:p.crop)>0){let T=(m=t.face.ssrnet)==null?void 0:m.crop,v=[[T,T,1-T,1-T]];l.resize=r.image.cropAndResize(e,v,[0],[u0.inputs[0].shape[2],u0.inputs[0].shape[1]])}else l.resize=r.image.resizeBilinear(e,[u0.inputs[0].shape[2],u0.inputs[0].shape[1]],!1);l.enhance=r.tidy(()=>{var v,u;let T;if(((u=(v=u0==null?void 0:u0.inputs)==null?void 0:v[0].shape)==null?void 0:u[3])===1){let[g,E,k]=r.split(l.resize,3,3),N=r.mul(g,r5[0]),C=r.mul(E,r5[1]),V=r.mul(k,r5[2]),D=r.addN([N,C,V]);T=r.mul(r.sub(D,O.tf05),2)}else T=r.mul(r.sub(l.resize,O.tf05),2);return T});let f={gender:"unknown",genderScore:0};(h=t.face.ssrnet)!=null&&h.enabled&&(l.gender=u0.execute(l.enhance));let x=await l.gender.data();f.gender=x[0]>x[1]?"female":"male",f.genderScore=x[0]>x[1]?Math.trunc(100*x[0])/100:Math.trunc(100*x[1])/100,Object.keys(l).forEach(T=>r.dispose(l[T])),H2[n]=f,M3=o,P3=R(),y(f)}))}var S0,A5=[],E3=0,z3=0,S3=Number.MAX_SAFE_INTEGER;async function j3(e){var t;return M.initial&&(S0=null),S0?e.debug&&b("cached model:",S0.modelUrl):S0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),S0}async function a5(e,t,n,o){var a,i;if(!(S0!=null&&S0.executor))return[];let s=S3<(((a=t.face.mobilefacenet)==null?void 0:a.skipFrames)||0),A=(((i=t.face.mobilefacenet)==null?void 0:i.skipTime)||0)>R()-z3;return t.skipAllowed&&A&&s&&E3===o&&A5[n]?(S3++,A5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.mobilefacenet)!=null&&y.enabled&&(S0!=null&&S0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[S0.inputs[0].shape[2],S0.inputs[0].shape[1]],!1),l.data=S0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}A5[n]=d,E3=o,z3=R(),c(d)})}var j0,i5=[],N3=0,L3=0,O3=Number.MAX_SAFE_INTEGER;async function C3(e){return M.initial&&(j0=null),j0?e.debug&&b("cached model:",j0.modelUrl):j0=await L(e.face.insightface.modelPath),j0}async function l5(e,t,n,o){var a,i;if(!(j0!=null&&j0.executor))return[];let s=O3<(((a=t.face.insightface)==null?void 0:a.skipFrames)||0),A=(((i=t.face.insightface)==null?void 0:i.skipTime)||0)>R()-L3;return t.skipAllowed&&A&&s&&N3===o&&i5[n]?(O3++,i5[n]):new Promise(async c=>{var y;let d=[];if((y=t.face.insightface)!=null&&y.enabled&&(j0!=null&&j0.inputs[0].shape)){let l={};l.crop=r.image.resizeBilinear(e,[j0.inputs[0].shape[2],j0.inputs[0].shape[1]],!1),l.data=j0.execute(l.crop);let f=await l.data.data();d=Array.from(f),Object.keys(l).forEach(x=>r.dispose(l[x]))}i5[n]=d,N3=o,L3=R(),c(d)})}var Ms=e=>{let t=(l,f)=>Math.atan2(l[1]-f[1],l[0]-f[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,s=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),A=s?e.mesh[473]:e.mesh[468],a=s?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],i=s?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],c=[(a[0]-A[0])/i[0]-n[0],o*(A[1]-a[1])/i[1]-n[1]],d=Math.sqrt(c[0]*c[0]+c[1]*c[1]);return d=Math.min(d,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],c)+Math.PI/2)%Math.PI,strength:d}},D3=(e,t)=>{let n=m=>{let h=Math.sqrt(m[0]*m[0]+m[1]*m[1]+m[2]*m[2]);return m[0]/=h,m[1]/=h,m[2]/=h,m},o=(m,h)=>{let T=m[0]-h[0],v=m[1]-h[1],u=m[2]-h[2];return[T,v,u]},s=(m,h)=>{let T=m[1]*h[2]-m[2]*h[1],v=m[2]*h[0]-m[0]*h[2],u=m[0]*h[1]-m[1]*h[0];return[T,v,u]},A=m=>{let[h,T,v,u,g,E,k,N,C]=m,V,D,Z;return u<1?u>-1?(Z=Math.asin(u),D=Math.atan2(-k,h),V=Math.atan2(-E,g)):(Z=-Math.PI/2,D=-Math.atan2(N,C),V=0):(Z=Math.PI/2,D=Math.atan2(N,C),V=0),Number.isNaN(V)&&(V=0),Number.isNaN(D)&&(D=0),Number.isNaN(Z)&&(Z=0),{pitch:2*-V,yaw:2*-D,roll:2*-Z}},a=e.meshRaw;if(!a||a.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let i=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,c=[a[10],a[152],a[234],a[454]].map(m=>[m[0]*t[0]/i,m[1]*t[1]/i,m[2]]),d=n(o(c[1],c[0])),y=n(o(c[3],c[2])),l=n(s(y,d));y=s(d,l);let f=[y[0],y[1],y[2],d[0],d[1],d[2],l[0],l[1],l[2]],x=A(f),p=a.length===478?Ms(e):{bearing:0,strength:0};return{angle:x,matrix:f,gaze:p}};function F3(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var c5=async(e,t)=>{var p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0,P,i0,g0,e0,G;let n=R(),o,s,A,a,i,c,d,y,l,f=[];e.state="run:face";let x=await K1(t,e.config);if(e.performance.face=M.perfadd?(e.performance.face||0)+Math.trunc(R()-n):Math.trunc(R()-n),!t.shape||t.shape.length!==4)return[];if(!x)return[];for(let S=0;S200?D3(x[S],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?a=(m=e.config.face.emotion)!=null&&m.enabled?Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[]:(e.state="run:emotion",n=R(),a=(h=e.config.face.emotion)!=null&&h.enabled?await Zt(x[S].tensor||r.tensor([]),e.config,S,x.length):[],e.performance.emotion=M.perfadd?(e.performance.emotion||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?d=(T=e.config.face.antispoof)!=null&&T.enabled?Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:antispoof",n=R(),d=(v=e.config.face.antispoof)!=null&&v.enabled?await Kt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.antispoof=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?y=(u=e.config.face.liveness)!=null&&u.enabled?Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0:(e.state="run:liveness",n=R(),y=(g=e.config.face.liveness)!=null&&g.enabled?await Qt(x[S].tensor||r.tensor([]),e.config,S,x.length):0,e.performance.liveness=M.perfadd?(e.performance.antispoof||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?s=(E=e.config.face.gear)!=null&&E.enabled?e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:gear",n=R(),s=(k=e.config.face.gear)!=null&&k.enabled?await e5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.gear=Math.trunc(R()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(N=e.config.face.ssrnet)!=null&&N.enabled?n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(C=e.config.face.ssrnet)!=null&&C.enabled?s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null):(e.state="run:ssrnet",n=R(),o=(V=e.config.face.ssrnet)!=null&&V.enabled?await n5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,A=(D=e.config.face.ssrnet)!=null&&D.enabled?await s5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.ssrnet=Math.trunc(R()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?i=(Z=e.config.face.mobilefacenet)!=null&&Z.enabled?a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),i=(J=e.config.face.mobilefacenet)!=null&&J.enabled?await a5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?c=(q=e.config.face.insightface)!=null&&q.enabled?l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null:(e.state="run:mobilefacenet",n=R(),c=(U=e.config.face.insightface)!=null&&U.enabled?await l5(x[S].tensor||r.tensor([]),e.config,S,x.length):null,e.performance.mobilefacenet=Math.trunc(R()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?l=qt(x[S].tensor||r.tensor([]),e.config,S,x.length):(e.state="run:description",n=R(),l=await qt(x[S].tensor||r.tensor([]),e.config,S,x.length),e.performance.description=M.perfadd?(e.performance.description||0)+Math.trunc(R()-n):Math.trunc(R()-n)),e.analyze("End Description:"),e.config.async&&([o,A,a,i,c,l,s,d,y]=await Promise.all([o,A,a,i,c,l,s,d,y])),e.analyze("Finish Face:"),(m0=e.config.face.ssrnet)!=null&&m0.enabled&&o&&A&&(l={...l,age:o.age,gender:A.gender,genderScore:A.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&s&&(l={...l,age:s.age,gender:s.gender,genderScore:s.genderScore,race:s.race}),(i0=e.config.face.mobilefacenet)!=null&&i0.enabled&&i&&(l.descriptor=i),(g0=e.config.face.insightface)!=null&&g0.enabled&&c&&(l.descriptor=c);let F=(e0=e.config.face.iris)!=null&&e0.enabled?F3(x[S],t.shape[2]):0,w0=(G=e.config.face.detector)!=null&&G.return?r.squeeze(x[S].tensor):null;r.dispose(x[S].tensor),x[S].tensor&&delete x[S].tensor;let t0={...x[S],id:S};l.age&&(t0.age=l.age),l.gender&&(t0.gender=l.gender),l.genderScore&&(t0.genderScore=l.genderScore),l.descriptor&&(t0.embedding=l.descriptor),l.race&&(t0.race=l.race),a&&(t0.emotion=a),d&&(t0.real=d),y&&(t0.live=y),F>0&&(t0.distance=F),W&&(t0.rotation=W),w0&&(t0.tensor=w0),f.push(t0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),f};var M0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>M0.nameMapping[e],getPoints:e=>M0.pointsMapping[e]},ye={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>ye.nameMapping[e]},$={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>$.nameMapping[e]},xe=class{constructor(t){z(this,"name");z(this,"curls");z(this,"directions");z(this,"weights");z(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((s,A)=>s+A,0);this.weightsRelative=this.weights.map(s=>s*5/o)}matchAgainst(t,n){let o=0;for(let s in t){let A=t[s],a=this.curls[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}for(let s in n){let A=n[s],a=this.directions[s];if(typeof a=="undefined"){o+=this.weightsRelative[s];continue}for(let[i,c]of a)if(A===i){o+=c*this.weightsRelative[s];break}}return o/10}};var{thumb:V0,index:_0,middle:$0,ring:ze,pinky:Se}=M0,{none:Z0,half:ks,full:X0}=ye,{verticalUp:Ze,verticalDown:ni,horizontalLeft:d5,horizontalRight:ws,diagonalUpRight:Es,diagonalUpLeft:Xe,diagonalDownRight:oi,diagonalDownLeft:ri}=$,fe=new xe("thumbs up");fe.curl(V0,Z0,1);fe.direction(V0,Ze,1);fe.direction(V0,Xe,.25);fe.direction(V0,Es,.25);for(let e of[M0.index,M0.middle,M0.ring,M0.pinky])fe.curl(e,X0,1),fe.direction(e,d5,1),fe.direction(e,ws,1);var s0=new xe("victory");s0.curl(V0,ks,.5);s0.curl(V0,Z0,.5);s0.direction(V0,Ze,1);s0.direction(V0,Xe,1);s0.curl(_0,Z0,1);s0.direction(_0,Ze,.75);s0.direction(_0,Xe,1);s0.curl($0,Z0,1);s0.direction($0,Ze,1);s0.direction($0,Xe,.75);s0.curl(ze,X0,1);s0.direction(ze,Ze,.2);s0.direction(ze,Xe,1);s0.direction(ze,d5,.2);s0.curl(Se,X0,1);s0.direction(Se,Ze,.2);s0.direction(Se,Xe,1);s0.direction(Se,d5,.2);s0.weight(_0,2);s0.weight($0,2);var me=new xe("point");me.curl(V0,X0,1);me.curl(_0,Z0,.5);me.curl($0,X0,.5);me.curl(ze,X0,.5);me.curl(Se,X0,.5);me.weight(_0,2);me.weight($0,2);var pe=new xe("middle finger");pe.curl(V0,Z0,1);pe.curl(_0,X0,.5);pe.curl($0,X0,.5);pe.curl(ze,X0,.5);pe.curl(Se,X0,.5);pe.weight(_0,2);pe.weight($0,2);var qe=new xe("open palm");qe.curl(V0,Z0,.75);qe.curl(_0,Z0,.75);qe.curl($0,Z0,.75);qe.curl(ze,Z0,.75);qe.curl(Se,Z0,.75);var B3=[fe,s0,me,pe,qe];var zs=.7,je={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function H3(e,t,n,o){let s=(t-o)/(e-n),A=Math.atan(s)*180/Math.PI;return A<=0?A=-A:A>0&&(A=180-A),A}function V3(e,t){if(!e||!t)return[0,0];let n=H3(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=H3(e[1],e[2],t[1],t[2]);return[n,o]}function G3(e,t=1){let n=0,o=0,s=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:s=1*t,[n,o,s]}function Ss(e,t,n){let o=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],i=e[1]-n[1],c=t[1]-n[1],d=e[2]-t[2],y=e[2]-n[2],l=t[2]-n[2],f=Math.sqrt(o*o+a*a+d*d),x=Math.sqrt(s*s+i*i+y*y),p=Math.sqrt(A*A+c*c+l*l),m=(p*p+f*f-x*x)/(2*p*f);m>1?m=1:m<-1&&(m=-1);let h=Math.acos(m);h=57.2958*h%180;let T;return h>je.NO_CURL_START_LIMIT?T=ye.none:h>je.HALF_CURL_START_LIMIT?T=ye.half:T=ye.full,T}function Z3(e,t,n,o){let s;return o===Math.abs(e)?e>0?s=$.horizontalLeft:s=$.horizontalRight:o===Math.abs(t)?t>0?s=$.horizontalLeft:s=$.horizontalRight:n>0?s=$.horizontalLeft:s=$.horizontalRight,s}function X3(e,t,n,o){let s;return o===Math.abs(e)?e<0?s=$.verticalDown:s=$.verticalUp:o===Math.abs(t)?t<0?s=$.verticalDown:s=$.verticalUp:n<0?s=$.verticalDown:s=$.verticalUp,s}function js(e,t,n,o,s,A,a,i){let c,d=X3(e,t,n,o),y=Z3(s,A,a,i);return d===$.verticalUp?y===$.horizontalLeft?c=$.diagonalUpLeft:c=$.diagonalUpRight:y===$.horizontalLeft?c=$.diagonalDownLeft:c=$.diagonalDownRight,c}function Is(e,t,n,o){let s=e[0]-t[0],A=e[0]-n[0],a=t[0]-n[0],i=e[1]-t[1],c=e[1]-n[1],d=t[1]-n[1],y=Math.max(Math.abs(s),Math.abs(A),Math.abs(a)),l=Math.max(Math.abs(i),Math.abs(c),Math.abs(d)),f=0,x=0,p=0,m=l/(y+1e-5);m>1.5?f+=je.DISTANCE_VOTE_POWER:m>.66?x+=je.DISTANCE_VOTE_POWER:p+=je.DISTANCE_VOTE_POWER;let h=Math.sqrt(s*s+i*i),T=Math.sqrt(A*A+c*c),v=Math.sqrt(a*a+d*d),u=Math.max(h,T,v),g=e[0],E=e[1],k=n[0],N=n[1];u===h?(k=n[0],N=n[1]):u===v&&(g=t[0],E=t[1]);let D=V3([g,E],[k,N]),Z=G3(D,je.TOTAL_ANGLE_VOTE_POWER);f+=Z[0],x+=Z[1],p+=Z[2];for(let q of o){let U=G3(q,je.SINGLE_ANGLE_VOTE_POWER);f+=U[0],x+=U[1],p+=U[2]}let J;return f===Math.max(f,x,p)?J=X3(c,i,d,l):p===Math.max(x,p)?J=Z3(A,s,a,y):J=js(c,i,d,l,A,s,a,y),J}function q3(e){let t=[],n=[],o=[],s=[];if(!e)return{curls:o,directions:s};for(let A of M0.all){let a=M0.getPoints(A),i=[],c=[];for(let d of a){let y=e[d[0]],l=e[d[1]],f=V3(y,l),x=f[0],p=f[1];i.push(x),c.push(p)}t.push(i),n.push(c)}for(let A of M0.all){let a=A===M0.thumb?1:0,i=M0.getPoints(A),c=e[i[a][0]],d=e[i[a+1][1]],y=e[i[3][1]],l=Ss(c,d,y),f=Is(c,d,y,t[A].slice(a));o[A]=l,s[A]=f}return{curls:o,directions:s}}function G2(e){if(!e||e.length===0)return null;let t=q3(e),n={};for(let o of M0.all)n[M0.getName(o)]={curl:ye.getName(t.curls[o]),direction:$.getName(t.directions[o])};return n}function U3(e){let t=[];if(!e||e.length===0)return t;let n=q3(e);for(let o of B3){let s=o.matchAgainst(n.curls,n.directions);s>=zs&&t.push({name:o.name,confidence:s})}return t}var Y3=e=>{if(!e)return[];let t=[];for(let n=0;nc.part==="leftWrist"),s=e[n].keypoints.find(c=>c.part==="rightWrist"),A=e[n].keypoints.find(c=>c.part==="nose");A&&o&&s&&o.position[1]c.part==="leftShoulder"),i=e[n].keypoints.find(c=>c.part==="rightShoulder");a&&i&&Math.abs(a.positionRaw[1]-i.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${a.position[1]>i.position[1]?"left":"right"}`})}return t},K3=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),s=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/s)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 i=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]));i>10&&t.push({face:n,gesture:`mouth ${Math.trunc(i)}% open`});let c=e[n].mesh[152][2]||0;Math.abs(c)>10&&t.push({face:n,gesture:`head ${c<0?"up":"down"}`})}return t},J3=e=>{var n,o,s,A;if(!e)return[];let t=[];for(let a=0;a.06||h>.06)&&(x=!1),m>h?h>.04&&t.push({iris:a,gesture:"looking right"}):m>.04&&t.push({iris:a,gesture:"looking left"});let T=Math.abs(e[a].mesh[145][1]-e[a].annotations.rightEyeIris[0][1])/e[a].box[3],v=Math.abs(e[a].mesh[374][1]-e[a].annotations.leftEyeIris[0][1])/e[a].box[3];(v<.01||T<.01||v>.022||T>.022)&&(x=!1),(v<.01||T<.01)&&t.push({iris:a,gesture:"looking down"}),(v>.022||T>.022)&&t.push({iris:a,gesture:"looking up"}),x&&t.push({iris:a,gesture:"looking center"})}return t},Q3=e=>{if(!e)return[];let t=[];for(let n=0;n0){let s=o.reduce((a,i)=>(a.position[2]||0)<(i.position[2]||0)?a:i);t.push({hand:n,gesture:`${s.name} forward`});let A=o.reduce((a,i)=>a.position[1][A[0]*t[0],A[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:s,confidence:e.confidence}}function Z2(e,t=1.5){let n=r2(e),o=V2(e),s=[t*o[0]/2,t*o[1]/2],A=[n[0]-s[0],n[1]-s[1]],a=[n[0]+s[0],n[1]+s[1]];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function X2(e){let t=r2(e),n=V2(e),s=Math.max(...n)/2,A=[t[0]-s,t[1]-s],a=[t[0]+s,t[1]+s];return{startPoint:A,endPoint:a,palmLandmarks:e.palmLandmarks}}function Ls(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function nn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Ls(n)}var _3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ue(e,t){let n=0;for(let o=0;o[a.x,a.y]),this.anchorsTensor=r.tensor2d(this.anchors),this.inputSize=((A=(s=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:s.shape)==null?void 0:A[2])||0,this.inputSizeTensor=r.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=r.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=r.slice(t,[0,0],[-1,2]),n.boxSizes=r.slice(t,[0,2],[-1,2]),n.div=r.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=r.add(n.div,this.anchorsTensor),n.halfBoxSizes=r.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=r.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=r.mul(n.sub,this.inputSizeTensor),n.add=r.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=r.mul(n.add,this.inputSizeTensor);let o=r.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(s=>r.dispose(n[s])),o}normalizeLandmarks(t,n){let o={};o.reshape=r.reshape(t,[-1,7,2]),o.div=r.div(o.reshape,this.inputSizeTensor),o.landmarks=r.add(o.div,this.anchors[n]?this.anchors[n]:0);let s=r.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(A=>r.dispose(o[A])),s}async predict(t,n){var i;let o={};o.resize=r.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=r.div(o.resize,O.tf127),o.image=r.sub(o.div,O.tf1),o.batched=this.model.execute(o.image),o.predictions=r.squeeze(o.batched),o.slice=r.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=r.sigmoid(o.slice),o.scores=r.squeeze(o.sigmoid);let s=await o.scores.data();o.boxes=r.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await r.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((i=n.hand)==null?void 0:i.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let A=await o.nms.array(),a=[];for(let c of A){let d={};d.box=r.slice(o.norm,[c,0],[1,-1]),d.slice=r.slice(o.predictions,[c,5],[1,14]),d.norm=this.normalizeLandmarks(d.slice,c),d.palmLandmarks=r.reshape(d.norm,[-1,2]);let y=await d.box.data(),l=y.slice(0,2),f=y.slice(2,4),x=await d.palmLandmarks.array(),p={startPoint:l,endPoint:f,palmLandmarks:x,confidence:s[c]},m=tn(p,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);a.push(m),Object.keys(d).forEach(h=>r.dispose(d[h]))}return Object.keys(o).forEach(c=>r.dispose(o[c])),a}};var Ds=5,An=1.65,an=[0,5,9,13,17,1,2],Fs=0,Bs=2,ln=0,U2=class{constructor(t,n){z(this,"handDetector");z(this,"handPoseModel");z(this,"inputSize");z(this,"storedBoxes");z(this,"skipped");z(this,"detectedHands");var o,s,A;this.handDetector=t,this.handPoseModel=n,this.inputSize=((A=(s=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:s[0].shape)==null?void 0:A[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(a=>a[0]),o=t.map(a=>a[1]),s=[Math.min(...n),Math.min(...o)],A=[Math.max(...n),Math.max(...o)];return{startPoint:s,endPoint:A}}getBoxForPalmLandmarks(t,n){let o=t.map(A=>f5([...A,1],n)),s=this.calculateLandmarksBoundingBox(o);return Z2(X2(s),Ds)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Z2(X2(n),An);o.palmLandmarks=[];for(let s=0;s[a[0]*(x[0]-this.inputSize/2),a[1]*(x[1]-this.inputSize/2),a[2]*x[2]]),c=y5(o,[0,0]),d=i.map(x=>[...f5(x,c),x[2]]),y=on(s),l=[...r2(n),1],f=[ue(l,y[0]),ue(l,y[1])];return d.map(x=>[Math.trunc(x[0]+f[0]),Math.trunc(x[1]+f[1]),Math.trunc(x[2])])}async estimateHands(t,n){let o=!1,s,A=(n.hand.skipTime||0)>R()-ln,a=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&A&&a?this.skipped++:(s=await this.handDetector.predict(t,n),this.skipped=0),s&&s.length>0&&(s.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...s],this.storedBoxes.length>0&&(o=!0));let i=[];for(let c=0;c=n.hand.minConfidence/4){let E=r.reshape(u,[-1,3]),k=await E.array();r.dispose(u),r.dispose(E);let N=this.transformRawCoords(k,m,y,p),C=this.getBoxForHandLandmarks(N);this.storedBoxes[c]={...C,confidence:g};let V={landmarks:N,confidence:g,boxConfidence:d.confidence,fingerConfidence:g,box:{topLeft:C.startPoint,bottomRight:C.endPoint}};i.push(V)}else this.storedBoxes[c]=null;r.dispose(u)}else{let y=Z2(X2(d),An),l={confidence:d.confidence,boxConfidence:d.confidence,fingerConfidence:0,box:{topLeft:y.startPoint,bottomRight:y.endPoint},landmarks:[]};i.push(l)}}return this.storedBoxes=this.storedBoxes.filter(c=>c!==null),this.detectedHands=i.length,i.length>n.hand.maxDetected&&(i.length=n.hand.maxDetected),i}};var cn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},Ie,Ne,m5;function Gs(){let e=Ie?new q2(Ie):void 0;e&&Ne&&(m5=new U2(e,Ne))}async function p5(e,t){m5||Gs();let n=await m5.estimateHands(e,t);if(!n)return[];let o=[];for(let s=0;sn[s].landmarks[l]);let a=n[s].landmarks,i=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],c=[0,0,0,0];if(a&&a.length>0){for(let y of a)y[0]i[2]&&(i[2]=y[0]),y[1]>i[3]&&(i[3]=y[1]);i[2]-=i[0],i[3]-=i[1],c=[i[0]/(e.shape[2]||0),i[1]/(e.shape[1]||0),i[2]/(e.shape[2]||0),i[3]/(e.shape[1]||0)]}else i=n[s].box?[Math.trunc(Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.max(0,n[s].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[s].box.bottomRight[0])-Math.max(0,n[s].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[s].box.bottomRight[1])-Math.max(0,n[s].box.topLeft[1]))]:[0,0,0,0],c=[n[s].box.topLeft[0]/(e.shape[2]||0),n[s].box.topLeft[1]/(e.shape[1]||0),(n[s].box.bottomRight[0]-n[s].box.topLeft[0])/(e.shape[2]||0),(n[s].box.bottomRight[1]-n[s].box.topLeft[1])/(e.shape[1]||0)];let d=G2(a);o.push({id:s,score:Math.round(100*n[s].confidence)/100,boxScore:Math.round(100*n[s].boxConfidence)/100,fingerScore:Math.round(100*n[s].fingerConfidence)/100,label:"hand",box:i,boxRaw:c,keypoints:a,annotations:A,landmarks:d})}return o}async function dn(e){var t;return M.initial&&(Ie=null),Ie?e.debug&&b("cached model:",Ie.modelUrl):Ie=await L((t=e.hand.detector)==null?void 0:t.modelPath),Ie}async function xn(e){var t;return M.initial&&(Ne=null),Ne?e.debug&&b("cached model:",Ne.modelUrl):Ne=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),Ne}var r0=[null,null],Vs=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],he=[[0,0],[0,0]],Zs=["hand","fist","pinch","point","face","tip","pinchtip"],fn=4,mn=1.6,Xs=512,qs=1.4,Y2=Number.MAX_SAFE_INTEGER,u5=0,ee=[0,0],o0={boxes:[],hands:[]},pn={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function un(e){var t;if(M.initial&&(r0[0]=null),r0[0])e.debug&&b("cached model:",r0[0].modelUrl);else{h2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),r0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=r0[0].executor?Object.values(r0[0].modelSignature.inputs):void 0;he[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[0]}async function hn(e){var t;if(M.initial&&(r0[1]=null),r0[1])e.debug&&b("cached model:",r0[1].modelUrl);else{r0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=r0[1].executor?Object.values(r0[1].modelSignature.inputs):void 0;he[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,he[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return r0[1]}async function Us(e,t){let n=[];if(!e||!r0[0])return n;let o={},s=(e.shape[2]||1)/(e.shape[1]||1),A=Math.min(Math.round((e.shape[1]||0)/8)*8,Xs),a=Math.round(A*s/8)*8;o.resize=r.image.resizeBilinear(e,[A,a]),o.cast=r.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await r0[0].executeAsync(o.cast,Vs),o.boxes=r.squeeze(o.rawBoxes,[0,2]),o.scores=r.squeeze(o.rawScores,[0]);let i=r.unstack(o.scores,1);r.dispose(i[fn]),i.splice(fn,1),o.filtered=r.stack(i,1),r.dispose(i),o.max=r.max(o.filtered,1),o.argmax=r.argMax(o.filtered,1);let c=0;o.nms=await r.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let d=await o.nms.data(),y=await o.max.data(),l=await o.argmax.data();for(let f of Array.from(d)){let x=r.slice(o.boxes,f,1),p=await x.data();r.dispose(x);let m=[p[1],p[0],p[3]-p[1],p[2]-p[0]],h=k2(m,qs),T=[Math.trunc(m[0]*ee[0]),Math.trunc(m[1]*ee[1]),Math.trunc(m[2]*ee[0]),Math.trunc(m[3]*ee[1])],v=y[f],u=Zs[l[f]],g={id:c++,score:v,box:T,boxRaw:h,label:u};n.push(g)}return Object.keys(o).forEach(f=>r.dispose(o[f])),n.sort((f,x)=>x.score-f.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function h5(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&r0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let s={},A=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];s.crop=r.image.cropAndResize(e,[A],[0],[he[1][0],he[1][1]],"bilinear"),s.div=r.div(s.crop,O.tf255),[s.score,s.keypoints]=r0[1].execute(s.div,["Identity_1","Identity"]);let a=(await s.score.data())[0],i=(100-Math.trunc(100/(1+Math.exp(a))))/100;if(i>=(n.hand.minConfidence||0)){o.fingerScore=i,s.reshaped=r.reshape(s.keypoints,[-1,3]);let y=(await s.reshaped.array()).map(l=>[l[0]/he[1][1],l[1]/he[1][0],l[2]||0]).map(l=>[l[0]*t.boxRaw[2],l[1]*t.boxRaw[3],l[2]||0]);o.keypoints=y.map(l=>[ee[0]*(l[0]+t.boxRaw[0]),ee[1]*(l[1]+t.boxRaw[1]),l[2]||0]),o.landmarks=G2(o.keypoints);for(let l of Object.keys(pn))o.annotations[l]=pn[l].map(f=>o.landmarks&&o.keypoints[f]?o.keypoints[f]:null)}Object.keys(s).forEach(c=>r.dispose(s[c]))}return o}async function b5(e,t){var s,A;if(!((s=r0[0])!=null&&s.executor)||!((A=r0[1])!=null&&A.executor)||!r0[0].inputs[0].shape||!r0[1].inputs[0].shape)return[];ee=[e.shape[2]||0,e.shape[1]||0],Y2++;let n=(t.hand.skipTime||0)>R()-u5,o=Y2<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?o0.hands:new Promise(async a=>{let i=3*(t.hand.skipTime||0)>R()-u5,c=Y2<3*(t.hand.skipFrames||0);t.skipAllowed&&o0.hands.length===t.hand.maxDetected?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):t.skipAllowed&&i&&c&&o0.hands.length>0?o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))):(o0.boxes=await Us(e,t),u5=R(),o0.hands=await Promise.all(o0.boxes.map(y=>h5(e,y,t))),Y2=0);let d=[...o0.boxes];if(o0.boxes.length=0,t.cacheSensitivity>0)for(let y=0;y.05&&l.box[3]/(e.shape[1]||1)>.05&&o0.hands[y].fingerScore&&o0.hands[y].fingerScore>(t.hand.minConfidence||0)){let f=k2(l.box,mn),x=k2(l.boxRaw,mn);o0.boxes.push({...d[y],box:f,boxRaw:x})}}for(let y=0;y({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var s2={};oe(s2,{connected:()=>J2,horizontal:()=>g5,kpt:()=>K2,relative:()=>v5,vertical:()=>T5});var K2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],g5=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],T5=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],v5=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],J2={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var j=te(),R5=0;function gn(e,t){var a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q,U,m0;let n=R();if(!e)return te();let o=Date.now()-e.timestamp,s=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(j.canvas=e.canvas),e.error&&(j.error=e.error),!j.body||e.body.length!==j.body.length)j.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((s-1)*j.body[P].box[F]+W)/s),g0=e.body[P].boxRaw.map((W,F)=>((s-1)*j.body[P].boxRaw[F]+W)/s),e0=e.body[P].keypoints.map((W,F)=>{var w0,t0,ne,Ke,Oe,H5,G5,V5,Z5;return{score:W.score,part:W.part,position:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[0]||0)+(W.position[0]||0))/s:W.position[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[1]||0)+(W.position[1]||0))/s:W.position[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].position[2]||0)+(W.position[2]||0))/s:W.position[2]],positionRaw:[j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[0]||0)+(W.positionRaw[0]||0))/s:W.positionRaw[0],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[1]||0)+(W.positionRaw[1]||0))/s:W.positionRaw[1],j.body[P].keypoints[F]?((s-1)*(j.body[P].keypoints[F].positionRaw[2]||0)+(W.positionRaw[2]||0))/s:W.positionRaw[2]],distance:[j.body[P].keypoints[F]?((s-1)*(((w0=j.body[P].keypoints[F].distance)==null?void 0:w0[0])||0)+(((t0=W.distance)==null?void 0:t0[0])||0))/s:(ne=W.distance)==null?void 0:ne[0],j.body[P].keypoints[F]?((s-1)*(((Ke=j.body[P].keypoints[F].distance)==null?void 0:Ke[1])||0)+(((Oe=W.distance)==null?void 0:Oe[1])||0))/s:(H5=W.distance)==null?void 0:H5[1],j.body[P].keypoints[F]?((s-1)*(((G5=j.body[P].keypoints[F].distance)==null?void 0:G5[2])||0)+(((V5=W.distance)==null?void 0:V5[2])||0))/s:(Z5=W.distance)==null?void 0:Z5[2]]}}),G={},S={connected:{}};(a=t.body.modelPath)!=null&&a.includes("efficientpose")?S=z2:(i=t.body.modelPath)!=null&&i.includes("blazepose")?S=M2:(c=t.body.modelPath)!=null&&c.includes("movenet")&&(S=s2);for(let[W,F]of Object.entries(S.connected)){let w0=[];for(let t0=0;t0Oe.part===F[t0]),Ke=e0.find(Oe=>Oe.part===F[t0+1]);ne&&Ke&&w0.push([ne.position,Ke.position])}G[W]=w0}j.body[P]={...e.body[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.hand||e.hand.length!==j.hand.length)j.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((s-1)*j.hand[P].box[W]+S)/s),g0=e.hand[P].boxRaw.map((S,W)=>((s-1)*j.hand[P].boxRaw[W]+S)/s);j.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(j.hand[P].keypoints=e.hand[P].keypoints);let e0=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((S,W)=>S.map((F,w0)=>((s-1)*(j.hand[P].keypoints[W][w0]||1)+(F||0))/s)):[],G={};if(Object.keys(j.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)j.hand[P].annotations=e.hand[P].annotations,G=j.hand[P].annotations;else if(e.hand[P].annotations)for(let S of Object.keys(e.hand[P].annotations))G[S]=(l=(y=(d=e.hand[P])==null?void 0:d.annotations)==null?void 0:y[S])!=null&&l[0]?e.hand[P].annotations[S].map((W,F)=>W.map((w0,t0)=>((s-1)*j.hand[P].annotations[S][F][t0]+w0)/s)):null;j.hand[P]={...e.hand[P],box:i0,boxRaw:g0,keypoints:e0,annotations:G}}if(!j.face||e.face.length!==j.face.length)j.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((s-1)*j.face[P].box[S]+G)/s),g0=e.face[P].boxRaw.map((G,S)=>((s-1)*j.face[P].boxRaw[S]+G)/s),e0=e.face[P].annotations;if(Object.keys(j.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)j.face[P].annotations=e.face[P].annotations,e0=j.face[P].annotations;else if(e.face[P].annotations)for(let G of Object.keys(e.face[P].annotations))e0[G]=(p=(x=(f=e.face[P])==null?void 0:f.annotations)==null?void 0:x[G])!=null&&p[0]?e.face[P].annotations[G].map((S,W)=>S.map((F,w0)=>((s-1)*j.face[P].annotations[G][W][w0]+F)/s)):null;if(e.face[P].rotation){let G={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};G.matrix=(m=e.face[P].rotation)==null?void 0:m.matrix,G.angle={roll:((s-1)*(((T=(h=j.face[P].rotation)==null?void 0:h.angle)==null?void 0:T.roll)||0)+(((u=(v=e.face[P].rotation)==null?void 0:v.angle)==null?void 0:u.roll)||0))/s,yaw:((s-1)*(((E=(g=j.face[P].rotation)==null?void 0:g.angle)==null?void 0:E.yaw)||0)+(((N=(k=e.face[P].rotation)==null?void 0:k.angle)==null?void 0:N.yaw)||0))/s,pitch:((s-1)*(((V=(C=j.face[P].rotation)==null?void 0:C.angle)==null?void 0:V.pitch)||0)+(((Z=(D=e.face[P].rotation)==null?void 0:D.angle)==null?void 0:Z.pitch)||0))/s},G.gaze={bearing:((s-1)*(((J=j.face[P].rotation)==null?void 0:J.gaze.bearing)||0)+(((q=e.face[P].rotation)==null?void 0:q.gaze.bearing)||0))/s,strength:((s-1)*(((U=j.face[P].rotation)==null?void 0:U.gaze.strength)||0)+(((m0=e.face[P].rotation)==null?void 0:m0.gaze.strength)||0))/s},j.face[P]={...e.face[P],rotation:G,box:i0,boxRaw:g0,annotations:e0}}else j.face[P]={...e.face[P],box:i0,boxRaw:g0,annotations:e0}}if(!j.object||e.object.length!==j.object.length)j.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((s-1)*j.object[P].box[G]+e0)/s),g0=e.object[P].boxRaw.map((e0,G)=>((s-1)*j.object[P].boxRaw[G]+e0)/s);j.object[P]={...e.object[P],box:i0,boxRaw:g0}}if(e.persons){let P=e.persons;if(!j.persons||P.length!==j.persons.length)j.persons=JSON.parse(JSON.stringify(P));else for(let i0=0;i0((s-1)*j.persons[i0].box[e0]+g0)/s)}e.gesture&&(j.gesture=e.gesture),j.width=e.width,j.height=e.height;let A=R();return R5=M.perfadd?R5+Math.round(A-n):Math.round(A-n),e.performance&&(j.performance={...e.performance,interpolate:R5}),j}var h0;async function M5(e){return!h0||M.initial?h0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",h0.modelUrl),h0}async function Tn(e,t){var s;if(h0||(h0=await M5(t)),!(h0!=null&&h0.executor)||!((s=h0==null?void 0:h0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[h0.inputs[0].shape?h0.inputs[0].shape[1]:0,h0.inputs[0].shape?h0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=h0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=r.unstack(n.squeeze,2),n.fg=r.softmax(n.fgRaw),n.mul=r.mul(n.fg,O.tf255),n.expand=r.expandDims(n.mul,2),n.output=r.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.output],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.output,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}var k5={};oe(k5,{distance:()=>P5,find:()=>Js,similarity:()=>Ks});function P5(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let s=0;s{if(e===0)return 1;let A=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(A,1),0)};function Ks(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=P5(e,t,n);return Rn(o,n.order||2,n.min||0,n.max||1)}function Js(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,s=-1;for(let a=0;ai2,validateModel:()=>ot});var Mn=.005,I0={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function w5(e){for(let t of g5){let n=e.keypoints.findIndex(s=>s.part===t[0]),o=e.keypoints.findIndex(s=>s.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]s&&s.part===t[0]),o=e.keypoints.findIndex(s=>s&&s.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]d&&d.part===t[0]),s=e.keypoints.findIndex(d=>d&&d.part===t[1]),A=e.keypoints.findIndex(d=>d&&d.part===n[0]),a=e.keypoints.findIndex(d=>d&&d.part===n[1]);if(!e.keypoints[A]||!e.keypoints[a])continue;let i=e.keypoints[o]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[a].position[0]-e.keypoints[o].position[0])]:[0,0],c=e.keypoints[s]?[Math.abs(e.keypoints[a].position[0]-e.keypoints[s].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[s].position[0])]:[0,0];if(i[0]>i[1]||c[0]>c[1]){let d=e.keypoints[o];e.keypoints[o]=e.keypoints[s],e.keypoints[s]=d}}}function Pn(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=r.pad(e,I0.padding),n.resize=r.image.resizeBilinear(n.pad,[t,t]);let o=r.cast(n.resize,"int32");return Object.keys(n).forEach(a=>r.dispose(n[a])),o}function wn(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+I0.padding[2][0]+I0.padding[2][1])/t[0]-I0.padding[2][0],o.position[1]*(t[1]+I0.padding[1][0]+I0.padding[1][1])/t[1]-I0.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=ae(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var A0,Q2=0,E5=Number.MAX_SAFE_INTEGER,Le={boxes:[],bodies:[],last:0};async function En(e){var t;return M.initial&&(A0=null),A0?e.debug&&b("cached model:",A0.modelUrl):(h2(["size"],e),A0=await L(e.body.modelPath)),Q2=A0!=null&&A0.executor&&((t=A0==null?void 0:A0.inputs)!=null&&t[0].shape)?A0.inputs[0].shape[2]:0,Q2<64&&(Q2=256),r.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&r.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),A0}function _s(e,t,n){let o=e[0][0],s=[],A=0;for(let y=0;yt.body.minConfidence){let l=[o[y][1],o[y][0]];s.push({score:Math.round(100*A)/100,part:K2[y],positionRaw:l,position:[Math.round((n.shape[2]||0)*l[0]),Math.round((n.shape[1]||0)*l[1])]})}A=s.reduce((y,l)=>l.score>y?l.score:y,0);let a=[],i=ae(s.map(y=>y.position),[n.shape[2],n.shape[1]]),c={};for(let[y,l]of Object.entries(J2)){let f=[];for(let x=0;xh.part===l[x]),m=s.find(h=>h.part===l[x+1]);p&&m&&p.score>(t.body.minConfidence||0)&&m.score>(t.body.minConfidence||0)&&f.push([p.position,m.position])}c[y]=f}let d={id:0,score:A,box:i.box,boxRaw:i.boxRaw,keypoints:s,annotations:c};return w5(d),a.push(d),a}function $s(e,t,n){let o=[];for(let s=0;st.body.minConfidence){let i=[];for(let f=0;f<17;f++){let x=A[3*f+2];if(x>t.body.minConfidence){let p=[A[3*f+1],A[3*f+0]];i.push({part:K2[f],score:Math.round(100*x)/100,positionRaw:p,position:[Math.round((n.shape[2]||0)*p[0]),Math.round((n.shape[1]||0)*p[1])]})}}let c=[A[52],A[51],A[54]-A[52],A[53]-A[51]],d=[Math.trunc(c[0]*(n.shape[2]||0)),Math.trunc(c[1]*(n.shape[1]||0)),Math.trunc(c[2]*(n.shape[2]||0)),Math.trunc(c[3]*(n.shape[1]||0))],y={};for(let[f,x]of Object.entries(J2)){let p=[];for(let m=0;mv.part===x[m]),T=i.find(v=>v.part===x[m+1]);h&&T&&h.score>(t.body.minConfidence||0)&&T.score>(t.body.minConfidence||0)&&p.push([h.position,T.position])}y[f]=p}let l={id:s,score:a,box:d,boxRaw:c,keypoints:[...i],annotations:y};w5(l),o.push(l)}}return o.sort((s,A)=>A.score-s.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function z5(e,t){var s;if(!(A0!=null&&A0.executor)||!((s=A0==null?void 0:A0.inputs)!=null&&s[0].shape))return[];t.skipAllowed||(Le.boxes.length=0),E5++;let n=(t.body.skipTime||0)>R()-Le.last,o=E5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?Le.bodies:new Promise(async A=>{let a={};E5=0,a.input=kn(e,Q2),a.res=A0==null?void 0:A0.execute(a.input),Le.last=R();let i=await a.res.array();Le.bodies=a.res.shape[2]===17?_s(i,t,e):$s(i,t,e);for(let c of Le.bodies)wn(c,[e.shape[2]||1,e.shape[1]||1]),Pn(c.keypoints);Object.keys(a).forEach(c=>r.dispose(a[c])),A(Le.bodies)})}var H0,_2=[],Sn=0,S5=Number.MAX_SAFE_INTEGER,et=0,$2=2.5;async function jn(e){if(!H0||M.initial){H0=await L(e.object.modelPath);let t=H0!=null&&H0.executor?Object.values(H0.modelSignature.inputs):void 0;et=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&b("cached model:",H0.modelUrl);return H0}async function eA(e,t,n){var d,y;let o=0,s=[],A=et;for(let l of[1,2,4]){let f=l*13,x=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)===De.length)),p=await x.array(),m=r.squeeze(e.find(u=>u.shape[1]===f**2&&(u.shape[2]||0)(n.object.minConfidence||0)&&g!==61){let k=(.5+Math.trunc(u%f))/f,N=(.5+Math.trunc(u/f))/f,C=v[u].map(P=>P*(f/l/A)),[V,D]=[k-$2/l*C[0],N-$2/l*C[1]],[Z,J]=[k+$2/l*C[2]-V,N+$2/l*C[3]-D],q=[V,D,Z,J];q=q.map(P=>Math.max(0,Math.min(P,1)));let U=[q[0]*t[0],q[1]*t[1],q[2]*t[0],q[3]*t[1]],m0={id:o++,score:Math.round(100*E)/100,class:g+1,label:De[g].label,box:U.map(P=>Math.trunc(P)),boxRaw:q};s.push(m0)}}r.dispose([x,m,h,T])}let a=s.map(l=>[l.boxRaw[1],l.boxRaw[0],l.boxRaw[3],l.boxRaw[2]]),i=s.map(l=>l.score),c=[];if(a&&a.length>0){let l=await r.image.nonMaxSuppressionAsync(a,i,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);c=Array.from(await l.data()),r.dispose(l)}return s=s.filter((l,f)=>c.includes(f)).sort((l,f)=>f.score-l.score),s}async function j5(e,t){if(!(H0!=null&&H0.executor))return[];let n=(t.object.skipTime||0)>R()-Sn,o=S5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&_2.length>0?(S5++,_2):(S5=0,!M.kernels.includes("mod")||!M.kernels.includes("sparsetodense")?_2:new Promise(async s=>{let A=[e.shape[2]||0,e.shape[1]||0],a=r.image.resizeBilinear(e,[et,et],!1),i=r.div(a,O.tf255),c=r.transpose(i,[0,3,1,2]),d;t.object.enabled&&(d=H0.execute(c)),Sn=R();let y=await eA(d,A,t);_2=y,r.dispose([a,i,c,...d]),s(y)}))}var a2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],tA=a2.length,A2=a2.reduce((e,t,n)=>(e[t]=n,e),{}),nA=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Ji=nA.map(([e,t])=>[A2[e],A2[t]]),Nn=[["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"]];function Ln(e){let t=e.reduce(({maxX:n,maxY:o,minX:s,minY:A},{position:{x:a,y:i}})=>({maxX:Math.max(n,a),maxY:Math.max(o,i),minX:Math.min(s,a),minY:Math.min(A,i)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function On(e,[t,n],[o,s]){let A=t/o,a=n/s,i=(d,y)=>({id:y,score:d.score,boxRaw:[d.box[0]/s,d.box[1]/o,d.box[2]/s,d.box[3]/o],box:[Math.trunc(d.box[0]*a),Math.trunc(d.box[1]*A),Math.trunc(d.box[2]*a),Math.trunc(d.box[3]*A)],keypoints:d.keypoints.map(({score:l,part:f,position:x})=>({score:l,part:f,position:[Math.trunc(x.x*a),Math.trunc(x.y*A)],positionRaw:[x.x/o,x.y/o]})),annotations:{}});return e.map((d,y)=>i(d,y))}var tt=class{constructor(t,n){z(this,"priorityQueue");z(this,"numberOfElements");z(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Cn(e,t,n,o){let s=n-e,A=o-t;return s*s+A*A}function O5(e,t){return{x:e.x+t.x,y:e.y+t.y}}var N0,rA=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],nt=1,Ue=16,sA=50**2;function Wn(e,t,n,o,s,A,a=2){let i=T=>({y:A.get(T.y,T.x,e),x:A.get(T.y,T.x,A.shape[2]/2+e)}),c=(T,v,u)=>({y:L5(Math.round(T.y/Ue),0,v-1),x:L5(Math.round(T.x/Ue),0,u-1)}),[d,y]=o.shape,l=c(t.position,d,y),f=i(l),p=O5(t.position,f);for(let T=0;T[A2[f],A2[x]]),a=A.map(([,f])=>f),i=A.map(([f])=>f),c=t.shape[2],d=a.length,y=new Array(c),l=N5(e.part,Ue,n);y[e.part.id]={score:e.score,part:a2[e.part.id],position:l};for(let f=d-1;f>=0;--f){let x=a[f],p=i[f];y[x]&&!y[p]&&(y[p]=Wn(f,y[x],p,t,n,s))}for(let f=0;ft){i=!1;break}if(!i)break}return i}function iA(e,t){let[n,o,s]=t.shape,A=new tt(n*o*s,({score:a})=>a);for(let a=0;a{var a;let A=(a=s[o])==null?void 0:a.position;return A?Cn(n,t,A.y,A.x)<=sA:!1})}function lA(e,t){return t.reduce((o,{position:s,score:A},a)=>(Dn(e,s,a)||(o+=A),o),0)/t.length}function cA(e,t,n,o,s,A){let a=[],i=iA(A,t);for(;a.lengthx.score>A);let l=lA(a,y),f=Ln(y);l>A&&a.push({keypoints:y,box:f,score:Math.round(100*l)/100})}return a}async function C5(e,t){if(!(N0!=null&&N0.executor))return[];let n=r.tidy(()=>{if(!N0.inputs[0].shape)return[];let a=r.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]),i=r.sub(r.div(r.cast(a,"float32"),127.5),1),d=N0.execute(i,rA).map(y=>r.squeeze(y,[0]));return d[1]=r.sigmoid(d[1]),d}),o=await Promise.all(n.map(a=>a.buffer()));for(let a of n)r.dispose(a);let s=cA(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return N0.inputs[0].shape?On(s,[e.shape[1],e.shape[2]],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]]):[]}async function Fn(e){return!N0||M.initial?N0=await L(e.body.modelPath):e.debug&&b("cached model:",N0.modelUrl),N0}var J0,dA=["fgr","pha","r1o","r2o","r3o","r4o"],a0={},D5=0;function Gn(e){r.dispose([a0.r1i,a0.r2i,a0.r3i,a0.r4i,a0.downsample_ratio]),a0.r1i=r.tensor(0),a0.r2i=r.tensor(0),a0.r3i=r.tensor(0),a0.r4i=r.tensor(0),D5=e.segmentation.ratio||.5,a0.downsample_ratio=r.tensor(D5)}async function F5(e){return!J0||M.initial?J0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",J0.modelUrl),Gn(e),J0}var Hn=e=>r.tidy(()=>{let t=r.squeeze(e,[0]),n=r.mul(t,O.tf255);return r.cast(n,"int32")});function W5(e,t){let n=e?Hn(e):r.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?Hn(t):r.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),s=r.concat([n,o],-1);return r.dispose([n,o]),s}function xA(e){return r.tidy(()=>{let t={};return t.unstack=r.unstack(e,-1),t.concat=r.concat(t.unstack,1),t.split=r.split(t.concat,4,1),t.stack=r.concat(t.split,2),t.squeeze=r.squeeze(t.stack,[0]),t.expand=r.expandDims(t.squeeze,-1),t.add=r.add(t.expand,1),t.mul=r.mul(t.add,127.5),t.cast=r.cast(t.mul,"int32"),t.tile=r.tile(t.cast,[1,1,3]),t.alpha=r.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),r.concat([t.tile,t.alpha],-1)})}async function Vn(e,t){if(J0||(J0=await F5(t)),!(J0!=null&&J0.executor))return null;a0.src=r.div(e,255),D5!==t.segmentation.ratio&&Gn(t);let[n,o,s,A,a,i]=await J0.executeAsync(a0,dA),c;switch(t.segmentation.mode||"default"){case"default":c=W5(n,o);break;case"alpha":c=W5(null,o);break;case"foreground":c=W5(n,null);break;case"state":c=xA(s);break;default:c=r.tensor(0)}return r.dispose([a0.src,n,o,a0.r1i,a0.r2i,a0.r3i,a0.r4i]),[a0.r1i,a0.r2i,a0.r3i,a0.r4i]=[s,A,a,i],c}var b0;async function B5(e){return!b0||M.initial?b0=await L(e.segmentation.modelPath):e.debug&&b("cached model:",b0.modelUrl),b0}async function Xn(e,t){var s;if(b0||(b0=await B5(t)),!(b0!=null&&b0.executor)||!((s=b0==null?void 0:b0.inputs)!=null&&s[0].shape))return null;let n={};n.resize=r.image.resizeBilinear(e,[b0.inputs[0].shape?b0.inputs[0].shape[1]:0,b0.inputs[0].shape?b0.inputs[0].shape[2]:0],!1),n.norm=r.div(n.resize,O.tf255),n.res=b0.execute(n.norm),n.squeeze=r.squeeze(n.res,[0]),n.alpha=r.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=r.mul(n.alpha,O.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=r.squeeze(e),n.concat=r.concat([n.input,n.mul],-1),o=r.cast(n.concat,"int32");break;case"alpha":o=r.cast(n.mul,"int32");break;default:o=r.tensor(0)}return Object.keys(n).forEach(A=>r.dispose(n[A])),o}function ot(e,t,n){var d,y;if(!t||!((d=e==null?void 0:e.config)!=null&&d.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],s=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],A=[],a=[],i=t.modelUrl,c=t.executor;if((y=c==null?void 0:c.graph)!=null&&y.nodes)for(let l of Object.values(c.graph.nodes)){let f=l.op.toLowerCase();A.includes(f)||A.push(f)}else!c&&e.config.debug&&b("model not loaded",n);for(let l of A)!o.includes(l)&&!s.includes(l)&&!e.env.kernels.includes(l)&&!e.env.kernels.includes(l.replace("_",""))&&!e.env.kernels.includes(l.replace("native",""))&&!e.env.kernels.includes(l.replace("v2",""))&&a.push(l);return e.config.debug&&a.length>0&&b("model validation failed:",n,a),a.length>0?{name:n,missing:a,ops:A,url:i}:null}var i2=class{constructor(t){z(this,"instance");z(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let A of Object.values(p0))t+=A.sizeFromManifest,n+=A.sizeLoadedWeights,o+=A.sizeDesired;let s=o>0?n/o:0;return{numLoadedModels:Object.values(p0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:s,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(p0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,s,A,a,i,c,d,y,l,f,x,p,m,h,T,v,u,g,E,k,N,C,V,D,Z,J,q;M.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?F1(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?c3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((s=this.instance.config.face.liveness)!=null&&s.enabled)&&!this.models.liveness?f3(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((A=this.instance.config.face.description)!=null&&A.enabled)&&!this.models.faceres?s3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((a=this.instance.config.face.emotion)!=null&&a.enabled)&&!this.models.emotion?t3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((i=this.instance.config.face.iris)!=null&&i.enabled)&&!((c=this.instance.config.face.attention)!=null&&c.enabled)&&!this.models.iris?X1(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((d=this.instance.config.face.mesh)!=null&&d.enabled)&&!this.models.facemesh?J1(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((y=this.instance.config.face.gear)!=null&&y.enabled)&&!this.models.gear?h3(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((l=this.instance.config.face.ssrnet)!=null&&l.enabled)&&!this.models.ssrnetage?v3(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((f=this.instance.config.face.ssrnet)!=null&&f.enabled)&&!this.models.ssrnetgender?k3(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((x=this.instance.config.face.mobilefacenet)!=null&&x.enabled)&&!this.models.mobilefacenet?j3(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((p=this.instance.config.face.insightface)!=null&&p.enabled)&&!this.models.insightface?C3(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((m=this.instance.config.body.modelPath)!=null&&m.includes("blazepose"))?g1(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?b1(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((h=this.instance.config.body.modelPath)!=null&&h.includes("efficientpose"))?k1(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("movenet"))?En(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((v=this.instance.config.body.modelPath)!=null&&v.includes("posenet"))?Fn(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((g=(u=this.instance.config.hand.detector)==null?void 0:u.modelPath)!=null&&g.includes("handtrack"))?un(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((k=(E=this.instance.config.hand.detector)==null?void 0:E.modelPath)!=null&&k.includes("handtrack"))?hn(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((C=(N=this.instance.config.hand.detector)==null?void 0:N.modelPath)!=null&&C.includes("handdetect"))&&(n.handdetect=dn(this.instance.config),n.handskeleton=xn(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((V=this.instance.config.object.modelPath)!=null&&V.includes("centernet"))?R1(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((D=this.instance.config.object.modelPath)!=null&&D.includes("nanodet"))?jn(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((Z=this.instance.config.segmentation.modelPath)!=null&&Z.includes("selfie"))?B5(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((J=this.instance.config.segmentation.modelPath)!=null&&J.includes("meet"))?M5(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((q=this.instance.config.segmentation.modelPath)!=null&&q.includes("rvm"))?F5(this.instance.config):null;for(let[U,m0]of Object.entries(n))m0!=null&&m0.then&&m0.then(P=>this.models[U]=P);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(p0).find(s=>s.startsWith(n.name));o&&(n.size=p0[o].sizeLoadedWeights,n.url=p0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let s=ot(this.instance,o,n);s&&t.push(s)}return t}};function Yn(e,t,n,o,s){var i,c,d,y,l,f;let A=0,a=[];for(let x of e){let p={id:A++,face:x,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let g of t)x.box[0]>g.box[0]&&x.box[0]g.box[1]&&x.box[1]+x.box[3]p.body.box[0]&&g.box[0]+g.box[2]p.body.box[1]&&g.box[1]+g.box[3]p.body.box[0]&&g.box[1]+g.box[3]>p.body.box[1]&&g.box[1]+g.box[3]{g&&g.length===4&&(m.push(g[0],g[0]+g[2]),h.push(g[1],g[1]+g[3]))};T(p.face.box),T((y=p.body)==null?void 0:y.box),T((l=p.hands.left)==null?void 0:l.box),T((f=p.hands.right)==null?void 0:f.box);let v=Math.min(...m),u=Math.min(...h);p.box=[v,u,Math.max(...m)-v,Math.max(...h)-u],s!=null&&s[1]&&(s!=null&&s[2])&&(p.boxRaw=[p.box[0]/s[2],p.box[1]/s[1],p.box[2]/s[2],p.box[3]/s[1]]),a.push(p)}return a}var rt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/human.esm.js b/dist/human.esm.js index aab3cf87..8cfcba2e 100644 --- a/dist/human.esm.js +++ b/dist/human.esm.js @@ -36,615 +36,615 @@ var __privateSet = (obj, member, value, setter) => { // dist/tfjs.esm.js var tfjs_esm_exports = {}; __export(tfjs_esm_exports, { - Abs: () => fn, - Acos: () => hn, - Acosh: () => gn, - AdadeltaOptimizer: () => sp, - AdagradOptimizer: () => ap, - AdamOptimizer: () => ip, - AdamaxOptimizer: () => up, - Add: () => Rr, - AddN: () => xn, - All: () => yn, - Any: () => bn, - ArgMax: () => na, - ArgMin: () => sa, - Asin: () => Cn, - Asinh: () => wn, - Atan: () => Sn, - Atan2: () => vn, - Atanh: () => In, - AvgPool: () => kn, - AvgPool3D: () => aa, - AvgPool3DGrad: () => Vi, - AvgPoolGrad: () => zi, - BackendWasm: () => gm, - BatchMatMul: () => Nn, - BatchToSpaceND: () => ia, - Bincount: () => Tn, - BitwiseAnd: () => _n, - BroadcastArgs: () => ua, - BroadcastTo: () => Sme, - Cast: () => ho, - Ceil: () => go, - ClipByValue: () => Go, - Complex: () => ei, - ComplexAbs: () => Wi, - Concat: () => pa, - Conv2D: () => En, - Conv2DBackpropFilter: () => Ui, - Conv2DBackpropInput: () => $n, - Conv3D: () => Rn, - Conv3DBackpropFilterV2: () => ti, - Conv3DBackpropInputV2: () => Dn, - Cos: () => An, - Cosh: () => Fn, - CropAndResize: () => Mn, - Cumprod: () => Pn, - Cumsum: () => On, - DataStorage: () => mn, - DenseBincount: () => la, - DepthToSpace: () => Ln, - DepthwiseConv2dNative: () => Bn, - DepthwiseConv2dNativeBackpropFilter: () => Gi, - DepthwiseConv2dNativeBackpropInput: () => Hi, - Diag: () => ca, - Dilation2D: () => zn, - Dilation2DBackpropFilter: () => qi, - Dilation2DBackpropInput: () => Ki, - Draw: () => Mu, - ENV: () => xw, - Einsum: () => ji, - Elu: () => Wn, - EluGrad: () => ri, - Environment: () => Cc, - Equal: () => xo, - Erf: () => Un, - Exp: () => yo, - ExpandDims: () => ma, - Expm1: () => bo, - FFT: () => Xi, - Fill: () => da, - FlipLeftRight: () => Gn, - Floor: () => Co, - FloorDiv: () => wo, - FromPixels: () => Lu, - FusedBatchNorm: () => Hn, - FusedConv2D: () => jo, - FusedDepthwiseConv2D: () => Xo, - GPGPUContext: () => kp, - GatherNd: () => Kn, - GatherV2: () => fa, - GraphModel: () => Kc, - Greater: () => So, - GreaterEqual: () => Io, - IFFT: () => Yi, - Identity: () => vo, - Imag: () => Qi, - IsFinite: () => qn, - IsInf: () => jn, - IsNan: () => Xn, - KernelBackend: () => mo, - LRN: () => rs, - LRNGrad: () => oi, - LeakyRelu: () => Yn, - Less: () => ko, - LessEqual: () => No, - LinSpace: () => Qn, - Log: () => To, - Log1p: () => Zn, - LogSoftmax: () => Ime, - LogicalAnd: () => Jn, - LogicalNot: () => es, - LogicalOr: () => ts, - LogicalXor: () => gk, - LowerBound: () => vme, - MathBackendCPU: () => Il, - MathBackendWebGL: () => Ul, - MatrixBandPart: () => kme, - Max: () => os, - MaxPool: () => ns, - MaxPool3D: () => ha, - MaxPool3DGrad: () => Ji, - MaxPoolGrad: () => Zi, - MaxPoolWithArgmax: () => ga, - Maximum: () => _o, - Mean: () => ss, - Min: () => as, - Minimum: () => Eo, - MirrorPad: () => is, - Mod: () => us, - MomentumOptimizer: () => pp, - Multinomial: () => ps, - Multiply: () => $o, - Neg: () => ls, - NonMaxSuppressionV3: () => cs, - NonMaxSuppressionV4: () => ni, - NonMaxSuppressionV5: () => ms, - NotEqual: () => Ro, - OP_SCOPE_SUFFIX: () => Bw, - OneHot: () => ds, - OnesLike: () => xa, - Optimizer: () => _r, - OptimizerConstructors: () => Vc, - Pack: () => ya, - PadV2: () => fs, - Pool: () => Nme, - Pow: () => hs, - Prelu: () => gs, - Prod: () => Ho, - RMSPropOptimizer: () => lp, - RaggedGather: () => Qp, - RaggedRange: () => Zp, - RaggedTensorToTensor: () => Jp, - Range: () => ba, - Rank: () => Ew, - Real: () => si, - RealDiv: () => Vn, - Reciprocal: () => xs, - Reduction: () => Dt, - Relu: () => ys, - Relu6: () => ws, - Reshape: () => Ca, - ResizeBilinear: () => Cs, - ResizeBilinearGrad: () => ii, - ResizeNearestNeighbor: () => bs, - ResizeNearestNeighborGrad: () => ai, - Reverse: () => Ss, - RotateWithOffset: () => Vs, - Round: () => Is, - Rsqrt: () => Do, - SGDOptimizer: () => wi, - ScatterNd: () => vs, - SearchSorted: () => Ns, - Select: () => wa, - Selu: () => Ts, - Sigmoid: () => Ao, - Sign: () => Rs, - Sin: () => Es, - Sinh: () => $s, - Slice: () => _s, - Softmax: () => Fs, - Softplus: () => Ds, - SpaceToBatchND: () => Sa, - SparseFillEmptyRows: () => eu, - SparseReshape: () => ui, - SparseSegmentMean: () => va, - SparseSegmentSum: () => ka, - SparseToDense: () => Ps, - SplitV: () => Ia, - Sqrt: () => Fo, - Square: () => tu, - SquaredDifference: () => Po, - StaticRegexReplace: () => pi, - Step: () => Ko, - StridedSlice: () => Os, - StringNGrams: () => Na, - StringSplit: () => ru, - StringToHashBucketFast: () => ou, - Sub: () => Oo, - Sum: () => As, - Tan: () => Ms, - Tanh: () => Ls, - Tensor: () => dt, - TensorBuffer: () => Ge, - TensorScatterUpdate: () => ks, - Tile: () => Mo, - TopK: () => Bs, - Transform: () => zs, - Transpose: () => Kr, - Unique: () => nu, - Unpack: () => Ta, - UnsortedSegmentSum: () => su, - UpperBound: () => Tme, - Variable: () => ci, - WebGPUBackend: () => Jl, - ZerosLike: () => _a, - _FusedMatMul: () => qo, - abs: () => er, - acos: () => g1, - acosh: () => x1, + Abs: () => Xs, + Acos: () => Vo, + Acosh: () => Wo, + AdadeltaOptimizer: () => Ju, + AdagradOptimizer: () => ep, + AdamOptimizer: () => tp, + AdamaxOptimizer: () => rp, + Add: () => uo, + AddN: () => Uo, + All: () => Go, + Any: () => Ho, + ArgMax: () => Ys, + ArgMin: () => Qs, + Asin: () => Ko, + Asinh: () => qo, + Atan: () => jo, + Atan2: () => Yo, + Atanh: () => Xo, + AvgPool: () => Qo, + AvgPool3D: () => Zs, + AvgPool3DGrad: () => Ri, + AvgPoolGrad: () => $i, + BackendWasm: () => pm, + BatchMatMul: () => Zo, + BatchToSpaceND: () => Js, + Bincount: () => Jo, + BitwiseAnd: () => qa, + BroadcastArgs: () => ea, + BroadcastTo: () => qce, + Cast: () => yo, + Ceil: () => en, + ClipByValue: () => bo, + Complex: () => Di, + ComplexAbs: () => Ai, + Concat: () => ta, + Conv2D: () => tn, + Conv2DBackpropFilter: () => Fi, + Conv2DBackpropInput: () => rn, + Conv3D: () => on, + Conv3DBackpropFilterV2: () => ja, + Conv3DBackpropInputV2: () => nn, + Cos: () => sn, + Cosh: () => an, + CropAndResize: () => cn, + Cumprod: () => un, + Cumsum: () => pn, + DataStorage: () => Bo, + DenseBincount: () => ra, + DepthToSpace: () => ln, + DepthwiseConv2dNative: () => mn, + DepthwiseConv2dNativeBackpropFilter: () => Pi, + DepthwiseConv2dNativeBackpropInput: () => Oi, + Diag: () => oa, + Dilation2D: () => dn, + Dilation2DBackpropFilter: () => Li, + Dilation2DBackpropInput: () => Mi, + Draw: () => $u, + ENV: () => nw, + Einsum: () => Bi, + Elu: () => hn, + EluGrad: () => Xa, + Environment: () => dl, + Equal: () => xn, + Erf: () => gn, + Exp: () => yn, + ExpandDims: () => na, + Expm1: () => bn, + FFT: () => zi, + Fill: () => sa, + FlipLeftRight: () => Cn, + Floor: () => wn, + FloorDiv: () => Sn, + FromPixels: () => Du, + FusedBatchNorm: () => In, + FusedConv2D: () => Io, + FusedDepthwiseConv2D: () => vo, + GPGPUContext: () => bp, + GatherNd: () => vn, + GatherV2: () => aa, + GraphModel: () => Bl, + Greater: () => kn, + GreaterEqual: () => Nn, + IFFT: () => Vi, + Identity: () => Co, + Imag: () => Wi, + IsFinite: () => Tn, + IsInf: () => _n, + IsNan: () => En, + KernelBackend: () => ao, + LRN: () => Bn, + LRNGrad: () => Ya, + LeakyRelu: () => $n, + Less: () => Rn, + LessEqual: () => Dn, + LinSpace: () => An, + Log: () => Fn, + Log1p: () => Pn, + LogSoftmax: () => jce, + LogicalAnd: () => On, + LogicalNot: () => Mn, + LogicalOr: () => Ln, + LogicalXor: () => R0, + LowerBound: () => Xce, + MathBackendCPU: () => xc, + MathBackendWebGL: () => Lc, + MatrixBandPart: () => Yce, + Max: () => zn, + MaxPool: () => Wn, + MaxPool3D: () => ia, + MaxPool3DGrad: () => Gi, + MaxPoolGrad: () => Ui, + MaxPoolWithArgmax: () => ua, + Maximum: () => Vn, + Mean: () => Un, + Min: () => Gn, + Minimum: () => Hn, + MirrorPad: () => Kn, + Mod: () => qn, + MomentumOptimizer: () => op, + Multinomial: () => jn, + Multiply: () => Xn, + Neg: () => pa, + NonMaxSuppressionV3: () => Qn, + NonMaxSuppressionV4: () => Qa, + NonMaxSuppressionV5: () => Zn, + NotEqual: () => Yn, + OP_SCOPE_SUFFIX: () => Nw, + OneHot: () => Jn, + OnesLike: () => ca, + Optimizer: () => kr, + OptimizerConstructors: () => Fl, + Pack: () => la, + PadV2: () => es, + Pool: () => Qce, + Pow: () => ts, + Prelu: () => rs, + Prod: () => os, + RMSPropOptimizer: () => np, + RaggedGather: () => Hp, + RaggedRange: () => Kp, + RaggedTensorToTensor: () => qp, + Range: () => ma, + Rank: () => gw, + Real: () => Hi, + RealDiv: () => fn, + Reciprocal: () => ns, + Reduction: () => $t, + Relu: () => ss, + Relu6: () => us, + Reshape: () => da, + ResizeBilinear: () => is, + ResizeBilinearGrad: () => Ja, + ResizeNearestNeighbor: () => as, + ResizeNearestNeighborGrad: () => Za, + Reverse: () => ps, + RotateWithOffset: () => Ds, + Round: () => cs, + Rsqrt: () => ls, + SGDOptimizer: () => mi, + ScatterNd: () => ms, + SearchSorted: () => fs, + Select: () => fa, + Selu: () => hs, + Sigmoid: () => bs, + Sign: () => ys, + Sin: () => gs, + Sinh: () => xs, + Slice: () => ha, + Softmax: () => Is, + Softplus: () => Cs, + SpaceToBatchND: () => ga, + SparseFillEmptyRows: () => Ki, + SparseReshape: () => ei, + SparseSegmentMean: () => ya, + SparseSegmentSum: () => ba, + SparseToDense: () => vs, + SplitV: () => xa, + Sqrt: () => ws, + Square: () => qi, + SquaredDifference: () => ks, + StaticRegexReplace: () => Ru, + Step: () => wo, + StridedSlice: () => Ns, + StringNGrams: () => Ca, + StringSplit: () => ji, + StringToHashBucketFast: () => Xi, + Sub: () => Ts, + Sum: () => Ss, + Tan: () => _s, + Tanh: () => Es, + Tensor: () => mt, + TensorBuffer: () => tt, + TensorScatterUpdate: () => ds, + Tile: () => po, + TopK: () => $s, + Transform: () => Rs, + Transpose: () => co, + Unique: () => Yi, + Unpack: () => wa, + UnsortedSegmentSum: () => Qi, + UpperBound: () => Zce, + Variable: () => ri, + WebGPUBackend: () => jc, + ZerosLike: () => Sa, + _FusedMatMul: () => So, + abs: () => Qt, + acos: () => Rk, + acosh: () => Dk, add: () => Ce, - addN: () => y1, - all: () => b1, - any: () => C1, - argMax: () => w1, - argMin: () => S1, - asin: () => I1, - asinh: () => v1, - atan: () => k1, - atan2: () => N1, - atanh: () => T1, - avgPool: () => Id, - avgPool3d: () => $1, - backend: () => Hk, - backend_util: () => C, - basicLSTMCell: () => R1, - batchNorm: () => mu, - batchNorm2d: () => A1, - batchNorm3d: () => F1, - batchNorm4d: () => P1, - batchToSpaceND: () => vd, - bincount: () => kd, - bitwiseAnd: () => O1, - booleanMaskAsync: () => oX, - broadcastArgs: () => M1, - broadcastTo: () => Oa, - broadcast_util: () => kr, - browser: () => XT, - buffer: () => ie, + addN: () => Ak, + all: () => Fk, + any: () => Pk, + argMax: () => Ok, + argMin: () => Mk, + asin: () => Lk, + asinh: () => Bk, + atan: () => zk, + atan2: () => Vk, + atanh: () => Wk, + avgPool: () => dd, + avgPool3d: () => Hk, + backend: () => ak, + backend_util: () => w, + basicLSTMCell: () => Kk, + batchNorm: () => nu, + batchNorm2d: () => jk, + batchNorm3d: () => Xk, + batchNorm4d: () => Yk, + batchToSpaceND: () => fd, + bincount: () => hd, + bitwiseAnd: () => Qk, + booleanMaskAsync: () => L6, + broadcastArgs: () => Zk, + broadcastTo: () => su, + broadcast_util: () => Sr, + browser: () => cT, + buffer: () => me, cast: () => Ue, - ceil: () => L1, - clipByValue: () => B1, - clone: () => Xr, - complex: () => Ar, - concat: () => bt, - concat1d: () => z1, - concat2d: () => V1, - concat3d: () => W1, - concat4d: () => U1, - conv1d: () => G1, - conv2d: () => du, - conv2dTranspose: () => H1, - conv3d: () => K1, - conv3dTranspose: () => j1, - copyRegisteredKernels: () => Pme, - cos: () => X1, - cosh: () => Y1, - cosineWindow: () => Mc, - cumprod: () => Q1, - cumsum: () => Z1, - customGrad: () => Nr, - denseBincount: () => J1, - deprecationWarn: () => zw, - depthToSpace: () => e2, - depthwiseConv2d: () => cl, - deregisterOp: () => aY, - device_util: () => uu, - diag: () => t2, - dilation2d: () => r22, - disableDeprecationWarnings: () => Kde, - dispose: () => Lt, - disposeVariables: () => qde, - div: () => Xe, - divNoNan: () => n2, - dot: () => s2, - dropout: () => hX, - einsum: () => fu, - elu: () => Ed, - enableDebugMode: () => Hde, - enableProdMode: () => Gde, - enclosingPowerOfTwo: () => cS, - engine: () => cr, - ensureShape: () => a2, + ceil: () => Jk, + clipByValue: () => e2, + clone: () => Ur, + complex: () => Er, + concat: () => yt, + concat1d: () => t2, + concat2d: () => r22, + concat3d: () => o2, + concat4d: () => n2, + conv1d: () => s2, + conv2d: () => au, + conv2dTranspose: () => a2, + conv3d: () => i2, + conv3dTranspose: () => p2, + copyRegisteredKernels: () => ale, + cos: () => c2, + cosh: () => l2, + cosineWindow: () => $l, + cumprod: () => m2, + cumsum: () => d2, + customGrad: () => Ir, + denseBincount: () => f2, + deprecationWarn: () => Tw, + depthToSpace: () => h2, + depthwiseConv2d: () => sc, + deregisterOp: () => V5, + device_util: () => eu, + diag: () => g2, + dilation2d: () => x2, + disableDeprecationWarnings: () => xme, + dispose: () => Ot, + disposeVariables: () => yme, + div: () => je, + divNoNan: () => b2, + dot: () => C2, + dropout: () => Y6, + einsum: () => iu, + elu: () => bd, + enableDebugMode: () => gme, + enableProdMode: () => hme, + enclosingPowerOfTwo: () => Zw, + engine: () => ur, + ensureShape: () => w2, env: () => A, - equal: () => _d, - erf: () => i2, - euclideanNorm: () => l2, - exp: () => Jo, - expandDims: () => Ks, - expm1: () => c2, - eye: () => $d, - fft: () => fl, - fill: () => Ma, - findBackend: () => efe, - findBackendFactory: () => tfe, - floor: () => Rd, - floorDiv: () => Sd, - forceHalfFloat: () => EA, - fused: () => mS, - gather: () => Dd, - gatherND: () => dX, - gather_util: () => xf, - getBackend: () => Gk, - getGradient: () => Cw, - getKernel: () => tl, - getKernelsForBackend: () => ad, - getThreadsCount: () => kie, - gpgpu_util: () => k0, - grad: () => a6, - grads: () => i6, - greater: () => ju, - greaterEqual: () => Ad, - ifft: () => ep, - imag: () => gu, - image: () => b5, - inTopKAsync: () => xX, - io: () => Si, - irfft: () => tf, - isFinite: () => m2, - isInf: () => d2, - isNaN: () => f2, - keep: () => Fr, - kernel_impls: () => Ut, - leakyRelu: () => Fd, - less: () => Fc, - lessEqual: () => ml, - linalg: () => C5, - linspace: () => h2, - loadGraphModel: () => r72, - loadGraphModelSync: () => o7, - localResponseNormalization: () => g2, - log: () => yi, - log1p: () => Pd, - logSigmoid: () => x2, - logSoftmax: () => y2, - logSumExp: () => Ld, - logicalAnd: () => Xu, - logicalNot: () => Bd, - logicalOr: () => zd, - logicalXor: () => b2, - losses: () => w5, - lowerBound: () => C2, - matMul: () => Je, - math: () => HT, - max: () => La, - maxPool: () => Wd, - maxPool3d: () => w2, - maxPoolWithArgmax: () => S2, - maximum: () => Ud, - mean: () => Yu, - memory: () => jde, - meshgrid: () => I2, - min: () => Ac, - minimum: () => Qu, - mirrorPad: () => v2, - mod: () => k2, - moments: () => N2, - movingAverage: () => aX, + equal: () => yd, + erf: () => S2, + euclideanNorm: () => k2, + exp: () => _o, + expandDims: () => Ms, + expm1: () => N2, + eye: () => Cd, + fft: () => uc, + fill: () => $a, + findBackend: () => kme, + findBackendFactory: () => Nme, + floor: () => wd, + floorDiv: () => md, + forceHalfFloat: () => GD, + fused: () => Jw, + gather: () => Sd, + gatherND: () => j6, + gather_util: () => af, + getBackend: () => sk, + getGradient: () => iw, + getKernel: () => Xp, + getKernelsForBackend: () => Ym, + getThreadsCount: () => aae, + gpgpu_util: () => mv, + grad: () => VK, + grads: () => WK, + greater: () => Wu, + greaterEqual: () => Id, + ifft: () => ju, + imag: () => pu, + image: () => eX, + inTopKAsync: () => Z6, + io: () => di, + irfft: () => Hd, + isFinite: () => T2, + isInf: () => _2, + isNaN: () => E2, + keep: () => $r, + kernel_impls: () => Vt, + leakyRelu: () => vd, + less: () => Tl, + lessEqual: () => ac, + linalg: () => tX, + linspace: () => $2, + loadGraphModel: () => M8, + loadGraphModelSync: () => L8, + localResponseNormalization: () => R2, + log: () => pi, + log1p: () => kd, + logSigmoid: () => D2, + logSoftmax: () => A2, + logSumExp: () => _d, + logicalAnd: () => Uu, + logicalNot: () => Ed, + logicalOr: () => $d, + logicalXor: () => F2, + losses: () => rX, + lowerBound: () => P2, + matMul: () => Ze, + math: () => aT, + max: () => Ra, + maxPool: () => Dd, + maxPool3d: () => O2, + maxPoolWithArgmax: () => M2, + maximum: () => Ad, + mean: () => Gu, + memory: () => bme, + meshgrid: () => L2, + min: () => Nl, + minimum: () => Hu, + mirrorPad: () => B2, + mod: () => z2, + moments: () => V2, + movingAverage: () => V6, mul: () => se, - multiRNNCell: () => T2, - multinomial: () => _2, - neg: () => mr, - nextFrame: () => IS, - node: () => qtr, - norm: () => qu, - notEqual: () => Gd, - oneHot: () => Oc, - ones: () => Ba, - onesLike: () => E2, + multiRNNCell: () => W2, + multinomial: () => U2, + neg: () => pr, + nextFrame: () => cS, + node: () => E7t, + norm: () => Vu, + notEqual: () => Fd, + oneHot: () => El, + ones: () => Da, + onesLike: () => G2, op: () => N, - outerProduct: () => $2, - pad: () => za, - pad1d: () => R2, - pad2d: () => D2, - pad3d: () => A2, - pad4d: () => F2, - pool: () => P2, - pow: () => xi, - prelu: () => Kd, - print: () => wd, - prod: () => O2, - profile: () => Xde, - raggedGather: () => M2, - raggedRange: () => L2, - raggedTensorToTensor: () => B2, - rand: () => z2, - randomGamma: () => iN, - randomNormal: () => Zd, - randomStandardNormal: () => uN, - randomUniform: () => dl, - randomUniformInt: () => pN, - range: () => xu, - ready: () => Zde, - real: () => bi, - reciprocal: () => lN, - registerBackend: () => pu, - registerGradient: () => Dme, - registerKernel: () => li, - registerOp: () => sY, - relu: () => yu, - relu6: () => Jd, - removeBackend: () => Jde, + outerProduct: () => H2, + pad: () => Aa, + pad1d: () => K2, + pad2d: () => q2, + pad3d: () => j2, + pad4d: () => X2, + pool: () => Y2, + pow: () => ui, + prelu: () => Od, + print: () => ld, + prod: () => Q2, + profile: () => Cme, + raggedGather: () => Z2, + raggedRange: () => J2, + raggedTensorToTensor: () => e1, + rand: () => t1, + randomGamma: () => S1, + randomNormal: () => Wd, + randomStandardNormal: () => I1, + randomUniform: () => ic, + randomUniformInt: () => v1, + range: () => cu, + ready: () => Ime, + real: () => ci, + reciprocal: () => k1, + registerBackend: () => tu, + registerGradient: () => ole, + registerKernel: () => ti, + registerOp: () => z5, + relu: () => lu, + relu6: () => Ud, + removeBackend: () => vme, reshape: () => W, - reverse: () => Bo, - reverse1d: () => cN, - reverse2d: () => mN, - reverse3d: () => dN, - reverse4d: () => fN, - rfft: () => hl, - round: () => ef, - rsqrt: () => hN, + reverse: () => mo, + reverse1d: () => N1, + reverse2d: () => T1, + reverse3d: () => _1, + reverse4d: () => E1, + rfft: () => pc, + round: () => Gd, + rsqrt: () => $1, scalar: () => ke, - scatterND: () => uX, - scatter_util: () => Cu, - searchSorted: () => Pc, - selu: () => gN, - separableConv2d: () => xN, - serialization: () => AT, - setBackend: () => Qde, - setPlatform: () => rfe, - setThreadsCount: () => vie, - setWasmPath: () => Sie, - setWasmPaths: () => Iie, - setWebGLContext: () => BI, - setdiff1dAsync: () => yN, - shared: () => Xf, - sigmoid: () => Pa, - sign: () => bN, - signal: () => y5, - sin: () => CN, - sinh: () => wN, - slice: () => Ye, - slice1d: () => SN, - slice2d: () => IN, - slice3d: () => vN, - slice4d: () => kN, - slice_util: () => nt, - softmax: () => NN, - softplus: () => Md, - spaceToBatchND: () => Hd, - sparse: () => S5, - sparseToDense: () => cX, - spectral: () => x5, - split: () => Ci, - sqrt: () => Pr, - square: () => tr, - squaredDifference: () => rf, - squeeze: () => gl, - stack: () => Tr, - step: () => of, - stridedSlice: () => TN, - string: () => I5, + scatterND: () => U6, + scatter_util: () => du, + searchSorted: () => _l, + selu: () => R1, + separableConv2d: () => D1, + serialization: () => jN, + setBackend: () => Sme, + setPlatform: () => Tme, + setThreadsCount: () => sae, + setWasmPath: () => oae, + setWasmPaths: () => nae, + setWebGLContext: () => NI, + setdiff1dAsync: () => A1, + shared: () => Ic, + sigmoid: () => Ea, + sign: () => F1, + signal: () => Jj, + sin: () => P1, + sinh: () => O1, + slice: () => Xe, + slice1d: () => M1, + slice2d: () => L1, + slice3d: () => B1, + slice4d: () => z1, + slice_util: () => pt, + softmax: () => V1, + softplus: () => Td, + spaceToBatchND: () => Pd, + sparse: () => oX, + sparseToDense: () => K6, + spectral: () => Zj, + split: () => li, + sqrt: () => Rr, + square: () => Zt, + squaredDifference: () => Kd, + squeeze: () => cc, + stack: () => vr, + step: () => qd, + stridedSlice: () => W1, + string: () => nX, sub: () => Te, sum: () => ot, - sumOutType: () => mi, - tan: () => _N, - tanh: () => Dc, - tensor: () => pr, - tensor1d: () => rr, - tensor2d: () => bu, - tensor3d: () => nf, - tensor4d: () => EN, - tensor5d: () => $N, - tensor6d: () => RN, - tensorScatterUpdate: () => AN, - tensor_util: () => Vk, - test_util: () => aN, + sumOutType: () => oi, + tan: () => U1, + tanh: () => kl, + tensor: () => ar, + tensor1d: () => Jt, + tensor2d: () => mu, + tensor3d: () => jd, + tensor4d: () => G1, + tensor5d: () => H1, + tensor6d: () => K1, + tensorScatterUpdate: () => j1, + tensor_util: () => rk, + test_util: () => w1, tidy: () => De, - tile: () => hu, - time: () => Yde, - topk: () => FN, - train: () => cHe, - transpose: () => yl, - truncatedNormal: () => PN, - unique: () => ON, - unregisterGradient: () => Fme, - unregisterKernel: () => Ame, - unsortedSegmentSum: () => MN, - unstack: () => zo, - upcastType: () => pt, - upperBound: () => LN, + tile: () => uu, + time: () => wme, + topk: () => X1, + train: () => OGe, + transpose: () => mc, + truncatedNormal: () => Y1, + unique: () => Q1, + unregisterGradient: () => sle, + unregisterKernel: () => nle, + unsortedSegmentSum: () => Z1, + unstack: () => fo, + upcastType: () => dt, + upperBound: () => J1, util: () => y, - valueAndGrad: () => u6, - valueAndGrads: () => p6, - variable: () => BN, - variableGrads: () => eS, - version: () => gme, - version_converter: () => s7, - version_core: () => t8, - version_cpu: () => M7, - version_wasm: () => Nie, - version_webgl: () => DJ, - webgl: () => sut, - webgl_util: () => Fl, - webgpu_util: () => cv, - where: () => Lo, - whereAsync: () => af, - zeros: () => Yr, - zerosLike: () => Kt + valueAndGrad: () => UK, + valueAndGrads: () => GK, + variable: () => eN, + variableGrads: () => Vw, + version: () => Vce, + version_converter: () => z8, + version_core: () => OX, + version_cpu: () => yY, + version_wasm: () => iae, + version_webgl: () => d9, + webgl: () => $at, + webgl_util: () => Ec, + webgpu_util: () => Zv, + where: () => lo, + whereAsync: () => Yd, + zeros: () => Gr, + zerosLike: () => Gt }); -var q4 = Object.create; -var lw = Object.defineProperty; -var j4 = Object.getOwnPropertyDescriptor; -var X4 = Object.getOwnPropertyNames; -var Y4 = Object.getPrototypeOf; -var Q4 = Object.prototype.hasOwnProperty; -var jt = (r16, e) => () => (e || r16((e = { exports: {} }).exports, e), e.exports); -var qe = (r16, e) => { +var _G = Object.create; +var QC = Object.defineProperty; +var EG = Object.getOwnPropertyDescriptor; +var $G = Object.getOwnPropertyNames; +var RG = Object.getPrototypeOf; +var DG = Object.prototype.hasOwnProperty; +var Kt = (r15, e) => () => (e || r15((e = { exports: {} }).exports, e), e.exports); +var qe = (r15, e) => { for (var t10 in e) - lw(r16, t10, { get: e[t10], enumerable: true }); + QC(r15, t10, { get: e[t10], enumerable: true }); }; -var Z4 = (r16, e, t10, o) => { +var AG = (r15, e, t10, o) => { if (e && typeof e == "object" || typeof e == "function") - for (let n of X4(e)) - !Q4.call(r16, n) && n !== t10 && lw(r16, n, { get: () => e[n], enumerable: !(o = j4(e, n)) || o.enumerable }); - return r16; -}; -var Kp = (r16, e, t10) => (t10 = r16 != null ? q4(Y4(r16)) : {}, Z4(e || !r16 || !r16.__esModule ? lw(t10, "default", { value: r16, enumerable: true }) : t10, r16)); -var _k = jt((Lme, Tk) => { - Tk.exports = Tt; - var Yo = null; + for (let n of $G(e)) + !DG.call(r15, n) && n !== t10 && QC(r15, n, { get: () => e[n], enumerable: !(o = EG(e, n)) || o.enumerable }); + return r15; +}; +var zp = (r15, e, t10) => (t10 = r15 != null ? _G(RG(r15)) : {}, AG(e || !r15 || !r15.__esModule ? QC(t10, "default", { value: r15, enumerable: true }) : t10, r15)); +var U0 = Kt((ple, W0) => { + W0.exports = kt; + var ko = null; try { - Yo = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports; - } catch (r16) { + ko = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11])), {}).exports; + } catch (r15) { } - function Tt(r16, e, t10) { - this.low = r16 | 0, this.high = e | 0, this.unsigned = !!t10; + function kt(r15, e, t10) { + this.low = r15 | 0, this.high = e | 0, this.unsigned = !!t10; } - Tt.prototype.__isLong__; - Object.defineProperty(Tt.prototype, "__isLong__", { value: true }); - function jr(r16) { - return (r16 && r16.__isLong__) === true; + kt.prototype.__isLong__; + Object.defineProperty(kt.prototype, "__isLong__", { value: true }); + function Wr(r15) { + return (r15 && r15.__isLong__) === true; } - Tt.isLong = jr; - var yk = {}, bk = {}; - function zu(r16, e) { + kt.isLong = Wr; + var A0 = {}, F0 = {}; + function Fu(r15, e) { var t10, o, n; - return e ? (r16 >>>= 0, (n = 0 <= r16 && r16 < 256) && (o = bk[r16], o) ? o : (t10 = _t(r16, (r16 | 0) < 0 ? -1 : 0, true), n && (bk[r16] = t10), t10)) : (r16 |= 0, (n = -128 <= r16 && r16 < 128) && (o = yk[r16], o) ? o : (t10 = _t(r16, r16 < 0 ? -1 : 0, false), n && (yk[r16] = t10), t10)); + return e ? (r15 >>>= 0, (n = 0 <= r15 && r15 < 256) && (o = F0[r15], o) ? o : (t10 = Nt(r15, (r15 | 0) < 0 ? -1 : 0, true), n && (F0[r15] = t10), t10)) : (r15 |= 0, (n = -128 <= r15 && r15 < 128) && (o = A0[r15], o) ? o : (t10 = Nt(r15, r15 < 0 ? -1 : 0, false), n && (A0[r15] = t10), t10)); } - Tt.fromInt = zu; - function Qo(r16, e) { - if (isNaN(r16)) - return e ? Bu : Zo; + kt.fromInt = Fu; + function No(r15, e) { + if (isNaN(r15)) + return e ? Au : To; if (e) { - if (r16 < 0) - return Bu; - if (r16 >= Ik) - return Nk; + if (r15 < 0) + return Au; + if (r15 >= L0) + return V0; } else { - if (r16 <= -wk) - return qr; - if (r16 + 1 >= wk) - return kk; + if (r15 <= -O0) + return Vr; + if (r15 + 1 >= O0) + return z0; } - return r16 < 0 ? Qo(-r16, e).neg() : _t(r16 % ol | 0, r16 / ol | 0, e); + return r15 < 0 ? No(-r15, e).neg() : Nt(r15 % Qp | 0, r15 / Qp | 0, e); } - Tt.fromNumber = Qo; - function _t(r16, e, t10) { - return new Tt(r16, e, t10); + kt.fromNumber = No; + function Nt(r15, e, t10) { + return new kt(r15, e, t10); } - Tt.fromBits = _t; - var ud = Math.pow; - function Iw(r16, e, t10) { - if (r16.length === 0) + kt.fromBits = Nt; + var Zm = Math.pow; + function cw(r15, e, t10) { + if (r15.length === 0) throw Error("empty string"); - if (r16 === "NaN" || r16 === "Infinity" || r16 === "+Infinity" || r16 === "-Infinity") - return Zo; + if (r15 === "NaN" || r15 === "Infinity" || r15 === "+Infinity" || r15 === "-Infinity") + return To; if (typeof e == "number" ? (t10 = e, e = false) : e = !!e, t10 = t10 || 10, t10 < 2 || 36 < t10) throw RangeError("radix"); var o; - if ((o = r16.indexOf("-")) > 0) + if ((o = r15.indexOf("-")) > 0) throw Error("interior hyphen"); if (o === 0) - return Iw(r16.substring(1), e, t10).neg(); - for (var n = Qo(ud(t10, 8)), s = Zo, a = 0; a < r16.length; a += 8) { - var i = Math.min(8, r16.length - a), p = parseInt(r16.substring(a, a + i), t10); + return cw(r15.substring(1), e, t10).neg(); + for (var n = No(Zm(t10, 8)), s = To, a = 0; a < r15.length; a += 8) { + var i = Math.min(8, r15.length - a), p = parseInt(r15.substring(a, a + i), t10); if (i < 8) { - var u = Qo(ud(t10, i)); - s = s.mul(u).add(Qo(p)); + var u = No(Zm(t10, i)); + s = s.mul(u).add(No(p)); } else - s = s.mul(n), s = s.add(Qo(p)); + s = s.mul(n), s = s.add(No(p)); } return s.unsigned = e, s; } - Tt.fromString = Iw; - function Ws(r16, e) { - return typeof r16 == "number" ? Qo(r16, e) : typeof r16 == "string" ? Iw(r16, e) : _t(r16.low, r16.high, typeof e == "boolean" ? e : r16.unsigned); - } - Tt.fromValue = Ws; - var Ck = 65536, wH = 1 << 24, ol = Ck * Ck, Ik = ol * ol, wk = Ik / 2, Sk = zu(wH), Zo = zu(0); - Tt.ZERO = Zo; - var Bu = zu(0, true); - Tt.UZERO = Bu; - var rl = zu(1); - Tt.ONE = rl; - var vk = zu(1, true); - Tt.UONE = vk; - var Sw = zu(-1); - Tt.NEG_ONE = Sw; - var kk = _t(-1, 2147483647, false); - Tt.MAX_VALUE = kk; - var Nk = _t(-1, -1, true); - Tt.MAX_UNSIGNED_VALUE = Nk; - var qr = _t(0, -2147483648, false); - Tt.MIN_VALUE = qr; - var de = Tt.prototype; + kt.fromString = cw; + function As(r15, e) { + return typeof r15 == "number" ? No(r15, e) : typeof r15 == "string" ? cw(r15, e) : Nt(r15.low, r15.high, typeof e == "boolean" ? e : r15.unsigned); + } + kt.fromValue = As; + var P0 = 65536, r42 = 1 << 24, Qp = P0 * P0, L0 = Qp * Qp, O0 = L0 / 2, M0 = Fu(r42), To = Fu(0); + kt.ZERO = To; + var Au = Fu(0, true); + kt.UZERO = Au; + var Yp = Fu(1); + kt.ONE = Yp; + var B0 = Fu(1, true); + kt.UONE = B0; + var pw = Fu(-1); + kt.NEG_ONE = pw; + var z0 = Nt(-1, 2147483647, false); + kt.MAX_VALUE = z0; + var V0 = Nt(-1, -1, true); + kt.MAX_UNSIGNED_VALUE = V0; + var Vr = Nt(0, -2147483648, false); + kt.MIN_VALUE = Vr; + var de = kt.prototype; de.toInt = function() { return this.unsigned ? this.low >>> 0 : this.low; }; de.toNumber = function() { - return this.unsigned ? (this.high >>> 0) * ol + (this.low >>> 0) : this.high * ol + (this.low >>> 0); + return this.unsigned ? (this.high >>> 0) * Qp + (this.low >>> 0) : this.high * Qp + (this.low >>> 0); }; de.toString = function(e) { if (e = e || 10, e < 2 || 36 < e) @@ -652,18 +652,18 @@ var _k = jt((Lme, Tk) => { if (this.isZero()) return "0"; if (this.isNegative()) - if (this.eq(qr)) { - var t10 = Qo(e), o = this.div(t10), n = o.mul(t10).sub(this); + if (this.eq(Vr)) { + var t10 = No(e), o = this.div(t10), n = o.mul(t10).sub(this); return o.toString(e) + n.toInt().toString(e); } else return "-" + this.neg().toString(e); - for (var s = Qo(ud(e, 6), this.unsigned), a = this, i = ""; ; ) { - var p = a.div(s), u = a.sub(p.mul(s)).toInt() >>> 0, l = u.toString(e); + for (var s = No(Zm(e, 6), this.unsigned), a = this, i = ""; ; ) { + var p = a.div(s), u = a.sub(p.mul(s)).toInt() >>> 0, c = u.toString(e); if (a = p, a.isZero()) - return l + i; - for (; l.length < 6; ) - l = "0" + l; - i = "" + l + i; + return c + i; + for (; c.length < 6; ) + c = "0" + c; + i = "" + c + i; } }; de.getHighBits = function() { @@ -680,7 +680,7 @@ var _k = jt((Lme, Tk) => { }; de.getNumBitsAbs = function() { if (this.isNegative()) - return this.eq(qr) ? 64 : this.neg().getNumBitsAbs(); + return this.eq(Vr) ? 64 : this.neg().getNumBitsAbs(); for (var e = this.high != 0 ? this.high : this.low, t10 = 31; t10 > 0 && !(e & 1 << t10); t10--) ; return this.high != 0 ? t10 + 33 : t10 + 1; @@ -702,7 +702,7 @@ var _k = jt((Lme, Tk) => { return (this.low & 1) === 0; }; de.equals = function(e) { - return jr(e) || (e = Ws(e)), this.unsigned !== e.unsigned && this.high >>> 31 === 1 && e.high >>> 31 === 1 ? false : this.high === e.high && this.low === e.low; + return Wr(e) || (e = As(e)), this.unsigned !== e.unsigned && this.high >>> 31 === 1 && e.high >>> 31 === 1 ? false : this.high === e.high && this.low === e.low; }; de.eq = de.equals; de.notEquals = function(e) { @@ -729,137 +729,137 @@ var _k = jt((Lme, Tk) => { de.gte = de.greaterThanOrEqual; de.ge = de.greaterThanOrEqual; de.compare = function(e) { - if (jr(e) || (e = Ws(e)), this.eq(e)) + if (Wr(e) || (e = As(e)), this.eq(e)) return 0; var t10 = this.isNegative(), o = e.isNegative(); return t10 && !o ? -1 : !t10 && o ? 1 : this.unsigned ? e.high >>> 0 > this.high >>> 0 || e.high === this.high && e.low >>> 0 > this.low >>> 0 ? -1 : 1 : this.sub(e).isNegative() ? -1 : 1; }; de.comp = de.compare; de.negate = function() { - return !this.unsigned && this.eq(qr) ? qr : this.not().add(rl); + return !this.unsigned && this.eq(Vr) ? Vr : this.not().add(Yp); }; de.neg = de.negate; de.add = function(e) { - jr(e) || (e = Ws(e)); - var t10 = this.high >>> 16, o = this.high & 65535, n = this.low >>> 16, s = this.low & 65535, a = e.high >>> 16, i = e.high & 65535, p = e.low >>> 16, u = e.low & 65535, l = 0, c = 0, m = 0, d = 0; - return d += s + u, m += d >>> 16, d &= 65535, m += n + p, c += m >>> 16, m &= 65535, c += o + i, l += c >>> 16, c &= 65535, l += t10 + a, l &= 65535, _t(m << 16 | d, l << 16 | c, this.unsigned); + Wr(e) || (e = As(e)); + var t10 = this.high >>> 16, o = this.high & 65535, n = this.low >>> 16, s = this.low & 65535, a = e.high >>> 16, i = e.high & 65535, p = e.low >>> 16, u = e.low & 65535, c = 0, l = 0, m = 0, d = 0; + return d += s + u, m += d >>> 16, d &= 65535, m += n + p, l += m >>> 16, m &= 65535, l += o + i, c += l >>> 16, l &= 65535, c += t10 + a, c &= 65535, Nt(m << 16 | d, c << 16 | l, this.unsigned); }; de.subtract = function(e) { - return jr(e) || (e = Ws(e)), this.add(e.neg()); + return Wr(e) || (e = As(e)), this.add(e.neg()); }; de.sub = de.subtract; de.multiply = function(e) { if (this.isZero()) - return Zo; - if (jr(e) || (e = Ws(e)), Yo) { - var t10 = Yo.mul(this.low, this.high, e.low, e.high); - return _t(t10, Yo.get_high(), this.unsigned); + return To; + if (Wr(e) || (e = As(e)), ko) { + var t10 = ko.mul(this.low, this.high, e.low, e.high); + return Nt(t10, ko.get_high(), this.unsigned); } if (e.isZero()) - return Zo; - if (this.eq(qr)) - return e.isOdd() ? qr : Zo; - if (e.eq(qr)) - return this.isOdd() ? qr : Zo; + return To; + if (this.eq(Vr)) + return e.isOdd() ? Vr : To; + if (e.eq(Vr)) + return this.isOdd() ? Vr : To; if (this.isNegative()) return e.isNegative() ? this.neg().mul(e.neg()) : this.neg().mul(e).neg(); if (e.isNegative()) return this.mul(e.neg()).neg(); - if (this.lt(Sk) && e.lt(Sk)) - return Qo(this.toNumber() * e.toNumber(), this.unsigned); - var o = this.high >>> 16, n = this.high & 65535, s = this.low >>> 16, a = this.low & 65535, i = e.high >>> 16, p = e.high & 65535, u = e.low >>> 16, l = e.low & 65535, c = 0, m = 0, d = 0, f = 0; - return f += a * l, d += f >>> 16, f &= 65535, d += s * l, m += d >>> 16, d &= 65535, d += a * u, m += d >>> 16, d &= 65535, m += n * l, c += m >>> 16, m &= 65535, m += s * u, c += m >>> 16, m &= 65535, m += a * p, c += m >>> 16, m &= 65535, c += o * l + n * u + s * p + a * i, c &= 65535, _t(d << 16 | f, c << 16 | m, this.unsigned); + if (this.lt(M0) && e.lt(M0)) + return No(this.toNumber() * e.toNumber(), this.unsigned); + var o = this.high >>> 16, n = this.high & 65535, s = this.low >>> 16, a = this.low & 65535, i = e.high >>> 16, p = e.high & 65535, u = e.low >>> 16, c = e.low & 65535, l = 0, m = 0, d = 0, f = 0; + return f += a * c, d += f >>> 16, f &= 65535, d += s * c, m += d >>> 16, d &= 65535, d += a * u, m += d >>> 16, d &= 65535, m += n * c, l += m >>> 16, m &= 65535, m += s * u, l += m >>> 16, m &= 65535, m += a * p, l += m >>> 16, m &= 65535, l += o * c + n * u + s * p + a * i, l &= 65535, Nt(d << 16 | f, l << 16 | m, this.unsigned); }; de.mul = de.multiply; de.divide = function(e) { - if (jr(e) || (e = Ws(e)), e.isZero()) + if (Wr(e) || (e = As(e)), e.isZero()) throw Error("division by zero"); - if (Yo) { + if (ko) { if (!this.unsigned && this.high === -2147483648 && e.low === -1 && e.high === -1) return this; - var t10 = (this.unsigned ? Yo.div_u : Yo.div_s)(this.low, this.high, e.low, e.high); - return _t(t10, Yo.get_high(), this.unsigned); + var t10 = (this.unsigned ? ko.div_u : ko.div_s)(this.low, this.high, e.low, e.high); + return Nt(t10, ko.get_high(), this.unsigned); } if (this.isZero()) - return this.unsigned ? Bu : Zo; + return this.unsigned ? Au : To; var o, n, s; if (this.unsigned) { if (e.unsigned || (e = e.toUnsigned()), e.gt(this)) - return Bu; + return Au; if (e.gt(this.shru(1))) - return vk; - s = Bu; + return B0; + s = Au; } else { - if (this.eq(qr)) { - if (e.eq(rl) || e.eq(Sw)) - return qr; - if (e.eq(qr)) - return rl; + if (this.eq(Vr)) { + if (e.eq(Yp) || e.eq(pw)) + return Vr; + if (e.eq(Vr)) + return Yp; var a = this.shr(1); - return o = a.div(e).shl(1), o.eq(Zo) ? e.isNegative() ? rl : Sw : (n = this.sub(e.mul(o)), s = o.add(n.div(e)), s); - } else if (e.eq(qr)) - return this.unsigned ? Bu : Zo; + return o = a.div(e).shl(1), o.eq(To) ? e.isNegative() ? Yp : pw : (n = this.sub(e.mul(o)), s = o.add(n.div(e)), s); + } else if (e.eq(Vr)) + return this.unsigned ? Au : To; if (this.isNegative()) return e.isNegative() ? this.neg().div(e.neg()) : this.neg().div(e).neg(); if (e.isNegative()) return this.div(e.neg()).neg(); - s = Zo; + s = To; } for (n = this; n.gte(e); ) { o = Math.max(1, Math.floor(n.toNumber() / e.toNumber())); - for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : ud(2, i - 48), u = Qo(o), l = u.mul(e); l.isNegative() || l.gt(n); ) - o -= p, u = Qo(o, this.unsigned), l = u.mul(e); - u.isZero() && (u = rl), s = s.add(u), n = n.sub(l); + for (var i = Math.ceil(Math.log(o) / Math.LN2), p = i <= 48 ? 1 : Zm(2, i - 48), u = No(o), c = u.mul(e); c.isNegative() || c.gt(n); ) + o -= p, u = No(o, this.unsigned), c = u.mul(e); + u.isZero() && (u = Yp), s = s.add(u), n = n.sub(c); } return s; }; de.div = de.divide; de.modulo = function(e) { - if (jr(e) || (e = Ws(e)), Yo) { - var t10 = (this.unsigned ? Yo.rem_u : Yo.rem_s)(this.low, this.high, e.low, e.high); - return _t(t10, Yo.get_high(), this.unsigned); + if (Wr(e) || (e = As(e)), ko) { + var t10 = (this.unsigned ? ko.rem_u : ko.rem_s)(this.low, this.high, e.low, e.high); + return Nt(t10, ko.get_high(), this.unsigned); } return this.sub(this.div(e).mul(e)); }; de.mod = de.modulo; de.rem = de.modulo; de.not = function() { - return _t(~this.low, ~this.high, this.unsigned); + return Nt(~this.low, ~this.high, this.unsigned); }; de.and = function(e) { - return jr(e) || (e = Ws(e)), _t(this.low & e.low, this.high & e.high, this.unsigned); + return Wr(e) || (e = As(e)), Nt(this.low & e.low, this.high & e.high, this.unsigned); }; de.or = function(e) { - return jr(e) || (e = Ws(e)), _t(this.low | e.low, this.high | e.high, this.unsigned); + return Wr(e) || (e = As(e)), Nt(this.low | e.low, this.high | e.high, this.unsigned); }; de.xor = function(e) { - return jr(e) || (e = Ws(e)), _t(this.low ^ e.low, this.high ^ e.high, this.unsigned); + return Wr(e) || (e = As(e)), Nt(this.low ^ e.low, this.high ^ e.high, this.unsigned); }; de.shiftLeft = function(e) { - return jr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? _t(this.low << e, this.high << e | this.low >>> 32 - e, this.unsigned) : _t(0, this.low << e - 32, this.unsigned); + return Wr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? Nt(this.low << e, this.high << e | this.low >>> 32 - e, this.unsigned) : Nt(0, this.low << e - 32, this.unsigned); }; de.shl = de.shiftLeft; de.shiftRight = function(e) { - return jr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? _t(this.low >>> e | this.high << 32 - e, this.high >> e, this.unsigned) : _t(this.high >> e - 32, this.high >= 0 ? 0 : -1, this.unsigned); + return Wr(e) && (e = e.toInt()), (e &= 63) === 0 ? this : e < 32 ? Nt(this.low >>> e | this.high << 32 - e, this.high >> e, this.unsigned) : Nt(this.high >> e - 32, this.high >= 0 ? 0 : -1, this.unsigned); }; de.shr = de.shiftRight; de.shiftRightUnsigned = function(e) { - if (jr(e) && (e = e.toInt()), e &= 63, e === 0) + if (Wr(e) && (e = e.toInt()), e &= 63, e === 0) return this; var t10 = this.high; if (e < 32) { var o = this.low; - return _t(o >>> e | t10 << 32 - e, t10 >>> e, this.unsigned); + return Nt(o >>> e | t10 << 32 - e, t10 >>> e, this.unsigned); } else - return e === 32 ? _t(t10, 0, this.unsigned) : _t(t10 >>> e - 32, 0, this.unsigned); + return e === 32 ? Nt(t10, 0, this.unsigned) : Nt(t10 >>> e - 32, 0, this.unsigned); }; de.shru = de.shiftRightUnsigned; de.shr_u = de.shiftRightUnsigned; de.toSigned = function() { - return this.unsigned ? _t(this.low, this.high, false) : this; + return this.unsigned ? Nt(this.low, this.high, false) : this; }; de.toUnsigned = function() { - return this.unsigned ? this : _t(this.low, this.high, true); + return this.unsigned ? this : Nt(this.low, this.high, true); }; de.toBytes = function(e) { return e ? this.toBytesLE() : this.toBytesBE(); @@ -872,49 +872,49 @@ var _k = jt((Lme, Tk) => { var e = this.high, t10 = this.low; return [e >>> 24, e >>> 16 & 255, e >>> 8 & 255, e & 255, t10 >>> 24, t10 >>> 16 & 255, t10 >>> 8 & 255, t10 & 255]; }; - Tt.fromBytes = function(e, t10, o) { - return o ? Tt.fromBytesLE(e, t10) : Tt.fromBytesBE(e, t10); + kt.fromBytes = function(e, t10, o) { + return o ? kt.fromBytesLE(e, t10) : kt.fromBytesBE(e, t10); }; - Tt.fromBytesLE = function(e, t10) { - return new Tt(e[0] | e[1] << 8 | e[2] << 16 | e[3] << 24, e[4] | e[5] << 8 | e[6] << 16 | e[7] << 24, t10); + kt.fromBytesLE = function(e, t10) { + return new kt(e[0] | e[1] << 8 | e[2] << 16 | e[3] << 24, e[4] | e[5] << 8 | e[6] << 16 | e[7] << 24, t10); }; - Tt.fromBytesBE = function(e, t10) { - return new Tt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7], e[0] << 24 | e[1] << 16 | e[2] << 8 | e[3], t10); + kt.fromBytesBE = function(e, t10) { + return new kt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7], e[0] << 24 | e[1] << 16 | e[2] << 8 | e[3], t10); }; }); -var f1 = jt(() => { +var Ek = Kt(() => { }); -var h1 = jt(() => { +var $k = Kt(() => { }); -var W2 = jt((V2, tS) => { - (function(r16, e, t10) { +var o1 = Kt((r1, Ww) => { + (function(r15, e, t10) { function o(i) { var p = this, u = a(); p.next = function() { - var l = 2091639 * p.s0 + p.c * 23283064365386963e-26; - return p.s0 = p.s1, p.s1 = p.s2, p.s2 = l - (p.c = l | 0); + var c = 2091639 * p.s0 + p.c * 23283064365386963e-26; + return p.s0 = p.s1, p.s1 = p.s2, p.s2 = c - (p.c = c | 0); }, p.c = 1, p.s0 = u(" "), p.s1 = u(" "), p.s2 = u(" "), p.s0 -= u(i), p.s0 < 0 && (p.s0 += 1), p.s1 -= u(i), p.s1 < 0 && (p.s1 += 1), p.s2 -= u(i), p.s2 < 0 && (p.s2 += 1), u = null; } function n(i, p) { return p.c = i.c, p.s0 = i.s0, p.s1 = i.s1, p.s2 = i.s2, p; } function s(i, p) { - var u = new o(i), l = p && p.state, c = u.next; - return c.int32 = function() { + var u = new o(i), c = p && p.state, l = u.next; + return l.int32 = function() { return u.next() * 4294967296 | 0; - }, c.double = function() { - return c() + (c() * 2097152 | 0) * 11102230246251565e-32; - }, c.quick = c, l && (typeof l == "object" && n(l, u), c.state = function() { + }, l.double = function() { + return l() + (l() * 2097152 | 0) * 11102230246251565e-32; + }, l.quick = l, c && (typeof c == "object" && n(c, u), l.state = function() { return n(u, {}); - }), c; + }), l; } function a() { var i = 4022871197, p = function(u) { u = String(u); - for (var l = 0; l < u.length; l++) { - i += u.charCodeAt(l); - var c = 0.02519603282416938 * i; - i = c >>> 0, c -= i, c *= i, i = c >>> 0, c -= i, i += c * 4294967296; + for (var c = 0; c < u.length; c++) { + i += u.charCodeAt(c); + var l = 0.02519603282416938 * i; + i = l >>> 0, l -= i, l *= i, i = l >>> 0, l -= i, i += l * 4294967296; } return (i >>> 0) * 23283064365386963e-26; }; @@ -923,15 +923,15 @@ var W2 = jt((V2, tS) => { e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.alea = s; - })(V2, typeof tS == "object" && tS, typeof define == "function" && define); + })(r1, typeof Ww == "object" && Ww, typeof define == "function" && define); }); -var G2 = jt((U2, rS) => { - (function(r16, e, t10) { +var s1 = Kt((n1, Uw) => { + (function(r15, e, t10) { function o(a) { var i = this, p = ""; i.x = 0, i.y = 0, i.z = 0, i.w = 0, i.next = function() { - var l = i.x ^ i.x << 11; - return i.x = i.y, i.y = i.z, i.z = i.w, i.w ^= i.w >>> 19 ^ l ^ l >>> 8; + var c = i.x ^ i.x << 11; + return i.x = i.y, i.y = i.z, i.z = i.w, i.w ^= i.w >>> 19 ^ c ^ c >>> 8; }, a === (a | 0) ? i.x = a : p += a; for (var u = 0; u < p.length + 64; u++) i.x ^= p.charCodeAt(u) | 0, i.next(); @@ -940,30 +940,30 @@ var G2 = jt((U2, rS) => { return i.x = a.x, i.y = a.y, i.z = a.z, i.w = a.w, i; } function s(a, i) { - var p = new o(a), u = i && i.state, l = function() { + var p = new o(a), u = i && i.state, c = function() { return (p.next() >>> 0) / 4294967296; }; - return l.double = function() { + return c.double = function() { do - var c = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (c + m) / (1 << 21); + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); while (d === 0); return d; - }, l.int32 = p.next, l.quick = l, u && (typeof u == "object" && n(u, p), l.state = function() { + }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); - }), l; + }), c; } e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.xor128 = s; - })(U2, typeof rS == "object" && rS, typeof define == "function" && define); + })(n1, typeof Uw == "object" && Uw, typeof define == "function" && define); }); -var K2 = jt((H2, oS) => { - (function(r16, e, t10) { +var i1 = Kt((a1, Gw) => { + (function(r15, e, t10) { function o(a) { var i = this, p = ""; i.next = function() { - var l = i.x ^ i.x >>> 2; - return i.x = i.y, i.y = i.z, i.z = i.w, i.w = i.v, (i.d = i.d + 362437 | 0) + (i.v = i.v ^ i.v << 4 ^ (l ^ l << 1)) | 0; + var c = i.x ^ i.x >>> 2; + return i.x = i.y, i.y = i.z, i.z = i.w, i.w = i.v, (i.d = i.d + 362437 | 0) + (i.v = i.v ^ i.v << 4 ^ (c ^ c << 1)) | 0; }, i.x = 0, i.y = 0, i.z = 0, i.w = 0, i.v = 0, a === (a | 0) ? i.x = a : p += a; for (var u = 0; u < p.length + 64; u++) i.x ^= p.charCodeAt(u) | 0, u == p.length && (i.d = i.x << 10 ^ i.x >>> 4), i.next(); @@ -972,43 +972,43 @@ var K2 = jt((H2, oS) => { return i.x = a.x, i.y = a.y, i.z = a.z, i.w = a.w, i.v = a.v, i.d = a.d, i; } function s(a, i) { - var p = new o(a), u = i && i.state, l = function() { + var p = new o(a), u = i && i.state, c = function() { return (p.next() >>> 0) / 4294967296; }; - return l.double = function() { + return c.double = function() { do - var c = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (c + m) / (1 << 21); + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); while (d === 0); return d; - }, l.int32 = p.next, l.quick = l, u && (typeof u == "object" && n(u, p), l.state = function() { + }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); - }), l; + }), c; } e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.xorwow = s; - })(H2, typeof oS == "object" && oS, typeof define == "function" && define); + })(a1, typeof Gw == "object" && Gw, typeof define == "function" && define); }); -var j2 = jt((q2, nS) => { - (function(r16, e, t10) { +var p1 = Kt((u1, Hw) => { + (function(r15, e, t10) { function o(a) { var i = this; i.next = function() { - var u = i.x, l = i.i, c, m, d; - return c = u[l], c ^= c >>> 7, m = c ^ c << 24, c = u[l + 1 & 7], m ^= c ^ c >>> 10, c = u[l + 3 & 7], m ^= c ^ c >>> 3, c = u[l + 4 & 7], m ^= c ^ c << 7, c = u[l + 7 & 7], c = c ^ c << 13, m ^= c ^ c << 9, u[l] = m, i.i = l + 1 & 7, m; + var u = i.x, c = i.i, l, m, d; + return l = u[c], l ^= l >>> 7, m = l ^ l << 24, l = u[c + 1 & 7], m ^= l ^ l >>> 10, l = u[c + 3 & 7], m ^= l ^ l >>> 3, l = u[c + 4 & 7], m ^= l ^ l << 7, l = u[c + 7 & 7], l = l ^ l << 13, m ^= l ^ l << 9, u[c] = m, i.i = c + 1 & 7, m; }; - function p(u, l) { - var c, m, d = []; - if (l === (l | 0)) - m = d[0] = l; + function p(u, c) { + var l, m, d = []; + if (c === (c | 0)) + m = d[0] = c; else - for (l = "" + l, c = 0; c < l.length; ++c) - d[c & 7] = d[c & 7] << 15 ^ l.charCodeAt(c) + d[c + 1 & 7] << 13; + for (c = "" + c, l = 0; l < c.length; ++l) + d[l & 7] = d[l & 7] << 15 ^ c.charCodeAt(l) + d[l + 1 & 7] << 13; for (; d.length < 8; ) d.push(0); - for (c = 0; c < 8 && d[c] === 0; ++c) + for (l = 0; l < 8 && d[l] === 0; ++l) ; - for (c == 8 ? m = d[7] = -1 : m = d[c], u.x = d, u.i = 0, c = 256; c > 0; --c) + for (l == 8 ? m = d[7] = -1 : m = d[l], u.x = d, u.i = 0, l = 256; l > 0; --l) u.next(); } p(i, a); @@ -1018,37 +1018,37 @@ var j2 = jt((q2, nS) => { } function s(a, i) { a == null && (a = +/* @__PURE__ */ new Date()); - var p = new o(a), u = i && i.state, l = function() { + var p = new o(a), u = i && i.state, c = function() { return (p.next() >>> 0) / 4294967296; }; - return l.double = function() { + return c.double = function() { do - var c = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (c + m) / (1 << 21); + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); while (d === 0); return d; - }, l.int32 = p.next, l.quick = l, u && (u.x && n(u, p), l.state = function() { + }, c.int32 = p.next, c.quick = c, u && (u.x && n(u, p), c.state = function() { return n(p, {}); - }), l; + }), c; } e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.xorshift7 = s; - })(q2, typeof nS == "object" && nS, typeof define == "function" && define); + })(u1, typeof Hw == "object" && Hw, typeof define == "function" && define); }); -var Y2 = jt((X2, sS) => { - (function(r16, e, t10) { +var l1 = Kt((c1, Kw) => { + (function(r15, e, t10) { function o(a) { var i = this; i.next = function() { - var u = i.w, l = i.X, c = i.i, m, d; - return i.w = u = u + 1640531527 | 0, d = l[c + 34 & 127], m = l[c = c + 1 & 127], d ^= d << 13, m ^= m << 17, d ^= d >>> 15, m ^= m >>> 12, d = l[c] = d ^ m, i.i = c, d + (u ^ u >>> 16) | 0; + var u = i.w, c = i.X, l = i.i, m, d; + return i.w = u = u + 1640531527 | 0, d = c[l + 34 & 127], m = c[l = l + 1 & 127], d ^= d << 13, m ^= m << 17, d ^= d >>> 15, m ^= m >>> 12, d = c[l] = d ^ m, i.i = l, d + (u ^ u >>> 16) | 0; }; - function p(u, l) { - var c, m, d, f, h, g = [], x = 128; - for (l === (l | 0) ? (m = l, l = null) : (l = l + "\0", m = 0, x = Math.max(x, l.length)), d = 0, f = -32; f < x; ++f) - l && (m ^= l.charCodeAt((f + 32) % l.length)), f === 0 && (h = m), m ^= m << 10, m ^= m >>> 15, m ^= m << 4, m ^= m >>> 13, f >= 0 && (h = h + 1640531527 | 0, c = g[f & 127] ^= m + h, d = c == 0 ? d + 1 : 0); - for (d >= 128 && (g[(l && l.length || 0) & 127] = -1), d = 127, f = 4 * 128; f > 0; --f) - m = g[d + 34 & 127], c = g[d = d + 1 & 127], m ^= m << 13, c ^= c << 17, m ^= m >>> 15, c ^= c >>> 12, g[d] = m ^ c; + function p(u, c) { + var l, m, d, f, h, g = [], x = 128; + for (c === (c | 0) ? (m = c, c = null) : (c = c + "\0", m = 0, x = Math.max(x, c.length)), d = 0, f = -32; f < x; ++f) + c && (m ^= c.charCodeAt((f + 32) % c.length)), f === 0 && (h = m), m ^= m << 10, m ^= m >>> 15, m ^= m << 4, m ^= m >>> 13, f >= 0 && (h = h + 1640531527 | 0, l = g[f & 127] ^= m + h, d = l == 0 ? d + 1 : 0); + for (d >= 128 && (g[(c && c.length || 0) & 127] = -1), d = 127, f = 4 * 128; f > 0; --f) + m = g[d + 34 & 127], l = g[d = d + 1 & 127], m ^= m << 13, l ^= l << 17, m ^= m >>> 15, l ^= l >>> 12, g[d] = m ^ l; u.w = h, u.X = g, u.i = d; } p(i, a); @@ -1058,30 +1058,30 @@ var Y2 = jt((X2, sS) => { } function s(a, i) { a == null && (a = +/* @__PURE__ */ new Date()); - var p = new o(a), u = i && i.state, l = function() { + var p = new o(a), u = i && i.state, c = function() { return (p.next() >>> 0) / 4294967296; }; - return l.double = function() { + return c.double = function() { do - var c = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (c + m) / (1 << 21); + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); while (d === 0); return d; - }, l.int32 = p.next, l.quick = l, u && (u.X && n(u, p), l.state = function() { + }, c.int32 = p.next, c.quick = c, u && (u.X && n(u, p), c.state = function() { return n(p, {}); - }), l; + }), c; } e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.xor4096 = s; - })(X2, typeof sS == "object" && sS, typeof define == "function" && define); + })(c1, typeof Kw == "object" && Kw, typeof define == "function" && define); }); -var Z2 = jt((Q2, aS) => { - (function(r16, e, t10) { +var d1 = Kt((m1, qw) => { + (function(r15, e, t10) { function o(a) { var i = this, p = ""; i.next = function() { - var l = i.b, c = i.c, m = i.d, d = i.a; - return l = l << 25 ^ l >>> 7 ^ c, c = c - m | 0, m = m << 24 ^ m >>> 8 ^ d, d = d - l | 0, i.b = l = l << 20 ^ l >>> 12 ^ c, i.c = c = c - m | 0, i.d = m << 16 ^ c >>> 16 ^ d, i.a = d - l | 0; + var c = i.b, l = i.c, m = i.d, d = i.a; + return c = c << 25 ^ c >>> 7 ^ l, l = l - m | 0, m = m << 24 ^ m >>> 8 ^ d, d = d - c | 0, i.b = c = c << 20 ^ c >>> 12 ^ l, i.c = l = l - m | 0, i.d = m << 16 ^ l >>> 16 ^ d, i.a = d - c | 0; }, i.a = 0, i.b = 0, i.c = -1640531527, i.d = 1367130551, a === Math.floor(a) ? (i.a = a / 4294967296 | 0, i.b = a | 0) : p += a; for (var u = 0; u < p.length + 20; u++) i.b ^= p.charCodeAt(u) | 0, i.next(); @@ -1090,1094 +1090,1094 @@ var Z2 = jt((Q2, aS) => { return i.a = a.a, i.b = a.b, i.c = a.c, i.d = a.d, i; } function s(a, i) { - var p = new o(a), u = i && i.state, l = function() { + var p = new o(a), u = i && i.state, c = function() { return (p.next() >>> 0) / 4294967296; }; - return l.double = function() { + return c.double = function() { do - var c = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (c + m) / (1 << 21); + var l = p.next() >>> 11, m = (p.next() >>> 0) / 4294967296, d = (l + m) / (1 << 21); while (d === 0); return d; - }, l.int32 = p.next, l.quick = l, u && (typeof u == "object" && n(u, p), l.state = function() { + }, c.int32 = p.next, c.quick = c, u && (typeof u == "object" && n(u, p), c.state = function() { return n(p, {}); - }), l; + }), c; } e && e.exports ? e.exports = s : t10 && t10.amd ? t10(function() { return s; }) : this.tychei = s; - })(Q2, typeof aS == "object" && aS, typeof define == "function" && define); + })(m1, typeof qw == "object" && qw, typeof define == "function" && define); }); -var J2 = jt(() => { +var f1 = Kt(() => { }); -var tN = jt((eN, qd) => { - (function(r16, e, t10) { - var o = 256, n = 6, s = 52, a = "random", i = t10.pow(o, n), p = t10.pow(2, s), u = p * 2, l = o - 1, c; - function m(w, S, k) { - var T = []; +var g1 = Kt((h1, Md) => { + (function(r15, e, t10) { + var o = 256, n = 6, s = 52, a = "random", i = t10.pow(o, n), p = t10.pow(2, s), u = p * 2, c = o - 1, l; + function m(C, S, k) { + var _ = []; S = S == true ? { entropy: true } : S || {}; - var E = g(h(S.entropy ? [w, b(e)] : w == null ? x() : w, 3), T), R = new d(T), D = function() { - for (var F = R.g(n), O = i, M = 0; F < p; ) - F = (F + M) * o, O *= o, M = R.g(1); - for (; F >= u; ) - F /= 2, O /= 2, M >>>= 1; - return (F + M) / O; + var $ = g(h(S.entropy ? [C, b(e)] : C == null ? x() : C, 3), _), R = new d(_), D = function() { + for (var P = R.g(n), O = i, M = 0; P < p; ) + P = (P + M) * o, O *= o, M = R.g(1); + for (; P >= u; ) + P /= 2, O /= 2, M >>>= 1; + return (P + M) / O; }; return D.int32 = function() { return R.g(4) | 0; }, D.quick = function() { return R.g(4) / 4294967296; - }, D.double = D, g(b(R.S), e), (S.pass || k || function(F, O, M, L) { - return L && (L.S && f(L, R), F.state = function() { + }, D.double = D, g(b(R.S), e), (S.pass || k || function(P, O, M, L) { + return L && (L.S && f(L, R), P.state = function() { return f(R, {}); - }), M ? (t10[a] = F, O) : F; - })(D, E, "global" in S ? S.global : this == t10, S.state); - } - function d(w) { - var S, k = w.length, T = this, E = 0, R = T.i = T.j = 0, D = T.S = []; - for (k || (w = [k++]); E < o; ) - D[E] = E++; - for (E = 0; E < o; E++) - D[E] = D[R = l & R + w[E % k] + (S = D[E])], D[R] = S; - (T.g = function(F) { - for (var O, M = 0, L = T.i, B = T.j, z = T.S; F--; ) - O = z[L = l & L + 1], M = M * o + z[l & (z[L] = z[B = l & B + O]) + (z[B] = O)]; - return T.i = L, T.j = B, M; + }), M ? (t10[a] = P, O) : P; + })(D, $, "global" in S ? S.global : this == t10, S.state); + } + function d(C) { + var S, k = C.length, _ = this, $ = 0, R = _.i = _.j = 0, D = _.S = []; + for (k || (C = [k++]); $ < o; ) + D[$] = $++; + for ($ = 0; $ < o; $++) + D[$] = D[R = c & R + C[$ % k] + (S = D[$])], D[R] = S; + (_.g = function(P) { + for (var O, M = 0, L = _.i, B = _.j, z = _.S; P--; ) + O = z[L = c & L + 1], M = M * o + z[c & (z[L] = z[B = c & B + O]) + (z[B] = O)]; + return _.i = L, _.j = B, M; })(o); } - function f(w, S) { - return S.i = w.i, S.j = w.j, S.S = w.S.slice(), S; + function f(C, S) { + return S.i = C.i, S.j = C.j, S.S = C.S.slice(), S; } - function h(w, S) { - var k = [], T = typeof w, E; - if (S && T == "object") - for (E in w) + function h(C, S) { + var k = [], _ = typeof C, $; + if (S && _ == "object") + for ($ in C) try { - k.push(h(w[E], S - 1)); + k.push(h(C[$], S - 1)); } catch (R) { } - return k.length ? k : T == "string" ? w : w + "\0"; + return k.length ? k : _ == "string" ? C : C + "\0"; } - function g(w, S) { - for (var k = w + "", T, E = 0; E < k.length; ) - S[l & E] = l & (T ^= S[l & E] * 19) + k.charCodeAt(E++); + function g(C, S) { + for (var k = C + "", _, $ = 0; $ < k.length; ) + S[c & $] = c & (_ ^= S[c & $] * 19) + k.charCodeAt($++); return b(S); } function x() { try { - var w; - return c && (w = c.randomBytes) ? w = w(o) : (w = new Uint8Array(o), (r16.crypto || r16.msCrypto).getRandomValues(w)), b(w); - } catch (T) { - var S = r16.navigator, k = S && S.plugins; - return [+/* @__PURE__ */ new Date(), r16, k, r16.screen, b(e)]; + var C; + return l && (C = l.randomBytes) ? C = C(o) : (C = new Uint8Array(o), (r15.crypto || r15.msCrypto).getRandomValues(C)), b(C); + } catch (_) { + var S = r15.navigator, k = S && S.plugins; + return [+/* @__PURE__ */ new Date(), r15, k, r15.screen, b(e)]; } } - function b(w) { - return String.fromCharCode.apply(0, w); + function b(C) { + return String.fromCharCode.apply(0, C); } - if (g(t10.random(), e), typeof qd == "object" && qd.exports) { - qd.exports = m; + if (g(t10.random(), e), typeof Md == "object" && Md.exports) { + Md.exports = m; try { - c = J2(); - } catch (w) { + l = f1(); + } catch (C) { } } else typeof define == "function" && define.amd ? define(function() { return m; }) : t10["seed" + a] = m; - })(typeof self != "undefined" ? self : eN, [], Math); + })(typeof self != "undefined" ? self : h1, [], Math); }); -var iS = jt((FNe, rN) => { - var Q6 = W2(), Z6 = G2(), J6 = K2(), ej = j2(), tj = Y2(), rj = Z2(), Zu = tN(); - Zu.alea = Q6; - Zu.xor128 = Z6; - Zu.xorwow = J6; - Zu.xorshift7 = ej; - Zu.xor4096 = tj; - Zu.tychei = rj; - rN.exports = Zu; +var jw = Kt((s1e, x1) => { + var Dq = o1(), Aq = s1(), Fq = i1(), Pq = p1(), Oq = l1(), Mq = d1(), Ku = g1(); + Ku.alea = Dq; + Ku.xor128 = Aq; + Ku.xorwow = Fq; + Ku.xorshift7 = Pq; + Ku.xor4096 = Oq; + Ku.tychei = Mq; + x1.exports = Ku; }); -var ev = jt(() => { +var Vv = Kt(() => { }); -var tv = jt(() => { +var Wv = Kt(() => { }); -var Iz = jt(() => { +var LB = Kt(() => { }); -var vz = jt(() => { +var BB = Kt(() => { }); -var kz = jt(() => { +var zB = Kt(() => { }); -var Nz = jt((Jg, ov) => { - var rv = (() => { - var r16 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; - return typeof __filename != "undefined" && (r16 = r16 || __filename), function(e) { +var VB = Kt((Wg, Gv) => { + var Uv = (() => { + var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; + return typeof __filename != "undefined" && (r15 = r15 || __filename), function(e) { e = e || {}; function t10() { - return oe.buffer != Ke && Et(oe.buffer), mt; + return oe.buffer != He && Tt(oe.buffer), lt; } function o() { - return oe.buffer != Ke && Et(oe.buffer), ut; + return oe.buffer != He && Tt(oe.buffer), it; } function n() { - return oe.buffer != Ke && Et(oe.buffer), gt; + return oe.buffer != He && Tt(oe.buffer), ht; } function s() { - return oe.buffer != Ke && Et(oe.buffer), Ur; + return oe.buffer != He && Tt(oe.buffer), Lr; } function a() { - return oe.buffer != Ke && Et(oe.buffer), Bt; + return oe.buffer != He && Tt(oe.buffer), Mt; } function i() { - return oe.buffer != Ke && Et(oe.buffer), io; + return oe.buffer != He && Tt(oe.buffer), to; } function p() { - return oe.buffer != Ke && Et(oe.buffer), sr; + return oe.buffer != He && Tt(oe.buffer), rr; } - var u = typeof e != "undefined" ? e : {}, l, c; - u.ready = new Promise(function(P, V) { - l = P, c = V; + var u = typeof e != "undefined" ? e : {}, c, l; + u.ready = new Promise(function(F, V) { + c = F, l = V; }); var m; typeof process != "undefined" && process.listeners && (m = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }); - var d = Object.assign({}, u), f = [], h = "./this.program", g = (P, V) => { + var d = Object.assign({}, u), f = [], h = "./this.program", g = (F, V) => { throw V; - }, x = typeof window == "object", b = typeof importScripts == "function", w = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", S = u.ENVIRONMENT_IS_PTHREAD || false, k = ""; - function T(P) { - return u.locateFile ? u.locateFile(P, k) : k + P; + }, x = typeof window == "object", b = typeof importScripts == "function", C = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", S = u.ENVIRONMENT_IS_PTHREAD || false, k = ""; + function _(F) { + return u.locateFile ? u.locateFile(F, k) : k + F; } - var E, R, D, F; - function O(P) { - if (P instanceof Du) + var $, R, D, P; + function O(F) { + if (F instanceof ku) return; - j("exiting due to exception: " + P); - } - if (w) { - var M = ev(), L = tv(); - b ? k = L.dirname(k) + "/" : k = __dirname + "/", E = (V, pe) => (V = zp(V) ? new URL(V) : L.normalize(V), M.readFileSync(V, pe ? void 0 : "utf8")), D = (V) => { - var pe = E(V, true); - return pe.buffer || (pe = new Uint8Array(pe)), pe; - }, R = (V, pe, $e) => { - V = zp(V) ? new URL(V) : L.normalize(V), M.readFile(V, function(Be, Le) { - Be ? $e(Be) : pe(Le.buffer); + j("exiting due to exception: " + F); + } + if (C) { + var M = Vv(), L = Wv(); + b ? k = L.dirname(k) + "/" : k = __dirname + "/", $ = (V, ue) => (V = Fp(V) ? new URL(V) : L.normalize(V), M.readFileSync(V, ue ? void 0 : "utf8")), D = (V) => { + var ue = $(V, true); + return ue.buffer || (ue = new Uint8Array(ue)), ue; + }, R = (V, ue, $e) => { + V = Fp(V) ? new URL(V) : L.normalize(V), M.readFile(V, function(Be, Le) { + Be ? $e(Be) : ue(Le.buffer); }); }, process.argv.length > 1 && (h = process.argv[1].replace(/\\/g, "/")), f = process.argv.slice(2), process.on("uncaughtException", function(V) { - if (!(V instanceof Du)) + if (!(V instanceof ku)) throw V; }), process.on("unhandledRejection", function(V) { throw V; - }), g = (V, pe) => { - if (cn()) - throw process.exitCode = V, pe; - O(pe), process.exit(V); + }), g = (V, ue) => { + if (Lo()) + throw process.exitCode = V, ue; + O(ue), process.exit(V); }, u.inspect = function() { return "[Emscripten Module object]"; }; - let P; + let F; try { - P = Iz(); + F = LB(); } catch (V) { throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'), V; } - global.Worker = P.Worker; + global.Worker = F.Worker; } else - (x || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r16 != "undefined" && r16 && (k = r16), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", w || (E = (P) => { + (x || b) && (b ? k = self.location.href : typeof document != "undefined" && document.currentScript && (k = document.currentScript.src), typeof r15 != "undefined" && r15 && (k = r15), k.indexOf("blob:") !== 0 ? k = k.substr(0, k.replace(/[?#].*/, "").lastIndexOf("/") + 1) : k = "", C || ($ = (F) => { var V = new XMLHttpRequest(); - return V.open("GET", P, false), V.send(null), V.responseText; - }, b && (D = (P) => { + return V.open("GET", F, false), V.send(null), V.responseText; + }, b && (D = (F) => { var V = new XMLHttpRequest(); - return V.open("GET", P, false), V.responseType = "arraybuffer", V.send(null), new Uint8Array(V.response); - }), R = (P, V, pe) => { + return V.open("GET", F, false), V.responseType = "arraybuffer", V.send(null), new Uint8Array(V.response); + }), R = (F, V, ue) => { var $e = new XMLHttpRequest(); - $e.open("GET", P, true), $e.responseType = "arraybuffer", $e.onload = () => { + $e.open("GET", F, true), $e.responseType = "arraybuffer", $e.onload = () => { if ($e.status == 200 || $e.status == 0 && $e.response) { V($e.response); return; } - pe(); - }, $e.onerror = pe, $e.send(null); - }), F = (P) => document.title = P); - w && typeof performance == "undefined" && (global.performance = vz().performance); + ue(); + }, $e.onerror = ue, $e.send(null); + }), P = (F) => document.title = F); + C && typeof performance == "undefined" && (global.performance = BB().performance); var B = console.log.bind(console), z = console.warn.bind(console); - w && (B = (P) => M.writeSync(1, P + ` -`), z = (P) => M.writeSync(2, P + ` + C && (B = (F) => M.writeSync(1, F + ` +`), z = (F) => M.writeSync(2, F + ` `)); var U = u.print || B, j = u.printErr || z; Object.assign(u, d), d = null, u.arguments && (f = u.arguments), u.thisProgram && (h = u.thisProgram), u.quit && (g = u.quit); var q = 4, Y = Atomics.load, J = Atomics.store, re = Atomics.compareExchange, ne; u.wasmBinary && (ne = u.wasmBinary); var ee = u.noExitRuntime || true; - typeof WebAssembly != "object" && Ru("no native wasm support detected"); - var oe, ue, me = false, be; - function _e(P, V) { - P || Ru(V); + typeof WebAssembly != "object" && vu("no native wasm support detected"); + var oe, ie, le = false, be; + function _e(F, V) { + F || vu(V); } var ve = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; - function Fe(P, V, pe) { + function Fe(F, V, ue) { V >>>= 0; - for (var $e = V + pe, Be = V; P[Be] && !(Be >= $e); ) + for (var $e = V + ue, Be = V; F[Be] && !(Be >= $e); ) ++Be; - if (Be - V > 16 && P.buffer && ve) - return ve.decode(P.buffer instanceof SharedArrayBuffer ? P.slice(V, Be) : P.subarray(V, Be)); + if (Be - V > 16 && F.buffer && ve) + return ve.decode(F.buffer instanceof SharedArrayBuffer ? F.slice(V, Be) : F.subarray(V, Be)); for (var Le = ""; V < Be; ) { - var ge = P[V++]; + var ge = F[V++]; if (!(ge & 128)) { Le += String.fromCharCode(ge); continue; } - var Ne = P[V++] & 63; + var Ne = F[V++] & 63; if ((ge & 224) == 192) { Le += String.fromCharCode((ge & 31) << 6 | Ne); continue; } - var Ot = P[V++] & 63; - if ((ge & 240) == 224 ? ge = (ge & 15) << 12 | Ne << 6 | Ot : ge = (ge & 7) << 18 | Ne << 12 | Ot << 6 | P[V++] & 63, ge < 65536) + var Ft = F[V++] & 63; + if ((ge & 240) == 224 ? ge = (ge & 15) << 12 | Ne << 6 | Ft : ge = (ge & 7) << 18 | Ne << 12 | Ft << 6 | F[V++] & 63, ge < 65536) Le += String.fromCharCode(ge); else { - var co = ge - 65536; - Le += String.fromCharCode(55296 | co >> 10, 56320 | co & 1023); + var so = ge - 65536; + Le += String.fromCharCode(55296 | so >> 10, 56320 | so & 1023); } } return Le; } - function Pe(P, V) { - return P >>>= 0, P ? Fe(o(), P, V) : ""; + function Pe(F, V) { + return F >>>= 0, F ? Fe(o(), F, V) : ""; } - function at(P, V, pe, $e) { - if (pe >>>= 0, !($e > 0)) + function st(F, V, ue, $e) { + if (ue >>>= 0, !($e > 0)) return 0; - for (var Be = pe, Le = pe + $e - 1, ge = 0; ge < P.length; ++ge) { - var Ne = P.charCodeAt(ge); + for (var Be = ue, Le = ue + $e - 1, ge = 0; ge < F.length; ++ge) { + var Ne = F.charCodeAt(ge); if (Ne >= 55296 && Ne <= 57343) { - var Ot = P.charCodeAt(++ge); - Ne = 65536 + ((Ne & 1023) << 10) | Ot & 1023; + var Ft = F.charCodeAt(++ge); + Ne = 65536 + ((Ne & 1023) << 10) | Ft & 1023; } if (Ne <= 127) { - if (pe >= Le) + if (ue >= Le) break; - V[pe++ >>> 0] = Ne; + V[ue++ >>> 0] = Ne; } else if (Ne <= 2047) { - if (pe + 1 >= Le) + if (ue + 1 >= Le) break; - V[pe++ >>> 0] = 192 | Ne >> 6, V[pe++ >>> 0] = 128 | Ne & 63; + V[ue++ >>> 0] = 192 | Ne >> 6, V[ue++ >>> 0] = 128 | Ne & 63; } else if (Ne <= 65535) { - if (pe + 2 >= Le) + if (ue + 2 >= Le) break; - V[pe++ >>> 0] = 224 | Ne >> 12, V[pe++ >>> 0] = 128 | Ne >> 6 & 63, V[pe++ >>> 0] = 128 | Ne & 63; + V[ue++ >>> 0] = 224 | Ne >> 12, V[ue++ >>> 0] = 128 | Ne >> 6 & 63, V[ue++ >>> 0] = 128 | Ne & 63; } else { - if (pe + 3 >= Le) + if (ue + 3 >= Le) break; - V[pe++ >>> 0] = 240 | Ne >> 18, V[pe++ >>> 0] = 128 | Ne >> 12 & 63, V[pe++ >>> 0] = 128 | Ne >> 6 & 63, V[pe++ >>> 0] = 128 | Ne & 63; + V[ue++ >>> 0] = 240 | Ne >> 18, V[ue++ >>> 0] = 128 | Ne >> 12 & 63, V[ue++ >>> 0] = 128 | Ne >> 6 & 63, V[ue++ >>> 0] = 128 | Ne & 63; } } - return V[pe >>> 0] = 0, pe - Be; + return V[ue >>> 0] = 0, ue - Be; } - function ct(P, V, pe) { - return at(P, o(), V, pe); + function ct(F, V, ue) { + return st(F, o(), V, ue); } - var Ke, mt, ut, gt, xt, Ur, Bt, io, sr; - S && (Ke = u.buffer); - function Et(P) { - Ke = P, u.HEAP8 = mt = new Int8Array(P), u.HEAP16 = gt = new Int16Array(P), u.HEAP32 = Ur = new Int32Array(P), u.HEAPU8 = ut = new Uint8Array(P), u.HEAPU16 = xt = new Uint16Array(P), u.HEAPU32 = Bt = new Uint32Array(P), u.HEAPF32 = io = new Float32Array(P), u.HEAPF64 = sr = new Float64Array(P); + var He, lt, it, ht, gt, Lr, Mt, to, rr; + S && (He = u.buffer); + function Tt(F) { + He = F, u.HEAP8 = lt = new Int8Array(F), u.HEAP16 = ht = new Int16Array(F), u.HEAP32 = Lr = new Int32Array(F), u.HEAPU8 = it = new Uint8Array(F), u.HEAPU16 = gt = new Uint16Array(F), u.HEAPU32 = Mt = new Uint32Array(F), u.HEAPF32 = to = new Float32Array(F), u.HEAPF64 = rr = new Float64Array(F); } - var ar = u.INITIAL_MEMORY || 16777216; + var or = u.INITIAL_MEMORY || 16777216; if (S) - oe = u.wasmMemory, Ke = u.buffer; + oe = u.wasmMemory, He = u.buffer; else if (u.wasmMemory) oe = u.wasmMemory; - else if (oe = new WebAssembly.Memory({ initial: ar / 65536, maximum: 65536, shared: true }), !(oe.buffer instanceof SharedArrayBuffer)) - throw j("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"), w && j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); - oe && (Ke = oe.buffer), ar = Ke.byteLength, Et(Ke); - var ir, uo = [], po = [], xr = [], ja = false; - function cn() { + else if (oe = new WebAssembly.Memory({ initial: or / 65536, maximum: 65536, shared: true }), !(oe.buffer instanceof SharedArrayBuffer)) + throw j("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"), C && j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"), Error("bad memory"); + oe && (He = oe.buffer), or = He.byteLength, Tt(He); + var nr, ro = [], oo = [], fr = [], Va = false; + function Lo() { return ee; } - function ta() { + function Ks() { if (u.preRun) for (typeof u.preRun == "function" && (u.preRun = [u.preRun]); u.preRun.length; ) - lc(u.preRun.shift()); - dc(uo); + ol(u.preRun.shift()); + al(ro); } - function Zt() { - ja = true, !S && dc(po); + function Xt() { + Va = true, !S && al(oo); } - function Xa() { + function Wa() { if (!S) { if (u.postRun) for (typeof u.postRun == "function" && (u.postRun = [u.postRun]); u.postRun.length; ) - Zv(u.postRun.shift()); - dc(xr); + d0(u.postRun.shift()); + al(fr); } } - function lc(P) { - uo.unshift(P); + function ol(F) { + ro.unshift(F); } - function cc(P) { - po.unshift(P); + function nl(F) { + oo.unshift(F); } - function Zv(P) { - xr.unshift(P); + function d0(F) { + fr.unshift(F); } - var Pi = 0, Bp = null, Ya = null; - function Ay(P) { - Pi++, u.monitorRunDependencies && u.monitorRunDependencies(Pi); + var ki = 0, Ap = null, Ua = null; + function Cy(F) { + ki++, u.monitorRunDependencies && u.monitorRunDependencies(ki); } - function Rm(P) { - if (Pi--, u.monitorRunDependencies && u.monitorRunDependencies(Pi), Pi == 0 && (Bp !== null && (clearInterval(Bp), Bp = null), Ya)) { - var V = Ya; - Ya = null, V(); + function wm(F) { + if (ki--, u.monitorRunDependencies && u.monitorRunDependencies(ki), ki == 0 && (Ap !== null && (clearInterval(Ap), Ap = null), Ua)) { + var V = Ua; + Ua = null, V(); } } - function Ru(P) { - u.onAbort && u.onAbort(P), P = "Aborted(" + P + ")", j(P), me = true, be = 1, P += ". Build with -sASSERTIONS for more info."; - var V = new WebAssembly.RuntimeError(P); - throw c(V), V; + function vu(F) { + u.onAbort && u.onAbort(F), F = "Aborted(" + F + ")", j(F), le = true, be = 1, F += ". Build with -sASSERTIONS for more info."; + var V = new WebAssembly.RuntimeError(F); + throw l(V), V; } - var Fy = "data:application/octet-stream;base64,"; - function Dm(P) { - return P.startsWith(Fy); + var wy = "data:application/octet-stream;base64,"; + function Sm(F) { + return F.startsWith(wy); } - function zp(P) { - return P.startsWith("file://"); + function Fp(F) { + return F.startsWith("file://"); } - var yr; - yr = "tfjs-backend-wasm-threaded-simd.wasm", Dm(yr) || (yr = T(yr)); - function Am(P) { + var hr; + hr = "tfjs-backend-wasm-threaded-simd.wasm", Sm(hr) || (hr = _(hr)); + function Im(F) { try { - if (P == yr && ne) + if (F == hr && ne) return new Uint8Array(ne); if (D) - return D(P); + return D(F); throw "both async and sync fetching of the wasm failed"; } catch (V) { - Ru(V); + vu(V); } } - function Py() { + function Sy() { if (!ne && (x || b)) { - if (typeof fetch == "function" && !zp(yr)) - return fetch(yr, { credentials: "same-origin" }).then(function(P) { - if (!P.ok) - throw "failed to load wasm binary file at '" + yr + "'"; - return P.arrayBuffer(); + if (typeof fetch == "function" && !Fp(hr)) + return fetch(hr, { credentials: "same-origin" }).then(function(F) { + if (!F.ok) + throw "failed to load wasm binary file at '" + hr + "'"; + return F.arrayBuffer(); }).catch(function() { - return Am(yr); + return Im(hr); }); if (R) - return new Promise(function(P, V) { - R(yr, function(pe) { - P(new Uint8Array(pe)); + return new Promise(function(F, V) { + R(hr, function(ue) { + F(new Uint8Array(ue)); }, V); }); } return Promise.resolve().then(function() { - return Am(yr); + return Im(hr); }); } - function Oy() { - var P = { env: Km, wasi_snapshot_preview1: Km }; + function Iy() { + var F = { env: Om, wasi_snapshot_preview1: Om }; function V(ge, Ne) { - var Ot = ge.exports; - if (u.asm = Ot, Hy(u.asm._emscripten_tls_init), ir = u.asm.__indirect_function_table, cc(u.asm.__wasm_call_ctors), ue = Ne, !S) { - var co = Me.unusedWorkers.length; - Me.unusedWorkers.forEach(function(Za) { - Me.loadWasmModuleToWorker(Za, function() { - --co || Rm("wasm-instantiate"); + var Ft = ge.exports; + if (u.asm = Ft, Dy(u.asm._emscripten_tls_init), nr = u.asm.__indirect_function_table, nl(u.asm.__wasm_call_ctors), ie = Ne, !S) { + var so = Me.unusedWorkers.length; + Me.unusedWorkers.forEach(function(Ha) { + Me.loadWasmModuleToWorker(Ha, function() { + --so || wm("wasm-instantiate"); }); }); } } - S || Ay("wasm-instantiate"); - function pe(ge) { + S || Cy("wasm-instantiate"); + function ue(ge) { V(ge.instance, ge.module); } function $e(ge) { - return Py().then(function(Ne) { - return WebAssembly.instantiate(Ne, P); + return Sy().then(function(Ne) { + return WebAssembly.instantiate(Ne, F); }).then(function(Ne) { return Ne; }).then(ge, function(Ne) { - j("failed to asynchronously prepare wasm: " + Ne), Ru(Ne); + j("failed to asynchronously prepare wasm: " + Ne), vu(Ne); }); } function Be() { - return !ne && typeof WebAssembly.instantiateStreaming == "function" && !Dm(yr) && !zp(yr) && !w && typeof fetch == "function" ? fetch(yr, { credentials: "same-origin" }).then(function(ge) { - var Ne = WebAssembly.instantiateStreaming(ge, P); - return Ne.then(pe, function(Ot) { - return j("wasm streaming compile failed: " + Ot), j("falling back to ArrayBuffer instantiation"), $e(pe); + return !ne && typeof WebAssembly.instantiateStreaming == "function" && !Sm(hr) && !Fp(hr) && !C && typeof fetch == "function" ? fetch(hr, { credentials: "same-origin" }).then(function(ge) { + var Ne = WebAssembly.instantiateStreaming(ge, F); + return Ne.then(ue, function(Ft) { + return j("wasm streaming compile failed: " + Ft), j("falling back to ArrayBuffer instantiation"), $e(ue); }); - }) : $e(pe); + }) : $e(ue); } if (u.instantiateWasm) try { - var Le = u.instantiateWasm(P, V); + var Le = u.instantiateWasm(F, V); return Le; } catch (ge) { - j("Module.instantiateWasm callback failed with error: " + ge), c(ge); + j("Module.instantiateWasm callback failed with error: " + ge), l(ge); } - return Be().catch(c), {}; + return Be().catch(l), {}; } - var Jv, ek, Fm = {}; - function Du(P) { - this.name = "ExitStatus", this.message = "Program terminated with exit(" + P + ")", this.status = P; + var f0, h0, vm = {}; + function ku(F) { + this.name = "ExitStatus", this.message = "Program terminated with exit(" + F + ")", this.status = F; } - function My(P) { - var V = Me.pthreads[P]; - delete Me.pthreads[P], V.terminate(), iw(P), Me.runningWorkers.splice(Me.runningWorkers.indexOf(V), 1), V.pthread_ptr = 0; + function vy(F) { + var V = Me.pthreads[F]; + delete Me.pthreads[F], V.terminate(), jC(F), Me.runningWorkers.splice(Me.runningWorkers.indexOf(V), 1), V.pthread_ptr = 0; } - function Ly(P) { - var V = Me.pthreads[P]; + function ky(F) { + var V = Me.pthreads[F]; V.postMessage({ cmd: "cancel" }); } - function mc(P) { - var V = Me.pthreads[P]; + function sl(F) { + var V = Me.pthreads[F]; _e(V), Me.returnWorkerToPool(V); } - function By(P) { + function Ny(F) { var V = Me.getNewWorker(); if (!V) return 6; - Me.runningWorkers.push(V), Me.pthreads[P.pthread_ptr] = V, V.pthread_ptr = P.pthread_ptr; - var pe = { cmd: "run", start_routine: P.startRoutine, arg: P.arg, pthread_ptr: P.pthread_ptr }; + Me.runningWorkers.push(V), Me.pthreads[F.pthread_ptr] = V, V.pthread_ptr = F.pthread_ptr; + var ue = { cmd: "run", start_routine: F.startRoutine, arg: F.arg, pthread_ptr: F.pthread_ptr }; return V.runPthread = () => { - w && V.ref(), V.postMessage(pe, P.transferList), delete V.runPthread; + C && V.ref(), V.postMessage(ue, F.transferList), delete V.runPthread; }, V.loaded && V.runPthread(), 0; } - var Pm = { varargs: void 0, get: function() { - Pm.varargs += 4; - var P = s()[Pm.varargs - 4 >>> 2]; - return P; - }, getStr: function(P) { - var V = Pe(P); + var km = { varargs: void 0, get: function() { + km.varargs += 4; + var F = s()[km.varargs - 4 >>> 2]; + return F; + }, getStr: function(F) { + var V = Pe(F); return V; } }; - function Om(P) { + function Nm(F) { if (S) - return Oi(1, 1, P); - be = P, cn() || (Me.terminateAllThreads(), u.onExit && u.onExit(P), me = true), g(P, new Du(P)); + return Ni(1, 1, F); + be = F, Lo() || (Me.terminateAllThreads(), u.onExit && u.onExit(F), le = true), g(F, new ku(F)); } - function zy(P, V) { - if (be = P, !V && S) - throw Lm(P), "unwind"; - Om(P); + function Ty(F, V) { + if (be = F, !V && S) + throw _m(F), "unwind"; + Nm(F); } - var Mm = zy; - function Vy(P) { - if (P instanceof Du || P == "unwind") + var Tm = Ty; + function _y(F) { + if (F instanceof ku || F == "unwind") return be; - g(1, P); + g(1, F); } var Me = { unusedWorkers: [], runningWorkers: [], tlsInitFunctions: [], pthreads: {}, init: function() { S ? Me.initWorker() : Me.initMainThread(); }, initMainThread: function() { - for (var P = 8; P--; ) + for (var F = 8; F--; ) Me.allocateUnusedWorker(); }, initWorker: function() { ee = false; - }, setExitStatus: function(P) { - be = P; + }, setExitStatus: function(F) { + be = F; }, terminateAllThreads: function() { - for (var P of Object.values(Me.pthreads)) - Me.returnWorkerToPool(P); - for (var P of Me.unusedWorkers) - P.terminate(); + for (var F of Object.values(Me.pthreads)) + Me.returnWorkerToPool(F); + for (var F of Me.unusedWorkers) + F.terminate(); Me.unusedWorkers = []; - }, returnWorkerToPool: function(P) { - var V = P.pthread_ptr; - delete Me.pthreads[V], Me.unusedWorkers.push(P), Me.runningWorkers.splice(Me.runningWorkers.indexOf(P), 1), P.pthread_ptr = 0, w && P.unref(), iw(V); - }, receiveObjectTransfer: function(P) { + }, returnWorkerToPool: function(F) { + var V = F.pthread_ptr; + delete Me.pthreads[V], Me.unusedWorkers.push(F), Me.runningWorkers.splice(Me.runningWorkers.indexOf(F), 1), F.pthread_ptr = 0, C && F.unref(), jC(V); + }, receiveObjectTransfer: function(F) { }, threadInitTLS: function() { - Me.tlsInitFunctions.forEach((P) => P()); - }, loadWasmModuleToWorker: function(P, V) { - P.onmessage = (Le) => { + Me.tlsInitFunctions.forEach((F) => F()); + }, loadWasmModuleToWorker: function(F, V) { + F.onmessage = (Le) => { var ge = Le.data, Ne = ge.cmd; - if (P.pthread_ptr && (Me.currentProxiedOperationCallerThread = P.pthread_ptr), ge.targetThread && ge.targetThread != Zm()) { - var Ot = Me.pthreads[ge.targetThread]; - Ot ? Ot.postMessage(ge, ge.transferList) : j('Internal error! Worker sent a message "' + Ne + '" to target pthread ' + ge.targetThread + ", but that thread no longer exists!"), Me.currentProxiedOperationCallerThread = void 0; + if (F.pthread_ptr && (Me.currentProxiedOperationCallerThread = F.pthread_ptr), ge.targetThread && ge.targetThread != Wm()) { + var Ft = Me.pthreads[ge.targetThread]; + Ft ? Ft.postMessage(ge, ge.transferList) : j('Internal error! Worker sent a message "' + Ne + '" to target pthread ' + ge.targetThread + ", but that thread no longer exists!"), Me.currentProxiedOperationCallerThread = void 0; return; } - Ne === "processProxyingQueue" ? fc(ge.queue) : Ne === "spawnThread" ? By(ge) : Ne === "cleanupThread" ? mc(ge.thread) : Ne === "killThread" ? My(ge.thread) : Ne === "cancelThread" ? Ly(ge.thread) : Ne === "loaded" ? (P.loaded = true, w && P.unref(), V && V(P), P.runPthread && P.runPthread()) : Ne === "print" ? U("Thread " + ge.threadId + ": " + ge.text) : Ne === "printErr" ? j("Thread " + ge.threadId + ": " + ge.text) : Ne === "alert" ? alert("Thread " + ge.threadId + ": " + ge.text) : ge.target === "setimmediate" ? P.postMessage(ge) : Ne === "callHandler" ? u[ge.handler](...ge.args) : Ne && j("worker sent an unknown command " + Ne), Me.currentProxiedOperationCallerThread = void 0; - }, P.onerror = (Le) => { + Ne === "processProxyingQueue" ? il(ge.queue) : Ne === "spawnThread" ? Ny(ge) : Ne === "cleanupThread" ? sl(ge.thread) : Ne === "killThread" ? vy(ge.thread) : Ne === "cancelThread" ? ky(ge.thread) : Ne === "loaded" ? (F.loaded = true, C && F.unref(), V && V(F), F.runPthread && F.runPthread()) : Ne === "print" ? U("Thread " + ge.threadId + ": " + ge.text) : Ne === "printErr" ? j("Thread " + ge.threadId + ": " + ge.text) : Ne === "alert" ? alert("Thread " + ge.threadId + ": " + ge.text) : ge.target === "setimmediate" ? F.postMessage(ge) : Ne === "callHandler" ? u[ge.handler](...ge.args) : Ne && j("worker sent an unknown command " + Ne), Me.currentProxiedOperationCallerThread = void 0; + }, F.onerror = (Le) => { var ge = "worker sent an error!"; throw j(ge + " " + Le.filename + ":" + Le.lineno + ": " + Le.message), Le; - }, w && (P.on("message", function(Le) { - P.onmessage({ data: Le }); - }), P.on("error", function(Le) { - P.onerror(Le); - }), P.on("detachedExit", function() { + }, C && (F.on("message", function(Le) { + F.onmessage({ data: Le }); + }), F.on("error", function(Le) { + F.onerror(Le); + }), F.on("detachedExit", function() { })); - var pe = [], $e = ["onExit", "onAbort", "print", "printErr"]; + var ue = [], $e = ["onExit", "onAbort", "print", "printErr"]; for (var Be of $e) - u.hasOwnProperty(Be) && pe.push(Be); - P.postMessage({ cmd: "load", handlers: pe, urlOrBlob: u.mainScriptUrlOrBlob || r16, wasmMemory: oe, wasmModule: ue }); + u.hasOwnProperty(Be) && ue.push(Be); + F.postMessage({ cmd: "load", handlers: ue, urlOrBlob: u.mainScriptUrlOrBlob || r15, wasmMemory: oe, wasmModule: ie }); }, allocateUnusedWorker: function() { - var P, V = T("tfjs-backend-wasm-threaded-simd.worker.js"); - P = new Worker(V), Me.unusedWorkers.push(P); + var F, V = _("tfjs-backend-wasm-threaded-simd.worker.js"); + F = new Worker(V), Me.unusedWorkers.push(F); }, getNewWorker: function() { return Me.unusedWorkers.length == 0 && (Me.allocateUnusedWorker(), Me.loadWasmModuleToWorker(Me.unusedWorkers[0])), Me.unusedWorkers.pop(); } }; u.PThread = Me; - function dc(P) { - for (; P.length > 0; ) - P.shift()(u); + function al(F) { + for (; F.length > 0; ) + F.shift()(u); } - function Wy() { - var P = Zm(), V = s()[P + 52 >>> 2], pe = s()[P + 56 >>> 2], $e = V - pe; - ak(V, $e), Jm(V); + function Ey() { + var F = Wm(), V = s()[F + 52 >>> 2], ue = s()[F + 56 >>> 2], $e = V - ue; + w0(V, $e), Um(V); } - u.establishStackSpace = Wy; - function Lm(P) { + u.establishStackSpace = Ey; + function _m(F) { if (S) - return Oi(2, 0, P); + return Ni(2, 0, F); try { - Mm(P); + Tm(F); } catch (V) { - Vy(V); + _y(V); } } - var Vp = []; - function Uy(P) { - var V = Vp[P]; - return V || (P >= Vp.length && (Vp.length = P + 1), Vp[P] = V = ir.get(P)), V; + var Pp = []; + function $y(F) { + var V = Pp[F]; + return V || (F >= Pp.length && (Pp.length = F + 1), Pp[F] = V = nr.get(F)), V; } - function Gy(P, V) { - var pe = Uy(P)(V); - cn() ? Me.setExitStatus(pe) : sk(pe); + function Ry(F, V) { + var ue = $y(F)(V); + Lo() ? Me.setExitStatus(ue) : C0(ue); } - u.invokeEntryPoint = Gy; - function Hy(P) { - Me.tlsInitFunctions.push(P); + u.invokeEntryPoint = Ry; + function Dy(F) { + Me.tlsInitFunctions.push(F); } - function Ky(P) { - rk(P, !b, 1, !x), Me.threadInitTLS(); + function Ay(F) { + x0(F, !b, 1, !x), Me.threadInitTLS(); } - function qy(P) { - S ? postMessage({ cmd: "cleanupThread", thread: P }) : mc(P); + function Fy(F) { + S ? postMessage({ cmd: "cleanupThread", thread: F }) : sl(F); } - function Bm(P, V, pe, $e) { - return S ? Oi(3, 1, P, V, pe, $e) : zm(P, V, pe, $e); + function Em(F, V, ue, $e) { + return S ? Ni(3, 1, F, V, ue, $e) : $m(F, V, ue, $e); } - function zm(P, V, pe, $e) { + function $m(F, V, ue, $e) { if (typeof SharedArrayBuffer == "undefined") return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"), 6; var Be = [], Le = 0; if (S && (Be.length === 0 || Le)) - return Bm(P, V, pe, $e); + return Em(F, V, ue, $e); if (Le) return Le; - var ge = { startRoutine: pe, pthread_ptr: P, arg: $e, transferList: Be }; - return S ? (ge.cmd = "spawnThread", postMessage(ge, Be), 0) : By(ge); + var ge = { startRoutine: ue, pthread_ptr: F, arg: $e, transferList: Be }; + return S ? (ge.cmd = "spawnThread", postMessage(ge, Be), 0) : Ny(ge); } - function jy() { + function Py() { return 65536; } - var Xy = true; - function Yy() { - return Xy; + var Oy = true; + function My() { + return Oy; } - function fc(P) { - Atomics.store(s(), P >> 2, 1), Zm() && nk(P), Atomics.compareExchange(s(), P >> 2, 1, 0); + function il(F) { + Atomics.store(s(), F >> 2, 1), Wm() && b0(F), Atomics.compareExchange(s(), F >> 2, 1, 0); } - u.executeNotifiedProxyingQueue = fc; - function Qy(P, V, pe, $e) { - if (P == V) - setTimeout(() => fc($e)); + u.executeNotifiedProxyingQueue = il; + function Ly(F, V, ue, $e) { + if (F == V) + setTimeout(() => il($e)); else if (S) - postMessage({ targetThread: P, cmd: "processProxyingQueue", queue: $e }); + postMessage({ targetThread: F, cmd: "processProxyingQueue", queue: $e }); else { - var Be = Me.pthreads[P]; + var Be = Me.pthreads[F]; if (!Be) return; Be.postMessage({ cmd: "processProxyingQueue", queue: $e }); } return 1; } - function Zy(P, V, pe) { + function By(F, V, ue) { return -1; } - function Jy() { - Ru(""); + function zy() { + vu(""); } - function Au(P) { - Au.shown || (Au.shown = {}), Au.shown[P] || (Au.shown[P] = 1, w && (P = "warning: " + P), j(P)); + function Nu(F) { + Nu.shown || (Nu.shown = {}), Nu.shown[F] || (Nu.shown[F] = 1, C && (F = "warning: " + F), j(F)); } - function eb() { - w || b || Au("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); + function Vy() { + C || b || Nu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread"); } - function tb() { + function Wy() { return Date.now(); } - function Vm() { + function Rm() { return 4294901760; } - function rb() { - return Vm(); - } - var hc; - w ? hc = () => { - var P = process.hrtime(); - return P[0] * 1e3 + P[1] / 1e6; - } : hc = () => performance.timeOrigin + performance.now(); - function ob(P, V, pe) { - o().copyWithin(P >>> 0, V >>> 0, V + pe >>> 0); - } - function nb() { - return w ? kz().cpus().length : navigator.hardwareConcurrency; - } - function sb(P) { - var V = uw(), pe = P(); - return Jm(V), pe; - } - function Oi(P, V) { - var pe = arguments.length - 2, $e = arguments; - return sb(() => { - for (var Be = pe, Le = ed(Be * 8), ge = Le >> 3, Ne = 0; Ne < pe; Ne++) { - var Ot = $e[2 + Ne]; - p()[ge + Ne >>> 0] = Ot; + function Uy() { + return Rm(); + } + var ul; + C ? ul = () => { + var F = process.hrtime(); + return F[0] * 1e3 + F[1] / 1e6; + } : ul = () => performance.timeOrigin + performance.now(); + function Gy(F, V, ue) { + o().copyWithin(F >>> 0, V >>> 0, V + ue >>> 0); + } + function Hy() { + return C ? zB().cpus().length : navigator.hardwareConcurrency; + } + function Ky(F) { + var V = XC(), ue = F(); + return Um(V), ue; + } + function Ni(F, V) { + var ue = arguments.length - 2, $e = arguments; + return Ky(() => { + for (var Be = ue, Le = Gm(Be * 8), ge = Le >> 3, Ne = 0; Ne < ue; Ne++) { + var Ft = $e[2 + Ne]; + p()[ge + Ne >>> 0] = Ft; } - return ok(P, Be, Le, V); + return y0(F, Be, Le, V); }); } - var gc = []; - function ab(P, V, pe) { - gc.length = V; - for (var $e = pe >> 3, Be = 0; Be < V; Be++) - gc[Be] = p()[$e + Be >>> 0]; - var Le = P < 0, ge = Le ? Fm[-P - 1] : hb[P]; - return ge.apply(null, gc); + var pl = []; + function qy(F, V, ue) { + pl.length = V; + for (var $e = ue >> 3, Be = 0; Be < V; Be++) + pl[Be] = p()[$e + Be >>> 0]; + var Le = F < 0, ge = Le ? vm[-F - 1] : rb[F]; + return ge.apply(null, pl); } - function ib(P) { + function jy(F) { try { - return oe.grow(P - Ke.byteLength + 65535 >>> 16), Et(oe.buffer), 1; + return oe.grow(F - He.byteLength + 65535 >>> 16), Tt(oe.buffer), 1; } catch (V) { } } - function ub(P) { + function Xy(F) { var V = o().length; - if (P = P >>> 0, P <= V) + if (F = F >>> 0, F <= V) return false; - var pe = Vm(); - if (P > pe) + var ue = Rm(); + if (F > ue) return false; - let $e = (Ot, co) => Ot + (co - Ot % co) % co; + let $e = (Ft, so) => Ft + (so - Ft % so) % so; for (var Be = 1; Be <= 4; Be *= 2) { var Le = V * (1 + 0.2 / Be); - Le = Math.min(Le, P + 100663296); - var ge = Math.min(pe, $e(Math.max(P, Le), 65536)), Ne = ib(ge); + Le = Math.min(Le, F + 100663296); + var ge = Math.min(ue, $e(Math.max(F, Le), 65536)), Ne = jy(ge); if (Ne) return true; } return false; } - function pb() { + function Yy() { throw "unwind"; } - function Wm(P) { - return S ? Oi(4, 1, P) : 52; + function Dm(F) { + return S ? Ni(4, 1, F) : 52; } - function Um(P, V, pe, $e, Be) { - return S ? Oi(5, 1, P, V, pe, $e, Be) : 70; + function Am(F, V, ue, $e, Be) { + return S ? Ni(5, 1, F, V, ue, $e, Be) : 70; } - var lb = [null, [], []]; - function cb(P, V) { - var pe = lb[P]; - V === 0 || V === 10 ? ((P === 1 ? U : j)(Fe(pe, 0)), pe.length = 0) : pe.push(V); + var Qy = [null, [], []]; + function Zy(F, V) { + var ue = Qy[F]; + V === 0 || V === 10 ? ((F === 1 ? U : j)(Fe(ue, 0)), ue.length = 0) : ue.push(V); } - function Gm(P, V, pe, $e) { + function Fm(F, V, ue, $e) { if (S) - return Oi(6, 1, P, V, pe, $e); - for (var Be = 0, Le = 0; Le < pe; Le++) { + return Ni(6, 1, F, V, ue, $e); + for (var Be = 0, Le = 0; Le < ue; Le++) { var ge = a()[V >>> 2], Ne = a()[V + 4 >>> 2]; V += 8; - for (var Ot = 0; Ot < Ne; Ot++) - cb(P, o()[ge + Ot >>> 0]); + for (var Ft = 0; Ft < Ne; Ft++) + Zy(F, o()[ge + Ft >>> 0]); Be += Ne; } return a()[$e >>> 2] = Be, 0; } - function Hm(P) { - var V = u["_" + P]; + function Pm(F) { + var V = u["_" + F]; return V; } - function mb(P, V) { - t10().set(P, V >>> 0); + function Jy(F, V) { + t10().set(F, V >>> 0); } - function db(P, V, pe, $e, Be) { - var Le = { string: (Gr) => { - var Hp = 0; - if (Gr != null && Gr !== 0) { - var pk = (Gr.length << 2) + 1; - Hp = ed(pk), ct(Gr, Hp, pk); + function eb(F, V, ue, $e, Be) { + var Le = { string: (Br) => { + var Bp = 0; + if (Br != null && Br !== 0) { + var v0 = (Br.length << 2) + 1; + Bp = Gm(v0), ct(Br, Bp, v0); } - return Hp; - }, array: (Gr) => { - var Hp = ed(Gr.length); - return mb(Gr, Hp), Hp; + return Bp; + }, array: (Br) => { + var Bp = Gm(Br.length); + return Jy(Br, Bp), Bp; } }; - function ge(Gr) { - return V === "string" ? Pe(Gr) : V === "boolean" ? !!Gr : Gr; + function ge(Br) { + return V === "string" ? Pe(Br) : V === "boolean" ? !!Br : Br; } - var Ne = Hm(P), Ot = [], co = 0; + var Ne = Pm(F), Ft = [], so = 0; if ($e) - for (var Za = 0; Za < $e.length; Za++) { - var uk = Le[pe[Za]]; - uk ? (co === 0 && (co = uw()), Ot[Za] = uk($e[Za])) : Ot[Za] = $e[Za]; + for (var Ha = 0; Ha < $e.length; Ha++) { + var I0 = Le[ue[Ha]]; + I0 ? (so === 0 && (so = XC()), Ft[Ha] = I0($e[Ha])) : Ft[Ha] = $e[Ha]; } - var pw = Ne.apply(null, Ot); - function K4(Gr) { - return co !== 0 && Jm(co), ge(Gr); + var YC = Ne.apply(null, Ft); + function TG(Br) { + return so !== 0 && Um(so), ge(Br); } - return pw = K4(pw), pw; + return YC = TG(YC), YC; } - function fb(P, V, pe, $e) { - pe = pe || []; - var Be = pe.every((ge) => ge === "number" || ge === "boolean"), Le = V !== "string"; - return Le && Be && !$e ? Hm(P) : function() { - return db(P, V, pe, arguments, $e); + function tb(F, V, ue, $e) { + ue = ue || []; + var Be = ue.every((ge) => ge === "number" || ge === "boolean"), Le = V !== "string"; + return Le && Be && !$e ? Pm(F) : function() { + return eb(F, V, ue, arguments, $e); }; } Me.init(); - var hb = [null, Om, Lm, Bm, Wm, Um, Gm], Km = { __emscripten_init_main_thread_js: Ky, __emscripten_thread_cleanup: qy, __pthread_create_js: zm, _emscripten_default_pthread_stack_size: jy, _emscripten_get_now_is_monotonic: Yy, _emscripten_notify_task_queue: Qy, _emscripten_set_offscreencanvas_size: Zy, abort: Jy, emscripten_check_blocking_allowed: eb, emscripten_date_now: tb, emscripten_get_heap_max: rb, emscripten_get_now: hc, emscripten_memcpy_big: ob, emscripten_num_logical_cores: nb, emscripten_receive_on_main_thread_js: ab, emscripten_resize_heap: ub, emscripten_unwind_to_js_event_loop: pb, exit: Mm, fd_close: Wm, fd_seek: Um, fd_write: Gm, memory: oe || u.wasmMemory }, tk = Oy(), gb = u.___wasm_call_ctors = function() { - return (gb = u.___wasm_call_ctors = u.asm.__wasm_call_ctors).apply(null, arguments); - }, xb = u._init = function() { - return (xb = u._init = u.asm.init).apply(null, arguments); - }, yb = u._init_with_threads_count = function() { - return (yb = u._init_with_threads_count = u.asm.init_with_threads_count).apply(null, arguments); - }, bb = u._get_threads_count = function() { - return (bb = u._get_threads_count = u.asm.get_threads_count).apply(null, arguments); - }, Cb = u._register_tensor = function() { - return (Cb = u._register_tensor = u.asm.register_tensor).apply(null, arguments); - }, wb = u._dispose_data = function() { - return (wb = u._dispose_data = u.asm.dispose_data).apply(null, arguments); - }, Sb = u._dispose = function() { - return (Sb = u._dispose = u.asm.dispose).apply(null, arguments); - }, Ib = u._Abs = function() { - return (Ib = u._Abs = u.asm.Abs).apply(null, arguments); - }, vb = u._Acos = function() { - return (vb = u._Acos = u.asm.Acos).apply(null, arguments); - }, kb = u._Acosh = function() { - return (kb = u._Acosh = u.asm.Acosh).apply(null, arguments); - }, Nb = u._Add = function() { - return (Nb = u._Add = u.asm.Add).apply(null, arguments); - }, Tb = u._AddN = function() { - return (Tb = u._AddN = u.asm.AddN).apply(null, arguments); - }, _b = u._All = function() { - return (_b = u._All = u.asm.All).apply(null, arguments); - }, Eb = u._Any = function() { - return (Eb = u._Any = u.asm.Any).apply(null, arguments); - }, $b = u._ArgMax = function() { - return ($b = u._ArgMax = u.asm.ArgMax).apply(null, arguments); - }, Rb = u._ArgMin = function() { - return (Rb = u._ArgMin = u.asm.ArgMin).apply(null, arguments); - }, Db = u._Asin = function() { - return (Db = u._Asin = u.asm.Asin).apply(null, arguments); - }, Ab = u._Asinh = function() { - return (Ab = u._Asinh = u.asm.Asinh).apply(null, arguments); - }, Fb = u._Atan = function() { - return (Fb = u._Atan = u.asm.Atan).apply(null, arguments); - }, Pb = u._Atan2 = function() { - return (Pb = u._Atan2 = u.asm.Atan2).apply(null, arguments); - }, Ob = u._Atanh = function() { - return (Ob = u._Atanh = u.asm.Atanh).apply(null, arguments); - }, Mb = u._AvgPool = function() { - return (Mb = u._AvgPool = u.asm.AvgPool).apply(null, arguments); - }, Lb = u._AvgPool3D = function() { - return (Lb = u._AvgPool3D = u.asm.AvgPool3D).apply(null, arguments); - }, Bb = u._AvgPool3DGrad = function() { - return (Bb = u._AvgPool3DGrad = u.asm.AvgPool3DGrad).apply(null, arguments); - }, zb = u._AvgPoolGrad = function() { - return (zb = u._AvgPoolGrad = u.asm.AvgPoolGrad).apply(null, arguments); - }, Vb = u._BatchMatMul = function() { - return (Vb = u._BatchMatMul = u.asm.BatchMatMul).apply(null, arguments); - }, Wb = u._Bincount = function() { - return (Wb = u._Bincount = u.asm.Bincount).apply(null, arguments); - }, Ub = u._BitwiseAnd = function() { - return (Ub = u._BitwiseAnd = u.asm.BitwiseAnd).apply(null, arguments); - }, Gb = u._Ceil = function() { - return (Gb = u._Ceil = u.asm.Ceil).apply(null, arguments); - }, Hb = u._ClipByValue = function() { - return (Hb = u._ClipByValue = u.asm.ClipByValue).apply(null, arguments); - }, Kb = u._Conv2D = function() { - return (Kb = u._Conv2D = u.asm.Conv2D).apply(null, arguments); - }, qb = u._Conv2DBackpropInput = function() { - return (qb = u._Conv2DBackpropInput = u.asm.Conv2DBackpropInput).apply(null, arguments); - }, jb = u._Conv3D = function() { - return (jb = u._Conv3D = u.asm.Conv3D).apply(null, arguments); - }, Xb = u._Conv3DBackpropFilterV2 = function() { - return (Xb = u._Conv3DBackpropFilterV2 = u.asm.Conv3DBackpropFilterV2).apply(null, arguments); - }, Yb = u._Conv3DBackpropInputV2 = function() { - return (Yb = u._Conv3DBackpropInputV2 = u.asm.Conv3DBackpropInputV2).apply(null, arguments); - }, Qb = u._Cos = function() { - return (Qb = u._Cos = u.asm.Cos).apply(null, arguments); - }, Zb = u._Cosh = function() { - return (Zb = u._Cosh = u.asm.Cosh).apply(null, arguments); - }, Jb = u._CropAndResize = function() { - return (Jb = u._CropAndResize = u.asm.CropAndResize).apply(null, arguments); - }, eC = u._Cumprod = function() { - return (eC = u._Cumprod = u.asm.Cumprod).apply(null, arguments); - }, tC = u._Cumsum = function() { - return (tC = u._Cumsum = u.asm.Cumsum).apply(null, arguments); - }, rC = u._DenseBincount = function() { - return (rC = u._DenseBincount = u.asm.DenseBincount).apply(null, arguments); - }, oC = u._DepthToSpace = function() { - return (oC = u._DepthToSpace = u.asm.DepthToSpace).apply(null, arguments); - }, nC = u._DepthwiseConv2dNative = function() { - return (nC = u._DepthwiseConv2dNative = u.asm.DepthwiseConv2dNative).apply(null, arguments); - }, sC = u._Diag = function() { - return (sC = u._Diag = u.asm.Diag).apply(null, arguments); - }, aC = u._Dilation2D = function() { - return (aC = u._Dilation2D = u.asm.Dilation2D).apply(null, arguments); - }, iC = u._Dilation2DBackpropFilter = function() { - return (iC = u._Dilation2DBackpropFilter = u.asm.Dilation2DBackpropFilter).apply(null, arguments); - }, uC = u._Dilation2DBackpropInput = function() { - return (uC = u._Dilation2DBackpropInput = u.asm.Dilation2DBackpropInput).apply(null, arguments); - }, pC = u._Elu = function() { - return (pC = u._Elu = u.asm.Elu).apply(null, arguments); - }, lC = u._EluGrad = function() { - return (lC = u._EluGrad = u.asm.EluGrad).apply(null, arguments); - }, cC = u._Equal = function() { - return (cC = u._Equal = u.asm.Equal).apply(null, arguments); - }, mC = u._Erf = function() { - return (mC = u._Erf = u.asm.Erf).apply(null, arguments); - }, dC = u._Exp = function() { - return (dC = u._Exp = u.asm.Exp).apply(null, arguments); - }, fC = u._Expm1 = function() { - return (fC = u._Expm1 = u.asm.Expm1).apply(null, arguments); - }, hC = u._FlipLeftRight = function() { - return (hC = u._FlipLeftRight = u.asm.FlipLeftRight).apply(null, arguments); - }, gC = u._Floor = function() { - return (gC = u._Floor = u.asm.Floor).apply(null, arguments); - }, xC = u._FloorDiv = function() { - return (xC = u._FloorDiv = u.asm.FloorDiv).apply(null, arguments); - }, yC = u._FusedBatchNorm = function() { - return (yC = u._FusedBatchNorm = u.asm.FusedBatchNorm).apply(null, arguments); - }, bC = u._FusedConv2D = function() { - return (bC = u._FusedConv2D = u.asm.FusedConv2D).apply(null, arguments); - }, CC = u._FusedDepthwiseConv2D = function() { - return (CC = u._FusedDepthwiseConv2D = u.asm.FusedDepthwiseConv2D).apply(null, arguments); - }, wC = u._Gather = function() { - return (wC = u._Gather = u.asm.Gather).apply(null, arguments); - }, SC = u._GatherNd = function() { - return (SC = u._GatherNd = u.asm.GatherNd).apply(null, arguments); - }, IC = u._Greater = function() { - return (IC = u._Greater = u.asm.Greater).apply(null, arguments); - }, vC = u._GreaterEqual = function() { - return (vC = u._GreaterEqual = u.asm.GreaterEqual).apply(null, arguments); - }, kC = u._IsFinite = function() { - return (kC = u._IsFinite = u.asm.IsFinite).apply(null, arguments); - }, NC = u._IsInf = function() { - return (NC = u._IsInf = u.asm.IsInf).apply(null, arguments); - }, TC = u._IsNan = function() { - return (TC = u._IsNan = u.asm.IsNan).apply(null, arguments); - }, _C = u._LRN = function() { - return (_C = u._LRN = u.asm.LRN).apply(null, arguments); - }, EC = u._LRNGrad = function() { - return (EC = u._LRNGrad = u.asm.LRNGrad).apply(null, arguments); - }, $C = u._LeakyRelu = function() { - return ($C = u._LeakyRelu = u.asm.LeakyRelu).apply(null, arguments); - }, RC = u._Less = function() { - return (RC = u._Less = u.asm.Less).apply(null, arguments); - }, DC = u._LessEqual = function() { - return (DC = u._LessEqual = u.asm.LessEqual).apply(null, arguments); - }, AC = u._LinSpace = function() { - return (AC = u._LinSpace = u.asm.LinSpace).apply(null, arguments); - }, FC = u._Log = function() { - return (FC = u._Log = u.asm.Log).apply(null, arguments); - }, PC = u._Log1p = function() { - return (PC = u._Log1p = u.asm.Log1p).apply(null, arguments); - }, OC = u._LogicalAnd = function() { - return (OC = u._LogicalAnd = u.asm.LogicalAnd).apply(null, arguments); - }, MC = u._LogicalNot = function() { - return (MC = u._LogicalNot = u.asm.LogicalNot).apply(null, arguments); - }, LC = u._LogicalOr = function() { - return (LC = u._LogicalOr = u.asm.LogicalOr).apply(null, arguments); - }, BC = u._LogicalXor = function() { - return (BC = u._LogicalXor = u.asm.LogicalXor).apply(null, arguments); - }, zC = u._Max = function() { - return (zC = u._Max = u.asm.Max).apply(null, arguments); - }, VC = u._MaxPool = function() { - return (VC = u._MaxPool = u.asm.MaxPool).apply(null, arguments); - }, WC = u._MaxPool3D = function() { - return (WC = u._MaxPool3D = u.asm.MaxPool3D).apply(null, arguments); - }, UC = u._MaxPool3DGrad = function() { - return (UC = u._MaxPool3DGrad = u.asm.MaxPool3DGrad).apply(null, arguments); - }, GC = u._MaxPoolGrad = function() { - return (GC = u._MaxPoolGrad = u.asm.MaxPoolGrad).apply(null, arguments); - }, HC = u._MaxPoolWithArgmax = function() { - return (HC = u._MaxPoolWithArgmax = u.asm.MaxPoolWithArgmax).apply(null, arguments); - }, KC = u._Maximum = function() { - return (KC = u._Maximum = u.asm.Maximum).apply(null, arguments); - }, qC = u._Mean = function() { - return (qC = u._Mean = u.asm.Mean).apply(null, arguments); - }, jC = u._Min = function() { - return (jC = u._Min = u.asm.Min).apply(null, arguments); - }, XC = u._Minimum = function() { - return (XC = u._Minimum = u.asm.Minimum).apply(null, arguments); - }, YC = u._MirrorPad = function() { - return (YC = u._MirrorPad = u.asm.MirrorPad).apply(null, arguments); - }, QC = u._Mod = function() { - return (QC = u._Mod = u.asm.Mod).apply(null, arguments); - }, ZC = u._Multinomial = function() { - return (ZC = u._Multinomial = u.asm.Multinomial).apply(null, arguments); - }, JC = u._Multiply = function() { - return (JC = u._Multiply = u.asm.Multiply).apply(null, arguments); - }, ew = u._Neg = function() { - return (ew = u._Neg = u.asm.Neg).apply(null, arguments); - }, tw = u._NonMaxSuppressionV3 = function() { - return (tw = u._NonMaxSuppressionV3 = u.asm.NonMaxSuppressionV3).apply(null, arguments); - }, rw = u._NonMaxSuppressionV4 = function() { - return (rw = u._NonMaxSuppressionV4 = u.asm.NonMaxSuppressionV4).apply(null, arguments); - }, qm = u._NonMaxSuppressionV5 = function() { - return (qm = u._NonMaxSuppressionV5 = u.asm.NonMaxSuppressionV5).apply(null, arguments); - }, jm = u._NotEqual = function() { - return (jm = u._NotEqual = u.asm.NotEqual).apply(null, arguments); - }, xc = u._OneHot = function() { - return (xc = u._OneHot = u.asm.OneHot).apply(null, arguments); - }, ow = u._PadV2 = function() { - return (ow = u._PadV2 = u.asm.PadV2).apply(null, arguments); - }, nw = u._Pow = function() { - return (nw = u._Pow = u.asm.Pow).apply(null, arguments); - }, Wp = u._Prelu = function() { - return (Wp = u._Prelu = u.asm.Prelu).apply(null, arguments); - }, Xm = u._Prod = function() { - return (Xm = u._Prod = u.asm.Prod).apply(null, arguments); - }, Up = u._RealDiv = function() { - return (Up = u._RealDiv = u.asm.RealDiv).apply(null, arguments); - }, Gp = u._Reciprocal = function() { - return (Gp = u._Reciprocal = u.asm.Reciprocal).apply(null, arguments); - }, sw = u._Relu = function() { - return (sw = u._Relu = u.asm.Relu).apply(null, arguments); + var rb = [null, Nm, _m, Em, Dm, Am, Fm], Om = { __emscripten_init_main_thread_js: Ay, __emscripten_thread_cleanup: Fy, __pthread_create_js: $m, _emscripten_default_pthread_stack_size: Py, _emscripten_get_now_is_monotonic: My, _emscripten_notify_task_queue: Ly, _emscripten_set_offscreencanvas_size: By, abort: zy, emscripten_check_blocking_allowed: Vy, emscripten_date_now: Wy, emscripten_get_heap_max: Uy, emscripten_get_now: ul, emscripten_memcpy_big: Gy, emscripten_num_logical_cores: Hy, emscripten_receive_on_main_thread_js: qy, emscripten_resize_heap: Xy, emscripten_unwind_to_js_event_loop: Yy, exit: Tm, fd_close: Dm, fd_seek: Am, fd_write: Fm, memory: oe || u.wasmMemory }, g0 = Iy(), ob = u.___wasm_call_ctors = function() { + return (ob = u.___wasm_call_ctors = u.asm.__wasm_call_ctors).apply(null, arguments); + }, nb = u._init = function() { + return (nb = u._init = u.asm.init).apply(null, arguments); + }, sb = u._init_with_threads_count = function() { + return (sb = u._init_with_threads_count = u.asm.init_with_threads_count).apply(null, arguments); + }, ab = u._get_threads_count = function() { + return (ab = u._get_threads_count = u.asm.get_threads_count).apply(null, arguments); + }, ib = u._register_tensor = function() { + return (ib = u._register_tensor = u.asm.register_tensor).apply(null, arguments); + }, ub = u._dispose_data = function() { + return (ub = u._dispose_data = u.asm.dispose_data).apply(null, arguments); + }, pb = u._dispose = function() { + return (pb = u._dispose = u.asm.dispose).apply(null, arguments); + }, cb = u._Abs = function() { + return (cb = u._Abs = u.asm.Abs).apply(null, arguments); + }, lb = u._Acos = function() { + return (lb = u._Acos = u.asm.Acos).apply(null, arguments); + }, mb = u._Acosh = function() { + return (mb = u._Acosh = u.asm.Acosh).apply(null, arguments); + }, db = u._Add = function() { + return (db = u._Add = u.asm.Add).apply(null, arguments); + }, fb = u._AddN = function() { + return (fb = u._AddN = u.asm.AddN).apply(null, arguments); + }, hb = u._All = function() { + return (hb = u._All = u.asm.All).apply(null, arguments); + }, gb = u._Any = function() { + return (gb = u._Any = u.asm.Any).apply(null, arguments); + }, xb = u._ArgMax = function() { + return (xb = u._ArgMax = u.asm.ArgMax).apply(null, arguments); + }, yb = u._ArgMin = function() { + return (yb = u._ArgMin = u.asm.ArgMin).apply(null, arguments); + }, bb = u._Asin = function() { + return (bb = u._Asin = u.asm.Asin).apply(null, arguments); + }, Cb = u._Asinh = function() { + return (Cb = u._Asinh = u.asm.Asinh).apply(null, arguments); + }, wb = u._Atan = function() { + return (wb = u._Atan = u.asm.Atan).apply(null, arguments); + }, Sb = u._Atan2 = function() { + return (Sb = u._Atan2 = u.asm.Atan2).apply(null, arguments); + }, Ib = u._Atanh = function() { + return (Ib = u._Atanh = u.asm.Atanh).apply(null, arguments); + }, vb = u._AvgPool = function() { + return (vb = u._AvgPool = u.asm.AvgPool).apply(null, arguments); + }, kb = u._AvgPool3D = function() { + return (kb = u._AvgPool3D = u.asm.AvgPool3D).apply(null, arguments); + }, Nb = u._AvgPool3DGrad = function() { + return (Nb = u._AvgPool3DGrad = u.asm.AvgPool3DGrad).apply(null, arguments); + }, Tb = u._AvgPoolGrad = function() { + return (Tb = u._AvgPoolGrad = u.asm.AvgPoolGrad).apply(null, arguments); + }, _b = u._BatchMatMul = function() { + return (_b = u._BatchMatMul = u.asm.BatchMatMul).apply(null, arguments); + }, Eb = u._Bincount = function() { + return (Eb = u._Bincount = u.asm.Bincount).apply(null, arguments); + }, $b = u._BitwiseAnd = function() { + return ($b = u._BitwiseAnd = u.asm.BitwiseAnd).apply(null, arguments); + }, Rb = u._Ceil = function() { + return (Rb = u._Ceil = u.asm.Ceil).apply(null, arguments); + }, Db = u._ClipByValue = function() { + return (Db = u._ClipByValue = u.asm.ClipByValue).apply(null, arguments); + }, Ab = u._Conv2D = function() { + return (Ab = u._Conv2D = u.asm.Conv2D).apply(null, arguments); + }, Fb = u._Conv2DBackpropInput = function() { + return (Fb = u._Conv2DBackpropInput = u.asm.Conv2DBackpropInput).apply(null, arguments); + }, Pb = u._Conv3D = function() { + return (Pb = u._Conv3D = u.asm.Conv3D).apply(null, arguments); + }, Ob = u._Conv3DBackpropFilterV2 = function() { + return (Ob = u._Conv3DBackpropFilterV2 = u.asm.Conv3DBackpropFilterV2).apply(null, arguments); + }, Mb = u._Conv3DBackpropInputV2 = function() { + return (Mb = u._Conv3DBackpropInputV2 = u.asm.Conv3DBackpropInputV2).apply(null, arguments); + }, Lb = u._Cos = function() { + return (Lb = u._Cos = u.asm.Cos).apply(null, arguments); + }, Bb = u._Cosh = function() { + return (Bb = u._Cosh = u.asm.Cosh).apply(null, arguments); + }, zb = u._CropAndResize = function() { + return (zb = u._CropAndResize = u.asm.CropAndResize).apply(null, arguments); + }, Vb = u._Cumprod = function() { + return (Vb = u._Cumprod = u.asm.Cumprod).apply(null, arguments); + }, Wb = u._Cumsum = function() { + return (Wb = u._Cumsum = u.asm.Cumsum).apply(null, arguments); + }, Ub = u._DenseBincount = function() { + return (Ub = u._DenseBincount = u.asm.DenseBincount).apply(null, arguments); + }, Gb = u._DepthToSpace = function() { + return (Gb = u._DepthToSpace = u.asm.DepthToSpace).apply(null, arguments); + }, Hb = u._DepthwiseConv2dNative = function() { + return (Hb = u._DepthwiseConv2dNative = u.asm.DepthwiseConv2dNative).apply(null, arguments); + }, Kb = u._Diag = function() { + return (Kb = u._Diag = u.asm.Diag).apply(null, arguments); + }, qb = u._Dilation2D = function() { + return (qb = u._Dilation2D = u.asm.Dilation2D).apply(null, arguments); + }, jb = u._Dilation2DBackpropFilter = function() { + return (jb = u._Dilation2DBackpropFilter = u.asm.Dilation2DBackpropFilter).apply(null, arguments); + }, Xb = u._Dilation2DBackpropInput = function() { + return (Xb = u._Dilation2DBackpropInput = u.asm.Dilation2DBackpropInput).apply(null, arguments); + }, Yb = u._Elu = function() { + return (Yb = u._Elu = u.asm.Elu).apply(null, arguments); + }, Qb = u._EluGrad = function() { + return (Qb = u._EluGrad = u.asm.EluGrad).apply(null, arguments); + }, Zb = u._Equal = function() { + return (Zb = u._Equal = u.asm.Equal).apply(null, arguments); + }, Jb = u._Erf = function() { + return (Jb = u._Erf = u.asm.Erf).apply(null, arguments); + }, eC = u._Exp = function() { + return (eC = u._Exp = u.asm.Exp).apply(null, arguments); + }, tC = u._Expm1 = function() { + return (tC = u._Expm1 = u.asm.Expm1).apply(null, arguments); + }, rC = u._FlipLeftRight = function() { + return (rC = u._FlipLeftRight = u.asm.FlipLeftRight).apply(null, arguments); + }, oC = u._Floor = function() { + return (oC = u._Floor = u.asm.Floor).apply(null, arguments); + }, nC = u._FloorDiv = function() { + return (nC = u._FloorDiv = u.asm.FloorDiv).apply(null, arguments); + }, sC = u._FusedBatchNorm = function() { + return (sC = u._FusedBatchNorm = u.asm.FusedBatchNorm).apply(null, arguments); + }, aC = u._FusedConv2D = function() { + return (aC = u._FusedConv2D = u.asm.FusedConv2D).apply(null, arguments); + }, iC = u._FusedDepthwiseConv2D = function() { + return (iC = u._FusedDepthwiseConv2D = u.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, uC = u._Gather = function() { + return (uC = u._Gather = u.asm.Gather).apply(null, arguments); + }, pC = u._GatherNd = function() { + return (pC = u._GatherNd = u.asm.GatherNd).apply(null, arguments); + }, cC = u._Greater = function() { + return (cC = u._Greater = u.asm.Greater).apply(null, arguments); + }, lC = u._GreaterEqual = function() { + return (lC = u._GreaterEqual = u.asm.GreaterEqual).apply(null, arguments); + }, mC = u._IsFinite = function() { + return (mC = u._IsFinite = u.asm.IsFinite).apply(null, arguments); + }, dC = u._IsInf = function() { + return (dC = u._IsInf = u.asm.IsInf).apply(null, arguments); + }, fC = u._IsNan = function() { + return (fC = u._IsNan = u.asm.IsNan).apply(null, arguments); + }, hC = u._LRN = function() { + return (hC = u._LRN = u.asm.LRN).apply(null, arguments); + }, gC = u._LRNGrad = function() { + return (gC = u._LRNGrad = u.asm.LRNGrad).apply(null, arguments); + }, xC = u._LeakyRelu = function() { + return (xC = u._LeakyRelu = u.asm.LeakyRelu).apply(null, arguments); + }, yC = u._Less = function() { + return (yC = u._Less = u.asm.Less).apply(null, arguments); + }, bC = u._LessEqual = function() { + return (bC = u._LessEqual = u.asm.LessEqual).apply(null, arguments); + }, CC = u._LinSpace = function() { + return (CC = u._LinSpace = u.asm.LinSpace).apply(null, arguments); + }, wC = u._Log = function() { + return (wC = u._Log = u.asm.Log).apply(null, arguments); + }, SC = u._Log1p = function() { + return (SC = u._Log1p = u.asm.Log1p).apply(null, arguments); + }, IC = u._LogicalAnd = function() { + return (IC = u._LogicalAnd = u.asm.LogicalAnd).apply(null, arguments); + }, vC = u._LogicalNot = function() { + return (vC = u._LogicalNot = u.asm.LogicalNot).apply(null, arguments); + }, kC = u._LogicalOr = function() { + return (kC = u._LogicalOr = u.asm.LogicalOr).apply(null, arguments); + }, NC = u._LogicalXor = function() { + return (NC = u._LogicalXor = u.asm.LogicalXor).apply(null, arguments); + }, TC = u._Max = function() { + return (TC = u._Max = u.asm.Max).apply(null, arguments); + }, _C = u._MaxPool = function() { + return (_C = u._MaxPool = u.asm.MaxPool).apply(null, arguments); + }, EC = u._MaxPool3D = function() { + return (EC = u._MaxPool3D = u.asm.MaxPool3D).apply(null, arguments); + }, $C = u._MaxPool3DGrad = function() { + return ($C = u._MaxPool3DGrad = u.asm.MaxPool3DGrad).apply(null, arguments); + }, RC = u._MaxPoolGrad = function() { + return (RC = u._MaxPoolGrad = u.asm.MaxPoolGrad).apply(null, arguments); + }, DC = u._MaxPoolWithArgmax = function() { + return (DC = u._MaxPoolWithArgmax = u.asm.MaxPoolWithArgmax).apply(null, arguments); + }, AC = u._Maximum = function() { + return (AC = u._Maximum = u.asm.Maximum).apply(null, arguments); + }, FC = u._Mean = function() { + return (FC = u._Mean = u.asm.Mean).apply(null, arguments); + }, PC = u._Min = function() { + return (PC = u._Min = u.asm.Min).apply(null, arguments); + }, OC = u._Minimum = function() { + return (OC = u._Minimum = u.asm.Minimum).apply(null, arguments); + }, MC = u._MirrorPad = function() { + return (MC = u._MirrorPad = u.asm.MirrorPad).apply(null, arguments); + }, LC = u._Mod = function() { + return (LC = u._Mod = u.asm.Mod).apply(null, arguments); + }, BC = u._Multinomial = function() { + return (BC = u._Multinomial = u.asm.Multinomial).apply(null, arguments); + }, zC = u._Multiply = function() { + return (zC = u._Multiply = u.asm.Multiply).apply(null, arguments); + }, VC = u._Neg = function() { + return (VC = u._Neg = u.asm.Neg).apply(null, arguments); + }, WC = u._NonMaxSuppressionV3 = function() { + return (WC = u._NonMaxSuppressionV3 = u.asm.NonMaxSuppressionV3).apply(null, arguments); + }, UC = u._NonMaxSuppressionV4 = function() { + return (UC = u._NonMaxSuppressionV4 = u.asm.NonMaxSuppressionV4).apply(null, arguments); + }, Mm = u._NonMaxSuppressionV5 = function() { + return (Mm = u._NonMaxSuppressionV5 = u.asm.NonMaxSuppressionV5).apply(null, arguments); + }, Lm = u._NotEqual = function() { + return (Lm = u._NotEqual = u.asm.NotEqual).apply(null, arguments); + }, cl = u._OneHot = function() { + return (cl = u._OneHot = u.asm.OneHot).apply(null, arguments); + }, GC = u._PadV2 = function() { + return (GC = u._PadV2 = u.asm.PadV2).apply(null, arguments); + }, HC = u._Pow = function() { + return (HC = u._Pow = u.asm.Pow).apply(null, arguments); + }, Op = u._Prelu = function() { + return (Op = u._Prelu = u.asm.Prelu).apply(null, arguments); + }, Bm = u._Prod = function() { + return (Bm = u._Prod = u.asm.Prod).apply(null, arguments); + }, Mp = u._RealDiv = function() { + return (Mp = u._RealDiv = u.asm.RealDiv).apply(null, arguments); + }, Lp = u._Reciprocal = function() { + return (Lp = u._Reciprocal = u.asm.Reciprocal).apply(null, arguments); + }, KC = u._Relu = function() { + return (KC = u._Relu = u.asm.Relu).apply(null, arguments); }, K = u._Relu6 = function() { return (K = u._Relu6 = u.asm.Relu6).apply(null, arguments); }, ae = u._ResizeBilinear = function() { return (ae = u._ResizeBilinear = u.asm.ResizeBilinear).apply(null, arguments); }, Ee = u._ResizeBilinearGrad = function() { return (Ee = u._ResizeBilinearGrad = u.asm.ResizeBilinearGrad).apply(null, arguments); - }, it = u._ResizeNearestNeighbor = function() { - return (it = u._ResizeNearestNeighbor = u.asm.ResizeNearestNeighbor).apply(null, arguments); - }, $t = u._ResizeNearestNeighborGrad = function() { - return ($t = u._ResizeNearestNeighborGrad = u.asm.ResizeNearestNeighborGrad).apply(null, arguments); - }, Rt = u._Reverse = function() { - return (Rt = u._Reverse = u.asm.Reverse).apply(null, arguments); - }, Ze = u._RotateWithOffset = function() { - return (Ze = u._RotateWithOffset = u.asm.RotateWithOffset).apply(null, arguments); - }, je = u._Round = function() { - return (je = u._Round = u.asm.Round).apply(null, arguments); - }, Ht = u._Rsqrt = function() { - return (Ht = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); - }, lo = u._ScatterNd = function() { - return (lo = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); - }, Qa = u._SearchSorted = function() { - return (Qa = u._SearchSorted = u.asm.SearchSorted).apply(null, arguments); - }, Ym = u._SelectV2 = function() { - return (Ym = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); - }, yc = u._Selu = function() { - return (yc = u._Selu = u.asm.Selu).apply(null, arguments); - }, aw = u._Sigmoid = function() { - return (aw = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); - }, wr = u._Sign = function() { - return (wr = u._Sign = u.asm.Sign).apply(null, arguments); - }, Mi = u._Sin = function() { - return (Mi = u._Sin = u.asm.Sin).apply(null, arguments); - }, Qm = u._Sinh = function() { - return (Qm = u._Sinh = u.asm.Sinh).apply(null, arguments); - }, f4 = u._Softmax = function() { - return (f4 = u._Softmax = u.asm.Softmax).apply(null, arguments); - }, h4 = u._Softplus = function() { - return (h4 = u._Softplus = u.asm.Softplus).apply(null, arguments); - }, g4 = u._SparseFillEmptyRows = function() { - return (g4 = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); - }, x4 = u._SparseReshape = function() { - return (x4 = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); - }, y4 = u._SparseSegmentReduction = function() { - return (y4 = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); - }, b4 = u._SparseToDense = function() { - return (b4 = u._SparseToDense = u.asm.SparseToDense).apply(null, arguments); - }, C4 = u._Sqrt = function() { - return (C4 = u._Sqrt = u.asm.Sqrt).apply(null, arguments); - }, w4 = u._Square = function() { - return (w4 = u._Square = u.asm.Square).apply(null, arguments); - }, S4 = u._SquaredDifference = function() { - return (S4 = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); - }, I4 = u._Step = function() { - return (I4 = u._Step = u.asm.Step).apply(null, arguments); - }, v4 = u._StridedSlice = function() { - return (v4 = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); - }, k4 = u._Sub = function() { - return (k4 = u._Sub = u.asm.Sub).apply(null, arguments); - }, N4 = u._Sum = function() { - return (N4 = u._Sum = u.asm.Sum).apply(null, arguments); - }, T4 = u._Tan = function() { - return (T4 = u._Tan = u.asm.Tan).apply(null, arguments); - }, _4 = u._Tanh = function() { - return (_4 = u._Tanh = u.asm.Tanh).apply(null, arguments); - }, E4 = u._TensorScatterUpdate = function() { - return (E4 = u._TensorScatterUpdate = u.asm.TensorScatterUpdate).apply(null, arguments); - }, $4 = u._Tile = function() { - return ($4 = u._Tile = u.asm.Tile).apply(null, arguments); - }, R4 = u._TopK = function() { - return (R4 = u._TopK = u.asm.TopK).apply(null, arguments); - }, D4 = u._Transform = function() { - return (D4 = u._Transform = u.asm.Transform).apply(null, arguments); - }, A4 = u._Transpose = function() { - return (A4 = u._Transpose = u.asm.Transpose).apply(null, arguments); - }, F4 = u.__FusedMatMul = function() { - return (F4 = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); - }, P4 = u._malloc = function() { - return (P4 = u._malloc = u.asm.malloc).apply(null, arguments); - }, O4 = u._free = function() { - return (O4 = u._free = u.asm.free).apply(null, arguments); - }, M4 = u.__emscripten_tls_init = function() { - return (M4 = u.__emscripten_tls_init = u.asm._emscripten_tls_init).apply(null, arguments); - }, Zm = u._pthread_self = function() { - return (Zm = u._pthread_self = u.asm.pthread_self).apply(null, arguments); - }, L4 = u.___errno_location = function() { - return (L4 = u.___errno_location = u.asm.__errno_location).apply(null, arguments); - }, rk = u.__emscripten_thread_init = function() { - return (rk = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); - }, B4 = u.__emscripten_thread_crashed = function() { - return (B4 = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); - }, z4 = u._emscripten_main_thread_process_queued_calls = function() { - return (z4 = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); - }, V4 = u._emscripten_main_browser_thread_id = function() { - return (V4 = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); - }, ok = u._emscripten_run_in_main_runtime_thread_js = function() { - return (ok = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); - }, W4 = u._emscripten_dispatch_to_thread_ = function() { - return (W4 = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); - }, nk = u.__emscripten_proxy_execute_task_queue = function() { - return (nk = u.__emscripten_proxy_execute_task_queue = u.asm._emscripten_proxy_execute_task_queue).apply(null, arguments); - }, iw = u.__emscripten_thread_free_data = function() { - return (iw = u.__emscripten_thread_free_data = u.asm._emscripten_thread_free_data).apply(null, arguments); - }, sk = u.__emscripten_thread_exit = function() { - return (sk = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); - }, ak = u._emscripten_stack_set_limits = function() { - return (ak = u._emscripten_stack_set_limits = u.asm.emscripten_stack_set_limits).apply(null, arguments); - }, uw = u.stackSave = function() { - return (uw = u.stackSave = u.asm.stackSave).apply(null, arguments); - }, Jm = u.stackRestore = function() { - return (Jm = u.stackRestore = u.asm.stackRestore).apply(null, arguments); - }, ed = u.stackAlloc = function() { - return (ed = u.stackAlloc = u.asm.stackAlloc).apply(null, arguments); - }, U4 = u.dynCall_iijjiiii = function() { - return (U4 = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); - }, G4 = u.dynCall_jiji = function() { - return (G4 = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); + }, at = u._ResizeNearestNeighbor = function() { + return (at = u._ResizeNearestNeighbor = u.asm.ResizeNearestNeighbor).apply(null, arguments); + }, _t = u._ResizeNearestNeighborGrad = function() { + return (_t = u._ResizeNearestNeighborGrad = u.asm.ResizeNearestNeighborGrad).apply(null, arguments); + }, Et = u._Reverse = function() { + return (Et = u._Reverse = u.asm.Reverse).apply(null, arguments); + }, Qe = u._RotateWithOffset = function() { + return (Qe = u._RotateWithOffset = u.asm.RotateWithOffset).apply(null, arguments); + }, Ke = u._Round = function() { + return (Ke = u._Round = u.asm.Round).apply(null, arguments); + }, Ut = u._Rsqrt = function() { + return (Ut = u._Rsqrt = u.asm.Rsqrt).apply(null, arguments); + }, no = u._ScatterNd = function() { + return (no = u._ScatterNd = u.asm.ScatterNd).apply(null, arguments); + }, Ga = u._SearchSorted = function() { + return (Ga = u._SearchSorted = u.asm.SearchSorted).apply(null, arguments); + }, zm = u._SelectV2 = function() { + return (zm = u._SelectV2 = u.asm.SelectV2).apply(null, arguments); + }, ll = u._Selu = function() { + return (ll = u._Selu = u.asm.Selu).apply(null, arguments); + }, qC = u._Sigmoid = function() { + return (qC = u._Sigmoid = u.asm.Sigmoid).apply(null, arguments); + }, yr = u._Sign = function() { + return (yr = u._Sign = u.asm.Sign).apply(null, arguments); + }, Ti = u._Sin = function() { + return (Ti = u._Sin = u.asm.Sin).apply(null, arguments); + }, Vm = u._Sinh = function() { + return (Vm = u._Sinh = u.asm.Sinh).apply(null, arguments); + }, XU = u._Softmax = function() { + return (XU = u._Softmax = u.asm.Softmax).apply(null, arguments); + }, YU = u._Softplus = function() { + return (YU = u._Softplus = u.asm.Softplus).apply(null, arguments); + }, QU = u._SparseFillEmptyRows = function() { + return (QU = u._SparseFillEmptyRows = u.asm.SparseFillEmptyRows).apply(null, arguments); + }, ZU = u._SparseReshape = function() { + return (ZU = u._SparseReshape = u.asm.SparseReshape).apply(null, arguments); + }, JU = u._SparseSegmentReduction = function() { + return (JU = u._SparseSegmentReduction = u.asm.SparseSegmentReduction).apply(null, arguments); + }, eG = u._SparseToDense = function() { + return (eG = u._SparseToDense = u.asm.SparseToDense).apply(null, arguments); + }, tG = u._Sqrt = function() { + return (tG = u._Sqrt = u.asm.Sqrt).apply(null, arguments); + }, rG = u._Square = function() { + return (rG = u._Square = u.asm.Square).apply(null, arguments); + }, oG = u._SquaredDifference = function() { + return (oG = u._SquaredDifference = u.asm.SquaredDifference).apply(null, arguments); + }, nG = u._Step = function() { + return (nG = u._Step = u.asm.Step).apply(null, arguments); + }, sG = u._StridedSlice = function() { + return (sG = u._StridedSlice = u.asm.StridedSlice).apply(null, arguments); + }, aG = u._Sub = function() { + return (aG = u._Sub = u.asm.Sub).apply(null, arguments); + }, iG = u._Sum = function() { + return (iG = u._Sum = u.asm.Sum).apply(null, arguments); + }, uG = u._Tan = function() { + return (uG = u._Tan = u.asm.Tan).apply(null, arguments); + }, pG = u._Tanh = function() { + return (pG = u._Tanh = u.asm.Tanh).apply(null, arguments); + }, cG = u._TensorScatterUpdate = function() { + return (cG = u._TensorScatterUpdate = u.asm.TensorScatterUpdate).apply(null, arguments); + }, lG = u._Tile = function() { + return (lG = u._Tile = u.asm.Tile).apply(null, arguments); + }, mG = u._TopK = function() { + return (mG = u._TopK = u.asm.TopK).apply(null, arguments); + }, dG = u._Transform = function() { + return (dG = u._Transform = u.asm.Transform).apply(null, arguments); + }, fG = u._Transpose = function() { + return (fG = u._Transpose = u.asm.Transpose).apply(null, arguments); + }, hG = u.__FusedMatMul = function() { + return (hG = u.__FusedMatMul = u.asm._FusedMatMul).apply(null, arguments); + }, gG = u._malloc = function() { + return (gG = u._malloc = u.asm.malloc).apply(null, arguments); + }, xG = u._free = function() { + return (xG = u._free = u.asm.free).apply(null, arguments); + }, yG = u.__emscripten_tls_init = function() { + return (yG = u.__emscripten_tls_init = u.asm._emscripten_tls_init).apply(null, arguments); + }, Wm = u._pthread_self = function() { + return (Wm = u._pthread_self = u.asm.pthread_self).apply(null, arguments); + }, bG = u.___errno_location = function() { + return (bG = u.___errno_location = u.asm.__errno_location).apply(null, arguments); + }, x0 = u.__emscripten_thread_init = function() { + return (x0 = u.__emscripten_thread_init = u.asm._emscripten_thread_init).apply(null, arguments); + }, CG = u.__emscripten_thread_crashed = function() { + return (CG = u.__emscripten_thread_crashed = u.asm._emscripten_thread_crashed).apply(null, arguments); + }, wG = u._emscripten_main_thread_process_queued_calls = function() { + return (wG = u._emscripten_main_thread_process_queued_calls = u.asm.emscripten_main_thread_process_queued_calls).apply(null, arguments); + }, SG = u._emscripten_main_browser_thread_id = function() { + return (SG = u._emscripten_main_browser_thread_id = u.asm.emscripten_main_browser_thread_id).apply(null, arguments); + }, y0 = u._emscripten_run_in_main_runtime_thread_js = function() { + return (y0 = u._emscripten_run_in_main_runtime_thread_js = u.asm.emscripten_run_in_main_runtime_thread_js).apply(null, arguments); + }, IG = u._emscripten_dispatch_to_thread_ = function() { + return (IG = u._emscripten_dispatch_to_thread_ = u.asm.emscripten_dispatch_to_thread_).apply(null, arguments); + }, b0 = u.__emscripten_proxy_execute_task_queue = function() { + return (b0 = u.__emscripten_proxy_execute_task_queue = u.asm._emscripten_proxy_execute_task_queue).apply(null, arguments); + }, jC = u.__emscripten_thread_free_data = function() { + return (jC = u.__emscripten_thread_free_data = u.asm._emscripten_thread_free_data).apply(null, arguments); + }, C0 = u.__emscripten_thread_exit = function() { + return (C0 = u.__emscripten_thread_exit = u.asm._emscripten_thread_exit).apply(null, arguments); + }, w0 = u._emscripten_stack_set_limits = function() { + return (w0 = u._emscripten_stack_set_limits = u.asm.emscripten_stack_set_limits).apply(null, arguments); + }, XC = u.stackSave = function() { + return (XC = u.stackSave = u.asm.stackSave).apply(null, arguments); + }, Um = u.stackRestore = function() { + return (Um = u.stackRestore = u.asm.stackRestore).apply(null, arguments); + }, Gm = u.stackAlloc = function() { + return (Gm = u.stackAlloc = u.asm.stackAlloc).apply(null, arguments); + }, vG = u.dynCall_iijjiiii = function() { + return (vG = u.dynCall_iijjiiii = u.asm.dynCall_iijjiiii).apply(null, arguments); + }, kG = u.dynCall_jiji = function() { + return (kG = u.dynCall_jiji = u.asm.dynCall_jiji).apply(null, arguments); }; - u.keepRuntimeAlive = cn, u.wasmMemory = oe, u.cwrap = fb, u.ExitStatus = Du, u.PThread = Me; - var td; - Ya = function P() { - td || ik(), td || (Ya = P); + u.keepRuntimeAlive = Lo, u.wasmMemory = oe, u.cwrap = tb, u.ExitStatus = ku, u.PThread = Me; + var Hm; + Ua = function F() { + Hm || S0(), Hm || (Ua = F); }; - function ik(P) { - if (P = P || f, Pi > 0) + function S0(F) { + if (F = F || f, ki > 0) return; if (S) { - l(u), Zt(), startWorker(u); + c(u), Xt(), startWorker(u); return; } - if (ta(), Pi > 0) + if (Ks(), ki > 0) return; function V() { - td || (td = true, u.calledRun = true, !me && (Zt(), l(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Xa())); + Hm || (Hm = true, u.calledRun = true, !le && (Xt(), c(u), u.onRuntimeInitialized && u.onRuntimeInitialized(), Wa())); } u.setStatus ? (u.setStatus("Running..."), setTimeout(function() { setTimeout(function() { @@ -2188,45 +2188,45 @@ var Nz = jt((Jg, ov) => { if (u.preInit) for (typeof u.preInit == "function" && (u.preInit = [u.preInit]); u.preInit.length > 0; ) u.preInit.pop()(); - ik(); - var rd; - m && (rd = { uncaughtException: process.listeners("uncaughtException").filter(function(P) { - return !m.uncaughtException.indexOf(P) > -1; - }), unhandledRejection: process.listeners("unhandledRejection").filter(function(P) { - return !m.unhandledRejection.indexOf(P) > -1; + S0(); + var Km; + m && (Km = { uncaughtException: process.listeners("uncaughtException").filter(function(F) { + return !m.uncaughtException.indexOf(F) > -1; + }), unhandledRejection: process.listeners("unhandledRejection").filter(function(F) { + return !m.unhandledRejection.indexOf(F) > -1; }) }); - var od; + var qm; if (typeof WasmBackendModule != "undefined") - od = WasmBackendModule; + qm = WasmBackendModule; else if (typeof e != "undefined") - od = e; + qm = e; else throw new Error("Could not find wasm module in post.js"); - if (rd) { - var H4 = od._dispose; - od._dispose = function() { - H4(), rd.uncaughtException.forEach(function(P) { - process.removeListener("uncaughtException", P); - }), rd.unhandledRejection.forEach(function(P) { - process.removeListener("unhandledRejection", P); + if (Km) { + var NG = qm._dispose; + qm._dispose = function() { + NG(), Km.uncaughtException.forEach(function(F) { + process.removeListener("uncaughtException", F); + }), Km.unhandledRejection.forEach(function(F) { + process.removeListener("unhandledRejection", F); }); }; } return e.ready; }; })(); - typeof Jg == "object" && typeof ov == "object" ? ov.exports = rv : typeof define == "function" && define.amd ? define([], function() { - return rv; - }) : typeof Jg == "object" && (Jg.WasmBackendModuleThreadedSimd = rv); + typeof Wg == "object" && typeof Gv == "object" ? Gv.exports = Uv : typeof define == "function" && define.amd ? define([], function() { + return Uv; + }) : typeof Wg == "object" && (Wg.WasmBackendModuleThreadedSimd = Uv); }); -var _z = jt((EPt, Tz) => { - Tz.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +var UB = Kt((e3t, WB) => { + WB.exports.wasmWorkerContents = `"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" ");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`; }); -var Ez = jt((ex, sv) => { - var nv = (() => { - var r16 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; - return typeof __filename != "undefined" && (r16 = r16 || __filename), function(e) { +var GB = Kt((Ug, Kv) => { + var Hv = (() => { + var r15 = typeof document != "undefined" && document.currentScript ? document.currentScript.src : void 0; + return typeof __filename != "undefined" && (r15 = r15 || __filename), function(e) { e = e || {}; var t10 = typeof e != "undefined" ? e : {}, o, n; t10.ready = new Promise(function(K, ae) { @@ -2236,676 +2236,676 @@ var Ez = jt((ex, sv) => { typeof process != "undefined" && process.listeners && (s = { uncaughtException: process.listeners("uncaughtException"), unhandledRejection: process.listeners("unhandledRejection") }); var a = Object.assign({}, t10), i = [], p = "./this.program", u = (K, ae) => { throw ae; - }, l = typeof window == "object", c = typeof importScripts == "function", m = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", d = ""; + }, c = typeof window == "object", l = typeof importScripts == "function", m = typeof process == "object" && typeof process.versions == "object" && typeof process.versions.node == "string", d = ""; function f(K) { return t10.locateFile ? t10.locateFile(K, d) : d + K; } var h, g, x, b; - function w(K) { - if (K instanceof Bp) + function C(K) { + if (K instanceof Ap) return; - E("exiting due to exception: " + K); + $("exiting due to exception: " + K); } if (m) { - var S = ev(), k = tv(); - c ? d = k.dirname(d) + "/" : d = __dirname + "/", h = (K, ae) => (K = ta(K) ? new URL(K) : k.normalize(K), S.readFileSync(K, ae ? void 0 : "utf8")), x = (K) => { + var S = Vv(), k = Wv(); + l ? d = k.dirname(d) + "/" : d = __dirname + "/", h = (K, ae) => (K = Ks(K) ? new URL(K) : k.normalize(K), S.readFileSync(K, ae ? void 0 : "utf8")), x = (K) => { var ae = h(K, true); return ae.buffer || (ae = new Uint8Array(ae)), ae; }, g = (K, ae, Ee) => { - K = ta(K) ? new URL(K) : k.normalize(K), S.readFile(K, function(it, $t) { - it ? Ee(it) : ae($t.buffer); + K = Ks(K) ? new URL(K) : k.normalize(K), S.readFile(K, function(at, _t) { + at ? Ee(at) : ae(_t.buffer); }); }, process.argv.length > 1 && (p = process.argv[1].replace(/\\/g, "/")), i = process.argv.slice(2), process.on("uncaughtException", function(K) { - if (!(K instanceof Bp)) + if (!(K instanceof Ap)) throw K; }), process.on("unhandledRejection", function(K) { throw K; }), u = (K, ae) => { - if (ut()) + if (it()) throw process.exitCode = K, ae; - w(ae), process.exit(K); + C(ae), process.exit(K); }, t10.inspect = function() { return "[Emscripten Module object]"; }; } else - (l || c) && (c ? d = self.location.href : typeof document != "undefined" && document.currentScript && (d = document.currentScript.src), r16 && (d = r16), d.indexOf("blob:") !== 0 ? d = d.substr(0, d.replace(/[?#].*/, "").lastIndexOf("/") + 1) : d = "", h = (K) => { + (c || l) && (l ? d = self.location.href : typeof document != "undefined" && document.currentScript && (d = document.currentScript.src), r15 && (d = r15), d.indexOf("blob:") !== 0 ? d = d.substr(0, d.replace(/[?#].*/, "").lastIndexOf("/") + 1) : d = "", h = (K) => { var ae = new XMLHttpRequest(); return ae.open("GET", K, false), ae.send(null), ae.responseText; - }, c && (x = (K) => { + }, l && (x = (K) => { var ae = new XMLHttpRequest(); return ae.open("GET", K, false), ae.responseType = "arraybuffer", ae.send(null), new Uint8Array(ae.response); }), g = (K, ae, Ee) => { - var it = new XMLHttpRequest(); - it.open("GET", K, true), it.responseType = "arraybuffer", it.onload = () => { - if (it.status == 200 || it.status == 0 && it.response) { - ae(it.response); + var at = new XMLHttpRequest(); + at.open("GET", K, true), at.responseType = "arraybuffer", at.onload = () => { + if (at.status == 200 || at.status == 0 && at.response) { + ae(at.response); return; } Ee(); - }, it.onerror = Ee, it.send(null); + }, at.onerror = Ee, at.send(null); }, b = (K) => document.title = K); - var T = t10.print || console.log.bind(console), E = t10.printErr || console.warn.bind(console); + var _ = t10.print || console.log.bind(console), $ = t10.printErr || console.warn.bind(console); Object.assign(t10, a), a = null, t10.arguments && (i = t10.arguments), t10.thisProgram && (p = t10.thisProgram), t10.quit && (u = t10.quit); var R = 4, D; t10.wasmBinary && (D = t10.wasmBinary); - var F = t10.noExitRuntime || true; - typeof WebAssembly != "object" && xr("no native wasm support detected"); + var P = t10.noExitRuntime || true; + typeof WebAssembly != "object" && fr("no native wasm support detected"); var O, M = false, L; function B(K, ae) { - K || xr(ae); + K || fr(ae); } var z = typeof TextDecoder != "undefined" ? new TextDecoder("utf8") : void 0; function U(K, ae, Ee) { ae >>>= 0; - for (var it = ae + Ee, $t = ae; K[$t] && !($t >= it); ) - ++$t; - if ($t - ae > 16 && K.buffer && z) - return z.decode(K.subarray(ae, $t)); - for (var Rt = ""; ae < $t; ) { - var Ze = K[ae++]; - if (!(Ze & 128)) { - Rt += String.fromCharCode(Ze); + for (var at = ae + Ee, _t = ae; K[_t] && !(_t >= at); ) + ++_t; + if (_t - ae > 16 && K.buffer && z) + return z.decode(K.subarray(ae, _t)); + for (var Et = ""; ae < _t; ) { + var Qe = K[ae++]; + if (!(Qe & 128)) { + Et += String.fromCharCode(Qe); continue; } - var je = K[ae++] & 63; - if ((Ze & 224) == 192) { - Rt += String.fromCharCode((Ze & 31) << 6 | je); + var Ke = K[ae++] & 63; + if ((Qe & 224) == 192) { + Et += String.fromCharCode((Qe & 31) << 6 | Ke); continue; } - var Ht = K[ae++] & 63; - if ((Ze & 240) == 224 ? Ze = (Ze & 15) << 12 | je << 6 | Ht : Ze = (Ze & 7) << 18 | je << 12 | Ht << 6 | K[ae++] & 63, Ze < 65536) - Rt += String.fromCharCode(Ze); + var Ut = K[ae++] & 63; + if ((Qe & 240) == 224 ? Qe = (Qe & 15) << 12 | Ke << 6 | Ut : Qe = (Qe & 7) << 18 | Ke << 12 | Ut << 6 | K[ae++] & 63, Qe < 65536) + Et += String.fromCharCode(Qe); else { - var lo = Ze - 65536; - Rt += String.fromCharCode(55296 | lo >> 10, 56320 | lo & 1023); + var no = Qe - 65536; + Et += String.fromCharCode(55296 | no >> 10, 56320 | no & 1023); } } - return Rt; + return Et; } function j(K, ae) { return K >>>= 0, K ? U(ne, K, ae) : ""; } - function q(K, ae, Ee, it) { - if (Ee >>>= 0, !(it > 0)) + function q(K, ae, Ee, at) { + if (Ee >>>= 0, !(at > 0)) return 0; - for (var $t = Ee, Rt = Ee + it - 1, Ze = 0; Ze < K.length; ++Ze) { - var je = K.charCodeAt(Ze); - if (je >= 55296 && je <= 57343) { - var Ht = K.charCodeAt(++Ze); - je = 65536 + ((je & 1023) << 10) | Ht & 1023; + for (var _t = Ee, Et = Ee + at - 1, Qe = 0; Qe < K.length; ++Qe) { + var Ke = K.charCodeAt(Qe); + if (Ke >= 55296 && Ke <= 57343) { + var Ut = K.charCodeAt(++Qe); + Ke = 65536 + ((Ke & 1023) << 10) | Ut & 1023; } - if (je <= 127) { - if (Ee >= Rt) + if (Ke <= 127) { + if (Ee >= Et) break; - ae[Ee++ >>> 0] = je; - } else if (je <= 2047) { - if (Ee + 1 >= Rt) + ae[Ee++ >>> 0] = Ke; + } else if (Ke <= 2047) { + if (Ee + 1 >= Et) break; - ae[Ee++ >>> 0] = 192 | je >> 6, ae[Ee++ >>> 0] = 128 | je & 63; - } else if (je <= 65535) { - if (Ee + 2 >= Rt) + ae[Ee++ >>> 0] = 192 | Ke >> 6, ae[Ee++ >>> 0] = 128 | Ke & 63; + } else if (Ke <= 65535) { + if (Ee + 2 >= Et) break; - ae[Ee++ >>> 0] = 224 | je >> 12, ae[Ee++ >>> 0] = 128 | je >> 6 & 63, ae[Ee++ >>> 0] = 128 | je & 63; + ae[Ee++ >>> 0] = 224 | Ke >> 12, ae[Ee++ >>> 0] = 128 | Ke >> 6 & 63, ae[Ee++ >>> 0] = 128 | Ke & 63; } else { - if (Ee + 3 >= Rt) + if (Ee + 3 >= Et) break; - ae[Ee++ >>> 0] = 240 | je >> 18, ae[Ee++ >>> 0] = 128 | je >> 12 & 63, ae[Ee++ >>> 0] = 128 | je >> 6 & 63, ae[Ee++ >>> 0] = 128 | je & 63; + ae[Ee++ >>> 0] = 240 | Ke >> 18, ae[Ee++ >>> 0] = 128 | Ke >> 12 & 63, ae[Ee++ >>> 0] = 128 | Ke >> 6 & 63, ae[Ee++ >>> 0] = 128 | Ke & 63; } } - return ae[Ee >>> 0] = 0, Ee - $t; + return ae[Ee >>> 0] = 0, Ee - _t; } function Y(K, ae, Ee) { return q(K, ne, ae, Ee); } - var J, re, ne, ee, oe, ue, me, be, _e; + var J, re, ne, ee, oe, ie, le, be, _e; function ve(K) { - J = K, t10.HEAP8 = re = new Int8Array(K), t10.HEAP16 = ee = new Int16Array(K), t10.HEAP32 = ue = new Int32Array(K), t10.HEAPU8 = ne = new Uint8Array(K), t10.HEAPU16 = oe = new Uint16Array(K), t10.HEAPU32 = me = new Uint32Array(K), t10.HEAPF32 = be = new Float32Array(K), t10.HEAPF64 = _e = new Float64Array(K); + J = K, t10.HEAP8 = re = new Int8Array(K), t10.HEAP16 = ee = new Int16Array(K), t10.HEAP32 = ie = new Int32Array(K), t10.HEAPU8 = ne = new Uint8Array(K), t10.HEAPU16 = oe = new Uint16Array(K), t10.HEAPU32 = le = new Uint32Array(K), t10.HEAPF32 = be = new Float32Array(K), t10.HEAPF64 = _e = new Float64Array(K); } - var Fe = t10.INITIAL_MEMORY || 16777216, Pe, at = [], ct = [], Ke = [], mt = false; - function ut() { - return F; + var Fe = t10.INITIAL_MEMORY || 16777216, Pe, st = [], ct = [], He = [], lt = false; + function it() { + return P; } - function gt() { + function ht() { if (t10.preRun) for (typeof t10.preRun == "function" && (t10.preRun = [t10.preRun]); t10.preRun.length; ) - Bt(t10.preRun.shift()); - Ya(at); + Mt(t10.preRun.shift()); + Ua(st); } - function xt() { - mt = true, Ya(ct); + function gt() { + lt = true, Ua(ct); } - function Ur() { + function Lr() { if (t10.postRun) for (typeof t10.postRun == "function" && (t10.postRun = [t10.postRun]); t10.postRun.length; ) - sr(t10.postRun.shift()); - Ya(Ke); + rr(t10.postRun.shift()); + Ua(He); } - function Bt(K) { - at.unshift(K); + function Mt(K) { + st.unshift(K); } - function io(K) { + function to(K) { ct.unshift(K); } - function sr(K) { - Ke.unshift(K); + function rr(K) { + He.unshift(K); } - var Et = 0, ar = null, ir = null; - function uo(K) { - Et++, t10.monitorRunDependencies && t10.monitorRunDependencies(Et); + var Tt = 0, or = null, nr = null; + function ro(K) { + Tt++, t10.monitorRunDependencies && t10.monitorRunDependencies(Tt); } - function po(K) { - if (Et--, t10.monitorRunDependencies && t10.monitorRunDependencies(Et), Et == 0 && (ar !== null && (clearInterval(ar), ar = null), ir)) { - var ae = ir; - ir = null, ae(); + function oo(K) { + if (Tt--, t10.monitorRunDependencies && t10.monitorRunDependencies(Tt), Tt == 0 && (or !== null && (clearInterval(or), or = null), nr)) { + var ae = nr; + nr = null, ae(); } } - function xr(K) { - t10.onAbort && t10.onAbort(K), K = "Aborted(" + K + ")", E(K), M = true, L = 1, K += ". Build with -sASSERTIONS for more info."; + function fr(K) { + t10.onAbort && t10.onAbort(K), K = "Aborted(" + K + ")", $(K), M = true, L = 1, K += ". Build with -sASSERTIONS for more info."; var ae = new WebAssembly.RuntimeError(K); throw n(ae), ae; } - var ja = "data:application/octet-stream;base64,"; - function cn(K) { - return K.startsWith(ja); + var Va = "data:application/octet-stream;base64,"; + function Lo(K) { + return K.startsWith(Va); } - function ta(K) { + function Ks(K) { return K.startsWith("file://"); } - var Zt; - Zt = "tfjs-backend-wasm.wasm", cn(Zt) || (Zt = f(Zt)); - function Xa(K) { + var Xt; + Xt = "tfjs-backend-wasm.wasm", Lo(Xt) || (Xt = f(Xt)); + function Wa(K) { try { - if (K == Zt && D) + if (K == Xt && D) return new Uint8Array(D); if (x) return x(K); throw "both async and sync fetching of the wasm failed"; } catch (ae) { - xr(ae); + fr(ae); } } - function lc() { - if (!D && (l || c)) { - if (typeof fetch == "function" && !ta(Zt)) - return fetch(Zt, { credentials: "same-origin" }).then(function(K) { + function ol() { + if (!D && (c || l)) { + if (typeof fetch == "function" && !Ks(Xt)) + return fetch(Xt, { credentials: "same-origin" }).then(function(K) { if (!K.ok) - throw "failed to load wasm binary file at '" + Zt + "'"; + throw "failed to load wasm binary file at '" + Xt + "'"; return K.arrayBuffer(); }).catch(function() { - return Xa(Zt); + return Wa(Xt); }); if (g) return new Promise(function(K, ae) { - g(Zt, function(Ee) { + g(Xt, function(Ee) { K(new Uint8Array(Ee)); }, ae); }); } return Promise.resolve().then(function() { - return Xa(Zt); + return Wa(Xt); }); } - function cc() { - var K = { env: mc, wasi_snapshot_preview1: mc }; - function ae(Ze, je) { - var Ht = Ze.exports; - t10.asm = Ht, O = t10.asm.memory, ve(O.buffer), Pe = t10.asm.__indirect_function_table, io(t10.asm.__wasm_call_ctors), po("wasm-instantiate"); - } - uo("wasm-instantiate"); - function Ee(Ze) { - ae(Ze.instance); - } - function it(Ze) { - return lc().then(function(je) { - return WebAssembly.instantiate(je, K); - }).then(function(je) { - return je; - }).then(Ze, function(je) { - E("failed to asynchronously prepare wasm: " + je), xr(je); + function nl() { + var K = { env: sl, wasi_snapshot_preview1: sl }; + function ae(Qe, Ke) { + var Ut = Qe.exports; + t10.asm = Ut, O = t10.asm.memory, ve(O.buffer), Pe = t10.asm.__indirect_function_table, to(t10.asm.__wasm_call_ctors), oo("wasm-instantiate"); + } + ro("wasm-instantiate"); + function Ee(Qe) { + ae(Qe.instance); + } + function at(Qe) { + return ol().then(function(Ke) { + return WebAssembly.instantiate(Ke, K); + }).then(function(Ke) { + return Ke; + }).then(Qe, function(Ke) { + $("failed to asynchronously prepare wasm: " + Ke), fr(Ke); }); } - function $t() { - return !D && typeof WebAssembly.instantiateStreaming == "function" && !cn(Zt) && !ta(Zt) && !m && typeof fetch == "function" ? fetch(Zt, { credentials: "same-origin" }).then(function(Ze) { - var je = WebAssembly.instantiateStreaming(Ze, K); - return je.then(Ee, function(Ht) { - return E("wasm streaming compile failed: " + Ht), E("falling back to ArrayBuffer instantiation"), it(Ee); + function _t() { + return !D && typeof WebAssembly.instantiateStreaming == "function" && !Lo(Xt) && !Ks(Xt) && !m && typeof fetch == "function" ? fetch(Xt, { credentials: "same-origin" }).then(function(Qe) { + var Ke = WebAssembly.instantiateStreaming(Qe, K); + return Ke.then(Ee, function(Ut) { + return $("wasm streaming compile failed: " + Ut), $("falling back to ArrayBuffer instantiation"), at(Ee); }); - }) : it(Ee); + }) : at(Ee); } if (t10.instantiateWasm) try { - var Rt = t10.instantiateWasm(K, ae); - return Rt; - } catch (Ze) { - E("Module.instantiateWasm callback failed with error: " + Ze), n(Ze); + var Et = t10.instantiateWasm(K, ae); + return Et; + } catch (Qe) { + $("Module.instantiateWasm callback failed with error: " + Qe), n(Qe); } - return $t().catch(n), {}; + return _t().catch(n), {}; } - var Zv, Pi; - function Bp(K) { + var d0, ki; + function Ap(K) { this.name = "ExitStatus", this.message = "Program terminated with exit(" + K + ")", this.status = K; } - function Ya(K) { + function Ua(K) { for (; K.length > 0; ) K.shift()(t10); } - function Ay() { - xr(""); + function Cy() { + fr(""); } - function Rm() { + function wm() { return 4294901760; } - function Ru() { - return Rm(); + function vu() { + return wm(); } - function Fy(K, ae, Ee) { + function wy(K, ae, Ee) { ne.copyWithin(K >>> 0, ae >>> 0, ae + Ee >>> 0); } - function Dm(K) { + function Sm(K) { try { return O.grow(K - J.byteLength + 65535 >>> 16), ve(O.buffer), 1; } catch (ae) { } } - function zp(K) { + function Fp(K) { var ae = ne.length; K = K >>> 0; - var Ee = Rm(); + var Ee = wm(); if (K > Ee) return false; - let it = (Ht, lo) => Ht + (lo - Ht % lo) % lo; - for (var $t = 1; $t <= 4; $t *= 2) { - var Rt = ae * (1 + 0.2 / $t); - Rt = Math.min(Rt, K + 100663296); - var Ze = Math.min(Ee, it(Math.max(K, Rt), 65536)), je = Dm(Ze); - if (je) + let at = (Ut, no) => Ut + (no - Ut % no) % no; + for (var _t = 1; _t <= 4; _t *= 2) { + var Et = ae * (1 + 0.2 / _t); + Et = Math.min(Et, K + 100663296); + var Qe = Math.min(Ee, at(Math.max(K, Et), 65536)), Ke = Sm(Qe); + if (Ke) return true; } return false; } - var yr = { varargs: void 0, get: function() { - yr.varargs += 4; - var K = ue[yr.varargs - 4 >>> 2]; + var hr = { varargs: void 0, get: function() { + hr.varargs += 4; + var K = ie[hr.varargs - 4 >>> 2]; return K; }, getStr: function(K) { var ae = j(K); return ae; } }; - function Am(K) { + function Im(K) { return 52; } - function Py(K, ae, Ee, it, $t) { + function Sy(K, ae, Ee, at, _t) { return 70; } - var Oy = [null, [], []]; - function Jv(K, ae) { - var Ee = Oy[K]; - ae === 0 || ae === 10 ? ((K === 1 ? T : E)(U(Ee, 0)), Ee.length = 0) : Ee.push(ae); + var Iy = [null, [], []]; + function f0(K, ae) { + var Ee = Iy[K]; + ae === 0 || ae === 10 ? ((K === 1 ? _ : $)(U(Ee, 0)), Ee.length = 0) : Ee.push(ae); } - function ek(K, ae, Ee, it) { - for (var $t = 0, Rt = 0; Rt < Ee; Rt++) { - var Ze = me[ae >>> 2], je = me[ae + 4 >>> 2]; + function h0(K, ae, Ee, at) { + for (var _t = 0, Et = 0; Et < Ee; Et++) { + var Qe = le[ae >>> 2], Ke = le[ae + 4 >>> 2]; ae += 8; - for (var Ht = 0; Ht < je; Ht++) - Jv(K, ne[Ze + Ht >>> 0]); - $t += je; + for (var Ut = 0; Ut < Ke; Ut++) + f0(K, ne[Qe + Ut >>> 0]); + _t += Ke; } - return me[it >>> 2] = $t, 0; + return le[at >>> 2] = _t, 0; } - function Fm(K) { + function vm(K) { var ae = t10["_" + K]; return ae; } - function Du(K, ae) { + function ku(K, ae) { re.set(K, ae >>> 0); } - function My(K, ae, Ee, it, $t) { - var Rt = { string: (wr) => { - var Mi = 0; - if (wr != null && wr !== 0) { - var Qm = (wr.length << 2) + 1; - Mi = xc(Qm), Y(wr, Mi, Qm); + function vy(K, ae, Ee, at, _t) { + var Et = { string: (yr) => { + var Ti = 0; + if (yr != null && yr !== 0) { + var Vm = (yr.length << 2) + 1; + Ti = cl(Vm), Y(yr, Ti, Vm); } - return Mi; - }, array: (wr) => { - var Mi = xc(wr.length); - return Du(wr, Mi), Mi; + return Ti; + }, array: (yr) => { + var Ti = cl(yr.length); + return ku(yr, Ti), Ti; } }; - function Ze(wr) { - return ae === "string" ? j(wr) : ae === "boolean" ? !!wr : wr; - } - var je = Fm(K), Ht = [], lo = 0; - if (it) - for (var Qa = 0; Qa < it.length; Qa++) { - var Ym = Rt[Ee[Qa]]; - Ym ? (lo === 0 && (lo = qm()), Ht[Qa] = Ym(it[Qa])) : Ht[Qa] = it[Qa]; + function Qe(yr) { + return ae === "string" ? j(yr) : ae === "boolean" ? !!yr : yr; + } + var Ke = vm(K), Ut = [], no = 0; + if (at) + for (var Ga = 0; Ga < at.length; Ga++) { + var zm = Et[Ee[Ga]]; + zm ? (no === 0 && (no = Mm()), Ut[Ga] = zm(at[Ga])) : Ut[Ga] = at[Ga]; } - var yc = je.apply(null, Ht); - function aw(wr) { - return lo !== 0 && jm(lo), Ze(wr); + var ll = Ke.apply(null, Ut); + function qC(yr) { + return no !== 0 && Lm(no), Qe(yr); } - return yc = aw(yc), yc; + return ll = qC(ll), ll; } - function Ly(K, ae, Ee, it) { + function ky(K, ae, Ee, at) { Ee = Ee || []; - var $t = Ee.every((Ze) => Ze === "number" || Ze === "boolean"), Rt = ae !== "string"; - return Rt && $t && !it ? Fm(K) : function() { - return My(K, ae, Ee, arguments, it); + var _t = Ee.every((Qe) => Qe === "number" || Qe === "boolean"), Et = ae !== "string"; + return Et && _t && !at ? vm(K) : function() { + return vy(K, ae, Ee, arguments, at); }; } - var mc = { abort: Ay, emscripten_get_heap_max: Ru, emscripten_memcpy_big: Fy, emscripten_resize_heap: zp, fd_close: Am, fd_seek: Py, fd_write: ek }, By = cc(), Pm = t10.___wasm_call_ctors = function() { - return (Pm = t10.___wasm_call_ctors = t10.asm.__wasm_call_ctors).apply(null, arguments); - }, Om = t10._init = function() { - return (Om = t10._init = t10.asm.init).apply(null, arguments); - }, zy = t10._init_with_threads_count = function() { - return (zy = t10._init_with_threads_count = t10.asm.init_with_threads_count).apply(null, arguments); - }, Mm = t10._get_threads_count = function() { - return (Mm = t10._get_threads_count = t10.asm.get_threads_count).apply(null, arguments); - }, Vy = t10._register_tensor = function() { - return (Vy = t10._register_tensor = t10.asm.register_tensor).apply(null, arguments); + var sl = { abort: Cy, emscripten_get_heap_max: vu, emscripten_memcpy_big: wy, emscripten_resize_heap: Fp, fd_close: Im, fd_seek: Sy, fd_write: h0 }, Ny = nl(), km = t10.___wasm_call_ctors = function() { + return (km = t10.___wasm_call_ctors = t10.asm.__wasm_call_ctors).apply(null, arguments); + }, Nm = t10._init = function() { + return (Nm = t10._init = t10.asm.init).apply(null, arguments); + }, Ty = t10._init_with_threads_count = function() { + return (Ty = t10._init_with_threads_count = t10.asm.init_with_threads_count).apply(null, arguments); + }, Tm = t10._get_threads_count = function() { + return (Tm = t10._get_threads_count = t10.asm.get_threads_count).apply(null, arguments); + }, _y = t10._register_tensor = function() { + return (_y = t10._register_tensor = t10.asm.register_tensor).apply(null, arguments); }, Me = t10._dispose_data = function() { return (Me = t10._dispose_data = t10.asm.dispose_data).apply(null, arguments); - }, dc = t10._dispose = function() { - return (dc = t10._dispose = t10.asm.dispose).apply(null, arguments); - }, Wy = t10._Abs = function() { - return (Wy = t10._Abs = t10.asm.Abs).apply(null, arguments); - }, Lm = t10._Acos = function() { - return (Lm = t10._Acos = t10.asm.Acos).apply(null, arguments); - }, Vp = t10._Acosh = function() { - return (Vp = t10._Acosh = t10.asm.Acosh).apply(null, arguments); - }, Uy = t10._Add = function() { - return (Uy = t10._Add = t10.asm.Add).apply(null, arguments); - }, Gy = t10._AddN = function() { - return (Gy = t10._AddN = t10.asm.AddN).apply(null, arguments); - }, Hy = t10._All = function() { - return (Hy = t10._All = t10.asm.All).apply(null, arguments); - }, Ky = t10._Any = function() { - return (Ky = t10._Any = t10.asm.Any).apply(null, arguments); - }, qy = t10._ArgMax = function() { - return (qy = t10._ArgMax = t10.asm.ArgMax).apply(null, arguments); - }, Bm = t10._ArgMin = function() { - return (Bm = t10._ArgMin = t10.asm.ArgMin).apply(null, arguments); - }, zm = t10._Asin = function() { - return (zm = t10._Asin = t10.asm.Asin).apply(null, arguments); - }, jy = t10._Asinh = function() { - return (jy = t10._Asinh = t10.asm.Asinh).apply(null, arguments); - }, Xy = t10._Atan = function() { - return (Xy = t10._Atan = t10.asm.Atan).apply(null, arguments); - }, Yy = t10._Atan2 = function() { - return (Yy = t10._Atan2 = t10.asm.Atan2).apply(null, arguments); - }, fc = t10._Atanh = function() { - return (fc = t10._Atanh = t10.asm.Atanh).apply(null, arguments); - }, Qy = t10._AvgPool = function() { - return (Qy = t10._AvgPool = t10.asm.AvgPool).apply(null, arguments); - }, Zy = t10._AvgPool3D = function() { - return (Zy = t10._AvgPool3D = t10.asm.AvgPool3D).apply(null, arguments); - }, Jy = t10._AvgPool3DGrad = function() { - return (Jy = t10._AvgPool3DGrad = t10.asm.AvgPool3DGrad).apply(null, arguments); - }, Au = t10._AvgPoolGrad = function() { - return (Au = t10._AvgPoolGrad = t10.asm.AvgPoolGrad).apply(null, arguments); - }, eb = t10._BatchMatMul = function() { - return (eb = t10._BatchMatMul = t10.asm.BatchMatMul).apply(null, arguments); - }, tb = t10._Bincount = function() { - return (tb = t10._Bincount = t10.asm.Bincount).apply(null, arguments); - }, Vm = t10._BitwiseAnd = function() { - return (Vm = t10._BitwiseAnd = t10.asm.BitwiseAnd).apply(null, arguments); - }, rb = t10._Ceil = function() { - return (rb = t10._Ceil = t10.asm.Ceil).apply(null, arguments); - }, hc = t10._ClipByValue = function() { - return (hc = t10._ClipByValue = t10.asm.ClipByValue).apply(null, arguments); - }, ob = t10._Conv2D = function() { - return (ob = t10._Conv2D = t10.asm.Conv2D).apply(null, arguments); - }, nb = t10._Conv2DBackpropInput = function() { - return (nb = t10._Conv2DBackpropInput = t10.asm.Conv2DBackpropInput).apply(null, arguments); - }, sb = t10._Conv3D = function() { - return (sb = t10._Conv3D = t10.asm.Conv3D).apply(null, arguments); - }, Oi = t10._Conv3DBackpropFilterV2 = function() { - return (Oi = t10._Conv3DBackpropFilterV2 = t10.asm.Conv3DBackpropFilterV2).apply(null, arguments); - }, gc = t10._Conv3DBackpropInputV2 = function() { - return (gc = t10._Conv3DBackpropInputV2 = t10.asm.Conv3DBackpropInputV2).apply(null, arguments); - }, ab = t10._Cos = function() { - return (ab = t10._Cos = t10.asm.Cos).apply(null, arguments); - }, ib = t10._Cosh = function() { - return (ib = t10._Cosh = t10.asm.Cosh).apply(null, arguments); - }, ub = t10._CropAndResize = function() { - return (ub = t10._CropAndResize = t10.asm.CropAndResize).apply(null, arguments); - }, pb = t10._Cumprod = function() { - return (pb = t10._Cumprod = t10.asm.Cumprod).apply(null, arguments); - }, Wm = t10._Cumsum = function() { - return (Wm = t10._Cumsum = t10.asm.Cumsum).apply(null, arguments); - }, Um = t10._DenseBincount = function() { - return (Um = t10._DenseBincount = t10.asm.DenseBincount).apply(null, arguments); - }, lb = t10._DepthToSpace = function() { - return (lb = t10._DepthToSpace = t10.asm.DepthToSpace).apply(null, arguments); - }, cb = t10._DepthwiseConv2dNative = function() { - return (cb = t10._DepthwiseConv2dNative = t10.asm.DepthwiseConv2dNative).apply(null, arguments); - }, Gm = t10._Diag = function() { - return (Gm = t10._Diag = t10.asm.Diag).apply(null, arguments); - }, Hm = t10._Dilation2D = function() { - return (Hm = t10._Dilation2D = t10.asm.Dilation2D).apply(null, arguments); - }, mb = t10._Dilation2DBackpropFilter = function() { - return (mb = t10._Dilation2DBackpropFilter = t10.asm.Dilation2DBackpropFilter).apply(null, arguments); - }, db = t10._Dilation2DBackpropInput = function() { - return (db = t10._Dilation2DBackpropInput = t10.asm.Dilation2DBackpropInput).apply(null, arguments); - }, fb = t10._Elu = function() { - return (fb = t10._Elu = t10.asm.Elu).apply(null, arguments); - }, hb = t10._EluGrad = function() { - return (hb = t10._EluGrad = t10.asm.EluGrad).apply(null, arguments); - }, Km = t10._Equal = function() { - return (Km = t10._Equal = t10.asm.Equal).apply(null, arguments); - }, tk = t10._Erf = function() { - return (tk = t10._Erf = t10.asm.Erf).apply(null, arguments); - }, gb = t10._Exp = function() { - return (gb = t10._Exp = t10.asm.Exp).apply(null, arguments); - }, xb = t10._Expm1 = function() { - return (xb = t10._Expm1 = t10.asm.Expm1).apply(null, arguments); - }, yb = t10._FlipLeftRight = function() { - return (yb = t10._FlipLeftRight = t10.asm.FlipLeftRight).apply(null, arguments); - }, bb = t10._Floor = function() { - return (bb = t10._Floor = t10.asm.Floor).apply(null, arguments); - }, Cb = t10._FloorDiv = function() { - return (Cb = t10._FloorDiv = t10.asm.FloorDiv).apply(null, arguments); - }, wb = t10._FusedBatchNorm = function() { - return (wb = t10._FusedBatchNorm = t10.asm.FusedBatchNorm).apply(null, arguments); - }, Sb = t10._FusedConv2D = function() { - return (Sb = t10._FusedConv2D = t10.asm.FusedConv2D).apply(null, arguments); - }, Ib = t10._FusedDepthwiseConv2D = function() { - return (Ib = t10._FusedDepthwiseConv2D = t10.asm.FusedDepthwiseConv2D).apply(null, arguments); - }, vb = t10._Gather = function() { - return (vb = t10._Gather = t10.asm.Gather).apply(null, arguments); - }, kb = t10._GatherNd = function() { - return (kb = t10._GatherNd = t10.asm.GatherNd).apply(null, arguments); - }, Nb = t10._Greater = function() { - return (Nb = t10._Greater = t10.asm.Greater).apply(null, arguments); - }, Tb = t10._GreaterEqual = function() { - return (Tb = t10._GreaterEqual = t10.asm.GreaterEqual).apply(null, arguments); - }, _b = t10._IsFinite = function() { - return (_b = t10._IsFinite = t10.asm.IsFinite).apply(null, arguments); - }, Eb = t10._IsInf = function() { - return (Eb = t10._IsInf = t10.asm.IsInf).apply(null, arguments); - }, $b = t10._IsNan = function() { - return ($b = t10._IsNan = t10.asm.IsNan).apply(null, arguments); - }, Rb = t10._LRN = function() { - return (Rb = t10._LRN = t10.asm.LRN).apply(null, arguments); - }, Db = t10._LRNGrad = function() { - return (Db = t10._LRNGrad = t10.asm.LRNGrad).apply(null, arguments); - }, Ab = t10._LeakyRelu = function() { - return (Ab = t10._LeakyRelu = t10.asm.LeakyRelu).apply(null, arguments); - }, Fb = t10._Less = function() { - return (Fb = t10._Less = t10.asm.Less).apply(null, arguments); - }, Pb = t10._LessEqual = function() { - return (Pb = t10._LessEqual = t10.asm.LessEqual).apply(null, arguments); - }, Ob = t10._LinSpace = function() { - return (Ob = t10._LinSpace = t10.asm.LinSpace).apply(null, arguments); - }, Mb = t10._Log = function() { - return (Mb = t10._Log = t10.asm.Log).apply(null, arguments); - }, Lb = t10._Log1p = function() { - return (Lb = t10._Log1p = t10.asm.Log1p).apply(null, arguments); - }, Bb = t10._LogicalAnd = function() { - return (Bb = t10._LogicalAnd = t10.asm.LogicalAnd).apply(null, arguments); - }, zb = t10._LogicalNot = function() { - return (zb = t10._LogicalNot = t10.asm.LogicalNot).apply(null, arguments); - }, Vb = t10._LogicalOr = function() { - return (Vb = t10._LogicalOr = t10.asm.LogicalOr).apply(null, arguments); - }, Wb = t10._LogicalXor = function() { - return (Wb = t10._LogicalXor = t10.asm.LogicalXor).apply(null, arguments); - }, Ub = t10._Max = function() { - return (Ub = t10._Max = t10.asm.Max).apply(null, arguments); - }, Gb = t10._MaxPool = function() { - return (Gb = t10._MaxPool = t10.asm.MaxPool).apply(null, arguments); - }, Hb = t10._MaxPool3D = function() { - return (Hb = t10._MaxPool3D = t10.asm.MaxPool3D).apply(null, arguments); - }, Kb = t10._MaxPool3DGrad = function() { - return (Kb = t10._MaxPool3DGrad = t10.asm.MaxPool3DGrad).apply(null, arguments); - }, qb = t10._MaxPoolGrad = function() { - return (qb = t10._MaxPoolGrad = t10.asm.MaxPoolGrad).apply(null, arguments); - }, jb = t10._MaxPoolWithArgmax = function() { - return (jb = t10._MaxPoolWithArgmax = t10.asm.MaxPoolWithArgmax).apply(null, arguments); - }, Xb = t10._Maximum = function() { - return (Xb = t10._Maximum = t10.asm.Maximum).apply(null, arguments); - }, Yb = t10._Mean = function() { - return (Yb = t10._Mean = t10.asm.Mean).apply(null, arguments); - }, Qb = t10._Min = function() { - return (Qb = t10._Min = t10.asm.Min).apply(null, arguments); - }, Zb = t10._Minimum = function() { - return (Zb = t10._Minimum = t10.asm.Minimum).apply(null, arguments); - }, Jb = t10._MirrorPad = function() { - return (Jb = t10._MirrorPad = t10.asm.MirrorPad).apply(null, arguments); - }, eC = t10._Mod = function() { - return (eC = t10._Mod = t10.asm.Mod).apply(null, arguments); - }, tC = t10._Multinomial = function() { - return (tC = t10._Multinomial = t10.asm.Multinomial).apply(null, arguments); - }, rC = t10._Multiply = function() { - return (rC = t10._Multiply = t10.asm.Multiply).apply(null, arguments); - }, oC = t10._Neg = function() { - return (oC = t10._Neg = t10.asm.Neg).apply(null, arguments); - }, nC = t10._NonMaxSuppressionV3 = function() { - return (nC = t10._NonMaxSuppressionV3 = t10.asm.NonMaxSuppressionV3).apply(null, arguments); - }, sC = t10._NonMaxSuppressionV4 = function() { - return (sC = t10._NonMaxSuppressionV4 = t10.asm.NonMaxSuppressionV4).apply(null, arguments); - }, aC = t10._NonMaxSuppressionV5 = function() { - return (aC = t10._NonMaxSuppressionV5 = t10.asm.NonMaxSuppressionV5).apply(null, arguments); - }, iC = t10._NotEqual = function() { - return (iC = t10._NotEqual = t10.asm.NotEqual).apply(null, arguments); - }, uC = t10._OneHot = function() { - return (uC = t10._OneHot = t10.asm.OneHot).apply(null, arguments); - }, pC = t10._PadV2 = function() { - return (pC = t10._PadV2 = t10.asm.PadV2).apply(null, arguments); - }, lC = t10._Pow = function() { - return (lC = t10._Pow = t10.asm.Pow).apply(null, arguments); - }, cC = t10._Prelu = function() { - return (cC = t10._Prelu = t10.asm.Prelu).apply(null, arguments); - }, mC = t10._Prod = function() { - return (mC = t10._Prod = t10.asm.Prod).apply(null, arguments); - }, dC = t10._RealDiv = function() { - return (dC = t10._RealDiv = t10.asm.RealDiv).apply(null, arguments); - }, fC = t10._Reciprocal = function() { - return (fC = t10._Reciprocal = t10.asm.Reciprocal).apply(null, arguments); - }, hC = t10._Relu = function() { - return (hC = t10._Relu = t10.asm.Relu).apply(null, arguments); - }, gC = t10._Relu6 = function() { - return (gC = t10._Relu6 = t10.asm.Relu6).apply(null, arguments); - }, xC = t10._ResizeBilinear = function() { - return (xC = t10._ResizeBilinear = t10.asm.ResizeBilinear).apply(null, arguments); - }, yC = t10._ResizeBilinearGrad = function() { - return (yC = t10._ResizeBilinearGrad = t10.asm.ResizeBilinearGrad).apply(null, arguments); - }, bC = t10._ResizeNearestNeighbor = function() { - return (bC = t10._ResizeNearestNeighbor = t10.asm.ResizeNearestNeighbor).apply(null, arguments); - }, CC = t10._ResizeNearestNeighborGrad = function() { - return (CC = t10._ResizeNearestNeighborGrad = t10.asm.ResizeNearestNeighborGrad).apply(null, arguments); - }, wC = t10._Reverse = function() { - return (wC = t10._Reverse = t10.asm.Reverse).apply(null, arguments); - }, SC = t10._RotateWithOffset = function() { - return (SC = t10._RotateWithOffset = t10.asm.RotateWithOffset).apply(null, arguments); - }, IC = t10._Round = function() { - return (IC = t10._Round = t10.asm.Round).apply(null, arguments); - }, vC = t10._Rsqrt = function() { - return (vC = t10._Rsqrt = t10.asm.Rsqrt).apply(null, arguments); - }, kC = t10._ScatterNd = function() { - return (kC = t10._ScatterNd = t10.asm.ScatterNd).apply(null, arguments); - }, NC = t10._SearchSorted = function() { - return (NC = t10._SearchSorted = t10.asm.SearchSorted).apply(null, arguments); - }, TC = t10._SelectV2 = function() { - return (TC = t10._SelectV2 = t10.asm.SelectV2).apply(null, arguments); - }, _C = t10._Selu = function() { - return (_C = t10._Selu = t10.asm.Selu).apply(null, arguments); - }, EC = t10._Sigmoid = function() { - return (EC = t10._Sigmoid = t10.asm.Sigmoid).apply(null, arguments); - }, $C = t10._Sign = function() { - return ($C = t10._Sign = t10.asm.Sign).apply(null, arguments); - }, RC = t10._Sin = function() { - return (RC = t10._Sin = t10.asm.Sin).apply(null, arguments); - }, DC = t10._Sinh = function() { - return (DC = t10._Sinh = t10.asm.Sinh).apply(null, arguments); - }, AC = t10._Softmax = function() { - return (AC = t10._Softmax = t10.asm.Softmax).apply(null, arguments); - }, FC = t10._Softplus = function() { - return (FC = t10._Softplus = t10.asm.Softplus).apply(null, arguments); - }, PC = t10._SparseFillEmptyRows = function() { - return (PC = t10._SparseFillEmptyRows = t10.asm.SparseFillEmptyRows).apply(null, arguments); - }, OC = t10._SparseReshape = function() { - return (OC = t10._SparseReshape = t10.asm.SparseReshape).apply(null, arguments); - }, MC = t10._SparseSegmentReduction = function() { - return (MC = t10._SparseSegmentReduction = t10.asm.SparseSegmentReduction).apply(null, arguments); - }, LC = t10._SparseToDense = function() { - return (LC = t10._SparseToDense = t10.asm.SparseToDense).apply(null, arguments); - }, BC = t10._Sqrt = function() { - return (BC = t10._Sqrt = t10.asm.Sqrt).apply(null, arguments); - }, zC = t10._Square = function() { - return (zC = t10._Square = t10.asm.Square).apply(null, arguments); - }, VC = t10._SquaredDifference = function() { - return (VC = t10._SquaredDifference = t10.asm.SquaredDifference).apply(null, arguments); - }, WC = t10._Step = function() { - return (WC = t10._Step = t10.asm.Step).apply(null, arguments); - }, UC = t10._StridedSlice = function() { - return (UC = t10._StridedSlice = t10.asm.StridedSlice).apply(null, arguments); - }, GC = t10._Sub = function() { - return (GC = t10._Sub = t10.asm.Sub).apply(null, arguments); - }, HC = t10._Sum = function() { - return (HC = t10._Sum = t10.asm.Sum).apply(null, arguments); - }, KC = t10._Tan = function() { - return (KC = t10._Tan = t10.asm.Tan).apply(null, arguments); - }, qC = t10._Tanh = function() { - return (qC = t10._Tanh = t10.asm.Tanh).apply(null, arguments); - }, jC = t10._TensorScatterUpdate = function() { - return (jC = t10._TensorScatterUpdate = t10.asm.TensorScatterUpdate).apply(null, arguments); - }, XC = t10._Tile = function() { - return (XC = t10._Tile = t10.asm.Tile).apply(null, arguments); - }, YC = t10._TopK = function() { - return (YC = t10._TopK = t10.asm.TopK).apply(null, arguments); - }, QC = t10._Transform = function() { - return (QC = t10._Transform = t10.asm.Transform).apply(null, arguments); - }, ZC = t10._Transpose = function() { - return (ZC = t10._Transpose = t10.asm.Transpose).apply(null, arguments); - }, JC = t10.__FusedMatMul = function() { - return (JC = t10.__FusedMatMul = t10.asm._FusedMatMul).apply(null, arguments); - }, ew = t10._malloc = function() { - return (ew = t10._malloc = t10.asm.malloc).apply(null, arguments); - }, tw = t10._free = function() { - return (tw = t10._free = t10.asm.free).apply(null, arguments); - }, rw = t10.___errno_location = function() { - return (rw = t10.___errno_location = t10.asm.__errno_location).apply(null, arguments); - }, qm = t10.stackSave = function() { - return (qm = t10.stackSave = t10.asm.stackSave).apply(null, arguments); - }, jm = t10.stackRestore = function() { - return (jm = t10.stackRestore = t10.asm.stackRestore).apply(null, arguments); - }, xc = t10.stackAlloc = function() { - return (xc = t10.stackAlloc = t10.asm.stackAlloc).apply(null, arguments); - }, ow = t10.dynCall_iijjiiii = function() { - return (ow = t10.dynCall_iijjiiii = t10.asm.dynCall_iijjiiii).apply(null, arguments); - }, nw = t10.dynCall_jiji = function() { - return (nw = t10.dynCall_jiji = t10.asm.dynCall_jiji).apply(null, arguments); + }, al = t10._dispose = function() { + return (al = t10._dispose = t10.asm.dispose).apply(null, arguments); + }, Ey = t10._Abs = function() { + return (Ey = t10._Abs = t10.asm.Abs).apply(null, arguments); + }, _m = t10._Acos = function() { + return (_m = t10._Acos = t10.asm.Acos).apply(null, arguments); + }, Pp = t10._Acosh = function() { + return (Pp = t10._Acosh = t10.asm.Acosh).apply(null, arguments); + }, $y = t10._Add = function() { + return ($y = t10._Add = t10.asm.Add).apply(null, arguments); + }, Ry = t10._AddN = function() { + return (Ry = t10._AddN = t10.asm.AddN).apply(null, arguments); + }, Dy = t10._All = function() { + return (Dy = t10._All = t10.asm.All).apply(null, arguments); + }, Ay = t10._Any = function() { + return (Ay = t10._Any = t10.asm.Any).apply(null, arguments); + }, Fy = t10._ArgMax = function() { + return (Fy = t10._ArgMax = t10.asm.ArgMax).apply(null, arguments); + }, Em = t10._ArgMin = function() { + return (Em = t10._ArgMin = t10.asm.ArgMin).apply(null, arguments); + }, $m = t10._Asin = function() { + return ($m = t10._Asin = t10.asm.Asin).apply(null, arguments); + }, Py = t10._Asinh = function() { + return (Py = t10._Asinh = t10.asm.Asinh).apply(null, arguments); + }, Oy = t10._Atan = function() { + return (Oy = t10._Atan = t10.asm.Atan).apply(null, arguments); + }, My = t10._Atan2 = function() { + return (My = t10._Atan2 = t10.asm.Atan2).apply(null, arguments); + }, il = t10._Atanh = function() { + return (il = t10._Atanh = t10.asm.Atanh).apply(null, arguments); + }, Ly = t10._AvgPool = function() { + return (Ly = t10._AvgPool = t10.asm.AvgPool).apply(null, arguments); + }, By = t10._AvgPool3D = function() { + return (By = t10._AvgPool3D = t10.asm.AvgPool3D).apply(null, arguments); + }, zy = t10._AvgPool3DGrad = function() { + return (zy = t10._AvgPool3DGrad = t10.asm.AvgPool3DGrad).apply(null, arguments); + }, Nu = t10._AvgPoolGrad = function() { + return (Nu = t10._AvgPoolGrad = t10.asm.AvgPoolGrad).apply(null, arguments); + }, Vy = t10._BatchMatMul = function() { + return (Vy = t10._BatchMatMul = t10.asm.BatchMatMul).apply(null, arguments); + }, Wy = t10._Bincount = function() { + return (Wy = t10._Bincount = t10.asm.Bincount).apply(null, arguments); + }, Rm = t10._BitwiseAnd = function() { + return (Rm = t10._BitwiseAnd = t10.asm.BitwiseAnd).apply(null, arguments); + }, Uy = t10._Ceil = function() { + return (Uy = t10._Ceil = t10.asm.Ceil).apply(null, arguments); + }, ul = t10._ClipByValue = function() { + return (ul = t10._ClipByValue = t10.asm.ClipByValue).apply(null, arguments); + }, Gy = t10._Conv2D = function() { + return (Gy = t10._Conv2D = t10.asm.Conv2D).apply(null, arguments); + }, Hy = t10._Conv2DBackpropInput = function() { + return (Hy = t10._Conv2DBackpropInput = t10.asm.Conv2DBackpropInput).apply(null, arguments); + }, Ky = t10._Conv3D = function() { + return (Ky = t10._Conv3D = t10.asm.Conv3D).apply(null, arguments); + }, Ni = t10._Conv3DBackpropFilterV2 = function() { + return (Ni = t10._Conv3DBackpropFilterV2 = t10.asm.Conv3DBackpropFilterV2).apply(null, arguments); + }, pl = t10._Conv3DBackpropInputV2 = function() { + return (pl = t10._Conv3DBackpropInputV2 = t10.asm.Conv3DBackpropInputV2).apply(null, arguments); + }, qy = t10._Cos = function() { + return (qy = t10._Cos = t10.asm.Cos).apply(null, arguments); + }, jy = t10._Cosh = function() { + return (jy = t10._Cosh = t10.asm.Cosh).apply(null, arguments); + }, Xy = t10._CropAndResize = function() { + return (Xy = t10._CropAndResize = t10.asm.CropAndResize).apply(null, arguments); + }, Yy = t10._Cumprod = function() { + return (Yy = t10._Cumprod = t10.asm.Cumprod).apply(null, arguments); + }, Dm = t10._Cumsum = function() { + return (Dm = t10._Cumsum = t10.asm.Cumsum).apply(null, arguments); + }, Am = t10._DenseBincount = function() { + return (Am = t10._DenseBincount = t10.asm.DenseBincount).apply(null, arguments); + }, Qy = t10._DepthToSpace = function() { + return (Qy = t10._DepthToSpace = t10.asm.DepthToSpace).apply(null, arguments); + }, Zy = t10._DepthwiseConv2dNative = function() { + return (Zy = t10._DepthwiseConv2dNative = t10.asm.DepthwiseConv2dNative).apply(null, arguments); + }, Fm = t10._Diag = function() { + return (Fm = t10._Diag = t10.asm.Diag).apply(null, arguments); + }, Pm = t10._Dilation2D = function() { + return (Pm = t10._Dilation2D = t10.asm.Dilation2D).apply(null, arguments); + }, Jy = t10._Dilation2DBackpropFilter = function() { + return (Jy = t10._Dilation2DBackpropFilter = t10.asm.Dilation2DBackpropFilter).apply(null, arguments); + }, eb = t10._Dilation2DBackpropInput = function() { + return (eb = t10._Dilation2DBackpropInput = t10.asm.Dilation2DBackpropInput).apply(null, arguments); + }, tb = t10._Elu = function() { + return (tb = t10._Elu = t10.asm.Elu).apply(null, arguments); + }, rb = t10._EluGrad = function() { + return (rb = t10._EluGrad = t10.asm.EluGrad).apply(null, arguments); + }, Om = t10._Equal = function() { + return (Om = t10._Equal = t10.asm.Equal).apply(null, arguments); + }, g0 = t10._Erf = function() { + return (g0 = t10._Erf = t10.asm.Erf).apply(null, arguments); + }, ob = t10._Exp = function() { + return (ob = t10._Exp = t10.asm.Exp).apply(null, arguments); + }, nb = t10._Expm1 = function() { + return (nb = t10._Expm1 = t10.asm.Expm1).apply(null, arguments); + }, sb = t10._FlipLeftRight = function() { + return (sb = t10._FlipLeftRight = t10.asm.FlipLeftRight).apply(null, arguments); + }, ab = t10._Floor = function() { + return (ab = t10._Floor = t10.asm.Floor).apply(null, arguments); + }, ib = t10._FloorDiv = function() { + return (ib = t10._FloorDiv = t10.asm.FloorDiv).apply(null, arguments); + }, ub = t10._FusedBatchNorm = function() { + return (ub = t10._FusedBatchNorm = t10.asm.FusedBatchNorm).apply(null, arguments); + }, pb = t10._FusedConv2D = function() { + return (pb = t10._FusedConv2D = t10.asm.FusedConv2D).apply(null, arguments); + }, cb = t10._FusedDepthwiseConv2D = function() { + return (cb = t10._FusedDepthwiseConv2D = t10.asm.FusedDepthwiseConv2D).apply(null, arguments); + }, lb = t10._Gather = function() { + return (lb = t10._Gather = t10.asm.Gather).apply(null, arguments); + }, mb = t10._GatherNd = function() { + return (mb = t10._GatherNd = t10.asm.GatherNd).apply(null, arguments); + }, db = t10._Greater = function() { + return (db = t10._Greater = t10.asm.Greater).apply(null, arguments); + }, fb = t10._GreaterEqual = function() { + return (fb = t10._GreaterEqual = t10.asm.GreaterEqual).apply(null, arguments); + }, hb = t10._IsFinite = function() { + return (hb = t10._IsFinite = t10.asm.IsFinite).apply(null, arguments); + }, gb = t10._IsInf = function() { + return (gb = t10._IsInf = t10.asm.IsInf).apply(null, arguments); + }, xb = t10._IsNan = function() { + return (xb = t10._IsNan = t10.asm.IsNan).apply(null, arguments); + }, yb = t10._LRN = function() { + return (yb = t10._LRN = t10.asm.LRN).apply(null, arguments); + }, bb = t10._LRNGrad = function() { + return (bb = t10._LRNGrad = t10.asm.LRNGrad).apply(null, arguments); + }, Cb = t10._LeakyRelu = function() { + return (Cb = t10._LeakyRelu = t10.asm.LeakyRelu).apply(null, arguments); + }, wb = t10._Less = function() { + return (wb = t10._Less = t10.asm.Less).apply(null, arguments); + }, Sb = t10._LessEqual = function() { + return (Sb = t10._LessEqual = t10.asm.LessEqual).apply(null, arguments); + }, Ib = t10._LinSpace = function() { + return (Ib = t10._LinSpace = t10.asm.LinSpace).apply(null, arguments); + }, vb = t10._Log = function() { + return (vb = t10._Log = t10.asm.Log).apply(null, arguments); + }, kb = t10._Log1p = function() { + return (kb = t10._Log1p = t10.asm.Log1p).apply(null, arguments); + }, Nb = t10._LogicalAnd = function() { + return (Nb = t10._LogicalAnd = t10.asm.LogicalAnd).apply(null, arguments); + }, Tb = t10._LogicalNot = function() { + return (Tb = t10._LogicalNot = t10.asm.LogicalNot).apply(null, arguments); + }, _b = t10._LogicalOr = function() { + return (_b = t10._LogicalOr = t10.asm.LogicalOr).apply(null, arguments); + }, Eb = t10._LogicalXor = function() { + return (Eb = t10._LogicalXor = t10.asm.LogicalXor).apply(null, arguments); + }, $b = t10._Max = function() { + return ($b = t10._Max = t10.asm.Max).apply(null, arguments); + }, Rb = t10._MaxPool = function() { + return (Rb = t10._MaxPool = t10.asm.MaxPool).apply(null, arguments); + }, Db = t10._MaxPool3D = function() { + return (Db = t10._MaxPool3D = t10.asm.MaxPool3D).apply(null, arguments); + }, Ab = t10._MaxPool3DGrad = function() { + return (Ab = t10._MaxPool3DGrad = t10.asm.MaxPool3DGrad).apply(null, arguments); + }, Fb = t10._MaxPoolGrad = function() { + return (Fb = t10._MaxPoolGrad = t10.asm.MaxPoolGrad).apply(null, arguments); + }, Pb = t10._MaxPoolWithArgmax = function() { + return (Pb = t10._MaxPoolWithArgmax = t10.asm.MaxPoolWithArgmax).apply(null, arguments); + }, Ob = t10._Maximum = function() { + return (Ob = t10._Maximum = t10.asm.Maximum).apply(null, arguments); + }, Mb = t10._Mean = function() { + return (Mb = t10._Mean = t10.asm.Mean).apply(null, arguments); + }, Lb = t10._Min = function() { + return (Lb = t10._Min = t10.asm.Min).apply(null, arguments); + }, Bb = t10._Minimum = function() { + return (Bb = t10._Minimum = t10.asm.Minimum).apply(null, arguments); + }, zb = t10._MirrorPad = function() { + return (zb = t10._MirrorPad = t10.asm.MirrorPad).apply(null, arguments); + }, Vb = t10._Mod = function() { + return (Vb = t10._Mod = t10.asm.Mod).apply(null, arguments); + }, Wb = t10._Multinomial = function() { + return (Wb = t10._Multinomial = t10.asm.Multinomial).apply(null, arguments); + }, Ub = t10._Multiply = function() { + return (Ub = t10._Multiply = t10.asm.Multiply).apply(null, arguments); + }, Gb = t10._Neg = function() { + return (Gb = t10._Neg = t10.asm.Neg).apply(null, arguments); + }, Hb = t10._NonMaxSuppressionV3 = function() { + return (Hb = t10._NonMaxSuppressionV3 = t10.asm.NonMaxSuppressionV3).apply(null, arguments); + }, Kb = t10._NonMaxSuppressionV4 = function() { + return (Kb = t10._NonMaxSuppressionV4 = t10.asm.NonMaxSuppressionV4).apply(null, arguments); + }, qb = t10._NonMaxSuppressionV5 = function() { + return (qb = t10._NonMaxSuppressionV5 = t10.asm.NonMaxSuppressionV5).apply(null, arguments); + }, jb = t10._NotEqual = function() { + return (jb = t10._NotEqual = t10.asm.NotEqual).apply(null, arguments); + }, Xb = t10._OneHot = function() { + return (Xb = t10._OneHot = t10.asm.OneHot).apply(null, arguments); + }, Yb = t10._PadV2 = function() { + return (Yb = t10._PadV2 = t10.asm.PadV2).apply(null, arguments); + }, Qb = t10._Pow = function() { + return (Qb = t10._Pow = t10.asm.Pow).apply(null, arguments); + }, Zb = t10._Prelu = function() { + return (Zb = t10._Prelu = t10.asm.Prelu).apply(null, arguments); + }, Jb = t10._Prod = function() { + return (Jb = t10._Prod = t10.asm.Prod).apply(null, arguments); + }, eC = t10._RealDiv = function() { + return (eC = t10._RealDiv = t10.asm.RealDiv).apply(null, arguments); + }, tC = t10._Reciprocal = function() { + return (tC = t10._Reciprocal = t10.asm.Reciprocal).apply(null, arguments); + }, rC = t10._Relu = function() { + return (rC = t10._Relu = t10.asm.Relu).apply(null, arguments); + }, oC = t10._Relu6 = function() { + return (oC = t10._Relu6 = t10.asm.Relu6).apply(null, arguments); + }, nC = t10._ResizeBilinear = function() { + return (nC = t10._ResizeBilinear = t10.asm.ResizeBilinear).apply(null, arguments); + }, sC = t10._ResizeBilinearGrad = function() { + return (sC = t10._ResizeBilinearGrad = t10.asm.ResizeBilinearGrad).apply(null, arguments); + }, aC = t10._ResizeNearestNeighbor = function() { + return (aC = t10._ResizeNearestNeighbor = t10.asm.ResizeNearestNeighbor).apply(null, arguments); + }, iC = t10._ResizeNearestNeighborGrad = function() { + return (iC = t10._ResizeNearestNeighborGrad = t10.asm.ResizeNearestNeighborGrad).apply(null, arguments); + }, uC = t10._Reverse = function() { + return (uC = t10._Reverse = t10.asm.Reverse).apply(null, arguments); + }, pC = t10._RotateWithOffset = function() { + return (pC = t10._RotateWithOffset = t10.asm.RotateWithOffset).apply(null, arguments); + }, cC = t10._Round = function() { + return (cC = t10._Round = t10.asm.Round).apply(null, arguments); + }, lC = t10._Rsqrt = function() { + return (lC = t10._Rsqrt = t10.asm.Rsqrt).apply(null, arguments); + }, mC = t10._ScatterNd = function() { + return (mC = t10._ScatterNd = t10.asm.ScatterNd).apply(null, arguments); + }, dC = t10._SearchSorted = function() { + return (dC = t10._SearchSorted = t10.asm.SearchSorted).apply(null, arguments); + }, fC = t10._SelectV2 = function() { + return (fC = t10._SelectV2 = t10.asm.SelectV2).apply(null, arguments); + }, hC = t10._Selu = function() { + return (hC = t10._Selu = t10.asm.Selu).apply(null, arguments); + }, gC = t10._Sigmoid = function() { + return (gC = t10._Sigmoid = t10.asm.Sigmoid).apply(null, arguments); + }, xC = t10._Sign = function() { + return (xC = t10._Sign = t10.asm.Sign).apply(null, arguments); + }, yC = t10._Sin = function() { + return (yC = t10._Sin = t10.asm.Sin).apply(null, arguments); + }, bC = t10._Sinh = function() { + return (bC = t10._Sinh = t10.asm.Sinh).apply(null, arguments); + }, CC = t10._Softmax = function() { + return (CC = t10._Softmax = t10.asm.Softmax).apply(null, arguments); + }, wC = t10._Softplus = function() { + return (wC = t10._Softplus = t10.asm.Softplus).apply(null, arguments); + }, SC = t10._SparseFillEmptyRows = function() { + return (SC = t10._SparseFillEmptyRows = t10.asm.SparseFillEmptyRows).apply(null, arguments); + }, IC = t10._SparseReshape = function() { + return (IC = t10._SparseReshape = t10.asm.SparseReshape).apply(null, arguments); + }, vC = t10._SparseSegmentReduction = function() { + return (vC = t10._SparseSegmentReduction = t10.asm.SparseSegmentReduction).apply(null, arguments); + }, kC = t10._SparseToDense = function() { + return (kC = t10._SparseToDense = t10.asm.SparseToDense).apply(null, arguments); + }, NC = t10._Sqrt = function() { + return (NC = t10._Sqrt = t10.asm.Sqrt).apply(null, arguments); + }, TC = t10._Square = function() { + return (TC = t10._Square = t10.asm.Square).apply(null, arguments); + }, _C = t10._SquaredDifference = function() { + return (_C = t10._SquaredDifference = t10.asm.SquaredDifference).apply(null, arguments); + }, EC = t10._Step = function() { + return (EC = t10._Step = t10.asm.Step).apply(null, arguments); + }, $C = t10._StridedSlice = function() { + return ($C = t10._StridedSlice = t10.asm.StridedSlice).apply(null, arguments); + }, RC = t10._Sub = function() { + return (RC = t10._Sub = t10.asm.Sub).apply(null, arguments); + }, DC = t10._Sum = function() { + return (DC = t10._Sum = t10.asm.Sum).apply(null, arguments); + }, AC = t10._Tan = function() { + return (AC = t10._Tan = t10.asm.Tan).apply(null, arguments); + }, FC = t10._Tanh = function() { + return (FC = t10._Tanh = t10.asm.Tanh).apply(null, arguments); + }, PC = t10._TensorScatterUpdate = function() { + return (PC = t10._TensorScatterUpdate = t10.asm.TensorScatterUpdate).apply(null, arguments); + }, OC = t10._Tile = function() { + return (OC = t10._Tile = t10.asm.Tile).apply(null, arguments); + }, MC = t10._TopK = function() { + return (MC = t10._TopK = t10.asm.TopK).apply(null, arguments); + }, LC = t10._Transform = function() { + return (LC = t10._Transform = t10.asm.Transform).apply(null, arguments); + }, BC = t10._Transpose = function() { + return (BC = t10._Transpose = t10.asm.Transpose).apply(null, arguments); + }, zC = t10.__FusedMatMul = function() { + return (zC = t10.__FusedMatMul = t10.asm._FusedMatMul).apply(null, arguments); + }, VC = t10._malloc = function() { + return (VC = t10._malloc = t10.asm.malloc).apply(null, arguments); + }, WC = t10._free = function() { + return (WC = t10._free = t10.asm.free).apply(null, arguments); + }, UC = t10.___errno_location = function() { + return (UC = t10.___errno_location = t10.asm.__errno_location).apply(null, arguments); + }, Mm = t10.stackSave = function() { + return (Mm = t10.stackSave = t10.asm.stackSave).apply(null, arguments); + }, Lm = t10.stackRestore = function() { + return (Lm = t10.stackRestore = t10.asm.stackRestore).apply(null, arguments); + }, cl = t10.stackAlloc = function() { + return (cl = t10.stackAlloc = t10.asm.stackAlloc).apply(null, arguments); + }, GC = t10.dynCall_iijjiiii = function() { + return (GC = t10.dynCall_iijjiiii = t10.asm.dynCall_iijjiiii).apply(null, arguments); + }, HC = t10.dynCall_jiji = function() { + return (HC = t10.dynCall_jiji = t10.asm.dynCall_jiji).apply(null, arguments); }; - t10.cwrap = Ly; - var Wp; - ir = function K() { - Wp || Xm(), Wp || (ir = K); + t10.cwrap = ky; + var Op; + nr = function K() { + Op || Bm(), Op || (nr = K); }; - function Xm(K) { - if (K = K || i, Et > 0 || (gt(), Et > 0)) + function Bm(K) { + if (K = K || i, Tt > 0 || (ht(), Tt > 0)) return; function ae() { - Wp || (Wp = true, t10.calledRun = true, !M && (xt(), o(t10), t10.onRuntimeInitialized && t10.onRuntimeInitialized(), Ur())); + Op || (Op = true, t10.calledRun = true, !M && (gt(), o(t10), t10.onRuntimeInitialized && t10.onRuntimeInitialized(), Lr())); } t10.setStatus ? (t10.setStatus("Running..."), setTimeout(function() { setTimeout(function() { @@ -2916,26 +2916,26 @@ var Ez = jt((ex, sv) => { if (t10.preInit) for (typeof t10.preInit == "function" && (t10.preInit = [t10.preInit]); t10.preInit.length > 0; ) t10.preInit.pop()(); - Xm(); - var Up; - s && (Up = { uncaughtException: process.listeners("uncaughtException").filter(function(K) { + Bm(); + var Mp; + s && (Mp = { uncaughtException: process.listeners("uncaughtException").filter(function(K) { return !s.uncaughtException.indexOf(K) > -1; }), unhandledRejection: process.listeners("unhandledRejection").filter(function(K) { return !s.unhandledRejection.indexOf(K) > -1; }) }); - var Gp; + var Lp; if (typeof e != "undefined") - Gp = e; + Lp = e; else if (typeof WasmBackendModuleThreadedSimd != "undefined") - Gp = WasmBackendModuleThreadedSimd; + Lp = WasmBackendModuleThreadedSimd; else throw new Error("Could not find wasm module in post.js"); - if (Up) { - var sw = Gp._dispose; - Gp._dispose = function() { - sw(), Up.uncaughtException.forEach(function(K) { + if (Mp) { + var KC = Lp._dispose; + Lp._dispose = function() { + KC(), Mp.uncaughtException.forEach(function(K) { process.removeListener("uncaughtException", K); - }), Up.unhandledRejection.forEach(function(K) { + }), Mp.unhandledRejection.forEach(function(K) { process.removeListener("unhandledRejection", K); }); }; @@ -2943,11 +2943,11 @@ var Ez = jt((ex, sv) => { return e.ready; }; })(); - typeof ex == "object" && typeof sv == "object" ? sv.exports = nv : typeof define == "function" && define.amd ? define([], function() { - return nv; - }) : typeof ex == "object" && (ex.WasmBackendModule = nv); + typeof Ug == "object" && typeof Kv == "object" ? Kv.exports = Hv : typeof define == "function" && define.amd ? define([], function() { + return Hv; + }) : typeof Ug == "object" && (Ug.WasmBackendModule = Hv); }); -var mn = class { +var Bo = class { constructor(e, t10) { this.backend = e, this.dataMover = t10, this.data = /* @__PURE__ */ new WeakMap(), this.dataIdsCount = 0; } @@ -2967,172 +2967,172 @@ var mn = class { return this.dataIdsCount; } }; -var mo = class { +var ao = class { refCount(e) { - return Hr("refCount"); + return zr("refCount"); } incRef(e) { - return Hr("incRef"); + return zr("incRef"); } timerAvailable() { return true; } time(e) { - return Hr("time"); + return zr("time"); } read(e) { - return Hr("read"); + return zr("read"); } readSync(e) { - return Hr("readSync"); + return zr("readSync"); } readToGPU(e, t10) { - return Hr("readToGPU"); + return zr("readToGPU"); } numDataIds() { - return Hr("numDataIds"); + return zr("numDataIds"); } disposeData(e, t10) { - return Hr("disposeData"); + return zr("disposeData"); } write(e, t10, o) { - return Hr("write"); + return zr("write"); } move(e, t10, o, n, s) { - return Hr("move"); + return zr("move"); } createTensorFromGPUData(e, t10, o) { - return Hr("createTensorFromGPUData"); + return zr("createTensorFromGPUData"); } memory() { - return Hr("memory"); + return zr("memory"); } floatPrecision() { - return Hr("floatPrecision"); + return zr("floatPrecision"); } epsilon() { return this.floatPrecision() === 32 ? 1e-7 : 1e-4; } dispose() { - return Hr("dispose"); + return zr("dispose"); } }; -function Hr(r16) { - throw new Error(`'${r16}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); +function zr(r15) { + throw new Error(`'${r15}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`); } -function lk(r16) { - let e = r16.length, t10 = 0; +function k0(r15) { + let e = r15.length, t10 = 0; for (; e > 0; ) - t10 = Math.random() * e | 0, e--, nd(r16, e, t10); + t10 = Math.random() * e | 0, e--, jm(r15, e, t10); } -function J4(r16, e) { - if (r16.length !== e.length) - throw new Error(`Array sizes must match to be shuffled together First array length was ${r16.length}Second array length was ${e.length}`); - let t10 = r16.length, o = 0; +function FG(r15, e) { + if (r15.length !== e.length) + throw new Error(`Array sizes must match to be shuffled together First array length was ${r15.length}Second array length was ${e.length}`); + let t10 = r15.length, o = 0; for (; t10 > 0; ) - o = Math.random() * t10 | 0, t10--, nd(r16, t10, o), nd(e, t10, o); + o = Math.random() * t10 | 0, t10--, jm(r15, t10, o), jm(e, t10, o); } -function qp(r16, e, t10) { - return Math.max(r16, Math.min(e, t10)); +function Vp(r15, e, t10) { + return Math.max(r15, Math.min(e, t10)); } -function eH(r16) { - return r16 % 2 === 0 ? r16 : r16 + 1; +function PG(r15) { + return r15 % 2 === 0 ? r15 : r15 + 1; } -function nd(r16, e, t10) { - let o = r16[e]; - r16[e] = r16[t10], r16[t10] = o; +function jm(r15, e, t10) { + let o = r15[e]; + r15[e] = r15[t10], r15[t10] = o; } -function tH(r16) { +function OG(r15) { let e = 0; - for (let t10 = 0; t10 < r16.length; t10++) - e += r16[t10]; + for (let t10 = 0; t10 < r15.length; t10++) + e += r15[t10]; return e; } -function rH(r16, e) { +function MG(r15, e) { let t10 = Math.random(); - return e * t10 + (1 - t10) * r16; + return e * t10 + (1 - t10) * r15; } -function oH(r16, e) { +function LG(r15, e) { let t10 = 0; - for (let o = 0; o < r16.length; o++) { - let n = Number(r16[o]) - Number(e[o]); + for (let o = 0; o < r15.length; o++) { + let n = Number(r15[o]) - Number(e[o]); t10 += n * n; } return t10; } -function $(r16, e) { - if (!r16) +function E(r15, e) { + if (!r15) throw new Error(typeof e == "string" ? e : e()); } -function yt(r16, e, t10 = "") { - $(Sr(r16, e), () => t10 + ` Shapes ${r16} and ${e} must match`); +function xt(r15, e, t10 = "") { + E(br(r15, e), () => t10 + ` Shapes ${r15} and ${e} must match`); } -function fo(r16) { - $(r16 != null, () => "The input to the tensor constructor must be a non-null value."); +function io(r15) { + E(r15 != null, () => "The input to the tensor constructor must be a non-null value."); } -function ze(r16) { - if (r16.length === 0) +function ze(r15) { + if (r15.length === 0) return 1; - let e = r16[0]; - for (let t10 = 1; t10 < r16.length; t10++) - e *= r16[t10]; + let e = r15[0]; + for (let t10 = 1; t10 < r15.length; t10++) + e *= r15[t10]; return e; } -function nH(r16) { - return r16.length === 0; +function BG(r15) { + return r15.length === 0; } -function cw(r16, e) { - if (r16 === e) +function ZC(r15, e) { + if (r15 === e) return true; - if (r16 == null || e == null || r16.length !== e.length) + if (r15 == null || e == null || r15.length !== e.length) return false; - for (let t10 = 0; t10 < r16.length; t10++) - if (r16[t10] !== null && e[t10] !== null && r16[t10] !== e[t10]) + for (let t10 = 0; t10 < r15.length; t10++) + if (r15[t10] !== null && e[t10] !== null && r15[t10] !== e[t10]) return false; return true; } -function Sr(r16, e) { - if (r16 === e) +function br(r15, e) { + if (r15 === e) return true; - if (r16 == null || e == null || r16.length !== e.length) + if (r15 == null || e == null || r15.length !== e.length) return false; - for (let t10 = 0; t10 < r16.length; t10++) - if (r16[t10] !== e[t10]) + for (let t10 = 0; t10 < r15.length; t10++) + if (r15[t10] !== e[t10]) return false; return true; } -function Ja(r16) { - return r16 % 1 === 0; +function Ka(r15) { + return r15 % 1 === 0; } -function sH(r16) { +function zG(r15) { if (Math.tanh != null) - return Math.tanh(r16); - if (r16 === 1 / 0) + return Math.tanh(r15); + if (r15 === 1 / 0) return 1; - if (r16 === -1 / 0) + if (r15 === -1 / 0) return -1; { - let e = Math.exp(2 * r16); + let e = Math.exp(2 * r15); return (e - 1) / (e + 1); } } -function aH(r16) { - let e = Math.ceil(Math.sqrt(r16)); - return [e, Math.ceil(r16 / e)]; +function VG(r15) { + let e = Math.ceil(Math.sqrt(r15)); + return [e, Math.ceil(r15 / e)]; } -function iH(r16) { - let e = new Uint32Array(r16); - for (let t10 = 0; t10 < r16; ++t10) +function WG(r15) { + let e = new Uint32Array(r15); + for (let t10 = 0; t10 < r15; ++t10) e[t10] = t10; - return lk(e), e; + return k0(e), e; } -function Pu(r16, e) { - return e <= r16.length ? r16 : r16 + " ".repeat(e - r16.length); +function _u(r15, e) { + return e <= r15.length ? r15 : r15 + " ".repeat(e - r15.length); } -function uH(r16, e = (n) => 0, t10, o) { +function UG(r15, e = (n) => 0, t10, o) { return new Promise((n, s) => { let a = 0, i = () => { - if (r16()) { + if (r15()) { n(); return; } @@ -3147,212 +3147,212 @@ function uH(r16, e = (n) => 0, t10, o) { i(); }); } -function pH(r16, e) { +function GG(r15, e) { let t10 = 1, o = -1; - for (let s = 0; s < r16.length; ++s) - if (r16[s] >= 0) - t10 *= r16[s]; - else if (r16[s] === -1) { + for (let s = 0; s < r15.length; ++s) + if (r15[s] >= 0) + t10 *= r15[s]; + else if (r15[s] === -1) { if (o !== -1) throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`); o = s; - } else if (r16[s] < 0) - throw Error(`Shapes can not be < 0. Found ${r16[s]} at dim ${s}`); + } else if (r15[s] < 0) + throw Error(`Shapes can not be < 0. Found ${r15[s]} at dim ${s}`); if (o === -1) { if (e > 0 && e !== t10) - throw Error(`Size(${e}) must match the product of shape ${r16}`); - return r16; + throw Error(`Size(${e}) must match the product of shape ${r15}`); + return r15; } if (t10 === 0) - throw Error(`Cannot infer the missing size in [${r16}] when there are 0 elements`); + throw Error(`Cannot infer the missing size in [${r15}] when there are 0 elements`); if (e % t10 !== 0) throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t10}`); - let n = r16.slice(); + let n = r15.slice(); return n[o] = e / t10, n; } -function Li(r16, e) { +function _i(r15, e) { let t10 = e.length; - return r16 = r16 == null ? e.map((o, n) => n) : [].concat(r16), $(r16.every((o) => o >= -t10 && o < t10), () => `All values in axis param must be in range [-${t10}, ${t10}) but got axis ${r16}`), $(r16.every((o) => Ja(o)), () => `All values in axis param must be integers but got axis ${r16}`), r16.map((o) => o < 0 ? t10 + o : o); + return r15 = r15 == null ? e.map((o, n) => n) : [].concat(r15), E(r15.every((o) => o >= -t10 && o < t10), () => `All values in axis param must be in range [-${t10}, ${t10}) but got axis ${r15}`), E(r15.every((o) => Ka(o)), () => `All values in axis param must be integers but got axis ${r15}`), r15.map((o) => o < 0 ? t10 + o : o); } -function mw(r16, e) { - let t10 = [], o = [], n = e != null && Array.isArray(e) && e.length === 0, s = e == null || n ? null : Li(e, r16).sort(), a = 0; - for (let i = 0; i < r16.length; ++i) { +function JC(r15, e) { + let t10 = [], o = [], n = e != null && Array.isArray(e) && e.length === 0, s = e == null || n ? null : _i(e, r15).sort(), a = 0; + for (let i = 0; i < r15.length; ++i) { if (s != null) { - if (s[a] === i && r16[i] !== 1) - throw new Error(`Can't squeeze axis ${i} since its dim '${r16[i]}' is not 1`); - (s[a] == null || s[a] > i) && r16[i] === 1 && (t10.push(r16[i]), o.push(i)), s[a] <= i && a++; + if (s[a] === i && r15[i] !== 1) + throw new Error(`Can't squeeze axis ${i} since its dim '${r15[i]}' is not 1`); + (s[a] == null || s[a] > i) && r15[i] === 1 && (t10.push(r15[i]), o.push(i)), s[a] <= i && a++; } - r16[i] !== 1 && (t10.push(r16[i]), o.push(i)); + r15[i] !== 1 && (t10.push(r15[i]), o.push(i)); } return { newShape: t10, keptDims: o }; } -function dw(r16, e) { - return sd(r16, e); +function ew(r15, e) { + return Xm(r15, e); } -function sd(r16, e) { +function Xm(r15, e) { let t10 = null; - if (r16 == null || r16 === "float32") + if (r15 == null || r15 === "float32") t10 = new Float32Array(e); - else if (r16 === "int32") + else if (r15 === "int32") t10 = new Int32Array(e); - else if (r16 === "bool") + else if (r15 === "bool") t10 = new Uint8Array(e); - else if (r16 === "string") + else if (r15 === "string") t10 = new Array(e); else - throw new Error(`Unknown data type ${r16}`); + throw new Error(`Unknown data type ${r15}`); return t10; } -function fw(r16, e) { - for (let t10 = 0; t10 < r16.length; t10++) { - let o = r16[t10]; +function tw(r15, e) { + for (let t10 = 0; t10 < r15.length; t10++) { + let o = r15[t10]; if (isNaN(o) || !isFinite(o)) throw Error(`A tensor of type ${e} being uploaded contains ${o}.`); } } -function hw(r16) { - return r16 === "bool" || r16 === "complex64" || r16 === "float32" || r16 === "int32" || r16 === "string"; +function rw(r15) { + return r15 === "bool" || r15 === "complex64" || r15 === "float32" || r15 === "int32" || r15 === "string"; } -function lH(r16, e) { - return !(e === "complex64" || e === "float32" && r16 !== "complex64" || e === "int32" && r16 !== "float32" && r16 !== "complex64" || e === "bool" && r16 === "bool"); +function HG(r15, e) { + return !(e === "complex64" || e === "float32" && r15 !== "complex64" || e === "int32" && r15 !== "float32" && r15 !== "complex64" || e === "bool" && r15 === "bool"); } -function jp(r16) { - if (r16 === "float32" || r16 === "int32") +function Wp(r15) { + if (r15 === "float32" || r15 === "int32") return 4; - if (r16 === "complex64") + if (r15 === "complex64") return 8; - if (r16 === "bool") + if (r15 === "bool") return 1; - throw new Error(`Unknown dtype ${r16}`); + throw new Error(`Unknown dtype ${r15}`); } -function gw(r16) { - if (r16 == null) +function ow(r15) { + if (r15 == null) return 0; let e = 0; - return r16.forEach((t10) => e += t10.length), e; + return r15.forEach((t10) => e += t10.length), e; } -function dn(r16) { - return typeof r16 == "string" || r16 instanceof String; +function zo(r15) { + return typeof r15 == "string" || r15 instanceof String; } -function ck(r16) { - return typeof r16 == "boolean"; +function N0(r15) { + return typeof r15 == "boolean"; } -function mk(r16) { - return typeof r16 == "number"; +function T0(r15) { + return typeof r15 == "number"; } -function Bi(r16) { - return Array.isArray(r16) ? Bi(r16[0]) : r16 instanceof Float32Array ? "float32" : r16 instanceof Int32Array || r16 instanceof Uint8Array || r16 instanceof Uint8ClampedArray ? "int32" : mk(r16) ? "float32" : dn(r16) ? "string" : ck(r16) ? "bool" : "float32"; +function Ei(r15) { + return Array.isArray(r15) ? Ei(r15[0]) : r15 instanceof Float32Array ? "float32" : r15 instanceof Int32Array || r15 instanceof Uint8Array || r15 instanceof Uint8ClampedArray ? "int32" : T0(r15) ? "float32" : zo(r15) ? "string" : N0(r15) ? "bool" : "float32"; } -function ra(r16) { - return !!(r16 && r16.constructor && r16.call && r16.apply); +function qs(r15) { + return !!(r15 && r15.constructor && r15.call && r15.apply); } -function Xp(r16, e) { - for (let t10 = e; t10 < r16; ++t10) - if (r16 % t10 === 0) +function Up(r15, e) { + for (let t10 = e; t10 < r15; ++t10) + if (r15 % t10 === 0) return t10; - return r16; + return r15; } -function oa(r16) { - let e = r16.length; +function js(r15) { + let e = r15.length; if (e < 2) return []; let t10 = new Array(e - 1); - t10[e - 2] = r16[e - 1]; + t10[e - 2] = r15[e - 1]; for (let o = e - 3; o >= 0; --o) - t10[o] = t10[o + 1] * r16[o + 1]; + t10[o] = t10[o + 1] * r15[o + 1]; return t10; } -function dk(r16, e, t10, o = false) { +function _0(r15, e, t10, o = false) { let n = new Array(); if (e.length === 1) { let s = e[0] * (o ? 2 : 1); for (let a = 0; a < s; a++) - n[a] = t10[r16 + a]; + n[a] = t10[r15 + a]; } else { let s = e[0], a = e.slice(1), i = a.reduce((p, u) => p * u) * (o ? 2 : 1); for (let p = 0; p < s; p++) - n[p] = dk(r16 + p * i, a, t10, o); + n[p] = _0(r15 + p * i, a, t10, o); } return n; } -function Fu(r16, e, t10 = false) { - if (r16.length === 0) +function Tu(r15, e, t10 = false) { + if (r15.length === 0) return e[0]; - let o = r16.reduce((n, s) => n * s) * (t10 ? 2 : 1); + let o = r15.reduce((n, s) => n * s) * (t10 ? 2 : 1); if (o === 0) return []; if (o !== e.length) - throw new Error(`[${r16}] does not match the input size ${e.length}${t10 ? " for a complex tensor" : ""}.`); - return dk(0, r16, e, t10); + throw new Error(`[${r15}] does not match the input size ${e.length}${t10 ? " for a complex tensor" : ""}.`); + return _0(0, r15, e, t10); } -function cH(r16, e) { - if (Array.isArray(r16)) - return r16; +function KG(r15, e) { + if (Array.isArray(r15)) + return r15; if (e === "float32") - return r16 instanceof Float32Array ? r16 : new Float32Array(r16); + return r15 instanceof Float32Array ? r15 : new Float32Array(r15); if (e === "int32") - return r16 instanceof Int32Array ? r16 : new Int32Array(r16); + return r15 instanceof Int32Array ? r15 : new Int32Array(r15); if (e === "bool" || e === "string") - return Uint8Array.from(new Int32Array(r16)); + return Uint8Array.from(new Int32Array(r15)); throw new Error(`Unknown dtype ${e}`); } -function bc(r16, e) { - let t10 = Yp(r16, e); +function ml(r15, e) { + let t10 = Gp(r15, e); for (let o = 0; o < t10.length; o++) t10[o] = 1; return t10; } -function Yp(r16, e) { +function Gp(r15, e) { if (e == null || e === "float32" || e === "complex64") - return new Float32Array(r16); + return new Float32Array(r15); if (e === "int32") - return new Int32Array(r16); + return new Int32Array(r15); if (e === "bool") - return new Uint8Array(r16); + return new Uint8Array(r15); throw new Error(`Unknown data type ${e}`); } -function mH(r16, e) { - let t10 = r16.reduce((o, n) => o * n, 1); +function qG(r15, e) { + let t10 = r15.reduce((o, n) => o * n, 1); if (e == null || e === "float32") - return Fu(r16, new Float32Array(t10)); + return Tu(r15, new Float32Array(t10)); if (e === "int32") - return Fu(r16, new Int32Array(t10)); + return Tu(r15, new Int32Array(t10)); if (e === "bool") - return Fu(r16, new Uint8Array(t10)); + return Tu(r15, new Uint8Array(t10)); throw new Error(`Unknown data type ${e}`); } -function St(r16) { - r16.forEach((e) => { - $(Number.isInteger(e) && e >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r16}].`); +function Ct(r15) { + r15.forEach((e) => { + E(Number.isInteger(e) && e >= 0, () => `Tensor must have a shape comprised of positive integers but got shape [${r15}].`); }); } -function dH(r16, e, t10) { +function jG(r15, e, t10) { if (e === 0) return 0; if (e === 1) - return r16[0]; - let o = r16[r16.length - 1]; - for (let n = 0; n < r16.length - 1; ++n) - o += t10[n] * r16[n]; + return r15[0]; + let o = r15[r15.length - 1]; + for (let n = 0; n < r15.length - 1; ++n) + o += t10[n] * r15[n]; return o; } -function fH(r16, e, t10) { +function XG(r15, e, t10) { if (e === 0) return []; if (e === 1) - return [r16]; + return [r15]; let o = new Array(e); for (let n = 0; n < o.length - 1; ++n) - o[n] = Math.floor(r16 / t10[n]), r16 -= o[n] * t10[n]; - return o[o.length - 1] = r16, o; + o[n] = Math.floor(r15 / t10[n]), r15 -= o[n] * t10[n]; + return o[o.length - 1] = r15, o; } -function Ou(r16) { - return r16 && r16.then && typeof r16.then == "function"; +function Eu(r15) { + return r15 && r15.then && typeof r15.then == "function"; } -var fk = "tfjsflags"; -var Cc = class { +var E0 = "tfjsflags"; +var dl = class { constructor(e) { - this.global = e, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = gH, this.populateURLFlags(); + this.global = e, this.flags = {}, this.flagRegistry = {}, this.urlFlags = {}, this.getQueryParams = QG, this.populateURLFlags(); } setPlatform(e, t10) { this.platform != null && (A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)), this.platformName = e, this.platform = t10; @@ -3370,7 +3370,7 @@ var Cc = class { if (e in this.flags) return this.flags[e]; let t10 = this.evaluateFlag(e); - if (Ou(t10)) + if (Eu(t10)) throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`); return this.flags[e] = t10, this.flags[e]; } @@ -3409,450 +3409,450 @@ var Cc = class { if (typeof this.global == "undefined" || typeof this.global.location == "undefined" || typeof this.global.location.search == "undefined") return; let e = this.getQueryParams(this.global.location.search); - fk in e && e[fk].split(",").forEach((o) => { + E0 in e && e[E0].split(",").forEach((o) => { let [n, s] = o.split(":"); - this.urlFlags[n] = yH(n, s); + this.urlFlags[n] = JG(n, s); }); } }; -function gH(r16) { +function QG(r15) { let e = {}; - return r16.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (t10, ...o) => (xH(e, o[0], o[1]), o.join("="))), e; + return r15.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (t10, ...o) => (ZG(e, o[0], o[1]), o.join("="))), e; } -function xH(r16, e, t10) { - r16[decodeURIComponent(e)] = decodeURIComponent(t10 || ""); +function ZG(r15, e, t10) { + r15[decodeURIComponent(e)] = decodeURIComponent(t10 || ""); } -function yH(r16, e) { +function JG(r15, e) { let t10 = e.toLowerCase(); return t10 === "true" || t10 === "false" ? t10 === "true" : `${+t10}` === t10 ? +t10 : e; } function A() { - return xw; + return nw; } -var xw = null; -function hk(r16) { - xw = r16; +var nw = null; +function $0(r15) { + nw = r15; } -var yw; -function bw() { - if (yw == null) { - let r16; +var sw; +function aw() { + if (sw == null) { + let r15; if (typeof window != "undefined") - r16 = window; + r15 = window; else if (typeof global != "undefined") - r16 = global; + r15 = global; else if (typeof process != "undefined") - r16 = process; + r15 = process; else if (typeof self != "undefined") - r16 = self; + r15 = self; else throw new Error("Could not find a global object"); - yw = r16; + sw = r15; } - return yw; + return sw; } -function bH() { - let r16 = bw(); - return r16._tfGlobals == null && (r16._tfGlobals = /* @__PURE__ */ new Map()), r16._tfGlobals; +function e4() { + let r15 = aw(); + return r15._tfGlobals == null && (r15._tfGlobals = /* @__PURE__ */ new Map()), r15._tfGlobals; } -function wc(r16, e) { - let t10 = bH(); - if (t10.has(r16)) - return t10.get(r16); +function fl(r15, e) { + let t10 = e4(); + if (t10.has(r15)) + return t10.get(r15); { let o = e(); - return t10.set(r16, o), t10.get(r16); - } -} -var fn = "Abs"; -var hn = "Acos"; -var gn = "Acosh"; -var Rr = "Add"; -var xn = "AddN"; -var yn = "All"; -var bn = "Any"; -var na = "ArgMax"; -var sa = "ArgMin"; -var Cn = "Asin"; -var wn = "Asinh"; -var Sn = "Atan"; -var In = "Atanh"; -var vn = "Atan2"; -var kn = "AvgPool"; -var zi = "AvgPoolGrad"; -var aa = "AvgPool3D"; -var Vi = "AvgPool3DGrad"; -var Nn = "BatchMatMul"; -var ia = "BatchToSpaceND"; -var Tn = "Bincount"; -var _n = "BitwiseAnd"; -var Sme = "BroadcastTo"; -var ua = "BroadcastArgs"; -var ho = "Cast"; -var go = "Ceil"; -var Go = "ClipByValue"; -var ei = "Complex"; -var Wi = "ComplexAbs"; -var pa = "Concat"; -var En = "Conv2D"; -var Ui = "Conv2DBackpropFilter"; -var $n = "Conv2DBackpropInput"; -var Rn = "Conv3D"; -var ti = "Conv3DBackpropFilterV2"; -var Dn = "Conv3DBackpropInputV2"; -var An = "Cos"; -var Fn = "Cosh"; -var Pn = "Cumprod"; -var On = "Cumsum"; -var Mn = "CropAndResize"; -var la = "DenseBincount"; -var Ln = "DepthToSpace"; -var Bn = "DepthwiseConv2dNative"; -var Gi = "DepthwiseConv2dNativeBackpropFilter"; -var Hi = "DepthwiseConv2dNativeBackpropInput"; -var ca = "Diag"; -var zn = "Dilation2D"; -var Ki = "Dilation2DBackpropInput"; -var qi = "Dilation2DBackpropFilter"; -var Mu = "Draw"; -var Vn = "RealDiv"; -var ji = "Einsum"; -var Wn = "Elu"; -var ri = "EluGrad"; -var Un = "Erf"; -var xo = "Equal"; -var yo = "Exp"; -var ma = "ExpandDims"; -var bo = "Expm1"; -var Xi = "FFT"; -var da = "Fill"; -var Gn = "FlipLeftRight"; -var Co = "Floor"; -var wo = "FloorDiv"; -var Hn = "FusedBatchNorm"; -var fa = "GatherV2"; -var Kn = "GatherNd"; -var So = "Greater"; -var Io = "GreaterEqual"; -var vo = "Identity"; -var Yi = "IFFT"; -var Qi = "Imag"; -var qn = "IsFinite"; -var jn = "IsInf"; -var Xn = "IsNan"; -var Yn = "LeakyRelu"; -var ko = "Less"; -var No = "LessEqual"; -var Qn = "LinSpace"; -var To = "Log"; -var Zn = "Log1p"; -var Jn = "LogicalAnd"; -var es = "LogicalNot"; -var ts = "LogicalOr"; -var gk = "LogicalXor"; -var Ime = "LogSoftmax"; -var vme = "LowerBound"; -var rs = "LRN"; -var oi = "LRNGrad"; -var kme = "MatrixBandPart"; -var os = "Max"; -var _o = "Maximum"; -var ns = "MaxPool"; -var Zi = "MaxPoolGrad"; -var ha = "MaxPool3D"; -var Ji = "MaxPool3DGrad"; -var ga = "MaxPoolWithArgmax"; -var ss = "Mean"; -var as = "Min"; -var Eo = "Minimum"; -var is = "MirrorPad"; -var us = "Mod"; -var ps = "Multinomial"; -var $o = "Multiply"; -var ls = "Neg"; -var Ro = "NotEqual"; -var cs = "NonMaxSuppressionV3"; -var ni = "NonMaxSuppressionV4"; -var ms = "NonMaxSuppressionV5"; -var xa = "OnesLike"; -var ds = "OneHot"; -var ya = "Pack"; -var fs = "PadV2"; -var Nme = "Pool"; -var hs = "Pow"; -var gs = "Prelu"; -var Ho = "Prod"; -var Qp = "RaggedGather"; -var Zp = "RaggedRange"; -var Jp = "RaggedTensorToTensor"; -var ba = "Range"; -var si = "Real"; -var xs = "Reciprocal"; -var ys = "Relu"; -var Ca = "Reshape"; -var bs = "ResizeNearestNeighbor"; -var ai = "ResizeNearestNeighborGrad"; -var Cs = "ResizeBilinear"; -var ii = "ResizeBilinearGrad"; -var ws = "Relu6"; -var Ss = "Reverse"; -var Is = "Round"; -var Do = "Rsqrt"; -var vs = "ScatterNd"; -var ks = "TensorScatterUpdate"; -var Ns = "SearchSorted"; -var wa = "Select"; -var Ts = "Selu"; -var _s = "Slice"; -var Es = "Sin"; -var $s = "Sinh"; -var Rs = "Sign"; -var Ao = "Sigmoid"; -var Ds = "Softplus"; -var Fo = "Sqrt"; -var As = "Sum"; -var Sa = "SpaceToBatchND"; -var Ia = "SplitV"; -var Fs = "Softmax"; -var eu = "SparseFillEmptyRows"; -var ui = "SparseReshape"; -var va = "SparseSegmentMean"; -var ka = "SparseSegmentSum"; -var Ps = "SparseToDense"; -var Po = "SquaredDifference"; -var tu = "Square"; -var pi = "StaticRegexReplace"; -var Os = "StridedSlice"; -var Na = "StringNGrams"; -var ru = "StringSplit"; -var ou = "StringToHashBucketFast"; -var Oo = "Sub"; -var Ms = "Tan"; -var Ls = "Tanh"; -var Mo = "Tile"; -var Bs = "TopK"; -var zs = "Transform"; -var Kr = "Transpose"; -var nu = "Unique"; -var Ta = "Unpack"; -var su = "UnsortedSegmentSum"; -var Tme = "UpperBound"; -var _a = "ZerosLike"; -var Ko = "Step"; -var Lu = "FromPixels"; -var Vs = "RotateWithOffset"; -var qo = "_FusedMatMul"; -var jo = "FusedConv2D"; -var Xo = "FusedDepthwiseConv2D"; -function Ea(...r16) { - A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(...r16); -} -function CH(...r16) { - A().getBool("IS_TEST") || A().getBool("PROD") || console.log(...r16); -} -var el = wc("kernelRegistry", () => /* @__PURE__ */ new Map()); -var Sc = wc("gradRegistry", () => /* @__PURE__ */ new Map()); -function tl(r16, e) { - let t10 = ww(r16, e); - return el.get(t10); -} -function Cw(r16) { - return Sc.get(r16); -} -function ad(r16) { - let e = el.entries(), t10 = []; + return t10.set(r15, o), t10.get(r15); + } +} +var Xs = "Abs"; +var Vo = "Acos"; +var Wo = "Acosh"; +var uo = "Add"; +var Uo = "AddN"; +var Go = "All"; +var Ho = "Any"; +var Ys = "ArgMax"; +var Qs = "ArgMin"; +var Ko = "Asin"; +var qo = "Asinh"; +var jo = "Atan"; +var Xo = "Atanh"; +var Yo = "Atan2"; +var Qo = "AvgPool"; +var $i = "AvgPoolGrad"; +var Zs = "AvgPool3D"; +var Ri = "AvgPool3DGrad"; +var Zo = "BatchMatMul"; +var Js = "BatchToSpaceND"; +var Jo = "Bincount"; +var qa = "BitwiseAnd"; +var qce = "BroadcastTo"; +var ea = "BroadcastArgs"; +var yo = "Cast"; +var en = "Ceil"; +var bo = "ClipByValue"; +var Di = "Complex"; +var Ai = "ComplexAbs"; +var ta = "Concat"; +var tn = "Conv2D"; +var Fi = "Conv2DBackpropFilter"; +var rn = "Conv2DBackpropInput"; +var on = "Conv3D"; +var ja = "Conv3DBackpropFilterV2"; +var nn = "Conv3DBackpropInputV2"; +var sn = "Cos"; +var an = "Cosh"; +var un = "Cumprod"; +var pn = "Cumsum"; +var cn = "CropAndResize"; +var ra = "DenseBincount"; +var ln = "DepthToSpace"; +var mn = "DepthwiseConv2dNative"; +var Pi = "DepthwiseConv2dNativeBackpropFilter"; +var Oi = "DepthwiseConv2dNativeBackpropInput"; +var oa = "Diag"; +var dn = "Dilation2D"; +var Mi = "Dilation2DBackpropInput"; +var Li = "Dilation2DBackpropFilter"; +var $u = "Draw"; +var fn = "RealDiv"; +var Bi = "Einsum"; +var hn = "Elu"; +var Xa = "EluGrad"; +var gn = "Erf"; +var xn = "Equal"; +var yn = "Exp"; +var na = "ExpandDims"; +var bn = "Expm1"; +var zi = "FFT"; +var sa = "Fill"; +var Cn = "FlipLeftRight"; +var wn = "Floor"; +var Sn = "FloorDiv"; +var In = "FusedBatchNorm"; +var aa = "GatherV2"; +var vn = "GatherNd"; +var kn = "Greater"; +var Nn = "GreaterEqual"; +var Co = "Identity"; +var Vi = "IFFT"; +var Wi = "Imag"; +var Tn = "IsFinite"; +var _n = "IsInf"; +var En = "IsNan"; +var $n = "LeakyRelu"; +var Rn = "Less"; +var Dn = "LessEqual"; +var An = "LinSpace"; +var Fn = "Log"; +var Pn = "Log1p"; +var On = "LogicalAnd"; +var Mn = "LogicalNot"; +var Ln = "LogicalOr"; +var R0 = "LogicalXor"; +var jce = "LogSoftmax"; +var Xce = "LowerBound"; +var Bn = "LRN"; +var Ya = "LRNGrad"; +var Yce = "MatrixBandPart"; +var zn = "Max"; +var Vn = "Maximum"; +var Wn = "MaxPool"; +var Ui = "MaxPoolGrad"; +var ia = "MaxPool3D"; +var Gi = "MaxPool3DGrad"; +var ua = "MaxPoolWithArgmax"; +var Un = "Mean"; +var Gn = "Min"; +var Hn = "Minimum"; +var Kn = "MirrorPad"; +var qn = "Mod"; +var jn = "Multinomial"; +var Xn = "Multiply"; +var pa = "Neg"; +var Yn = "NotEqual"; +var Qn = "NonMaxSuppressionV3"; +var Qa = "NonMaxSuppressionV4"; +var Zn = "NonMaxSuppressionV5"; +var ca = "OnesLike"; +var Jn = "OneHot"; +var la = "Pack"; +var es = "PadV2"; +var Qce = "Pool"; +var ts = "Pow"; +var rs = "Prelu"; +var os = "Prod"; +var Hp = "RaggedGather"; +var Kp = "RaggedRange"; +var qp = "RaggedTensorToTensor"; +var ma = "Range"; +var Hi = "Real"; +var ns = "Reciprocal"; +var ss = "Relu"; +var da = "Reshape"; +var as = "ResizeNearestNeighbor"; +var Za = "ResizeNearestNeighborGrad"; +var is = "ResizeBilinear"; +var Ja = "ResizeBilinearGrad"; +var us = "Relu6"; +var ps = "Reverse"; +var cs = "Round"; +var ls = "Rsqrt"; +var ms = "ScatterNd"; +var ds = "TensorScatterUpdate"; +var fs = "SearchSorted"; +var fa = "Select"; +var hs = "Selu"; +var ha = "Slice"; +var gs = "Sin"; +var xs = "Sinh"; +var ys = "Sign"; +var bs = "Sigmoid"; +var Cs = "Softplus"; +var ws = "Sqrt"; +var Ss = "Sum"; +var ga = "SpaceToBatchND"; +var xa = "SplitV"; +var Is = "Softmax"; +var Ki = "SparseFillEmptyRows"; +var ei = "SparseReshape"; +var ya = "SparseSegmentMean"; +var ba = "SparseSegmentSum"; +var vs = "SparseToDense"; +var ks = "SquaredDifference"; +var qi = "Square"; +var Ru = "StaticRegexReplace"; +var Ns = "StridedSlice"; +var Ca = "StringNGrams"; +var ji = "StringSplit"; +var Xi = "StringToHashBucketFast"; +var Ts = "Sub"; +var _s = "Tan"; +var Es = "Tanh"; +var po = "Tile"; +var $s = "TopK"; +var Rs = "Transform"; +var co = "Transpose"; +var Yi = "Unique"; +var wa = "Unpack"; +var Qi = "UnsortedSegmentSum"; +var Zce = "UpperBound"; +var Sa = "ZerosLike"; +var wo = "Step"; +var Du = "FromPixels"; +var Ds = "RotateWithOffset"; +var So = "_FusedMatMul"; +var Io = "FusedConv2D"; +var vo = "FusedDepthwiseConv2D"; +function Ia(...r15) { + A().getBool("IS_TEST") || A().getBool("PROD") || console.warn(...r15); +} +function t4(...r15) { + A().getBool("IS_TEST") || A().getBool("PROD") || console.log(...r15); +} +var jp = fl("kernelRegistry", () => /* @__PURE__ */ new Map()); +var hl = fl("gradRegistry", () => /* @__PURE__ */ new Map()); +function Xp(r15, e) { + let t10 = uw(r15, e); + return jp.get(t10); +} +function iw(r15) { + return hl.get(r15); +} +function Ym(r15) { + let e = jp.entries(), t10 = []; for (; ; ) { let { done: o, value: n } = e.next(); if (o) break; let [s, a] = n, [i] = s.split("_"); - i === r16 && t10.push(a); + i === r15 && t10.push(a); } return t10; } -function li(r16) { - let { kernelName: e, backendName: t10 } = r16, o = ww(e, t10); - el.has(o) && Ea(`The kernel '${e}' for backend '${t10}' is already registered`), el.set(o, r16); +function ti(r15) { + let { kernelName: e, backendName: t10 } = r15, o = uw(e, t10); + jp.has(o) && Ia(`The kernel '${e}' for backend '${t10}' is already registered`), jp.set(o, r15); } -function Dme(r16) { - let { kernelName: e } = r16; - Sc.has(e) && A().getBool("DEBUG") && Ea(`Overriding the gradient for '${e}'`), Sc.set(e, r16); +function ole(r15) { + let { kernelName: e } = r15; + hl.has(e) && A().getBool("DEBUG") && Ia(`Overriding the gradient for '${e}'`), hl.set(e, r15); } -function Ame(r16, e) { - let t10 = ww(r16, e); - if (!el.has(t10)) - throw new Error(`The kernel '${r16}' for backend '${e}' is not registered`); - el.delete(t10); +function nle(r15, e) { + let t10 = uw(r15, e); + if (!jp.has(t10)) + throw new Error(`The kernel '${r15}' for backend '${e}' is not registered`); + jp.delete(t10); } -function Fme(r16) { - if (!Sc.has(r16)) - throw new Error(`The gradient '${r16}' for backend is not registered`); - Sc.delete(r16); +function sle(r15) { + if (!hl.has(r15)) + throw new Error(`The gradient '${r15}' for backend is not registered`); + hl.delete(r15); } -function Pme(r16, e) { - ad(r16).forEach((o) => { +function ale(r15, e) { + Ym(r15).forEach((o) => { let n = Object.assign({}, o, { backendName: e }); - li(n); + ti(n); }); } -function ww(r16, e) { - return `${e}_${r16}`; +function uw(r15, e) { + return `${e}_${r15}`; } var y = {}; -qe(y, { arraysEqual: () => Sr, arraysEqualWithNull: () => cw, assert: () => $, assertNonNegativeIntegerDimensions: () => St, assertNonNull: () => fo, assertShapesMatch: () => yt, bytesFromStringArray: () => gw, bytesPerElement: () => jp, checkConversionForErrors: () => fw, clamp: () => qp, computeStrides: () => oa, convertBackendValuesAndArrayBuffer: () => cH, createScalarValue: () => TH, createShuffledIndices: () => iH, decodeString: () => sl, distSquared: () => oH, encodeString: () => iu, fetch: () => EH, fingerPrint64: () => NH, flatten: () => Us, getArrayFromDType: () => sd, getTypedArrayFromDType: () => dw, hasEncodingLoss: () => lH, hexToLong: () => Ic, indexToLoc: () => fH, inferDtype: () => Bi, inferFromImplicitShape: () => pH, isBoolean: () => ck, isFunction: () => ra, isInt: () => Ja, isNumber: () => mk, isPromise: () => Ou, isScalarShape: () => nH, isString: () => dn, isTypedArray: () => Mt, isValidDtype: () => hw, locToIndex: () => dH, makeOnesTypedArray: () => bc, makeZerosNestedTypedArray: () => mH, makeZerosTypedArray: () => Yp, nearestDivisor: () => Xp, nearestLargerEven: () => eH, now: () => Uu, parseAxisParam: () => Li, randUniform: () => rH, repeatedTry: () => uH, rightPad: () => Pu, shuffle: () => lk, shuffleCombo: () => J4, sizeFromShape: () => ze, sizeToSquarishShape: () => aH, squeezeShape: () => mw, sum: () => tH, swap: () => nd, tanh: () => sH, toNestedArray: () => Fu, toTypedArray: () => nl }); -function id(r16) { - return r16 instanceof Float32Array || r16 instanceof Int32Array || r16 instanceof Uint8Array || r16 instanceof Uint8ClampedArray; +qe(y, { arraysEqual: () => br, arraysEqualWithNull: () => ZC, assert: () => E, assertNonNegativeIntegerDimensions: () => Ct, assertNonNull: () => io, assertShapesMatch: () => xt, bytesFromStringArray: () => ow, bytesPerElement: () => Wp, checkConversionForErrors: () => tw, clamp: () => Vp, computeStrides: () => js, convertBackendValuesAndArrayBuffer: () => KG, createScalarValue: () => u4, createShuffledIndices: () => WG, decodeString: () => Jp, distSquared: () => LG, encodeString: () => Ji, fetch: () => c4, fingerPrint64: () => i4, flatten: () => Fs, getArrayFromDType: () => Xm, getTypedArrayFromDType: () => ew, hasEncodingLoss: () => HG, hexToLong: () => gl, indexToLoc: () => XG, inferDtype: () => Ei, inferFromImplicitShape: () => GG, isBoolean: () => N0, isFunction: () => qs, isInt: () => Ka, isNumber: () => T0, isPromise: () => Eu, isScalarShape: () => BG, isString: () => zo, isTypedArray: () => Pt, isValidDtype: () => rw, locToIndex: () => jG, makeOnesTypedArray: () => ml, makeZerosNestedTypedArray: () => qG, makeZerosTypedArray: () => Gp, nearestDivisor: () => Up, nearestLargerEven: () => PG, now: () => Mu, parseAxisParam: () => _i, randUniform: () => MG, repeatedTry: () => UG, rightPad: () => _u, shuffle: () => k0, shuffleCombo: () => FG, sizeFromShape: () => ze, sizeToSquarishShape: () => VG, squeezeShape: () => JC, sum: () => OG, swap: () => jm, tanh: () => zG, toNestedArray: () => Tu, toTypedArray: () => Zp }); +function Qm(r15) { + return r15 instanceof Float32Array || r15 instanceof Int32Array || r15 instanceof Uint8Array || r15 instanceof Uint8ClampedArray; } -var kw = Kp(_k()); -var Wu = kw.default || kw; -function Ic(r16) { - return Wu.fromString(r16, true, 16); +var mw = zp(U0()); +var Ou = mw.default || mw; +function gl(r15) { + return Ou.fromString(r15, true, 16); } -var $k = Ic("c3a5c85c97cb3127"); -var Vu = Ic("b492b66fbe98f273"); -var Ir = Ic("9ae16a3b2f90404f"); -function vw(r16) { - return r16.xor(r16.shru(47)); +var H0 = gl("c3a5c85c97cb3127"); +var Pu = gl("b492b66fbe98f273"); +var Cr = gl("9ae16a3b2f90404f"); +function lw(r15) { + return r15.xor(r15.shru(47)); } -function Rk(r16, e, t10) { - let o = r16.slice(e, e + t10); - return Wu.fromBytes(Array.from(o), true, true); +function K0(r15, e, t10) { + let o = r15.slice(e, e + t10); + return Ou.fromBytes(Array.from(o), true, true); } -function It(r16, e) { - return Rk(r16, e, 8); +function wt(r15, e) { + return K0(r15, e, 8); } -function Ek(r16, e) { - return Rk(r16, e, 4); +function G0(r15, e) { + return K0(r15, e, 4); } -function Jt(r16, e) { - return e === 0 ? r16 : r16.shru(e).or(r16.shl(64 - e)); +function Yt(r15, e) { + return e === 0 ? r15 : r15.shru(e).or(r15.shl(64 - e)); } -function au(r16, e, t10 = Ic("9ddfea08eb382d69")) { - let o = r16.xor(e).mul(t10); +function Zi(r15, e, t10 = gl("9ddfea08eb382d69")) { + let o = r15.xor(e).mul(t10); o = o.xor(o.shru(47)); let n = e.xor(o).mul(t10); return n = n.xor(n.shru(47)), n = n.mul(t10), n; } -function SH(r16, e, t10, o, n, s) { - n = n.add(r16), s = Jt(s.add(n).add(o), 21); +function o4(r15, e, t10, o, n, s) { + n = n.add(r15), s = Yt(s.add(n).add(o), 21); let a = n; - return n = n.add(e), n = n.add(t10), s = s.add(Jt(n, 44)), [n.add(o), s.add(a)]; + return n = n.add(e), n = n.add(t10), s = s.add(Yt(n, 44)), [n.add(o), s.add(a)]; } -function pd(r16, e, t10, o) { - return SH(It(r16, e), It(r16, e + 8), It(r16, e + 16), It(r16, e + 24), t10, o); +function Jm(r15, e, t10, o) { + return o4(wt(r15, e), wt(r15, e + 8), wt(r15, e + 16), wt(r15, e + 24), t10, o); } -function IH(r16, e = r16.length) { +function n4(r15, e = r15.length) { if (e >= 8) { - let t10 = Ir.add(e * 2), o = It(r16, 0).add(Ir), n = It(r16, e - 8), s = Jt(n, 37).mul(t10).add(o), a = Jt(o, 25).add(n).mul(t10); - return au(s, a, t10); + let t10 = Cr.add(e * 2), o = wt(r15, 0).add(Cr), n = wt(r15, e - 8), s = Yt(n, 37).mul(t10).add(o), a = Yt(o, 25).add(n).mul(t10); + return Zi(s, a, t10); } if (e >= 4) { - let t10 = Ir.add(e * 2), o = Ek(r16, 0); - return au(o.shl(3).add(e), Ek(r16, e - 4), t10); + let t10 = Cr.add(e * 2), o = G0(r15, 0); + return Zi(o.shl(3).add(e), G0(r15, e - 4), t10); } if (e > 0) { - let t10 = r16[0], o = r16[e >> 1], n = r16[e - 1], s = t10 + (o << 8), a = e + (n << 2); - return vw(Ir.mul(s).xor($k.mul(a))).mul(Ir); + let t10 = r15[0], o = r15[e >> 1], n = r15[e - 1], s = t10 + (o << 8), a = e + (n << 2); + return lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr); } - return Ir; + return Cr; } -function vH(r16, e = r16.length) { - let t10 = Ir.add(e * 2), o = It(r16, 0).mul(Vu), n = It(r16, 8), s = It(r16, e - 8).mul(t10), a = It(r16, e - 16).mul(Ir); - return au(Jt(o.add(n), 43).add(Jt(s, 30)).add(a), o.add(Jt(n.add(Ir), 18)).add(s), t10); +function s4(r15, e = r15.length) { + let t10 = Cr.add(e * 2), o = wt(r15, 0).mul(Pu), n = wt(r15, 8), s = wt(r15, e - 8).mul(t10), a = wt(r15, e - 16).mul(Cr); + return Zi(Yt(o.add(n), 43).add(Yt(s, 30)).add(a), o.add(Yt(n.add(Cr), 18)).add(s), t10); } -function kH(r16, e = r16.length) { - let t10 = Ir.add(e * 2), o = It(r16, 0).mul(Ir), n = It(r16, 8), s = It(r16, e - 8).mul(t10), a = It(r16, e - 16).mul(Ir), i = Jt(o.add(n), 43).add(Jt(s, 30)).add(a), p = au(i, o.add(Jt(n.add(Ir), 18)).add(s), t10), u = It(r16, 16).mul(t10), l = It(r16, 24), c = i.add(It(r16, e - 32)).mul(t10), m = p.add(It(r16, e - 24)).mul(t10); - return au(Jt(u.add(l), 43).add(Jt(c, 30)).add(m), u.add(Jt(l.add(o), 18)).add(c), t10); +function a4(r15, e = r15.length) { + let t10 = Cr.add(e * 2), o = wt(r15, 0).mul(Cr), n = wt(r15, 8), s = wt(r15, e - 8).mul(t10), a = wt(r15, e - 16).mul(Cr), i = Yt(o.add(n), 43).add(Yt(s, 30)).add(a), p = Zi(i, o.add(Yt(n.add(Cr), 18)).add(s), t10), u = wt(r15, 16).mul(t10), c = wt(r15, 24), l = i.add(wt(r15, e - 32)).mul(t10), m = p.add(wt(r15, e - 24)).mul(t10); + return Zi(Yt(u.add(c), 43).add(Yt(l, 30)).add(m), u.add(Yt(c.add(o), 18)).add(l), t10); } -function NH(r16, e = r16.length) { - let t10 = Wu.fromNumber(81, true); +function i4(r15, e = r15.length) { + let t10 = Ou.fromNumber(81, true); if (e <= 32) - return e <= 16 ? IH(r16, e) : vH(r16, e); + return e <= 16 ? n4(r15, e) : s4(r15, e); if (e <= 64) - return kH(r16, e); - let o = t10, n = t10.mul(Vu).add(113), s = vw(n.mul(Ir).add(113)).mul(Ir), a = [Wu.UZERO, Wu.UZERO], i = [Wu.UZERO, Wu.UZERO]; - o = o.mul(Ir).add(It(r16, 0)); - let p = 0, u = (e - 1 >> 6) * 64, l = u + (e - 1 & 63) - 63; + return a4(r15, e); + let o = t10, n = t10.mul(Pu).add(113), s = lw(n.mul(Cr).add(113)).mul(Cr), a = [Ou.UZERO, Ou.UZERO], i = [Ou.UZERO, Ou.UZERO]; + o = o.mul(Cr).add(wt(r15, 0)); + let p = 0, u = (e - 1 >> 6) * 64, c = u + (e - 1 & 63) - 63; do - o = Jt(o.add(n).add(a[0]).add(It(r16, p + 8)), 37).mul(Vu), n = Jt(n.add(a[1]).add(It(r16, p + 48)), 42).mul(Vu), o = o.xor(i[1]), n = n.add(a[0]).add(It(r16, p + 40)), s = Jt(s.add(i[0]), 33).mul(Vu), a = pd(r16, p, a[1].mul(Vu), o.add(i[0])), i = pd(r16, p + 32, s.add(i[1]), n.add(It(r16, p + 16))), [s, o] = [o, s], p += 64; + o = Yt(o.add(n).add(a[0]).add(wt(r15, p + 8)), 37).mul(Pu), n = Yt(n.add(a[1]).add(wt(r15, p + 48)), 42).mul(Pu), o = o.xor(i[1]), n = n.add(a[0]).add(wt(r15, p + 40)), s = Yt(s.add(i[0]), 33).mul(Pu), a = Jm(r15, p, a[1].mul(Pu), o.add(i[0])), i = Jm(r15, p + 32, s.add(i[1]), n.add(wt(r15, p + 16))), [s, o] = [o, s], p += 64; while (p !== u); - let c = Vu.add(s.and(255).shl(1)); - return p = l, i[0] = i[0].add(e - 1 & 63), a[0] = a[0].add(i[0]), i[0] = i[0].add(a[0]), o = Jt(o.add(n).add(a[0]).add(It(r16, p + 8)), 37).mul(c), n = Jt(n.add(a[1]).add(It(r16, p + 48)), 42).mul(c), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(It(r16, p + 40))), s = Jt(s.add(i[0]), 33).mul(c), a = pd(r16, p, a[1].mul(c), o.add(i[0])), i = pd(r16, p + 32, s.add(i[1]), n.add(It(r16, p + 16))), [s, o] = [o, s], au(au(a[0], i[0], c).add(vw(n).mul($k)).add(s), au(a[1], i[1], c).add(o), c); + let l = Pu.add(s.and(255).shl(1)); + return p = c, i[0] = i[0].add(e - 1 & 63), a[0] = a[0].add(i[0]), i[0] = i[0].add(a[0]), o = Yt(o.add(n).add(a[0]).add(wt(r15, p + 8)), 37).mul(l), n = Yt(n.add(a[1]).add(wt(r15, p + 48)), 42).mul(l), o = o.xor(i[1].mul(9)), n = n.add(a[0].mul(9).add(wt(r15, p + 40))), s = Yt(s.add(i[0]), 33).mul(l), a = Jm(r15, p, a[1].mul(l), o.add(i[0])), i = Jm(r15, p + 32, s.add(i[1]), n.add(wt(r15, p + 16))), [s, o] = [o, s], Zi(Zi(a[0], i[0], l).add(lw(n).mul(H0)).add(s), Zi(a[1], i[1], l).add(o), l); } -function TH(r16, e) { - return e === "string" ? iu(r16) : nl([r16], e); +function u4(r15, e) { + return e === "string" ? Ji(r15) : Zp([r15], e); } -function _H(r16, e) { - return r16 instanceof Float32Array && e === "float32" || r16 instanceof Int32Array && e === "int32" || r16 instanceof Uint8Array && e === "bool"; +function p4(r15, e) { + return r15 instanceof Float32Array && e === "float32" || r15 instanceof Int32Array && e === "int32" || r15 instanceof Uint8Array && e === "bool"; } -function nl(r16, e) { +function Zp(r15, e) { if (e === "string") throw new Error("Cannot convert a string[] to a TypedArray"); - if (Array.isArray(r16) && (r16 = Us(r16)), A().getBool("DEBUG") && fw(r16, e), _H(r16, e)) - return r16; + if (Array.isArray(r15) && (r15 = Fs(r15)), A().getBool("DEBUG") && tw(r15, e), p4(r15, e)) + return r15; if (e == null || e === "float32" || e === "complex64") - return new Float32Array(r16); + return new Float32Array(r15); if (e === "int32") - return new Int32Array(r16); + return new Int32Array(r15); if (e === "bool") { - let t10 = new Uint8Array(r16.length); + let t10 = new Uint8Array(r15.length); for (let o = 0; o < t10.length; ++o) - Math.round(r16[o]) !== 0 && (t10[o] = 1); + Math.round(r15[o]) !== 0 && (t10[o] = 1); return t10; } else throw new Error(`Unknown data type ${e}`); } -function Uu() { +function Mu() { return A().platform.now(); } -function EH(r16, e) { - return A().platform.fetch(r16, e); +function c4(r15, e) { + return A().platform.fetch(r15, e); } -function iu(r16, e = "utf-8") { - return e = e || "utf-8", A().platform.encode(r16, e); +function Ji(r15, e = "utf-8") { + return e = e || "utf-8", A().platform.encode(r15, e); } -function sl(r16, e = "utf-8") { - return e = e || "utf-8", A().platform.decode(r16, e); +function Jp(r15, e = "utf-8") { + return e = e || "utf-8", A().platform.decode(r15, e); } -function Mt(r16) { - return A().platform.isTypedArray != null ? A().platform.isTypedArray(r16) : id(r16); +function Pt(r15) { + return A().platform.isTypedArray != null ? A().platform.isTypedArray(r15) : Qm(r15); } -function Us(r16, e = [], t10 = false) { - if (e == null && (e = []), typeof r16 == "boolean" || typeof r16 == "number" || typeof r16 == "string" || Ou(r16) || r16 == null || Mt(r16) && t10) - e.push(r16); - else if (Array.isArray(r16) || Mt(r16)) - for (let o = 0; o < r16.length; ++o) - Us(r16[o], e, t10); +function Fs(r15, e = [], t10 = false) { + if (e == null && (e = []), typeof r15 == "boolean" || typeof r15 == "number" || typeof r15 == "string" || Eu(r15) || r15 == null || Pt(r15) && t10) + e.push(r15); + else if (Array.isArray(r15) || Pt(r15)) + for (let o = 0; o < r15.length; ++o) + Fs(r15[o], e, t10); else { let o = -1; - for (let n of Object.keys(r16)) + for (let n of Object.keys(r15)) /^([1-9]+[0-9]*|0)$/.test(n) && (o = Math.max(o, Number(n))); for (let n = 0; n <= o; n++) - Us(r16[n], e, t10); + Fs(r15[n], e, t10); } return e; } -var ld = class { +var ed = class { constructor(e, t10) { - this.backendTimer = e, this.logger = t10, t10 == null && (this.logger = new Nw()); + this.backendTimer = e, this.logger = t10, t10 == null && (this.logger = new dw()); } profileKernel(e, t10, o) { let n, s = () => { n = o(); - }, a, i = Uu(); + }, a, i = Mu(); if (this.backendTimer.timerAvailable()) a = this.backendTimer.time(s); else { s(); for (let u of n) u.dataSync(); - a = Promise.resolve({ kernelMs: Uu() - i }); + a = Promise.resolve({ kernelMs: Mu() - i }); } if (A().getBool("CHECK_COMPUTATION_FOR_ERRORS")) for (let u = 0; u < n.length; u++) { - let l = n[u]; - l.data().then((c) => { - $H(c, l.dtype, e); + let c = n[u]; + c.data().then((l) => { + l4(l, c.dtype, e); }); } return { kernelName: e, outputs: n, inputs: t10, timeMs: a.then((u) => u.kernelMs), extraInfo: a.then((u) => u.getExtraProfileInfo != null ? u.getExtraProfileInfo() : "") }; @@ -3866,19 +3866,19 @@ var ld = class { }); } }; -function $H(r16, e, t10) { +function l4(r15, e, t10) { if (e !== "float32") return false; - for (let o = 0; o < r16.length; o++) { - let n = r16[o]; + for (let o = 0; o < r15.length; o++) { + let n = r15[o]; if (isNaN(n) || !isFinite(n)) return console.warn(`Found ${n} in the result of '${t10}'`), true; } return false; } -var Nw = class { +var dw = class { logKernelProfile(e, t10, o, n, s, a) { - let i = typeof n == "number" ? Pu(`${n}ms`, 9) : n.error, p = Pu(e, 25), u = t10.rank, l = t10.size, c = Pu(t10.shape.toString(), 14), m = ""; + let i = typeof n == "number" ? _u(`${n}ms`, 9) : n.error, p = _u(e, 25), u = t10.rank, c = t10.size, l = _u(t10.shape.toString(), 14), m = ""; for (let d in s) { let f = s[d]; if (f != null) { @@ -3886,17 +3886,17 @@ var Nw = class { m += `${d}: ${g}D ${g > 0 ? h : ""} `; } } - console.log(`%c${p} %c${i} %c${u}D ${c} %c${l} %c${m} %c${a}`, "font-weight:bold", "color:red", "color:blue", "color: orange", "color: green", "color: steelblue"); + console.log(`%c${p} %c${i} %c${u}D ${l} %c${c} %c${m} %c${a}`, "font-weight:bold", "color:red", "color:blue", "color: orange", "color: green", "color: steelblue"); } }; -function Dk(r16, e, t10) { +function q0(r15, e, t10) { let o = {}, n = {}; for (let p = 0; p < e.length; p++) o[e[p].id] = true; - for (let p = 0; p < r16.length; p++) { - let u = r16[p], l = u.inputs; - for (let c in l) { - let m = l[c], d = false; + for (let p = 0; p < r15.length; p++) { + let u = r15[p], c = u.inputs; + for (let l in c) { + let m = c[l], d = false; for (let f = 0; f < e.length; f++) if (o[m.id]) { u.outputs.forEach((h) => o[h.id] = true), d = true, n[u.id] = true; @@ -3909,35 +3909,35 @@ function Dk(r16, e, t10) { let s = {}; s[t10.id] = true; let a = {}; - for (let p = r16.length - 1; p >= 0; p--) { - let u = r16[p], l = u.inputs; - for (let c = 0; c < u.outputs.length; c++) - if (s[u.outputs[c].id]) { - for (let m in l) - s[l[m].id] = true, a[u.id] = true; + for (let p = r15.length - 1; p >= 0; p--) { + let u = r15[p], c = u.inputs; + for (let l = 0; l < u.outputs.length; l++) + if (s[u.outputs[l].id]) { + for (let m in c) + s[c[m].id] = true, a[u.id] = true; break; } } let i = []; - for (let p = 0; p < r16.length; p++) { - let u = r16[p]; + for (let p = 0; p < r15.length; p++) { + let u = r15[p]; if (n[u.id] && a[u.id]) { - let l = {}; + let c = {}; for (let m in u.inputs) { let d = u.inputs[m]; - o[d.id] && (l[m] = d); + o[d.id] && (c[m] = d); } - let c = Object.assign({}, u); - c.inputs = l, c.outputs = u.outputs, i.push(c); + let l = Object.assign({}, u); + l.inputs = c, l.outputs = u.outputs, i.push(l); } } return i; } -function Ak(r16, e, t10, o) { +function j0(r15, e, t10, o) { for (let n = e.length - 1; n >= 0; n--) { let s = e[n], a = []; if (s.outputs.forEach((p) => { - let u = r16[p.id]; + let u = r15[p.id]; u != null ? a.push(u) : a.push(null); }), s.gradient == null) throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`); @@ -3948,75 +3948,75 @@ function Ak(r16, e, t10, o) { let u = t10(() => i[p]()); if (u.dtype !== "float32") throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`); - let l = s.inputs[p]; - if (!Sr(u.shape, l.shape)) - throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${l.shape}'`); - if (r16[l.id] == null) - r16[l.id] = u; + let c = s.inputs[p]; + if (!br(u.shape, c.shape)) + throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`); + if (r15[c.id] == null) + r15[c.id] = u; else { - let c = r16[l.id]; - r16[l.id] = o(c, u), c.dispose(); + let l = r15[c.id]; + r15[c.id] = o(l, u), l.dispose(); } } } } -var Fk = 20; -var vc = 3; -var Tw = 7; -function Pk(r16, e, t10, o) { - let n = oa(e), s = RH(r16, e, t10, n), a = e.length, i = cd(r16, e, t10, n, s), p = ["Tensor"]; +var X0 = 20; +var xl = 3; +var fw = 7; +function Y0(r15, e, t10, o) { + let n = js(e), s = m4(r15, e, t10, n), a = e.length, i = td(r15, e, t10, n, s), p = ["Tensor"]; return o && (p.push(` dtype: ${t10}`), p.push(` rank: ${a}`), p.push(` shape: [${e}]`), p.push(" values:")), p.push(i.map((u) => " " + u).join(` `)), p.join(` `); } -function RH(r16, e, t10, o) { - let n = ze(e), s = o[o.length - 1], a = new Array(s).fill(0), i = e.length, p = t10 === "complex64" ? Nc(r16) : r16; +function m4(r15, e, t10, o) { + let n = ze(e), s = o[o.length - 1], a = new Array(s).fill(0), i = e.length, p = t10 === "complex64" ? bl(r15) : r15; if (i > 1) for (let u = 0; u < n / s; u++) { - let l = u * s; - for (let c = 0; c < s; c++) - a[c] = Math.max(a[c], kc(p[l + c], 0, t10).length); + let c = u * s; + for (let l = 0; l < s; l++) + a[l] = Math.max(a[l], yl(p[c + l], 0, t10).length); } return a; } -function kc(r16, e, t10) { +function yl(r15, e, t10) { let o; - return Array.isArray(r16) ? o = `${parseFloat(r16[0].toFixed(Tw))} + ${parseFloat(r16[1].toFixed(Tw))}j` : dn(r16) ? o = `'${r16}'` : t10 === "bool" ? o = Ok(r16) : o = parseFloat(r16.toFixed(Tw)).toString(), Pu(o, e); + return Array.isArray(r15) ? o = `${parseFloat(r15[0].toFixed(fw))} + ${parseFloat(r15[1].toFixed(fw))}j` : zo(r15) ? o = `'${r15}'` : t10 === "bool" ? o = Q0(r15) : o = parseFloat(r15.toFixed(fw)).toString(), _u(o, e); } -function Ok(r16) { - return r16 === 0 ? "false" : "true"; +function Q0(r15) { + return r15 === 0 ? "false" : "true"; } -function cd(r16, e, t10, o, n, s = true) { +function td(r15, e, t10, o, n, s = true) { let a = t10 === "complex64" ? 2 : 1, i = e[0], p = e.length; if (p === 0) { if (t10 === "complex64") { - let h = Nc(r16); - return [kc(h[0], 0, t10)]; + let h = bl(r15); + return [yl(h[0], 0, t10)]; } - return t10 === "bool" ? [Ok(r16[0])] : [r16[0].toString()]; + return t10 === "bool" ? [Q0(r15[0])] : [r15[0].toString()]; } if (p === 1) { - if (i > Fk) { - let g = vc * a, x = Array.from(r16.slice(0, g)), b = Array.from(r16.slice((i - vc) * a, i * a)); - return t10 === "complex64" && (x = Nc(x), b = Nc(b)), ["[" + x.map((w, S) => kc(w, n[S], t10)).join(", ") + ", ..., " + b.map((w, S) => kc(w, n[i - vc + S], t10)).join(", ") + "]"]; + if (i > X0) { + let g = xl * a, x = Array.from(r15.slice(0, g)), b = Array.from(r15.slice((i - xl) * a, i * a)); + return t10 === "complex64" && (x = bl(x), b = bl(b)), ["[" + x.map((C, S) => yl(C, n[S], t10)).join(", ") + ", ..., " + b.map((C, S) => yl(C, n[i - xl + S], t10)).join(", ") + "]"]; } - return ["[" + (t10 === "complex64" ? Nc(r16) : Array.from(r16)).map((g, x) => kc(g, n[x], t10)).join(", ") + "]"]; + return ["[" + (t10 === "complex64" ? bl(r15) : Array.from(r15)).map((g, x) => yl(g, n[x], t10)).join(", ") + "]"]; } - let u = e.slice(1), l = o.slice(1), c = o[0] * a, m = []; - if (i > Fk) { - for (let h = 0; h < vc; h++) { - let g = h * c, x = g + c; - m.push(...cd(r16.slice(g, x), u, t10, l, n, false)); + let u = e.slice(1), c = o.slice(1), l = o[0] * a, m = []; + if (i > X0) { + for (let h = 0; h < xl; h++) { + let g = h * l, x = g + l; + m.push(...td(r15.slice(g, x), u, t10, c, n, false)); } m.push("..."); - for (let h = i - vc; h < i; h++) { - let g = h * c, x = g + c; - m.push(...cd(r16.slice(g, x), u, t10, l, n, h === i - 1)); + for (let h = i - xl; h < i; h++) { + let g = h * l, x = g + l; + m.push(...td(r15.slice(g, x), u, t10, c, n, h === i - 1)); } } else for (let h = 0; h < i; h++) { - let g = h * c, x = g + c; - m.push(...cd(r16.slice(g, x), u, t10, l, n, h === i - 1)); + let g = h * l, x = g + l; + m.push(...td(r15.slice(g, x), u, t10, c, n, h === i - 1)); } let d = p === 2 ? "," : ""; m[0] = "[" + (i > 0 ? m[0] + d : ""); @@ -4029,24 +4029,24 @@ function cd(r16, e, t10, o, n, s = true) { `; return m[m.length - 1] = " " + m[m.length - 1] + "]" + (s ? "" : f), m; } -function Nc(r16) { +function bl(r15) { let e = []; - for (let t10 = 0; t10 < r16.length; t10 += 2) - e.push([r16[t10], r16[t10 + 1]]); + for (let t10 = 0; t10 < r15.length; t10 += 2) + e.push([r15[t10], r15[t10 + 1]]); return e; } -var Ge = class { +var tt = class { constructor(e, t10, o) { if (this.dtype = t10, this.shape = e.slice(), this.size = ze(e), o != null) { let n = o.length; - $(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); + E(n === this.size, () => `Length of values '${n}' does not match the size inferred by the shape '${this.size}'.`); } if (t10 === "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 = o || sd(t10, this.size), this.strides = oa(e); + this.values = o || Xm(t10, this.size), this.strides = js(e); } set(e, ...t10) { - t10.length === 0 && (t10 = [0]), $(t10.length === this.rank, () => `The number of provided coordinates (${t10.length}) must match the rank (${this.rank})`); + t10.length === 0 && (t10 = [0]), E(t10.length === this.rank, () => `The number of provided coordinates (${t10.length}) must match the rank (${this.rank})`); let o = this.locToIndex(t10); this.values[o] = e; } @@ -4089,49 +4089,49 @@ var Ge = class { return this.shape.length; } toTensor() { - return Gs().makeTensor(this.values, this.shape, this.dtype); + return Ps().makeTensor(this.values, this.shape, this.dtype); } }; -var Gs = null; -var al = null; -var DH = null; -function Mk(r16) { - Gs = r16; +var Ps = null; +var ec = null; +var d4 = null; +function Z0(r15) { + Ps = r15; } -function Lk(r16) { - al = r16; +function J0(r15) { + ec = r15; } -function Bk(r16) { - DH = r16; +function ek(r15) { + d4 = r15; } -var dt = class { +var mt = class { constructor(e, t10, o, n) { - this.kept = false, this.isDisposedInternal = false, this.shape = e.slice(), this.dtype = t10 || "float32", this.size = ze(e), this.strides = oa(e), this.dataId = o, this.id = n, this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; + this.kept = false, this.isDisposedInternal = false, this.shape = e.slice(), this.dtype = t10 || "float32", this.size = ze(e), this.strides = js(e), this.dataId = o, this.id = n, this.rankType = this.rank < 5 ? this.rank.toString() : "higher"; } get rank() { return this.shape.length; } async buffer() { let e = await this.data(); - return al.buffer(this.shape, this.dtype, e); + return ec.buffer(this.shape, this.dtype, e); } bufferSync() { - return al.buffer(this.shape, this.dtype, this.dataSync()); + return ec.buffer(this.shape, this.dtype, this.dataSync()); } async array() { let e = await this.data(); - return Fu(this.shape, e, this.dtype === "complex64"); + return Tu(this.shape, e, this.dtype === "complex64"); } arraySync() { - return Fu(this.shape, this.dataSync(), this.dtype === "complex64"); + return Tu(this.shape, this.dataSync(), this.dtype === "complex64"); } async data() { this.throwIfDisposed(); - let e = Gs().read(this.dataId); + let e = Ps().read(this.dataId); if (this.dtype === "string") { let t10 = await e; try { - return t10.map((o) => sl(o)); + return t10.map((o) => Jp(o)); } catch (o) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } @@ -4139,14 +4139,14 @@ var dt = class { return e; } dataToGPU(e) { - return this.throwIfDisposed(), Gs().readToGPU(this.dataId, e); + return this.throwIfDisposed(), Ps().readToGPU(this.dataId, e); } dataSync() { this.throwIfDisposed(); - let e = Gs().readSync(this.dataId); + let e = Ps().readSync(this.dataId); if (this.dtype === "string") try { - return e.map((t10) => sl(t10)); + return e.map((t10) => Jp(t10)); } catch (t10) { throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes()."); } @@ -4154,11 +4154,11 @@ var dt = class { } async bytes() { this.throwIfDisposed(); - let e = await Gs().read(this.dataId); + let e = await Ps().read(this.dataId); return this.dtype === "string" ? e : new Uint8Array(e.buffer); } dispose() { - this.isDisposed || (this.kerasMask && this.kerasMask.dispose(), Gs().disposeTensor(this), this.isDisposedInternal = true); + this.isDisposed || (this.kerasMask && this.kerasMask.dispose(), Ps().disposeTensor(this), this.isDisposedInternal = true); } get isDisposed() { return this.isDisposedInternal; @@ -4168,121 +4168,121 @@ var dt = class { throw new Error("Tensor is disposed."); } print(e = false) { - return al.print(this, e); + return ec.print(this, e); } clone() { - return this.throwIfDisposed(), al.clone(this); + return this.throwIfDisposed(), ec.clone(this); } toString(e = false) { let t10 = this.dataSync(); - return Pk(t10, this.shape, this.dtype, e); + return Y0(t10, this.shape, this.dtype, e); } cast(e) { - return this.throwIfDisposed(), al.cast(this, e); + return this.throwIfDisposed(), ec.cast(this, e); } variable(e = true, t10, o) { - return this.throwIfDisposed(), Gs().makeVariable(this, e, t10, o); + return this.throwIfDisposed(), Ps().makeVariable(this, e, t10, o); } }; -Object.defineProperty(dt, Symbol.hasInstance, { value: (r16) => !!r16 && r16.data != null && r16.dataSync != null && r16.throwIfDisposed != null }); -function _w() { - return wc("Tensor", () => dt); +Object.defineProperty(mt, Symbol.hasInstance, { value: (r15) => !!r15 && r15.data != null && r15.dataSync != null && r15.throwIfDisposed != null }); +function hw() { + return fl("Tensor", () => mt); } -_w(); -var ci = class extends dt { +hw(); +var ri = class extends mt { constructor(e, t10, o, n) { super(e.shape, e.dtype, e.dataId, n), this.trainable = t10, this.name = o; } 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 (!Sr(e.shape, this.shape)) + if (!br(e.shape, this.shape)) throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`); - Gs().disposeTensor(this), this.dataId = e.dataId, Gs().incRef(this, null); + Ps().disposeTensor(this), this.dataId = e.dataId, Ps().incRef(this, null); } dispose() { - Gs().disposeVariable(this), this.isDisposedInternal = true; - } -}; -Object.defineProperty(ci, Symbol.hasInstance, { value: (r16) => r16 instanceof dt && r16.assign != null && r16.assign instanceof Function }); -var Vk = {}; -qe(Vk, { assertTypesMatch: () => Fw, getTensorsInContainer: () => Tc, isTensorInList: () => FH, makeTypesMatch: () => Oe }); -var Ew; -(function(r16) { - r16.R0 = "R0", r16.R1 = "R1", r16.R2 = "R2", r16.R3 = "R3", r16.R4 = "R4", r16.R5 = "R5", r16.R6 = "R6"; -})(Ew || (Ew = {})); -var $w; -(function(r16) { - r16.float32 = "float32", r16.int32 = "int32", r16.bool = "int32", r16.complex64 = "complex64"; -})($w || ($w = {})); -var Rw; -(function(r16) { - r16.float32 = "float32", r16.int32 = "int32", r16.bool = "bool", r16.complex64 = "complex64"; -})(Rw || (Rw = {})); -var Dw; -(function(r16) { - r16.float32 = "float32", r16.int32 = "float32", r16.bool = "float32", r16.complex64 = "complex64"; -})(Dw || (Dw = {})); -var Aw; -(function(r16) { - r16.float32 = "complex64", r16.int32 = "complex64", r16.bool = "complex64", r16.complex64 = "complex64"; -})(Aw || (Aw = {})); -var AH = { float32: Dw, int32: $w, bool: Rw, complex64: Aw }; -function pt(r16, e) { - if (r16 === "string" || e === "string") { - if (r16 === "string" && e === "string") + Ps().disposeVariable(this), this.isDisposedInternal = true; + } +}; +Object.defineProperty(ri, Symbol.hasInstance, { value: (r15) => r15 instanceof mt && r15.assign != null && r15.assign instanceof Function }); +var rk = {}; +qe(rk, { assertTypesMatch: () => ww, getTensorsInContainer: () => Cl, isTensorInList: () => h4, makeTypesMatch: () => Oe }); +var gw; +(function(r15) { + r15.R0 = "R0", r15.R1 = "R1", r15.R2 = "R2", r15.R3 = "R3", r15.R4 = "R4", r15.R5 = "R5", r15.R6 = "R6"; +})(gw || (gw = {})); +var xw; +(function(r15) { + r15.float32 = "float32", r15.int32 = "int32", r15.bool = "int32", r15.complex64 = "complex64"; +})(xw || (xw = {})); +var yw; +(function(r15) { + r15.float32 = "float32", r15.int32 = "int32", r15.bool = "bool", r15.complex64 = "complex64"; +})(yw || (yw = {})); +var bw; +(function(r15) { + r15.float32 = "float32", r15.int32 = "float32", r15.bool = "float32", r15.complex64 = "complex64"; +})(bw || (bw = {})); +var Cw; +(function(r15) { + r15.float32 = "complex64", r15.int32 = "complex64", r15.bool = "complex64", r15.complex64 = "complex64"; +})(Cw || (Cw = {})); +var f4 = { float32: bw, int32: xw, bool: yw, complex64: Cw }; +function dt(r15, e) { + if (r15 === "string" || e === "string") { + if (r15 === "string" && e === "string") return "string"; - throw new Error(`Can not upcast ${r16} with ${e}`); + throw new Error(`Can not upcast ${r15} with ${e}`); } - return AH[r16][e]; + return f4[r15][e]; } -function mi(r16) { - return pt(r16, "int32"); +function oi(r15) { + return dt(r15, "int32"); } -function md(r16) { - return r16 != null && typeof r16 == "object" && "texture" in r16 && r16.texture instanceof WebGLTexture; +function rd(r15) { + return r15 != null && typeof r15 == "object" && "texture" in r15 && r15.texture instanceof WebGLTexture; } -function dd(r16) { - return typeof GPUBuffer != "undefined" && r16 != null && typeof r16 == "object" && "buffer" in r16 && r16.buffer instanceof GPUBuffer; +function od(r15) { + return typeof GPUBuffer != "undefined" && r15 != null && typeof r15 == "object" && "buffer" in r15 && r15.buffer instanceof GPUBuffer; } -function Oe(r16, e) { - if (r16.dtype === e.dtype) - return [r16, e]; - let t10 = pt(r16.dtype, e.dtype); - return [r16.cast(t10), e.cast(t10)]; +function Oe(r15, e) { + if (r15.dtype === e.dtype) + return [r15, e]; + let t10 = dt(r15.dtype, e.dtype); + return [r15.cast(t10), e.cast(t10)]; } -function Fw(r16, e) { - $(r16.dtype === e.dtype, () => `The dtypes of the first(${r16.dtype}) and second(${e.dtype}) input must match`); +function ww(r15, e) { + E(r15.dtype === e.dtype, () => `The dtypes of the first(${r15.dtype}) and second(${e.dtype}) input must match`); } -function FH(r16, e) { - return e.some((t10) => t10.id === r16.id); +function h4(r15, e) { + return e.some((t10) => t10.id === r15.id); } -function Tc(r16) { +function Cl(r15) { let e = []; - return zk(r16, e, /* @__PURE__ */ new Set()), e; + return tk(r15, e, /* @__PURE__ */ new Set()), e; } -function zk(r16, e, t10) { - if (r16 == null) +function tk(r15, e, t10) { + if (r15 == null) return; - if (r16 instanceof dt) { - e.push(r16); + if (r15 instanceof mt) { + e.push(r15); return; } - if (!PH(r16)) + if (!g4(r15)) return; - let o = r16; + let o = r15; for (let n in o) { let s = o[n]; - t10.has(s) || (t10.add(s), zk(s, e, t10)); + t10.has(s) || (t10.add(s), tk(s, e, t10)); } } -function PH(r16) { - return Array.isArray(r16) || typeof r16 == "object"; +function g4(r15) { + return Array.isArray(r15) || typeof r15 == "object"; } -function Pw(r16) { - return r16.kernelName != null; +function Sw(r15) { + return r15.kernelName != null; } -var fd = class { +var nd = 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 = /* @__PURE__ */ new WeakMap(), this.profiling = false, this.activeProfile = { newBytes: 0, newTensors: 0, peakBytes: 0, kernels: [], result: null, get kernelNames() { return Array.from(new Set(this.kernels.map((e) => e.name))); @@ -4293,9 +4293,9 @@ var fd = class { this.registeredVariables[e].dispose(); } }; -var _c = class r { +var wl = class r { constructor(e) { - this.ENV = e, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new fd(); + this.ENV = e, this.registry = {}, this.registryFactory = {}, this.pendingBackendInitId = 0, this.state = new nd(); } async ready() { if (this.pendingBackendInit != null) @@ -4341,7 +4341,7 @@ var _c = class r { return e in this.registryFactory ? this.registryFactory[e].factory : null; } registerBackend(e, t10, o = 1) { - return e in this.registryFactory ? (Ea(`${e} backend was already registered. Reusing existing backend factory.`), false) : (this.registryFactory[e] = { factory: t10, priority: o }, true); + return e in this.registryFactory ? (Ia(`${e} backend was already registered. Reusing existing backend factory.`), false) : (this.registryFactory[e] = { factory: t10, priority: o }, true); } async setBackend(e) { if (this.registryFactory[e] == null) @@ -4352,15 +4352,15 @@ var _c = class r { if (!(o ? await t10 : t10)) return false; } - return this.backendInstance = this.registry[e], this.setupRegisteredKernels(), this.profiler = new ld(this.backendInstance), true; + return this.backendInstance = this.registry[e], this.setupRegisteredKernels(), this.profiler = new ed(this.backendInstance), true; } setupRegisteredKernels() { - ad(this.backendName).forEach((t10) => { + Ym(this.backendName).forEach((t10) => { t10.setupFunc != null && t10.setupFunc(this.backendInstance); }); } disposeRegisteredKernels(e) { - ad(e).forEach((o) => { + Ym(e).forEach((o) => { o.disposeFunc != null && o.disposeFunc(this.registry[e]); }); } @@ -4370,13 +4370,13 @@ var _c = class r { throw new Error(`Cannot initialize backend ${e}, no registration found.`); try { let o = t10.factory(); - if (o && !(o instanceof mo) && typeof o.then == "function") { - let n = ++this.pendingBackendInitId, s = o.then((a) => n < this.pendingBackendInitId ? false : (this.registry[e] = a, this.pendingBackendInit = null, true)).catch((a) => (n < this.pendingBackendInitId || (this.pendingBackendInit = null, Ea(`Initialization of backend ${e} failed`), Ea(a.stack || a.message)), false)); + if (o && !(o instanceof ao) && typeof o.then == "function") { + let n = ++this.pendingBackendInitId, s = o.then((a) => n < this.pendingBackendInitId ? false : (this.registry[e] = a, this.pendingBackendInit = null, true)).catch((a) => (n < this.pendingBackendInitId || (this.pendingBackendInit = null, Ia(`Initialization of backend ${e} failed`), Ia(a.stack || a.message)), false)); return this.pendingBackendInit = s, { success: s, asyncInit: true }; } else return this.registry[e] = o, { success: true, asyncInit: false }; } catch (o) { - return Ea(`Initialization of backend ${e} failed`), Ea(o.stack || o.message), { success: false, asyncInit: false }; + return Ia(`Initialization of backend ${e} failed`), Ia(o.stack || o.message), { success: false, asyncInit: false }; } } removeBackend(e) { @@ -4434,14 +4434,14 @@ var _c = class r { return r.nextVariableId++; } clone(e) { - let t10 = _.runKernel(vo, { x: e }), o = { x: e }, n = (a) => ({ x: () => { + let t10 = T.runKernel(Co, { x: e }), o = { x: e }, n = (a) => ({ x: () => { let i = "float32", p = { x: a }, u = { dtype: i }; - return _.runKernel(ho, p, u); + return T.runKernel(yo, p, u); } }), s = []; return this.addTapeNode(this.state.activeScope.name, o, [t10], n, s, {}), t10; } runKernel(e, t10, o) { - if (this.backendName == null && this.backend, !(tl(e, this.backendName) != null)) + if (this.backendName == null && this.backend, !(Xp(e, this.backendName) != null)) throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`); return this.runKernelFunc({ kernelName: e, inputs: t10, attrs: o }); } @@ -4462,17 +4462,17 @@ var _c = class r { this.shouldCheckForMemLeaks() && this.state.numDataMovesStack.push(0); let i; this.backendName == null && this.backend; - let p, u = Pw(e) ? e.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; - if (Pw(e)) { + let p, u = Sw(e) ? e.kernelName : this.state.activeScope != null ? this.state.activeScope.name : ""; + if (Sw(e)) { let { kernelName: f, inputs: h, attrs: g } = e; this.backendName == null && this.backend; - let x = tl(f, this.backendName); - $(x != null, () => `Cannot find registered kernel '${f}' for backend '${this.backendName}'`), i = () => { + let x = Xp(f, this.backendName); + E(x != null, () => `Cannot find registered kernel '${f}' for backend '${this.backendName}'`), i = () => { let b = this.backend.numDataIds(); p = x.kernelFunc({ inputs: h, attrs: g, backend: this.backend }); - let w = Array.isArray(p) ? p : [p]; - this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(f, b, w); - let S = w.map((k) => k.rank != null ? k : this.makeTensorFromTensorInfo(k)); + let C = Array.isArray(p) ? p : [p]; + this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(f, b, C); + let S = C.map((k) => k.rank != null ? k : this.makeTensorFromTensorInfo(k)); if (n) { let k = this.getTensorsForGradient(f, h, S); o = this.saveTensorsForBackwardMode(k); @@ -4490,20 +4490,20 @@ var _c = class r { return this.shouldCheckForMemLeaks() && this.checkKernelForMemLeak(u, g, x), x; }; } - let { inputs: l, attrs: c } = e, m = Pw(e) ? null : e.backwardsFunc, d; + let { inputs: c, attrs: l } = e, m = Sw(e) ? null : e.backwardsFunc, d; return this.scopedRun(() => this.state.kernelDepth++, () => this.state.kernelDepth--, () => { - !this.ENV.getBool("DEBUG") && !this.state.profiling ? t10 = i() : (d = this.profiler.profileKernel(u, l, () => i()), this.ENV.getBool("DEBUG") && this.profiler.logKernelProfile(d), t10 = d.outputs); - }), n && this.addTapeNode(u, l, t10, m, o, c), this.state.profiling && this.state.activeProfile.kernels.push({ name: u, bytesAdded: this.state.numBytes - s, totalBytesSnapshot: this.state.numBytes, tensorsAdded: this.state.numTensors - a, totalTensorsSnapshot: this.state.numTensors, inputShapes: Object.keys(l).map((f) => l[f] != null ? l[f].shape : null), outputShapes: t10.map((f) => f.shape), kernelTimeMs: d.timeMs, extraInfo: d.extraInfo }), Array.isArray(p) ? t10 : t10[0]; + !this.ENV.getBool("DEBUG") && !this.state.profiling ? t10 = i() : (d = this.profiler.profileKernel(u, c, () => i()), this.ENV.getBool("DEBUG") && this.profiler.logKernelProfile(d), t10 = d.outputs); + }), n && this.addTapeNode(u, c, t10, m, o, l), this.state.profiling && this.state.activeProfile.kernels.push({ name: u, bytesAdded: this.state.numBytes - s, totalBytesSnapshot: this.state.numBytes, tensorsAdded: this.state.numTensors - a, totalTensorsSnapshot: this.state.numTensors, inputShapes: Object.keys(c).map((f) => c[f] != null ? c[f].shape : null), outputShapes: t10.map((f) => f.shape), kernelTimeMs: d.timeMs, extraInfo: d.extraInfo }), Array.isArray(p) ? t10 : t10[0]; } saveTensorsForBackwardMode(e) { return e.map((o) => this.keep(this.clone(o))); } getTensorsForGradient(e, t10, o) { - let n = Cw(e); + let n = iw(e); if (n != null) { let s = n.inputsToSave || [], a = n.outputsToSave || [], i; - n.saveAllInputs ? ($(Array.isArray(t10), () => "saveAllInputs is true, expected inputs to be an array."), i = Object.keys(t10).map((u) => t10[u])) : i = s.map((u) => t10[u]); - let p = o.filter((u, l) => a[l]); + n.saveAllInputs ? (E(Array.isArray(t10), () => "saveAllInputs is true, expected inputs to be an array."), i = Object.keys(t10).map((u) => t10[u])) : i = s.map((u) => t10[u]); + let p = o.filter((u, c) => a[c]); return i.concat(p); } return []; @@ -4513,10 +4513,10 @@ var _c = class r { throw new Error("Values passed to engine.makeTensor() are null"); o = o || "float32", n = n || this.backend; let s = e; - o === "string" && dn(e[0]) && (s = e.map((p) => iu(p))); - let a = n.write(s, t10, o), i = new dt(t10, o, a, this.nextTensorId()); + o === "string" && zo(e[0]) && (s = e.map((p) => Ji(p))); + let a = n.write(s, t10, o), i = new mt(t10, o, a, this.nextTensorId()); if (this.trackTensor(i, n), o === "string") { - let p = this.state.tensorInfo.get(a), u = gw(s); + let p = this.state.tensorInfo.get(a), u = ow(s); this.state.numBytes += u - p.bytes, p.bytes = u; } return i; @@ -4527,12 +4527,12 @@ var _c = class r { return this.makeTensorFromTensorInfo(s, n); } makeTensorFromTensorInfo(e, t10) { - let { dataId: o, shape: n, dtype: s } = e, a = new dt(n, s, o, this.nextTensorId()); + let { dataId: o, shape: n, dtype: s } = e, a = new mt(n, s, o, this.nextTensorId()); return this.trackTensor(a, t10), a; } makeVariable(e, t10 = true, o, n) { o = o || this.nextVariableId().toString(), n != null && n !== e.dtype && (e = e.cast(n)); - let s = new ci(e, t10, o, this.nextTensorId()); + let s = new ri(e, t10, o, this.nextTensorId()); if (this.state.registeredVariables[s.name] != null) throw new Error(`Variable with name ${s.name} was already registered`); return this.state.registeredVariables[s.name] = s, this.incRef(s, this.backend), s; @@ -4540,7 +4540,7 @@ var _c = class r { trackTensor(e, t10) { this.state.numTensors++, e.dtype === "string" && this.state.numStringTensors++; let o = 0; - e.dtype !== "complex64" && e.dtype !== "string" && (o = e.size * jp(e.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(e.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(e.dataId, { backend: t10 || this.backend, dtype: e.dtype, shape: e.shape, bytes: o })), e instanceof ci || this.track(e); + e.dtype !== "complex64" && e.dtype !== "string" && (o = e.size * Wp(e.dtype)), this.state.numBytes += o, this.state.tensorInfo.has(e.dataId) || (this.state.numDataBuffers++, this.state.tensorInfo.set(e.dataId, { backend: t10 || this.backend, dtype: e.dtype, shape: e.shape, bytes: o })), e instanceof ri || this.track(e); } incRef(e, t10) { this.trackTensor(e, t10), this.backend.incRef(e.dataId); @@ -4553,7 +4553,7 @@ var _c = class r { return; let t10 = this.state.tensorInfo.get(e.dataId); if (this.state.numTensors--, e.dtype === "string" && (this.state.numStringTensors--, this.state.numBytes -= t10.bytes), e.dtype !== "complex64" && e.dtype !== "string") { - let o = e.size * jp(e.dtype); + let o = e.size * Wp(e.dtype); this.state.numBytes -= o; } t10.backend.disposeData(e.dataId) && this.removeDataId(e.dataId, t10.backend); @@ -4583,13 +4583,13 @@ var _c = class r { return this.state.gradientDepth > 0 && this.state.kernelDepth === 0; } addTapeNode(e, t10, o, n, s, a) { - let i = { id: this.state.nextTapeNodeId++, kernelName: e, inputs: t10, outputs: o, saved: s }, p = Cw(e); - p != null && (n = p.gradFunc), n != null && (i.gradient = (u) => (u = u.map((l, c) => { - if (l == null) { - let m = o[c], d = Yp(m.size, m.dtype); + let i = { id: this.state.nextTapeNodeId++, kernelName: e, inputs: t10, outputs: o, saved: s }, p = iw(e); + p != null && (n = p.gradFunc), n != null && (i.gradient = (u) => (u = u.map((c, l) => { + if (c == null) { + let m = o[l], d = Gp(m.size, m.dtype); return this.makeTensor(d, m.shape, m.dtype); } - return l; + return c; }), n(u.length > 1 ? u : u[0], s, a))), this.state.activeTape.push(i); } keep(e) { @@ -4606,7 +4606,7 @@ var _c = class r { e && (t10.name = e), this.state.scopeStack.push(t10), this.state.activeScope = t10; } endScope(e) { - let t10 = Tc(e), o = new Set(t10.map((s) => s.id)); + let t10 = Cl(e), o = new Set(t10.map((s) => s.id)); for (let s = 0; s < this.state.activeScope.track.length; s++) { let a = this.state.activeScope.track[s]; !a.kept && !o.has(a.id) && a.dispose(); @@ -4617,37 +4617,37 @@ var _c = class r { }); } gradients(e, t10, o, n = false) { - if ($(t10.length > 0, () => "gradients() received an empty list of xs."), o != null && o.dtype !== "float32") + if (E(t10.length > 0, () => "gradients() received an empty list of xs."), o != null && o.dtype !== "float32") throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`); let s = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy("forward", e)); - $(s instanceof dt, () => "The result y returned by f() must be a tensor."); - let a = Dk(this.state.activeTape, t10, s); + E(s instanceof mt, () => "The result y returned by f() must be a tensor."); + let a = q0(this.state.activeTape, t10, s); if (!n && a.length === 0 && t10.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[s.id] = o == null ? OH(s.shape) : o, Ak(i, a, (u) => this.tidy(u), MH); + i[s.id] = o == null ? x4(s.shape) : o, j0(i, a, (u) => this.tidy(u), y4); let p = t10.map((u) => i[u.id]); return this.state.gradientDepth === 0 && (this.state.activeTape.forEach((u) => { - for (let l of u.saved) - l.dispose(); + for (let c of u.saved) + c.dispose(); }), this.state.activeTape = null), { value: s, grads: p }; }); } customGrad(e) { - return $(ra(e), () => "The f passed in customGrad(f) must be a function."), (...t10) => { - $(t10.every((i) => i instanceof dt), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); + return E(qs(e), () => "The f passed in customGrad(f) must be a function."), (...t10) => { + E(t10.every((i) => i instanceof mt), () => "The args passed in customGrad(f)(x1, x2,...) must all be tensors"); let o, n = {}; t10.forEach((i, p) => { n[p] = i; }); - let s = (i, p) => (o = e(...t10, p), $(o.value instanceof dt, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), $(ra(o.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."), o.value), a = (i, p) => { - let u = o.gradFunc(i, p), l = Array.isArray(u) ? u : [u]; - $(l.length === t10.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(...)."), $(l.every((m) => m instanceof dt), () => "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 c = {}; - return l.forEach((m, d) => { - c[d] = () => m; - }), c; + let s = (i, p) => (o = e(...t10, p), E(o.value instanceof mt, () => "The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"), E(qs(o.gradFunc), () => "The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."), o.value), a = (i, p) => { + let u = o.gradFunc(i, p), c = Array.isArray(u) ? u : [u]; + E(c.length === t10.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(...)."), E(c.every((m) => m instanceof mt), () => "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 l = {}; + return c.forEach((m, d) => { + l[d] = () => m; + }), l; }; return this.runKernelFunc({ forwardFunc: s, backwardsFunc: a, inputs: n }); }; @@ -4662,8 +4662,8 @@ var _c = class r { return this.state.tensorInfo.get(e).backend.readToGPU(e, t10); } async time(e) { - let t10 = Uu(), o = await this.backend.time(e); - return o.wallMs = Uu() - t10, o; + let t10 = Mu(), o = await this.backend.time(e); + return o.wallMs = Mu() - t10, o; } track(e) { return this.state.activeScope != null && (e.scopeId = this.state.activeScope.id, this.state.activeScope.track.push(e)), e; @@ -4672,185 +4672,185 @@ var _c = class r { return this.state.registeredVariables; } reset() { - this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new fd(); + this.pendingBackendInitId++, this.state.dispose(), this.ENV.reset(), this.state = new nd(); 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; } }; -_c.nextTensorId = 0; -_c.nextVariableId = 0; -function OH(r16) { - let e = bc(ze(r16), "float32"); - return _.makeTensor(e, r16, "float32"); +wl.nextTensorId = 0; +wl.nextVariableId = 0; +function x4(r15) { + let e = ml(ze(r15), "float32"); + return T.makeTensor(e, r15, "float32"); } -function Ow() { - let r16 = bw(); - if (r16._tfengine == null) { - let e = new Cc(r16); - r16._tfengine = new _c(e); +function Iw() { + let r15 = aw(); + if (r15._tfengine == null) { + let e = new dl(r15); + r15._tfengine = new wl(e); } - return hk(r16._tfengine.ENV), Mk(() => r16._tfengine), r16._tfengine; + return $0(r15._tfengine.ENV), Z0(() => r15._tfengine), r15._tfengine; } -var _ = Ow(); -function MH(r16, e) { - let t10 = { a: r16, b: e }; - return _.runKernel(Rr, t10); +var T = Iw(); +function y4(r15, e) { + let t10 = { a: r15, b: e }; + return T.runKernel(uo, t10); } -var uu = {}; -qe(uu, { isBrowser: () => Lw, isMobile: () => zH, mockIsMobile: () => BH }); -function LH() { +var eu = {}; +qe(eu, { isBrowser: () => kw, isMobile: () => w4, mockIsMobile: () => C4 }); +function b4() { return typeof navigator != "undefined" && navigator != null; } -var Mw; -function BH(r16) { - Mw = r16; +var vw; +function C4(r15) { + vw = r15; } -function zH(r16) { - if (Mw !== void 0) - return Mw; - if (r16 || LH()) { - if (r16 || (r16 = navigator), r16.product === "ReactNative") +function w4(r15) { + if (vw !== void 0) + return vw; + if (r15 || b4()) { + if (r15 || (r15 = navigator), r15.product === "ReactNative") return true; - let e = r16.userAgent || r16.vendor || (typeof window != "undefined" ? window.opera : ""); + let e = r15.userAgent || r15.vendor || (typeof window != "undefined" ? window.opera : ""); if (!e) { - let t10 = r16; + let t10 = r15; return t10.userAgentData && t10.userAgentData.mobile; } 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 false; } -function Lw() { +function kw() { return typeof window != "undefined" && window.document != null || typeof WorkerGlobalScope != "undefined"; } -var Dr = A(); -Dr.registerFlag("DEBUG", () => false, (r16) => { - r16 && 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."); +var _r = A(); +_r.registerFlag("DEBUG", () => false, (r15) => { + r15 && 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", () => Lw()); -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("IS_SAFARI", () => typeof navigator != "undefined" && navigator != null && navigator.userAgent != null && /Safari/.test(navigator.userAgent) && /Apple/.test(navigator.vendor)); -Dr.registerFlag("PROD", () => false); -Dr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => Dr.getBool("DEBUG")); -Dr.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); -Dr.registerFlag("IS_TEST", () => false); -Dr.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => Dr.getBool("DEBUG")); -Dr.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); -Dr.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); -Dr.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); -function ur(r16, e) { - let t10 = r16; - if (Mt(r16)) - return e === "string" ? [] : [r16.length]; - if (md(r16)) { - let n = r16.channels || "RGBA"; - return [r16.height, r16.width * n.length]; - } else if (dd(r16)) - return [r16.buffer.size / (e == null ? 4 : jp(e))]; - if (!Array.isArray(r16)) +_r.registerFlag("IS_BROWSER", () => kw()); +_r.registerFlag("IS_NODE", () => typeof process != "undefined" && typeof process.versions != "undefined" && typeof process.versions.node != "undefined"); +_r.registerFlag("IS_CHROME", () => typeof navigator != "undefined" && navigator != null && navigator.userAgent != null && /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor)); +_r.registerFlag("IS_SAFARI", () => typeof navigator != "undefined" && navigator != null && navigator.userAgent != null && /Safari/.test(navigator.userAgent) && /Apple/.test(navigator.vendor)); +_r.registerFlag("PROD", () => false); +_r.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY", () => _r.getBool("DEBUG")); +_r.registerFlag("DEPRECATION_WARNINGS_ENABLED", () => true); +_r.registerFlag("IS_TEST", () => false); +_r.registerFlag("CHECK_COMPUTATION_FOR_ERRORS", () => _r.getBool("DEBUG")); +_r.registerFlag("WRAP_TO_IMAGEBITMAP", () => false); +_r.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU", () => false); +_r.registerFlag("USE_SETTIMEOUTCUSTOM", () => false); +function sr(r15, e) { + let t10 = r15; + if (Pt(r15)) + return e === "string" ? [] : [r15.length]; + if (rd(r15)) { + let n = r15.channels || "RGBA"; + return [r15.height, r15.width * n.length]; + } else if (od(r15)) + return [r15.buffer.size / (e == null ? 4 : Wp(e))]; + if (!Array.isArray(r15)) return []; let o = []; - for (; Array.isArray(t10) || Mt(t10) && e !== "string"; ) + for (; Array.isArray(t10) || Pt(t10) && e !== "string"; ) o.push(t10.length), t10 = t10[0]; - return Array.isArray(r16) && A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && Uk(r16, o, []), o; + return Array.isArray(r15) && A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY") && nk(r15, o, []), o; } -function Uk(r16, e, t10) { - if (t10 = t10 || [], !Array.isArray(r16) && !Mt(r16)) { - $(e.length === 0, () => `Element arr[${t10.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`); +function nk(r15, e, t10) { + if (t10 = t10 || [], !Array.isArray(r15) && !Pt(r15)) { + E(e.length === 0, () => `Element arr[${t10.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`); return; } - $(e.length > 0, () => `Element arr[${t10.join("][")}] should be a primitive, but is an array of ${r16.length} elements`), $(r16.length === e[0], () => `Element arr[${t10.join("][")}] should have ${e[0]} elements, but has ${r16.length} elements`); + E(e.length > 0, () => `Element arr[${t10.join("][")}] should be a primitive, but is an array of ${r15.length} elements`), E(r15.length === e[0], () => `Element arr[${t10.join("][")}] should have ${e[0]} elements, but has ${r15.length} elements`); let o = e.slice(1); - for (let n = 0; n < r16.length; ++n) - Uk(r16[n], o, t10.concat(n)); + for (let n = 0; n < r15.length; ++n) + nk(r15[n], o, t10.concat(n)); } -function Wk(r16, e, t10, o) { - if (r16 !== "string_or_numeric") { - if (r16 == null) +function ok(r15, e, t10, o) { + if (r15 !== "string_or_numeric") { + if (r15 == null) throw new Error("Expected dtype cannot be null."); - if (r16 !== "numeric" && r16 !== e || r16 === "numeric" && e === "string") - throw new Error(`Argument '${t10}' passed to '${o}' must be ${r16} tensor, but got ${e} tensor`); + if (r15 !== "numeric" && r15 !== e || r15 === "numeric" && e === "string") + throw new Error(`Argument '${t10}' passed to '${o}' must be ${r15} tensor, but got ${e} tensor`); } } -function v(r16, e, t10, o = "numeric") { - if (r16 instanceof _w()) - return Wk(o, r16.dtype, e, t10), r16; - let n = Bi(r16); - if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), Wk(o, n, e, t10), r16 == null || !Mt(r16) && !Array.isArray(r16) && typeof r16 != "number" && typeof r16 != "boolean" && typeof r16 != "string") { - let p = r16 == null ? "null" : r16.constructor.name; +function v(r15, e, t10, o = "numeric") { + if (r15 instanceof hw()) + return ok(o, r15.dtype, e, t10), r15; + let n = Ei(r15); + if (n !== "string" && ["bool", "int32", "float32"].indexOf(o) >= 0 && (n = o), ok(o, n, e, t10), r15 == null || !Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "string") { + let p = r15 == null ? "null" : r15.constructor.name; throw new Error(`Argument '${e}' passed to '${t10}' must be a Tensor or TensorLike, but got '${p}'`); } - let s = ur(r16, n); - !Mt(r16) && !Array.isArray(r16) && (r16 = [r16]); - let i = n !== "string" ? nl(r16, n) : Us(r16, [], true); - return _.makeTensor(i, s, n); + let s = sr(r15, n); + !Pt(r15) && !Array.isArray(r15) && (r15 = [r15]); + let i = n !== "string" ? Zp(r15, n) : Fs(r15, [], true); + return T.makeTensor(i, s, n); } -function di(r16, e, t10, o = "numeric") { - if (!Array.isArray(r16)) +function ni(r15, e, t10, o = "numeric") { + if (!Array.isArray(r15)) throw new Error(`Argument ${e} passed to ${t10} must be a \`Tensor[]\` or \`TensorLike[]\``); - return r16.map((s, a) => v(s, `${e}[${a}]`, t10, o)); + return r15.map((s, a) => v(s, `${e}[${a}]`, t10, o)); } -var Bw = "__op"; -function N(r16) { - let e = Object.keys(r16); +var Nw = "__op"; +function N(r15) { + let e = Object.keys(r15); if (e.length !== 1) throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`); - let t10 = e[0], o = r16[t10]; - t10.endsWith("_") && (t10 = t10.substring(0, t10.length - 1)), t10 = t10 + Bw; + let t10 = e[0], o = r15[t10]; + t10.endsWith("_") && (t10 = t10.substring(0, t10.length - 1)), t10 = t10 + Nw; let n = (...s) => { - _.startScope(t10); + T.startScope(t10); try { let a = o(...s); - return Ou(a) && console.error("Cannot return a Promise inside of tidy."), _.endScope(a), a; + return Eu(a) && console.error("Cannot return a Promise inside of tidy."), T.endScope(a), a; } catch (a) { - throw _.endScope(null), a; + throw T.endScope(null), a; } }; return Object.defineProperty(n, "name", { value: t10, configurable: true }), n; } -function VH(r16, e) { - let t10 = v(r16, "real", "complex"), o = v(e, "imag", "complex"); - yt(t10.shape, o.shape, `real and imag shapes, ${t10.shape} and ${o.shape}, must match in call to tf.complex().`); +function S4(r15, e) { + let t10 = v(r15, "real", "complex"), o = v(e, "imag", "complex"); + xt(t10.shape, o.shape, `real and imag shapes, ${t10.shape} and ${o.shape}, must match in call to tf.complex().`); let n = { real: t10, imag: o }; - return _.runKernel(ei, n); + return T.runKernel(Di, n); } -var Ar = N({ complex_: VH }); -function vr(r16, e, t10, o) { +var Er = N({ complex_: S4 }); +function wr(r15, e, t10, o) { if (o == null) - o = Bi(r16); + o = Ei(r15); else if (o === "complex64") throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag)."); - if (dd(r16) || md(r16)) { + if (od(r15) || rd(r15)) { if (o !== "float32" && o !== "int32") throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`); - return _.backend.createTensorFromGPUData(r16, e || t10, o); + return T.backend.createTensorFromGPUData(r15, e || t10, o); } - if (!Mt(r16) && !Array.isArray(r16) && typeof r16 != "number" && typeof r16 != "boolean" && typeof r16 != "string") + if (!Pt(r15) && !Array.isArray(r15) && typeof r15 != "number" && typeof r15 != "boolean" && typeof r15 != "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 (e != null) { - St(e); + Ct(e); let n = ze(e), s = ze(t10); - $(n === s, () => `Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`); + E(n === s, () => `Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`); for (let a = 0; a < t10.length; ++a) { let i = t10[a], p = a === t10.length - 1 ? i !== ze(e.slice(a)) : true; - $(t10[a] === e[a] || !p, () => `Error creating a new Tensor. Inferred shape (${t10}) does not match the provided shape (${e}). `); + E(t10[a] === e[a] || !p, () => `Error creating a new Tensor. Inferred shape (${t10}) does not match the provided shape (${e}). `); } } - return !Mt(r16) && !Array.isArray(r16) && (r16 = [r16]), e = e || t10, r16 = o !== "string" ? nl(r16, o) : Us(r16, [], true), _.makeTensor(r16, e, o); + return !Pt(r15) && !Array.isArray(r15) && (r15 = [r15]), e = e || t10, r15 = o !== "string" ? Zp(r15, o) : Fs(r15, [], true), T.makeTensor(r15, e, o); } -function pr(r16, e, t10) { - let o = ur(r16, t10); - return vr(r16, e, o, t10); +function ar(r15, e, t10) { + let o = sr(r15, t10); + return wr(r15, e, o, t10); } -var fi = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; -var lr = class r2 { +var si = { float32: 4, float16: 2, int32: 4, uint16: 2, uint8: 1, bool: 1, complex64: 8 }; +var ir = class r2 { static join(e) { return new r2(e).slice(); } constructor(e) { - if (this.shards = [], this.previousShardIndex = 0, e == null || (e instanceof Array || (e = [e]), e = e.map((o) => Mt(o) ? o.buffer : o), e.length === 0)) + if (this.shards = [], this.previousShardIndex = 0, e == null || (e instanceof Array || (e = [e]), e = e.map((o) => Pt(o) ? o.buffer : o), e.length === 0)) return; this.bufferUniformSize = e[0].byteLength; let t10 = 0; @@ -4872,7 +4872,7 @@ var lr = class r2 { throw new Error(`Could not find start shard for byte ${e}`); let n = t10 - e, s = new ArrayBuffer(n), a = new Uint8Array(s), i = 0; for (let p = o; p < this.shards.length; p++) { - let u = this.shards[p], c = e + i - u.start, m = i, f = Math.min(t10, u.end) - u.start, h = new Uint8Array(u.buffer, c, f - c); + let u = this.shards[p], l = e + i - u.start, m = i, f = Math.min(t10, u.end) - u.start, h = new Uint8Array(u.buffer, l, f - l); if (a.set(h, m), i += h.length, t10 < u.end) break; } @@ -4888,191 +4888,191 @@ var lr = class r2 { } if (t10(this.shards[this.previousShardIndex]) === 0) return this.previousShardIndex; - let o = WH(this.shards, t10); + let o = I4(this.shards, t10); return o === -1 ? -1 : (this.previousShardIndex = o, this.previousShardIndex); } }; -function WH(r16, e) { - let t10 = 0, o = r16.length; +function I4(r15, e) { + let t10 = 0, o = r15.length; for (; t10 <= o; ) { - let n = Math.floor((o - t10) / 2) + t10, s = e(r16[n]); + let n = Math.floor((o - t10) / 2) + t10, s = e(r15[n]); if (s === 0) return n; s < 0 ? o = n : t10 = n + 1; } return -1; } -function Gde() { +function hme() { A().set("PROD", true); } -function Hde() { +function gme() { A().set("DEBUG", true); } -function Kde() { +function xme() { A().set("DEPRECATION_WARNINGS_ENABLED", false), console.warn("TensorFlow.js deprecation warnings have been disabled."); } -function zw(r16) { - A().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r16 + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); +function Tw(r15) { + A().getBool("DEPRECATION_WARNINGS_ENABLED") && console.warn(r15 + " You can disable deprecation warnings with tf.disableDeprecationWarnings()."); } -Bk(zw); -function qde() { - _.disposeVariables(); +ek(Tw); +function yme() { + T.disposeVariables(); } -function cr() { - return _; +function ur() { + return T; } -function jde() { - return _.memory(); +function bme() { + return T.memory(); } -function Xde(r16) { - return _.profile(r16); +function Cme(r15) { + return T.profile(r15); } -function De(r16, e) { - return _.tidy(r16, e); +function De(r15, e) { + return T.tidy(r15, e); } -function Lt(r16) { - Tc(r16).forEach((t10) => t10.dispose()); +function Ot(r15) { + Cl(r15).forEach((t10) => t10.dispose()); } -function Fr(r16) { - return _.keep(r16); +function $r(r15) { + return T.keep(r15); } -function Yde(r16) { - return _.time(r16); +function wme(r15) { + return T.time(r15); } -function Qde(r16) { - return _.setBackend(r16); +function Sme(r15) { + return T.setBackend(r15); } -function Zde() { - return _.ready(); +function Ime() { + return T.ready(); } -function Gk() { - return _.backendName; +function sk() { + return T.backendName; } -function Jde(r16) { - _.removeBackend(r16); +function vme(r15) { + T.removeBackend(r15); } -function efe(r16) { - return _.findBackend(r16); +function kme(r15) { + return T.findBackend(r15); } -function tfe(r16) { - return _.findBackendFactory(r16); +function Nme(r15) { + return T.findBackendFactory(r15); } -function pu(r16, e, t10 = 1) { - return _.registerBackend(r16, e, t10); +function tu(r15, e, t10 = 1) { + return T.registerBackend(r15, e, t10); } -function Hk() { - return _.backend; +function ak() { + return T.backend; } -function rfe(r16, e) { - A().setPlatform(r16, e); +function Tme(r15, e) { + A().setPlatform(r15, e); } -var lu = 4; -async function jk(r16, e) { - let t10 = [], o = [], n = Array.isArray(r16) ? r16.map((a) => a.name) : Object.keys(r16); +var ru = 4; +async function pk(r15, e) { + let t10 = [], o = [], n = Array.isArray(r15) ? r15.map((a) => a.name) : Object.keys(r15); for (let a = 0; a < n.length; ++a) { - let i = n[a], p = Array.isArray(r16) ? r16[a].tensor : r16[i]; + let i = n[a], p = Array.isArray(r15) ? r15[a].tensor : r15[i]; if (p.dtype !== "float32" && p.dtype !== "int32" && p.dtype !== "bool" && p.dtype !== "string" && p.dtype !== "complex64") throw new Error(`Unsupported dtype in weight '${i}': ${p.dtype}`); let u = { name: i, shape: p.shape, dtype: p.dtype }; if (p.dtype === "string") { - let l = new Promise(async (c) => { - let m = await p.bytes(), d = m.reduce((g, x) => g + x.length, 0) + lu * m.length, f = new Uint8Array(d), h = 0; + let c = new Promise(async (l) => { + let m = await p.bytes(), d = m.reduce((g, x) => g + x.length, 0) + ru * m.length, f = new Uint8Array(d), h = 0; for (let g = 0; g < m.length; g++) { let x = m[g], b = new Uint8Array(new Uint32Array([x.length]).buffer); - f.set(b, h), h += lu, f.set(x, h), h += x.length; + f.set(b, h), h += ru, f.set(x, h), h += x.length; } - c(f); + l(f); }); - o.push(l); + o.push(c); } else o.push(p.data()); e != null && (u.group = e), t10.push(u); } let s = await Promise.all(o); - return { data: HH(s), specs: t10 }; + return { data: N4(s), specs: t10 }; } -function hd(r16, e) { - let t10 = new lr(r16), o = {}, n = 0; +function sd(r15, e) { + let t10 = new ir(r15), o = {}, n = 0; for (let s of e) { - let a = UH(s, (i, p) => t10.slice(n + i, n + p)); - o[s.name] = Xk(s, t10.slice(n, n + a)), n += a; + let a = v4(s, (i, p) => t10.slice(n + i, n + p)); + o[s.name] = ck(s, t10.slice(n, n + a)), n += a; } return o; } -function UH(r16, e) { - let t10 = ze(r16.shape), o; - if ("quantization" in r16) { - let n = r16.quantization; - o = fi[n.dtype]; - } else if (r16.dtype === "string") { +function v4(r15, e) { + let t10 = ze(r15.shape), o; + if ("quantization" in r15) { + let n = r15.quantization; + o = si[n.dtype]; + } else if (r15.dtype === "string") { let n = 0; for (let s = 0; s < t10; s++) - n += lu + new Uint32Array(e(n, n + lu))[0]; + n += ru + new Uint32Array(e(n, n + ru))[0]; return n; } else - o = fi[r16.dtype]; + o = si[r15.dtype]; return t10 * o; } -async function GH(r16, e) { - let t10 = ze(r16.shape), o; - if ("quantization" in r16) { - let n = r16.quantization; - o = fi[n.dtype]; - } else if (r16.dtype === "string") { +async function k4(r15, e) { + let t10 = ze(r15.shape), o; + if ("quantization" in r15) { + let n = r15.quantization; + o = si[n.dtype]; + } else if (r15.dtype === "string") { let n = 0; for (let s = 0; s < t10; s++) - n += lu + new Uint32Array(await e(n, n + lu))[0]; + n += ru + new Uint32Array(await e(n, n + ru))[0]; return n; } else - o = fi[r16.dtype]; + o = si[r15.dtype]; return t10 * o; } -function Xk(r16, e) { - let t10 = r16.name, o = r16.dtype, n = r16.shape, s = ze(n), a, i = 0; - if ("quantization" in r16) { - let p = r16.quantization; +function ck(r15, e) { + let t10 = r15.name, o = r15.dtype, n = r15.shape, s = ze(n), a, i = 0; + if ("quantization" in r15) { + let p = r15.quantization; if (p.dtype === "uint8" || p.dtype === "uint16") { if (!("min" in p && "scale" in p)) - throw new Error(`Weight ${r16.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`); + throw new Error(`Weight ${r15.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`); } else if (p.dtype === "float16") { if (o !== "float32") - throw new Error(`Weight ${r16.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${o}.`); + throw new Error(`Weight ${r15.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${o}.`); } else - throw new Error(`Weight ${r16.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); - let u = fi[p.dtype], l = p.dtype === "uint8" ? new Uint8Array(e) : new Uint16Array(e); + throw new Error(`Weight ${r15.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`); + let u = si[p.dtype], c = p.dtype === "uint8" ? new Uint8Array(e) : new Uint16Array(e); if (o === "float32") if (p.dtype === "uint8" || p.dtype === "uint16") { - a = new Float32Array(l.length); - for (let c = 0; c < l.length; c++) { - let m = l[c]; - a[c] = m * p.scale + p.min; + a = new Float32Array(c.length); + for (let l = 0; l < c.length; l++) { + let m = c[l]; + a[l] = m * p.scale + p.min; } } else if (p.dtype === "float16") - a = XH()(l); + a = $4()(c); else throw new Error(`Unsupported quantization type ${p.dtype} for weight type float32.`); else if (o === "int32") { if (p.dtype !== "uint8" && p.dtype !== "uint16") throw new Error(`Unsupported quantization type ${p.dtype} for weight type int32.`); - a = new Int32Array(l.length); - for (let c = 0; c < l.length; c++) { - let m = l[c]; - a[c] = Math.round(m * p.scale + p.min); + a = new Int32Array(c.length); + for (let l = 0; l < c.length; l++) { + let m = c[l]; + a[l] = Math.round(m * p.scale + p.min); } } else throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); i += s * u; } else if (o === "string") { - let p = ze(r16.shape); + let p = ze(r15.shape); a = []; for (let u = 0; u < p; u++) { - let l = new Uint32Array(e.slice(i, i + lu))[0]; - i += lu; - let c = new Uint8Array(e.slice(i, i + l)); - a.push(c), i += l; + let c = new Uint32Array(e.slice(i, i + ru))[0]; + i += ru; + let l = new Uint8Array(e.slice(i, i + c)); + a.push(l), i += c; } } else { - let p = fi[o]; + let p = si[o]; if (o === "float32") a = new Float32Array(e); else if (o === "int32") @@ -5081,21 +5081,21 @@ function Xk(r16, e) { a = new Uint8Array(e); else if (o === "complex64") { a = new Float32Array(e); - let u = new Float32Array(a.length / 2), l = new Float32Array(a.length / 2); + let u = new Float32Array(a.length / 2), c = new Float32Array(a.length / 2); for (let f = 0; f < u.length; f++) - u[f] = a[f * 2], l[f] = a[f * 2 + 1]; - let c = pr(u, n, "float32"), m = pr(l, n, "float32"), d = Ar(c, m); - return c.dispose(), m.dispose(), d; + u[f] = a[f * 2], c[f] = a[f * 2 + 1]; + let l = ar(u, n, "float32"), m = ar(c, n, "float32"), d = Er(l, m); + return l.dispose(), m.dispose(), d; } else throw new Error(`Unsupported dtype in weight '${t10}': ${o}`); i += s * p; } - return pr(a, n, o); + return ar(a, n, o); } -async function Kk(r16, e, t10) { +async function ik(r15, e, t10) { let o = new Uint8Array(e); for (; o.byteLength < t10; ) { - let { done: n, value: s } = await r16.read(); + let { done: n, value: s } = await r15.read(); if (n && s == null) { let i = t10 - o.byteLength; throw new Error(`Reader is done but ${i} bytes are still expected`); @@ -5105,26 +5105,26 @@ async function Kk(r16, e, t10) { } return o.buffer; } -async function gd(r16, e) { - let t10 = {}, o = r16.getReader(), n = new ArrayBuffer(0); +async function ad(r15, e) { + let t10 = {}, o = r15.getReader(), n = new ArrayBuffer(0); for (let s of e) { - let a = await GH(s, async (u, l) => (n = await Kk(o, n, l), n.slice(u, l))); - n = await Kk(o, n, a); + let a = await k4(s, async (u, c) => (n = await ik(o, n, c), n.slice(u, c))); + n = await ik(o, n, a); let i = n.slice(0, a); n = n.slice(a); - let p = Xk(s, i); - if (t10[s.name] = p, Gk() === "webgpu") { - let u = Hk(); + let p = ck(s, i); + if (t10[s.name] = p, sk() === "webgpu") { + let u = ak(); "uploadToGPU" in u && ze(p.shape) >= A().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD") && u.uploadToGPU(p.dataId); } } return t10; } -function HH(r16) { - if (r16 === null) - throw new Error(`Invalid input value: ${JSON.stringify(r16)}`); +function N4(r15) { + if (r15 === null) + throw new Error(`Invalid input value: ${JSON.stringify(r15)}`); let e = 0, t10 = []; - r16.forEach((s) => { + r15.forEach((s) => { if (e += s.byteLength, t10.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}`); }); @@ -5133,70 +5133,70 @@ function HH(r16) { o.set(new Uint8Array(s.buffer), n), n += s.byteLength; }), o.buffer; } -var Vw = typeof Buffer != "undefined" && (typeof Blob == "undefined" || typeof atob == "undefined" || typeof btoa == "undefined"); -function qk(r16) { - return Vw ? Buffer.byteLength(r16, "utf8") : new Blob([r16]).size; +var _w = typeof Buffer != "undefined" && (typeof Blob == "undefined" || typeof atob == "undefined" || typeof btoa == "undefined"); +function uk(r15) { + return _w ? Buffer.byteLength(r15, "utf8") : new Blob([r15]).size; } -function Yk(r16) { - if (Vw) - return Buffer.from(r16).toString("base64"); - let e = new Uint8Array(r16), t10 = ""; +function lk(r15) { + if (_w) + return Buffer.from(r15).toString("base64"); + let e = new Uint8Array(r15), t10 = ""; for (let o = 0, n = e.length; o < n; o++) t10 += String.fromCharCode(e[o]); return btoa(t10); } -function Qk(r16) { - if (Vw) { - let o = Buffer.from(r16, "base64"); +function mk(r15) { + if (_w) { + let o = Buffer.from(r15, "base64"); return o.buffer.slice(o.byteOffset, o.byteOffset + o.byteLength); } - let e = atob(r16), t10 = new Uint8Array(e.length); + let e = atob(r15), t10 = new Uint8Array(e.length); for (let o = 0; o < e.length; ++o) t10.set([e.charCodeAt(o)], o); return t10.buffer; } -function Zk(r16) { - return lr.join(r16); +function dk(r15) { + return ir.join(r15); } -function Ww(r16) { +function Ew(r15) { let e = "/"; - for (r16 = r16.trim(); r16.endsWith(e); ) - r16 = r16.slice(0, r16.length - 1); - let t10 = r16.split(e); + for (r15 = r15.trim(); r15.endsWith(e); ) + r15 = r15.slice(0, r15.length - 1); + let t10 = r15.split(e); return t10[t10.length - 1]; } -function xd(r16, e) { - let t10 = { modelTopology: r16.modelTopology, format: r16.format, generatedBy: r16.generatedBy, convertedBy: r16.convertedBy, weightsManifest: e }; - return r16.signature != null && (t10.signature = r16.signature), r16.userDefinedMetadata != null && (t10.userDefinedMetadata = r16.userDefinedMetadata), r16.modelInitializer != null && (t10.modelInitializer = r16.modelInitializer), r16.initializerSignature != null && (t10.initializerSignature = r16.initializerSignature), r16.trainingConfig != null && (t10.trainingConfig = r16.trainingConfig), t10; +function id(r15, e) { + let t10 = { modelTopology: r15.modelTopology, format: r15.format, generatedBy: r15.generatedBy, convertedBy: r15.convertedBy, weightsManifest: e }; + return r15.signature != null && (t10.signature = r15.signature), r15.userDefinedMetadata != null && (t10.userDefinedMetadata = r15.userDefinedMetadata), r15.modelInitializer != null && (t10.modelInitializer = r15.modelInitializer), r15.initializerSignature != null && (t10.initializerSignature = r15.initializerSignature), r15.trainingConfig != null && (t10.trainingConfig = r15.trainingConfig), t10; } -function Uw(r16, e, t10) { - let o = { modelTopology: r16.modelTopology, format: r16.format, generatedBy: r16.generatedBy, convertedBy: r16.convertedBy }; - if (r16.trainingConfig != null && (o.trainingConfig = r16.trainingConfig), r16.weightsManifest != null) { +function $w(r15, e, t10) { + let o = { modelTopology: r15.modelTopology, format: r15.format, generatedBy: r15.generatedBy, convertedBy: r15.convertedBy }; + if (r15.trainingConfig != null && (o.trainingConfig = r15.trainingConfig), r15.weightsManifest != null) { if (!e) throw new Error("modelJSON has weightsManifest but weightSpecs is null"); if (!t10) throw new Error("modelJSON has weightsManifest but weightData is null"); o.weightSpecs = e, o.weightData = t10; } - return r16.signature != null && (o.signature = r16.signature), r16.userDefinedMetadata != null && (o.userDefinedMetadata = r16.userDefinedMetadata), r16.modelInitializer != null && (o.modelInitializer = r16.modelInitializer), r16.initializerSignature != null && (o.initializerSignature = r16.initializerSignature), o; + return r15.signature != null && (o.signature = r15.signature), r15.userDefinedMetadata != null && (o.userDefinedMetadata = r15.userDefinedMetadata), r15.modelInitializer != null && (o.modelInitializer = r15.modelInitializer), r15.initializerSignature != null && (o.initializerSignature = r15.initializerSignature), o; } -async function il(r16, e) { +async function tc(r15, e) { let t10, o; - return r16.weightsManifest != null && ([t10, o] = await e(r16.weightsManifest)), Uw(r16, t10, o); + return r15.weightsManifest != null && ([t10, o] = await e(r15.weightsManifest)), $w(r15, t10, o); } -function $a(r16) { - if (r16.modelTopology instanceof ArrayBuffer) +function va(r15) { + if (r15.modelTopology instanceof ArrayBuffer) throw new Error("Expected JSON model topology, received ArrayBuffer."); - return { dateSaved: /* @__PURE__ */ new Date(), modelTopologyType: "JSON", modelTopologyBytes: r16.modelTopology == null ? 0 : qk(JSON.stringify(r16.modelTopology)), weightSpecsBytes: r16.weightSpecs == null ? 0 : qk(JSON.stringify(r16.weightSpecs)), weightDataBytes: r16.weightData == null ? 0 : new lr(r16.weightData).byteLength }; + return { dateSaved: /* @__PURE__ */ new Date(), modelTopologyType: "JSON", modelTopologyBytes: r15.modelTopology == null ? 0 : uk(JSON.stringify(r15.modelTopology)), weightSpecsBytes: r15.weightSpecs == null ? 0 : uk(JSON.stringify(r15.weightSpecs)), weightDataBytes: r15.weightData == null ? 0 : new ir(r15.weightData).byteLength }; } -function Ec(r16) { +function Sl(r15) { let e = []; - for (let t10 of r16) + for (let t10 of r15) e.push(...t10.weights); return e; } -function KH() { - let r16 = (t10) => { +function T4() { + let r15 = (t10) => { let o = t10 << 13, n = 0; for (; !(o & 8388608); ) n -= 8388608, o <<= 1; @@ -5204,38 +5204,38 @@ function KH() { }, e = new Uint32Array(2048); e[0] = 0; for (let t10 = 1; t10 < 1024; t10++) - e[t10] = r16(t10); + e[t10] = r15(t10); for (let t10 = 1024; t10 < 2048; t10++) e[t10] = 939524096 + (t10 - 1024 << 13); return e; } -function qH() { - let r16 = new Uint32Array(64); - r16[0] = 0, r16[31] = 1199570944, r16[32] = 2147483648, r16[63] = 3347054592; +function _4() { + let r15 = new Uint32Array(64); + r15[0] = 0, r15[31] = 1199570944, r15[32] = 2147483648, r15[63] = 3347054592; for (let e = 1; e < 31; e++) - r16[e] = e << 23; + r15[e] = e << 23; for (let e = 33; e < 63; e++) - r16[e] = 2147483648 + (e - 32 << 23); - return r16; + r15[e] = 2147483648 + (e - 32 << 23); + return r15; } -function jH() { - let r16 = new Uint32Array(64); +function E4() { + let r15 = new Uint32Array(64); for (let e = 0; e < 64; e++) - r16[e] = 1024; - return r16[0] = r16[32] = 0, r16; + r15[e] = 1024; + return r15[0] = r15[32] = 0, r15; } -function XH() { - let r16 = KH(), e = qH(), t10 = jH(); +function $4() { + let r15 = T4(), e = _4(), t10 = E4(); return (o) => { let n = new ArrayBuffer(4 * o.length), s = new Uint32Array(n); for (let a = 0; a < o.length; a++) { - let i = o[a], p = r16[t10[i >> 10] + (i & 1023)] + e[i >> 10]; + let i = o[a], p = r15[t10[i >> 10] + (i & 1023)] + e[i >> 10]; s[a] = p; } return new Float32Array(n); }; } -var Xt = class r3 { +var qt = class r3 { constructor() { this.saveRouters = [], this.loadRouters = []; } @@ -5262,29 +5262,29 @@ var Xt = class r3 { }), n; } }; -var Jk = (r16) => Xt.registerSaveRouter(r16); -var e1 = (r16) => Xt.registerLoadRouter(r16); -var t1 = (r16) => Xt.getSaveHandlers(r16); -var r1 = (r16, e) => Xt.getLoadHandlers(r16, e); -var Gw = "tensorflowjs"; -var Hw = 1; -var Gu = "models_store"; -var cu = "model_info_store"; -function o1() { +var fk = (r15) => qt.registerSaveRouter(r15); +var hk = (r15) => qt.registerLoadRouter(r15); +var gk = (r15) => qt.getSaveHandlers(r15); +var xk = (r15, e) => qt.getLoadHandlers(r15, e); +var Rw = "tensorflowjs"; +var Dw = 1; +var Lu = "models_store"; +var ou = "model_info_store"; +function yk() { if (!A().getBool("IS_BROWSER")) throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser."); - let r16 = typeof window == "undefined" ? self : window, e = r16.indexedDB || r16.mozIndexedDB || r16.webkitIndexedDB || r16.msIndexedDB || r16.shimIndexedDB; + let r15 = typeof window == "undefined" ? self : window, e = r15.indexedDB || r15.mozIndexedDB || r15.webkitIndexedDB || r15.msIndexedDB || r15.shimIndexedDB; if (e == null) throw new Error("The current browser does not appear to support IndexedDB."); return e; } -function Kw(r16) { - let e = r16.result; - e.createObjectStore(Gu, { keyPath: "modelPath" }), e.createObjectStore(cu, { keyPath: "modelPath" }); +function Aw(r15) { + let e = r15.result; + e.createObjectStore(Lu, { keyPath: "modelPath" }), e.createObjectStore(ou, { keyPath: "modelPath" }); } -var Ra = class { +var ka = class { constructor(e) { - if (this.indexedDB = o1(), e == null || !e) + if (this.indexedDB = yk(), e == null || !e) throw new Error("For IndexedDB, modelPath must not be null, undefined or empty."); this.modelPath = e; } @@ -5298,65 +5298,65 @@ var Ra = class { } databaseAction(e, t10) { return new Promise((o, n) => { - let s = this.indexedDB.open(Gw, Hw); - s.onupgradeneeded = () => Kw(s), s.onsuccess = () => { + let s = this.indexedDB.open(Rw, Dw); + s.onupgradeneeded = () => Aw(s), s.onsuccess = () => { let a = s.result; if (t10 == null) { - let i = a.transaction(Gu, "readonly"), u = i.objectStore(Gu).get(this.modelPath); + let i = a.transaction(Lu, "readonly"), u = i.objectStore(Lu).get(this.modelPath); u.onsuccess = () => { if (u.result == null) return a.close(), n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`)); o(u.result.modelArtifacts); - }, u.onerror = (l) => (a.close(), n(u.error)), i.oncomplete = () => a.close(); + }, u.onerror = (c) => (a.close(), n(u.error)), i.oncomplete = () => a.close(); } else { - t10.weightData = lr.join(t10.weightData); - let i = $a(t10), p = a.transaction(cu, "readwrite"), u = p.objectStore(cu), l; + t10.weightData = ir.join(t10.weightData); + let i = va(t10), p = a.transaction(ou, "readwrite"), u = p.objectStore(ou), c; try { - l = u.put({ modelPath: this.modelPath, modelArtifactsInfo: i }); + c = u.put({ modelPath: this.modelPath, modelArtifactsInfo: i }); } catch (m) { return n(m); } - let c; - l.onsuccess = () => { - c = a.transaction(Gu, "readwrite"); - let m = c.objectStore(Gu), d; + let l; + c.onsuccess = () => { + l = a.transaction(Lu, "readwrite"); + let m = l.objectStore(Lu), d; try { d = m.put({ modelPath: this.modelPath, modelArtifacts: t10, modelArtifactsInfo: i }); } catch (f) { return n(f); } d.onsuccess = () => o({ modelArtifactsInfo: i }), d.onerror = (f) => { - u = p.objectStore(cu); + u = p.objectStore(ou); let h = u.delete(this.modelPath); h.onsuccess = () => (a.close(), n(d.error)), h.onerror = (g) => (a.close(), n(d.error)); }; - }, l.onerror = (m) => (a.close(), n(l.error)), p.oncomplete = () => { - c == null ? a.close() : c.oncomplete = () => a.close(); + }, c.onerror = (m) => (a.close(), n(c.error)), p.oncomplete = () => { + l == null ? a.close() : l.oncomplete = () => a.close(); }; } }, s.onerror = (a) => n(s.error); }); } }; -Ra.URL_SCHEME = "indexeddb://"; -var n1 = (r16) => A().getBool("IS_BROWSER") && !Array.isArray(r16) && r16.startsWith(Ra.URL_SCHEME) ? YH(r16.slice(Ra.URL_SCHEME.length)) : null; -Xt.registerSaveRouter(n1); -Xt.registerLoadRouter(n1); -function YH(r16) { - return new Ra(r16); +ka.URL_SCHEME = "indexeddb://"; +var bk = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(ka.URL_SCHEME) ? R4(r15.slice(ka.URL_SCHEME.length)) : null; +qt.registerSaveRouter(bk); +qt.registerLoadRouter(bk); +function R4(r15) { + return new ka(r15); } -function QH(r16) { - return r16.startsWith(Ra.URL_SCHEME) ? r16.slice(Ra.URL_SCHEME.length) : r16; +function D4(r15) { + return r15.startsWith(ka.URL_SCHEME) ? r15.slice(ka.URL_SCHEME.length) : r15; } -var yd = class { +var ud = class { constructor() { - this.indexedDB = o1(); + this.indexedDB = yk(); } async listModels() { return new Promise((e, t10) => { - let o = this.indexedDB.open(Gw, Hw); - o.onupgradeneeded = () => Kw(o), o.onsuccess = () => { - let n = o.result, s = n.transaction(cu, "readonly"), i = s.objectStore(cu).getAll(); + let o = this.indexedDB.open(Rw, Dw); + o.onupgradeneeded = () => Aw(o), o.onsuccess = () => { + let n = o.result, s = n.transaction(ou, "readonly"), i = s.objectStore(ou).getAll(); i.onsuccess = () => { let p = {}; for (let u of i.result) @@ -5367,70 +5367,70 @@ var yd = class { }); } async removeModel(e) { - return e = QH(e), new Promise((t10, o) => { - let n = this.indexedDB.open(Gw, Hw); - n.onupgradeneeded = () => Kw(n), n.onsuccess = () => { - let s = n.result, a = s.transaction(cu, "readwrite"), i = a.objectStore(cu), p = i.get(e), u; + return e = D4(e), new Promise((t10, o) => { + let n = this.indexedDB.open(Rw, Dw); + n.onupgradeneeded = () => Aw(n), n.onsuccess = () => { + let s = n.result, a = s.transaction(ou, "readwrite"), i = a.objectStore(ou), p = i.get(e), u; p.onsuccess = () => { if (p.result == null) return s.close(), o(new Error(`Cannot find model with path '${e}' in IndexedDB.`)); { - let l = i.delete(e), c = () => { - u = s.transaction(Gu, "readwrite"); - let d = u.objectStore(Gu).delete(e); + let c = i.delete(e), l = () => { + u = s.transaction(Lu, "readwrite"); + let d = u.objectStore(Lu).delete(e); d.onsuccess = () => t10(p.result.modelArtifactsInfo), d.onerror = (f) => o(p.error); }; - l.onsuccess = c, l.onerror = (m) => (c(), s.close(), o(p.error)); + c.onsuccess = l, c.onerror = (m) => (l(), s.close(), o(p.error)); } - }, p.onerror = (l) => (s.close(), o(p.error)), a.oncomplete = () => { + }, p.onerror = (c) => (s.close(), o(p.error)), a.oncomplete = () => { u == null ? s.close() : u.oncomplete = () => s.close(); }; }, n.onerror = (s) => o(n.error); }); } }; -var hi = "/"; -var ul = "tensorflowjs_models"; -var s1 = "info"; -var ZH = "model_topology"; -var JH = "weight_specs"; -var eK = "weight_data"; -var tK = "model_metadata"; -function a1(r16) { - return { info: [ul, r16, s1].join(hi), topology: [ul, r16, ZH].join(hi), weightSpecs: [ul, r16, JH].join(hi), weightData: [ul, r16, eK].join(hi), modelMetadata: [ul, r16, tK].join(hi) }; +var ai = "/"; +var rc = "tensorflowjs_models"; +var Ck = "info"; +var A4 = "model_topology"; +var F4 = "weight_specs"; +var P4 = "weight_data"; +var O4 = "model_metadata"; +function wk(r15) { + return { info: [rc, r15, Ck].join(ai), topology: [rc, r15, A4].join(ai), weightSpecs: [rc, r15, F4].join(ai), weightData: [rc, r15, P4].join(ai), modelMetadata: [rc, r15, O4].join(ai) }; } -function i1(r16) { - for (let e of Object.values(r16)) +function Sk(r15) { + for (let e of Object.values(r15)) window.localStorage.removeItem(e); } -function rK(r16) { - let e = r16.split(hi); +function M4(r15) { + let e = r15.split(ai); if (e.length < 3) - throw new Error(`Invalid key format: ${r16}`); - return e.slice(1, e.length - 1).join(hi); + throw new Error(`Invalid key format: ${r15}`); + return e.slice(1, e.length - 1).join(ai); } -function oK(r16) { - return r16.startsWith(Da.URL_SCHEME) ? r16.slice(Da.URL_SCHEME.length) : r16; +function L4(r15) { + return r15.startsWith(Na.URL_SCHEME) ? r15.slice(Na.URL_SCHEME.length) : r15; } -var Da = class { +var Na = class { constructor(e) { if (!A().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 = a1(this.modelPath); + this.modelPath = e, this.keys = wk(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 t10 = JSON.stringify(e.modelTopology), o = JSON.stringify(e.weightSpecs), n = $a(e), s = lr.join(e.weightData); + let t10 = JSON.stringify(e.modelTopology), o = JSON.stringify(e.weightSpecs), n = va(e), s = ir.join(e.weightData); try { - this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, t10), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, Yk(s)); + this.LS.setItem(this.keys.info, JSON.stringify(n)), this.LS.setItem(this.keys.topology, t10), this.LS.setItem(this.keys.weightSpecs, o), this.LS.setItem(this.keys.weightData, lk(s)); let a = { format: e.format, generatedBy: e.generatedBy, convertedBy: e.convertedBy, signature: e.signature != null ? e.signature : void 0, userDefinedMetadata: e.userDefinedMetadata != null ? e.userDefinedMetadata : void 0, modelInitializer: e.modelInitializer != null ? e.modelInitializer : void 0, initializerSignature: e.initializerSignature != null ? e.initializerSignature : void 0, trainingConfig: e.trainingConfig != null ? e.trainingConfig : void 0 }; return this.LS.setItem(this.keys.modelMetadata, JSON.stringify(a)), { modelArtifactsInfo: n }; } catch (a) { - throw i1(this.keys), new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`); + throw Sk(this.keys), new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.weightDataBytes}.`); } } } @@ -5456,42 +5456,42 @@ var Da = class { let a = this.LS.getItem(this.keys.weightData); if (a == null) throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`); - return t10.weightData = Qk(a), t10; + return t10.weightData = mk(a), t10; } }; -Da.URL_SCHEME = "localstorage://"; -var u1 = (r16) => A().getBool("IS_BROWSER") && !Array.isArray(r16) && r16.startsWith(Da.URL_SCHEME) ? nK(r16.slice(Da.URL_SCHEME.length)) : null; -Xt.registerSaveRouter(u1); -Xt.registerLoadRouter(u1); -function nK(r16) { - return new Da(r16); +Na.URL_SCHEME = "localstorage://"; +var Ik = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(Na.URL_SCHEME) ? B4(r15.slice(Na.URL_SCHEME.length)) : null; +qt.registerSaveRouter(Ik); +qt.registerLoadRouter(Ik); +function B4(r15) { + return new Na(r15); } -var bd = class { +var pd = class { constructor() { - $(A().getBool("IS_BROWSER"), () => "Current environment is not a web browser"), $(typeof window == "undefined" || typeof window.localStorage != "undefined", () => "Current browser does not appear to support localStorage"), this.LS = window.localStorage; + E(A().getBool("IS_BROWSER"), () => "Current environment is not a web browser"), E(typeof window == "undefined" || typeof window.localStorage != "undefined", () => "Current browser does not appear to support localStorage"), this.LS = window.localStorage; } async listModels() { - let e = {}, t10 = ul + hi, o = hi + s1; + let e = {}, t10 = rc + ai, o = ai + Ck; for (let n = 0; n < this.LS.length; ++n) { let s = this.LS.key(n); if (s.startsWith(t10) && s.endsWith(o)) { - let a = rK(s); + let a = M4(s); e[a] = JSON.parse(this.LS.getItem(s)); } } return e; } async removeModel(e) { - e = oK(e); - let t10 = a1(e); + e = L4(e); + let t10 = wk(e); if (this.LS.getItem(t10.info) == null) throw new Error(`Cannot find model at path '${e}'`); let o = JSON.parse(this.LS.getItem(t10.info)); - return i1(t10), o; + return Sk(t10), o; } }; -var pl = "://"; -var Hs = class r4 { +var oc = "://"; +var Os = class r4 { constructor() { this.managers = {}; } @@ -5499,9 +5499,9 @@ var Hs = class r4 { return r4.instance == null && (r4.instance = new r4()), r4.instance; } static registerManager(e, t10) { - $(e != null, () => "scheme must not be undefined or null."), e.endsWith(pl) && (e = e.slice(0, e.indexOf(pl))), $(e.length > 0, () => "scheme must not be an empty string."); + E(e != null, () => "scheme must not be undefined or null."), e.endsWith(oc) && (e = e.slice(0, e.indexOf(oc))), E(e.length > 0, () => "scheme must not be an empty string."); let o = r4.getInstance(); - $(o.managers[e] == null, () => `A model store manager is already registered for scheme '${e}'.`), o.managers[e] = t10; + E(o.managers[e] == null, () => `A model store manager is already registered for scheme '${e}'.`), o.managers[e] = t10; } static getManager(e) { let t10 = r4.getInstance().managers[e]; @@ -5513,44 +5513,44 @@ var Hs = class r4 { return Object.keys(r4.getInstance().managers); } }; -function Cd(r16) { - if (r16.indexOf(pl) === -1) - throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Hs.getSchemes().join(",")}`); - return { scheme: r16.split(pl)[0], path: r16.split(pl)[1] }; -} -async function p1(r16, e, t10 = false) { - $(r16 !== e, () => `Old path and new path are the same: '${r16}'`); - let o = Xt.getLoadHandlers(r16); - $(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r16}.`), $(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r16}.`); - let n = o[0], s = Xt.getSaveHandlers(e); - $(s.length > 0, () => `Copying failed because no save handler is found for destination URL ${e}.`), $(s.length < 2, () => `Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`); - let a = s[0], i = Cd(r16).scheme, p = Cd(r16).path, u = i === Cd(r16).scheme, l = await n.load(); - t10 && u && await Hs.getManager(i).removeModel(p); - let c = await a.save(l); - return t10 && !u && await Hs.getManager(i).removeModel(p), c.modelArtifactsInfo; -} -async function l1() { - let r16 = Hs.getSchemes(), e = {}; - for (let t10 of r16) { - let o = await Hs.getManager(t10).listModels(); +function cd(r15) { + if (r15.indexOf(oc) === -1) + throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`); + return { scheme: r15.split(oc)[0], path: r15.split(oc)[1] }; +} +async function vk(r15, e, t10 = false) { + E(r15 !== e, () => `Old path and new path are the same: '${r15}'`); + let o = qt.getLoadHandlers(r15); + E(o.length > 0, () => `Copying failed because no load handler is found for source URL ${r15}.`), E(o.length < 2, () => `Copying failed because more than one (${o.length}) load handlers for source URL ${r15}.`); + let n = o[0], s = qt.getSaveHandlers(e); + E(s.length > 0, () => `Copying failed because no save handler is found for destination URL ${e}.`), E(s.length < 2, () => `Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`); + let a = s[0], i = cd(r15).scheme, p = cd(r15).path, u = i === cd(r15).scheme, c = await n.load(); + t10 && u && await Os.getManager(i).removeModel(p); + let l = await a.save(c); + return t10 && !u && await Os.getManager(i).removeModel(p), l.modelArtifactsInfo; +} +async function kk() { + let r15 = Os.getSchemes(), e = {}; + for (let t10 of r15) { + let o = await Os.getManager(t10).listModels(); for (let n in o) { - let s = t10 + pl + n; + let s = t10 + oc + n; e[s] = o[n]; } } return e; } -async function c1(r16) { - let e = Cd(r16); - return Hs.getManager(e.scheme).removeModel(e.path); +async function Nk(r15) { + let e = cd(r15); + return Os.getManager(e.scheme).removeModel(e.path); } -async function m1(r16, e) { - return p1(r16, e, false); +async function Tk(r15, e) { + return vk(r15, e, false); } -async function d1(r16, e) { - return p1(r16, e, true); +async function _k(r15, e) { + return vk(r15, e, true); } -var qw = class { +var Fw = class { constructor() { this.messageName = "setTimeoutCustom", this.functionRefs = [], this.handledMessageCount = 0, this.hasEventListener = false; } @@ -5584,28 +5584,28 @@ var qw = class { }, true)); } isTypedArray(e) { - return id(e); + return Qm(e); } }; if (A().get("IS_BROWSER")) { - A().setPlatform("browser", new qw()); + A().setPlatform("browser", new Fw()); try { - Hs.registerManager(Da.URL_SCHEME, new bd()); - } catch (r16) { + Os.registerManager(Na.URL_SCHEME, new pd()); + } catch (r15) { } try { - Hs.registerManager(Ra.URL_SCHEME, new yd()); - } catch (r16) { + Os.registerManager(ka.URL_SCHEME, new ud()); + } catch (r15) { } } -var sK = { importFetch: () => f1() }; -var jw; -var Xw = class { +var z4 = { importFetch: () => Ek() }; +var Pw; +var Ow = class { constructor() { - this.util = h1(), this.textEncoder = new this.util.TextEncoder(); + this.util = $k(), this.textEncoder = new this.util.TextEncoder(); } fetch(e, t10) { - return A().global.fetch != null ? A().global.fetch(e, t10) : (jw == null && (jw = sK.importFetch()), jw(e, t10)); + return A().global.fetch != null ? A().global.fetch(e, t10) : (Pw == null && (Pw = z4.importFetch()), Pw(e, t10)); } now() { let e = process.hrtime(); @@ -5623,429 +5623,429 @@ var Xw = class { return this.util.types.isFloat32Array(e) || this.util.types.isInt32Array(e) || this.util.types.isUint8Array(e) || this.util.types.isUint8ClampedArray(e); } }; -A().get("IS_NODE") && !A().get("IS_BROWSER") && A().setPlatform("node", new Xw()); -function ie(r16, e = "float32", t10) { - return e = e || "float32", St(r16), new Ge(r16, e, t10); +A().get("IS_NODE") && !A().get("IS_BROWSER") && A().setPlatform("node", new Ow()); +function me(r15, e = "float32", t10) { + return e = e || "float32", Ct(r15), new tt(r15, e, t10); } -function aK(r16, e) { - let t10 = v(r16, "x", "cast"); - if (!hw(e)) +function V4(r15, e) { + let t10 = v(r15, "x", "cast"); + if (!rw(e)) throw new Error(`Failed to cast to unknown dtype ${e}`); if (e === "string" && t10.dtype !== "string" || e !== "string" && t10.dtype === "string") throw new Error("Only strings can be casted to strings"); let o = { x: t10 }, n = { dtype: e }; - return _.runKernel(ho, o, n); -} -var Ue = N({ cast_: aK }); -function iK(r16) { - let t10 = { x: v(r16, "x", "clone", "string_or_numeric") }; - return _.runKernel(vo, t10); -} -var Xr = N({ clone_: iK }); -function wd(r16, e = false) { - console.log(r16.toString(e)); -} -Ow(); -var uK = { buffer: ie, cast: Ue, clone: Xr, print: wd }; -Lk(uK); -function pK(r16, e) { - let t10 = v(r16, "a", "add"), o = v(e, "b", "add"); + return T.runKernel(yo, o, n); +} +var Ue = N({ cast_: V4 }); +function W4(r15) { + let t10 = { x: v(r15, "x", "clone", "string_or_numeric") }; + return T.runKernel(Co, t10); +} +var Ur = N({ clone_: W4 }); +function ld(r15, e = false) { + console.log(r15.toString(e)); +} +Iw(); +var U4 = { buffer: me, cast: Ue, clone: Ur, print: ld }; +J0(U4); +function G4(r15, e) { + let t10 = v(r15, "a", "add"), o = v(e, "b", "add"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(Rr, n); + return T.runKernel(uo, n); } -var Ce = N({ add_: pK }); -function lK(r16, e) { - let t10 = v(r16, "a", "floorDiv"), o = v(e, "b", "floorDiv"); +var Ce = N({ add_: G4 }); +function H4(r15, e) { + let t10 = v(r15, "a", "floorDiv"), o = v(e, "b", "floorDiv"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(wo, n); + return T.runKernel(Sn, n); } -var Sd = N({ floorDiv_: lK }); -function cK(r16, e) { - let t10 = v(r16, "a", "div"), o = v(e, "b", "div"); +var md = N({ floorDiv_: H4 }); +function K4(r15, e) { + let t10 = v(r15, "a", "div"), o = v(e, "b", "div"); if ([t10, o] = Oe(t10, o), t10.dtype === "int32" && o.dtype === "int32") - return Sd(t10, o); + return md(t10, o); let n = { a: t10, b: o }, s = {}; - return _.runKernel(Vn, n, s); + return T.runKernel(fn, n, s); } -var Xe = N({ div_: cK }); -function mK(r16, e) { - let t10 = v(r16, "a", "mul"), o = v(e, "b", "mul"); +var je = N({ div_: K4 }); +function q4(r15, e) { + let t10 = v(r15, "a", "mul"), o = v(e, "b", "mul"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel($o, n); + return T.runKernel(Xn, n); } -var se = N({ mul_: mK }); -function dK(r16) { - let e = v(r16, "x", "abs"); +var se = N({ mul_: q4 }); +function j4(r15) { + let e = v(r15, "x", "abs"); if (e.dtype === "complex64") { let t10 = { x: e }; - return _.runKernel(Wi, t10); + return T.runKernel(Ai, t10); } else { let t10 = { x: e }; - return _.runKernel(fn, t10); + return T.runKernel(Xs, t10); } } -var er = N({ abs_: dK }); -function fK(r16) { - let t10 = { x: v(r16, "x", "acos") }; - return _.runKernel(hn, t10); +var Qt = N({ abs_: j4 }); +function X4(r15) { + let t10 = { x: v(r15, "x", "acos") }; + return T.runKernel(Vo, t10); } -var g1 = N({ acos_: fK }); -function hK(r16) { - let t10 = { x: v(r16, "x", "acosh") }; - return _.runKernel(gn, t10); +var Rk = N({ acos_: X4 }); +function Y4(r15) { + let t10 = { x: v(r15, "x", "acosh") }; + return T.runKernel(Wo, t10); } -var x1 = N({ acosh_: hK }); -function gK(r16) { - $(Array.isArray(r16), () => "The argument passed to tf.addN() must be a list of tensors"), $(r16.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r16.length}`); - let e = r16.map((n, s) => v(n, `tensors${s}`, "addN")), t10 = e[0]; +var Dk = N({ acosh_: Y4 }); +function Q4(r15) { + E(Array.isArray(r15), () => "The argument passed to tf.addN() must be a list of tensors"), E(r15.length >= 1, () => `Must pass at least one tensor to tf.addN(), but got ${r15.length}`); + let e = r15.map((n, s) => v(n, `tensors${s}`, "addN")), t10 = e[0]; e.forEach((n) => { if (n.dtype !== t10.dtype) throw new Error("All tensors passed to tf.addN() must have the same dtype"); }), e.forEach((n) => { - if (!Sr(n.shape, t10.shape)) + if (!br(n.shape, t10.shape)) throw new Error("All tensors passed to tf.addN() must have the same shape"); }); let o = e; - return _.runKernel(xn, o); -} -var y1 = N({ addN_: gK }); -function xK(r16, e = null, t10 = false) { - let n = { x: v(r16, "x", "all", "bool") }, s = { axis: e, keepDims: t10 }; - return _.runKernel(yn, n, s); -} -var b1 = N({ all_: xK }); -function yK(r16, e = null, t10 = false) { - let n = { x: v(r16, "x", "any", "bool") }, s = { axis: e, keepDims: t10 }; - return _.runKernel(bn, n, s); -} -var C1 = N({ any_: yK }); -function bK(r16, e = 0) { - let o = { x: v(r16, "x", "argMax") }, n = { axis: e }; - return _.runKernel(na, o, n); -} -var w1 = N({ argMax_: bK }); -function CK(r16, e = 0) { - let o = { x: v(r16, "x", "argMin") }, n = { axis: e }; - return _.runKernel(sa, o, n); -} -var S1 = N({ argMin_: CK }); -function wK(r16) { - let t10 = { x: v(r16, "x", "asin") }; - return _.runKernel(Cn, t10); -} -var I1 = N({ asin_: wK }); -function SK(r16) { - let t10 = { x: v(r16, "x", "asinh") }; - return _.runKernel(wn, t10); -} -var v1 = N({ asinh_: SK }); -function IK(r16) { - let t10 = { x: v(r16, "x", "atan") }; - return _.runKernel(Sn, t10); -} -var k1 = N({ atan_: IK }); -function vK(r16, e) { - let t10 = v(r16, "a", "atan2"), o = v(e, "b", "atan2"); + return T.runKernel(Uo, o); +} +var Ak = N({ addN_: Q4 }); +function Z4(r15, e = null, t10 = false) { + let n = { x: v(r15, "x", "all", "bool") }, s = { axis: e, keepDims: t10 }; + return T.runKernel(Go, n, s); +} +var Fk = N({ all_: Z4 }); +function J4(r15, e = null, t10 = false) { + let n = { x: v(r15, "x", "any", "bool") }, s = { axis: e, keepDims: t10 }; + return T.runKernel(Ho, n, s); +} +var Pk = N({ any_: J4 }); +function eH(r15, e = 0) { + let o = { x: v(r15, "x", "argMax") }, n = { axis: e }; + return T.runKernel(Ys, o, n); +} +var Ok = N({ argMax_: eH }); +function tH(r15, e = 0) { + let o = { x: v(r15, "x", "argMin") }, n = { axis: e }; + return T.runKernel(Qs, o, n); +} +var Mk = N({ argMin_: tH }); +function rH(r15) { + let t10 = { x: v(r15, "x", "asin") }; + return T.runKernel(Ko, t10); +} +var Lk = N({ asin_: rH }); +function oH(r15) { + let t10 = { x: v(r15, "x", "asinh") }; + return T.runKernel(qo, t10); +} +var Bk = N({ asinh_: oH }); +function nH(r15) { + let t10 = { x: v(r15, "x", "atan") }; + return T.runKernel(jo, t10); +} +var zk = N({ atan_: nH }); +function sH(r15, e) { + let t10 = v(r15, "a", "atan2"), o = v(e, "b", "atan2"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(vn, n); + return T.runKernel(Yo, n); } -var N1 = N({ atan2_: vK }); -function kK(r16) { - let t10 = { x: v(r16, "x", "atanh") }; - return _.runKernel(In, t10); +var Vk = N({ atan2_: sH }); +function aH(r15) { + let t10 = { x: v(r15, "x", "atanh") }; + return T.runKernel(Xo, t10); } -var T1 = N({ atanh_: kK }); -function NK(r16, e, t10, o, n = "NHWC", s) { - let a = r16[3], i = [...e, a], p = E1(n); - return Ku(r16, i, t10, s, o, null, null, p); +var Wk = N({ atanh_: aH }); +function iH(r15, e, t10, o, n = "NHWC", s) { + let a = r15[3], i = [...e, a], p = Gk(n); + return zu(r15, i, t10, s, o, null, null, p); } -function Qw(r16, e, t10, o, n, s, a = "channelsLast") { - let [i, p] = $c(e), u; +function Lw(r15, e, t10, o, n, s, a = "channelsLast") { + let [i, p] = Il(e), u; if (a === "channelsLast") - u = [i, p, r16[3], r16[3]]; + u = [i, p, r15[3], r15[3]]; else if (a === "channelsFirst") - u = [i, p, r16[1], r16[1]]; + u = [i, p, r15[1], r15[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return Ku(r16, u, t10, o, n, s, false, a); + return zu(r15, u, t10, o, n, s, false, a); } -function TK(r16, e, t10, o, n, s, a = "NDHWC") { - let [i, p, u] = Yw(e), l, c; +function uH(r15, e, t10, o, n, s, a = "NDHWC") { + let [i, p, u] = Mw(e), c, l; if (a === "NDHWC") - c = "channelsLast", l = [i, p, u, r16[4], r16[4]]; + l = "channelsLast", c = [i, p, u, r15[4], r15[4]]; else if (a === "NCDHW") - c = "channelsFirst", l = [i, p, u, r16[1], r16[1]]; + l = "channelsFirst", c = [i, p, u, r15[1], r15[1]]; else throw new Error(`Unknown dataFormat ${a}`); - return _1(r16, l, t10, o, n, false, c, s); + return Uk(r15, c, t10, o, n, false, l, s); } -function Ku(r16, e, t10, o, n, s, a = false, i = "channelsLast") { - let [p, u, l, c] = [-1, -1, -1, -1]; +function zu(r15, e, t10, o, n, s, a = false, i = "channelsLast") { + let [p, u, c, l] = [-1, -1, -1, -1]; if (i === "channelsLast") - [p, u, l, c] = r16; + [p, u, c, l] = r15; else if (i === "channelsFirst") - [p, c, u, l] = r16; + [p, l, u, c] = r15; else throw new Error(`Unknown dataFormat ${i}`); - let [m, d, , f] = e, [h, g] = $c(t10), [x, b] = $c(o), w = ll(m, x), S = ll(d, b), { padInfo: k, outHeight: T, outWidth: E } = $K(n, u, l, h, g, w, S, s, i), R = a ? f * c : f, D; - return i === "channelsFirst" ? D = [p, R, T, E] : i === "channelsLast" && (D = [p, T, E, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: l, inChannels: c, outHeight: T, outWidth: E, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: w, effectiveFilterWidth: S, dilationHeight: x, dilationWidth: b, inShape: r16, outShape: D, filterShape: e }; + let [m, d, , f] = e, [h, g] = Il(t10), [x, b] = Il(o), C = nc(m, x), S = nc(d, b), { padInfo: k, outHeight: _, outWidth: $ } = lH(n, u, c, h, g, C, S, s, i), R = a ? f * l : f, D; + return i === "channelsFirst" ? D = [p, R, _, $] : i === "channelsLast" && (D = [p, _, $, R]), { batchSize: p, dataFormat: i, inHeight: u, inWidth: c, inChannels: l, outHeight: _, outWidth: $, outChannels: R, padInfo: k, strideHeight: h, strideWidth: g, filterHeight: m, filterWidth: d, effectiveFilterHeight: C, effectiveFilterWidth: S, dilationHeight: x, dilationWidth: b, inShape: r15, outShape: D, filterShape: e }; } -function _1(r16, e, t10, o, n, s = false, a = "channelsLast", i) { - let [p, u, l, c, m] = [-1, -1, -1, -1, -1]; +function Uk(r15, e, t10, o, n, s = false, a = "channelsLast", i) { + let [p, u, c, l, m] = [-1, -1, -1, -1, -1]; if (a === "channelsLast") - [p, u, l, c, m] = r16; + [p, u, c, l, m] = r15; else if (a === "channelsFirst") - [p, m, u, l, c] = r16; + [p, m, u, c, l] = r15; else throw new Error(`Unknown dataFormat ${a}`); - let [d, f, h, , g] = e, [x, b, w] = Yw(t10), [S, k, T] = Yw(o), E = ll(d, S), R = ll(f, k), D = ll(h, T), { padInfo: F, outDepth: O, outHeight: M, outWidth: L } = RK(n, u, l, c, x, b, w, E, R, D, i), B = s ? g * m : g, z; - return a === "channelsFirst" ? z = [p, B, O, M, L] : a === "channelsLast" && (z = [p, O, M, L, B]), { batchSize: p, dataFormat: a, inDepth: u, inHeight: l, inWidth: c, inChannels: m, outDepth: O, outHeight: M, outWidth: L, outChannels: B, padInfo: F, strideDepth: x, strideHeight: b, strideWidth: w, filterDepth: d, filterHeight: f, filterWidth: h, effectiveFilterDepth: E, effectiveFilterHeight: R, effectiveFilterWidth: D, dilationDepth: S, dilationHeight: k, dilationWidth: T, inShape: r16, outShape: z, filterShape: e }; + let [d, f, h, , g] = e, [x, b, C] = Mw(t10), [S, k, _] = Mw(o), $ = nc(d, S), R = nc(f, k), D = nc(h, _), { padInfo: P, outDepth: O, outHeight: M, outWidth: L } = mH(n, u, c, l, x, b, C, $, R, D, i), B = s ? g * m : g, z; + return a === "channelsFirst" ? z = [p, B, O, M, L] : a === "channelsLast" && (z = [p, O, M, L, B]), { batchSize: p, dataFormat: a, inDepth: u, inHeight: c, inWidth: l, inChannels: m, outDepth: O, outHeight: M, outWidth: L, outChannels: B, padInfo: P, strideDepth: x, strideHeight: b, strideWidth: C, filterDepth: d, filterHeight: f, filterWidth: h, effectiveFilterDepth: $, effectiveFilterHeight: R, effectiveFilterWidth: D, dilationDepth: S, dilationHeight: k, dilationWidth: _, inShape: r15, outShape: z, filterShape: e }; } -function _K(r16, e, t10, o, n) { - o == null && (o = Zw(r16, e, t10)); - let s = r16[0], a = r16[1], i = Rc((s - e + 2 * o) / t10 + 1, n), p = Rc((a - e + 2 * o) / t10 + 1, n); +function pH(r15, e, t10, o, n) { + o == null && (o = Bw(r15, e, t10)); + let s = r15[0], a = r15[1], i = vl((s - e + 2 * o) / t10 + 1, n), p = vl((a - e + 2 * o) / t10 + 1, n); return [i, p]; } -function EK(r16, e, t10, o, n, s) { - n == null && (n = Zw(r16, e[0], o[0])); +function cH(r15, e, t10, o, n, s) { + n == null && (n = Bw(r15, e[0], o[0])); let a = [0, 0, 0, t10]; for (let i = 0; i < 3; i++) - r16[i] + 2 * n >= e[i] && (a[i] = Rc((r16[i] - e[i] + 2 * n) / o[i] + 1, s)); + r15[i] + 2 * n >= e[i] && (a[i] = vl((r15[i] - e[i] + 2 * n) / o[i] + 1, s)); return a; } -function Zw(r16, e, t10, o = 1) { - let n = ll(e, o); - return Math.floor((r16[0] * (t10 - 1) - t10 + n) / 2); +function Bw(r15, e, t10, o = 1) { + let n = nc(e, o); + return Math.floor((r15[0] * (t10 - 1) - t10 + n) / 2); } -function $c(r16) { - return typeof r16 == "number" ? [r16, r16, r16] : r16.length === 2 ? [r16[0], r16[1], 1] : r16; +function Il(r15) { + return typeof r15 == "number" ? [r15, r15, r15] : r15.length === 2 ? [r15[0], r15[1], 1] : r15; } -function Yw(r16) { - return typeof r16 == "number" ? [r16, r16, r16] : r16; +function Mw(r15) { + return typeof r15 == "number" ? [r15, r15, r15] : r15; } -function ll(r16, e) { - return e <= 1 ? r16 : r16 + (r16 - 1) * (e - 1); +function nc(r15, e) { + return e <= 1 ? r15 : r15 + (r15 - 1) * (e - 1); } -function $K(r16, e, t10, o, n, s, a, i, p) { - let u, l, c; - if (typeof r16 == "number") { - u = { top: r16, bottom: r16, left: r16, right: r16, type: r16 === 0 ? "VALID" : "NUMBER" }; - let d = _K([e, t10], s, o, r16, i); - l = d[0], c = d[1]; - } else if (r16 === "same") { - l = Math.ceil(e / o), c = Math.ceil(t10 / n); - let m = Math.max(0, (l - 1) * o + s - e), d = Math.max(0, (c - 1) * n + a - t10), f = Math.floor(m / 2), h = m - f, g = Math.floor(d / 2), x = d - g; +function lH(r15, e, t10, o, n, s, a, i, p) { + let u, c, l; + if (typeof r15 == "number") { + u = { top: r15, bottom: r15, left: r15, right: r15, type: r15 === 0 ? "VALID" : "NUMBER" }; + let d = pH([e, t10], s, o, r15, i); + c = d[0], l = d[1]; + } else if (r15 === "same") { + c = Math.ceil(e / o), l = Math.ceil(t10 / n); + let m = Math.max(0, (c - 1) * o + s - e), d = Math.max(0, (l - 1) * n + a - t10), f = Math.floor(m / 2), h = m - f, g = Math.floor(d / 2), x = d - g; u = { top: f, bottom: h, left: g, right: x, type: "SAME" }; - } else if (r16 === "valid") - u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }, l = Math.ceil((e - s + 1) / o), c = Math.ceil((t10 - a + 1) / n); - else if (typeof r16 == "object") { - let m = p === "channelsLast" ? r16[1][0] : r16[2][0], d = p === "channelsLast" ? r16[1][1] : r16[2][1], f = p === "channelsLast" ? r16[2][0] : r16[3][0], h = p === "channelsLast" ? r16[2][1] : r16[3][1]; - u = { top: m, bottom: d, left: f, right: h, type: m === 0 && d === 0 && f === 0 && h === 0 ? "VALID" : "EXPLICIT" }, l = Rc((e - s + m + d) / o + 1, i), c = Rc((t10 - a + f + h) / n + 1, i); + } else if (r15 === "valid") + u = { top: 0, bottom: 0, left: 0, right: 0, type: "VALID" }, c = Math.ceil((e - s + 1) / o), l = Math.ceil((t10 - a + 1) / n); + else if (typeof r15 == "object") { + let m = p === "channelsLast" ? r15[1][0] : r15[2][0], d = p === "channelsLast" ? r15[1][1] : r15[2][1], f = p === "channelsLast" ? r15[2][0] : r15[3][0], h = p === "channelsLast" ? r15[2][1] : r15[3][1]; + u = { top: m, bottom: d, left: f, right: h, type: m === 0 && d === 0 && f === 0 && h === 0 ? "VALID" : "EXPLICIT" }, c = vl((e - s + m + d) / o + 1, i), l = vl((t10 - a + f + h) / n + 1, i); } else - throw Error(`Unknown padding parameter: ${r16}`); - return { padInfo: u, outHeight: l, outWidth: c }; -} -function RK(r16, e, t10, o, n, s, a, i, p, u, l) { - let c, m, d, f; - if (r16 === "valid" && (r16 = 0), typeof r16 == "number") { - c = { top: r16, bottom: r16, left: r16, right: r16, front: r16, back: r16, type: r16 === 0 ? "VALID" : "NUMBER" }; - let g = EK([e, t10, o, 1], [i, p, u], 1, [n, s, a], r16, l); + throw Error(`Unknown padding parameter: ${r15}`); + return { padInfo: u, outHeight: c, outWidth: l }; +} +function mH(r15, e, t10, o, n, s, a, i, p, u, c) { + let l, m, d, f; + if (r15 === "valid" && (r15 = 0), typeof r15 == "number") { + l = { top: r15, bottom: r15, left: r15, right: r15, front: r15, back: r15, type: r15 === 0 ? "VALID" : "NUMBER" }; + let g = cH([e, t10, o, 1], [i, p, u], 1, [n, s, a], r15, c); m = g[0], d = g[1], f = g[2]; - } else if (r16 === "same") { + } else if (r15 === "same") { m = Math.ceil(e / n), d = Math.ceil(t10 / s), f = Math.ceil(o / a); - let h = (m - 1) * n + i - e, g = (d - 1) * s + p - t10, x = (f - 1) * a + u - o, b = Math.floor(h / 2), w = h - b, S = Math.floor(g / 2), k = g - S, T = Math.floor(x / 2), E = x - T; - c = { top: S, bottom: k, left: T, right: E, front: b, back: w, type: "SAME" }; + let h = (m - 1) * n + i - e, g = (d - 1) * s + p - t10, x = (f - 1) * a + u - o, b = Math.floor(h / 2), C = h - b, S = Math.floor(g / 2), k = g - S, _ = Math.floor(x / 2), $ = x - _; + l = { top: S, bottom: k, left: _, right: $, front: b, back: C, type: "SAME" }; } else - throw Error(`Unknown padding parameter: ${r16}`); - return { padInfo: c, outDepth: m, outHeight: d, outWidth: f }; + throw Error(`Unknown padding parameter: ${r15}`); + return { padInfo: l, outDepth: m, outHeight: d, outWidth: f }; } -function Rc(r16, e) { +function vl(r15, e) { if (!e) - return Math.trunc(r16); + return Math.trunc(r15); switch (e) { case "round": - return Math.round(r16); + return Math.round(r15); case "ceil": - return Math.ceil(r16); + return Math.ceil(r15); case "floor": - return Math.floor(r16); + return Math.floor(r15); default: throw new Error(`Unknown roundingMode ${e}`); } } -function Hu(r16) { - let [e, t10, o] = $c(r16); +function Bu(r15) { + let [e, t10, o] = Il(r15); return e === 1 && t10 === 1 && o === 1; } -function br(r16, e) { - return Hu(r16) || Hu(e); +function gr(r15, e) { + return Bu(r15) || Bu(e); } -function Aa(r16) { - return $c(r16).every((e) => e > 0); +function Ta(r15) { + return Il(r15).every((e) => e > 0); } -function E1(r16) { - if (r16 === "NHWC") +function Gk(r15) { + if (r15 === "NHWC") return "channelsLast"; - if (r16 === "NCHW") + if (r15 === "NCHW") return "channelsFirst"; - throw new Error(`Unknown dataFormat ${r16}`); + throw new Error(`Unknown dataFormat ${r15}`); } -function zt(r16, e, t10) { +function Lt(r15, e, t10) { if (t10 != null) { if (typeof e == "string") - throw Error(`Error in ${r16}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + throw Error(`Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); if (typeof e == "number") - $(Ja(e), () => `Error in ${r16}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); + E(Ka(e), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${e}.`); else if (typeof e == "object") e.forEach((o) => { o.forEach((n) => { - $(Ja(n), () => `Error in ${r16}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${n}.`); + E(Ka(n), () => `Error in ${r15}: pad must be an integer when using dimRoundingMode ${t10} but got pad ${n}.`); }); }); else - throw Error(`Error in ${r16}: Unknown padding parameter: ${e}`); + throw Error(`Error in ${r15}: Unknown padding parameter: ${e}`); } } -function DK(r16, e) { - let o = { x: v(r16, "x", "reshape", "string_or_numeric") }, n = { shape: e }; - return _.runKernel(Ca, o, n); +function dH(r15, e) { + let o = { x: v(r15, "x", "reshape", "string_or_numeric") }, n = { shape: e }; + return T.runKernel(da, o, n); } -var W = N({ reshape_: DK }); -function AK(r16, e, t10, o, n) { - let s = v(r16, "x", "avgPool", "float32"), a = 1; - $(br(t10, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`); +var W = N({ reshape_: dH }); +function fH(r15, e, t10, o, n) { + let s = v(r15, "x", "avgPool", "float32"), a = 1; + E(gr(t10, a), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`); let i = s, p = false; - s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), zt("avgPool", o, n); - let u = { x: i }, l = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, c = _.runKernel(kn, u, l); - return c = Ue(c, s.dtype), p ? W(c, [c.shape[1], c.shape[2], c.shape[3]]) : c; -} -var Id = N({ avgPool_: AK }); -function FK(r16, e, t10, o, n, s = "NDHWC") { - let a = v(r16, "x", "avgPool3d", "float32"), i = a, p = false; - a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), $(typeof t10 == "number" && t10 > 0 || Array.isArray(t10) && t10[0] > 0 && t10[1] > 0 && t10[2] > 0, () => `Error in avgPool3d: Stride must be > 0, but got '${t10}'`), zt("avgPool3d", o, n); - let u = { x: i }, l = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, c = _.runKernel(aa, u, l); - return c = Ue(c, i.dtype), p ? W(c, [c.shape[1], c.shape[2], c.shape[3], c.shape[4]]) : c; -} -var $1 = N({ avgPool3d_: FK }); -function PK(r16, e = 0) { - $(r16.length >= 1, () => "Pass at least one tensor to concat"); - let t10 = di(r16, "tensors", "concat", "string_or_numeric"); + s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), E(i.rank === 4, () => `Error in avgPool: x must be rank 4 but got rank ${i.rank}.`), Lt("avgPool", o, n); + let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, l = T.runKernel(Qo, u, c); + return l = Ue(l, s.dtype), p ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; +} +var dd = N({ avgPool_: fH }); +function hH(r15, e, t10, o, n, s = "NDHWC") { + let a = v(r15, "x", "avgPool3d", "float32"), i = a, p = false; + a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(i.rank === 5, () => `Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`), E(s === "NDHWC", () => `Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), E(typeof t10 == "number" && t10 > 0 || Array.isArray(t10) && t10[0] > 0 && t10[1] > 0 && t10[2] > 0, () => `Error in avgPool3d: Stride must be > 0, but got '${t10}'`), Lt("avgPool3d", o, n); + let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, l = T.runKernel(Zs, u, c); + return l = Ue(l, i.dtype), p ? W(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; +} +var Hk = N({ avgPool3d_: hH }); +function gH(r15, e = 0) { + E(r15.length >= 1, () => "Pass at least one tensor to concat"); + let t10 = ni(r15, "tensors", "concat", "string_or_numeric"); if (t10[0].dtype === "complex64" && t10.forEach((s) => { if (s.dtype !== "complex64") throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${s.dtype}. `); }), t10.length === 1) - return Xr(t10[0]); + return Ur(t10[0]); let o = t10, n = { axis: e }; - return _.runKernel(pa, o, n); + return T.runKernel(ta, o, n); } -var bt = N({ concat_: PK }); -function OK(r16, e, t10 = false, o = false) { - let n = v(r16, "a", "matMul"), s = v(e, "b", "matMul"); +var yt = N({ concat_: gH }); +function xH(r15, e, t10 = false, o = false) { + let n = v(r15, "a", "matMul"), s = v(e, "b", "matMul"); [n, s] = Oe(n, s); let a = { a: n, b: s }, i = { transposeA: t10, transposeB: o }; - return _.runKernel(Nn, a, i); + return T.runKernel(Zo, a, i); } -var Je = N({ matMul_: OK }); -function MK(r16) { - let t10 = { x: v(r16, "x", "sigmoid", "float32") }; - return _.runKernel(Ao, t10); +var Ze = N({ matMul_: xH }); +function yH(r15) { + let t10 = { x: v(r15, "x", "sigmoid", "float32") }; + return T.runKernel(bs, t10); } -var Pa = N({ sigmoid_: MK }); -function LK(r16, e, t10) { - let o = v(r16, "x", "slice", "string_or_numeric"); +var Ea = N({ sigmoid_: yH }); +function bH(r15, e, t10) { + let o = v(r15, "x", "slice", "string_or_numeric"); if (o.rank === 0) throw new Error("Slicing scalar is not possible"); let n = { x: o }, s = { begin: e, size: t10 }; - return _.runKernel(_s, n, s); -} -var Ye = N({ slice_: LK }); -function BK(r16) { - let t10 = { x: v(r16, "x", "tanh", "float32") }; - return _.runKernel(Ls, t10); -} -var Dc = N({ tanh_: BK }); -function zK(r16, e, t10, o, n, s) { - let a = v(r16, "forgetBias", "basicLSTMCell"), i = v(e, "lstmKernel", "basicLSTMCell"), p = v(t10, "lstmBias", "basicLSTMCell"), u = v(o, "data", "basicLSTMCell"), l = v(n, "c", "basicLSTMCell"), c = v(s, "h", "basicLSTMCell"), m = bt([u, c], 1), d = Je(m, i), f = Ce(d, p), h = f.shape[0], g = f.shape[1] / 4, x = [h, g], b = Ye(f, [0, 0], x), w = Ye(f, [0, g], x), S = Ye(f, [0, g * 2], x), k = Ye(f, [0, g * 3], x), T = Ce(se(Pa(b), Dc(w)), se(l, Pa(Ce(a, S)))), E = se(Dc(T), Pa(k)); - return [T, E]; -} -var R1 = N({ basicLSTMCell_: zK }); -function VK(r16, e, t10) { - let o = v(r16, "x", "batchToSpaceND"), n = e.reduce((i, p) => i * p); - $(o.rank >= 1 + e.length, () => `input rank is ${o.rank} but should be > than blockShape.length ${e.length}`), $(t10.length === e.length, () => `crops.length is ${t10.length} but should be equal to blockShape.length ${e.length}`), $(o.shape[0] % n === 0, () => `input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`); + return T.runKernel(ha, n, s); +} +var Xe = N({ slice_: bH }); +function CH(r15) { + let t10 = { x: v(r15, "x", "tanh", "float32") }; + return T.runKernel(Es, t10); +} +var kl = N({ tanh_: CH }); +function wH(r15, e, t10, o, n, s) { + let a = v(r15, "forgetBias", "basicLSTMCell"), i = v(e, "lstmKernel", "basicLSTMCell"), p = v(t10, "lstmBias", "basicLSTMCell"), u = v(o, "data", "basicLSTMCell"), c = v(n, "c", "basicLSTMCell"), l = v(s, "h", "basicLSTMCell"), m = yt([u, l], 1), d = Ze(m, i), f = Ce(d, p), h = f.shape[0], g = f.shape[1] / 4, x = [h, g], b = Xe(f, [0, 0], x), C = Xe(f, [0, g], x), S = Xe(f, [0, g * 2], x), k = Xe(f, [0, g * 3], x), _ = Ce(se(Ea(b), kl(C)), se(c, Ea(Ce(a, S)))), $ = se(kl(_), Ea(k)); + return [_, $]; +} +var Kk = N({ basicLSTMCell_: wH }); +function SH(r15, e, t10) { + let o = v(r15, "x", "batchToSpaceND"), n = e.reduce((i, p) => i * p); + E(o.rank >= 1 + e.length, () => `input rank is ${o.rank} but should be > than blockShape.length ${e.length}`), E(t10.length === e.length, () => `crops.length is ${t10.length} but should be equal to blockShape.length ${e.length}`), E(o.shape[0] % n === 0, () => `input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`); let s = { x: o }, a = { blockShape: e, crops: t10 }; - return _.runKernel(ia, s, a); + return T.runKernel(Js, s, a); } -var vd = N({ batchToSpaceND_: VK }); -function D1(r16) { +var fd = N({ batchToSpaceND_: SH }); +function qk(r15) { let e; - return r16.rank === 0 || r16.rank === 1 ? e = W(r16, [1, 1, 1, r16.size]) : r16.rank === 2 ? e = W(r16, [1, 1, r16.shape[0], r16.shape[1]]) : r16.rank === 3 ? e = W(r16, [1, r16.shape[0], r16.shape[1], r16.shape[2]]) : e = r16, e; + return r15.rank === 0 || r15.rank === 1 ? e = W(r15, [1, 1, 1, r15.size]) : r15.rank === 2 ? e = W(r15, [1, 1, r15.shape[0], r15.shape[1]]) : r15.rank === 3 ? e = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]]) : e = r15, e; } -function WK(r16, e, t10, o, n, s) { +function IH(r15, e, t10, o, n, s) { s == null && (s = 1e-3); - let a = v(r16, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; + let a = v(r15, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); - let l; - o != null && (l = v(o, "offset", "batchNorm")), $(i.rank === p.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."), $(l == null || i.rank === l.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."), $(u == null || i.rank === u.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); - let m = { x: D1(a), scale: u, offset: l, mean: i, variance: p }, d = { varianceEpsilon: s }, f = _.runKernel(Hn, m, d); + let c; + o != null && (c = v(o, "offset", "batchNorm")), E(i.rank === p.rank, () => "Batch normalization gradient requires mean and variance to have equal ranks."), E(c == null || i.rank === c.rank, () => "Batch normalization gradient requires mean and offset to have equal ranks."), E(u == null || i.rank === u.rank, () => "Batch normalization gradient requires mean and scale to have equal ranks."); + let m = { x: qk(a), scale: u, offset: c, mean: i, variance: p }, d = { varianceEpsilon: s }, f = T.runKernel(In, m, d); return W(f, a.shape); } -var mu = N({ batchNorm_: WK }); -function UK(r16, e, t10, o, n, s) { - let a = v(r16, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var nu = N({ batchNorm_: IH }); +function vH(r15, e, t10, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); - let l; - return o != null && (l = v(o, "offset", "batchNorm")), $(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), $(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), $(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), l != null && $(l.rank === 2 || l.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${l.rank}.`), mu(a, i, p, l, u, s); + let c; + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 2, () => `Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`), E(i.rank === 2 || i.rank === 1, () => `Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`), E(p.rank === 2 || p.rank === 1, () => `Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 2 || u.rank === 1, () => `Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 2 || c.rank === 1, () => `Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`), nu(a, i, p, c, u, s); } -var A1 = N({ batchNorm2d_: UK }); -function GK(r16, e, t10, o, n, s) { - let a = v(r16, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var jk = N({ batchNorm2d_: vH }); +function kH(r15, e, t10, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); - let l; - return o != null && (l = v(o, "offset", "batchNorm")), $(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), $(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), $(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), l != null && $(l.rank === 3 || l.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${l.rank}.`), mu(a, i, p, l, u, s); + let c; + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 3, () => `Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`), E(i.rank === 3 || i.rank === 1, () => `Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`), E(p.rank === 3 || p.rank === 1, () => `Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 3 || u.rank === 1, () => `Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 3 || c.rank === 1, () => `Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`), nu(a, i, p, c, u, s); } -var F1 = N({ batchNorm3d_: GK }); -function HK(r16, e, t10, o, n, s) { - let a = v(r16, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; +var Xk = N({ batchNorm3d_: kH }); +function NH(r15, e, t10, o, n, s) { + let a = v(r15, "x", "batchNorm"), i = v(e, "mean", "batchNorm"), p = v(t10, "variance", "batchNorm"), u; n != null && (u = v(n, "scale", "batchNorm")); - let l; - return o != null && (l = v(o, "offset", "batchNorm")), $(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), $(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), $(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && $(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), l != null && $(l.rank === 4 || l.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${l.rank}.`), mu(a, i, p, l, u, s); + let c; + return o != null && (c = v(o, "offset", "batchNorm")), E(a.rank === 4, () => `Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`), E(i.rank === 4 || i.rank === 1, () => `Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`), E(p.rank === 4 || p.rank === 1, () => `Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`), u != null && E(u.rank === 4 || u.rank === 1, () => `Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`), c != null && E(c.rank === 4 || c.rank === 1, () => `Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`), nu(a, i, p, c, u, s); } -var P1 = N({ batchNorm4d_: HK }); -function KK(r16, e, t10) { - let o = v(r16, "x", "bincount"), n = v(e, "weights", "bincount"); - $(o.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${o.dtype}`), $(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), $(n.size === o.size || n.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`); +var Yk = N({ batchNorm4d_: NH }); +function TH(r15, e, t10) { + let o = v(r15, "x", "bincount"), n = v(e, "weights", "bincount"); + E(o.dtype === "int32", () => `Error in bincount: input dtype must be int32, but got ${o.dtype}`), E(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), E(n.size === o.size || n.size === 0, () => `Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`); let s = { x: o, weights: n }, a = { size: t10 }; - return _.runKernel(Tn, s, a); + return T.runKernel(Jo, s, a); } -var kd = N({ bincount_: KK }); -function qK(r16, e) { - let t10 = v(r16, "x", "bitwiseAnd"), o = v(e, "y", "bitwiseAnd"); - if (!Sr(t10.shape, o.shape)) +var hd = N({ bincount_: TH }); +function _H(r15, e) { + let t10 = v(r15, "x", "bitwiseAnd"), o = v(e, "y", "bitwiseAnd"); + if (!br(t10.shape, o.shape)) throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t10.shape}, y: ${o.shape}`); if (t10.dtype !== "int32" || o.dtype !== "int32") throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t10.dtype} and type of y: ${o.dtype}`); let n = { a: t10, b: o }; - return _.runKernel(_n, n); + return T.runKernel(qa, n); } -var O1 = N({ bitwiseAnd_: qK }); -function jK(r16, e) { - let t10 = v(r16, "s0", "broadcastArgs", "int32"), o = v(e, "s1", "broadcastArgs", "int32"); +var Qk = N({ bitwiseAnd_: _H }); +function EH(r15, e) { + let t10 = v(r15, "s0", "broadcastArgs", "int32"), o = v(e, "s1", "broadcastArgs", "int32"); if (t10.rank !== 1) throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t10.rank}`); if (o.rank !== 1) throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`); let n = { s0: t10, s1: o }; - return _.runKernel(ua, n); + return T.runKernel(ea, n); } -var M1 = N({ broadcastArgs_: jK }); -function XK(r16, e) { - let t10 = v(r16, "broadcastTo", "x"), o = t10.shape; - if (St(e), e.length < t10.rank) +var Zk = N({ broadcastArgs_: EH }); +function $H(r15, e) { + let t10 = v(r15, "broadcastTo", "x"), o = t10.shape; + if (Ct(e), e.length < t10.rank) throw new Error(`broadcastTo(): shape.length=${e.length} < input.rank=${t10.rank}.`); if (e.length > t10.rank) { let u = t10.shape.slice(); @@ -6059,182 +6059,182 @@ function XK(r16, e) { s[u] = 1; else if (t10.shape[u] !== 1) throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`); - if (s.map((u, l) => u > 1 ? l : -1).filter((u) => u >= 0).length === 0) - return Xr(t10); + if (s.map((u, c) => u > 1 ? c : -1).filter((u) => u >= 0).length === 0) + return Ur(t10); let i = { x: t10 }, p = { reps: s }; - return _.runKernel(Mo, i, p); -} -var Oa = N({ broadcastTo_: XK }); -function YK(r16) { - let t10 = { x: v(r16, "x", "ceil", "float32") }; - return _.runKernel(go, t10); -} -var L1 = N({ ceil_: YK }); -function Ma(r16, e, t10) { - St(r16), t10 = t10 || Bi(e); - let o = { shape: r16, value: e, dtype: t10 }; - return _.runKernel(da, {}, o); -} -function QK(r16, e, t10) { - let o = v(r16, "x", "clipByValue"); - if ($(e <= t10, () => `Error in clip: min (${e}) must be less than or equal to max (${t10}).`), e === t10) - return Ma(o.shape, e, o.dtype); + return T.runKernel(po, i, p); +} +var su = N({ broadcastTo_: $H }); +function RH(r15) { + let t10 = { x: v(r15, "x", "ceil", "float32") }; + return T.runKernel(en, t10); +} +var Jk = N({ ceil_: RH }); +function $a(r15, e, t10) { + Ct(r15), t10 = t10 || Ei(e); + let o = { shape: r15, value: e, dtype: t10 }; + return T.runKernel(sa, {}, o); +} +function DH(r15, e, t10) { + let o = v(r15, "x", "clipByValue"); + if (E(e <= t10, () => `Error in clip: min (${e}) must be less than or equal to max (${t10}).`), e === t10) + return $a(o.shape, e, o.dtype); let n = { x: o }, s = { clipValueMin: e, clipValueMax: t10 }; - return _.runKernel(Go, n, s); -} -var B1 = N({ clipByValue_: QK }); -function ZK(r16) { - return bt(r16, 0); -} -var z1 = N({ concat1d_: ZK }); -function JK(r16, e) { - return bt(r16, e); -} -var V1 = N({ concat2d_: JK }); -function eq(r16, e) { - return bt(r16, e); -} -var W1 = N({ concat3d_: eq }); -function tq(r16, e) { - return bt(r16, e); -} -var U1 = N({ concat4d_: tq }); -function rq(r16, e, t10, o, n = "NHWC", s = [1, 1], a) { - let i = v(r16, "x", "conv2d", "float32"), p = v(e, "filter", "conv2d", "float32"), u = i, l = false; - i.rank === 3 && (l = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), zt("conv2d", o, a); - let c = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(c === p.shape[2], () => `Error in conv2d: depth of input (${c}) must match input depth for filter ${p.shape[2]}.`), $(br(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), $(Aa(s), () => "Error in conv2D: Dilated rates should be larger than 0."), $(Aa(t10), () => "Error in conv2D: Strides should be larger than 0."); - let m = { x: u, filter: p }, d = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = _.runKernel(En, m, d); - return l ? W(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; -} -var du = N({ conv2d_: rq }); -function oq(r16, e, t10, o, n = "NWC", s = 1, a) { - let i = v(r16, "x", "conv1d"), p = v(e, "filter", "conv1d"), u = i, l = false; - i.rank === 2 && (l = true, u = W(i, [1, i.shape[0], i.shape[1]])), $(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), $(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), zt("conv1d", o, a), $(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), $(br(t10, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${t10} and dilation '${s}'`), $(Aa(s), () => "Error in conv1D: Dilated rates should be larger than 0."), $(Aa(t10), () => "Error in conv1D: Stride should be larger than 0."), $(n === "NWC", () => `Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`); - let c = W(p, [1, p.shape[0], p.shape[1], p.shape[2]]), m = W(u, [u.shape[0], 1, u.shape[1], u.shape[2]]), g = du(m, c, [1, t10], o, "NHWC", [1, s], a); - return l ? W(g, [g.shape[2], g.shape[3]]) : W(g, [g.shape[0], g.shape[2], g.shape[3]]); -} -var G1 = N({ conv1d_: oq }); -function nq(r16, e, t10, o, n, s = "NHWC", a) { - $(r16.length === e.rank, () => `Length of inShape (${r16.length}) and rank of dy (${e.rank}) must match`); - let i = r16, p = e, u = false; - e.rank === 3 && (u = true, p = W(e, [1, e.shape[0], e.shape[1], e.shape[2]]), i = [1, r16[0], r16[1], r16[2]]), $(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), $(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), $(t10.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${t10.rank}`); - let l = s === "NHWC" ? i[3] : i[1], c = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(l === t10.shape[2], () => `Error in conv2dDerInput: depth of input (${l}) must match input depth for filter ${t10.shape[2]}.`), $(c === t10.shape[3], () => `Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${t10.shape[3]}.`), zt("conv2dDerInput", n, a); - let m = { dy: p, filter: t10 }, d = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, inputShape: i }, f = _.runKernel($n, m, d); + return T.runKernel(bo, n, s); +} +var e2 = N({ clipByValue_: DH }); +function AH(r15) { + return yt(r15, 0); +} +var t2 = N({ concat1d_: AH }); +function FH(r15, e) { + return yt(r15, e); +} +var r22 = N({ concat2d_: FH }); +function PH(r15, e) { + return yt(r15, e); +} +var o2 = N({ concat3d_: PH }); +function OH(r15, e) { + return yt(r15, e); +} +var n2 = N({ concat4d_: OH }); +function MH(r15, e, t10, o, n = "NHWC", s = [1, 1], a) { + let i = v(r15, "x", "conv2d", "float32"), p = v(e, "filter", "conv2d", "float32"), u = i, c = false; + i.rank === 3 && (c = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(u.rank === 4, () => `Error in conv2d: input must be rank 4, but got rank ${u.rank}.`), E(p.rank === 4, () => `Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`), Lt("conv2d", o, a); + let l = n === "NHWC" ? u.shape[3] : u.shape[1]; + E(l === p.shape[2], () => `Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`), E(gr(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), E(Ta(s), () => "Error in conv2D: Dilated rates should be larger than 0."), E(Ta(t10), () => "Error in conv2D: Strides should be larger than 0."); + let m = { x: u, filter: p }, d = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(tn, m, d); + return c ? W(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; +} +var au = N({ conv2d_: MH }); +function LH(r15, e, t10, o, n = "NWC", s = 1, a) { + let i = v(r15, "x", "conv1d"), p = v(e, "filter", "conv1d"), u = i, c = false; + i.rank === 2 && (c = true, u = W(i, [1, i.shape[0], i.shape[1]])), E(u.rank === 3, () => `Error in conv1d: input must be rank 3, but got rank ${u.rank}.`), E(p.rank === 3, () => `Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`), Lt("conv1d", o, a), E(u.shape[2] === p.shape[1], () => `Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`), E(gr(t10, s), () => `Error in conv1D: Either stride or dilation must be 1. Got stride ${t10} and dilation '${s}'`), E(Ta(s), () => "Error in conv1D: Dilated rates should be larger than 0."), E(Ta(t10), () => "Error in conv1D: Stride should be larger than 0."), E(n === "NWC", () => `Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`); + let l = W(p, [1, p.shape[0], p.shape[1], p.shape[2]]), m = W(u, [u.shape[0], 1, u.shape[1], u.shape[2]]), g = au(m, l, [1, t10], o, "NHWC", [1, s], a); + return c ? W(g, [g.shape[2], g.shape[3]]) : W(g, [g.shape[0], g.shape[2], g.shape[3]]); +} +var s2 = N({ conv1d_: LH }); +function BH(r15, e, t10, o, n, s = "NHWC", a) { + E(r15.length === e.rank, () => `Length of inShape (${r15.length}) and rank of dy (${e.rank}) must match`); + let i = r15, p = e, u = false; + e.rank === 3 && (u = true, p = W(e, [1, e.shape[0], e.shape[1], e.shape[2]]), i = [1, r15[0], r15[1], r15[2]]), E(i.length === 4, () => `Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`), E(p.rank === 4, () => `Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`), E(t10.rank === 4, () => `Error in conv2dDerInput: filter must be rank 4, but got rank ${t10.rank}`); + let c = s === "NHWC" ? i[3] : i[1], l = s === "NHWC" ? p.shape[3] : p.shape[1]; + E(c === t10.shape[2], () => `Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t10.shape[2]}.`), E(l === t10.shape[3], () => `Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t10.shape[3]}.`), Lt("conv2dDerInput", n, a); + let m = { dy: p, filter: t10 }, d = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, inputShape: i }, f = T.runKernel(rn, m, d); return u ? W(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; } -var Nd = N({ conv2DBackpropInput_: nq }); -function sq(r16, e, t10, o, n, s) { - let a = v(r16, "x", "conv2dTranspose"), i = v(e, "filter", "conv2dTranspose"); - return Nd(t10, a, i, o, n, "NHWC", s); +var gd = N({ conv2DBackpropInput_: BH }); +function zH(r15, e, t10, o, n, s) { + let a = v(r15, "x", "conv2dTranspose"), i = v(e, "filter", "conv2dTranspose"); + return gd(t10, a, i, o, n, "NHWC", s); } -var H1 = N({ conv2dTranspose_: sq }); -function aq(r16, e, t10, o, n = "NDHWC", s = [1, 1, 1]) { - let a = v(r16, "x", "conv3d"), i = v(e, "filter", "conv3d"), p = a, u = false; - a.rank === 4 && (u = true, p = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), $(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), $(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), $(br(t10, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), $(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`), $(Aa(s), () => "Error in conv3D: Dilated rates should be larger than 0."), $(Aa(t10), () => "Error in conv3D: Strides should be larger than 0."); - let l = { x: p, filter: i }, c = { strides: t10, pad: o, dataFormat: n, dilations: s }, m = _.runKernel(Rn, l, c); +var a2 = N({ conv2dTranspose_: zH }); +function VH(r15, e, t10, o, n = "NDHWC", s = [1, 1, 1]) { + let a = v(r15, "x", "conv3d"), i = v(e, "filter", "conv3d"), p = a, u = false; + a.rank === 4 && (u = true, p = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(p.rank === 5, () => `Error in conv3d: input must be rank 5, but got rank ${p.rank}.`), E(i.rank === 5, () => `Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`), E(p.shape[4] === i.shape[3], () => `Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`), E(gr(t10, s), () => `Error in conv3D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), E(n === "NDHWC", () => `Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`), E(Ta(s), () => "Error in conv3D: Dilated rates should be larger than 0."), E(Ta(t10), () => "Error in conv3D: Strides should be larger than 0."); + let c = { x: p, filter: i }, l = { strides: t10, pad: o, dataFormat: n, dilations: s }, m = T.runKernel(on, c, l); return u ? W(m, [m.shape[1], m.shape[2], m.shape[3], m.shape[4]]) : m; } -var K1 = N({ conv3d_: aq }); -function iq(r16, e, t10, o, n) { - $(r16.length === e.rank, () => `Length of inShape (${r16.length}) and rank of dy (${e.rank}) must match`); - let s = r16, a = e, i = false; - e.rank === 4 && (i = true, a = W(e, [1, e.shape[0], e.shape[1], e.shape[2], e.shape[3]]), s = [1, r16[0], r16[1], r16[2], r16[3]]); +var i2 = N({ conv3d_: VH }); +function WH(r15, e, t10, o, n) { + E(r15.length === e.rank, () => `Length of inShape (${r15.length}) and rank of dy (${e.rank}) must match`); + let s = r15, a = e, i = false; + e.rank === 4 && (i = true, a = W(e, [1, e.shape[0], e.shape[1], e.shape[2], e.shape[3]]), s = [1, r15[0], r15[1], r15[2], r15[3]]); let p = s[4], u = a.shape[4]; - $(s.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`), $(a.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`), $(t10.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${t10.rank}`), $(p === t10.shape[3], () => `Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t10.shape[3]}.`), $(u === t10.shape[4], () => `Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t10.shape[4]}.`); - let l = { dy: a, filter: t10 }, c = { pad: n, strides: o, inputShape: s }, m = _.runKernel(Dn, l, c); + E(s.length === 5, () => `Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`), E(a.rank === 5, () => `Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`), E(t10.rank === 5, () => `Error in conv3dDerInput: filter must be rank 5, but got rank ${t10.rank}`), E(p === t10.shape[3], () => `Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t10.shape[3]}.`), E(u === t10.shape[4], () => `Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t10.shape[4]}.`); + let c = { dy: a, filter: t10 }, l = { pad: n, strides: o, inputShape: s }, m = T.runKernel(nn, c, l); return i ? W(m, [m.shape[1], m.shape[2], m.shape[3], m.shape[4]]) : m; } -var q1 = N({ conv3DBackpropInput_: iq }); -function uq(r16, e, t10, o, n) { - let s = v(r16, "x", "conv3dTranspose"), a = v(e, "filter", "conv3dTranspose"); - return q1(t10, s, a, o, n); -} -var j1 = N({ conv3dTranspose_: uq }); -function pq(r16) { - let t10 = { x: v(r16, "x", "cos", "float32") }; - return _.runKernel(An, t10); -} -var X1 = N({ cos_: pq }); -function lq(r16) { - let t10 = { x: v(r16, "x", "cosh", "float32") }; - return _.runKernel(Fn, t10); -} -var Y1 = N({ cosh_: lq }); -function cq(r16, e = 0, t10 = false, o = false) { - let s = { x: v(r16, "x", "cumprod") }, a = { axis: e, exclusive: t10, reverse: o }; - return _.runKernel(Pn, s, a); -} -var Q1 = N({ cumprod_: cq }); -function mq(r16, e = 0, t10 = false, o = false) { - let s = { x: v(r16, "x", "cumsum") }, a = { axis: e, exclusive: t10, reverse: o }; - return _.runKernel(On, s, a); -} -var Z1 = N({ cumsum_: mq }); -function dq(r16, e, t10, o = false) { - let n = v(r16, "x", "denseBincount"), s = v(e, "weights", "denseBincount"); - $(n.dtype === "int32", () => `Error in denseBincount: input dtype must be int32, but got ${n.dtype}`), $(n.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`), $(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), $(s.size === n.size || s.size === 0, () => `Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`); +var u2 = N({ conv3DBackpropInput_: WH }); +function UH(r15, e, t10, o, n) { + let s = v(r15, "x", "conv3dTranspose"), a = v(e, "filter", "conv3dTranspose"); + return u2(t10, s, a, o, n); +} +var p2 = N({ conv3dTranspose_: UH }); +function GH(r15) { + let t10 = { x: v(r15, "x", "cos", "float32") }; + return T.runKernel(sn, t10); +} +var c2 = N({ cos_: GH }); +function HH(r15) { + let t10 = { x: v(r15, "x", "cosh", "float32") }; + return T.runKernel(an, t10); +} +var l2 = N({ cosh_: HH }); +function KH(r15, e = 0, t10 = false, o = false) { + let s = { x: v(r15, "x", "cumprod") }, a = { axis: e, exclusive: t10, reverse: o }; + return T.runKernel(un, s, a); +} +var m2 = N({ cumprod_: KH }); +function qH(r15, e = 0, t10 = false, o = false) { + let s = { x: v(r15, "x", "cumsum") }, a = { axis: e, exclusive: t10, reverse: o }; + return T.runKernel(pn, s, a); +} +var d2 = N({ cumsum_: qH }); +function jH(r15, e, t10, o = false) { + let n = v(r15, "x", "denseBincount"), s = v(e, "weights", "denseBincount"); + E(n.dtype === "int32", () => `Error in denseBincount: input dtype must be int32, but got ${n.dtype}`), E(n.rank <= 2, () => `Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`), E(t10 >= 0, () => `size must be non-negative, but got ${t10}.`), E(s.size === n.size || s.size === 0, () => `Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`); let a = { x: n, weights: s }, i = { size: t10, binaryOutput: o }; - return _.runKernel(la, a, i); + return T.runKernel(ra, a, i); } -var J1 = N({ denseBincount_: dq }); -function fq(r16, e, t10 = "NHWC") { - let o = v(r16, "x", "depthToSpace", "float32"), n = t10 === "NHWC" ? o.shape[1] : o.shape[2], s = t10 === "NHWC" ? o.shape[2] : o.shape[3], a = t10 === "NHWC" ? o.shape[3] : o.shape[1]; - $(e > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${e}`), $(n * e >= 0, () => `Negative dimension size caused by overflow when multiplying +var f2 = N({ denseBincount_: jH }); +function XH(r15, e, t10 = "NHWC") { + let o = v(r15, "x", "depthToSpace", "float32"), n = t10 === "NHWC" ? o.shape[1] : o.shape[2], s = t10 === "NHWC" ? o.shape[2] : o.shape[3], a = t10 === "NHWC" ? o.shape[3] : o.shape[1]; + E(e > 1, () => `blockSize should be > 1 for depthToSpace, but was: ${e}`), E(n * e >= 0, () => `Negative dimension size caused by overflow when multiplying ${n} and ${e} for depthToSpace with input shape - ${o.shape}`), $(s * e >= 0, () => `Negative dimension size caused by overflow when multiplying + ${o.shape}`), E(s * e >= 0, () => `Negative dimension size caused by overflow when multiplying ${s} and ${e} for depthToSpace with input shape - ${o.shape}`), $(a % (e * e) === 0, () => `Dimension size must be evenly divisible by ${e * e} but is ${a} for depthToSpace with input shape ${o.shape}`); + ${o.shape}`), E(a % (e * e) === 0, () => `Dimension size must be evenly divisible by ${e * e} but is ${a} for depthToSpace with input shape ${o.shape}`); let i = { x: o }, p = { blockSize: e, dataFormat: t10 }; - return _.runKernel(Ln, i, p); -} -var e2 = N({ depthToSpace_: fq }); -function hq(r16, e, t10, o, n = "NHWC", s = [1, 1], a) { - let i = v(r16, "x", "depthwiseConv2d", "float32"), p = v(e, "filter", "depthwiseConv2d", "float32"), u = i, l = false; - i.rank === 3 && (l = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(u.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`), $(p.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`); - let c = n === "NHWC" ? u.shape[3] : u.shape[1]; - $(c === p.shape[2], () => `Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${p.shape[2]}.`), zt("depthwiseConv2d", o, a); - let m = { x: u, filter: p }, d = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = _.runKernel(Bn, m, d); - return l ? W(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; -} -var cl = N({ depthwiseConv2d_: hq }); -function gq(r16) { - let t10 = { x: v(r16, "x", "diag") }; - return _.runKernel(ca, t10); -} -var t2 = N({ diag_: gq }); -function xq(r16, e, t10, o, n = [1, 1], s = "NHWC") { - let a = v(r16, "x", "dilation2d"), i = v(e, "filter", "dilation2d"); - $(a.rank === 3 || a.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`), $(i.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`), $(s === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`); + return T.runKernel(ln, i, p); +} +var h2 = N({ depthToSpace_: XH }); +function YH(r15, e, t10, o, n = "NHWC", s = [1, 1], a) { + let i = v(r15, "x", "depthwiseConv2d", "float32"), p = v(e, "filter", "depthwiseConv2d", "float32"), u = i, c = false; + i.rank === 3 && (c = true, u = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(u.rank === 4, () => `Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`), E(p.rank === 4, () => `Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`); + let l = n === "NHWC" ? u.shape[3] : u.shape[1]; + E(l === p.shape[2], () => `Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`), Lt("depthwiseConv2d", o, a); + let m = { x: u, filter: p }, d = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a }, f = T.runKernel(mn, m, d); + return c ? W(f, [f.shape[1], f.shape[2], f.shape[3]]) : f; +} +var sc = N({ depthwiseConv2d_: YH }); +function QH(r15) { + let t10 = { x: v(r15, "x", "diag") }; + return T.runKernel(oa, t10); +} +var g2 = N({ diag_: QH }); +function ZH(r15, e, t10, o, n = [1, 1], s = "NHWC") { + let a = v(r15, "x", "dilation2d"), i = v(e, "filter", "dilation2d"); + E(a.rank === 3 || a.rank === 4, () => `Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`), E(i.rank === 3, () => `Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`), E(s === "NHWC", () => `Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`); let p = a, u = false; - a.rank === 3 && (p = W(a, [1, a.shape[0], a.shape[1], a.shape[2]]), u = true), $(p.shape[3] === i.shape[2], () => `Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`); - let l = { x: p, filter: i }, c = { strides: t10, pad: o, dilations: n }, m = _.runKernel(zn, l, c); + a.rank === 3 && (p = W(a, [1, a.shape[0], a.shape[1], a.shape[2]]), u = true), E(p.shape[3] === i.shape[2], () => `Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`); + let c = { x: p, filter: i }, l = { strides: t10, pad: o, dilations: n }, m = T.runKernel(dn, c, l); return u ? W(m, [m.shape[1], m.shape[2], m.shape[3]]) : m; } -var r22 = N({ dilation2d_: xq }); -var kr = {}; -qe(kr, { assertAndGetBroadcastShape: () => rt, getBroadcastDims: () => o2, getReductionAxes: () => Td }); -function o2(r16, e) { - let t10 = r16.length, o = []; +var x2 = N({ dilation2d_: ZH }); +var Sr = {}; +qe(Sr, { assertAndGetBroadcastShape: () => rt, getBroadcastDims: () => y2, getReductionAxes: () => xd }); +function y2(r15, e) { + let t10 = r15.length, o = []; for (let n = 0; n < t10; n++) { - let s = t10 - 1 - n, a = r16[s] || 1; + let s = t10 - 1 - n, a = r15[s] || 1; (e[e.length - 1 - n] || 1) > 1 && a === 1 && o.unshift(s); } return o; } -function Td(r16, e) { +function xd(r15, e) { let t10 = []; for (let o = 0; o < e.length; o++) { - let n = r16[r16.length - o - 1], s = e.length - o - 1, a = e[s]; + let n = r15[r15.length - o - 1], s = e.length - o - 1, a = e[s]; (n == null || n === 1 && a > 1) && t10.unshift(s); } return t10; } -function rt(r16, e) { - let t10 = Math.max(r16.length, e.length), o = new Array(t10); +function rt(r15, e) { + let t10 = Math.max(r15.length, e.length), o = new Array(t10); for (let n = 0; n < t10; n++) { - let s = r16[r16.length - n - 1]; + let s = r15[r15.length - n - 1]; s == null && (s = 1); let a = e[e.length - n - 1]; if (a == null && (a = 1), s === 1) @@ -6242,702 +6242,702 @@ function rt(r16, e) { else if (a === 1) o[t10 - n - 1] = s; else if (s !== a) { - let i = `Operands could not be broadcast together with shapes ${r16} and ${e}.`; + let i = `Operands could not be broadcast together with shapes ${r15} and ${e}.`; throw Error(i); } else o[t10 - n - 1] = s; } return o; } -function yq(r16, e) { - let t10 = v(r16, "a", "equal", "string_or_numeric"), o = v(e, "b", "equal", "string_or_numeric"); +function JH(r15, e) { + let t10 = v(r15, "a", "equal", "string_or_numeric"), o = v(e, "b", "equal", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(xo, n); + return T.runKernel(xn, n); } -var _d = N({ equal_: yq }); -function bq(r16, e, t10) { - let o = v(e, "a", "where"), n = v(t10, "b", "where"), s = v(r16, "condition", "where", "bool"), a = rt(rt(s.shape, o.shape), n.shape), i = Oa(s, a), p = Oa(o, a), u = Oa(n, a), l = { condition: i, t: p, e: u }; - return _.runKernel(wa, l); +var yd = N({ equal_: JH }); +function eK(r15, e, t10) { + let o = v(e, "a", "where"), n = v(t10, "b", "where"), s = v(r15, "condition", "where", "bool"), a = rt(rt(s.shape, o.shape), n.shape), i = su(s, a), p = su(o, a), u = su(n, a), c = { condition: i, t: p, e: u }; + return T.runKernel(fa, c); } -var Lo = N({ where_: bq }); -function Cq(r16) { - let t10 = { x: v(r16, "x", "zerosLike") }; - return _.runKernel(_a, t10); +var lo = N({ where_: eK }); +function tK(r15) { + let t10 = { x: v(r15, "x", "zerosLike") }; + return T.runKernel(Sa, t10); } -var Kt = N({ zerosLike_: Cq }); -function wq(r16, e) { - let t10 = v(r16, "a", "div"), o = v(e, "b", "div"); +var Gt = N({ zerosLike_: tK }); +function rK(r15, e) { + let t10 = v(r15, "a", "div"), o = v(e, "b", "div"); [t10, o] = Oe(t10, o); - let n = Xe(t10, o), s = Kt(n), a = _d(o, s); - return Lo(a, s, n); + let n = je(t10, o), s = Gt(n), a = yd(o, s); + return lo(a, s, n); } -var n2 = N({ divNoNan_: wq }); -function Sq(r16, e) { - let t10 = v(r16, "t1", "dot"), o = v(e, "t2", "dot"); - $((t10.rank === 1 || t10.rank === 2) && (o.rank === 1 || o.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${t10.rank} and ${o.rank}.`); +var b2 = N({ divNoNan_: rK }); +function oK(r15, e) { + let t10 = v(r15, "t1", "dot"), o = v(e, "t2", "dot"); + E((t10.rank === 1 || t10.rank === 2) && (o.rank === 1 || o.rank === 2), () => `Error in dot: inputs must all be rank 1 or 2, but got ranks ${t10.rank} and ${o.rank}.`); let n = t10.rank === 1 ? t10.size : t10.shape[1], s = o.rank === 1 ? o.size : o.shape[0]; - if ($(n === s, () => `Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`), t10.rank === 1 && o.rank === 1) { - let a = W(t10, [1, -1]), i = W(o, [-1, 1]), p = Je(a, i); + if (E(n === s, () => `Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`), t10.rank === 1 && o.rank === 1) { + let a = W(t10, [1, -1]), i = W(o, [-1, 1]), p = Ze(a, i); return W(p, []); } else if (t10.rank === 1 && o.rank === 2) { - let a = W(t10, [1, -1]), i = W(o, [o.shape[0], o.shape[1]]), p = Je(a, i); + let a = W(t10, [1, -1]), i = W(o, [o.shape[0], o.shape[1]]), p = Ze(a, i); return W(p, [p.size]); } else if (t10.rank === 2 && o.rank === 1) { - let a = W(o, [-1, 1]), i = Je(t10, a); + let a = W(o, [-1, 1]), i = Ze(t10, a); return W(i, [i.size]); } else { let a = W(o, [o.shape[0], o.shape[1]]); - return Je(t10, a); + return Ze(t10, a); } } -var s2 = N({ dot_: Sq }); -function Iq(r16, ...e) { - let t10 = e.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r16 }; - return _.runKernel(ji, t10, o); +var C2 = N({ dot_: oK }); +function nK(r15, ...e) { + let t10 = e.map((n, s) => v(n, `tensors${s}`, "einsum")), o = { equation: r15 }; + return T.runKernel(Bi, t10, o); } -var fu = N({ einsum_: Iq }); -function vq(r16) { - let t10 = { x: v(r16, "x", "elu", "float32") }; - return _.runKernel(Wn, t10); +var iu = N({ einsum_: nK }); +function sK(r15) { + let t10 = { x: v(r15, "x", "elu", "float32") }; + return T.runKernel(hn, t10); } -var Ed = N({ elu_: vq }); -function kq(r16, e) { - let t10 = v(r16, "x", "ensureShape", "string_or_numeric"); - if (!cw(t10.shape, e)) +var bd = N({ elu_: sK }); +function aK(r15, e) { + let t10 = v(r15, "x", "ensureShape", "string_or_numeric"); + if (!ZC(t10.shape, e)) throw new Error(`EnsureShape: Shape of tensor ${t10.shape} is not compatible with expected shape ${e}`); - return r16; + return r15; } -var a2 = N({ ensureShape_: kq }); -function Nq(r16) { - let e = v(r16, "x", "erf"); - $(e.dtype === "int32" || e.dtype === "float32", () => "Input dtype must be `int32` or `float32`."), e.dtype === "int32" && (e = Ue(e, "float32")); +var w2 = N({ ensureShape_: aK }); +function iK(r15) { + let e = v(r15, "x", "erf"); + E(e.dtype === "int32" || e.dtype === "float32", () => "Input dtype must be `int32` or `float32`."), e.dtype === "int32" && (e = Ue(e, "float32")); let t10 = { x: e }; - return _.runKernel(Un, t10); + return T.runKernel(gn, t10); } -var i2 = N({ erf_: Nq }); -function Jw(r16, e) { - for (let t10 = 0; t10 < r16.length; ++t10) - if (r16[r16.length - t10 - 1] !== e - 1 - t10) +var S2 = N({ erf_: iK }); +function zw(r15, e) { + for (let t10 = 0; t10 < r15.length; ++t10) + if (r15[r15.length - t10 - 1] !== e - 1 - t10) return false; return true; } -function u2(r16, e, t10) { - let o = r16.length + e.length, n = [], s = 0, a = 0; +function I2(r15, e, t10) { + let o = r15.length + e.length, n = [], s = 0, a = 0; for (let i = 0; i < o; i++) - t10.indexOf(i) === -1 ? n.push(r16[s++]) : n.push(e[a++]); + t10.indexOf(i) === -1 ? n.push(r15[s++]) : n.push(e[a++]); return n; } -function Tq(r16, e) { - let t10 = [], o = r16.length; +function uK(r15, e) { + let t10 = [], o = r15.length; for (let s = 0; s < o; s++) - e.indexOf(s) === -1 && t10.push(r16[s]); - let n = e.map((s) => r16[s]); + e.indexOf(s) === -1 && t10.push(r15[s]); + let n = e.map((s) => r15[s]); return [t10, n]; } -function gi(r16, e) { +function ii(r15, e) { let t10 = e.map((o) => 1); - return u2(r16, t10, e); + return I2(r15, t10, e); } -function _q(r16, e, t10) { - $(Jw(e, t10), () => `${r16} supports only inner-most axes for now. Got axes ${e} and rank-${t10} input.`); +function pK(r15, e, t10) { + E(zw(e, t10), () => `${r15} supports only inner-most axes for now. Got axes ${e} and rank-${t10} input.`); } -function Eq(r16, e) { - if (Jw(r16, e)) +function cK(r15, e) { + if (zw(r15, e)) return null; let t10 = []; for (let o = 0; o < e; ++o) - r16.indexOf(o) === -1 && t10.push(o); - return r16.forEach((o) => t10.push(o)), t10; + r15.indexOf(o) === -1 && t10.push(o); + return r15.forEach((o) => t10.push(o)), t10; } -function $q(r16) { - return r16.map((e, t10) => [t10, e]).sort((e, t10) => e[1] - t10[1]).map((e) => e[0]); +function lK(r15) { + return r15.map((e, t10) => [t10, e]).sort((e, t10) => e[1] - t10[1]).map((e) => e[0]); } -function Rq(r16, e) { +function mK(r15, e) { let t10 = []; - for (let o = e - r16; o < e; ++o) + for (let o = e - r15; o < e; ++o) t10.push(o); return t10; } -function Aq(r16, e = null, t10 = false) { - let n = { x: v(r16, "x", "max") }, s = { reductionIndices: e, keepDims: t10 }; - return _.runKernel(os, n, s); +function fK(r15, e = null, t10 = false) { + let n = { x: v(r15, "x", "max") }, s = { reductionIndices: e, keepDims: t10 }; + return T.runKernel(zn, n, s); } -var La = N({ max_: Aq }); -function Fq(r16, e = null, t10 = false) { - let n = { x: v(r16, "x", "min") }, s = { axis: e, keepDims: t10 }; - return _.runKernel(as, n, s); +var Ra = N({ max_: fK }); +function hK(r15, e = null, t10 = false) { + let n = { x: v(r15, "x", "min") }, s = { axis: e, keepDims: t10 }; + return T.runKernel(Gn, n, s); } -var Ac = N({ min_: Fq }); -function Pq(r16, e) { - let t10 = v(r16, "base", "pow"), o = v(e, "exp", "pow"); +var Nl = N({ min_: hK }); +function gK(r15, e) { + let t10 = v(r15, "base", "pow"), o = v(e, "exp", "pow"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(hs, n); + return T.runKernel(ts, n); } -var xi = N({ pow_: Pq }); -function ke(r16, e) { - if ((Mt(r16) && e !== "string" || Array.isArray(r16)) && e !== "complex64") +var ui = N({ pow_: gK }); +function ke(r15, e) { + if ((Pt(r15) && e !== "string" || Array.isArray(r15)) && e !== "complex64") throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)"); - if (e === "string" && Mt(r16) && !(r16 instanceof Uint8Array)) + if (e === "string" && Pt(r15) && !(r15 instanceof Uint8Array)) throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`."); - return vr(r16, [], [], e); + return wr(r15, [], [], e); } -function Oq(r16) { - let t10 = { x: v(r16, "x", "sqrt", "float32") }; - return _.runKernel(Fo, t10); +function xK(r15) { + let t10 = { x: v(r15, "x", "sqrt", "float32") }; + return T.runKernel(ws, t10); } -var Pr = N({ sqrt_: Oq }); -function Mq(r16) { - let e = v(r16, "x", "square"), t10 = {}; - return _.runKernel("Square", { x: e }, t10); +var Rr = N({ sqrt_: xK }); +function yK(r15) { + let e = v(r15, "x", "square"), t10 = {}; + return T.runKernel("Square", { x: e }, t10); } -var tr = N({ square_: Mq }); -function Lq(r16, e = null, t10 = false) { - let o = v(r16, "x", "sum"); +var Zt = N({ square_: yK }); +function bK(r15, e = null, t10 = false) { + let o = v(r15, "x", "sum"); o.dtype === "bool" && (o = Ue(o, "int32")); let n = { x: o }, s = { axis: e, keepDims: t10 }; - return _.runKernel(As, n, s); + return T.runKernel(Ss, n, s); } -var ot = N({ sum_: Lq }); -function Bq(r16, e = "euclidean", t10 = null, o = false) { - r16 = v(r16, "x", "norm"); - let n = p2(r16, e, t10), s = n.shape; +var ot = N({ sum_: bK }); +function CK(r15, e = "euclidean", t10 = null, o = false) { + r15 = v(r15, "x", "norm"); + let n = v2(r15, e, t10), s = n.shape; if (o) { - let a = Li(t10, r16.shape); - s = gi(n.shape, a); + let a = _i(t10, r15.shape); + s = ii(n.shape, a); } return W(n, s); } -function p2(r16, e, t10 = null) { - if (r16.rank === 0) - return er(r16); - if (r16.rank !== 1 && t10 === null) - return p2(W(r16, [-1]), e, t10); - if (r16.rank === 1 || typeof t10 == "number" || Array.isArray(t10) && t10.length === 1) { +function v2(r15, e, t10 = null) { + if (r15.rank === 0) + return Qt(r15); + if (r15.rank !== 1 && t10 === null) + return v2(W(r15, [-1]), e, t10); + if (r15.rank === 1 || typeof t10 == "number" || Array.isArray(t10) && t10.length === 1) { if (e === 1) - return ot(er(r16), t10); + return ot(Qt(r15), t10); if (e === 1 / 0) - return La(er(r16), t10); + return Ra(Qt(r15), t10); if (e === -1 / 0) - return Ac(er(r16), t10); + return Nl(Qt(r15), t10); if (e === "euclidean" || e === 2) - return Pr(ot(xi(er(r16), ke(2, "int32")), t10)); + return Rr(ot(ui(Qt(r15), ke(2, "int32")), t10)); throw new Error(`Error in norm: invalid ord value: ${e}`); } if (Array.isArray(t10) && t10.length === 2) { if (e === 1) - return La(ot(er(r16), t10[0]), t10[1] - 1); + return Ra(ot(Qt(r15), t10[0]), t10[1] - 1); if (e === 1 / 0) - return La(ot(er(r16), t10[1]), t10[0]); + return Ra(ot(Qt(r15), t10[1]), t10[0]); if (e === -1 / 0) - return Ac(ot(er(r16), t10[1]), t10[0]); + return Nl(ot(Qt(r15), t10[1]), t10[0]); if (e === "fro" || e === "euclidean") - return Pr(ot(tr(r16), t10)); + return Rr(ot(Zt(r15), t10)); throw new Error(`Error in norm: invalid ord value: ${e}`); } throw new Error(`Error in norm: invalid axis: ${t10}`); } -var qu = N({ norm_: Bq }); -function zq(r16, e = null, t10 = false) { - return qu(r16, "euclidean", e, t10); +var Vu = N({ norm_: CK }); +function wK(r15, e = null, t10 = false) { + return Vu(r15, "euclidean", e, t10); } -var l2 = N({ euclideanNorm_: zq }); -function Vq(r16) { - let t10 = { x: v(r16, "x", "exp") }; - return _.runKernel(yo, t10); +var k2 = N({ euclideanNorm_: wK }); +function SK(r15) { + let t10 = { x: v(r15, "x", "exp") }; + return T.runKernel(yn, t10); } -var Jo = N({ exp_: Vq }); -function Wq(r16, e = 0) { - let t10 = v(r16, "x", "expandDims", "string_or_numeric"); - $(e <= t10.rank, () => "Axis must be <= rank of the tensor"); +var _o = N({ exp_: SK }); +function IK(r15, e = 0) { + let t10 = v(r15, "x", "expandDims", "string_or_numeric"); + E(e <= t10.rank, () => "Axis must be <= rank of the tensor"); let o = { input: t10 }, n = { dim: e }; - return _.runKernel(ma, o, n); + return T.runKernel(na, o, n); } -var Ks = N({ expandDims_: Wq }); -function Uq(r16) { - let t10 = { x: v(r16, "x", "expm1") }; - return _.runKernel(bo, t10); +var Ms = N({ expandDims_: IK }); +function vK(r15) { + let t10 = { x: v(r15, "x", "expm1") }; + return T.runKernel(bn, t10); } -var c2 = N({ expm1_: Uq }); -function Gq(r16, e) { - let t10 = v(r16, "x", "tile", "string_or_numeric"); - $(t10.rank === e.length, () => `Error in transpose: rank of input ${t10.rank} must match length of reps ${e}.`); +var N2 = N({ expm1_: vK }); +function kK(r15, e) { + let t10 = v(r15, "x", "tile", "string_or_numeric"); + E(t10.rank === e.length, () => `Error in transpose: rank of input ${t10.rank} must match length of reps ${e}.`); let o = { x: t10 }, n = { reps: e }; - return _.runKernel(Mo, o, n); + return T.runKernel(po, o, n); } -var hu = N({ tile_: Gq }); -function Hq(r16, e, t10, o = "float32") { - e == null && (e = r16); - let n = ie([r16, e], o), s = r16 <= e ? r16 : e; +var uu = N({ tile_: kK }); +function NK(r15, e, t10, o = "float32") { + e == null && (e = r15); + let n = me([r15, e], o), s = r15 <= e ? r15 : e; for (let i = 0; i < s; ++i) n.set(1, i, i); - let a = W(n.toTensor(), [r16, e]); + let a = W(n.toTensor(), [r15, e]); if (t10 == null) return a; if (t10.length === 1) - return hu(Ks(a, 0), [t10[0], 1, 1]); + return uu(Ms(a, 0), [t10[0], 1, 1]); if (t10.length === 2) - return hu(Ks(Ks(a, 0), 0), [t10[0], t10[1], 1, 1]); + return uu(Ms(Ms(a, 0), 0), [t10[0], t10[1], 1, 1]); if (t10.length === 3) - return hu(Ks(Ks(Ks(a, 0), 0), 0), [t10[0], t10[1], t10[2], 1, 1]); + return uu(Ms(Ms(Ms(a, 0), 0), 0), [t10[0], t10[1], t10[2], 1, 1]); throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${t10.length}D.`); } -var $d = N({ eye_: Hq }); -function Kq(r16) { - let t10 = { x: v(r16, "x", "floor", "float32") }; - return _.runKernel(Co, t10); +var Cd = N({ eye_: NK }); +function TK(r15) { + let t10 = { x: v(r15, "x", "floor", "float32") }; + return T.runKernel(wn, t10); } -var Rd = N({ floor_: Kq }); -function qq(r16, e, t10 = 0, o = 0) { - let n = v(r16, "x", "gather"), s = v(e, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: t10, batchDims: o }; - return _.runKernel(fa, a, i); +var wd = N({ floor_: TK }); +function _K(r15, e, t10 = 0, o = 0) { + let n = v(r15, "x", "gather"), s = v(e, "indices", "gather", "int32"), a = { x: n, indices: s }, i = { axis: t10, batchDims: o }; + return T.runKernel(aa, a, i); } -var Dd = N({ gather_: qq }); -function jq(r16, e) { - let t10 = v(r16, "a", "greater", "string_or_numeric"), o = v(e, "b", "greater", "string_or_numeric"); +var Sd = N({ gather_: _K }); +function EK(r15, e) { + let t10 = v(r15, "a", "greater", "string_or_numeric"), o = v(e, "b", "greater", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(So, n); + return T.runKernel(kn, n); } -var ju = N({ greater_: jq }); -function Xq(r16, e) { - let t10 = v(r16, "a", "greaterEqual", "string_or_numeric"), o = v(e, "b", "greaterEqual", "string_or_numeric"); +var Wu = N({ greater_: EK }); +function $K(r15, e) { + let t10 = v(r15, "a", "greaterEqual", "string_or_numeric"), o = v(e, "b", "greaterEqual", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(Io, n); -} -var Ad = N({ greaterEqual_: Xq }); -function Yq(r16) { - let t10 = { input: v(r16, "input", "imag") }; - return _.runKernel(Qi, t10); -} -var gu = N({ imag_: Yq }); -function Qq(r16) { - let t10 = { x: v(r16, "x", "isFinite") }; - return _.runKernel(qn, t10); -} -var m2 = N({ isFinite_: Qq }); -function Zq(r16) { - let t10 = { x: v(r16, "x", "isInf") }; - return _.runKernel(jn, t10); -} -var d2 = N({ isInf_: Zq }); -function Jq(r16) { - let t10 = { x: v(r16, "x", "isNaN") }; - return _.runKernel(Xn, t10); -} -var f2 = N({ isNaN_: Jq }); -function e6(r16, e = 0.2) { - let o = { x: v(r16, "x", "leakyRelu") }, n = { alpha: e }; - return _.runKernel(Yn, o, n); -} -var Fd = N({ leakyRelu_: e6 }); -function t6(r16, e) { - let t10 = v(r16, "a", "less", "string_or_numeric"), o = v(e, "b", "less", "string_or_numeric"); + return T.runKernel(Nn, n); +} +var Id = N({ greaterEqual_: $K }); +function RK(r15) { + let t10 = { input: v(r15, "input", "imag") }; + return T.runKernel(Wi, t10); +} +var pu = N({ imag_: RK }); +function DK(r15) { + let t10 = { x: v(r15, "x", "isFinite") }; + return T.runKernel(Tn, t10); +} +var T2 = N({ isFinite_: DK }); +function AK(r15) { + let t10 = { x: v(r15, "x", "isInf") }; + return T.runKernel(_n, t10); +} +var _2 = N({ isInf_: AK }); +function FK(r15) { + let t10 = { x: v(r15, "x", "isNaN") }; + return T.runKernel(En, t10); +} +var E2 = N({ isNaN_: FK }); +function PK(r15, e = 0.2) { + let o = { x: v(r15, "x", "leakyRelu") }, n = { alpha: e }; + return T.runKernel($n, o, n); +} +var vd = N({ leakyRelu_: PK }); +function OK(r15, e) { + let t10 = v(r15, "a", "less", "string_or_numeric"), o = v(e, "b", "less", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(ko, n); + return T.runKernel(Rn, n); } -var Fc = N({ less_: t6 }); -function r6(r16, e) { - let t10 = v(r16, "a", "lessEqual", "string_or_numeric"), o = v(e, "b", "lessEqual", "string_or_numeric"); +var Tl = N({ less_: OK }); +function MK(r15, e) { + let t10 = v(r15, "a", "lessEqual", "string_or_numeric"), o = v(e, "b", "lessEqual", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(No, n); + return T.runKernel(Dn, n); } -var ml = N({ lessEqual_: r6 }); -function h2(r16, e, t10) { +var ac = N({ lessEqual_: MK }); +function $2(r15, e, t10) { if (t10 <= 0) throw new Error("The number of values should be positive."); - let o = { start: r16, stop: e, num: t10 }; - return _.runKernel(Qn, {}, o); + let o = { start: r15, stop: e, num: t10 }; + return T.runKernel(An, {}, o); } -function o6(r16, e = 5, t10 = 1, o = 1, n = 0.5) { - let s = v(r16, "x", "localResponseNormalization"); - $(s.rank === 4 || s.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`), $(Ja(e), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`); +function LK(r15, e = 5, t10 = 1, o = 1, n = 0.5) { + let s = v(r15, "x", "localResponseNormalization"); + E(s.rank === 4 || s.rank === 3, () => `Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`), E(Ka(e), () => `Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`); let a = s, i = false; s.rank === 3 && (i = true, a = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])); - let p = { x: a }, u = { depthRadius: e, bias: t10, alpha: o, beta: n }, l = _.runKernel(rs, p, u); - return i ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; -} -var g2 = N({ localResponseNormalization_: o6 }); -function n6(r16) { - let t10 = { x: v(r16, "x", "log", "float32") }; - return _.runKernel(To, t10); -} -var yi = N({ log_: n6 }); -function s6(r16) { - let t10 = { x: v(r16, "x", "log1p") }; - return _.runKernel(Zn, t10); -} -var Pd = N({ log1p_: s6 }); -function a6(r16) { - return $(ra(r16), () => "The f passed in grad(f) must be a function"), (e, t10) => { + let p = { x: a }, u = { depthRadius: e, bias: t10, alpha: o, beta: n }, c = T.runKernel(Bn, p, u); + return i ? W(c, [c.shape[1], c.shape[2], c.shape[3]]) : c; +} +var R2 = N({ localResponseNormalization_: LK }); +function BK(r15) { + let t10 = { x: v(r15, "x", "log", "float32") }; + return T.runKernel(Fn, t10); +} +var pi = N({ log_: BK }); +function zK(r15) { + let t10 = { x: v(r15, "x", "log1p") }; + return T.runKernel(Pn, t10); +} +var kd = N({ log1p_: zK }); +function VK(r15) { + return E(qs(r15), () => "The f passed in grad(f) must be a function"), (e, t10) => { let o = v(e, "x", "tf.grad", "string_or_numeric"), n = t10 != null ? v(t10, "dy", "tf.grad") : null; - return _.tidy(() => { - let { value: s, grads: a } = _.gradients(() => r16(o), [o], n); - return n != null && yt(s.shape, n.shape, "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"), Od(a), a[0]; + return T.tidy(() => { + let { value: s, grads: a } = T.gradients(() => r15(o), [o], n); + return n != null && xt(s.shape, n.shape, "The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"), Nd(a), a[0]; }); }; } -function i6(r16) { - return $(ra(r16), () => "The f passed in grads(f) must be a function"), (e, t10) => { - $(Array.isArray(e), () => "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"); - let o = di(e, "args", "tf.grads", "string_or_numeric"), n = t10 != null ? v(t10, "dy", "tf.grads") : null; - return _.tidy(() => { - let { value: s, grads: a } = _.gradients(() => r16(...o), o, n); - return n != null && yt(s.shape, n.shape, "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Od(a), a; +function WK(r15) { + return E(qs(r15), () => "The f passed in grads(f) must be a function"), (e, t10) => { + E(Array.isArray(e), () => "The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"); + let o = ni(e, "args", "tf.grads", "string_or_numeric"), n = t10 != null ? v(t10, "dy", "tf.grads") : null; + return T.tidy(() => { + let { value: s, grads: a } = T.gradients(() => r15(...o), o, n); + return n != null && xt(s.shape, n.shape, "The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Nd(a), a; }); }; } -function u6(r16) { - return $(ra(r16), () => "The f passed in valueAndGrad(f) must be a function"), (e, t10) => { - $(e instanceof dt, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), $(t10 == null || t10 instanceof dt, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); - let { grads: o, value: n } = _.gradients(() => r16(e), [e], t10); - return Od(o), { grad: o[0], value: n }; +function UK(r15) { + return E(qs(r15), () => "The f passed in valueAndGrad(f) must be a function"), (e, t10) => { + E(e instanceof mt, () => "The x passed in valueAndGrad(f)(x) must be a tensor"), E(t10 == null || t10 instanceof mt, () => "The dy passed in valueAndGrad(f)(x, dy) must be a tensor"); + let { grads: o, value: n } = T.gradients(() => r15(e), [e], t10); + return Nd(o), { grad: o[0], value: n }; }; } -function p6(r16) { - return $(ra(r16), () => "The f passed in valueAndGrads(f) must be a function"), (e, t10) => { - $(Array.isArray(e) && e.every((n) => n instanceof dt), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), $(t10 == null || t10 instanceof dt, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); - let o = _.gradients(() => r16(...e), e, t10); - return t10 != null && yt(o.value.shape, t10.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Od(o.grads), o; +function GK(r15) { + return E(qs(r15), () => "The f passed in valueAndGrads(f) must be a function"), (e, t10) => { + E(Array.isArray(e) && e.every((n) => n instanceof mt), () => "The args passed in valueAndGrads(f)(args) must be array of tensors"), E(t10 == null || t10 instanceof mt, () => "The dy passed in valueAndGrads(f)(args, dy) must be a tensor"); + let o = T.gradients(() => r15(...e), e, t10); + return t10 != null && xt(o.value.shape, t10.shape, "The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"), Nd(o.grads), o; }; } -function eS(r16, e) { - $(ra(r16), () => "The f passed in variableGrads(f) must be a function"), $(e == null || Array.isArray(e) && e.every((u) => u instanceof ci), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); +function Vw(r15, e) { + E(qs(r15), () => "The f passed in variableGrads(f) must be a function"), E(e == null || Array.isArray(e) && e.every((u) => u instanceof ri), () => "The varList passed in variableGrads(f, varList) must be an array of variables"); let t10 = e != null; if (!t10) { e = []; - for (let u in _.registeredVariables) - e.push(_.registeredVariables[u]); + for (let u in T.registeredVariables) + e.push(T.registeredVariables[u]); } let o = t10 ? e.filter((u) => !u.trainable) : null, n = e.length; - e = e.filter((u) => u.trainable), $(e.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); - let s = true, { value: a, grads: i } = _.gradients(r16, e, null, s); - $(i.some((u) => u != 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()."), $(a.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`); + e = e.filter((u) => u.trainable), E(e.length > 0, () => `variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`); + let s = true, { value: a, grads: i } = T.gradients(r15, e, null, s); + E(i.some((u) => u != 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()."), E(a.rank === 0, () => `The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`); let p = {}; - return e.forEach((u, l) => { - i[l] != null && (p[u.name] = i[l]); + return e.forEach((u, c) => { + i[c] != null && (p[u.name] = i[c]); }), o != null && o.forEach((u) => p[u.name] = null), { value: a, grads: p }; } -function Nr(r16) { - return _.customGrad(r16); +function Ir(r15) { + return T.customGrad(r15); } -function Od(r16) { - if (r16.filter((t10) => t10 == null).length > 0) +function Nd(r15) { + if (r15.filter((t10) => t10 == 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 l6(r16) { - let t10 = { x: v(r16, "x", "neg") }; - return _.runKernel(ls, t10); +function HK(r15) { + let t10 = { x: v(r15, "x", "neg") }; + return T.runKernel(pa, t10); } -var mr = N({ neg_: l6 }); -function c6(r16) { - let t10 = { x: v(r16, "x", "softplus") }; - return _.runKernel(Ds, t10); +var pr = N({ neg_: HK }); +function KK(r15) { + let t10 = { x: v(r15, "x", "softplus") }; + return T.runKernel(Cs, t10); } -var Md = N({ softplus_: c6 }); -function m6(r16) { - let e = v(r16, "x", "logSigmoid"); - return Nr((o) => ({ value: mr(Md(mr(o))), gradFunc: (a) => se(a, Pa(mr(o))) }))(e); +var Td = N({ softplus_: KK }); +function qK(r15) { + let e = v(r15, "x", "logSigmoid"); + return Ir((o) => ({ value: pr(Td(pr(o))), gradFunc: (a) => se(a, Ea(pr(o))) }))(e); } -var x2 = N({ logSigmoid_: m6 }); -function d6(r16, e) { - let t10 = v(r16, "a", "sub"), o = v(e, "b", "sub"); +var D2 = N({ logSigmoid_: qK }); +function jK(r15, e) { + let t10 = v(r15, "a", "sub"), o = v(e, "b", "sub"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(Oo, n); + return T.runKernel(Ts, n); } -var Te = N({ sub_: d6 }); -function f6(r16, e = -1) { - let t10 = v(r16, "logits", "logSoftmax"); +var Te = N({ sub_: jK }); +function XK(r15, e = -1) { + let t10 = v(r15, "logits", "logSoftmax"); if (e === -1 && (e = t10.rank - 1), e !== t10.rank - 1) throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t10.rank} and axis was ${e}`); - return Nr((n, s) => { - let i = La(n, e, true), p = Te(n, i), u = Te(Ue(p, "float32"), yi(ot(Jo(p), e, true))); - return s([u]), { value: u, gradFunc: (c, m) => { - let [d] = m, f = true, h = Jo(d); - return Te(c, se(ot(c, e, f), h)); + return Ir((n, s) => { + let i = Ra(n, e, true), p = Te(n, i), u = Te(Ue(p, "float32"), pi(ot(_o(p), e, true))); + return s([u]), { value: u, gradFunc: (l, m) => { + let [d] = m, f = true, h = _o(d); + return Te(l, se(ot(l, e, f), h)); } }; })(t10); } -var y2 = N({ logSoftmax_: f6 }); -function h6(r16, e = null, t10 = false) { - let o = v(r16, "x", "logSumExp"), n = Li(e, o.shape), s = La(o, n, true), a = Te(o, s), i = Jo(a), p = ot(i, n), u = yi(p), l = Ce(W(s, u.shape), u); +var A2 = N({ logSoftmax_: XK }); +function YK(r15, e = null, t10 = false) { + let o = v(r15, "x", "logSumExp"), n = _i(e, o.shape), s = Ra(o, n, true), a = Te(o, s), i = _o(a), p = ot(i, n), u = pi(p), c = Ce(W(s, u.shape), u); if (t10) { - let c = gi(l.shape, n); - return W(l, c); + let l = ii(c.shape, n); + return W(c, l); } - return l; + return c; } -var Ld = N({ logSumExp_: h6 }); -function g6(r16, e) { - let t10 = v(r16, "a", "logicalAnd", "bool"), o = v(e, "b", "logicalAnd", "bool"); +var _d = N({ logSumExp_: YK }); +function QK(r15, e) { + let t10 = v(r15, "a", "logicalAnd", "bool"), o = v(e, "b", "logicalAnd", "bool"); rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(Jn, n); + return T.runKernel(On, n); } -var Xu = N({ logicalAnd_: g6 }); -function x6(r16) { - let t10 = { x: v(r16, "x", "logicalNot", "bool") }; - return _.runKernel(es, t10); +var Uu = N({ logicalAnd_: QK }); +function ZK(r15) { + let t10 = { x: v(r15, "x", "logicalNot", "bool") }; + return T.runKernel(Mn, t10); } -var Bd = N({ logicalNot_: x6 }); -function y6(r16, e) { - let t10 = v(r16, "a", "logicalOr", "bool"), o = v(e, "b", "logicalOr", "bool"); +var Ed = N({ logicalNot_: ZK }); +function JK(r15, e) { + let t10 = v(r15, "a", "logicalOr", "bool"), o = v(e, "b", "logicalOr", "bool"); rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(ts, n); + return T.runKernel(Ln, n); } -var zd = N({ logicalOr_: y6 }); -function b6(r16, e) { - let t10 = v(r16, "a", "logicalXor", "bool"), o = v(e, "b", "logicalXor", "bool"); - return rt(t10.shape, o.shape), Xu(zd(r16, e), Bd(Xu(r16, e))); +var $d = N({ logicalOr_: JK }); +function eq(r15, e) { + let t10 = v(r15, "a", "logicalXor", "bool"), o = v(e, "b", "logicalXor", "bool"); + return rt(t10.shape, o.shape), Uu($d(r15, e), Ed(Uu(r15, e))); } -var b2 = N({ logicalXor_: b6 }); -var Vd = 2147483648; -function C6(r16, e, t10 = "left") { - let o = v(r16, "sortedSequence", "searchSorted"), n = v(e, "values", "searchSorted"), s = o.shape[o.shape.length - 1], a = n.shape[n.shape.length - 1], i = W(o, [-1, s]), p = W(n, [-1, a]); +var F2 = N({ logicalXor_: eq }); +var Rd = 2147483648; +function tq(r15, e, t10 = "left") { + let o = v(r15, "sortedSequence", "searchSorted"), n = v(e, "values", "searchSorted"), s = o.shape[o.shape.length - 1], a = n.shape[n.shape.length - 1], i = W(o, [-1, s]), p = W(n, [-1, a]); if (i.rank < 2) throw new Error("Sorted input argument must be at least 2-dimensional"); if (i.shape[0] !== p.shape[0]) throw new Error("Leading dimension of 'sortedSequence' and 'values' must match."); - if (ze(p.shape) >= Vd) - throw new Error(`values tensor size must less than ${Vd}`); - if (i.shape[1] >= Vd) - throw new Error(`trailing dim_size must less than ${Vd} for int32 output type, was ${i.shape[1]}`); - let u = { sortedSequence: i, values: p }, l = { side: t10 }; - return _.runKernel(Ns, u, l); -} -var Pc = N({ searchSorted_: C6 }); -function C2(r16, e) { - return Pc(r16, e, "left"); -} -function w6(r16, e, t10, o, n) { - let s = v(r16, "x", "maxPool"), a = 1, i = s, p = false; - s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), $(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), $(br(t10, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`), zt("maxPool", o, n); - let u = { x: i }, l = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, c = _.runKernel(ns, u, l); - return p ? W(c, [c.shape[1], c.shape[2], c.shape[3]]) : c; -} -var Wd = N({ maxPool_: w6 }); -function S6(r16, e = [1, 1, 1], t10, o, n, s = "NDHWC") { - let a = v(r16, "x", "maxPool3d"), i = a, p = false; - a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), $(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), $(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), zt("maxPool3d", o, n); - let u = { x: i }, l = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, c = _.runKernel(ha, u, l); - return p ? W(c, [c.shape[1], c.shape[2], c.shape[3], c.shape[4]]) : c; -} -var w2 = N({ maxPool3d_: S6 }); -function I6(r16, e, t10, o, n = false) { - let a = { x: v(r16, "x", "maxPoolWithArgmax") }, i = { filterSize: e, strides: t10, pad: o, includeBatchInIndex: n }, p = _.runKernel(ga, a, i); + if (ze(p.shape) >= Rd) + throw new Error(`values tensor size must less than ${Rd}`); + if (i.shape[1] >= Rd) + throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`); + let u = { sortedSequence: i, values: p }, c = { side: t10 }; + return T.runKernel(fs, u, c); +} +var _l = N({ searchSorted_: tq }); +function P2(r15, e) { + return _l(r15, e, "left"); +} +function rq(r15, e, t10, o, n) { + let s = v(r15, "x", "maxPool"), a = 1, i = s, p = false; + s.rank === 3 && (p = true, i = W(s, [1, s.shape[0], s.shape[1], s.shape[2]])), E(i.rank === 4, () => `Error in maxPool: input must be rank 4 but got rank ${i.rank}.`), E(gr(t10, a), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${t10} and dilations '${a}'`), Lt("maxPool", o, n); + let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n }, l = T.runKernel(Wn, u, c); + return p ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; +} +var Dd = N({ maxPool_: rq }); +function oq(r15, e = [1, 1, 1], t10, o, n, s = "NDHWC") { + let a = v(r15, "x", "maxPool3d"), i = a, p = false; + a.rank === 4 && (p = true, i = W(a, [1, a.shape[0], a.shape[1], a.shape[2], a.shape[3]])), E(i.rank === 5, () => `Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`), E(s === "NDHWC", () => `Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`), Lt("maxPool3d", o, n); + let u = { x: i }, c = { filterSize: e, strides: t10, pad: o, dimRoundingMode: n, dataFormat: s }, l = T.runKernel(ia, u, c); + return p ? W(l, [l.shape[1], l.shape[2], l.shape[3], l.shape[4]]) : l; +} +var O2 = N({ maxPool3d_: oq }); +function nq(r15, e, t10, o, n = false) { + let a = { x: v(r15, "x", "maxPoolWithArgmax") }, i = { filterSize: e, strides: t10, pad: o, includeBatchInIndex: n }, p = T.runKernel(ua, a, i); return { result: p[0], indexes: p[1] }; } -var S2 = N({ maxPoolWithArgmax_: I6 }); -function v6(r16, e) { - let t10 = v(r16, "a", "maximum"), o = v(e, "b", "maximum"); +var M2 = N({ maxPoolWithArgmax_: nq }); +function sq(r15, e) { + let t10 = v(r15, "a", "maximum"), o = v(e, "b", "maximum"); [t10, o] = Oe(t10, o), t10.dtype === "bool" && (t10 = Ue(t10, "int32"), o = Ue(o, "int32")), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(_o, n); + return T.runKernel(Vn, n); } -var Ud = N({ maximum_: v6 }); -function k6(r16, e = null, t10 = false) { - let n = { x: v(r16, "x", "mean") }, s = { axis: e, keepDims: t10 }; - return _.runKernel(ss, n, s); +var Ad = N({ maximum_: sq }); +function aq(r15, e = null, t10 = false) { + let n = { x: v(r15, "x", "mean") }, s = { axis: e, keepDims: t10 }; + return T.runKernel(Un, n, s); } -var Yu = N({ mean_: k6 }); -function Yr(r16, e = "float32") { - if (St(r16), e === "complex64") { - let o = Yr(r16, "float32"), n = Yr(r16, "float32"); - return Ar(o, n); +var Gu = N({ mean_: aq }); +function Gr(r15, e = "float32") { + if (Ct(r15), e === "complex64") { + let o = Gr(r15, "float32"), n = Gr(r15, "float32"); + return Er(o, n); } - let t10 = Yp(ze(r16), e); - return _.makeTensor(t10, r16, e); + let t10 = Gp(ze(r15), e); + return T.makeTensor(t10, r15, e); } -function Ba(r16, e = "float32") { - if (St(r16), e === "complex64") { - let o = Ba(r16, "float32"), n = Yr(r16, "float32"); - return Ar(o, n); +function Da(r15, e = "float32") { + if (Ct(r15), e === "complex64") { + let o = Da(r15, "float32"), n = Gr(r15, "float32"); + return Er(o, n); } - let t10 = bc(ze(r16), e); - return _.makeTensor(t10, r16, e); + let t10 = ml(ze(r15), e); + return T.makeTensor(t10, r15, e); } -function I2(r16, e, { indexing: t10 = "xy" } = {}) { +function L2(r15, e, { indexing: t10 = "xy" } = {}) { if (t10 !== "xy" && t10 !== "ij") throw new TypeError(`${t10} is not a valid third argument to meshgrid`); - if (r16 === void 0) + if (r15 === void 0) return []; - let o = v(r16, "x", "meshgrid", r16 instanceof dt ? r16.dtype : "float32"); + let o = v(r15, "x", "meshgrid", r15 instanceof mt ? r15.dtype : "float32"); if (e === void 0) return [o]; - let n = v(e, "y", "meshgrid", e instanceof dt ? e.dtype : "float32"), s = ze(o.shape), a = ze(n.shape); - return t10 === "xy" ? (o = W(o, [1, -1]), n = W(n, [-1, 1]), [Je(Ba([a, 1], o.dtype), o), Je(n, Ba([1, s], n.dtype))]) : (o = W(o, [-1, 1]), n = W(n, [1, -1]), [Je(o, Ba([1, a], o.dtype)), Je(Ba([s, 1], n.dtype), n)]); + let n = v(e, "y", "meshgrid", e instanceof mt ? e.dtype : "float32"), s = ze(o.shape), a = ze(n.shape); + return t10 === "xy" ? (o = W(o, [1, -1]), n = W(n, [-1, 1]), [Ze(Da([a, 1], o.dtype), o), Ze(n, Da([1, s], n.dtype))]) : (o = W(o, [-1, 1]), n = W(n, [1, -1]), [Ze(o, Da([1, a], o.dtype)), Ze(Da([s, 1], n.dtype), n)]); } -function N6(r16, e) { - let t10 = v(r16, "a", "minimum"), o = v(e, "b", "minimum"); +function iq(r15, e) { + let t10 = v(r15, "a", "minimum"), o = v(e, "b", "minimum"); [t10, o] = Oe(t10, o), t10.dtype === "bool" && (t10 = Ue(t10, "int32"), o = Ue(o, "int32")), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(Eo, n); + return T.runKernel(Hn, n); } -var Qu = N({ minimum_: N6 }); -function T6(r16, e, t10) { - $(t10 === "reflect" || t10 === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${t10}.`); - let o = v(r16, "x", "mirrorPad"); +var Hu = N({ minimum_: iq }); +function uq(r15, e, t10) { + E(t10 === "reflect" || t10 === "symmetric", () => `Invalid mode. Mode must be either reflect or symmetric. Got ${t10}.`); + let o = v(r15, "x", "mirrorPad"); if (o.rank === 0) throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad"); - $(e.length === o.rank, () => `Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`); + E(e.length === o.rank, () => `Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`); let n = t10 === "reflect" ? 1 : 0; for (let i = 0; i < o.rank; i++) - $(e[i].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), $(e[i][0] >= 0 && e[i][0] <= o.shape[i] - n && e[i][1] >= 0 && e[i][1] <= o.shape[i] - n, () => `Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i] - n} or less than 0 for input of shape ${o.shape}`); + E(e[i].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), E(e[i][0] >= 0 && e[i][0] <= o.shape[i] - n && e[i][1] >= 0 && e[i][1] <= o.shape[i] - n, () => `Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i] - n} or less than 0 for input of shape ${o.shape}`); let s = { paddings: e, mode: t10 }, a = { x: o }; - return _.runKernel(is, a, s); + return T.runKernel(Kn, a, s); } -var v2 = N({ mirrorPad_: T6 }); -function _6(r16, e) { - let t10 = v(r16, "a", "mod"), o = v(e, "b", "mod"); +var B2 = N({ mirrorPad_: uq }); +function pq(r15, e) { + let t10 = v(r15, "a", "mod"), o = v(e, "b", "mod"); [t10, o] = Oe(t10, o); let n = { a: t10, b: o }; - return _.runKernel(us, n); -} -var k2 = N({ mod_: _6 }); -function E6(r16, e = null, t10 = false) { - r16 = v(r16, "x", "moments"); - let o = Li(e, r16.shape), n = Yu(r16, o, t10), s = n.shape; - t10 || (s = gi(n.shape, o)); - let a = tr(Te(Ue(r16, "float32"), W(n, s))), i = Yu(a, o, t10); + return T.runKernel(qn, n); +} +var z2 = N({ mod_: pq }); +function cq(r15, e = null, t10 = false) { + r15 = v(r15, "x", "moments"); + let o = _i(e, r15.shape), n = Gu(r15, o, t10), s = n.shape; + t10 || (s = ii(n.shape, o)); + let a = Zt(Te(Ue(r15, "float32"), W(n, s))), i = Gu(a, o, t10); return { mean: n, variance: i }; } -var N2 = N({ moments_: E6 }); -function $6(r16, e, t10, o) { - let n = v(e, "data", "multiRNNCell"), s = di(t10, "c", "multiRNNCell"), a = di(o, "h", "multiRNNCell"), i = n, p = []; - for (let c = 0; c < r16.length; c++) { - let m = r16[c](i, s[c], a[c]); +var V2 = N({ moments_: cq }); +function lq(r15, e, t10, o) { + let n = v(e, "data", "multiRNNCell"), s = ni(t10, "c", "multiRNNCell"), a = ni(o, "h", "multiRNNCell"), i = n, p = []; + for (let l = 0; l < r15.length; l++) { + let m = r15[l](i, s[l], a[l]); p.push(m[0]), p.push(m[1]), i = m[1]; } - let u = [], l = []; - for (let c = 0; c < p.length; c += 2) - u.push(p[c]), l.push(p[c + 1]); - return [u, l]; + let u = [], c = []; + for (let l = 0; l < p.length; l += 2) + u.push(p[l]), c.push(p[l + 1]); + return [u, c]; } -var T2 = N({ multiRNNCell_: $6 }); -function R6(r16, e, t10, o = false) { - let n = v(r16, "logits", "multinomial"), s = n.size, a = n.rank; +var W2 = N({ multiRNNCell_: lq }); +function mq(r15, e, t10, o = false) { + let n = v(r15, "logits", "multinomial"), s = n.size, a = n.rank; if (s < 2) throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`); if (a > 2) throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`); t10 = t10 || Math.random(); - let p = { logits: a === 1 ? W(n, [1, -1]) : n }, u = { numSamples: e, seed: t10, normalized: o }, l = _.runKernel(ps, p, u); - return a === 1 ? W(l, [l.size]) : l; + let p = { logits: a === 1 ? W(n, [1, -1]) : n }, u = { numSamples: e, seed: t10, normalized: o }, c = T.runKernel(jn, p, u); + return a === 1 ? W(c, [c.size]) : c; } -var _2 = N({ multinomial_: R6 }); -function D6(r16, e) { - let t10 = v(r16, "a", "notEqual", "string_or_numeric"), o = v(e, "b", "notEqual", "string_or_numeric"); +var U2 = N({ multinomial_: mq }); +function dq(r15, e) { + let t10 = v(r15, "a", "notEqual", "string_or_numeric"), o = v(e, "b", "notEqual", "string_or_numeric"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }; - return _.runKernel(Ro, n); + return T.runKernel(Yn, n); } -var Gd = N({ notEqual_: D6 }); -function A6(r16, e, t10 = 1, o = 0, n = "int32") { +var Fd = N({ notEqual_: dq }); +function fq(r15, e, t10 = 1, o = 0, n = "int32") { if (e < 2) throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`); - let a = { indices: v(r16, "indices", "oneHot", "int32") }, i = { dtype: n, depth: e, onValue: t10, offValue: o }; - return _.runKernel(ds, a, i); -} -var Oc = N({ oneHot_: A6 }); -function F6(r16) { - let t10 = { x: v(r16, "x", "onesLike") }; - return _.runKernel(xa, t10); -} -var E2 = N({ onesLike_: F6 }); -function P6(r16, e) { - let t10 = v(r16, "v1", "outerProduct"), o = v(e, "v2", "outerProduct"); - $(t10.rank === 1 && o.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ${t10.rank} and ${o.rank}.`); + let a = { indices: v(r15, "indices", "oneHot", "int32") }, i = { dtype: n, depth: e, onValue: t10, offValue: o }; + return T.runKernel(Jn, a, i); +} +var El = N({ oneHot_: fq }); +function hq(r15) { + let t10 = { x: v(r15, "x", "onesLike") }; + return T.runKernel(ca, t10); +} +var G2 = N({ onesLike_: hq }); +function gq(r15, e) { + let t10 = v(r15, "v1", "outerProduct"), o = v(e, "v2", "outerProduct"); + E(t10.rank === 1 && o.rank === 1, () => `Error in outerProduct: inputs must be rank 1, but got ranks ${t10.rank} and ${o.rank}.`); let n = W(t10, [-1, 1]), s = W(o, [1, -1]); - return Je(n, s); + return Ze(n, s); } -var $2 = N({ outerProduct_: P6 }); -function O6(r16, e, t10 = 0) { - let o = v(r16, "x", "pad"); +var H2 = N({ outerProduct_: gq }); +function xq(r15, e, t10 = 0) { + let o = v(r15, "x", "pad"); if (o.rank === 0) throw new Error("pad(scalar) is not defined. Pass non-scalar to pad"); let n = { paddings: e, constantValue: t10 }, s = { x: o }; - return _.runKernel(fs, s, n); + return T.runKernel(es, s, n); } -var za = N({ pad_: O6 }); -function M6(r16, e, t10 = 0) { - return $(e.length === 2, () => "Invalid number of paddings. Must be length of 2."), za(r16, [e], t10); +var Aa = N({ pad_: xq }); +function yq(r15, e, t10 = 0) { + return E(e.length === 2, () => "Invalid number of paddings. Must be length of 2."), Aa(r15, [e], t10); } -var R2 = N({ pad1d_: M6 }); -function L6(r16, e, t10 = 0) { - return $(e.length === 2 && e[0].length === 2 && e[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), za(r16, e, t10); +var K2 = N({ pad1d_: yq }); +function bq(r15, e, t10 = 0) { + return E(e.length === 2 && e[0].length === 2 && e[1].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, e, t10); } -var D2 = N({ pad2d_: L6 }); -function B6(r16, e, t10 = 0) { - return $(e.length === 3 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), za(r16, e, t10); +var q2 = N({ pad2d_: bq }); +function Cq(r15, e, t10 = 0) { + return E(e.length === 3 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, e, t10); } -var A2 = N({ pad3d_: B6 }); -function z6(r16, e, t10 = 0) { - return $(e.length === 4 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2 && e[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), za(r16, e, t10); +var j2 = N({ pad3d_: Cq }); +function wq(r15, e, t10 = 0) { + return E(e.length === 4 && e[0].length === 2 && e[1].length === 2 && e[2].length === 2 && e[3].length === 2, () => "Invalid number of paddings. Must be length of 2 each."), Aa(r15, e, t10); } -var F2 = N({ pad4d_: z6 }); -function V6(r16, e, t10) { - let o = v(r16, "x", "spaceToBatchND"); - $(o.rank >= 1 + e.length, () => `input rank ${o.rank} should be > than [blockShape] ${e.length}`), $(t10.length === e.length, () => `paddings.shape[0] ${t10.length} must be equal to [blockShape] ${e.length}`), $(o.shape.reduce((a, i, p) => p > 0 && p <= e.length ? a && (i + t10[p - 1][0] + t10[p - 1][1]) % e[p - 1] === 0 : a, true), () => `input spatial dimensions ${o.shape.slice(1)} with paddings ${t10.toString()} must be divisible by blockShapes ${e.toString()}`); +var X2 = N({ pad4d_: wq }); +function Sq(r15, e, t10) { + let o = v(r15, "x", "spaceToBatchND"); + E(o.rank >= 1 + e.length, () => `input rank ${o.rank} should be > than [blockShape] ${e.length}`), E(t10.length === e.length, () => `paddings.shape[0] ${t10.length} must be equal to [blockShape] ${e.length}`), E(o.shape.reduce((a, i, p) => p > 0 && p <= e.length ? a && (i + t10[p - 1][0] + t10[p - 1][1]) % e[p - 1] === 0 : a, true), () => `input spatial dimensions ${o.shape.slice(1)} with paddings ${t10.toString()} must be divisible by blockShapes ${e.toString()}`); let n = { x: o }, s = { blockShape: e, paddings: t10 }; - return _.runKernel(Sa, n, s); + return T.runKernel(ga, n, s); } -var Hd = N({ spaceToBatchND_: V6 }); -function W6(r16, e, t10, o, n, s, a) { +var Pd = N({ spaceToBatchND_: Sq }); +function Iq(r15, e, t10, o, n, s, a) { n == null && (n = [1, 1]), s == null && (s = 1), o === 0 && (o = "valid"); - let i = v(r16, "x", "maxPool"), p = i, u = false; - i.rank === 3 && (u = true, p = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), $(br(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); - let l = Qw(p.shape, e, s, n, o), c = [l.dilationHeight, l.dilationWidth], m; - o === "same" ? m = G6([l.filterHeight, l.filterWidth], c) : m = [[0, 0], [0, 0]]; - let d = c[0] === 1 && c[1] === 1, [f, h] = U6([l.inHeight, l.inWidth], c, m), g = d ? o : "valid", x = d ? p : Hd(p, c, f), w = (t10 === "avg" ? () => Id(x, e, s, g, a) : () => Wd(x, e, s, g, a))(), S = d ? w : vd(w, c, h); + let i = v(r15, "x", "maxPool"), p = i, u = false; + i.rank === 3 && (u = true, p = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), E(gr(s, n), () => `Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`); + let c = Lw(p.shape, e, s, n, o), l = [c.dilationHeight, c.dilationWidth], m; + o === "same" ? m = kq([c.filterHeight, c.filterWidth], l) : m = [[0, 0], [0, 0]]; + let d = l[0] === 1 && l[1] === 1, [f, h] = vq([c.inHeight, c.inWidth], l, m), g = d ? o : "valid", x = d ? p : Pd(p, l, f), C = (t10 === "avg" ? () => dd(x, e, s, g, a) : () => Dd(x, e, s, g, a))(), S = d ? C : fd(C, l, h); return u ? W(S, [S.shape[1], S.shape[2], S.shape[3]]) : S; } -function U6(r16, e, t10) { - let o = t10.map((l) => l[0]), n = t10.map((l) => l[1]), s = r16.concat(o, n), a = e.map((l, c) => (l - s[c] % l) % l), i = n.map((l, c) => l + a[c]), p = e.map((l, c) => [o[c], i[c]]), u = e.map((l, c) => [0, a[c]]); +function vq(r15, e, t10) { + let o = t10.map((c) => c[0]), n = t10.map((c) => c[1]), s = r15.concat(o, n), a = e.map((c, l) => (c - s[l] % c) % c), i = n.map((c, l) => c + a[l]), p = e.map((c, l) => [o[l], i[l]]), u = e.map((c, l) => [0, a[l]]); return [p, u]; } -function G6(r16, e) { - let o = r16.map((a, i) => a + (a - 1) * (e[i] - 1)).map((a) => a - 1), n = o.map((a) => Math.floor(a / 2)), s = o.map((a, i) => a - n[i]); +function kq(r15, e) { + let o = r15.map((a, i) => a + (a - 1) * (e[i] - 1)).map((a) => a - 1), n = o.map((a) => Math.floor(a / 2)), s = o.map((a, i) => a - n[i]); return o.map((a, i) => [n[i], s[i]]); } -var P2 = N({ pool_: W6 }); -function H6(r16, e) { - let t10 = v(r16, "x", "prelu"), o = v(e, "alpha", "prelu"), n = { x: t10, alpha: o }; - return _.runKernel(gs, n); +var Y2 = N({ pool_: Iq }); +function Nq(r15, e) { + let t10 = v(r15, "x", "prelu"), o = v(e, "alpha", "prelu"), n = { x: t10, alpha: o }; + return T.runKernel(rs, n); } -var Kd = N({ prelu_: H6 }); -function K6(r16, e = null, t10 = false) { - let o = v(r16, "x", "prod"); +var Od = N({ prelu_: Nq }); +function Tq(r15, e = null, t10 = false) { + let o = v(r15, "x", "prod"); o.dtype === "bool" && (o = Ue(o, "int32")); let n = { x: o }, s = { axis: e, keepDims: t10 }; - return _.runKernel(Ho, n, s); + return T.runKernel(os, n, s); } -var O2 = N({ prod_: K6 }); -function q6(r16, e, t10, o) { - let n = r16.map((l, c) => v(l, `tensors${c}`, "raggedGather", "int32")), s = v(e, "paramsDenseValues", "raggedGather"), a = v(t10, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = _.runKernel(Qp, i, p); +var Q2 = N({ prod_: Tq }); +function _q(r15, e, t10, o) { + let n = r15.map((c, l) => v(c, `tensors${l}`, "raggedGather", "int32")), s = v(e, "paramsDenseValues", "raggedGather"), a = v(t10, "indices", "raggedGather", "int32"), i = { paramsNestedSplits: n, paramsDenseValues: s, indices: a }, p = { outputRaggedRank: o }, u = T.runKernel(Hp, i, p); return { outputNestedSplits: u.slice(0, u.length - 1), outputDenseValues: u[u.length - 1] }; } -var M2 = N({ raggedGather_: q6 }); -function j6(r16, e, t10) { - let o = v(r16, "starts", "raggedRange"), n = v(e, "limits", "raggedRange", o.dtype), s = v(t10, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = _.runKernel(Zp, a); +var Z2 = N({ raggedGather_: _q }); +function Eq(r15, e, t10) { + let o = v(r15, "starts", "raggedRange"), n = v(e, "limits", "raggedRange", o.dtype), s = v(t10, "deltas", "raggedRange", o.dtype), a = { starts: o, limits: n, deltas: s }, i = T.runKernel(Kp, a); return { rtNestedSplits: i[0], rtDenseValues: i[1] }; } -var L2 = N({ raggedRange_: j6 }); -function X6(r16, e, t10, o, n) { - let s = v(r16, "shape", "raggedTensorToTensor", "int32"), a = v(e, "values", "raggedTensorToTensor"), i = v(t10, "defaultValue", "raggedTensorToTensor", a.dtype), p = o.map((c, m) => v(c, `tensors${m}`, "raggedTensorToTensor", "int32")), u = { shape: s, values: a, defaultValue: i, rowPartitionTensors: p }, l = { rowPartitionTypes: n }; - return _.runKernel(Jp, u, l); +var J2 = N({ raggedRange_: Eq }); +function $q(r15, e, t10, o, n) { + let s = v(r15, "shape", "raggedTensorToTensor", "int32"), a = v(e, "values", "raggedTensorToTensor"), i = v(t10, "defaultValue", "raggedTensorToTensor", a.dtype), p = o.map((l, m) => v(l, `tensors${m}`, "raggedTensorToTensor", "int32")), u = { shape: s, values: a, defaultValue: i, rowPartitionTensors: p }, c = { rowPartitionTypes: n }; + return T.runKernel(qp, u, c); } -var B2 = N({ raggedTensorToTensor_: X6 }); -function Y6(r16, e, t10) { - St(r16); - let o = ze(r16), n = null; +var e1 = N({ raggedTensorToTensor_: $q }); +function Rq(r15, e, t10) { + Ct(r15); + let o = ze(r15), n = null; if (t10 == null || t10 === "float32") n = new Float32Array(o); else if (t10 === "int32") @@ -6948,33 +6948,33 @@ function Y6(r16, e, t10) { throw new Error(`Unknown data type ${t10}`); for (let s = 0; s < o; s++) n[s] = e(); - return _.makeTensor(n, r16, t10); + return T.makeTensor(n, r15, t10); } -var z2 = N({ rand_: Y6 }); -var Qd = Kp(iS()); -var aN = {}; -qe(aN, { TEST_EPSILON_FLOAT16: () => oN, createVideoElement: () => pj, encodeStrings: () => sN, expectArrayBuffersEqual: () => uj, expectArraysClose: () => nj, expectArraysEqual: () => aj, expectNumbersClose: () => nN, expectPromiseToFail: () => sj, expectValuesInRange: () => ij, play: () => lj, testEpsilon: () => jd }); -var oj = 1e-3; -var oN = 0.1; -function nj(r16, e, t10) { - return t10 == null && (t10 = jd()), uS(r16, e, (o, n) => pS(o, n, t10)); +var t1 = N({ rand_: Rq }); +var Vd = zp(jw()); +var w1 = {}; +qe(w1, { TEST_EPSILON_FLOAT16: () => y1, createVideoElement: () => Gq, encodeStrings: () => C1, expectArrayBuffersEqual: () => Uq, expectArraysClose: () => Bq, expectArraysEqual: () => Vq, expectNumbersClose: () => b1, expectPromiseToFail: () => zq, expectValuesInRange: () => Wq, play: () => Hq, testEpsilon: () => Ld }); +var Lq = 1e-3; +var y1 = 0.1; +function Bq(r15, e, t10) { + return t10 == null && (t10 = Ld()), Xw(r15, e, (o, n) => Yw(o, n, t10)); } -function jd() { - return _.backend.floatPrecision() === 32 ? oj : oN; +function Ld() { + return T.backend.floatPrecision() === 32 ? Lq : y1; } -function uS(r16, e, t10) { +function Xw(r15, e, t10) { let o = true; - if ((Mt(r16) || Mt(e)) && (o = false), Mt(r16) && Mt(e) && (o = true), o) { - let a = r16.constructor.name, i = e.constructor.name; + if ((Pt(r15) || Pt(e)) && (o = false), Pt(r15) && Pt(e) && (o = true), o) { + let a = r15.constructor.name, i = e.constructor.name; if (a !== i) throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`); } - if (Array.isArray(r16) && Array.isArray(e)) { - let a = ur(r16), i = ur(e); - if (!Sr(a, i)) + if (Array.isArray(r15) && Array.isArray(e)) { + let a = sr(r15), i = sr(e); + if (!br(a, i)) throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`); } - let n = Mt(r16) ? r16 : Us(r16), s = Mt(e) ? e : Us(e); + let n = Pt(r15) ? r15 : Fs(r15), s = Pt(e) ? e : Fs(e); if (n.length !== s.length) throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. Actual: ${n}. @@ -6988,57 +6988,57 @@ Expected: ${s}.`); } typeof expect != "undefined" && expect().nothing(); } -function sj(r16, e) { - r16().then(() => e.fail(), () => e()), typeof expect != "undefined" && expect().nothing(); +function zq(r15, e) { + r15().then(() => e.fail(), () => e()), typeof expect != "undefined" && expect().nothing(); } -function aj(r16, e) { +function Vq(r15, e) { let t10 = typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? [e] : e; - return dn(r16) || dn(r16[0]) || dn(e) || dn(e[0]) ? uS(r16, t10, (o, n) => o == n) : uS(r16, e, (o, n) => pS(o, n, 0)); + return zo(r15) || zo(r15[0]) || zo(e) || zo(e[0]) ? Xw(r15, t10, (o, n) => o == n) : Xw(r15, e, (o, n) => Yw(o, n, 0)); } -function nN(r16, e, t10) { - if (t10 == null && (t10 = jd()), !pS(r16, e, t10)) - throw new Error(`Numbers differ: actual === ${r16}, expected === ${e}`); +function b1(r15, e, t10) { + if (t10 == null && (t10 = Ld()), !Yw(r15, e, t10)) + throw new Error(`Numbers differ: actual === ${r15}, expected === ${e}`); typeof expect != "undefined" && expect().nothing(); } -function pS(r16, e, t10) { - return !isFinite(r16) && !isFinite(e) ? true : !(isNaN(r16) || isNaN(e) || Math.abs(r16 - e) > t10); +function Yw(r15, e, t10) { + return !isFinite(r15) && !isFinite(e) ? true : !(isNaN(r15) || isNaN(e) || Math.abs(r15 - e) > t10); } -function ij(r16, e, t10) { - for (let o = 0; o < r16.length; o++) - if (r16[o] < e || r16[o] > t10) - throw new Error(`Value out of range:${r16[o]} low: ${e}, high: ${t10}`); +function Wq(r15, e, t10) { + for (let o = 0; o < r15.length; o++) + if (r15[o] < e || r15[o] > t10) + throw new Error(`Value out of range:${r15[o]} low: ${e}, high: ${t10}`); } -function uj(r16, e) { - let t10 = new Float32Array(r16), o = new Float32Array(e); +function Uq(r15, e) { + let t10 = new Float32Array(r15), o = new Float32Array(e); if (t10.length !== o.length) throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t10.length}`); for (let n = 0; n < o.length; n++) if (t10[n] !== o[n]) throw new Error(`Expected ArrayBuffer value at ${n} to be ${o[n]} but got ${t10[n]} instead`); } -function sN(r16) { - for (let e = 0; e < r16.length; e++) { - let t10 = r16[e]; - Array.isArray(t10) ? sN(t10) : r16[e] = iu(t10); +function C1(r15) { + for (let e = 0; e < r15.length; e++) { + let t10 = r15[e]; + Array.isArray(t10) ? C1(t10) : r15[e] = Ji(t10); } - return r16; + return r15; } -function pj(r16) { +function Gq(r15) { let e = document.createElement("video"); - return "playsInline" in e && (e.playsInline = true), e.muted = true, e.loop = true, e.style.position = "fixed", e.style.left = "0px", e.style.top = "0px", e.preload = "auto", e.appendChild(r16), new Promise((t10) => { + return "playsInline" in e && (e.playsInline = true), e.muted = true, e.loop = true, e.style.position = "fixed", e.style.left = "0px", e.style.top = "0px", e.preload = "auto", e.appendChild(r15), new Promise((t10) => { e.addEventListener("loadeddata", (o) => t10(e)), e.load(); }); } -async function lj(r16) { - await r16.play(), "requestVideoFrameCallback" in r16 && await new Promise((e) => { - r16.requestVideoFrameCallback(e); +async function Hq(r15) { + await r15.play(), "requestVideoFrameCallback" in r15 && await new Promise((e) => { + r15.requestVideoFrameCallback(e); }); } -var Ju = class { +var qu = class { constructor(e, t10, o, n, s) { this.mean = e, this.stdDev = t10, this.dtype = o, this.nextVal = NaN, this.truncated = n, this.truncated && (this.upper = this.mean + this.stdDev * 2, this.lower = this.mean - this.stdDev * 2); let a = s || Math.random(); - this.random = Qd.alea(a.toString()); + this.random = Vd.alea(a.toString()); } nextValue() { if (!isNaN(this.nextVal)) { @@ -7063,11 +7063,11 @@ var Ju = class { return e <= this.upper && e >= this.lower; } }; -var Xd = class { +var Bd = class { constructor(e, t10, o, n) { this.alpha = e, this.beta = 1 / t10, this.dtype = o; let s = n || Math.random(); - this.randu = Qd.alea(s.toString()), this.randn = new Ju(0, 1, o, false, this.randu()), e < 1 ? this.d = e + 2 / 3 : this.d = e - 1 / 3, this.c = 1 / Math.sqrt(9 * this.d); + this.randu = Vd.alea(s.toString()), this.randn = new qu(0, 1, o, false, 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, t10, o, n, s, a; @@ -7084,11 +7084,11 @@ var Xd = class { return this.dtype === "float32" ? e : Math.round(e); } }; -var Yd = class { +var zd = class { constructor(e = 0, t10 = 1, o, n) { if (this.canReturnFloat = () => this.dtype == null || this.dtype === "float32", this.min = e, this.range = t10 - e, this.dtype = o, n == null && (n = Math.random()), typeof n == "number" && (n = n.toString()), !this.canReturnFloat() && this.range <= 1) throw new Error(`The difference between ${e} - ${t10} <= 1 and dtype is not float`); - this.random = Qd.alea(n); + this.random = Vd.alea(n); } convertValue(e) { return this.canReturnFloat() ? e : Math.round(e); @@ -7097,335 +7097,335 @@ var Yd = class { return this.convertValue(this.min + this.range * this.random()); } }; -function cj(r16, e, t10 = 1, o = "float32", n) { - if (St(r16), t10 == null && (t10 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") +function Kq(r15, e, t10 = 1, o = "float32", n) { + if (Ct(r15), t10 == null && (t10 = 1), o == null && (o = "float32"), o !== "float32" && o !== "int32") throw new Error(`Unsupported data type ${o}`); - let s = new Xd(e, t10, o, n), a = ie(r16, o); + let s = new Bd(e, t10, o, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var iN = N({ randomGamma_: cj }); -function mj(r16, e = 0, t10 = 1, o, n) { - if (St(r16), o != null && o === "bool") +var S1 = N({ randomGamma_: Kq }); +function qq(r15, e = 0, t10 = 1, o, n) { + if (Ct(r15), o != null && o === "bool") throw new Error(`Unsupported data type ${o}`); - let s = new Ju(e, t10, o, false, n), a = ie(r16, o); + let s = new qu(e, t10, o, false, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var Zd = N({ randomNormal_: mj }); -function dj(r16, e, t10) { +var Wd = N({ randomNormal_: qq }); +function jq(r15, e, t10) { if (e != null && e === "bool") throw new Error(`Unsupported data type ${e}`); - return Zd(r16, 0, 1, e, t10); + return Wd(r15, 0, 1, e, t10); } -var uN = N({ randomStandardNormal_: dj }); -function fj(r16, e = 0, t10 = 1, o = "float32", n) { - St(r16); - let s = ie(r16, o), a = new Yd(e, t10, null, n); +var I1 = N({ randomStandardNormal_: jq }); +function Xq(r15, e = 0, t10 = 1, o = "float32", n) { + Ct(r15); + let s = me(r15, o), a = new zd(e, t10, null, n); for (let i = 0; i < s.values.length; i++) s.values[i] = a.nextValue(); return s.toTensor(); } -var dl = N({ randomUniform_: fj }); -function hj(r16, e, t10, o) { - return dl(r16, e, t10, "int32", o); +var ic = N({ randomUniform_: Xq }); +function Yq(r15, e, t10, o) { + return ic(r15, e, t10, "int32", o); } -var pN = N({ randomUniformInt_: hj }); -function xu(r16, e, t10 = 1, o = "float32") { +var v1 = N({ randomUniformInt_: Yq }); +function cu(r15, e, t10 = 1, o = "float32") { if (t10 === 0) throw new Error("Cannot have a step of zero"); - let n = { start: r16, stop: e, step: t10, dtype: o }; - return _.runKernel(ba, {}, n); -} -function gj(r16) { - let t10 = { input: v(r16, "input", "real") }; - return _.runKernel(si, t10); -} -var bi = N({ real_: gj }); -function xj(r16) { - let t10 = { x: v(r16, "x", "reciprocal") }; - return _.runKernel(xs, t10); -} -var lN = N({ reciprocal_: xj }); -function yj(r16) { - let t10 = { x: v(r16, "x", "relu") }; - return _.runKernel(ys, t10); -} -var yu = N({ relu_: yj }); -function bj(r16) { - let t10 = { x: v(r16, "x", "relu6") }; - return _.runKernel(ws, t10); -} -var Jd = N({ relu6_: bj }); -function Cj(r16, e) { - let o = { x: v(r16, "x", "reverse") }, n = { dims: e }; - return _.runKernel(Ss, o, n); -} -var Bo = N({ reverse_: Cj }); -function wj(r16) { - let e = v(r16, "x", "reverse"); - return $(e.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`), Bo(e, 0); -} -var cN = N({ reverse1d_: wj }); -function Sj(r16, e) { - let t10 = v(r16, "x", "reverse"); - return $(t10.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${t10.rank}.`), Bo(t10, e); -} -var mN = N({ reverse2d_: Sj }); -function Ij(r16, e) { - let t10 = v(r16, "x", "reverse"); - return $(t10.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${t10.rank}.`), Bo(t10, e); -} -var dN = N({ reverse3d_: Ij }); -function vj(r16, e) { - let t10 = v(r16, "x", "reverse"); - return $(t10.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${t10.rank}.`), Bo(t10, e); -} -var fN = N({ reverse4d_: vj }); -function kj(r16) { - let t10 = { x: v(r16, "x", "round") }; - return _.runKernel(Is, t10); -} -var ef = N({ round_: kj }); -function Nj(r16) { - let t10 = { x: v(r16, "x", "rsqrt", "float32") }; - return _.runKernel(Do, t10); -} -var hN = N({ rsqrt_: Nj }); -function Tj(r16) { - let t10 = { x: v(r16, "x", "selu") }; - return _.runKernel(Ts, t10); -} -var gN = N({ selu_: Tj }); -function _j(r16, e, t10, o, n, s = [1, 1], a = "NHWC") { - let i = v(r16, "x", "separableConv2d"), p = v(e, "depthwiseFilter", "separableConv2d"), u = v(t10, "pointwiseFilter", "separableConv2d"), l = i, c = false; - if (i.rank === 3 && (c = true, l = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), a === "NCHW") + let n = { start: r15, stop: e, step: t10, dtype: o }; + return T.runKernel(ma, {}, n); +} +function Qq(r15) { + let t10 = { input: v(r15, "input", "real") }; + return T.runKernel(Hi, t10); +} +var ci = N({ real_: Qq }); +function Zq(r15) { + let t10 = { x: v(r15, "x", "reciprocal") }; + return T.runKernel(ns, t10); +} +var k1 = N({ reciprocal_: Zq }); +function Jq(r15) { + let t10 = { x: v(r15, "x", "relu") }; + return T.runKernel(ss, t10); +} +var lu = N({ relu_: Jq }); +function e6(r15) { + let t10 = { x: v(r15, "x", "relu6") }; + return T.runKernel(us, t10); +} +var Ud = N({ relu6_: e6 }); +function t6(r15, e) { + let o = { x: v(r15, "x", "reverse") }, n = { dims: e }; + return T.runKernel(ps, o, n); +} +var mo = N({ reverse_: t6 }); +function r6(r15) { + let e = v(r15, "x", "reverse"); + return E(e.rank === 1, () => `Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`), mo(e, 0); +} +var N1 = N({ reverse1d_: r6 }); +function o6(r15, e) { + let t10 = v(r15, "x", "reverse"); + return E(t10.rank === 2, () => `Error in reverse2D: x must be rank 2 but got rank ${t10.rank}.`), mo(t10, e); +} +var T1 = N({ reverse2d_: o6 }); +function n6(r15, e) { + let t10 = v(r15, "x", "reverse"); + return E(t10.rank === 3, () => `Error in reverse3D: x must be rank 3 but got rank ${t10.rank}.`), mo(t10, e); +} +var _1 = N({ reverse3d_: n6 }); +function s6(r15, e) { + let t10 = v(r15, "x", "reverse"); + return E(t10.rank === 4, () => `Error in reverse4D: x must be rank 4 but got rank ${t10.rank}.`), mo(t10, e); +} +var E1 = N({ reverse4d_: s6 }); +function a6(r15) { + let t10 = { x: v(r15, "x", "round") }; + return T.runKernel(cs, t10); +} +var Gd = N({ round_: a6 }); +function i6(r15) { + let t10 = { x: v(r15, "x", "rsqrt", "float32") }; + return T.runKernel(ls, t10); +} +var $1 = N({ rsqrt_: i6 }); +function u6(r15) { + let t10 = { x: v(r15, "x", "selu") }; + return T.runKernel(hs, t10); +} +var R1 = N({ selu_: u6 }); +function p6(r15, e, t10, o, n, s = [1, 1], a = "NHWC") { + let i = v(r15, "x", "separableConv2d"), p = v(e, "depthwiseFilter", "separableConv2d"), u = v(t10, "pointwiseFilter", "separableConv2d"), c = i, l = false; + if (i.rank === 3 && (l = true, c = W(i, [1, i.shape[0], i.shape[1], i.shape[2]])), a === "NCHW") throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported"); - $(l.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`), $(p.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`), $(u.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`), $(u.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`), $(u.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`); + E(c.rank === 4, () => `Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`), E(p.rank === 4, () => `Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`), E(u.rank === 4, () => `Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`), E(u.shape[0] === 1, () => `Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`), E(u.shape[1] === 1, () => `Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`); let m = p.shape[2], d = p.shape[3]; - $(u.shape[2] === m * d, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${m * d}, but got ${u.shape[2]}.`); - let f = cl(l, p, o, n, a, s), g = du(f, u, 1, "valid", a); - return c ? W(g, [g.shape[1], g.shape[2], g.shape[3]]) : g; -} -var xN = N({ separableConv2d_: _j }); -async function Ej(r16, e) { - let t10 = v(r16, "x", "setdiff1d"), o = v(e, "y", "setdiff1d"); - $(t10.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${t10.dtype}) and y (${o.dtype}).`), $(t10.rank === 1, () => `x should be 1D tensor, but got x (${t10.shape}).`), $(o.rank === 1, () => `y should be 1D tensor, but got y (${o.shape}).`); + E(u.shape[2] === m * d, () => `Error in separableConv2d: the third dimension of pointwise filter must be ${m * d}, but got ${u.shape[2]}.`); + let f = sc(c, p, o, n, a, s), g = au(f, u, 1, "valid", a); + return l ? W(g, [g.shape[1], g.shape[2], g.shape[3]]) : g; +} +var D1 = N({ separableConv2d_: p6 }); +async function c6(r15, e) { + let t10 = v(r15, "x", "setdiff1d"), o = v(e, "y", "setdiff1d"); + E(t10.dtype === o.dtype, () => `x and y should have the same dtype, but got x (${t10.dtype}) and y (${o.dtype}).`), E(t10.rank === 1, () => `x should be 1D tensor, but got x (${t10.shape}).`), E(o.rank === 1, () => `y should be 1D tensor, but got y (${o.shape}).`); let n = await t10.data(), s = await o.data(), a = new Set(s), i = 0; - for (let l = 0; l < n.length; l++) - a.has(n[l]) || i++; - let p = new Ge([i], t10.dtype), u = new Ge([i], "int32"); - for (let l = 0, c = 0; l < n.length; l++) - a.has(n[l]) || (p.values[c] = n[l], u.values[c] = l, c++); + for (let c = 0; c < n.length; c++) + a.has(n[c]) || i++; + let p = new tt([i], t10.dtype), u = new tt([i], "int32"); + for (let c = 0, l = 0; c < n.length; c++) + a.has(n[c]) || (p.values[l] = n[c], u.values[l] = c, l++); return [p.toTensor(), u.toTensor()]; } -var yN = Ej; -function $j(r16) { - let t10 = { x: v(r16, "x", "sign") }; - return _.runKernel(Rs, t10); -} -var bN = N({ sign_: $j }); -function Rj(r16) { - let t10 = { x: v(r16, "x", "sin", "float32") }; - return _.runKernel(Es, t10); -} -var CN = N({ sin_: Rj }); -function Dj(r16) { - let t10 = { x: v(r16, "x", "sinh") }; - return _.runKernel($s, t10); -} -var wN = N({ sinh_: Dj }); -function Aj(r16, e, t10) { - let o = v(r16, "x", "slice1d"); - return $(o.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`), Ye(o, [e], [t10]); -} -var SN = N({ slice1d_: Aj }); -function Fj(r16, e, t10) { - let o = v(r16, "x", "slice2d"); - return $(o.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`), Ye(o, e, t10); -} -var IN = N({ slice2d_: Fj }); -function Pj(r16, e, t10) { - let o = v(r16, "x", "slice3d"); - return $(o.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`), Ye(o, e, t10); -} -var vN = N({ slice3d_: Pj }); -function Oj(r16, e, t10) { - let o = v(r16, "x", "slice4d"); - return $(o.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`), Ye(o, e, t10); -} -var kN = N({ slice4d_: Oj }); -function Mj(r16, e = -1) { - let t10 = v(r16, "logits", "softmax", "float32"); +var A1 = c6; +function l6(r15) { + let t10 = { x: v(r15, "x", "sign") }; + return T.runKernel(ys, t10); +} +var F1 = N({ sign_: l6 }); +function m6(r15) { + let t10 = { x: v(r15, "x", "sin", "float32") }; + return T.runKernel(gs, t10); +} +var P1 = N({ sin_: m6 }); +function d6(r15) { + let t10 = { x: v(r15, "x", "sinh") }; + return T.runKernel(xs, t10); +} +var O1 = N({ sinh_: d6 }); +function f6(r15, e, t10) { + let o = v(r15, "x", "slice1d"); + return E(o.rank === 1, () => `slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`), Xe(o, [e], [t10]); +} +var M1 = N({ slice1d_: f6 }); +function h6(r15, e, t10) { + let o = v(r15, "x", "slice2d"); + return E(o.rank === 2, () => `slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`), Xe(o, e, t10); +} +var L1 = N({ slice2d_: h6 }); +function g6(r15, e, t10) { + let o = v(r15, "x", "slice3d"); + return E(o.rank === 3, () => `slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`), Xe(o, e, t10); +} +var B1 = N({ slice3d_: g6 }); +function x6(r15, e, t10) { + let o = v(r15, "x", "slice4d"); + return E(o.rank === 4, () => `slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`), Xe(o, e, t10); +} +var z1 = N({ slice4d_: x6 }); +function y6(r15, e = -1) { + let t10 = v(r15, "logits", "softmax", "float32"); if (e === -1 && (e = t10.rank - 1), e !== t10.rank - 1) throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t10.rank} and dim was ${e}`); let o = { logits: t10 }, n = { dim: e }; - return _.runKernel(Fs, o, n); -} -var NN = N({ softmax_: Mj }); -function Lj(r16) { - $(r16.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r16.dtype}.`); - let e = { input: r16 }; - return _.runKernel(Xi, e); -} -var fl = N({ fft_: Lj }); -function Bj(r16) { - $(r16.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r16.dtype}.`); - let e = { input: r16 }; - return _.runKernel(Yi, e); -} -var ep = N({ ifft_: Bj }); -function zj(r16) { - let e = r16.shape[r16.shape.length - 1], t10 = r16.size / e, o; + return T.runKernel(Is, o, n); +} +var V1 = N({ softmax_: y6 }); +function b6(r15) { + E(r15.dtype === "complex64", () => `The dtype for tf.spectral.fft() must be complex64 but got ${r15.dtype}.`); + let e = { input: r15 }; + return T.runKernel(zi, e); +} +var uc = N({ fft_: b6 }); +function C6(r15) { + E(r15.dtype === "complex64", () => `The dtype for tf.spectral.ifft() must be complex64 but got ${r15.dtype}.`); + let e = { input: r15 }; + return T.runKernel(Vi, e); +} +var ju = N({ ifft_: C6 }); +function w6(r15) { + let e = r15.shape[r15.shape.length - 1], t10 = r15.size / e, o; if (e <= 2) { - let n = W(r16, [t10, e]); - o = ep(n); + let n = W(r15, [t10, e]); + o = ju(n); } else { - let n = [t10, 2 * (e - 1)], s = W(bi(r16), [t10, e]), a = W(gu(r16), [t10, e]), i = Bo(Ye(s, [0, 1], [t10, e - 2]), 1), p = se(Bo(Ye(a, [0, 1], [t10, e - 2]), 1), ke(-1)), u = bt([s, i], 1), l = bt([a, p], 1), c = W(Ar(u, l), [n[0], n[1]]); - o = ep(c); + let n = [t10, 2 * (e - 1)], s = W(ci(r15), [t10, e]), a = W(pu(r15), [t10, e]), i = mo(Xe(s, [0, 1], [t10, e - 2]), 1), p = se(mo(Xe(a, [0, 1], [t10, e - 2]), 1), ke(-1)), u = yt([s, i], 1), c = yt([a, p], 1), l = W(Er(u, c), [n[0], n[1]]); + o = ju(l); } - if (o = bi(o), r16.rank === 3 && r16.shape[0] !== 0) { - let n = o, s = r16.shape[0]; + if (o = ci(o), r15.rank === 3 && r15.shape[0] !== 0) { + let n = o, s = r15.shape[0]; o = W(o, [s, o.shape[0] / s, o.shape[1]]), n.dispose(); } return o; } -var tf = N({ irfft_: zj }); -function Vj(r16, e, t10 = 0) { - let n = { x: v(r16, "x", "split") }, s = { numOrSizeSplits: e, axis: t10 }; - return _.runKernel(Ia, n, s); +var Hd = N({ irfft_: w6 }); +function S6(r15, e, t10 = 0) { + let n = { x: v(r15, "x", "split") }, s = { numOrSizeSplits: e, axis: t10 }; + return T.runKernel(xa, n, s); } -var Ci = N({ split_: Vj }); -function Wj(r16, e) { - $(r16.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r16.dtype}`); - let t10 = r16.shape[r16.shape.length - 1], o = r16.size / t10, n; +var li = N({ split_: S6 }); +function I6(r15, e) { + E(r15.dtype === "float32", () => `The dtype for rfft() must be real value but got ${r15.dtype}`); + let t10 = r15.shape[r15.shape.length - 1], o = r15.size / t10, n; if (e != null && e < t10) { - let f = r16.shape.map((g) => 0), h = r16.shape.map((g) => g); - h[r16.shape.length - 1] = e, n = Ye(r16, f, h), t10 = e; + let f = r15.shape.map((g) => 0), h = r15.shape.map((g) => g); + h[r15.shape.length - 1] = e, n = Xe(r15, f, h), t10 = e; } else if (e != null && e > t10) { - let f = r16.shape.map((h) => h); - f[r16.shape.length - 1] = e - t10, n = bt([r16, Yr(f)], r16.shape.length - 1), t10 = e; + let f = r15.shape.map((h) => h); + f[r15.shape.length - 1] = e - t10, n = yt([r15, Gr(f)], r15.shape.length - 1), t10 = e; } else - n = r16; - let s = Kt(n), a = W(Ar(n, s), [o, t10]), i = fl(a), p = Math.floor(t10 / 2) + 1, u = bi(i), l = gu(i), c = Ci(u, [p, t10 - p], u.shape.length - 1), m = Ci(l, [p, t10 - p], l.shape.length - 1), d = n.shape.slice(); - return d[n.shape.length - 1] = p, W(Ar(c[0], m[0]), d); + n = r15; + let s = Gt(n), a = W(Er(n, s), [o, t10]), i = uc(a), p = Math.floor(t10 / 2) + 1, u = ci(i), c = pu(i), l = li(u, [p, t10 - p], u.shape.length - 1), m = li(c, [p, t10 - p], c.shape.length - 1), d = n.shape.slice(); + return d[n.shape.length - 1] = p, W(Er(l[0], m[0]), d); } -var hl = N({ rfft_: Wj }); -function Uj(r16, e) { - let t10 = v(r16, "a", "squaredDifference"), o = v(e, "b", "squaredDifference"); +var pc = N({ rfft_: I6 }); +function v6(r15, e) { + let t10 = v(r15, "a", "squaredDifference"), o = v(e, "b", "squaredDifference"); [t10, o] = Oe(t10, o), rt(t10.shape, o.shape); let n = { a: t10, b: o }, s = {}; - return _.runKernel(Po, n, s); + return T.runKernel(ks, n, s); } -var rf = N({ squaredDifference_: Uj }); -function Gj(r16, e) { - let t10 = v(r16, "x", "squeeze", "string_or_numeric"); - return W(t10, mw(t10.shape, e).newShape); +var Kd = N({ squaredDifference_: v6 }); +function k6(r15, e) { + let t10 = v(r15, "x", "squeeze", "string_or_numeric"); + return W(t10, JC(t10.shape, e).newShape); } -var gl = N({ squeeze_: Gj }); -function Hj(r16, e = 0) { - let t10 = di(r16, "tensors", "stack", "string_or_numeric"); - $(t10.length >= 1, () => "Pass at least one tensor to tf.stack"), t10.length > 0 && $(e <= t10[0].rank, () => "Axis must be <= rank of the tensor"); +var cc = N({ squeeze_: k6 }); +function N6(r15, e = 0) { + let t10 = ni(r15, "tensors", "stack", "string_or_numeric"); + E(t10.length >= 1, () => "Pass at least one tensor to tf.stack"), t10.length > 0 && E(e <= t10[0].rank, () => "Axis must be <= rank of the tensor"); let o = t10, n = { axis: e }; - return _.runKernel(ya, o, n); -} -var Tr = N({ stack_: Hj }); -function Kj(r16, e = 0) { - let o = { x: v(r16, "x", "step") }, n = { alpha: e }; - return _.runKernel(Ko, o, n); -} -var of = N({ step_: Kj }); -function qj(r16, e, t10, o, n = 0, s = 0, a = 0, i = 0, p = 0) { - let l = { x: v(r16, "x", "stridedSlice", "string_or_numeric") }, c = { begin: e, end: t10, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; - return _.runKernel(Os, l, c); -} -var TN = N({ stridedSlice_: qj }); -function jj(r16) { - let t10 = { x: v(r16, "x", "tan", "float32") }; - return _.runKernel(Ms, t10); -} -var _N = N({ tan_: jj }); -function rr(r16, e) { - fo(r16); - let t10 = ur(r16, e); + return T.runKernel(la, o, n); +} +var vr = N({ stack_: N6 }); +function T6(r15, e = 0) { + let o = { x: v(r15, "x", "step") }, n = { alpha: e }; + return T.runKernel(wo, o, n); +} +var qd = N({ step_: T6 }); +function _6(r15, e, t10, o, n = 0, s = 0, a = 0, i = 0, p = 0) { + let c = { x: v(r15, "x", "stridedSlice", "string_or_numeric") }, l = { begin: e, end: t10, strides: o, beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; + return T.runKernel(Ns, c, l); +} +var W1 = N({ stridedSlice_: _6 }); +function E6(r15) { + let t10 = { x: v(r15, "x", "tan", "float32") }; + return T.runKernel(_s, t10); +} +var U1 = N({ tan_: E6 }); +function Jt(r15, e) { + io(r15); + let t10 = sr(r15, e); if (t10.length !== 1) throw new Error("tensor1d() requires values to be a flat/TypedArray"); - return vr(r16, null, t10, e); + return wr(r15, null, t10, e); } -function bu(r16, e, t10) { - if (fo(r16), e != null && e.length !== 2) +function mu(r15, e, t10) { + if (io(r15), e != null && e.length !== 2) throw new Error("tensor2d() requires shape to have two numbers"); - let o = ur(r16, t10); + let o = sr(r15, t10); if (o.length !== 2 && o.length !== 1) throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray"); - return vr(r16, e, o, t10); + return wr(r15, e, o, t10); } -function nf(r16, e, t10) { - if (fo(r16), e != null && e.length !== 3) +function jd(r15, e, t10) { + if (io(r15), e != null && e.length !== 3) throw new Error("tensor3d() requires shape to have three numbers"); - let o = ur(r16, t10); + let o = sr(r15, t10); if (o.length !== 3 && o.length !== 1) throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor3d() requires shape to be provided when `values` are a flat array"); - return vr(r16, e, o, t10); + return wr(r15, e, o, t10); } -function EN(r16, e, t10) { - if (fo(r16), e != null && e.length !== 4) +function G1(r15, e, t10) { + if (io(r15), e != null && e.length !== 4) throw new Error("tensor4d() requires shape to have four numbers"); - let o = ur(r16, t10); + let o = sr(r15, t10); if (o.length !== 4 && o.length !== 1) throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor4d() requires shape to be provided when `values` are a flat array"); - return vr(r16, e, o, t10); + return wr(r15, e, o, t10); } -function $N(r16, e, t10) { - if (fo(r16), e != null && e.length !== 5) +function H1(r15, e, t10) { + if (io(r15), e != null && e.length !== 5) throw new Error("tensor5d() requires shape to have five numbers"); - let o = ur(r16, t10); + let o = sr(r15, t10); if (o.length !== 5 && o.length !== 1) throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor5d() requires shape to be provided when `values` are a flat array"); - return vr(r16, e, o, t10); + return wr(r15, e, o, t10); } -function RN(r16, e, t10) { - if (fo(r16), e != null && e.length !== 6) +function K1(r15, e, t10) { + if (io(r15), e != null && e.length !== 6) throw new Error("tensor6d() requires shape to have six numbers"); - let o = ur(r16, t10); + let o = sr(r15, t10); if (o.length !== 6 && o.length !== 1) throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray"); if (o.length === 1 && e == null) throw new Error("tensor6d() requires shape to be provided when `values` are a flat array"); - return e = e || o, vr(r16, e, o, t10); + return e = e || o, wr(r15, e, o, t10); } -var Cu = {}; -qe(Cu, { calculateShapes: () => DN, validateInput: () => xl, validateUpdateShape: () => lS }); -function lS(r16, e, t10) { - let o = e.rank > 1 ? e.shape[e.rank - 1] : 1, n = e.rank > 1 ? e.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t10.shape}, indices.shape: ${e.shape}, shape: ${r16}, sliceDim: ${o}, and batchDim: ${n}.`; +var du = {}; +qe(du, { calculateShapes: () => q1, validateInput: () => lc, validateUpdateShape: () => Qw }); +function Qw(r15, e, t10) { + let o = e.rank > 1 ? e.shape[e.rank - 1] : 1, n = e.rank > 1 ? e.rank - 1 : 1, s = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t10.shape}, indices.shape: ${e.shape}, shape: ${r15}, sliceDim: ${o}, and batchDim: ${n}.`; if (t10.rank < n) throw new Error(s + ` update.rank < ${n}. `); - if (r16.length < o + (t10.rank - n)) + if (r15.length < o + (t10.rank - n)) throw new Error(s + ` Output shape length < ${o + (t10.rank - n)}`); - if (t10.rank !== n + r16.length - o) - throw new Error(s + ` update.rank != ${n + r16.length - o}`); + if (t10.rank !== n + r15.length - o) + throw new Error(s + ` update.rank != ${n + r15.length - o}`); for (let a = 0; a < n; ++a) if (t10.shape[a] !== e.shape[a]) throw new Error(s + ` updates.shape[${a}] (${t10.shape[a]}) != indices.shape[${a}] (${e.shape[a]}).`); for (let a = 0; a < t10.rank - n; ++a) - if (t10.shape[a + n] !== r16[a + o]) - throw new Error(s + ` updates.shape[${a + n}] (${t10.shape[a + n]}) != shape[${a + n}] (${r16[a + n]})`); + if (t10.shape[a + n] !== r15[a + o]) + throw new Error(s + ` updates.shape[${a + n}] (${t10.shape[a + n]}) != shape[${a + n}] (${r15[a + n]})`); } -function xl(r16, e, t10) { +function lc(r15, e, t10) { if (e.rank < 1) throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${e.rank}.`); - if (r16.rank < 1) - throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r16.rank}.`); + if (r15.rank < 1) + throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${r15.rank}.`); if (e.dtype !== "int32") throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${e.dtype}`); if (t10.length < 1) @@ -7433,28 +7433,28 @@ function xl(r16, e, t10) { if (t10.length === 0) { if (e.size === 0) throw new Error(`Indices specified for empty output. indices shape: ${e.shape}`); - if (r16.size === 0) - throw new Error(`Updates specified for empty output. updates shape: ${r16.shape}`); + if (r15.size === 0) + throw new Error(`Updates specified for empty output. updates shape: ${r15.shape}`); } - lS(t10, e, r16); + Qw(t10, e, r15); } -function DN(r16, e, t10) { +function q1(r15, e, t10) { let o = e.shape.length, n = o > 1 ? e.shape[o - 1] : 1, s = t10.length, a = 1; - for (let c = n; c < s; ++c) - a *= t10[c]; - let i = n < 1 ? 1 : n, p = ze(e.shape) / i, u = [...oa(t10.slice(0, n)), 1], l = ze(t10); - return { sliceRank: n, numUpdates: p, sliceSize: a, strides: u, outputSize: l }; -} -function Xj(r16, e, t10) { - let o = v(r16, "tensor", "tensorScatterupdate"), n = v(e, "indices", "tensorScatterupdate", "int32"), s = v(t10, "updates", "tensorScatterupdate"); - if (xl(s, n, o.shape), o.dtype !== s.dtype) + for (let l = n; l < s; ++l) + a *= t10[l]; + let i = n < 1 ? 1 : n, p = ze(e.shape) / i, u = [...js(t10.slice(0, n)), 1], c = ze(t10); + return { sliceRank: n, numUpdates: p, sliceSize: a, strides: u, outputSize: c }; +} +function $6(r15, e, t10) { + let o = v(r15, "tensor", "tensorScatterupdate"), n = v(e, "indices", "tensorScatterupdate", "int32"), s = v(t10, "updates", "tensorScatterupdate"); + if (lc(s, n, o.shape), o.dtype !== s.dtype) throw new Error(`tensor and updates must have the same dtype, instead they are ${o.dtype} and ${s.dtype}.`); let a = { tensor: o, indices: n, updates: s }, i = {}; - return _.runKernel(ks, a, i); + return T.runKernel(ds, a, i); } -var AN = N({ tensorScatterUpdate_: Xj }); -function Yj(r16, e = 1, t10 = true) { - let o = v(r16, "x", "topk"); +var j1 = N({ tensorScatterUpdate_: $6 }); +function R6(r15, e = 1, t10 = true) { + let o = v(r15, "x", "topk"); if (o.rank === 0) throw new Error("topk() expects the input to be of rank 1 or higher"); let n = o.shape[o.shape.length - 1]; @@ -7462,111 +7462,111 @@ function Yj(r16, e = 1, t10 = true) { throw new Error(`'k' passed to topk() must be >= 0 but got ${e}`); if (e > n) throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`); - let s = { x: o }, a = { k: e, sorted: t10 }, [i, p] = _.runKernel(Bs, s, a); + let s = { x: o }, a = { k: e, sorted: t10 }, [i, p] = T.runKernel($s, s, a); return { values: i, indices: p }; } -var FN = N({ topk_: Yj }); -function Qj(r16, e = 0, t10 = 1, o, n) { - if (St(r16), o != null && o === "bool") +var X1 = N({ topk_: R6 }); +function D6(r15, e = 0, t10 = 1, o, n) { + if (Ct(r15), o != null && o === "bool") throw new Error("Unsupported data type $ { dtype }"); - let s = new Ju(e, t10, o, true, n), a = ie(r16, o); + let s = new qu(e, t10, o, true, n), a = me(r15, o); for (let i = 0; i < a.values.length; i++) a.values[i] = s.nextValue(); return a.toTensor(); } -var PN = N({ truncatedNormal_: Qj }); -function Zj(r16, e = 0) { - let t10 = v(r16, "x", "unique", "string_or_numeric"); - $(t10.rank > 0, () => "The input tensor must be at least 1D"); - let o = { x: t10 }, n = { axis: e }, [s, a] = _.runKernel(nu, o, n); +var Y1 = N({ truncatedNormal_: D6 }); +function A6(r15, e = 0) { + let t10 = v(r15, "x", "unique", "string_or_numeric"); + E(t10.rank > 0, () => "The input tensor must be at least 1D"); + let o = { x: t10 }, n = { axis: e }, [s, a] = T.runKernel(Yi, o, n); return { values: s, indices: a }; } -var ON = N({ unique_: Zj }); -function Jj(r16, e, t10) { - let o = v(r16, "x", "unsortedSegmentSum"), n = v(e, "segmentIds", "unsortedSegmentSum", "int32"); - $(Ja(t10), () => "numSegments must be of dtype int"); +var Q1 = N({ unique_: A6 }); +function F6(r15, e, t10) { + let o = v(r15, "x", "unsortedSegmentSum"), n = v(e, "segmentIds", "unsortedSegmentSum", "int32"); + E(Ka(t10), () => "numSegments must be of dtype int"); let s = { x: o, segmentIds: n }, a = { numSegments: t10 }; - return _.runKernel(su, s, a); + return T.runKernel(Qi, s, a); } -var MN = N({ unsortedSegmentSum_: Jj }); -function eX(r16, e = 0) { - let t10 = v(r16, "x", "unstack", "string_or_numeric"); - $(e >= -t10.shape.length && e < t10.shape.length, () => `Axis = ${e} is not in [-${t10.shape.length}, ${t10.shape.length})`); +var Z1 = N({ unsortedSegmentSum_: F6 }); +function P6(r15, e = 0) { + let t10 = v(r15, "x", "unstack", "string_or_numeric"); + E(e >= -t10.shape.length && e < t10.shape.length, () => `Axis = ${e} is not in [-${t10.shape.length}, ${t10.shape.length})`); let o = { value: t10 }, n = { axis: e }; - return _.runKernel(Ta, o, n); + return T.runKernel(wa, o, n); } -var zo = N({ unstack_: eX }); -function LN(r16, e) { - return Pc(r16, e, "right"); +var fo = N({ unstack_: P6 }); +function J1(r15, e) { + return _l(r15, e, "right"); } -function BN(r16, e = true, t10, o) { - return _.makeVariable(r16, e, t10, o); +function eN(r15, e = true, t10, o) { + return T.makeVariable(r15, e, t10, o); } -function sf(r16, e) { +function Xd(r15, e) { let t10 = []; for (let s = 0; s < e.length; s++) e[s] && t10.push(s); - let o = ie(r16, "int32"), n = ie([t10.length, r16.length], "int32"); + let o = me(r15, "int32"), n = me([t10.length, r15.length], "int32"); for (let s = 0; s < t10.length; s++) { - let a = o.indexToLoc(t10[s]), i = s * r16.length; + let a = o.indexToLoc(t10[s]), i = s * r15.length; n.values.set(a, i); } return n.toTensor(); } -async function tX(r16) { - let e = v(r16, "condition", "whereAsync", "bool"), t10 = await e.data(), o = sf(e.shape, t10); - return r16 !== e && e.dispose(), o; +async function O6(r15) { + let e = v(r15, "condition", "whereAsync", "bool"), t10 = await e.data(), o = Xd(e.shape, t10); + return r15 !== e && e.dispose(), o; } -var af = tX; -async function rX(r16, e, t10) { - let o = v(r16, "tensor", "boolMask"), n = v(e, "mask", "boolMask", "bool"), s = t10 == null ? 0 : t10, a = n.rank, i = o.shape; - $(a > 0, () => "mask cannot be scalar"), yt(i.slice(s, s + a), n.shape, "mask's shape must match the first K dimensions of tensor's shape,"); +var Yd = O6; +async function M6(r15, e, t10) { + let o = v(r15, "tensor", "boolMask"), n = v(e, "mask", "boolMask", "bool"), s = t10 == null ? 0 : t10, a = n.rank, i = o.shape; + E(a > 0, () => "mask cannot be scalar"), xt(i.slice(s, s + a), n.shape, "mask's shape must match the first K dimensions of tensor's shape,"); let p = 1; for (let h = s; h < s + a; h++) p *= i[h]; - let u = i.slice(0, s).concat([p], i.slice(s + a)), l = W(o, u), c = W(n, [-1]), m = await af(c), d = gl(m, [1]), f = Dd(l, d, s); - return r16 !== o && o.dispose(), e !== n && n.dispose(), d.dispose(), l.dispose(), c.dispose(), m.dispose(), f; -} -var oX = rX; -function nX(r16, e, t10) { - let o = v(r16, "x", "transpose"); - if (e == null && (e = o.shape.map((a, i) => i).reverse()), $(o.rank === e.length, () => `Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`), e.forEach((a) => { - $(a >= 0 && a < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${e}`); + let u = i.slice(0, s).concat([p], i.slice(s + a)), c = W(o, u), l = W(n, [-1]), m = await Yd(l), d = cc(m, [1]), f = Sd(c, d, s); + return r15 !== o && o.dispose(), e !== n && n.dispose(), d.dispose(), c.dispose(), l.dispose(), m.dispose(), f; +} +var L6 = M6; +function B6(r15, e, t10) { + let o = v(r15, "x", "transpose"); + if (e == null && (e = o.shape.map((a, i) => i).reverse()), E(o.rank === e.length, () => `Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`), e.forEach((a) => { + E(a >= 0 && a < o.rank, () => `All entries in 'perm' must be between 0 and ${o.rank - 1} but got ${e}`); }), o.rank <= 1) return o.clone(); let n = { x: o }, s = { perm: e }; return o.dtype === "complex64" ? De(() => { - let a = bi(o), i = gu(o); - return a = _.runKernel(Kr, { x: a }, s), i = _.runKernel(Kr, { x: i }, s), t10 && (i = mr(i)), Ar(a, i); - }) : _.runKernel(Kr, n, s); -} -var yl = N({ transpose_: nX }); -function sX(r16, e, t10, o, n = true) { - let s = v(r16, "v", "movingAverage"), a = v(e, "x", "movingAverage"), i = v(t10, "decay", "movingAverage"); - Fw(s, a), $(Sr(s.shape, a.shape), () => "Shape mismatch in v and x"); - let p = ke(1), u = Te(p, i), l = se(Te(a, s), u); + let a = ci(o), i = pu(o); + return a = T.runKernel(co, { x: a }, s), i = T.runKernel(co, { x: i }, s), t10 && (i = pr(i)), Er(a, i); + }) : T.runKernel(co, n, s); +} +var mc = N({ transpose_: B6 }); +function z6(r15, e, t10, o, n = true) { + let s = v(r15, "v", "movingAverage"), a = v(e, "x", "movingAverage"), i = v(t10, "decay", "movingAverage"); + ww(s, a), E(br(s.shape, a.shape), () => "Shape mismatch in v and x"); + let p = ke(1), u = Te(p, i), c = se(Te(a, s), u); if (n) { - $(o != null, () => "When using zeroDebias: true, step is required."); - let c = v(o, "step", "movingAverage"); - l = Xe(l, Te(p, xi(i, c))); + E(o != null, () => "When using zeroDebias: true, step is required."); + let l = v(o, "step", "movingAverage"); + c = je(c, Te(p, ui(i, l))); } - return Ce(s, l); + return Ce(s, c); } -var aX = N({ movingAverage_: sX }); -function iX(r16, e, t10) { - St(t10); - let o = v(r16, "indices", "scatterND", "int32"), n = v(e, "updates", "scatterND"); - xl(n, o, t10); +var V6 = N({ movingAverage_: z6 }); +function W6(r15, e, t10) { + Ct(t10); + let o = v(r15, "indices", "scatterND", "int32"), n = v(e, "updates", "scatterND"); + lc(n, o, t10); let s = { indices: o, updates: n }, a = { shape: t10 }; - return _.runKernel(vs, s, a); -} -var uX = N({ scatterND_: iX }); -function zN(r16, e, t10, o) { - if (r16.dtype !== "int32") - throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r16.dtype}.`); - if (r16.rank > 2) - throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r16.shape}.`); - let n = r16.rank > 0 ? r16.shape[0] : 1, s = r16.rank > 1 ? r16.shape[1] : 1; + return T.runKernel(ms, s, a); +} +var U6 = N({ scatterND_: W6 }); +function tN(r15, e, t10, o) { + if (r15.dtype !== "int32") + throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r15.dtype}.`); + if (r15.rank > 2) + throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r15.shape}.`); + let n = r15.rank > 0 ? r15.shape[0] : 1, s = r15.rank > 1 ? r15.shape[1] : 1; if (t10.length !== s) throw new Error(`outputShape has incorrect number of elements:, ${t10.length}, should be: ${s}.`); let a = e.size; @@ -7575,674 +7575,674 @@ function zN(r16, e, t10, o) { if (e.dtype !== o.dtype) throw new Error("sparseValues.dtype must match defaultValues.dtype"); } -function lX(r16, e, t10, o = 0) { - St(t10); - let n = v(r16, "sparseIndices", "sparseToDense", "int32"), s = v(e, "sparseValues", "sparseToDense", "string_or_numeric"), a = v(o, "defaultValue", "sparseToDense", s.dtype); - zN(n, s, t10, a); +function H6(r15, e, t10, o = 0) { + Ct(t10); + let n = v(r15, "sparseIndices", "sparseToDense", "int32"), s = v(e, "sparseValues", "sparseToDense", "string_or_numeric"), a = v(o, "defaultValue", "sparseToDense", s.dtype); + tN(n, s, t10, a); let i = { sparseIndices: n, sparseValues: s, defaultValue: a }, p = { outputShape: t10 }; - return _.runKernel(Ps, i, p); + return T.runKernel(vs, i, p); } -var cX = N({ sparseToDense_: lX }); -function mX(r16, e) { - let t10 = v(e, "indices", "gatherND", "int32"), n = { params: v(r16, "x", "gatherND", "string_or_numeric"), indices: t10 }; - return _.runKernel(Kn, n); +var K6 = N({ sparseToDense_: H6 }); +function q6(r15, e) { + let t10 = v(e, "indices", "gatherND", "int32"), n = { params: v(r15, "x", "gatherND", "string_or_numeric"), indices: t10 }; + return T.runKernel(vn, n); } -var dX = N({ gatherND_: mX }); -function VN(r16, e) { +var j6 = N({ gatherND_: q6 }); +function rN(r15, e) { if (e == null) - return r16.shape.slice(); - if (Sr(r16.shape, e)) + return r15.shape.slice(); + if (br(r15.shape, e)) return e; - if (r16.shape.length === e.length) { + if (r15.shape.length === e.length) { let t10 = []; - for (let o = 0; o < r16.shape.length; o++) - e[o] == null && r16.shape[o] != null ? t10.push(r16.shape[o]) : t10.push(e[o]); + for (let o = 0; o < r15.shape.length; o++) + e[o] == null && r15.shape[o] != null ? t10.push(r15.shape[o]) : t10.push(e[o]); return t10; } return e; } -function fX(r16, e, t10, o) { - let n = v(r16, "x", "dropout"); - if ($(n.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`), $(e >= 0 && e < 1, () => `rate must be a float in the range [0, 1), but got ${e}.`), e === 0) - return r16 instanceof dt ? n.clone() : n; - let s = VN(n, t10), a = 1 - e, i = Xe(Rd(Ce(dl(s, 0, 1, "float32", o), a)), a); +function X6(r15, e, t10, o) { + let n = v(r15, "x", "dropout"); + if (E(n.dtype === "float32", () => `x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`), E(e >= 0 && e < 1, () => `rate must be a float in the range [0, 1), but got ${e}.`), e === 0) + return r15 instanceof mt ? n.clone() : n; + let s = rN(n, t10), a = 1 - e, i = je(wd(Ce(ic(s, 0, 1, "float32", o), a)), a); return se(n, i); } -var hX = N({ dropout_: fX }); -function cS(r16) { - return Math.floor(Math.pow(2, Math.ceil(Math.log(r16) / Math.log(2)))); +var Y6 = N({ dropout_: X6 }); +function Zw(r15) { + return Math.floor(Math.pow(2, Math.ceil(Math.log(r15) / Math.log(2)))); } -function Mc(r16, e, t10) { - let o = 1 - r16 % 2, n = new Float32Array(r16); - for (let s = 0; s < r16; ++s) { - let a = 2 * Math.PI * s / (r16 + o - 1); +function $l(r15, e, t10) { + let o = 1 - r15 % 2, n = new Float32Array(r15); + for (let s = 0; s < r15; ++s) { + let a = 2 * Math.PI * s / (r15 + o - 1); n[s] = e - t10 * Math.cos(a); } - return rr(n, "float32"); + return Jt(n, "float32"); } -async function gX(r16, e, t10 = 1) { - let o = v(r16, "predictions", "inTopK"), n = v(e, "targets", "inTopK"); - $(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), $(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), yt(o.shape.slice(0, o.shape.length - 1), n.shape, "predictions's shape should be align with the targets' shape, except the last dimension."); +async function Q6(r15, e, t10 = 1) { + let o = v(r15, "predictions", "inTopK"), n = v(e, "targets", "inTopK"); + E(o.rank > 1, () => `inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`), E(o.rank - 1 === n.rank, () => `predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`), xt(o.shape.slice(0, o.shape.length - 1), n.shape, "predictions's shape should be align with the targets' shape, except the last dimension."); let s = o.shape[o.shape.length - 1]; - $(t10 > 0 && t10 <= s, () => `'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t10}`); - let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], l = dw("bool", p); - for (let c = 0; c < p; c++) { - let m = c * u, d = a.subarray(m, m + u), f = []; + E(t10 > 0 && t10 <= s, () => `'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t10}`); + let a = await o.data(), i = await n.data(), [p, u] = [a.length / s, s], c = ew("bool", p); + for (let l = 0; l < p; l++) { + let m = l * u, d = a.subarray(m, m + u), f = []; for (let h = 0; h < d.length; h++) f.push({ value: d[h], index: h }); - f.sort((h, g) => g.value - h.value), l[c] = 0; + f.sort((h, g) => g.value - h.value), c[l] = 0; for (let h = 0; h < t10; h++) - if (f[h].index === i[c]) { - l[c] = 1; + if (f[h].index === i[l]) { + c[l] = 1; break; } } - return r16 !== o && o.dispose(), e !== n && n.dispose(), pr(l, n.shape, "bool"); + return r15 !== o && o.dispose(), e !== n && n.dispose(), ar(c, n.shape, "bool"); } -var xX = gX; -var mS = {}; -qe(mS, { conv2d: () => UN, depthwiseConv2d: () => KN, matMul: () => qN }); -function yX(r16, e, t10, o, n, s = "NHWC", a) { - let i = r16; - r16.rank === 3 && (i = W(r16, [1, r16.shape[0], r16.shape[1], r16.shape[2]])); +var Z6 = Q6; +var Jw = {}; +qe(Jw, { conv2d: () => nN, depthwiseConv2d: () => iN, matMul: () => uN }); +function J6(r15, e, t10, o, n, s = "NHWC", a) { + let i = r15; + r15.rank === 3 && (i = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]])); let p = e; - p.rank === 3 && (p = W(e, [1, e.shape[0], e.shape[1], e.shape[2]])), $(i.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`), $(p.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`), $(t10.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${t10}.`); - let u = s === "NHWC" ? i.shape[3] : i.shape[1], l = s === "NHWC" ? p.shape[3] : p.shape[1]; - $(u === t10[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t10[2]}.`), $(l === t10[3], () => `Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${t10[3]}).`), zt("conv2dDerFilter", n, a); - let c = { x: i, dy: p }, m = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, filterShape: t10 }; - return _.runKernel(Ui, c, m); -} -var WN = N({ conv2DBackpropFilter_: yX }); -function tp(r16, e, t10) { + p.rank === 3 && (p = W(e, [1, e.shape[0], e.shape[1], e.shape[2]])), E(i.rank === 4, () => `Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`), E(p.rank === 4, () => `Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`), E(t10.length === 4, () => `Error in conv2dDerFilter: filterShape must be length 4, but got ${t10}.`); + let u = s === "NHWC" ? i.shape[3] : i.shape[1], c = s === "NHWC" ? p.shape[3] : p.shape[1]; + E(u === t10[2], () => `Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t10[2]}.`), E(c === t10[3], () => `Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t10[3]}).`), Lt("conv2dDerFilter", n, a); + let l = { x: i, dy: p }, m = { strides: o, pad: n, dataFormat: s, dimRoundingMode: a, filterShape: t10 }; + return T.runKernel(Fi, l, m); +} +var oN = N({ conv2DBackpropFilter_: J6 }); +function Xu(r15, e, t10) { if (t10 == null || t10 === "linear") - return r16; + return r15; if (t10 === "relu") - return se(r16, of(e)); + return se(r15, qd(e)); throw new Error(`Cannot compute gradient for fused activation ${t10}.`); } -function rp(r16, e) { - let t10 = e, o = Td(r16.shape, e.shape); - return o.length > 0 && (t10 = ot(t10, o)), W(t10, r16.shape); +function Yu(r15, e) { + let t10 = e, o = xd(r15.shape, e.shape); + return o.length > 0 && (t10 = ot(t10, o)), W(t10, r15.shape); } -function op(r16, e, t10, o) { +function Qu(r15, e, t10, o) { if (e === "linear") - return r16; + return r15; if (e === "relu") - return yu(r16); + return lu(r15); if (e === "elu") - return Ed(r16); + return bd(r15); if (e === "relu6") - return Jd(r16); + return Ud(r15); if (e === "prelu") - return Kd(r16, t10); + return Od(r15, t10); if (e === "leakyrelu") - return Fd(r16, o); + return vd(r15, o); if (e === "sigmoid") - return Pa(r16); + return Ea(r15); throw new Error(`Unknown fused activation ${e}.`); } -var np = (r16, e) => !(r16 > 0) || e === "linear"; -function bX({ x: r16, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: l }) { - if (p = p || "linear", np(_.state.gradientDepth, p) === false) { - $(n === "NHWC", () => `Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); - let T = du(r16, e, t10, o, n, s, a); - return i != null && (T = Ce(T, i)), op(T, p, u, l); +var Zu = (r15, e) => !(r15 > 0) || e === "linear"; +function ej({ x: r15, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (p = p || "linear", Zu(T.state.gradientDepth, p) === false) { + E(n === "NHWC", () => `Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`); + let _ = au(r15, e, t10, o, n, s, a); + return i != null && (_ = Ce(_, i)), Qu(_, p, u, c); } - let c = v(r16, "x", "conv2d", "float32"), m = v(e, "filter", "conv2d", "float32"), d = c, f = false; - c.rank === 3 && (f = true, d = W(c, [1, c.shape[0], c.shape[1], c.shape[2]])), $(d.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`), $(m.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`), zt("fused conv2d", o, a); + let l = v(r15, "x", "conv2d", "float32"), m = v(e, "filter", "conv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), E(d.rank === 4, () => `Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`), E(m.rank === 4, () => `Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`), Lt("fused conv2d", o, a); let h = n === "NHWC" ? d.shape[3] : d.shape[1]; - $(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), $(br(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`); - let g = Ku(d.shape, m.shape, t10, s, o, a), x; - i != null && (x = v(i, "bias", "fused conv2d"), [x] = Oe(x, c), n === "NHWC" ? rt(g.outShape, x.shape) : ($(x.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`), $(x.shape.length === 0 || x.shape[0] === g.outChannels || x.shape[0] === 1, () => `Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`))); + E(m.shape[2] === h, () => `Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`), E(gr(t10, s), () => `Error in conv2D: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`); + let g = zu(d.shape, m.shape, t10, s, o, a), x; + i != null && (x = v(i, "bias", "fused conv2d"), [x] = Oe(x, l), n === "NHWC" ? rt(g.outShape, x.shape) : (E(x.shape.length <= 1, () => `Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`), E(x.shape.length === 0 || x.shape[0] === g.outChannels || x.shape[0] === 1, () => `Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`))); let b; if (u != null) { - let T = u.shape; - if ($(T.length <= 1 || T.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${T.length}.`), T.length === 1) - $(T[0] === 1 || T[0] === g.outChannels, () => `Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the number of output channels (${g.outChannels}).`); - else if (T.length === 3) + let _ = u.shape; + if (E(_.length <= 1 || _.length === 3, () => `Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`), _.length === 1) + E(_[0] === 1 || _[0] === g.outChannels, () => `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`); + else if (_.length === 3) try { - rt(T, g.outShape); - } catch (E) { - let R = `Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the output shape of the conv2d (${g.outShape}).`; + rt(_, g.outShape); + } catch ($) { + let R = `Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`; throw Error(R); } b = v(u, "prelu weights", "fused conv2d"); } - let w = (T, E) => { - $(n === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`); - let [R, D, F, O] = E, M = tp(T, F, p); - $(Hu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); - let L = Nd(D.shape, M, R, t10, o), B = WN(D, M, R.shape, t10, o), z = [L, B]; + let C = (_, $) => { + E(n === "NHWC", () => `Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`); + let [R, D, P, O] = $, M = Xu(_, P, p); + E(Bu(s), () => `Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`); + let L = gd(D.shape, M, R, t10, o), B = oN(D, M, R.shape, t10, o), z = [L, B]; if (O != null) { - let U = rp(O, M); + let U = Yu(O, M); z.push(U); } return z; - }, S = { x: d, filter: m, bias: x, preluActivationWeights: b }, k = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: l }; - return i == null ? Nr((E, R, D) => { - let F = _.runKernel(jo, S, k); - return D([R, E, F]), f && (F = W(F, [F.shape[1], F.shape[2], F.shape[3]])), { value: F, gradFunc: w }; - })(d, m) : Nr((E, R, D, F) => { - let O = _.runKernel(jo, S, k); - return F([R, E, O, D]), f && (O = W(O, [O.shape[1], O.shape[2], O.shape[3]])), { value: O, gradFunc: w }; + }, S = { x: d, filter: m, bias: x, preluActivationWeights: b }, k = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; + return i == null ? Ir(($, R, D) => { + let P = T.runKernel(Io, S, k); + return D([R, $, P]), f && (P = W(P, [P.shape[1], P.shape[2], P.shape[3]])), { value: P, gradFunc: C }; + })(d, m) : Ir(($, R, D, P) => { + let O = T.runKernel(Io, S, k); + return P([R, $, O, D]), f && (O = W(O, [O.shape[1], O.shape[2], O.shape[3]])), { value: O, gradFunc: C }; })(d, m, x); } -var UN = N({ fusedConv2d_: bX }); -function CX(r16, e, t10, o, n, s = [1, 1], a) { - let i = r16; - r16.rank === 3 && (i = W(r16, [1, r16.shape[0], r16.shape[1], r16.shape[2]])); +var nN = N({ fusedConv2d_: ej }); +function tj(r15, e, t10, o, n, s = [1, 1], a) { + let i = r15; + r15.rank === 3 && (i = W(r15, [1, r15.shape[0], r15.shape[1], r15.shape[2]])); let p = e; p.rank === 3 && (p = W(e, [1, e.shape[0], e.shape[1], e.shape[2]])); - let u = { x: i, dy: p }, l = { strides: o, pad: n, dimRoundingMode: a, dilations: s, filterShape: t10 }; - return _.runKernel(Gi, u, l); + let u = { x: i, dy: p }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, filterShape: t10 }; + return T.runKernel(Pi, u, c); } -var GN = N({ depthwiseConv2dNativeBackpropFilter_: CX }); -function wX(r16, e, t10, o, n, s = [1, 1], a) { +var sN = N({ depthwiseConv2dNativeBackpropFilter_: tj }); +function rj(r15, e, t10, o, n, s = [1, 1], a) { let i = e, p = false; e.rank === 3 && (p = true, i = W(e, [1, e.shape[0], e.shape[1], e.shape[2]])); - let u = { dy: i, filter: t10 }, l = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r16 }, c = _.runKernel(Hi, u, l); - return p ? W(c, [c.shape[1], c.shape[2], c.shape[3]]) : c; -} -var HN = N({ depthwiseConv2dNativeBackpropInput_: wX }); -function SX({ x: r16, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: l }) { - if (np(_.state.gradientDepth, p) === false) { - let k = cl(r16, e, t10, o, n, s, a); - return i != null && (k = Ce(k, i)), op(k, p, u, l); - } - let c = v(r16, "x", "depthwiseConv2d", "float32"), m = v(e, "filter", "depthwiseConv2d", "float32"), d = c, f = false; - c.rank === 3 && (f = true, d = W(c, [1, c.shape[0], c.shape[1], c.shape[2]])), $(d.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`), $(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), $(d.shape[3] === m.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`), s == null && (s = [1, 1]), $(br(t10, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), zt("fused depthwiseConv2d", o, a); - let h = Ku(d.shape, m.shape, t10, s, o, a, true), g; - i != null && (g = v(i, "bias", "fused conv2d"), [g] = Oe(g, c), rt(h.outShape, g.shape)); + let u = { dy: i, filter: t10 }, c = { strides: o, pad: n, dimRoundingMode: a, dilations: s, inputShape: r15 }, l = T.runKernel(Oi, u, c); + return p ? W(l, [l.shape[1], l.shape[2], l.shape[3]]) : l; +} +var aN = N({ depthwiseConv2dNativeBackpropInput_: rj }); +function oj({ x: r15, filter: e, strides: t10, pad: o, dataFormat: n = "NHWC", dilations: s = [1, 1], dimRoundingMode: a, bias: i, activation: p = "linear", preluActivationWeights: u, leakyreluAlpha: c }) { + if (Zu(T.state.gradientDepth, p) === false) { + let k = sc(r15, e, t10, o, n, s, a); + return i != null && (k = Ce(k, i)), Qu(k, p, u, c); + } + let l = v(r15, "x", "depthwiseConv2d", "float32"), m = v(e, "filter", "depthwiseConv2d", "float32"), d = l, f = false; + l.rank === 3 && (f = true, d = W(l, [1, l.shape[0], l.shape[1], l.shape[2]])), E(d.rank === 4, () => `Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`), E(m.rank === 4, () => `Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`), E(d.shape[3] === m.shape[2], () => `Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`), s == null && (s = [1, 1]), E(gr(t10, s), () => `Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t10} and dilations '${s}'`), Lt("fused depthwiseConv2d", o, a); + let h = zu(d.shape, m.shape, t10, s, o, a, true), g; + i != null && (g = v(i, "bias", "fused conv2d"), [g] = Oe(g, l), rt(h.outShape, g.shape)); let x; u != null && (x = v(u, "prelu weights", "fused depthwiseConv2d")); - let b = (k, T) => { - $(Hu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); - let [E, R, D, F] = T, O = tp(k, D, p), M = HN(R.shape, O, E, t10, o, s, a), L = GN(R, O, E.shape, t10, o, s, a); - if (F != null) { - let B = rp(g, O); + let b = (k, _) => { + E(Bu(s), () => `Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`); + let [$, R, D, P] = _, O = Xu(k, D, p), M = aN(R.shape, O, $, t10, o, s, a), L = sN(R, O, $.shape, t10, o, s, a); + if (P != null) { + let B = Yu(g, O); return [M, L, B]; } return [M, L]; - }, w = { x: d, filter: m, bias: g, preluActivationWeights: x }, S = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: l }; - return i == null ? Nr((T, E, R) => { - let D = _.runKernel(Xo, w, S); - return R([E, T, D]), f && (D = W(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: b }; - })(d, m) : Nr((T, E, R, D) => { - let F = _.runKernel(Xo, w, S); - return D([E, T, F, R]), f && (F = W(F, [F.shape[1], F.shape[2], F.shape[3]])), { value: F, gradFunc: b }; + }, C = { x: d, filter: m, bias: g, preluActivationWeights: x }, S = { strides: t10, pad: o, dataFormat: n, dilations: s, dimRoundingMode: a, activation: p, leakyreluAlpha: c }; + return i == null ? Ir((_, $, R) => { + let D = T.runKernel(vo, C, S); + return R([$, _, D]), f && (D = W(D, [D.shape[1], D.shape[2], D.shape[3]])), { value: D, gradFunc: b }; + })(d, m) : Ir((_, $, R, D) => { + let P = T.runKernel(vo, C, S); + return D([$, _, P, R]), f && (P = W(P, [P.shape[1], P.shape[2], P.shape[3]])), { value: P, gradFunc: b }; })(d, m, g); } -var KN = N({ fusedDepthwiseConv2d_: SX }); -function IX({ a: r16, b: e, transposeA: t10 = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { - if (np(_.state.gradientDepth, s) === false) { - let O = Je(r16, e, t10, o); - return n != null && (O = Ce(O, n)), op(O, s, a, i); +var iN = N({ fusedDepthwiseConv2d_: oj }); +function nj({ a: r15, b: e, transposeA: t10 = false, transposeB: o = false, bias: n, activation: s = "linear", preluActivationWeights: a, leakyreluAlpha: i = 0.2 }) { + if (Zu(T.state.gradientDepth, s) === false) { + let O = Ze(r15, e, t10, o); + return n != null && (O = Ce(O, n)), Qu(O, s, a, i); } - let p = v(r16, "a", "fused matMul"), u = v(e, "b", "fused matMul"); + let p = v(r15, "a", "fused matMul"), u = v(e, "b", "fused matMul"); [p, u] = Oe(p, u); - let l = t10 ? p.shape[p.rank - 2] : p.shape[p.rank - 1], c = o ? u.shape[u.rank - 1] : u.shape[u.rank - 2], m = t10 ? p.shape[p.rank - 1] : p.shape[p.rank - 2], d = o ? u.shape[u.rank - 2] : u.shape[u.rank - 1], f = p.shape.slice(0, -2), h = u.shape.slice(0, -2), g = ze(f), x = ze(h); - $(l === c, () => `Error in fused matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let w = rt(p.shape.slice(0, -2), u.shape.slice(0, -2)).concat([m, d]), S = t10 ? W(p, [g, l, m]) : W(p, [g, m, l]), k = o ? W(u, [x, d, c]) : W(u, [x, c, d]), T; - n != null && (T = v(n, "bias", "fused matMul"), [T] = Oe(T, p), rt(w, T.shape)); - let E; - a != null && (E = v(a, "prelu weights", "fused matMul")); + let c = t10 ? p.shape[p.rank - 2] : p.shape[p.rank - 1], l = o ? u.shape[u.rank - 1] : u.shape[u.rank - 2], m = t10 ? p.shape[p.rank - 1] : p.shape[p.rank - 2], d = o ? u.shape[u.rank - 2] : u.shape[u.rank - 1], f = p.shape.slice(0, -2), h = u.shape.slice(0, -2), g = ze(f), x = ze(h); + E(c === l, () => `Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t10} and transposeB=${o} must match.`); + let C = rt(p.shape.slice(0, -2), u.shape.slice(0, -2)).concat([m, d]), S = t10 ? W(p, [g, c, m]) : W(p, [g, m, c]), k = o ? W(u, [x, d, l]) : W(u, [x, l, d]), _; + n != null && (_ = v(n, "bias", "fused matMul"), [_] = Oe(_, p), rt(C, _.shape)); + let $; + a != null && ($ = v(a, "prelu weights", "fused matMul")); let R = (O, M) => { - let [L, B, z, U] = M, j = tp(W(O, z.shape), z, s), q, Y; - if (!t10 && !o ? (q = Je(j, B, false, true), Y = Je(L, j, true, false)) : !t10 && o ? (q = Je(j, B, false, false), Y = Je(j, L, true, false)) : t10 && !o ? (q = Je(B, j, false, true), Y = Je(L, j, false, false)) : (q = Je(B, j, true, true), Y = Je(j, L, true, true)), n != null) { - let J = rp(U, j); + let [L, B, z, U] = M, j = Xu(W(O, z.shape), z, s), q, Y; + if (!t10 && !o ? (q = Ze(j, B, false, true), Y = Ze(L, j, true, false)) : !t10 && o ? (q = Ze(j, B, false, false), Y = Ze(j, L, true, false)) : t10 && !o ? (q = Ze(B, j, false, true), Y = Ze(L, j, false, false)) : (q = Ze(B, j, true, true), Y = Ze(j, L, true, true)), n != null) { + let J = Yu(U, j); return [q, Y, J]; } else return [q, Y]; - }, D = { a: S, b: k, bias: T, preluActivationWeights: E }, F = { transposeA: t10, transposeB: o, activation: s, leakyreluAlpha: i }; - return n == null ? Nr((M, L, B) => { - let z = _.runKernel(qo, D, F); - return B([M, L, z]), { value: W(z, w), gradFunc: R }; - })(S, k) : Nr((M, L, B, z) => { - let U = _.runKernel(qo, D, F); - return z([M, L, U, B]), { value: W(U, w), gradFunc: R }; - })(S, k, T); -} -var qN = N({ fusedMatMul_: IX }); -function vX(r16) { - return Mc(r16, 0.54, 0.46); -} -var jN = N({ hammingWindow_: vX }); -function kX(r16) { - return Mc(r16, 0.5, 0.5); -} -var uf = N({ hannWindow_: kX }); -function NX(r16, e, t10, o = false, n = 0) { + }, D = { a: S, b: k, bias: _, preluActivationWeights: $ }, P = { transposeA: t10, transposeB: o, activation: s, leakyreluAlpha: i }; + return n == null ? Ir((M, L, B) => { + let z = T.runKernel(So, D, P); + return B([M, L, z]), { value: W(z, C), gradFunc: R }; + })(S, k) : Ir((M, L, B, z) => { + let U = T.runKernel(So, D, P); + return z([M, L, U, B]), { value: W(U, C), gradFunc: R }; + })(S, k, _); +} +var uN = N({ fusedMatMul_: nj }); +function sj(r15) { + return $l(r15, 0.54, 0.46); +} +var pN = N({ hammingWindow_: sj }); +function aj(r15) { + return $l(r15, 0.5, 0.5); +} +var Qd = N({ hannWindow_: aj }); +function ij(r15, e, t10, o = false, n = 0) { let s = 0, a = []; - for (; s + e <= r16.size; ) - a.push(Ye(r16, s, e)), s += t10; + for (; s + e <= r15.size; ) + a.push(Xe(r15, s, e)), s += t10; if (o) - for (; s < r16.size; ) { - let i = s + e - r16.size, p = bt([Ye(r16, s, e - i), Ma([i], n)]); + for (; s < r15.size; ) { + let i = s + e - r15.size, p = yt([Xe(r15, s, e - i), $a([i], n)]); a.push(p), s += t10; } - return a.length === 0 ? bu([], [0, e]) : W(bt(a), [a.length, e]); -} -var pf = N({ frame_: NX }); -function TX(r16, e, t10, o, n = uf) { - o == null && (o = cS(e)); - let s = pf(r16, e, t10), a = se(s, n(e)); - return hl(a, o); -} -var XN = N({ stft_: TX }); -function _X(r16, e, t10, o, n = "bilinear", s = 0) { - let a = v(r16, "image", "cropAndResize"), i = v(e, "boxes", "cropAndResize", "float32"), p = v(t10, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; - $(a.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && i.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`), $(p.rank === 1 && p.shape[0] === u, () => `Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`), $(o.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`), $(o[0] >= 1 && o[1] >= 1, () => `cropSize must be atleast [1,1], but was ${o}`), $(n === "bilinear" || n === "nearest", () => `method must be bilinear or nearest, but was ${n}`); - let l = { image: a, boxes: i, boxInd: p }, c = { method: n, extrapolationValue: s, cropSize: o }; - return _.runKernel(Mn, l, c); -} -var YN = N({ cropAndResize_: _X }); -function EX(r16) { - let e = v(r16, "image", "flipLeftRight", "float32"); - $(e.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`); + return a.length === 0 ? mu([], [0, e]) : W(yt(a), [a.length, e]); +} +var Zd = N({ frame_: ij }); +function uj(r15, e, t10, o, n = Qd) { + o == null && (o = Zw(e)); + let s = Zd(r15, e, t10), a = se(s, n(e)); + return pc(a, o); +} +var cN = N({ stft_: uj }); +function pj(r15, e, t10, o, n = "bilinear", s = 0) { + let a = v(r15, "image", "cropAndResize"), i = v(e, "boxes", "cropAndResize", "float32"), p = v(t10, "boxInd", "cropAndResize", "int32"), u = i.shape[0]; + E(a.rank === 4, () => `Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`), E(i.rank === 2 && i.shape[1] === 4, () => `Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`), E(p.rank === 1 && p.shape[0] === u, () => `Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`), E(o.length === 2, () => `Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`), E(o[0] >= 1 && o[1] >= 1, () => `cropSize must be atleast [1,1], but was ${o}`), E(n === "bilinear" || n === "nearest", () => `method must be bilinear or nearest, but was ${n}`); + let c = { image: a, boxes: i, boxInd: p }, l = { method: n, extrapolationValue: s, cropSize: o }; + return T.runKernel(cn, c, l); +} +var lN = N({ cropAndResize_: pj }); +function cj(r15) { + let e = v(r15, "image", "flipLeftRight", "float32"); + E(e.rank === 4, () => `Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`); let t10 = { image: e }; - return _.runKernel(Gn, t10, {}); + return T.runKernel(Cn, t10, {}); } -var QN = N({ flipLeftRight_: EX }); -function $X(r16) { - let e = v(r16, "image", "grayscaleToRGB"), t10 = e.rank - 1, o = e.shape[t10]; - $(e.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`), $(o === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`); +var mN = N({ flipLeftRight_: cj }); +function lj(r15) { + let e = v(r15, "image", "grayscaleToRGB"), t10 = e.rank - 1, o = e.shape[t10]; + E(e.rank >= 2, () => `Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`), E(o === 1, () => `Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`); let n = new Array(e.rank); - return n.fill(1, 0, t10), n[t10] = 3, hu(e, n); + return n.fill(1, 0, t10), n[t10] = 3, uu(e, n); } -var ZN = N({ grayscaleToRGB_: $X }); -function RX(r16) { - let e = v(r16, "image", "RGBToGrayscale"), t10 = e.rank - 1, o = e.shape[t10]; - $(e.rank >= 2, () => `Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`), $(o === 3, () => `Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`); - let n = e.dtype, s = Ue(e, "float32"), a = rr([0.2989, 0.587, 0.114]), i; +var dN = N({ grayscaleToRGB_: lj }); +function mj(r15) { + let e = v(r15, "image", "RGBToGrayscale"), t10 = e.rank - 1, o = e.shape[t10]; + E(e.rank >= 2, () => `Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`), E(o === 3, () => `Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`); + let n = e.dtype, s = Ue(e, "float32"), a = Jt([0.2989, 0.587, 0.114]), i; switch (e.rank) { case 2: - i = fu("ij,j->i", s, a); + i = iu("ij,j->i", s, a); break; case 3: - i = fu("ijk,k->ij", s, a); + i = iu("ijk,k->ij", s, a); break; case 4: - i = fu("ijkl,l->ijk", s, a); + i = iu("ijkl,l->ijk", s, a); break; case 5: - i = fu("ijklm,m->ijkl", s, a); + i = iu("ijklm,m->ijkl", s, a); break; case 6: - i = fu("ijklmn,n->ijklm", s, a); + i = iu("ijklmn,n->ijklm", s, a); break; default: throw new Error("Not a valid tensor rank."); } - return i = Ks(i, -1), Ue(i, n); + return i = Ms(i, -1), Ue(i, n); } -var JN = N({ rgbToGrayscale_: RX }); -function DX(r16, e, t10 = 0, o = 0.5) { - let n = v(r16, "image", "rotateWithOffset", "float32"); - $(n.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`); +var fN = N({ rgbToGrayscale_: mj }); +function dj(r15, e, t10 = 0, o = 0.5) { + let n = v(r15, "image", "rotateWithOffset", "float32"); + E(n.rank === 4, () => `Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`); let s = { image: n }, a = { radians: e, fillValue: t10, center: o }; - return _.runKernel(Vs, s, a); + return T.runKernel(Ds, s, a); } -var eT = N({ rotateWithOffset_: DX }); -function en(r16, e, t10, o, n, s) { +var hN = N({ rotateWithOffset_: dj }); +function Eo(r15, e, t10, o, n, s) { o == null && (o = 0.5), n == null && (n = Number.NEGATIVE_INFINITY), s == null && (s = 0); - let a = r16.shape[0]; - return t10 = Math.min(t10, a), $(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), $(r16.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r16.rank}'`), $(r16.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r16.shape[1]}`), $(e.rank === 1, () => "scores must be a 1D tensor"), $(e.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`), $(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; + let a = r15.shape[0]; + return t10 = Math.min(t10, a), E(0 <= o && o <= 1, () => `iouThreshold must be in [0, 1], but was '${o}'`), E(r15.rank === 2, () => `boxes must be a 2D tensor, but was of rank '${r15.rank}'`), E(r15.shape[1] === 4, () => `boxes must have 4 columns, but 2nd dimension was ${r15.shape[1]}`), E(e.rank === 1, () => "scores must be a 1D tensor"), E(e.shape[0] === a, () => `scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`), E(0 <= s && s <= 1, () => `softNmsSigma must be in [0, 1], but was '${s}'`), { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }; } -function AX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r16, "boxes", "nonMaxSuppression", "float32"), a = v(e, "scores", "nonMaxSuppression", "float32"), i = en(s, a, t10, o, n); +function fj(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r15, "boxes", "nonMaxSuppression", "float32"), a = v(e, "scores", "nonMaxSuppression", "float32"), i = Eo(s, a, t10, o, n); t10 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; let p = { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n }; - return _.runKernel(cs, { boxes: s, scores: a }, p); + return T.runKernel(Qn, { boxes: s, scores: a }, p); } -var tT = N({ nonMaxSuppression_: AX }); -function rT(r16, e, t10) { - let o = FX(r16, e, t10), n = o < 0 ? -(o + 1) : o; - r16.splice(n, 0, e); +var gN = N({ nonMaxSuppression_: fj }); +function xN(r15, e, t10) { + let o = hj(r15, e, t10), n = o < 0 ? -(o + 1) : o; + r15.splice(n, 0, e); } -function FX(r16, e, t10) { - return OX(r16, e, t10 || PX); +function hj(r15, e, t10) { + return xj(r15, e, t10 || gj); } -function PX(r16, e) { - return r16 > e ? 1 : r16 < e ? -1 : 0; +function gj(r15, e) { + return r15 > e ? 1 : r15 < e ? -1 : 0; } -function OX(r16, e, t10) { - let o = 0, n = r16.length, s = 0, a = false; +function xj(r15, e, t10) { + let o = 0, n = r15.length, s = 0, a = false; for (; o < n; ) { s = o + (n - o >>> 1); - let i = t10(e, r16[s]); + let i = t10(e, r15[s]); i > 0 ? o = s + 1 : (n = s, a = !i); } return a ? o : -o - 1; } -function lf(r16, e, t10, o, n) { - return dS(r16, e, t10, o, n, 0); +function Jd(r15, e, t10, o, n) { + return eS(r15, e, t10, o, n, 0); } -function cf(r16, e, t10, o, n, s) { - return dS(r16, e, t10, o, n, 0, false, s, true); +function ef(r15, e, t10, o, n, s) { + return eS(r15, e, t10, o, n, 0, false, s, true); } -function mf(r16, e, t10, o, n, s) { - return dS(r16, e, t10, o, n, s, true); +function tf(r15, e, t10, o, n, s) { + return eS(r15, e, t10, o, n, s, true); } -function dS(r16, e, t10, o, n, s, a = false, i = false, p = false) { +function eS(r15, e, t10, o, n, s, a = false, i = false, p = false) { let u = []; for (let g = 0; g < e.length; g++) e[g] > n && u.push({ score: e[g], boxIndex: g, suppressBeginIndex: 0 }); - u.sort(oT); - let l = s > 0 ? -0.5 / s : 0, c = [], m = []; - for (; c.length < t10 && u.length > 0; ) { - let g = u.pop(), { score: x, boxIndex: b, suppressBeginIndex: w } = g; + u.sort(yN); + let c = s > 0 ? -0.5 / s : 0, l = [], m = []; + for (; l.length < t10 && u.length > 0; ) { + let g = u.pop(), { score: x, boxIndex: b, suppressBeginIndex: C } = g; if (x < n) break; let S = false; - for (let k = c.length - 1; k >= w; --k) { - let T = MX(r16, b, c[k]); - if (T >= o) { + for (let k = l.length - 1; k >= C; --k) { + let _ = yj(r15, b, l[k]); + if (_ >= o) { S = true; break; } - if (g.score = g.score * LX(o, l, T), g.score <= n) + if (g.score = g.score * bj(o, c, _), g.score <= n) break; } - g.suppressBeginIndex = c.length, S || (g.score === x ? (c.push(b), m.push(g.score)) : g.score > n && rT(u, g, oT)); + g.suppressBeginIndex = l.length, S || (g.score === x ? (l.push(b), m.push(g.score)) : g.score > n && xN(u, g, yN)); } - let d = c.length, f = t10 - d; - i && f > 0 && (c.push(...new Array(f).fill(0)), m.push(...new Array(f).fill(0))); - let h = { selectedIndices: c }; + let d = l.length, f = t10 - d; + i && f > 0 && (l.push(...new Array(f).fill(0)), m.push(...new Array(f).fill(0))); + let h = { selectedIndices: l }; return a && (h.selectedScores = m), p && (h.validOutputs = d), h; } -function MX(r16, e, t10) { - let o = r16.subarray(e * 4, e * 4 + 4), n = r16.subarray(t10 * 4, t10 * 4 + 4), s = Math.min(o[0], o[2]), a = Math.min(o[1], o[3]), i = Math.max(o[0], o[2]), p = Math.max(o[1], o[3]), u = Math.min(n[0], n[2]), l = Math.min(n[1], n[3]), c = Math.max(n[0], n[2]), m = Math.max(n[1], n[3]), d = (i - s) * (p - a), f = (c - u) * (m - l); +function yj(r15, e, t10) { + let o = r15.subarray(e * 4, e * 4 + 4), n = r15.subarray(t10 * 4, t10 * 4 + 4), s = Math.min(o[0], o[2]), a = Math.min(o[1], o[3]), i = Math.max(o[0], o[2]), p = Math.max(o[1], o[3]), u = Math.min(n[0], n[2]), c = Math.min(n[1], n[3]), l = Math.max(n[0], n[2]), m = Math.max(n[1], n[3]), d = (i - s) * (p - a), f = (l - u) * (m - c); if (d <= 0 || f <= 0) return 0; - let h = Math.max(s, u), g = Math.max(a, l), x = Math.min(i, c), b = Math.min(p, m), w = Math.max(x - h, 0) * Math.max(b - g, 0); - return w / (d + f - w); + let h = Math.max(s, u), g = Math.max(a, c), x = Math.min(i, l), b = Math.min(p, m), C = Math.max(x - h, 0) * Math.max(b - g, 0); + return C / (d + f - C); } -function LX(r16, e, t10) { +function bj(r15, e, t10) { let o = Math.exp(e * t10 * t10); - return t10 <= r16 ? o : 0; + return t10 <= r15 ? o : 0; } -function oT(r16, e) { - return r16.score - e.score || r16.score === e.score && e.boxIndex - r16.boxIndex; +function yN(r15, e) { + return r15.score - e.score || r15.score === e.score && e.boxIndex - r15.boxIndex; } -async function BX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { - let s = v(r16, "boxes", "nonMaxSuppressionAsync"), a = v(e, "scores", "nonMaxSuppressionAsync"), i = en(s, a, t10, o, n); +async function Cj(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY) { + let s = v(r15, "boxes", "nonMaxSuppressionAsync"), a = v(e, "scores", "nonMaxSuppressionAsync"), i = Eo(s, a, t10, o, n); t10 = i.maxOutputSize, o = i.iouThreshold, n = i.scoreThreshold; - let p = await Promise.all([s.data(), a.data()]), u = p[0], l = p[1], { selectedIndices: c } = lf(u, l, t10, o, n); - return s !== r16 && s.dispose(), a !== e && a.dispose(), rr(c, "int32"); + let p = await Promise.all([s.data(), a.data()]), u = p[0], c = p[1], { selectedIndices: l } = Jd(u, c, t10, o, n); + return s !== r15 && s.dispose(), a !== e && a.dispose(), Jt(l, "int32"); } -var nT = BX; -function zX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r16, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = en(a, i, t10, o, n, s); +var bN = Cj; +function wj(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r15, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = Eo(a, i, t10, o, n, s); t10 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; - let u = { boxes: a, scores: i }, l = { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, c = _.runKernel(ms, u, l); - return { selectedIndices: c[0], selectedScores: c[1] }; + let u = { boxes: a, scores: i }, c = { maxOutputSize: t10, iouThreshold: o, scoreThreshold: n, softNmsSigma: s }, l = T.runKernel(Zn, u, c); + return { selectedIndices: l[0], selectedScores: l[1] }; } -var sT = N({ nonMaxSuppressionWithScore_: zX }); -async function VX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { - let a = v(r16, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = en(a, i, t10, o, n, s); +var CN = N({ nonMaxSuppressionWithScore_: wj }); +async function Sj(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = 0) { + let a = v(r15, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = Eo(a, i, t10, o, n, s); t10 = p.maxOutputSize, o = p.iouThreshold, n = p.scoreThreshold, s = p.softNmsSigma; - let u = await Promise.all([a.data(), i.data()]), l = u[0], c = u[1], { selectedIndices: m, selectedScores: d } = mf(l, c, t10, o, n, s); - return a !== r16 && a.dispose(), i !== e && i.dispose(), { selectedIndices: rr(m, "int32"), selectedScores: rr(d) }; + let u = await Promise.all([a.data(), i.data()]), c = u[0], l = u[1], { selectedIndices: m, selectedScores: d } = tf(c, l, t10, o, n, s); + return a !== r15 && a.dispose(), i !== e && i.dispose(), { selectedIndices: Jt(m, "int32"), selectedScores: Jt(d) }; } -var aT = VX; -function WX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r16, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = en(a, i, t10, o, n, null), u = p.maxOutputSize, l = p.iouThreshold, c = p.scoreThreshold, m = { boxes: a, scores: i }, d = { maxOutputSize: u, iouThreshold: l, scoreThreshold: c, padToMaxOutputSize: s }, f = _.runKernel(ni, m, d); +var wN = Sj; +function Ij(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r15, "boxes", "nonMaxSuppression"), i = v(e, "scores", "nonMaxSuppression"), p = Eo(a, i, t10, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, m = { boxes: a, scores: i }, d = { maxOutputSize: u, iouThreshold: c, scoreThreshold: l, padToMaxOutputSize: s }, f = T.runKernel(Qa, m, d); return { selectedIndices: f[0], validOutputs: f[1] }; } -var iT = N({ nonMaxSuppressionPadded_: WX }); -async function UX(r16, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { - let a = v(r16, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = en(a, i, t10, o, n, null), u = p.maxOutputSize, l = p.iouThreshold, c = p.scoreThreshold, [m, d] = await Promise.all([a.data(), i.data()]), { selectedIndices: f, validOutputs: h } = cf(m, d, u, l, c, s); - return a !== r16 && a.dispose(), i !== e && i.dispose(), { selectedIndices: rr(f, "int32"), validOutputs: ke(h, "int32") }; +var SN = N({ nonMaxSuppressionPadded_: Ij }); +async function vj(r15, e, t10, o = 0.5, n = Number.NEGATIVE_INFINITY, s = false) { + let a = v(r15, "boxes", "nonMaxSuppressionAsync"), i = v(e, "scores", "nonMaxSuppressionAsync"), p = Eo(a, i, t10, o, n, null), u = p.maxOutputSize, c = p.iouThreshold, l = p.scoreThreshold, [m, d] = await Promise.all([a.data(), i.data()]), { selectedIndices: f, validOutputs: h } = ef(m, d, u, c, l, s); + return a !== r15 && a.dispose(), i !== e && i.dispose(), { selectedIndices: Jt(f, "int32"), validOutputs: ke(h, "int32") }; } -var uT = UX; -function GX(r16, e, t10 = false, o = false) { - let n = v(r16, "images", "resizeBilinear"); - $(n.rank === 3 || n.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`), $(e.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${e}.`), $(o === false || t10 === false, () => "Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."); +var IN = vj; +function kj(r15, e, t10 = false, o = false) { + let n = v(r15, "images", "resizeBilinear"); + E(n.rank === 3 || n.rank === 4, () => `Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`), E(e.length === 2, () => `Error in resizeBilinear: new shape must 2D, but got shape ${e}.`), E(o === false || t10 === false, () => "Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."); let s = n, a = false; n.rank === 3 && (a = true, s = W(n, [1, n.shape[0], n.shape[1], n.shape[2]])); - let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = _.runKernel(Cs, i, p); + let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = T.runKernel(is, i, p); return a ? W(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; } -var pT = N({ resizeBilinear_: GX }); -function HX(r16, e, t10 = false, o = false) { - let n = v(r16, "images", "resizeNearestNeighbor"); - $(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), $(e.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`), $(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), $(o === false || t10 === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); +var vN = N({ resizeBilinear_: kj }); +function Nj(r15, e, t10 = false, o = false) { + let n = v(r15, "images", "resizeNearestNeighbor"); + E(n.rank === 3 || n.rank === 4, () => `Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`), E(e.length === 2, () => `Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`), E(n.dtype === "float32" || n.dtype === "int32", () => "`images` must have `int32` or `float32` as dtype"), E(o === false || t10 === false, () => "Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."); let s = n, a = false; n.rank === 3 && (a = true, s = W(n, [1, n.shape[0], n.shape[1], n.shape[2]])); - let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = _.runKernel(bs, i, p); + let [] = e, i = { images: s }, p = { alignCorners: t10, halfPixelCenters: o, size: e }, u = T.runKernel(as, i, p); return a ? W(u, [u.shape[1], u.shape[2], u.shape[3]]) : u; } -var lT = N({ resizeNearestNeighbor_: HX }); -function KX(r16, e = "binary", t10 = false, o = 0.5) { - let n = v(r16, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = se(rr([o]), 255), l, c, m, d; - if ($(n.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${n.rank}.`), $(n.shape[2] === 3 || n.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`), $(n.dtype === "int32" || n.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`), $(e === "otsu" || e === "binary", () => `Method must be binary or otsu, but was ${e}`), n.shape[2] === 3) { - [l, c, m] = Ci(n, [1, 1, 1], -1); - let g = se(l, s), x = se(c, a), b = se(m, i); +var kN = N({ resizeNearestNeighbor_: Nj }); +function Tj(r15, e = "binary", t10 = false, o = 0.5) { + let n = v(r15, "image", "threshold"), s = 0.2989, a = 0.587, i = 0.114, p = n.shape[0] * n.shape[1], u = se(Jt([o]), 255), c, l, m, d; + if (E(n.rank === 3, () => `Error in threshold: image must be rank 3,but got rank ${n.rank}.`), E(n.shape[2] === 3 || n.shape[2] === 1, () => `Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`), E(n.dtype === "int32" || n.dtype === "float32", () => `Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`), E(e === "otsu" || e === "binary", () => `Method must be binary or otsu, but was ${e}`), n.shape[2] === 3) { + [c, l, m] = li(n, [1, 1, 1], -1); + let g = se(c, s), x = se(l, a), b = se(m, i); d = Ce(Ce(g, x), b); } else - d = r16; + d = r15; if (e === "otsu") { - let g = kd(Ue(ef(d), "int32"), pr([]), 256); - u = qX(g, p); + let g = hd(Ue(Gd(d), "int32"), ar([]), 256); + u = _j(g, p); } - let f = t10 ? ml(d, u) : ju(d, u); + let f = t10 ? ac(d, u) : Wu(d, u); return Ue(se(f, 255), "int32"); } -function qX(r16, e) { - let t10 = rr([-1]), o = rr([0]), n = rr([0]), s, a, i, p, u, l; - for (let c = 0; c < r16.size - 1; c++) { - s = Ye(r16, 0, c + 1), a = Ye(r16, c + 1), u = Xe(ot(s), e), l = Xe(ot(a), e); - let m = ot(se(s, xu(0, s.size))); - i = Xe(m, ot(s)); - let d = Ma(a.shape, s.size), f = Ce(xu(0, a.size), d), h = se(a, f); - p = Xe(ot(h), ot(a)); - let g = Te(i, p), x = Te(i, p), b = se(u, l); +function _j(r15, e) { + let t10 = Jt([-1]), o = Jt([0]), n = Jt([0]), s, a, i, p, u, c; + for (let l = 0; l < r15.size - 1; l++) { + s = Xe(r15, 0, l + 1), a = Xe(r15, l + 1), u = je(ot(s), e), c = je(ot(a), e); + let m = ot(se(s, cu(0, s.size))); + i = je(m, ot(s)); + let d = $a(a.shape, s.size), f = Ce(cu(0, a.size), d), h = se(a, f); + p = je(ot(h), ot(a)); + let g = Te(i, p), x = Te(i, p), b = se(u, c); n = se(se(b, g), x); - let w = ju(n, o); - o = Lo(w, n, o), t10 = Lo(w, rr([c]), t10); + let C = Wu(n, o); + o = lo(C, n, o), t10 = lo(C, Jt([l]), t10); } return t10; } -var cT = N({ threshold_: KX }); -function jX(r16, e, t10 = "nearest", o = "constant", n = 0, s) { - let a = v(r16, "image", "transform", "float32"), i = v(e, "transforms", "transform", "float32"); - $(a.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${a.rank}.`), $(i.rank === 2 && (i.shape[0] === a.shape[0] || i.shape[0] === 1) && i.shape[1] === 8, () => "Error in transform: Input transform should be batch x 8 or 1 x 8"), $(s == null || s.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${s}.`); +var NN = N({ threshold_: Tj }); +function Ej(r15, e, t10 = "nearest", o = "constant", n = 0, s) { + let a = v(r15, "image", "transform", "float32"), i = v(e, "transforms", "transform", "float32"); + E(a.rank === 4, () => `Error in transform: image must be rank 4,but got rank ${a.rank}.`), E(i.rank === 2 && (i.shape[0] === a.shape[0] || i.shape[0] === 1) && i.shape[1] === 8, () => "Error in transform: Input transform should be batch x 8 or 1 x 8"), E(s == null || s.length === 2, () => `Error in transform: outputShape must be [height, width] or null, but got ${s}.`); let p = { image: a, transforms: i }, u = { interpolation: t10, fillMode: o, fillValue: n, outputShape: s }; - return _.runKernel(zs, p, u); + return T.runKernel(Rs, p, u); } -var mT = N({ transform_: jX }); -function XX(r16, e, t10) { - let o = v(r16, "a", "bandPart"); - $(o.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${o.rank}.`); +var TN = N({ transform_: Ej }); +function $j(r15, e, t10) { + let o = v(r15, "a", "bandPart"); + E(o.rank >= 2, () => `bandPart(): Rank must be at least 2, got ${o.rank}.`); let n = o.shape, [s, a] = o.shape.slice(-2), i, p; - typeof e == "number" ? ($(e % 1 === 0, () => `bandPart(): numLower must be an integer, got ${e}.`), $(e <= s, () => `bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`), i = v(e < 0 ? s : e, "numLower", "bandPart")) : ($(e.dtype === "int32", () => "bandPart(): numLower's dtype must be an int32."), i = Lo(Fc(e, 0), s, Qu(e, s))), typeof t10 == "number" ? ($(t10 % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${t10}.`), $(t10 <= a, () => `bandPart(): numUpper (${t10}) must not be greater than the number of columns (${a}).`), p = v(t10 < 0 ? a : t10, "numUpper", "bandPart")) : ($(t10.dtype === "int32", () => "bandPart(): numUpper's dtype must be an int32."), p = Lo(Fc(t10, 0), a, Qu(t10, a))); - let u = W(xu(0, s, 1, "int32"), [-1, 1]), l = xu(0, a, 1, "int32"), c = Te(u, l), m = Xu(ml(c, i), Ad(c, mr(p))), d = Yr([s, a], o.dtype); - return W(Tr(zo(W(o, [-1, s, a])).map((f) => Lo(m, f, d))), n); + typeof e == "number" ? (E(e % 1 === 0, () => `bandPart(): numLower must be an integer, got ${e}.`), E(e <= s, () => `bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`), i = v(e < 0 ? s : e, "numLower", "bandPart")) : (E(e.dtype === "int32", () => "bandPart(): numLower's dtype must be an int32."), i = lo(Tl(e, 0), s, Hu(e, s))), typeof t10 == "number" ? (E(t10 % 1 === 0, () => `bandPart(): numUpper must be an integer, got ${t10}.`), E(t10 <= a, () => `bandPart(): numUpper (${t10}) must not be greater than the number of columns (${a}).`), p = v(t10 < 0 ? a : t10, "numUpper", "bandPart")) : (E(t10.dtype === "int32", () => "bandPart(): numUpper's dtype must be an int32."), p = lo(Tl(t10, 0), a, Hu(t10, a))); + let u = W(cu(0, s, 1, "int32"), [-1, 1]), c = cu(0, a, 1, "int32"), l = Te(u, c), m = Uu(ac(l, i), Id(l, pr(p))), d = Gr([s, a], o.dtype); + return W(vr(fo(W(o, [-1, s, a])).map((f) => lo(m, f, d))), n); } -var dT = N({ bandPart_: XX }); -function YX(r16) { +var _N = N({ bandPart_: $j }); +function Rj(r15) { let e; - if (Array.isArray(r16)) { - e = false, $(r16 != null && r16.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); - let n = r16[0].shape[0]; - for (let s = 1; s < r16.length; ++s) - $(r16[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r16[s].shape[0]} vs. ${n})`); + if (Array.isArray(r15)) { + e = false, E(r15 != null && r15.length > 0, () => "Gram-Schmidt process: input must not be null, undefined, or empty"); + let n = r15[0].shape[0]; + for (let s = 1; s < r15.length; ++s) + E(r15[s].shape[0] === n, () => `Gram-Schmidt: Non-unique lengths found in the input vectors: (${r15[s].shape[0]} vs. ${n})`); } else - e = true, r16 = Ci(r16, r16.shape[0], 0).map((n) => gl(n, [0])); - $(r16.length <= r16[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r16.length}) exceeds number of dimensions (${r16[0].shape[0]}).`); - let t10 = [], o = r16; - for (let n = 0; n < r16.length; ++n) - t10.push(_.tidy(() => { + e = true, r15 = li(r15, r15.shape[0], 0).map((n) => cc(n, [0])); + E(r15.length <= r15[0].shape[0], () => `Gram-Schmidt: Number of vectors (${r15.length}) exceeds number of dimensions (${r15[0].shape[0]}).`); + let t10 = [], o = r15; + for (let n = 0; n < r15.length; ++n) + t10.push(T.tidy(() => { let s = o[n]; if (n > 0) for (let a = 0; a < n; ++a) { let i = se(ot(se(t10[a], s)), t10[a]); s = Te(s, i); } - return Xe(s, qu(s, "euclidean")); + return je(s, Vu(s, "euclidean")); })); - return e ? Tr(t10, 0) : t10; + return e ? vr(t10, 0) : t10; } -var fT = N({ gramSchmidt_: YX }); -function QX(r16, e = false) { - if ($(r16.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r16.rank}`), r16.rank === 2) - return hT(r16, e); +var EN = N({ gramSchmidt_: Rj }); +function Dj(r15, e = false) { + if (E(r15.rank >= 2, () => `qr() requires input tensor to have a rank >= 2, but got rank ${r15.rank}`), r15.rank === 2) + return $N(r15, e); { - let t10 = r16.shape.slice(0, r16.shape.length - 2).reduce((p, u) => p * u), o = zo(W(r16, [t10, r16.shape[r16.shape.length - 2], r16.shape[r16.shape.length - 1]]), 0), n = [], s = []; + let t10 = r15.shape.slice(0, r15.shape.length - 2).reduce((p, u) => p * u), o = fo(W(r15, [t10, r15.shape[r15.shape.length - 2], r15.shape[r15.shape.length - 1]]), 0), n = [], s = []; o.forEach((p) => { - let [u, l] = hT(p, e); - n.push(u), s.push(l); + let [u, c] = $N(p, e); + n.push(u), s.push(c); }); - let a = W(Tr(n, 0), r16.shape), i = W(Tr(s, 0), r16.shape); + let a = W(vr(n, 0), r15.shape), i = W(vr(s, 0), r15.shape); return [a, i]; } } -function hT(r16, e = false) { - return _.tidy(() => { - $(r16.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r16.shape.length}D Tensor.`); - let t10 = r16.shape[0], o = r16.shape[1], n = $d(t10), s = Xr(r16), a = bu([[1]], [1, 1]), i = Xr(a), p = t10 >= o ? o : t10; +function $N(r15, e = false) { + return T.tidy(() => { + E(r15.shape.length === 2, () => `qr2d() requires a 2D Tensor, but got a ${r15.shape.length}D Tensor.`); + let t10 = r15.shape[0], o = r15.shape[1], n = Cd(t10), s = Ur(r15), a = mu([[1]], [1, 1]), i = Ur(a), p = t10 >= o ? o : t10; for (let u = 0; u < p; ++u) { - let l = s, c = i, m = n; - [i, s, n] = _.tidy(() => { - let d = Ye(s, [u, u], [t10 - u, 1]), f = qu(d), h = Ye(s, [u, u], [1, 1]), g = Lo(ju(h, 0), bu([[-1]]), bu([[1]])), x = Te(h, se(g, f)), b = Xe(d, x); - b.shape[0] === 1 ? i = Xr(a) : i = bt([a, Ye(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); - let w = mr(Xe(Je(g, x), f)), S = Ye(s, [u, 0], [t10 - u, o]), k = se(w, i), T = yl(i); + let c = s, l = i, m = n; + [i, s, n] = T.tidy(() => { + let d = Xe(s, [u, u], [t10 - u, 1]), f = Vu(d), h = Xe(s, [u, u], [1, 1]), g = lo(Wu(h, 0), mu([[-1]]), mu([[1]])), x = Te(h, se(g, f)), b = je(d, x); + b.shape[0] === 1 ? i = Ur(a) : i = yt([a, Xe(b, [1, 0], [b.shape[0] - 1, b.shape[1]])], 0); + let C = pr(je(Ze(g, x), f)), S = Xe(s, [u, 0], [t10 - u, o]), k = se(C, i), _ = mc(i); if (u === 0) - s = Te(S, Je(k, Je(T, S))); + s = Te(S, Ze(k, Ze(_, S))); else { - let D = Te(S, Je(k, Je(T, S))); - s = bt([Ye(s, [0, 0], [u, o]), D], 0); + let D = Te(S, Ze(k, Ze(_, S))); + s = yt([Xe(s, [0, 0], [u, o]), D], 0); } - let E = yl(k), R = Ye(n, [0, u], [t10, n.shape[1] - u]); + let $ = mc(k), R = Xe(n, [0, u], [t10, n.shape[1] - u]); if (u === 0) - n = Te(R, Je(Je(R, i), E)); + n = Te(R, Ze(Ze(R, i), $)); else { - let D = Te(R, Je(Je(R, i), E)); - n = bt([Ye(n, [0, 0], [t10, u]), D], 1); + let D = Te(R, Ze(Ze(R, i), $)); + n = yt([Xe(n, [0, 0], [t10, u]), D], 1); } return [i, s, n]; - }), Lt([l, c, m]); + }), Ot([c, l, m]); } - return !e && t10 > o && (n = Ye(n, [0, 0], [t10, o]), s = Ye(s, [0, 0], [o, o])), [n, s]; + return !e && t10 > o && (n = Xe(n, [0, 0], [t10, o]), s = Xe(s, [0, 0], [o, o])), [n, s]; }); } -var gT = N({ qr_: QX }); -var Dt; -(function(r16) { - r16[r16.NONE = 0] = "NONE", r16[r16.MEAN = 1] = "MEAN", r16[r16.SUM = 2] = "SUM", r16[r16.SUM_BY_NONZERO_WEIGHTS = 3] = "SUM_BY_NONZERO_WEIGHTS"; -})(Dt || (Dt = {})); -function ZX(r16, e, t10 = Dt.SUM_BY_NONZERO_WEIGHTS) { - let o = v(r16, "losses", "computeWeightedLoss"), n = null; +var RN = N({ qr_: Dj }); +var $t; +(function(r15) { + r15[r15.NONE = 0] = "NONE", r15[r15.MEAN = 1] = "MEAN", r15[r15.SUM = 2] = "SUM", r15[r15.SUM_BY_NONZERO_WEIGHTS = 3] = "SUM_BY_NONZERO_WEIGHTS"; +})($t || ($t = {})); +function Aj(r15, e, t10 = $t.SUM_BY_NONZERO_WEIGHTS) { + let o = v(r15, "losses", "computeWeightedLoss"), n = null; e != null && (n = v(e, "weights", "computeWeightedLoss")); let s = n == null ? o : se(o, n); - if (t10 === Dt.NONE) + if (t10 === $t.NONE) return s; - if (t10 === Dt.SUM) + if (t10 === $t.SUM) return ot(s); - if (t10 === Dt.MEAN) { + if (t10 === $t.MEAN) { if (n == null) - return Yu(s); + return Gu(s); { - let a = o.size / n.size, i = Xe(ot(s), ot(n)); - return a > 1 ? Xe(i, ke(a)) : i; + let a = o.size / n.size, i = je(ot(s), ot(n)); + return a > 1 ? je(i, ke(a)) : i; } } - if (t10 === Dt.SUM_BY_NONZERO_WEIGHTS) { + if (t10 === $t.SUM_BY_NONZERO_WEIGHTS) { if (n == null) - return Xe(ot(s), ke(o.size)); + return je(ot(s), ke(o.size)); { - let a = se(n, Ba(o.shape)), i = Ue(ot(Gd(a, ke(0))), "float32"); - return Xe(ot(s), i); + let a = se(n, Da(o.shape)), i = Ue(ot(Fd(a, ke(0))), "float32"); + return je(ot(s), i); } } throw Error(`Unknown reduction: ${t10}`); } -var dr = N({ computeWeightedLoss_: ZX }); -function JX(r16, e, t10, o = Dt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r16, "labels", "absoluteDifference"), s = v(e, "predictions", "absoluteDifference"), a = null; - t10 != null && (a = v(t10, "weights", "absoluteDifference")), yt(n.shape, s.shape, "Error in absoluteDifference: "); - let i = er(Te(n, s)); - return dr(i, a, o); -} -var xT = N({ absoluteDifference_: JX }); -function e5(r16, e, t10, o, n = Dt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r16, "labels", "cosineDistance"), a = v(e, "predictions", "cosineDistance"), i = null; - o != null && (i = v(o, "weights", "cosineDistance")), yt(s.shape, a.shape, "Error in cosineDistance: "); +var cr = N({ computeWeightedLoss_: Aj }); +function Fj(r15, e, t10, o = $t.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "absoluteDifference"), s = v(e, "predictions", "absoluteDifference"), a = null; + t10 != null && (a = v(t10, "weights", "absoluteDifference")), xt(n.shape, s.shape, "Error in absoluteDifference: "); + let i = Qt(Te(n, s)); + return cr(i, a, o); +} +var DN = N({ absoluteDifference_: Fj }); +function Pj(r15, e, t10, o, n = $t.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "cosineDistance"), a = v(e, "predictions", "cosineDistance"), i = null; + o != null && (i = v(o, "weights", "cosineDistance")), xt(s.shape, a.shape, "Error in cosineDistance: "); let p = ke(1), u = Te(p, ot(se(s, a), t10, true)); - return dr(u, i, n); + return cr(u, i, n); } -var yT = N({ cosineDistance_: e5 }); -function t5(r16, e, t10, o = Dt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r16, "labels", "hingeLoss"), s = v(e, "predictions", "hingeLoss"), a = null; - t10 != null && (a = v(t10, "weights", "hingeLoss")), yt(n.shape, s.shape, "Error in hingeLoss: "); +var AN = N({ cosineDistance_: Pj }); +function Oj(r15, e, t10, o = $t.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "hingeLoss"), s = v(e, "predictions", "hingeLoss"), a = null; + t10 != null && (a = v(t10, "weights", "hingeLoss")), xt(n.shape, s.shape, "Error in hingeLoss: "); let i = ke(1); n = Te(se(ke(2), n), i); - let p = yu(Te(i, se(n, s))); - return dr(p, a, o); -} -var bT = N({ hingeLoss_: t5 }); -function r5(r16, e, t10, o = 1, n = Dt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r16, "labels", "huberLoss"), a = v(e, "predictions", "huberLoss"), i = null; - t10 != null && (i = v(t10, "weights", "huberLoss")), yt(s.shape, a.shape, "Error in huberLoss: "); - let p = ke(o), u = er(Te(a, s)), l = Qu(u, p), c = Te(u, l), m = Ce(se(ke(0.5), tr(l)), se(p, c)); - return dr(m, i, n); -} -var CT = N({ huberLoss_: r5 }); -function o5(r16, e, t10, o = 1e-7, n = Dt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r16, "labels", "logLoss"), a = v(e, "predictions", "logLoss"), i = null; - t10 != null && (i = v(t10, "weights", "logLoss")), yt(s.shape, a.shape, "Error in logLoss: "); - let p = ke(1), u = ke(o), l = mr(se(s, yi(Ce(a, u)))), c = se(Te(p, s), yi(Ce(Te(p, a), u))), m = Te(l, c); - return dr(m, i, n); -} -var wT = N({ logLoss_: o5 }); -function n5(r16, e, t10, o = Dt.SUM_BY_NONZERO_WEIGHTS) { - let n = v(r16, "labels", "meanSquaredError"), s = v(e, "predictions", "meanSquaredError"), a = null; - t10 != null && (a = v(t10, "weights", "meanSquaredError")), yt(n.shape, s.shape, "Error in meanSquaredError: "); - let i = rf(n, s); - return dr(i, a, o); -} -var ST = N({ meanSquaredError_: n5 }); -function s5(r16, e) { - let t10 = v(r16, "labels", "sigmoidCrossEntropyWithLogits"), o = v(e, "logits", "sigmoidCrossEntropyWithLogits"); - yt(t10.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); - let n = yu(o), s = se(o, t10), a = Pd(Jo(mr(er(o)))); + let p = lu(Te(i, se(n, s))); + return cr(p, a, o); +} +var FN = N({ hingeLoss_: Oj }); +function Mj(r15, e, t10, o = 1, n = $t.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "huberLoss"), a = v(e, "predictions", "huberLoss"), i = null; + t10 != null && (i = v(t10, "weights", "huberLoss")), xt(s.shape, a.shape, "Error in huberLoss: "); + let p = ke(o), u = Qt(Te(a, s)), c = Hu(u, p), l = Te(u, c), m = Ce(se(ke(0.5), Zt(c)), se(p, l)); + return cr(m, i, n); +} +var PN = N({ huberLoss_: Mj }); +function Lj(r15, e, t10, o = 1e-7, n = $t.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "labels", "logLoss"), a = v(e, "predictions", "logLoss"), i = null; + t10 != null && (i = v(t10, "weights", "logLoss")), xt(s.shape, a.shape, "Error in logLoss: "); + let p = ke(1), u = ke(o), c = pr(se(s, pi(Ce(a, u)))), l = se(Te(p, s), pi(Ce(Te(p, a), u))), m = Te(c, l); + return cr(m, i, n); +} +var ON = N({ logLoss_: Lj }); +function Bj(r15, e, t10, o = $t.SUM_BY_NONZERO_WEIGHTS) { + let n = v(r15, "labels", "meanSquaredError"), s = v(e, "predictions", "meanSquaredError"), a = null; + t10 != null && (a = v(t10, "weights", "meanSquaredError")), xt(n.shape, s.shape, "Error in meanSquaredError: "); + let i = Kd(n, s); + return cr(i, a, o); +} +var MN = N({ meanSquaredError_: Bj }); +function zj(r15, e) { + let t10 = v(r15, "labels", "sigmoidCrossEntropyWithLogits"), o = v(e, "logits", "sigmoidCrossEntropyWithLogits"); + xt(t10.shape, o.shape, "Error in sigmoidCrossEntropyWithLogits: "); + let n = lu(o), s = se(o, t10), a = kd(_o(pr(Qt(o)))); return Ce(Te(n, s), a); } -function a5(r16, e, t10, o = 0, n = Dt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r16, "multiClassLabels", "sigmoidCrossEntropy"), a = v(e, "logits", "sigmoidCrossEntropy"), i = null; - if (t10 != null && (i = v(t10, "weights", "sigmoidCrossEntropy")), yt(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { - let u = ke(o), l = ke(1), c = ke(0.5); - s = Ce(se(s, Te(l, u)), se(c, u)); +function Vj(r15, e, t10, o = 0, n = $t.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "multiClassLabels", "sigmoidCrossEntropy"), a = v(e, "logits", "sigmoidCrossEntropy"), i = null; + if (t10 != null && (i = v(t10, "weights", "sigmoidCrossEntropy")), xt(s.shape, a.shape, "Error in sigmoidCrossEntropy: "), o > 0) { + let u = ke(o), c = ke(1), l = ke(0.5); + s = Ce(se(s, Te(c, u)), se(l, u)); } - let p = s5(s, a); - return dr(p, i, n); + let p = zj(s, a); + return cr(p, i, n); } -var IT = N({ sigmoidCrossEntropy_: a5 }); -function i5(r16, e, t10 = -1) { +var LN = N({ sigmoidCrossEntropy_: Vj }); +function Wj(r15, e, t10 = -1) { if (t10 === -1 && (t10 = e.rank - 1), t10 !== e.rank - 1) throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t10}`); - return Nr((n, s, a) => { - let p = Ld(s, [t10], true), u = Te(Ue(s, "float32"), p); + return Ir((n, s, a) => { + let p = _d(s, [t10], true), u = Te(Ue(s, "float32"), p); a([n, u]); - let l = mr(se(u, n)); - return { value: ot(l, [t10]), gradFunc: (d, f) => { - let [h, g] = f, x = gi(d.shape, [t10]); - return [se(W(d, x), Te(Ue(h, "float32"), Jo(g))), se(W(d, x), Te(Jo(g), Ue(h, "float32")))]; + let c = pr(se(u, n)); + return { value: ot(c, [t10]), gradFunc: (d, f) => { + let [h, g] = f, x = ii(d.shape, [t10]); + return [se(W(d, x), Te(Ue(h, "float32"), _o(g))), se(W(d, x), Te(_o(g), Ue(h, "float32")))]; } }; - })(r16, e); + })(r15, e); } -function u5(r16, e, t10, o = 0, n = Dt.SUM_BY_NONZERO_WEIGHTS) { - let s = v(r16, "onehotLabels", "softmaxCrossEntropy"), a = v(e, "logits", "softmaxCrossEntropy"), i = null; - if (t10 != null && (i = v(t10, "weights", "softmaxCrossEntropy")), yt(s.shape, a.shape, "Error in softmaxCrossEntropy: "), o > 0) { - let u = ke(o), l = ke(1), c = ke(s.shape[1]); - s = Ce(se(s, Te(l, u)), Xe(u, c)); +function Uj(r15, e, t10, o = 0, n = $t.SUM_BY_NONZERO_WEIGHTS) { + let s = v(r15, "onehotLabels", "softmaxCrossEntropy"), a = v(e, "logits", "softmaxCrossEntropy"), i = null; + if (t10 != null && (i = v(t10, "weights", "softmaxCrossEntropy")), xt(s.shape, a.shape, "Error in softmaxCrossEntropy: "), o > 0) { + let u = ke(o), c = ke(1), l = ke(s.shape[1]); + s = Ce(se(s, Te(c, u)), je(u, l)); } - let p = i5(s, a); - return dr(p, i, n); + let p = Wj(s, a); + return cr(p, i, n); } -var vT = N({ softmaxCrossEntropy_: u5 }); -function p5(r16, e, t10, o) { - let n = v(r16, "indices", "sparseFillEmptyRows", "int32"), s = v(e, "values", "sparseFillEmptyRows"), a = v(t10, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); +var BN = N({ softmaxCrossEntropy_: Uj }); +function Gj(r15, e, t10, o) { + let n = v(r15, "indices", "sparseFillEmptyRows", "int32"), s = v(e, "values", "sparseFillEmptyRows"), a = v(t10, "denseShape", "sparseFillEmptyRows", "int32"), i = v(o, "defaultValue", "sparseFillEmptyRows", s.dtype); if (n.rank !== 2) throw new Error(`Indices should be Tensor2D but received shape ${n.shape}`); @@ -8252,12 +8252,12 @@ function p5(r16, e, t10, o) { throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`); if (i.rank !== 0) throw new Error(`Default value should be a scalar but received shape ${i.shape}`); - let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = _.runKernel(eu, p); + let p = { indices: n, values: s, denseShape: a, defaultValue: i }, u = T.runKernel(Ki, p); return { outputIndices: u[0], outputValues: u[1], emptyRowIndicator: u[2], reverseIndexMap: u[3] }; } -var kT = N({ sparseFillEmptyRows_: p5 }); -function l5(r16, e, t10) { - let o = v(r16, "inputIndices", "sparseReshape", "int32"), n = v(e, "inputShape", "sparseReshape", "int32"), s = v(t10, "newShape", "sparseReshape", "int32"); +var zN = N({ sparseFillEmptyRows_: Gj }); +function Hj(r15, e, t10) { + let o = v(r15, "inputIndices", "sparseReshape", "int32"), n = v(e, "inputShape", "sparseReshape", "int32"), s = v(t10, "newShape", "sparseReshape", "int32"); if (o.rank !== 2) throw new Error(`Input indices should be Tensor2D but received shape ${o.shape}`); @@ -8265,12 +8265,12 @@ function l5(r16, e, t10) { throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`); if (s.rank !== 1) throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`); - let a = { inputIndices: o, inputShape: n, newShape: s }, i = _.runKernel(ui, a); + let a = { inputIndices: o, inputShape: n, newShape: s }, i = T.runKernel(ei, a); return { outputIndices: i[0], outputShape: i[1] }; } -var NT = N({ sparseReshape_: l5 }); -function c5(r16, e, t10) { - let o = v(r16, "data", "sparseSegmentMean"), n = v(e, "indices", "sparseSegmentMean", "int32"), s = v(t10, "segmentIds", "sparseSegmentMean", "int32"); +var VN = N({ sparseReshape_: Hj }); +function Kj(r15, e, t10) { + let o = v(r15, "data", "sparseSegmentMean"), n = v(e, "indices", "sparseSegmentMean", "int32"), s = v(t10, "segmentIds", "sparseSegmentMean", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8280,11 +8280,11 @@ function c5(r16, e, t10) { throw new Error(`Segment ids should be Tensor1D but received shape ${s.shape}`); let a = { data: o, indices: n, segmentIds: s }; - return _.runKernel(va, a); + return T.runKernel(ya, a); } -var TT = N({ sparseSegmentMean_: c5 }); -function m5(r16, e, t10) { - let o = v(r16, "data", "sparseSegmentSum"), n = v(e, "indices", "sparseSegmentSum", "int32"), s = v(t10, "segmentIds", "sparseSegmentSum", "int32"); +var WN = N({ sparseSegmentMean_: Kj }); +function qj(r15, e, t10) { + let o = v(r15, "data", "sparseSegmentSum"), n = v(e, "indices", "sparseSegmentSum", "int32"), s = v(t10, "segmentIds", "sparseSegmentSum", "int32"); if (o.rank < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.rank !== 1) @@ -8294,11 +8294,11 @@ function m5(r16, e, t10) { throw new Error(`Segment ids should be Tensor1D but received shape ${s.shape}`); let a = { data: o, indices: n, segmentIds: s }; - return _.runKernel(ka, a); + return T.runKernel(ba, a); } -var _T = N({ sparseSegmentSum_: m5 }); -function d5(r16, e, t10, o, n, s, a, i) { - let p = v(r16, "data", "stringNGrams", "string"); +var UN = N({ sparseSegmentSum_: qj }); +function jj(r15, e, t10, o, n, s, a, i) { + let p = v(r15, "data", "stringNGrams", "string"); if (p.dtype !== "string") throw new Error("Data must be of datatype string"); if (p.shape.length !== 1) @@ -8306,45 +8306,45 @@ function d5(r16, e, t10, o, n, s, a, i) { let u = v(e, "dataSplits", "stringNGrams"); if (u.dtype !== "int32") throw new Error("Data splits must be of datatype int32"); - let l = { separator: t10, nGramWidths: o, leftPad: n, rightPad: s, padWidth: a, preserveShortSequences: i }, c = { data: p, dataSplits: u }, m = _.runKernel(Na, c, l); + let c = { separator: t10, nGramWidths: o, leftPad: n, rightPad: s, padWidth: a, preserveShortSequences: i }, l = { data: p, dataSplits: u }, m = T.runKernel(Ca, l, c); return { nGrams: m[0], nGramsSplits: m[1] }; } -var ET = N({ stringNGrams_: d5 }); -function f5(r16, e, t10 = true) { - let o = v(r16, "input", "stringSplit", "string"), n = v(e, "delimiter", "stringSplit", "string"); +var GN = N({ stringNGrams_: jj }); +function Xj(r15, e, t10 = true) { + let o = v(r15, "input", "stringSplit", "string"), n = v(e, "delimiter", "stringSplit", "string"); if (o.rank !== 1) throw new Error(`Input should be Tensor1D but received shape ${o.shape}`); if (n.rank !== 0) throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`); - let s = { skipEmpty: t10 }, a = { input: o, delimiter: n }, i = _.runKernel(ru, a, s); + let s = { skipEmpty: t10 }, a = { input: o, delimiter: n }, i = T.runKernel(ji, a, s); return { indices: i[0], values: i[1], shape: i[2] }; } -var $T = N({ stringSplit_: f5 }); -function h5(r16, e) { - let t10 = v(r16, "input", "stringToHashBucketFast", "string"), o = { numBuckets: e }; +var HN = N({ stringSplit_: Xj }); +function Yj(r15, e) { + let t10 = v(r15, "input", "stringToHashBucketFast", "string"), o = { numBuckets: e }; if (e <= 0) throw new Error("Number of buckets must be at least 1"); let n = { input: t10 }; - return _.runKernel(ou, n, o); -} -var RT = N({ stringToHashBucketFast_: h5 }); -function g5(r16, e, t10, o = true) { - let n = v(r16, "input", "staticRegexReplace", "string"), s = { pattern: e, rewrite: t10, replaceGlobal: o }; - return _.runKernel(pi, { x: n }, s); -} -var DT = N({ staticRegexReplace_: g5 }); -var x5 = { fft: fl, ifft: ep, rfft: hl, irfft: tf }; -var y5 = { hammingWindow: jN, hannWindow: uf, frame: pf, stft: XN }; -var b5 = { flipLeftRight: QN, grayscaleToRGB: ZN, resizeNearestNeighbor: lT, resizeBilinear: pT, rgbToGrayscale: JN, rotateWithOffset: eT, cropAndResize: YN, nonMaxSuppression: tT, nonMaxSuppressionAsync: nT, nonMaxSuppressionWithScore: sT, nonMaxSuppressionWithScoreAsync: aT, nonMaxSuppressionPadded: iT, nonMaxSuppressionPaddedAsync: uT, threshold: cT, transform: mT }; -var C5 = { bandPart: dT, gramSchmidt: fT, qr: gT }; -var w5 = { absoluteDifference: xT, computeWeightedLoss: dr, cosineDistance: yT, hingeLoss: bT, huberLoss: CT, logLoss: wT, meanSquaredError: ST, sigmoidCrossEntropy: IT, softmaxCrossEntropy: vT }; -var S5 = { sparseFillEmptyRows: kT, sparseReshape: NT, sparseSegmentMean: TT, sparseSegmentSum: _T }; -var I5 = { stringNGrams: ET, stringSplit: $T, stringToHashBucketFast: RT, staticRegexReplace: DT }; -var AT = {}; -qe(AT, { Serializable: () => Lc, SerializationMap: () => df, getRegisteredName: () => k5, registerClass: () => hS }); -var v5 = /* @__PURE__ */ new Map(); -var fS = /* @__PURE__ */ new Map(); -var Lc = class { + return T.runKernel(Xi, n, o); +} +var KN = N({ stringToHashBucketFast_: Yj }); +function Qj(r15, e, t10, o = true) { + let n = v(r15, "input", "staticRegexReplace", "string"), s = { pattern: e, rewrite: t10, replaceGlobal: o }; + return T.runKernel(Ru, { x: n }, s); +} +var qN = N({ staticRegexReplace_: Qj }); +var Zj = { fft: uc, ifft: ju, rfft: pc, irfft: Hd }; +var Jj = { hammingWindow: pN, hannWindow: Qd, frame: Zd, stft: cN }; +var eX = { flipLeftRight: mN, grayscaleToRGB: dN, resizeNearestNeighbor: kN, resizeBilinear: vN, rgbToGrayscale: fN, rotateWithOffset: hN, cropAndResize: lN, nonMaxSuppression: gN, nonMaxSuppressionAsync: bN, nonMaxSuppressionWithScore: CN, nonMaxSuppressionWithScoreAsync: wN, nonMaxSuppressionPadded: SN, nonMaxSuppressionPaddedAsync: IN, threshold: NN, transform: TN }; +var tX = { bandPart: _N, gramSchmidt: EN, qr: RN }; +var rX = { absoluteDifference: DN, computeWeightedLoss: cr, cosineDistance: AN, hingeLoss: FN, huberLoss: PN, logLoss: ON, meanSquaredError: MN, sigmoidCrossEntropy: LN, softmaxCrossEntropy: BN }; +var oX = { sparseFillEmptyRows: zN, sparseReshape: VN, sparseSegmentMean: WN, sparseSegmentSum: UN }; +var nX = { stringNGrams: GN, stringSplit: HN, stringToHashBucketFast: KN, staticRegexReplace: qN }; +var jN = {}; +qe(jN, { Serializable: () => Rl, SerializationMap: () => rf, getRegisteredName: () => aX, registerClass: () => rS }); +var sX = /* @__PURE__ */ new Map(); +var tS = /* @__PURE__ */ new Map(); +var Rl = class { getClassName() { return this.constructor.className; } @@ -8352,26 +8352,26 @@ var Lc = class { return new e(t10); } }; -var df = class r7 { +var rf = class r5 { constructor() { this.classNameMap = {}; } static getMap() { - return r7.instance == null && (r7.instance = new r7()), r7.instance; + return r5.instance == null && (r5.instance = new r5()), r5.instance; } static register(e) { - r7.getMap().classNameMap[e.className] = [e, e.fromConfig]; + r5.getMap().classNameMap[e.className] = [e, e.fromConfig]; } }; -function hS(r16, e, t10) { - $(r16.className != null, () => "Class being registered does not have the static className property defined."), $(typeof r16.className == "string", () => "className is required to be a string, but got type " + typeof r16.className), $(r16.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), typeof e == "undefined" && (e = "Custom"), typeof t10 == "undefined" && (t10 = r16.className); +function rS(r15, e, t10) { + E(r15.className != null, () => "Class being registered does not have the static className property defined."), E(typeof r15.className == "string", () => "className is required to be a string, but got type " + typeof r15.className), E(r15.className.length > 0, () => "Class being registered has an empty-string as its className, which is disallowed."), typeof e == "undefined" && (e = "Custom"), typeof t10 == "undefined" && (t10 = r15.className); let o = t10, n = e + ">" + o; - return df.register(r16), v5.set(n, r16), fS.set(r16, n), r16; + return rf.register(r15), sX.set(n, r15), tS.set(r15, n), r15; } -function k5(r16) { - return fS.has(r16) ? fS.get(r16) : r16.className; +function aX(r15) { + return tS.has(r15) ? tS.get(r15) : r15.className; } -var _r = class extends Lc { +var kr = class extends Rl { minimize(e, t10 = false, o) { let { value: n, grads: s } = this.computeGradients(e, o); if (o != null) { @@ -8379,7 +8379,7 @@ var _r = class extends Lc { this.applyGradients(a); } else this.applyGradients(s); - return Lt(s), t10 ? n : (n.dispose(), null); + return Ot(s), t10 ? n : (n.dispose(), null); } get iterations() { return this.iterations_ == null && (this.iterations_ = 0), this.iterations_; @@ -8388,10 +8388,10 @@ var _r = class extends Lc { this.iterations_ = this.iterations + 1; } computeGradients(e, t10) { - return eS(e, t10); + return Vw(e, t10); } dispose() { - this.iterations_ != null && Lt(this.iterations_); + this.iterations_ != null && Ot(this.iterations_); } async saveIterations() { return this.iterations_ == null && (this.iterations_ = 0), { name: "iter", tensor: ke(this.iterations_, "int32") }; @@ -8406,32 +8406,32 @@ var _r = class extends Lc { return this.iterations_ = (await e[0].tensor.data())[0], e.slice(1); } }; -Object.defineProperty(_r, Symbol.hasInstance, { value: (r16) => r16.minimize != null && r16.computeGradients != null && r16.applyGradients != null }); -var sp = class extends _r { +Object.defineProperty(kr, Symbol.hasInstance, { value: (r15) => r15.minimize != null && r15.computeGradients != null && r15.applyGradients != null }); +var Ju = class extends kr { static get className() { return "Adadelta"; } constructor(e, t10, o = null) { - super(), this.learningRate = e, this.rho = t10, this.epsilon = o, this.accumulatedGrads = [], this.accumulatedUpdates = [], o == null && (this.epsilon = _.backend.epsilon()); + super(), this.learningRate = e, this.rho = t10, this.epsilon = o, this.accumulatedGrads = [], this.accumulatedUpdates = [], o == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = _.registeredVariables[o], a = false; - this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: De(() => Kt(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: De(() => Kt(s).variable(a)) }); + let s = T.registeredVariables[o], a = false; + this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accum_grad`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedUpdates[n] == null && (this.accumulatedUpdates[n] = { originalName: `${o}/accum_var`, variable: De(() => Gt(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; if (i == null) return; let p = this.accumulatedGrads[n].variable, u = this.accumulatedUpdates[n].variable; De(() => { - let l = Ce(se(p, this.rho), se(tr(i), 1 - this.rho)), c = se(Xe(Pr(Ce(u, this.epsilon)), Pr(Ce(p, this.epsilon))), i), m = Ce(se(u, this.rho), se(tr(c), 1 - this.rho)); - p.assign(l), u.assign(m); - let d = Ce(se(c, -this.learningRate), s); + let c = Ce(se(p, this.rho), se(Zt(i), 1 - this.rho)), l = se(je(Rr(Ce(u, this.epsilon)), Rr(Ce(p, this.epsilon))), i), m = Ce(se(u, this.rho), se(Zt(l), 1 - this.rho)); + p.assign(c), u.assign(m); + let d = Ce(se(l, -this.learningRate), s); s.assign(d); }); }), this.incrementIterations(); } dispose() { - this.accumulatedUpdates != null && (Lt(this.accumulatedGrads.map((e) => e.variable)), Lt(this.accumulatedUpdates.map((e) => e.variable))); + this.accumulatedUpdates != null && (Ot(this.accumulatedGrads.map((e) => e.variable)), Ot(this.accumulatedUpdates.map((e) => e.variable))); } async getWeights() { let e = [...this.accumulatedGrads, ...this.accumulatedUpdates]; @@ -8449,7 +8449,7 @@ var sp = class extends _r { return new e(t10.learningRate, t10.rho, t10.epsilon); } }; -var ap = class extends _r { +var ep = class extends kr { static get className() { return "Adagrad"; } @@ -8458,22 +8458,22 @@ var ap = class extends _r { } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = _.registeredVariables[o]; - this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accumulator`, variable: De(() => Ma(s.shape, this.initialAccumulatorValue).variable(false)) }); + let s = T.registeredVariables[o]; + this.accumulatedGrads[n] == null && (this.accumulatedGrads[n] = { originalName: `${o}/accumulator`, variable: De(() => $a(s.shape, this.initialAccumulatorValue).variable(false)) }); let a = Array.isArray(e) ? e[n].tensor : e[o]; if (a == null) return; let i = this.accumulatedGrads[n].variable; De(() => { - let p = Ce(i, tr(a)); + let p = Ce(i, Zt(a)); i.assign(p); - let u = Ce(se(Xe(a, Pr(Ce(p, _.backend.epsilon()))), -this.learningRate), s); + let u = Ce(se(je(a, Rr(Ce(p, T.backend.epsilon()))), -this.learningRate), s); s.assign(u); }); }), this.incrementIterations(); } dispose() { - this.accumulatedGrads != null && Lt(this.accumulatedGrads.map((e) => e.variable)); + this.accumulatedGrads != null && Ot(this.accumulatedGrads.map((e) => e.variable)); } async getWeights() { return [await this.saveIterations()].concat(this.accumulatedGrads.map((e) => ({ name: e.originalName, tensor: e.variable }))); @@ -8490,34 +8490,34 @@ var ap = class extends _r { return new e(t10.learningRate, t10.initialAccumulatorValue); } }; -var ip = class extends _r { +var tp = class extends kr { static get className() { return "Adam"; } constructor(e, t10, o, n = null) { super(), this.learningRate = e, this.beta1 = t10, this.beta2 = o, this.epsilon = n, this.accumulatedFirstMoment = [], this.accumulatedSecondMoment = [], De(() => { this.accBeta1 = ke(t10).variable(), this.accBeta2 = ke(o).variable(); - }), n == null && (this.epsilon = _.backend.epsilon()); + }), n == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { let t10 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); De(() => { let o = Te(1, this.accBeta1), n = Te(1, this.accBeta2); t10.forEach((s, a) => { - let i = _.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: De(() => Kt(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: De(() => Kt(i).variable(p)) }); + let i = T.registeredVariables[s], p = false; + this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: De(() => Gt(i).variable(p)) }), this.accumulatedSecondMoment[a] == null && (this.accumulatedSecondMoment[a] = { originalName: `${s}/v`, variable: De(() => Gt(i).variable(p)) }); let u = Array.isArray(e) ? e[a].tensor : e[s]; if (u == null) return; - let l = this.accumulatedFirstMoment[a].variable, c = this.accumulatedSecondMoment[a].variable, m = Ce(se(l, this.beta1), se(u, 1 - this.beta1)), d = Ce(se(c, this.beta2), se(tr(u), 1 - this.beta2)), f = Xe(m, o), h = Xe(d, n); - l.assign(m), c.assign(d); - let g = Ce(se(Xe(f, Ce(Pr(h), this.epsilon)), -this.learningRate), i); + let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedSecondMoment[a].variable, m = Ce(se(c, this.beta1), se(u, 1 - this.beta1)), d = Ce(se(l, this.beta2), se(Zt(u), 1 - this.beta2)), f = je(m, o), h = je(d, n); + c.assign(m), l.assign(d); + let g = Ce(se(je(f, Ce(Rr(h), this.epsilon)), -this.learningRate), i); i.assign(g); }), this.accBeta1.assign(se(this.accBeta1, this.beta1)), this.accBeta2.assign(se(this.accBeta2, this.beta2)); }), this.incrementIterations(); } dispose() { - this.accBeta1.dispose(), this.accBeta2.dispose(), this.accumulatedFirstMoment != null && Lt(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedSecondMoment != null && Lt(this.accumulatedSecondMoment.map((e) => e.variable)); + this.accBeta1.dispose(), this.accBeta2.dispose(), this.accumulatedFirstMoment != null && Ot(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedSecondMoment != null && Ot(this.accumulatedSecondMoment.map((e) => e.variable)); } async getWeights() { let e = [...this.accumulatedFirstMoment, ...this.accumulatedSecondMoment]; @@ -8525,7 +8525,7 @@ var ip = class extends _r { } async setWeights(e) { e = await this.extractIterations(e), De(() => { - this.accBeta1.assign(xi(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(xi(this.beta2, this.iterations_ + 1)); + this.accBeta1.assign(ui(this.beta1, this.iterations_ + 1)), this.accBeta2.assign(ui(this.beta2, this.iterations_ + 1)); }); let t10 = e.length / 2, o = false; this.accumulatedFirstMoment = e.slice(0, t10).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })), this.accumulatedSecondMoment = e.slice(t10, t10 * 2).map((n) => ({ originalName: n.name, variable: n.tensor.variable(o) })); @@ -8537,34 +8537,34 @@ var ip = class extends _r { return new e(t10.learningRate, t10.beta1, t10.beta2, t10.epsilon); } }; -var up = class extends _r { +var rp = class extends kr { static get className() { return "Adamax"; } constructor(e, t10, o, n = null, s = 0) { super(), this.learningRate = e, this.beta1 = t10, this.beta2 = o, this.epsilon = n, this.decay = s, this.accumulatedFirstMoment = [], this.accumulatedWeightedInfNorm = [], De(() => { this.iteration = ke(0).variable(), this.accBeta1 = ke(t10).variable(); - }), n == null && (this.epsilon = _.backend.epsilon()); + }), n == null && (this.epsilon = T.backend.epsilon()); } applyGradients(e) { let t10 = Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e); De(() => { - let o = Te(1, this.accBeta1), n = Xe(-this.learningRate, Ce(se(this.iteration, this.decay), 1)); + let o = Te(1, this.accBeta1), n = je(-this.learningRate, Ce(se(this.iteration, this.decay), 1)); t10.forEach((s, a) => { - let i = _.registeredVariables[s], p = false; - this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Kt(i).variable(p) }), this.accumulatedWeightedInfNorm[a] == null && (this.accumulatedWeightedInfNorm[a] = { originalName: `${s}/v`, variable: Kt(i).variable(p) }); + let i = T.registeredVariables[s], p = false; + this.accumulatedFirstMoment[a] == null && (this.accumulatedFirstMoment[a] = { originalName: `${s}/m`, variable: Gt(i).variable(p) }), this.accumulatedWeightedInfNorm[a] == null && (this.accumulatedWeightedInfNorm[a] = { originalName: `${s}/v`, variable: Gt(i).variable(p) }); let u = Array.isArray(e) ? e[a].tensor : e[s]; if (u == null) return; - let l = this.accumulatedFirstMoment[a].variable, c = this.accumulatedWeightedInfNorm[a].variable, m = Ce(se(l, this.beta1), se(u, 1 - this.beta1)), d = se(c, this.beta2), f = er(u), h = Ud(d, f); - l.assign(m), c.assign(h); - let g = Ce(se(Xe(n, o), Xe(m, Ce(h, this.epsilon))), i); + let c = this.accumulatedFirstMoment[a].variable, l = this.accumulatedWeightedInfNorm[a].variable, m = Ce(se(c, this.beta1), se(u, 1 - this.beta1)), d = se(l, this.beta2), f = Qt(u), h = Ad(d, f); + c.assign(m), l.assign(h); + let g = Ce(se(je(n, o), je(m, Ce(h, this.epsilon))), i); i.assign(g); }), this.iteration.assign(Ce(this.iteration, 1)), this.accBeta1.assign(se(this.accBeta1, this.beta1)); }), this.incrementIterations(); } dispose() { - this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Lt(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedWeightedInfNorm != null && Lt(this.accumulatedWeightedInfNorm.map((e) => e.variable)); + this.accBeta1.dispose(), this.iteration.dispose(), this.accumulatedFirstMoment != null && Ot(this.accumulatedFirstMoment.map((e) => e.variable)), this.accumulatedWeightedInfNorm != null && Ot(this.accumulatedWeightedInfNorm.map((e) => e.variable)); } async getWeights() { throw new Error("getWeights() is not implemented for Adamax yet."); @@ -8579,7 +8579,7 @@ var up = class extends _r { return new e(t10.learningRate, t10.beta1, t10.beta2, t10.epsilon, t10.decay); } }; -var wi = class extends _r { +var mi = class extends kr { static get className() { return "SGD"; } @@ -8591,7 +8591,7 @@ var wi = class extends _r { let s = Array.isArray(e) ? e[n].tensor : e[o]; if (s == null) return; - let a = _.registeredVariables[o]; + let a = T.registeredVariables[o]; De(() => { let i = Ce(se(this.c, s), a); a.assign(i); @@ -8599,7 +8599,7 @@ var wi = class extends _r { }), this.incrementIterations(); } setLearningRate(e) { - this.learningRate = e, this.c != null && this.c.dispose(), this.c = Fr(ke(-e)); + this.learningRate = e, this.c != null && this.c.dispose(), this.c = $r(ke(-e)); } dispose() { this.c.dispose(); @@ -8618,7 +8618,7 @@ var wi = class extends _r { return new e(t10.learningRate); } }; -var pp = class extends wi { +var op = class extends mi { static get className() { return "Momentum"; } @@ -8627,8 +8627,8 @@ var pp = class extends wi { } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = _.registeredVariables[o]; - this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: De(() => Kt(s).variable(false)) }); + let s = T.registeredVariables[o]; + this.accumulations[n] == null && (this.accumulations[n] = { originalName: `${o}/momentum`, variable: De(() => Gt(s).variable(false)) }); let a = this.accumulations[n].variable, i = Array.isArray(e) ? e[n].tensor : e[o]; i != null && De(() => { let p, u = Ce(se(this.m, a), i); @@ -8637,7 +8637,7 @@ var pp = class extends wi { }), this.incrementIterations(); } dispose() { - this.m.dispose(), this.accumulations != null && Lt(this.accumulations.map((e) => e.variable)); + this.m.dispose(), this.accumulations != null && Ot(this.accumulations.map((e) => e.variable)); } setMomentum(e) { this.momentum = e; @@ -8657,32 +8657,32 @@ var pp = class extends wi { return new e(t10.learningRate, t10.momentum, t10.useNesterov); } }; -var lp = class extends _r { +var np = class extends kr { static get className() { return "RMSProp"; } constructor(e, t10 = 0.9, o = 0, n = null, s = false) { - if (super(), this.learningRate = e, this.decay = t10, this.momentum = o, this.epsilon = n, this.accumulatedMeanSquares = [], this.accumulatedMoments = [], this.accumulatedMeanGrads = [], this.centered = s, n == null && (this.epsilon = _.backend.epsilon()), e == null) + if (super(), this.learningRate = e, this.decay = t10, this.momentum = o, this.epsilon = n, this.accumulatedMeanSquares = [], this.accumulatedMoments = [], this.accumulatedMeanGrads = [], this.centered = s, n == null && (this.epsilon = T.backend.epsilon()), e == null) throw new Error("learningRate for RMSPropOptimizer must be defined."); } applyGradients(e) { (Array.isArray(e) ? e.map((o) => o.name) : Object.keys(e)).forEach((o, n) => { - let s = _.registeredVariables[o], a = false; - this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: De(() => Kt(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: De(() => Kt(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: De(() => Kt(s).variable(a)) }); + let s = T.registeredVariables[o], a = false; + this.accumulatedMeanSquares[n] == null && (this.accumulatedMeanSquares[n] = { originalName: `${o}/rms`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedMoments[n] == null && (this.accumulatedMoments[n] = { originalName: `${o}/momentum`, variable: De(() => Gt(s).variable(a)) }), this.accumulatedMeanGrads[n] == null && this.centered && (this.accumulatedMeanGrads[n] = { originalName: `${o}/mg`, variable: De(() => Gt(s).variable(a)) }); let i = Array.isArray(e) ? e[n].tensor : e[o]; if (i == null) return; let p = this.accumulatedMeanSquares[n].variable, u = this.accumulatedMoments[n].variable; De(() => { - let l = Ce(se(p, this.decay), se(tr(i), 1 - this.decay)); + let c = Ce(se(p, this.decay), se(Zt(i), 1 - this.decay)); if (this.centered) { - let c = this.accumulatedMeanGrads[n].variable, m = Ce(se(c, this.decay), se(i, 1 - this.decay)), d = Xe(se(i, this.learningRate), Pr(Te(l, Ce(tr(m), this.epsilon)))), f = Ce(se(u, this.momentum), d); - p.assign(l), c.assign(m), u.assign(f); + let l = this.accumulatedMeanGrads[n].variable, m = Ce(se(l, this.decay), se(i, 1 - this.decay)), d = je(se(i, this.learningRate), Rr(Te(c, Ce(Zt(m), this.epsilon)))), f = Ce(se(u, this.momentum), d); + p.assign(c), l.assign(m), u.assign(f); let h = Te(s, f); s.assign(h); } else { - let c = Ce(se(p, this.decay), se(tr(i), 1 - this.decay)), m = Ce(se(u, this.momentum), Xe(se(i, this.learningRate), Pr(Ce(c, this.epsilon)))); - p.assign(c), u.assign(m); + let l = Ce(se(p, this.decay), se(Zt(i), 1 - this.decay)), m = Ce(se(u, this.momentum), je(se(i, this.learningRate), Rr(Ce(l, this.epsilon)))); + p.assign(l), u.assign(m); let d = Te(s, m); s.assign(d); } @@ -8690,7 +8690,7 @@ var lp = class extends _r { }), this.incrementIterations(); } dispose() { - this.accumulatedMeanSquares != null && Lt(this.accumulatedMeanSquares.map((e) => e.variable)), this.accumulatedMeanGrads != null && this.centered && Lt(this.accumulatedMeanGrads.map((e) => e.variable)), this.accumulatedMoments != null && Lt(this.accumulatedMoments.map((e) => e.variable)); + this.accumulatedMeanSquares != null && Ot(this.accumulatedMeanSquares.map((e) => e.variable)), this.accumulatedMeanGrads != null && this.centered && Ot(this.accumulatedMeanGrads.map((e) => e.variable)), this.accumulatedMoments != null && Ot(this.accumulatedMoments.map((e) => e.variable)); } async getWeights() { let e = [...this.accumulatedMeanSquares, ...this.accumulatedMoments]; @@ -8708,43 +8708,43 @@ var lp = class extends _r { return new e(t10.learningRate, t10.decay, t10.momentum, t10.epsilon, t10.centered); } }; -var N5 = [sp, ap, ip, up, pp, lp, wi]; -function FT() { - for (let r16 of N5) - hS(r16); +var iX = [Ju, ep, tp, rp, op, np, mi]; +function XN() { + for (let r15 of iX) + rS(r15); } -var Si = {}; -qe(Si, { CompositeArrayBuffer: () => lr, browserFiles: () => OT, browserHTTPRequest: () => zT, concatenateArrayBuffers: () => Zk, copyModel: () => m1, decodeWeights: () => hd, decodeWeightsStream: () => gd, encodeWeights: () => jk, fromMemory: () => VT, fromMemorySync: () => wS, getLoadHandlers: () => r1, getModelArtifactsForJSON: () => il, getModelArtifactsForJSONSync: () => Uw, getModelArtifactsInfoForJSON: () => $a, getSaveHandlers: () => t1, getWeightSpecs: () => Ec, http: () => hf, isHTTPScheme: () => ff, listModels: () => l1, loadWeights: () => LT, moveModel: () => d1, registerLoadRouter: () => e1, registerSaveRouter: () => Jk, removeModel: () => c1, weightsLoaderFactory: () => bS, withSaveHandler: () => WT, withSaveHandlerSync: () => UT }); -var T5 = "model"; -var _5 = ".json"; -var E5 = ".weights.bin"; -function PT(r16) { - return new Promise((e) => setTimeout(e)).then(r16); +var di = {}; +qe(di, { CompositeArrayBuffer: () => ir, browserFiles: () => QN, browserHTTPRequest: () => tT, concatenateArrayBuffers: () => dk, copyModel: () => Tk, decodeWeights: () => sd, decodeWeightsStream: () => ad, encodeWeights: () => pk, fromMemory: () => rT, fromMemorySync: () => uS, getLoadHandlers: () => xk, getModelArtifactsForJSON: () => tc, getModelArtifactsForJSONSync: () => $w, getModelArtifactsInfoForJSON: () => va, getSaveHandlers: () => gk, getWeightSpecs: () => Sl, http: () => nf, isHTTPScheme: () => of, listModels: () => kk, loadWeights: () => JN, moveModel: () => _k, registerLoadRouter: () => hk, registerSaveRouter: () => fk, removeModel: () => Nk, weightsLoaderFactory: () => aS, withSaveHandler: () => oT, withSaveHandlerSync: () => nT }); +var uX = "model"; +var pX = ".json"; +var cX = ".weights.bin"; +function YN(r15) { + return new Promise((e) => setTimeout(e)).then(r15); } -var bl = class r8 { +var dc = class r7 { constructor(e) { if (!A().getBool("IS_BROWSER")) throw new Error("browserDownloads() cannot proceed because the current environment is not a browser."); - e.startsWith(r8.URL_SCHEME) && (e = e.slice(r8.URL_SCHEME.length)), (e == null || e.length === 0) && (e = T5), this.modelJsonFileName = e + _5, this.weightDataFileName = e + E5; + e.startsWith(r7.URL_SCHEME) && (e = e.slice(r7.URL_SCHEME.length)), (e == null || e.length === 0) && (e = uX), this.modelJsonFileName = e + pX, this.weightDataFileName = e + cX; } async save(e) { if (typeof document == "undefined") throw new Error("Browser downloads are not supported in this environment since `document` is not present"); - let t10 = lr.join(e.weightData), o = window.URL.createObjectURL(new Blob([t10], { type: "application/octet-stream" })); + let t10 = ir.join(e.weightData), o = window.URL.createObjectURL(new Blob([t10], { 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 }], s = xd(e, n), a = window.URL.createObjectURL(new Blob([JSON.stringify(s)], { type: "application/json" })), i = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; - if (i.download = this.modelJsonFileName, i.href = a, await PT(() => i.dispatchEvent(new MouseEvent("click"))), e.weightData != null) { + let n = [{ paths: ["./" + this.weightDataFileName], weights: e.weightSpecs }], s = id(e, n), a = window.URL.createObjectURL(new Blob([JSON.stringify(s)], { type: "application/json" })), i = this.modelJsonAnchor == null ? document.createElement("a") : this.modelJsonAnchor; + if (i.download = this.modelJsonFileName, i.href = a, await YN(() => i.dispatchEvent(new MouseEvent("click"))), e.weightData != null) { let p = this.weightDataAnchor == null ? document.createElement("a") : this.weightDataAnchor; - p.download = this.weightDataFileName, p.href = o, await PT(() => p.dispatchEvent(new MouseEvent("click"))); + p.download = this.weightDataFileName, p.href = o, await YN(() => p.dispatchEvent(new MouseEvent("click"))); } - return { modelArtifactsInfo: $a(e) }; + return { modelArtifactsInfo: va(e) }; } } }; -bl.URL_SCHEME = "downloads://"; -var gS = class { +dc.URL_SCHEME = "downloads://"; +var oS = class { constructor(e) { if (e == null || e.length < 1) throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`); @@ -8767,7 +8767,7 @@ var gS = class { e({ modelTopology: a }); return; } - let p = il(s, (u) => this.loadWeights(u)); + let p = tc(s, (u) => this.loadWeights(u)); e(p); }, o.onerror = (n) => t10(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`), o.readAsText(this.jsonFile); }); @@ -8789,10 +8789,10 @@ var gS = class { }); } checkManifestAndWeightFiles(e) { - let t10 = [], o = this.weightsFiles.map((s) => Ww(s.name)), n = {}; + let t10 = [], o = this.weightsFiles.map((s) => Ew(s.name)), n = {}; for (let s of e) s.paths.forEach((a) => { - let i = Ww(a); + let i = Ew(a); if (t10.indexOf(i) !== -1) throw new Error(`Duplicate file basename found in weights manifest: '${i}'`); if (t10.push(i), o.indexOf(i) === -1) @@ -8804,42 +8804,42 @@ var gS = class { return n; } }; -var $5 = (r16) => A().getBool("IS_BROWSER") && !Array.isArray(r16) && r16.startsWith(bl.URL_SCHEME) ? R5(r16.slice(bl.URL_SCHEME.length)) : null; -Xt.registerSaveRouter($5); -function R5(r16 = "model") { - return new bl(r16); +var lX = (r15) => A().getBool("IS_BROWSER") && !Array.isArray(r15) && r15.startsWith(dc.URL_SCHEME) ? mX(r15.slice(dc.URL_SCHEME.length)) : null; +qt.registerSaveRouter(lX); +function mX(r15 = "model") { + return new dc(r15); } -function OT(r16) { - return new gS(r16); +function QN(r15) { + return new oS(r15); } -function xS(r16, e, t10, o) { - a(r16), t10 = t10 == null ? 0 : t10, o = o == null ? 1 : o, i(t10, o); +function nS(r15, e, t10, o) { + a(r15), t10 = t10 == null ? 0 : t10, o = o == null ? 1 : o, i(t10, o); let n = 0, s = (p) => (p.then((u) => { - let l = t10 + ++n / r16.length * (o - t10); - return e(l), u; + let c = t10 + ++n / r15.length * (o - t10); + return e(c), u; }), p); function a(p) { - $(p != null && Array.isArray(p) && p.length > 0, () => "promises must be a none empty array"); + E(p != null && Array.isArray(p) && p.length > 0, () => "promises must be a none empty array"); } function i(p, u) { - $(p >= 0 && p <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${p}`), $(u >= 0 && u <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${u}`), $(u >= p, () => `startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`); + E(p >= 0 && p <= 1, () => `Progress fraction must be in range [0, 1], but got startFraction ${p}`), E(u >= 0 && u <= 1, () => `Progress fraction must be in range [0, 1], but got endFraction ${u}`), E(u >= p, () => `startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`); } - return Promise.all(r16.map(s)); + return Promise.all(r15.map(s)); } -async function yS(r16, e) { +async function sS(r15, e) { e == null && (e = {}); - let t10 = e.fetchFunc == null ? A().platform.fetch : e.fetchFunc, o = r16.map((c) => t10(c, e.requestInit, { isBinary: true })), i = (e.onProgress == null ? await Promise.all(o) : await xS(o, e.onProgress, 0, 0.5)).map((c) => c.arrayBuffer()); - return e.onProgress == null ? await Promise.all(i) : await xS(i, e.onProgress, 0.5, 1); + let t10 = e.fetchFunc == null ? A().platform.fetch : e.fetchFunc, o = r15.map((l) => t10(l, e.requestInit, { isBinary: true })), i = (e.onProgress == null ? await Promise.all(o) : await nS(o, e.onProgress, 0, 0.5)).map((l) => l.arrayBuffer()); + return e.onProgress == null ? await Promise.all(i) : await nS(i, e.onProgress, 0.5, 1); } -function MT(r16, e) { +function ZN(r15, e) { var t10; let o = e.fetchFunc == null ? A().platform.fetch : e.fetchFunc, n = 0, s; return (t10 = e.onProgress) === null || t10 === void 0 || t10.call(e, 0), new ReadableStream({ pull: async (a) => { - for (var i; n < r16.length; ) { - s || (s = (await o(r16[n], e.requestInit, { isBinary: true })).body.getReader()); + for (var i; n < r15.length; ) { + s || (s = (await o(r15[n], e.requestInit, { isBinary: true })).body.getReader()); let { done: p, value: u } = await s.read(); if (p) { - n++, s = void 0, (i = e.onProgress) === null || i === void 0 || i.call(e, n / r16.length); + n++, s = void 0, (i = e.onProgress) === null || i === void 0 || i.call(e, n / r15.length); continue; } a.enqueue(u); @@ -8848,21 +8848,21 @@ function MT(r16, e) { a.close(); } }); } -async function LT(r16, e = "", t10, o) { - return bS((a) => yS(a, { requestInit: o }))(r16, e, t10); +async function JN(r15, e = "", t10, o) { + return aS((a) => sS(a, { requestInit: o }))(r15, e, t10); } -function bS(r16) { +function aS(r15) { return async (e, t10 = "", o) => { let n = e.map(() => false), s = {}, a = o != null ? o.map(() => false) : [], i = []; if (e.forEach((d, f) => { let h = 0; d.weights.forEach((g) => { - let x = "quantization" in g ? g.quantization.dtype : g.dtype, b = fi[x] * ze(g.shape), w = () => { + let x = "quantization" in g ? g.quantization.dtype : g.dtype, b = si[x] * ze(g.shape), C = () => { n[f] = true, s[f] == null && (s[f] = []), s[f].push({ manifestEntry: g, groupOffset: h, sizeBytes: b }); }; o != null ? o.forEach((S, k) => { - S === g.name && (w(), a[k] = true); - }) : w(), i.push(g.name), h += b; + S === g.name && (C(), a[k] = true); + }) : C(), i.push(g.name), h += b; }); }), !a.every((d) => d)) { let d = o.filter((f, h) => !a[h]); @@ -8876,22 +8876,22 @@ Manifest JSON has weights with names: ${i.join(", ")}.`); u.push(h); }); }); - let l = await r16(u), c = {}, m = 0; + let c = await r15(u), l = {}, m = 0; return p.forEach((d) => { - let f = e[d].paths.length, h = new lr(l.slice(m, m + f)); + let f = e[d].paths.length, h = new ir(c.slice(m, m + f)); s[d].forEach((x) => { - let b = h.slice(x.groupOffset, x.groupOffset + x.sizeBytes), w = hd(b, [x.manifestEntry]); - for (let S in w) - c[S] = w[S]; + let b = h.slice(x.groupOffset, x.groupOffset + x.sizeBytes), C = sd(b, [x.manifestEntry]); + for (let S in C) + l[S] = C[S]; }), m += f; - }), c; + }), l; }; } -var D5 = "application/octet-stream"; -var A5 = "application/json"; -var Bc = class { +var dX = "application/octet-stream"; +var fX = "application/json"; +var Dl = class { constructor(e, t10) { - if (this.DEFAULT_METHOD = "POST", t10 == null && (t10 = {}), this.weightPathPrefix = t10.weightPathPrefix, this.weightUrlConverter = t10.weightUrlConverter, t10.fetchFunc != null ? ($(typeof t10.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 = t10.fetchFunc) : this.fetch = A().platform.fetch, $(e != null && e.length > 0, () => "URL path for http must not be null, undefined or empty."), Array.isArray(e) && $(e.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${e.length}).`), this.path = e, t10.requestInit != null && t10.requestInit.body != null) + if (this.DEFAULT_METHOD = "POST", t10 == null && (t10 = {}), this.weightPathPrefix = t10.weightPathPrefix, this.weightUrlConverter = t10.weightUrlConverter, t10.fetchFunc != null ? (E(typeof t10.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 = t10.fetchFunc) : this.fetch = A().platform.fetch, E(e != null && e.length > 0, () => "URL path for http must not be null, undefined or empty."), Array.isArray(e) && E(e.length === 2, () => `URL paths for http must have a length of 2, (actual length is ${e.length}).`), this.path = e, t10.requestInit != null && t10.requestInit.body != null) throw new Error("requestInit is expected to have no pre-existing body, but has one."); this.requestInit = t10.requestInit || {}, this.loadOptions = t10; } @@ -8900,14 +8900,14 @@ var Bc = class { throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet."); let t10 = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit); t10.body = new FormData(); - let o = [{ paths: ["./model.weights.bin"], weights: e.weightSpecs }], n = xd(e, o); - if (t10.body.append("model.json", new Blob([JSON.stringify(n)], { type: A5 }), "model.json"), e.weightData != null) { - let a = lr.join(e.weightData); - t10.body.append("model.weights.bin", new Blob([a], { type: D5 }), "model.weights.bin"); + let o = [{ paths: ["./model.weights.bin"], weights: e.weightSpecs }], n = id(e, o); + if (t10.body.append("model.json", new Blob([JSON.stringify(n)], { type: fX }), "model.json"), e.weightData != null) { + let a = ir.join(e.weightData); + t10.body.append("model.weights.bin", new Blob([a], { type: dX }), "model.weights.bin"); } let s = await this.fetch(this.path, t10); if (s.ok) - return { modelArtifactsInfo: $a(e), responses: [s] }; + return { modelArtifactsInfo: va(e), responses: [s] }; throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`); } async loadModelJSON() { @@ -8930,51 +8930,51 @@ var Bc = class { if (this.loadOptions.streamWeights) return this.loadStream(); let e = await this.loadModelJSON(); - return il(e, (t10) => this.loadWeights(t10)); + return tc(e, (t10) => this.loadWeights(t10)); } async loadStream() { - let e = await this.loadModelJSON(), t10 = await this.getWeightUrls(e.weightsManifest), o = Ec(e.weightsManifest), n = () => MT(t10, this.loadOptions); + let e = await this.loadModelJSON(), t10 = await this.getWeightUrls(e.weightsManifest), o = Sl(e.weightsManifest), n = () => ZN(t10, this.loadOptions); return Object.assign(Object.assign({}, e), { weightSpecs: o, getWeightStream: n }); } async getWeightUrls(e) { - let t10 = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = F5(t10), s = this.weightPathPrefix || o, a = [], i = []; + let t10 = Array.isArray(this.path) ? this.path[1] : this.path, [o, n] = hX(t10), s = this.weightPathPrefix || o, a = [], i = []; for (let p of e) for (let u of p.paths) this.weightUrlConverter != null ? i.push(this.weightUrlConverter(u)) : a.push(s + u + n); return this.weightUrlConverter && a.push(...await Promise.all(i)), a; } async loadWeights(e) { - let t10 = await this.getWeightUrls(e), o = Ec(e), n = await yS(t10, this.loadOptions); + let t10 = await this.getWeightUrls(e), o = Sl(e), n = await sS(t10, this.loadOptions); return [o, n]; } }; -Bc.URL_SCHEME_REGEX = /^https?:\/\//; -function F5(r16) { - let e = r16.lastIndexOf("/"), t10 = r16.lastIndexOf("?"), o = r16.substring(0, e), n = t10 > e ? r16.substring(t10) : ""; +Dl.URL_SCHEME_REGEX = /^https?:\/\//; +function hX(r15) { + let e = r15.lastIndexOf("/"), t10 = r15.lastIndexOf("?"), o = r15.substring(0, e), n = t10 > e ? r15.substring(t10) : ""; return [o + "/", n]; } -function ff(r16) { - return r16.match(Bc.URL_SCHEME_REGEX) != null; +function of(r15) { + return r15.match(Dl.URL_SCHEME_REGEX) != null; } -var BT = (r16, e) => { +var eT = (r15, e) => { if (typeof fetch == "undefined" && (e == null || e.fetchFunc == null)) return null; { let t10 = true; - if (Array.isArray(r16) ? t10 = r16.every((o) => ff(o)) : t10 = ff(r16), t10) - return hf(r16, e); + if (Array.isArray(r15) ? t10 = r15.every((o) => of(o)) : t10 = of(r15), t10) + return nf(r15, e); } return null; }; -Xt.registerSaveRouter(BT); -Xt.registerLoadRouter(BT); -function hf(r16, e) { - return new Bc(r16, e); +qt.registerSaveRouter(eT); +qt.registerLoadRouter(eT); +function nf(r15, e) { + return new Dl(r15, e); } -function zT(r16, e) { - return hf(r16, e); +function tT(r15, e) { + return nf(r15, e); } -var zc = class { +var Al = class { constructor(e) { this.modelArtifacts = e; } @@ -8982,7 +8982,7 @@ var zc = class { return this.modelArtifacts; } }; -var gf = class { +var sf = class { constructor(e) { this.saveHandler = e; } @@ -8990,139 +8990,139 @@ var gf = class { return this.saveHandler(e); } }; -var CS = class { +var iS = class { constructor(e) { e.load && (this.load = () => Promise.resolve(e.load())), e.save && (this.save = (t10) => Promise.resolve(e.save(t10))); } }; -function VT(r16, e, t10, o) { +function rT(r15, e, t10, o) { let n = arguments; - return new CS(wS(...n)); + return new iS(uS(...n)); } -function wS(r16, e, t10, o) { - return arguments.length === 1 ? r16.modelTopology != null || r16.weightSpecs != null ? new zc(r16) : (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 zc({ modelTopology: r16 })) : (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 zc({ modelTopology: r16, weightSpecs: e, weightData: t10, trainingConfig: o })); +function uS(r15, e, t10, o) { + return arguments.length === 1 ? r15.modelTopology != null || r15.weightSpecs != null ? new Al(r15) : (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 Al({ modelTopology: r15 })) : (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 Al({ modelTopology: r15, weightSpecs: e, weightData: t10, trainingConfig: o })); } -function WT(r16) { - return new gf(r16); +function oT(r15) { + return new sf(r15); } -function UT(r16) { - return new gf(r16); +function nT(r15) { + return new sf(r15); } -var HT = {}; -qe(HT, { confusionMatrix: () => GT }); -function P5(r16, e, t10) { - let o = v(r16, "labels", "confusionMatrix"), n = v(e, "predictions", "confusionMatrix"); - $(t10 == null || t10 > 0 && Number.isInteger(t10), () => `If provided, numClasses must be a positive integer, but got ${t10}`), $(o.rank === 1, () => `Expected the rank of labels to be 1, but got ${o.rank}`), $(n.rank === 1, () => `Expected the rank of predictions to be 1, but got ${n.rank}`), $(o.shape[0] === n.shape[0], () => `Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`), $(t10 > 0 && Number.isInteger(t10), () => `numClasses is required to be a positive integer, but got ${t10}`); - let s = Oc(Ue(o, "int32"), t10), a = Oc(Ue(n, "int32"), t10), i = yl(s), p = Je(i, a); +var aT = {}; +qe(aT, { confusionMatrix: () => sT }); +function gX(r15, e, t10) { + let o = v(r15, "labels", "confusionMatrix"), n = v(e, "predictions", "confusionMatrix"); + E(t10 == null || t10 > 0 && Number.isInteger(t10), () => `If provided, numClasses must be a positive integer, but got ${t10}`), E(o.rank === 1, () => `Expected the rank of labels to be 1, but got ${o.rank}`), E(n.rank === 1, () => `Expected the rank of predictions to be 1, but got ${n.rank}`), E(o.shape[0] === n.shape[0], () => `Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`), E(t10 > 0 && Number.isInteger(t10), () => `numClasses is required to be a positive integer, but got ${t10}`); + let s = El(Ue(o, "int32"), t10), a = El(Ue(n, "int32"), t10), i = mc(s), p = Ze(i, a); return Ue(p, "int32"); } -var GT = N({ confusionMatrix_: P5 }); -var XT = {}; -qe(XT, { draw: () => U5, fromPixels: () => G5, fromPixelsAsync: () => z5, toPixels: () => W5 }); -var cp; -var KT = false; -function qT(r16, e = 3) { +var sT = N({ confusionMatrix_: gX }); +var cT = {}; +qe(cT, { draw: () => vX, fromPixels: () => kX, fromPixelsAsync: () => wX, toPixels: () => IX }); +var sp; +var iT = false; +function uT(r15, e = 3) { if (e > 4) throw new Error("Cannot construct Tensor with more than 4 channels from pixels."); - if (r16 == null) + if (r15 == null) throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); let t10 = false, o = false, n = false, s = false, a = false, i = false; - if (r16.data instanceof Uint8Array) + if (r15.data instanceof Uint8Array) t10 = true; - else if (typeof ImageData != "undefined" && r16 instanceof ImageData) + else if (typeof ImageData != "undefined" && r15 instanceof ImageData) o = true; - else if (typeof HTMLVideoElement != "undefined" && r16 instanceof HTMLVideoElement) + else if (typeof HTMLVideoElement != "undefined" && r15 instanceof HTMLVideoElement) n = true; - else if (typeof HTMLImageElement != "undefined" && r16 instanceof HTMLImageElement) + else if (typeof HTMLImageElement != "undefined" && r15 instanceof HTMLImageElement) s = true; - else if (r16.getContext != null) + else if (r15.getContext != null) a = true; - else if (typeof ImageBitmap != "undefined" && r16 instanceof ImageBitmap) + else if (typeof ImageBitmap != "undefined" && r15 instanceof ImageBitmap) i = true; 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 ${r16.constructor.name}`); - if (tl(Lu, _.backendName) != null) { - let f = { pixels: r16 }, h = { numChannels: e }; - return _.runKernel(Lu, f, h); + 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 ${r15.constructor.name}`); + if (Xp(Du, T.backendName) != null) { + let f = { pixels: r15 }, h = { numChannels: e }; + return T.runKernel(Du, f, h); } - let [u, l] = n ? [r16.videoWidth, r16.videoHeight] : [r16.width, r16.height], c; + let [u, c] = n ? [r15.videoWidth, r15.videoHeight] : [r15.width, r15.height], l; if (a) - c = r16.getContext("2d").getImageData(0, 0, u, l).data; + l = r15.getContext("2d").getImageData(0, 0, u, c).data; else if (o || t10) - c = r16.data; + l = r15.data; else if (s || n || i) { - if (cp == null) + if (sp == null) if (typeof document == "undefined") if (typeof OffscreenCanvas != "undefined" && typeof OffscreenCanvasRenderingContext2D != "undefined") - cp = new OffscreenCanvas(1, 1).getContext("2d"); + sp = new OffscreenCanvas(1, 1).getContext("2d"); else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported."); else - cp = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); - cp.canvas.width = u, cp.canvas.height = l, cp.drawImage(r16, 0, 0, u, l), c = cp.getImageData(0, 0, u, l).data; + sp = document.createElement("canvas").getContext("2d", { willReadFrequently: true }); + sp.canvas.width = u, sp.canvas.height = c, sp.drawImage(r15, 0, 0, u, c), l = sp.getImageData(0, 0, u, c).data; } let m; if (e === 4) - m = new Int32Array(c); + m = new Int32Array(l); else { - let f = u * l; + let f = u * c; m = new Int32Array(f * e); for (let h = 0; h < f; h++) for (let g = 0; g < e; ++g) - m[h * e + g] = c[h * 4 + g]; + m[h * e + g] = l[h * 4 + g]; } - return nf(m, [l, u, e], "int32"); + return jd(m, [c, u, e], "int32"); } -function O5(r16) { - return r16 != null && r16.data instanceof Uint8Array; +function xX(r15) { + return r15 != null && r15.data instanceof Uint8Array; } -function M5() { +function yX() { return typeof window != "undefined" && typeof ImageBitmap != "undefined" && window.hasOwnProperty("createImageBitmap"); } -function L5(r16) { - return r16 != null && r16.width !== 0 && r16.height !== 0; +function bX(r15) { + return r15 != null && r15.width !== 0 && r15.height !== 0; } -function B5(r16) { - return M5() && !(r16 instanceof ImageBitmap) && L5(r16) && !O5(r16); +function CX(r15) { + return yX() && !(r15 instanceof ImageBitmap) && bX(r15) && !xX(r15); } -async function z5(r16, e = 3) { +async function wX(r15, e = 3) { let t10 = null; - if (A().getBool("WRAP_TO_IMAGEBITMAP") && B5(r16)) { + if (A().getBool("WRAP_TO_IMAGEBITMAP") && CX(r15)) { let o; try { - o = await createImageBitmap(r16, { premultiplyAlpha: "none" }); + o = await createImageBitmap(r15, { premultiplyAlpha: "none" }); } catch (n) { o = null; } - o != null && o.width === r16.width && o.height === r16.height ? t10 = o : t10 = r16; + o != null && o.width === r15.width && o.height === r15.height ? t10 = o : t10 = r15; } else - t10 = r16; - return qT(t10, e); + t10 = r15; + return uT(t10, e); } -function jT(r16) { - if (r16.rank !== 2 && r16.rank !== 3) - throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r16.rank}.`); - let e = r16.rank === 2 ? 1 : r16.shape[2]; +function pT(r15) { + if (r15.rank !== 2 && r15.rank !== 3) + throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${r15.rank}.`); + let e = r15.rank === 2 ? 1 : r15.shape[2]; if (e > 4 || e === 2) throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`); - if (r16.dtype !== "float32" && r16.dtype !== "int32") - throw new Error(`Unsupported type for toPixels: ${r16.dtype}. Please use float32 or int32 tensors.`); + if (r15.dtype !== "float32" && r15.dtype !== "int32") + throw new Error(`Unsupported type for toPixels: ${r15.dtype}. Please use float32 or int32 tensors.`); } -function V5(r16) { - let e = (r16 == null ? void 0 : r16.alpha) || 1; +function SX(r15) { + let e = (r15 == null ? void 0 : r15.alpha) || 1; if (e > 1 || e < 0) throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`); } -async function W5(r16, e) { - let t10 = v(r16, "img", "toPixels"); - if (!(r16 instanceof dt)) { +async function IX(r15, e) { + let t10 = v(r15, "img", "toPixels"); + if (!(r15 instanceof mt)) { let u = t10; t10 = Ue(u, "int32"), u.dispose(); } - jT(t10); + pT(t10); let [o, n] = t10.shape.slice(0, 2), s = t10.rank === 2 ? 1 : t10.shape[2], a = await t10.data(), i = t10.dtype === "float32" ? 255 : 1, p = new Uint8ClampedArray(n * o * 4); for (let u = 0; u < o * n; ++u) { - let l = [0, 0, 0, 255]; + let c = [0, 0, 0, 255]; for (let m = 0; m < s; m++) { let d = a[u * s + m]; if (t10.dtype === "float32") { @@ -9130,33 +9130,33 @@ async function W5(r16, e) { throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`); } else if (t10.dtype === "int32" && (d < 0 || d > 255)) throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`); - s === 1 ? (l[0] = d * i, l[1] = d * i, l[2] = d * i) : l[m] = d * i; + s === 1 ? (c[0] = d * i, c[1] = d * i, c[2] = d * i) : c[m] = d * i; } - let c = u * 4; - p[c + 0] = Math.round(l[0]), p[c + 1] = Math.round(l[1]), p[c + 2] = Math.round(l[2]), p[c + 3] = Math.round(l[3]); + let l = u * 4; + p[l + 0] = Math.round(c[0]), p[l + 1] = Math.round(c[1]), p[l + 2] = Math.round(c[2]), p[l + 3] = Math.round(c[3]); } if (e != null) { - KT || tl(Mu, _.backendName) != null && (console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."), KT = true), e.width = n, e.height = o; - let u = e.getContext("2d"), l = new ImageData(p, n, o); - u.putImageData(l, 0, 0); + iT || Xp($u, T.backendName) != null && (console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."), iT = true), e.width = n, e.height = o; + let u = e.getContext("2d"), c = new ImageData(p, n, o); + u.putImageData(c, 0, 0); } - return t10 !== r16 && t10.dispose(), p; + return t10 !== r15 && t10.dispose(), p; } -function U5(r16, e, t10) { - let o = v(r16, "img", "draw"); - if (!(r16 instanceof dt)) { +function vX(r15, e, t10) { + let o = v(r15, "img", "draw"); + if (!(r15 instanceof mt)) { let a = o; o = Ue(a, "int32"), a.dispose(); } - jT(o), V5(t10 == null ? void 0 : t10.imageOptions); + pT(o), SX(t10 == null ? void 0 : t10.imageOptions); let n = { image: o }, s = { canvas: e, options: t10 }; - _.runKernel(Mu, n, s); + T.runKernel($u, n, s); } -var G5 = N({ fromPixels_: qT }); -var xf = {}; -qe(xf, { prepareAndValidate: () => YT }); -function YT(r16, e) { - let t10 = r16.shape.length, o = e.shape.length; +var kX = N({ fromPixels_: uT }); +var af = {}; +qe(af, { prepareAndValidate: () => lT }); +function lT(r15, e) { + let t10 = r15.shape.length, o = e.shape.length; if (t10 < 1) throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t10}.`); if (o < 1) @@ -9165,111 +9165,111 @@ function YT(r16, e) { throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`); if (e.shape[o - 1] > t10) throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o - 1]} vs. ${t10}`); - if (ze(r16.shape) === 0) - throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r16.shape}.`); + if (ze(r15.shape) === 0) + throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r15.shape}.`); let n = e.shape, s = n[n.length - 1], a = 1; - for (let c = 0; c < n.length - 1; ++c) - a *= n[c]; - let i = r16.shape, p = n.slice(); + for (let l = 0; l < n.length - 1; ++l) + a *= n[l]; + let i = r15.shape, p = n.slice(); p.pop(); let u = 1; - for (let c = s; c < t10; ++c) - u *= i[c], p.push(i[c]); - let l = [...oa(r16.shape).map((c) => c / u), 1].slice(0, s); - return [p, a, u, l]; -} -var nt = {}; -qe(nt, { assertParamsValid: () => K5, computeFlatOffset: () => Q5, computeOutShape: () => j5, getNormalizedAxes: () => X5, isSliceContinous: () => Y5, maskToAxes: () => q5, parseSliceParams: () => Z5, sliceInfo: () => J5, startForAxis: () => n_, startIndicesWithElidedDims: () => t_, stopForAxis: () => s_, stopIndicesWithElidedDims: () => r_, stridesForAxis: () => o_, stridesWithElidedDims: () => ZT }); -var SS = -2; -var H5 = -1; -function K5(r16, e, t10) { - let o = r16.shape.length; - $(o === e.length, () => `Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`), $(o === t10.length, () => `Error in slice${o}D: Length of size ${t10} must match the rank of the array (${o}).`); + for (let l = s; l < t10; ++l) + u *= i[l], p.push(i[l]); + let c = [...js(r15.shape).map((l) => l / u), 1].slice(0, s); + return [p, a, u, c]; +} +var pt = {}; +qe(pt, { assertParamsValid: () => TX, computeFlatOffset: () => DX, computeOutShape: () => EX, getNormalizedAxes: () => $X, isSliceContinous: () => RX, maskToAxes: () => _X, parseSliceParams: () => AX, sliceInfo: () => FX, startForAxis: () => bT, startIndicesWithElidedDims: () => gT, stopForAxis: () => CT, stopIndicesWithElidedDims: () => xT, stridesForAxis: () => yT, stridesWithElidedDims: () => dT }); +var pS = -2; +var NX = -1; +function TX(r15, e, t10) { + let o = r15.shape.length; + E(o === e.length, () => `Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`), E(o === t10.length, () => `Error in slice${o}D: Length of size ${t10} must match the rank of the array (${o}).`); for (let n = 0; n < o; ++n) - $(e[n] + t10[n] <= r16.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t10[n]}) would overflow input.shape[${n}] (${r16.shape[n]})`); + E(e[n] + t10[n] <= r15.shape[n], () => `Error in slice${o}D: begin[${n}] + size[${n}] (${e[n] + t10[n]}) would overflow input.shape[${n}] (${r15.shape[n]})`); } -function q5(r16) { +function _X(r15) { let e = [], t10 = 0; - for (; r16 > 0; ) - r16 & 1 && e.push(t10), r16 /= 2, t10++; + for (; r15 > 0; ) + r15 & 1 && e.push(t10), r15 /= 2, t10++; return e; } -function j5(r16, e, t10) { +function EX(r15, e, t10) { let o = []; - for (let n = 0; n < r16.length; n++) - o[n] = Math.ceil((e[n] - r16[n]) / t10[n]); + for (let n = 0; n < r15.length; n++) + o[n] = Math.ceil((e[n] - r15[n]) / t10[n]); return o; } -function ZT(r16, e, t10, o) { - let n = [...r16]; +function dT(r15, e, t10, o) { + let n = [...r15]; for (let s = n.length; s < o.length; s++) n.push(1); for (let s = 0; s < t10; s++) s === 0 ? n[e] = 1 : (n.splice(e, 0, 1), n.pop()); return n; } -function JT(r16, e, t10) { - return t10 <= r16 ? t10 : t10 - (e - 1); +function fT(r15, e, t10) { + return t10 <= r15 ? t10 : t10 - (e - 1); } -function e_(r16, e) { +function hT(r15, e) { let t10 = []; - for (let o = 0; o < r16; o++) + for (let o = 0; o < r15; o++) t10.push(e + o); return t10; } -function X5(r16, e, t10, o, n, s, a, i, p) { - let u = r16.length, l = new Array(u), c = new Array(u), m = new Array(u); +function $X(r15, e, t10, o, n, s, a, i, p) { + let u = r15.length, c = new Array(u), l = new Array(u), m = new Array(u); if (e.length && t10 > 0) { let d = e[0], f = t10 + 1; - l = t_(a, d, f, o, r16), c = r_(i, d, f, n, r16), m = ZT(s, d, f, r16); + c = gT(a, d, f, o, r15), l = xT(i, d, f, n, r15), m = dT(s, d, f, r15); } else for (let d = 0; d < u; d++) - l[d] = n_(a, o, s, r16, d, p), c[d] = s_(i, n, s, r16, d, p), m[d] = o_(s, d, p); - return { begin: l, end: c, strides: m }; + c[d] = bT(a, o, s, r15, d, p), l[d] = CT(i, n, s, r15, d, p), m[d] = yT(s, d, p); + return { begin: c, end: l, strides: m }; } -function t_(r16, e, t10, o, n) { - let s = [...n], a = e_(t10, e); +function gT(r15, e, t10, o, n) { + let s = [...n], a = hT(t10, e); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = 0; else { - let p = JT(e, t10, i), u = o[p]; - r16 & 1 << p && (u = 0), s[i] = u; + let p = fT(e, t10, i), u = o[p]; + r15 & 1 << p && (u = 0), s[i] = u; } return s; } -function r_(r16, e, t10, o, n) { - let s = [...n], a = e_(t10, e); +function xT(r15, e, t10, o, n) { + let s = [...n], a = hT(t10, e); for (let i = 0; i < s.length; i++) if (a.indexOf(i) > -1) s[i] = Number.MAX_SAFE_INTEGER; else { - let p = JT(e, t10, i), u = o[p]; - r16 & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; + let p = fT(e, t10, i), u = o[p]; + r15 & 1 << p && (u = Number.MAX_SAFE_INTEGER), s[i] = u; } for (let i = 0; i < s.length; i++) { let p = n[i]; - s[i] < 0 && (s[i] += p), s[i] = qp(0, s[i], n[i]); + s[i] < 0 && (s[i] += p), s[i] = Vp(0, s[i], n[i]); } return s; } -function o_(r16, e, t10) { - let o = r16[e]; +function yT(r15, e, t10) { + let o = r15[e]; return (t10 & 1 << e || o == null) && (o = 1), o; } -function n_(r16, e, t10, o, n, s) { +function bT(r15, e, t10, o, n, s) { let a = e[n], i = t10[n] || 1; - (r16 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MIN_SAFE_INTEGER : a = Number.MAX_SAFE_INTEGER); + (r15 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MIN_SAFE_INTEGER : a = Number.MAX_SAFE_INTEGER); let p = o[n]; - return a < 0 && (a += p), a = qp(0, a, p - 1), a; + return a < 0 && (a += p), a = Vp(0, a, p - 1), a; } -function s_(r16, e, t10, o, n, s) { +function CT(r15, e, t10, o, n, s) { let a = e[n], i = t10[n] || 1; - (r16 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MAX_SAFE_INTEGER : a = Number.MIN_SAFE_INTEGER); + (r15 & 1 << n || s & 1 << n || a == null) && (i > 0 ? a = Number.MAX_SAFE_INTEGER : a = Number.MIN_SAFE_INTEGER); let p = o[n]; - return a < 0 && (a += p), i > 0 ? a = qp(0, a, p) : a = qp(-1, a, p - 1), a; + return a < 0 && (a += p), i > 0 ? a = Vp(0, a, p) : a = Vp(-1, a, p - 1), a; } -function Y5(r16, e, t10) { +function RX(r15, e, t10) { let o = t10.length; for (let n = 0; n < t10.length; n++) if (t10[n] > 1) { @@ -9277,318 +9277,318 @@ function Y5(r16, e, t10) { break; } for (let n = o + 1; n < t10.length; n++) - if (e[n] > 0 || t10[n] !== r16[n]) + if (e[n] > 0 || t10[n] !== r15[n]) return false; return true; } -function Q5(r16, e) { - let t10 = r16.length > 0 ? r16[r16.length - 1] : 1; - for (let o = 0; o < r16.length - 1; o++) - t10 += r16[o] * e[o]; +function DX(r15, e) { + let t10 = r15.length > 0 ? r15[r15.length - 1] : 1; + for (let o = 0; o < r15.length - 1; o++) + t10 += r15[o] * e[o]; return t10; } -function Z5(r16, e, t10) { - let o, n = r16.shape.length; +function AX(r15, e, t10) { + let o, n = r15.shape.length; typeof e == "number" ? o = [e, ...new Array(n - 1).fill(0)] : e.length < n ? o = e.concat(new Array(n - e.length).fill(0)) : o = e.slice(), o.forEach((a) => { - $(a !== -1, () => "slice() does not support negative begin indexing."); + E(a !== -1, () => "slice() does not support negative begin indexing."); }); let s; - return t10 == null ? s = new Array(n).fill(-1) : typeof t10 == "number" ? s = [t10, ...new Array(n - 1).fill(-1)] : t10.length < n ? s = t10.concat(new Array(n - t10.length).fill(-1)) : s = t10, s = s.map((a, i) => a >= 0 ? a : ($(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r16.shape[i] - o[i])), [o, s]; + return t10 == null ? s = new Array(n).fill(-1) : typeof t10 == "number" ? s = [t10, ...new Array(n - 1).fill(-1)] : t10.length < n ? s = t10.concat(new Array(n - t10.length).fill(-1)) : s = t10, s = s.map((a, i) => a >= 0 ? a : (E(a === -1, () => `Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`), r15.shape[i] - o[i])), [o, s]; } -function J5(r16, e, t10, o, n, s, a, i, p) { +function FX(r15, e, t10, o, n, s, a, i, p) { let u; if (o == null ? (u = new Array(e.length), u.fill(1)) : u = o, a != null && a & a - 1) throw new Error("Multiple ellipses in slice is not allowed."); - let l = false, c = { dims: u.length, numAddAxisAfterEllipsis: 0, begin: e.slice(), end: t10.slice(), strides: u.slice(), beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; - for (let w = 0; w < c.dims; w++) - l && 1 << w & i && c.numAddAxisAfterEllipsis++, 1 << w & a && (l = true); - l || (c.ellipsisMask |= 1 << c.dims, c.dims++); - let m = { dims: r16.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; - e8(c, m); + let c = false, l = { dims: u.length, numAddAxisAfterEllipsis: 0, begin: e.slice(), end: t10.slice(), strides: u.slice(), beginMask: n, endMask: s, ellipsisMask: a, newAxisMask: i, shrinkAxisMask: p }; + for (let C = 0; C < l.dims; C++) + c && 1 << C & i && l.numAddAxisAfterEllipsis++, 1 << C & a && (c = true); + c || (l.ellipsisMask |= 1 << l.dims, l.dims++); + let m = { dims: r15.length, beginMask: 0, endMask: 0, beginValid: false, endValid: false }; + PX(l, m); let d = true, f = true, h = true, g = [], x = []; - for (let w = 0; w < r16.length; ++w) { - if (m.strides[w] === 0) - throw Error(`strides[${w}] must be non-zero`); - let S = !!(m.shrinkAxisMask & 1 << w), k = r16[w]; + for (let C = 0; C < r15.length; ++C) { + if (m.strides[C] === 0) + throw Error(`strides[${C}] must be non-zero`); + let S = !!(m.shrinkAxisMask & 1 << C), k = r15[C]; if (k === -1) { g.push(S ? 1 : -1); continue; } - let T = [m.beginMask & 1 << w, m.endMask & 1 << w], E = [m.strides[w] > 0 ? 0 : -1, m.strides[w] > 0 ? k : k - 1]; - if (S && m.strides[w] <= 0) + let _ = [m.beginMask & 1 << C, m.endMask & 1 << C], $ = [m.strides[C] > 0 ? 0 : -1, m.strides[C] > 0 ? k : k - 1]; + if (S && m.strides[C] <= 0) throw Error("only stride 1 allowed on non-range indexing."); - h = h && m.strides[w] === 1; - let R = !!(m.beginMask & 1 << w && m.endMask & 1 << w); + h = h && m.strides[C] === 1; + let R = !!(m.beginMask & 1 << C && m.endMask & 1 << C); if (m.beginValid && m.endValid) { if (S) { - let M = m.begin[w] < 0 ? k + m.begin[w] : m.begin[w]; - if (m.begin[w] = M, m.end[w] = m.begin[w] + 1, M < 0 || M >= k) - throw Error(`slice index ${m.begin[w]} of dimension ${w} out of bounds.`); + let M = m.begin[C] < 0 ? k + m.begin[C] : m.begin[C]; + if (m.begin[C] = M, m.end[C] = m.begin[C] + 1, M < 0 || M >= k) + throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`); } else - m.begin[w] = QT(m.begin[w], 0, m.strides[w], k, T, E), m.end[w] = QT(m.end[w], 1, m.strides[w], k, T, E); - let O = m.strides[w] === 1 && m.begin[w] === 0 && m.end[w] === k; - d = d && O, f = f && (w === 0 && m.strides[w] === 1 || O); + m.begin[C] = mT(m.begin[C], 0, m.strides[C], k, _, $), m.end[C] = mT(m.end[C], 1, m.strides[C], k, _, $); + let O = m.strides[C] === 1 && m.begin[C] === 0 && m.end[C] === k; + d = d && O, f = f && (C === 0 && m.strides[C] === 1 || O); } else - d = d && m.strides[w] === 1 && R, f = f && (w === 0 && m.strides[w] === 1 || R); - let D, F = false; - if (m.beginValid && m.endValid ? (D = m.end[w] - m.begin[w], F = true) : S ? (D = 1, F = true) : R && k >= 0 && (m.strides[w] < 0 ? D = -k : D = k, F = true), F) { + d = d && m.strides[C] === 1 && R, f = f && (C === 0 && m.strides[C] === 1 || R); + let D, P = false; + if (m.beginValid && m.endValid ? (D = m.end[C] - m.begin[C], P = true) : S ? (D = 1, P = true) : R && k >= 0 && (m.strides[C] < 0 ? D = -k : D = k, P = true), P) { let O; - D === 0 || D < 0 != m.strides[w] < 0 ? O = 0 : O = Math.trunc(D / m.strides[w]) + (D % m.strides[w] !== 0 ? 1 : 0), g.push(O); + D === 0 || D < 0 != m.strides[C] < 0 ? O = 0 : O = Math.trunc(D / m.strides[C]) + (D % m.strides[C] !== 0 ? 1 : 0), g.push(O); } else g.push(-1); } - for (let w = 0; w < m.finalShapeGatherIndices.length; ++w) { - let S = m.finalShapeGatherIndices[w]; - S >= 0 ? x.push(g[S]) : S === SS && x.push(1); + for (let C = 0; C < m.finalShapeGatherIndices.length; ++C) { + let S = m.finalShapeGatherIndices[C]; + S >= 0 ? x.push(g[S]) : S === pS && x.push(1); } - return { finalShapeSparse: x.filter((w, S) => m.finalShapeGatherIndices[S] !== SS), finalShape: x, isIdentity: d, sliceDim0: f, isSimpleSlice: h, begin: m.begin, end: m.end, strides: m.strides }; + return { finalShapeSparse: x.filter((C, S) => m.finalShapeGatherIndices[S] !== pS), finalShape: x, isIdentity: d, sliceDim0: f, isSimpleSlice: h, begin: m.begin, end: m.end, strides: m.strides }; } -function e8(r16, e) { +function PX(r15, e) { e.beginMask = 0, e.endMask = 0, e.shrinkAxisMask = 0; let t10 = 0; - e.beginValid = r16.begin != null, e.endValid = r16.end != null, e.begin = new Array(e.dims), e.end = new Array(e.dims), e.strides = new Array(e.dims), e.finalShapeGatherIndices = [], e.finalShapeGatherIndicesSparse = [], e.inputShapeGatherIndicesSparse = new Array(e.dims); - for (let o = 0; o < r16.dims; o++) - if (1 << o & r16.ellipsisMask) { - let n = Math.min(e.dims - (r16.dims - o) + 1 + r16.numAddAxisAfterEllipsis, e.dims); + e.beginValid = r15.begin != null, e.endValid = r15.end != null, e.begin = new Array(e.dims), e.end = new Array(e.dims), e.strides = new Array(e.dims), e.finalShapeGatherIndices = [], e.finalShapeGatherIndicesSparse = [], e.inputShapeGatherIndicesSparse = new Array(e.dims); + for (let o = 0; o < r15.dims; o++) + if (1 << o & r15.ellipsisMask) { + let n = Math.min(e.dims - (r15.dims - o) + 1 + r15.numAddAxisAfterEllipsis, e.dims); for (; t10 < n; t10++) e.begin[t10] = 0, e.end[t10] = 0, e.strides[t10] = 1, e.beginMask |= 1 << t10, e.endMask |= 1 << t10, e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(-1), e.inputShapeGatherIndicesSparse[t10] = o; - } else if (1 << o & r16.newAxisMask) - e.finalShapeGatherIndices.push(SS), e.finalShapeGatherIndicesSparse.push(-1); + } else if (1 << o & r15.newAxisMask) + e.finalShapeGatherIndices.push(pS), e.finalShapeGatherIndicesSparse.push(-1); else { if (t10 === e.begin.length) throw Error(`Index out of range using input dim ${t10}; input has only ${e.dims} dims, ${e.begin.length}.`); - r16.begin != null && (e.begin[t10] = r16.begin[o]), r16.end != null && (e.end[t10] = r16.end[o]), e.strides[t10] = r16.strides[o], r16.beginMask & 1 << o && (e.beginMask |= 1 << t10), r16.endMask & 1 << o && (e.endMask |= 1 << t10), r16.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(H5), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t10) : (e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t10] = o, t10++; + r15.begin != null && (e.begin[t10] = r15.begin[o]), r15.end != null && (e.end[t10] = r15.end[o]), e.strides[t10] = r15.strides[o], r15.beginMask & 1 << o && (e.beginMask |= 1 << t10), r15.endMask & 1 << o && (e.endMask |= 1 << t10), r15.shrinkAxisMask & 1 << o ? (e.finalShapeGatherIndices.push(NX), e.finalShapeGatherIndicesSparse.push(-1), e.shrinkAxisMask |= 1 << t10) : (e.finalShapeGatherIndices.push(t10), e.finalShapeGatherIndicesSparse.push(o)), e.inputShapeGatherIndicesSparse[t10] = o, t10++; } } -function QT(r16, e, t10, o, n, s) { +function mT(r15, e, t10, o, n, s) { if (n[e]) return t10 > 0 ? s[e] : s[e + 1 & 1]; { - let a = r16 < 0 ? o + r16 : r16; + let a = r15 < 0 ? o + r15 : r15; return a < s[0] ? s[0] : a > s[1] ? s[1] : a; } } -var t8 = "4.17.0"; -var Vc = class { +var OX = "4.17.0"; +var Fl = class { static sgd(e) { - return new wi(e); + return new mi(e); } static momentum(e, t10, o = false) { - return new pp(e, t10, o); + return new op(e, t10, o); } static rmsprop(e, t10 = 0.9, o = 0, n = null, s = false) { - return new lp(e, t10, o, n, s); + return new np(e, t10, o, n, s); } static adam(e = 1e-3, t10 = 0.9, o = 0.999, n = null) { - return new ip(e, t10, o, n); + return new tp(e, t10, o, n); } static adadelta(e = 1e-3, t10 = 0.95, o = null) { - return new sp(e, t10, o); + return new Ju(e, t10, o); } static adamax(e = 2e-3, t10 = 0.9, o = 0.999, n = null, s = 0) { - return new up(e, t10, o, n, s); + return new rp(e, t10, o, n, s); } static adagrad(e, t10 = 0.1) { - return new ap(e, t10); - } -}; -var cHe = Vc; -var r82 = typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r16) => r16(); -function IS() { - return new Promise((r16) => r82(() => r16())); -} -var C = {}; -qe(C, { ERF_A1: () => b8, ERF_A2: () => C8, ERF_A3: () => w8, ERF_A4: () => S8, ERF_A5: () => I8, ERF_P: () => y8, PARALLELIZE_THRESHOLD: () => yf, RowPartitionType: () => Va, SELU_SCALE: () => x8, SELU_SCALEALPHA: () => g8, applyActivation: () => op, assertAndGetBroadcastShape: () => rt, assertAxesAreInnerMostDims: () => _q, assertParamsConsistent: () => o8, assignToTypedArray: () => E8, axesAreInnerMostDims: () => Jw, calculateShapes: () => DN, checkEinsumDimSizes: () => P8, checkPadOnDimRoundingMode: () => zt, combineLocations: () => u2, combineRaggedTensorToTensorShapes: () => s8, complexWithEvenIndex: () => N8, complexWithOddIndex: () => T8, computeConv2DInfo: () => Ku, computeConv3DInfo: () => _1, computeDefaultPad: () => Zw, computeDilation2DInfo: () => NK, computeOptimalWindowSize: () => p8, computeOutAndReduceShapes: () => Tq, computeOutShape: () => n8, computePool2DInfo: () => Qw, computePool3DInfo: () => TK, convertConv2DDataFormat: () => E1, decodeEinsumEquation: () => A8, eitherStridesOrDilationsAreOne: () => br, expandShapeToKeepDim: () => gi, exponent: () => R8, exponents: () => $8, fromStringArrayToUint8: () => rY, fromUint8ToStringArray: () => tY, getAxesPermutation: () => Eq, getBroadcastDims: () => o2, getComplexWithIndex: () => _8, getEinsumComputePath: () => O8, getEinsumPermutation: () => F8, getFusedBiasGradient: () => rp, getFusedDyActivation: () => tp, getImageCenter: () => l8, getInnerMostAxes: () => Rq, getPermuted: () => m8, getRaggedRank: () => i8, getReductionAxes: () => Td, getReshaped: () => c8, getReshapedPermuted: () => d8, getRowPartitionTypesHelper: () => a8, getSliceBeginCoords: () => f8, getSliceSize: () => h8, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => z8, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => V8, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => W8, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => H8, getSparseReshapeInputOutputMismatchErrorMessage: () => q8, getSparseReshapeInputOutputMultipleErrorMessage: () => K8, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => U8, getSparseReshapeNegativeOutputDimErrorMessage: () => G8, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => Q8, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => j8, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => X8, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => Y8, getUndoAxesPermutation: () => $q, isIdentityPermutation: () => M8, log: () => CH, mergeRealAndImagArrays: () => v8, prepareAndValidate: () => YT, prepareSplitSize: () => B8, segment_util: () => kS, shouldFuse: () => np, slice_util: () => nt, splitRealAndImagArrays: () => k8, stridesOrDilationsArePositive: () => Aa, tupleValuesAreOne: () => Hu, upcastType: () => pt, validateDefaultValueShape: () => u8, validateInput: () => xl, validateUpdateShape: () => lS, warn: () => Ea }); -function o8(r16, e) { - let t10 = r16[0].length; - r16.forEach((n, s) => { - $(n.length === t10, () => `Error in concat${t10}D: rank of tensors[${s}] must be the same as the rank of the rest (${t10})`); - }), $(e >= 0 && e < t10, () => `Error in concat${t10}D: axis must be between 0 and ${t10 - 1}.`); - let o = r16[0]; - r16.forEach((n, s) => { + return new ep(e, t10); + } +}; +var OGe = Fl; +var MX = typeof requestAnimationFrame != "undefined" ? requestAnimationFrame : typeof setImmediate != "undefined" ? setImmediate : (r15) => r15(); +function cS() { + return new Promise((r15) => MX(() => r15())); +} +var w = {}; +qe(w, { ERF_A1: () => e5, ERF_A2: () => t5, ERF_A3: () => r52, ERF_A4: () => o5, ERF_A5: () => n5, ERF_P: () => JX, PARALLELIZE_THRESHOLD: () => uf, RowPartitionType: () => Fa, SELU_SCALE: () => ZX, SELU_SCALEALPHA: () => QX, applyActivation: () => Qu, assertAndGetBroadcastShape: () => rt, assertAxesAreInnerMostDims: () => pK, assertParamsConsistent: () => LX, assignToTypedArray: () => c5, axesAreInnerMostDims: () => zw, calculateShapes: () => q1, checkEinsumDimSizes: () => g5, checkPadOnDimRoundingMode: () => Lt, combineLocations: () => I2, combineRaggedTensorToTensorShapes: () => zX, complexWithEvenIndex: () => i5, complexWithOddIndex: () => u5, computeConv2DInfo: () => zu, computeConv3DInfo: () => Uk, computeDefaultPad: () => Bw, computeDilation2DInfo: () => iH, computeOptimalWindowSize: () => GX, computeOutAndReduceShapes: () => uK, computeOutShape: () => BX, computePool2DInfo: () => Lw, computePool3DInfo: () => uH, convertConv2DDataFormat: () => Gk, decodeEinsumEquation: () => f5, eitherStridesOrDilationsAreOne: () => gr, expandShapeToKeepDim: () => ii, exponent: () => m5, exponents: () => l5, fromStringArrayToUint8: () => M5, fromUint8ToStringArray: () => O5, getAxesPermutation: () => cK, getBroadcastDims: () => y2, getComplexWithIndex: () => p5, getEinsumComputePath: () => x5, getEinsumPermutation: () => h5, getFusedBiasGradient: () => Yu, getFusedDyActivation: () => Xu, getImageCenter: () => HX, getInnerMostAxes: () => mK, getPermuted: () => qX, getRaggedRank: () => WX, getReductionAxes: () => xd, getReshaped: () => KX, getReshapedPermuted: () => jX, getRowPartitionTypesHelper: () => VX, getSliceBeginCoords: () => XX, getSliceSize: () => YX, getSparseFillEmptyRowsIndicesDenseShapeMismatch: () => w5, getSparseFillEmptyRowsNegativeIndexErrorMessage: () => S5, getSparseFillEmptyRowsOutOfRangeIndexErrorMessage: () => I5, getSparseReshapeEmptyTensorZeroOutputDimErrorMessage: () => N5, getSparseReshapeInputOutputMismatchErrorMessage: () => _5, getSparseReshapeInputOutputMultipleErrorMessage: () => T5, getSparseReshapeMultipleNegativeOneOutputDimErrorMessage: () => v5, getSparseReshapeNegativeOutputDimErrorMessage: () => k5, getSparseSegmentReductionIndicesOutOfRangeErrorMessage: () => D5, getSparseSegmentReductionNegativeSegmentIdsErrorMessage: () => E5, getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage: () => $5, getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage: () => R5, getUndoAxesPermutation: () => lK, isIdentityPermutation: () => y5, log: () => t4, mergeRealAndImagArrays: () => s5, prepareAndValidate: () => lT, prepareSplitSize: () => C5, segment_util: () => mS, shouldFuse: () => Zu, slice_util: () => pt, splitRealAndImagArrays: () => a5, stridesOrDilationsArePositive: () => Ta, tupleValuesAreOne: () => Bu, upcastType: () => dt, validateDefaultValueShape: () => UX, validateInput: () => lc, validateUpdateShape: () => Qw, warn: () => Ia }); +function LX(r15, e) { + let t10 = r15[0].length; + r15.forEach((n, s) => { + E(n.length === t10, () => `Error in concat${t10}D: rank of tensors[${s}] must be the same as the rank of the rest (${t10})`); + }), E(e >= 0 && e < t10, () => `Error in concat${t10}D: axis must be between 0 and ${t10 - 1}.`); + let o = r15[0]; + r15.forEach((n, s) => { for (let a = 0; a < t10; a++) - $(a === e || n[a] === o[a], () => `Error in concat${t10}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`); + E(a === e || n[a] === o[a], () => `Error in concat${t10}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`); }); } -function n8(r16, e) { - let t10 = r16[0].slice(); - for (let o = 1; o < r16.length; o++) - t10[e] += r16[o][e]; +function BX(r15, e) { + let t10 = r15[0].slice(); + for (let o = 1; o < r15.length; o++) + t10[e] += r15[o][e]; return t10; } -var Va; -(function(r16) { - r16[r16.FIRST_DIM_SIZE = 0] = "FIRST_DIM_SIZE", r16[r16.VALUE_ROWIDS = 1] = "VALUE_ROWIDS", r16[r16.ROW_LENGTHS = 2] = "ROW_LENGTHS", r16[r16.ROW_SPLITS = 3] = "ROW_SPLITS", r16[r16.ROW_LIMITS = 4] = "ROW_LIMITS", r16[r16.ROW_STARTS = 5] = "ROW_STARTS"; -})(Va || (Va = {})); -function s8(r16, e, t10) { +var Fa; +(function(r15) { + r15[r15.FIRST_DIM_SIZE = 0] = "FIRST_DIM_SIZE", r15[r15.VALUE_ROWIDS = 1] = "VALUE_ROWIDS", r15[r15.ROW_LENGTHS = 2] = "ROW_LENGTHS", r15[r15.ROW_SPLITS = 3] = "ROW_SPLITS", r15[r15.ROW_LIMITS = 4] = "ROW_LIMITS", r15[r15.ROW_STARTS = 5] = "ROW_STARTS"; +})(Fa || (Fa = {})); +function zX(r15, e, t10) { let o = new Array(); if (t10 == null && e == null) return o; if (e == null) - for (; o.length < r16 + t10.length; ) + for (; o.length < r15 + t10.length; ) o.push(-1); else o = e.slice(); if (t10 == null) return o; - if (r16 + t10.length !== o.length) - throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r16 + t10.length}, but shape.rank = ${o.length}`); + if (r15 + t10.length !== o.length) + throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.rank = ${r15 + t10.length}, but shape.rank = ${o.length}`); for (let n = 1; n < t10.length; ++n) { let s = t10[n], a = o[o.length - t10.length + n], i = o[a]; if (s >= 0) if (i >= 0) { if (i !== s) - throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n + r16}] = ${s} but shape[${n + r16}] = ${i}`); + throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n + r15}] = ${s} but shape[${n + r15}] = ${i}`); } else o[a] = s; } return o; } -function a8(r16) { - let e = { FIRST_DIM_SIZE: Va.FIRST_DIM_SIZE, VALUE_ROWIDS: Va.VALUE_ROWIDS, ROW_LENGTHS: Va.ROW_LENGTHS, ROW_SPLITS: Va.ROW_SPLITS, ROW_LIMITS: Va.ROW_LIMITS, ROW_STARTS: Va.ROW_STARTS }, t10 = []; - for (let o of r16) +function VX(r15) { + let e = { FIRST_DIM_SIZE: Fa.FIRST_DIM_SIZE, VALUE_ROWIDS: Fa.VALUE_ROWIDS, ROW_LENGTHS: Fa.ROW_LENGTHS, ROW_SPLITS: Fa.ROW_SPLITS, ROW_LIMITS: Fa.ROW_LIMITS, ROW_STARTS: Fa.ROW_STARTS }, t10 = []; + for (let o of r15) if (o in e) t10.push(e[o]); else break; return t10; } -function i8(r16) { - return r16.length === 0 ? 0 : r16[0] === Va.FIRST_DIM_SIZE ? r16.length - 1 : r16.length; +function WX(r15) { + return r15.length === 0 ? 0 : r15[0] === Fa.FIRST_DIM_SIZE ? r15.length - 1 : r15.length; } -function u8(r16, e) { - if (r16 == null || e == null) +function UX(r15, e) { + if (r15 == null || e == null) return; - let t10 = r16.length, o = e.length; + let t10 = r15.length, o = e.length; if (t10 >= o) - throw new Error(`defaultValue.shape=${r16} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t10} must be less than ragged tensor input flatValues.rank = ${o})`); + throw new Error(`defaultValue.shape=${r15} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t10} must be less than ragged tensor input flatValues.rank = ${o})`); for (let n = 0; n < Math.min(t10, o - 1); ++n) { - let s = r16[n], a = e[n + 1]; + let s = r15[n], a = e[n + 1]; if (s >= 0 && a >= 0 && s !== 1 && s !== a) - throw new Error(`defaultValue.shape=${r16}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n - r16.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r16.length}] = ${a}`); + throw new Error(`defaultValue.shape=${r15}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n - r15.length}] = ${s} but ragged tensor input.flatValues.shape[${n - r15.length}] = ${a}`); } } -var yf = 30; -function p8(r16) { - return r16 <= yf ? r16 : Xp(r16, Math.floor(Math.sqrt(r16))); +var uf = 30; +function GX(r15) { + return r15 <= uf ? r15 : Up(r15, Math.floor(Math.sqrt(r15))); } -function l8(r16, e, t10) { - let o = t10 * (typeof r16 == "number" ? r16 : r16[0]), n = e * (typeof r16 == "number" ? r16 : r16[1]); +function HX(r15, e, t10) { + let o = t10 * (typeof r15 == "number" ? r15 : r15[0]), n = e * (typeof r15 == "number" ? r15 : r15[1]); return [o, n]; } -function c8(r16, e, t10, o = true) { +function KX(r15, e, t10, o = true) { let n = []; if (o) - n = n.concat(e.slice(0)), n.push(r16[0] / t10), n = n.concat(r16.slice(1)); + n = n.concat(e.slice(0)), n.push(r15[0] / t10), n = n.concat(r15.slice(1)); else { - n = n.concat(r16[0]); + n = n.concat(r15[0]); let s = e.length; for (let a = 0; a < s; ++a) - n = n.concat([r16[a + 1] / e[a], e[a]]); - n = n.concat(r16.slice(s + 1)); + n = n.concat([r15[a + 1] / e[a], e[a]]); + n = n.concat(r15.slice(s + 1)); } return n; } -function m8(r16, e, t10 = true) { +function qX(r15, e, t10 = true) { let o = []; if (t10) { o.push(e); - for (let n = e + 1; n < r16; ++n) + for (let n = e + 1; n < r15; ++n) n <= 2 * e ? (o.push(n), o.push(n - (e + 1))) : o.push(n); } else { let n = [], s = []; - for (let a = 1; a < r16; ++a) + for (let a = 1; a < r15; ++a) a >= e * 2 + 1 || a % 2 === 1 ? s.push(a) : n.push(a); o.push(...n), o.push(0), o.push(...s); } return o; } -function d8(r16, e, t10, o = true) { +function jX(r15, e, t10, o = true) { let n = []; - o ? n.push(r16[0] / t10) : n.push(r16[0] * t10); - for (let s = 1; s < r16.length; ++s) - s <= e.length ? o ? n.push(e[s - 1] * r16[s]) : n.push(r16[s] / e[s - 1]) : n.push(r16[s]); + o ? n.push(r15[0] / t10) : n.push(r15[0] * t10); + for (let s = 1; s < r15.length; ++s) + s <= e.length ? o ? n.push(e[s - 1] * r15[s]) : n.push(r15[s] / e[s - 1]) : n.push(r15[s]); return n; } -function f8(r16, e) { +function XX(r15, e) { let t10 = [0]; for (let o = 0; o < e; ++o) - t10.push(r16[o][0]); + t10.push(r15[o][0]); return t10; } -function h8(r16, e, t10) { - let o = r16.slice(0, 1); +function YX(r15, e, t10) { + let o = r15.slice(0, 1); for (let n = 0; n < t10; ++n) - o.push(r16[n + 1] - e[n][0] - e[n][1]); + o.push(r15[n + 1] - e[n][0] - e[n][1]); return o; } -var g8 = 1.7580993408473768; -var x8 = 1.0507009873554805; -var y8 = 0.3275911; -var b8 = 0.254829592; -var C8 = -0.284496736; -var w8 = 1.421413741; -var S8 = -1.453152027; -var I8 = 1.061405429; -function v8(r16, e) { - if (r16.length !== e.length) - throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r16.length}, imag: ${e.length}.`); - let t10 = new Float32Array(r16.length * 2); +var QX = 1.7580993408473768; +var ZX = 1.0507009873554805; +var JX = 0.3275911; +var e5 = 0.254829592; +var t5 = -0.284496736; +var r52 = 1.421413741; +var o5 = -1.453152027; +var n5 = 1.061405429; +function s5(r15, e) { + if (r15.length !== e.length) + throw new Error(`Cannot merge real and imag arrays of different lengths. real:${r15.length}, imag: ${e.length}.`); + let t10 = new Float32Array(r15.length * 2); for (let o = 0; o < t10.length; o += 2) - t10[o] = r16[o / 2], t10[o + 1] = e[o / 2]; + t10[o] = r15[o / 2], t10[o + 1] = e[o / 2]; return t10; } -function k8(r16) { - let e = new Float32Array(r16.length / 2), t10 = new Float32Array(r16.length / 2); - for (let o = 0; o < r16.length; o += 2) - e[o / 2] = r16[o], t10[o / 2] = r16[o + 1]; +function a5(r15) { + let e = new Float32Array(r15.length / 2), t10 = new Float32Array(r15.length / 2); + for (let o = 0; o < r15.length; o += 2) + e[o / 2] = r15[o], t10[o / 2] = r15[o + 1]; return { real: e, imag: t10 }; } -function N8(r16) { - let e = Math.ceil(r16.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); - for (let n = 0; n < r16.length; n += 4) - t10[Math.floor(n / 4)] = r16[n], o[Math.floor(n / 4)] = r16[n + 1]; +function i5(r15) { + let e = Math.ceil(r15.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); + for (let n = 0; n < r15.length; n += 4) + t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: t10, imag: o }; } -function T8(r16) { - let e = Math.floor(r16.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); - for (let n = 2; n < r16.length; n += 4) - t10[Math.floor(n / 4)] = r16[n], o[Math.floor(n / 4)] = r16[n + 1]; +function u5(r15) { + let e = Math.floor(r15.length / 4), t10 = new Float32Array(e), o = new Float32Array(e); + for (let n = 2; n < r15.length; n += 4) + t10[Math.floor(n / 4)] = r15[n], o[Math.floor(n / 4)] = r15[n + 1]; return { real: t10, imag: o }; } -function _8(r16, e) { - let t10 = r16[e * 2], o = r16[e * 2 + 1]; +function p5(r15, e) { + let t10 = r15[e * 2], o = r15[e * 2 + 1]; return { real: t10, imag: o }; } -function E8(r16, e, t10, o) { - r16[o * 2] = e, r16[o * 2 + 1] = t10; +function c5(r15, e, t10, o) { + r15[o * 2] = e, r15[o * 2 + 1] = t10; } -function $8(r16, e) { - let t10 = new Float32Array(r16 / 2), o = new Float32Array(r16 / 2); - for (let n = 0; n < Math.ceil(r16 / 2); n++) { - let s = (e ? 2 : -2) * Math.PI * (n / r16); +function l5(r15, e) { + let t10 = new Float32Array(r15 / 2), o = new Float32Array(r15 / 2); + for (let n = 0; n < Math.ceil(r15 / 2); n++) { + let s = (e ? 2 : -2) * Math.PI * (n / r15); t10[n] = Math.cos(s), o[n] = Math.sin(s); } return { real: t10, imag: o }; } -function R8(r16, e, t10) { - let o = (t10 ? 2 : -2) * Math.PI * (r16 / e), n = Math.cos(o), s = Math.sin(o); +function m5(r15, e, t10) { + let o = (t10 ? 2 : -2) * Math.PI * (r15 / e), n = Math.cos(o), s = Math.sin(o); return { real: n, imag: s }; } -var vS = "->"; -var D8 = /->/g; -var a_ = ","; -var i_ = "..."; -function A8(r16, e) { - r16 = r16.replace(/\s/g, ""); - let t10 = (r16.length - r16.replace(D8, "").length) / vS.length; +var lS = "->"; +var d5 = /->/g; +var wT = ","; +var ST = "..."; +function f5(r15, e) { + r15 = r15.replace(/\s/g, ""); + let t10 = (r15.length - r15.replace(d5, "").length) / lS.length; if (t10 < 1) throw new Error("Equations without an arrow are not supported."); if (t10 > 1) - throw new Error(`Equation must contain exactly one arrow ("${vS}").`); - let [o, n] = r16.split(vS); - $(o.indexOf(i_) === -1, () => `The ellipsis notation ("${i_}") is not supported yet.`); - let s = o.split(a_), a = s.length; + throw new Error(`Equation must contain exactly one arrow ("${lS}").`); + let [o, n] = r15.split(lS); + E(o.indexOf(ST) === -1, () => `The ellipsis notation ("${ST}") is not supported yet.`); + let s = o.split(wT), a = s.length; if (e !== a) throw new Error(`Expected ${a} input tensors, received ${e}`); if (a > 2) @@ -9602,7 +9602,7 @@ function A8(r16, e) { } for (let m = 0; m < o.length; ++m) { let d = o[m]; - i.indexOf(d) === -1 && d !== a_ && i.push(d); + i.indexOf(d) === -1 && d !== wT && i.push(d); } let p = new Array(s.length); for (let m = 0; m < a; ++m) { @@ -9612,123 +9612,123 @@ function A8(r16, e) { for (let d = 0; d < s[m].length; ++d) p[m].push(i.indexOf(s[m][d])); } - let u = i.length, l = n.length, c = []; - for (let m = l; m < u; ++m) - c.push(m); - return { allDims: i, summedDims: c, idDims: p }; + let u = i.length, c = n.length, l = []; + for (let m = c; m < u; ++m) + l.push(m); + return { allDims: i, summedDims: l, idDims: p }; } -function F8(r16, e) { - let t10 = new Array(r16); +function h5(r15, e) { + let t10 = new Array(r15); t10.fill(-1); for (let n = 0; n < e.length; ++n) t10[e[n]] = n; let o = []; - for (let n = 0; n < r16; ++n) + for (let n = 0; n < r15; ++n) t10[n] === -1 && o.push(n); return t10 = t10.filter((n) => n !== -1), { permutationIndices: t10, expandDims: o }; } -function P8(r16, e, t10) { - let o = new Array(r16); +function g5(r15, e, t10) { + let o = new Array(r15); for (let n = 0; n < t10.length; ++n) { let s = t10[n].shape; for (let a = 0; a < e[n].length; ++a) - o[e[n][a]] === void 0 ? o[e[n][a]] = s[a] : $(o[e[n][a]] === s[a], () => `Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`); + o[e[n][a]] === void 0 ? o[e[n][a]] = s[a] : E(o[e[n][a]] === s[a], () => `Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`); } } -function O8(r16, e) { - let t10 = r16, o = [], n = 0; - r16.length === 0 && t10.push(-1), n = r16.length + 1; +function x5(r15, e) { + let t10 = r15, o = [], n = 0; + r15.length === 0 && t10.push(-1), n = r15.length + 1; for (let a = 0; a < n; ++a) o.push([]); let s = []; for (let a = 0; a < t10.length; ++a) { - let i = t10[a], p = L8(e, i); + let i = t10[a], p = b5(e, i); for (let u of p) s.indexOf(u) === -1 && (o[a].push(u), s.push(u)); } return { path: t10, steps: o }; } -function M8(r16) { - return r16.every((e, t10) => e === t10); +function y5(r15) { + return r15.every((e, t10) => e === t10); } -function L8(r16, e) { +function b5(r15, e) { let t10 = []; - for (let o = 0; o < r16.length; ++o) - (r16[o].length === 0 || r16[o].indexOf(e) !== -1 || e === -1) && t10.push(o); + for (let o = 0; o < r15.length; ++o) + (r15[o].length === 0 || r15[o].indexOf(e) !== -1 || e === -1) && t10.push(o); return t10; } -function B8(r16, e, t10 = 0) { +function C5(r15, e, t10 = 0) { let o = []; if (typeof e == "number") - $(r16.shape[t10] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r16.shape[t10] / e); + E(r15.shape[t10] % e === 0, () => "Number of splits must evenly divide the axis."), o = new Array(e).fill(r15.shape[t10] / e); else { let n = e.reduce((a, i) => (i === -1 && (a += 1), a), 0); - $(n <= 1, () => "There should be only one negative value in split array."); + E(n <= 1, () => "There should be only one negative value in split array."); let s = e.indexOf(-1); if (s !== -1) { let a = e.reduce((i, p) => p > 0 ? i + p : i); - e[s] = r16.shape[t10] - a; + e[s] = r15.shape[t10] - a; } - $(r16.shape[t10] === e.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = e; + E(r15.shape[t10] === e.reduce((a, i) => a + i), () => "The sum of sizes must match the size of the axis dimension."), o = e; } return o; } -function z8(r16) { +function w5(r15) { return `Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${r16}`; + indices.shape[0] = ${r15}`; } -function V8(r16, e) { - return `indices(${r16}, 0) is invalid: ${e} < 0`; +function S5(r15, e) { + return `indices(${r15}, 0) is invalid: ${e} < 0`; } -function W8(r16, e, t10) { - return `indices(${r16}, 0) is invalid: ${e} >= ${t10}`; +function I5(r15, e, t10) { + return `indices(${r15}, 0) is invalid: ${e} >= ${t10}`; } -function U8(r16, e) { - return `only one output dimension may be -1, not both ${r16} and ${e}`; +function v5(r15, e) { + return `only one output dimension may be -1, not both ${r15} and ${e}`; } -function G8(r16, e) { - return `size ${r16} must be non-negative, not ${e}`; +function k5(r15, e) { + return `size ${r15} must be non-negative, not ${e}`; } -function H8() { +function N5() { return "reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"; } -function K8(r16, e) { - let t10 = ze(r16), o = ze(e); +function T5(r15, e) { + let t10 = ze(r15), o = ze(e); return `Input to reshape is a SparseTensor with ${t10} - dense values, but the requested shape requires a multiple of ${o}. inputShape=${r16} outputShape= ${e}`; + dense values, but the requested shape requires a multiple of ${o}. inputShape=${r15} outputShape= ${e}`; } -function q8(r16, e) { - let t10 = ze(r16), o = ze(e); - return `Input to reshape is a tensor with ${t10} dense values, but the requested shape has ${o}. inputShape=${r16} outputShape=${e}`; +function _5(r15, e) { + let t10 = ze(r15), o = ze(e); + return `Input to reshape is a tensor with ${t10} dense values, but the requested shape has ${o}. inputShape=${r15} outputShape=${e}`; } -function j8() { +function E5() { return "segment ids must be >= 0"; } -function X8() { +function $5() { return "segment ids are not increasing"; } -function Y8(r16, e) { - return `Segment id ${r16} out of range [0, ${e}), possibly because segmentIds input is not sorted.`; +function R5(r15, e) { + return `Segment id ${r15} out of range [0, ${e}), possibly because segmentIds input is not sorted.`; } -function Q8(r16, e, t10) { - return `Bad: indices[${r16}] == ${e} out of range [0, ${t10})`; +function D5(r15, e, t10) { + return `Bad: indices[${r15}] == ${e} out of range [0, ${t10})`; } -var kS = {}; -qe(kS, { collectGatherOpShapeInfo: () => eY, computeOutShape: () => J8, segOpComputeOptimalWindowSize: () => Z8 }); -function Z8(r16, e) { +var mS = {}; +qe(mS, { collectGatherOpShapeInfo: () => P5, computeOutShape: () => F5, segOpComputeOptimalWindowSize: () => A5 }); +function A5(r15, e) { let t10 = false, o; - for (r16 <= yf ? (o = r16, t10 = true) : o = Xp(r16, Math.floor(Math.sqrt(r16))); !t10; ) - o > e || o === r16 ? t10 = true : o = Xp(r16, o + 1); + for (r15 <= uf ? (o = r15, t10 = true) : o = Up(r15, Math.floor(Math.sqrt(r15))); !t10; ) + o > e || o === r15 ? t10 = true : o = Up(r15, o + 1); return o; } -function J8(r16, e, t10) { - let o = [], n = r16.length; +function F5(r15, e, t10) { + let o = [], n = r15.length; for (let s = 0; s < n; s++) - s !== e ? o.push(r16[s]) : o.push(t10); + s !== e ? o.push(r15[s]) : o.push(t10); return o; } -function eY(r16, e, t10, o) { - let n = e.shape.length, s = r16.shape.length; +function P5(r15, e, t10, o) { + let n = e.shape.length, s = r15.shape.length; if (o !== 0 && (o < -n || o > n)) throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`); if (o < 0 && (o += n), o > s) @@ -9736,120 +9736,120 @@ function eY(r16, e, t10, o) { ${s}).`); if (t10 < o) throw new Error(`batchDims (${o}) must be less than or equal to axis (${t10}).`); - for (let c = 0; c < o; ++c) - if (r16.shape[c] !== e.shape[c]) - throw new Error(`x.shape[${c}]: ${r16.shape[c]} should be equal to indices.shape[${c}]: ${e.shape[c]}.`); - let a = r16.shape[t10], i = [], p = 1, u = 1, l = 1; - for (let c = 0; c < o; ++c) - i.push(r16.shape[c]), p *= r16.shape[c]; - for (let c = o; c < t10; c++) - i.push(r16.shape[c]), u *= r16.shape[c]; - for (let c = o; c < n; c++) - i.push(e.shape[c]); - for (let c = t10 + 1; c < s; c++) - i.push(r16.shape[c]), l *= r16.shape[c]; - return { batchSize: p, sliceSize: l, outerSize: u, dimSize: a, outputShape: i }; -} -function tY(r16) { + for (let l = 0; l < o; ++l) + if (r15.shape[l] !== e.shape[l]) + throw new Error(`x.shape[${l}]: ${r15.shape[l]} should be equal to indices.shape[${l}]: ${e.shape[l]}.`); + let a = r15.shape[t10], i = [], p = 1, u = 1, c = 1; + for (let l = 0; l < o; ++l) + i.push(r15.shape[l]), p *= r15.shape[l]; + for (let l = o; l < t10; l++) + i.push(r15.shape[l]), u *= r15.shape[l]; + for (let l = o; l < n; l++) + i.push(e.shape[l]); + for (let l = t10 + 1; l < s; l++) + i.push(r15.shape[l]), c *= r15.shape[l]; + return { batchSize: p, sliceSize: c, outerSize: u, dimSize: a, outputShape: i }; +} +function O5(r15) { try { - return r16.map((e) => sl(e)); + return r15.map((e) => Jp(e)); } catch (e) { throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`); } } -function rY(r16) { - return r16.map((e) => iu(e)); +function M5(r15) { + return r15.map((e) => Ji(e)); } -var Ut = {}; -qe(Ut, { nonMaxSuppressionV3Impl: () => lf, nonMaxSuppressionV4Impl: () => cf, nonMaxSuppressionV5Impl: () => mf, whereImpl: () => sf }); -FT(); -var oY = A(); -oY.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r16) => { - r16 && console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); +var Vt = {}; +qe(Vt, { nonMaxSuppressionV3Impl: () => Jd, nonMaxSuppressionV4Impl: () => ef, nonMaxSuppressionV5Impl: () => tf, whereImpl: () => Xd }); +XN(); +var L5 = A(); +L5.registerFlag("KEEP_INTERMEDIATE_TENSORS", () => false, (r15) => { + r15 && console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance."); }); -var Or; -(function(r16) { - r16[r16.DT_INVALID = 0] = "DT_INVALID", r16[r16.DT_FLOAT = 1] = "DT_FLOAT", r16[r16.DT_DOUBLE = 2] = "DT_DOUBLE", r16[r16.DT_INT32 = 3] = "DT_INT32", r16[r16.DT_UINT8 = 4] = "DT_UINT8", r16[r16.DT_INT16 = 5] = "DT_INT16", r16[r16.DT_INT8 = 6] = "DT_INT8", r16[r16.DT_STRING = 7] = "DT_STRING", r16[r16.DT_COMPLEX64 = 8] = "DT_COMPLEX64", r16[r16.DT_INT64 = 9] = "DT_INT64", r16[r16.DT_BOOL = 10] = "DT_BOOL", r16[r16.DT_QINT8 = 11] = "DT_QINT8", r16[r16.DT_QUINT8 = 12] = "DT_QUINT8", r16[r16.DT_QINT32 = 13] = "DT_QINT32", r16[r16.DT_BFLOAT16 = 14] = "DT_BFLOAT16", r16[r16.DT_QINT16 = 15] = "DT_QINT16", r16[r16.DT_QUINT16 = 16] = "DT_QUINT16", r16[r16.DT_UINT16 = 17] = "DT_UINT16", r16[r16.DT_COMPLEX128 = 18] = "DT_COMPLEX128", r16[r16.DT_HALF = 19] = "DT_HALF", r16[r16.DT_RESOURCE = 20] = "DT_RESOURCE", r16[r16.DT_VARIANT = 21] = "DT_VARIANT", r16[r16.DT_UINT32 = 22] = "DT_UINT32", r16[r16.DT_UINT64 = 23] = "DT_UINT64", r16[r16.DT_FLOAT_REF = 101] = "DT_FLOAT_REF", r16[r16.DT_DOUBLE_REF = 102] = "DT_DOUBLE_REF", r16[r16.DT_INT32_REF = 103] = "DT_INT32_REF", r16[r16.DT_UINT8_REF = 104] = "DT_UINT8_REF", r16[r16.DT_INT16_REF = 105] = "DT_INT16_REF", r16[r16.DT_INT8_REF = 106] = "DT_INT8_REF", r16[r16.DT_STRING_REF = 107] = "DT_STRING_REF", r16[r16.DT_COMPLEX64_REF = 108] = "DT_COMPLEX64_REF", r16[r16.DT_INT64_REF = 109] = "DT_INT64_REF", r16[r16.DT_BOOL_REF = 110] = "DT_BOOL_REF", r16[r16.DT_QINT8_REF = 111] = "DT_QINT8_REF", r16[r16.DT_QUINT8_REF = 112] = "DT_QUINT8_REF", r16[r16.DT_QINT32_REF = 113] = "DT_QINT32_REF", r16[r16.DT_BFLOAT16_REF = 114] = "DT_BFLOAT16_REF", r16[r16.DT_QINT16_REF = 115] = "DT_QINT16_REF", r16[r16.DT_QUINT16_REF = 116] = "DT_QUINT16_REF", r16[r16.DT_UINT16_REF = 117] = "DT_UINT16_REF", r16[r16.DT_COMPLEX128_REF = 118] = "DT_COMPLEX128_REF", r16[r16.DT_HALF_REF = 119] = "DT_HALF_REF", r16[r16.DT_RESOURCE_REF = 120] = "DT_RESOURCE_REF", r16[r16.DT_VARIANT_REF = 121] = "DT_VARIANT_REF", r16[r16.DT_UINT32_REF = 122] = "DT_UINT32_REF", r16[r16.DT_UINT64_REF = 123] = "DT_UINT64_REF"; -})(Or || (Or = {})); -var u_; -(function(r16) { +var Dr; +(function(r15) { + r15[r15.DT_INVALID = 0] = "DT_INVALID", r15[r15.DT_FLOAT = 1] = "DT_FLOAT", r15[r15.DT_DOUBLE = 2] = "DT_DOUBLE", r15[r15.DT_INT32 = 3] = "DT_INT32", r15[r15.DT_UINT8 = 4] = "DT_UINT8", r15[r15.DT_INT16 = 5] = "DT_INT16", r15[r15.DT_INT8 = 6] = "DT_INT8", r15[r15.DT_STRING = 7] = "DT_STRING", r15[r15.DT_COMPLEX64 = 8] = "DT_COMPLEX64", r15[r15.DT_INT64 = 9] = "DT_INT64", r15[r15.DT_BOOL = 10] = "DT_BOOL", r15[r15.DT_QINT8 = 11] = "DT_QINT8", r15[r15.DT_QUINT8 = 12] = "DT_QUINT8", r15[r15.DT_QINT32 = 13] = "DT_QINT32", r15[r15.DT_BFLOAT16 = 14] = "DT_BFLOAT16", r15[r15.DT_QINT16 = 15] = "DT_QINT16", r15[r15.DT_QUINT16 = 16] = "DT_QUINT16", r15[r15.DT_UINT16 = 17] = "DT_UINT16", r15[r15.DT_COMPLEX128 = 18] = "DT_COMPLEX128", r15[r15.DT_HALF = 19] = "DT_HALF", r15[r15.DT_RESOURCE = 20] = "DT_RESOURCE", r15[r15.DT_VARIANT = 21] = "DT_VARIANT", r15[r15.DT_UINT32 = 22] = "DT_UINT32", r15[r15.DT_UINT64 = 23] = "DT_UINT64", r15[r15.DT_FLOAT_REF = 101] = "DT_FLOAT_REF", r15[r15.DT_DOUBLE_REF = 102] = "DT_DOUBLE_REF", r15[r15.DT_INT32_REF = 103] = "DT_INT32_REF", r15[r15.DT_UINT8_REF = 104] = "DT_UINT8_REF", r15[r15.DT_INT16_REF = 105] = "DT_INT16_REF", r15[r15.DT_INT8_REF = 106] = "DT_INT8_REF", r15[r15.DT_STRING_REF = 107] = "DT_STRING_REF", r15[r15.DT_COMPLEX64_REF = 108] = "DT_COMPLEX64_REF", r15[r15.DT_INT64_REF = 109] = "DT_INT64_REF", r15[r15.DT_BOOL_REF = 110] = "DT_BOOL_REF", r15[r15.DT_QINT8_REF = 111] = "DT_QINT8_REF", r15[r15.DT_QUINT8_REF = 112] = "DT_QUINT8_REF", r15[r15.DT_QINT32_REF = 113] = "DT_QINT32_REF", r15[r15.DT_BFLOAT16_REF = 114] = "DT_BFLOAT16_REF", r15[r15.DT_QINT16_REF = 115] = "DT_QINT16_REF", r15[r15.DT_QUINT16_REF = 116] = "DT_QUINT16_REF", r15[r15.DT_UINT16_REF = 117] = "DT_UINT16_REF", r15[r15.DT_COMPLEX128_REF = 118] = "DT_COMPLEX128_REF", r15[r15.DT_HALF_REF = 119] = "DT_HALF_REF", r15[r15.DT_RESOURCE_REF = 120] = "DT_RESOURCE_REF", r15[r15.DT_VARIANT_REF = 121] = "DT_VARIANT_REF", r15[r15.DT_UINT32_REF = 122] = "DT_UINT32_REF", r15[r15.DT_UINT64_REF = 123] = "DT_UINT64_REF"; +})(Dr || (Dr = {})); +var IT; +(function(r15) { let e; (function(t10) { t10[t10.LEGACY = 0] = "LEGACY", t10[t10.V1 = 1] = "V1", t10[t10.V2 = 2] = "V2"; - })(e = r16.CheckpointFormatVersion || (r16.CheckpointFormatVersion = {})); -})(u_ || (u_ = {})); -var TS = {}; -function sY(r16, e) { - let t10 = { tfOpName: r16, category: "custom", inputs: [], attrs: [], customExecutor: e }; - TS[r16] = t10; + })(e = r15.CheckpointFormatVersion || (r15.CheckpointFormatVersion = {})); +})(IT || (IT = {})); +var fS = {}; +function z5(r15, e) { + let t10 = { tfOpName: r15, category: "custom", inputs: [], attrs: [], customExecutor: e }; + fS[r15] = t10; } -function bf(r16) { - return TS[r16]; +function pf(r15) { + return fS[r15]; } -function aY(r16) { - delete TS[r16]; +function V5(r15) { + delete fS[r15]; } -function I(r16, e, t10, o, n) { - let s = e.inputParams[r16]; +function I(r15, e, t10, o, n) { + let s = e.inputParams[r15]; if (s && s.inputIndexStart !== void 0) { let i = s.inputIndexStart, p = s.inputIndexEnd === 0 ? void 0 : s.inputIndexEnd === void 0 ? i + 1 : s.inputIndexEnd, u = i < 0 ? e.inputNames.length + i : i; if (s.type === "tensor") - return Vt(e.inputNames[u], t10, o, n); + return Bt(e.inputNames[u], t10, o, n); if (s.type === "tensors") { let m = e.inputs.slice(i, p); return e.inputNames.slice(i, p).filter((f, h) => { var g; return ((g = m[h]) === null || g === void 0 ? void 0 : g.op) !== "NoOp"; - }).map((f) => Vt(f, t10, o, n)); + }).map((f) => Bt(f, t10, o, n)); } - let l = Vt(e.inputNames[u], t10, o, n), c = l.dataSync(); - return s.type === "number" ? c[0] : y.toNestedArray(l.shape, c); + let c = Bt(e.inputNames[u], t10, o, n), l = c.dataSync(); + return s.type === "number" ? l[0] : y.toNestedArray(c.shape, l); } - let a = e.attrParams[r16]; + let a = e.attrParams[r15]; return a && a.value; } -function Vt(r16, e, t10, o) { - let [n, s] = Er(r16, t10); +function Bt(r15, e, t10, o) { + let [n, s] = Nr(r15, t10); if (o != null) { let i = o.getHashTableHandleByName(n); if (i != null) return i; } - let a = t10.currentContextIds.find((i) => !!e[Cf(n, i)]); - return a !== void 0 ? e[Cf(n, a)][s] : void 0; + let a = t10.currentContextIds.find((i) => !!e[cf(n, i)]); + return a !== void 0 ? e[cf(n, a)][s] : void 0; } -function _S(r16, e, t10) { - return e[Cf(r16, t10.currentContextId)]; +function hS(r15, e, t10) { + return e[cf(r15, t10.currentContextId)]; } -function qs(r16, e) { - let [t10, o, n] = Er(r16, e); - return [Cf(t10, e && e.currentContextId), o, n]; +function Ls(r15, e) { + let [t10, o, n] = Nr(r15, e); + return [cf(t10, e && e.currentContextId), o, n]; } -function Cf(r16, e) { - return e ? `${r16}-${e}` : r16; +function cf(r15, e) { + return e ? `${r15}-${e}` : r15; } -function Er(r16, e) { - if (r16 === "") +function Nr(r15, e) { + if (r15 === "") return ["", 0, void 0]; let t10 = e != null && e.parseNodeNameCache != null; if (t10) { - let s = e.parseNodeNameCache.get(r16); + let s = e.parseNodeNameCache.get(r15); if (s != null) return s; } - let o = r16.split(":"), n; + let o = r15.split(":"), n; if (o.length === 1) - n = [r16, 0, void 0]; + n = [r15, 0, void 0]; else { let s = o[0], a = o.length === 3 ? o[1] : void 0, i = Number(o[o.length - 1]); n = [s, i, a]; } - return t10 && e.parseNodeNameCache.set(r16, n), n; + return t10 && e.parseNodeNameCache.set(r15, n), n; } -function Wc(r16, e, t10) { - let o = I("pad", r16, e, t10); +function Pl(r15, e, t10) { + let o = I("pad", r15, e, t10); if (o === "explicit") { - o = I("explicitPaddings", r16, e, t10); + o = I("explicitPaddings", r15, e, t10); let n = [[0, 0], [0, 0], [0, 0], [0, 0]]; for (let s = 0; s < 4; s++) n[s][0] = o[s * 2], n[s][1] = o[s * 2 + 1]; @@ -9857,100 +9857,100 @@ function Wc(r16, e, t10) { } return o; } -function js(r16) { - return r16.kept ? r16 : Xr(r16); -} +function Bs(r15) { + return r15.kept ? r15 : Ur(r15); +} +var gS = {}; +qe(gS, { json: () => W5 }); +var W5 = [{ 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: true }] }, { 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: true }] }, { 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: true }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }]; +var xS = {}; +qe(xS, { json: () => U5 }); +var U5 = [{ tfOpName: "Abs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Ceil", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "ComplexAbs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Elu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Exp", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Floor", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Imag", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Neg", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Real", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Relu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu6", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Selu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sigmoid", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Rsqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Square", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sign", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Round", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Expm1", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log1p", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Reciprocal", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Softplus", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Erf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LeakyRelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "alpha", name: "alpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsNan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsFinite", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsInf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +var yS = {}; +qe(yS, { json: () => G5 }); +var G5 = [{ 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: true }, { 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: true }] }, { tfOpName: "NextIteration", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: "TensorListConcatV2", 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" }] }, { tfOpName: "TensorListLength", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }] }, { tfOpName: "TensorListResize", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "size", type: "number" }] }]; +var bS = {}; +qe(bS, { json: () => H5 }); +var H5 = [{ 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [], notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { 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: true }, { 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: true }, { 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: true }, { 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", defaultValue: 0.2 }] }, { 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: true }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]", notSupported: true }] }, { 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: true }, { 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" }] }]; +var CS = {}; +qe(CS, { json: () => K5 }); +var K5 = [{ 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: true }] }, { 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: true }, { tfName: "T", name: "dtype", type: "dtype" }] }, { 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: "RandomStandardNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { 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: true }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "RandomUniformInt", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "minval", name: "minval", type: "number" }, { tfName: "maxval", name: "maxval", type: "number" }, { tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }] }, { 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: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { 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" }] }]; +var wS = {}; +qe(wS, { json: () => q5 }); +var q5 = [{ 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: true }, { tfName: "T_threshold", name: "threshold", type: "dtype", notSupported: true }, { 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: true }] }, { 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: true }] }]; +var SS = {}; +qe(SS, { json: () => j5 }); +var j5 = [{ tfOpName: "LowerBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { 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: "UpperBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { 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" }] }]; +var IS = {}; +qe(IS, { json: () => X5 }); +var X5 = [{ 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: true }, { 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" }] }]; +var vS = {}; +qe(vS, { json: () => Y5 }); +var Y5 = [{ 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableSize", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "LookupTableSizeV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "InitializeTable", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }, { tfOpName: "InitializeTableV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }]; +var kS = {}; +qe(kS, { json: () => Q5 }); +var Q5 = [{ 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: true }] }, { 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: true }] }, { 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" }] }, { tfOpName: "ImageProjectiveTransformV3", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "transforms", type: "tensor" }, { start: 2, name: "outputShape", type: "number[]" }, { start: 3, name: "fillValue", type: "number" }], attrs: [{ tfName: "interpolation", name: "interpolation", type: "string" }, { tfName: "fill_mode", name: "fillMode", type: "string" }] }]; +var NS = {}; +qe(NS, { json: () => Z5 }); +var Z5 = [{ 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "LogicalNot", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "BitwiseAnd", category: "logical", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }] }]; +var TS = {}; +qe(TS, { json: () => J5 }); +var J5 = [{ 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: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Einsum", category: "matrices", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "equation", name: "equation", type: "string" }, { tfName: "N", name: "n", type: "number", defaultValue: 2 }, { tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "MatrixBandPart", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "numLower", type: "tensor" }, { start: 1, name: "numUpper", type: "tensor" }] }]; +var _S = {}; +qe(_S, { json: () => e8 }); +var e8 = [{ tfOpName: "EuclideanNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", defaultValue: false }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 0.5 }] }, { tfOpName: "Softmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "LogSoftmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }]; var ES = {}; -qe(ES, { json: () => iY }); -var iY = [{ 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: true }] }, { 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: true }] }, { 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: true }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }]; +qe(ES, { json: () => t8 }); +var t8 = [{ 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" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cumprod", 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" }] }, { 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" }] }]; var $S = {}; -qe($S, { json: () => uY }); -var uY = [{ tfOpName: "Abs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Ceil", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "ComplexAbs", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cos", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Elu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Exp", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Floor", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Imag", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { tfOpName: "Neg", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Real", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }, { tfName: "Tout", name: "outputType", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Relu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Relu6", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Selu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sigmoid", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sin", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Rsqrt", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Square", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Tanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Sign", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Round", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Expm1", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Log1p", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Reciprocal", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Softplus", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Asinh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Acosh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Atanh", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Erf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "LeakyRelu", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "alpha", name: "alpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsNan", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsFinite", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "IsInf", category: "basic_math", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }]; +qe($S, { json: () => r8 }); +var r8 = [{ 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: true }] }, { 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: true }] }, { 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: false, notSupported: true }] }, { tfOpName: "TensorScatterUpdate", category: "slice_join", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }]; var RS = {}; -qe(RS, { json: () => pY }); -var pY = [{ 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: true }, { 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: true }] }, { tfOpName: "NextIteration", category: "control", inputs: [{ start: 0, name: "tensor", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: "TensorListConcatV2", 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" }] }, { tfOpName: "TensorListLength", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }] }, { tfOpName: "TensorListResize", category: "control", inputs: [{ start: 0, name: "tensorListId", type: "tensor" }, { start: 1, name: "size", type: "number" }] }]; +qe(RS, { json: () => o8 }); +var o8 = [{ tfOpName: "SparseFillEmptyRows", category: "sparse", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "denseShape", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }] }, { tfOpName: "SparseReshape", category: "sparse", inputs: [{ start: 0, name: "inputIndices", type: "tensor" }, { start: 1, name: "inputShape", type: "tensor" }, { start: 2, name: "newShape", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SparseSegmentMean", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }, { tfOpName: "SparseSegmentSum", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }]; var DS = {}; -qe(DS, { json: () => lY }); -var lY = [{ 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [], notSupported: true }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "ksize", name: "kernelSize", type: "number[]" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }, { 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: true }, { 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: true }, { 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: true }, { 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", defaultValue: 0.2 }] }, { 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: true }, { tfName: "explicit_paddings", name: "explicitPaddings", type: "number[]", defaultValue: [] }, { tfName: "dilations", name: "dilations", type: "number[]", notSupported: true }] }, { 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: true }, { 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" }] }]; +qe(DS, { json: () => n8 }); +var n8 = [{ 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: true }] }, { tfOpName: "IRFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }]; var AS = {}; -qe(AS, { json: () => cY }); -var cY = [{ 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: true }] }, { 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: true }, { tfName: "T", name: "dtype", type: "dtype" }] }, { 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: "RandomStandardNormal", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { 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: true }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { tfOpName: "RandomUniformInt", category: "creation", inputs: [{ start: 0, name: "shape", type: "number[]" }], attrs: [{ tfName: "minval", name: "minval", type: "number" }, { tfName: "maxval", name: "maxval", type: "number" }, { tfName: "seed", name: "seed", type: "number", defaultValue: 0 }, { tfName: "seed2", name: "seed2", type: "number", defaultValue: 0, notSupported: true }] }, { 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: true }, { tfName: "dtype", name: "dtype", type: "dtype" }, { tfName: "T", name: "T", type: "number", notSupported: true }] }, { 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" }] }]; +qe(AS, { json: () => s8 }); +var s8 = [{ tfOpName: "StaticRegexReplace", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "pattern", name: "pattern", type: "string" }, { tfName: "rewrite", name: "rewrite", type: "string" }, { tfName: "replace_global", name: "replaceGlobal", type: "bool" }] }, { tfOpName: "StringNGrams", category: "string", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "dataSplits", type: "tensor" }], attrs: [{ tfName: "separator", name: "separator", type: "string" }, { tfName: "ngram_widths", name: "nGramWidths", type: "number[]" }, { tfName: "left_pad", name: "leftPad", type: "string" }, { tfName: "right_pad", name: "rightPad", type: "string" }, { tfName: "pad_width", name: "padWidth", type: "number" }, { tfName: "preserve_short_sequences", name: "preserveShortSequences", type: "bool" }], outputs: ["ngrams", "ngrams_splits"] }, { tfOpName: "StringSplit", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "delimiter", type: "tensor" }], attrs: [{ tfName: "skip_empty", name: "skipEmpty", type: "bool" }], outputs: ["indices", "values", "shape"] }, { tfOpName: "StringToHashBucketFast", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "num_buckets", name: "numBuckets", type: "number" }] }]; var FS = {}; -qe(FS, { json: () => mY }); -var mY = [{ 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: true }, { tfName: "T_threshold", name: "threshold", type: "dtype", notSupported: true }, { 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: true }] }, { 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: true }] }]; -var PS = {}; -qe(PS, { json: () => dY }); -var dY = [{ tfOpName: "LowerBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { 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: "UpperBound", category: "evaluation", inputs: [{ start: 0, name: "sortedSequence", type: "tensor" }, { start: 1, name: "values", type: "tensor" }] }, { 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" }] }]; -var OS = {}; -qe(OS, { json: () => fY }); -var fY = [{ 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: true }, { 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" }] }]; -var MS = {}; -qe(MS, { json: () => hY }); -var hY = [{ 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { 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: true }, { tfName: "Tout", name: "tOut", type: "dtype", notSupported: true }] }, { tfOpName: "LookupTableSize", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "LookupTableSizeV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }] }, { tfOpName: "InitializeTable", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }, { tfOpName: "InitializeTableV2", category: "hash_table", inputs: [{ start: 0, name: "tableHandle", type: "tensor" }, { start: 1, name: "keys", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }]; -var LS = {}; -qe(LS, { json: () => gY }); -var gY = [{ 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: true }] }, { 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: true }] }, { 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" }] }, { tfOpName: "ImageProjectiveTransformV3", category: "image", inputs: [{ start: 0, name: "images", type: "tensor" }, { start: 1, name: "transforms", type: "tensor" }, { start: 2, name: "outputShape", type: "number[]" }, { start: 3, name: "fillValue", type: "number" }], attrs: [{ tfName: "interpolation", name: "interpolation", type: "string" }, { tfName: "fill_mode", name: "fillMode", type: "string" }] }]; -var BS = {}; -qe(BS, { json: () => xY }); -var xY = [{ 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "LogicalNot", category: "logical", inputs: [{ start: 0, name: "a", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { 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: true }] }, { 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: true }] }, { tfOpName: "BitwiseAnd", category: "logical", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "y", type: "tensor" }] }]; -var zS = {}; -qe(zS, { json: () => yY }); -var yY = [{ 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: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "leakyrelu_alpha", name: "leakyreluAlpha", type: "number", defaultValue: 0.2 }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "transpose_b", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: false }, { tfName: "adj_y", name: "transposeB", type: "bool", defaultValue: false }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { 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: true }] }, { tfOpName: "Einsum", category: "matrices", inputs: [{ start: 0, end: 0, name: "tensors", type: "tensors" }], attrs: [{ tfName: "equation", name: "equation", type: "string" }, { tfName: "N", name: "n", type: "number", defaultValue: 2 }, { tfName: "T", name: "dtype", type: "dtype" }] }, { tfOpName: "MatrixBandPart", category: "matrices", inputs: [{ start: 0, name: "a", type: "tensor" }, { start: 1, name: "numLower", type: "tensor" }, { start: 1, name: "numUpper", type: "tensor" }] }]; -var VS = {}; -qe(VS, { json: () => bY }); -var bY = [{ tfOpName: "EuclideanNorm", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "axis", type: "number[]" }], attrs: [{ tfName: "keep_dims", name: "keepDims", type: "bool", defaultValue: false }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 1e-3 }, { tfName: "data_format", name: "dataFormat", type: "string", notSupported: true }] }, { 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: 0.5 }] }, { tfOpName: "Softmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }, { tfOpName: "LogSoftmax", category: "normalization", inputs: [{ start: 0, name: "x", type: "tensor" }] }]; -var WS = {}; -qe(WS, { json: () => CY }); -var CY = [{ 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" }, { tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "Cumprod", 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" }] }, { 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" }] }]; -var US = {}; -qe(US, { json: () => wY }); -var wY = [{ 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: true }] }, { 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: true }] }, { 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: false, notSupported: true }] }, { tfOpName: "TensorScatterUpdate", category: "slice_join", inputs: [{ start: 0, name: "tensor", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "values", type: "tensor" }] }]; -var GS = {}; -qe(GS, { json: () => SY }); -var SY = [{ tfOpName: "SparseFillEmptyRows", category: "sparse", inputs: [{ start: 0, name: "indices", type: "tensor" }, { start: 1, name: "values", type: "tensor" }, { start: 2, name: "denseShape", type: "tensor" }, { start: 3, name: "defaultValue", type: "tensor" }] }, { tfOpName: "SparseReshape", category: "sparse", inputs: [{ start: 0, name: "inputIndices", type: "tensor" }, { start: 1, name: "inputShape", type: "tensor" }, { start: 2, name: "newShape", type: "tensor" }], attrs: [{ tfName: "T", name: "dtype", type: "dtype", notSupported: true }] }, { tfOpName: "SparseSegmentMean", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }, { tfOpName: "SparseSegmentSum", category: "sparse", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "indices", type: "tensor" }, { start: 2, name: "segmentIds", type: "tensor" }] }]; -var HS = {}; -qe(HS, { json: () => IY }); -var IY = [{ 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: true }] }, { tfOpName: "IRFFT", category: "spectral", inputs: [{ start: 0, name: "x", type: "tensor" }, { start: 1, name: "fft_length", type: "number", notSupported: true }] }]; -var KS = {}; -qe(KS, { json: () => vY }); -var vY = [{ tfOpName: "StaticRegexReplace", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "pattern", name: "pattern", type: "string" }, { tfName: "rewrite", name: "rewrite", type: "string" }, { tfName: "replace_global", name: "replaceGlobal", type: "bool" }] }, { tfOpName: "StringNGrams", category: "string", inputs: [{ start: 0, name: "data", type: "tensor" }, { start: 1, name: "dataSplits", type: "tensor" }], attrs: [{ tfName: "separator", name: "separator", type: "string" }, { tfName: "ngram_widths", name: "nGramWidths", type: "number[]" }, { tfName: "left_pad", name: "leftPad", type: "string" }, { tfName: "right_pad", name: "rightPad", type: "string" }, { tfName: "pad_width", name: "padWidth", type: "number" }, { tfName: "preserve_short_sequences", name: "preserveShortSequences", type: "bool" }], outputs: ["ngrams", "ngrams_splits"] }, { tfOpName: "StringSplit", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }, { start: 1, name: "delimiter", type: "tensor" }], attrs: [{ tfName: "skip_empty", name: "skipEmpty", type: "bool" }], outputs: ["indices", "values", "shape"] }, { tfOpName: "StringToHashBucketFast", category: "string", inputs: [{ start: 0, name: "input", type: "tensor" }], attrs: [{ tfName: "num_buckets", name: "numBuckets", type: "number" }] }]; -var qS = {}; -qe(qS, { json: () => kY }); -var kY = [{ tfOpName: "Cast", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "SrcT", name: "sdtype", type: "dtype", notSupported: true }, { 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: "EnsureShape", 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: [] }, { tfOpName: "BroadcastArgs", category: "transformation", inputs: [{ start: 0, name: "s0", type: "tensor" }, { start: 1, name: "s1", type: "tensor" }], attrs: [] }]; -var Uc = class { +qe(FS, { json: () => a8 }); +var a8 = [{ tfOpName: "Cast", category: "transformation", inputs: [{ start: 0, name: "x", type: "tensor" }], attrs: [{ tfName: "SrcT", name: "sdtype", type: "dtype", notSupported: true }, { 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: "EnsureShape", 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: [] }, { tfOpName: "BroadcastArgs", category: "transformation", inputs: [{ start: 0, name: "s0", type: "tensor" }, { start: 1, name: "s1", type: "tensor" }], attrs: [] }]; +var Ol = class { static get Instance() { return this._instance || (this._instance = new this()); } constructor() { - let e = [ES, $S, RS, DS, AS, FS, PS, OS, MS, LS, BS, zS, VS, WS, US, GS, HS, KS, qS], t10 = [].concat(...e.map((o) => o.json)); + let e = [gS, xS, yS, bS, CS, wS, SS, IS, vS, kS, NS, TS, _S, ES, $S, RS, DS, AS, FS], t10 = [].concat(...e.map((o) => o.json)); this.opMappers = t10.reduce((o, n) => (o[n.tfOpName] = n, o), {}); } transformGraph(e, t10 = {}) { - let o = e.node, n = [], s = [], a = [], i = o.reduce((h, g) => (h[g.name] = this.mapNode(g), g.op.startsWith("Placeholder") ? n.push(h[g.name]) : g.op === "Const" ? s.push(h[g.name]) : (g.input == null || g.input.length === 0) && a.push(h[g.name]), h), {}), p = [], u = [], l = {}, c = {}; - t10 != null && (l = this.mapSignatureEntries(t10.inputs), c = this.mapSignatureEntries(t10.outputs)); + let o = e.node, n = [], s = [], a = [], i = o.reduce((h, g) => (h[g.name] = this.mapNode(g), g.op.startsWith("Placeholder") ? n.push(h[g.name]) : g.op === "Const" ? s.push(h[g.name]) : (g.input == null || g.input.length === 0) && a.push(h[g.name]), h), {}), p = [], u = [], c = {}, l = {}; + t10 != null && (c = this.mapSignatureEntries(t10.inputs), l = this.mapSignatureEntries(t10.outputs)); let m = Object.keys(i); m.forEach((h) => { let g = i[h]; g.inputNames.forEach((x, b) => { - let [w, , S] = qs(x), k = i[w]; + let [C, , S] = Ls(x), k = i[C]; if (k.outputs != null) { - let T = k.outputs.indexOf(S); - if (T !== -1) { - let E = `${w}:${T}`; - g.inputNames[b] = E; + let _ = k.outputs.indexOf(S); + if (_ !== -1) { + let $ = `${C}:${_}`; + g.inputNames[b] = $; } } g.inputs.push(k), k.children.push(g); }); - }), Object.keys(c).length === 0 ? m.forEach((h) => { + }), Object.keys(l).length === 0 ? m.forEach((h) => { let g = i[h]; g.children.length === 0 && u.push(g); - }) : Object.keys(c).forEach((h) => { - let [g] = qs(h), x = i[g]; - x != null && (x.signatureKey = c[h], u.push(x)); - }), Object.keys(l).length > 0 ? Object.keys(l).forEach((h) => { - let [g] = qs(h), x = i[g]; - x && (x.signatureKey = l[h], p.push(x)); + }) : Object.keys(l).forEach((h) => { + let [g] = Ls(h), x = i[g]; + x != null && (x.signatureKey = l[h], u.push(x)); + }), Object.keys(c).length > 0 ? Object.keys(c).forEach((h) => { + let [g] = Ls(h), x = i[g]; + x && (x.signatureKey = c[h], p.push(x)); }) : p = n; let d = {}; e.library != null && e.library.function != null && (d = e.library.function.reduce((h, g) => (h[g.signature.name] = this.mapFunction(g), h), {})); @@ -9961,44 +9961,44 @@ var Uc = class { return Object.keys(e || {}).reduce((t10, o) => (t10[e[o].name] = o, t10), {}); } mapNode(e) { - let t10 = bf(e.op) || this.opMappers[e.op] || {}; + let t10 = pf(e.op) || this.opMappers[e.op] || {}; e.attr == null && (e.attr = {}); let o = { name: e.name, op: e.op, category: t10.category, inputNames: (e.input || []).map((n) => n.startsWith("^") ? n.slice(1) : n), inputs: [], children: [], inputParams: {}, attrParams: {}, rawAttrs: e.attr, outputs: t10.outputs }; return t10.inputs != null && (o.inputParams = t10.inputs.reduce((n, s) => (n[s.name] = { type: s.type, inputIndexStart: s.start, inputIndexEnd: s.end }, n), {})), t10.attrs != null && (o.attrParams = t10.attrs.reduce((n, s) => { let a = s.type, i; switch (s.type) { case "string": - i = wf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = wf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = lf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = lf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "string[]": - i = _f(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = _f(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = yf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = yf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "number": - i = If(e.attr, s.tfName, s.defaultValue || 0), i === void 0 && s.tfDeprecatedName && (i = If(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = df(e.attr, s.tfName, s.defaultValue || 0), i === void 0 && s.tfDeprecatedName && (i = df(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "number[]": - i = Tf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Tf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = xf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = xf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "bool": - i = Sf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Sf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = mf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = mf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "bool[]": - i = $f(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = $f(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = Cf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Cf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "shape": - i = Nf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Nf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = gf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = gf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "shape[]": - i = Ef(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = Ef(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = bf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = bf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "dtype": - i = vf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = vf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = ff(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = ff(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "dtype[]": - i = kf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = kf(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = hf(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = hf(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "func": - i = p_(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = p_(e.attr, s.tfDeprecatedName, s.defaultValue)); + i = vT(e.attr, s.tfName, s.defaultValue), i === void 0 && s.tfDeprecatedName && (i = vT(e.attr, s.tfDeprecatedName, s.defaultValue)); break; case "tensor": case "tensors": @@ -10011,32 +10011,32 @@ var Uc = class { } mapFunction(e) { let t10 = e.nodeDef, o = [], n = [], s = {}; - t10 != null && (s = t10.reduce((c, m) => (c[m.name] = this.mapNode(m), m.op === "Const" && n.push(c[m.name]), c), {})); + t10 != null && (s = t10.reduce((l, m) => (l[m.name] = this.mapNode(m), m.op === "Const" && n.push(l[m.name]), l), {})); let a = [], i = []; - e.signature.inputArg.forEach((c) => { - let [m] = qs(c.name), d = { name: m, op: "Placeholder", inputs: [], inputNames: [], category: "graph", inputParams: {}, attrParams: { dtype: { value: jS(c.type), type: "dtype" } }, children: [] }; - d.signatureKey = c.name, a.push(d), s[m] = d; - }), Object.keys(s).forEach((c) => { - let m = s[c]; + e.signature.inputArg.forEach((l) => { + let [m] = Ls(l.name), d = { name: m, op: "Placeholder", inputs: [], inputNames: [], category: "graph", inputParams: {}, attrParams: { dtype: { value: PS(l.type), type: "dtype" } }, children: [] }; + d.signatureKey = l.name, a.push(d), s[m] = d; + }), Object.keys(s).forEach((l) => { + let m = s[l]; m.inputNames.forEach((d, f) => { - let [h, , g] = qs(d), x = s[h]; + let [h, , g] = Ls(d), x = s[h]; if (x.outputs != null) { let b = x.outputs.indexOf(g); if (b !== -1) { - let w = `${h}:${b}`; - m.inputNames[f] = w; + let C = `${h}:${b}`; + m.inputNames[f] = C; } } m.inputs.push(x), x.children.push(m); }); }); let u = e.ret; - e.signature.outputArg.forEach((c) => { - let [m, d] = qs(u[c.name]), f = s[m]; + e.signature.outputArg.forEach((l) => { + let [m, d] = Ls(u[l.name]), f = s[m]; f != null && (f.defaultOutput = d, i.push(f)); }); - let l = this.mapArgsToSignature(e); - return { nodes: s, inputs: a, outputs: i, weights: n, placeholders: o, signature: l }; + let c = this.mapArgsToSignature(e); + return { nodes: s, inputs: a, outputs: i, weights: n, placeholders: o, signature: c }; } mapArgsToSignature(e) { return { methodName: e.signature.name, inputs: e.signature.inputArg.reduce((t10, o) => (t10[o.name] = this.mapArgToTensorInfo(o), t10), {}), outputs: e.signature.outputArg.reduce((t10, o) => (t10[o.name] = this.mapArgToTensorInfo(o, e.ret), t10), {}) }; @@ -10046,295 +10046,295 @@ var Uc = class { return t10 != null && (o = t10[o]), { name: o, dtype: e.type }; } }; -function NY(r16) { +function i8(r15) { let e = A().global; if (typeof e.atob != "undefined") - return e.atob(r16); + return e.atob(r15); if (typeof Buffer != "undefined") - return new Buffer(r16, "base64").toString(); + return new Buffer(r15, "base64").toString(); throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()"); } -function l_(r16, e) { - let t10 = Array.isArray(r16) ? String.fromCharCode.apply(null, r16) : NY(r16); +function kT(r15, e) { + let t10 = Array.isArray(r15) ? String.fromCharCode.apply(null, r15) : i8(r15); return e ? t10 : t10.toLowerCase(); } -function wf(r16, e, t10, o = false) { - let n = r16[e]; - return n != null ? l_(n.s, o) : t10; +function lf(r15, e, t10, o = false) { + let n = r15[e]; + return n != null ? kT(n.s, o) : t10; } -function Sf(r16, e, t10) { - let o = r16[e]; +function mf(r15, e, t10) { + let o = r15[e]; return o ? o.b : t10; } -function If(r16, e, t10) { - let o = r16[e] || {}, n = o.i != null ? o.i : o.f != null ? o.f : t10; +function df(r15, e, t10) { + let o = r15[e] || {}, n = o.i != null ? o.i : o.f != null ? o.f : t10; return typeof n == "number" ? n : parseInt(n, 10); } -function jS(r16) { - switch (typeof r16 == "string" && (r16 = Or[r16]), r16) { - case Or.DT_FLOAT: - case Or.DT_HALF: +function PS(r15) { + switch (typeof r15 == "string" && (r15 = Dr[r15]), r15) { + case Dr.DT_FLOAT: + case Dr.DT_HALF: return "float32"; - case Or.DT_INT32: - case Or.DT_INT64: - case Or.DT_INT8: - case Or.DT_UINT8: + case Dr.DT_INT32: + case Dr.DT_INT64: + case Dr.DT_INT8: + case Dr.DT_UINT8: return "int32"; - case Or.DT_BOOL: + case Dr.DT_BOOL: return "bool"; - case Or.DT_DOUBLE: + case Dr.DT_DOUBLE: return "float32"; - case Or.DT_STRING: + case Dr.DT_STRING: return "string"; - case Or.DT_COMPLEX64: - case Or.DT_COMPLEX128: + case Dr.DT_COMPLEX64: + case Dr.DT_COMPLEX128: return "complex64"; default: return null; } } -function p_(r16, e, t10) { - let o = r16[e]; +function vT(r15, e, t10) { + let o = r15[e]; return o && o.func ? o.func.name : t10; } -function vf(r16, e, t10) { - let o = r16[e]; - return o && o.type ? jS(o.type) : t10; +function ff(r15, e, t10) { + let o = r15[e]; + return o && o.type ? PS(o.type) : t10; } -function kf(r16, e, t10) { - let o = r16[e]; - return o && o.list && o.list.type ? o.list.type.map((n) => jS(n)) : t10; +function hf(r15, e, t10) { + let o = r15[e]; + return o && o.list && o.list.type ? o.list.type.map((n) => PS(n)) : t10; } -function c_(r16) { - if (!r16.unknownRank) - return r16.dim != null ? r16.dim.map((e) => typeof e.size == "number" ? e.size : parseInt(e.size, 10)) : []; +function NT(r15) { + if (!r15.unknownRank) + return r15.dim != null ? r15.dim.map((e) => typeof e.size == "number" ? e.size : parseInt(e.size, 10)) : []; } -function Nf(r16, e, t10) { - let o = r16[e]; - return o && o.shape ? c_(o.shape) : t10; +function gf(r15, e, t10) { + let o = r15[e]; + return o && o.shape ? NT(o.shape) : t10; } -function Tf(r16, e, t10) { - let o = r16[e]; +function xf(r15, e, t10) { + let o = r15[e]; return o ? ((o.list.f && o.list.f.length ? o.list.f : o.list.i) || []).map((n) => typeof n == "number" ? n : parseInt(n, 10)) : t10; } -function _f(r16, e, t10, o = false) { - let n = r16[e]; - return n && n.list && n.list.s ? n.list.s.map((s) => l_(s, o)) : t10; +function yf(r15, e, t10, o = false) { + let n = r15[e]; + return n && n.list && n.list.s ? n.list.s.map((s) => kT(s, o)) : t10; } -function Ef(r16, e, t10) { - let o = r16[e]; - return o && o.list && o.list.shape ? o.list.shape.map((n) => c_(n)) : t10; +function bf(r15, e, t10) { + let o = r15[e]; + return o && o.list && o.list.shape ? o.list.shape.map((n) => NT(n)) : t10; } -function $f(r16, e, t10) { - let o = r16[e]; +function Cf(r15, e, t10) { + let o = r15[e]; return o && o.list && o.list.b ? o.list.b : t10; } -var Rf = class { +var wf = class { constructor(e, t10, o) { this.node = e, this.tensorMap = t10, this.context = o, this.inputs = [], this.attrs = {}, this.inputs = e.inputNames.map((n) => this.getInput(n)), e.rawAttrs != null && (this.attrs = Object.keys(e.rawAttrs).reduce((n, s) => (n[s] = this.getAttr(s), n), {})); } getInput(e) { - return Vt(e, this.tensorMap, this.context); + return Bt(e, this.tensorMap, this.context); } getAttr(e, t10) { let o = this.node.rawAttrs[e]; if (o.tensor != null) - return Vt(e, this.tensorMap, this.context); + return Bt(e, this.tensorMap, this.context); if (o.i != null || o.f != null) - return If(this.node.rawAttrs, e, t10); + return df(this.node.rawAttrs, e, t10); if (o.s != null) - return wf(this.node.rawAttrs, e, t10); + return lf(this.node.rawAttrs, e, t10); if (o.b != null) - return Sf(this.node.rawAttrs, e, t10); + return mf(this.node.rawAttrs, e, t10); if (o.shape != null) - return Nf(this.node.rawAttrs, e, t10); + return gf(this.node.rawAttrs, e, t10); if (o.type != null) - return vf(this.node.rawAttrs, e, t10); + return ff(this.node.rawAttrs, e, t10); if (o.list != null) { if (o.list.i != null || o.list.f != null) - return Tf(this.node.rawAttrs, e, t10); + return xf(this.node.rawAttrs, e, t10); if (o.list.s != null) - return _f(this.node.rawAttrs, e, t10); + return yf(this.node.rawAttrs, e, t10); if (o.list.shape != null) - return Ef(this.node.rawAttrs, e, t10); + return bf(this.node.rawAttrs, e, t10); if (o.list.b != null) - return $f(this.node.rawAttrs, e, t10); + return Cf(this.node.rawAttrs, e, t10); if (o.list.type != null) - return kf(this.node.rawAttrs, e, t10); + return hf(this.node.rawAttrs, e, t10); } return t10; } }; -var et = {}; -qe(et, { OP_SCOPE_SUFFIX: () => Bw, abs: () => er, acos: () => g1, acosh: () => x1, add: () => Ce, addN: () => y1, all: () => b1, any: () => C1, argMax: () => w1, argMin: () => S1, asin: () => I1, asinh: () => v1, atan: () => k1, atan2: () => N1, atanh: () => T1, avgPool: () => Id, avgPool3d: () => $1, basicLSTMCell: () => R1, batchNorm: () => mu, batchNorm2d: () => A1, batchNorm3d: () => F1, batchNorm4d: () => P1, batchToSpaceND: () => vd, bincount: () => kd, bitwiseAnd: () => O1, booleanMaskAsync: () => oX, broadcastArgs: () => M1, broadcastTo: () => Oa, buffer: () => ie, cast: () => Ue, ceil: () => L1, clipByValue: () => B1, clone: () => Xr, complex: () => Ar, concat: () => bt, concat1d: () => z1, concat2d: () => V1, concat3d: () => W1, concat4d: () => U1, conv1d: () => G1, conv2d: () => du, conv2dTranspose: () => H1, conv3d: () => K1, conv3dTranspose: () => j1, cos: () => X1, cosh: () => Y1, cosineWindow: () => Mc, cumprod: () => Q1, cumsum: () => Z1, denseBincount: () => J1, depthToSpace: () => e2, depthwiseConv2d: () => cl, diag: () => t2, dilation2d: () => r22, div: () => Xe, divNoNan: () => n2, dot: () => s2, dropout: () => hX, einsum: () => fu, elu: () => Ed, enclosingPowerOfTwo: () => cS, ensureShape: () => a2, equal: () => _d, erf: () => i2, euclideanNorm: () => l2, exp: () => Jo, expandDims: () => Ks, expm1: () => c2, eye: () => $d, fft: () => fl, fill: () => Ma, floor: () => Rd, floorDiv: () => Sd, fused: () => mS, gather: () => Dd, gatherND: () => dX, greater: () => ju, greaterEqual: () => Ad, ifft: () => ep, imag: () => gu, image: () => b5, inTopKAsync: () => xX, irfft: () => tf, isFinite: () => m2, isInf: () => d2, isNaN: () => f2, leakyRelu: () => Fd, less: () => Fc, lessEqual: () => ml, linalg: () => C5, linspace: () => h2, localResponseNormalization: () => g2, log: () => yi, log1p: () => Pd, logSigmoid: () => x2, logSoftmax: () => y2, logSumExp: () => Ld, logicalAnd: () => Xu, logicalNot: () => Bd, logicalOr: () => zd, logicalXor: () => b2, losses: () => w5, lowerBound: () => C2, matMul: () => Je, max: () => La, maxPool: () => Wd, maxPool3d: () => w2, maxPoolWithArgmax: () => S2, maximum: () => Ud, mean: () => Yu, meshgrid: () => I2, min: () => Ac, minimum: () => Qu, mirrorPad: () => v2, mod: () => k2, moments: () => N2, movingAverage: () => aX, mul: () => se, multiRNNCell: () => T2, multinomial: () => _2, neg: () => mr, norm: () => qu, notEqual: () => Gd, oneHot: () => Oc, ones: () => Ba, onesLike: () => E2, op: () => N, outerProduct: () => $2, pad: () => za, pad1d: () => R2, pad2d: () => D2, pad3d: () => A2, pad4d: () => F2, pool: () => P2, pow: () => xi, prelu: () => Kd, print: () => wd, prod: () => O2, raggedGather: () => M2, raggedRange: () => L2, raggedTensorToTensor: () => B2, rand: () => z2, randomGamma: () => iN, randomNormal: () => Zd, randomStandardNormal: () => uN, randomUniform: () => dl, randomUniformInt: () => pN, range: () => xu, real: () => bi, reciprocal: () => lN, relu: () => yu, relu6: () => Jd, reshape: () => W, reverse: () => Bo, reverse1d: () => cN, reverse2d: () => mN, reverse3d: () => dN, reverse4d: () => fN, rfft: () => hl, round: () => ef, rsqrt: () => hN, scalar: () => ke, scatterND: () => uX, searchSorted: () => Pc, selu: () => gN, separableConv2d: () => xN, setdiff1dAsync: () => yN, sigmoid: () => Pa, sign: () => bN, signal: () => y5, sin: () => CN, sinh: () => wN, slice: () => Ye, slice1d: () => SN, slice2d: () => IN, slice3d: () => vN, slice4d: () => kN, softmax: () => NN, softplus: () => Md, spaceToBatchND: () => Hd, sparse: () => S5, sparseToDense: () => cX, spectral: () => x5, split: () => Ci, sqrt: () => Pr, square: () => tr, squaredDifference: () => rf, squeeze: () => gl, stack: () => Tr, step: () => of, stridedSlice: () => TN, string: () => I5, sub: () => Te, sum: () => ot, tan: () => _N, tanh: () => Dc, tensor: () => pr, tensor1d: () => rr, tensor2d: () => bu, tensor3d: () => nf, tensor4d: () => EN, tensor5d: () => $N, tensor6d: () => RN, tensorScatterUpdate: () => AN, tile: () => hu, topk: () => FN, transpose: () => yl, truncatedNormal: () => PN, unique: () => ON, unsortedSegmentSum: () => MN, unstack: () => zo, upperBound: () => LN, variable: () => BN, where: () => Lo, whereAsync: () => af, zeros: () => Yr, zerosLike: () => Kt }); -var m_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var Je = {}; +qe(Je, { OP_SCOPE_SUFFIX: () => Nw, abs: () => Qt, acos: () => Rk, acosh: () => Dk, add: () => Ce, addN: () => Ak, all: () => Fk, any: () => Pk, argMax: () => Ok, argMin: () => Mk, asin: () => Lk, asinh: () => Bk, atan: () => zk, atan2: () => Vk, atanh: () => Wk, avgPool: () => dd, avgPool3d: () => Hk, basicLSTMCell: () => Kk, batchNorm: () => nu, batchNorm2d: () => jk, batchNorm3d: () => Xk, batchNorm4d: () => Yk, batchToSpaceND: () => fd, bincount: () => hd, bitwiseAnd: () => Qk, booleanMaskAsync: () => L6, broadcastArgs: () => Zk, broadcastTo: () => su, buffer: () => me, cast: () => Ue, ceil: () => Jk, clipByValue: () => e2, clone: () => Ur, complex: () => Er, concat: () => yt, concat1d: () => t2, concat2d: () => r22, concat3d: () => o2, concat4d: () => n2, conv1d: () => s2, conv2d: () => au, conv2dTranspose: () => a2, conv3d: () => i2, conv3dTranspose: () => p2, cos: () => c2, cosh: () => l2, cosineWindow: () => $l, cumprod: () => m2, cumsum: () => d2, denseBincount: () => f2, depthToSpace: () => h2, depthwiseConv2d: () => sc, diag: () => g2, dilation2d: () => x2, div: () => je, divNoNan: () => b2, dot: () => C2, dropout: () => Y6, einsum: () => iu, elu: () => bd, enclosingPowerOfTwo: () => Zw, ensureShape: () => w2, equal: () => yd, erf: () => S2, euclideanNorm: () => k2, exp: () => _o, expandDims: () => Ms, expm1: () => N2, eye: () => Cd, fft: () => uc, fill: () => $a, floor: () => wd, floorDiv: () => md, fused: () => Jw, gather: () => Sd, gatherND: () => j6, greater: () => Wu, greaterEqual: () => Id, ifft: () => ju, imag: () => pu, image: () => eX, inTopKAsync: () => Z6, irfft: () => Hd, isFinite: () => T2, isInf: () => _2, isNaN: () => E2, leakyRelu: () => vd, less: () => Tl, lessEqual: () => ac, linalg: () => tX, linspace: () => $2, localResponseNormalization: () => R2, log: () => pi, log1p: () => kd, logSigmoid: () => D2, logSoftmax: () => A2, logSumExp: () => _d, logicalAnd: () => Uu, logicalNot: () => Ed, logicalOr: () => $d, logicalXor: () => F2, losses: () => rX, lowerBound: () => P2, matMul: () => Ze, max: () => Ra, maxPool: () => Dd, maxPool3d: () => O2, maxPoolWithArgmax: () => M2, maximum: () => Ad, mean: () => Gu, meshgrid: () => L2, min: () => Nl, minimum: () => Hu, mirrorPad: () => B2, mod: () => z2, moments: () => V2, movingAverage: () => V6, mul: () => se, multiRNNCell: () => W2, multinomial: () => U2, neg: () => pr, norm: () => Vu, notEqual: () => Fd, oneHot: () => El, ones: () => Da, onesLike: () => G2, op: () => N, outerProduct: () => H2, pad: () => Aa, pad1d: () => K2, pad2d: () => q2, pad3d: () => j2, pad4d: () => X2, pool: () => Y2, pow: () => ui, prelu: () => Od, print: () => ld, prod: () => Q2, raggedGather: () => Z2, raggedRange: () => J2, raggedTensorToTensor: () => e1, rand: () => t1, randomGamma: () => S1, randomNormal: () => Wd, randomStandardNormal: () => I1, randomUniform: () => ic, randomUniformInt: () => v1, range: () => cu, real: () => ci, reciprocal: () => k1, relu: () => lu, relu6: () => Ud, reshape: () => W, reverse: () => mo, reverse1d: () => N1, reverse2d: () => T1, reverse3d: () => _1, reverse4d: () => E1, rfft: () => pc, round: () => Gd, rsqrt: () => $1, scalar: () => ke, scatterND: () => U6, searchSorted: () => _l, selu: () => R1, separableConv2d: () => D1, setdiff1dAsync: () => A1, sigmoid: () => Ea, sign: () => F1, signal: () => Jj, sin: () => P1, sinh: () => O1, slice: () => Xe, slice1d: () => M1, slice2d: () => L1, slice3d: () => B1, slice4d: () => z1, softmax: () => V1, softplus: () => Td, spaceToBatchND: () => Pd, sparse: () => oX, sparseToDense: () => K6, spectral: () => Zj, split: () => li, sqrt: () => Rr, square: () => Zt, squaredDifference: () => Kd, squeeze: () => cc, stack: () => vr, step: () => qd, stridedSlice: () => W1, string: () => nX, sub: () => Te, sum: () => ot, tan: () => U1, tanh: () => kl, tensor: () => ar, tensor1d: () => Jt, tensor2d: () => mu, tensor3d: () => jd, tensor4d: () => G1, tensor5d: () => H1, tensor6d: () => K1, tensorScatterUpdate: () => j1, tile: () => uu, topk: () => X1, transpose: () => mc, truncatedNormal: () => Y1, unique: () => Q1, unsortedSegmentSum: () => Z1, unstack: () => fo, upperBound: () => J1, variable: () => eN, where: () => lo, whereAsync: () => Yd, zeros: () => Gr, zerosLike: () => Gt }); +var TT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "BiasAdd": case "AddV2": case "Add": - return [o.add(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.add(I("a", r15, e, t10), I("b", r15, e, t10))]; case "AddN": - return [o.addN(I("tensors", r16, e, t10))]; + return [o.addN(I("tensors", r15, e, t10))]; case "FloorMod": case "Mod": - return [o.mod(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.mod(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Mul": - return [o.mul(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.mul(I("a", r15, e, t10), I("b", r15, e, t10))]; case "RealDiv": case "Div": - return [o.div(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.div(I("a", r15, e, t10), I("b", r15, e, t10))]; case "DivNoNan": - return [o.divNoNan(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.divNoNan(I("a", r15, e, t10), I("b", r15, e, t10))]; case "FloorDiv": - return [o.floorDiv(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.floorDiv(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Sub": - return [o.sub(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.sub(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Minimum": - return [o.minimum(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.minimum(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Maximum": - return [o.maximum(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.maximum(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Pow": - return [o.pow(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.pow(I("a", r15, e, t10), I("b", r15, e, t10))]; case "SquaredDifference": - return [o.squaredDifference(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.squaredDifference(I("a", r15, e, t10), I("b", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var d_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var _T = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Abs": case "ComplexAbs": - return [o.abs(I("x", r16, e, t10))]; + return [o.abs(I("x", r15, e, t10))]; case "Acos": - return [o.acos(I("x", r16, e, t10))]; + return [o.acos(I("x", r15, e, t10))]; case "Acosh": - return [o.acosh(I("x", r16, e, t10))]; + return [o.acosh(I("x", r15, e, t10))]; case "Asin": - return [o.asin(I("x", r16, e, t10))]; + return [o.asin(I("x", r15, e, t10))]; case "Asinh": - return [o.asinh(I("x", r16, e, t10))]; + return [o.asinh(I("x", r15, e, t10))]; case "Atan": - return [o.atan(I("x", r16, e, t10))]; + return [o.atan(I("x", r15, e, t10))]; case "Atan2": - return [o.atan2(I("x", r16, e, t10), I("y", r16, e, t10))]; + return [o.atan2(I("x", r15, e, t10), I("y", r15, e, t10))]; case "Atanh": - return [o.atanh(I("x", r16, e, t10))]; + return [o.atanh(I("x", r15, e, t10))]; case "Ceil": - return [o.ceil(I("x", r16, e, t10))]; + return [o.ceil(I("x", r15, e, t10))]; case "Complex": - return [o.complex(I("real", r16, e, t10), I("imag", r16, e, t10))]; + return [o.complex(I("real", r15, e, t10), I("imag", r15, e, t10))]; case "Cos": - return [o.cos(I("x", r16, e, t10))]; + return [o.cos(I("x", r15, e, t10))]; case "Cosh": - return [o.cosh(I("x", r16, e, t10))]; + return [o.cosh(I("x", r15, e, t10))]; case "Elu": - return [o.elu(I("x", r16, e, t10))]; + return [o.elu(I("x", r15, e, t10))]; case "Erf": - return [o.erf(I("x", r16, e, t10))]; + return [o.erf(I("x", r15, e, t10))]; case "Exp": - return [o.exp(I("x", r16, e, t10))]; + return [o.exp(I("x", r15, e, t10))]; case "Expm1": - return [o.expm1(I("x", r16, e, t10))]; + return [o.expm1(I("x", r15, e, t10))]; case "Floor": - return [o.floor(I("x", r16, e, t10))]; + return [o.floor(I("x", r15, e, t10))]; case "Log": - return [o.log(I("x", r16, e, t10))]; + return [o.log(I("x", r15, e, t10))]; case "Log1p": - return [o.log1p(I("x", r16, e, t10))]; + return [o.log1p(I("x", r15, e, t10))]; case "Imag": - return [o.imag(I("x", r16, e, t10))]; + return [o.imag(I("x", r15, e, t10))]; case "Neg": - return [o.neg(I("x", r16, e, t10))]; + return [o.neg(I("x", r15, e, t10))]; case "Reciprocal": - return [o.reciprocal(I("x", r16, e, t10))]; + return [o.reciprocal(I("x", r15, e, t10))]; case "Real": - return [o.real(I("x", r16, e, t10))]; + return [o.real(I("x", r15, e, t10))]; case "Relu": - return [o.relu(I("x", r16, e, t10))]; + return [o.relu(I("x", r15, e, t10))]; case "Round": - return [o.round(I("x", r16, e, t10))]; + return [o.round(I("x", r15, e, t10))]; case "Selu": - return [o.selu(I("x", r16, e, t10))]; + return [o.selu(I("x", r15, e, t10))]; case "Sigmoid": - return [o.sigmoid(I("x", r16, e, t10))]; + return [o.sigmoid(I("x", r15, e, t10))]; case "Sin": - return [o.sin(I("x", r16, e, t10))]; + return [o.sin(I("x", r15, e, t10))]; case "Sign": - return [o.sign(I("x", r16, e, t10))]; + return [o.sign(I("x", r15, e, t10))]; case "Sinh": - return [o.sinh(I("x", r16, e, t10))]; + return [o.sinh(I("x", r15, e, t10))]; case "Softplus": - return [o.softplus(I("x", r16, e, t10))]; + return [o.softplus(I("x", r15, e, t10))]; case "Sqrt": - return [o.sqrt(I("x", r16, e, t10))]; + return [o.sqrt(I("x", r15, e, t10))]; case "Square": - return [o.square(I("x", r16, e, t10))]; + return [o.square(I("x", r15, e, t10))]; case "Tanh": - return [o.tanh(I("x", r16, e, t10))]; + return [o.tanh(I("x", r15, e, t10))]; case "Tan": - return [o.tan(I("x", r16, e, t10))]; + return [o.tan(I("x", r15, e, t10))]; case "ClipByValue": - return [o.clipByValue(I("x", r16, e, t10), I("clipValueMin", r16, e, t10), I("clipValueMax", r16, e, t10))]; + return [o.clipByValue(I("x", r15, e, t10), I("clipValueMin", r15, e, t10), I("clipValueMax", r15, e, t10))]; case "Relu6": - return [o.relu6(I("x", r16, e, t10))]; + return [o.relu6(I("x", r15, e, t10))]; case "Rsqrt": - return [o.rsqrt(Vt(r16.inputNames[0], e, t10))]; + return [o.rsqrt(Bt(r15.inputNames[0], e, t10))]; case "LeakyRelu": - return [o.leakyRelu(I("x", r16, e, t10), I("alpha", r16, e, t10))]; + return [o.leakyRelu(I("x", r15, e, t10), I("alpha", r15, e, t10))]; case "Prelu": - return [o.prelu(I("x", r16, e, t10), I("alpha", r16, e, t10))]; + return [o.prelu(I("x", r15, e, t10), I("alpha", r15, e, t10))]; case "IsNan": - return [o.isNaN(Vt(r16.inputNames[0], e, t10))]; + return [o.isNaN(Bt(r15.inputNames[0], e, t10))]; case "IsInf": - return [o.isInf(Vt(r16.inputNames[0], e, t10))]; + return [o.isInf(Bt(r15.inputNames[0], e, t10))]; case "IsFinite": - return [o.isFinite(Vt(r16.inputNames[0], e, t10))]; + return [o.isFinite(Bt(r15.inputNames[0], e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function Qr(r16, e, t10 = "") { - if (!(typeof r16 == "number" || typeof e == "number")) { - y.assert(r16.length === e.length, () => t10 + ` Shapes ${r16} and ${e} must match`); - for (let o = 0; o < r16.length; o++) { - let n = r16[o], s = e[o]; - y.assert(n < 0 || s < 0 || n === s, () => t10 + ` Shapes ${r16} and ${e} must match`); +function Hr(r15, e, t10 = "") { + if (!(typeof r15 == "number" || typeof e == "number")) { + y.assert(r15.length === e.length, () => t10 + ` Shapes ${r15} and ${e} must match`); + for (let o = 0; o < r15.length; o++) { + let n = r15[o], s = e[o]; + y.assert(n < 0 || s < 0 || n === s, () => t10 + ` Shapes ${r15} and ${e} must match`); } } } -function f_(r16) { - return !(typeof r16 == "number" || r16.some((e) => e < 0)); +function ET(r15) { + return !(typeof r15 == "number" || r15.some((e) => e < 0)); } -function Cl(r16, e, t10) { - let o = Df(r16, t10), n = !f_(o); +function fc(r15, e, t10) { + let o = Sf(r15, t10), n = !ET(o); if (n && e.length === 0) throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`); if (n && e.forEach((s) => { - o = Df(s.shape, o); - }), !f_(o)) + o = Sf(s.shape, o); + }), !ET(o)) throw new Error(`Non-fully-defined elementShape: ${o}`); return o; } -function Df(r16, e) { - if (typeof r16 == "number") +function Sf(r15, e) { + if (typeof r15 == "number") return e; if (typeof e == "number") - return r16; - if (r16.length !== e.length) - throw new Error(`Incompatible ranks during merge: ${r16} vs. ${e}`); + return r15; + if (r15.length !== e.length) + throw new Error(`Incompatible ranks during merge: ${r15} vs. ${e}`); let t10 = []; - for (let o = 0; o < r16.length; ++o) { - let n = r16[o], s = e[o]; + for (let o = 0; o < r15.length; ++o) { + let n = r15[o], s = e[o]; if (n >= 0 && s >= 0 && n !== s) - throw new Error(`Incompatible shape during merge: ${r16} vs. ${e}`); + throw new Error(`Incompatible shape during merge: ${r15} vs. ${e}`); t10[o] = n >= 0 ? n : s; } return t10; } -var Af = class { +var If = class { constructor(e, t10, o, n, s, a, i) { - this.name = e, this.dtype = t10, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = ke(0), Fr(this.idTensor); + this.name = e, this.dtype = t10, this.maxSize = o, this.elementShape = n, this.identicalElementShapes = s, this.dynamicSize = a, this.clearAfterRead = i, this.tensors = [], this.closed_ = false, this.idTensor = ke(0), $r(this.idTensor); } get id() { return this.idTensor.id; @@ -10372,11 +10372,11 @@ var Af = class { if (t10.dtype !== this.dtype) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because the value dtype is ${t10.dtype}, but TensorArray dtype is ${this.dtype}.`); - if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = t10.shape), Qr(this.elementShape, t10.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${e}.`), o.read) + if (this.size() === 0 && (this.elementShape == null || this.elementShape.length === 0) && (this.elementShape = t10.shape), Hr(this.elementShape, t10.shape, `TensorArray ${this.name}: Could not write to TensorArray index ${e}.`), o.read) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`); if (o.written) throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`); - o.tensor = t10, Fr(t10), o.written = true, this.tensors[e] = o; + o.tensor = t10, $r(t10), o.written = true, this.tensors[e] = o; } writeMany(e, t10) { if (e.length !== t10.length) @@ -10394,20 +10394,20 @@ var Af = class { e.push(n); } if (e.length === 0) - return pr([], [0].concat(this.elementShape)); + return ar([], [0].concat(this.elementShape)); let o = this.readMany(e); - return Qr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), Tr(o, 0); + return Hr(this.elementShape, o[0].shape, "TensorArray shape mismatch: "), vr(o, 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 pr([], [0].concat(this.elementShape)); + return ar([], [0].concat(this.elementShape)); let t10 = []; for (let n = 0; n < this.size(); n++) t10.push(n); let o = this.readMany(t10); - return Qr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), bt(o, 0); + return Hr(this.elementShape, o[0].shape, `TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${o[0].shape})`), yt(o, 0); } scatter(e, t10) { if (t10.dtype !== this.dtype) @@ -10417,7 +10417,7 @@ var Af = class { let o = Math.max(...e); if (!this.dynamicSize && o >= this.maxSize) throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`); - this.writeMany(e, zo(t10, 0)); + this.writeMany(e, fo(t10, 0)); } split(e, t10) { if (t10.dtype !== this.dtype) @@ -10433,8 +10433,8 @@ var Af = class { De(() => { t10 = W(t10, [1, o, s]); for (let p = 0; p < e.length; ++p) { - let l = [0, p === 0 ? 0 : n[p - 1], 0], c = [1, e[p], s]; - a[p] = W(Ye(t10, l, c), this.elementShape); + let c = [0, p === 0 ? 0 : n[p - 1], 0], l = [1, e[p], s]; + a[p] = W(Xe(t10, c, l), this.elementShape); } return a; }); @@ -10444,7 +10444,7 @@ var Af = class { this.writeMany(i, a); } }; -var wl = class r9 { +var hc = class r9 { get id() { return this.idTensor.id; } @@ -10452,8 +10452,8 @@ var wl = class r9 { this.tensors = e, this.elementShape = t10, this.elementDtype = o, e != null && e.forEach((s) => { if (o !== s.dtype) throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`); - Qr(t10, s.shape, "TensorList shape mismatch: "), Fr(s); - }), this.idTensor = ke(0), this.maxNumElements = n, Fr(this.idTensor); + Hr(t10, s.shape, "TensorList shape mismatch: "), $r(s); + }), this.idTensor = ke(0), this.maxNumElements = n, $r(this.idTensor); } copy() { return new r9([...this.tensors], this.elementShape, this.elementDtype); @@ -10471,11 +10471,11 @@ var wl = class r9 { throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); if (o !== -1 && this.tensors.length !== o) throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`); - Qr(e, this.elementShape, "TensorList shape mismatch: "); - let n = Cl(this.elementShape, this.tensors, e); + Hr(e, this.elementShape, "TensorList shape mismatch: "); + let n = fc(this.elementShape, this.tensors, e); return De(() => { let s = this.tensors.map((a) => W(a, n)); - return Tr(s, 0); + return vr(s, 0); }); } popBack(e, t10) { @@ -10483,15 +10483,15 @@ var wl = class r9 { throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); if (this.size() === 0) throw new Error("Trying to pop from an empty list."); - let o = Cl(this.elementShape, this.tensors, e), n = this.tensors.pop(); - return n.kept = false, Qr(n.shape, e, "TensorList shape mismatch: "), W(n, o); + let o = fc(this.elementShape, this.tensors, e), n = this.tensors.pop(); + return n.kept = false, Hr(n.shape, e, "TensorList shape mismatch: "), W(n, o); } pushBack(e) { if (e.dtype !== this.elementDtype) throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`); - if (Qr(e.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) + if (Hr(e.shape, this.elementShape, "TensorList shape mismatch: "), this.maxNumElements === this.size()) throw new Error("Trying to push element into a full list."); - Fr(e), this.tensors.push(e); + $r(e), this.tensors.push(e); } resize(e) { if (e < 0) @@ -10511,8 +10511,8 @@ var wl = class r9 { 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.`); - Qr(this.tensors[e].shape, t10, "TensorList shape mismatch: "); - let n = Cl(this.elementShape, this.tensors, t10); + Hr(this.tensors[e].shape, t10, "TensorList shape mismatch: "); + let n = fc(this.elementShape, this.tensors, t10); return W(this.tensors[e], n); } setItem(e, t10) { @@ -10520,228 +10520,228 @@ var wl = class r9 { throw new Error(`Invalid data types; op elements ${t10.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.`); - Qr(this.elementShape, t10.shape, "TensorList shape mismatch: "), Fr(t10), this.tensors[e] != null && (this.tensors[e].kept = false), this.tensors[e] = t10; + Hr(this.elementShape, t10.shape, "TensorList shape mismatch: "), $r(t10), this.tensors[e] != null && (this.tensors[e].kept = false), this.tensors[e] = t10; } gather(e, t10, o) { if (t10 !== this.elementDtype) throw new Error(`Invalid data types; op elements ${t10}, but list elements ${this.elementDtype}`); - Qr(this.elementShape, o, "TensorList shape mismatch: "), e = e.slice(0, this.size()); - let n = Cl(this.elementShape, this.tensors, o); - return e.length === 0 ? pr([], [0].concat(n)) : De(() => { + Hr(this.elementShape, o, "TensorList shape mismatch: "), e = e.slice(0, this.size()); + let n = fc(this.elementShape, this.tensors, o); + return e.length === 0 ? ar([], [0].concat(n)) : De(() => { let s = e.map((a) => W(this.tensors[a], n)); - return Tr(s, 0); + return vr(s, 0); }); } concat(e, t10) { if (e && e !== this.elementDtype) throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`); - Qr(this.elementShape, t10, "TensorList shape mismatch: "); - let o = Cl(this.elementShape, this.tensors, t10); - return this.size() === 0 ? pr([], [0].concat(o)) : De(() => { + Hr(this.elementShape, t10, "TensorList shape mismatch: "); + let o = fc(this.elementShape, this.tensors, t10); + return this.size() === 0 ? ar([], [0].concat(o)) : De(() => { let n = this.tensors.map((s) => W(s, o)); - return bt(n, 0); + return yt(n, 0); }); } }; -function h_(r16, e, t10) { - let o = r16.dtype; - if (r16.shape.length < 1) - throw new Error(`Tensor must be at least a vector, but saw shape: ${r16.shape}`); - if (r16.dtype !== t10) - throw new Error(`Invalid data types; op elements ${r16.dtype}, but list elements ${t10}`); - let n = r16.shape.slice(1); - Qr(n, e, "TensorList shape mismatch: "); - let s = zo(r16); - return new wl(s, e, o); +function $T(r15, e, t10) { + let o = r15.dtype; + if (r15.shape.length < 1) + throw new Error(`Tensor must be at least a vector, but saw shape: ${r15.shape}`); + if (r15.dtype !== t10) + throw new Error(`Invalid data types; op elements ${r15.dtype}, but list elements ${t10}`); + let n = r15.shape.slice(1); + Hr(n, e, "TensorList shape mismatch: "); + let s = fo(r15); + return new hc(s, e, o); } -function g_(r16, e, t10, o) { - return new wl([], r16, e, o); +function RT(r15, e, t10, o) { + return new hc([], r15, e, o); } -function x_(r16, e, t10, o) { - if (e.length !== r16.shape[0]) - throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r16.shape[0]}`); +function DT(r15, e, t10, o) { + if (e.length !== r15.shape[0]) + throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r15.shape[0]}`); let n = Math.max(...e); if (o != null && o !== -1 && n >= o) throw new Error(`Max index must be < array size (${n} vs. ${o})`); - let s = new wl([], t10, r16.dtype, o), a = zo(r16, 0); + let s = new hc([], t10, r15.dtype, o), a = fo(r15, 0); return e.forEach((i, p) => { s.setItem(i, a[p]); }), s; } -function y_(r16, e, t10) { - let o = 0, n = e.map((l) => (o += l, o)); - if (o !== r16.shape[0]) +function AT(r15, e, t10) { + let o = 0, n = e.map((c) => (o += c, o)); + if (o !== r15.shape[0]) throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, and tensor's shape is: ${r16.shape}`); - let s = r16.shape.slice(1), a = Df(s, t10), i = o === 0 ? 0 : r16.size / o, p = De(() => { - let l = []; - r16 = W(r16, [1, o, i]); - for (let c = 0; c < e.length; ++c) { - let d = [0, c === 0 ? 0 : n[c - 1], 0], f = [1, e[c], i]; - l[c] = W(Ye(r16, d, f), a); - } - return r16.dispose(), l; - }), u = new wl([], t10, r16.dtype, e.length); - for (let l = 0; l < p.length; l++) - u.setItem(l, p[l]); + ${o}, and tensor's shape is: ${r15.shape}`); + let s = r15.shape.slice(1), a = Sf(s, t10), i = o === 0 ? 0 : r15.size / o, p = De(() => { + let c = []; + r15 = W(r15, [1, o, i]); + for (let l = 0; l < e.length; ++l) { + let d = [0, l === 0 ? 0 : n[l - 1], 0], f = [1, e[l], i]; + c[l] = W(Xe(r15, d, f), a); + } + return r15.dispose(), c; + }), u = new hc([], t10, r15.dtype, e.length); + for (let c = 0; c < p.length; c++) + u.setItem(c, p[c]); return u; } -var b_ = async (r16, e, t10) => { - switch (r16.op) { +var FT = async (r15, e, t10) => { + switch (r15.op) { case "If": case "StatelessIf": { - let o = I("thenBranch", r16, e, t10), n = I("elseBranch", r16, e, t10), s = I("cond", r16, e, t10), a = I("args", r16, e, t10); + let o = I("thenBranch", r15, e, t10), n = I("elseBranch", r15, e, t10), s = I("cond", r15, e, t10), a = I("args", r15, e, t10); return (await s.data())[0] ? t10.functionMap[o].executeFunctionAsync(a, t10.tensorArrayMap, t10.tensorListMap) : t10.functionMap[n].executeFunctionAsync(a, t10.tensorArrayMap, t10.tensorListMap); } case "While": case "StatelessWhile": { - let o = I("body", r16, e, t10), n = I("cond", r16, e, t10), s = I("args", r16, e, t10), a = await t10.functionMap[n].executeFunctionAsync(s, t10.tensorArrayMap, t10.tensorListMap), i = s.map((l) => l.id), p = await a[0].data(); - a.forEach((l) => { - !l.kept && i.indexOf(l.id) === -1 && l.dispose(); + let o = I("body", r15, e, t10), n = I("cond", r15, e, t10), s = I("args", r15, e, t10), a = await t10.functionMap[n].executeFunctionAsync(s, t10.tensorArrayMap, t10.tensorListMap), i = s.map((c) => c.id), p = await a[0].data(); + a.forEach((c) => { + !c.kept && i.indexOf(c.id) === -1 && c.dispose(); }); let u = s; for (; p[0]; ) { - let l = u; + let c = u; u = await t10.functionMap[o].executeFunctionAsync(u, t10.tensorArrayMap, t10.tensorListMap); - let c = u.map((d) => d.id); - l.forEach((d) => { - !d.kept && i.indexOf(d.id) === -1 && c.indexOf(d.id) === -1 && d.dispose(); + let l = u.map((d) => d.id); + c.forEach((d) => { + !d.kept && i.indexOf(d.id) === -1 && l.indexOf(d.id) === -1 && d.dispose(); }); let m = await t10.functionMap[n].executeFunctionAsync(u, t10.tensorArrayMap, t10.tensorListMap); p = await m[0].data(), m.forEach((d) => { - !d.kept && i.indexOf(d.id) === -1 && c.indexOf(d.id) === -1 && d.dispose(); + !d.kept && i.indexOf(d.id) === -1 && l.indexOf(d.id) === -1 && d.dispose(); }); } return u; } case "LoopCond": { - let o = I("pred", r16, e, t10); - return [js(o)]; + let o = I("pred", r15, e, t10); + return [Bs(o)]; } case "Switch": { - let o = I("pred", r16, e, t10), n = I("data", r16, e, t10); - return n.kept || (n = js(n)), (await o.data())[0] ? [void 0, n] : [n, void 0]; + let o = I("pred", r15, e, t10), n = I("data", r15, e, t10); + return n.kept || (n = Bs(n)), (await o.data())[0] ? [void 0, n] : [n, void 0]; } case "Merge": { - let o = r16.inputNames.find((n) => Vt(n, e, t10) !== void 0); + let o = r15.inputNames.find((n) => Bt(n, e, t10) !== void 0); if (o) { - let n = Vt(o, e, t10); - return [js(n)]; + let n = Bt(o, e, t10); + return [Bs(n)]; } return; } case "Enter": { - let o = I("frameName", r16, e, t10), n = I("tensor", r16, e, t10); - return t10.enterFrame(o), [js(n)]; + let o = I("frameName", r15, e, t10), n = I("tensor", r15, e, t10); + return t10.enterFrame(o), [Bs(n)]; } case "Exit": { - let o = I("tensor", r16, e, t10); - return t10.exitFrame(), [js(o)]; + let o = I("tensor", r15, e, t10); + return t10.exitFrame(), [Bs(o)]; } case "NextIteration": { - let o = I("tensor", r16, e, t10); - return t10.nextIteration(), [js(o)]; + let o = I("tensor", r15, e, t10); + return t10.nextIteration(), [Bs(o)]; } case "TensorArrayV3": { - let o = I("size", r16, e, t10), n = I("dtype", r16, e, t10), s = I("elementShape", r16, e, t10), a = I("dynamicSize", r16, e, t10), i = I("clearAfterRead", r16, e, t10), p = I("identicalElementShapes", r16, e, t10), u = I("name", r16, e, t10), l = new Af(u, n, o, s, p, a, i); - return t10.addTensorArray(l), [l.idTensor, ke(1)]; + let o = I("size", r15, e, t10), n = I("dtype", r15, e, t10), s = I("elementShape", r15, e, t10), a = I("dynamicSize", r15, e, t10), i = I("clearAfterRead", r15, e, t10), p = I("identicalElementShapes", r15, e, t10), u = I("name", r15, e, t10), c = new If(u, n, o, s, p, a, i); + return t10.addTensorArray(c), [c.idTensor, ke(1)]; } case "TensorArrayWriteV3": { - let o = I("tensorArrayId", r16, e, t10), n = I("index", r16, e, t10), s = I("tensor", r16, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r15, e, t10), n = I("index", r15, e, t10), s = I("tensor", r15, e, t10), a = t10.getTensorArray(o.id); return a.write(n, s), [a.idTensor]; } case "TensorArrayReadV3": { - let o = I("tensorArrayId", r16, e, t10), n = I("index", r16, e, t10); + let o = I("tensorArrayId", r15, e, t10), n = I("index", r15, e, t10); return [t10.getTensorArray(o.id).read(n)]; } case "TensorArrayGatherV3": { - let o = I("tensorArrayId", r16, e, t10), n = I("indices", r16, e, t10), s = I("dtype", r16, e, t10); + let o = I("tensorArrayId", r15, e, t10), n = I("indices", r15, e, t10), s = I("dtype", r15, e, t10); return [t10.getTensorArray(o.id).gather(n, s)]; } case "TensorArrayScatterV3": { - let o = I("tensorArrayId", r16, e, t10), n = I("indices", r16, e, t10), s = I("tensor", r16, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r15, e, t10), n = I("indices", r15, e, t10), s = I("tensor", r15, e, t10), a = t10.getTensorArray(o.id); return a.scatter(n, s), [a.idTensor]; } case "TensorArrayConcatV3": { - let o = I("tensorArrayId", r16, e, t10), n = t10.getTensorArray(o.id), s = I("dtype", r16, e, t10); + let o = I("tensorArrayId", r15, e, t10), n = t10.getTensorArray(o.id), s = I("dtype", r15, e, t10); return [n.concat(s)]; } case "TensorArraySplitV3": { - let o = I("tensorArrayId", r16, e, t10), n = I("tensor", r16, e, t10), s = I("lengths", r16, e, t10), a = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r15, e, t10), n = I("tensor", r15, e, t10), s = I("lengths", r15, e, t10), a = t10.getTensorArray(o.id); return a.split(s, n), [a.idTensor]; } case "TensorArraySizeV3": { - let o = I("tensorArrayId", r16, e, t10), n = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r15, e, t10), n = t10.getTensorArray(o.id); return [ke(n.size(), "int32")]; } case "TensorArrayCloseV3": { - let o = I("tensorArrayId", r16, e, t10), n = t10.getTensorArray(o.id); + let o = I("tensorArrayId", r15, e, t10), n = t10.getTensorArray(o.id); return n.clearAndClose(), [n.idTensor]; } case "TensorListSetItem": { - let o = I("tensorListId", r16, e, t10), n = I("index", r16, e, t10), s = I("tensor", r16, e, t10), a = t10.getTensorList(o.id); + let o = I("tensorListId", r15, e, t10), n = I("index", r15, e, t10), s = I("tensor", r15, e, t10), a = t10.getTensorList(o.id); return a.setItem(n, s), [a.idTensor]; } case "TensorListGetItem": { - let o = I("tensorListId", r16, e, t10), n = I("index", r16, e, t10), s = I("elementShape", r16, e, t10), a = I("elementDType", r16, e, t10); + let o = I("tensorListId", r15, e, t10), n = I("index", r15, e, t10), s = I("elementShape", r15, e, t10), a = I("elementDType", r15, e, t10); return [t10.getTensorList(o.id).getItem(n, s, a)]; } case "TensorListScatterV2": case "TensorListScatter": { - let o = I("indices", r16, e, t10), n = I("tensor", r16, e, t10), s = I("elementShape", r16, e, t10), a = I("numElements", r16, e, t10), i = x_(n, o, s, a); + let o = I("indices", r15, e, t10), n = I("tensor", r15, e, t10), s = I("elementShape", r15, e, t10), a = I("numElements", r15, e, t10), i = DT(n, o, s, a); return t10.addTensorList(i), [i.idTensor]; } case "TensorListReserve": case "EmptyTensorList": { - let o = I("elementShape", r16, e, t10), n = I("elementDType", r16, e, t10), s; - r16.op === "TensorListReserve" ? s = "numElements" : s = "maxNumElements"; - let a = I(s, r16, e, t10), i = r16.op === "TensorListReserve" ? -1 : a, p = g_(o, n, a, i); + let o = I("elementShape", r15, e, t10), n = I("elementDType", r15, e, t10), s; + r15.op === "TensorListReserve" ? s = "numElements" : s = "maxNumElements"; + let a = I(s, r15, e, t10), i = r15.op === "TensorListReserve" ? -1 : a, p = RT(o, n, a, i); return t10.addTensorList(p), [p.idTensor]; } case "TensorListGather": { - let o = I("tensorListId", r16, e, t10), n = I("indices", r16, e, t10), s = I("elementShape", r16, e, t10), a = I("elementDType", r16, e, t10); + let o = I("tensorListId", r15, e, t10), n = I("indices", r15, e, t10), s = I("elementShape", r15, e, t10), a = I("elementDType", r15, e, t10); return [t10.getTensorList(o.id).gather(n, a, s)]; } case "TensorListStack": { - let o = I("tensorListId", r16, e, t10), n = I("elementShape", r16, e, t10), s = I("elementDType", r16, e, t10), a = I("numElements", r16, e, t10); + let o = I("tensorListId", r15, e, t10), n = I("elementShape", r15, e, t10), s = I("elementDType", r15, e, t10), a = I("numElements", r15, e, t10); return [t10.getTensorList(o.id).stack(n, s, a)]; } case "TensorListFromTensor": { - let o = I("tensor", r16, e, t10), n = I("elementShape", r16, e, t10), s = I("elementDType", r16, e, t10), a = h_(o, n, s); + let o = I("tensor", r15, e, t10), n = I("elementShape", r15, e, t10), s = I("elementDType", r15, e, t10), a = $T(o, n, s); return t10.addTensorList(a), [a.idTensor]; } case "TensorListConcat": case "TensorListConcatV2": { - let o = I("tensorListId", r16, e, t10), n = t10.getTensorList(o.id), s = I("dtype", r16, e, t10), a = I("elementShape", r16, e, t10); + let o = I("tensorListId", r15, e, t10), n = t10.getTensorList(o.id), s = I("dtype", r15, e, t10), a = I("elementShape", r15, e, t10); return [n.concat(s, a)]; } case "TensorListPushBack": { - let o = I("tensorListId", r16, e, t10), n = I("tensor", r16, e, t10), s = t10.getTensorList(o.id); + let o = I("tensorListId", r15, e, t10), n = I("tensor", r15, e, t10), s = t10.getTensorList(o.id); return s.pushBack(n), [s.idTensor]; } case "TensorListPopBack": { - let o = I("tensorListId", r16, e, t10), n = I("elementShape", r16, e, t10), s = I("elementDType", r16, e, t10); + let o = I("tensorListId", r15, e, t10), n = I("elementShape", r15, e, t10), s = I("elementDType", r15, e, t10); return [t10.getTensorList(o.id).popBack(n, s)]; } case "TensorListSplit": { - let o = I("tensor", r16, e, t10), n = I("elementShape", r16, e, t10), s = I("lengths", r16, e, t10), a = y_(o, s, n); + let o = I("tensor", r15, e, t10), n = I("elementShape", r15, e, t10), s = I("lengths", r15, e, t10), a = AT(o, s, n); return t10.addTensorList(a), [a.idTensor]; } case "TensorListLength": { - let o = I("tensorListId", r16, e, t10), n = t10.getTensorList(o.id); + let o = I("tensorListId", r15, e, t10), n = t10.getTensorList(o.id); return [ke(n.size(), "int32")]; } case "TensorListResize": { - let o = I("tensorListId", r16, e, t10), n = I("size", r16, e, t10), a = t10.getTensorList(o.id).resize(n); + let o = I("tensorListId", r15, e, t10), n = I("size", r15, e, t10), a = t10.getTensorList(o.id).resize(n); return t10.addTensorList(a), [a.idTensor]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function C_(r16, e, t10) { - let [o, n] = I("fusedOps", r16, e, t10), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r16, e, t10); +function PT(r15, e, t10) { + let [o, n] = I("fusedOps", r15, e, t10), s = o === "biasadd", a = !s, i = n === "prelu", p = o === "fusedbatchnorm", u = I("numArgs", r15, e, t10); if (s) { if (i && u !== 2) throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha."); @@ -10750,216 +10750,216 @@ function C_(r16, e, t10) { } if (p) throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported"); - let l = I("strides", r16, e, t10), c = Wc(r16, e, t10), m = I("dataFormat", r16, e, t10).toUpperCase(), d = I("dilations", r16, e, t10), [f, h] = I("args", r16, e, t10); + let c = I("strides", r15, e, t10), l = Pl(r15, e, t10), m = I("dataFormat", r15, e, t10).toUpperCase(), d = I("dilations", r15, e, t10), [f, h] = I("args", r15, e, t10); a && (h = f, f = void 0); - let g = I("leakyreluAlpha", r16, e, t10); - return { stride: l, pad: c, dataFormat: m, dilations: d, biasArg: f, preluArg: h, activationFunc: n, leakyreluAlpha: g }; + let g = I("leakyreluAlpha", r15, e, t10); + return { stride: c, pad: l, dataFormat: m, dilations: d, biasArg: f, preluArg: h, activationFunc: n, leakyreluAlpha: g }; } -var w_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var OT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Conv1D": { - let n = I("stride", r16, e, t10), s = I("pad", r16, e, t10), a = I("dataFormat", r16, e, t10).toUpperCase(), i = I("dilation", r16, e, t10); - return [o.conv1d(I("x", r16, e, t10), I("filter", r16, e, t10), n, s, a, i)]; + let n = I("stride", r15, e, t10), s = I("pad", r15, e, t10), a = I("dataFormat", r15, e, t10).toUpperCase(), i = I("dilation", r15, e, t10); + return [o.conv1d(I("x", r15, e, t10), I("filter", r15, e, t10), n, s, a, i)]; } case "Conv2D": { - let n = I("strides", r16, e, t10), s = Wc(r16, e, t10), a = I("dataFormat", r16, e, t10).toUpperCase(), i = I("dilations", r16, e, t10); - return [o.conv2d(I("x", r16, e, t10), I("filter", r16, e, t10), [n[1], n[2]], s, a, [i[1], i[2]])]; + let n = I("strides", r15, e, t10), s = Pl(r15, e, t10), a = I("dataFormat", r15, e, t10).toUpperCase(), i = I("dilations", r15, e, t10); + return [o.conv2d(I("x", r15, e, t10), I("filter", r15, e, t10), [n[1], n[2]], s, a, [i[1], i[2]])]; } case "_FusedConv2D": { - let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: l, leakyreluAlpha: c } = C_(r16, e, t10); - return [o.fused.conv2d({ x: I("x", r16, e, t10), filter: I("filter", r16, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: l, preluActivationWeights: u, leakyreluAlpha: c })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = PT(r15, e, t10); + return [o.fused.conv2d({ x: I("x", r15, e, t10), filter: I("filter", r15, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; } case "FusedDepthwiseConv2dNative": { - let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: l, leakyreluAlpha: c } = C_(r16, e, t10); - return [o.fused.depthwiseConv2d({ x: I("x", r16, e, t10), filter: I("filter", r16, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: l, preluActivationWeights: u, leakyreluAlpha: c })]; + let { stride: n, pad: s, dataFormat: a, dilations: i, biasArg: p, preluArg: u, activationFunc: c, leakyreluAlpha: l } = PT(r15, e, t10); + return [o.fused.depthwiseConv2d({ x: I("x", r15, e, t10), filter: I("filter", r15, e, t10), strides: [n[1], n[2]], pad: s, dataFormat: a, dilations: [i[1], i[2]], bias: p, activation: c, preluActivationWeights: u, leakyreluAlpha: l })]; } case "Conv2DBackpropInput": case "Conv2dTranspose": { - let n = I("outputShape", r16, e, t10), s = I("strides", r16, e, t10), a = Wc(r16, e, t10); - return [o.conv2dTranspose(I("x", r16, e, t10), I("filter", r16, e, t10), n, [s[1], s[2]], a)]; + let n = I("outputShape", r15, e, t10), s = I("strides", r15, e, t10), a = Pl(r15, e, t10); + return [o.conv2dTranspose(I("x", r15, e, t10), I("filter", r15, e, t10), n, [s[1], s[2]], a)]; } case "DepthwiseConv2dNative": case "DepthwiseConv2d": { - let n = I("strides", r16, e, t10), s = Wc(r16, e, t10), a = I("dilations", r16, e, t10), i = I("dataFormat", r16, e, t10).toUpperCase(); - return [o.depthwiseConv2d(I("input", r16, e, t10), I("filter", r16, e, t10), [n[1], n[2]], s, i, [a[1], a[2]])]; + let n = I("strides", r15, e, t10), s = Pl(r15, e, t10), a = I("dilations", r15, e, t10), i = I("dataFormat", r15, e, t10).toUpperCase(); + return [o.depthwiseConv2d(I("input", r15, e, t10), I("filter", r15, e, t10), [n[1], n[2]], s, i, [a[1], a[2]])]; } case "Conv3D": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("dataFormat", r16, e, t10).toUpperCase(), i = I("dilations", r16, e, t10); - return [o.conv3d(I("x", r16, e, t10), I("filter", r16, e, t10), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("dataFormat", r15, e, t10).toUpperCase(), i = I("dilations", r15, e, t10); + return [o.conv3d(I("x", r15, e, t10), I("filter", r15, e, t10), [n[1], n[2], n[3]], s, a, [i[1], i[2], i[3]])]; } case "AvgPool": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("kernelSize", r16, e, t10); - return [o.avgPool(I("x", r16, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("kernelSize", r15, e, t10); + return [o.avgPool(I("x", r15, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPool": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("kernelSize", r16, e, t10); - return [o.maxPool(I("x", r16, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("kernelSize", r15, e, t10); + return [o.maxPool(I("x", r15, e, t10), [a[1], a[2]], [n[1], n[2]], s)]; } case "MaxPoolWithArgmax": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("kernelSize", r16, e, t10), i = I("includeBatchInIndex", r16, e, t10), { result: p, indexes: u } = o.maxPoolWithArgmax(I("x", r16, e, t10), [a[1], a[2]], [n[1], n[2]], s, i); + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("kernelSize", r15, e, t10), i = I("includeBatchInIndex", r15, e, t10), { result: p, indexes: u } = o.maxPoolWithArgmax(I("x", r15, e, t10), [a[1], a[2]], [n[1], n[2]], s, i); return [p, u]; } case "AvgPool3D": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("kernelSize", r16, e, t10); - return [o.avgPool3d(I("x", r16, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("kernelSize", r15, e, t10); + return [o.avgPool3d(I("x", r15, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "MaxPool3D": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("kernelSize", r16, e, t10); - return [o.maxPool3d(I("x", r16, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("kernelSize", r15, e, t10); + return [o.maxPool3d(I("x", r15, e, t10), [a[1], a[2], a[3]], [n[1], n[2], n[3]], s)]; } case "Dilation2D": { - let n = I("strides", r16, e, t10), s = I("pad", r16, e, t10), a = I("dilations", r16, e, t10), i = n[1], p = n[2], u = a[1], l = a[2]; - return [o.dilation2d(I("x", r16, e, t10), I("filter", r16, e, t10), [i, p], s, [u, l], "NHWC")]; + let n = I("strides", r15, e, t10), s = I("pad", r15, e, t10), a = I("dilations", r15, e, t10), i = n[1], p = n[2], u = a[1], c = a[2]; + return [o.dilation2d(I("x", r15, e, t10), I("filter", r15, e, t10), [i, p], s, [u, c], "NHWC")]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var S_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var MT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Fill": { - let n = I("shape", r16, e, t10), s = I("dtype", r16, e, t10), a = I("value", r16, e, t10); + let n = I("shape", r15, e, t10), s = I("dtype", r15, e, t10), a = I("value", r15, e, t10); return [o.fill(n, a, s)]; } case "LinSpace": { - let n = I("start", r16, e, t10), s = I("stop", r16, e, t10), a = I("num", r16, e, t10); + let n = I("start", r15, e, t10), s = I("stop", r15, e, t10), a = I("num", r15, e, t10); return [o.linspace(n, s, a)]; } case "Multinomial": { - let n = I("logits", r16, e, t10), s = I("numSamples", r16, e, t10), a = I("seed", r16, e, t10); + let n = I("logits", r15, e, t10), s = I("numSamples", r15, e, t10), a = I("seed", r15, e, t10); return [o.multinomial(n, s, a)]; } case "OneHot": { - let n = I("indices", r16, e, t10), s = I("depth", r16, e, t10), a = I("onValue", r16, e, t10), i = I("offValue", r16, e, t10), p = I("dtype", r16, e, t10); + let n = I("indices", r15, e, t10), s = I("depth", r15, e, t10), a = I("onValue", r15, e, t10), i = I("offValue", r15, e, t10), p = I("dtype", r15, e, t10); return [o.oneHot(n, s, a, i, p)]; } case "Ones": - return [o.ones(I("shape", r16, e, t10), I("dtype", r16, e, t10))]; + return [o.ones(I("shape", r15, e, t10), I("dtype", r15, e, t10))]; case "OnesLike": - return [o.onesLike(I("x", r16, e, t10))]; + return [o.onesLike(I("x", r15, e, t10))]; case "RandomStandardNormal": - return [o.randomStandardNormal(I("shape", r16, e, t10), I("dtype", r16, e, t10), I("seed", r16, e, t10))]; + return [o.randomStandardNormal(I("shape", r15, e, t10), I("dtype", r15, e, t10), I("seed", r15, e, t10))]; case "RandomUniform": - return [o.randomUniform(I("shape", r16, e, t10), I("minval", r16, e, t10), I("maxval", r16, e, t10), I("dtype", r16, e, t10))]; + return [o.randomUniform(I("shape", r15, e, t10), I("minval", r15, e, t10), I("maxval", r15, e, t10), I("dtype", r15, e, t10))]; case "RandomUniformInt": - return [o.randomUniformInt(I("shape", r16, e, t10), I("minval", r16, e, t10), I("maxval", r16, e, t10), I("seed", r16, e, t10))]; + return [o.randomUniformInt(I("shape", r15, e, t10), I("minval", r15, e, t10), I("maxval", r15, e, t10), I("seed", r15, e, t10))]; case "Range": { - let n = I("start", r16, e, t10), s = I("stop", r16, e, t10), a = I("step", r16, e, t10); - return [o.range(n, s, a, I("dtype", r16, e, t10))]; + let n = I("start", r15, e, t10), s = I("stop", r15, e, t10), a = I("step", r15, e, t10); + return [o.range(n, s, a, I("dtype", r15, e, t10))]; } case "TruncatedNormal": { - let n = I("shape", r16, e, t10), s = I("mean", r16, e, t10), a = I("stdDev", r16, e, t10), i = I("seed", r16, e, t10); - return [o.truncatedNormal(n, s, a, I("dtype", r16, e, t10), i)]; + let n = I("shape", r15, e, t10), s = I("mean", r15, e, t10), a = I("stdDev", r15, e, t10), i = I("seed", r15, e, t10); + return [o.truncatedNormal(n, s, a, I("dtype", r15, e, t10), i)]; } case "Zeros": - return [o.zeros(I("shape", r16, e, t10), I("dtype", r16, e, t10))]; + return [o.zeros(I("shape", r15, e, t10), I("dtype", r15, e, t10))]; case "ZerosLike": - return [o.zerosLike(I("x", r16, e, t10))]; + return [o.zerosLike(I("x", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function XS(r16, e, t10) { - let o = I("boxes", r16, e, t10), n = I("scores", r16, e, t10), s = I("maxOutputSize", r16, e, t10), a = I("iouThreshold", r16, e, t10), i = I("scoreThreshold", r16, e, t10), p = I("softNmsSigma", r16, e, t10); +function OS(r15, e, t10) { + let o = I("boxes", r15, e, t10), n = I("scores", r15, e, t10), s = I("maxOutputSize", r15, e, t10), a = I("iouThreshold", r15, e, t10), i = I("scoreThreshold", r15, e, t10), p = I("softNmsSigma", r15, e, t10); return { boxes: o, scores: n, maxOutputSize: s, iouThreshold: a, scoreThreshold: i, softNmsSigma: p }; } -var I_ = async (r16, e, t10, o, n = et) => { - switch (r16.op) { +var LT = async (r15, e, t10, o, n = Je) => { + switch (r15.op) { case "NonMaxSuppressionV5": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: l } = XS(r16, e, t10), c = await n.image.nonMaxSuppressionWithScoreAsync(s, a, i, p, u, l); - return [c.selectedIndices, c.selectedScores]; + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u, softNmsSigma: c } = OS(r15, e, t10), l = await n.image.nonMaxSuppressionWithScoreAsync(s, a, i, p, u, c); + return [l.selectedIndices, l.selectedScores]; } case "NonMaxSuppressionV4": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = XS(r16, e, t10), l = I("padToMaxOutputSize", r16, e, t10), c = await n.image.nonMaxSuppressionPaddedAsync(s, a, i, p, u, l); - return [c.selectedIndices, c.validOutputs]; + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = OS(r15, e, t10), c = I("padToMaxOutputSize", r15, e, t10), l = await n.image.nonMaxSuppressionPaddedAsync(s, a, i, p, u, c); + return [l.selectedIndices, l.validOutputs]; } case "NonMaxSuppressionV3": case "NonMaxSuppressionV2": { - let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = XS(r16, e, t10); + let { boxes: s, scores: a, maxOutputSize: i, iouThreshold: p, scoreThreshold: u } = OS(r15, e, t10); return [await n.image.nonMaxSuppressionAsync(s, a, i, p, u)]; } case "Where": { - let s = n.cast(I("condition", r16, e, t10), "bool"), a = [await n.whereAsync(s)]; + let s = n.cast(I("condition", r15, e, t10), "bool"), a = [await n.whereAsync(s)]; return s.dispose(), a; } case "ListDiff": - return n.setdiff1dAsync(I("x", r16, e, t10), I("y", r16, e, t10)); + return n.setdiff1dAsync(I("x", r15, e, t10), I("y", r15, e, t10)); default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var v_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var BT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "LowerBound": { - let n = I("sortedSequence", r16, e, t10), s = I("values", r16, e, t10); + let n = I("sortedSequence", r15, e, t10), s = I("values", r15, e, t10); return [o.lowerBound(n, s)]; } case "TopKV2": { - let n = I("x", r16, e, t10), s = I("k", r16, e, t10), a = I("sorted", r16, e, t10), i = o.topk(n, s, a); + let n = I("x", r15, e, t10), s = I("k", r15, e, t10), a = I("sorted", r15, e, t10), i = o.topk(n, s, a); return [i.values, i.indices]; } case "UpperBound": { - let n = I("sortedSequence", r16, e, t10), s = I("values", r16, e, t10); + let n = I("sortedSequence", r15, e, t10), s = I("values", r15, e, t10); return [o.upperBound(n, s)]; } case "Unique": { - let n = I("x", r16, e, t10), s = o.unique(n); + let n = I("x", r15, e, t10), s = o.unique(n); return [s.values, s.indices]; } case "UniqueV2": { - let n = I("x", r16, e, t10), s = I("axis", r16, e, t10), a = o.unique(n, s); + let n = I("x", r15, e, t10), s = I("axis", r15, e, t10), a = o.unique(n, s); return [a.values, a.indices]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var k_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var zT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Const": - return e[r16.name]; + return e[r15.name]; case "PlaceholderWithDefault": - let n = I("default", r16, e, t10); - return [Vt(r16.name, e, t10) || n]; + let n = I("default", r15, e, t10); + return [Bt(r15.name, e, t10) || n]; case "Placeholder": - return [Vt(r16.name, e, t10)]; + return [Bt(r15.name, e, t10)]; case "Identity": case "StopGradient": case "FakeQuantWithMinMaxVars": { - let l = I("x", r16, e, t10); - return [js(l)]; + let c = I("x", r15, e, t10); + return [Bs(c)]; } case "IdentityN": - return I("x", r16, e, t10).map((l) => js(l)); + return I("x", r15, e, t10).map((c) => Bs(c)); case "Snapshot": - let s = I("x", r16, e, t10); - return [js(s)]; + let s = I("x", r15, e, t10); + return [Bs(s)]; case "Shape": - return [o.tensor1d(I("x", r16, e, t10).shape, "int32")]; + return [o.tensor1d(I("x", r15, e, t10).shape, "int32")]; case "ShapeN": - return I("x", r16, e, t10).map((l) => o.tensor1d(l.shape)); + return I("x", r15, e, t10).map((c) => o.tensor1d(c.shape)); case "Size": - return [o.scalar(I("x", r16, e, t10).size, "int32")]; + return [o.scalar(I("x", r15, e, t10).size, "int32")]; case "Rank": - return [o.scalar(I("x", r16, e, t10).rank, "int32")]; + return [o.scalar(I("x", r15, e, t10).rank, "int32")]; case "NoOp": return [o.scalar(1)]; case "Print": - let a = I("x", r16, e, t10), i = I("data", r16, e, t10), p = I("message", r16, e, t10), u = I("summarize", r16, e, t10); + let a = I("x", r15, e, t10), i = I("data", r15, e, t10), p = I("message", r15, e, t10), u = I("summarize", r15, e, t10); console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."), console.log(p); - for (let l = 0; l < i.length; l++) - console.log(Array.prototype.slice.call(i[l].dataSync()).slice(0, u)); + for (let c = 0; c < i.length; c++) + console.log(Array.prototype.slice.call(i[c].dataSync()).slice(0, u)); return [a]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var Ff = class { +var vf = class { get id() { return this.handle.id; } constructor(e, t10) { - this.keyDType = e, this.valueDType = t10, this.handle = ke(0), this.tensorMap = /* @__PURE__ */ new Map(), Fr(this.handle); + this.keyDType = e, this.valueDType = t10, this.handle = ke(0), this.tensorMap = /* @__PURE__ */ new Map(), $r(this.handle); } clearAndClose() { this.tensorMap.forEach((e) => e.dispose()), this.tensorMap.clear(), this.handle.dispose(); @@ -10974,11 +10974,11 @@ var Ff = class { this.checkKeyAndValueTensor(e, t10); let o = await e.data(); return this.tensorMap.forEach((n) => n.dispose()), this.tensorMap.clear(), De(() => { - let n = zo(t10), s = o.length, a = n.length; + let n = fo(t10), s = o.length, a = n.length; y.assert(s === a, () => `The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`); for (let i = 0; i < s; i++) { let p = o[i], u = n[i]; - Fr(u), this.tensorMap.set(p, u); + $r(u), this.tensorMap.set(p, u); } return this.handle; }); @@ -10992,7 +10992,7 @@ var Ff = class { let a = o[s], i = this.findWithDefault(a, t10); n.push(i); } - return Tr(n); + return vr(n); }); } findWithDefault(e, t10) { @@ -11006,431 +11006,431 @@ var Ff = class { throw new Error(`Expect value dtype ${this.valueDType}, but got ${t10.dtype}`); } }; -var N_ = async (r16, e, t10, o) => { - switch (r16.op) { +var VT = async (r15, e, t10, o) => { + switch (r15.op) { case "HashTable": case "HashTableV2": { - let n = o.getHashTableHandleByName(r16.name); + let n = o.getHashTableHandleByName(r15.name); if (n != null) return [n]; { - let s = I("keyDType", r16, e, t10), a = I("valueDType", r16, e, t10), i = new Ff(s, a); - return o.addHashTable(r16.name, i), [i.handle]; + let s = I("keyDType", r15, e, t10), a = I("valueDType", r15, e, t10), i = new vf(s, a); + return o.addHashTable(r15.name, i), [i.handle]; } } case "InitializeTable": case "InitializeTableV2": case "LookupTableImport": case "LookupTableImportV2": { - let n = I("tableHandle", r16, e, t10, o), s = I("keys", r16, e, t10), a = I("values", r16, e, t10); + let n = I("tableHandle", r15, e, t10, o), s = I("keys", r15, e, t10), a = I("values", r15, e, t10); return [await o.getHashTableById(n.id).import(s, a)]; } case "LookupTableFind": case "LookupTableFindV2": { - let n = I("tableHandle", r16, e, t10, o), s = I("keys", r16, e, t10), a = I("defaultValue", r16, e, t10); + let n = I("tableHandle", r15, e, t10, o), s = I("keys", r15, e, t10), a = I("defaultValue", r15, e, t10); return [await o.getHashTableById(n.id).find(s, a)]; } case "LookupTableSize": case "LookupTableSizeV2": { - let n = I("tableHandle", r16, e, t10, o); + let n = I("tableHandle", r15, e, t10, o); return [o.getHashTableById(n.id).tensorSize()]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var T_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var WT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "ResizeBilinear": { - let n = I("images", r16, e, t10), s = I("size", r16, e, t10), a = I("alignCorners", r16, e, t10), i = I("halfPixelCenters", r16, e, t10); + let n = I("images", r15, e, t10), s = I("size", r15, e, t10), a = I("alignCorners", r15, e, t10), i = I("halfPixelCenters", r15, e, t10); return [o.image.resizeBilinear(n, [s[0], s[1]], a, i)]; } case "ResizeNearestNeighbor": { - let n = I("images", r16, e, t10), s = I("size", r16, e, t10), a = I("alignCorners", r16, e, t10), i = I("halfPixelCenters", r16, e, t10); + let n = I("images", r15, e, t10), s = I("size", r15, e, t10), a = I("alignCorners", r15, e, t10), i = I("halfPixelCenters", r15, e, t10); return [o.image.resizeNearestNeighbor(n, [s[0], s[1]], a, i)]; } case "CropAndResize": { - let n = I("image", r16, e, t10), s = I("boxes", r16, e, t10), a = I("boxInd", r16, e, t10), i = I("cropSize", r16, e, t10), p = I("method", r16, e, t10), u = I("extrapolationValue", r16, e, t10); + let n = I("image", r15, e, t10), s = I("boxes", r15, e, t10), a = I("boxInd", r15, e, t10), i = I("cropSize", r15, e, t10), p = I("method", r15, e, t10), u = I("extrapolationValue", r15, e, t10); return [o.image.cropAndResize(n, s, a, i, p, u)]; } case "ImageProjectiveTransformV3": { - let n = I("images", r16, e, t10), s = I("transforms", r16, e, t10), a = I("outputShape", r16, e, t10), i = I("fillValue", r16, e, t10), p = I("interpolation", r16, e, t10), u = I("fillMode", r16, e, t10); + let n = I("images", r15, e, t10), s = I("transforms", r15, e, t10), a = I("outputShape", r15, e, t10), i = I("fillValue", r15, e, t10), p = I("interpolation", r15, e, t10), u = I("fillMode", r15, e, t10); return [o.image.transform(n, s, p.toLowerCase(), u.toLowerCase(), i, a)]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var __ = (r16, e, t10, o = et) => { - switch (r16.op) { +var UT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Equal": - return [o.equal(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.equal(I("a", r15, e, t10), I("b", r15, e, t10))]; case "NotEqual": - return [o.notEqual(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.notEqual(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Greater": - return [o.greater(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.greater(I("a", r15, e, t10), I("b", r15, e, t10))]; case "GreaterEqual": - return [o.greaterEqual(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.greaterEqual(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Less": - return [o.less(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.less(I("a", r15, e, t10), I("b", r15, e, t10))]; case "LessEqual": - return [o.lessEqual(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.lessEqual(I("a", r15, e, t10), I("b", r15, e, t10))]; case "LogicalAnd": - return [o.logicalAnd(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.logicalAnd(I("a", r15, e, t10), I("b", r15, e, t10))]; case "LogicalNot": - return [o.logicalNot(I("a", r16, e, t10))]; + return [o.logicalNot(I("a", r15, e, t10))]; case "LogicalOr": - return [o.logicalOr(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.logicalOr(I("a", r15, e, t10), I("b", r15, e, t10))]; case "Select": case "SelectV2": - return [o.where(I("condition", r16, e, t10), I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.where(I("condition", r15, e, t10), I("a", r15, e, t10), I("b", r15, e, t10))]; case "BitwiseAnd": - return [o.bitwiseAnd(I("a", r16, e, t10), I("b", r16, e, t10))]; + return [o.bitwiseAnd(I("a", r15, e, t10), I("b", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var E_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var GT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "BatchMatMul": case "BatchMatMulV2": case "MatMul": - return [o.matMul(I("a", r16, e, t10), I("b", r16, e, t10), I("transposeA", r16, e, t10), I("transposeB", r16, e, t10))]; + return [o.matMul(I("a", r15, e, t10), I("b", r15, e, t10), I("transposeA", r15, e, t10), I("transposeB", r15, e, t10))]; case "Einsum": - return [o.einsum(I("equation", r16, e, t10), ...I("tensors", r16, e, t10))]; + return [o.einsum(I("equation", r15, e, t10), ...I("tensors", r15, e, t10))]; case "Transpose": - return [o.transpose(I("x", r16, e, t10), I("perm", r16, e, t10))]; + return [o.transpose(I("x", r15, e, t10), I("perm", r15, e, t10))]; case "_FusedMatMul": - let [n, s] = I("fusedOps", r16, e, t10), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r16, e, t10), u = I("leakyreluAlpha", r16, e, t10); + let [n, s] = I("fusedOps", r15, e, t10), a = n === "biasadd", i = s === "prelu", p = I("numArgs", r15, e, t10), u = I("leakyreluAlpha", r15, e, t10); if (a) { if (i && p !== 2) throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha."); if (!i && p !== 1) throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias."); } - let [l, c] = I("args", r16, e, t10); - return [o.fused.matMul({ a: I("a", r16, e, t10), b: I("b", r16, e, t10), transposeA: I("transposeA", r16, e, t10), transposeB: I("transposeB", r16, e, t10), bias: l, activation: s, preluActivationWeights: c, leakyreluAlpha: u })]; + let [c, l] = I("args", r15, e, t10); + return [o.fused.matMul({ a: I("a", r15, e, t10), b: I("b", r15, e, t10), transposeA: I("transposeA", r15, e, t10), transposeB: I("transposeB", r15, e, t10), bias: c, activation: s, preluActivationWeights: l, leakyreluAlpha: u })]; case "MatrixBandPart": - return [o.linalg.bandPart(I("a", r16, e, t10), I("numLower", r16, e, t10), I("numUpper", r16, e, t10))]; + return [o.linalg.bandPart(I("a", r15, e, t10), I("numLower", r15, e, t10), I("numUpper", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var $_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var HT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "EuclideanNorm": - return [o.euclideanNorm(I("x", r16, e, t10), I("axis", r16, e, t10), I("keepDims", r16, e, t10))]; + return [o.euclideanNorm(I("x", r15, e, t10), I("axis", r15, e, t10), I("keepDims", r15, e, t10))]; case "FusedBatchNorm": case "FusedBatchNormV2": - return [o.batchNorm(I("x", r16, e, t10), I("mean", r16, e, t10), I("variance", r16, e, t10), I("offset", r16, e, t10), I("scale", r16, e, t10), I("epsilon", r16, e, t10))]; + return [o.batchNorm(I("x", r15, e, t10), I("mean", r15, e, t10), I("variance", r15, e, t10), I("offset", r15, e, t10), I("scale", r15, e, t10), I("epsilon", r15, e, t10))]; case "FusedBatchNormV3": - return [o.batchNorm(I("x", r16, e, t10), I("mean", r16, e, t10), I("variance", r16, e, t10), I("offset", r16, e, t10), I("scale", r16, e, t10), I("epsilon", r16, e, t10))]; + return [o.batchNorm(I("x", r15, e, t10), I("mean", r15, e, t10), I("variance", r15, e, t10), I("offset", r15, e, t10), I("scale", r15, e, t10), I("epsilon", r15, e, t10))]; case "LRN": - return [o.localResponseNormalization(I("x", r16, e, t10), I("radius", r16, e, t10), I("bias", r16, e, t10), I("alpha", r16, e, t10), I("beta", r16, e, t10))]; + return [o.localResponseNormalization(I("x", r15, e, t10), I("radius", r15, e, t10), I("bias", r15, e, t10), I("alpha", r15, e, t10), I("beta", r15, e, t10))]; case "Softmax": - return [o.softmax(I("x", r16, e, t10))]; + return [o.softmax(I("x", r15, e, t10))]; case "LogSoftmax": - return [o.logSoftmax(I("x", r16, e, t10))]; + return [o.logSoftmax(I("x", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var R_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var KT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "RaggedGather": { - let { outputNestedSplits: n, outputDenseValues: s } = o.raggedGather(I("paramsNestedSplits", r16, e, t10), I("paramsDenseValues", r16, e, t10), I("indices", r16, e, t10), I("outputRaggedRank", r16, e, t10)); + let { outputNestedSplits: n, outputDenseValues: s } = o.raggedGather(I("paramsNestedSplits", r15, e, t10), I("paramsDenseValues", r15, e, t10), I("indices", r15, e, t10), I("outputRaggedRank", r15, e, t10)); return n.concat(s); } case "RaggedRange": { - let { rtNestedSplits: n, rtDenseValues: s } = o.raggedRange(I("starts", r16, e, t10), I("limits", r16, e, t10), I("splits", r16, e, t10)); + let { rtNestedSplits: n, rtDenseValues: s } = o.raggedRange(I("starts", r15, e, t10), I("limits", r15, e, t10), I("splits", r15, e, t10)); return [n, s]; } case "RaggedTensorToTensor": - return [o.raggedTensorToTensor(I("shape", r16, e, t10), I("values", r16, e, t10), I("defaultValue", r16, e, t10), I("rowPartitionTensors", r16, e, t10), I("rowPartitionTypes", r16, e, t10))]; + return [o.raggedTensorToTensor(I("shape", r15, e, t10), I("values", r15, e, t10), I("defaultValue", r15, e, t10), I("rowPartitionTensors", r15, e, t10), I("rowPartitionTypes", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var D_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var qT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Max": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.max(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.max(I("x", r15, e, t10), i, p)]; } case "Mean": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.mean(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.mean(I("x", r15, e, t10), i, p)]; } case "Min": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.min(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.min(I("x", r15, e, t10), i, p)]; } case "Sum": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.sum(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.sum(I("x", r15, e, t10), i, p)]; } case "All": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.all(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.all(I("x", r15, e, t10), i, p)]; } case "Any": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.any(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.any(I("x", r15, e, t10), i, p)]; } case "ArgMax": { - let i = I("axis", r16, e, t10); - return [o.argMax(I("x", r16, e, t10), i)]; + let i = I("axis", r15, e, t10); + return [o.argMax(I("x", r15, e, t10), i)]; } case "ArgMin": { - let i = I("axis", r16, e, t10); - return [o.argMin(I("x", r16, e, t10), i)]; + let i = I("axis", r15, e, t10); + return [o.argMin(I("x", r15, e, t10), i)]; } case "Prod": { - let i = I("axis", r16, e, t10), p = I("keepDims", r16, e, t10); - return [o.prod(I("x", r16, e, t10), i, p)]; + let i = I("axis", r15, e, t10), p = I("keepDims", r15, e, t10); + return [o.prod(I("x", r15, e, t10), i, p)]; } case "Cumprod": { - let i = I("axis", r16, e, t10), p = I("exclusive", r16, e, t10), u = I("reverse", r16, e, t10); - return [o.cumprod(I("x", r16, e, t10), i, p, u)]; + let i = I("axis", r15, e, t10), p = I("exclusive", r15, e, t10), u = I("reverse", r15, e, t10); + return [o.cumprod(I("x", r15, e, t10), i, p, u)]; } case "Cumsum": { - let i = I("axis", r16, e, t10), p = I("exclusive", r16, e, t10), u = I("reverse", r16, e, t10); - return [o.cumsum(I("x", r16, e, t10), i, p, u)]; + let i = I("axis", r15, e, t10), p = I("exclusive", r15, e, t10), u = I("reverse", r15, e, t10); + return [o.cumsum(I("x", r15, e, t10), i, p, u)]; } case "Bincount": - let n = I("x", r16, e, t10), s = I("weights", r16, e, t10), a = I("size", r16, e, t10); + let n = I("x", r15, e, t10), s = I("weights", r15, e, t10), a = I("size", r15, e, t10); return [o.bincount(n, s, a)]; case "DenseBincount": { - let i = I("x", r16, e, t10), p = I("weights", r16, e, t10), u = I("size", r16, e, t10), l = I("binaryOutput", r16, e, t10); - return [o.denseBincount(i, p, u, l)]; + let i = I("x", r15, e, t10), p = I("weights", r15, e, t10), u = I("size", r15, e, t10), c = I("binaryOutput", r15, e, t10); + return [o.denseBincount(i, p, u, c)]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var A_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var jT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "ConcatV2": case "Concat": { - let n = I("n", r16, e, t10), s = I("axis", r16, e, t10), a = I("tensors", r16, e, t10); + let n = I("n", r15, e, t10), s = I("axis", r15, e, t10), a = I("tensors", r15, e, t10); return a = a.slice(0, n), [o.concat(a, s)]; } case "Gather": { - let n = I("x", r16, e, t10), s = I("indices", r16, e, t10); + let n = I("x", r15, e, t10), s = I("indices", r15, e, t10); return [o.gather(n, o.cast(s, "int32"), 0)]; } case "GatherV2": { - let n = I("axis", r16, e, t10), s = I("batchDims", r16, e, t10), a = I("x", r16, e, t10), i = I("indices", r16, e, t10); + let n = I("axis", r15, e, t10), s = I("batchDims", r15, e, t10), a = I("x", r15, e, t10), i = I("indices", r15, e, t10); return [o.gather(a, o.cast(i, "int32"), n, s)]; } case "Reverse": { - let n = I("dims", r16, e, t10), s = []; + let n = I("dims", r15, e, t10), s = []; for (let i = 0; i < n.length; i++) n[i] && s.push(i); - let a = I("x", r16, e, t10); + let a = I("x", r15, e, t10); return [o.reverse(a, s)]; } case "ReverseV2": { - let n = I("axis", r16, e, t10), s = I("x", r16, e, t10); + let n = I("axis", r15, e, t10), s = I("x", r15, e, t10); return [o.reverse(s, n)]; } case "Slice": { - let n = I("begin", r16, e, t10), s = I("size", r16, e, t10); - return [o.slice(I("x", r16, e, t10), n, s)]; + let n = I("begin", r15, e, t10), s = I("size", r15, e, t10); + return [o.slice(I("x", r15, e, t10), n, s)]; } case "StridedSlice": { - let n = I("begin", r16, e, t10), s = I("end", r16, e, t10), a = I("strides", r16, e, t10), i = I("beginMask", r16, e, t10), p = I("endMask", r16, e, t10), u = I("ellipsisMask", r16, e, t10), l = I("newAxisMask", r16, e, t10), c = I("shrinkAxisMask", r16, e, t10), m = I("x", r16, e, t10); - return [o.stridedSlice(m, n, s, a, i, p, u, l, c)]; + let n = I("begin", r15, e, t10), s = I("end", r15, e, t10), a = I("strides", r15, e, t10), i = I("beginMask", r15, e, t10), p = I("endMask", r15, e, t10), u = I("ellipsisMask", r15, e, t10), c = I("newAxisMask", r15, e, t10), l = I("shrinkAxisMask", r15, e, t10), m = I("x", r15, e, t10); + return [o.stridedSlice(m, n, s, a, i, p, u, c, l)]; } case "Pack": return De(() => { - let n = I("axis", r16, e, t10), s = I("tensors", r16, e, t10), a = s[0].shape, i = o.squeeze(s[0]).shape, p = s.map((u) => { - let l = y.arraysEqual(u.shape, a); - if (!l && !y.arraysEqual(o.squeeze(u).shape, i)) + let n = I("axis", r15, e, t10), s = I("tensors", r15, e, t10), a = s[0].shape, i = o.squeeze(s[0]).shape, p = s.map((u) => { + let c = y.arraysEqual(u.shape, a); + if (!c && !y.arraysEqual(o.squeeze(u).shape, i)) throw new Error("the input tensors shape does not match"); - return l ? u : o.reshape(u, a); + return c ? u : o.reshape(u, a); }); return [o.stack(p, n)]; }); case "Unpack": { - let n = I("axis", r16, e, t10), s = I("tensor", r16, e, t10); + let n = I("axis", r15, e, t10), s = I("tensor", r15, e, t10); return o.unstack(s, n); } case "Tile": { - let n = I("reps", r16, e, t10); - return [o.tile(I("x", r16, e, t10), n)]; + let n = I("reps", r15, e, t10); + return [o.tile(I("x", r15, e, t10), n)]; } case "Split": case "SplitV": { - let n = I("axis", r16, e, t10), s = I("numOrSizeSplits", r16, e, t10), a = I("x", r16, e, t10); + let n = I("axis", r15, e, t10), s = I("numOrSizeSplits", r15, e, t10), a = I("x", r15, e, t10); return o.split(a, s, n); } case "ScatterNd": { - let n = I("indices", r16, e, t10), s = I("values", r16, e, t10), a = I("shape", r16, e, t10); + let n = I("indices", r15, e, t10), s = I("values", r15, e, t10), a = I("shape", r15, e, t10); return [o.scatterND(n, s, a)]; } case "GatherNd": { - let n = I("x", r16, e, t10), s = I("indices", r16, e, t10); + let n = I("x", r15, e, t10), s = I("indices", r15, e, t10); return [o.gatherND(n, s)]; } case "SparseToDense": { - let n = I("sparseIndices", r16, e, t10), s = I("outputShape", r16, e, t10), a = I("sparseValues", r16, e, t10), i = I("defaultValue", r16, e, t10); + let n = I("sparseIndices", r15, e, t10), s = I("outputShape", r15, e, t10), a = I("sparseValues", r15, e, t10), i = I("defaultValue", r15, e, t10); return [o.sparseToDense(n, a, s, a.dtype === i.dtype ? i : o.cast(i, a.dtype))]; } case "TensorScatterUpdate": { - let n = I("indices", r16, e, t10), s = I("values", r16, e, t10), a = I("tensor", r16, e, t10); + let n = I("indices", r15, e, t10), s = I("values", r15, e, t10), a = I("tensor", r15, e, t10); return [o.tensorScatterUpdate(a, n, s)]; } default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var F_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var XT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "SparseFillEmptyRows": { - let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(I("indices", r16, e, t10), I("values", r16, e, t10), I("denseShape", r16, e, t10), I("defaultValue", r16, e, t10)); + let { outputIndices: n, outputValues: s, emptyRowIndicator: a, reverseIndexMap: i } = o.sparse.sparseFillEmptyRows(I("indices", r15, e, t10), I("values", r15, e, t10), I("denseShape", r15, e, t10), I("defaultValue", r15, e, t10)); return [n, s, a, i]; } case "SparseReshape": { - let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(I("inputIndices", r16, e, t10), I("inputShape", r16, e, t10), I("newShape", r16, e, t10)); + let { outputIndices: n, outputShape: s } = o.sparse.sparseReshape(I("inputIndices", r15, e, t10), I("inputShape", r15, e, t10), I("newShape", r15, e, t10)); return [n, s]; } case "SparseSegmentMean": - return [o.sparse.sparseSegmentMean(I("data", r16, e, t10), I("indices", r16, e, t10), I("segmentIds", r16, e, t10))]; + return [o.sparse.sparseSegmentMean(I("data", r15, e, t10), I("indices", r15, e, t10), I("segmentIds", r15, e, t10))]; case "SparseSegmentSum": - return [o.sparse.sparseSegmentSum(I("data", r16, e, t10), I("indices", r16, e, t10), I("segmentIds", r16, e, t10))]; + return [o.sparse.sparseSegmentSum(I("data", r15, e, t10), I("indices", r15, e, t10), I("segmentIds", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var P_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var YT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "FFT": - return [o.fft(I("x", r16, e, t10))]; + return [o.fft(I("x", r15, e, t10))]; case "IFFT": - return [o.ifft(I("x", r16, e, t10))]; + return [o.ifft(I("x", r15, e, t10))]; case "RFFT": - return [o.rfft(I("x", r16, e, t10))]; + return [o.rfft(I("x", r15, e, t10))]; case "IRFFT": - return [o.irfft(I("x", r16, e, t10))]; + return [o.irfft(I("x", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var O_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var QT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "StaticRegexReplace": - return [o.string.staticRegexReplace(I("input", r16, e, t10), I("pattern", r16, e, t10), I("rewrite", r16, e, t10), I("replaceGlobal", r16, e, t10))]; + return [o.string.staticRegexReplace(I("input", r15, e, t10), I("pattern", r15, e, t10), I("rewrite", r15, e, t10), I("replaceGlobal", r15, e, t10))]; case "StringNGrams": { - let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(I("data", r16, e, t10), I("dataSplits", r16, e, t10), I("separator", r16, e, t10), I("nGramWidths", r16, e, t10), I("leftPad", r16, e, t10), I("rightPad", r16, e, t10), I("padWidth", r16, e, t10), I("preserveShortSequences", r16, e, t10)); + let { nGrams: n, nGramsSplits: s } = o.string.stringNGrams(I("data", r15, e, t10), I("dataSplits", r15, e, t10), I("separator", r15, e, t10), I("nGramWidths", r15, e, t10), I("leftPad", r15, e, t10), I("rightPad", r15, e, t10), I("padWidth", r15, e, t10), I("preserveShortSequences", r15, e, t10)); return [n, s]; } case "StringSplit": { - let { indices: n, values: s, shape: a } = o.string.stringSplit(I("input", r16, e, t10), I("delimiter", r16, e, t10), I("skipEmpty", r16, e, t10)); + let { indices: n, values: s, shape: a } = o.string.stringSplit(I("input", r15, e, t10), I("delimiter", r15, e, t10), I("skipEmpty", r15, e, t10)); return [n, s, a]; } case "StringToHashBucketFast": - return [o.string.stringToHashBucketFast(I("input", r16, e, t10), I("numBuckets", r16, e, t10))]; + return [o.string.stringToHashBucketFast(I("input", r15, e, t10), I("numBuckets", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -var M_ = (r16, e, t10, o = et) => { - switch (r16.op) { +var ZT = (r15, e, t10, o = Je) => { + switch (r15.op) { case "Cast": - return [o.cast(I("x", r16, e, t10), I("dtype", r16, e, t10))]; + return [o.cast(I("x", r15, e, t10), I("dtype", r15, e, t10))]; case "ExpandDims": { - let n = I("axis", r16, e, t10); - return [o.expandDims(I("x", r16, e, t10), n)]; + let n = I("axis", r15, e, t10); + return [o.expandDims(I("x", r15, e, t10), n)]; } case "Squeeze": { - let n = I("axis", r16, e, t10); - return [o.squeeze(I("x", r16, e, t10), n)]; + let n = I("axis", r15, e, t10); + return [o.squeeze(I("x", r15, e, t10), n)]; } case "Reshape": - return [o.reshape(I("x", r16, e, t10), I("shape", r16, e, t10))]; + return [o.reshape(I("x", r15, e, t10), I("shape", r15, e, t10))]; case "EnsureShape": - return [o.ensureShape(I("x", r16, e, t10), I("shape", r16, e, t10))]; + return [o.ensureShape(I("x", r15, e, t10), I("shape", r15, e, t10))]; case "MirrorPad": - return [o.mirrorPad(I("x", r16, e, t10), I("padding", r16, e, t10), I("mode", r16, e, t10))]; + return [o.mirrorPad(I("x", r15, e, t10), I("padding", r15, e, t10), I("mode", r15, e, t10))]; case "PadV2": case "Pad": - return [o.pad(I("x", r16, e, t10), I("padding", r16, e, t10), I("constantValue", r16, e, t10))]; + return [o.pad(I("x", r15, e, t10), I("padding", r15, e, t10), I("constantValue", r15, e, t10))]; case "SpaceToBatchND": { - let n = I("blockShape", r16, e, t10), s = I("paddings", r16, e, t10); - return [o.spaceToBatchND(I("x", r16, e, t10), n, s)]; + let n = I("blockShape", r15, e, t10), s = I("paddings", r15, e, t10); + return [o.spaceToBatchND(I("x", r15, e, t10), n, s)]; } case "BatchToSpaceND": { - let n = I("blockShape", r16, e, t10), s = I("crops", r16, e, t10); - return [o.batchToSpaceND(I("x", r16, e, t10), n, s)]; + let n = I("blockShape", r15, e, t10), s = I("crops", r15, e, t10); + return [o.batchToSpaceND(I("x", r15, e, t10), n, s)]; } case "DepthToSpace": { - let n = I("blockSize", r16, e, t10), s = I("dataFormat", r16, e, t10).toUpperCase(); - return [o.depthToSpace(I("x", r16, e, t10), n, s)]; + let n = I("blockSize", r15, e, t10), s = I("dataFormat", r15, e, t10).toUpperCase(); + return [o.depthToSpace(I("x", r15, e, t10), n, s)]; } case "BroadcastTo": - return [o.broadcastTo(I("x", r16, e, t10), I("shape", r16, e, t10))]; + return [o.broadcastTo(I("x", r15, e, t10), I("shape", r15, e, t10))]; case "BroadcastArgs": - return [o.broadcastArgs(I("s0", r16, e, t10), I("s1", r16, e, t10))]; + return [o.broadcastArgs(I("s0", r15, e, t10), I("s1", r15, e, t10))]; default: - throw TypeError(`Node type ${r16.op} is not implemented`); + throw TypeError(`Node type ${r15.op} is not implemented`); } }; -function YS(r16, e, t10, o, n = De) { +function MS(r15, e, t10, o, n = De) { let s = ((a, i, p) => { switch (a.category) { case "arithmetic": - return n(() => m_(a, i, p)); + return n(() => TT(a, i, p)); case "basic_math": - return n(() => d_(a, i, p)); + return n(() => _T(a, i, p)); case "control": - return b_(a, i, p); + return FT(a, i, p); case "convolution": - return n(() => w_(a, i, p)); + return n(() => OT(a, i, p)); case "creation": - return n(() => S_(a, i, p)); + return n(() => MT(a, i, p)); case "dynamic": - return I_(a, i, p); + return LT(a, i, p); case "evaluation": - return n(() => v_(a, i, p)); + return n(() => BT(a, i, p)); case "image": - return n(() => T_(a, i, p)); + return n(() => WT(a, i, p)); case "graph": - return n(() => k_(a, i, p)); + return n(() => zT(a, i, p)); case "logical": - return n(() => __(a, i, p)); + return n(() => UT(a, i, p)); case "matrices": - return n(() => E_(a, i, p)); + return n(() => GT(a, i, p)); case "normalization": - return n(() => $_(a, i, p)); + return n(() => HT(a, i, p)); case "ragged": - return n(() => R_(a, i, p)); + return n(() => KT(a, i, p)); case "reduction": - return n(() => D_(a, i, p)); + return n(() => qT(a, i, p)); case "slice_join": - return n(() => A_(a, i, p)); + return n(() => jT(a, i, p)); case "sparse": - return n(() => F_(a, i, p)); + return n(() => XT(a, i, p)); case "spectral": - return n(() => P_(a, i, p)); + return n(() => YT(a, i, p)); case "string": - return n(() => O_(a, i, p)); + return n(() => QT(a, i, p)); case "transformation": - return n(() => M_(a, i, p)); + return n(() => ZT(a, i, p)); case "hash_table": - return N_(a, i, p, o); + return VT(a, i, p, o); case "custom": - let u = bf(a.op); + let u = pf(a.op); if (u && u.customExecutor) - return u.customExecutor(new Rf(a, i, p)); + return u.customExecutor(new wf(a, i, p)); throw TypeError(`Custom op ${a.op} is not registered.`); default: throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`); } - })(r16, e, t10); + })(r15, e, t10); return y.isPromise(s) ? s.then((a) => [].concat(a)) : [].concat(s); } -var Gc = class { +var Ml = class { constructor(e = {}, t10 = {}, o = {}, n = {}, s) { this.weightMap = e, this.tensorArrayMap = t10, this.tensorListMap = o, this.functionMap = n, this.parseNodeNameCache = s, this.rootContext = { id: 0, frameName: "", iterationId: 0 }, this.contexts = [this.rootContext], this.lastId = 0, this.generateCurrentContextIds(); } @@ -11499,103 +11499,103 @@ var Gc = class { this.tensorListMap[t10].clearAndClose(e); } }; -function QS(r16, e, t10, o) { - let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = new Set(Object.keys(r16).map((m) => Er(m)[0])); +function LS(r15, e, t10, o) { + let n = /* @__PURE__ */ new Set(), s = [], a = null, i = null, p = /* @__PURE__ */ new Set(), u = new Set(Object.keys(r15).map((m) => Nr(m)[0])); o = o || []; - let l = new Set(o.map((m) => Er(m.name)[0])), c = [...e]; - for (; c.length > 0; ) { - let m = c.pop(); - if ((wu(m) || ZY(m) || JY(m)) && a == null && (a = m, i = a.children.map((d) => d.name).filter((d) => n.has(d))), n.add(m.name), t10[m.name] == null && !u.has(m.name) && !l.has(m.name)) { + let c = new Set(o.map((m) => Nr(m.name)[0])), l = [...e]; + for (; l.length > 0; ) { + let m = l.pop(); + if ((fu(m) || A8(m) || F8(m)) && a == null && (a = m, i = a.children.map((d) => d.name).filter((d) => n.has(d))), n.add(m.name), t10[m.name] == null && !u.has(m.name) && !c.has(m.name)) { if (m.inputs.length === 0) { s.push(m.name); continue; } m.inputs.forEach((d) => { - p.has(d.name) || (p.add(d.name), c.push(d)); + p.has(d.name) || (p.add(d.name), l.push(d)); }); } } - return { inputs: r16, outputs: e, usedNodes: n, missingInputs: s, dynamicNode: a, syncInputs: i }; + return { inputs: r15, outputs: e, usedNodes: n, missingInputs: s, dynamicNode: a, syncInputs: i }; } -function L_(r16, e) { - let { usedNodes: t10, inputs: o } = e, n = Object.keys(o).map((g) => Er(g)[0]).map((g) => r16.nodes[g]), s = r16.initNodes || [], a = (g) => t10.has(typeof g == "string" ? g : g.name); +function JT(r15, e) { + let { usedNodes: t10, inputs: o } = e, n = Object.keys(o).map((g) => Nr(g)[0]).map((g) => r15.nodes[g]), s = r15.initNodes || [], a = (g) => t10.has(typeof g == "string" ? g : g.name); function i(g) { return [...new Map(g.map((x) => [x.name, x])).values()]; } - let p = i([...n, ...r16.weights, ...s]).filter(a), u = i([...p, ...Object.values(r16.nodes)]).filter(a), l = new Map(u.map((g) => [g.name, g])), c = {}; + let p = i([...n, ...r15.weights, ...s]).filter(a), u = i([...p, ...Object.values(r15.nodes)]).filter(a), c = new Map(u.map((g) => [g.name, g])), l = {}; for (let g of u) { - c[g.name] = c[g.name] || 0; + l[g.name] = l[g.name] || 0; for (let x of g.children) - a(x) || (c[x.name] = Number.POSITIVE_INFINITY), c[x.name] = (c[x.name] || 0) + 1; + a(x) || (l[x.name] = Number.POSITIVE_INFINITY), l[x.name] = (l[x.name] || 0) + 1; } - let m = Object.entries(c).filter(([, g]) => g === 0).map(([g]) => g), d = [...m]; + let m = Object.entries(l).filter(([, g]) => g === 0).map(([g]) => g), d = [...m]; for (; m.length > 0; ) { - let g = m.pop(), x = l.get(g); + let g = m.pop(), x = c.get(g); for (let b of x.children.filter(a)) - --c[b.name] === 0 && (d.push(b.name), m.push(b.name)); + --l[b.name] === 0 && (d.push(b.name), m.push(b.name)); } - let f = d.map((g) => l.get(g)), h = qY(f, p); - return jY(h, p), h; + let f = d.map((g) => c.get(g)), h = _8(f, p); + return E8(h, p), h; } -function qY(r16, e) { - let t10 = new Map(r16.map((a) => [a.name, a])), o = e.map((a) => a.name), n = new Set(o); +function _8(r15, e) { + let t10 = new Map(r15.map((a) => [a.name, a])), o = e.map((a) => a.name), n = new Set(o); for (; o.length > 0; ) { let a = o.pop(), i = t10.get(a); for (let p of i.children) !t10.has(p.name) || n.has(p.name) || (n.add(p.name), o.push(p.name)); } - return r16.filter((a) => n.has(a.name)); + return r15.filter((a) => n.has(a.name)); } -var Sl = class extends Error { +var gc = class extends Error { constructor(e) { super(`NodesExecutionOrderError: ${e}`); } }; -function jY(r16, e) { - let t10 = new Map(r16.map((i, p) => [i.name, p])), o = new Set(e.map((i) => i.name)), n = (i) => o.has(typeof i == "string" ? i : i.name), s = new Set(r16.map((i) => i.name)), a = (i) => s.has(typeof i == "string" ? i : i.name); - for (let i of r16) { +function E8(r15, e) { + let t10 = new Map(r15.map((i, p) => [i.name, p])), o = new Set(e.map((i) => i.name)), n = (i) => o.has(typeof i == "string" ? i : i.name), s = new Set(r15.map((i) => i.name)), a = (i) => s.has(typeof i == "string" ? i : i.name); + for (let i of r15) { for (let p of i.children.filter(a)) { if (!t10.has(p.name)) - throw new Sl(`Child ${p.name} of node ${i.name} is unreachable.`); + throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`); if (t10.get(i.name) > t10.get(p.name)) - throw new Sl(`Node ${i.name} is scheduled to run after its child ${p.name}.`); + throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`); } if (!n(i)) for (let p of i.inputs) { if (!t10.has(p.name)) - throw new Sl(`Input ${p.name} of node ${i.name} is unreachable.`); + throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`); if (t10.get(p.name) > t10.get(i.name)) - throw new Sl(`Node ${i.name} is scheduled to run before its input ${p.name}.`); + throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`); } } } -function B_(r16) { - let e = new Map(r16.map((i, p) => [i.name, p])), t10 = Number.MAX_SAFE_INTEGER, o = r16.map((i, p) => wu(i) ? t10 : p), n = (i) => { +function e_(r15) { + let e = new Map(r15.map((i, p) => [i.name, p])), t10 = Number.MAX_SAFE_INTEGER, o = r15.map((i, p) => fu(i) ? t10 : p), n = (i) => { let p = o[e.get(i.name)]; return p == null ? -1 : p; - }, s = r16.map((i, p) => i.children.map(n).reduce((u, l) => Math.max(u, l), o[p])), a = /* @__PURE__ */ new Map(); - for (let i = 0; i < r16.length; ++i) { + }, s = r15.map((i, p) => i.children.map(n).reduce((u, c) => Math.max(u, c), o[p])), a = /* @__PURE__ */ new Map(); + for (let i = 0; i < r15.length; ++i) { let p = s[i]; if (p === t10) continue; - let u = r16[i], l = r16[p]; - a.has(l.name) || a.set(l.name, []), a.get(l.name).push(u); + let u = r15[i], c = r15[p]; + a.has(c.name) || a.set(c.name, []), a.get(c.name).push(u); } return a; } -var XY = /* @__PURE__ */ new Set(["Switch", "Merge", "Enter", "Exit", "NextIteration", "StatelessIf", "StatelessWhile", "if", "While"]); -var YY = /* @__PURE__ */ new Set(["NonMaxSuppressionV2", "NonMaxSuppressionV3", "NonMaxSuppressionV5", "Where"]); -var QY = /* @__PURE__ */ new Set(["HashTable", "HashTableV2", "LookupTableImport", "LookupTableImportV2", "LookupTableFind", "LookupTableFindV2", "LookupTableSize", "LookupTableSizeV2"]); -function wu(r16) { - return XY.has(r16.op); +var $8 = /* @__PURE__ */ new Set(["Switch", "Merge", "Enter", "Exit", "NextIteration", "StatelessIf", "StatelessWhile", "if", "While"]); +var R8 = /* @__PURE__ */ new Set(["NonMaxSuppressionV2", "NonMaxSuppressionV3", "NonMaxSuppressionV5", "Where"]); +var D8 = /* @__PURE__ */ new Set(["HashTable", "HashTableV2", "LookupTableImport", "LookupTableImportV2", "LookupTableFind", "LookupTableFindV2", "LookupTableSize", "LookupTableSizeV2"]); +function fu(r15) { + return $8.has(r15.op); } -function ZY(r16) { - return YY.has(r16.op); +function A8(r15) { + return R8.has(r15.op); } -function JY(r16) { - return QY.has(r16.op); +function F8(r15) { + return D8.has(r15.op); } -var Hc = class r10 { +var Ll = class r10 { get weightIds() { return this.parent ? this.parent.weightIds : this._weightIds; } @@ -11640,21 +11640,21 @@ var Hc = class r10 { return o.join(this.SEPARATOR) + "--" + n.join(this.SEPARATOR); } compile(e, t10) { - let o = QS(e, t10, this.weightMap, this._initNodes), { missingInputs: n, dynamicNode: s, syncInputs: a } = o; + let o = LS(e, t10, this.weightMap, this._initNodes), { missingInputs: n, dynamicNode: s, syncInputs: a } = o; if (s != null) throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`); if (n.length > 0) { - let u = t10.map((c) => c.name), l = Object.keys(e); - throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${l}]. Missing the following inputs: [${n}]`); + let u = t10.map((l) => l.name), c = Object.keys(e); + throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`); } - let i = L_(this.graph, o), p = B_(i); + let i = JT(this.graph, o), p = e_(i); return { orderedNodes: i, nodeLiveUntilMap: p }; } cloneAndKeepTensor(e) { if (e == null) return null; let t10 = e.clone(); - return Fr(t10), t10; + return $r(t10), t10; } cloneTensorList(e) { return e ? e.map((o) => this.cloneAndKeepTensor(o)) : null; @@ -11666,7 +11666,7 @@ var Hc = class r10 { this.disposeIntermediateTensors(), e = this.mapInputs(e); let o = Object.keys(e).sort(); this.checkInputs(e), this.checkInputShapeAndType(e), t10 = this.mapOutputs(t10), this.checkOutputs(t10); - let n = o.map((m) => this.graph.nodes[Er(m)[0]]), s = t10.map((m) => Er(m)[0]), a = new Set(s), i = s.map((m) => this.graph.nodes[m]); + let n = o.map((m) => this.graph.nodes[Nr(m)[0]]), s = t10.map((m) => Nr(m)[0]), a = new Set(s), i = s.map((m) => this.graph.nodes[m]); i.length === 0 && (i = this._outputs); let p = this.getCompilationKey(n, i), u = this.compiledMap.get(p); u == null && (u = this.compile(e, i), this.compiledMap.set(p, u)); @@ -11675,23 +11675,23 @@ var Hc = class r10 { } catch (m) { this.keepIntermediateTensors = false, console.warn(m.message); } - let l = {}, c = {}; + let c = {}, l = {}; return De(() => { - let m = new Gc(this.weightMap, l, c, this.functionExecutorMap, this.parseNodeNameCache), d = Object.assign({}, this.weightMap); + let m = new Ml(this.weightMap, c, l, this.functionExecutorMap, this.parseNodeNameCache), d = Object.assign({}, this.weightMap); this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)), Object.keys(e).forEach((x) => { - let [b, w] = Er(x, m), S = []; - S[w] = e[x], d[b] = S, this.keepIntermediateTensors && (this.clonedTensorsMap[b] = this.cloneTensorList(S)); + let [b, C] = Nr(x, m), S = []; + S[C] = e[x], d[b] = S, this.keepIntermediateTensors && (this.clonedTensorsMap[b] = this.cloneTensorList(S)); }); let f = this.getFrozenTensorIds(d), { orderedNodes: h, nodeLiveUntilMap: g } = u; for (let x of h) { if (d[x.name]) continue; - let b = YS(x, d, m, this._resourceManager); + let b = MS(x, d, m, this._resourceManager); if (y.isPromise(b)) throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`); d[x.name] = b, this.keepIntermediateTensors && (this.clonedTensorsMap[x.name] = this.cloneTensorList(b)), this.checkTensorForDisposalWithNodeLiveUntilInfo(x, d, m, f, a, g.get(x.name)); } - return this.parent == null && m.dispose(f), t10.map((x) => Vt(x, d, m)); + return this.parent == null && m.dispose(f), t10.map((x) => Bt(x, d, m)); }); } getFrozenTensorIds(e) { @@ -11699,34 +11699,34 @@ var Hc = class r10 { return new Set(t10); } checkTensorForDisposal(e, t10, o, n, s, a, i) { - if (!(wu(t10) || a.has(e))) { + if (!(fu(t10) || a.has(e))) { for (let p of o[e]) p != null && (i[p.id] = (i[p.id] || 0) + t10.children.length); for (let p of t10.inputs) { - if (wu(p)) + if (fu(p)) continue; - let u = _S(p.name, o, n); + let u = hS(p.name, o, n); if (u != null) - for (let l of u) { - if (!l || l.kept || s.has(l.id)) + for (let c of u) { + if (!c || c.kept || s.has(c.id)) continue; - let c = i[l.id]; - c === 1 ? (l.dispose(), delete i[l.id]) : c != null && i[l.id]--; + let l = i[c.id]; + l === 1 ? (c.dispose(), delete i[c.id]) : l != null && i[c.id]--; } } } } checkTensorForDisposalWithNodeLiveUntilInfo(e, t10, o, n, s, a) { function i(p) { - return wu(p) || s.has(p.name); + return fu(p) || s.has(p.name); } - if (!(wu(e) || a == null)) + if (!(fu(e) || a == null)) for (let p of a) { if (i(p)) continue; - let u = _S(p.name, t10, o); - for (let l of u) - !l || l.kept || n.has(l.id) || l.dispose(); + let u = hS(p.name, t10, o); + for (let c of u) + !c || c.kept || n.has(c.id) || c.dispose(); } } async executeAsync(e, t10) { @@ -11748,60 +11748,60 @@ var Hc = class r10 { } catch (m) { this.keepIntermediateTensors = false, console.warn(m.message); } - let a = new Gc(this.weightMap, n, s, this.functionExecutorMap, this.parseNodeNameCache); + let a = new Ml(this.weightMap, n, s, this.functionExecutorMap, this.parseNodeNameCache); this.keepIntermediateTensors && (this.clonedTensorsMap = this.cloneTensorMap(this.weightMap)); - let i = await this.executeWithControlFlow(e, a, t10, o), p = t10.map((m) => Vt(m, i, a)), u = p.map((m) => m.id), l = Object.keys(e).map((m) => e[m].id), c = /* @__PURE__ */ new Set([...u, ...l, ...this.weightIds]); + let i = await this.executeWithControlFlow(e, a, t10, o), p = t10.map((m) => Bt(m, i, a)), u = p.map((m) => m.id), c = Object.keys(e).map((m) => e[m].id), l = /* @__PURE__ */ new Set([...u, ...c, ...this.weightIds]); return Object.values(i).forEach((m) => { m.forEach((d) => { - d && !d.isDisposed && !c.has(d.id) && d.dispose(); + d && !d.isDisposed && !l.has(d.id) && d.dispose(); }); - }), this.parent == null && a.dispose(c), p; + }), this.parent == null && a.dispose(l), p; } async executeFunctionAsync(e, t10, o) { let n = e.reduce((s, a, i) => (s[this.inputs[i].name] = a, s), {}); return this._executeAsync(n, this.outputNodes, true, t10, o); } async executeWithControlFlow(e, t10, o, n) { - let s = Object.keys(e), a = s.map((S) => this.graph.nodes[Er(S)[0]]), i = o.map((S) => Er(S)[0]), p = new Set(i), u = i.map((S) => this.graph.nodes[S]); + let s = Object.keys(e), a = s.map((S) => this.graph.nodes[Nr(S)[0]]), i = o.map((S) => Nr(S)[0]), p = new Set(i), u = i.map((S) => this.graph.nodes[S]); u.length === 0 && (u = this._outputs); - let { usedNodes: l, missingInputs: c, dynamicNode: m, syncInputs: d } = QS(e, u, this.weightMap, this._initNodes), f = [...a, ...this.graph.weights, ...this._initNodes || []].map((S) => ({ node: S, contexts: t10.currentContext })), h = Object.assign({}, this.weightMap); + let { usedNodes: c, missingInputs: l, dynamicNode: m, syncInputs: d } = LS(e, u, this.weightMap, this._initNodes), f = [...a, ...this.graph.weights, ...this._initNodes || []].map((S) => ({ node: S, contexts: t10.currentContext })), h = Object.assign({}, this.weightMap); Object.keys(e).forEach((S) => { - let [k, T] = Er(S), E = []; - E[T] = e[S], h[k] = E; + let [k, _] = Nr(S), $ = []; + $[_] = e[S], h[k] = $; }); let g = {}, x = this.getFrozenTensorIds(h), b = {}; for (; f.length > 0; ) { - let S = this.processStack(a, f, t10, h, b, x, p, g, l); + let S = this.processStack(a, f, t10, h, b, x, p, g, c); await Promise.all(S); } m == null && !n && console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead."); - let w = u.filter((S) => !wu(S) && !Vt(S.name, h, t10)).map((S) => S.name); - if (w.length > 0) { + let C = u.filter((S) => !fu(S) && !Bt(S.name, h, t10)).map((S) => S.name); + if (C.length > 0) { let S = ""; - throw m != null && (S = `Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`), new Error(`Cannot compute the outputs [${w}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${S}`); + throw m != null && (S = `Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`), new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`); } return h; } processStack(e, t10, o, n, s, a, i, p, u) { - let l = []; + let c = []; for (; t10.length > 0; ) { - let c = t10.pop(); - o.currentContext = c.contexts; + let l = t10.pop(); + o.currentContext = l.contexts; let m = ""; - if (c.node.op === "Enter" && I("isConstant", c.node, n, o) && ([m] = qs(c.node.name, o)), n[c.node.name] == null) { - let d = YS(c.node, n, o, this._resourceManager); - m || ([m] = qs(c.node.name, o)); + if (l.node.op === "Enter" && I("isConstant", l.node, n, o) && ([m] = Ls(l.node.name, o)), n[l.node.name] == null) { + let d = MS(l.node, n, o, this._resourceManager); + m || ([m] = Ls(l.node.name, o)); let f = o.currentContext; - y.isPromise(d) ? l.push(d.then((h) => (n[m] = h, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(h)), o.currentContext = f, this.checkTensorForDisposal(m, c.node, n, o, a, i, p), this.processChildNodes(c.node, t10, o, n, s, u), h))) : (n[m] = d, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(d)), this.checkTensorForDisposal(m, c.node, n, o, a, i, p), this.processChildNodes(c.node, t10, o, n, s, u)); + y.isPromise(d) ? c.push(d.then((h) => (n[m] = h, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(h)), o.currentContext = f, this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t10, o, n, s, u), h))) : (n[m] = d, this.keepIntermediateTensors && (this.clonedTensorsMap[m] = this.cloneTensorList(d)), this.checkTensorForDisposal(m, l.node, n, o, a, i, p), this.processChildNodes(l.node, t10, o, n, s, u)); } else - this.processChildNodes(c.node, t10, o, n, s, u); + this.processChildNodes(l.node, t10, o, n, s, u); } - return l; + return c; } processChildNodes(e, t10, o, n, s, a) { e.children.forEach((i) => { - let [p] = qs(i.name, o); - s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!Vt(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!Vt(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i }))); + let [p] = Ls(i.name, o); + s[p] || !a.has(i.name) || (i.op === "Merge" ? i.inputNames.some((u) => !!Bt(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i })) : i.inputNames.every((u) => !!Bt(u, n, o)) && (s[p] = true, t10.push({ contexts: o.currentContext, node: i }))); }); } dispose() { @@ -11809,7 +11809,7 @@ var Hc = class r10 { } checkInputShapeAndType(e) { Object.keys(e).forEach((t10) => { - let o = e[t10], [n] = Er(t10), s = this.graph.nodes[n]; + let o = e[t10], [n] = Nr(t10), s = this.graph.nodes[n]; if (s.attrParams.shape && s.attrParams.shape.value) { let a = s.attrParams.shape.value, i = a.length === o.shape.length && o.shape.every((p, u) => a[u] === -1 || a[u] === p); y.assert(i, () => `The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`); @@ -11828,7 +11828,7 @@ var Hc = class r10 { } checkInputs(e) { let t10 = Object.keys(e).filter((o) => { - let [n] = Er(o); + let [n] = Nr(o); return this.graph.nodes[n] == null; }); if (t10.length > 0) @@ -11843,13 +11843,13 @@ var Hc = class r10 { } checkOutputs(e) { e.forEach((t10) => { - let [o] = Er(t10); + let [o] = Nr(t10); if (!this.graph.nodes[o]) throw new Error(`The output '${t10}' is not found in the graph`); }); } }; -var Pf = class { +var kf = class { constructor(e = {}, t10 = {}) { this.hashTableNameToHandle = e, this.hashTableMap = t10; } @@ -11869,9 +11869,9 @@ var Pf = class { this.hashTableNameToHandle[e].dispose(), delete this.hashTableNameToHandle[e]; } }; -var e7 = "?tfjs-format=file"; -var t7 = "model.json"; -var Kc = class { +var P8 = "?tfjs-format=file"; +var O8 = "model.json"; +var Bl = class { get modelVersion() { return this.version; } @@ -11899,8 +11899,8 @@ var Kc = class { get modelStructuredOutputKeys() { return this.structuredOutputKeys; } - constructor(e, t10 = {}, o = Si) { - this.modelUrl = e, this.loadOptions = t10, this.version = "n/a", this.io = o, t10 == null && (this.loadOptions = {}), this.resourceManager = new Pf(); + constructor(e, t10 = {}, o = di) { + this.modelUrl = e, this.loadOptions = t10, this.version = "n/a", this.io = o, t10 == null && (this.loadOptions = {}), this.resourceManager = new kf(); } findIOHandler() { let e = this.modelUrl; @@ -11930,7 +11930,7 @@ var Kc = class { async loadStreaming(e) { if (e.getWeightStream == null) throw new Error("Model artifacts missing streamWeights function"); - let t10 = await gd(e.getWeightStream(), e.weightSpecs); + let t10 = await ad(e.getWeightStream(), e.weightSpecs); return this.loadWithWeightMap(e, t10); } loadWithWeightMap(e, t10) { @@ -11940,9 +11940,9 @@ var Kc = class { let s = this.artifacts.userDefinedMetadata; s.signature != null && (n = s.signature), s.structuredOutputKeys != null && (this.structuredOutputKeys = s.structuredOutputKeys); } - if (this.signature = n, this.version = `${o.versions.producer}.${o.versions.minConsumer}`, this.executor = new Hc(Uc.Instance.transformGraph(o, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(t10), this.executor.resourceManager = this.resourceManager, e.modelInitializer != null && e.modelInitializer.node != null) { - let s = Uc.Instance.transformGraph(e.modelInitializer); - this.initializer = new Hc(s), this.initializer.weightMap = this.executor.weightMap, this.initializer.resourceManager = this.resourceManager, this.initializerSignature = e.initializerSignature; + if (this.signature = n, this.version = `${o.versions.producer}.${o.versions.minConsumer}`, this.executor = new Ll(Ol.Instance.transformGraph(o, this.signature)), this.executor.weightMap = this.convertTensorMapToTensorsMap(t10), this.executor.resourceManager = this.resourceManager, e.modelInitializer != null && e.modelInitializer.node != null) { + let s = Ol.Instance.transformGraph(e.modelInitializer); + this.initializer = new Ll(s), this.initializer.weightMap = this.executor.weightMap, this.initializer.resourceManager = this.resourceManager, this.initializerSignature = e.initializerSignature; } return true; } @@ -11961,7 +11961,7 @@ var Kc = class { } addStructuredOutputNames(e) { if (this.structuredOutputKeys) { - let t10 = e instanceof dt ? [e] : e, o = {}; + let t10 = e instanceof mt ? [e] : e, o = {}; return t10.forEach((n, s) => o[this.structuredOutputKeys[s]] = n), o; } return e; @@ -11976,7 +11976,7 @@ var Kc = class { } normalizeInputs(e) { var t10; - if (!(e instanceof dt) && !Array.isArray(e)) { + if (!(e instanceof mt) && !Array.isArray(e)) { let s = (t10 = this.signature) === null || t10 === void 0 ? void 0 : t10.inputs; if (s != null) for (let a in s) { @@ -11992,8 +11992,8 @@ var Kc = class { let n = 0; return this.inputNodes.reduce((s, a) => { var i, p, u; - let l = (u = (p = (i = this.signature) === null || i === void 0 ? void 0 : i.inputs) === null || p === void 0 ? void 0 : p[a]) === null || u === void 0 ? void 0 : u.resourceId; - return l != null ? s[a] = this.resourceIdToCapturedInput[l] : s[a] = e[n++], s; + let c = (u = (p = (i = this.signature) === null || i === void 0 ? void 0 : i.inputs) === null || p === void 0 ? void 0 : p[a]) === null || u === void 0 ? void 0 : u.resourceId; + return c != null ? s[a] = this.resourceIdToCapturedInput[c] : s[a] = e[n++], s; }, {}); } normalizeOutputs(e) { @@ -12034,22 +12034,22 @@ var Kc = class { return Object.keys(e).reduce((t10, o) => (t10[o] = [e[o]], t10), {}); } dispose() { - this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Lt(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); + this.executor.dispose(), this.initializer && (this.initializer.dispose(), this.resourceIdToCapturedInput && Ot(this.resourceIdToCapturedInput)), this.resourceManager.dispose(); } }; -async function r72(r16, e = {}, t10 = Si) { - if (r16 == null) +async function M8(r15, e = {}, t10 = di) { + if (r15 == null) throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model"); - e == null && (e = {}), e.fromTFHub && typeof r16 == "string" && (r16 = n7(r16)); - let o = new Kc(r16, e, t10); + e == null && (e = {}), e.fromTFHub && typeof r15 == "string" && (r15 = B8(r15)); + let o = new Bl(r15, e, t10); return await o.load(), o; } -function o7(r16) { - if (r16 == null) +function L8(r15) { + if (r15 == null) throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model"); let e; - if (r16 instanceof Array) { - let [o, n] = r16; + if (r15 instanceof Array) { + let [o, n] = r15; if (!o) throw new Error("modelJSON must be the first element of the array"); if (!n || !(n instanceof ArrayBuffer)) @@ -12058,36 +12058,36 @@ function o7(r16) { throw new Error("Model JSON is missing 'modelTopology'"); if (!("weightsManifest" in o)) throw new Error("Model JSON is missing 'weightsManifest'"); - let s = Si.getWeightSpecs(o.weightsManifest), a = Si.getModelArtifactsForJSONSync(o, s, n); - e = Si.fromMemorySync(a); - } else if ("load" in r16) - e = r16; - else if ("modelTopology" in r16 && "weightSpecs" in r16 && "weightData" in r16) - e = Si.fromMemorySync(r16); + let s = di.getWeightSpecs(o.weightsManifest), a = di.getModelArtifactsForJSONSync(o, s, n); + e = di.fromMemorySync(a); + } else if ("load" in r15) + e = r15; + else if ("modelTopology" in r15 && "weightSpecs" in r15 && "weightData" in r15) + e = di.fromMemorySync(r15); else throw new Error("Unknown model format"); - let t10 = new Kc(e); + let t10 = new Bl(e); return t10.load(), t10; } -function n7(r16) { - return r16.endsWith("/") || (r16 = r16 + "/"), `${r16}${t7}${e7}`; +function B8(r15) { + return r15.endsWith("/") || (r15 = r15 + "/"), `${r15}${O8}${P8}`; } -var s7 = "4.17.0"; -function Q(r16, e) { - Array.isArray(r16) || (r16 = [r16]), r16.forEach((t10) => { +var z8 = "4.17.0"; +function Q(r15, e) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((t10) => { t10 != null && y.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); }); } -var a7 = Ut.whereImpl; -var Il = class r11 extends mo { +var V8 = Vt.whereImpl; +var xc = class r11 extends ao { nextDataId() { return r11.nextDataId++; } constructor() { - super(), this.blockSize = 48, this.firstUse = true, this.data = new mn(this, cr()); + super(), this.blockSize = 48, this.firstUse = true, this.data = new Bo(this, ur()); } write(e, t10, o) { - this.firstUse && (this.firstUse = false, A().get("IS_NODE") && C.warn(` + this.firstUse && (this.firstUse = false, A().get("IS_NODE") && w.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. ============================`)); @@ -12129,7 +12129,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram let { dtype: t10, complexTensorInfos: o } = this.data.get(e); if (t10 === "complex64") { let n = this.readSync(o.real.dataId), s = this.readSync(o.imag.dataId); - return C.mergeRealAndImagArrays(n, s); + return w.mergeRealAndImagArrays(n, s); } return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values, t10); } @@ -12138,14 +12138,14 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram if (e.dtype === "string") try { let o = t10.map((n) => y.decodeString(n)); - return ie(e.shape, e.dtype, o); + return me(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ie(e.shape, e.dtype, t10); + return me(e.shape, e.dtype, t10); } makeOutput(e, t10, o) { - return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t10, o, e), this); + return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t10, o, e), this); } disposeData(e, t10 = false) { if (this.data.has(e)) { @@ -12169,7 +12169,7 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram where(e) { Q([e], "where"); let t10 = this.readSync(e.dataId); - return a7(e.shape, t10); + return V8(e.shape, t10); } dispose() { } @@ -12180,360 +12180,360 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return super.epsilon(); } }; -Il.nextDataId = 0; -var Xf = {}; -qe(Xf, { addImpl: () => eI, bincountImpl: () => Nl, bincountReduceImpl: () => Of, bitwiseAndImpl: () => tI, castImpl: () => JS, ceilImpl: () => rI, concatImpl: () => mp, equalImpl: () => oI, expImpl: () => sI, expm1Impl: () => iI, floorDivImpl: () => pI, floorImpl: () => uI, gatherNdImpl: () => Mf, gatherV2Impl: () => Lf, greaterEqualImpl: () => cI, greaterImpl: () => lI, lessEqualImpl: () => dI, lessImpl: () => mI, linSpaceImpl: () => Bf, logImpl: () => fI, maxImpl: () => zf, maximumImpl: () => hI, minimumImpl: () => gI, multiplyImpl: () => qc, negImpl: () => xI, notEqualImpl: () => yI, prodImpl: () => bI, raggedGatherImpl: () => Vf, raggedRangeImpl: () => Wf, raggedTensorToTensorImpl: () => Uf, rangeImpl: () => fp, rsqrtImpl: () => wI, scatterImpl: () => Xs, sigmoidImpl: () => gE, simpleAbsImpl: () => ZS, sliceImpl: () => hp, sparseFillEmptyRowsImpl: () => Gf, sparseReshapeImpl: () => Hf, sparseSegmentReductionImpl: () => _l, sqrtImpl: () => bE, squaredDifferenceImpl: () => II, staticRegexReplaceImpl: () => vI, stridedSliceImpl: () => Kf, stringNGramsImpl: () => gp, stringSplitImpl: () => xp, stringToHashBucketFastImpl: () => yp, subImpl: () => NI, tileImpl: () => qf, topKImpl: () => jf, transposeImpl: () => Tl, uniqueImpl: () => bp }); -function ZS(r16) { - let e = new Float32Array(r16.length); - for (let t10 = 0; t10 < r16.length; ++t10) - e[t10] = Math.abs(r16[t10]); +xc.nextDataId = 0; +var Ic = {}; +qe(Ic, { addImpl: () => VS, bincountImpl: () => Cc, bincountReduceImpl: () => Nf, bitwiseAndImpl: () => WS, castImpl: () => zS, ceilImpl: () => US, concatImpl: () => ap, equalImpl: () => GS, expImpl: () => KS, expm1Impl: () => jS, floorDivImpl: () => YS, floorImpl: () => XS, gatherNdImpl: () => Tf, gatherV2Impl: () => _f, greaterEqualImpl: () => ZS, greaterImpl: () => QS, lessEqualImpl: () => eI, lessImpl: () => JS, linSpaceImpl: () => Ef, logImpl: () => tI, maxImpl: () => $f, maximumImpl: () => rI, minimumImpl: () => oI, multiplyImpl: () => zl, negImpl: () => nI, notEqualImpl: () => sI, prodImpl: () => aI, raggedGatherImpl: () => Rf, raggedRangeImpl: () => Df, raggedTensorToTensorImpl: () => Af, rangeImpl: () => up, rsqrtImpl: () => uI, scatterImpl: () => zs, sigmoidImpl: () => R_, simpleAbsImpl: () => BS, sliceImpl: () => pp, sparseFillEmptyRowsImpl: () => Ff, sparseReshapeImpl: () => Pf, sparseSegmentReductionImpl: () => Sc, sqrtImpl: () => F_, squaredDifferenceImpl: () => cI, staticRegexReplaceImpl: () => lI, stridedSliceImpl: () => Of, stringNGramsImpl: () => cp, stringSplitImpl: () => lp, stringToHashBucketFastImpl: () => mp, subImpl: () => dI, tileImpl: () => Mf, topKImpl: () => Lf, transposeImpl: () => wc, uniqueImpl: () => dp }); +function BS(r15) { + let e = new Float32Array(r15.length); + for (let t10 = 0; t10 < r15.length; ++t10) + e[t10] = Math.abs(r15[t10]); return e; } -var i7 = (r16) => { - let { x: e } = r16.inputs, t10 = r16.backend; +var W8 = (r15) => { + let { x: e } = r15.inputs, t10 = r15.backend; Q(e, "abs"); let o = new Float32Array(y.sizeFromShape(e.shape)), n = t10.data.get(e.dataId).values; - return o = ZS(n), t10.makeOutput(o, e.shape, e.dtype); + return o = BS(n), t10.makeOutput(o, e.shape, e.dtype); }; -var z_ = { kernelName: fn, backendName: "cpu", kernelFunc: i7 }; -function Ve(r16) { +var t_ = { kernelName: Xs, backendName: "cpu", kernelFunc: W8 }; +function Ve(r15) { return (e, t10, o, n, s) => { - let a = C.assertAndGetBroadcastShape(e, t10), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), l = y.getTypedArrayFromDType(s, u), c = e.length, m = t10.length, d = y.computeStrides(e), f = y.computeStrides(t10), h = C.getBroadcastDims(e, a), g = C.getBroadcastDims(t10, a); + let a = w.assertAndGetBroadcastShape(e, t10), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), c = y.getTypedArrayFromDType(s, u), l = e.length, m = t10.length, d = y.computeStrides(e), f = y.computeStrides(t10), h = w.getBroadcastDims(e, a), g = w.getBroadcastDims(t10, a); if (h.length + g.length === 0) - for (let x = 0; x < l.length; ++x) - l[x] = r16(o[x % o.length], n[x % n.length]); + for (let x = 0; x < c.length; ++x) + c[x] = r15(o[x % o.length], n[x % n.length]); else - for (let x = 0; x < l.length; ++x) { - let b = y.indexToLoc(x, i, p), w = b.slice(-c); - h.forEach((E) => w[E] = 0); - let S = y.locToIndex(w, c, d), k = b.slice(-m); - g.forEach((E) => k[E] = 0); - let T = y.locToIndex(k, m, f); - l[x] = r16(o[S], n[T]); - } - return [l, a]; + for (let x = 0; x < c.length; ++x) { + let b = y.indexToLoc(x, i, p), C = b.slice(-l); + h.forEach(($) => C[$] = 0); + let S = y.locToIndex(C, l, d), k = b.slice(-m); + g.forEach(($) => k[$] = 0); + let _ = y.locToIndex(k, m, f); + c[x] = r15(o[S], n[_]); + } + return [c, a]; }; } -function qt(r16) { - let { inputs: e, backend: t10 } = r16, { real: o, imag: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = t10.makeTensorInfo(o.shape, "complex64"), p = t10.data.get(i.dataId); +function Ht(r15) { + let { inputs: e, backend: t10 } = r15, { real: o, imag: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = t10.makeTensorInfo(o.shape, "complex64"), p = t10.data.get(i.dataId); return p.complexTensorInfos = { real: t10.makeTensorInfo(o.shape, "float32", s), imag: t10.makeTensorInfo(n.shape, "float32", a) }, i; } -var V_ = { kernelName: ei, backendName: "cpu", kernelFunc: qt }; -function vl(r16, e, t10 = "float32") { +var r_ = { kernelName: Di, backendName: "cpu", kernelFunc: Ht }; +function yc(r15, e, t10 = "float32") { if (t10 === "complex64") { - let n = vl(r16, e, "float32"), s = vl(r16, e, "float32"); - return qt({ inputs: { real: n, imag: s }, backend: r16 }); + let n = yc(r15, e, "float32"), s = yc(r15, e, "float32"); + return Ht({ inputs: { real: n, imag: s }, backend: r15 }); } let o = y.makeZerosTypedArray(y.sizeFromShape(e), t10); - return r16.makeTensorInfo(e, t10, o); + return r15.makeTensorInfo(e, t10, o); } -function fr(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +function lr(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var W_ = { kernelName: vo, backendName: "cpu", kernelFunc: fr }; -function tn(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.real, s = t10.data.get(n.dataId).values; +var o_ = { kernelName: Co, backendName: "cpu", kernelFunc: lr }; +function $o(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.real, s = t10.data.get(n.dataId).values; return t10.makeTensorInfo(n.shape, n.dtype, s); } -var U_ = { kernelName: si, backendName: "cpu", kernelFunc: tn }; -function JS(r16, e, t10, o) { +var n_ = { kernelName: Hi, backendName: "cpu", kernelFunc: $o }; +function zS(r15, e, t10, o) { if (o === "int32") { - let n = Int32Array.from(r16); + let n = Int32Array.from(r15); return [e, "int32", n]; } if (o === "bool") { - let n = y.toTypedArray([0], t10), [s, a] = Ve((i, p) => i !== p ? 1 : 0)(e, [], r16, n, "bool"); + let n = y.toTypedArray([0], t10), [s, a] = Ve((i, p) => i !== p ? 1 : 0)(e, [], r15, n, "bool"); return [a, "bool", s]; } throw new Error(`Error in Cast: failed to cast ${t10} to ${o}`); } -function rn(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dtype: s } = o; +function Ro(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return fr({ inputs: { x: n }, backend: t10 }); - let l = vl(t10, n.shape, n.dtype), c = rn({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = qt({ inputs: { real: c, imag: l }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(c), m; + return lr({ inputs: { x: n }, backend: t10 }); + let c = yc(t10, n.shape, n.dtype), l = Ro({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = Ht({ inputs: { real: l, imag: c }, backend: t10 }); + return t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), m; } if (n.dtype === "complex64") { - let l = tn({ inputs: { input: n }, backend: t10 }), c = rn({ inputs: { x: l }, backend: t10, attrs: { dtype: s } }); - return t10.disposeIntermediateTensorInfo(l), c; + let c = $o({ inputs: { input: n }, backend: t10 }), l = Ro({ inputs: { x: c }, backend: t10, attrs: { dtype: s } }); + return t10.disposeIntermediateTensorInfo(c), l; } if (!y.hasEncodingLoss(n.dtype, s)) { - let l = fr({ inputs: { x: n }, backend: t10 }); - return { dataId: l.dataId, shape: l.shape, dtype: s }; + let c = lr({ inputs: { x: n }, backend: t10 }); + return { dataId: c.dataId, shape: c.shape, dtype: s }; } - let a = t10.data.get(n.dataId).values, [i, p, u] = JS(a, n.shape, n.dtype, s); + let a = t10.data.get(n.dataId).values, [i, p, u] = zS(a, n.shape, n.dtype, s); return t10.makeTensorInfo(i, p, u); } -var G_ = { kernelName: ho, backendName: "cpu", kernelFunc: rn }; -function Qe(r16, e, t10, o) { +var s_ = { kernelName: yo, backendName: "cpu", kernelFunc: Ro }; +function Ye(r15, e, t10, o) { return t10 == null ? ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; - Q([a, i], r16); - let u = p.data.get(a.dataId).values, l = p.data.get(i.dataId).values, c = a.dtype === "string" ? C.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? C.fromUint8ToStringArray(l) : l, d = o || a.dtype, [f, h] = e(a.shape, i.shape, c, m, d); + Q([a, i], r15); + let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = a.dtype === "string" ? w.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? w.fromUint8ToStringArray(c) : c, d = o || a.dtype, [f, h] = e(a.shape, i.shape, l, m, d); return p.makeTensorInfo(h, d, f); } : ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; if (a.dtype === "complex64" || i.dtype === "complex64") { - let u = rn({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), l = p.data.get(u.dataId), c = l.complexTensorInfos.real, m = l.complexTensorInfos.imag, d = p.data.get(c.dataId).values, f = p.data.get(m.dataId).values, h = rn({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), x = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, w = p.data.get(x.dataId).values, S = p.data.get(b.dataId).values, [k, T, E] = t10(a.shape, i.shape, d, f, w, S), R = p.makeTensorInfo(E, "float32", k), D = p.makeTensorInfo(E, "float32", T), F = qt({ inputs: { real: R, imag: D }, backend: p }); - return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(R), p.disposeIntermediateTensorInfo(D), F; + let u = Ro({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), c = p.data.get(u.dataId), l = c.complexTensorInfos.real, m = c.complexTensorInfos.imag, d = p.data.get(l.dataId).values, f = p.data.get(m.dataId).values, h = Ro({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), x = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, C = p.data.get(x.dataId).values, S = p.data.get(b.dataId).values, [k, _, $] = t10(a.shape, i.shape, d, f, C, S), R = p.makeTensorInfo($, "float32", k), D = p.makeTensorInfo($, "float32", _), P = Ht({ inputs: { real: R, imag: D }, backend: p }); + return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(R), p.disposeIntermediateTensorInfo(D), P; } else { - let u = p.data.get(a.dataId).values, l = p.data.get(i.dataId).values, c = o || a.dtype, [m, d] = e(a.shape, i.shape, u, l, c); - return p.makeTensorInfo(d, c, m); + let u = p.data.get(a.dataId).values, c = p.data.get(i.dataId).values, l = o || a.dtype, [m, d] = e(a.shape, i.shape, u, c, l); + return p.makeTensorInfo(d, l, m); } }; } -function kl(r16) { +function bc(r15) { return (e, t10, o, n, s, a) => { - let i = C.assertAndGetBroadcastShape(e, t10), p = y.sizeFromShape(i), u = i.length, l = y.computeStrides(i), c = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = C.getBroadcastDims(e, i), f = C.getBroadcastDims(t10, i), h = C.mergeRealAndImagArrays(o, n), g = C.mergeRealAndImagArrays(s, a), x = e.length, b = y.computeStrides(e), w = t10.length, S = y.computeStrides(t10); + let i = w.assertAndGetBroadcastShape(e, t10), p = y.sizeFromShape(i), u = i.length, c = y.computeStrides(i), l = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = w.getBroadcastDims(e, i), f = w.getBroadcastDims(t10, i), h = w.mergeRealAndImagArrays(o, n), g = w.mergeRealAndImagArrays(s, a), x = e.length, b = y.computeStrides(e), C = t10.length, S = y.computeStrides(t10); if (d.length + f.length === 0) - for (let k = 0; k < c.length; k++) { - let T = k % h.length, E = k % g.length, R = r16(h[T * 2], h[T * 2 + 1], g[E * 2], g[E * 2 + 1]); - c[k] = R.real, m[k] = R.imag; + for (let k = 0; k < l.length; k++) { + let _ = k % h.length, $ = k % g.length, R = r15(h[_ * 2], h[_ * 2 + 1], g[$ * 2], g[$ * 2 + 1]); + l[k] = R.real, m[k] = R.imag; } else - for (let k = 0; k < c.length; k++) { - let T = y.indexToLoc(k, u, l), E = T.slice(-x); - d.forEach((M) => E[M] = 0); - let R = y.locToIndex(E, x, b), D = T.slice(-w); + for (let k = 0; k < l.length; k++) { + let _ = y.indexToLoc(k, u, c), $ = _.slice(-x); + d.forEach((M) => $[M] = 0); + let R = y.locToIndex($, x, b), D = _.slice(-C); f.forEach((M) => D[M] = 0); - let F = y.locToIndex(D, w, S), O = r16(h[R * 2], h[R * 2 + 1], g[F * 2], g[F * 2 + 1]); - c[k] = O.real, m[k] = O.imag; + let P = y.locToIndex(D, C, S), O = r15(h[R * 2], h[R * 2 + 1], g[P * 2], g[P * 2 + 1]); + l[k] = O.real, m[k] = O.imag; } - return [c, m, i]; + return [l, m, i]; }; } -var eI = Ve((r16, e) => r16 + e); -var u7 = kl((r16, e, t10, o) => ({ real: r16 + t10, imag: e + o })); -var Wa = Qe(Rr, eI, u7); -var H_ = { kernelName: Rr, backendName: "cpu", kernelFunc: Wa }; -function Nl(r16, e, t10, o, n) { +var VS = Ve((r15, e) => r15 + e); +var U8 = bc((r15, e, t10, o) => ({ real: r15 + t10, imag: e + o })); +var Pa = Ye(uo, VS, U8); +var a_ = { kernelName: uo, backendName: "cpu", kernelFunc: Pa }; +function Cc(r15, e, t10, o, n) { let s = y.sizeFromShape(o), a = y.makeZerosTypedArray(n, t10); - for (let i = 0; i < r16.length; i++) { - let p = r16[i]; + for (let i = 0; i < r15.length; i++) { + let p = r15[i]; if (p < 0) throw new Error("Input x must be non-negative!"); p >= n || (s > 0 ? a[p] += e[i] : a[p] += 1); } return a; } -function Of(r16, e, t10, o = false) { - let n = r16.shape[0], s = r16.shape[1], a = ie([n, t10], e.dtype); +function Nf(r15, e, t10, o = false) { + let n = r15.shape[0], s = r15.shape[1], a = me([n, t10], e.dtype); for (let i = 0; i < n; i++) for (let p = 0; p < s; p++) { - let u = r16.get(i, p); + let u = r15.get(i, p); if (u < 0) throw new Error("Input x must be non-negative!"); u >= t10 || (o ? a.set(1, i, u) : e.size > 0 ? a.set(a.get(i, u) + e.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); } return a; } -var tI = Ve((r16, e) => r16 & e); -var p7 = Qe(_n, tI); -var K_ = { kernelName: _n, backendName: "cpu", kernelFunc: p7 }; -function Yt(r16) { +var WS = Ve((r15, e) => r15 & e); +var G8 = Ye(qa, WS); +var i_ = { kernelName: qa, backendName: "cpu", kernelFunc: G8 }; +function jt(r15) { return (e, t10, o) => { let n = y.getArrayFromDType(t10, e.length); for (let s = 0; s < e.length; ++s) - n[s] = r16(e[s], o); + n[s] = r15(e[s], o); return n; }; } -function Ie(r16, e, t10) { - let o = Yt(e); - return Mr(r16, o, t10); +function Ie(r15, e, t10) { + let o = jt(e); + return Ar(r15, o, t10); } -function Mr(r16, e, t10) { +function Ar(r15, e, t10) { return ({ inputs: o, attrs: n, backend: s }) => { let { x: a } = o; - Q(a, r16); + Q(a, r15); let i = s, p = i.data.get(a.dataId).values, u; if (a.dtype === "string") { if (!Array.isArray(p)) throw new Error("String tensor's value was not an instance of Array"); - u = C.fromUint8ToStringArray(p); + u = w.fromUint8ToStringArray(p); } else u = p; - let l = t10 || a.dtype, c = e(u, l, n); - return i.makeTensorInfo(a.shape, l, c); + let c = t10 || a.dtype, l = e(u, c, n); + return i.makeTensorInfo(a.shape, c, l); }; } -var rI = Yt((r16) => Math.ceil(r16)); -var l7 = Mr(go, rI); -var q_ = { kernelName: go, backendName: "cpu", kernelFunc: l7 }; -function mp(r16, e, t10, o) { +var US = jt((r15) => Math.ceil(r15)); +var H8 = Ar(en, US); +var u_ = { kernelName: en, backendName: "cpu", kernelFunc: H8 }; +function ap(r15, e, t10, o) { let n = y.getArrayFromDType(t10, y.sizeFromShape(e)); if (o && t10 !== "string") { let s = 0; - r16.forEach((a) => { + r15.forEach((a) => { let i = y.sizeFromShape(a.shape); n.set(a.vals, s), s += i; }); } else { let s = 0; - r16.forEach((a) => { - let i = t10 === "string" ? C.fromUint8ToStringArray(a.vals) : a.vals, p = 0; + r15.forEach((a) => { + let i = t10 === "string" ? w.fromUint8ToStringArray(a.vals) : a.vals, p = 0; for (let u = 0; u < a.shape[0]; ++u) { - let l = u * e[1] + s; - for (let c = 0; c < a.shape[1]; ++c) - n[l + c] = i[p++]; + let c = u * e[1] + s; + for (let l = 0; l < a.shape[1]; ++l) + n[c + l] = i[p++]; } s += a.shape[1]; }); } return n; } -var oI = Ve((r16, e) => r16 === e ? 1 : 0); -var nI = Qe(xo, oI, null, "bool"); -var j_ = { kernelName: xo, backendName: "cpu", kernelFunc: nI }; -var sI = Yt((r16) => Math.exp(r16)); -var aI = Mr(yo, sI, "float32"); -var X_ = { kernelName: yo, backendName: "cpu", kernelFunc: aI }; -var iI = Yt((r16) => Math.expm1(r16)); -var c7 = Mr(bo, iI); -var Y_ = { kernelName: bo, backendName: "cpu", kernelFunc: c7 }; -var uI = Yt((r16) => Math.floor(r16)); -var m7 = Mr(Co, uI); -var Q_ = { kernelName: Co, backendName: "cpu", kernelFunc: m7 }; -var pI = Ve((r16, e) => Math.floor(r16 / e)); -var d7 = Qe(wo, pI, null, "int32"); -var Z_ = { kernelName: wo, backendName: "cpu", kernelFunc: d7 }; -function Mf(r16, e, t10, o, n, s, a, i, p) { - let u = ie([o, s], t10); - for (let l = 0; l < o; l++) { - let c = [], m = 0; +var GS = Ve((r15, e) => r15 === e ? 1 : 0); +var HS = Ye(xn, GS, null, "bool"); +var p_ = { kernelName: xn, backendName: "cpu", kernelFunc: HS }; +var KS = jt((r15) => Math.exp(r15)); +var qS = Ar(yn, KS, "float32"); +var c_ = { kernelName: yn, backendName: "cpu", kernelFunc: qS }; +var jS = jt((r15) => Math.expm1(r15)); +var K8 = Ar(bn, jS); +var l_ = { kernelName: bn, backendName: "cpu", kernelFunc: K8 }; +var XS = jt((r15) => Math.floor(r15)); +var q8 = Ar(wn, XS); +var m_ = { kernelName: wn, backendName: "cpu", kernelFunc: q8 }; +var YS = Ve((r15, e) => Math.floor(r15 / e)); +var j8 = Ye(Sn, YS, null, "int32"); +var d_ = { kernelName: Sn, backendName: "cpu", kernelFunc: j8 }; +function Tf(r15, e, t10, o, n, s, a, i, p) { + let u = me([o, s], t10); + for (let c = 0; c < o; c++) { + let l = [], m = 0; for (let d = 0; d < n; d++) { - let f = r16[l * n + d]; - m += f * a[d], c.push(f); + let f = r15[c * n + d]; + m += f * a[d], l.push(f); } if (m < 0 || m >= p / s) - throw new Error(`Invalid indices: ${c} does not index into ${i}`); + throw new Error(`Invalid indices: ${l} does not index into ${i}`); for (let d = 0; d < s; d++) - u.values[l * s + d] = e.get(...e.indexToLoc(m * s + d)); + u.values[c * s + d] = e.get(...e.indexToLoc(m * s + d)); } return u; } -function Lf(r16, e, t10) { - let o = ie(t10, r16.dtype); +function _f(r15, e, t10) { + let o = me(t10, r15.dtype); for (let n = 0; n < o.size; ++n) { let a = o.indexToLoc(n).slice(), i = a[0], p = a[2], u = e.locToIndex([i, p]); a[2] = e.values[u]; - let l = r16.locToIndex(a); - 0 <= l && l < r16.values.length && (o.values[n] = r16.values[l]); + let c = r15.locToIndex(a); + 0 <= c && c < r15.values.length && (o.values[n] = r15.values[c]); } return o; } -var lI = Ve((r16, e) => r16 > e ? 1 : 0); -var f7 = Qe(So, lI, null, "bool"); -var J_ = { kernelName: So, backendName: "cpu", kernelFunc: f7 }; -var cI = Ve((r16, e) => r16 >= e ? 1 : 0); -var h7 = Qe(Io, cI, null, "bool"); -var eE = { kernelName: Io, backendName: "cpu", kernelFunc: h7 }; -var mI = Ve((r16, e) => r16 < e ? 1 : 0); -var g7 = Qe(ko, mI, null, "bool"); -var tE = { kernelName: ko, backendName: "cpu", kernelFunc: g7 }; -var dI = Ve((r16, e) => r16 <= e ? 1 : 0); -var x7 = Qe(No, dI, null, "bool"); -var rE = { kernelName: No, backendName: "cpu", kernelFunc: x7 }; -function Bf(r16, e, t10) { - let o = (e - r16) / (t10 - 1), n = y.makeZerosTypedArray(t10, "float32"); - n[0] = r16; +var QS = Ve((r15, e) => r15 > e ? 1 : 0); +var X8 = Ye(kn, QS, null, "bool"); +var f_ = { kernelName: kn, backendName: "cpu", kernelFunc: X8 }; +var ZS = Ve((r15, e) => r15 >= e ? 1 : 0); +var Y8 = Ye(Nn, ZS, null, "bool"); +var h_ = { kernelName: Nn, backendName: "cpu", kernelFunc: Y8 }; +var JS = Ve((r15, e) => r15 < e ? 1 : 0); +var Q8 = Ye(Rn, JS, null, "bool"); +var g_ = { kernelName: Rn, backendName: "cpu", kernelFunc: Q8 }; +var eI = Ve((r15, e) => r15 <= e ? 1 : 0); +var Z8 = Ye(Dn, eI, null, "bool"); +var x_ = { kernelName: Dn, backendName: "cpu", kernelFunc: Z8 }; +function Ef(r15, e, t10) { + let o = (e - r15) / (t10 - 1), n = y.makeZerosTypedArray(t10, "float32"); + n[0] = r15; for (let s = 1; s < n.length; s++) n[s] = n[s - 1] + o; return n; } -var fI = Yt((r16) => Math.log(r16)); -var y7 = Mr(To, fI); -var oE = { kernelName: To, backendName: "cpu", kernelFunc: y7 }; -function zf(r16, e, t10, o) { +var tI = jt((r15) => Math.log(r15)); +var J8 = Ar(Fn, tI); +var y_ = { kernelName: Fn, backendName: "cpu", kernelFunc: J8 }; +function $f(r15, e, t10, o) { let n = y.getTypedArrayFromDType(o, y.sizeFromShape(t10)); for (let s = 0; s < n.length; ++s) { - let a = s * e, i = r16[a]; + let a = s * e, i = r15[a]; for (let p = 0; p < e; ++p) { - let u = r16[a + p]; + let u = r15[a + p]; (Number.isNaN(u) || u > i) && (i = u); } n[s] = i; } return n; } -var hI = Ve((r16, e) => Math.max(r16, e)); -var b7 = Qe(_o, hI); -var nE = { kernelName: _o, backendName: "cpu", kernelFunc: b7 }; -var gI = Ve((r16, e) => Math.min(r16, e)); -var C7 = Qe(Eo, gI); -var sE = { kernelName: Eo, backendName: "cpu", kernelFunc: C7 }; -var qc = Ve((r16, e) => r16 * e); -var w7 = kl((r16, e, t10, o) => ({ real: r16 * t10 - e * o, imag: r16 * o + e * t10 })); -var dp = Qe($o, qc, w7); -var aE = { kernelName: $o, backendName: "cpu", kernelFunc: dp }; -function xI(r16, e, t10) { +var rI = Ve((r15, e) => Math.max(r15, e)); +var eY = Ye(Vn, rI); +var b_ = { kernelName: Vn, backendName: "cpu", kernelFunc: eY }; +var oI = Ve((r15, e) => Math.min(r15, e)); +var tY = Ye(Hn, oI); +var C_ = { kernelName: Hn, backendName: "cpu", kernelFunc: tY }; +var zl = Ve((r15, e) => r15 * e); +var rY = bc((r15, e, t10, o) => ({ real: r15 * t10 - e * o, imag: r15 * o + e * t10 })); +var ip = Ye(Xn, zl, rY); +var w_ = { kernelName: Xn, backendName: "cpu", kernelFunc: ip }; +function nI(r15, e, t10) { let o = y.createScalarValue(-1, t10); - return qc([], e, o, r16, t10); + return zl([], e, o, r15, t10); } -function S7(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +function oY(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; Q(o, "neg"); - let n = t10.data.get(o.dataId).values, [s, a] = xI(n, o.shape, o.dtype); + let n = t10.data.get(o.dataId).values, [s, a] = nI(n, o.shape, o.dtype); return t10.makeTensorInfo(a, o.dtype, s); } -var iE = { kernelName: ls, backendName: "cpu", kernelFunc: S7 }; -var yI = Ve((r16, e) => r16 !== e ? 1 : 0); -var I7 = Qe(Ro, yI, null, "bool"); -var uE = { kernelName: Ro, backendName: "cpu", kernelFunc: I7 }; -function Tl(r16, e, t10, o, n) { +var S_ = { kernelName: pa, backendName: "cpu", kernelFunc: oY }; +var sI = Ve((r15, e) => r15 !== e ? 1 : 0); +var nY = Ye(Yn, sI, null, "bool"); +var I_ = { kernelName: Yn, backendName: "cpu", kernelFunc: nY }; +function wc(r15, e, t10, o, n) { let s = e.length, a = y.sizeFromShape(e), i = y.computeStrides(e), p = y.computeStrides(n), u = y.getTypedArrayFromDType(t10, y.sizeFromShape(n)); - for (let l = 0; l < a; ++l) { - let c = y.indexToLoc(l, s, i), m = new Array(c.length); + for (let c = 0; c < a; ++c) { + let l = y.indexToLoc(c, s, i), m = new Array(l.length); for (let f = 0; f < m.length; f++) - m[f] = c[o[f]]; + m[f] = l[o[f]]; let d = y.locToIndex(m, s, p); - u[d] = r16[l]; + u[d] = r15[c]; } return u; } -function vt(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n } = e, { perm: s } = t10; +function St(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n } = e, { perm: s } = t10; Q(n, "transpose"); let a = n.shape.length, i = new Array(a); - for (let c = 0; c < i.length; c++) - i[c] = n.shape[s[c]]; - let p = o.data.get(n.dataId).values, u = Tl(p, n.shape, n.dtype, s, i); + for (let l = 0; l < i.length; l++) + i[l] = n.shape[s[l]]; + let p = o.data.get(n.dataId).values, u = wc(p, n.shape, n.dtype, s, i); return { dataId: o.write(u, i, n.dtype), shape: i, dtype: n.dtype }; } -var pE = { kernelName: Kr, backendName: "cpu", kernelFunc: vt }; -function bI(r16, e, t10, o) { - let [n, s] = C.computeOutAndReduceShapes(r16, o), a = pt(e, "int32"), i = y.makeZerosTypedArray(y.sizeFromShape(n), a), p = y.sizeFromShape(s); +var v_ = { kernelName: co, backendName: "cpu", kernelFunc: St }; +function aI(r15, e, t10, o) { + let [n, s] = w.computeOutAndReduceShapes(r15, o), a = dt(e, "int32"), i = y.makeZerosTypedArray(y.sizeFromShape(n), a), p = y.sizeFromShape(s); for (let u = 0; u < i.length; ++u) { - let l = u * p, c = 1; + let c = u * p, l = 1; for (let m = 0; m < p; ++m) - c *= t10[l + m]; - i[u] = c; + l *= t10[c + m]; + i[u] = l; } return { outVals: i, outShape: n, outDtype: a }; } -function v7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; +function sY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "prod"); - let i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = C.getAxesPermutation(p, i), l = p, c = n, m = []; - u != null && (c = vt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), m.push(c), l = C.getInnerMostAxes(l.length, i)); - let d = t10.data.get(c.dataId).values, { outVals: f, outShape: h, outDtype: g } = bI(c.shape, c.dtype, d, l), x = h; - return a && (x = C.expandShapeToKeepDim(h, p)), m.forEach((b) => t10.disposeIntermediateTensorInfo(b)), t10.makeTensorInfo(x, g, f); -} -var lE = { kernelName: Ho, backendName: "cpu", kernelFunc: v7 }; -function k7(r16, e, t10) { - r16.forEach((o, n) => { + let i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = w.getAxesPermutation(p, i), c = p, l = n, m = []; + u != null && (l = St({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), m.push(l), c = w.getInnerMostAxes(c.length, i)); + let d = t10.data.get(l.dataId).values, { outVals: f, outShape: h, outDtype: g } = aI(l.shape, l.dtype, d, c), x = h; + return a && (x = w.expandShapeToKeepDim(h, p)), m.forEach((b) => t10.disposeIntermediateTensorInfo(b)), t10.makeTensorInfo(x, g, f); +} +var k_ = { kernelName: os, backendName: "cpu", kernelFunc: sY }; +function aY(r15, e, t10) { + r15.forEach((o, n) => { if (o < 0 || o >= t10) { let s = y.indexToLoc(n, e.length, y.computeStrides(e)).join(","); throw new Error(`indices[${s}] = ${o} is not in [0, ${t10})`); } }); } -function N7(r16, e) { - for (let t10 = 0; t10 < r16.length; ++t10) { - let o = r16[t10], n = t10 === r16.length - 1 ? e : r16[t10 + 1].length; +function iY(r15, e) { + for (let t10 = 0; t10 < r15.length; ++t10) { + let o = r15[t10], n = t10 === r15.length - 1 ? e : r15[t10 + 1].length; if (o.length === 0) throw new Error("Ragged splits may not be empty"); if (o[0] < 0) @@ -12545,127 +12545,127 @@ function N7(r16, e) { throw new Error("Ragged splits must be sorted in ascending order"); } } -function T7(r16, e, t10, o) { +function uY(r15, e, t10, o) { let n = [], s = 0, a = e.length - 1 + t10.length, i = new Array(a).fill(null).map(() => [0]); - N7(t10, o); + iY(t10, o); let p = 1; for (let u = 0; u < e.length - 1; ++u) { p *= e[u]; - let l = e[u + 1]; - for (let c = 1; c < p + 1; ++c) - i[u].push(c * l); + let c = e[u + 1]; + for (let l = 1; l < p + 1; ++l) + i[u].push(l * c); } - for (let u = 0; u < r16.length; ++u) { - let l = r16[u], c = r16[u] + 1; + for (let u = 0; u < r15.length; ++u) { + let c = r15[u], l = r15[u] + 1; for (let m = 0; m < t10.length; ++m) { let d = t10[m], f = m + e.length - 1; if (f >= 0) { - let h = i[f], g = h[h.length - 1] - d[l]; - for (let x = l; x < c; ++x) + let h = i[f], g = h[h.length - 1] - d[c]; + for (let x = c; x < l; ++x) i[f].push(d[x + 1] + g); } - l = d[l], c = d[c]; + c = d[c], l = d[l]; } - c !== l && (n.push([l, c]), s += c - l); + l !== c && (n.push([c, l]), s += l - c); } return { outSplits: i, valueSlices: n, numValues: s }; } -function _7(r16) { +function pY(r15) { let e = []; - for (let t10 = 0; t10 < r16.length; ++t10) { - let o = r16[t10].length, n = y.getArrayFromDType("int32", o); - e.push(n), r16[t10].forEach((s, a) => n[a] = s); + for (let t10 = 0; t10 < r15.length; ++t10) { + let o = r15[t10].length, n = y.getArrayFromDType("int32", o); + e.push(n), r15[t10].forEach((s, a) => n[a] = s); } return e; } -function cE(r16, e) { - let t10 = r16.slice(0, e); +function N_(r15, e) { + let t10 = r15.slice(0, e); for (; t10.length < e; ) t10.push(1); - for (let o = e; o < r16.length; o++) - t10[e - 1] *= r16[o]; + for (let o = e; o < r15.length; o++) + t10[e - 1] *= r15[o]; return t10; } -function E7(r16, e, t10, o, n, s) { - let a = cE(e, 2)[1], i = cE(s, 2)[1], p = 0; +function cY(r15, e, t10, o, n, s) { + let a = N_(e, 2)[1], i = N_(s, 2)[1], p = 0; for (let u of t10) - for (let l = u[0]; l < u[1]; ++l) { - for (let c = 0; c < o; ++c) - n[p * i + c] = r16[l * a + c]; + for (let c = u[0]; c < u[1]; ++c) { + for (let l = 0; l < o; ++l) + n[p * i + l] = r15[c * a + l]; ++p; } } -function $7(r16, e, t10, o, n) { +function lY(r15, e, t10, o, n) { let s = e.slice(); s[0] = n; - let a = y.getArrayFromDType(t10, y.sizeFromShape(s)), i = r16.length, p = i === 0 ? 0 : i / e[0]; - return E7(r16, e, o, p, a, s), [a, s]; + let a = y.getArrayFromDType(t10, y.sizeFromShape(s)), i = r15.length, p = i === 0 ? 0 : i / e[0]; + return cY(r15, e, o, p, a, s), [a, s]; } -function Vf(r16, e, t10, o, n, s, a, i) { - if (r16.length === 0) +function Rf(r15, e, t10, o, n, s, a, i) { + if (r15.length === 0) throw new Error("paramsNestedSplits must be non empty"); if (e[0].length === 0) throw new Error("Split tensors must not be scalars"); let p = e[0][0] - 1; - if (k7(s, a, p), o.length === 0) + if (aY(s, a, p), o.length === 0) throw new Error("params.rank must be nonzero"); - let u = o[0], { outSplits: l, valueSlices: c, numValues: m } = T7(s, a, r16, u), d = _7(l), f = $7(t10, o, n, c, m); + let u = o[0], { outSplits: c, valueSlices: l, numValues: m } = uY(s, a, r15, u), d = pY(c), f = lY(t10, o, n, l, m); return [d, f[0], f[1]]; } -var mE = 2147483647; -function Wf(r16, e, t10, o, n, s, a) { +var T_ = 2147483647; +function Df(r15, e, t10, o, n, s, a) { if (e.length > 1) throw new Error("starts must be a scalar or vector"); if (n.length > 1) throw new Error("limits must be a scalar or vector"); if (a.length > 1) throw new Error("deltas must be a scalar or vector"); - let i = e.length === 0, p = n.length === 0, u = a.length === 0, l = []; - i || l.push(e[0]), p || l.push(n[0]), u || l.push(a[0]); - for (let g = 1; g < l.length; ++g) - if (l[g] !== l[g - 1]) + let i = e.length === 0, p = n.length === 0, u = a.length === 0, c = []; + i || c.push(e[0]), p || c.push(n[0]), u || c.push(a[0]); + for (let g = 1; g < c.length; ++g) + if (c[g] !== c[g - 1]) throw new Error("starts, limits, and deltas must have the same shape"); - let c = l.length === 0 ? 1 : l[0], m = y.getArrayFromDType("int32", c + 1); + let l = c.length === 0 ? 1 : c[0], m = y.getArrayFromDType("int32", l + 1); m[0] = 0; - for (let g = 0; g < c; ++g) { - let x = i ? r16[0] : r16[g], b = p ? o[0] : o[g], w = u ? s[0] : s[g]; - if (w === 0) + for (let g = 0; g < l; ++g) { + let x = i ? r15[0] : r15[g], b = p ? o[0] : o[g], C = u ? s[0] : s[g]; + if (C === 0) throw new Error("Requires delta != 0"); let S; - if (w > 0 && b < x || w < 0 && b > x) + if (C > 0 && b < x || C < 0 && b > x) S = 0; - else if (S = Math.ceil(Math.abs((b - x) / w)), S > mE) - throw new Error(`Requires ((limit - start) / delta) <= ${mE}`); + else if (S = Math.ceil(Math.abs((b - x) / C)), S > T_) + throw new Error(`Requires ((limit - start) / delta) <= ${T_}`); m[g + 1] = m[g] + S; } - let d = m[c], f = y.getArrayFromDType(t10, d), h = 0; - for (let g = 0; g < c; ++g) { - let x = m[g + 1] - m[g], b = i ? r16[0] : r16[g], w = u ? s[0] : s[g]; + let d = m[l], f = y.getArrayFromDType(t10, d), h = 0; + for (let g = 0; g < l; ++g) { + let x = m[g + 1] - m[g], b = i ? r15[0] : r15[g], C = u ? s[0] : s[g]; for (let S = 0; S < x; ++S) - f[h++] = b, b += w; + f[h++] = b, b += C; } return [m, f]; } -var on = C.RowPartitionType; -var CI = class r12 { - constructor(e, t10, o, n, s, a, i, p, u, l) { - this.shape = e, this.shapeShape = t10, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = C.getRowPartitionTypesHelper(l), this.raggedRank = C.getRaggedRank(this.rowPartitionTypes); +var Do = w.RowPartitionType; +var iI = class r12 { + constructor(e, t10, o, n, s, a, i, p, u, c) { + this.shape = e, this.shapeShape = t10, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = w.getRowPartitionTypesHelper(c), this.raggedRank = w.getRaggedRank(this.rowPartitionTypes); } getRowPartitionTypeByDimension(e) { - return this.rowPartitionTypes[0] === on.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; + return this.rowPartitionTypes[0] === Do.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; } getRowPartitionTensor(e) { - return this.rowPartitionTypes[0] === on.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; + return this.rowPartitionTypes[0] === Do.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; } getMaxWidth(e) { let t10 = this.getRowPartitionTensor(e - 1); switch (this.getRowPartitionTypeByDimension(e - 1)) { - case on.VALUE_ROWIDS: + case Do.VALUE_ROWIDS: return r12.getMaxWidthValueRowID(t10); - case on.ROW_SPLITS: + case Do.ROW_SPLITS: return r12.getMaxWidthRowSplit(t10); default: - throw new Error(`Cannot handle partition type ${on[this.getRowPartitionTypeByDimension(e - 1)]}`); + throw new Error(`Cannot handle partition type ${Do[this.getRowPartitionTypeByDimension(e - 1)]}`); } } static getMaxWidthRowSplit(e) { @@ -12696,12 +12696,12 @@ var CI = class r12 { return []; throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); } - return fE(e, o); + return E_(e, o); } calculateOutputSize(e) { let t10 = this.valuesShape, o = this.defaultValueShape; - C.validateDefaultValueShape(o, t10); - let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = C.combineRaggedTensorToTensorShapes(this.raggedRank, n, t10); + w.validateDefaultValueShape(o, t10); + let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = w.combineRaggedTensorToTensorShapes(this.raggedRank, n, t10); a[0] < 0 && (a[0] = e); for (let i = 1; i <= this.raggedRank; ++i) a[i] < 0 && (a[i] = this.getMaxWidth(i)); @@ -12718,11 +12718,11 @@ var CI = class r12 { calculateOutputIndexRowSplit(e, t10, o, n) { let s = e.length, a = []; for (let i = 0; i < s - 1; ++i) { - let p = e[i + 1] - e[i], u = Math.min(n, p), l = t10[i]; - l === -1 && (u = 0); - for (let c = 0; c < u; ++c) - a.push(l), l += o; - for (let c = 0; c < p - u; ++c) + let p = e[i + 1] - e[i], u = Math.min(n, p), c = t10[i]; + c === -1 && (u = 0); + for (let l = 0; l < u; ++l) + a.push(c), c += o; + for (let l = 0; l < p - u; ++l) a.push(-1); } if (s > 0 && a.length !== e[s - 1]) @@ -12738,14 +12738,14 @@ var CI = class r12 { throw new Error(`Got currentValueRowId=${p}, which is not less than ${t10.length}`); let u = t10[p]; a.push(u); - for (let l = 1; l < s; ++l) { - let c = e[l]; - if (c === p) + for (let c = 1; c < s; ++c) { + let l = e[c]; + if (l === p) u >= 0 && (++i, i < n ? u += o : u = -1); else { - if (i = 0, p = c, c >= t10.length) - throw new Error(`Got nextValueRowId=${c} which is not less than ${t10.length}`); - u = t10[c]; + if (i = 0, p = l, l >= t10.length) + throw new Error(`Got nextValueRowId=${l} which is not less than ${t10.length}`); + u = t10[l]; } a.push(u); } @@ -12756,14 +12756,14 @@ var CI = class r12 { calculateOutputIndex(e, t10, o, n) { let s = this.getRowPartitionTensor(e), a = this.getRowPartitionTypeByDimension(e); switch (a) { - case on.VALUE_ROWIDS: + case Do.VALUE_ROWIDS: return this.calculateOutputIndexValueRowID(s, t10, o, n); - case on.ROW_SPLITS: + case Do.ROW_SPLITS: if (s.length - 1 > t10.length) throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t10.length}`); return this.calculateOutputIndexRowSplit(s, t10, o, n); default: - throw new Error(`Unsupported partition type: ${on[a]}`); + throw new Error(`Unsupported partition type: ${Do[a]}`); } } getFirstDimensionSize() { @@ -12772,14 +12772,14 @@ var CI = class r12 { throw new Error("No row_partition_types given."); let t10 = this.rowPartitionTypes[0]; switch (t10) { - case on.FIRST_DIM_SIZE: + case Do.FIRST_DIM_SIZE: return e[0]; - case on.VALUE_ROWIDS: + case Do.VALUE_ROWIDS: throw new Error("Cannot handle VALUE_ROWIDS in first dimension."); - case on.ROW_SPLITS: + case Do.ROW_SPLITS: return this.rowPartitionValuesShapes[0][0] - 1; default: - throw new Error(`Cannot handle type ${on[t10]}`); + throw new Error(`Cannot handle type ${Do[t10]}`); } } compute() { @@ -12789,7 +12789,7 @@ var CI = class r12 { n[n.length - 1] = 1; for (let p = n.length - 2; p >= 0; --p) n[p] = n[p + 1] * o[p + 1]; - let s = fE(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); + let s = E_(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); if (n[0] * o[0] > 0) { let p = this.calculateFirstParentOutputIndex(t10, n[0], o[0]); for (let u = 1; u <= this.raggedRank; ++u) @@ -12803,15 +12803,15 @@ var CI = class r12 { return; let s = this.values, a = o, i = n.slice(); i = i.slice(e + 1); - let p = y.sizeFromShape(i), u = t10.length, l = this.defaultValue; - if (l.length !== p && l.length !== 1) { + let p = y.sizeFromShape(i), u = t10.length, c = this.defaultValue; + if (c.length !== p && c.length !== 1) { let f = this.defaultValueShape; De(() => { - let h = W(l, f); - l = Oa(h, i).dataSync(); + let h = W(c, f); + c = su(h, i).dataSync(); }); } - let c = 0, m = 0, d = 0; + let l = 0, m = 0, d = 0; for (let f = 0; f <= u; ++f) { let h = f < u ? t10[f] : -1; if (h === d) { @@ -12819,8 +12819,8 @@ var CI = class r12 { continue; } if (m < d) { - let g = s.subarray(c * p), x = a.subarray(m * p), b = (d - m) * p; - dE(x, g, b); + let g = s.subarray(l * p), x = a.subarray(m * p), b = (d - m) * p; + __(x, g, b); } if (f >= u) { let g = o.length; @@ -12832,19 +12832,19 @@ var CI = class r12 { else for (; h > d; ) { let g = a.slice(d * p); - dE(g, l, p), ++d; + __(g, c, p), ++d; } - h < 0 ? (c = f + 1, m = d) : (c = f, m = d, d = m + 1); + h < 0 ? (l = f + 1, m = d) : (l = f, m = d, d = m + 1); } } }; -function dE(r16, e, t10) { +function __(r15, e, t10) { for (let o = 0; o < t10; o++) - r16[o] = e[o]; + r15[o] = e[o]; } -function fE(r16, e) { +function E_(r15, e) { let t10 = []; - for (let o of r16) { + for (let o of r15) { if (o < 0) { if (!e) throw new Error(`Dimension ${o} must be >= 0`); @@ -12856,32 +12856,32 @@ function fE(r16, e) { } return t10; } -function Uf(r16, e, t10, o, n, s, a, i, p, u) { - return new CI(r16, e, t10, o, n, s, a, i, p, u).compute(); +function Af(r15, e, t10, o, n, s, a, i, p, u) { + return new iI(r15, e, t10, o, n, s, a, i, p, u).compute(); } -function fp(r16, e, t10, o) { - let n = r16 === e, s = r16 < e && t10 < 0, a = e < r16 && t10 > 1; +function up(r15, e, t10, o) { + let n = r15 === e, s = r15 < e && t10 < 0, a = e < r15 && t10 > 1; if (n || s || a) return y.makeZerosTypedArray(0, o); - let i = Math.abs(Math.ceil((e - r16) / t10)), p = y.makeZerosTypedArray(i, o); - e < r16 && t10 === 1 && (t10 = -1), p[0] = r16; + let i = Math.abs(Math.ceil((e - r15) / t10)), p = y.makeZerosTypedArray(i, o); + e < r15 && t10 === 1 && (t10 = -1), p[0] = r15; for (let u = 1; u < p.length; u++) p[u] = p[u - 1] + t10; return p; } -var wI = Yt((r16) => 1 / Math.sqrt(r16)); -var R7 = Mr(Do, wI); -var hE = { kernelName: Do, backendName: "cpu", kernelFunc: R7 }; -function Xs(r16, e, t10, o, n, s, a, i, p, u) { - let l = [o / n, n], c = r16.values, m = e.values; +var uI = jt((r15) => 1 / Math.sqrt(r15)); +var mY = Ar(ls, uI); +var $_ = { kernelName: ls, backendName: "cpu", kernelFunc: mY }; +function zs(r15, e, t10, o, n, s, a, i, p, u) { + let c = [o / n, n], l = r15.values, m = e.values; if (o === 0) - return ie(t10, e.dtype); - let d = p instanceof Ge ? p : ie(l, e.dtype); + return me(t10, e.dtype); + let d = p instanceof tt ? p : me(c, e.dtype); typeof p == "string" || typeof p == "number" ? d.values.fill(p) : typeof p == "boolean" && d.values.fill(+p); for (let f = 0; f < s; f++) { let h = [], g = 0; for (let x = 0; x < a; x++) { - let b = c[f * a + x]; + let b = l[f * a + x]; h.push(b), g += b * i[x]; } if (g < 0 || g >= o / n) @@ -12891,46 +12891,46 @@ function Xs(r16, e, t10, o, n, s, a, i, p, u) { } return d; } -var gE = Yt((r16) => 1 / (1 + Math.exp(-r16))); -var SI = Ie(Ao, (r16) => 1 / (1 + Math.exp(-r16))); -var xE = { kernelName: Ao, backendName: "cpu", kernelFunc: SI }; -function hp(r16, e, t10, o, n) { - let s = nt.isSliceContinous(o, e, t10), a = y.sizeFromShape(t10), i = y.computeStrides(o); +var R_ = jt((r15) => 1 / (1 + Math.exp(-r15))); +var pI = Ie(bs, (r15) => 1 / (1 + Math.exp(-r15))); +var D_ = { kernelName: bs, backendName: "cpu", kernelFunc: pI }; +function pp(r15, e, t10, o, n) { + let s = pt.isSliceContinous(o, e, t10), a = y.sizeFromShape(t10), i = y.computeStrides(o); if (s) { - let c = nt.computeFlatOffset(e, i); - return n === "string" ? r16.slice(c, c + a) : r16.subarray(c, c + a); + let l = pt.computeFlatOffset(e, i); + return n === "string" ? r15.slice(l, l + a) : r15.subarray(l, l + a); } - let p = n === "string" ? C.fromUint8ToStringArray(r16) : r16, u = ie(o, n, p), l = ie(t10, n); - for (let c = 0; c < l.size; ++c) { - let m = l.indexToLoc(c), d = m.map((f, h) => f + e[h]); - l.set(u.get(...d), ...m); + let p = n === "string" ? w.fromUint8ToStringArray(r15) : r15, u = me(o, n, p), c = me(t10, n); + for (let l = 0; l < c.size; ++l) { + let m = c.indexToLoc(l), d = m.map((f, h) => f + e[h]); + c.set(u.get(...d), ...m); } - return n === "string" ? C.fromStringArrayToUint8(l.values) : l.values; + return n === "string" ? w.fromStringArrayToUint8(c.values) : c.values; } -function nn(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, size: a } = o; +function Ao(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, size: a } = o; Q(n, "slice"); - let [i, p] = nt.parseSliceParams(n, s, a); - nt.assertParamsValid(n, i, p); - let u = t10.data.get(n.dataId).values, l = hp(u, i, p, n.shape, n.dtype); - return t10.makeTensorInfo(p, n.dtype, l); -} -var yE = { kernelName: _s, backendName: "cpu", kernelFunc: nn }; -function Gf(r16, e, t10, o, n, s, a) { - let i = e[0], p = s[0], u = new Array(p), l = new Array(i), c = e[1]; + let [i, p] = pt.parseSliceParams(n, s, a); + pt.assertParamsValid(n, i, p); + let u = t10.data.get(n.dataId).values, c = pp(u, i, p, n.shape, n.dtype); + return t10.makeTensorInfo(p, n.dtype, c); +} +var A_ = { kernelName: ha, backendName: "cpu", kernelFunc: Ao }; +function Ff(r15, e, t10, o, n, s, a) { + let i = e[0], p = s[0], u = new Array(p), c = new Array(i), l = e[1]; if (p === 0) { if (i !== 0) - throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); + throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); let g = y.getArrayFromDType(t10, 0), x = y.getArrayFromDType(n, 0); - return [g, [0, c], x, u, l]; + return [g, [0, l], x, u, c]; } let m = true, d = 0, f = new Array(p).fill(0); for (let g = 0; g < i; ++g) { - let x = r16[g * c]; + let x = r15[g * l]; if (x < 0) - throw new Error(C.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); + throw new Error(w.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); if (x >= p) - throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); + throw new Error(w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); ++f[x], m = m && x >= d, d = x; } let h = true; @@ -12939,54 +12939,54 @@ function Gf(r16, e, t10, o, n, s, a) { u[g] = x, h = h && !x, f[g] = Math.max(f[g], 1), g > 0 && (f[g] += f[g - 1]); } if (h && m) { - let g = r16, x = o; + let g = r15, x = o; for (let b = 0; b < i; ++b) - l[b] = b; - return [g, [i, c], x, u, l]; + c[b] = b; + return [g, [i, l], x, u, c]; } else { - let g = f[p - 1], x = y.getArrayFromDType(t10, g * c), b = y.getArrayFromDType(n, g), w = new Array(p).fill(0); + let g = f[p - 1], x = y.getArrayFromDType(t10, g * l), b = y.getArrayFromDType(n, g), C = new Array(p).fill(0); for (let S = 0; S < i; ++S) { - let k = r16[S * c], T = w[k], E = (k === 0 ? 0 : f[k - 1]) + T; - w[k]++; - for (let R = 0; R < c; ++R) - x[E * c + R] = r16[S * c + R]; - b[E] = o[S], l[S] = E; + let k = r15[S * l], _ = C[k], $ = (k === 0 ? 0 : f[k - 1]) + _; + C[k]++; + for (let R = 0; R < l; ++R) + x[$ * l + R] = r15[S * l + R]; + b[$] = o[S], c[S] = $; } for (let S = 0; S < p; ++S) - if (w[S] === 0) { - let T = S === 0 ? 0 : f[S - 1]; - x[T * c + 0] = S; - for (let E = 1; E < c; ++E) - x[T * c + E] = 0; - b[T] = a; + if (C[S] === 0) { + let _ = S === 0 ? 0 : f[S - 1]; + x[_ * l + 0] = S; + for (let $ = 1; $ < l; ++$) + x[_ * l + $] = 0; + b[_] = a; } - return [x, [g, c], b, u, l]; + return [x, [g, l], b, u, c]; } } -function Hf(r16, e, t10, o, n) { - let s = y.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, l = -1; +function Pf(r15, e, t10, o, n) { + let s = y.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, c = -1; for (let g = 0; g < i; ++g) { let x = n[g]; if (x === -1) { - if (l !== -1) - throw new Error(C.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(l, g)); - l = g, p.push(1); + if (c !== -1) + throw new Error(w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(c, g)); + c = g, p.push(1); } else { if (x < 0) - throw new Error(C.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); + throw new Error(w.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); u *= x, p.push(x); } } - if (l !== -1) { + if (c !== -1) { if (u <= 0) - throw new Error(C.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); + throw new Error(w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); let g = Math.trunc(s / u); if (u * g !== s) - throw new Error(C.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); - p[l] = g; + throw new Error(w.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); + p[c] = g; } if (y.sizeFromShape(p) !== s) - throw new Error(C.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); + throw new Error(w.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); let m = o.length, d = []; if (m > 0) { d[m - 1] = 1; @@ -13003,69 +13003,69 @@ function Hf(r16, e, t10, o, n) { for (let g = 0; g < a; ++g) { let x = 0; for (let b = 0; b < m; ++b) - x += r16[g * m + b] * d[b]; + x += r15[g * m + b] * d[b]; for (let b = 0; b < i; ++b) h[g * i + b] = Math.trunc(x / f[b]), x %= f[b]; } return [h, [a, i], p]; } -function _l(r16, e, t10, o, n, s = false, a = 0) { - let i = o.length, p = [e[0], r16.length / e[0]], u = p[1], c = i > 0 ? n[i - 1] + 1 : 0; - if (c < 0) - throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); +function Sc(r15, e, t10, o, n, s = false, a = 0) { + let i = o.length, p = [e[0], r15.length / e[0]], u = p[1], l = i > 0 ? n[i - 1] + 1 : 0; + if (l < 0) + throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let m = e.slice(); - m[0] = c; - let d = m.reduce((w, S) => w * S, 1), f = y.getArrayFromDType(t10, d); + m[0] = l; + let d = m.reduce((C, S) => C * S, 1), f = y.getArrayFromDType(t10, d); if (i === 0) - return c > 0 && f.fill(a), [f, m]; - if (c <= 0) - throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + return l > 0 && f.fill(a), [f, m]; + if (l <= 0) + throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); let h = 0, g = 1, x = 0, b = n[h]; for (; ; ) { - let w = 0; + let C = 0; if (g < i) { - if (w = n[g], b === w) { + if (C = n[g], b === C) { ++g; continue; } - if (b >= w) - throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); + if (b >= C) + throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); } - if (b < 0 || b >= c) - throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, c)); + if (b < 0 || b >= l) + throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, l)); b > x && f.fill(a, x * u, b * u); for (let S = h; S < g; ++S) { let k = o[S]; if (k < 0 || k >= p[0]) - throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); - for (let T = 0; T < u; T++) - f[b * u + T] += r16[k * u + T]; + throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); + for (let _ = 0; _ < u; _++) + f[b * u + _] += r15[k * u + _]; } if (s) for (let S = 0; S < u; S++) f[b * u + S] /= g - h; - if (h = g, ++g, x = b + 1, b = w, g > i) + if (h = g, ++g, x = b + 1, b = C, g > i) break; } - return x < c && f.fill(a, x * u, c * u), [f, m]; + return x < l && f.fill(a, x * u, l * u), [f, m]; } -var bE = Yt((r16) => Math.sqrt(r16)); -var D7 = Ie(Fo, (r16) => Math.sqrt(r16)); -var CE = { kernelName: Fo, backendName: "cpu", kernelFunc: D7 }; -var II = Ve((r16, e) => { - let t10 = r16 - e; +var F_ = jt((r15) => Math.sqrt(r15)); +var dY = Ie(ws, (r15) => Math.sqrt(r15)); +var P_ = { kernelName: ws, backendName: "cpu", kernelFunc: dY }; +var cI = Ve((r15, e) => { + let t10 = r15 - e; return t10 * t10; }); -var A7 = Qe(Po, II); -var wE = { kernelName: Po, backendName: "cpu", kernelFunc: A7 }; -var vI = Yt((r16, e) => { +var fY = Ye(ks, cI); +var O_ = { kernelName: ks, backendName: "cpu", kernelFunc: fY }; +var lI = jt((r15, e) => { let { pattern: t10, replaceGlobal: o, rewrite: n } = e; - return r16.replace(new RegExp(t10, o ? "g" : ""), n); + return r15.replace(new RegExp(t10, o ? "g" : ""), n); }); -var F7 = Mr(pi, vI); -var SE = { kernelName: pi, backendName: "cpu", kernelFunc: F7 }; -function Kf(r16, e, t10, o) { - let n = ie(r16, e.dtype); +var hY = Ar(Ru, lI); +var M_ = { kernelName: Ru, backendName: "cpu", kernelFunc: hY }; +function Of(r15, e, t10, o) { + let n = me(r15, e.dtype); for (let s = 0; s < n.size; s++) { let a = n.indexToLoc(s), i = new Array(a.length); for (let p = 0; p < i.length; p++) @@ -13074,7 +13074,7 @@ function Kf(r16, e, t10, o) { } return n; } -var kI = class { +var mI = class { constructor(e, t10, o, n, s, a) { this.separator = y.encodeString(e), this.nGramWidths = t10, this.leftPad = y.encodeString(o), this.rightPad = y.encodeString(n), this.padWidth = s, this.preserveShort = a; } @@ -13087,24 +13087,24 @@ var kI = class { } createNGrams(e, t10, o, n, s, a) { for (let i = 0; i < s; ++i) { - let p = this.getPadWidth(a), u = Math.max(0, p - i), l = Math.max(0, p - (s - (i + 1))), c = a - (u + l), m = t10 + (u > 0 ? 0 : i - p), d = 0; + let p = this.getPadWidth(a), u = Math.max(0, p - i), c = Math.max(0, p - (s - (i + 1))), l = a - (u + c), m = t10 + (u > 0 ? 0 : i - p), d = 0; d += u * this.leftPad.length; - for (let b = 0; b < c; ++b) + for (let b = 0; b < l; ++b) d += e[m + b].length; - d += l * this.rightPad.length; - let f = u + l + c - 1; + d += c * this.rightPad.length; + let f = u + c + l - 1; d += f * this.separator.length, o[n + i] = new Uint8Array(d); - let h = o[n + i], g = 0, x = (b) => b.forEach((w) => h[g++] = w); + let h = o[n + i], g = 0, x = (b) => b.forEach((C) => h[g++] = C); for (let b = 0; b < u; ++b) x(this.leftPad), x(this.separator); - for (let b = 0; b < c - 1; ++b) + for (let b = 0; b < l - 1; ++b) x(e[m + b]), x(this.separator); - if (c > 0) { - x(e[m + c - 1]); - for (let b = 0; b < l; ++b) + if (l > 0) { + x(e[m + l - 1]); + for (let b = 0; b < c; ++b) x(this.separator), x(this.rightPad); } else { - for (let b = 0; b < l - 1; ++b) + for (let b = 0; b < c - 1; ++b) x(this.rightPad), x(this.separator); x(this.rightPad); } @@ -13117,8 +13117,8 @@ var kI = class { if (p !== 0) throw new Error(`First split value must be 0, got ${p}`); for (let u = 1; u < n; ++u) { - let l = t10[u] >= p; - if (l = l && t10[u] <= o, !l) + let c = t10[u] >= p; + if (c = c && t10[u] <= o, !c) throw new Error(`Invalid split value ${t10[u]}, must be in [${p}, ${o}]`); p = t10[u]; } @@ -13134,142 +13134,142 @@ var kI = class { } a[0] = 0; for (let p = 1; p <= s; ++p) { - let u = t10[p] - t10[p - 1], l = 0; - this.nGramWidths.forEach((c) => { - l += this.getNumNGrams(u, c); - }), this.preserveShort && u > 0 && l === 0 && (l = 1), a[p] = a[p - 1] + l; + let u = t10[p] - t10[p - 1], c = 0; + this.nGramWidths.forEach((l) => { + c += this.getNumNGrams(u, l); + }), this.preserveShort && u > 0 && c === 0 && (c = 1), a[p] = a[p - 1] + c; } let i = new Array(a[s]); for (let p = 0; p < s; ++p) { - let u = t10[p], l = a[p]; - if (this.nGramWidths.forEach((c) => { - let m = t10[p + 1] - t10[p], d = this.getNumNGrams(m, c); - this.createNGrams(e, u, i, l, d, c), l += d; - }), this.preserveShort && l === a[p]) { - let c = t10[p + 1] - t10[p]; - if (c === 0) + let u = t10[p], c = a[p]; + if (this.nGramWidths.forEach((l) => { + let m = t10[p + 1] - t10[p], d = this.getNumNGrams(m, l); + this.createNGrams(e, u, i, c, d, l), c += d; + }), this.preserveShort && c === a[p]) { + let l = t10[p + 1] - t10[p]; + if (l === 0) continue; - let m = c + 2 * this.padWidth; - this.createNGrams(e, u, i, l, 1, m); + let m = l + 2 * this.padWidth; + this.createNGrams(e, u, i, c, 1, m); } } return [i, a]; } }; -function gp(r16, e, t10, o, n, s, a, i) { - return new kI(t10, o, n, s, a, i).compute(r16, e); +function cp(r15, e, t10, o, n, s, a, i) { + return new mI(t10, o, n, s, a, i).compute(r15, e); } -function P7(r16, e, t10, o) { - if (!r16.length) +function gY(r15, e, t10, o) { + if (!r15.length) return; if (e.length === 0) { - for (let s = 0; s < r16.length; ++s) - o.push(r16.subarray(s, s + 1)); + for (let s = 0; s < r15.length; ++s) + o.push(r15.subarray(s, s + 1)); return; } if (e.length === 1) { - let s = e[0], a = r16.indexOf(s); + let s = e[0], a = r15.indexOf(s); for (; a !== -1; ) { - let i = r16.subarray(0, a); - (!t10 || i.length !== 0) && o.push(i), r16 = r16.subarray(a + 1), a = r16.indexOf(s); + let i = r15.subarray(0, a); + (!t10 || i.length !== 0) && o.push(i), r15 = r15.subarray(a + 1), a = r15.indexOf(s); } - (!t10 || r16.length !== 0) && o.push(r16); + (!t10 || r15.length !== 0) && o.push(r15); return; } let n = 0; - for (let s = 0; s < r16.length + 1; s++) - if (s === r16.length || e.indexOf(r16[s]) !== -1) { - let a = r16.subarray(n, s); + for (let s = 0; s < r15.length + 1; s++) + if (s === r15.length || e.indexOf(r15[s]) !== -1) { + let a = r15.subarray(n, s); (!t10 || a.length !== 0) && o.push(a), n = s + 1; } } -function xp(r16, e, t10) { - let o = r16.length, n = [], s = 0, a = 0, i = new Array(o); +function lp(r15, e, t10) { + let o = r15.length, n = [], s = 0, a = 0, i = new Array(o); for (let m = 0; m < o; ++m) { let d = n.length; - P7(r16[m], e, t10, n); + gY(r15[m], e, t10, n); let f = n.length - d; i[m] = f, s += f, a = Math.max(a, f); } - let p = y.getArrayFromDType("int32", s * 2), u = new Array(s), l = [o, a], c = 0; + let p = y.getArrayFromDType("int32", s * 2), u = new Array(s), c = [o, a], l = 0; for (let m = 0; m < o; ++m) for (let d = 0; d < i[m]; ++d) - p[c * 2] = m, p[c * 2 + 1] = d, u[c] = n[c], ++c; - return [p, u, l]; + p[l * 2] = m, p[l * 2 + 1] = d, u[l] = n[l], ++l; + return [p, u, c]; } -function yp(r16, e) { - let t10 = y.getArrayFromDType("int32", r16.length); - for (let o = 0; o < r16.length; ++o) - t10[o] = y.fingerPrint64(r16[o]).modulo(e).getLowBitsUnsigned(); +function mp(r15, e) { + let t10 = y.getArrayFromDType("int32", r15.length); + for (let o = 0; o < r15.length; ++o) + t10[o] = y.fingerPrint64(r15[o]).modulo(e).getLowBitsUnsigned(); return t10; } -var NI = Ve((r16, e) => r16 - e); -var O7 = kl((r16, e, t10, o) => ({ real: r16 - t10, imag: e - o })); -var jc = Qe(Oo, NI, O7); -var IE = { kernelName: Oo, backendName: "cpu", kernelFunc: jc }; -function qf(r16, e) { - let t10 = new Array(r16.rank); +var dI = Ve((r15, e) => r15 - e); +var xY = bc((r15, e, t10, o) => ({ real: r15 - t10, imag: e - o })); +var Vl = Ye(Ts, dI, xY); +var L_ = { kernelName: Ts, backendName: "cpu", kernelFunc: Vl }; +function Mf(r15, e) { + let t10 = new Array(r15.rank); for (let n = 0; n < t10.length; n++) - t10[n] = r16.shape[n] * e[n]; - let o = ie(t10, r16.dtype); + t10[n] = r15.shape[n] * e[n]; + let o = me(t10, r15.dtype); for (let n = 0; n < o.values.length; ++n) { - let s = o.indexToLoc(n), a = new Array(r16.rank); + let s = o.indexToLoc(n), a = new Array(r15.rank); for (let p = 0; p < a.length; p++) - a[p] = s[p] % r16.shape[p]; - let i = r16.locToIndex(a); - o.values[n] = r16.values[i]; + a[p] = s[p] % r15.shape[p]; + let i = r15.locToIndex(a); + o.values[n] = r15.values[i]; } return o; } -var Xc = (r16, e) => { - let t10 = e.value - r16.value; - return t10 === 0 ? r16.index - e.index : t10; +var Wl = (r15, e) => { + let t10 = e.value - r15.value; + return t10 === 0 ? r15.index - e.index : t10; }; -function vE(r16, e, t10 = 0, o = r16.length - 1) { +function B_(r15, e, t10 = 0, o = r15.length - 1) { for (; o > t10; ) { if (o - t10 > 600) { - let i = o - t10 + 1, p = e - t10 + 1, u = Math.log(i), l = 0.5 * Math.exp(2 * u / 3), c = 0.5 * Math.sqrt(u * l * (i - l) / i) * Math.sign(p - i / 2), m = Math.max(t10, Math.floor(e - p * l / i + c)), d = Math.min(o, Math.floor(e + (i - p) * l / i + c)); - vE(r16, e, m, d); + let i = o - t10 + 1, p = e - t10 + 1, u = Math.log(i), c = 0.5 * Math.exp(2 * u / 3), l = 0.5 * Math.sqrt(u * c * (i - c) / i) * Math.sign(p - i / 2), m = Math.max(t10, Math.floor(e - p * c / i + l)), d = Math.min(o, Math.floor(e + (i - p) * c / i + l)); + B_(r15, e, m, d); } - let n = r16[e], s = t10, a = o; - for (y.swap(r16, t10, e), Xc(r16[o], n) > 0 && y.swap(r16, t10, o); s < a; ) { - for (y.swap(r16, s, a), s++, a--; Xc(r16[s], n) < 0; ) + let n = r15[e], s = t10, a = o; + for (y.swap(r15, t10, e), Wl(r15[o], n) > 0 && y.swap(r15, t10, o); s < a; ) { + for (y.swap(r15, s, a), s++, a--; Wl(r15[s], n) < 0; ) s = s + 1; - for (; Xc(r16[a], n) > 0; ) + for (; Wl(r15[a], n) > 0; ) a = a - 1; } - Xc(r16[t10], n) === 0 ? y.swap(r16, t10, a) : (a = a + 1, y.swap(r16, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); + Wl(r15[t10], n) === 0 ? y.swap(r15, t10, a) : (a = a + 1, y.swap(r15, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); } } -function jf(r16, e, t10, o, n) { - let s = e[e.length - 1], [a, i] = [r16.length / s, s], p = y.getTypedArrayFromDType(t10, a * o), u = y.getTypedArrayFromDType("int32", a * o); - for (let c = 0; c < a; c++) { - let m = c * i, d = r16.subarray(m, m + i), f = new Array(d.length); - d.forEach((b, w) => f[w] = { value: b, index: w }), o < f.length && (vE(f, o), f = f.slice(0, o)), n && f.sort(Xc); - let h = c * o, g = p.subarray(h, h + o), x = u.subarray(h, h + o); +function Lf(r15, e, t10, o, n) { + let s = e[e.length - 1], [a, i] = [r15.length / s, s], p = y.getTypedArrayFromDType(t10, a * o), u = y.getTypedArrayFromDType("int32", a * o); + for (let l = 0; l < a; l++) { + let m = l * i, d = r15.subarray(m, m + i), f = new Array(d.length); + d.forEach((b, C) => f[C] = { value: b, index: C }), o < f.length && (B_(f, o), f = f.slice(0, o)), n && f.sort(Wl); + let h = l * o, g = p.subarray(h, h + o), x = u.subarray(h, h + o); for (let b = 0; b < o; b++) g[b] = f[b].value, x[b] = f[b].index; } - let l = e.slice(); - return l[l.length - 1] = o, [ie(l, t10, p), ie(l, "int32", u)]; + let c = e.slice(); + return c[c.length - 1] = o, [me(c, t10, p), me(c, "int32", u)]; } -function bp(r16, e, t10, o) { +function dp(r15, e, t10, o) { let n = y.parseAxisParam(e, t10)[0], s = [1, t10[0], 1]; for (let f = 0; f < n; f++) s[0] *= t10[f]; s[1] = t10[n]; for (let f = n + 1; f < t10.length; f++) s[2] *= t10[f]; - let a = /* @__PURE__ */ new Map(), i = new Int32Array(t10[n]), p = new Ge(s, o, r16), u = [], l = s[0] === 1 && s[2] === 1; + let a = /* @__PURE__ */ new Map(), i = new Int32Array(t10[n]), p = new tt(s, o, r15), u = [], c = s[0] === 1 && s[2] === 1; for (let f = 0; f < t10[n]; f++) { let h; - if (l) - h = r16[f].toString(); + if (c) + h = r15[f].toString(); else { let x = []; for (let b = 0; b < s[0]; b++) - for (let w = 0; w < s[2]; w++) - x.push(p.get(b, f, w)); + for (let C = 0; C < s[2]; C++) + x.push(p.get(b, f, C)); h = x.join(","); } let g = a.get(h); @@ -13280,116 +13280,116 @@ function bp(r16, e, t10, o) { a.set(h, x), i[f] = x, u.push(f); } } - let c = s.slice(); - c[1] = a.size; - let m = new Ge(c, o); + let l = s.slice(); + l[1] = a.size; + let m = new tt(l, o); u.forEach((f, h) => { for (let g = 0; g < s[0]; g++) for (let x = 0; x < s[2]; x++) m.set(p.get(g, f, x), g, h, x); }); let d = t10.slice(); - return d[n] = c[1], { outputValues: m.values, outputShape: d, indices: i }; -} -var M7 = "4.17.0"; -pu("cpu", () => new Il(), 1); -var TI = Ie(Wn, (r16) => r16 >= 0 ? r16 : Math.exp(r16) - 1); -var kE = { kernelName: Wn, backendName: "cpu", kernelFunc: TI }; -function _I(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { alpha: s } = o; + return d[n] = l[1], { outputValues: m.values, outputShape: d, indices: i }; +} +var yY = "4.17.0"; +tu("cpu", () => new xc(), 1); +var fI = Ie(hn, (r15) => r15 >= 0 ? r15 : Math.exp(r15) - 1); +var z_ = { kernelName: hn, backendName: "cpu", kernelFunc: fI }; +function hI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { alpha: s } = o; Q([n], "leakyRelu"); let a = y.sizeFromShape(n.shape), i = t10.data.get(n.dataId).values, p = y.getTypedArrayFromDType("float32", a); for (let u = 0; u < i.length; u++) p[u] = i[u] < 0 ? s * i[u] : i[u]; return t10.makeTensorInfo(n.shape, "float32", p); } -var NE = { kernelName: Yn, backendName: "cpu", kernelFunc: _I }; -var L7 = Ve((r16, e) => r16 < 0 ? e * r16 : r16); -function EI(r16) { - let { inputs: e, backend: t10 } = r16, { x: o, alpha: n } = e; +var V_ = { kernelName: $n, backendName: "cpu", kernelFunc: hI }; +var bY = Ve((r15, e) => r15 < 0 ? e * r15 : r15); +function gI(r15) { + let { inputs: e, backend: t10 } = r15, { x: o, alpha: n } = e; Q([o, n], "prelu"); - let s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, [i, p] = L7(o.shape, n.shape, s, a, "float32"); + let s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, [i, p] = bY(o.shape, n.shape, s, a, "float32"); return t10.makeTensorInfo(p, "float32", i); } -var TE = { kernelName: gs, backendName: "cpu", kernelFunc: EI }; -var $I = Ie(ys, (r16) => Math.max(0, r16)); -var _E = { kernelName: ys, backendName: "cpu", kernelFunc: $I }; -var RI = Ie(ws, (r16) => Math.min(Math.max(0, r16), 6)); -var EE = { kernelName: ws, backendName: "cpu", kernelFunc: RI }; -function Cp(r16, e, t10, o, n) { +var W_ = { kernelName: rs, backendName: "cpu", kernelFunc: gI }; +var xI = Ie(ss, (r15) => Math.max(0, r15)); +var U_ = { kernelName: ss, backendName: "cpu", kernelFunc: xI }; +var yI = Ie(us, (r15) => Math.min(Math.max(0, r15), 6)); +var G_ = { kernelName: us, backendName: "cpu", kernelFunc: yI }; +function fp(r15, e, t10, o, n) { if (t10 === "linear") - return fr({ inputs: { x: e }, backend: r16 }); + return lr({ inputs: { x: e }, backend: r15 }); if (t10 === "relu") - return $I({ inputs: { x: e }, backend: r16 }); + return xI({ inputs: { x: e }, backend: r15 }); if (t10 === "elu") - return TI({ inputs: { x: e }, backend: r16 }); + return fI({ inputs: { x: e }, backend: r15 }); if (t10 === "relu6") - return RI({ inputs: { x: e }, backend: r16 }); + return yI({ inputs: { x: e }, backend: r15 }); if (t10 === "prelu") - return EI({ inputs: { x: e, alpha: o }, backend: r16 }); + return gI({ inputs: { x: e, alpha: o }, backend: r15 }); if (t10 === "leakyrelu") - return _I({ inputs: { x: e }, backend: r16, attrs: { alpha: n } }); + return hI({ inputs: { x: e }, backend: r15, attrs: { alpha: n } }); if (t10 === "sigmoid") - return SI({ inputs: { x: e }, backend: r16 }); + return pI({ inputs: { x: e }, backend: r15 }); throw new Error(`Activation ${t10} has not been implemented for the CPU backend.`); } -function We(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { shape: s } = o, a = y.sizeFromShape(n.shape), i = y.inferFromImplicitShape(s, a), p = y.sizeFromShape(i); +function We(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { shape: s } = o, a = y.sizeFromShape(n.shape), i = y.inferFromImplicitShape(s, a), p = y.sizeFromShape(i); y.assert(a === p, () => `The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`), t10.incRef(n.dataId); let u = t10.data.get(n.dataId); if (u.complexTensorInfos != null) { - let l = u.complexTensorInfos.real, c = u.complexTensorInfos.imag; - l.shape = i, c.shape = i; + let c = u.complexTensorInfos.real, l = u.complexTensorInfos.imag; + c.shape = i, l.shape = i; } return { dataId: n.dataId, shape: i, dtype: n.dtype }; } -var $E = { kernelName: Ca, backendName: "cpu", kernelFunc: We }; -function DI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; +var H_ = { kernelName: da, backendName: "cpu", kernelFunc: We }; +function bI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; Q([n, s], "matMul"); - let p = n.shape.length, u = s.shape.length, l = a ? n.shape[p - 2] : n.shape[p - 1], c = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), w = kr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); - y.assert(l === c, () => `Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); - let S = a ? [g, l, m] : [g, m, l], k = i ? [x, d, c] : [x, c, d], T = We({ inputs: { x: n }, backend: t10, attrs: { shape: S } }), E = We({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = a ? T.shape[1] : T.shape[2], D = a ? T.shape[2] : T.shape[1], F = i ? E.shape[1] : E.shape[2], O = Math.max(g, x), M = t10.data.get(T.dataId).values, L = t10.data.get(E.dataId).values, B = y.computeStrides(T.shape), z = y.computeStrides(E.shape), [U, j, q] = a ? [B[0], 1, B[1]] : [B[0], B[1], 1], [Y, J, re] = i ? [1, z[1], z[0]] : [z[1], 1, z[0]], ne = D * F, ee = ie([O, D, F], T.dtype), oe = ee.values, ue = t10.blockSize; - for (let me = 0; me < O; me++) { - let be = me % g, _e = me % x; - for (let ve = 0; ve < D; ve += ue) { - let Fe = Math.min(ve + ue, D); - for (let Pe = 0; Pe < F; Pe += ue) { - let at = Math.min(Pe + ue, F); - for (let ct = 0; ct < R; ct += ue) { - let Ke = Math.min(ct + ue, R); - for (let mt = ve; mt < Fe; mt++) - for (let ut = Pe; ut < at; ut++) { - let gt = 0; - for (let xt = ct; xt < Ke; xt++) { - let Ur = M[be * U + mt * j + xt * q], Bt = L[xt * Y + ut * J + _e * re]; - gt += Ur * Bt; + let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), C = Sr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + y.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); + let S = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = We({ inputs: { x: n }, backend: t10, attrs: { shape: S } }), $ = We({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = a ? _.shape[1] : _.shape[2], D = a ? _.shape[2] : _.shape[1], P = i ? $.shape[1] : $.shape[2], O = Math.max(g, x), M = t10.data.get(_.dataId).values, L = t10.data.get($.dataId).values, B = y.computeStrides(_.shape), z = y.computeStrides($.shape), [U, j, q] = a ? [B[0], 1, B[1]] : [B[0], B[1], 1], [Y, J, re] = i ? [1, z[1], z[0]] : [z[1], 1, z[0]], ne = D * P, ee = me([O, D, P], _.dtype), oe = ee.values, ie = t10.blockSize; + for (let le = 0; le < O; le++) { + let be = le % g, _e = le % x; + for (let ve = 0; ve < D; ve += ie) { + let Fe = Math.min(ve + ie, D); + for (let Pe = 0; Pe < P; Pe += ie) { + let st = Math.min(Pe + ie, P); + for (let ct = 0; ct < R; ct += ie) { + let He = Math.min(ct + ie, R); + for (let lt = ve; lt < Fe; lt++) + for (let it = Pe; it < st; it++) { + let ht = 0; + for (let gt = ct; gt < He; gt++) { + let Lr = M[be * U + lt * j + gt * q], Mt = L[gt * Y + it * J + _e * re]; + ht += Lr * Mt; } - oe[me * ne + (mt * F + ut)] += gt; + oe[le * ne + (lt * P + it)] += ht; } } } } } - return t10.disposeIntermediateTensorInfo(T), t10.disposeIntermediateTensorInfo(E), t10.makeTensorInfo(w, ee.dtype, ee.values); + return t10.disposeIntermediateTensorInfo(_), t10.disposeIntermediateTensorInfo($), t10.makeTensorInfo(C, ee.dtype, ee.values); } -var RE = { kernelName: Nn, backendName: "cpu", kernelFunc: DI }; -function B7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: l, leakyreluAlpha: c } = o, m, d, f, h = []; - m = DI({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: t10 }), a && (d = Wa({ inputs: { a: m, b: a }, backend: t10 }), h.push(m), m = d), l && (f = Cp(t10, m, l, i, c), h.push(m), m = f); +var K_ = { kernelName: Zo, backendName: "cpu", kernelFunc: bI }; +function CY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m, d, f, h = []; + m = bI({ inputs: { a: n, b: s }, attrs: { transposeA: p, transposeB: u }, backend: t10 }), a && (d = Pa({ inputs: { a: m, b: a }, backend: t10 }), h.push(m), m = d), c && (f = fp(t10, m, c, i, l), h.push(m), m = f); for (let x of h) t10.disposeIntermediateTensorInfo(x); return m; } -var DE = { kernelName: qo, backendName: "cpu", kernelFunc: B7 }; -var z7 = Ie(hn, (r16) => Math.acos(r16)); -var AE = { kernelName: hn, backendName: "cpu", kernelFunc: z7 }; -var V7 = Ie(gn, (r16) => Math.acosh(r16)); -var FE = { kernelName: gn, backendName: "cpu", kernelFunc: V7 }; -function W7(r16) { - let { inputs: e, backend: t10 } = r16, o = e; +var q_ = { kernelName: So, backendName: "cpu", kernelFunc: CY }; +var wY = Ie(Vo, (r15) => Math.acos(r15)); +var j_ = { kernelName: Vo, backendName: "cpu", kernelFunc: wY }; +var SY = Ie(Wo, (r15) => Math.acosh(r15)); +var X_ = { kernelName: Wo, backendName: "cpu", kernelFunc: SY }; +function IY(r15) { + let { inputs: e, backend: t10 } = r15, o = e; Q(e, "addN"); - let n = o.map((i) => t10.data.get(i.dataId).values), s = ie(o[0].shape, o[0].dtype), a = s.values; + let n = o.map((i) => t10.data.get(i.dataId).values), s = me(o[0].shape, o[0].dtype), a = s.values; for (let i = 0; i < o.length; i++) { let p = n[i]; for (let u = 0; u < a.length; u++) @@ -13397,176 +13397,176 @@ function W7(r16) { } return t10.makeTensorInfo(s.shape, s.dtype, s.values); } -var PE = { kernelName: xn, backendName: "cpu", kernelFunc: W7 }; -function U7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; +var Y_ = { kernelName: Uo, backendName: "cpu", kernelFunc: IY }; +function vY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "all"); - let i = y.parseAxisParam(s, n.shape), p = i, u = C.getAxesPermutation(p, n.shape.length), l = n; - u != null && (l = vt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = C.getInnerMostAxes(p.length, n.shape.length)), C.assertAxesAreInnerMostDims("all", p, l.shape.length); - let [c, m] = C.computeOutAndReduceShapes(l.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(c), l.dtype), h = t10.data.get(l.dataId).values; + let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = St({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("all", p, c.shape.length); + let [l, m] = w.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { - let b = x * d, w = h[b]; + let b = x * d, C = h[b]; for (let S = 0; S < d; ++S) { let k = h[b + S]; - w = w && k; + C = C && k; } - f[x] = w; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(l); - let g = t10.makeTensorInfo(c, l.dtype, f); + u != null && t10.disposeIntermediateTensorInfo(c); + let g = t10.makeTensorInfo(l, c.dtype, f); if (a) { - let x = C.expandShapeToKeepDim(c, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); + let x = w.expandShapeToKeepDim(l, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); return t10.disposeIntermediateTensorInfo(g), b; } return g; } -var OE = { kernelName: yn, backendName: "cpu", kernelFunc: U7 }; -function G7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; +var Q_ = { kernelName: Go, backendName: "cpu", kernelFunc: vY }; +function kY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "any"); - let i = y.parseAxisParam(s, n.shape), p = i, u = C.getAxesPermutation(p, n.shape.length), l = n; - u != null && (l = vt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = C.getInnerMostAxes(p.length, n.shape.length)), C.assertAxesAreInnerMostDims("any", p, l.shape.length); - let [c, m] = C.computeOutAndReduceShapes(l.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(c), l.dtype), h = t10.data.get(l.dataId).values; + let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = St({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("any", p, c.shape.length); + let [l, m] = w.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { - let b = x * d, w = h[b]; + let b = x * d, C = h[b]; for (let S = 0; S < d; ++S) { let k = h[b + S]; - w = w || k; + C = C || k; } - f[x] = w; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(l); - let g = t10.makeTensorInfo(c, l.dtype, f); + u != null && t10.disposeIntermediateTensorInfo(c); + let g = t10.makeTensorInfo(l, c.dtype, f); if (a) { - let x = C.expandShapeToKeepDim(c, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); + let x = w.expandShapeToKeepDim(l, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); return t10.disposeIntermediateTensorInfo(g), b; } return g; } -var ME = { kernelName: bn, backendName: "cpu", kernelFunc: G7 }; -function H7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o; +var Z_ = { kernelName: Ho, backendName: "cpu", kernelFunc: kY }; +function NY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o; Q(n, "argMax"); - let a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = vt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], C.assertAxesAreInnerMostDims("argMax", a, p.shape.length); - let [l, c] = C.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(l), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(c), h = t10.data.get(p.dataId).values; + let a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = St({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], w.assertAxesAreInnerMostDims("argMax", a, p.shape.length); + let [c, l] = w.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(c), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(l), h = t10.data.get(p.dataId).values; for (let g = 0; g < d.length; ++g) { - let x = g * f, b = h[x], w = 0; + let x = g * f, b = h[x], C = 0; for (let S = 0; S < f; ++S) { let k = h[x + S]; - k > b && (b = k, w = S); + k > b && (b = k, C = S); } - d[g] = w; + d[g] = C; } - return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(l, "int32", d); + return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(c, "int32", d); } -var LE = { kernelName: na, backendName: "cpu", kernelFunc: H7 }; -function K7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o; +var J_ = { kernelName: Ys, backendName: "cpu", kernelFunc: NY }; +function TY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o; Q(n, "argMin"); - let a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = vt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], C.assertAxesAreInnerMostDims("argMin", a, p.shape.length); - let [l, c] = C.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(l), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(c), h = t10.data.get(p.dataId).values; + let a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = St({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), a = [a[0]], w.assertAxesAreInnerMostDims("argMin", a, p.shape.length); + let [c, l] = w.computeOutAndReduceShapes(p.shape, a), m = y.sizeFromShape(c), d = y.makeZerosTypedArray(m, "int32"), f = y.sizeFromShape(l), h = t10.data.get(p.dataId).values; for (let g = 0; g < d.length; ++g) { - let x = g * f, b = h[x], w = 0; + let x = g * f, b = h[x], C = 0; for (let S = 0; S < f; ++S) { let k = h[x + S]; - k < b && (b = k, w = S); - } - d[g] = w; - } - return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(l, "int32", d); -} -var BE = { kernelName: sa, backendName: "cpu", kernelFunc: K7 }; -var q7 = Ie(Cn, (r16) => Math.asin(r16)); -var zE = { kernelName: Cn, backendName: "cpu", kernelFunc: q7 }; -var j7 = Ie(wn, (r16) => Math.asinh(r16)); -var VE = { kernelName: wn, backendName: "cpu", kernelFunc: j7 }; -var X7 = Ie(Sn, (r16) => Math.atan(r16)); -var WE = { kernelName: Sn, backendName: "cpu", kernelFunc: X7 }; -var Y7 = Ve((r16, e) => Math.atan2(r16, e)); -var Q7 = Qe(vn, Y7); -var UE = { kernelName: vn, backendName: "cpu", kernelFunc: Q7 }; -var Z7 = Ie(In, (r16) => Math.atanh(r16)); -var GE = { kernelName: In, backendName: "cpu", kernelFunc: Z7 }; -function El(r16, e, t10, o, n, s) { - let a = n.strideHeight, i = n.strideWidth, p = n.dilationHeight, u = n.dilationWidth, l = n.effectiveFilterHeight, c = n.effectiveFilterWidth, m = n.padInfo.top, d = n.padInfo.left, f = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, h = ie(n.outShape, t10), g = h.values, x = n.outShape[1] * n.outShape[2] * n.outShape[3], b = n.outShape[2] * n.outShape[3], w = n.outShape[3]; + k < b && (b = k, C = S); + } + d[g] = C; + } + return u.forEach((g) => t10.disposeIntermediateTensorInfo(g)), t10.makeTensorInfo(c, "int32", d); +} +var eE = { kernelName: Qs, backendName: "cpu", kernelFunc: TY }; +var _Y = Ie(Ko, (r15) => Math.asin(r15)); +var tE = { kernelName: Ko, backendName: "cpu", kernelFunc: _Y }; +var EY = Ie(qo, (r15) => Math.asinh(r15)); +var rE = { kernelName: qo, backendName: "cpu", kernelFunc: EY }; +var $Y = Ie(jo, (r15) => Math.atan(r15)); +var oE = { kernelName: jo, backendName: "cpu", kernelFunc: $Y }; +var RY = Ve((r15, e) => Math.atan2(r15, e)); +var DY = Ye(Yo, RY); +var nE = { kernelName: Yo, backendName: "cpu", kernelFunc: DY }; +var AY = Ie(Xo, (r15) => Math.atanh(r15)); +var sE = { kernelName: Xo, backendName: "cpu", kernelFunc: AY }; +function vc(r15, e, t10, o, n, s) { + let a = n.strideHeight, i = n.strideWidth, p = n.dilationHeight, u = n.dilationWidth, c = n.effectiveFilterHeight, l = n.effectiveFilterWidth, m = n.padInfo.top, d = n.padInfo.left, f = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, h = me(n.outShape, t10), g = h.values, x = n.outShape[1] * n.outShape[2] * n.outShape[3], b = n.outShape[2] * n.outShape[3], C = n.outShape[3]; for (let S = 0; S < n.batchSize; ++S) { - let k = S * x, T = S * o[0]; - for (let E = 0; E < n.inChannels; ++E) + let k = S * x, _ = S * o[0]; + for (let $ = 0; $ < n.inChannels; ++$) for (let R = 0; R < n.outHeight; ++R) { - let D = R * a - m, F = Math.max(0, D), O = Math.min(n.inHeight, l + D), M = k + R * b; + let D = R * a - m, P = Math.max(0, D), O = Math.min(n.inHeight, c + D), M = k + R * b; for (let L = 0; L < n.outWidth; ++L) { - let B = L * i - d, z = Math.max(0, B), U = Math.min(n.inWidth, c + B), j = f, q = 0, Y = 0; - for (let re = F; re < O; re += p) { - let ne = T + re * o[1]; + let B = L * i - d, z = Math.max(0, B), U = Math.min(n.inWidth, l + B), j = f, q = 0, Y = 0; + for (let re = P; re < O; re += p) { + let ne = _ + re * o[1]; for (let ee = z; ee < U; ee += u) { - let oe = ne + ee * o[2], ue = r16[oe + E]; - s === "max" && ue > j ? j = ue : s === "avg" && (q += ue, Y++); + let oe = ne + ee * o[2], ie = r15[oe + $]; + s === "max" && ie > j ? j = ie : s === "avg" && (q += ie, Y++); } if (isNaN(j)) break; } - let J = M + L * w + E; + let J = M + L * C + $; g[J] = s === "avg" ? q / Y : j; } } } return h; } -function Yf(r16, e, t10, o, n = false, s = false) { - let a = ie(o.outShape, "int32"), i = o.strideHeight, p = o.strideWidth, u = o.dilationHeight, l = o.dilationWidth, c = o.effectiveFilterHeight, m = o.effectiveFilterWidth, d = o.padInfo.top, f = o.padInfo.left, h = ie(e, t10, r16); +function Bf(r15, e, t10, o, n = false, s = false) { + let a = me(o.outShape, "int32"), i = o.strideHeight, p = o.strideWidth, u = o.dilationHeight, c = o.dilationWidth, l = o.effectiveFilterHeight, m = o.effectiveFilterWidth, d = o.padInfo.top, f = o.padInfo.left, h = me(e, t10, r15); for (let g = 0; g < o.batchSize; ++g) for (let x = 0; x < o.inChannels; ++x) for (let b = 0; b < o.outHeight; ++b) { - let w = b * i - d, S = w; + let C = b * i - d, S = C; for (; S < 0; ) S += u; - let k = Math.min(o.inHeight, c + w); - for (let T = 0; T < o.outWidth; ++T) { - let E = T * p - f, R = E; + let k = Math.min(o.inHeight, l + C); + for (let _ = 0; _ < o.outWidth; ++_) { + let $ = _ * p - f, R = $; for (; R < 0; ) - R += l; - let D = Math.min(o.inWidth, m + E), F = Number.NEGATIVE_INFINITY, O = -1; + R += c; + let D = Math.min(o.inWidth, m + $), P = Number.NEGATIVE_INFINITY, O = -1; for (let M = S; M < k; M += u) { - let L = M - w; - for (let B = R; B < D; B += l) { - let z = B - E, U = h.get(g, M, B, x); - U > F && (F = U, n ? O = s ? ((g * o.inHeight + M) * o.inWidth + B) * o.inChannels + x : (M * o.inWidth + B) * o.inChannels + x : O = L * m + z); + let L = M - C; + for (let B = R; B < D; B += c) { + let z = B - $, U = h.get(g, M, B, x); + U > P && (P = U, n ? O = s ? ((g * o.inHeight + M) * o.inWidth + B) * o.inChannels + x : (M * o.inWidth + B) * o.inChannels + x : O = L * m + z); } } - a.set(O, g, b, T, x); + a.set(O, g, b, _, x); } } return a; } -function Qf(r16, e, t10, o, n, s) { - let a = n.strideDepth, i = n.strideHeight, p = n.strideWidth, u = n.dilationDepth, l = n.dilationHeight, c = n.dilationWidth, m = n.effectiveFilterDepth, d = n.effectiveFilterHeight, f = n.effectiveFilterWidth, h = n.padInfo.front, g = n.padInfo.top, x = n.padInfo.left, b = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, w = ie(n.outShape, t10), S = w.values, k = n.outShape[1] * n.outShape[2] * n.outShape[3] * n.outShape[4], T = n.outShape[2] * n.outShape[3] * n.outShape[4], E = n.outShape[3] * n.outShape[4], R = n.outShape[4]; +function zf(r15, e, t10, o, n, s) { + let a = n.strideDepth, i = n.strideHeight, p = n.strideWidth, u = n.dilationDepth, c = n.dilationHeight, l = n.dilationWidth, m = n.effectiveFilterDepth, d = n.effectiveFilterHeight, f = n.effectiveFilterWidth, h = n.padInfo.front, g = n.padInfo.top, x = n.padInfo.left, b = s === "max" ? Number.NEGATIVE_INFINITY : Number.POSITIVE_INFINITY, C = me(n.outShape, t10), S = C.values, k = n.outShape[1] * n.outShape[2] * n.outShape[3] * n.outShape[4], _ = n.outShape[2] * n.outShape[3] * n.outShape[4], $ = n.outShape[3] * n.outShape[4], R = n.outShape[4]; for (let D = 0; D < n.batchSize; ++D) { - let F = D * k, O = D * o[0]; + let P = D * k, O = D * o[0]; for (let M = 0; M < n.inChannels; ++M) for (let L = 0; L < n.outDepth; ++L) { let B = L * a - h, z = B; for (; z < 0; ) z += u; - let U = Math.min(n.inDepth, m + B), j = F + L * T; + let U = Math.min(n.inDepth, m + B), j = P + L * _; for (let q = 0; q < n.outHeight; ++q) { let Y = q * i - g, J = Y; for (; J < 0; ) - J += l; - let re = Math.min(n.inHeight, d + Y), ne = j + q * E; + J += c; + let re = Math.min(n.inHeight, d + Y), ne = j + q * $; for (let ee = 0; ee < n.outWidth; ++ee) { - let oe = ee * p - x, ue = oe; - for (; ue < 0; ) - ue += c; - let me = Math.min(n.inWidth, f + oe), be = ne + ee * R, _e = b, ve = 0, Fe = 0; - for (let at = z; at < U; at += u) { - let ct = O + at * o[1]; - for (let Ke = J; Ke < re; Ke += l) { - let mt = ct + Ke * o[2]; - for (let ut = ue; ut < me; ut += c) { - let gt = mt + ut * o[3], xt = r16[gt + M]; - if (s === "max" && xt > _e ? _e = xt : s === "avg" && (ve += xt, Fe++), isNaN(_e)) + let oe = ee * p - x, ie = oe; + for (; ie < 0; ) + ie += l; + let le = Math.min(n.inWidth, f + oe), be = ne + ee * R, _e = b, ve = 0, Fe = 0; + for (let st = z; st < U; st += u) { + let ct = O + st * o[1]; + for (let He = J; He < re; He += c) { + let lt = ct + He * o[2]; + for (let it = ie; it < le; it += l) { + let ht = lt + it * o[3], gt = r15[ht + M]; + if (s === "max" && gt > _e ? _e = gt : s === "avg" && (ve += gt, Fe++), isNaN(_e)) break; } if (isNaN(_e)) @@ -13581,34 +13581,34 @@ function Qf(r16, e, t10, o, n, s) { } } } - return w; + return C; } -function HE(r16, e) { - let t10 = ie(e.outShape, "int32"), o = e.strideDepth, n = e.strideHeight, s = e.strideWidth, a = e.dilationDepth, i = e.dilationHeight, p = e.dilationWidth, u = e.effectiveFilterDepth, l = e.effectiveFilterHeight, c = e.effectiveFilterWidth, m = e.padInfo.front, d = e.padInfo.top, f = e.padInfo.left; +function aE(r15, e) { + let t10 = me(e.outShape, "int32"), o = e.strideDepth, n = e.strideHeight, s = e.strideWidth, a = e.dilationDepth, i = e.dilationHeight, p = e.dilationWidth, u = e.effectiveFilterDepth, c = e.effectiveFilterHeight, l = e.effectiveFilterWidth, m = e.padInfo.front, d = e.padInfo.top, f = e.padInfo.left; for (let h = 0; h < e.batchSize; ++h) for (let g = 0; g < e.inChannels; ++g) for (let x = 0; x < e.outDepth; ++x) { - let b = x * o - m, w = b; - for (; w < 0; ) - w += a; + let b = x * o - m, C = b; + for (; C < 0; ) + C += a; let S = Math.min(e.inDepth, u + b); for (let k = 0; k < e.outHeight; ++k) { - let T = k * n - d, E = T; - for (; E < 0; ) - E += i; - let R = Math.min(e.inHeight, l + T); + let _ = k * n - d, $ = _; + for (; $ < 0; ) + $ += i; + let R = Math.min(e.inHeight, c + _); for (let D = 0; D < e.outWidth; ++D) { - let F = D * s - f, O = F; + let P = D * s - f, O = P; for (; O < 0; ) O += p; - let M = Math.min(e.inWidth, c + F), L = Number.NEGATIVE_INFINITY, B = -1; - for (let z = w; z < S; z += a) { + let M = Math.min(e.inWidth, l + P), L = Number.NEGATIVE_INFINITY, B = -1; + for (let z = C; z < S; z += a) { let U = z - b; - for (let j = E; j < R; j += i) { - let q = j - T; + for (let j = $; j < R; j += i) { + let q = j - _; for (let Y = O; Y < M; Y += p) { - let J = Y - F, re = r16.get(h, z, j, Y, g); - re >= L && (L = re, B = U * l * c + q * l + J); + let J = Y - P, re = r15.get(h, z, j, Y, g); + re >= L && (L = re, B = U * c * l + q * c + J); } } } @@ -13618,177 +13618,177 @@ function HE(r16, e) { } return t10; } -function J7(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e; +function FY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; Q(n, "avgPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - y.assert(C.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let l = C.computePool2DInfo(n.shape, s, a, u, i, p), c; - if (l.filterWidth === 1 && l.filterHeight === 1 && y.arraysEqual(l.inShape, l.outShape)) - c = fr({ inputs: { x: n }, backend: t10 }); + y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = w.computePool2DInfo(n.shape, s, a, u, i, p), l; + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + l = lr({ inputs: { x: n }, backend: t10 }); else { - let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = El(m, n.shape, n.dtype, d, l, "avg"); - c = t10.makeTensorInfo(l.outShape, n.dtype, f.values); + let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = vc(m, n.shape, n.dtype, d, c, "avg"); + l = t10.makeTensorInfo(c.outShape, n.dtype, f.values); } - return c; + return l; } -var KE = { kernelName: kn, backendName: "cpu", kernelFunc: J7 }; -function eQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var iE = { kernelName: Qo, backendName: "cpu", kernelFunc: FY }; +function PY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; Q(n, "avgPool3d"); - let l = C.computePool3DInfo(n.shape, s, a, 1, i, p, u), c = t10.data.get(n.dataId).values, m = Qf(c, n.shape, n.dtype, y.computeStrides(n.shape), l, "avg"); + let c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.data.get(n.dataId).values, m = zf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "avg"); return t10.makeTensorInfo(m.shape, "float32", m.values); } -var qE = { kernelName: aa, backendName: "cpu", kernelFunc: eQ }; -function tQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var uE = { kernelName: Zs, backendName: "cpu", kernelFunc: PY }; +function OY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; Q([n, s], "avgPool3DGrad"); - let l = C.computePool3DInfo(s.shape, a, i, 1, p, u), c = l.strideDepth, m = l.strideHeight, d = l.strideWidth, f = l.filterDepth, h = l.filterHeight, g = l.filterWidth, x = l.dilationDepth, b = l.dilationHeight, w = l.dilationWidth, S = l.effectiveFilterDepth, k = l.effectiveFilterHeight, T = l.effectiveFilterWidth, E = S - 1 - l.padInfo.front, R = T - 1 - l.padInfo.left, D = k - 1 - l.padInfo.top, F = ie(s.shape, "float32"), O = 1 / (f * h * g), M = t10.bufferSync(n); - for (let L = 0; L < l.batchSize; ++L) - for (let B = 0; B < l.inChannels; ++B) - for (let z = 0; z < l.inDepth; ++z) - for (let U = 0; U < l.inHeight; ++U) - for (let j = 0; j < l.inWidth; ++j) { - let q = z - E, Y = U - D, J = j - R, re = 0; + let c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = c.strideDepth, m = c.strideHeight, d = c.strideWidth, f = c.filterDepth, h = c.filterHeight, g = c.filterWidth, x = c.dilationDepth, b = c.dilationHeight, C = c.dilationWidth, S = c.effectiveFilterDepth, k = c.effectiveFilterHeight, _ = c.effectiveFilterWidth, $ = S - 1 - c.padInfo.front, R = _ - 1 - c.padInfo.left, D = k - 1 - c.padInfo.top, P = me(s.shape, "float32"), O = 1 / (f * h * g), M = t10.bufferSync(n); + for (let L = 0; L < c.batchSize; ++L) + for (let B = 0; B < c.inChannels; ++B) + for (let z = 0; z < c.inDepth; ++z) + for (let U = 0; U < c.inHeight; ++U) + for (let j = 0; j < c.inWidth; ++j) { + let q = z - $, Y = U - D, J = j - R, re = 0; for (let ne = 0; ne < S; ne += x) { - let ee = (q + ne) / c; - if (!(ee < 0 || ee >= l.outDepth || Math.floor(ee) !== ee)) + let ee = (q + ne) / l; + if (!(ee < 0 || ee >= c.outDepth || Math.floor(ee) !== ee)) for (let oe = 0; oe < k; oe += b) { - let ue = (Y + oe) / m; - if (!(ue < 0 || ue >= l.outHeight || Math.floor(ue) !== ue)) - for (let me = 0; me < T; me += w) { - let be = (J + me) / d; - if (be < 0 || be >= l.outWidth || Math.floor(be) !== be) + let ie = (Y + oe) / m; + if (!(ie < 0 || ie >= c.outHeight || Math.floor(ie) !== ie)) + for (let le = 0; le < _; le += C) { + let be = (J + le) / d; + if (be < 0 || be >= c.outWidth || Math.floor(be) !== be) continue; - let _e = M.get(L, ee, ue, be, B); + let _e = M.get(L, ee, ie, be, B); re += _e; } } } - F.set(re * O, L, z, U, j, B); + P.set(re * O, L, z, U, j, B); } - return t10.makeTensorInfo(F.shape, F.dtype, F.values); + return t10.makeTensorInfo(P.shape, P.dtype, P.values); } -var jE = { kernelName: Vi, backendName: "cpu", kernelFunc: tQ }; -function rQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s; +var pE = { kernelName: Ri, backendName: "cpu", kernelFunc: OY }; +function MY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s; Q([n, s], "avgPoolGrad"); - let { filterSize: i, strides: p, pad: u } = o, l = C.computePool2DInfo(a.shape, i, p, 1, u), c = l.strideHeight, m = l.strideWidth, d = l.filterHeight, f = l.filterWidth, h = l.dilationHeight, g = l.dilationWidth, x = l.effectiveFilterHeight, b = l.effectiveFilterWidth, w = b - 1 - l.padInfo.left, S = x - 1 - l.padInfo.top, k = ie(a.shape, "float32"), T = 1 / (d * f), E = t10.data.get(n.dataId).values, R = ie(n.shape, "float32", E); - for (let D = 0; D < l.batchSize; ++D) - for (let F = 0; F < l.inChannels; ++F) - for (let O = 0; O < l.inHeight; ++O) - for (let M = 0; M < l.inWidth; ++M) { - let L = O - S, B = M - w, z = 0; + let { filterSize: i, strides: p, pad: u } = o, c = w.computePool2DInfo(a.shape, i, p, 1, u), l = c.strideHeight, m = c.strideWidth, d = c.filterHeight, f = c.filterWidth, h = c.dilationHeight, g = c.dilationWidth, x = c.effectiveFilterHeight, b = c.effectiveFilterWidth, C = b - 1 - c.padInfo.left, S = x - 1 - c.padInfo.top, k = me(a.shape, "float32"), _ = 1 / (d * f), $ = t10.data.get(n.dataId).values, R = me(n.shape, "float32", $); + for (let D = 0; D < c.batchSize; ++D) + for (let P = 0; P < c.inChannels; ++P) + for (let O = 0; O < c.inHeight; ++O) + for (let M = 0; M < c.inWidth; ++M) { + let L = O - S, B = M - C, z = 0; for (let U = 0; U < x; U += h) { - let j = (L + U) / c; - if (!(j < 0 || j >= l.outHeight || Math.floor(j) !== j)) + let j = (L + U) / l; + if (!(j < 0 || j >= c.outHeight || Math.floor(j) !== j)) for (let q = 0; q < b; q += g) { let Y = (B + q) / m; - if (Y < 0 || Y >= l.outWidth || Math.floor(Y) !== Y) + if (Y < 0 || Y >= c.outWidth || Math.floor(Y) !== Y) continue; - let J = R.get(D, j, Y, F); + let J = R.get(D, j, Y, P); z += J; } } - k.set(z * T, D, O, M, F); + k.set(z * _, D, O, M, P); } return t10.makeTensorInfo(k.shape, k.dtype, k.values); } -var XE = { kernelName: zi, backendName: "cpu", kernelFunc: rQ }; -function oQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, scale: s, offset: a, mean: i, variance: p } = e; +var cE = { kernelName: $i, backendName: "cpu", kernelFunc: MY }; +function LY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, scale: s, offset: a, mean: i, variance: p } = e; y.assert(i.shape.length === p.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), y.assert(a == null || i.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), y.assert(s == null || i.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."), Q([n, i, p, s, a], "batchNorm"); let { varianceEpsilon: u } = o; u == null && (u = 1e-3); - let l = t10.data.get(n.dataId).values, c = t10.data.get(i.dataId).values, m = t10.data.get(p.dataId).values, d = s ? t10.data.get(s.dataId).values : new Float32Array([1]), f = a ? t10.data.get(a.dataId).values : new Float32Array([0]), h = new Float32Array(l.length), g = f.length, x = d.length, b = m.length, w = c.length, S = 0, k = 0, T = 0, E = 0; - for (let R = 0; R < l.length; ++R) - h[R] = f[S++] + (l[R] - c[k++]) * d[T++] / Math.sqrt(m[E++] + u), S >= g && (S = 0), k >= w && (k = 0), T >= x && (T = 0), E >= b && (E = 0); + let c = t10.data.get(n.dataId).values, l = t10.data.get(i.dataId).values, m = t10.data.get(p.dataId).values, d = s ? t10.data.get(s.dataId).values : new Float32Array([1]), f = a ? t10.data.get(a.dataId).values : new Float32Array([0]), h = new Float32Array(c.length), g = f.length, x = d.length, b = m.length, C = l.length, S = 0, k = 0, _ = 0, $ = 0; + for (let R = 0; R < c.length; ++R) + h[R] = f[S++] + (c[R] - l[k++]) * d[_++] / Math.sqrt(m[$++] + u), S >= g && (S = 0), k >= C && (k = 0), _ >= x && (_ = 0), $ >= b && ($ = 0); return t10.makeTensorInfo(n.shape, n.dtype, h); } -var YE = { kernelName: Hn, backendName: "cpu", kernelFunc: oQ }; -function nQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, crops: a } = o; +var lE = { kernelName: In, backendName: "cpu", kernelFunc: LY }; +function BY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, crops: a } = o; Q([n], "batchToSpaceND"); - let i = s.reduce((x, b) => x * b), p = C.getReshaped(n.shape, s, i), u = C.getPermuted(p.length, s.length), l = C.getReshapedPermuted(n.shape, s, i), c = C.getSliceBeginCoords(a, s.length), m = C.getSliceSize(l, a, s.length), d = We({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), f = vt({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), h = We({ inputs: { x: f }, backend: t10, attrs: { shape: l } }), g = nn({ inputs: { x: h }, backend: t10, attrs: { begin: c, size: m } }); + let i = s.reduce((x, b) => x * b), p = w.getReshaped(n.shape, s, i), u = w.getPermuted(p.length, s.length), c = w.getReshapedPermuted(n.shape, s, i), l = w.getSliceBeginCoords(a, s.length), m = w.getSliceSize(c, a, s.length), d = We({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), f = St({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), h = We({ inputs: { x: f }, backend: t10, attrs: { shape: c } }), g = Ao({ inputs: { x: h }, backend: t10, attrs: { begin: l, size: m } }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), g; } -var QE = { kernelName: ia, backendName: "cpu", kernelFunc: nQ }; -function sQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = Nl(i, p, s.dtype, s.shape, a); +var mE = { kernelName: Js, backendName: "cpu", kernelFunc: BY }; +function zY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = Cc(i, p, s.dtype, s.shape, a); return t10.makeTensorInfo([a], s.dtype, u); } -var ZE = { kernelName: Tn, backendName: "cpu", kernelFunc: sQ }; -function aQ(r16) { - let { inputs: e, backend: t10 } = r16, { s0: o, s1: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = C.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var dE = { kernelName: Jo, backendName: "cpu", kernelFunc: zY }; +function VY(r15) { + let { inputs: e, backend: t10 } = r15, { s0: o, s1: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return t10.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var JE = { kernelName: ua, backendName: "cpu", kernelFunc: aQ }; -var iQ = Ie(Go, (r16, e) => { +var fE = { kernelName: ea, backendName: "cpu", kernelFunc: VY }; +var WY = Ie(bo, (r15, e) => { let t10 = e; - return r16 > t10.clipValueMax ? t10.clipValueMax : r16 < t10.clipValueMin ? t10.clipValueMin : r16; + return r15 > t10.clipValueMax ? t10.clipValueMax : r15 < t10.clipValueMin ? t10.clipValueMin : r15; }); -var e$ = { kernelName: Go, backendName: "cpu", kernelFunc: iQ }; -var uQ = (r16) => { - let { x: e } = r16.inputs, t10 = r16.backend, o = new Float32Array(y.sizeFromShape(e.shape)), n = t10.data.get(e.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values; +var hE = { kernelName: bo, backendName: "cpu", kernelFunc: WY }; +var UY = (r15) => { + let { x: e } = r15.inputs, t10 = r15.backend, o = new Float32Array(y.sizeFromShape(e.shape)), n = t10.data.get(e.dataId), s = n.complexTensorInfos.real, a = n.complexTensorInfos.imag, i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values; for (let u = 0; u < i.length; u++) { - let l = i[u], c = p[u]; - o[u] = Math.hypot(l, c); + let c = i[u], l = p[u]; + o[u] = Math.hypot(c, l); } return t10.makeOutput(o, e.shape, "float32"); }; -var t$ = { kernelName: Wi, backendName: "cpu", kernelFunc: uQ }; -function Ua(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.imag, s = t10.data.get(n.dataId).values; +var gE = { kernelName: Ai, backendName: "cpu", kernelFunc: UY }; +function Oa(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.imag, s = t10.data.get(n.dataId).values; return t10.makeTensorInfo(n.shape, n.dtype, s); } -var r$ = { kernelName: Qi, backendName: "cpu", kernelFunc: Ua }; -function Su(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((h) => h.shape); - C.assertParamsConsistent(a, s); - let i = C.computeOutShape(e.map((h) => h.shape), s); +var xE = { kernelName: Wi, backendName: "cpu", kernelFunc: Oa }; +function hu(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((h) => h.shape); + w.assertParamsConsistent(a, s); + let i = w.computeOutShape(e.map((h) => h.shape), s); if (y.sizeFromShape(i) === 0) return t10.makeTensorInfo(i, e[0].dtype, []); let p = e.filter((h) => y.sizeFromShape(h.shape) > 0); if (p.length === 1) - return fr({ inputs: { x: p[0] }, backend: t10 }); + return lr({ inputs: { x: p[0] }, backend: t10 }); if (p[0].dtype === "complex64") { - let h = p.map((S) => tn({ inputs: { input: S }, backend: t10 })), g = p.map((S) => Ua({ inputs: { input: S }, backend: t10 })), x = Su({ inputs: h, backend: t10, attrs: { axis: s } }), b = Su({ inputs: g, backend: t10, attrs: { axis: s } }), w = qt({ inputs: { real: x, imag: b }, backend: t10 }); - return h.forEach((S) => t10.disposeIntermediateTensorInfo(S)), g.forEach((S) => t10.disposeIntermediateTensorInfo(S)), t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(b), w; + let h = p.map((S) => $o({ inputs: { input: S }, backend: t10 })), g = p.map((S) => Oa({ inputs: { input: S }, backend: t10 })), x = hu({ inputs: h, backend: t10, attrs: { axis: s } }), b = hu({ inputs: g, backend: t10, attrs: { axis: s } }), C = Ht({ inputs: { real: x, imag: b }, backend: t10 }); + return h.forEach((S) => t10.disposeIntermediateTensorInfo(S)), g.forEach((S) => t10.disposeIntermediateTensorInfo(S)), t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(b), C; } let u = p.map((h) => { let x = [-1, y.sizeFromShape(h.shape.slice(s))]; return We({ inputs: { x: h }, backend: t10, attrs: { shape: x } }); - }), l = u.map((h) => ({ vals: t10.data.get(h.dataId).values, shape: h.shape })); - i = C.computeOutShape(u.map((h) => h.shape), 1); - let c = u[0].shape[0] === 1, m = mp(l, i, e[0].dtype, c), d = C.computeOutShape(p.map((h) => h.shape), s), f = t10.makeTensorInfo(d, e[0].dtype, m); + }), c = u.map((h) => ({ vals: t10.data.get(h.dataId).values, shape: h.shape })); + i = w.computeOutShape(u.map((h) => h.shape), 1); + let l = u[0].shape[0] === 1, m = ap(c, i, e[0].dtype, l), d = w.computeOutShape(p.map((h) => h.shape), s), f = t10.makeTensorInfo(d, e[0].dtype, m); return u.forEach((h) => t10.disposeIntermediateTensorInfo(h)), f; } -var o$ = { kernelName: pa, backendName: "cpu", kernelFunc: Su }; -function AI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: l } = o; +var yE = { kernelName: ta, backendName: "cpu", kernelFunc: hu }; +function CI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o; Q([n, s], "conv2d"); - let c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, s.shape, a, u, i, l, false, c), d = m.filterHeight, f = m.filterWidth, h = m.dilationHeight, g = m.dilationWidth, x = m.padInfo.left, b = m.padInfo.top, w = m.dataFormat === "channelsLast", S = new Ge(m.outShape, n.dtype), k = y.computeStrides(n.shape), T = y.computeStrides(s.shape), E = k[0], R = w ? k[1] : k[2], D = w ? k[2] : 1, F = w ? 1 : k[1], O = S.strides[0], M = w ? S.strides[1] : S.strides[2], L = w ? S.strides[2] : 1, B = w ? 1 : S.strides[1], z = t10.data.get(n.dataId).values, U = t10.data.get(s.dataId).values, j = S.values; + let l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), d = m.filterHeight, f = m.filterWidth, h = m.dilationHeight, g = m.dilationWidth, x = m.padInfo.left, b = m.padInfo.top, C = m.dataFormat === "channelsLast", S = new tt(m.outShape, n.dtype), k = y.computeStrides(n.shape), _ = y.computeStrides(s.shape), $ = k[0], R = C ? k[1] : k[2], D = C ? k[2] : 1, P = C ? 1 : k[1], O = S.strides[0], M = C ? S.strides[1] : S.strides[2], L = C ? S.strides[2] : 1, B = C ? 1 : S.strides[1], z = t10.data.get(n.dataId).values, U = t10.data.get(s.dataId).values, j = S.values; for (let q = 0; q < m.batchSize; ++q) { - let Y = q * E, J = q * O; + let Y = q * $, J = q * O; for (let re = 0; re < m.outHeight; ++re) { let ne = J + re * M, ee = re * m.strideHeight - b; for (let oe = 0; oe < d; ++oe) { - let ue = ee + oe * h; - if (ue < 0 || ue >= m.inHeight) + let ie = ee + oe * h; + if (ie < 0 || ie >= m.inHeight) continue; - let me = oe * T[0], be = Y + ue * R; + let le = oe * _[0], be = Y + ie * R; for (let _e = 0; _e < m.outWidth; ++_e) { let ve = ne + _e * L, Fe = _e * m.strideWidth - x; for (let Pe = 0; Pe < f; ++Pe) { - let at = Fe + Pe * g; - if (at < 0 || at >= m.inWidth) + let st = Fe + Pe * g; + if (st < 0 || st >= m.inWidth) continue; - let ct = me + Pe * T[1], Ke = be + at * D, mt = ct; - for (let ut = 0; ut < m.inChannels; ++ut) { - let gt = z[Ke + ut * F]; - for (let xt = 0; xt < m.outChannels; ++xt) - j[ve + xt * B] += gt * U[mt + xt]; - mt += m.outChannels; + let ct = le + Pe * _[1], He = be + st * D, lt = ct; + for (let it = 0; it < m.inChannels; ++it) { + let ht = z[He + it * P]; + for (let gt = 0; gt < m.outChannels; ++gt) + j[ve + gt * B] += ht * U[lt + gt]; + lt += m.outChannels; } } } @@ -13797,24 +13797,24 @@ function AI(r16) { } return t10.makeTensorInfo(S.shape, S.dtype, j); } -var n$ = { kernelName: En, backendName: "cpu", kernelFunc: AI }; -function pQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: l } = o; +var bE = { kernelName: tn, backendName: "cpu", kernelFunc: CI }; +function GY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o; Q([n, s], "conv2dBackpropFilter"); - let c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, l, a, 1, i, u, false, c), { strideHeight: d, strideWidth: f, filterHeight: h, filterWidth: g } = m, x = m.dataFormat === "channelsLast", b = new Ge(m.filterShape, "float32"), w = m.padInfo.left, S = m.padInfo.top, k = t10.data.get(n.dataId).values, T = t10.data.get(s.dataId).values, E = new Ge(n.shape, n.dtype, k), R = new Ge(s.shape, s.dtype, T); + let l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), { strideHeight: d, strideWidth: f, filterHeight: h, filterWidth: g } = m, x = m.dataFormat === "channelsLast", b = new tt(m.filterShape, "float32"), C = m.padInfo.left, S = m.padInfo.top, k = t10.data.get(n.dataId).values, _ = t10.data.get(s.dataId).values, $ = new tt(n.shape, n.dtype, k), R = new tt(s.shape, s.dtype, _); for (let D = 0; D < h; ++D) { - let F = Math.max(0, Math.ceil((S - D) / d)), O = Math.min(m.outHeight, (m.inHeight + S - D) / d); + let P = Math.max(0, Math.ceil((S - D) / d)), O = Math.min(m.outHeight, (m.inHeight + S - D) / d); for (let M = 0; M < g; ++M) { - let L = Math.max(0, Math.ceil((w - M) / f)), B = Math.min(m.outWidth, (m.inWidth + w - M) / f); + let L = Math.max(0, Math.ceil((C - M) / f)), B = Math.min(m.outWidth, (m.inWidth + C - M) / f); for (let z = 0; z < m.inChannels; ++z) for (let U = 0; U < m.outChannels; ++U) { let j = 0; for (let q = 0; q < m.batchSize; ++q) - for (let Y = F; Y < O; ++Y) { + for (let Y = P; Y < O; ++Y) { let J = D + Y * d - S; for (let re = L; re < B; ++re) { - let ne = M + re * f - w; - x ? j += E.get(q, J, ne, z) * R.get(q, Y, re, U) : j += E.get(q, z, J, ne) * R.get(q, U, Y, re); + let ne = M + re * f - C; + x ? j += $.get(q, J, ne, z) * R.get(q, Y, re, U) : j += $.get(q, z, J, ne) * R.get(q, U, Y, re); } } b.set(j, D, M, z, U); @@ -13823,68 +13823,68 @@ function pQ(r16) { } return t10.makeTensorInfo(b.shape, b.dtype, b.values); } -var s$ = { kernelName: Ui, backendName: "cpu", kernelFunc: pQ }; -function lQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: l } = o; +var CE = { kernelName: Fi, backendName: "cpu", kernelFunc: GY }; +function HY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o; Q([n, s], "conv2dBackpropInput"); - let c = y.computeStrides(s.shape), m = y.computeStrides(n.shape), d = C.convertConv2DDataFormat(u), f = C.computeConv2DInfo(a, s.shape, i, 1, p, l, false, d), h = new Ge(f.inShape, "float32"), g = h.values, x = t10.data.get(n.dataId).values, b = t10.data.get(s.dataId).values, [w, S, k] = c, { batchSize: T, filterHeight: E, filterWidth: R, inChannels: D, inHeight: F, inWidth: O, outChannels: M, outHeight: L, outWidth: B, strideHeight: z, strideWidth: U } = f; + let l = y.computeStrides(s.shape), m = y.computeStrides(n.shape), d = w.convertConv2DDataFormat(u), f = w.computeConv2DInfo(a, s.shape, i, 1, p, c, false, d), h = new tt(f.inShape, "float32"), g = h.values, x = t10.data.get(n.dataId).values, b = t10.data.get(s.dataId).values, [C, S, k] = l, { batchSize: _, filterHeight: $, filterWidth: R, inChannels: D, inHeight: P, inWidth: O, outChannels: M, outHeight: L, outWidth: B, strideHeight: z, strideWidth: U } = f; d = f.dataFormat; - let j = E - 1 - f.padInfo.top, q = R - 1 - f.padInfo.left, Y = d === "channelsLast", J = h.strides[0], re = Y ? h.strides[1] : h.strides[2], ne = Y ? h.strides[2] : 1, ee = Y ? 1 : h.strides[1], oe = m[0], ue = Y ? m[1] : m[2], me = Y ? m[2] : 1, be = Y ? 1 : m[1]; - for (let _e = 0; _e < T; ++_e) + let j = $ - 1 - f.padInfo.top, q = R - 1 - f.padInfo.left, Y = d === "channelsLast", J = h.strides[0], re = Y ? h.strides[1] : h.strides[2], ne = Y ? h.strides[2] : 1, ee = Y ? 1 : h.strides[1], oe = m[0], ie = Y ? m[1] : m[2], le = Y ? m[2] : 1, be = Y ? 1 : m[1]; + for (let _e = 0; _e < _; ++_e) for (let ve = 0; ve < D; ++ve) - for (let Fe = 0; Fe < F; ++Fe) { - let Pe = Fe - j, at = Math.max(0, Math.ceil(Pe / z)), ct = Math.min(L, (E + Pe) / z); - for (let Ke = 0; Ke < O; ++Ke) { - let mt = Ke - q, ut = Math.max(0, Math.ceil(mt / U)), gt = Math.min(B, (R + mt) / U), xt = 0; - for (let Bt = at; Bt < ct; ++Bt) { - let io = Bt * z - Pe; - for (let sr = ut; sr < gt; ++sr) { - let Et = sr * U - mt, ar = oe * _e + ue * Bt + me * sr, ir = w * (E - 1 - io) + S * (R - 1 - Et) + k * ve; - for (let uo = 0; uo < M; ++uo) { - let po = x[ar + be * uo], xr = b[ir + uo]; - xt += po * xr; + for (let Fe = 0; Fe < P; ++Fe) { + let Pe = Fe - j, st = Math.max(0, Math.ceil(Pe / z)), ct = Math.min(L, ($ + Pe) / z); + for (let He = 0; He < O; ++He) { + let lt = He - q, it = Math.max(0, Math.ceil(lt / U)), ht = Math.min(B, (R + lt) / U), gt = 0; + for (let Mt = st; Mt < ct; ++Mt) { + let to = Mt * z - Pe; + for (let rr = it; rr < ht; ++rr) { + let Tt = rr * U - lt, or = oe * _e + ie * Mt + le * rr, nr = C * ($ - 1 - to) + S * (R - 1 - Tt) + k * ve; + for (let ro = 0; ro < M; ++ro) { + let oo = x[or + be * ro], fr = b[nr + ro]; + gt += oo * fr; } } } - let Ur = J * _e + re * Fe + ne * Ke + ee * ve; - g[Ur] = xt; + let Lr = J * _e + re * Fe + ne * He + ee * ve; + g[Lr] = gt; } } return t10.makeTensorInfo(h.shape, h.dtype, h.values); } -var a$ = { kernelName: $n, backendName: "cpu", kernelFunc: lQ }; -function cQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; +var wE = { kernelName: rn, backendName: "cpu", kernelFunc: HY }; +function KY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; Q([n, s], "conv3d"); - let u = C.computeConv3DInfo(n.shape, s.shape, a, p, i), { filterDepth: l, filterHeight: c, filterWidth: m, dilationDepth: d, dilationHeight: f, dilationWidth: h, padInfo: g } = u, x = g.front, b = g.left, w = g.top, S = new Ge(u.outShape, n.dtype), k = t10.data.get(n.dataId).values, T = t10.data.get(s.dataId).values, E = S.values, R = y.computeStrides(n.shape), D = y.computeStrides(s.shape); - for (let F = 0; F < u.batchSize; ++F) { - let O = F * R[0], M = F * S.strides[0]; + let u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), { filterDepth: c, filterHeight: l, filterWidth: m, dilationDepth: d, dilationHeight: f, dilationWidth: h, padInfo: g } = u, x = g.front, b = g.left, C = g.top, S = new tt(u.outShape, n.dtype), k = t10.data.get(n.dataId).values, _ = t10.data.get(s.dataId).values, $ = S.values, R = y.computeStrides(n.shape), D = y.computeStrides(s.shape); + for (let P = 0; P < u.batchSize; ++P) { + let O = P * R[0], M = P * S.strides[0]; for (let L = 0; L < u.outDepth; ++L) { let B = M + L * S.strides[1], z = L * u.strideDepth - x; - for (let U = 0; U < l; ++U) { + for (let U = 0; U < c; ++U) { let j = z + U * d; if (j < 0 || j >= u.inDepth) continue; let q = U * D[0], Y = O + j * R[1]; for (let J = 0; J < u.outHeight; ++J) { - let re = B + J * S.strides[2], ne = J * u.strideHeight - w; - for (let ee = 0; ee < c; ++ee) { + let re = B + J * S.strides[2], ne = J * u.strideHeight - C; + for (let ee = 0; ee < l; ++ee) { let oe = ne + ee * f; if (oe < 0 || oe >= u.inHeight) continue; - let ue = q + ee * D[1], me = Y + oe * R[2]; + let ie = q + ee * D[1], le = Y + oe * R[2]; for (let be = 0; be < u.outWidth; ++be) { let _e = re + be * u.outChannels, ve = be * u.strideWidth - b; for (let Fe = 0; Fe < m; ++Fe) { let Pe = ve + Fe * h; if (Pe < 0 || Pe >= u.inWidth) continue; - let at = ue + Fe * D[2], ct = me + Pe * u.inChannels, Ke = at; - for (let mt = 0; mt < u.inChannels; ++mt) { - let ut = k[ct + mt]; - for (let gt = 0; gt < u.outChannels; ++gt) - E[_e + gt] += ut * T[Ke + gt]; - Ke += u.outChannels; + let st = ie + Fe * D[2], ct = le + Pe * u.inChannels, He = st; + for (let lt = 0; lt < u.inChannels; ++lt) { + let it = k[ct + lt]; + for (let ht = 0; ht < u.outChannels; ++ht) + $[_e + ht] += it * _[He + ht]; + He += u.outChannels; } } } @@ -13895,35 +13895,35 @@ function cQ(r16) { } return t10.makeTensorInfo(S.shape, S.dtype, S.values); } -var i$ = { kernelName: Rn, backendName: "cpu", kernelFunc: cQ }; -function mQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; +var SE = { kernelName: on, backendName: "cpu", kernelFunc: KY }; +function qY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; Q([n, s], "conv3dBackpropFilterV2"); - let u = y.computeStrides(n.shape), l = y.computeStrides(s.shape), c = C.computeConv3DInfo(n.shape, p, a, 1, i), m = c.strideDepth, d = c.strideHeight, f = c.strideWidth, h = c.filterDepth, g = c.filterHeight, x = c.filterWidth, b = new Ge(c.filterShape, "float32"), w = b.values, [S, k, T, E] = b.strides, R = t10.data.get(s.dataId).values, [D, F, O, M] = l, L = t10.data.get(n.dataId).values, [B, z, U, j] = u, q = c.padInfo.front, Y = c.padInfo.left, J = c.padInfo.top; + let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = w.computeConv3DInfo(n.shape, p, a, 1, i), m = l.strideDepth, d = l.strideHeight, f = l.strideWidth, h = l.filterDepth, g = l.filterHeight, x = l.filterWidth, b = new tt(l.filterShape, "float32"), C = b.values, [S, k, _, $] = b.strides, R = t10.data.get(s.dataId).values, [D, P, O, M] = c, L = t10.data.get(n.dataId).values, [B, z, U, j] = u, q = l.padInfo.front, Y = l.padInfo.left, J = l.padInfo.top; for (let re = 0; re < h; ++re) { - let ne = Math.max(0, Math.ceil((q - re) / m)), ee = Math.min(c.outDepth, (c.inDepth + q - re) / m), oe = re * S; - for (let ue = 0; ue < g; ++ue) { - let me = Math.max(0, Math.ceil((J - ue) / d)), be = Math.min(c.outHeight, (c.inHeight + J - ue) / d), _e = ue * k + oe; + let ne = Math.max(0, Math.ceil((q - re) / m)), ee = Math.min(l.outDepth, (l.inDepth + q - re) / m), oe = re * S; + for (let ie = 0; ie < g; ++ie) { + let le = Math.max(0, Math.ceil((J - ie) / d)), be = Math.min(l.outHeight, (l.inHeight + J - ie) / d), _e = ie * k + oe; for (let ve = 0; ve < x; ++ve) { - let Fe = Math.max(0, Math.ceil((Y - ve) / f)), Pe = Math.min(c.outWidth, (c.inWidth + Y - ve) / f), at = ve * T + _e; - for (let ct = 0; ct < c.inChannels; ++ct) { - let Ke = ct * E + at; - for (let mt = 0; mt < c.outChannels; ++mt) { - let ut = 0; - for (let gt = 0; gt < c.batchSize; ++gt) { - let xt = gt * B, Ur = gt * D; - for (let Bt = ne; Bt < ee; ++Bt) { - let sr = (re + Bt * m - q) * z + xt, Et = Bt * F + Ur; - for (let ar = me; ar < be; ++ar) { - let uo = (ue + ar * d - J) * U + sr, po = ar * O + Et; - for (let xr = Fe; xr < Pe; ++xr) { - let cn = (ve + xr * f - Y) * j + uo, ta = xr * M + po; - ut += L[cn + ct] * R[ta + mt]; + let Fe = Math.max(0, Math.ceil((Y - ve) / f)), Pe = Math.min(l.outWidth, (l.inWidth + Y - ve) / f), st = ve * _ + _e; + for (let ct = 0; ct < l.inChannels; ++ct) { + let He = ct * $ + st; + for (let lt = 0; lt < l.outChannels; ++lt) { + let it = 0; + for (let ht = 0; ht < l.batchSize; ++ht) { + let gt = ht * B, Lr = ht * D; + for (let Mt = ne; Mt < ee; ++Mt) { + let rr = (re + Mt * m - q) * z + gt, Tt = Mt * P + Lr; + for (let or = le; or < be; ++or) { + let ro = (ie + or * d - J) * U + rr, oo = or * O + Tt; + for (let fr = Fe; fr < Pe; ++fr) { + let Lo = (ve + fr * f - Y) * j + ro, Ks = fr * M + oo; + it += L[Lo + ct] * R[Ks + lt]; } } } } - w[Ke + mt] = ut; + C[He + lt] = it; } } } @@ -13931,56 +13931,56 @@ function mQ(r16) { } return t10.makeTensorInfo(b.shape, b.dtype, b.values); } -var u$ = { kernelName: ti, backendName: "cpu", kernelFunc: mQ }; -function dQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; +var IE = { kernelName: ja, backendName: "cpu", kernelFunc: qY }; +function jY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; Q([n], "conv3dBackpropInputV2"); - let u = y.computeStrides(n.shape), l = y.computeStrides(s.shape), c = C.computeConv3DInfo(p, s.shape, i, 1, a), m = new Ge(c.inShape, "float32"), d = m.values, [f, h, g, x] = m.strides, b = t10.data.get(n.dataId).values, [w, S, k, T] = u, E = t10.data.get(s.dataId).values, [R, D, F, O] = l, { batchSize: M, filterDepth: L, filterHeight: B, filterWidth: z, inChannels: U, inDepth: j, inHeight: q, inWidth: Y, outChannels: J, outDepth: re, outHeight: ne, outWidth: ee, strideDepth: oe, strideHeight: ue, strideWidth: me } = c, be = L - 1 - c.padInfo.front, _e = B - 1 - c.padInfo.top, ve = z - 1 - c.padInfo.left; + let u = y.computeStrides(n.shape), c = y.computeStrides(s.shape), l = w.computeConv3DInfo(p, s.shape, i, 1, a), m = new tt(l.inShape, "float32"), d = m.values, [f, h, g, x] = m.strides, b = t10.data.get(n.dataId).values, [C, S, k, _] = u, $ = t10.data.get(s.dataId).values, [R, D, P, O] = c, { batchSize: M, filterDepth: L, filterHeight: B, filterWidth: z, inChannels: U, inDepth: j, inHeight: q, inWidth: Y, outChannels: J, outDepth: re, outHeight: ne, outWidth: ee, strideDepth: oe, strideHeight: ie, strideWidth: le } = l, be = L - 1 - l.padInfo.front, _e = B - 1 - l.padInfo.top, ve = z - 1 - l.padInfo.left; for (let Fe = 0; Fe < M; ++Fe) for (let Pe = 0; Pe < U; ++Pe) - for (let at = 0; at < j; ++at) { - let ct = at - be, Ke = Math.max(0, Math.ceil(ct / oe)), mt = Math.min(re, (L + ct) / oe); - for (let ut = 0; ut < q; ++ut) { - let gt = ut - _e, xt = Math.max(0, Math.ceil(gt / ue)), Ur = Math.min(ne, (B + gt) / ue); - for (let Bt = 0; Bt < Y; ++Bt) { - let io = Bt - ve, sr = Math.max(0, Math.ceil(io / me)), Et = Math.min(ee, (z + io) / me), ar = 0; - for (let ir = Ke; ir < mt; ++ir) { - let uo = ir * oe - ct; - for (let po = xt; po < Ur; ++po) { - let xr = po * ue - gt; - for (let ja = sr; ja < Et; ++ja) { - let cn = ja * me - io, ta = w * Fe + S * ir + k * po + T * ja, Zt = R * (L - 1 - uo) + D * (B - 1 - xr) + F * (z - 1 - cn) + O * Pe; - for (let Xa = 0; Xa < J; ++Xa) { - let lc = b[ta + Xa], cc = E[Zt + Xa]; - ar += lc * cc; + for (let st = 0; st < j; ++st) { + let ct = st - be, He = Math.max(0, Math.ceil(ct / oe)), lt = Math.min(re, (L + ct) / oe); + for (let it = 0; it < q; ++it) { + let ht = it - _e, gt = Math.max(0, Math.ceil(ht / ie)), Lr = Math.min(ne, (B + ht) / ie); + for (let Mt = 0; Mt < Y; ++Mt) { + let to = Mt - ve, rr = Math.max(0, Math.ceil(to / le)), Tt = Math.min(ee, (z + to) / le), or = 0; + for (let nr = He; nr < lt; ++nr) { + let ro = nr * oe - ct; + for (let oo = gt; oo < Lr; ++oo) { + let fr = oo * ie - ht; + for (let Va = rr; Va < Tt; ++Va) { + let Lo = Va * le - to, Ks = C * Fe + S * nr + k * oo + _ * Va, Xt = R * (L - 1 - ro) + D * (B - 1 - fr) + P * (z - 1 - Lo) + O * Pe; + for (let Wa = 0; Wa < J; ++Wa) { + let ol = b[Ks + Wa], nl = $[Xt + Wa]; + or += ol * nl; } } } } - d[f * Fe + h * at + g * ut + x * Bt + Pe] = ar; + d[f * Fe + h * st + g * it + x * Mt + Pe] = or; } } } return t10.makeTensorInfo(m.shape, m.dtype, m.values); } -var p$ = { kernelName: Dn, backendName: "cpu", kernelFunc: dQ }; -var fQ = Ie(An, (r16) => Math.cos(r16)); -var l$ = { kernelName: An, backendName: "cpu", kernelFunc: fQ }; -var hQ = Ie(Fn, (r16) => Math.cosh(r16)); -var c$ = { kernelName: Fn, backendName: "cpu", kernelFunc: hQ }; -function gQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, [l, c, m, d] = n.shape, f = s.shape[0], [h, g] = i, x = ie([f, h, g, d], "float32"), b = t10.data.get(s.dataId).values, w = t10.data.get(a.dataId).values, S = t10.data.get(n.dataId).values, k = y.computeStrides(n.shape), T = y.computeStrides(x.shape); - for (let E = 0; E < f; E++) { - let R = E * 4, D = b[R], F = b[R + 1], O = b[R + 2], M = b[R + 3], L = w[E]; - if (L >= l) +var vE = { kernelName: nn, backendName: "cpu", kernelFunc: jY }; +var XY = Ie(sn, (r15) => Math.cos(r15)); +var kE = { kernelName: sn, backendName: "cpu", kernelFunc: XY }; +var YY = Ie(an, (r15) => Math.cosh(r15)); +var NE = { kernelName: an, backendName: "cpu", kernelFunc: YY }; +function QY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, [c, l, m, d] = n.shape, f = s.shape[0], [h, g] = i, x = me([f, h, g, d], "float32"), b = t10.data.get(s.dataId).values, C = t10.data.get(a.dataId).values, S = t10.data.get(n.dataId).values, k = y.computeStrides(n.shape), _ = y.computeStrides(x.shape); + for (let $ = 0; $ < f; $++) { + let R = $ * 4, D = b[R], P = b[R + 1], O = b[R + 2], M = b[R + 3], L = C[$]; + if (L >= c) continue; - let B = h > 1 ? (O - D) * (c - 1) / (h - 1) : 0, z = g > 1 ? (M - F) * (m - 1) / (g - 1) : 0; + let B = h > 1 ? (O - D) * (l - 1) / (h - 1) : 0, z = g > 1 ? (M - P) * (m - 1) / (g - 1) : 0; for (let U = 0; U < h; U++) { - let j = h > 1 ? D * (c - 1) + U * B : 0.5 * (D + O) * (c - 1); - if (j < 0 || j > c - 1) { + let j = h > 1 ? D * (l - 1) + U * B : 0.5 * (D + O) * (l - 1); + if (j < 0 || j > l - 1) { for (let q = 0; q < g; q++) for (let Y = 0; Y < d; Y++) { - let J = Y + q * T[2] + U * T[1] + E * T[0]; + let J = Y + q * _[2] + U * _[1] + $ * _[0]; x.values[J] = u; } continue; @@ -13988,39 +13988,39 @@ function gQ(r16) { if (p === "bilinear") { let q = Math.floor(j), Y = Math.ceil(j), J = j - q; for (let re = 0; re < g; re++) { - let ne = g > 1 ? F * (m - 1) + re * z : 0.5 * (F + M) * (m - 1); + let ne = g > 1 ? P * (m - 1) + re * z : 0.5 * (P + M) * (m - 1); if (ne < 0 || ne > m - 1) { - for (let me = 0; me < d; me++) { - let be = me + re * T[2] + U * T[1] + E * T[0]; + for (let le = 0; le < d; le++) { + let be = le + re * _[2] + U * _[1] + $ * _[0]; x.values[be] = u; } continue; } - let ee = Math.floor(ne), oe = Math.ceil(ne), ue = ne - ee; - for (let me = 0; me < d; me++) { - let be = me + ee * k[2] + q * k[1] + L * k[0], _e = S[be]; - be = me + oe * k[2] + q * k[1] + L * k[0]; + let ee = Math.floor(ne), oe = Math.ceil(ne), ie = ne - ee; + for (let le = 0; le < d; le++) { + let be = le + ee * k[2] + q * k[1] + L * k[0], _e = S[be]; + be = le + oe * k[2] + q * k[1] + L * k[0]; let ve = S[be]; - be = me + ee * k[2] + Y * k[1] + L * k[0]; + be = le + ee * k[2] + Y * k[1] + L * k[0]; let Fe = S[be]; - be = me + oe * k[2] + Y * k[1] + L * k[0]; - let Pe = S[be], at = _e + (ve - _e) * ue, ct = Fe + (Pe - Fe) * ue; - be = me + re * T[2] + U * T[1] + E * T[0], x.values[be] = at + (ct - at) * J; + be = le + oe * k[2] + Y * k[1] + L * k[0]; + let Pe = S[be], st = _e + (ve - _e) * ie, ct = Fe + (Pe - Fe) * ie; + be = le + re * _[2] + U * _[1] + $ * _[0], x.values[be] = st + (ct - st) * J; } } } else for (let q = 0; q < g; ++q) { - let Y = g > 1 ? F * (m - 1) + q * z : 0.5 * (F + M) * (m - 1); + let Y = g > 1 ? P * (m - 1) + q * z : 0.5 * (P + M) * (m - 1); if (Y < 0 || Y > m - 1) { for (let ne = 0; ne < d; ne++) { - let ee = ne + q * T[2] + U * T[1] + E * T[0]; + let ee = ne + q * _[2] + U * _[1] + $ * _[0]; x.values[ee] = u; } continue; } let J = Math.round(Y), re = Math.round(j); for (let ne = 0; ne < d; ne++) { - let ee = ne + J * k[2] + re * k[1] + L * k[0], oe = ne + q * T[2] + U * T[1] + E * T[0]; + let ee = ne + J * k[2] + re * k[1] + L * k[0], oe = ne + q * _[2] + U * _[1] + $ * _[0]; x.values[oe] = S[ee]; } } @@ -14028,115 +14028,115 @@ function gQ(r16) { } return t10.makeTensorInfo(x.shape, x.dtype, x.values); } -var m$ = { kernelName: Mn, backendName: "cpu", kernelFunc: gQ }; -function xQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; +var TE = { kernelName: cn, backendName: "cpu", kernelFunc: QY }; +function ZY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; Q(n, "cumprod"); - let p = C.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = vt({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); - let l = C.getInnerMostAxes(1, n.shape.length)[0]; - if (l !== u.shape.length - 1) - throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${l}`); - let c = pt(u.dtype, "int32"), m = y.makeOnesTypedArray(y.sizeFromShape(u.shape), c), d = t10.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; + let p = w.getAxesPermutation([s], n.shape.length), u = n; + p != null && (u = St({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); + let c = w.getInnerMostAxes(1, n.shape.length)[0]; + if (c !== u.shape.length - 1) + throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${c}`); + let l = dt(u.dtype, "int32"), m = y.makeOnesTypedArray(y.sizeFromShape(u.shape), l), d = t10.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; for (let x = 0; x < d.length; x += f) for (let b = 0; b < f; b++) { - let w = h(x, b); + let C = h(x, b); if (b === 0) - m[w] = a ? 1 : d[w]; + m[C] = a ? 1 : d[C]; else { let S = h(x, b - 1); - m[w] = a ? d[S] * m[S] : d[w] * m[S]; + m[C] = a ? d[S] * m[S] : d[C] * m[S]; } } - let g = t10.makeTensorInfo(u.shape, c, m); + let g = t10.makeTensorInfo(u.shape, l, m); if (p != null) { - let x = C.getUndoAxesPermutation(p), b = vt({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); + let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); return t10.disposeIntermediateTensorInfo(g), t10.disposeIntermediateTensorInfo(u), b; } return g; } -var d$ = { kernelName: Pn, backendName: "cpu", kernelFunc: xQ }; -function yQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; +var _E = { kernelName: un, backendName: "cpu", kernelFunc: ZY }; +function JY(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; Q(n, "cumsum"); - let p = C.getAxesPermutation([s], n.shape.length), u = n; - p != null && (u = vt({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); - let l = C.getInnerMostAxes(1, n.shape.length)[0]; - if (l !== u.shape.length - 1) - throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${l}`); - let c = pt(u.dtype, "int32"), m = y.makeZerosTypedArray(y.sizeFromShape(u.shape), c), d = t10.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; + let p = w.getAxesPermutation([s], n.shape.length), u = n; + p != null && (u = St({ inputs: { x: n }, backend: t10, attrs: { perm: p } })); + let c = w.getInnerMostAxes(1, n.shape.length)[0]; + if (c !== u.shape.length - 1) + throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length - 1} but got axis=${c}`); + let l = dt(u.dtype, "int32"), m = y.makeZerosTypedArray(y.sizeFromShape(u.shape), l), d = t10.data.get(u.dataId).values, f = u.shape[u.shape.length - 1], h = i ? (x, b) => x + f - b - 1 : (x, b) => x + b; for (let x = 0; x < d.length; x += f) for (let b = 0; b < f; b++) { - let w = h(x, b); + let C = h(x, b); if (b === 0) - m[w] = a ? 0 : d[w]; + m[C] = a ? 0 : d[C]; else { let S = h(x, b - 1); - m[w] = a ? d[S] + m[S] : d[w] + m[S]; + m[C] = a ? d[S] + m[S] : d[C] + m[S]; } } - let g = t10.makeTensorInfo(u.shape, c, m); + let g = t10.makeTensorInfo(u.shape, l, m); if (p != null) { - let x = C.getUndoAxesPermutation(p), b = vt({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); + let x = w.getUndoAxesPermutation(p), b = St({ inputs: { x: g }, backend: t10, attrs: { perm: x } }); return t10.disposeIntermediateTensorInfo(g), t10.disposeIntermediateTensorInfo(u), b; } return g; } -var f$ = { kernelName: On, backendName: "cpu", kernelFunc: yQ }; -function bQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; +var EE = { kernelName: pn, backendName: "cpu", kernelFunc: JY }; +function e7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, l = Nl(p, u, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, l); + let p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = Cc(p, u, s.dtype, s.shape, a); + return t10.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = t10.bufferSync(n), u = t10.bufferSync(s), l = Of(p, u, a, i); - return t10.makeTensorInfo(l.shape, s.dtype, l.values); + let p = t10.bufferSync(n), u = t10.bufferSync(s), c = Nf(p, u, a, i); + return t10.makeTensorInfo(c.shape, s.dtype, c.values); } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var h$ = { kernelName: la, backendName: "cpu", kernelFunc: bQ }; -function CQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockSize: s, dataFormat: a } = o; +var $E = { kernelName: ra, backendName: "cpu", kernelFunc: e7 }; +function t7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockSize: s, dataFormat: a } = o; y.assert(a === "NHWC", () => `Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`); - let i = n.shape[0], p = n.shape[1], u = n.shape[2], l = n.shape[3], c = p * s, m = u * s, d = l / (s * s), f = t10.data.get(n.dataId).values, h = new Float32Array(i * c * m * d), g = 0; + let i = n.shape[0], p = n.shape[1], u = n.shape[2], c = n.shape[3], l = p * s, m = u * s, d = c / (s * s), f = t10.data.get(n.dataId).values, h = new Float32Array(i * l * m * d), g = 0; for (let x = 0; x < i; ++x) - for (let b = 0; b < c; ++b) { - let w = Math.floor(b / s), S = b % s; + for (let b = 0; b < l; ++b) { + let C = Math.floor(b / s), S = b % s; for (let k = 0; k < m; ++k) { - let T = Math.floor(k / s), E = k % s, R = (S * s + E) * d; + let _ = Math.floor(k / s), $ = k % s, R = (S * s + $) * d; for (let D = 0; D < d; ++D) { - let O = D + R + l * (T + u * (w + p * x)); + let O = D + R + c * (_ + u * (C + p * x)); h[g++] = f[O]; } } } - return t10.makeTensorInfo([i, c, m, d], n.dtype, h); + return t10.makeTensorInfo([i, l, m, d], n.dtype, h); } -var g$ = { kernelName: Ln, backendName: "cpu", kernelFunc: CQ }; -function FI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; +var RE = { kernelName: ln, backendName: "cpu", kernelFunc: t7 }; +function wI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o; Q([n, s], "depthwiseConv2DNative"); - let l = y.computeStrides(n.shape), c = y.computeStrides(s.shape), m = p; - m == null && (m = [1, 1]), y.assert(C.eitherStridesOrDilationsAreOne(a, m), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`); - let d = C.computeConv2DInfo(n.shape, s.shape, a, m, i, u, true), { filterHeight: f, filterWidth: h, dilationHeight: g, dilationWidth: x, padInfo: b } = d, w = b.left, S = b.top, k = d.outChannels / d.inChannels, T = new Ge(d.outShape, n.dtype), E = t10.data.get(n.dataId).values, R = t10.data.get(s.dataId).values, D = T.values; - for (let F = 0; F < d.batchSize; ++F) { - let O = F * l[0], M = F * T.strides[0]; + let c = y.computeStrides(n.shape), l = y.computeStrides(s.shape), m = p; + m == null && (m = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(a, m), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`); + let d = w.computeConv2DInfo(n.shape, s.shape, a, m, i, u, true), { filterHeight: f, filterWidth: h, dilationHeight: g, dilationWidth: x, padInfo: b } = d, C = b.left, S = b.top, k = d.outChannels / d.inChannels, _ = new tt(d.outShape, n.dtype), $ = t10.data.get(n.dataId).values, R = t10.data.get(s.dataId).values, D = _.values; + for (let P = 0; P < d.batchSize; ++P) { + let O = P * c[0], M = P * _.strides[0]; for (let L = 0; L < d.outHeight; ++L) { - let B = M + L * T.strides[1], z = L * d.strideHeight - S; + let B = M + L * _.strides[1], z = L * d.strideHeight - S; for (let U = 0; U < f; ++U) { let j = z + U * g; if (j < 0 || j >= d.inHeight) continue; - let q = U * c[0], Y = O + j * l[1]; + let q = U * l[0], Y = O + j * c[1]; for (let J = 0; J < d.outWidth; ++J) { - let re = B + J * T.strides[2], ne = J * d.strideWidth - w; + let re = B + J * _.strides[2], ne = J * d.strideWidth - C; for (let ee = 0; ee < h; ++ee) { let oe = ne + ee * x; if (oe < 0 || oe >= d.inWidth) continue; - let ue = q + ee * c[1], me = Y + oe * d.inChannels, be = re, _e = ue; + let ie = q + ee * l[1], le = Y + oe * d.inChannels, be = re, _e = ie; for (let ve = 0; ve < d.inChannels; ++ve) { - let Fe = E[me + ve]; + let Fe = $[le + ve]; for (let Pe = 0; Pe < k; ++Pe) D[be + Pe] += Fe * R[_e + Pe]; be += k, _e += k; @@ -14146,25 +14146,25 @@ function FI(r16) { } } } - return t10.makeTensorInfo(T.shape, T.dtype, T.values); + return t10.makeTensorInfo(_.shape, _.dtype, _.values); } -var x$ = { kernelName: Bn, backendName: "cpu", kernelFunc: FI }; -function wQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: l } = o; +var DE = { kernelName: mn, backendName: "cpu", kernelFunc: wI }; +function r72(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o; Q([n, s], "depthwiseConv2dNativeBackpropFilter"); - let c = C.computeConv2DInfo(n.shape, l, a, i, p, u, true), { strideHeight: m, strideWidth: d, filterHeight: f, filterWidth: h } = c, g = new Ge(c.filterShape, "float32"), x = c.padInfo.left, b = c.padInfo.top, w = c.outChannels / c.inChannels, S = t10.data.get(n.dataId).values, k = new Ge(n.shape, n.dtype, S), T = t10.data.get(s.dataId).values, E = new Ge(s.shape, s.dtype, T); + let l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), { strideHeight: m, strideWidth: d, filterHeight: f, filterWidth: h } = l, g = new tt(l.filterShape, "float32"), x = l.padInfo.left, b = l.padInfo.top, C = l.outChannels / l.inChannels, S = t10.data.get(n.dataId).values, k = new tt(n.shape, n.dtype, S), _ = t10.data.get(s.dataId).values, $ = new tt(s.shape, s.dtype, _); for (let R = 0; R < f; ++R) { - let D = Math.max(0, Math.ceil((b - R) / m)), F = Math.min(c.outHeight, (c.inHeight + b - R) / m); + let D = Math.max(0, Math.ceil((b - R) / m)), P = Math.min(l.outHeight, (l.inHeight + b - R) / m); for (let O = 0; O < h; ++O) { - let M = Math.max(0, Math.ceil((x - O) / d)), L = Math.min(c.outWidth, (c.inWidth + x - O) / d); - for (let B = 0; B < c.outChannels; ++B) { - let z = Math.trunc(B / w), U = B % w, j = 0; - for (let q = 0; q < c.batchSize; ++q) - for (let Y = D; Y < F; ++Y) { + let M = Math.max(0, Math.ceil((x - O) / d)), L = Math.min(l.outWidth, (l.inWidth + x - O) / d); + for (let B = 0; B < l.outChannels; ++B) { + let z = Math.trunc(B / C), U = B % C, j = 0; + for (let q = 0; q < l.batchSize; ++q) + for (let Y = D; Y < P; ++Y) { let J = R + Y * m - b; for (let re = M; re < L; ++re) { let ne = O + re * d - x; - j += k.get(q, J, ne, z) * E.get(q, Y, re, B); + j += k.get(q, J, ne, z) * $.get(q, Y, re, B); } } g.set(j, R, O, z, U); @@ -14173,194 +14173,194 @@ function wQ(r16) { } return t10.makeTensorInfo(g.shape, g.dtype, g.values); } -var y$ = { kernelName: Gi, backendName: "cpu", kernelFunc: wQ }; -function SQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: l } = o; +var AE = { kernelName: Pi, backendName: "cpu", kernelFunc: r72 }; +function o7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o; Q([n, s], "depthwiseConv2DNativeBackpropInput"); - let c = y.computeStrides(n.shape), m = y.computeStrides(s.shape), d = C.computeConv2DInfo(l, s.shape, a, i, p, u, true), f = new Ge(d.inShape, "float32"), h = f.values, [g, x, b] = f.strides, w = t10.data.get(n.dataId).values, [S, k, T] = c, E = t10.data.get(s.dataId).values, [R, D, F] = m, { batchSize: O, filterHeight: M, filterWidth: L, inChannels: B, inHeight: z, inWidth: U, outChannels: j, outHeight: q, outWidth: Y, strideHeight: J, strideWidth: re } = d, ne = M - 1 - d.padInfo.top, ee = L - 1 - d.padInfo.left, oe = j / B; - for (let ue = 0; ue < O; ++ue) - for (let me = 0; me < B; ++me) + let l = y.computeStrides(n.shape), m = y.computeStrides(s.shape), d = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), f = new tt(d.inShape, "float32"), h = f.values, [g, x, b] = f.strides, C = t10.data.get(n.dataId).values, [S, k, _] = l, $ = t10.data.get(s.dataId).values, [R, D, P] = m, { batchSize: O, filterHeight: M, filterWidth: L, inChannels: B, inHeight: z, inWidth: U, outChannels: j, outHeight: q, outWidth: Y, strideHeight: J, strideWidth: re } = d, ne = M - 1 - d.padInfo.top, ee = L - 1 - d.padInfo.left, oe = j / B; + for (let ie = 0; ie < O; ++ie) + for (let le = 0; le < B; ++le) for (let be = 0; be < z; ++be) { let _e = be - ne, ve = Math.max(0, Math.ceil(_e / J)), Fe = Math.min(q, (M + _e) / J); for (let Pe = 0; Pe < U; ++Pe) { - let at = Pe - ee, ct = Math.max(0, Math.ceil(at / re)), Ke = Math.min(Y, (L + at) / re), mt = 0; - for (let ut = ve; ut < Fe; ++ut) { - let gt = ut * J - _e; - for (let xt = ct; xt < Ke; ++xt) { - let Ur = xt * re - at, Bt = S * ue + k * ut + T * xt, io = R * (M - 1 - gt) + D * (L - 1 - Ur) + F * me; - for (let sr = 0; sr < oe; ++sr) { - let Et = me * oe + sr, ar = w[Bt + Et], ir = E[io + sr]; - mt += ar * ir; + let st = Pe - ee, ct = Math.max(0, Math.ceil(st / re)), He = Math.min(Y, (L + st) / re), lt = 0; + for (let it = ve; it < Fe; ++it) { + let ht = it * J - _e; + for (let gt = ct; gt < He; ++gt) { + let Lr = gt * re - st, Mt = S * ie + k * it + _ * gt, to = R * (M - 1 - ht) + D * (L - 1 - Lr) + P * le; + for (let rr = 0; rr < oe; ++rr) { + let Tt = le * oe + rr, or = C[Mt + Tt], nr = $[to + rr]; + lt += or * nr; } } } - h[g * ue + x * be + b * Pe + me] = mt; + h[g * ie + x * be + b * Pe + le] = lt; } } return t10.makeTensorInfo(f.shape, f.dtype, f.values); } -var b$ = { kernelName: Hi, backendName: "cpu", kernelFunc: SQ }; -function IQ(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = y.sizeFromShape(o.shape), s = t10.data.get(o.dataId).values, a = ie([n, n], o.dtype), i = a.values; +var FE = { kernelName: Oi, backendName: "cpu", kernelFunc: o7 }; +function n7(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = y.sizeFromShape(o.shape), s = t10.data.get(o.dataId).values, a = me([n, n], o.dtype), i = a.values; for (let u = 0; u < s.length; u++) i[u * n + u] = s[u]; let p = [...o.shape, ...o.shape]; return t10.makeTensorInfo(p, a.dtype, a.values); } -var C$ = { kernelName: ca, backendName: "cpu", kernelFunc: IQ }; -var w$ = { kernelName: zn, backendName: "cpu", kernelFunc: ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o, filter: n } = r16, { strides: s, pad: a, dilations: i } = t10, p = e, u = p.data.get(o.dataId).values, l = o.shape.length, c = p.data.get(n.dataId).values, m = n.shape.length, { batchSize: d, inHeight: f, inWidth: h, inChannels: g, outHeight: x, outWidth: b, padInfo: w, strideHeight: S, strideWidth: k, filterHeight: T, filterWidth: E, dilationHeight: R, dilationWidth: D, outShape: F } = C.computeDilation2DInfo(o.shape, n.shape, s, a, "NHWC", i), O = y.sizeFromShape(F), M = F.length, L = y.getArrayFromDType(o.dtype, O); +var PE = { kernelName: oa, backendName: "cpu", kernelFunc: n7 }; +var OE = { kernelName: dn, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o, filter: n } = r15, { strides: s, pad: a, dilations: i } = t10, p = e, u = p.data.get(o.dataId).values, c = o.shape.length, l = p.data.get(n.dataId).values, m = n.shape.length, { batchSize: d, inHeight: f, inWidth: h, inChannels: g, outHeight: x, outWidth: b, padInfo: C, strideHeight: S, strideWidth: k, filterHeight: _, filterWidth: $, dilationHeight: R, dilationWidth: D, outShape: P } = w.computeDilation2DInfo(o.shape, n.shape, s, a, "NHWC", i), O = y.sizeFromShape(P), M = P.length, L = y.getArrayFromDType(o.dtype, O); for (let z = 0; z < d; ++z) for (let U = 0; U < x; ++U) { - let j = U * S - w.top; + let j = U * S - C.top; for (let q = 0; q < b; ++q) { - let Y = q * k - w.left; + let Y = q * k - C.left; for (let J = 0; J < g; ++J) { let re = Number.MIN_SAFE_INTEGER; - for (let ee = 0; ee < T; ++ee) { + for (let ee = 0; ee < _; ++ee) { let oe = j + ee * R; if (oe >= 0 && oe < f) - for (let ue = 0; ue < E; ++ue) { - let me = Y + ue * D; - if (me >= 0 && me < h) { - let be = y.locToIndex([z, oe, me, J], l, y.computeStrides(o.shape)), _e = y.locToIndex([ee, ue, J], m, y.computeStrides(n.shape)), ve = u[be] + c[_e]; + for (let ie = 0; ie < $; ++ie) { + let le = Y + ie * D; + if (le >= 0 && le < h) { + let be = y.locToIndex([z, oe, le, J], c, y.computeStrides(o.shape)), _e = y.locToIndex([ee, ie, J], m, y.computeStrides(n.shape)), ve = u[be] + l[_e]; ve > re && (re = ve); } } } - let ne = y.locToIndex([z, U, q, J], M, y.computeStrides(F)); + let ne = y.locToIndex([z, U, q, J], M, y.computeStrides(P)); L[ne] = re; } } } - return { dataId: p.write(y.toTypedArray(L, o.dtype), F, o.dtype), shape: F, dtype: o.dtype }; + return { dataId: p.write(y.toTypedArray(L, o.dtype), P, o.dtype), shape: P, dtype: o.dtype }; } }; -var S$ = { kernelName: qi, backendName: "cpu", kernelFunc: ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o, filter: n, dy: s } = r16, { strides: a, pad: i, dilations: p } = t10, u = e, l = y.toNestedArray(o.shape, u.data.get(o.dataId).values), c = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: w, strideWidth: S, filterHeight: k, filterWidth: T, dilationHeight: E, dilationWidth: R, outShape: D } = C.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - y.assert(s.rank === D.length, () => `Error in ${qi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); - let F = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(n.shape, n.dtype); +var ME = { kernelName: Li, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = t10, u = e, c = y.toNestedArray(o.shape, u.data.get(o.dataId).values), l = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: C, strideWidth: S, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); + y.assert(s.rank === D.length, () => `Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); + let P = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(n.shape, n.dtype); for (let L = 0; L < m; ++L) for (let B = 0; B < g; ++B) { - let z = B * w - b.top; + let z = B * C - b.top; for (let U = 0; U < x; ++U) { let j = U * S - b.left; for (let q = 0; q < h; ++q) { let Y = Number.MIN_SAFE_INTEGER, J = 0, re = 0; for (let ne = 0; ne < k; ++ne) { - let ee = z + ne * E; + let ee = z + ne * $; if (ee >= 0 && ee < d) - for (let oe = 0; oe < T; ++oe) { - let ue = j + oe * R; - if (ue >= 0 && ue < f) { - let me = l[L][ee][ue][q] + c[ne][oe][q]; - me > Y && (Y = me, J = ne, re = oe); + for (let oe = 0; oe < _; ++oe) { + let ie = j + oe * R; + if (ie >= 0 && ie < f) { + let le = c[L][ee][ie][q] + l[ne][oe][q]; + le > Y && (Y = le, J = ne, re = oe); } } } - O[J][re][q] += F[L][B][U][q]; + O[J][re][q] += P[L][B][U][q]; } } } return { dataId: u.write(y.toTypedArray(O, o.dtype), n.shape, n.dtype), shape: n.shape, dtype: n.dtype }; } }; -var I$ = { kernelName: Ki, backendName: "cpu", kernelFunc: ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o, filter: n, dy: s } = r16, { strides: a, pad: i, dilations: p } = t10, u = e, l = y.toNestedArray(o.shape, u.data.get(o.dataId).values), c = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: w, strideWidth: S, filterHeight: k, filterWidth: T, dilationHeight: E, dilationWidth: R, outShape: D } = C.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); - y.assert(s.rank === D.length, () => `Error in ${Ki}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); - let F = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(o.shape, o.dtype); +var LE = { kernelName: Mi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o, filter: n, dy: s } = r15, { strides: a, pad: i, dilations: p } = t10, u = e, c = y.toNestedArray(o.shape, u.data.get(o.dataId).values), l = y.toNestedArray(n.shape, u.data.get(n.dataId).values), { batchSize: m, inHeight: d, inWidth: f, inChannels: h, outHeight: g, outWidth: x, padInfo: b, strideHeight: C, strideWidth: S, filterHeight: k, filterWidth: _, dilationHeight: $, dilationWidth: R, outShape: D } = w.computeDilation2DInfo(o.shape, n.shape, a, i, "NHWC", p); + y.assert(s.rank === D.length, () => `Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`); + let P = y.toNestedArray(D, u.data.get(s.dataId).values), O = y.makeZerosNestedTypedArray(o.shape, o.dtype); for (let L = 0; L < m; ++L) for (let B = 0; B < g; ++B) { - let z = B * w - b.top; + let z = B * C - b.top; for (let U = 0; U < x; ++U) { let j = U * S - b.left; for (let q = 0; q < h; ++q) { let Y = Number.MIN_SAFE_INTEGER, J = z < 0 ? 0 : z, re = j < 0 ? 0 : j; for (let ne = 0; ne < k; ++ne) { - let ee = z + ne * E; + let ee = z + ne * $; if (ee >= 0 && ee < d) - for (let oe = 0; oe < T; ++oe) { - let ue = j + oe * R; - if (ue >= 0 && ue < f) { - let me = l[L][ee][ue][q] + c[ne][oe][q]; - me > Y && (Y = me, J = ee, re = ue); + for (let oe = 0; oe < _; ++oe) { + let ie = j + oe * R; + if (ie >= 0 && ie < f) { + let le = c[L][ee][ie][q] + l[ne][oe][q]; + le > Y && (Y = le, J = ee, re = ie); } } } - O[L][J][re][q] += F[L][B][U][q]; + O[L][J][re][q] += P[L][B][U][q]; } } } return { dataId: u.write(y.toTypedArray(O, o.dtype), o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function vQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n } = e, { canvas: s, options: a } = o, { contextOptions: i, imageOptions: p } = a || {}, u = (p == null ? void 0 : p.alpha) || 1, l = (i == null ? void 0 : i.contextType) || "2d"; - if (l !== "2d") +function s7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n } = e, { canvas: s, options: a } = o, { contextOptions: i, imageOptions: p } = a || {}, u = (p == null ? void 0 : p.alpha) || 1, c = (i == null ? void 0 : i.contextType) || "2d"; + if (c !== "2d") throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`); - let c = s.getContext(l, (i == null ? void 0 : i.contextAttributes) || {}); - if (c == null) - throw new Error(`Could not get the context with ${l} type.`); + let l = s.getContext(c, (i == null ? void 0 : i.contextAttributes) || {}); + if (l == null) + throw new Error(`Could not get the context with ${c} type.`); let [m, d] = n.shape.slice(0, 2), f = n.shape.length === 2 ? 1 : n.shape[2], h = t10.data.get(n.dataId).values, g = n.dtype === "float32" ? 255 : 1, x = new Uint8ClampedArray(d * m * 4); - for (let w = 0; w < m * d; ++w) { + for (let C = 0; C < m * d; ++C) { let S = [0, 0, 0, 255 * u]; - for (let T = 0; T < f; T++) { - let E = h[w * f + T]; + for (let _ = 0; _ < f; _++) { + let $ = h[C * f + _]; if (n.dtype === "float32") { - if (E < 0 || E > 1) - throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${E}.`); - } else if (n.dtype === "int32" && (E < 0 || E > 255)) - throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`); - f === 1 ? (S[0] = E * g, S[1] = E * g, S[2] = E * g) : S[T] = E * g; + if ($ < 0 || $ > 1) + throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`); + } else if (n.dtype === "int32" && ($ < 0 || $ > 255)) + throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`); + f === 1 ? (S[0] = $ * g, S[1] = $ * g, S[2] = $ * g) : S[_] = $ * g; } - let k = w * 4; + let k = C * 4; x[k + 0] = Math.round(S[0]), x[k + 1] = Math.round(S[1]), x[k + 2] = Math.round(S[2]), x[k + 3] = Math.round(S[3]); } s.width = d, s.height = m; let b = new ImageData(x, d, m); - return c.putImageData(b, 0, 0), n; + return l.putImageData(b, 0, 0), n; } -var v$ = { kernelName: Mu, backendName: "cpu", kernelFunc: vQ }; -function Ii(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; +var BE = { kernelName: $u, backendName: "cpu", kernelFunc: s7 }; +function fi(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "sum"); let i; - n.dtype === "bool" ? i = rn({ inputs: { x: n }, backend: t10, attrs: { dtype: "int32" } }) : i = fr({ inputs: { x: n }, backend: t10 }); - let p = i.shape.length, u = y.parseAxisParam(s, i.shape), l = C.getAxesPermutation(u, p), c = u, m = i; - l != null && (m = vt({ inputs: { x: i }, backend: t10, attrs: { perm: l } }), c = C.getInnerMostAxes(c.length, p)), C.assertAxesAreInnerMostDims("sum", c, m.shape.length); - let [d, f] = C.computeOutAndReduceShapes(m.shape, c), h = C.upcastType(m.dtype, "int32"), g = vl(t10, d, h), x = y.sizeFromShape(f), b = t10.data.get(g.dataId).values, w = t10.data.get(m.dataId).values; + n.dtype === "bool" ? i = Ro({ inputs: { x: n }, backend: t10, attrs: { dtype: "int32" } }) : i = lr({ inputs: { x: n }, backend: t10 }); + let p = i.shape.length, u = y.parseAxisParam(s, i.shape), c = w.getAxesPermutation(u, p), l = u, m = i; + c != null && (m = St({ inputs: { x: i }, backend: t10, attrs: { perm: c } }), l = w.getInnerMostAxes(l.length, p)), w.assertAxesAreInnerMostDims("sum", l, m.shape.length); + let [d, f] = w.computeOutAndReduceShapes(m.shape, l), h = w.upcastType(m.dtype, "int32"), g = yc(t10, d, h), x = y.sizeFromShape(f), b = t10.data.get(g.dataId).values, C = t10.data.get(m.dataId).values; for (let S = 0; S < b.length; ++S) { - let k = S * x, T = 0; - for (let E = 0; E < x; ++E) - T += w[k + E]; - b[S] = T; + let k = S * x, _ = 0; + for (let $ = 0; $ < x; ++$) + _ += C[k + $]; + b[S] = _; } if (a) { - let S = C.expandShapeToKeepDim(g.shape, u), k = g; + let S = w.expandShapeToKeepDim(g.shape, u), k = g; g = We({ inputs: { x: g }, backend: t10, attrs: { shape: S } }), t10.disposeIntermediateTensorInfo(k); } - return t10.disposeIntermediateTensorInfo(i), l != null && t10.disposeIntermediateTensorInfo(m), g; -} -var k$ = { kernelName: As, backendName: "cpu", kernelFunc: Ii }; -function kQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = C.decodeEinsumEquation(n, s.length); - C.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: l } = C.getEinsumComputePath(i, p), c = l.length, m = null, d = a.length, f = []; - for (let h = 0; h < c; ++h) { - for (let g of l[h]) { - let { permutationIndices: x, expandDims: b } = C.getEinsumPermutation(d, p[g]), w; - C.isIdentityPermutation(x) ? w = s[g] : (w = vt({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(w)); - let S = w.shape.slice(); + return t10.disposeIntermediateTensorInfo(i), c != null && t10.disposeIntermediateTensorInfo(m), g; +} +var zE = { kernelName: Ss, backendName: "cpu", kernelFunc: fi }; +function a7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); + w.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = w.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; + for (let h = 0; h < l; ++h) { + for (let g of c[h]) { + let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; + w.isIdentityPermutation(x) ? C = s[g] : (C = St({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); + let S = C.shape.slice(); for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); - y.arraysEqual(w.shape, S) || (w = We({ inputs: { x: w }, backend: t10, attrs: { shape: S } }), f.push(w)), m === null ? m = w : (m = dp({ inputs: { a: w, b: m }, backend: t10 }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = We({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = ip({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } - h < c - 1 && (u[h] >= 0 && (m = Ii({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = fi({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && t10.disposeIntermediateTensorInfo(h); return m; } -var N$ = { kernelName: ji, backendName: "cpu", kernelFunc: kQ }; -function NQ(r16) { - let { inputs: e, backend: t10 } = r16, { dy: o, y: n } = e; +var VE = { kernelName: Bi, backendName: "cpu", kernelFunc: a7 }; +function i7(r15) { + let { inputs: e, backend: t10 } = r15, { dy: o, y: n } = e; Q([o, n], "eluGrad"); let s = new Float32Array(y.sizeFromShape(n.shape)), a = t10.data.get(n.dataId).values, i = t10.data.get(o.dataId).values; for (let p = 0; p < a.length; ++p) { @@ -14369,89 +14369,89 @@ function NQ(r16) { } return t10.makeTensorInfo(n.shape, "float32", s); } -var T$ = { kernelName: ri, backendName: "cpu", kernelFunc: NQ }; -var TQ = C.ERF_P; -var _Q = C.ERF_A1; -var EQ = C.ERF_A2; -var $Q = C.ERF_A3; -var RQ = C.ERF_A4; -var DQ = C.ERF_A5; -var AQ = Ie(Un, (r16) => { - let e = Math.sign(r16), t10 = Math.abs(r16), o = 1 / (1 + TQ * t10); - return e * (1 - ((((DQ * o + RQ) * o + $Q) * o + EQ) * o + _Q) * o * Math.exp(-t10 * t10)); +var WE = { kernelName: Xa, backendName: "cpu", kernelFunc: i7 }; +var u7 = w.ERF_P; +var p7 = w.ERF_A1; +var c7 = w.ERF_A2; +var l7 = w.ERF_A3; +var m7 = w.ERF_A4; +var d7 = w.ERF_A5; +var f7 = Ie(gn, (r15) => { + let e = Math.sign(r15), t10 = Math.abs(r15), o = 1 / (1 + u7 * t10); + return e * (1 - ((((d7 * o + m7) * o + l7) * o + c7) * o + p7) * o * Math.exp(-t10 * t10)); }); -var _$ = { kernelName: Un, backendName: "cpu", kernelFunc: AQ }; -function $l(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { input: n } = e, { dim: s } = o, a = n.shape.length, i = n.shape.slice(), p = s; +var UE = { kernelName: gn, backendName: "cpu", kernelFunc: f7 }; +function kc(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { input: n } = e, { dim: s } = o, a = n.shape.length, i = n.shape.slice(), p = s; return s < 0 && (y.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), We({ inputs: { x: n }, backend: t10, attrs: { shape: i } }); } -var E$ = { kernelName: ma, backendName: "cpu", kernelFunc: $l }; -var FQ = Ve((r16, e) => r16 / e); -var Yc = Qe(Vn, FQ); -var Qc = { kernelName: Vn, backendName: "cpu", kernelFunc: Yc }; -function Zf(r16, e, t10) { - let o = r16.shape, n = o[0], s = o[1], a = t10.data.get(r16.dataId), i = a.complexTensorInfos.real, p = a.complexTensorInfos.imag, u = [n, s], l = y.sizeFromShape(u), c = y.getTypedArrayFromDType("float32", l), m = y.getTypedArrayFromDType("float32", l); +var GE = { kernelName: na, backendName: "cpu", kernelFunc: kc }; +var h7 = Ve((r15, e) => r15 / e); +var Ul = Ye(fn, h7); +var Gl = { kernelName: fn, backendName: "cpu", kernelFunc: Ul }; +function Vf(r15, e, t10) { + let o = r15.shape, n = o[0], s = o[1], a = t10.data.get(r15.dataId), i = a.complexTensorInfos.real, p = a.complexTensorInfos.imag, u = [n, s], c = y.sizeFromShape(u), l = y.getTypedArrayFromDType("float32", c), m = y.getTypedArrayFromDType("float32", c); for (let g = 0; g < n; g++) { - let x = nn({ inputs: { x: i }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), b = nn({ inputs: { x: p }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), w = qt({ inputs: { real: x, imag: b }, backend: t10 }), { real: S, imag: k } = PQ(w, e, t10), T = C.mergeRealAndImagArrays(S, k); - for (let E = 0; E < s; E++) { - let R = C.getComplexWithIndex(T, E); - c[g * s + E] = R.real, m[g * s + E] = R.imag; + let x = Ao({ inputs: { x: i }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), b = Ao({ inputs: { x: p }, backend: t10, attrs: { begin: [g, 0], size: [1, s] } }), C = Ht({ inputs: { real: x, imag: b }, backend: t10 }), { real: S, imag: k } = g7(C, e, t10), _ = w.mergeRealAndImagArrays(S, k); + for (let $ = 0; $ < s; $++) { + let R = w.getComplexWithIndex(_, $); + l[g * s + $] = R.real, m[g * s + $] = R.imag; } - t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(b), t10.disposeIntermediateTensorInfo(w); + t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(b), t10.disposeIntermediateTensorInfo(C); } - let d = t10.makeTensorInfo(u, "float32", c), f = t10.makeTensorInfo(u, "float32", m), h = qt({ inputs: { real: d, imag: f }, backend: t10 }); + let d = t10.makeTensorInfo(u, "float32", l), f = t10.makeTensorInfo(u, "float32", m), h = Ht({ inputs: { real: d, imag: f }, backend: t10 }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), h; } -function PQ(r16, e, t10) { - let o = y.sizeFromShape(r16.shape), n = t10.data.get(r16.dataId), s = t10.data.get(n.complexTensorInfos.real.dataId).values, a = t10.data.get(n.complexTensorInfos.imag.dataId).values; - if (OQ(o)) { - let i = PI(s, a, o, e, t10), p = [r16.shape[0], r16.shape[1]]; +function g7(r15, e, t10) { + let o = y.sizeFromShape(r15.shape), n = t10.data.get(r15.dataId), s = t10.data.get(n.complexTensorInfos.real.dataId).values, a = t10.data.get(n.complexTensorInfos.imag.dataId).values; + if (x7(o)) { + let i = SI(s, a, o, e, t10), p = [r15.shape[0], r15.shape[1]]; if (e) { - let u = t10.makeTensorInfo(p, "float32", i.real), l = t10.makeTensorInfo(p, "float32", i.imag), c = t10.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = fr({ inputs: { x: c }, backend: t10 }), d = Qc.kernelFunc({ inputs: { a: u, b: c }, backend: t10 }), f = Qc.kernelFunc({ inputs: { a: l, b: m }, backend: t10 }), h = t10.data.get(d.dataId).values, g = t10.data.get(f.dataId).values; - return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), { real: h, imag: g }; + let u = t10.makeTensorInfo(p, "float32", i.real), c = t10.makeTensorInfo(p, "float32", i.imag), l = t10.makeTensorInfo([], "float32", y.createScalarValue(o, "float32")), m = lr({ inputs: { x: l }, backend: t10 }), d = Gl.kernelFunc({ inputs: { a: u, b: l }, backend: t10 }), f = Gl.kernelFunc({ inputs: { a: c, b: m }, backend: t10 }), h = t10.data.get(d.dataId).values, g = t10.data.get(f.dataId).values; + return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), { real: h, imag: g }; } return i; } else { - let i = C.mergeRealAndImagArrays(s, a), p = MQ(i, o, e); - return C.splitRealAndImagArrays(p); + let i = w.mergeRealAndImagArrays(s, a), p = y7(i, o, e); + return w.splitRealAndImagArrays(p); } } -function OQ(r16) { - return (r16 & r16 - 1) === 0; +function x7(r15) { + return (r15 & r15 - 1) === 0; } -function PI(r16, e, t10, o, n) { +function SI(r15, e, t10, o, n) { if (t10 === 1) - return { real: r16, imag: e }; - let s = C.mergeRealAndImagArrays(r16, e), a = t10 / 2, i = C.complexWithEvenIndex(s), p = i.real, u = i.imag, l = [p.length], c = n.makeTensorInfo(l, "float32", p), m = n.makeTensorInfo(l, "float32", u), d = qt({ inputs: { real: c, imag: m }, backend: n }), f = C.complexWithOddIndex(s), h = f.real, g = f.imag, x = [h.length], b = n.makeTensorInfo(x, "float32", h), w = n.makeTensorInfo(x, "float32", g), S = qt({ inputs: { real: b, imag: w }, backend: n }), k = PI(p, u, a, o, n), T = k.real, E = k.imag, R = [T.length], D = n.makeTensorInfo(R, "float32", T), F = n.makeTensorInfo(R, "float32", E), O = qt({ inputs: { real: D, imag: F }, backend: n }), M = PI(h, g, a, o, n), L = M.real, B = M.imag, z = [L.length], U = n.makeTensorInfo(z, "float32", L), j = n.makeTensorInfo(z, "float32", B), q = qt({ inputs: { real: U, imag: j }, backend: n }), Y = C.exponents(t10, o), J = [Y.real.length], re = n.makeTensorInfo(J, "float32", Y.real), ne = n.makeTensorInfo(J, "float32", Y.imag), ee = qt({ inputs: { real: re, imag: ne }, backend: n }), oe = dp({ inputs: { a: ee, b: q }, backend: n }), ue = Wa({ inputs: { a: O, b: oe }, backend: n }), me = jc({ inputs: { a: O, b: oe }, backend: n }), be = tn({ inputs: { input: ue }, backend: n }), _e = tn({ inputs: { input: me }, backend: n }), ve = Ua({ inputs: { input: ue }, backend: n }), Fe = Ua({ inputs: { input: me }, backend: n }), Pe = Su({ inputs: [be, _e], backend: n, attrs: { axis: 0 } }), at = Su({ inputs: [ve, Fe], backend: n, attrs: { axis: 0 } }), ct = n.data.get(Pe.dataId).values, Ke = n.data.get(at.dataId).values; - return n.disposeIntermediateTensorInfo(c), n.disposeIntermediateTensorInfo(m), n.disposeIntermediateTensorInfo(d), n.disposeIntermediateTensorInfo(b), n.disposeIntermediateTensorInfo(w), n.disposeIntermediateTensorInfo(S), n.disposeIntermediateTensorInfo(D), n.disposeIntermediateTensorInfo(F), n.disposeIntermediateTensorInfo(O), n.disposeIntermediateTensorInfo(U), n.disposeIntermediateTensorInfo(j), n.disposeIntermediateTensorInfo(q), n.disposeIntermediateTensorInfo(re), n.disposeIntermediateTensorInfo(ne), n.disposeIntermediateTensorInfo(ee), n.disposeIntermediateTensorInfo(oe), n.disposeIntermediateTensorInfo(ue), n.disposeIntermediateTensorInfo(me), n.disposeIntermediateTensorInfo(be), n.disposeIntermediateTensorInfo(ve), n.disposeIntermediateTensorInfo(_e), n.disposeIntermediateTensorInfo(Fe), n.disposeIntermediateTensorInfo(Pe), n.disposeIntermediateTensorInfo(at), { real: ct, imag: Ke }; + return { real: r15, imag: e }; + let s = w.mergeRealAndImagArrays(r15, e), a = t10 / 2, i = w.complexWithEvenIndex(s), p = i.real, u = i.imag, c = [p.length], l = n.makeTensorInfo(c, "float32", p), m = n.makeTensorInfo(c, "float32", u), d = Ht({ inputs: { real: l, imag: m }, backend: n }), f = w.complexWithOddIndex(s), h = f.real, g = f.imag, x = [h.length], b = n.makeTensorInfo(x, "float32", h), C = n.makeTensorInfo(x, "float32", g), S = Ht({ inputs: { real: b, imag: C }, backend: n }), k = SI(p, u, a, o, n), _ = k.real, $ = k.imag, R = [_.length], D = n.makeTensorInfo(R, "float32", _), P = n.makeTensorInfo(R, "float32", $), O = Ht({ inputs: { real: D, imag: P }, backend: n }), M = SI(h, g, a, o, n), L = M.real, B = M.imag, z = [L.length], U = n.makeTensorInfo(z, "float32", L), j = n.makeTensorInfo(z, "float32", B), q = Ht({ inputs: { real: U, imag: j }, backend: n }), Y = w.exponents(t10, o), J = [Y.real.length], re = n.makeTensorInfo(J, "float32", Y.real), ne = n.makeTensorInfo(J, "float32", Y.imag), ee = Ht({ inputs: { real: re, imag: ne }, backend: n }), oe = ip({ inputs: { a: ee, b: q }, backend: n }), ie = Pa({ inputs: { a: O, b: oe }, backend: n }), le = Vl({ inputs: { a: O, b: oe }, backend: n }), be = $o({ inputs: { input: ie }, backend: n }), _e = $o({ inputs: { input: le }, backend: n }), ve = Oa({ inputs: { input: ie }, backend: n }), Fe = Oa({ inputs: { input: le }, backend: n }), Pe = hu({ inputs: [be, _e], backend: n, attrs: { axis: 0 } }), st = hu({ inputs: [ve, Fe], backend: n, attrs: { axis: 0 } }), ct = n.data.get(Pe.dataId).values, He = n.data.get(st.dataId).values; + return n.disposeIntermediateTensorInfo(l), n.disposeIntermediateTensorInfo(m), n.disposeIntermediateTensorInfo(d), n.disposeIntermediateTensorInfo(b), n.disposeIntermediateTensorInfo(C), n.disposeIntermediateTensorInfo(S), n.disposeIntermediateTensorInfo(D), n.disposeIntermediateTensorInfo(P), n.disposeIntermediateTensorInfo(O), n.disposeIntermediateTensorInfo(U), n.disposeIntermediateTensorInfo(j), n.disposeIntermediateTensorInfo(q), n.disposeIntermediateTensorInfo(re), n.disposeIntermediateTensorInfo(ne), n.disposeIntermediateTensorInfo(ee), n.disposeIntermediateTensorInfo(oe), n.disposeIntermediateTensorInfo(ie), n.disposeIntermediateTensorInfo(le), n.disposeIntermediateTensorInfo(be), n.disposeIntermediateTensorInfo(ve), n.disposeIntermediateTensorInfo(_e), n.disposeIntermediateTensorInfo(Fe), n.disposeIntermediateTensorInfo(Pe), n.disposeIntermediateTensorInfo(st), { real: ct, imag: He }; } -function MQ(r16, e, t10) { +function y7(r15, e, t10) { let o = new Float32Array(e * 2); for (let n = 0; n < e; n++) { let s = 0, a = 0; for (let i = 0; i < e; i++) { - let p = C.exponent(n * i, e, t10), u = C.getComplexWithIndex(r16, i); + let p = w.exponent(n * i, e, t10), u = w.getComplexWithIndex(r15, i); s += u.real * p.real - u.imag * p.imag, a += u.real * p.imag + u.imag * p.real; } - t10 && (s /= e, a /= e), C.assignToTypedArray(o, s, a, n); + t10 && (s /= e, a /= e), w.assignToTypedArray(o, s, a, n); } return o; } -function LQ(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Zf(i, false, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); +function b7(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Vf(i, false, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; } -var $$ = { kernelName: Xi, backendName: "cpu", kernelFunc: LQ }; -function Zc(r16) { - let { backend: e, attrs: t10 } = r16, { shape: o, value: n, dtype: s } = t10, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); - return BQ(i, n, a), e.makeTensorInfo(o, a, i); +var HE = { kernelName: zi, backendName: "cpu", kernelFunc: b7 }; +function Hl(r15) { + let { backend: e, attrs: t10 } = r15, { shape: o, value: n, dtype: s } = t10, a = s || y.inferDtype(n), i = y.getArrayFromDType(a, y.sizeFromShape(o)); + return C7(i, n, a), e.makeTensorInfo(o, a, i); } -var R$ = { kernelName: da, backendName: "cpu", kernelFunc: Zc }; -function BQ(r16, e, t10) { - r16.fill(e); +var KE = { kernelName: sa, backendName: "cpu", kernelFunc: Hl }; +function C7(r15, e, t10) { + r15.fill(e); } -var D$ = { kernelName: Gn, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { image: o } = r16, n = t10, s = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, l = n.data.get(o.dataId).values; +var qE = { kernelName: Cn, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { image: o } = r15, n = t10, s = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [a, i, p, u] = o.shape, c = n.data.get(o.dataId).values; for (let m = 0; m < a; m++) { let d = m * p * i * u; for (let f = 0; f < i; f++) { @@ -14459,10 +14459,10 @@ var D$ = { kernelName: Gn, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs for (let g = 0; g < p; g++) { let x = g * u; for (let b = 0; b < u; b++) { - let w = Math.round(p - g - 1), S = d + h + x + b, k = l[S]; - if (w >= 0 && w < p) { - let T = w * u, E = d + h + T + b; - k = l[E]; + let C = Math.round(p - g - 1), S = d + h + x + b, k = c[S]; + if (C >= 0 && C < p) { + let _ = C * u, $ = d + h + _ + b; + k = c[$]; } s[S] = k; } @@ -14471,185 +14471,185 @@ var D$ = { kernelName: Gn, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs } return { dataId: n.write(s, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -function zQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = AI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m } }); +function w7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = CI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; - if (l === "NCHW" && a.shape.length === 1 && a.shape[0] !== 1) { + if (c === "NCHW" && a.shape.length === 1 && a.shape[0] !== 1) { let x = We({ inputs: { x: a }, backend: t10, attrs: { shape: [a.shape[0], 1, 1] } }); - h = Wa({ inputs: { a: h, b: x }, backend: t10 }), t10.disposeIntermediateTensorInfo(x); + h = Pa({ inputs: { a: h, b: x }, backend: t10 }), t10.disposeIntermediateTensorInfo(x); } else - h = Wa({ inputs: { a: h, b: a }, backend: t10 }); + h = Pa({ inputs: { a: h, b: a }, backend: t10 }); t10.disposeIntermediateTensorInfo(g); } if (d) { let g = h; - if (l === "NCHW" && d === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { + if (c === "NCHW" && d === "prelu" && i.shape.length === 1 && i.shape[0] !== 1) { let x = We({ inputs: { x: i }, backend: t10, attrs: { shape: [i.shape[0], 1, 1] } }); - h = Cp(t10, h, d, x, f), t10.disposeIntermediateTensorInfo(x); + h = fp(t10, h, d, x, f), t10.disposeIntermediateTensorInfo(x); } else - h = Cp(t10, h, d, i, f); + h = fp(t10, h, d, i, f); t10.disposeIntermediateTensorInfo(g); } return h; } -var A$ = { kernelName: jo, backendName: "cpu", kernelFunc: zQ }; -function VQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = FI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m } }); +var jE = { kernelName: Io, backendName: "cpu", kernelFunc: w7 }; +function S7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = wI({ inputs: { x: n, filter: s }, backend: t10, attrs: { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m } }); if (a) { let g = h; - h = Wa({ inputs: { a: h, b: a }, backend: t10 }), t10.disposeIntermediateTensorInfo(g); + h = Pa({ inputs: { a: h, b: a }, backend: t10 }), t10.disposeIntermediateTensorInfo(g); } if (d) { let g = h; - h = Cp(t10, h, d, i, f), t10.disposeIntermediateTensorInfo(g); + h = fp(t10, h, d, i, f), t10.disposeIntermediateTensorInfo(g); } return h; } -var F$ = { kernelName: Xo, backendName: "cpu", kernelFunc: VQ }; -function WQ(r16) { - let { inputs: e, backend: t10 } = r16, { params: o, indices: n } = e, s = y.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, l, c] = C.prepareAndValidate(o, n); +var XE = { kernelName: vo, backendName: "cpu", kernelFunc: S7 }; +function I7(r15) { + let { inputs: e, backend: t10 } = r15, { params: o, indices: n } = e, s = y.sizeFromShape(o.shape), a = n.shape, i = a[a.length - 1], [p, u, c, l] = w.prepareAndValidate(o, n); if (u === 0) return t10.makeTensorInfo(p, o.dtype, []); - let m = t10.data.get(n.dataId).values, d = t10.bufferSync(o), f = Mf(m, d, o.dtype, u, i, l, c, o.shape, s); + let m = t10.data.get(n.dataId).values, d = t10.bufferSync(o), f = Tf(m, d, o.dtype, u, i, c, l, o.shape, s); return t10.makeTensorInfo(p, o.dtype, f.values); } -var P$ = { kernelName: Kn, backendName: "cpu", kernelFunc: WQ }; -function UQ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, indices: s } = e, { axis: a, batchDims: i } = o; +var YE = { kernelName: vn, backendName: "cpu", kernelFunc: I7 }; +function v7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, indices: s } = e, { axis: a, batchDims: i } = o; Q([n, s], "gatherV2"); - let p = y.parseAxisParam(a, n.shape)[0], u = t10.data.get(s.dataId).values, l = n.shape[p]; + let p = y.parseAxisParam(a, n.shape)[0], u = t10.data.get(s.dataId).values, c = n.shape[p]; for (let S = 0; S < u.length; ++S) { let k = u[S]; - y.assert(k <= l - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${l - 1}]`); + y.assert(k <= c - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${c - 1}]`); } - let c = i; - i == null && (c = 0); - let m = y.sizeFromShape(s.shape), d = C.segment_util.collectGatherOpShapeInfo(n, s, p, c), f = We({ inputs: { x: n }, backend: t10, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = We({ inputs: { x: s }, backend: t10, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = t10.bufferSync(h), b = t10.bufferSync(f), w = Lf(b, x, g); - return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), t10.makeTensorInfo(d.outputShape, w.dtype, w.values); + let l = i; + i == null && (l = 0); + let m = y.sizeFromShape(s.shape), d = w.segment_util.collectGatherOpShapeInfo(n, s, p, l), f = We({ inputs: { x: n }, backend: t10, attrs: { shape: [d.batchSize, d.outerSize, d.dimSize, d.sliceSize] } }), h = We({ inputs: { x: s }, backend: t10, attrs: { shape: [d.batchSize, m / d.batchSize] } }), g = [d.batchSize, d.outerSize, m / d.batchSize, d.sliceSize], x = t10.bufferSync(h), b = t10.bufferSync(f), C = _f(b, x, g); + return t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), t10.makeTensorInfo(d.outputShape, C.dtype, C.values); } -var O$ = { kernelName: fa, backendName: "cpu", kernelFunc: UQ }; -function GQ(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Zf(i, true, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); +var QE = { kernelName: aa, backendName: "cpu", kernelFunc: v7 }; +function k7(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = y.sizeFromShape(o.shape), s = o.shape[o.shape.length - 1], a = n / s, i = We({ inputs: { x: o }, backend: t10, attrs: { shape: [a, s] } }), p = Vf(i, true, t10), u = We({ inputs: { x: p }, backend: t10, attrs: { shape: o.shape } }); return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(p), u; } -var M$ = { kernelName: Yi, backendName: "cpu", kernelFunc: GQ }; -var HQ = Ie(qn, (r16) => Number.isFinite(r16) ? 1 : 0, "bool"); -var L$ = { kernelName: qn, backendName: "cpu", kernelFunc: HQ }; -var KQ = Ie(jn, (r16) => Math.abs(r16) === 1 / 0 ? 1 : 0, "bool"); -var B$ = { kernelName: jn, backendName: "cpu", kernelFunc: KQ }; -var qQ = Ie(Xn, (r16) => Number.isNaN(r16) ? 1 : 0, "bool"); -var z$ = { kernelName: Xn, backendName: "cpu", kernelFunc: qQ }; -function jQ(r16) { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, num: s } = t10, a = Bf(o, n, s); +var ZE = { kernelName: Vi, backendName: "cpu", kernelFunc: k7 }; +var N7 = Ie(Tn, (r15) => Number.isFinite(r15) ? 1 : 0, "bool"); +var JE = { kernelName: Tn, backendName: "cpu", kernelFunc: N7 }; +var T7 = Ie(_n, (r15) => Math.abs(r15) === 1 / 0 ? 1 : 0, "bool"); +var e$ = { kernelName: _n, backendName: "cpu", kernelFunc: T7 }; +var _7 = Ie(En, (r15) => Number.isNaN(r15) ? 1 : 0, "bool"); +var t$ = { kernelName: En, backendName: "cpu", kernelFunc: _7 }; +function E7(r15) { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, num: s } = t10, a = Ef(o, n, s); return e.makeTensorInfo([a.length], "float32", a); } -var V$ = { kernelName: Qn, backendName: "cpu", kernelFunc: jQ }; -var XQ = Ie(Zn, (r16) => Math.log1p(r16)); -var W$ = { kernelName: Zn, backendName: "cpu", kernelFunc: XQ }; -var YQ = Ve((r16, e) => r16 && e); -var QQ = Qe(Jn, YQ, null, "bool"); -var U$ = { kernelName: Jn, backendName: "cpu", kernelFunc: QQ }; -var ZQ = Ie(es, (r16) => r16 ? 0 : 1, "bool"); -var G$ = { kernelName: es, backendName: "cpu", kernelFunc: ZQ }; -var JQ = Ve((r16, e) => r16 || e); -var eZ = Qe(ts, JQ, null, "bool"); -var H$ = { kernelName: ts, backendName: "cpu", kernelFunc: eZ }; -function tZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; +var r$ = { kernelName: An, backendName: "cpu", kernelFunc: E7 }; +var $7 = Ie(Pn, (r15) => Math.log1p(r15)); +var o$ = { kernelName: Pn, backendName: "cpu", kernelFunc: $7 }; +var R7 = Ve((r15, e) => r15 && e); +var D7 = Ye(On, R7, null, "bool"); +var n$ = { kernelName: On, backendName: "cpu", kernelFunc: D7 }; +var A7 = Ie(Mn, (r15) => r15 ? 0 : 1, "bool"); +var s$ = { kernelName: Mn, backendName: "cpu", kernelFunc: A7 }; +var F7 = Ve((r15, e) => r15 || e); +var P7 = Ye(Ln, F7, null, "bool"); +var a$ = { kernelName: Ln, backendName: "cpu", kernelFunc: P7 }; +function O7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; Q(n, "LRN"); - let u = n.shape[3], l = u - 1, c = t10.data.get(n.dataId).values, m = y.sizeFromShape(n.shape), d = new Float32Array(m); + let u = n.shape[3], c = u - 1, l = t10.data.get(n.dataId).values, m = y.sizeFromShape(n.shape), d = new Float32Array(m); function f(h) { - let g = h % u, x = h - g + Math.max(0, g - s), b = h - g + Math.min(g + s, l), w = 0; + let g = h % u, x = h - g + Math.max(0, g - s), b = h - g + Math.min(g + s, c), C = 0; for (; x <= b; x++) { - let S = c[x]; - w += S * S; + let S = l[x]; + C += S * S; } - return w; + return C; } for (let h = 0; h < m; h++) { - let g = f(h), x = c[h] * Math.pow(a + i * g, -p); + let g = f(h), x = l[h] * Math.pow(a + i * g, -p); d[h] = x; } return t10.makeTensorInfo(n.shape, n.dtype, d); } -var K$ = { kernelName: rs, backendName: "cpu", kernelFunc: tZ }; -function rZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: l } = o; +var i$ = { kernelName: Bn, backendName: "cpu", kernelFunc: O7 }; +function M7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; Q(a, "LRNGrad"); - let c = y.sizeFromShape(a.shape), m = a.shape[3], d = t10.data.get(a.dataId).values, f = t10.data.get(n.dataId).values, h = t10.data.get(s.dataId).values, g = new Float32Array(c), x = c; + let l = y.sizeFromShape(a.shape), m = a.shape[3], d = t10.data.get(a.dataId).values, f = t10.data.get(n.dataId).values, h = t10.data.get(s.dataId).values, g = new Float32Array(l), x = l; for (let b = 0; b < x; b++) { - let w = b % m, S = b - w + Math.max(0, w - i), k = b - w + Math.min(m, w + i + 1), T = 0; - for (let E = S; E < k; E++) - T += Math.pow(f[E], 2); - T = u * T + p; - for (let E = S; E < k; E++) { - let R = -2 * u * l * f[E] * h[b] / T; - b === E && (R += Math.pow(T, -l)), R *= d[b], g[E] += R; + let C = b % m, S = b - C + Math.max(0, C - i), k = b - C + Math.min(m, C + i + 1), _ = 0; + for (let $ = S; $ < k; $++) + _ += Math.pow(f[$], 2); + _ = u * _ + p; + for (let $ = S; $ < k; $++) { + let R = -2 * u * c * f[$] * h[b] / _; + b === $ && (R += Math.pow(_, -c)), R *= d[b], g[$] += R; } } return t10.makeTensorInfo(a.shape, n.dtype, g); } -var q$ = { kernelName: oi, backendName: "cpu", kernelFunc: rZ }; -function OI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = t10, p = n.shape, u = p.length, l = y.parseAxisParam(s, p), c = l, m = C.getAxesPermutation(c, u), d = i.data.get(n.dataId).values; +var u$ = { kernelName: Ya, backendName: "cpu", kernelFunc: M7 }; +function II(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = t10, p = n.shape, u = p.length, c = y.parseAxisParam(s, p), l = c, m = w.getAxesPermutation(l, u), d = i.data.get(n.dataId).values; if (m != null) { let S = new Array(u); for (let k = 0; k < S.length; k++) S[k] = p[m[k]]; - d = Tl(d, p, n.dtype, m, S), c = C.getInnerMostAxes(c.length, u), p = S; + d = wc(d, p, n.dtype, m, S), l = w.getInnerMostAxes(l.length, u), p = S; } - Q(n, "max"), C.assertAxesAreInnerMostDims("max", c, u); - let [f, h] = C.computeOutAndReduceShapes(p, c), g = y.sizeFromShape(h), x = zf(d, g, f, n.dtype), b = i.write(x, f, n.dtype), w = f; - return a && (w = C.expandShapeToKeepDim(f, l)), { dataId: b, shape: w, dtype: n.dtype }; + Q(n, "max"), w.assertAxesAreInnerMostDims("max", l, u); + let [f, h] = w.computeOutAndReduceShapes(p, l), g = y.sizeFromShape(h), x = $f(d, g, f, n.dtype), b = i.write(x, f, n.dtype), C = f; + return a && (C = w.expandShapeToKeepDim(f, c)), { dataId: b, shape: C, dtype: n.dtype }; } -var j$ = { kernelName: os, backendName: "cpu", kernelFunc: OI }; -function oZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e; +var p$ = { kernelName: zn, backendName: "cpu", kernelFunc: II }; +function L7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; Q(n, "maxPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - y.assert(C.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let l = C.computePool2DInfo(n.shape, s, a, u, i, p), c; - if (l.filterWidth === 1 && l.filterHeight === 1 && y.arraysEqual(l.inShape, l.outShape)) - c = fr({ inputs: { x: n }, backend: t10 }); + y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = w.computePool2DInfo(n.shape, s, a, u, i, p), l; + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + l = lr({ inputs: { x: n }, backend: t10 }); else { - let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = El(m, n.shape, n.dtype, d, l, "max"); - c = t10.makeTensorInfo(l.outShape, n.dtype, f.values); + let m = t10.data.get(n.dataId).values, d = y.computeStrides(n.shape), f = vc(m, n.shape, n.dtype, d, c, "max"); + l = t10.makeTensorInfo(c.outShape, n.dtype, f.values); } - return c; + return l; } -var X$ = { kernelName: ns, backendName: "cpu", kernelFunc: oZ }; -function nZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; +var c$ = { kernelName: Wn, backendName: "cpu", kernelFunc: L7 }; +function B7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o; Q(n, "maxPool3d"); - let l = C.computePool3DInfo(n.shape, s, a, 1, i, p, u), c = t10.data.get(n.dataId).values, m = Qf(c, n.shape, n.dtype, y.computeStrides(n.shape), l, "max"); + let c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.data.get(n.dataId).values, m = zf(l, n.shape, n.dtype, y.computeStrides(n.shape), c, "max"); return t10.makeTensorInfo(m.shape, "float32", m.values); } -var Y$ = { kernelName: ha, backendName: "cpu", kernelFunc: nZ }; -function sZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; +var l$ = { kernelName: ia, backendName: "cpu", kernelFunc: B7 }; +function z7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o; Q([n, s], "maxPool3DGrad"); - let l = C.computePool3DInfo(s.shape, a, i, 1, p, u), c = t10.bufferSync(s), m = HE(c, l), d = l.strideDepth, f = l.strideHeight, h = l.strideWidth, g = l.dilationDepth, x = l.dilationHeight, b = l.dilationWidth, w = l.effectiveFilterDepth, S = l.effectiveFilterHeight, k = l.effectiveFilterWidth, T = w - 1 - l.padInfo.front, E = k - 1 - l.padInfo.left, R = S - 1 - l.padInfo.top, D = ie(s.shape, "float32"), F = t10.bufferSync(n); - for (let O = 0; O < l.batchSize; ++O) - for (let M = 0; M < l.inChannels; ++M) - for (let L = 0; L < l.inDepth; ++L) - for (let B = 0; B < l.inHeight; ++B) - for (let z = 0; z < l.inWidth; ++z) { - let U = L - T, j = B - R, q = z - E, Y = 0; - for (let J = 0; J < w; J += g) { + let c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = t10.bufferSync(s), m = aE(l, c), d = c.strideDepth, f = c.strideHeight, h = c.strideWidth, g = c.dilationDepth, x = c.dilationHeight, b = c.dilationWidth, C = c.effectiveFilterDepth, S = c.effectiveFilterHeight, k = c.effectiveFilterWidth, _ = C - 1 - c.padInfo.front, $ = k - 1 - c.padInfo.left, R = S - 1 - c.padInfo.top, D = me(s.shape, "float32"), P = t10.bufferSync(n); + for (let O = 0; O < c.batchSize; ++O) + for (let M = 0; M < c.inChannels; ++M) + for (let L = 0; L < c.inDepth; ++L) + for (let B = 0; B < c.inHeight; ++B) + for (let z = 0; z < c.inWidth; ++z) { + let U = L - _, j = B - R, q = z - $, Y = 0; + for (let J = 0; J < C; J += g) { let re = (U + J) / d; - if (!(re < 0 || re >= l.outDepth || Math.floor(re) !== re)) + if (!(re < 0 || re >= c.outDepth || Math.floor(re) !== re)) for (let ne = 0; ne < S; ne += x) { let ee = (j + ne) / f; - if (!(ee < 0 || ee >= l.outHeight || Math.floor(ee) !== ee)) + if (!(ee < 0 || ee >= c.outHeight || Math.floor(ee) !== ee)) for (let oe = 0; oe < k; oe += b) { - let ue = (q + oe) / h; - if (ue < 0 || ue >= l.outWidth || Math.floor(ue) !== ue) + let ie = (q + oe) / h; + if (ie < 0 || ie >= c.outWidth || Math.floor(ie) !== ie) continue; - let me = w * S * k - 1 - m.get(O, re, ee, ue, M), be = J * S * k + ne * k + oe, _e = me === be ? 1 : 0; + let le = C * S * k - 1 - m.get(O, re, ee, ie, M), be = J * S * k + ne * k + oe, _e = le === be ? 1 : 0; if (_e === 0) continue; - let ve = F.get(O, re, ee, ue, M); + let ve = P.get(O, re, ee, ie, M); Y += ve * _e; } } @@ -14658,294 +14658,294 @@ function sZ(r16) { } return t10.makeTensorInfo(D.shape, D.dtype, D.values); } -var Q$ = { kernelName: Ji, backendName: "cpu", kernelFunc: sZ }; -function aZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s, output: a } = e, i = s; +var m$ = { kernelName: Gi, backendName: "cpu", kernelFunc: z7 }; +function V7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s, output: a } = e, i = s; Q([s, a], "maxPoolGrad"); - let { filterSize: p, strides: u, pad: l, dimRoundingMode: c } = o, m = C.computePool2DInfo(i.shape, p, u, 1, l, c), d = t10.data.get(i.dataId).values, f = ie(m.outShape, i.dtype, Yf(d, i.shape, i.dtype, m).values), h = m.strideHeight, g = m.strideWidth, x = m.dilationHeight, b = m.dilationWidth, w = m.effectiveFilterHeight, S = m.effectiveFilterWidth, k = S - 1 - m.padInfo.left, T = w - 1 - m.padInfo.top, E = ie(i.shape, "float32"), R = t10.data.get(n.dataId).values, D = ie(n.shape, "float32", R); - for (let F = 0; F < m.batchSize; ++F) + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = t10.data.get(i.dataId).values, f = me(m.outShape, i.dtype, Bf(d, i.shape, i.dtype, m).values), h = m.strideHeight, g = m.strideWidth, x = m.dilationHeight, b = m.dilationWidth, C = m.effectiveFilterHeight, S = m.effectiveFilterWidth, k = S - 1 - m.padInfo.left, _ = C - 1 - m.padInfo.top, $ = me(i.shape, "float32"), R = t10.data.get(n.dataId).values, D = me(n.shape, "float32", R); + for (let P = 0; P < m.batchSize; ++P) for (let O = 0; O < m.inChannels; ++O) for (let M = 0; M < m.inHeight; ++M) for (let L = 0; L < m.inWidth; ++L) { - let B = M - T, z = L - k, U = 0; - for (let j = 0; j < w; j += x) { + let B = M - _, z = L - k, U = 0; + for (let j = 0; j < C; j += x) { let q = (B + j) / h; if (!(q < 0 || q >= m.outHeight || Math.floor(q) !== q)) for (let Y = 0; Y < S; Y += b) { let J = (z + Y) / g; if (J < 0 || J >= m.outWidth || Math.floor(J) !== J) continue; - let re = w * S - 1 - f.get(F, q, J, O), ne = j * S + Y, ee = re === ne ? 1 : 0; + let re = C * S - 1 - f.get(P, q, J, O), ne = j * S + Y, ee = re === ne ? 1 : 0; if (ee === 0) continue; - let oe = D.get(F, q, J, O); + let oe = D.get(P, q, J, O); U += oe * ee; } } - E.set(U, F, M, L, O); + $.set(U, P, M, L, O); } - return t10.makeTensorInfo(E.shape, E.dtype, E.values); + return t10.makeTensorInfo($.shape, $.dtype, $.values); } -var Z$ = { kernelName: Zi, backendName: "cpu", kernelFunc: aZ }; -function J$(r16, e, t10, o, n) { - let s = y.computeStrides(e), a = El(r16, e, t10, s, n, "max"), i = Yf(r16, e, t10, n, true, o); +var d$ = { kernelName: Ui, backendName: "cpu", kernelFunc: V7 }; +function f$(r15, e, t10, o, n) { + let s = y.computeStrides(e), a = vc(r15, e, t10, s, n, "max"), i = Bf(r15, e, t10, n, true, o); return [a.values, i.values]; } -var eR = { kernelName: ga, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { x: o } = r16, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; +var h$ = { kernelName: ua, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { x: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; Q(o, "MaxPoolWithArgmax"); - let u = p.data.get(o.dataId).values, l = C.computePool2DInfo(o.shape, n, s, [1, 1], a), [c, m] = J$(u, o.shape, o.dtype, i, l), d = p.write(c, l.outShape, o.dtype), f = p.write(m, l.outShape, o.dtype); - return [{ dataId: d, shape: l.outShape, dtype: o.dtype }, { dataId: f, shape: l.outShape, dtype: "int32" }]; + let u = p.data.get(o.dataId).values, c = w.computePool2DInfo(o.shape, n, s, [1, 1], a), [l, m] = f$(u, o.shape, o.dtype, i, c), d = p.write(l, c.outShape, o.dtype), f = p.write(m, c.outShape, o.dtype); + return [{ dataId: d, shape: c.outShape, dtype: o.dtype }, { dataId: f, shape: c.outShape, dtype: "int32" }]; } }; -function iZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = C.computeOutAndReduceShapes(n.shape, i)[1], l = y.sizeFromShape(u), c = [], m = t10.makeTensorInfo([], "float32", new Float32Array([l])); - c.push(m); - let d = rn({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }); - c.push(d); - let f = Yc({ inputs: { a: d, b: m }, backend: t10 }); - c.push(f); - let h = Ii({ inputs: { x: f }, backend: t10, attrs: { axis: s, keepDims: a } }); - return c.forEach((g) => t10.disposeIntermediateTensorInfo(g)), h; -} -var tR = { kernelName: ss, backendName: "cpu", kernelFunc: iZ }; -function uZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; +function W7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = y.parseAxisParam(s, n.shape), u = w.computeOutAndReduceShapes(n.shape, i)[1], c = y.sizeFromShape(u), l = [], m = t10.makeTensorInfo([], "float32", new Float32Array([c])); + l.push(m); + let d = Ro({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }); + l.push(d); + let f = Ul({ inputs: { a: d, b: m }, backend: t10 }); + l.push(f); + let h = fi({ inputs: { x: f }, backend: t10, attrs: { axis: s, keepDims: a } }); + return l.forEach((g) => t10.disposeIntermediateTensorInfo(g)), h; +} +var g$ = { kernelName: Un, backendName: "cpu", kernelFunc: W7 }; +function U7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; Q(n, "min"); - let i = y.parseAxisParam(s, n.shape), p = i, u = C.getAxesPermutation(p, n.shape.length), l = n; - u != null && (l = vt({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = C.getInnerMostAxes(p.length, n.shape.length)), C.assertAxesAreInnerMostDims("min", p, l.shape.length); - let [c, m] = C.computeOutAndReduceShapes(l.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(c), l.dtype), h = t10.data.get(l.dataId).values; + let i = y.parseAxisParam(s, n.shape), p = i, u = w.getAxesPermutation(p, n.shape.length), c = n; + u != null && (c = St({ inputs: { x: n }, backend: t10, attrs: { perm: u } }), p = w.getInnerMostAxes(p.length, n.shape.length)), w.assertAxesAreInnerMostDims("min", p, c.shape.length); + let [l, m] = w.computeOutAndReduceShapes(c.shape, p), d = y.sizeFromShape(m), f = y.makeZerosTypedArray(y.sizeFromShape(l), c.dtype), h = t10.data.get(c.dataId).values; for (let x = 0; x < f.length; ++x) { - let b = x * d, w = h[b]; + let b = x * d, C = h[b]; for (let S = 0; S < d; ++S) { let k = h[b + S]; - (Number.isNaN(k) || k < w) && (w = k); + (Number.isNaN(k) || k < C) && (C = k); } - f[x] = w; + f[x] = C; } - u != null && t10.disposeIntermediateTensorInfo(l); - let g = t10.makeTensorInfo(c, l.dtype, f); + u != null && t10.disposeIntermediateTensorInfo(c); + let g = t10.makeTensorInfo(l, c.dtype, f); if (a) { - let x = C.expandShapeToKeepDim(c, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); + let x = w.expandShapeToKeepDim(l, i), b = We({ inputs: { x: g }, backend: t10, attrs: { shape: x } }); return t10.disposeIntermediateTensorInfo(g), b; } return g; } -var rR = { kernelName: as, backendName: "cpu", kernelFunc: uZ }; -function pZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { paddings: s, mode: a } = o; +var x$ = { kernelName: Gn, backendName: "cpu", kernelFunc: U7 }; +function G7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, mode: a } = o; Q(n, "mirrorPad"); - let i = s.map((w, S) => w[0] + n.shape[S] + w[1]), p = s.map((w) => w[0]), u = s.map((w, S) => w[0] + n.shape[S]), l = a === "reflect" ? 0 : 1, c = t10.data.get(n.dataId).values, m = n.shape.length, d = y.computeStrides(n.shape), f = y.sizeFromShape(i), h = i.length, g = y.computeStrides(i), x = y.getTypedArrayFromDType(n.dtype, f); - for (let w = 0; w < f; w++) { - let S = y.indexToLoc(w, h, g); - for (let T = 0; T < h; T++) - S[T] < p[T] ? S[T] = p[T] * 2 - S[T] - l : S[T] >= u[T] && (S[T] = (u[T] - 1) * 2 - S[T] + l); - S = S.map((T, E) => T - p[E]); + let i = s.map((C, S) => C[0] + n.shape[S] + C[1]), p = s.map((C) => C[0]), u = s.map((C, S) => C[0] + n.shape[S]), c = a === "reflect" ? 0 : 1, l = t10.data.get(n.dataId).values, m = n.shape.length, d = y.computeStrides(n.shape), f = y.sizeFromShape(i), h = i.length, g = y.computeStrides(i), x = y.getTypedArrayFromDType(n.dtype, f); + for (let C = 0; C < f; C++) { + let S = y.indexToLoc(C, h, g); + for (let _ = 0; _ < h; _++) + S[_] < p[_] ? S[_] = p[_] * 2 - S[_] - c : S[_] >= u[_] && (S[_] = (u[_] - 1) * 2 - S[_] + c); + S = S.map((_, $) => _ - p[$]); let k = y.locToIndex(S, m, d); - x[w] = c[k]; + x[C] = l[k]; } return { dataId: t10.write(x, i, n.dtype), shape: i, dtype: n.dtype }; } -var oR = { kernelName: is, backendName: "cpu", kernelFunc: pZ }; -var lZ = Ve((r16, e) => { - let t10 = r16 % e; - return r16 < 0 && e < 0 || r16 >= 0 && e >= 0 ? t10 : (t10 + e) % e; +var y$ = { kernelName: Kn, backendName: "cpu", kernelFunc: G7 }; +var H7 = Ve((r15, e) => { + let t10 = r15 % e; + return r15 < 0 && e < 0 || r15 >= 0 && e >= 0 ? t10 : (t10 + e) % e; }); -var cZ = Qe(us, lZ); -var nR = { kernelName: us, backendName: "cpu", kernelFunc: cZ }; -var aR = Kp(iS()); -function MI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { dim: s } = o, a = n.shape.length, i = s; +var K7 = Ye(qn, H7); +var b$ = { kernelName: qn, backendName: "cpu", kernelFunc: K7 }; +var w$ = zp(jw()); +function vI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { dim: s } = o, a = n.shape.length, i = s; if (i === -1 && (i = a - 1), i !== a - 1) throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`); - let p = y.parseAxisParam([i], n.shape), u = OI({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: p, keepDims: false } }), l = C.expandShapeToKeepDim(u.shape, p), c = We({ inputs: { x: u }, backend: t10, attrs: { shape: l } }), m = jc({ inputs: { a: n, b: c }, backend: t10 }), d = aI({ inputs: { x: m }, backend: t10 }), f = Ii({ inputs: { x: d }, backend: t10, attrs: { axis: p, keepDims: false } }), h = We({ inputs: { x: f }, backend: t10, attrs: { shape: l } }), g = Yc({ inputs: { a: d, b: h }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), g; + let p = y.parseAxisParam([i], n.shape), u = II({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: p, keepDims: false } }), c = w.expandShapeToKeepDim(u.shape, p), l = We({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), m = Vl({ inputs: { a: n, b: l }, backend: t10 }), d = qS({ inputs: { x: m }, backend: t10 }), f = fi({ inputs: { x: d }, backend: t10, attrs: { axis: p, keepDims: false } }), h = We({ inputs: { x: f }, backend: t10, attrs: { shape: c } }), g = Ul({ inputs: { a: d, b: h }, backend: t10 }); + return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), g; } -var sR = { kernelName: Fs, backendName: "cpu", kernelFunc: MI }; -function mZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; +var C$ = { kernelName: Is, backendName: "cpu", kernelFunc: vI }; +function q7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; Q(n, "multinomial"); - let p = i ? n : MI({ inputs: { logits: n }, backend: t10, attrs: { dim: -1 } }), u = p.shape[0], l = p.shape[1], c = t10.data.get(p.dataId).values, m = [u, s], d = y.makeZerosTypedArray(y.sizeFromShape(m), "int32"); + let p = i ? n : vI({ inputs: { logits: n }, backend: t10, attrs: { dim: -1 } }), u = p.shape[0], c = p.shape[1], l = t10.data.get(p.dataId).values, m = [u, s], d = y.makeZerosTypedArray(y.sizeFromShape(m), "int32"); for (let f = 0; f < u; ++f) { - let h = f * l, g = new Float32Array(l - 1); - g[0] = c[h]; - for (let w = 1; w < g.length; ++w) - g[w] = g[w - 1] + c[h + w]; - let x = aR.alea(a.toString()), b = f * s; - for (let w = 0; w < s; ++w) { + let h = f * c, g = new Float32Array(c - 1); + g[0] = l[h]; + for (let C = 1; C < g.length; ++C) + g[C] = g[C - 1] + l[h + C]; + let x = w$.alea(a.toString()), b = f * s; + for (let C = 0; C < s; ++C) { let S = x(); - d[b + w] = g.length; + d[b + C] = g.length; for (let k = 0; k < g.length; k++) if (S < g[k]) { - d[b + w] = k; + d[b + C] = k; break; } } } return i || t10.disposeIntermediateTensorInfo(p), t10.makeTensorInfo(m, "int32", d); } -var iR = { kernelName: ps, backendName: "cpu", kernelFunc: mZ }; -var dZ = Ut.nonMaxSuppressionV3Impl; -function fZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; +var S$ = { kernelName: jn, backendName: "cpu", kernelFunc: q7 }; +var j7 = Vt.nonMaxSuppressionV3Impl; +function X7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o; Q(n, "NonMaxSuppression"); - let u = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, { selectedIndices: c } = dZ(u, l, a, i, p); - return t10.makeTensorInfo([c.length], "int32", new Int32Array(c)); + let u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, { selectedIndices: l } = j7(u, c, a, i, p); + return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var uR = { kernelName: cs, backendName: "cpu", kernelFunc: fZ }; -var hZ = Ut.nonMaxSuppressionV4Impl; -function gZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; +var I$ = { kernelName: Qn, backendName: "cpu", kernelFunc: X7 }; +var Y7 = Vt.nonMaxSuppressionV4Impl; +function Q7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o; Q(n, "NonMaxSuppressionPadded"); - let l = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = hZ(l, c, a, i, p, u); + let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, { selectedIndices: m, validOutputs: d } = Y7(c, l, a, i, p, u); return [t10.makeTensorInfo([m.length], "int32", new Int32Array(m)), t10.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var pR = { kernelName: ni, backendName: "cpu", kernelFunc: gZ }; -var xZ = Ut.nonMaxSuppressionV5Impl; -function yZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; +var v$ = { kernelName: Qa, backendName: "cpu", kernelFunc: Q7 }; +var Z7 = Vt.nonMaxSuppressionV5Impl; +function J7(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o; Q(n, "NonMaxSuppressionWithScore"); - let l = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = xZ(l, c, m, d, f, h); + let c = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Z7(c, l, m, d, f, h); return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var lR = { kernelName: ms, backendName: "cpu", kernelFunc: yZ }; -function bZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o; +var k$ = { kernelName: Zn, backendName: "cpu", kernelFunc: J7 }; +function eQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o; Q(n, "oneHot"); - let u = y.sizeFromShape(n.shape), l = new Float32Array(u * a); - l.fill(p); - let c = t10.data.get(n.dataId).values; + let u = y.sizeFromShape(n.shape), c = new Float32Array(u * a); + c.fill(p); + let l = t10.data.get(n.dataId).values; for (let m = 0; m < u; ++m) - c[m] >= 0 && c[m] < a && (l[m * a + c[m]] = i); - return t10.makeTensorInfo([...n.shape, a], s, l); + l[m] >= 0 && l[m] < a && (c[m * a + l[m]] = i); + return t10.makeTensorInfo([...n.shape, a], s, c); } -var cR = { kernelName: ds, backendName: "cpu", kernelFunc: bZ }; -function Jc(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var N$ = { kernelName: Jn, backendName: "cpu", kernelFunc: eQ }; +function Kl(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "string") throw new Error("zerosLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = tn({ inputs: { input: o }, backend: t10 }), s = Jc({ inputs: { x: n }, backend: t10 }), a = Ua({ inputs: { input: o }, backend: t10 }), i = Jc({ inputs: { x: a }, backend: t10 }), p = qt({ inputs: { real: s, imag: i }, backend: t10 }); + let n = $o({ inputs: { input: o }, backend: t10 }), s = Kl({ inputs: { x: n }, backend: t10 }), a = Oa({ inputs: { input: o }, backend: t10 }), i = Kl({ inputs: { x: a }, backend: t10 }), p = Ht({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; } else - return Zc({ backend: t10, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); + return Hl({ backend: t10, attrs: { shape: o.shape, value: 0, dtype: o.dtype } }); } -var mR = { kernelName: _a, backendName: "cpu", kernelFunc: Jc }; -function dR(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var T$ = { kernelName: Sa, backendName: "cpu", kernelFunc: Kl }; +function _$(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported for string tensors"); if (o.dtype === "complex64") { - let n = tn({ inputs: { input: o }, backend: t10 }), s = dR({ inputs: { x: n }, backend: t10 }), a = Ua({ inputs: { input: o }, backend: t10 }), i = Jc({ inputs: { x: a }, backend: t10 }), p = qt({ inputs: { real: s, imag: i }, backend: t10 }); + let n = $o({ inputs: { input: o }, backend: t10 }), s = _$({ inputs: { x: n }, backend: t10 }), a = Oa({ inputs: { input: o }, backend: t10 }), i = Kl({ inputs: { x: a }, backend: t10 }), p = Ht({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; } else - return Zc({ backend: t10, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); + return Hl({ backend: t10, attrs: { shape: o.shape, value: 1, dtype: o.dtype } }); } -var fR = { kernelName: xa, backendName: "cpu", kernelFunc: dR }; -function LI(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o; +var E$ = { kernelName: ca, backendName: "cpu", kernelFunc: _$ }; +function kI(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; if (e.length === 1) - return $l({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return kc({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; - e.forEach((l) => { - y.assertShapesMatch(s, l.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === l.dtype, () => "All tensors passed to stack must have matching dtypes"); + e.forEach((c) => { + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); - let i = [], p = e.map((l) => { - let c = $l({ inputs: { input: l }, backend: t10, attrs: { dim: n } }); - return i.push(c), c; - }), u = Su({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((l) => t10.disposeIntermediateTensorInfo(l)), u; -} -var hR = { kernelName: ya, backendName: "cpu", kernelFunc: LI }; -function CZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { paddings: s, constantValue: a } = o; + let i = [], p = e.map((c) => { + let l = kc({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + return i.push(l), l; + }), u = hu({ inputs: p, backend: t10, attrs: { axis: n } }); + return i.forEach((c) => t10.disposeIntermediateTensorInfo(c)), u; +} +var $$ = { kernelName: la, backendName: "cpu", kernelFunc: kI }; +function tQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, constantValue: a } = o; Q(n, "pad"); - let i = s.map((b, w) => b[0] + n.shape[w] + b[1]), p = s.map((b) => b[0]), u = t10.data.get(n.dataId).values, l = y.sizeFromShape(n.shape), c = n.shape.length, m = y.computeStrides(n.shape), d = y.sizeFromShape(i), f = i.length, h = y.computeStrides(i), g = y.getTypedArrayFromDType(n.dtype, d); + let i = s.map((b, C) => b[0] + n.shape[C] + b[1]), p = s.map((b) => b[0]), u = t10.data.get(n.dataId).values, c = y.sizeFromShape(n.shape), l = n.shape.length, m = y.computeStrides(n.shape), d = y.sizeFromShape(i), f = i.length, h = y.computeStrides(i), g = y.getTypedArrayFromDType(n.dtype, d); a !== 0 && g.fill(a); - for (let b = 0; b < l; b++) { - let S = y.indexToLoc(b, c, m).map((T, E) => T + p[E]), k = y.locToIndex(S, f, h); + for (let b = 0; b < c; b++) { + let S = y.indexToLoc(b, l, m).map((_, $) => _ + p[$]), k = y.locToIndex(S, f, h); g[k] = u[b]; } return { dataId: t10.write(g, i, n.dtype), shape: i, dtype: n.dtype }; } -var Jf = { kernelName: fs, backendName: "cpu", kernelFunc: CZ }; -var wZ = Ve((r16, e) => Math.pow(r16, e)); -var SZ = Qe(hs, wZ); -var gR = { kernelName: hs, backendName: "cpu", kernelFunc: SZ }; -function IZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t10.data.get(x.dataId).values), u = n.map((x) => x.shape), l = t10.data.get(s.dataId).values, c = t10.data.get(a.dataId).values, [m, d, f] = Vf(p, u, l, s.shape, s.dtype, c, a.shape, i), h = m.map((x) => t10.makeTensorInfo([x.length], "int32", x)), g = t10.makeTensorInfo(f, s.dtype, d); +var Wf = { kernelName: es, backendName: "cpu", kernelFunc: tQ }; +var rQ = Ve((r15, e) => Math.pow(r15, e)); +var oQ = Ye(ts, rQ); +var R$ = { kernelName: ts, backendName: "cpu", kernelFunc: oQ }; +function nQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t10.data.get(x.dataId).values), u = n.map((x) => x.shape), c = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values, [m, d, f] = Rf(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => t10.makeTensorInfo([x.length], "int32", x)), g = t10.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var xR = { kernelName: Qp, backendName: "cpu", kernelFunc: IZ }; -function vZ(r16) { - let { inputs: e, backend: t10 } = r16, { starts: o, limits: n, deltas: s } = e, a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, l] = Wf(a, o.shape, o.dtype, i, n.shape, p, s.shape), c = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([l.length], o.dtype, l); - return [c, m]; +var D$ = { kernelName: Hp, backendName: "cpu", kernelFunc: nQ }; +function sQ(r15) { + let { inputs: e, backend: t10 } = r15, { starts: o, limits: n, deltas: s } = e, a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = Df(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([c.length], o.dtype, c); + return [l, m]; } -var yR = { kernelName: Zp, backendName: "cpu", kernelFunc: vZ }; -function kZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.data.get(n.dataId).values, l = t10.data.get(s.dataId).values, c = t10.data.get(a.dataId).values, m = i.map((g) => t10.data.get(g.dataId).values), d = i.map((g) => g.shape), [f, h] = Uf(u, n.shape, l, s.shape, s.dtype, c, a.shape, m, d, p); +var A$ = { kernelName: Kp, backendName: "cpu", kernelFunc: sQ }; +function aQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.data.get(n.dataId).values, c = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values, m = i.map((g) => t10.data.get(g.dataId).values), d = i.map((g) => g.shape), [f, h] = Af(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); return t10.makeTensorInfo(f, s.dtype, h); } -var bR = { kernelName: Jp, backendName: "cpu", kernelFunc: kZ }; -function NZ(r16) { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, dtype: s, step: a } = t10, i = fp(o, n, a, s); +var F$ = { kernelName: qp, backendName: "cpu", kernelFunc: aQ }; +function iQ(r15) { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, dtype: s, step: a } = t10, i = up(o, n, a, s); return e.makeTensorInfo([i.length], s, i); } -var CR = { kernelName: ba, backendName: "cpu", kernelFunc: NZ }; -var TZ = Ie(xs, (r16) => 1 / r16); -var wR = { kernelName: xs, backendName: "cpu", kernelFunc: TZ }; -function _Z(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var P$ = { kernelName: ma, backendName: "cpu", kernelFunc: iQ }; +var uQ = Ie(ns, (r15) => 1 / r15); +var O$ = { kernelName: ns, backendName: "cpu", kernelFunc: uQ }; +function pQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; Q(n, "resizeBilinear"); - let p = y.computeStrides(n.shape), [u, l] = i, [c, m, d, f] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(y.sizeFromShape([c, u, l, f])), x = [s && u > 1 ? m - 1 : m, s && l > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && l > 1 ? l - 1 : l], w = 0, S = x[0] / b[0], k = x[1] / b[1]; - for (let T = 0; T < c; T++) - for (let E = 0; E < u; E++) { + let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(y.sizeFromShape([l, u, c, f])), x = [s && u > 1 ? m - 1 : m, s && c > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = 0, S = x[0] / b[0], k = x[1] / b[1]; + for (let _ = 0; _ < l; _++) + for (let $ = 0; $ < u; $++) { let R; - a ? R = S * (E + 0.5) - 0.5 : R = S * E; - let D = Math.max(0, Math.floor(R)), F = R - D, O = Math.min(m - 1, Math.ceil(R)), M = T * p[0] + D * p[1], L = T * p[0] + O * p[1]; - for (let B = 0; B < l; B++) { + a ? R = S * ($ + 0.5) - 0.5 : R = S * $; + let D = Math.max(0, Math.floor(R)), P = R - D, O = Math.min(m - 1, Math.ceil(R)), M = _ * p[0] + D * p[1], L = _ * p[0] + O * p[1]; + for (let B = 0; B < c; B++) { let z; a ? z = k * (B + 0.5) - 0.5 : z = k * B; let U = Math.max(0, Math.floor(z)), j = z - U, q = Math.min(d - 1, Math.ceil(z)), Y = M + U * p[2], J = L + U * p[2], re = M + q * p[2], ne = L + q * p[2]; for (let ee = 0; ee < f; ee++) { - let oe = h[Y + ee], ue = h[J + ee], me = h[re + ee], be = h[ne + ee], _e = oe + (me - oe) * j, ve = ue + (be - ue) * j, Fe = _e + (ve - _e) * F; - g[w++] = Fe; + let oe = h[Y + ee], ie = h[J + ee], le = h[re + ee], be = h[ne + ee], _e = oe + (le - oe) * j, ve = ie + (be - ie) * j, Fe = _e + (ve - _e) * P; + g[C++] = Fe; } } } - return t10.makeTensorInfo([c, u, l, f], "float32", g); + return t10.makeTensorInfo([l, u, c, f], "float32", g); } -var SR = { kernelName: Cs, backendName: "cpu", kernelFunc: _Z }; -function EZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o; +var M$ = { kernelName: is, backendName: "cpu", kernelFunc: pQ }; +function cQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o; Q([s, n], "resizeBilinearGrad"); - let i = y.computeStrides(n.shape), [p, u, l, c] = n.shape, [, m, d] = s.shape, f = new Float32Array(p * u * l * c), h = [a && m > 1 ? u - 1 : u, a && d > 1 ? l - 1 : l], g = [a && m > 1 ? m - 1 : m, a && d > 1 ? d - 1 : d], x = h[0] / g[0], b = h[1] / g[1], w = t10.data.get(s.dataId).values, S = 0; + let i = y.computeStrides(n.shape), [p, u, c, l] = n.shape, [, m, d] = s.shape, f = new Float32Array(p * u * c * l), h = [a && m > 1 ? u - 1 : u, a && d > 1 ? c - 1 : c], g = [a && m > 1 ? m - 1 : m, a && d > 1 ? d - 1 : d], x = h[0] / g[0], b = h[1] / g[1], C = t10.data.get(s.dataId).values, S = 0; for (let k = 0; k < p; k++) { - let T = k * i[0]; - for (let E = 0; E < m; E++) { - let R = E * x, D = Math.floor(R), F = Math.min(Math.ceil(R), u - 1), O = T + D * i[1], M = T + F * i[1], L = R - D, B = 1 - L; + let _ = k * i[0]; + for (let $ = 0; $ < m; $++) { + let R = $ * x, D = Math.floor(R), P = Math.min(Math.ceil(R), u - 1), O = _ + D * i[1], M = _ + P * i[1], L = R - D, B = 1 - L; for (let z = 0; z < d; z++) { - let U = z * b, j = Math.floor(U), q = Math.min(Math.ceil(U), l - 1), Y = U - j, J = 1 - Y, re = O + j * i[2], ne = O + q * i[2], ee = M + j * i[2], oe = M + q * i[2], ue = B * J, me = B * Y, be = L * J, _e = L * Y; - for (let ve = 0; ve < c; ve++) { - let Fe = w[S++]; - f[re + ve] += Fe * ue, f[ne + ve] += Fe * me, f[ee + ve] += Fe * be, f[oe + ve] += Fe * _e; + let U = z * b, j = Math.floor(U), q = Math.min(Math.ceil(U), c - 1), Y = U - j, J = 1 - Y, re = O + j * i[2], ne = O + q * i[2], ee = M + j * i[2], oe = M + q * i[2], ie = B * J, le = B * Y, be = L * J, _e = L * Y; + for (let ve = 0; ve < l; ve++) { + let Fe = C[S++]; + f[re + ve] += Fe * ie, f[ne + ve] += Fe * le, f[ee + ve] += Fe * be, f[oe + ve] += Fe * _e; } } } } - return t10.makeTensorInfo([p, l, u, c], "float32", f); + return t10.makeTensorInfo([p, c, u, l], "float32", f); } -var IR = { kernelName: ii, backendName: "cpu", kernelFunc: EZ }; -function $Z(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; +var L$ = { kernelName: Ja, backendName: "cpu", kernelFunc: cQ }; +function lQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o; Q(n, "resizeNearestNeighbor"); - let p = y.computeStrides(n.shape), [u, l] = i, [c, m, d, f] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(c * u * l * f), x = [s && u > 1 ? m - 1 : m, s && l > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && l > 1 ? l - 1 : l], w = x[0] / b[0], S = x[1] / b[1], k = 0; - for (let T = 0; T < c; T++) { - let E = T * p[0]; + let p = y.computeStrides(n.shape), [u, c] = i, [l, m, d, f] = n.shape, h = t10.data.get(n.dataId).values, g = new Float32Array(l * u * c * f), x = [s && u > 1 ? m - 1 : m, s && c > 1 ? d - 1 : d], b = [s && u > 1 ? u - 1 : u, s && c > 1 ? c - 1 : c], C = x[0] / b[0], S = x[1] / b[1], k = 0; + for (let _ = 0; _ < l; _++) { + let $ = _ * p[0]; for (let R = 0; R < u; R++) { - let D = a ? w * (R + 0.5) : w * R, F = Math.min(m - 1, s ? Math.round(D) : Math.floor(D)); - a && (F = Math.max(0, F)); - let O = E + F * p[1]; - for (let M = 0; M < l; M++) { + let D = a ? C * (R + 0.5) : C * R, P = Math.min(m - 1, s ? Math.round(D) : Math.floor(D)); + a && (P = Math.max(0, P)); + let O = $ + P * p[1]; + for (let M = 0; M < c; M++) { let L = a ? S * (M + 0.5) : S * M, B = Math.min(d - 1, s ? Math.round(L) : Math.floor(L)); a && (B = Math.max(0, B)); let z = O + B * p[2]; @@ -14956,32 +14956,32 @@ function $Z(r16) { } } } - return t10.makeTensorInfo([c, u, l, f], n.dtype, g); + return t10.makeTensorInfo([l, u, c, f], n.dtype, g); } -var vR = { kernelName: bs, backendName: "cpu", kernelFunc: $Z }; -function RZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o; +var B$ = { kernelName: as, backendName: "cpu", kernelFunc: lQ }; +function mQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o; Q([s, n], "resizeNearestNeighborGrad"); - let i = y.computeStrides(n.shape), p = y.computeStrides(s.shape), [u, l, c, m] = n.shape, [, d, f] = s.shape, h = new Float32Array(u * l * c * m), g = t10.data.get(s.dataId).values, x = [a && d > 1 ? l - 1 : l, a && f > 1 ? c - 1 : c], b = [a && d > 1 ? d - 1 : d, a && f > 1 ? f - 1 : f], w = x[0] / b[0], S = x[1] / b[1], k = 1 / w, T = 1 / S, E = Math.ceil(k) * 2 + 2, R = Math.ceil(T) * 2 + 2; + let i = y.computeStrides(n.shape), p = y.computeStrides(s.shape), [u, c, l, m] = n.shape, [, d, f] = s.shape, h = new Float32Array(u * c * l * m), g = t10.data.get(s.dataId).values, x = [a && d > 1 ? c - 1 : c, a && f > 1 ? l - 1 : l], b = [a && d > 1 ? d - 1 : d, a && f > 1 ? f - 1 : f], C = x[0] / b[0], S = x[1] / b[1], k = 1 / C, _ = 1 / S, $ = Math.ceil(k) * 2 + 2, R = Math.ceil(_) * 2 + 2; for (let D = 0; D < u; D++) { - let F = D * i[0]; - for (let O = 0; O < l; O++) { - let M = F + O * i[1], L = Math.floor(O * k), B = Math.floor(L - E / 2); - for (let z = 0; z < c; z++) { - let U = M + z * i[2], j = Math.floor(z * T), q = Math.floor(j - R / 2); + let P = D * i[0]; + for (let O = 0; O < c; O++) { + let M = P + O * i[1], L = Math.floor(O * k), B = Math.floor(L - $ / 2); + for (let z = 0; z < l; z++) { + let U = M + z * i[2], j = Math.floor(z * _), q = Math.floor(j - R / 2); for (let Y = 0; Y < m; Y++) { let J = 0; - for (let re = 0; re < E; re++) { + for (let re = 0; re < $; re++) { let ne = re + B; if (ne < 0 || ne >= d) continue; - let ee = F + ne * p[1], oe = ne * w, ue = Math.min(l - 1, a ? Math.round(oe) : Math.floor(oe)); - if (O === ue) - for (let me = 0; me < R; me++) { - let be = me + q; + let ee = P + ne * p[1], oe = ne * C, ie = Math.min(c - 1, a ? Math.round(oe) : Math.floor(oe)); + if (O === ie) + for (let le = 0; le < R; le++) { + let be = le + q; if (be < 0 || be >= f) continue; - let _e = ee + be * p[2], ve = be * S, Fe = Math.min(c - 1, a ? Math.round(ve) : Math.floor(ve)); + let _e = ee + be * p[2], ve = be * S, Fe = Math.min(l - 1, a ? Math.round(ve) : Math.floor(ve)); z === Fe && (J += g[_e + Y]); } } @@ -14992,38 +14992,38 @@ function RZ(r16) { } return t10.makeTensorInfo(n.shape, n.dtype, h); } -var kR = { kernelName: ai, backendName: "cpu", kernelFunc: RZ }; -function DZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dims: s } = o; +var z$ = { kernelName: Za, backendName: "cpu", kernelFunc: mQ }; +function dQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o; Q(n, "reverse"); let a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return fr({ inputs: { x: n }, backend: t10 }); - let p = new Ge(n.shape, n.dtype), u = t10.bufferSync(n); - for (let l = 0; l < p.size; l++) { - let c = p.indexToLoc(l), m = c.slice(); - i.forEach((d) => m[d] = n.shape[d] - 1 - m[d]), p.set(u.get(...m), ...c); + return lr({ inputs: { x: n }, backend: t10 }); + let p = new tt(n.shape, n.dtype), u = t10.bufferSync(n); + for (let c = 0; c < p.size; c++) { + let l = p.indexToLoc(c), m = l.slice(); + i.forEach((d) => m[d] = n.shape[d] - 1 - m[d]), p.set(u.get(...m), ...l); } return t10.makeTensorInfo(p.shape, p.dtype, p.values); } -var NR = { kernelName: Ss, backendName: "cpu", kernelFunc: DZ }; -var TR = { kernelName: Vs, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { image: o } = r16, { radians: n, fillValue: s, center: a } = e, i = t10, p = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [u, l, c, m] = o.shape, [d, f] = C.getImageCenter(a, l, c), h = 255, g = Math.sin(n), x = Math.cos(n), b = i.data.get(o.dataId).values; +var V$ = { kernelName: ps, backendName: "cpu", kernelFunc: dQ }; +var W$ = { kernelName: Ds, backendName: "cpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = e, i = t10, p = y.getTypedArrayFromDType(o.dtype, y.sizeFromShape(o.shape)), [u, c, l, m] = o.shape, [d, f] = w.getImageCenter(a, c, l), h = 255, g = Math.sin(n), x = Math.cos(n), b = i.data.get(o.dataId).values; for (let S = 0; S < u; S++) { - let k = S * c * l * m; - for (let T = 0; T < l; T++) { - let E = T * (c * m); - for (let R = 0; R < c; R++) { + let k = S * l * c * m; + for (let _ = 0; _ < c; _++) { + let $ = _ * (l * m); + for (let R = 0; R < l; R++) { let D = R * m; - for (let F = 0; F < m; F++) { - let O = [u, T, R, F], M = O[2], L = O[1], B = (M - d) * x - (L - f) * g, z = (M - d) * g + (L - f) * x; + for (let P = 0; P < m; P++) { + let O = [u, _, R, P], M = O[2], L = O[1], B = (M - d) * x - (L - f) * g, z = (M - d) * g + (L - f) * x; B = Math.round(B + d), z = Math.round(z + f); let U = s; - if (typeof s != "number" && (F === 3 ? U = h : U = s[F]), B >= 0 && B < c && z >= 0 && z < l) { - let q = z * (c * m), Y = B * m, J = k + q + Y + F; + if (typeof s != "number" && (P === 3 ? U = h : U = s[P]), B >= 0 && B < l && z >= 0 && z < c) { + let q = z * (l * m), Y = B * m, J = k + q + Y + P; U = b[J]; } - let j = k + E + D + F; + let j = k + $ + D + P; p[j] = U; } } @@ -15031,82 +15031,82 @@ var TR = { kernelName: Vs, backendName: "cpu", kernelFunc: ({ inputs: r16, attrs } return { dataId: i.write(p, o.shape, o.dtype), shape: o.shape, dtype: o.dtype }; } }; -var AZ = Ie(Is, (r16) => { - let e = Math.floor(r16); - return r16 - e < 0.5 ? Math.floor(r16) : r16 - e > 0.5 ? Math.ceil(r16) : e % 2 === 0 ? e : e + 1; +var fQ = Ie(cs, (r15) => { + let e = Math.floor(r15); + return r15 - e < 0.5 ? Math.floor(r15) : r15 - e > 0.5 ? Math.ceil(r15) : e % 2 === 0 ? e : e + 1; }); -var _R = { kernelName: Is, backendName: "cpu", kernelFunc: AZ }; -function FZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: l, outputSize: c } = C.calculateShapes(s, n, a), m = true, d = t10.bufferSync(n), f = t10.bufferSync(s), h = Xs(d, f, a, c, u, p, i, l, 0, m); +var U$ = { kernelName: cs, backendName: "cpu", kernelFunc: fQ }; +function hQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = true, d = t10.bufferSync(n), f = t10.bufferSync(s), h = zs(d, f, a, l, u, p, i, c, 0, m); return t10.makeTensorInfo(a, h.dtype, h.values); } -var ER = { kernelName: vs, backendName: "cpu", kernelFunc: FZ }; -function PZ(r16, e) { - let t10 = 0, o = r16.length, n = 0; +var G$ = { kernelName: ms, backendName: "cpu", kernelFunc: hQ }; +function gQ(r15, e) { + let t10 = 0, o = r15.length, n = 0; for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r16[n] < e ? t10 = n + 1 : o = n; + n = Math.floor((t10 + o) / 2), r15[n] < e ? t10 = n + 1 : o = n; return o; } -function OZ(r16, e) { - let t10 = 0, o = r16.length, n = 0; +function xQ(r15, e) { + let t10 = 0, o = r15.length, n = 0; for (; t10 < o; ) - n = Math.floor((t10 + o) / 2), r16[n] <= e ? t10 = n + 1 : o = n; + n = Math.floor((t10 + o) / 2), r15[n] <= e ? t10 = n + 1 : o = n; return o; } -function $R(r16, e, t10, o, n, s) { +function H$(r15, e, t10, o, n, s) { let a = y.getArrayFromDType("int32", t10 * n); for (let i = 0; i < t10; ++i) { - let p = r16.slice(i * o, (i + 1) * o), u = i * n; - for (let l = 0; l < n; ++l) - a[u + l] = s === "left" ? PZ(p, e[l + u]) : OZ(p, e[l + u]); + let p = r15.slice(i * o, (i + 1) * o), u = i * n; + for (let c = 0; c < n; ++c) + a[u + c] = s === "left" ? gQ(p, e[c + u]) : xQ(p, e[c + u]); } return a; } -function MZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sortedSequence: n, values: s } = e, { side: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = $R(i, p, n.shape[0], n.shape[1], s.shape[1], a); +function yQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, u = H$(i, p, n.shape[0], n.shape[1], s.shape[1], a); return t10.makeTensorInfo(s.shape, "int32", u); } -var RR = { kernelName: Ns, backendName: "cpu", kernelFunc: MZ }; -function LZ(r16) { - let { inputs: e, backend: t10 } = r16, { condition: o, t: n, e: s } = e; +var K$ = { kernelName: fs, backendName: "cpu", kernelFunc: yQ }; +function bQ(r15) { + let { inputs: e, backend: t10 } = r15, { condition: o, t: n, e: s } = e; Q([o, n, s], "select"); - let a = o.shape.length, i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, l = pt(n.dtype, s.dtype), c = y.makeZerosTypedArray(y.sizeFromShape(n.shape), l), m = 0, d = a === 0 || a > 1 || n.shape.length === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); + let a = o.shape.length, i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = dt(n.dtype, s.dtype), l = y.makeZerosTypedArray(y.sizeFromShape(n.shape), c), m = 0, d = a === 0 || a > 1 || n.shape.length === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); for (let f = 0; f < i.length; f++) for (let h = 0; h < d; h++) - i[f] === 1 ? c[m++] = p[f] : c[m++] = u[f]; - return t10.makeTensorInfo(n.shape, l, c); -} -var DR = { kernelName: wa, backendName: "cpu", kernelFunc: LZ }; -var BZ = C.SELU_SCALEALPHA; -var zZ = C.SELU_SCALE; -var VZ = Ie(Ts, (r16) => r16 >= 0 ? zZ * r16 : BZ * (Math.exp(r16) - 1)); -var AR = { kernelName: Ts, backendName: "cpu", kernelFunc: VZ }; -var WZ = Ie(Rs, (r16) => r16 < 0 ? -1 : r16 > 0 ? 1 : 0); -var FR = { kernelName: Rs, backendName: "cpu", kernelFunc: WZ }; -var UZ = Ie(Es, (r16) => Math.sin(r16)); -var PR = { kernelName: Es, backendName: "cpu", kernelFunc: UZ }; -var GZ = Ie($s, (r16) => Math.sinh(r16)); -var OR = { kernelName: $s, backendName: "cpu", kernelFunc: GZ }; -var HZ = 11920928955078125e-23; -var MR = Math.log(HZ) + 2; -var KZ = Ie(Ds, (r16) => { - let e = r16 > -MR, t10 = r16 < MR, o = Math.exp(r16), n; - return t10 ? n = o : e ? n = r16 : n = Math.log(1 + o), n; + i[f] === 1 ? l[m++] = p[f] : l[m++] = u[f]; + return t10.makeTensorInfo(n.shape, c, l); +} +var q$ = { kernelName: fa, backendName: "cpu", kernelFunc: bQ }; +var CQ = w.SELU_SCALEALPHA; +var wQ = w.SELU_SCALE; +var SQ = Ie(hs, (r15) => r15 >= 0 ? wQ * r15 : CQ * (Math.exp(r15) - 1)); +var j$ = { kernelName: hs, backendName: "cpu", kernelFunc: SQ }; +var IQ = Ie(ys, (r15) => r15 < 0 ? -1 : r15 > 0 ? 1 : 0); +var X$ = { kernelName: ys, backendName: "cpu", kernelFunc: IQ }; +var vQ = Ie(gs, (r15) => Math.sin(r15)); +var Y$ = { kernelName: gs, backendName: "cpu", kernelFunc: vQ }; +var kQ = Ie(xs, (r15) => Math.sinh(r15)); +var Q$ = { kernelName: xs, backendName: "cpu", kernelFunc: kQ }; +var NQ = 11920928955078125e-23; +var Z$ = Math.log(NQ) + 2; +var TQ = Ie(Cs, (r15) => { + let e = r15 > -Z$, t10 = r15 < Z$, o = Math.exp(r15), n; + return t10 ? n = o : e ? n = r15 : n = Math.log(1 + o), n; }); -var LR = { kernelName: Ds, backendName: "cpu", kernelFunc: KZ }; -function qZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, paddings: a } = o; +var J$ = { kernelName: Cs, backendName: "cpu", kernelFunc: TQ }; +function _Q(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, paddings: a } = o; Q([n], "spaceToBatchND"); let i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); - for (let T = 1 + s.length; T < n.shape.length; ++T) + for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); - let u = Jf.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = C.getReshaped(u.shape, s, i, false), c = C.getPermuted(l.length, s.length, false), m = C.getReshapedPermuted(u.shape, s, i, false), h = We({ inputs: { x: u }, backend: t10, attrs: { shape: l } }), b = vt({ inputs: { x: h }, backend: t10, attrs: { perm: c } }), k = We({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); + let u = Wf.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = w.getReshaped(u.shape, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u.shape, s, i, false), h = We({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = St({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = We({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); return t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(b), k; } -var BR = { kernelName: Sa, backendName: "cpu", kernelFunc: qZ }; -function jZ(r16) { - let { inputs: e, backend: t10 } = r16, { indices: o, values: n, denseShape: s, defaultValue: a } = e; +var eR = { kernelName: ga, backendName: "cpu", kernelFunc: _Q }; +function EQ(r15) { + let { inputs: e, backend: t10 } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = e; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -15119,12 +15119,12 @@ function jZ(r16) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, l = t10.data.get(a.dataId).values[0], [c, m, d, f, h] = Gf(i, o.shape, o.dtype, p, n.dtype, u, l); - return [t10.makeTensorInfo(m, o.dtype, c), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; + let i = t10.data.get(o.dataId).values, p = t10.data.get(n.dataId).values, u = t10.data.get(s.dataId).values, c = t10.data.get(a.dataId).values[0], [l, m, d, f, h] = Ff(i, o.shape, o.dtype, p, n.dtype, u, c); + return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var zR = { kernelName: eu, backendName: "cpu", kernelFunc: jZ }; -function XZ(r16) { - let { inputs: e, backend: t10 } = r16, { inputIndices: o, inputShape: n, newShape: s } = e; +var tR = { kernelName: Ki, backendName: "cpu", kernelFunc: EQ }; +function $Q(r15) { + let { inputs: e, backend: t10 } = r15, { inputIndices: o, inputShape: n, newShape: s } = e; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); @@ -15133,12 +15133,12 @@ function XZ(r16) { ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = Array.from(t10.data.get(n.dataId).values), i = t10.data.get(o.dataId).values, p = Array.from(t10.data.get(s.dataId).values), [u, l, c] = Hf(i, o.shape, o.dtype, a, p); - return [t10.makeTensorInfo(l, o.dtype, u), t10.makeTensorInfo([c.length], s.dtype, new Int32Array(c))]; + let a = Array.from(t10.data.get(n.dataId).values), i = t10.data.get(o.dataId).values, p = Array.from(t10.data.get(s.dataId).values), [u, c, l] = Pf(i, o.shape, o.dtype, a, p); + return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var VR = { kernelName: ui, backendName: "cpu", kernelFunc: XZ }; -function YZ(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; +var rR = { kernelName: ei, backendName: "cpu", kernelFunc: $Q }; +function RQ(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -15149,12 +15149,12 @@ function YZ(r16) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, l] = _l(a, o.shape, o.dtype, i, p, true); - return t10.makeTensorInfo(l, o.dtype, u); + let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = Sc(a, o.shape, o.dtype, i, p, true); + return t10.makeTensorInfo(c, o.dtype, u); } -var WR = { kernelName: va, backendName: "cpu", kernelFunc: YZ }; -function QZ(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; +var oR = { kernelName: ya, backendName: "cpu", kernelFunc: RQ }; +function DQ(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -15165,31 +15165,31 @@ function QZ(r16) { ${s.shape}`); if (n.shape[0] !== s.shape[0]) throw new Error("segmentIds and indices should have same size."); - let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, l] = _l(a, o.shape, o.dtype, i, p); - return t10.makeTensorInfo(l, o.dtype, u); + let a = t10.data.get(o.dataId).values, i = t10.data.get(n.dataId).values, p = t10.data.get(s.dataId).values, [u, c] = Sc(a, o.shape, o.dtype, i, p); + return t10.makeTensorInfo(c, o.dtype, u); } -var UR = { kernelName: ka, backendName: "cpu", kernelFunc: QZ }; -function ZZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: l, strides: c, outputSize: m } = C.calculateShapes(s, n, i), d = false, f = t10.bufferSync(n), h; +var nR = { kernelName: ba, backendName: "cpu", kernelFunc: DQ }; +function AQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false, f = t10.bufferSync(n), h; switch (s.dtype) { case "bool": { let g = t10.bufferSync(s), x = !!t10.data.get(a.dataId).values[0]; - h = Xs(f, g, i, m, l, u, p, c, x, d); + h = zs(f, g, i, m, c, u, p, l, x, d); break; } case "float32": { let g = t10.bufferSync(s), x = t10.data.get(a.dataId).values[0]; - h = Xs(f, g, i, m, l, u, p, c, x, d); + h = zs(f, g, i, m, c, u, p, l, x, d); break; } case "int32": { let g = t10.bufferSync(s), x = t10.data.get(a.dataId).values[0]; - h = Xs(f, g, i, m, l, u, p, c, x, d); + h = zs(f, g, i, m, c, u, p, l, x, d); break; } case "string": { let g = t10.bufferSync(s), x = y.decodeString(t10.data.get(a.dataId).values[0]); - h = Xs(f, g, i, m, l, u, p, c, x, d); + h = zs(f, g, i, m, c, u, p, l, x, d); break; } default: @@ -15197,19 +15197,19 @@ function ZZ(r16) { } return t10.makeTensorInfo(i, h.dtype, h.values); } -var GR = { kernelName: Ps, backendName: "cpu", kernelFunc: ZZ }; -function JZ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = C.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), l = n.shape.slice(); - return p.map((c) => { - let m = [...l]; - m[i] = c; - let d = nn({ inputs: { x: n }, backend: t10, attrs: { begin: u, size: m } }); - return u[i] += c, d; +var sR = { kernelName: vs, backendName: "cpu", kernelFunc: AQ }; +function FQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = w.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); + return p.map((l) => { + let m = [...c]; + m[i] = l; + let d = Ao({ inputs: { x: n }, backend: t10, attrs: { begin: u, size: m } }); + return u[i] += l, d; }); } -var HR = { kernelName: Ia, backendName: "cpu", kernelFunc: JZ }; -var KR = { kernelName: tu, backendName: "cpu", kernelFunc: ({ inputs: r16, backend: e }) => { - let { x: t10 } = r16, o = e; +var aR = { kernelName: xa, backendName: "cpu", kernelFunc: FQ }; +var iR = { kernelName: qi, backendName: "cpu", kernelFunc: ({ inputs: r15, backend: e }) => { + let { x: t10 } = r15, o = e; Q(t10, "square"); let n = o.data.get(t10.dataId).values, s = new Float32Array(n.length); for (let i = 0; i < n.length; ++i) { @@ -15218,83 +15218,83 @@ var KR = { kernelName: tu, backendName: "cpu", kernelFunc: ({ inputs: r16, backe } return { dataId: o.write(s, t10.shape, t10.dtype), shape: t10.shape, dtype: t10.dtype }; } }; -var e9 = Ie(Ko, (r16, e) => { +var PQ = Ie(wo, (r15, e) => { let t10 = e; - return isNaN(r16) ? NaN : r16 > 0 ? 1 : t10.alpha; + return isNaN(r15) ? NaN : r15 > 0 ? 1 : t10.alpha; }); -var qR = { kernelName: Ko, backendName: "cpu", kernelFunc: e9 }; -function t9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: l, newAxisMask: c, shrinkAxisMask: m } = o; +var uR = { kernelName: wo, backendName: "cpu", kernelFunc: PQ }; +function OQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o; Q(n, "stridedSlice"); - let { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: w, strides: S } = nt.sliceInfo(n.shape, s, a, i, p, u, l, c, m), k; + let { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) k = We({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); else if (g || x) { y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let T = nt.computeOutShape(b, w, S), E = nn({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: T } }); - k = We({ inputs: { x: E }, backend: t10, attrs: { shape: f } }), t10.disposeIntermediateTensorInfo(E); + let _ = pt.computeOutShape(b, C, S), $ = Ao({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); + k = We({ inputs: { x: $ }, backend: t10, attrs: { shape: f } }), t10.disposeIntermediateTensorInfo($); } else { - let T = t10.bufferSync(n), E = Kf(d, T, S, b); - k = t10.makeTensorInfo(f, E.dtype, E.values); + let _ = t10.bufferSync(n), $ = Of(d, _, S, b); + k = t10.makeTensorInfo(f, $.dtype, $.values); } return k; } -var jR = { kernelName: Os, backendName: "cpu", kernelFunc: t9 }; -function r92(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: l, dataSplits: c } = e, m = t10.data.get(l.dataId).values, d = t10.data.get(c.dataId).values, [f, h] = gp(m, d, n, s, a, i, p, u); - return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(c.shape, "int32", h)]; +var pR = { kernelName: Ns, backendName: "cpu", kernelFunc: OQ }; +function MQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.data.get(c.dataId).values, d = t10.data.get(l.dataId).values, [f, h] = cp(m, d, n, s, a, i, p, u); + return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(l.shape, "int32", h)]; } -var XR = { kernelName: Na, backendName: "cpu", kernelFunc: r92 }; -function o9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { skipEmpty: n } = o, { input: s, delimiter: a } = e; +var cR = { kernelName: Ca, backendName: "cpu", kernelFunc: MQ }; +function LQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { skipEmpty: n } = o, { input: s, delimiter: a } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (s.shape.length !== 1) throw new Error(`Input must be a vector, got shape: ${s.shape}`); if (a.shape.length !== 0) throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`); - let i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values[0], [u, l, c] = xp(i, p, n), m = l.length; - return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", l), t10.makeTensorInfo([2], "int32", new Int32Array(c))]; + let i = t10.data.get(s.dataId).values, p = t10.data.get(a.dataId).values[0], [u, c, l] = lp(i, p, n), m = c.length; + return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", c), t10.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var YR = { kernelName: ru, backendName: "cpu", kernelFunc: o9 }; -function n9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { numBuckets: n } = o, { input: s } = e; +var lR = { kernelName: ji, backendName: "cpu", kernelFunc: LQ }; +function BQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { numBuckets: n } = o, { input: s } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (n <= 0) throw new Error("Number of buckets must be at least 1"); - let a = t10.data.get(s.dataId).values, i = yp(a, n); + let a = t10.data.get(s.dataId).values, i = mp(a, n); return t10.makeTensorInfo(s.shape, "int32", i); } -var QR = { kernelName: ou, backendName: "cpu", kernelFunc: n9 }; -var s9 = Ie(Ms, (r16) => Math.tan(r16)); -var ZR = { kernelName: Ms, backendName: "cpu", kernelFunc: s9 }; -var a9 = Ie(Ls, (r16) => Math.tanh(r16)); -var JR = { kernelName: Ls, backendName: "cpu", kernelFunc: a9 }; -function i9(r16) { - let { inputs: e, backend: t10 } = r16, { tensor: o, indices: n, updates: s } = e, { sliceRank: a, numUpdates: i, sliceSize: p, strides: u, outputSize: l } = C.calculateShapes(s, n, o.shape), c = false, m = t10.bufferSync(n), d = t10.bufferSync(s), f = t10.bufferSync(o), h = Xs(m, d, o.shape, l, p, i, a, u, f, c); +var mR = { kernelName: Xi, backendName: "cpu", kernelFunc: BQ }; +var zQ = Ie(_s, (r15) => Math.tan(r15)); +var dR = { kernelName: _s, backendName: "cpu", kernelFunc: zQ }; +var VQ = Ie(Es, (r15) => Math.tanh(r15)); +var fR = { kernelName: Es, backendName: "cpu", kernelFunc: VQ }; +function WQ(r15) { + let { inputs: e, backend: t10 } = r15, { tensor: o, indices: n, updates: s } = e, { sliceRank: a, numUpdates: i, sliceSize: p, strides: u, outputSize: c } = w.calculateShapes(s, n, o.shape), l = false, m = t10.bufferSync(n), d = t10.bufferSync(s), f = t10.bufferSync(o), h = zs(m, d, o.shape, c, p, i, a, u, f, l); return t10.makeTensorInfo(o.shape, h.dtype, h.values); } -var eD = { kernelName: ks, backendName: "cpu", kernelFunc: i9 }; -function u9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reps: s } = o; +var hR = { kernelName: ds, backendName: "cpu", kernelFunc: WQ }; +function UQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reps: s } = o; Q(n, "tile"); - let a = qf(t10.bufferSync(n), s); + let a = Mf(t10.bufferSync(n), s); return t10.makeTensorInfo(a.shape, a.dtype, a.values); } -var tD = { kernelName: Mo, backendName: "cpu", kernelFunc: u9 }; -function p9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { k: s, sorted: a } = o; +var gR = { kernelName: po, backendName: "cpu", kernelFunc: UQ }; +function GQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { k: s, sorted: a } = o; Q(n, "topk"); - let i = t10.data.get(n.dataId).values, [p, u] = jf(i, n.shape, n.dtype, s, a); + let i = t10.data.get(n.dataId).values, [p, u] = Lf(i, n.shape, n.dtype, s, a); return [t10.makeTensorInfo(p.shape, p.dtype, p.values), t10.makeTensorInfo(u.shape, u.dtype, u.values)]; } -var rD = { kernelName: Bs, backendName: "cpu", kernelFunc: p9 }; -function l9(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = t10, [l, c, m, d] = n.shape, [f, h] = u != null ? u : [c, m], g = [l, f, h, d], x = y.computeStrides(n.shape), b = x[0], w = x[1], S = x[2], k = y.computeStrides(g), T = k[0], E = k[1], R = k[2], D = y.getTypedArrayFromDType(n.dtype, y.sizeFromShape(g)); +var xR = { kernelName: $s, backendName: "cpu", kernelFunc: GQ }; +function HQ(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = t10, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = y.computeStrides(n.shape), b = x[0], C = x[1], S = x[2], k = y.computeStrides(g), _ = k[0], $ = k[1], R = k[2], D = y.getTypedArrayFromDType(n.dtype, y.sizeFromShape(g)); D.fill(p); - let F = o.data.get(n.dataId).values, O = o.data.get(s.dataId).values; - for (let L = 0; L < l; ++L) { + let P = o.data.get(n.dataId).values, O = o.data.get(s.dataId).values; + for (let L = 0; L < c; ++L) { let B = s.shape[0] === 1 ? O : O.subarray(L * 8, L * 8 + 8); for (let z = 0; z < f; ++z) for (let U = 0; U < h; ++U) @@ -15302,40 +15302,40 @@ function l9(r16) { let q, Y = B[6] * U + B[7] * z + 1; if (Y === 0) continue; - let J = (B[0] * U + B[1] * z + B[2]) / Y, re = (B[3] * U + B[4] * z + B[5]) / Y, ne = oD(J, m, i), ee = oD(re, c, i); + let J = (B[0] * U + B[1] * z + B[2]) / Y, re = (B[3] * U + B[4] * z + B[5]) / Y, ne = yR(J, m, i), ee = yR(re, l, i); switch (a) { case "nearest": - q = h9(F, c, m, b, w, S, L, ee, ne, j, p); + q = YQ(P, l, m, b, C, S, L, ee, ne, j, p); break; case "bilinear": - q = g9(F, c, m, b, w, S, L, ee, ne, j, p); + q = QQ(P, l, m, b, C, S, L, ee, ne, j, p); break; default: throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${a}`); } - let oe = L * T + z * E + U * R + j; + let oe = L * _ + z * $ + U * R + j; D[oe] = q; } return o.makeTensorInfo(g, n.dtype, D); } return { dataId: o.write(D, g, n.dtype), shape: n.shape, dtype: n.dtype }; } -var nD = { kernelName: zs, backendName: "cpu", kernelFunc: l9 }; -function oD(r16, e, t10) { +var bR = { kernelName: Rs, backendName: "cpu", kernelFunc: HQ }; +function yR(r15, e, t10) { switch (t10) { case "reflect": - return c9(r16, e); + return KQ(r15, e); case "wrap": - return m9(r16, e); + return qQ(r15, e); case "nearest": - return f9(r16, e); + return XQ(r15, e); case "constant": default: - return d9(r16, e); + return jQ(r15, e); } } -function c9(r16, e) { - let t10 = r16; +function KQ(r15, e) { + let t10 = r15; if (t10 < 0) if (e <= 1) t10 = 0; @@ -15352,8 +15352,8 @@ function c9(r16, e) { } return y.clamp(0, t10, e - 1); } -function m9(r16, e) { - let t10 = r16; +function qQ(r15, e) { + let t10 = r15; if (t10 < 0) if (e <= 1) t10 = 0; @@ -15370,436 +15370,436 @@ function m9(r16, e) { } return y.clamp(0, t10, e - 1); } -function d9(r16, e) { - return r16; +function jQ(r15, e) { + return r15; } -function f9(r16, e) { - return y.clamp(0, r16, e - 1); +function XQ(r15, e) { + return y.clamp(0, r15, e - 1); } -function em(r16, e, t10, o, n, s, a, i, p, u, l) { - let c = a * o + i * n + p * s + u; - return 0 <= i && i < e && 0 <= p && p < t10 ? r16[c] : l; +function ql(r15, e, t10, o, n, s, a, i, p, u, c) { + let l = a * o + i * n + p * s + u; + return 0 <= i && i < e && 0 <= p && p < t10 ? r15[l] : c; } -function h9(r16, e, t10, o, n, s, a, i, p, u, l) { - let c = Math.round(i), m = Math.round(p); - return em(r16, e, t10, o, n, s, a, c, m, u, l); +function YQ(r15, e, t10, o, n, s, a, i, p, u, c) { + let l = Math.round(i), m = Math.round(p); + return ql(r15, e, t10, o, n, s, a, l, m, u, c); } -function g9(r16, e, t10, o, n, s, a, i, p, u, l) { - let c = Math.floor(i), m = Math.floor(p), d = c + 1, f = m + 1, h = (f - p) * em(r16, e, t10, o, n, s, a, c, m, u, l) + (p - m) * em(r16, e, t10, o, n, s, a, c, f, u, l), g = (f - p) * em(r16, e, t10, o, n, s, a, d, m, u, l) + (p - m) * em(r16, e, t10, o, n, s, a, d, f, u, l); - return (d - i) * h + (i - c) * g; +function QQ(r15, e, t10, o, n, s, a, i, p, u, c) { + let l = Math.floor(i), m = Math.floor(p), d = l + 1, f = m + 1, h = (f - p) * ql(r15, e, t10, o, n, s, a, l, m, u, c) + (p - m) * ql(r15, e, t10, o, n, s, a, l, f, u, c), g = (f - p) * ql(r15, e, t10, o, n, s, a, d, m, u, c) + (p - m) * ql(r15, e, t10, o, n, s, a, d, f, u, c); + return (d - i) * h + (i - l) * g; } -function x9(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { axis: n } = t10, { x: s } = e; +function ZQ(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { axis: n } = t10, { x: s } = e; Q(s, "unique"); - let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = bp(a, n, s.shape, s.dtype); + let a = o.data.get(s.dataId).values, { outputValues: i, outputShape: p, indices: u } = dp(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var sD = { kernelName: nu, backendName: "cpu", kernelFunc: x9 }; -function y9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { value: n } = e, { axis: s } = o; +var CR = { kernelName: Yi, backendName: "cpu", kernelFunc: ZQ }; +function JQ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n.shape.length, i = n.shape[s], p = new Array(a - 1), u = 0; for (let d = 0; d < a; d++) d !== s && (p[u++] = n.shape[d]); - let l = new Array(a).fill(0), c = n.shape.slice(); - c[s] = 1; + let c = new Array(a).fill(0), l = n.shape.slice(); + l[s] = 1; let m = new Array(i); for (let d = 0; d < m.length; d++) { - l[s] = d; - let f = nn({ inputs: { x: n }, backend: t10, attrs: { begin: l, size: c } }); + c[s] = d; + let f = Ao({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: l } }); m[d] = We({ inputs: { x: f }, backend: t10, attrs: { shape: p } }), t10.disposeIntermediateTensorInfo(f); } return m; } -var aD = { kernelName: Ta, backendName: "cpu", kernelFunc: y9 }; -function b9(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, segmentIds: s } = e, { numSegments: a } = o; +var wR = { kernelName: wa, backendName: "cpu", kernelFunc: JQ }; +function eZ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, segmentIds: s } = e, { numSegments: a } = o; Q(n, "unsortedSegmentSum"); - let i = n.shape.length, p = s.shape.length, u = [], l = [], c = i - p, m = s; - for (let f = 0; f < c; ++f) { - let h = $l({ inputs: { input: m }, backend: t10, attrs: { dim: f + 1 } }); - m = h, l.push(h); + let i = n.shape.length, p = s.shape.length, u = [], c = [], l = i - p, m = s; + for (let f = 0; f < l; ++f) { + let h = kc({ inputs: { input: m }, backend: t10, attrs: { dim: f + 1 } }); + m = h, c.push(h); } for (let f = 0; f < a; ++f) { - let h = y.createScalarValue(f, "int32"), g = t10.makeTensorInfo([], "int32", h), x = nI({ inputs: { a: g, b: m }, backend: t10 }), b = rn({ inputs: { x }, backend: t10, attrs: { dtype: "float32" } }), w = dp({ inputs: { a: b, b: n }, backend: t10 }), S = Ii({ inputs: { x: w }, backend: t10, attrs: { axis: 0, keepDims: false } }); - u.push(S), l.push(g), l.push(x), l.push(b), l.push(w), l.push(S); - } - let d = LI({ inputs: u, backend: t10, attrs: { axis: 0 } }); - return l.forEach((f) => t10.disposeIntermediateTensorInfo(f)), d; -} -var iD = { kernelName: su, backendName: "cpu", kernelFunc: b9 }; -var C9 = [DE, z_, AE, FE, H_, PE, OE, ME, LE, BE, zE, VE, WE, UE, GE, KE, qE, jE, XE, RE, YE, QE, ZE, K_, JE, G_, q_, e$, V_, t$, o$, n$, s$, a$, i$, u$, p$, l$, c$, m$, d$, f$, h$, g$, x$, y$, b$, C$, w$, S$, I$, v$, N$, kE, T$, j_, _$, X_, E$, Y_, $$, R$, D$, Q_, Z_, A$, F$, P$, O$, J_, eE, W_, M$, r$, L$, B$, z$, NE, tE, rE, V$, oE, W$, U$, G$, H$, K$, q$, j$, nE, X$, Y$, Q$, Z$, eR, tR, rR, sE, oR, nR, iR, aE, iE, uR, pR, lR, uE, cR, fR, hR, Jf, gR, TE, lE, xR, yR, bR, CR, U_, Qc, wR, _E, EE, $E, SR, IR, vR, kR, NR, TR, _R, hE, ER, RR, DR, AR, xE, FR, PR, OR, yE, sR, LR, BR, zR, VR, WR, UR, GR, HR, CE, KR, wE, SE, qR, jR, XR, YR, QR, IE, k$, ZR, JR, eD, tD, rD, nD, pE, sD, aD, iD, mR]; -for (let r16 of C9) - li(r16); -var Fl = {}; -qe(Fl, { assertNotComplex: () => Ys, bindCanvasToFramebuffer: () => E9, bindColorTextureToFramebuffer: () => nm, bindTextureToProgramUniformSampler: () => e0, bindTextureUnit: () => cD, bindVertexBufferToProgramAttribute: () => sh, callAndCheck: () => ce, canBeRepresented: () => WI, createFragmentShader: () => GI, createFramebuffer: () => QI, createProgram: () => HI, createStaticIndexBuffer: () => jI, createStaticVertexBuffer: () => qI, createTexture: () => XI, createVertexShader: () => UI, getBatchDim: () => ki, getExtensionOrThrow: () => Rl, getFramebufferErrorMessage: () => mD, getMaxTexturesInShader: () => o0, getNumChannels: () => T9, getProgramUniformLocation: () => JI, getProgramUniformLocationOrThrow: () => ZI, getRowsCols: () => Ni, getShapeAs3D: () => Al, getTextureShapeFromLogicalShape: () => t0, getWebGLDisjointQueryTimerVersion: () => n0, getWebGLErrorMessage: () => lD, getWebGLMaxTextureSize: () => r0, hasExtension: () => Jr, isCapableOfRenderingToFloatTexture: () => s0, isDownloadFloatTextureEnabled: () => a0, isReshapeFree: () => vu, isWebGLFenceEnabled: () => i0, isWebGLVersionEnabled: () => ih, linkProgram: () => KI, logShaderSourceAndInfoLog: () => nh, resetMaxTextureSize: () => $9, resetMaxTexturesInShader: () => R9, unbindColorTextureFromFramebuffer: () => ah, unbindTextureUnit: () => _9, validateFramebuffer: () => Dl, validateProgram: () => om, validateTextureSize: () => YI }); -var wp = {}; -var eh = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; -function BI(r16, e) { - wp[r16] = e; -} -function Zr(r16, e) { - if (!(r16 in wp) || e != null) { - let o = S9(r16, e); + let h = y.createScalarValue(f, "int32"), g = t10.makeTensorInfo([], "int32", h), x = HS({ inputs: { a: g, b: m }, backend: t10 }), b = Ro({ inputs: { x }, backend: t10, attrs: { dtype: "float32" } }), C = ip({ inputs: { a: b, b: n }, backend: t10 }), S = fi({ inputs: { x: C }, backend: t10, attrs: { axis: 0, keepDims: false } }); + u.push(S), c.push(g), c.push(x), c.push(b), c.push(C), c.push(S); + } + let d = kI({ inputs: u, backend: t10, attrs: { axis: 0 } }); + return c.forEach((f) => t10.disposeIntermediateTensorInfo(f)), d; +} +var SR = { kernelName: Qi, backendName: "cpu", kernelFunc: eZ }; +var tZ = [q_, t_, j_, X_, a_, Y_, Q_, Z_, J_, eE, tE, rE, oE, nE, sE, iE, uE, pE, cE, K_, lE, mE, dE, i_, fE, s_, u_, hE, r_, gE, yE, bE, CE, wE, SE, IE, vE, kE, NE, TE, _E, EE, $E, RE, DE, AE, FE, PE, OE, ME, LE, BE, VE, z_, WE, p_, UE, c_, GE, l_, HE, KE, qE, m_, d_, jE, XE, YE, QE, f_, h_, o_, ZE, xE, JE, e$, t$, V_, g_, x_, r$, y_, o$, n$, s$, a$, i$, u$, p$, b_, c$, l$, m$, d$, h$, g$, x$, C_, y$, b$, S$, w_, S_, I$, v$, k$, I_, N$, E$, $$, Wf, R$, W_, k_, D$, A$, F$, P$, n_, Gl, O$, U_, G_, H_, M$, L$, B$, z$, V$, W$, U$, $_, G$, K$, q$, j$, D_, X$, Y$, Q$, A_, C$, J$, eR, tR, rR, oR, nR, sR, aR, P_, iR, O_, M_, uR, pR, cR, lR, mR, L_, zE, dR, fR, hR, gR, xR, bR, v_, CR, wR, SR, T$]; +for (let r15 of tZ) + ti(r15); +var Ec = {}; +qe(Ec, { assertNotComplex: () => Vs, bindCanvasToFramebuffer: () => cZ, bindColorTextureToFramebuffer: () => Ql, bindTextureToProgramUniformSampler: () => VI, bindTextureUnit: () => NR, bindVertexBufferToProgramAttribute: () => jf, callAndCheck: () => ce, canBeRepresented: () => EI, createFragmentShader: () => RI, createFramebuffer: () => LI, createProgram: () => DI, createStaticIndexBuffer: () => PI, createStaticVertexBuffer: () => FI, createTexture: () => OI, createVertexShader: () => $I, getBatchDim: () => gi, getExtensionOrThrow: () => Nc, getFramebufferErrorMessage: () => TR, getMaxTexturesInShader: () => GI, getNumChannels: () => uZ, getProgramUniformLocation: () => zI, getProgramUniformLocationOrThrow: () => BI, getRowsCols: () => xi, getShapeAs3D: () => _c, getTextureShapeFromLogicalShape: () => WI, getWebGLDisjointQueryTimerVersion: () => HI, getWebGLErrorMessage: () => kR, getWebGLMaxTextureSize: () => UI, hasExtension: () => qr, isCapableOfRenderingToFloatTexture: () => KI, isDownloadFloatTextureEnabled: () => qI, isReshapeFree: () => xu, isWebGLFenceEnabled: () => jI, isWebGLVersionEnabled: () => Yf, linkProgram: () => AI, logShaderSourceAndInfoLog: () => qf, resetMaxTextureSize: () => lZ, resetMaxTexturesInShader: () => mZ, unbindColorTextureFromFramebuffer: () => Xf, unbindTextureUnit: () => pZ, validateFramebuffer: () => Tc, validateProgram: () => Yl, validateTextureSize: () => MI }); +var hp = {}; +var Uf = { alpha: false, antialias: false, premultipliedAlpha: false, preserveDrawingBuffer: false, depth: false, stencil: false, failIfMajorPerformanceCaveat: true }; +function NI(r15, e) { + hp[r15] = e; +} +function Kr(r15, e) { + if (!(r15 in hp) || e != null) { + let o = oZ(r15, e); if (o !== null) - wp[r16] = o; + hp[r15] = o; else - return console.log("Could not get context for WebGL version", r16), null; + return console.log("Could not get context for WebGL version", r15), null; } - let t10 = wp[r16]; - return t10 == null || t10.isContextLost() ? (delete wp[r16], Zr(r16)) : (t10.disable(t10.DEPTH_TEST), t10.disable(t10.STENCIL_TEST), t10.disable(t10.BLEND), t10.disable(t10.DITHER), t10.disable(t10.POLYGON_OFFSET_FILL), t10.disable(t10.SAMPLE_COVERAGE), t10.enable(t10.SCISSOR_TEST), t10.enable(t10.CULL_FACE), t10.cullFace(t10.BACK), wp[r16]); + let t10 = hp[r15]; + return t10 == null || t10.isContextLost() ? (delete hp[r15], Kr(r15)) : (t10.disable(t10.DEPTH_TEST), t10.disable(t10.STENCIL_TEST), t10.disable(t10.BLEND), t10.disable(t10.DITHER), t10.disable(t10.POLYGON_OFFSET_FILL), t10.disable(t10.SAMPLE_COVERAGE), t10.enable(t10.SCISSOR_TEST), t10.enable(t10.CULL_FACE), t10.cullFace(t10.BACK), hp[r15]); } -function w9(r16) { - if (!A().getBool("IS_SAFARI") && typeof OffscreenCanvas != "undefined" && r16 === 2) +function rZ(r15) { + if (!A().getBool("IS_SAFARI") && typeof OffscreenCanvas != "undefined" && r15 === 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 S9(r16, e) { - if (r16 !== 1 && r16 !== 2) +function oZ(r15, e) { + if (r15 !== 1 && r15 !== 2) throw new Error("Cannot get WebGL rendering context, WebGL is disabled."); - let t10 = e == null ? w9(r16) : e; + let t10 = e == null ? rZ(r15) : e; return t10.addEventListener("webglcontextlost", (o) => { - o.preventDefault(), delete wp[r16]; - }, false), A().getBool("SOFTWARE_WEBGL_ENABLED") && (eh.failIfMajorPerformanceCaveat = false), r16 === 1 ? t10.getContext("webgl", eh) || t10.getContext("experimental-webgl", eh) : t10.getContext("webgl2", eh); -} -var Iu; -(function(r16) { - r16[r16.DENSE = 0] = "DENSE", r16[r16.SHARED_BATCH = 1] = "SHARED_BATCH"; -})(Iu || (Iu = {})); -var hr; -(function(r16) { - r16[r16.RENDER = 0] = "RENDER", r16[r16.UPLOAD = 1] = "UPLOAD", r16[r16.PIXELS = 2] = "PIXELS", r16[r16.DOWNLOAD = 3] = "DOWNLOAD"; -})(hr || (hr = {})); -var or; -(function(r16) { - r16[r16.UNPACKED_FLOAT16 = 0] = "UNPACKED_FLOAT16", r16[r16.UNPACKED_FLOAT32 = 1] = "UNPACKED_FLOAT32", r16[r16.PACKED_4X1_UNSIGNED_BYTE = 2] = "PACKED_4X1_UNSIGNED_BYTE", r16[r16.PACKED_2X2_FLOAT32 = 3] = "PACKED_2X2_FLOAT32", r16[r16.PACKED_2X2_FLOAT16 = 4] = "PACKED_2X2_FLOAT16"; -})(or || (or = {})); -function Sp(r16, e) { - return [e, r16]; -} -function uD(r16, e) { - return r16 * e; -} -function tm(r16) { - let e = y.sizeFromShape(r16), t10 = Math.ceil(e / 4); + o.preventDefault(), delete hp[r15]; + }, false), A().getBool("SOFTWARE_WEBGL_ENABLED") && (Uf.failIfMajorPerformanceCaveat = false), r15 === 1 ? t10.getContext("webgl", Uf) || t10.getContext("experimental-webgl", Uf) : t10.getContext("webgl2", Uf); +} +var gu; +(function(r15) { + r15[r15.DENSE = 0] = "DENSE", r15[r15.SHARED_BATCH = 1] = "SHARED_BATCH"; +})(gu || (gu = {})); +var mr; +(function(r15) { + r15[r15.RENDER = 0] = "RENDER", r15[r15.UPLOAD = 1] = "UPLOAD", r15[r15.PIXELS = 2] = "PIXELS", r15[r15.DOWNLOAD = 3] = "DOWNLOAD"; +})(mr || (mr = {})); +var er; +(function(r15) { + r15[r15.UNPACKED_FLOAT16 = 0] = "UNPACKED_FLOAT16", r15[r15.UNPACKED_FLOAT32 = 1] = "UNPACKED_FLOAT32", r15[r15.PACKED_4X1_UNSIGNED_BYTE = 2] = "PACKED_4X1_UNSIGNED_BYTE", r15[r15.PACKED_2X2_FLOAT32 = 3] = "PACKED_2X2_FLOAT32", r15[r15.PACKED_2X2_FLOAT16 = 4] = "PACKED_2X2_FLOAT16"; +})(er || (er = {})); +function gp(r15, e) { + return [e, r15]; +} +function IR(r15, e) { + return r15 * e; +} +function jl(r15) { + let e = y.sizeFromShape(r15), t10 = Math.ceil(e / 4); return y.sizeToSquarishShape(t10); } -function Ga(r16, e) { - return [Math.max(1, Math.ceil(e / 2)), Math.max(1, Math.ceil(r16 / 2))]; +function Ma(r15, e) { + return [Math.max(1, Math.ceil(e / 2)), Math.max(1, Math.ceil(r15 / 2))]; } -function pD(r16, e) { - let [t10, o] = Ga(r16, e); +function vR(r15, e) { + let [t10, o] = Ma(r15, e); return t10 * o * 4; } -function rm(r16, e) { - let t10 = r16, o, n, s, a, i, p, u, l, c, m; - return A().getNumber("WEBGL_VERSION") === 2 ? (o = t10.R32F, n = t10.R16F, s = t10.RGBA16F, a = t10.RGBA32F, i = t10.RED, u = 4, l = 1, c = t10.HALF_FLOAT, m = t10.FLOAT, p = t10.RGBA8) : (o = r16.RGBA, n = r16.RGBA, s = r16.RGBA, a = t10.RGBA, i = r16.RGBA, u = 4, l = 4, c = e != null ? e.HALF_FLOAT_OES : null, m = r16.FLOAT, p = r16.RGBA), { internalFormatFloat: o, internalFormatHalfFloat: n, internalFormatPackedHalfFloat: s, internalFormatPackedFloat: a, textureFormatFloat: i, downloadTextureFormat: p, downloadUnpackNumChannels: u, defaultNumChannels: l, textureTypeHalfFloat: c, textureTypeFloat: m }; +function Xl(r15, e) { + let t10 = r15, o, n, s, a, i, p, u, c, l, m; + return A().getNumber("WEBGL_VERSION") === 2 ? (o = t10.R32F, n = t10.R16F, s = t10.RGBA16F, a = t10.RGBA32F, i = t10.RED, u = 4, c = 1, l = t10.HALF_FLOAT, m = t10.FLOAT, p = t10.RGBA8) : (o = r15.RGBA, n = r15.RGBA, s = r15.RGBA, a = t10.RGBA, i = r15.RGBA, u = 4, c = 4, l = e != null ? e.HALF_FLOAT_OES : null, m = r15.FLOAT, p = r15.RGBA), { internalFormatFloat: o, internalFormatHalfFloat: n, internalFormatPackedHalfFloat: s, internalFormatPackedFloat: a, textureFormatFloat: i, downloadTextureFormat: p, downloadUnpackNumChannels: u, defaultNumChannels: c, textureTypeHalfFloat: l, textureTypeFloat: m }; } -function ce(r16, e) { +function ce(r15, e) { let t10 = e(); - return A().getBool("DEBUG") && I9(r16), t10; + return A().getBool("DEBUG") && nZ(r15), t10; } -function I9(r16) { - let e = r16.getError(); - if (e !== r16.NO_ERROR) - throw new Error("WebGL Error: " + lD(r16, e)); +function nZ(r15) { + let e = r15.getError(); + if (e !== r15.NO_ERROR) + throw new Error("WebGL Error: " + kR(r15, e)); } -var v9 = 596e-10; -var k9 = 65504; -function WI(r16) { - return !!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r16 === 0 || v9 < Math.abs(r16) && Math.abs(r16) < k9); +var sZ = 596e-10; +var aZ = 65504; +function EI(r15) { + return !!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") || r15 === 0 || sZ < Math.abs(r15) && Math.abs(r15) < aZ); } -function lD(r16, e) { +function kR(r15, e) { switch (e) { - case r16.NO_ERROR: + case r15.NO_ERROR: return "NO_ERROR"; - case r16.INVALID_ENUM: + case r15.INVALID_ENUM: return "INVALID_ENUM"; - case r16.INVALID_VALUE: + case r15.INVALID_VALUE: return "INVALID_VALUE"; - case r16.INVALID_OPERATION: + case r15.INVALID_OPERATION: return "INVALID_OPERATION"; - case r16.INVALID_FRAMEBUFFER_OPERATION: + case r15.INVALID_FRAMEBUFFER_OPERATION: return "INVALID_FRAMEBUFFER_OPERATION"; - case r16.OUT_OF_MEMORY: + case r15.OUT_OF_MEMORY: return "OUT_OF_MEMORY"; - case r16.CONTEXT_LOST_WEBGL: + case r15.CONTEXT_LOST_WEBGL: return "CONTEXT_LOST_WEBGL"; default: return `Unknown error code ${e}`; } } -function Rl(r16, e) { - return vi(r16, () => r16.getExtension(e), 'Extension "' + e + '" not supported on this browser.'); +function Nc(r15, e) { + return hi(r15, () => r15.getExtension(e), 'Extension "' + e + '" not supported on this browser.'); } -function UI(r16, e) { - let t10 = vi(r16, () => r16.createShader(r16.VERTEX_SHADER), "Unable to create vertex WebGLShader."); - if (ce(r16, () => r16.shaderSource(t10, e)), ce(r16, () => r16.compileShader(t10)), r16.getShaderParameter(t10, r16.COMPILE_STATUS) === false) - throw console.log(r16.getShaderInfoLog(t10)), new Error("Failed to compile vertex shader."); +function $I(r15, e) { + let t10 = hi(r15, () => r15.createShader(r15.VERTEX_SHADER), "Unable to create vertex WebGLShader."); + if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) + throw console.log(r15.getShaderInfoLog(t10)), new Error("Failed to compile vertex shader."); return t10; } -function GI(r16, e) { - let t10 = vi(r16, () => r16.createShader(r16.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); - if (ce(r16, () => r16.shaderSource(t10, e)), ce(r16, () => r16.compileShader(t10)), A().get("ENGINE_COMPILE_ONLY")) +function RI(r15, e) { + let t10 = hi(r15, () => r15.createShader(r15.FRAGMENT_SHADER), "Unable to create fragment WebGLShader."); + if (ce(r15, () => r15.shaderSource(t10, e)), ce(r15, () => r15.compileShader(t10)), A().get("ENGINE_COMPILE_ONLY")) return t10; - if (r16.getShaderParameter(t10, r16.COMPILE_STATUS) === false) - throw nh(e, r16.getShaderInfoLog(t10)), new Error("Failed to compile fragment shader."); + if (r15.getShaderParameter(t10, r15.COMPILE_STATUS) === false) + throw qf(e, r15.getShaderInfoLog(t10)), new Error("Failed to compile fragment shader."); return t10; } -var N9 = /ERROR: [0-9]+:([0-9]+):/g; -function nh(r16, e) { - let t10 = N9.exec(e); +var iZ = /ERROR: [0-9]+:([0-9]+):/g; +function qf(r15, e) { + let t10 = iZ.exec(e); if (t10 == null) { - console.log(`Couldn't parse line number in error: ${e}`), console.log(r16); + console.log(`Couldn't parse line number in error: ${e}`), console.log(r15); return; } - let o = +t10[1], n = r16.split(` -`), s = n.length.toString().length + 2, a = n.map((c, m) => y.rightPad((m + 1).toString(), s) + c), i = 0; - for (let c = 0; c < a.length; c++) - i = Math.max(a[c].length, i); - let p = a.slice(0, o - 1), u = a.slice(o - 1, o), l = a.slice(o); + let o = +t10[1], n = r15.split(` +`), s = n.length.toString().length + 2, a = n.map((l, m) => y.rightPad((m + 1).toString(), s) + l), i = 0; + for (let l = 0; l < a.length; l++) + i = Math.max(a[l].length, i); + let p = a.slice(0, o - 1), u = a.slice(o - 1, o), c = a.slice(o); console.log(p.join(` `)), console.log(e.split(` -`)[0]), console.log(`%c ${y.rightPad(u[0], i)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"), console.log(l.join(` +`)[0]), console.log(`%c ${y.rightPad(u[0], i)}`, "border:1px solid red; background-color:#e3d2d2; color:#a61717"), console.log(c.join(` `)); } -function HI(r16) { - return vi(r16, () => r16.createProgram(), "Unable to create WebGLProgram."); +function DI(r15) { + return hi(r15, () => r15.createProgram(), "Unable to create WebGLProgram."); } -function KI(r16, e) { - if (ce(r16, () => r16.linkProgram(e)), !A().get("ENGINE_COMPILE_ONLY") && r16.getProgramParameter(e, r16.LINK_STATUS) === false) - throw console.log(r16.getProgramInfoLog(e)), new Error("Failed to link vertex and fragment shaders."); +function AI(r15, e) { + if (ce(r15, () => r15.linkProgram(e)), !A().get("ENGINE_COMPILE_ONLY") && r15.getProgramParameter(e, r15.LINK_STATUS) === false) + throw console.log(r15.getProgramInfoLog(e)), new Error("Failed to link vertex and fragment shaders."); } -function om(r16, e) { - if (ce(r16, () => r16.validateProgram(e)), r16.getProgramParameter(e, r16.VALIDATE_STATUS) === false) - throw console.log(r16.getProgramInfoLog(e)), new Error("Shader program validation failed."); +function Yl(r15, e) { + if (ce(r15, () => r15.validateProgram(e)), r15.getProgramParameter(e, r15.VALIDATE_STATUS) === false) + throw console.log(r15.getProgramInfoLog(e)), new Error("Shader program validation failed."); } -function qI(r16, e) { - let t10 = vi(r16, () => r16.createBuffer(), "Unable to create WebGLBuffer"); - return ce(r16, () => r16.bindBuffer(r16.ARRAY_BUFFER, t10)), ce(r16, () => r16.bufferData(r16.ARRAY_BUFFER, e, r16.STATIC_DRAW)), t10; +function FI(r15, e) { + let t10 = hi(r15, () => r15.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, t10)), ce(r15, () => r15.bufferData(r15.ARRAY_BUFFER, e, r15.STATIC_DRAW)), t10; } -function jI(r16, e) { - let t10 = vi(r16, () => r16.createBuffer(), "Unable to create WebGLBuffer"); - return ce(r16, () => r16.bindBuffer(r16.ELEMENT_ARRAY_BUFFER, t10)), ce(r16, () => r16.bufferData(r16.ELEMENT_ARRAY_BUFFER, e, r16.STATIC_DRAW)), t10; +function PI(r15, e) { + let t10 = hi(r15, () => r15.createBuffer(), "Unable to create WebGLBuffer"); + return ce(r15, () => r15.bindBuffer(r15.ELEMENT_ARRAY_BUFFER, t10)), ce(r15, () => r15.bufferData(r15.ELEMENT_ARRAY_BUFFER, e, r15.STATIC_DRAW)), t10; } -function T9() { +function uZ() { return A().getNumber("WEBGL_VERSION") === 2 ? 1 : 4; } -function XI(r16) { - return vi(r16, () => r16.createTexture(), "Unable to create WebGLTexture."); +function OI(r15) { + return hi(r15, () => r15.createTexture(), "Unable to create WebGLTexture."); } -function YI(r16, e) { +function MI(r15, e) { let t10 = A().getNumber("WEBGL_MAX_TEXTURE_SIZE"); - if (r16 <= 0 || e <= 0) { - let o = `[${r16}x${e}]`; + if (r15 <= 0 || e <= 0) { + let o = `[${r15}x${e}]`; throw new Error("Requested texture size " + o + " is invalid."); } - if (r16 > t10 || e > t10) { - let o = `[${r16}x${e}]`, n = `[${t10}x${t10}]`; + if (r15 > t10 || e > t10) { + let o = `[${r15}x${e}]`, n = `[${t10}x${t10}]`; throw new Error("Requested texture size " + o + " greater than WebGL maximum on this browser / GPU " + n + "."); } } -function QI(r16) { - return vi(r16, () => r16.createFramebuffer(), "Unable to create WebGLFramebuffer."); +function LI(r15) { + return hi(r15, () => r15.createFramebuffer(), "Unable to create WebGLFramebuffer."); } -function sh(r16, e, t10, o, n, s, a) { - let i = r16.getAttribLocation(e, t10); - return i === -1 ? false : (ce(r16, () => r16.bindBuffer(r16.ARRAY_BUFFER, o)), ce(r16, () => r16.vertexAttribPointer(i, n, r16.FLOAT, false, s, a)), ce(r16, () => r16.enableVertexAttribArray(i)), true); +function jf(r15, e, t10, o, n, s, a) { + let i = r15.getAttribLocation(e, t10); + return i === -1 ? false : (ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, o)), ce(r15, () => r15.vertexAttribPointer(i, n, r15.FLOAT, false, s, a)), ce(r15, () => r15.enableVertexAttribArray(i)), true); } -function cD(r16, e, t10) { - dD(r16, t10), ce(r16, () => r16.activeTexture(r16.TEXTURE0 + t10)), ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, e)); +function NR(r15, e, t10) { + _R(r15, t10), ce(r15, () => r15.activeTexture(r15.TEXTURE0 + t10)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, e)); } -function _9(r16, e) { - dD(r16, e), ce(r16, () => r16.activeTexture(r16.TEXTURE0 + e)), ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, null)); +function pZ(r15, e) { + _R(r15, e), ce(r15, () => r15.activeTexture(r15.TEXTURE0 + e)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function ZI(r16, e, t10) { - return vi(r16, () => r16.getUniformLocation(e, t10), 'uniform "' + t10 + '" not present in program.'); +function BI(r15, e, t10) { + return hi(r15, () => r15.getUniformLocation(e, t10), 'uniform "' + t10 + '" not present in program.'); } -function JI(r16, e, t10) { - return r16.getUniformLocation(e, t10); +function zI(r15, e, t10) { + return r15.getUniformLocation(e, t10); } -function e0(r16, e, t10, o) { - ce(r16, () => cD(r16, e, o)), ce(r16, () => r16.uniform1i(t10, o)); +function VI(r15, e, t10, o) { + ce(r15, () => NR(r15, e, o)), ce(r15, () => r15.uniform1i(t10, o)); } -function E9(r16) { - ce(r16, () => r16.bindFramebuffer(r16.FRAMEBUFFER, null)), ce(r16, () => r16.viewport(0, 0, r16.canvas.width, r16.canvas.height)), ce(r16, () => r16.scissor(0, 0, r16.canvas.width, r16.canvas.height)); +function cZ(r15) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, null)), ce(r15, () => r15.viewport(0, 0, r15.canvas.width, r15.canvas.height)), ce(r15, () => r15.scissor(0, 0, r15.canvas.width, r15.canvas.height)); } -function nm(r16, e, t10) { - ce(r16, () => r16.bindFramebuffer(r16.FRAMEBUFFER, t10)), ce(r16, () => r16.framebufferTexture2D(r16.FRAMEBUFFER, r16.COLOR_ATTACHMENT0, r16.TEXTURE_2D, e, 0)); +function Ql(r15, e, t10) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, t10)), ce(r15, () => r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, e, 0)); } -function ah(r16, e) { - ce(r16, () => r16.bindFramebuffer(r16.FRAMEBUFFER, e)), ce(r16, () => r16.framebufferTexture2D(r16.FRAMEBUFFER, r16.COLOR_ATTACHMENT0, r16.TEXTURE_2D, null, 0)); +function Xf(r15, e) { + ce(r15, () => r15.bindFramebuffer(r15.FRAMEBUFFER, e)), ce(r15, () => r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, null, 0)); } -function Dl(r16) { - let e = r16.checkFramebufferStatus(r16.FRAMEBUFFER); - if (e !== r16.FRAMEBUFFER_COMPLETE) - throw new Error("Error binding framebuffer: " + mD(r16, e)); +function Tc(r15) { + let e = r15.checkFramebufferStatus(r15.FRAMEBUFFER); + if (e !== r15.FRAMEBUFFER_COMPLETE) + throw new Error("Error binding framebuffer: " + TR(r15, e)); } -function mD(r16, e) { +function TR(r15, e) { switch (e) { - case r16.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + case r15.FRAMEBUFFER_INCOMPLETE_ATTACHMENT: return "FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; - case r16.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + case r15.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: return "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; - case r16.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: + case r15.FRAMEBUFFER_INCOMPLETE_DIMENSIONS: return "FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; - case r16.FRAMEBUFFER_UNSUPPORTED: + case r15.FRAMEBUFFER_UNSUPPORTED: return "FRAMEBUFFER_UNSUPPORTED"; default: return `unknown error ${e}`; } } -function vi(r16, e, t10) { - let o = ce(r16, () => e()); +function hi(r15, e, t10) { + let o = ce(r15, () => e()); if (o == null) throw new Error(t10); return o; } -function dD(r16, e) { - let t10 = r16.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = e + r16.TEXTURE0; - if (o < r16.TEXTURE0 || o > t10) { +function _R(r15, e) { + let t10 = r15.MAX_COMBINED_TEXTURE_IMAGE_UNITS - 1, o = e + r15.TEXTURE0; + if (o < r15.TEXTURE0 || o > t10) { let n = `[gl.TEXTURE0, gl.TEXTURE${t10}]`; throw new Error(`textureUnit must be in ${n}.`); } } -function ki(r16, e = 2) { - return y.sizeFromShape(r16.slice(0, r16.length - e)); +function gi(r15, e = 2) { + return y.sizeFromShape(r15.slice(0, r15.length - e)); } -function Ni(r16) { - if (r16.length === 0) +function xi(r15) { + if (r15.length === 0) throw Error("Cannot get rows and columns of an empty shape array."); - return [r16.length > 1 ? r16[r16.length - 2] : 1, r16[r16.length - 1]]; + return [r15.length > 1 ? r15[r15.length - 2] : 1, r15[r15.length - 1]]; } -function Al(r16) { +function _c(r15) { let e = [1, 1, 1]; - return r16.length === 0 || r16.length === 1 && r16[0] === 1 || (e = [ki(r16), ...Ni(r16)]), e; + return r15.length === 0 || r15.length === 1 && r15[0] === 1 || (e = [gi(r15), ...xi(r15)]), e; } -function t0(r16, e = false) { +function WI(r15, e = false) { let t10 = A().getNumber("WEBGL_MAX_TEXTURE_SIZE"), o = A().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE"); - o === 1 / 0 && A().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE") && (o = t10 / 2), e && (t10 = t10 * 2, o = o * 2, r16 = r16.map((i, p) => p >= r16.length - 2 ? y.nearestLargerEven(r16[p]) : r16[p]), r16.length === 1 && (r16 = [2, r16[0]])), r16.length !== 2 && (r16 = y.squeezeShape(r16).newShape); - let n = y.sizeFromShape(r16), s = null; - r16.length <= 1 && n <= t10 ? s = [1, n] : r16.length === 2 && r16[0] <= t10 && r16[1] <= t10 ? s = r16 : r16.length === 3 && r16[0] * r16[1] <= t10 && r16[2] <= t10 ? s = [r16[0] * r16[1], r16[2]] : r16.length === 3 && r16[0] <= t10 && r16[1] * r16[2] <= t10 ? s = [r16[0], r16[1] * r16[2]] : r16.length === 4 && r16[0] * r16[1] * r16[2] <= t10 && r16[3] <= t10 ? s = [r16[0] * r16[1] * r16[2], r16[3]] : r16.length === 4 && r16[0] <= t10 && r16[1] * r16[2] * r16[3] <= t10 && (s = [r16[0], r16[1] * r16[2] * r16[3]]); + o === 1 / 0 && A().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE") && (o = t10 / 2), e && (t10 = t10 * 2, o = o * 2, r15 = r15.map((i, p) => p >= r15.length - 2 ? y.nearestLargerEven(r15[p]) : r15[p]), r15.length === 1 && (r15 = [2, r15[0]])), r15.length !== 2 && (r15 = y.squeezeShape(r15).newShape); + let n = y.sizeFromShape(r15), s = null; + r15.length <= 1 && n <= t10 ? s = [1, n] : r15.length === 2 && r15[0] <= t10 && r15[1] <= t10 ? s = r15 : r15.length === 3 && r15[0] * r15[1] <= t10 && r15[2] <= t10 ? s = [r15[0] * r15[1], r15[2]] : r15.length === 3 && r15[0] <= t10 && r15[1] * r15[2] <= t10 ? s = [r15[0], r15[1] * r15[2]] : r15.length === 4 && r15[0] * r15[1] * r15[2] <= t10 && r15[3] <= t10 ? s = [r15[0] * r15[1] * r15[2], r15[3]] : r15.length === 4 && r15[0] <= t10 && r15[1] * r15[2] * r15[3] <= t10 && (s = [r15[0], r15[1] * r15[2] * r15[3]]); let a = s != null && Math.max(...s) > o && Math.min(...s) <= (e ? 2 : 1) && Math.min(...s) > 0; if (s == null || a) if (e) { - let i = ki(r16), p = 2, u = 2; - r16.length && ([p, u] = Ni(r16)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((l) => l * 2); + let i = gi(r15), p = 2, u = 2; + r15.length && ([p, u] = xi(r15)), n = i * (p / 2) * (u / 2), s = y.sizeToSquarishShape(n).map((c) => c * 2); } else s = y.sizeToSquarishShape(n); return s; } -function th(r16) { - return r16 % 2 === 0; +function Gf(r15) { + return r15 % 2 === 0; } -function vu(r16, e) { - if (r16 = r16.slice(-2), e = e.slice(-2), y.arraysEqual(r16, e) || !r16.length || !e.length || r16[0] === 0 || r16[1] === 0 || e[0] === 0 || e[1] === 0) +function xu(r15, e) { + if (r15 = r15.slice(-2), e = e.slice(-2), y.arraysEqual(r15, e) || !r15.length || !e.length || r15[0] === 0 || r15[1] === 0 || e[0] === 0 || e[1] === 0) return true; - if (r16.length !== e.length) { - let t10 = r16[r16.length - 1], o = e[e.length - 1]; - if (t10 === o || th(t10) && th(o) && (r16[0] === 1 || e[0] === 1)) + if (r15.length !== e.length) { + let t10 = r15[r15.length - 1], o = e[e.length - 1]; + if (t10 === o || Gf(t10) && Gf(o) && (r15[0] === 1 || e[0] === 1)) return true; } - return r16[1] === e[1] && th(r16[0]) && th(e[0]); + return r15[1] === e[1] && Gf(r15[0]) && Gf(e[0]); } -var rh; -var oh; -function r0(r16) { - if (rh == null) { - let e = Zr(r16); - rh = e.getParameter(e.MAX_TEXTURE_SIZE); +var Hf; +var Kf; +function UI(r15) { + if (Hf == null) { + let e = Kr(r15); + Hf = e.getParameter(e.MAX_TEXTURE_SIZE); } - return rh; + return Hf; } -function $9() { - rh = null; +function lZ() { + Hf = null; } -function R9() { - oh = null; +function mZ() { + Kf = null; } -function o0(r16) { - if (oh == null) { - let e = Zr(r16); - oh = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS); +function GI(r15) { + if (Kf == null) { + let e = Kr(r15); + Kf = e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS); } - return Math.min(16, oh); + return Math.min(16, Kf); } -function n0(r16) { - if (r16 === 0) +function HI(r15) { + if (r15 === 0) return 0; - let e, t10 = Zr(r16); - return Jr(t10, "EXT_disjoint_timer_query_webgl2") && r16 === 2 ? e = 2 : Jr(t10, "EXT_disjoint_timer_query") ? e = 1 : e = 0, e; + let e, t10 = Kr(r15); + return qr(t10, "EXT_disjoint_timer_query_webgl2") && r15 === 2 ? e = 2 : qr(t10, "EXT_disjoint_timer_query") ? e = 1 : e = 0, e; } -function Jr(r16, e) { - return r16.getExtension(e) != null; +function qr(r15, e) { + return r15.getExtension(e) != null; } -function ih(r16) { +function Yf(r15) { try { - if (Zr(r16) != null) + if (Kr(r15) != null) return true; } catch (e) { return console.log("Error when getting WebGL context: ", e), false; } return false; } -function s0(r16) { - if (r16 === 0) +function KI(r15) { + if (r15 === 0) return false; - let e = Zr(r16); - if (r16 === 1) { - if (!Jr(e, "OES_texture_float")) + let e = Kr(r15); + if (r15 === 1) { + if (!qr(e, "OES_texture_float")) return false; - } else if (!Jr(e, "EXT_color_buffer_float")) + } else if (!qr(e, "EXT_color_buffer_float")) return false; - return VI(e); + return _I(e); } -function a0(r16) { - if (r16 === 0) +function qI(r15) { + if (r15 === 0) return false; - let e = Zr(r16); - if (r16 === 1) { - if (!Jr(e, "OES_texture_float") || !Jr(e, "WEBGL_color_buffer_float")) + let e = Kr(r15); + if (r15 === 1) { + if (!qr(e, "OES_texture_float") || !qr(e, "WEBGL_color_buffer_float")) return false; } else { - if (Jr(e, "EXT_color_buffer_float")) - return VI(e); + if (qr(e, "EXT_color_buffer_float")) + return _I(e); let o = "EXT_color_buffer_half_float"; - if (Jr(e, o)) { + if (qr(e, o)) { let n = e.getExtension(o); - return D9(e, n); + return dZ(e, n); } return false; } - return VI(e); -} -function VI(r16) { - let e = rm(r16), t10 = r16.createTexture(); - r16.bindTexture(r16.TEXTURE_2D, t10), r16.texImage2D(r16.TEXTURE_2D, 0, e.internalFormatFloat, 1, 1, 0, e.textureFormatFloat, e.textureTypeFloat, null); - let s = r16.createFramebuffer(); - r16.bindFramebuffer(r16.FRAMEBUFFER, s), r16.framebufferTexture2D(r16.FRAMEBUFFER, r16.COLOR_ATTACHMENT0, r16.TEXTURE_2D, t10, 0); - let a = r16.checkFramebufferStatus(r16.FRAMEBUFFER) === r16.FRAMEBUFFER_COMPLETE; - return r16.bindTexture(r16.TEXTURE_2D, null), r16.bindFramebuffer(r16.FRAMEBUFFER, null), r16.deleteTexture(t10), r16.deleteFramebuffer(s), a; -} -function D9(r16, e) { - let t10 = rm(r16, e), o = r16.createTexture(); - r16.bindTexture(r16.TEXTURE_2D, o), r16.texImage2D(r16.TEXTURE_2D, 0, t10.internalFormatHalfFloat, 1, 1, 0, t10.textureFormatFloat, t10.textureTypeHalfFloat, null); - let a = r16.createFramebuffer(); - r16.bindFramebuffer(r16.FRAMEBUFFER, a), r16.framebufferTexture2D(r16.FRAMEBUFFER, r16.COLOR_ATTACHMENT0, r16.TEXTURE_2D, o, 0); - let i = r16.checkFramebufferStatus(r16.FRAMEBUFFER) === r16.FRAMEBUFFER_COMPLETE; - return r16.bindTexture(r16.TEXTURE_2D, null), r16.bindFramebuffer(r16.FRAMEBUFFER, null), r16.deleteTexture(o), r16.deleteFramebuffer(a), i; -} -function i0(r16) { - return r16 !== 2 ? false : Zr(r16).fenceSync != null; -} -function Ys(r16, e) { - Array.isArray(r16) || (r16 = [r16]), r16.forEach((t10) => { + return _I(e); +} +function _I(r15) { + let e = Xl(r15), t10 = r15.createTexture(); + r15.bindTexture(r15.TEXTURE_2D, t10), r15.texImage2D(r15.TEXTURE_2D, 0, e.internalFormatFloat, 1, 1, 0, e.textureFormatFloat, e.textureTypeFloat, null); + let s = r15.createFramebuffer(); + r15.bindFramebuffer(r15.FRAMEBUFFER, s), r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, t10, 0); + let a = r15.checkFramebufferStatus(r15.FRAMEBUFFER) === r15.FRAMEBUFFER_COMPLETE; + return r15.bindTexture(r15.TEXTURE_2D, null), r15.bindFramebuffer(r15.FRAMEBUFFER, null), r15.deleteTexture(t10), r15.deleteFramebuffer(s), a; +} +function dZ(r15, e) { + let t10 = Xl(r15, e), o = r15.createTexture(); + r15.bindTexture(r15.TEXTURE_2D, o), r15.texImage2D(r15.TEXTURE_2D, 0, t10.internalFormatHalfFloat, 1, 1, 0, t10.textureFormatFloat, t10.textureTypeHalfFloat, null); + let a = r15.createFramebuffer(); + r15.bindFramebuffer(r15.FRAMEBUFFER, a), r15.framebufferTexture2D(r15.FRAMEBUFFER, r15.COLOR_ATTACHMENT0, r15.TEXTURE_2D, o, 0); + let i = r15.checkFramebufferStatus(r15.FRAMEBUFFER) === r15.FRAMEBUFFER_COMPLETE; + return r15.bindTexture(r15.TEXTURE_2D, null), r15.bindFramebuffer(r15.FRAMEBUFFER, null), r15.deleteTexture(o), r15.deleteFramebuffer(a), i; +} +function jI(r15) { + return r15 !== 2 ? false : Kr(r15).fenceSync != null; +} +function Vs(r15, e) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((t10) => { t10 != null && y.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the WebGL backend.`); }); } var Se = A(); Se.registerFlag("HAS_WEBGL", () => Se.getNumber("WEBGL_VERSION") > 0); -Se.registerFlag("WEBGL_VERSION", () => ih(2) ? 2 : ih(1) ? 1 : 0); +Se.registerFlag("WEBGL_VERSION", () => Yf(2) ? 2 : Yf(1) ? 1 : 0); Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS", () => false); Se.registerFlag("WEBGL_BUFFER_SUPPORTED", () => Se.get("WEBGL_VERSION") === 2); Se.registerFlag("WEBGL_CPU_FORWARD", () => true); @@ -15816,29 +15816,29 @@ Se.registerFlag("WEBGL_PACK_REDUCE", () => Se.getBool("WEBGL_PACK")); Se.registerFlag("WEBGL_LAZILY_UNPACK", () => Se.getBool("WEBGL_PACK")); Se.registerFlag("WEBGL_CONV_IM2COL", () => Se.getBool("WEBGL_PACK")); Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE", () => Se.getBool("WEBGL_PACK")); -Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => r0(Se.getNumber("WEBGL_VERSION"))); -Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => o0(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE", () => UI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER", () => GI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION", () => { - let r16 = Se.getNumber("WEBGL_VERSION"); - return r16 === 0 ? 0 : n0(r16); + let r15 = Se.getNumber("WEBGL_VERSION"); + return r15 === 0 ? 0 : HI(r15); }); -Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !uu.isMobile()); -Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => s0(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE", () => Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") > 0 && !eu.isMobile()); +Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE", () => KI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED", () => Se.getBool("WEBGL_FORCE_F16_TEXTURES") ? false : Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")); -Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => a0(Se.getNumber("WEBGL_VERSION"))); -Se.registerFlag("WEBGL_FENCE_API_ENABLED", () => i0(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED", () => qI(Se.getNumber("WEBGL_VERSION"))); +Se.registerFlag("WEBGL_FENCE_API_ENABLED", () => jI(Se.getNumber("WEBGL_VERSION"))); Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM", () => Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? 4 : 0); -Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => -1, (r16) => { - if (typeof r16 != "number") - throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r16}.`); - if (r16 < 0 && r16 !== -1) - throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r16}.`); +Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD", () => -1, (r15) => { + if (typeof r15 != "number") + throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r15}.`); + if (r15 < 0 && r15 !== -1) + throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r15}.`); }); -Se.registerFlag("WEBGL_FLUSH_THRESHOLD", () => uu.isMobile() ? 1 : -1, (r16) => { - if (typeof r16 != "number") - throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r16}.`); - if (r16 < 0 && r16 !== -1) - throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r16}.`); +Se.registerFlag("WEBGL_FLUSH_THRESHOLD", () => eu.isMobile() ? 1 : -1, (r15) => { + if (typeof r15 != "number") + throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r15}.`); + if (r15 < 0 && r15 !== -1) + throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r15}.`); }); Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD", () => 128); Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS", () => false); @@ -15850,9 +15850,9 @@ Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE", () => 1 / 0); Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE", () => false); Se.registerFlag("WEBGL2_ISNAN_CUSTOM", () => false); Se.registerFlag("ENGINE_COMPILE_ONLY", () => false); -function kt() { - let r16, e, t10, o, n, s, a, i, p, u; - return A().getNumber("WEBGL_VERSION") === 2 ? (r16 = "#version 300 es", e = "in", t10 = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = A().getBool("WEBGL2_ISNAN_CUSTOM") ? ` +function It() { + let r15, e, t10, o, n, s, a, i, p, u; + return A().getNumber("WEBGL_VERSION") === 2 ? (r15 = "#version 300 es", e = "in", t10 = "out", o = "in", n = "texture", s = "outputColor", a = "out vec4 outputColor;", i = A().getBool("WEBGL2_ISNAN_CUSTOM") ? ` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -15873,7 +15873,7 @@ function kt() { ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `) : (r16 = "", e = "attribute", t10 = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` + `) : (r15 = "", e = "attribute", t10 = "varying", o = "varying", n = "texture2D", s = "gl_FragColor", a = "", i = ` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; @@ -15898,52 +15898,52 @@ function kt() { ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `), { version: r16, attribute: e, varyingVs: t10, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; + `), { version: r15, attribute: e, varyingVs: t10, varyingFs: o, texture2D: n, output: s, defineOutput: a, defineSpecialNaN: i, defineSpecialInf: p, defineRound: u }; } -function Qs(r16, e, t10 = "index") { +function Ws(r15, e, t10 = "index") { let o = y.computeStrides(e); return o.map((n, s) => { - let a = `int ${r16[s]} = ${t10} / ${n}`, i = s === o.length - 1 ? `int ${r16[s + 1]} = ${t10} - ${r16[s]} * ${n}` : `index -= ${r16[s]} * ${n}`; + let a = `int ${r15[s]} = ${t10} / ${n}`, i = s === o.length - 1 ? `int ${r15[s + 1]} = ${t10} - ${r15[s]} * ${n}` : `index -= ${r15[s]} * ${n}`; return `${a}; ${i};`; }).join(""); } -function Ip(r16, e, t10 = "index") { +function xp(r15, e, t10 = "index") { let o = y.computeStrides(e); return o.map((n, s) => { - let a = `int ${r16[s]} = ${t10} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r16[s + 1]} = ${t10} - ${r16[s]} * outShapeStrides[${s}]` : `index -= ${r16[s]} * outShapeStrides[${s}]`; + let a = `int ${r15[s]} = ${t10} / outShapeStrides[${s}]`, i = s === o.length - 1 ? `int ${r15[s + 1]} = ${t10} - ${r15[s]} * outShapeStrides[${s}]` : `index -= ${r15[s]} * outShapeStrides[${s}]`; return `${a}; ${i};`; }).join(""); } -function A9(r16, e) { - let t10 = r16.length, o = r16.map((s) => `${e}[${s}]`), n = new Array(t10 - 1); +function fZ(r15, e) { + let t10 = r15.length, o = r15.map((s) => `${e}[${s}]`), n = new Array(t10 - 1); n[t10 - 2] = o[t10 - 1]; for (let s = t10 - 3; s >= 0; --s) n[s] = `(${n[s + 1]} * ${o[s + 1]})`; return n; } -function fD(r16, e, t10 = "index") { - let o = r16.map((s, a) => a), n = A9(o, e); +function ER(r15, e, t10 = "index") { + let o = r15.map((s, a) => a), n = fZ(o, e); return n.map((s, a) => { - let i = `int ${r16[a]} = ${t10} / ${n[a]}`, p = a === n.length - 1 ? `int ${r16[a + 1]} = ${t10} - ${r16[a]} * ${n[a]}` : `index -= ${r16[a]} * ${n[a]}`; + let i = `int ${r15[a]} = ${t10} / ${n[a]}`, p = a === n.length - 1 ? `int ${r15[a + 1]} = ${t10} - ${r15[a]} * ${n[a]}` : `index -= ${r15[a]} * ${n[a]}`; return `${i}; ${p};`; }).join(""); } -function Pl(r16) { - let e = y.computeStrides(r16).map((t10) => t10.toString()); +function $c(r15) { + let e = y.computeStrides(r15).map((t10) => t10.toString()); return ` int getFlatIndex(ivec3 coords) { return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z; } `; } -function Ol() { +function Rc() { return ` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `; } -var uh = ` +var Qf = ` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -15983,13 +15983,13 @@ var uh = ` return c / 255.0; } `; -var { getBroadcastDims: hD } = C; -function gD(r16, e, t10) { +var { getBroadcastDims: $R } = w; +function RR(r15, e, t10) { let o = []; - if (r16.forEach((d) => { + if (r15.forEach((d) => { let f = y.sizeFromShape(d.shapeInfo.logicalShape); if (d.shapeInfo.isUniform ? o.push(`uniform float ${d.name}${f > 1 ? `[${f}]` : ""};`) : (o.push(`uniform sampler2D ${d.name};`), o.push(`uniform int offset${d.name};`)), t10.enableShapeUniforms) { - let { uniformShape: h } = ph(t10.packedInputs, d.shapeInfo.logicalShape, d.shapeInfo.texShape); + let { uniformShape: h } = Zf(t10.packedInputs, d.shapeInfo.logicalShape, d.shapeInfo.texShape); switch (h.length) { case 1: o.push(`uniform int ${d.name}Shape;`); @@ -16031,114 +16031,114 @@ function gD(r16, e, t10) { o.push(`uniform ${d.type} ${d.name}${d.arrayIndex ? `[${d.arrayIndex}]` : ""};`); }); let n = o.join(` -`), s = r16.map((d) => F9(d, e, t10.packedInputs, t10.enableShapeUniforms)).join(` -`), a = e.texShape, i = kt(), p = M9(i), u, l, c = z9(i); - return e.isPacked ? (u = P9(e.logicalShape, a, t10.enableShapeUniforms), l = B9(i)) : (u = O9(e.logicalShape, a, t10.enableShapeUniforms), l = L9(i)), t10.packedInputs && (c += G9), [c, p, l, n, u, s, t10.userCode].join(` +`), s = r15.map((d) => hZ(d, e, t10.packedInputs, t10.enableShapeUniforms)).join(` +`), a = e.texShape, i = It(), p = yZ(i), u, c, l = wZ(i); + return e.isPacked ? (u = gZ(e.logicalShape, a, t10.enableShapeUniforms), c = CZ(i)) : (u = xZ(e.logicalShape, a, t10.enableShapeUniforms), c = bZ(i)), t10.packedInputs && (l += kZ), [l, p, c, n, u, s, t10.userCode].join(` `); } -function Ll(r16, e = false) { - let t10 = r16.shapeInfo.logicalShape; +function Ac(r15, e = false) { + let t10 = r15.shapeInfo.logicalShape; switch (t10.length) { case 0: - return rJ(r16, e); + return MZ(r15, e); case 1: - return nJ(r16, e); + return BZ(r15, e); case 2: - return aJ(r16, e); + return VZ(r15, e); case 3: - return uJ(r16, e); + return UZ(r15, e); case 4: - return lJ(r16, e); + return HZ(r15, e); case 5: - return cJ(r16); + return KZ(r15); case 6: - return mJ(r16); + return qZ(r15); default: throw new Error(`${t10.length}-D input sampling is not yet supported`); } } -function xD(r16, e) { - switch (r16.shapeInfo.logicalShape.length) { +function DR(r15, e) { + switch (r15.shapeInfo.logicalShape.length) { case 0: - return tJ(r16); + return OZ(r15); case 1: - return oJ(r16, e); + return LZ(r15, e); case 2: - return sJ(r16, e); + return zZ(r15, e); case 3: - return iJ(r16, e); + return WZ(r15, e); default: - return pJ(r16, e); + return GZ(r15, e); } } -function F9(r16, e, t10 = false, o) { +function hZ(r15, e, t10 = false, o) { let n = ""; - t10 ? n += xD(r16, o) : n += Ll(r16, o); - let s = r16.shapeInfo.logicalShape, a = e.logicalShape; - return s.length <= a.length && (t10 ? n += dJ(r16, e) : n += fJ(r16, e)), n; + t10 ? n += DR(r15, o) : n += Ac(r15, o); + let s = r15.shapeInfo.logicalShape, a = e.logicalShape; + return s.length <= a.length && (t10 ? n += jZ(r15, e) : n += XZ(r15, e)), n; } -function P9(r16, e, t10) { - switch (r16.length) { +function gZ(r15, e, t10) { + switch (r15.length) { case 0: - return yD(); + return AR(); case 1: - return H9(r16, e, t10); + return NZ(r15, e, t10); case 2: - return J9(r16, e, t10); + return FZ(r15, e, t10); case 3: - return q9(r16, e, t10); + return _Z(r15, e, t10); default: - return X9(r16, e, t10); + return $Z(r15, e, t10); } } -function O9(r16, e, t10) { - switch (r16.length) { +function xZ(r15, e, t10) { + switch (r15.length) { case 0: - return yD(); + return AR(); case 1: - return K9(r16, e, t10); + return TZ(r15, e, t10); case 2: - return eJ(r16, e, t10); + return PZ(r15, e, t10); case 3: - return j9(r16, e, t10); + return EZ(r15, e, t10); case 4: - return Y9(r16, e, t10); + return RZ(r15, e, t10); case 5: - return Q9(r16, e); + return DZ(r15, e); case 6: - return Z9(r16, e); + return AZ(r15, e); default: - throw new Error(`${r16.length}-D output sampling is not yet supported`); + throw new Error(`${r15.length}-D output sampling is not yet supported`); } } -function M9(r16) { +function yZ(r15) { return ` float sampleTexture(sampler2D textureSampler, vec2 uv) { - return ${r16.texture2D}(textureSampler, uv).r; + return ${r15.texture2D}(textureSampler, uv).r; } `; } -function L9(r16) { +function bZ(r15) { return ` void setOutput(float val) { - ${r16.output} = vec4(val, 0, 0, 0); + ${r15.output} = vec4(val, 0, 0, 0); } `; } -function B9(r16) { +function CZ(r15) { return ` void setOutput(vec4 val) { - ${r16.output} = val; + ${r15.output} = val; } `; } -function z9(r16) { - return `${r16.version} +function wZ(r15) { + return `${r15.version} precision highp float; precision highp int; precision highp sampler2D; - ${r16.varyingFs} vec2 resultUV; - ${r16.defineOutput} + ${r15.varyingFs} vec2 resultUV; + ${r15.defineOutput} const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 @@ -16161,9 +16161,9 @@ function z9(r16) { }; uniform float NAN; - ${r16.defineSpecialNaN} - ${r16.defineSpecialInf} - ${r16.defineRound} + ${r15.defineSpecialNaN} + ${r15.defineSpecialInf} + ${r15.defineRound} int imod(int x, int y) { return x - y * (x / y); @@ -16188,12 +16188,12 @@ function z9(r16) { return fract((p3.x + p3.y) * p3.z); } - ${V9} - ${W9} - ${U9} + ${SZ} + ${IZ} + ${vZ} `; } -var V9 = ` +var SZ = ` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -16206,7 +16206,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var W9 = ` +var IZ = ` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -16215,7 +16215,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var U9 = ` +var vZ = ` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -16225,7 +16225,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } `; -var G9 = ` +var kZ = ` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -16237,14 +16237,14 @@ var G9 = ` return modCoord == 0. ? frag.r : frag.g; } `; -function yD() { +function AR() { return ` int getOutputCoords() { return 0; } `; } -function H9(r16, e, t10) { +function NZ(r15, e, t10) { let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)]; return o[0] === 1 ? t10 ? ` int getOutputCoords() { @@ -16277,7 +16277,7 @@ function H9(r16, e, t10) { } `; } -function K9(r16, e, t10) { +function TZ(r15, e, t10) { return e[0] === 1 ? t10 ? ` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); @@ -16308,7 +16308,7 @@ function K9(r16, e, t10) { } `; } -function q9(r16, e, t10) { +function _Z(r15, e, t10) { if (t10) return ` ivec3 getOutputCoords() { @@ -16328,7 +16328,7 @@ function q9(r16, e, t10) { return ivec3(b, r, c); } `; - let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)], n = Math.ceil(r16[2] / 2), s = n * Math.ceil(r16[1] / 2); + let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)], n = Math.ceil(r15[2] / 2), s = n * Math.ceil(r15[1] / 2); return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16345,18 +16345,18 @@ function q9(r16, e, t10) { } `; } -function j9(r16, e, t10) { +function EZ(r15, e, t10) { if (t10) return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r", "c", "d"], r16)} + ${xp(["r", "c", "d"], r15)} return ivec3(r, c, d); } `; - let o = Qs(["r", "c", "d"], r16); + let o = Ws(["r", "c", "d"], r15); return ` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16367,7 +16367,7 @@ function j9(r16, e, t10) { } `; } -function X9(r16, e, t10) { +function $Z(r15, e, t10) { if (t10) return ` ivec4 getOutputCoords() { @@ -16392,14 +16392,14 @@ function X9(r16, e, t10) { return ivec4(b2, b, r, c); } `; - let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)], n = Math.ceil(r16[r16.length - 1] / 2), s = n * Math.ceil(r16[r16.length - 2] / 2), a = s, i = "", p = "b, r, c"; - for (let u = 2; u < r16.length - 1; u++) - a *= r16[r16.length - u - 1], i = ` + let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)], n = Math.ceil(r15[r15.length - 1] / 2), s = n * Math.ceil(r15[r15.length - 2] / 2), a = s, i = "", p = "b, r, c"; + for (let u = 2; u < r15.length - 1; u++) + a *= r15[r15.length - u - 1], i = ` int b${u} = index / ${a}; index -= b${u} * ${a}; ` + i, p = `b${u}, ` + p; return ` - ivec${r16.length} getOutputCoords() { + ivec${r15.length} getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${o[0]}, ${o[1]})); int index = resTexRC.x * ${o[1]} + resTexRC.y; @@ -16412,22 +16412,22 @@ function X9(r16, e, t10) { int r = 2 * (index / ${n}); int c = imod(index, ${n}) * 2; - return ivec${r16.length}(${p}); + return ivec${r15.length}(${p}); } `; } -function Y9(r16, e, t10) { +function RZ(r15, e, t10) { if (t10) return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r", "c", "d", "d2"], r16)} + ${xp(["r", "c", "d", "d2"], r15)} return ivec4(r, c, d, d2); } `; - let o = Qs(["r", "c", "d", "d2"], r16); + let o = Ws(["r", "c", "d", "d2"], r15); return ` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16438,8 +16438,8 @@ function Y9(r16, e, t10) { } `; } -function Q9(r16, e) { - let t10 = Qs(["r", "c", "d", "d2", "d3"], r16); +function DZ(r15, e) { + let t10 = Ws(["r", "c", "d", "d2", "d3"], r15); return ` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, @@ -16454,8 +16454,8 @@ function Q9(r16, e) { } `; } -function Z9(r16, e) { - let t10 = Qs(["r", "c", "d", "d2", "d3", "d4"], r16); +function AZ(r15, e) { + let t10 = Ws(["r", "c", "d", "d2", "d3", "d4"], r15); return ` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * @@ -16469,9 +16469,9 @@ function Z9(r16, e) { } `; } -function J9(r16, e, t10) { +function FZ(r15, e, t10) { let o = [Math.ceil(e[0] / 2), Math.ceil(e[1] / 2)]; - if (y.arraysEqual(r16, e)) + if (y.arraysEqual(r15, e)) return t10 ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -16482,7 +16482,7 @@ function J9(r16, e, t10) { return 2 * ivec2(resultUV.yx * vec2(${o[0]}, ${o[1]})); } `; - let n = Math.ceil(r16[1] / 2); + let n = Math.ceil(r15[1] / 2); return t10 ? ` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); @@ -16509,8 +16509,8 @@ function J9(r16, e, t10) { } `; } -function eJ(r16, e, t10) { - return y.arraysEqual(r16, e) ? t10 ? ` +function PZ(r15, e, t10) { + return y.arraysEqual(r15, e) ? t10 ? ` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -16518,7 +16518,7 @@ function eJ(r16, e, t10) { ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); } - ` : r16[1] === 1 ? t10 ? ` + ` : r15[1] === 1 ? t10 ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16532,7 +16532,7 @@ function eJ(r16, e, t10) { int index = resTexRC.x * ${e[1]} + resTexRC.y; return ivec2(index, 0); } - ` : r16[0] === 1 ? t10 ? ` + ` : r15[0] === 1 ? t10 ? ` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); @@ -16560,35 +16560,35 @@ function eJ(r16, e, t10) { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); int index = resTexRC.x * ${e[1]} + resTexRC.y; - int r = index / ${r16[1]}; - int c = index - r * ${r16[1]}; + int r = index / ${r15[1]}; + int c = index - r * ${r15[1]}; return ivec2(r, c); } `; } -function vp(r16) { - return `offset${r16}`; +function yp(r15) { + return `offset${r15}`; } -function tJ(r16) { - let e = r16.name, t10 = "get" + e.charAt(0).toUpperCase() + e.slice(1), o = kt(); +function OZ(r15) { + let e = r15.name, t10 = "get" + e.charAt(0).toUpperCase() + e.slice(1), o = It(); return ` vec4 ${t10}() { return ${o.texture2D}(${e}, halfCR); } `; } -function rJ(r16, e) { - let t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); - if (r16.shapeInfo.isUniform) +function MZ(r15, e) { + let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); + if (r15.shapeInfo.isUniform) return `float ${o}() {return ${t10};}`; - let [n, s] = r16.shapeInfo.texShape; + let [n, s] = r15.shapeInfo.texShape; if (n === 1 && s === 1) return ` float ${o}() { return sampleTexture(${t10}, halfCR); } `; - let a = vp(t10); + let a = yp(t10); if (e) return ` float ${o}() { @@ -16596,7 +16596,7 @@ function rJ(r16, e) { return sampleTexture(${t10}, uv); } `; - let [i, p] = r16.shapeInfo.texShape; + let [i, p] = r15.shapeInfo.texShape; return ` float ${o}() { vec2 uv = uvFromFlat(${i}, ${p}, ${a}); @@ -16604,8 +16604,8 @@ function rJ(r16, e) { } `; } -function oJ(r16, e) { - let t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = r16.shapeInfo.texShape, s = kt(); +function LZ(r15, e) { + let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = r15.shapeInfo.texShape, s = It(); if (e) return ` vec4 ${o}(int index) { @@ -16624,22 +16624,22 @@ function oJ(r16, e) { } `; } -function nJ(r16, e) { - let t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); - if (r16.shapeInfo.isUniform) +function BZ(r15, e) { + let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1); + if (r15.shapeInfo.isUniform) return ` float ${o}(int index) { - ${Bl(r16)} + ${Fc(r15)} } `; - let n = r16.shapeInfo.texShape, s = n[0], a = n[1]; + let n = r15.shapeInfo.texShape, s = n[0], a = n[1]; if (a === 1 && s === 1) return ` float ${o}(int index) { return sampleTexture(${t10}, halfCR); } `; - let i = vp(t10); + let i = yp(t10); return a === 1 ? e ? ` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${t10}TexShape[0])); @@ -16672,8 +16672,8 @@ function nJ(r16, e) { } `; } -function sJ(r16, e) { - let t10 = r16.shapeInfo.logicalShape, o = r16.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r16.shapeInfo.texShape, a = s[0], i = s[1], p = kt(); +function zZ(r15, e) { + let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape, a = s[0], i = s[1], p = It(); if (s != null && y.arraysEqual(t10, s)) return e ? ` vec4 ${n}(int row, int col) { @@ -16697,16 +16697,16 @@ function sJ(r16, e) { return ${p.texture2D}(${o}, uv); } `; - let u = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)], l = Math.ceil(t10[1] / 2); + let u = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)], c = Math.ceil(t10[1] / 2); return ` vec4 ${n}(int row, int col) { - vec2 uv = packedUVfrom2D(${l}, ${u[0]}, ${u[1]}, row, col); + vec2 uv = packedUVfrom2D(${c}, ${u[0]}, ${u[1]}, row, col); return ${p.texture2D}(${o}, uv); } `; } -function aJ(r16, e) { - let t10 = r16.shapeInfo.logicalShape, o = r16.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r16.shapeInfo.texShape; +function VZ(r15, e) { + let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape; if (s != null && y.arraysEqual(t10, s)) { if (e) return ` @@ -16725,74 +16725,74 @@ function aJ(r16, e) { } let { newShape: a, keptDims: i } = y.squeezeShape(t10), p = a; if (p.length < t10.length) { - let m = zl(r16, p), d = ["row", "col"]; + let m = Pc(r15, p), d = ["row", "col"]; return ` - ${Ll(m, e)} + ${Ac(m, e)} float ${n}(int row, int col) { - return ${n}(${Vl(d, i)}); + return ${n}(${Oc(d, i)}); } `; } - if (r16.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col) { int index = round(dot(vec2(row, col), vec2(${t10[1]}, 1))); - ${Bl(r16)} + ${Fc(r15)} } `; - let u = s[0], l = s[1], c = vp(o); - return l === 1 ? e ? ` + let u = s[0], c = s[1], l = yp(o); + return c === 1 ? e ? ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${c}), vec3(${o}Shape[1], 1, 1)); + float index = dot(vec3(row, col, ${l}), vec3(${o}Shape[1], 1, 1)); vec2 uv = vec2(0.5, (index + 0.5) / float(${o}TexShape[0])); return sampleTexture(${o}, uv); } ` : ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${c}), vec3(${t10[1]}, 1, 1)); + float index = dot(vec3(row, col, ${l}), vec3(${t10[1]}, 1, 1)); vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0); return sampleTexture(${o}, uv); } ` : u === 1 ? e ? ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${c}), vec3(${o}Shape[1], 1, 1)); + float index = dot(vec3(row, col, ${l}), vec3(${o}Shape[1], 1, 1)); vec2 uv = vec2((index + 0.5) / float(${o}TexShape[1]), 0.5); return sampleTexture(${o}, uv); } ` : ` float ${n}(int row, int col) { - float index = dot(vec3(row, col, ${c}), vec3(${t10[1]}, 1, 1)); - vec2 uv = vec2((index + 0.5) / ${l}.0, 0.5); + float index = dot(vec3(row, col, ${l}), vec3(${t10[1]}, 1, 1)); + vec2 uv = vec2((index + 0.5) / ${c}.0, 0.5); return sampleTexture(${o}, uv); } ` : e ? ` float ${n}(int row, int col) { // Explicitly use integer operations as dot() only works on floats. - int index = row * ${o}Shape[1] + col + ${c}; + int index = row * ${o}Shape[1] + col + ${l}; vec2 uv = uvFromFlat(${o}TexShape[0], ${o}TexShape[1], index); return sampleTexture(${o}, uv); } ` : ` float ${n}(int row, int col) { // Explicitly use integer operations as dot() only works on floats. - int index = row * ${t10[1]} + col + ${c}; - vec2 uv = uvFromFlat(${u}, ${l}, index); + int index = row * ${t10[1]} + col + ${l}; + vec2 uv = uvFromFlat(${u}, ${c}, index); return sampleTexture(${o}, uv); } `; } -function iJ(r16, e) { - let t10 = r16.shapeInfo.logicalShape, o = r16.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r16.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; +function WZ(r15, e) { + let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = r15.shapeInfo.texShape, a = [Math.ceil(s[0] / 2), Math.ceil(s[1] / 2)]; if (t10[0] === 1) { - let m = t10.slice(1), d = [1, 2], f = zl(r16, m), h = ["b", "row", "col"]; + let m = t10.slice(1), d = [1, 2], f = Pc(r15, m), h = ["b", "row", "col"]; return ` - ${xD(f, e)} + ${DR(f, e)} vec4 ${n}(int b, int row, int col) { - return ${n}(${Vl(h, d)}); + return ${n}(${Oc(h, d)}); } `; } - let i = kt(); + let i = It(); if (e) return ` vec4 ${n}(int b, int row, int col) { @@ -16804,35 +16804,35 @@ function iJ(r16, e) { return ${i.texture2D}(${o}, uv); } `; - let p = a[0], u = a[1], l = Math.ceil(t10[2] / 2), c = l * Math.ceil(t10[1] / 2); + let p = a[0], u = a[1], c = Math.ceil(t10[2] / 2), l = c * Math.ceil(t10[1] / 2); return ` vec4 ${n}(int b, int row, int col) { vec2 uv = packedUVfrom3D( - ${p}, ${u}, ${c}, ${l}, b, row, col); + ${p}, ${u}, ${l}, ${c}, b, row, col); return ${i.texture2D}(${o}, uv); } `; } -function uJ(r16, e) { - let t10 = r16.shapeInfo.logicalShape, o = r16.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[1] * t10[2], a = t10[2], { newShape: i, keptDims: p } = y.squeezeShape(t10), u = i; +function UZ(r15, e) { + let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[1] * t10[2], a = t10[2], { newShape: i, keptDims: p } = y.squeezeShape(t10), u = i; if (u.length < t10.length) { - let h = zl(r16, u), g = ["row", "col", "depth"]; + let h = Pc(r15, u), g = ["row", "col", "depth"]; return ` - ${Ll(h, e)} + ${Ac(h, e)} float ${n}(int row, int col, int depth) { - return ${n}(${Vl(g, p)}); + return ${n}(${Oc(g, p)}); } `; } - if (r16.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col, int depth) { int index = round(dot(vec3(row, col, depth), vec3(${s}, ${a}, 1))); - ${Bl(r16)} + ${Fc(r15)} } `; - let l = r16.shapeInfo.texShape, c = l[0], m = l[1], d = r16.shapeInfo.flatOffset; + let c = r15.shapeInfo.texShape, l = c[0], m = c[1], d = r15.shapeInfo.flatOffset; if (m === s && d == null) return e ? ` float ${n}(int row, int col, int depth) { @@ -16848,7 +16848,7 @@ function uJ(r16, e) { float texR = float(row); float texC = dot(vec2(col, depth), vec2(${a}, 1)); vec2 uv = (vec2(texC, texR) + halfCR) / - vec2(${m}.0, ${c}.0); + vec2(${m}.0, ${l}.0); return sampleTexture(${o}, uv); } `; @@ -16864,11 +16864,11 @@ function uJ(r16, e) { float ${n}(int row, int col, int depth) { float texR = dot(vec2(row, col), vec2(${t10[1]}, 1)); float texC = float(depth); - vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${m}.0, ${c}.0); + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${m}.0, ${l}.0); return sampleTexture(${o}, uv); } `; - let f = vp(o); + let f = yp(o); return e ? ` float ${n}(int row, int col, int depth) { // Explicitly use integer operations as dot() only works on floats. @@ -16882,13 +16882,13 @@ function uJ(r16, e) { float ${n}(int row, int col, int depth) { // Explicitly use integer operations as dot() only works on floats. int index = row * ${s} + col * ${a} + depth + ${f}; - vec2 uv = uvFromFlat(${c}, ${m}, index); + vec2 uv = uvFromFlat(${l}, ${m}, index); return sampleTexture(${o}, uv); } `; } -function pJ(r16, e) { - let t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = kt(); +function GZ(r15, e) { + let t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = It(); if (e) return ` vec4 ${o}(int b2, int b, int row, int col) { @@ -16903,40 +16903,40 @@ function pJ(r16, e) { vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${n.texture2D}(${t10}, uv); } `; - let s = r16.shapeInfo.logicalShape, a = s.length, i = r16.shapeInfo.texShape, p = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)], u = p[0], l = p[1], c = Math.ceil(s[a - 1] / 2), m = c * Math.ceil(s[a - 2] / 2), d = "int b, int row, int col", f = `b * ${m} + (row / 2) * ${c} + (col / 2)`; + let s = r15.shapeInfo.logicalShape, a = s.length, i = r15.shapeInfo.texShape, p = [Math.ceil(i[0] / 2), Math.ceil(i[1] / 2)], u = p[0], c = p[1], l = Math.ceil(s[a - 1] / 2), m = l * Math.ceil(s[a - 2] / 2), d = "int b, int row, int col", f = `b * ${m} + (row / 2) * ${l} + (col / 2)`; for (let h = 2; h < a - 1; h++) d = `int b${h}, ` + d, m *= s[a - h - 1], f = `b${h} * ${m} + ` + f; return ` vec4 ${o}(${d}) { int index = ${f}; - int texR = index / ${l}; - int texC = index - texR * ${l}; - vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${l}, ${u}); + int texR = index / ${c}; + int texC = index - texR * ${c}; + vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${c}, ${u}); return ${n.texture2D}(${t10}, uv); } `; } -function lJ(r16, e) { - let t10 = r16.shapeInfo.logicalShape, o = r16.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[3], a = t10[2] * s, i = t10[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(t10); +function HZ(r15, e) { + let t10 = r15.shapeInfo.logicalShape, o = r15.name, n = "get" + o.charAt(0).toUpperCase() + o.slice(1), s = t10[3], a = t10[2] * s, i = t10[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(t10); if (p.length < t10.length) { - let b = zl(r16, p), w = ["row", "col", "depth", "depth2"]; + let b = Pc(r15, p), C = ["row", "col", "depth", "depth2"]; return ` - ${Ll(b, e)} + ${Ac(b, e)} float ${n}(int row, int col, int depth, int depth2) { - return ${n}(${Vl(w, u)}); + return ${n}(${Oc(C, u)}); } `; } - if (r16.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${n}(int row, int col, int depth, int depth2) { int index = round(dot(vec4(row, col, depth, depth2), vec4(${i}, ${a}, ${s}, 1))); - ${Bl(r16)} + ${Fc(r15)} } `; - let l = r16.shapeInfo.flatOffset, c = r16.shapeInfo.texShape, m = c[0], d = c[1], f = `int stride2 = ${o}Shape[3];`, h = `int stride1 = ${o}Shape[2] * stride2;`, g = `int stride0 = ${o}Shape[1] * stride1;`; - if (d === i && l == null) + let c = r15.shapeInfo.flatOffset, l = r15.shapeInfo.texShape, m = l[0], d = l[1], f = `int stride2 = ${o}Shape[3];`, h = `int stride1 = ${o}Shape[2] * stride2;`, g = `int stride0 = ${o}Shape[1] * stride1;`; + if (d === i && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { ${f} @@ -16960,7 +16960,7 @@ function lJ(r16, e) { return sampleTexture(${o}, uv); } `; - if (d === s && l == null) + if (d === s && c == null) return e ? ` float ${n}(int row, int col, int depth, int depth2) { float texR = dot(vec3(row, col, depth), @@ -16980,7 +16980,7 @@ function lJ(r16, e) { return sampleTexture(${o}, uv); } `; - let x = vp(o); + let x = yp(o); return e ? ` float ${n}(int row, int col, int depth, int depth2) { // Explicitly use integer operations as dot() only works on floats. @@ -17002,29 +17002,29 @@ function lJ(r16, e) { } `; } -function cJ(r16) { - let e = r16.shapeInfo.logicalShape, t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = e[4], s = e[3] * n, a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(e); +function KZ(r15) { + let e = r15.shapeInfo.logicalShape, t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), n = e[4], s = e[3] * n, a = e[2] * s, i = e[1] * a, { newShape: p, keptDims: u } = y.squeezeShape(e); if (p.length < e.length) { - let h = zl(r16, p), g = ["row", "col", "depth", "depth2", "depth3"]; + let h = Pc(r15, p), g = ["row", "col", "depth", "depth2", "depth3"]; return ` - ${Ll(h)} + ${Ac(h)} float ${o}(int row, int col, int depth, int depth2, int depth3) { - return ${o}(${Vl(g, u)}); + return ${o}(${Oc(g, u)}); } `; } - if (r16.shapeInfo.isUniform) + if (r15.shapeInfo.isUniform) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { float index = dot( vec4(row, col, depth, depth2), vec4(${i}, ${a}, ${s}, ${n})) + depth3; - ${Bl(r16)} + ${Fc(r15)} } `; - let l = r16.shapeInfo.flatOffset, c = r16.shapeInfo.texShape, m = c[0], d = c[1]; - if (d === i && l == null) + let c = r15.shapeInfo.flatOffset, l = r15.shapeInfo.texShape, m = l[0], d = l[1]; + if (d === i && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { int texR = row; @@ -17035,7 +17035,7 @@ function cJ(r16) { return sampleTexture(${t10}, uv); } `; - if (d === n && l == null) + if (d === n && c == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { float texR = dot( @@ -17048,7 +17048,7 @@ function cJ(r16) { return sampleTexture(${t10}, uv); } `; - let f = vp(t10); + let f = yp(t10); return ` float ${o}(int row, int col, int depth, int depth2, int depth3) { // Explicitly use integer operations as dot() only works on floats. @@ -17059,34 +17059,34 @@ function cJ(r16) { } `; } -function mJ(r16) { - let e = r16.shapeInfo.logicalShape, t10 = r16.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), { newShape: n, keptDims: s } = y.squeezeShape(e); +function qZ(r15) { + let e = r15.shapeInfo.logicalShape, t10 = r15.name, o = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), { newShape: n, keptDims: s } = y.squeezeShape(e); if (n.length < e.length) { - let g = zl(r16, n), x = ["row", "col", "depth", "depth2", "depth3", "depth4"]; + let g = Pc(r15, n), x = ["row", "col", "depth", "depth2", "depth3", "depth4"]; return ` - ${Ll(g)} + ${Ac(g)} float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { - return ${o}(${Vl(x, s)}); + return ${o}(${Oc(x, s)}); } `; } - let a = e[5], i = e[4] * a, p = e[3] * i, u = e[2] * p, l = e[1] * u; - if (r16.shapeInfo.isUniform) + let a = e[5], i = e[4] * a, p = e[3] * i, u = e[2] * p, c = e[1] * u; + if (r15.shapeInfo.isUniform) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { int index = round(dot( vec4(row, col, depth, depth2), - vec4(${l}, ${u}, ${p}, ${i})) + + vec4(${c}, ${u}, ${p}, ${i})) + dot( vec2(depth3, depth4), vec2(${a}, 1))); - ${Bl(r16)} + ${Fc(r15)} } `; - let c = r16.shapeInfo.flatOffset, m = r16.shapeInfo.texShape, d = m[0], f = m[1]; - if (f === l && c == null) + let l = r15.shapeInfo.flatOffset, m = r15.shapeInfo.texShape, d = m[0], f = m[1]; + if (f === c && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -17099,7 +17099,7 @@ function mJ(r16) { return sampleTexture(${t10}, uv); } `; - if (f === a && c == null) + if (f === a && l == null) return ` float ${o}(int row, int col, int depth, int depth2, int depth3, int depth4) { @@ -17114,20 +17114,20 @@ function mJ(r16) { return sampleTexture(${t10}, uv); } `; - let h = vp(t10); + let h = yp(t10); return ` float ${o}(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 * ${l} + col * ${u} + depth * ${p} + + int index = row * ${c} + col * ${u} + depth * ${p} + depth2 * ${i} + depth3 * ${a} + depth4 + ${h}; vec2 uv = uvFromFlat(${d}, ${f}, index); return sampleTexture(${t10}, uv); } `; } -function Bl(r16) { - let e = r16.name, t10 = y.sizeFromShape(r16.shapeInfo.logicalShape); +function Fc(r15) { + let e = r15.name, t10 = y.sizeFromShape(r15.shapeInfo.logicalShape); return t10 < 2 ? `return ${e};` : ` for (int i = 0; i < ${t10}; i++) { if (i == index) { @@ -17136,13 +17136,13 @@ function Bl(r16) { } `; } -function dJ(r16, e) { - let t10 = r16.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = r16.shapeInfo.logicalShape.length, a = e.logicalShape.length, i = hD(r16.shapeInfo.logicalShape, e.logicalShape), p = Re(a), u = a - s, l, c = ["x", "y", "z", "w", "u", "v"]; - s === 0 ? l = "" : a < 2 && i.length >= 1 ? l = "coords = 0;" : l = i.map((b) => `coords.${c[b + u]} = 0;`).join(` +function jZ(r15, e) { + let t10 = r15.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = r15.shapeInfo.logicalShape.length, a = e.logicalShape.length, i = $R(r15.shapeInfo.logicalShape, e.logicalShape), p = Re(a), u = a - s, c, l = ["x", "y", "z", "w", "u", "v"]; + s === 0 ? c = "" : a < 2 && i.length >= 1 ? c = "coords = 0;" : c = i.map((b) => `coords.${l[b + u]} = 0;`).join(` `); let m = ""; - a < 2 && s > 0 ? m = "coords" : m = r16.shapeInfo.logicalShape.map((b, w) => `coords.${c[w + u]}`).join(", "); - let d = "return outputValue;", h = y.sizeFromShape(r16.shapeInfo.logicalShape) === 1, x = y.sizeFromShape(e.logicalShape) === 1; + a < 2 && s > 0 ? m = "coords" : m = r15.shapeInfo.logicalShape.map((b, C) => `coords.${l[C + u]}`).join(", "); + let d = "return outputValue;", h = y.sizeFromShape(r15.shapeInfo.logicalShape) === 1, x = y.sizeFromShape(e.logicalShape) === 1; if (s === 1 && !h && !x) d = ` return vec4(outputValue.xy, outputValue.xy); @@ -17154,31 +17154,31 @@ function dJ(r16, e) { return vec4(outputValue.x); `; else if (i.length) { - let b = s - 2, w = s - 1; - i.indexOf(b) > -1 && i.indexOf(w) > -1 ? d = "return vec4(outputValue.x);" : i.indexOf(b) > -1 ? d = "return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);" : i.indexOf(w) > -1 && (d = "return vec4(outputValue.xx, outputValue.zz);"); + let b = s - 2, C = s - 1; + i.indexOf(b) > -1 && i.indexOf(C) > -1 ? d = "return vec4(outputValue.x);" : i.indexOf(b) > -1 ? d = "return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);" : i.indexOf(C) > -1 && (d = "return vec4(outputValue.xx, outputValue.zz);"); } return ` vec4 ${n}() { ${p} coords = getOutputCoords(); - ${l} + ${c} vec4 outputValue = get${o}(${m}); ${d} } `; } -function fJ(r16, e) { - let t10 = r16.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = e.texShape, a = r16.shapeInfo.texShape, i = r16.shapeInfo.logicalShape.length, p = e.logicalShape.length; - if (!r16.shapeInfo.isUniform && i === p && r16.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) +function XZ(r15, e) { + let t10 = r15.name, o = t10.charAt(0).toUpperCase() + t10.slice(1), n = "get" + o + "AtOutCoords", s = e.texShape, a = r15.shapeInfo.texShape, i = r15.shapeInfo.logicalShape.length, p = e.logicalShape.length; + if (!r15.shapeInfo.isUniform && i === p && r15.shapeInfo.flatOffset == null && y.arraysEqual(a, s)) return ` float ${n}() { return sampleTexture(${t10}, resultUV); } `; - let u = Re(p), l = hD(r16.shapeInfo.logicalShape, e.logicalShape), c = p - i, m, d = ["x", "y", "z", "w", "u", "v"]; - i === 0 ? m = "" : p < 2 && l.length >= 1 ? m = "coords = 0;" : m = l.map((h) => `coords.${d[h + c]} = 0;`).join(` + let u = Re(p), c = $R(r15.shapeInfo.logicalShape, e.logicalShape), l = p - i, m, d = ["x", "y", "z", "w", "u", "v"]; + i === 0 ? m = "" : p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((h) => `coords.${d[h + l]} = 0;`).join(` `); let f = ""; - return p < 2 && i > 0 ? f = "coords" : f = r16.shapeInfo.logicalShape.map((h, g) => `coords.${d[g + c]}`).join(", "), ` + return p < 2 && i > 0 ? f = "coords" : f = r15.shapeInfo.logicalShape.map((h, g) => `coords.${d[g + l]}`).join(", "), ` float ${n}() { ${u} coords = getOutputCoords(); ${m} @@ -17186,56 +17186,56 @@ function fJ(r16, e) { } `; } -function Re(r16) { - if (r16 <= 1) +function Re(r15) { + if (r15 <= 1) return "int"; - if (r16 === 2) + if (r15 === 2) return "ivec2"; - if (r16 === 3) + if (r15 === 3) return "ivec3"; - if (r16 === 4) + if (r15 === 4) return "ivec4"; - if (r16 === 5) + if (r15 === 5) return "ivec5"; - if (r16 === 6) + if (r15 === 6) return "ivec6"; - throw Error(`GPU for rank ${r16} is not yet supported`); + throw Error(`GPU for rank ${r15} is not yet supported`); } -function ph(r16, e, t10) { - let { newShape: o, keptDims: n } = y.squeezeShape(e), s = e.length, a = r16 && s === 3 && e[0] === 1, i = a ? e.slice(1) : o, p = !r16 && s > 1 && !y.arraysEqual(e, t10) && o.length < s || a; +function Zf(r15, e, t10) { + let { newShape: o, keptDims: n } = y.squeezeShape(e), s = e.length, a = r15 && s === 3 && e[0] === 1, i = a ? e.slice(1) : o, p = !r15 && s > 1 && !y.arraysEqual(e, t10) && o.length < s || a; return { useSqueezeShape: p, uniformShape: p ? i : e, keptDims: n }; } -function zl(r16, e) { - let t10 = JSON.parse(JSON.stringify(r16)); +function Pc(r15, e) { + let t10 = JSON.parse(JSON.stringify(r15)); return t10.shapeInfo.logicalShape = e, t10; } -function Vl(r16, e) { - return e.map((t10) => r16[t10]).join(", "); +function Oc(r15, e) { + return e.map((t10) => r15[t10]).join(", "); } -function CD(r16, e, t10, o) { - let n = t10.map((l, c) => { - let m = { logicalShape: l.shape, texShape: l.isUniform ? null : l.texData.texShape, isUniform: l.isUniform, isPacked: l.isUniform ? false : l.texData.isPacked, flatOffset: null }; - return l.texData != null && l.texData.slice != null && l.texData.slice.flatOffset > 0 && (m.flatOffset = l.texData.slice.flatOffset), { name: e.variableNames[c], shapeInfo: m }; - }), s = n.map((l) => l.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = gD(n, a, e), p = GI(r16.gl, i), u = r16.createProgram(p); - return A().get("ENGINE_COMPILE_ONLY") ? { program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a, variablesLocations: null, customUniformLocations: null, infLoc: null, nanLoc: null, outShapeLocation: null, outShapeStridesLocation: null, outTexShapeLocation: null } : (r16.buildVao(u), Object.assign({ program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, u0(r16, e, u))); +function PR(r15, e, t10, o) { + let n = t10.map((c, l) => { + let m = { logicalShape: c.shape, texShape: c.isUniform ? null : c.texData.texShape, isUniform: c.isUniform, isPacked: c.isUniform ? false : c.texData.isPacked, flatOffset: null }; + return c.texData != null && c.texData.slice != null && c.texData.slice.flatOffset > 0 && (m.flatOffset = c.texData.slice.flatOffset), { name: e.variableNames[l], shapeInfo: m }; + }), s = n.map((c) => c.shapeInfo), a = { logicalShape: o.shape, texShape: o.texData.texShape, isUniform: false, isPacked: o.texData.isPacked, flatOffset: null }, i = RR(n, a, e), p = RI(r15.gl, i), u = r15.createProgram(p); + return A().get("ENGINE_COMPILE_ONLY") ? { program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a, variablesLocations: null, customUniformLocations: null, infLoc: null, nanLoc: null, outShapeLocation: null, outShapeStridesLocation: null, outTexShapeLocation: null } : (r15.buildVao(u), Object.assign({ program: e, fragmentShader: p, source: i, webGLProgram: u, inShapeInfos: s, outShapeInfo: a }, XI(r15, e, u))); } -function u0(r16, e, t10) { +function XI(r15, e, t10) { let o = [], n = [], s, a, i, p = null, u = null; - u = r16.getUniformLocation(t10, "NAN", false), A().getNumber("WEBGL_VERSION") === 1 && (p = r16.getUniformLocation(t10, "INFINITY", false)); - let l = false; - for (let c of e.variableNames) { - let m = { name: c, uniform: r16.getUniformLocation(t10, c, l), offset: r16.getUniformLocation(t10, `offset${c}`, l) }; - e.enableShapeUniforms && (m.shape = r16.getUniformLocation(t10, `${c}Shape`, l), m.texShape = r16.getUniformLocation(t10, `${c}TexShape`, l)), o.push(m); - } - if (e.enableShapeUniforms && (s = r16.getUniformLocation(t10, "outShape", l), i = r16.getUniformLocation(t10, "outShapeStrides", l), a = r16.getUniformLocation(t10, "outTexShape", l)), e.customUniforms) - for (let c of e.customUniforms) - n.push(r16.getUniformLocation(t10, c.name, l)); + u = r15.getUniformLocation(t10, "NAN", false), A().getNumber("WEBGL_VERSION") === 1 && (p = r15.getUniformLocation(t10, "INFINITY", false)); + let c = false; + for (let l of e.variableNames) { + let m = { name: l, uniform: r15.getUniformLocation(t10, l, c), offset: r15.getUniformLocation(t10, `offset${l}`, c) }; + e.enableShapeUniforms && (m.shape = r15.getUniformLocation(t10, `${l}Shape`, c), m.texShape = r15.getUniformLocation(t10, `${l}TexShape`, c)), o.push(m); + } + if (e.enableShapeUniforms && (s = r15.getUniformLocation(t10, "outShape", c), i = r15.getUniformLocation(t10, "outShapeStrides", c), a = r15.getUniformLocation(t10, "outTexShape", c)), e.customUniforms) + for (let l of e.customUniforms) + n.push(r15.getUniformLocation(t10, l.name, c)); return { variablesLocations: o, customUniformLocations: n, infLoc: p, nanLoc: u, outShapeLocation: s, outShapeStridesLocation: i, outTexShapeLocation: a }; } -function bD(r16, e) { - if (r16.length !== e.length) - throw Error(`Binary was compiled with ${r16.length} inputs, but was executed with ${e.length} inputs`); - r16.forEach((t10, o) => { +function FR(r15, e) { + if (r15.length !== e.length) + throw Error(`Binary was compiled with ${r15.length} inputs, but was executed with ${e.length} inputs`); + r15.forEach((t10, o) => { let n = t10.logicalShape, s = e[o], a = s.shape; if (!y.arraysEqual(n, a)) throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`); @@ -17246,58 +17246,58 @@ function bD(r16, e) { throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`); }); } -function wD(r16, e, t10, o, n) { - e.program.enableShapeUniforms || (bD(e.inShapeInfos, t10), bD([e.outShapeInfo], [o])); +function OR(r15, e, t10, o, n) { + e.program.enableShapeUniforms || (FR(e.inShapeInfos, t10), FR([e.outShapeInfo], [o])); let s = o.texData.texture, a = o.texData.texShape; - o.texData.isPacked ? r16.setOutputPackedMatrixTexture(s.texture, a[0], a[1]) : r16.setOutputMatrixTexture(s.texture, a[0], a[1]), r16.setProgram(e.webGLProgram), r16.bindVertexArray(e.webGLProgram.vao), A().getNumber("WEBGL_VERSION") === 1 && e.infLoc !== null && r16.gl.uniform1f(e.infLoc, 1 / 0), e.nanLoc !== null && r16.gl.uniform1f(e.nanLoc, NaN); + o.texData.isPacked ? r15.setOutputPackedMatrixTexture(s.texture, a[0], a[1]) : r15.setOutputMatrixTexture(s.texture, a[0], a[1]), r15.setProgram(e.webGLProgram), r15.bindVertexArray(e.webGLProgram.vao), A().getNumber("WEBGL_VERSION") === 1 && e.infLoc !== null && r15.gl.uniform1f(e.infLoc, 1 / 0), e.nanLoc !== null && r15.gl.uniform1f(e.nanLoc, NaN); for (let p = 0; p < t10.length; ++p) { - let u = t10[p], { uniform: l, offset: c, shape: m, texShape: d } = e.variablesLocations[p]; + let u = t10[p], { uniform: c, offset: l, shape: m, texShape: d } = e.variablesLocations[p]; if (m) { - let { uniformShape: f } = ph(e.program.packedInputs, u.shape, u.texData.texShape); + let { uniformShape: f } = Zf(e.program.packedInputs, u.shape, u.texData.texShape); switch (f.length) { case 1: - r16.gl.uniform1iv(m, new Int32Array(f)); + r15.gl.uniform1iv(m, new Int32Array(f)); break; case 2: - r16.gl.uniform2iv(m, new Int32Array(f)); + r15.gl.uniform2iv(m, new Int32Array(f)); break; case 3: - r16.gl.uniform3iv(m, new Int32Array(f)); + r15.gl.uniform3iv(m, new Int32Array(f)); break; case 4: - r16.gl.uniform4iv(m, new Int32Array(f)); + r15.gl.uniform4iv(m, new Int32Array(f)); break; default: break; } } - if (d && r16.gl.uniform2i(d, u.texData.texShape[0], u.texData.texShape[1]), l != null) { + if (d && r15.gl.uniform2i(d, u.texData.texShape[0], u.texData.texShape[1]), c != null) { if (u.isUniform) { if (y.sizeFromShape(u.shape) < 2) - r16.gl.uniform1f(l, u.uniformValues[0]); + r15.gl.uniform1f(c, u.uniformValues[0]); else { let f = u.uniformValues; - f instanceof Float32Array || (f = new Float32Array(f)), r16.gl.uniform1fv(l, f); + f instanceof Float32Array || (f = new Float32Array(f)), r15.gl.uniform1fv(c, f); } continue; } - u.texData.slice != null && c != null && r16.gl.uniform1i(c, u.texData.slice.flatOffset), r16.setInputMatrixTexture(u.texData.texture.texture, l, p); + u.texData.slice != null && l != null && r15.gl.uniform1i(l, u.texData.slice.flatOffset), r15.setInputMatrixTexture(u.texData.texture.texture, c, p); } } let i = e.outShapeLocation; if (i) switch (o.shape.length) { case 1: - r16.gl.uniform1iv(i, new Int32Array(o.shape)); + r15.gl.uniform1iv(i, new Int32Array(o.shape)); break; case 2: - r16.gl.uniform2iv(i, new Int32Array(o.shape)); + r15.gl.uniform2iv(i, new Int32Array(o.shape)); break; case 3: - r16.gl.uniform3iv(i, new Int32Array(o.shape)); + r15.gl.uniform3iv(i, new Int32Array(o.shape)); break; case 4: - r16.gl.uniform4iv(i, new Int32Array(o.shape)); + r15.gl.uniform4iv(i, new Int32Array(o.shape)); break; default: break; @@ -17306,77 +17306,77 @@ function wD(r16, e, t10, o, n) { let p = y.computeStrides(o.shape); switch (o.shape.length) { case 2: - r16.gl.uniform1iv(e.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform1iv(e.outShapeStridesLocation, new Int32Array(p)); break; case 3: - r16.gl.uniform2iv(e.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform2iv(e.outShapeStridesLocation, new Int32Array(p)); break; case 4: - r16.gl.uniform3iv(e.outShapeStridesLocation, new Int32Array(p)); + r15.gl.uniform3iv(e.outShapeStridesLocation, new Int32Array(p)); break; default: break; } } - if (e.outTexShapeLocation && r16.gl.uniform2i(e.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), e.program.customUniforms && n) + if (e.outTexShapeLocation && r15.gl.uniform2i(e.outTexShapeLocation, o.texData.texShape[0], o.texData.texShape[1]), e.program.customUniforms && n) for (let p = 0; p < e.program.customUniforms.length; ++p) { - let u = e.program.customUniforms[p], l = e.customUniformLocations[p], c = n[p]; + let u = e.program.customUniforms[p], c = e.customUniformLocations[p], l = n[p]; if (u.type === "float") - r16.gl.uniform1fv(l, c); + r15.gl.uniform1fv(c, l); else if (u.type === "vec2") - r16.gl.uniform2fv(l, c); + r15.gl.uniform2fv(c, l); else if (u.type === "vec3") - r16.gl.uniform3fv(l, c); + r15.gl.uniform3fv(c, l); else if (u.type === "vec4") - r16.gl.uniform4fv(l, c); + r15.gl.uniform4fv(c, l); else if (u.type === "int") - r16.gl.uniform1iv(l, c); + r15.gl.uniform1iv(c, l); else if (u.type === "ivec2") - r16.gl.uniform2iv(l, c); + r15.gl.uniform2iv(c, l); else if (u.type === "ivec3") - r16.gl.uniform3iv(l, c); + r15.gl.uniform3iv(c, l); else if (u.type === "ivec4") - r16.gl.uniform4iv(l, c); + r15.gl.uniform4iv(c, l); else throw Error(`uniform type ${u.type} is not supported yet.`); } - r16.executeProgram(); + r15.executeProgram(); } -function SD(r16, e, t10) { +function MR(r15, e, t10) { let o = ""; e.concat(t10).forEach((a) => { let i = a.texData != null && a.texData.slice != null && a.texData.slice.flatOffset > 0; - if (r16.enableShapeUniforms && !a.isUniform) { - let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: l, keptDims: c } = ph(r16.packedInputs, a.shape, p), m = "", d = "", f = ""; - if (l.length === 1 && r16.packedInputs) { + if (r15.enableShapeUniforms && !a.isUniform) { + let p = a.texData.texShape, { useSqueezeShape: u, uniformShape: c, keptDims: l } = Zf(r15.packedInputs, a.shape, p), m = "", d = "", f = ""; + if (c.length === 1 && r15.packedInputs) { let k = [Math.ceil(p[0] / 2), Math.ceil(p[1] / 2)]; m = `${k[0] > 1}_${k[1] > 1}`; - } else if (l.length === 2 && !r16.packedInputs) - d = `${l[0] > 1}_${l[1] > 1}`; - else if (l.length > 2 && !r16.packedInputs) { - let k = y.computeStrides(l); + } else if (c.length === 2 && !r15.packedInputs) + d = `${c[0] > 1}_${c[1] > 1}`; + else if (c.length > 2 && !r15.packedInputs) { + let k = y.computeStrides(c); f = `${k[0] === p[1]}_${k[k.length - 1] === p[1]}`; } - let h = a.shape.length, g = l.length === 2 && y.arraysEqual(a.shape, p), x = y.sizeFromShape(a.shape) === 1, b = C.getBroadcastDims(a.shape, t10.shape), w = !r16.packedInputs && h === t10.shape.length && y.arraysEqual(p, t10.texData.texShape), S = r16.packedInputs || l.length > 2 ? "" : `${p[0] > 1}_${p[1] > 1}`; - o += `${h}_${w}_${u ? c : ""}_${l.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`; + let h = a.shape.length, g = c.length === 2 && y.arraysEqual(a.shape, p), x = y.sizeFromShape(a.shape) === 1, b = w.getBroadcastDims(a.shape, t10.shape), C = !r15.packedInputs && h === t10.shape.length && y.arraysEqual(p, t10.texData.texShape), S = r15.packedInputs || c.length > 2 ? "" : `${p[0] > 1}_${p[1] > 1}`; + o += `${h}_${C}_${u ? l : ""}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`; } else { let p = a.isUniform ? "uniform" : a.texData.texShape; o += `${a.shape}_${p}_${i}`; } }); - let n = r16.userCode, s = r16.constructor.name; + let n = r15.userCode, s = r15.constructor.name; return s += "_" + o + "_" + n + `${A().getNumber("WEBGL_VERSION")}`, s; } -function lt(r16) { - return A().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r16 <= 4; +function ut(r15) { + return A().getBool("WEBGL_USE_SHAPES_UNIFORMS") && r15 <= 4; } -var lh = class { +var Jf = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = Iu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let t10 = kt(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outPackingScheme = gu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let t10 = It(); + this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ip(["r", "c", "d"], e) : Qs(["r", "c", "d"], e)} + ${this.enableShapeUniforms ? xp(["r", "c", "d"], e) : Ws(["r", "c", "d"], e)} return ivec3(r, c, d); } @@ -17397,13 +17397,13 @@ var lh = class { `; } }; -var ch = class { +var eh = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = Iu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let t10 = kt(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outPackingScheme = gu.DENSE, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; + let t10 = It(); + this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms ? Ip(["r", "c", "d"], e) : Qs(["r", "c", "d"], e)} + ${this.enableShapeUniforms ? xp(["r", "c", "d"], e) : Ws(["r", "c", "d"], e)} return ivec3(r, c, d); } @@ -17424,12 +17424,12 @@ var ch = class { `; } }; -var mh = class { +var th = class { constructor(e) { - this.variableNames = ["A"], this.outTexUsage = hr.DOWNLOAD; - let t10 = kt(); + this.variableNames = ["A"], this.outTexUsage = mr.DOWNLOAD; + let t10 = It(); this.outputShape = e, this.userCode = ` - ${uh} + ${Qf} void main() { float x = getAAtOutCoords(); @@ -17438,12 +17438,12 @@ var mh = class { `; } }; -var dh = class { +var rh = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outTexUsage = hr.DOWNLOAD; - let t10 = kt(); + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outTexUsage = mr.DOWNLOAD; + let t10 = It(); this.outputShape = e, this.userCode = ` - ${uh} + ${Qf} void main() { ivec3 coords = getOutputCoords(); @@ -17453,12 +17453,12 @@ var dh = class { `; } }; -var xJ = { R: 0, G: 1, B: 2, A: 3 }; -var sm = class { +var ZZ = { R: 0, G: 1, B: 2, A: 3 }; +var Zl = class { constructor(e, t10 = false, o = "RGBA") { this.variableNames = ["A"], this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let n = kt(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); + let n = It(); + this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); let s = "result"; t10 && (s = "floor(result * 255. + 0.5)"); let a = ""; @@ -17466,11 +17466,11 @@ var sm = class { let p = o[i]; a += ` if(offset == ${i}) { - result = values[${xJ[p]}]; + result = values[${ZZ[p]}]; }`; } this.userCode = ` - ${this.enableShapeUniforms ? Ol() : Pl(e)} + ${this.enableShapeUniforms ? Rc() : $c(e)} void main() { ivec3 coords = getOutputCoords(); @@ -17492,11 +17492,11 @@ var sm = class { `; } }; -var fh = class { +var oh = class { constructor(e, t10 = false) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.customUniforms = [{ name: "texShape", type: "ivec2" }]; - let o = kt(); - this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); + let o = It(); + this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); let n = "", s = "result"; t10 && (s = "floor(result * 255. + 0.5)"); for (let a = 0; a <= 1; a++) @@ -17533,7 +17533,7 @@ var fh = class { `; } this.userCode = ` - ${this.enableShapeUniforms ? Ol() : Pl(e)} + ${this.enableShapeUniforms ? Rc() : $c(e)} void main() { ivec3 coords = getOutputCoords(); @@ -17551,10 +17551,10 @@ var fh = class { `; } }; -var k0 = {}; -qe(k0, { bindVertexProgramAttributeStreams: () => x0, createBufferFromOutputTexture: () => C0, createFloat16MatrixTexture: () => d0, createFloat16PackedMatrixTexture: () => g0, createFloat32MatrixTexture: () => m0, createIndexBuffer: () => c0, createPackedMatrixTexture: () => h0, createUnsignedBytesMatrixTexture: () => f0, createVertexBuffer: () => l0, createVertexShader: () => p0, downloadByteEncodedFloatMatrixFromOutputTexture: () => S0, downloadFloat32MatrixFromBuffer: () => w0, downloadMatrixFromPackedOutputTexture: () => v0, downloadPackedMatrixFromBuffer: () => I0, getInternalFormatForFloat16MatrixTexture: () => gh, getInternalFormatForFloat16PackedMatrixTexture: () => bh, getInternalFormatForFloat32MatrixTexture: () => hh, getInternalFormatForPackedMatrixTexture: () => yh, getInternalFormatForUnsignedBytesMatrixTexture: () => xh, uploadDenseMatrixToTexture: () => y0, uploadPixelDataToTexture: () => b0 }); -function p0(r16) { - let e = kt(), t10 = `${e.version} +var mv = {}; +qe(mv, { bindVertexProgramAttributeStreams: () => nv, createBufferFromOutputTexture: () => iv, createFloat16MatrixTexture: () => ev, createFloat16PackedMatrixTexture: () => ov, createFloat32MatrixTexture: () => JI, createIndexBuffer: () => ZI, createPackedMatrixTexture: () => rv, createUnsignedBytesMatrixTexture: () => tv, createVertexBuffer: () => QI, createVertexShader: () => YI, downloadByteEncodedFloatMatrixFromOutputTexture: () => pv, downloadFloat32MatrixFromBuffer: () => uv, downloadMatrixFromPackedOutputTexture: () => lv, downloadPackedMatrixFromBuffer: () => cv, getInternalFormatForFloat16MatrixTexture: () => sh, getInternalFormatForFloat16PackedMatrixTexture: () => uh, getInternalFormatForFloat32MatrixTexture: () => nh, getInternalFormatForPackedMatrixTexture: () => ih, getInternalFormatForUnsignedBytesMatrixTexture: () => ah, uploadDenseMatrixToTexture: () => sv, uploadPixelDataToTexture: () => av }); +function YI(r15) { + let e = It(), t10 = `${e.version} precision highp float; ${e.attribute} vec3 clipSpacePos; ${e.attribute} vec2 uv; @@ -17564,94 +17564,94 @@ function p0(r16) { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`; - return UI(r16, t10); + return $I(r15, t10); } -function l0(r16) { +function QI(r15) { let e = new Float32Array([-1, 1, 0, 0, 1, -1, -1, 0, 0, 0, 1, 1, 0, 1, 1, 1, -1, 0, 1, 0]); - return qI(r16, e); + return FI(r15, e); } -function c0(r16) { +function ZI(r15) { let e = new Uint16Array([0, 1, 2, 2, 1, 3]); - return jI(r16, e); + return PI(r15, e); } -function am(r16, e, t10, o, n, s) { - YI(e, t10); - let a = XI(r16), i = r16.TEXTURE_2D; - return ce(r16, () => r16.bindTexture(i, a)), ce(r16, () => r16.texParameteri(i, r16.TEXTURE_WRAP_S, r16.CLAMP_TO_EDGE)), ce(r16, () => r16.texParameteri(i, r16.TEXTURE_WRAP_T, r16.CLAMP_TO_EDGE)), ce(r16, () => r16.texParameteri(i, r16.TEXTURE_MIN_FILTER, r16.NEAREST)), ce(r16, () => r16.texParameteri(i, r16.TEXTURE_MAG_FILTER, r16.NEAREST)), A().getNumber("WEBGL_VERSION") === 1 ? ce(r16, () => r16.texImage2D(i, 0, o, e, t10, 0, n, s, null)) : ce(r16, () => r16.texStorage2D(i, 1, o, e, t10)), ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, null)), { texture: a, texShape: [t10, e] }; +function Jl(r15, e, t10, o, n, s) { + MI(e, t10); + let a = OI(r15), i = r15.TEXTURE_2D; + return ce(r15, () => r15.bindTexture(i, a)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_WRAP_S, r15.CLAMP_TO_EDGE)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_WRAP_T, r15.CLAMP_TO_EDGE)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_MIN_FILTER, r15.NEAREST)), ce(r15, () => r15.texParameteri(i, r15.TEXTURE_MAG_FILTER, r15.NEAREST)), A().getNumber("WEBGL_VERSION") === 1 ? ce(r15, () => r15.texImage2D(i, 0, o, e, t10, 0, n, s, null)) : ce(r15, () => r15.texStorage2D(i, 1, o, e, t10)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)), { texture: a, texShape: [t10, e] }; } -function hh(r16) { - return r16.internalFormatFloat; +function nh(r15) { + return r15.internalFormatFloat; } -function m0(r16, e, t10, o) { - let [n, s] = Sp(e, t10); - return am(r16, n, s, hh(o), o.textureFormatFloat, r16.FLOAT); +function JI(r15, e, t10, o) { + let [n, s] = gp(e, t10); + return Jl(r15, n, s, nh(o), o.textureFormatFloat, r15.FLOAT); } -function gh(r16) { - return r16.internalFormatHalfFloat; +function sh(r15) { + return r15.internalFormatHalfFloat; } -function d0(r16, e, t10, o) { - let [n, s] = Sp(e, t10); - return am(r16, n, s, gh(o), o.textureFormatFloat, o.textureTypeHalfFloat); +function ev(r15, e, t10, o) { + let [n, s] = gp(e, t10); + return Jl(r15, n, s, sh(o), o.textureFormatFloat, o.textureTypeHalfFloat); } -function xh(r16) { - return r16.downloadTextureFormat; +function ah(r15) { + return r15.downloadTextureFormat; } -function f0(r16, e, t10, o) { - let [n, s] = Sp(e, t10); - return am(r16, n, s, xh(o), r16.RGBA, r16.UNSIGNED_BYTE); +function tv(r15, e, t10, o) { + let [n, s] = gp(e, t10); + return Jl(r15, n, s, ah(o), r15.RGBA, r15.UNSIGNED_BYTE); } -function yh(r16) { - return r16.internalFormatPackedFloat; +function ih(r15) { + return r15.internalFormatPackedFloat; } -function h0(r16, e, t10, o) { - let [n, s] = Ga(e, t10); - return am(r16, n, s, yh(o), r16.RGBA, r16.FLOAT); +function rv(r15, e, t10, o) { + let [n, s] = Ma(e, t10); + return Jl(r15, n, s, ih(o), r15.RGBA, r15.FLOAT); } -function bh(r16) { - return r16.internalFormatPackedHalfFloat; +function uh(r15) { + return r15.internalFormatPackedHalfFloat; } -function g0(r16, e, t10, o) { - let [n, s] = Ga(e, t10); - return am(r16, n, s, bh(o), r16.RGBA, o.textureTypeHalfFloat); +function ov(r15, e, t10, o) { + let [n, s] = Ma(e, t10); + return Jl(r15, n, s, uh(o), r15.RGBA, o.textureTypeHalfFloat); } -function x0(r16, e, t10) { - return ce(r16, () => r16.bindBuffer(r16.ARRAY_BUFFER, t10)), sh(r16, e, "clipSpacePos", t10, 3, 20, 0) && sh(r16, e, "uv", t10, 2, 20, 12); +function nv(r15, e, t10) { + return ce(r15, () => r15.bindBuffer(r15.ARRAY_BUFFER, t10)), jf(r15, e, "clipSpacePos", t10, 3, 20, 0) && jf(r15, e, "uv", t10, 2, 20, 12); } -function y0(r16, e, t10, o, n, s) { - ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, e)); +function sv(r15, e, t10, o, n, s) { + ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, e)); let a, i, p; - n instanceof Uint8Array ? (a = new Uint8Array(t10 * o * 4), i = r16.UNSIGNED_BYTE, p = r16.RGBA) : (a = new Float32Array(t10 * o * 4), i = r16.FLOAT, p = s.internalFormatPackedFloat), a.set(n), A().getNumber("WEBGL_VERSION") === 2 ? ce(r16, () => r16.texSubImage2D(r16.TEXTURE_2D, 0, 0, 0, t10, o, r16.RGBA, i, a)) : ce(r16, () => r16.texImage2D(r16.TEXTURE_2D, 0, p, t10, o, 0, r16.RGBA, i, a)), ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, null)); + n instanceof Uint8Array ? (a = new Uint8Array(t10 * o * 4), i = r15.UNSIGNED_BYTE, p = r15.RGBA) : (a = new Float32Array(t10 * o * 4), i = r15.FLOAT, p = s.internalFormatPackedFloat), a.set(n), A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, t10, o, r15.RGBA, i, a)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, p, t10, o, 0, r15.RGBA, i, a)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function b0(r16, e, t10) { - ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, e)), t10.data instanceof Uint8Array ? A().getNumber("WEBGL_VERSION") === 2 ? ce(r16, () => r16.texSubImage2D(r16.TEXTURE_2D, 0, 0, 0, t10.width, t10.height, r16.RGBA, r16.UNSIGNED_BYTE, t10.data)) : ce(r16, () => r16.texImage2D(r16.TEXTURE_2D, 0, r16.RGBA, t10.width, t10.height, 0, r16.RGBA, r16.UNSIGNED_BYTE, t10.data)) : A().getNumber("WEBGL_VERSION") === 2 ? ce(r16, () => r16.texSubImage2D(r16.TEXTURE_2D, 0, 0, 0, r16.RGBA, r16.UNSIGNED_BYTE, t10)) : ce(r16, () => r16.texImage2D(r16.TEXTURE_2D, 0, r16.RGBA, r16.RGBA, r16.UNSIGNED_BYTE, t10)), ce(r16, () => r16.bindTexture(r16.TEXTURE_2D, null)); +function av(r15, e, t10) { + ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, e)), t10.data instanceof Uint8Array ? A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, t10.width, t10.height, r15.RGBA, r15.UNSIGNED_BYTE, t10.data)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, r15.RGBA, t10.width, t10.height, 0, r15.RGBA, r15.UNSIGNED_BYTE, t10.data)) : A().getNumber("WEBGL_VERSION") === 2 ? ce(r15, () => r15.texSubImage2D(r15.TEXTURE_2D, 0, 0, 0, r15.RGBA, r15.UNSIGNED_BYTE, t10)) : ce(r15, () => r15.texImage2D(r15.TEXTURE_2D, 0, r15.RGBA, r15.RGBA, r15.UNSIGNED_BYTE, t10)), ce(r15, () => r15.bindTexture(r15.TEXTURE_2D, null)); } -function C0(r16, e, t10, o) { - let n = r16.createBuffer(); - ce(r16, () => r16.bindBuffer(r16.PIXEL_PACK_BUFFER, n)); +function iv(r15, e, t10, o) { + let n = r15.createBuffer(); + ce(r15, () => r15.bindBuffer(r15.PIXEL_PACK_BUFFER, n)); let i = 4 * 4 * e * t10; - return ce(r16, () => r16.bufferData(r16.PIXEL_PACK_BUFFER, i, r16.STREAM_READ)), ce(r16, () => r16.readPixels(0, 0, t10, e, r16.RGBA, r16.FLOAT, 0)), ce(r16, () => r16.bindBuffer(r16.PIXEL_PACK_BUFFER, null)), n; + return ce(r15, () => r15.bufferData(r15.PIXEL_PACK_BUFFER, i, r15.STREAM_READ)), ce(r15, () => r15.readPixels(0, 0, t10, e, r15.RGBA, r15.FLOAT, 0)), ce(r15, () => r15.bindBuffer(r15.PIXEL_PACK_BUFFER, null)), n; } -function w0(r16, e, t10) { - let o = r16, n = new Float32Array(t10); +function uv(r15, e, t10) { + let o = r15, n = new Float32Array(t10); return o.bindBuffer(o.PIXEL_PACK_BUFFER, e), o.getBufferSubData(o.PIXEL_PACK_BUFFER, 0, n), o.bindBuffer(o.PIXEL_PACK_BUFFER, null), n; } -function S0(r16, e, t10, o) { - let [n, s] = Sp(e, t10), a = 4, i = new Uint8Array(uD(e * t10, a)); - return ce(r16, () => r16.readPixels(0, 0, n, s, o.downloadTextureFormat, r16.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); +function pv(r15, e, t10, o) { + let [n, s] = gp(e, t10), a = 4, i = new Uint8Array(IR(e * t10, a)); + return ce(r15, () => r15.readPixels(0, 0, n, s, o.downloadTextureFormat, r15.UNSIGNED_BYTE, i)), new Float32Array(i.buffer); } -function I0(r16, e, t10, o, n, s, a, i) { - let p = r16, u = new Float32Array(pD(s, a)); +function cv(r15, e, t10, o, n, s, a, i) { + let p = r15, u = new Float32Array(vR(s, a)); return p.bindBuffer(p.PIXEL_PACK_BUFFER, e), p.getBufferSubData(p.PIXEL_PACK_BUFFER, 0, u), p.bindBuffer(p.PIXEL_PACK_BUFFER, null), u; } -function v0(r16, e, t10) { +function lv(r15, e, t10) { let o = new Float32Array(e * t10 * 4); - return ce(r16, () => r16.readPixels(0, 0, t10, e, r16.RGBA, r16.FLOAT, o)), o; + return ce(r15, () => r15.readPixels(0, 0, t10, e, r15.RGBA, r15.FLOAT, o)), o; } -var kp = class { +var bp = class { constructor(e) { this.outputTexture = null, this.program = null, this.disposed = false, this.itemsToPoll = []; let t10 = A().getNumber("WEBGL_VERSION"); - if (e != null ? (this.gl = e, BI(t10, e)) : this.gl = Zr(t10), e = this.gl, A().getNumber("WEBGL_VERSION") === 2) { + if (e != null ? (this.gl = e, NI(t10, e)) : this.gl = Kr(t10), e = this.gl, A().getNumber("WEBGL_VERSION") === 2) { let s = e; this.createVertexArray = () => ce(s, () => s.createVertexArray()), this.bindVertexArray = (a) => ce(s, () => s.bindVertexArray(a)), this.deleteVertexArray = (a) => ce(s, () => s.deleteVertexArray(a)), this.getVertexArray = () => ce(s, () => s.getParameter(s.VERTEX_ARRAY_BINDING)); } else if (e != null) { @@ -17663,21 +17663,21 @@ var kp = class { let o = "WEBGL_color_buffer_float", n = "EXT_color_buffer_half_float"; if (this.parallelCompilationExtension = this.gl.getExtension("KHR_parallel_shader_compile"), A().getNumber("WEBGL_VERSION") === 1) { let s = "OES_texture_float", a = "OES_texture_half_float"; - if (this.textureFloatExtension = Rl(this.gl, s), Jr(this.gl, a)) - this.textureHalfFloatExtension = Rl(this.gl, a); + if (this.textureFloatExtension = Nc(this.gl, s), qr(this.gl, a)) + this.textureHalfFloatExtension = Nc(this.gl, a); else if (A().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(o), Jr(this.gl, n)) - this.colorBufferHalfFloatExtension = Rl(this.gl, n); + if (this.colorBufferFloatExtension = this.gl.getExtension(o), qr(this.gl, n)) + this.colorBufferHalfFloatExtension = Nc(this.gl, n); else if (A().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 (o = "EXT_color_buffer_float", Jr(this.gl, o)) + } else if (o = "EXT_color_buffer_float", qr(this.gl, o)) this.colorBufferFloatExtension = this.gl.getExtension(o); - else if (Jr(this.gl, n)) + else if (qr(this.gl, n)) this.colorBufferHalfFloatExtension = this.gl.getExtension(n); else throw new Error("GL context does not support color renderable floats"); - this.vertexBuffer = l0(this.gl), this.indexBuffer = c0(this.gl), this.framebuffer = QI(this.gl), this.textureConfig = rm(this.gl, this.textureHalfFloatExtension); + this.vertexBuffer = QI(this.gl), this.indexBuffer = ZI(this.gl), this.framebuffer = LI(this.gl), this.textureConfig = Xl(this.gl, this.textureHalfFloatExtension); } get debug() { return A().getBool("DEBUG"); @@ -17690,41 +17690,41 @@ var kp = class { ce(e, () => e.finish()), ce(e, () => e.bindFramebuffer(e.FRAMEBUFFER, null)), ce(e, () => e.deleteFramebuffer(this.framebuffer)), ce(e, () => e.bindBuffer(e.ARRAY_BUFFER, null)), ce(e, () => e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, null)), ce(e, () => e.deleteBuffer(this.indexBuffer)), this.disposed = true; } createFloat32MatrixTexture(e, t10) { - return this.throwIfDisposed(), m0(this.gl, e, t10, this.textureConfig); + return this.throwIfDisposed(), JI(this.gl, e, t10, this.textureConfig); } createFloat16MatrixTexture(e, t10) { - return this.throwIfDisposed(), d0(this.gl, e, t10, this.textureConfig); + return this.throwIfDisposed(), ev(this.gl, e, t10, this.textureConfig); } createUnsignedBytesMatrixTexture(e, t10) { - return this.throwIfDisposed(), f0(this.gl, e, t10, this.textureConfig); + return this.throwIfDisposed(), tv(this.gl, e, t10, this.textureConfig); } uploadPixelDataToTexture(e, t10) { - this.throwIfDisposed(), b0(this.gl, e, t10); + this.throwIfDisposed(), av(this.gl, e, t10); } uploadDenseMatrixToTexture(e, t10, o, n) { - this.throwIfDisposed(), y0(this.gl, e, t10, o, n, this.textureConfig); + this.throwIfDisposed(), sv(this.gl, e, t10, o, n, this.textureConfig); } createFloat16PackedMatrixTexture(e, t10) { - return this.throwIfDisposed(), g0(this.gl, e, t10, this.textureConfig); + return this.throwIfDisposed(), ov(this.gl, e, t10, this.textureConfig); } createPackedMatrixTexture(e, t10) { - return this.throwIfDisposed(), h0(this.gl, e, t10, this.textureConfig); + return this.throwIfDisposed(), rv(this.gl, e, t10, this.textureConfig); } deleteMatrixTexture(e) { - this.throwIfDisposed(), this.outputTexture === e && (ah(this.gl, this.framebuffer), this.outputTexture = null), ce(this.gl, () => this.gl.deleteTexture(e)); + this.throwIfDisposed(), this.outputTexture === e && (Xf(this.gl, this.framebuffer), this.outputTexture = null), ce(this.gl, () => this.gl.deleteTexture(e)); } downloadByteEncodedFloatMatrixFromOutputTexture(e, t10, o) { - return this.downloadMatrixDriver(e, () => S0(this.gl, t10, o, this.textureConfig)); + return this.downloadMatrixDriver(e, () => pv(this.gl, t10, o, this.textureConfig)); } downloadPackedMatrixFromBuffer(e, t10, o, n, s, a) { - return I0(this.gl, e, t10, o, n, s, a, this.textureConfig); + return cv(this.gl, e, t10, o, n, s, a, this.textureConfig); } downloadFloat32MatrixFromBuffer(e, t10) { - return w0(this.gl, e, t10); + return uv(this.gl, e, t10); } createBufferFromTexture(e, t10, o) { this.bindTextureToFrameBuffer(e); - let n = C0(this.gl, t10, o, this.textureConfig); + let n = iv(this.gl, t10, o, this.textureConfig); return this.unbindTextureToFrameBuffer(), n; } createAndWaitForFence() { @@ -17744,30 +17744,30 @@ var kp = class { return { query: t10, isFencePassed: o }; } downloadMatrixFromPackedTexture(e, t10, o) { - return this.downloadMatrixDriver(e, () => v0(this.gl, t10, o)); + return this.downloadMatrixDriver(e, () => lv(this.gl, t10, o)); } createProgram(e) { this.throwIfDisposed(); let t10 = this.gl; - this.vertexShader == null && (this.vertexShader = p0(t10)); - let o = HI(t10); - ce(t10, () => t10.attachShader(o, this.vertexShader)), ce(t10, () => t10.attachShader(o, e)), KI(t10, o); + this.vertexShader == null && (this.vertexShader = YI(t10)); + let o = DI(t10); + ce(t10, () => t10.attachShader(o, this.vertexShader)), ce(t10, () => t10.attachShader(o, e)), AI(t10, o); let n = Object.assign(o, { vao: this.createVertexArray() }); - return this.debug && om(t10, n), n; + return this.debug && Yl(t10, n), n; } buildVao(e) { this.setProgram(e), this.bindVertexArray(e.vao); let t10 = this.gl; - ce(t10, () => t10.bindBuffer(t10.ELEMENT_ARRAY_BUFFER, this.indexBuffer)), x0(t10, e, this.vertexBuffer); + ce(t10, () => t10.bindBuffer(t10.ELEMENT_ARRAY_BUFFER, this.indexBuffer)), nv(t10, e, this.vertexBuffer); } deleteProgram(e) { this.throwIfDisposed(), e === this.program && (this.program = null), e != null && (ce(this.gl, () => this.gl.deleteProgram(e)), this.deleteVertexArray(e.vao)); } setProgram(e) { - this.throwIfDisposed(), this.program = e, this.program != null && this.debug && om(this.gl, this.program), ce(this.gl, () => this.gl.useProgram(e)); + this.throwIfDisposed(), this.program = e, this.program != null && this.debug && Yl(this.gl, this.program), ce(this.gl, () => this.gl.useProgram(e)); } getUniformLocation(e, t10, o = true) { - return this.throwIfDisposed(), o ? ZI(this.gl, e, t10) : JI(this.gl, e, t10); + return this.throwIfDisposed(), o ? BI(this.gl, e, t10) : zI(this.gl, e, t10); } getAttributeLocation(e, t10) { return this.throwIfDisposed(), ce(this.gl, () => this.gl.getAttribLocation(e, t10)); @@ -17776,14 +17776,14 @@ var kp = class { return this.throwIfDisposed(), this.gl.getUniformLocation(e, t10); } setInputMatrixTexture(e, t10, o) { - this.throwIfDisposed(), this.throwIfNoProgram(), e0(this.gl, e, t10, o); + this.throwIfDisposed(), this.throwIfNoProgram(), VI(this.gl, e, t10, o); } setOutputMatrixTexture(e, t10, o) { this.setOutputMatrixTextureDriver(e, o, t10); } setOutputPackedMatrixTexture(e, t10, o) { this.throwIfDisposed(); - let [n, s] = Ga(t10, o); + let [n, s] = Ma(t10, o); this.setOutputMatrixTextureDriver(e, n, s); } setOutputMatrixWriteRegion(e, t10, o, n) { @@ -17793,7 +17793,7 @@ var kp = class { throw new Error("setOutputPackedMatrixWriteRegion not implemented."); } debugValidate() { - this.program != null && om(this.gl, this.program), Dl(this.gl); + this.program != null && Yl(this.gl, this.program), Tc(this.gl); } executeProgram() { this.throwIfDisposed(), this.throwIfNoProgram(); @@ -17808,7 +17808,7 @@ var kp = class { this.throwIfDisposed(), ce(this.gl, () => this.gl.finish()); } getQueryTimerExtension() { - return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = Rl(this.gl, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query")), this.disjointQueryTimerExtension; + return this.disjointQueryTimerExtension == null && (this.disjointQueryTimerExtension = Nc(this.gl, A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION") === 2 ? "EXT_disjoint_timer_query_webgl2" : "EXT_disjoint_timer_query")), this.disjointQueryTimerExtension; } getQueryTimerExtensionWebGL2() { return this.getQueryTimerExtension(); @@ -17864,7 +17864,7 @@ var kp = class { }); } pollItems() { - let e = yJ(this.itemsToPoll.map((t10) => t10.isDoneFn)); + let e = JZ(this.itemsToPoll.map((t10) => t10.isDoneFn)); for (let t10 = 0; t10 <= e; ++t10) { let { resolveFn: o } = this.itemsToPoll[t10]; o(); @@ -17878,10 +17878,10 @@ var kp = class { "setTimeoutCustom" in A().platform && (o = A().platform.setTimeoutCustom.bind(A().platform)), y.repeatedTry(() => (this.pollItems(), this.itemsToPoll.length === 0), () => 0, null, o); } bindTextureToFrameBuffer(e) { - this.throwIfDisposed(), nm(this.gl, e, this.framebuffer), this.debug && Dl(this.gl); + this.throwIfDisposed(), Ql(this.gl, e, this.framebuffer), this.debug && Tc(this.gl); } unbindTextureToFrameBuffer() { - this.outputTexture != null ? (nm(this.gl, this.outputTexture, this.framebuffer), this.debug && Dl(this.gl)) : ah(this.gl, this.framebuffer); + this.outputTexture != null ? (Ql(this.gl, this.outputTexture, this.framebuffer), this.debug && Tc(this.gl)) : Xf(this.gl, this.framebuffer); } downloadMatrixDriver(e, t10) { this.bindTextureToFrameBuffer(e); @@ -17891,7 +17891,7 @@ var kp = class { setOutputMatrixTextureDriver(e, t10, o) { this.throwIfDisposed(); let n = this.gl; - nm(n, e, this.framebuffer), this.debug && Dl(n), this.outputTexture = e, ce(n, () => n.viewport(0, 0, t10, o)), ce(n, () => n.scissor(0, 0, t10, o)); + Ql(n, e, this.framebuffer), this.debug && Tc(n), this.outputTexture = e, ce(n, () => n.viewport(0, 0, t10, o)), ce(n, () => n.scissor(0, 0, t10, o)); } setOutputMatrixWriteRegionDriver(e, t10, o, n) { this.throwIfDisposed(), ce(this.gl, () => this.gl.scissor(e, t10, o, n)); @@ -17905,37 +17905,37 @@ var kp = class { throw new Error("No GPU program is currently set."); } }; -function yJ(r16) { +function JZ(r15) { let e = 0; - for (; e < r16.length && r16[e](); ++e) + for (; e < r15.length && r15[e](); ++e) ; return e - 1; } -var { addImpl: ID, bincountImpl: Ch, bincountReduceImpl: vD, bitwiseAndImpl: kD, castImpl: ND, ceilImpl: TD, concatImpl: _D, equalImpl: ED, expImpl: $D, expm1Impl: RD, floorImpl: DD, gatherNdImpl: AD, gatherV2Impl: FD, greaterImpl: PD, greaterEqualImpl: OD, lessImpl: MD, lessEqualImpl: LD, linSpaceImpl: BD, logImpl: zD, maxImpl: VD, maximumImpl: WD, minimumImpl: UD, multiplyImpl: GD, negImpl: HD, notEqualImpl: KD, prodImpl: qD, raggedGatherImpl: jD, raggedRangeImpl: XD, raggedTensorToTensorImpl: YD, rangeImpl: QD, rsqrtImpl: ZD, scatterImpl: JD, sigmoidImpl: eA, simpleAbsImpl: wh, sliceImpl: tA, sparseFillEmptyRowsImpl: rA, sparseReshapeImpl: oA, sparseSegmentReductionImpl: Sh, sqrtImpl: nA, staticRegexReplaceImpl: sA, stridedSliceImpl: aA, stringNGramsImpl: iA, stringSplitImpl: uA, stringToHashBucketFastImpl: pA, subImpl: lA, tileImpl: cA, topKImpl: mA, transposeImpl: Np, uniqueImpl: dA } = Xf; -function N0(r16, e) { - return ["x", "y", "z", "w", "u", "v"].slice(0, e).map((t10) => `${r16}.${t10}`); +var { addImpl: LR, bincountImpl: ph, bincountReduceImpl: BR, bitwiseAndImpl: zR, castImpl: VR, ceilImpl: WR, concatImpl: UR, equalImpl: GR, expImpl: HR, expm1Impl: KR, floorImpl: qR, gatherNdImpl: jR, gatherV2Impl: XR, greaterImpl: YR, greaterEqualImpl: QR, lessImpl: ZR, lessEqualImpl: JR, linSpaceImpl: eD, logImpl: tD, maxImpl: rD, maximumImpl: oD, minimumImpl: nD, multiplyImpl: sD, negImpl: aD, notEqualImpl: iD, prodImpl: uD, raggedGatherImpl: pD, raggedRangeImpl: cD, raggedTensorToTensorImpl: lD, rangeImpl: mD, rsqrtImpl: dD, scatterImpl: fD, sigmoidImpl: hD, simpleAbsImpl: ch, sliceImpl: gD, sparseFillEmptyRowsImpl: xD, sparseReshapeImpl: yD, sparseSegmentReductionImpl: lh, sqrtImpl: bD, staticRegexReplaceImpl: CD, stridedSliceImpl: wD, stringNGramsImpl: SD, stringSplitImpl: ID, stringToHashBucketFastImpl: vD, subImpl: kD, tileImpl: ND, topKImpl: TD, transposeImpl: Cp, uniqueImpl: _D } = Ic; +function dv(r15, e) { + return ["x", "y", "z", "w", "u", "v"].slice(0, e).map((t10) => `${r15}.${t10}`); } -function At(r16, e) { - return e === 1 ? [r16] : N0(r16, e); +function Rt(r15, e) { + return e === 1 ? [r15] : dv(r15, e); } -function fA(r16, e) { - if (r16 === 1) +function ED(r15, e) { + if (r15 === 1) return "rc"; let t10 = ""; - for (let o = 0; o < r16; o++) - t10 += e[o], o < r16 - 1 && (t10 += ","); + for (let o = 0; o < r15; o++) + t10 += e[o], o < r15 - 1 && (t10 += ","); return t10; } -var Ih = class { +var mh = class { constructor(e) { - if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = lt(this.outputShape.length), this.rank === 0) + if (this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.enableShapeUniforms = ut(this.outputShape.length), this.rank === 0) this.userCode = ` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } `; else { - let t10 = At("rc", this.rank), o = Re(this.rank), n = this.getOutOfBoundsCondition(t10), s = this.getSetup(t10), a = this.getOutput(t10); + let t10 = Rt("rc", this.rank), o = Re(this.rank), n = this.getOutOfBoundsCondition(t10), s = this.getSetup(t10), a = this.getOutput(t10); this.userCode = ` void main() { ${o} rc = getOutputCoords(); @@ -17992,9 +17992,9 @@ var Ih = class { rEdge || cEdge ? 0. : getA(${t10[3]})`; } }; -var Wl = class { +var Mc = class { constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec3" }], this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); let o = ""; for (let n = 0; n < 4; n++) { let s = "thisRC = rc;"; @@ -18012,8 +18012,8 @@ var Wl = class { `; } this.userCode = ` - ${bJ(t10, this.enableShapeUniforms)} - ${this.enableShapeUniforms ? Ol() : Pl(e)} + ${e9(t10, this.enableShapeUniforms)} + ${this.enableShapeUniforms ? Rc() : $c(e)} void main() { ivec3 rc = getOutputCoords(); @@ -18031,41 +18031,41 @@ var Wl = class { `; } }; -function bJ(r16, e) { +function e9(r15, e) { return ` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${e ? fD(["r", "c", "d"], "inputShape") : Qs(["r", "c", "d"], r16)} + ${e ? ER(["r", "c", "d"], "inputShape") : Ws(["r", "c", "d"], r15)} return ivec3(r, c, d); } `; } -var vh = class { +var dh = class { constructor(e) { this.gpgpu = e, this.numUsedTextures = 0, this.numFreeTextures = 0, this._numBytesAllocated = 0, this._numBytesFree = 0, this.freeTextures = {}, this.usedTextures = {}, this.logEnabled = false; } acquireTexture(e, t10, o) { - let n = gA(t10, o), s = xA(e, n, o); + let n = RD(t10, o), s = DD(e, n, o); s in this.freeTextures || (this.freeTextures[s] = []), s in this.usedTextures || (this.usedTextures[s] = []); - let a = hA(e, n, this.gpgpu.gl, this.gpgpu.textureConfig, o); + let a = $D(e, n, this.gpgpu.gl, this.gpgpu.textureConfig, o); if (this.freeTextures[s].length > 0) { this.numFreeTextures--, this.numUsedTextures++, this._numBytesFree -= a, this.log(); let p = this.freeTextures[s].pop(); return this.usedTextures[s].push(p), p; } let i; - return n === or.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(e[0], e[1]) : n === or.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(e[0], e[1]) : n === or.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(e[0], e[1]) : n === or.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(e[0], e[1]) : n === or.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(e[0], e[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; + return n === er.PACKED_2X2_FLOAT32 ? i = this.gpgpu.createPackedMatrixTexture(e[0], e[1]) : n === er.PACKED_2X2_FLOAT16 ? i = this.gpgpu.createFloat16PackedMatrixTexture(e[0], e[1]) : n === er.UNPACKED_FLOAT32 ? i = this.gpgpu.createFloat32MatrixTexture(e[0], e[1]) : n === er.UNPACKED_FLOAT16 ? i = this.gpgpu.createFloat16MatrixTexture(e[0], e[1]) : n === er.PACKED_4X1_UNSIGNED_BYTE && (i = this.gpgpu.createUnsignedBytesMatrixTexture(e[0], e[1])), this.usedTextures[s].push(i), this.numUsedTextures++, this._numBytesAllocated += a, this.log(), i; } releaseTexture(e, t10, o, n) { if (this.freeTextures == null) return; - let s = gA(o, n), a = xA(t10, s, n); + let s = RD(o, n), a = DD(t10, s, n); a in this.freeTextures || (this.freeTextures[a] = []); - let i = hA(t10, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD"); + let i = $D(t10, s, this.gpgpu.gl, this.gpgpu.textureConfig, n), p = A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD"); p !== -1 && this._numBytesAllocated > p ? (this.gpgpu.deleteMatrixTexture(e.texture), this._numBytesAllocated -= i) : (this.freeTextures[a].push(e), this.numFreeTextures++, this._numBytesFree += i), this.numUsedTextures--; - let u = this.usedTextures[a], l = u && u.indexOf(e); - if (l == null || l < 0) + let u = this.usedTextures[a], c = u && u.indexOf(e); + if (c == null || c < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); - u[l] = u[u.length - 1], u.pop(), this.log(); + u[c] = u[u.length - 1], u.pop(), this.log(); } log() { if (!this.logEnabled) @@ -18101,15 +18101,15 @@ var vh = class { } } }; -function CJ(r16, e) { - let t10 = r16; +function t9(r15, e) { + let t10 = r15; if (e === t10.R32F) return 4; if (e === t10.R16F) return 2; if (e === t10.RGBA32F) return 16; - if (e === r16.RGBA) + if (e === r15.RGBA) return 16; if (e === t10.RGBA16F) return 8; @@ -18117,52 +18117,52 @@ function CJ(r16, e) { return 4; throw new Error(`Unknown internal format ${e}`); } -function hA(r16, e, t10, o, n) { - let s = wJ(e, o), a; +function $D(r15, e, t10, o, n) { + let s = r92(e, o), a; if (n) { - let [p, u] = Ga(r16[0], r16[1]); + let [p, u] = Ma(r15[0], r15[1]); a = p * u; } else { - let [p, u] = Sp(r16[0], r16[1]); + let [p, u] = gp(r15[0], r15[1]); a = p * u; } - let i = CJ(t10, s); + let i = t9(t10, s); return a * i; } -function wJ(r16, e) { - switch (r16) { - case or.PACKED_2X2_FLOAT32: - return yh(e); - case or.PACKED_2X2_FLOAT16: - return bh(e); - case or.UNPACKED_FLOAT32: - return hh(e); - case or.UNPACKED_FLOAT16: - return gh(e); - case or.PACKED_4X1_UNSIGNED_BYTE: - return xh(e); +function r92(r15, e) { + switch (r15) { + case er.PACKED_2X2_FLOAT32: + return ih(e); + case er.PACKED_2X2_FLOAT16: + return uh(e); + case er.UNPACKED_FLOAT32: + return nh(e); + case er.UNPACKED_FLOAT16: + return sh(e); + case er.PACKED_4X1_UNSIGNED_BYTE: + return ah(e); default: - throw new Error(`Unknown physical texture type ${r16}`); + throw new Error(`Unknown physical texture type ${r15}`); } } -function SJ(r16) { - return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r16 ? or.PACKED_2X2_FLOAT32 : or.UNPACKED_FLOAT32 : r16 ? or.PACKED_2X2_FLOAT16 : or.UNPACKED_FLOAT16; +function o9(r15) { + return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED") ? r15 ? er.PACKED_2X2_FLOAT32 : er.UNPACKED_FLOAT32 : r15 ? er.PACKED_2X2_FLOAT16 : er.UNPACKED_FLOAT16; } -function gA(r16, e) { - if (r16 === hr.UPLOAD) - return or.PACKED_2X2_FLOAT32; - if (r16 === hr.RENDER || r16 == null) - return SJ(e); - if (r16 === hr.DOWNLOAD || r16 === hr.PIXELS) - return or.PACKED_4X1_UNSIGNED_BYTE; - throw new Error(`Unknown logical texture type ${r16}`); +function RD(r15, e) { + if (r15 === mr.UPLOAD) + return er.PACKED_2X2_FLOAT32; + if (r15 === mr.RENDER || r15 == null) + return o9(e); + if (r15 === mr.DOWNLOAD || r15 === mr.PIXELS) + return er.PACKED_4X1_UNSIGNED_BYTE; + throw new Error(`Unknown logical texture type ${r15}`); } -function xA(r16, e, t10) { - return `${r16[0]}_${r16[1]}_${e}_${t10}`; +function DD(r15, e, t10) { + return `${r15[0]}_${r15[1]}_${e}_${t10}`; } -var nr = class { +var tr = class { constructor(e, t10) { - this.variableNames = ["A"], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` float unaryOperation(float x) { ${t10} } @@ -18176,20 +18176,20 @@ var nr = class { `; } }; -var Gt = "if (isnan(x)) return x;"; -var yA = "return x;"; -var T0 = "return abs(x);"; -var bA = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; -var CA = Gt + ` +var Wt = "if (isnan(x)) return x;"; +var AD = "return x;"; +var fv = "return abs(x);"; +var FD = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; +var PD = Wt + ` return (x < 0.0) ? 0.0 : x; `; -var wA = Gt + ` +var OD = Wt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; -var Ha = "return x;"; -var SA = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var vA = "return x;"; -var kA = ` +var La = "return x;"; +var MD = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var BD = "return x;"; +var zD = ` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -18199,7 +18199,7 @@ var kA = ` return result; `; -var NA = ` +var VD = ` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -18210,7 +18210,7 @@ var NA = ` return result; `; -var TA = ` +var WD = ` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -18221,10 +18221,10 @@ var TA = ` return result; `; -var _A = "return 1.0 / (1.0 + exp(-1.0 * x));"; -var Lr = class { +var UD = "return 1.0 / (1.0 + exp(-1.0 * x));"; +var Fr = class { constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` vec4 unaryOperation(vec4 x) { ${t10} } @@ -18238,10 +18238,10 @@ var Lr = class { `; } }; -var kh = class { +var fh = class { constructor(e) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); - let t10 = e.length, o = At("rc", t10), n = Re(t10), s = fA(t10, o), a = o.slice(-2), i = t10 <= 1 ? "rc" : `vec2(${a.join(",")})`; + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = false, this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); + let t10 = e.length, o = Rt("rc", t10), n = Re(t10), s = ED(t10, o), a = o.slice(-2), i = t10 <= 1 ? "rc" : `vec2(${a.join(",")})`; this.userCode = ` void main() { ${n} rc = getOutputCoords(); @@ -18252,19 +18252,19 @@ var kh = class { `; } }; -var vJ = Ut.whereImpl; -var kJ = 1e-7; -var NJ = 1e-4; -var Nh = {}; -function TJ(r16) { - return r16 in Nh || (Nh[r16] = {}), Nh[r16]; +var s9 = Vt.whereImpl; +var a9 = 1e-7; +var i9 = 1e-4; +var hh = {}; +function u9(r15) { + return r15 in hh || (hh[r15] = {}), hh[r15]; } -var _J = A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); -var EJ = 600; -function $J() { - return A().global.screen == null ? 1024 : A().global.screen.height * A().global.screen.width * window.devicePixelRatio * EJ / 1024 / 1024; +var p9 = A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"); +var c9 = 600; +function l9() { + return A().global.screen == null ? 1024 : A().global.screen.height * A().global.screen.width * window.devicePixelRatio * c9 / 1024 / 1024; } -var Ul = class r13 extends mo { +var Lc = class r13 extends ao { nextDataId() { return r13.nextDataId++; } @@ -18273,18 +18273,18 @@ var Ul = class r13 extends mo { throw new Error("WebGL is not supported on this device"); let t10; if (e != null) { - if (e instanceof kp) + if (e instanceof bp) t10 = e; else { - let o = Zr(A().getNumber("WEBGL_VERSION"), e); - t10 = new kp(o); + let o = Kr(A().getNumber("WEBGL_VERSION"), e); + t10 = new bp(o); } this.binaryCache = {}, this.gpgpuCreatedLocally = false; } else { - let o = Zr(A().getNumber("WEBGL_VERSION")); - t10 = new kp(o), this.binaryCache = TJ(A().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; + let o = Kr(A().getNumber("WEBGL_VERSION")); + t10 = new bp(o), this.binaryCache = u9(A().getNumber("WEBGL_VERSION")), this.gpgpuCreatedLocally = true; } - this.gpgpu = t10, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new vh(this.gpgpu), this.numMBBeforeWarning = $J(), this.texData = new mn(this, cr()); + this.gpgpu = t10, this.canvas = this.gpgpu.gl.canvas, this.textureManager = new dh(this.gpgpu), this.numMBBeforeWarning = l9(), this.texData = new Bo(this, ur()); } numDataIds() { return this.texData.numDataIds() - this.pendingDeletes; @@ -18292,14 +18292,14 @@ var Ul = class r13 extends mo { writeTexture(e, t10, o, n, s, a) { let i = this.makeTensorInfo(t10, o), p = this.texData.get(i.dataId); p.isPacked = false, p.texture = { texture: e, texShape: [n, s] }, p.texShape = [n, s]; - let u = Al(t10), l = new sm(u, false, a), c = this.runWebGLProgram(l, [i], o, [[n, s]]); - return c.shape = t10, p.texture = null, this.disposeIntermediateTensorInfo(i), c.dataId; + let u = _c(t10), c = new Zl(u, false, a), l = this.runWebGLProgram(c, [i], o, [[n, s]]); + return l.shape = t10, p.texture = null, this.disposeIntermediateTensorInfo(i), l.dataId; } write(e, t10, o) { if ((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS") || A().getBool("DEBUG")) && this.checkNumericalProblems(e), o === "complex64" && e != null) throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); let n = { id: this.nextDataId() }; - return this.texData.set(n, { shape: t10, dtype: o, values: e, usage: hr.UPLOAD, refCount: 1 }), n; + return this.texData.set(n, { shape: t10, dtype: o, values: e, usage: mr.UPLOAD, refCount: 1 }), n; } refCount(e) { return this.texData.has(e) ? this.texData.get(e).refCount : 0; @@ -18317,7 +18317,7 @@ var Ul = class r13 extends mo { move(e, t10, o, n, s) { if (A().getBool("DEBUG") && this.checkNumericalProblems(t10), n === "complex64") throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag)."); - this.texData.set(e, { shape: o, dtype: n, values: t10, usage: hr.UPLOAD, refCount: s }); + this.texData.set(e, { shape: o, dtype: n, values: t10, usage: mr.UPLOAD, refCount: s }); } disposeIntermediateTensorInfo(e) { this.disposeData(e.dataId); @@ -18326,7 +18326,7 @@ var Ul = class r13 extends mo { let t10 = this.texData.get(e), { values: o, dtype: n, complexTensorInfos: s, slice: a, shape: i, isPacked: p } = t10; if (a != null) { let m; - p ? m = new Lr(i, Ha) : m = new nr(i, Ha); + p ? m = new Fr(i, La) : m = new tr(i, La); let d = this.runWebGLProgram(m, [{ dataId: e, shape: i, dtype: n }], n), f = this.readSync(d.dataId); return this.disposeIntermediateTensorInfo(d), f; } @@ -18334,15 +18334,15 @@ var Ul = class r13 extends mo { return this.convertAndCacheOnCPU(e); if (n === "string") return o; - let u = this.activeTimers != null, l; - u && (l = y.now()); - let c; + let u = this.activeTimers != null, c; + u && (c = y.now()); + let l; if (n === "complex64") { let m = this.readSync(s.real.dataId), d = this.readSync(s.imag.dataId); - c = C.mergeRealAndImagArrays(m, d); + l = w.mergeRealAndImagArrays(m, d); } else - c = this.getValuesFromTexture(e); - return u && (this.downloadWaitMs += y.now() - l), this.convertAndCacheOnCPU(e, c); + l = this.getValuesFromTexture(e); + return u && (this.downloadWaitMs += y.now() - c), this.convertAndCacheOnCPU(e, l); } async read(e) { if (this.pendingRead.has(e)) { @@ -18352,7 +18352,7 @@ var Ul = class r13 extends mo { let t10 = this.texData.get(e), { values: o, shape: n, slice: s, dtype: a, complexTensorInfos: i, isPacked: p } = t10; if (s != null) { let f; - p ? f = new Lr(n, Ha) : f = new nr(n, Ha); + p ? f = new Fr(n, La) : f = new tr(n, La); let h = this.runWebGLProgram(f, [{ dataId: e, shape: n, dtype: a }], a), g = this.read(h.dataId); return this.disposeIntermediateTensorInfo(h), g; } @@ -18360,29 +18360,29 @@ var Ul = class r13 extends mo { return this.convertAndCacheOnCPU(e); if (A().getBool("DEBUG") && !A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED") && A().getNumber("WEBGL_VERSION") === 2) throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported."); - let u = null, l; + let u = null, c; if (a !== "complex64" && A().get("WEBGL_BUFFER_SUPPORTED")) { - l = this.decode(e); - let f = this.texData.get(l.dataId); - u = this.gpgpu.createBufferFromTexture(f.texture.texture, ...tm(n)); + c = this.decode(e); + let f = this.texData.get(c.dataId); + u = this.gpgpu.createBufferFromTexture(f.texture.texture, ...jl(n)); } this.pendingRead.set(e, []), a !== "complex64" && await this.gpgpu.createAndWaitForFence(); - let c; + let l; if (a === "complex64") { let f = await Promise.all([this.read(i.real.dataId), this.read(i.imag.dataId)]), h = f[0], g = f[1]; - c = C.mergeRealAndImagArrays(h, g); + l = w.mergeRealAndImagArrays(h, g); } else if (u == null) - c = this.getValuesFromTexture(e); + l = this.getValuesFromTexture(e); else { let f = y.sizeFromShape(n); - c = this.gpgpu.downloadFloat32MatrixFromBuffer(u, f); + l = this.gpgpu.downloadFloat32MatrixFromBuffer(u, f); } - if (l != null && this.disposeIntermediateTensorInfo(l), u != null) { + if (c != null && this.disposeIntermediateTensorInfo(c), u != null) { let f = this.gpgpu.gl; ce(f, () => f.deleteBuffer(u)); } - let m = this.convertAndCacheOnCPU(e, c), d = this.pendingRead.get(e); - return this.pendingRead.delete(e), d.forEach((f) => f(m)), this.pendingDisposal.has(e) && (this.pendingDisposal.delete(e), this.disposeData(e) && cr().removeDataId(e, this), this.pendingDeletes--), m; + let m = this.convertAndCacheOnCPU(e, l), d = this.pendingRead.get(e); + return this.pendingRead.delete(e), d.forEach((f) => f(m)), this.pendingDisposal.has(e) && (this.pendingDisposal.delete(e), this.disposeData(e) && ur().removeDataId(e, this), this.pendingDeletes--), m; } readToGPU(e, t10 = {}) { let o = this.texData.get(e), { values: n, shape: s, slice: a, dtype: i, isPacked: p, texture: u } = o; @@ -18390,42 +18390,42 @@ var Ul = class r13 extends mo { throw new Error("Does not support reading texture for complex64 dtype."); if (a != null) { let d; - p ? d = new Lr(s, Ha) : d = new nr(s, Ha); + p ? d = new Fr(s, La) : d = new tr(s, La); let f = this.runWebGLProgram(d, [{ dataId: e, shape: s, dtype: i }], i), h = this.readToGPU(f, t10); return this.disposeIntermediateTensorInfo(f), h; } if (u == null) throw n != null ? new Error("Data is not on GPU but on CPU.") : new Error("There is no data on GPU or CPU."); - let l = this.decode(e, t10.customTexShape), c = cr().makeTensorFromTensorInfo(l), m = this.texData.get(l.dataId); - return Object.assign({ tensorRef: c }, m.texture); + let c = this.decode(e, t10.customTexShape), l = ur().makeTensorFromTensorInfo(c), m = this.texData.get(c.dataId); + return Object.assign({ tensorRef: l }, m.texture); } bufferSync(e) { let t10 = this.readSync(e.dataId); if (e.dtype === "string") try { let o = t10.map((n) => y.decodeString(n)); - return ie(e.shape, e.dtype, o); + return me(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ie(e.shape, e.dtype, t10); + return me(e.shape, e.dtype, t10); } checkNumericalProblems(e) { if (e != null) for (let t10 = 0; t10 < e.length; t10++) { let o = e[t10]; - if (!WI(o)) + if (!EI(o)) throw A().getBool("WEBGL_RENDER_FLOAT32_CAPABLE") ? Error(`The value ${o} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`) : Error(`The value ${o} cannot be represented on this device.`); } } getValuesFromTexture(e) { let { shape: t10, dtype: o, isPacked: n } = this.texData.get(e), s = y.sizeFromShape(t10); if (A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")) { - let m = this.decode(e), d = this.texData.get(m.dataId), f = this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture, ...tm(t10)).subarray(0, s); + let m = this.decode(e), d = this.texData.get(m.dataId), f = this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture, ...jl(t10)).subarray(0, s); return this.disposeIntermediateTensorInfo(m), f; } - let a = A().getBool("WEBGL_PACK") && n === true, i = a ? Al(t10) : t10, p = a ? new dh(i) : new mh(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: e }], "float32"), l = this.texData.get(u.dataId), c = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(l.texture.texture, l.texShape[0], l.texShape[1]).subarray(0, s); - return this.disposeIntermediateTensorInfo(u), c; + let a = A().getBool("WEBGL_PACK") && n === true, i = a ? _c(t10) : t10, p = a ? new rh(i) : new th(i), u = this.runWebGLProgram(p, [{ shape: i, dtype: o, dataId: e }], "float32"), c = this.texData.get(u.dataId), l = this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture.texture, c.texShape[0], c.texShape[1]).subarray(0, s); + return this.disposeIntermediateTensorInfo(u), l; } timerAvailable() { return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0; @@ -18439,7 +18439,7 @@ var Ul = class r13 extends mo { return (async () => { if (A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE") > 0) { let p = await Promise.all(s); - i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, l) => ({ name: a[l], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "); + i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "); } else i.kernelMs = { error: "WebGL query timers are not supported in this environment." }; return this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; @@ -18476,8 +18476,8 @@ var Ul = class r13 extends mo { releaseGPUData(e) { let { texture: t10, dtype: o, texShape: n, usage: s, isPacked: a, slice: i } = this.texData.get(e), p = i && i.origDataId || e, u = this.dataRefCount.get(p); u > 1 ? this.dataRefCount.set(p, u - 1) : (this.dataRefCount.delete(p), t10 != null && (this.numBytesInGPU -= this.computeBytes(n, o), this.textureManager.releaseTexture(t10, n, s, a))); - let l = this.texData.get(e); - l.texture = null, l.texShape = null, l.isPacked = false, l.slice = null; + let c = this.texData.get(e); + c.texture = null, c.texShape = null, c.isPacked = false, c.slice = null; } getTexture(e) { return this.uploadToGPU(e), this.texData.get(e).texture.texture; @@ -18485,30 +18485,30 @@ var Ul = class r13 extends mo { getDataInfo(e) { return this.texData.get(e); } - shouldExecuteOnCPU(e, t10 = _J) { + shouldExecuteOnCPU(e, t10 = p9) { return A().getBool("WEBGL_CPU_FORWARD") && e.every((o) => this.texData.get(o.dataId).texture == null && y.sizeFromShape(o.shape) < t10); } getGPGPUContext() { return this.gpgpu; } where(e) { - C.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); + w.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead"); let t10 = e.dataSync(); - return vJ(e.shape, t10); + return s9(e.shape, t10); } packedUnaryOp(e, t10, o) { - let n = new Lr(e.shape, t10), s = this.compileAndRun(n, [e], o); - return cr().makeTensorFromTensorInfo(s); + let n = new Fr(e.shape, t10), s = this.compileAndRun(n, [e], o); + return ur().makeTensorFromTensorInfo(s); } abs(e) { if (this.shouldExecuteOnCPU([e]) && e.dtype !== "complex64") { - let n = wh(this.texData.get(e.dataId).values); + let n = ch(this.texData.get(e.dataId).values); return this.makeOutput(e.shape, e.dtype, n); } if (A().getBool("WEBGL_PACK_UNARY_OPERATIONS")) - return this.packedUnaryOp(e, T0, e.dtype); - let t10 = new nr(e.shape, T0), o = this.compileAndRun(t10, [e]); - return cr().makeTensorFromTensorInfo(o); + return this.packedUnaryOp(e, fv, e.dtype); + let t10 = new tr(e.shape, fv), o = this.compileAndRun(t10, [e]); + return ur().makeTensorFromTensorInfo(o); } makeTensorInfo(e, t10, o) { let n; @@ -18520,18 +18520,18 @@ var Ul = class r13 extends mo { return this.texData.get(n).usage = null, { dataId: n, shape: e, dtype: t10 }; } makeOutput(e, t10, o) { - return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e, t10, o), this); + return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e, t10, o), this); } unpackTensor(e) { - let t10 = new kh(e.shape); + let t10 = new fh(e.shape); return this.runWebGLProgram(t10, [e], e.dtype); } packTensor(e) { - let t10 = new Ih(e.shape); + let t10 = new mh(e.shape); return this.runWebGLProgram(t10, [e], e.dtype, null, true); } packedReshape(e, t10) { - let o = [ki(e.shape), ...Ni(e.shape)], n = { dtype: e.dtype, shape: o, dataId: e.dataId }, s = [ki(t10), ...Ni(t10)], a = new Wl(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], e.dtype, p, i); + let o = [gi(e.shape), ...xi(e.shape)], n = { dtype: e.dtype, shape: o, dataId: e.dataId }, s = [gi(t10), ...xi(t10)], a = new Mc(s, o), i = true, p = [o], u = this.runWebGLProgram(a, [n], e.dtype, p, i); return { dataId: u.dataId, shape: t10, dtype: u.dtype }; } decode(e, t10) { @@ -18540,20 +18540,20 @@ var Ul = class r13 extends mo { let m = y.sizeFromShape(s), d = t10[0] * t10[1] * 4; y.assert(m <= d, () => "customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."); } - let i = Al(s), p; - n ? p = new ch(i) : p = new lh(i); - let u = true, l = [t10 != null ? t10 : tm(i)], c = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: e }], a, l, u, t10); - return { dtype: a, shape: s, dataId: c.dataId }; + let i = _c(s), p; + n ? p = new eh(i) : p = new Jf(i); + let u = true, c = [t10 != null ? t10 : jl(i)], l = this.runWebGLProgram(p, [{ shape: i, dtype: a, dataId: e }], a, c, u, t10); + return { dtype: a, shape: s, dataId: l.dataId }; } runWebGLProgram(e, t10, o, n, s = false, a) { let i = this.makeTensorInfo(e.outputShape, o), p = this.texData.get(i.dataId); - if (e.packedOutput && (p.isPacked = true), e.outPackingScheme === Iu.DENSE) { - let x = a != null ? a : tm(e.outputShape); + if (e.packedOutput && (p.isPacked = true), e.outPackingScheme === gu.DENSE) { + let x = a != null ? a : jl(e.outputShape); p.texShape = x.map((b) => b * 2); } if (e.outTexUsage != null && (p.usage = e.outTexUsage), y.sizeFromShape(i.shape) === 0) return p.values = y.getTypedArrayFromDType(i.dtype, 0), i; - let u = [], l = t10.map((x) => { + let u = [], c = t10.map((x) => { if (x.dtype === "complex64") throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."); let b = this.texData.get(x.dataId); @@ -18564,15 +18564,15 @@ var Ul = class r13 extends mo { } if (this.uploadToGPU(x.dataId), !!b.isPacked != !!e.packedInputs) x = b.isPacked ? this.unpackTensor(x) : this.packTensor(x), u.push(x), b = this.texData.get(x.dataId); - else if (b.isPacked && !vu(b.shape, x.shape)) { - let w = x, S = x.shape; - x.shape = b.shape, x = this.packedReshape(x, S), u.push(x), b = this.texData.get(x.dataId), w.shape = S; + else if (b.isPacked && !xu(b.shape, x.shape)) { + let C = x, S = x.shape; + x.shape = b.shape, x = this.packedReshape(x, S), u.push(x), b = this.texData.get(x.dataId), C.shape = S; } return { shape: x.shape, texData: b, isUniform: false }; }); this.uploadToGPU(i.dataId); - let c = { shape: i.shape, texData: p, isUniform: false }, m = SD(e, l, c), d = this.getAndSaveBinary(m, () => CD(this.gpgpu, e, l, c)), f = this.activeTimers != null, h; - f && (h = this.startTimer()), A().get("ENGINE_COMPILE_ONLY") || wD(this.gpgpu, d, l, c, n), u.forEach((x) => this.disposeIntermediateTensorInfo(x)), f && (h = this.endTimer(h), this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(h) })); + let l = { shape: i.shape, texData: p, isUniform: false }, m = MR(e, c, l), d = this.getAndSaveBinary(m, () => PR(this.gpgpu, e, c, l)), f = this.activeTimers != null, h; + f && (h = this.startTimer()), A().get("ENGINE_COMPILE_ONLY") || OR(this.gpgpu, d, c, l, n), u.forEach((x) => this.disposeIntermediateTensorInfo(x)), f && (h = this.endTimer(h), this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime(h) })); let g = A().getNumber("WEBGL_FLUSH_THRESHOLD"); if (g > 0) { let x = y.now(); @@ -18611,30 +18611,30 @@ var Ul = class r13 extends mo { })), this.floatPrecisionValue; } epsilon() { - return this.floatPrecision() === 32 ? kJ : NJ; + return this.floatPrecision() === 32 ? a9 : i9; } uploadToGPU(e) { let t10 = this.texData.get(e), { shape: o, dtype: n, values: s, texture: a, usage: i, isPacked: p } = t10; if (a != null) return; - let u = this.activeTimers != null, l; - u && (l = y.now()); - let c = t10.texShape; - if (c == null && (c = t0(o, p), t10.texShape = c), s != null) { - let m = Al(o), d, f = c[1], h = c[0], g = s instanceof Uint8Array || s instanceof Uint8ClampedArray; - (p || !g) && ([f, h] = Ga(c[0], c[1])), p ? d = new fh(m, g) : d = new sm(m, g); - let x = g ? [h, f] : c, b = this.makeTensorInfo(x, n), w = this.texData.get(b.dataId); - g ? w.usage = hr.PIXELS : w.usage = hr.UPLOAD, w.texShape = x, this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId), f, h, s); - let S = [[h, f]], T = this.runWebGLProgram(d, [b], n, S, true), E = this.texData.get(T.dataId); - t10.texShape = E.texShape, t10.isPacked = E.isPacked, t10.usage = E.usage, A().get("ENGINE_COMPILE_ONLY") ? this.disposeData(T.dataId) : (t10.texture = E.texture, t10.values = null, this.texData.delete(T.dataId)), this.disposeIntermediateTensorInfo(b), u && (this.uploadWaitMs += y.now() - l); + let u = this.activeTimers != null, c; + u && (c = y.now()); + let l = t10.texShape; + if (l == null && (l = WI(o, p), t10.texShape = l), s != null) { + let m = _c(o), d, f = l[1], h = l[0], g = s instanceof Uint8Array || s instanceof Uint8ClampedArray; + (p || !g) && ([f, h] = Ma(l[0], l[1])), p ? d = new oh(m, g) : d = new Zl(m, g); + let x = g ? [h, f] : l, b = this.makeTensorInfo(x, n), C = this.texData.get(b.dataId); + g ? C.usage = mr.PIXELS : C.usage = mr.UPLOAD, C.texShape = x, this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId), f, h, s); + let S = [[h, f]], _ = this.runWebGLProgram(d, [b], n, S, true), $ = this.texData.get(_.dataId); + t10.texShape = $.texShape, t10.isPacked = $.isPacked, t10.usage = $.usage, A().get("ENGINE_COMPILE_ONLY") ? this.disposeData(_.dataId) : (t10.texture = $.texture, t10.values = null, this.texData.delete(_.dataId)), this.disposeIntermediateTensorInfo(b), u && (this.uploadWaitMs += y.now() - c); } else { - let m = this.acquireTexture(c, i, n, p); + let m = this.acquireTexture(l, i, n, p); t10.texture = m; } } convertAndCacheOnCPU(e, t10) { let o = this.texData.get(e), { dtype: n } = o; - return t10 != null && (o.values = RJ(t10, n)), o.values; + return t10 != null && (o.values = m9(t10, n)), o.values; } acquireTexture(e, t10, o, n) { if (this.numBytesInGPU += this.computeBytes(e, o), !this.warnedAboutMemory && this.numBytesInGPU > this.numMBBeforeWarning * 1024 * 1024) { @@ -18671,54 +18671,54 @@ var Ul = class r13 extends mo { } } async checkCompletionAsync_(e) { - return this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR) ? this.checkCompletion_(e) : (await IS(), this.checkCompletionAsync_(e)); + return this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR) ? this.checkCompletion_(e) : (await cS(), this.checkCompletionAsync_(e)); } checkCompletion_(e) { if (this.gpgpu.gl.getProgramParameter(e.webGLProgram, this.gpgpu.gl.LINK_STATUS) === false) - throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)), this.gpgpu.gl.getShaderParameter(e.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? (nh(e.source, this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); + throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)), this.gpgpu.gl.getShaderParameter(e.fragmentShader, this.gpgpu.gl.COMPILE_STATUS) === false ? (qf(e.source, this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)), new Error("Failed to compile fragment shader.")) : new Error("Failed to link vertex and fragment shaders."); return true; } getUniformLocations() { for (let e of Object.values(this.binaryCache)) { this.gpgpu.buildVao(e.webGLProgram); - let { variablesLocations: t10, customUniformLocations: o, infLoc: n, nanLoc: s, outShapeLocation: a, outShapeStridesLocation: i, outTexShapeLocation: p } = u0(this.gpgpu, e.program, e.webGLProgram); + let { variablesLocations: t10, customUniformLocations: o, infLoc: n, nanLoc: s, outShapeLocation: a, outShapeStridesLocation: i, outTexShapeLocation: p } = XI(this.gpgpu, e.program, e.webGLProgram); e.variablesLocations = t10, e.customUniformLocations = o, e.infLoc = n, e.nanLoc = s, e.outShapeLocation = a, e.outShapeStridesLocation = i, e.outTexShapeLocation = p; } } createTensorFromGPUData(e, t10, o) { e.channels = e.channels || "RGBA"; - let { texture: n, height: s, width: a, channels: i } = e, p = cr().backend; + let { texture: n, height: s, width: a, channels: i } = e, p = ur().backend; if (!p.gpgpu.gl.isTexture(n)) throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'."); let u = p.writeTexture(n, t10, o, s, a, i); - return cr().makeTensorFromDataId(u, t10, o, p); + return ur().makeTensorFromDataId(u, t10, o, p); } }; -Ul.nextDataId = 0; -function RJ(r16, e) { +Lc.nextDataId = 0; +function m9(r15, e) { if (e === "float32" || e === "complex64") - return r16; + return r15; if (e === "int32" || e === "bool") { - let t10 = e === "int32" ? new Int32Array(r16.length) : new Uint8Array(r16.length); + let t10 = e === "int32" ? new Int32Array(r15.length) : new Uint8Array(r15.length); for (let o = 0; o < t10.length; ++o) - t10[o] = Math.round(r16[o]); + t10[o] = Math.round(r15[o]); return t10; } else throw new Error(`Unknown dtype ${e}`); } -var DJ = "4.17.0"; -function EA() { +var d9 = "4.17.0"; +function GD() { A().set("WEBGL_FORCE_F16_TEXTURES", true); } -uu.isBrowser() && pu("webgl", () => new Ul(), 2); -var sut = { forceHalfFloat: EA }; -var Gl = ` +eu.isBrowser() && tu("webgl", () => new Lc(), 2); +var $at = { forceHalfFloat: GD }; +var Bc = ` if (isnan(a)) return a; if (isnan(b)) return b; `; -var Br = class { +var Pr = class { constructor(e, t10, o) { - this.variableNames = ["A", "B"], this.outputShape = C.assertAndGetBroadcastShape(t10, o), this.enableShapeUniforms = lt(this.outputShape.length), this.userCode = ` + this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.enableShapeUniforms = ut(this.outputShape.length), this.userCode = ` float binaryOperation(float a, float b) { ${e} } @@ -18731,17 +18731,17 @@ var Br = class { `; } }; -var to = ` +var Xr = ` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; `; -var eo = class { +var jr = class { constructor(e, t10, o, n = false) { - this.variableNames = ["A", "B"], this.supportsBroadcasting = true, this.packedInputs = true, this.packedOutput = true, this.outputShape = C.assertAndGetBroadcastShape(t10, o); + this.variableNames = ["A", "B"], this.supportsBroadcasting = true, this.packedInputs = true, this.packedOutput = true, this.outputShape = w.assertAndGetBroadcastShape(t10, o); let s = this.outputShape.length; - this.enableShapeUniforms = lt(s); + this.enableShapeUniforms = ut(s); let a = ""; if (n) if (s === 0 || y.sizeFromShape(this.outputShape) === 1) @@ -18763,7 +18763,7 @@ var eo = class { result.w = 0.; `; else { - let p = At("coords", s); + let p = Rt("coords", s); this.enableShapeUniforms ? a += ` bool nextRowOutOfBounds = (${p[s - 2]} + 1) >= outShape[${s} - 2]; @@ -18799,88 +18799,88 @@ var eo = class { `; } }; -function Ft(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +function Dt(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -var $A = { kernelName: vo, backendName: "webgl", kernelFunc: Ft }; -function zr(r16) { - let { inputs: e, backend: t10 } = r16, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.texData.get(s.dataId), i = Ft({ inputs: { x: o }, backend: t10 }), p = Ft({ inputs: { x: n }, backend: t10 }); +var HD = { kernelName: Co, backendName: "webgl", kernelFunc: Dt }; +function Or(r15) { + let { inputs: e, backend: t10 } = r15, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.texData.get(s.dataId), i = Dt({ inputs: { x: o }, backend: t10 }), p = Dt({ inputs: { x: n }, backend: t10 }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var RA = { kernelName: ei, backendName: "webgl", kernelFunc: zr }; -var _0 = "return (a < 0.) ? b * a : a;"; -var E0 = ` +var KD = { kernelName: Di, backendName: "webgl", kernelFunc: Or }; +var hv = "return (a < 0.) ? b * a : a;"; +var gv = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function AJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { alpha: s } = o, a = t10.makeTensorInfo([], "float32", y.createScalarValue(s, "float32")), i = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new eo(E0, n.shape, a.shape) : new Br(_0, n.shape, a.shape), p = t10.runWebGLProgram(i, [n, a], "float32"); +function f9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { alpha: s } = o, a = t10.makeTensorInfo([], "float32", y.createScalarValue(s, "float32")), i = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(gv, n.shape, a.shape) : new Pr(hv, n.shape, a.shape), p = t10.runWebGLProgram(i, [n, a], "float32"); return t10.disposeIntermediateTensorInfo(a), p; } -var DA = { kernelName: Yn, backendName: "webgl", kernelFunc: AJ }; -var $0 = "return (a < 0.) ? b * a : a;"; -var R0 = ` +var qD = { kernelName: $n, backendName: "webgl", kernelFunc: f9 }; +var xv = "return (a < 0.) ? b * a : a;"; +var yv = ` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -function FJ(r16) { - let { inputs: e, backend: t10 } = r16, { x: o, alpha: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new eo(R0, o.shape, n.shape) : new Br($0, o.shape, n.shape); +function h9(r15) { + let { inputs: e, backend: t10 } = r15, { x: o, alpha: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(yv, o.shape, n.shape) : new Pr(xv, o.shape, n.shape); return t10.runWebGLProgram(s, [o, n], "float32"); } -var AA = { kernelName: gs, backendName: "webgl", kernelFunc: FJ }; -var sn = "if (isnan(x)) return x;"; -function xe({ opSnippet: r16, packedOpSnippet: e, cpuKernelImpl: t10, dtype: o }) { +var jD = { kernelName: rs, backendName: "webgl", kernelFunc: h9 }; +var Fo = "if (isnan(x)) return x;"; +function xe({ opSnippet: r15, packedOpSnippet: e, cpuKernelImpl: t10, dtype: o }) { return ({ inputs: n, backend: s }) => { let { x: a } = n, i = s, p = o || a.dtype; if (i.shouldExecuteOnCPU([a]) && t10 != null) { - let c = i.texData.get(a.dataId), m = t10(c.values, p); + let l = i.texData.get(a.dataId), m = t10(l.values, p); return i.makeTensorInfo(a.shape, p, m); } - let u = A().getBool("WEBGL_PACK_UNARY_OPERATIONS") && e != null, l; - return u ? l = new Lr(a.shape, e) : l = new nr(a.shape, r16), i.runWebGLProgram(l, [a], p); + let u = A().getBool("WEBGL_PACK_UNARY_OPERATIONS") && e != null, c; + return u ? c = new Fr(a.shape, e) : c = new tr(a.shape, r15), i.runWebGLProgram(c, [a], p); }; } -function st({ opSnippet: r16, packedOpSnippet: e, checkOutOfBounds: t10 = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { +function nt({ opSnippet: r15, packedOpSnippet: e, checkOutOfBounds: t10 = false, supportsComplex: o = false, cpuKernelImpl: n, dtype: s }) { return ({ inputs: a, backend: i }) => { - let { a: p, b: u } = a, l = i; + let { a: p, b: u } = a, c = i; if (o && p.dtype === "complex64") { - let f = l.texData.get(p.dataId), h = l.texData.get(u.dataId), [g, x] = [[f.complexTensorInfos.real, h.complexTensorInfos.real], [f.complexTensorInfos.imag, h.complexTensorInfos.imag]].map((w) => { - let [S, k] = w, T = { dataId: S.dataId, dtype: S.dtype, shape: p.shape }, E = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, R = new Br(r16, p.shape, u.shape); - return l.runWebGLProgram(R, [T, E], pt(S.dtype, k.dtype)); - }), b = zr({ inputs: { real: g, imag: x }, backend: l }); - return l.disposeIntermediateTensorInfo(g), l.disposeIntermediateTensorInfo(x), b; - } - let c = s || pt(p.dtype, u.dtype); - if ((p.dtype === "string" || u.dtype === "string" || l.shouldExecuteOnCPU([p, u])) && n != null) { - let f = l.texData.get(p.dataId).values, h = l.texData.get(u.dataId).values, g = p.dtype === "string" ? C.fromUint8ToStringArray(f) : f, x = p.dtype === "string" ? C.fromUint8ToStringArray(h) : h, [b, w] = n(p.shape, u.shape, g, x, c), S = l.makeTensorInfo(w, c), k = l.texData.get(S.dataId); + let f = c.texData.get(p.dataId), h = c.texData.get(u.dataId), [g, x] = [[f.complexTensorInfos.real, h.complexTensorInfos.real], [f.complexTensorInfos.imag, h.complexTensorInfos.imag]].map((C) => { + let [S, k] = C, _ = { dataId: S.dataId, dtype: S.dtype, shape: p.shape }, $ = { dataId: k.dataId, dtype: k.dtype, shape: u.shape }, R = new Pr(r15, p.shape, u.shape); + return c.runWebGLProgram(R, [_, $], dt(S.dtype, k.dtype)); + }), b = Or({ inputs: { real: g, imag: x }, backend: c }); + return c.disposeIntermediateTensorInfo(g), c.disposeIntermediateTensorInfo(x), b; + } + let l = s || dt(p.dtype, u.dtype); + if ((p.dtype === "string" || u.dtype === "string" || c.shouldExecuteOnCPU([p, u])) && n != null) { + let f = c.texData.get(p.dataId).values, h = c.texData.get(u.dataId).values, g = p.dtype === "string" ? w.fromUint8ToStringArray(f) : f, x = p.dtype === "string" ? w.fromUint8ToStringArray(h) : h, [b, C] = n(p.shape, u.shape, g, x, l), S = c.makeTensorInfo(C, l), k = c.texData.get(S.dataId); return k.values = b, S; } let m = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") && e != null, d; - return m ? d = new eo(e, p.shape, u.shape, t10) : d = new Br(r16, p.shape, u.shape), l.runWebGLProgram(d, [p, u], c); + return m ? d = new jr(e, p.shape, u.shape, t10) : d = new Pr(r15, p.shape, u.shape), c.runWebGLProgram(d, [p, u], l); }; } -function Ti(r16, e = false) { - if (r16 === "linear") - return e ? vA : yA; - if (r16 === "relu") - return e ? NA : CA; - if (r16 === "elu") - return e ? kA : bA; - if (r16 === "relu6") - return e ? TA : wA; - if (r16 === "prelu") - return e ? R0 : $0; - if (r16 === "leakyrelu") - return e ? E0 : _0; - if (r16 === "sigmoid") - return e ? _A : SA; - throw new Error(`Activation ${r16} has not been implemented for the WebGL backend.`); -} -var Hl = class { +function yi(r15, e = false) { + if (r15 === "linear") + return e ? BD : AD; + if (r15 === "relu") + return e ? VD : PD; + if (r15 === "elu") + return e ? zD : FD; + if (r15 === "relu6") + return e ? WD : OD; + if (r15 === "prelu") + return e ? yv : xv; + if (r15 === "leakyrelu") + return e ? gv : hv; + if (r15 === "sigmoid") + return e ? UD : MD; + throw new Error(`Activation ${r15} has not been implemented for the WebGL backend.`); +} +var zc = class { constructor(e, t10, o, n = false, s = false, a = false, i = null, p = false, u = false) { - this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = lt(this.outputShape.length); - let l = n ? e[1] : e[2], c = Math.ceil(l / 2), m = n ? "i * 2, rc.y" : "rc.y, i * 2", d = s ? "rc.z, i * 2" : "i * 2, rc.z", f = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"], h = s ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"], g = "", x = ""; + this.variableNames = ["matrixA", "matrixB"], this.packedInputs = true, this.packedOutput = true, this.outputShape = o, this.enableShapeUniforms = ut(this.outputShape.length); + let c = n ? e[1] : e[2], l = Math.ceil(c / 2), m = n ? "i * 2, rc.y" : "rc.y, i * 2", d = s ? "rc.z, i * 2" : "i * 2, rc.z", f = n ? ["a.xxyy", "a.zzww"] : ["a.xxzz", "a.yyww"], h = s ? ["b.xzxz", "b.ywyw"] : ["b.xyxy", "b.zwzw"], g = "", x = ""; i && (p ? g = `vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} @@ -18892,17 +18892,17 @@ var Hl = class { }`, x = "result = activation(result);"); let b = a ? "result += getBiasAtOutCoords();" : ""; a && this.variableNames.push("bias"), p && this.variableNames.push("preluActivationWeights"), u && this.variableNames.push("leakyreluAlpha"); - let w = "rc.x", S = "rc.x"; - e[0] < t10[0] ? w = `imod(rc.x, ${e[0]})` : t10[0] < e[0] && (S = `imod(rc.x, ${t10[0]})`), this.userCode = ` + let C = "rc.x", S = "rc.x"; + e[0] < t10[0] ? C = `imod(rc.x, ${e[0]})` : t10[0] < e[0] && (S = `imod(rc.x, ${t10[0]})`), this.userCode = ` ${g} // Don't use uniform for sharedDimensionPacked for performance. - const float sharedDimension = ${c}.0; + const float sharedDimension = ${l}.0; vec4 dot2x2ARowBCol(ivec3 rc) { vec4 result = vec4(0); - int batchA = ${w}; + int batchA = ${C}; int batchB = ${S}; - for (int i = 0; i < ${c}; i++) { + for (int i = 0; i < ${l}; i++) { vec4 a = getMatrixA(batchA, ${m}); vec4 b = getMatrixB(batchB, ${d}); @@ -18927,10 +18927,10 @@ var Hl = class { `; } }; -var D0 = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; -var im = class { +var bv = { REAL: "return areal * breal - aimag * bimag;", IMAG: "return areal * bimag + aimag * breal;" }; +var em = class { constructor(e, t10, o) { - this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.outputShape = C.assertAndGetBroadcastShape(t10, o), this.userCode = ` + this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.userCode = ` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { ${e} @@ -18946,44 +18946,44 @@ var im = class { `; } }; -var FA = "return a * b;"; -function um(r16) { - let { inputs: e, backend: t10 } = r16, { a: o, b: n } = e, s = C.upcastType(o.dtype, n.dtype); +var XD = "return a * b;"; +function tm(r15) { + let { inputs: e, backend: t10 } = r15, { a: o, b: n } = e, s = w.upcastType(o.dtype, n.dtype); if (o.dtype === "complex64") { - let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), u = new im(D0.REAL, o.shape, n.shape), l = new im(D0.IMAG, o.shape, n.shape), c = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = t10.runWebGLProgram(u, c, "float32"), d = t10.runWebGLProgram(l, c, "float32"), f = zr({ inputs: { real: m, imag: d }, backend: t10 }); + let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), u = new em(bv.REAL, o.shape, n.shape), c = new em(bv.IMAG, o.shape, n.shape), l = [{ dataId: i.complexTensorInfos.real.dataId, dtype: i.complexTensorInfos.real.dtype, shape: o.shape }, { dataId: i.complexTensorInfos.imag.dataId, dtype: i.complexTensorInfos.imag.dtype, shape: o.shape }, { dataId: p.complexTensorInfos.real.dataId, dtype: p.complexTensorInfos.real.dtype, shape: n.shape }, { dataId: p.complexTensorInfos.imag.dataId, dtype: p.complexTensorInfos.imag.dtype, shape: n.shape }], m = t10.runWebGLProgram(u, l, "float32"), d = t10.runWebGLProgram(c, l, "float32"), f = Or({ inputs: { real: m, imag: d }, backend: t10 }); return t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), f; } if (t10.shouldExecuteOnCPU([o, n])) { - let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), [u, l] = GD(o.shape, n.shape, i.values, p.values, s), c = t10.makeTensorInfo(l, s), m = t10.texData.get(c.dataId); - return m.values = u, c; + let i = t10.texData.get(o.dataId), p = t10.texData.get(n.dataId), [u, c] = sD(o.shape, n.shape, i.values, p.values, s), l = t10.makeTensorInfo(c, s), m = t10.texData.get(l.dataId); + return m.values = u, l; } let a; - return A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new eo(FA, o.shape, n.shape) : a = new Br(FA, o.shape, n.shape), t10.runWebGLProgram(a, [o, n], s); + return A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? a = new jr(XD, o.shape, n.shape) : a = new Pr(XD, o.shape, n.shape), t10.runWebGLProgram(a, [o, n], s); } -var PA = { kernelName: $o, backendName: "webgl", kernelFunc: um }; -function OA(r16, e, t10) { - let o = [ki(r16.shape), ...Ni(r16.shape)], n = { dtype: r16.dtype, shape: o, dataId: r16.dataId }, s = [ki(e), ...Ni(e)], a = new Wl(s, o), i = true, p = [o], u = t10.runWebGLProgram(a, [n], r16.dtype, p, i); +var YD = { kernelName: Xn, backendName: "webgl", kernelFunc: tm }; +function QD(r15, e, t10) { + let o = [gi(r15.shape), ...xi(r15.shape)], n = { dtype: r15.dtype, shape: o, dataId: r15.dataId }, s = [gi(e), ...xi(e)], a = new Mc(s, o), i = true, p = [o], u = t10.runWebGLProgram(a, [n], r15.dtype, p, i); return { dataId: u.dataId, shape: e, dtype: u.dtype }; } -function te(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { shape: s } = o, a = t10, i = y.sizeFromShape(n.shape), p = y.inferFromImplicitShape(s, i), u = y.sizeFromShape(p); +function te(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { shape: s } = o, a = t10, i = y.sizeFromShape(n.shape), p = y.inferFromImplicitShape(s, i), u = y.sizeFromShape(p); y.assert(i === u, () => `The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`); - let l = a.texData.get(n.dataId); - return l.isPacked && !vu(n.shape, p) && !(l.texture !== null && vu(l.shape, p)) ? OA(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); + let c = a.texData.get(n.dataId); + return c.isPacked && !xu(n.shape, p) && !(c.texture !== null && xu(c.shape, p)) ? QD(n, p, a) : (a.incRef(n.dataId), { dataId: n.dataId, shape: p, dtype: n.dtype }); } -var MA = { kernelName: Ca, backendName: "webgl", kernelFunc: te }; -var pm = class { +var ZD = { kernelName: da, backendName: "webgl", kernelFunc: te }; +var rm = class { constructor(e, t10) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = e; this.outputShape = [n, a]; let i = Math.floor(o / 4) * 4, p = o % 4, u = "sumValue += dot(values, ones);"; if (t10 != null) { - let c = 1 / t10; - u = `sumValue += dot(values * ${y.isInt(c) ? c.toPrecision(2) : c}, ones);`; + let l = 1 / t10; + u = `sumValue += dot(values * ${y.isInt(l) ? l.toPrecision(2) : l}, ones);`; } - let l = ""; - s % o > 0 && (l = ` + let c = ""; + s % o > 0 && (c = ` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } @@ -18991,7 +18991,7 @@ var pm = class { const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { - ${l} + ${c} return getX(batch, inIdx); } @@ -19039,7 +19039,7 @@ var pm = class { `; } }; -var Th = class { +var gh = class { constructor(e, t10) { this.variableNames = ["x"]; let { windowSize: o, batchSize: n, inSize: s, outSize: a } = e; @@ -19048,7 +19048,7 @@ var Th = class { t10 === "prod" ? i = "1.0" : t10 === "min" ? (i = "1.0 / 1e-20", p = "min") : t10 === "max" && (i = "-1.0 / 1e-20", p = "max"); let u = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; t10 === "sum" ? u = "sumValue" : t10 === "prod" ? u = "prodValue" : t10 === "all" ? u = "allValue" : t10 === "any" && (u = "anyValue"); - let l = Math.floor(o / 4) * 4, c = o % 4, m = ` + let c = Math.floor(o / 4) * 4, l = o % 4, m = ` if (${t10 === "sum"}) { sumValue += dot(values, ones); } else if (${t10 === "prod"}) { @@ -19100,7 +19100,7 @@ var Th = class { float allValue = 1.0; float anyValue = 0.0; - for (int i = 0; i < ${l}; i += 4) { + for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; ${d} values = ${d}( getValue(batch, inIdx), @@ -19112,8 +19112,8 @@ var Th = class { ${m} } - int inIdx = inOffset + ${l}; - if (${c === 1}) { + int inIdx = inOffset + ${c}; + if (${l === 1}) { ${d} values = ${d}( getValue(batch, inIdx), initializationValue, @@ -19122,7 +19122,7 @@ var Th = class { ); ${m} - } else if (${c === 2}) { + } else if (${l === 2}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -19131,7 +19131,7 @@ var Th = class { ); ${m} - } else if (${c === 3}) { + } else if (${l === 3}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -19146,30 +19146,30 @@ var Th = class { `; } }; -function OJ(r16) { +function x9(r15) { let e = []; for (; e.length === 0 || e[e.length - 1].outSize !== 1; ) { - let t10 = e.length ? e[e.length - 1].outSize : r16[1], o = C.computeOptimalWindowSize(t10); + let t10 = e.length ? e[e.length - 1].outSize : r15[1], o = w.computeOptimalWindowSize(t10); e.push({ inSize: t10, windowSize: o, outSize: Math.ceil(t10 / o) }); } return e; } -function ro(r16, e, t10, o) { - let n = OJ(r16.shape), s = r16; +function Yr(r15, e, t10, o) { + let n = x9(r15.shape), s = r15; for (let a = 0; a < n.length; a++) { - let { inSize: i, windowSize: p, outSize: u } = n[a], l, c; - t10 === "mean" ? l = a === 0 ? new pm({ windowSize: p, inSize: i, batchSize: r16.shape[0], outSize: u }, i) : new pm({ windowSize: p, inSize: i, batchSize: r16.shape[0], outSize: u }) : l = new Th({ windowSize: p, inSize: i, batchSize: r16.shape[0], outSize: u }, t10), c = s, s = o.runWebGLProgram(l, [s], e), c.dataId !== r16.dataId && o.disposeIntermediateTensorInfo(c); + let { inSize: i, windowSize: p, outSize: u } = n[a], c, l; + t10 === "mean" ? c = a === 0 ? new rm({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }, i) : new rm({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }) : c = new gh({ windowSize: p, inSize: i, batchSize: r15.shape[0], outSize: u }, t10), l = s, s = o.runWebGLProgram(c, [s], e), l.dataId !== r15.dataId && o.disposeIntermediateTensorInfo(l); } return s; } -var _h = class { +var xh = class { constructor(e, t10) { this.variableNames = ["A"]; let o = new Array(e.length); for (let a = 0; a < o.length; a++) o[a] = e[t10[a]]; this.outputShape = o, this.rank = o.length; - let n = Re(this.rank), s = MJ(t10); + let n = Re(this.rank), s = y9(t10); this.userCode = ` void main() { ${n} resRC = getOutputCoords(); @@ -19178,26 +19178,26 @@ var _h = class { `; } }; -function MJ(r16) { - let e = r16.length; +function y9(r15) { + let e = r15.length; if (e > 6) throw Error(`Transpose for rank ${e} is not yet supported`); let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u", "resRC.v"], o = new Array(e); - for (let n = 0; n < r16.length; n++) - o[r16[n]] = t10[n]; + for (let n = 0; n < r15.length; n++) + o[r15[n]] = t10[n]; return o.join(); } -var Eh = class { +var yh = class { constructor(e, t10) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true; let o = new Array(e.length); - for (let l = 0; l < o.length; l++) - o[l] = e[t10[l]]; + for (let c = 0; c < o.length; c++) + o[c] = e[t10[c]]; if (this.outputShape = o, this.rank = o.length, this.rank > 6) throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`); - let n = Re(this.rank), s = N0("rc", this.rank), a = new Array(this.rank); - for (let l = 0; l < t10.length; l++) - a[t10[l]] = s[l]; + let n = Re(this.rank), s = dv("rc", this.rank), a = new Array(this.rank); + for (let c = 0; c < t10.length; c++) + a[t10[c]] = s[c]; let i = `vec2(${a.slice(-2).join()})`, p = `++${s[this.rank - 1]} < ${o[this.rank - 1]}`, u = `getChannel(getA(${a.join()}), ${i})`; this.userCode = ` void main() { @@ -19219,54 +19219,54 @@ var Eh = class { `; } }; -function ku(r16, e, t10) { - let o = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Eh(r16.shape, e) : new _h(r16.shape, e); - return t10.runWebGLProgram(o, [r16], r16.dtype); +function yu(r15, e, t10) { + let o = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new yh(r15.shape, e) : new xh(r15.shape, e); + return t10.runWebGLProgram(o, [r15], r15.dtype); } -function LA(r16, e, t10, o) { - let n = e, s = r16.shape.length, a = y.parseAxisParam(n, r16.shape), i = a, p = C.getAxesPermutation(i, s), u = p != null, l = r16; - u && (l = ku(r16, p, o), i = C.getInnerMostAxes(i.length, s)), C.assertAxesAreInnerMostDims("sum", i, s); - let [c, m] = C.computeOutAndReduceShapes(l.shape, i), d = c; - t10 && (d = C.expandShapeToKeepDim(c, a)); - let f = y.sizeFromShape(m), g = y.sizeFromShape(r16.shape) / f, x = te({ inputs: { x: l }, attrs: { shape: [g, f] }, backend: o }), b = mi(r16.dtype), w = ro(x, b, "sum", o), S = te({ inputs: { x: w }, attrs: { shape: d }, backend: o }); - return o.disposeIntermediateTensorInfo(x), o.disposeIntermediateTensorInfo(w), u && o.disposeIntermediateTensorInfo(l), S; +function JD(r15, e, t10, o) { + let n = e, s = r15.shape.length, a = y.parseAxisParam(n, r15.shape), i = a, p = w.getAxesPermutation(i, s), u = p != null, c = r15; + u && (c = yu(r15, p, o), i = w.getInnerMostAxes(i.length, s)), w.assertAxesAreInnerMostDims("sum", i, s); + let [l, m] = w.computeOutAndReduceShapes(c.shape, i), d = l; + t10 && (d = w.expandShapeToKeepDim(l, a)); + let f = y.sizeFromShape(m), g = y.sizeFromShape(r15.shape) / f, x = te({ inputs: { x: c }, attrs: { shape: [g, f] }, backend: o }), b = oi(r15.dtype), C = Yr(x, b, "sum", o), S = te({ inputs: { x: C }, attrs: { shape: d }, backend: o }); + return o.disposeIntermediateTensorInfo(x), o.disposeIntermediateTensorInfo(C), u && o.disposeIntermediateTensorInfo(c), S; } -function Tp(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; - return LA(n, s, a, t10); +function wp(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; + return JD(n, s, a, t10); } -var BA = { kernelName: As, backendName: "webgl", kernelFunc: Tp }; -function Ct(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); - for (let l = 0; l < p.length; l++) - p[l] = n.shape[s[l]]; +var eA = { kernelName: Ss, backendName: "webgl", kernelFunc: wp }; +function bt(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); + for (let c = 0; c < p.length; c++) + p[c] = n.shape[s[c]]; let u; if (a.shouldExecuteOnCPU([n])) { - let c = a.texData.get(n.dataId).values, m = Np(c, n.shape, n.dtype, s, p); + let l = a.texData.get(n.dataId).values, m = Cp(l, n.shape, n.dtype, s, p); u = a.makeTensorInfo(p, n.dtype); let d = a.texData.get(u.dataId); d.values = m; } else - u = ku(n, s, a); + u = yu(n, s, a); return u; } -var zA = { kernelName: Kr, backendName: "webgl", kernelFunc: Ct }; -var A0 = 1e3; -function _p({ a: r16, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r16.shape.length, l = e.shape.length, c = t10 ? r16.shape[u - 2] : r16.shape[u - 1], m = o ? e.shape[l - 1] : e.shape[l - 2], d = t10 ? r16.shape[u - 1] : r16.shape[u - 2], f = o ? e.shape[l - 2] : e.shape[l - 1], h = r16.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = kr.assertAndGetBroadcastShape(r16.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); - y.assert(c === m, () => `Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r16.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let k = t10 ? [x, c, d] : [x, d, c], T = o ? [b, f, m] : [b, m, f], E = te({ inputs: { x: r16 }, backend: n, attrs: { shape: k } }), R = te({ inputs: { x: e }, backend: n, attrs: { shape: T } }), D = [E, R], F = Math.max(x, b), O = t10 ? E.shape[1] : E.shape[2], M = s != null, L = a != null, B = p === "leakyrelu", z = p != null ? Ti(p, true) : null, U = M || L || B || z != null, j; - if ((d === 1 || f === 1) && O > A0 && U === false) { - let Y = E, J = R; - t10 && (Y = Ct({ inputs: { x: E }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(Y)), o && (J = Ct({ inputs: { x: R }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(J)); +var tA = { kernelName: co, backendName: "webgl", kernelFunc: bt }; +var Cv = 1e3; +function Sp({ a: r15, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r15.shape.length, c = e.shape.length, l = t10 ? r15.shape[u - 2] : r15.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], d = t10 ? r15.shape[u - 1] : r15.shape[u - 2], f = o ? e.shape[c - 2] : e.shape[c - 1], h = r15.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Sr.assertAndGetBroadcastShape(r15.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r15.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); + let k = t10 ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], $ = te({ inputs: { x: r15 }, backend: n, attrs: { shape: k } }), R = te({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), D = [$, R], P = Math.max(x, b), O = t10 ? $.shape[1] : $.shape[2], M = s != null, L = a != null, B = p === "leakyrelu", z = p != null ? yi(p, true) : null, U = M || L || B || z != null, j; + if ((d === 1 || f === 1) && O > Cv && U === false) { + let Y = $, J = R; + t10 && (Y = bt({ inputs: { x: $ }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(Y)), o && (J = bt({ inputs: { x: R }, backend: n, attrs: { perm: [0, 2, 1] } }), D.push(J)); let re = f !== 1, ne = f === 1, ee = Y; - re && (ee = te({ inputs: { x: Y }, backend: n, attrs: { shape: [F, O, 1] } }), D.push(ee)); - let oe = f === 1 ? 2 : 1, ue = J; - ne && (ue = te({ inputs: { x: J }, backend: n, attrs: { shape: [F, 1, O] } }), D.push(ue)); - let me = um({ inputs: { a: ee, b: ue }, backend: n }); - j = Tp({ inputs: { x: me }, backend: n, attrs: { axis: oe, keepDims: true } }), D.push(me); + re && (ee = te({ inputs: { x: Y }, backend: n, attrs: { shape: [P, O, 1] } }), D.push(ee)); + let oe = f === 1 ? 2 : 1, ie = J; + ne && (ie = te({ inputs: { x: J }, backend: n, attrs: { shape: [P, 1, O] } }), D.push(ie)); + let le = tm({ inputs: { a: ee, b: ie }, backend: n }); + j = wp({ inputs: { x: le }, backend: n, attrs: { axis: oe, keepDims: true } }), D.push(le); } else { - let Y = pt(r16.dtype, e.dtype), J = new Hl(k, T, [F, d, f], t10, o, M, z, L, B), re = [E, R]; + let Y = dt(r15.dtype, e.dtype), J = new zc(k, _, [P, d, f], t10, o, M, z, L, B), re = [$, R]; if (s != null && re.push(s), L && re.push(a), B) { let ne = n.makeTensorInfo([], "float32", y.createScalarValue(i, "float32")); re.push(ne), D.push(ne); @@ -19279,39 +19279,39 @@ function _p({ a: r16, b: e, transposeA: t10, transposeB: o, backend: n, bias: s n.disposeIntermediateTensorInfo(Y); return q; } -function LJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: l, leakyreluAlpha: c } = o; - return _p({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: c, activation: l }); +function b9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return Sp({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var VA = { kernelName: qo, backendName: "webgl", kernelFunc: LJ }; -var WA = "return abs(x);"; -function BJ(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var rA = { kernelName: So, backendName: "webgl", kernelFunc: b9 }; +var oA = "return abs(x);"; +function C9(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (t10.shouldExecuteOnCPU([o]) && o.dtype !== "complex64") { - let s = t10.texData.get(o.dataId), a = wh(s.values); + let s = t10.texData.get(o.dataId), a = ch(s.values); return t10.makeTensorInfo(o.shape, o.dtype, a); } let n; - return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Lr(o.shape, WA) : n = new nr(o.shape, WA), t10.runWebGLProgram(n, [o], o.dtype); + return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Fr(o.shape, oA) : n = new tr(o.shape, oA), t10.runWebGLProgram(n, [o], o.dtype); } -var UA = { kernelName: fn, backendName: "webgl", kernelFunc: BJ }; -var zJ = Gt + ` +var nA = { kernelName: Xs, backendName: "webgl", kernelFunc: C9 }; +var w9 = Wt + ` if (abs(x) > 1.) { return NAN; } return acos(x); `; -var VJ = xe({ opSnippet: zJ }); -var GA = { kernelName: hn, backendName: "webgl", kernelFunc: VJ }; -var WJ = Gt + ` +var S9 = xe({ opSnippet: w9 }); +var sA = { kernelName: Vo, backendName: "webgl", kernelFunc: S9 }; +var I9 = Wt + ` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`; -var UJ = xe({ opSnippet: WJ }); -var HA = { kernelName: gn, backendName: "webgl", kernelFunc: UJ }; -var KA = "return a + b;"; -var GJ = st({ opSnippet: KA, packedOpSnippet: KA, supportsComplex: true, cpuKernelImpl: ID }); -var qA = { kernelName: Rr, backendName: "webgl", kernelFunc: GJ }; -var $h = class { +var v9 = xe({ opSnippet: I9 }); +var aA = { kernelName: Wo, backendName: "webgl", kernelFunc: v9 }; +var iA = "return a + b;"; +var k9 = nt({ opSnippet: iA, packedOpSnippet: iA, supportsComplex: true, cpuKernelImpl: LR }); +var uA = { kernelName: uo, backendName: "webgl", kernelFunc: k9 }; +var bh = class { constructor(e, t10) { this.outputShape = [], this.outputShape = e, this.variableNames = t10.map((s, a) => `T${a}`); let o = []; @@ -19330,7 +19330,7 @@ var $h = class { `; } }; -var Rh = class { +var Ch = class { constructor(e, t10) { this.outputShape = [], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.variableNames = t10.map((s, a) => `T${a}`); let o = []; @@ -19349,43 +19349,43 @@ var Rh = class { `; } }; -function Dh(r16) { - let { inputs: e, backend: t10 } = r16, o = e; +function wh(r15) { + let { inputs: e, backend: t10 } = r15, o = e; if (o.length === 1) - return Ft({ inputs: { x: o[0] }, backend: t10 }); + return Dt({ inputs: { x: o[0] }, backend: t10 }); if (o.length > A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")) { - let p = Math.floor(o.length / 2), u = Dh({ inputs: o.slice(0, p), backend: t10 }), l = Dh({ inputs: o.slice(p), backend: t10 }); - return Dh({ inputs: [u, l], backend: t10 }); + let p = Math.floor(o.length / 2), u = wh({ inputs: o.slice(0, p), backend: t10 }), c = wh({ inputs: o.slice(p), backend: t10 }); + return wh({ inputs: [u, c], backend: t10 }); } - let n = o.map((p) => p.dtype).reduce((p, u) => pt(p, u)), s = o.map((p) => p.shape), i = A().getBool("WEBGL_PACK") ? new Rh(o[0].shape, s) : new $h(o[0].shape, s); + let n = o.map((p) => p.dtype).reduce((p, u) => dt(p, u)), s = o.map((p) => p.shape), i = A().getBool("WEBGL_PACK") ? new Ch(o[0].shape, s) : new bh(o[0].shape, s); return t10.runWebGLProgram(i, o, n); } -var jA = { kernelName: xn, backendName: "webgl", kernelFunc: Dh }; -function HJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, l = C.getAxesPermutation(u, i), c = n; - l != null && (c = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), u = C.getInnerMostAxes(u.length, i)), C.assertAxesAreInnerMostDims("all", u, i); - let [m, d] = C.computeOutAndReduceShapes(c.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: c }, backend: t10, attrs: { shape: [-1, f] } }), g = ro(h, h.dtype, "all", t10), x; +var pA = { kernelName: Uo, backendName: "webgl", kernelFunc: wh }; +function N9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = w.getAxesPermutation(u, i), l = n; + c != null && (l = bt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = w.getInnerMostAxes(u.length, i)), w.assertAxesAreInnerMostDims("all", u, i); + let [m, d] = w.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "all", t10), x; if (a) { - let b = C.expandShapeToKeepDim(m, p); + let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), l != null && t10.disposeIntermediateTensorInfo(c), x; + return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } -var XA = { kernelName: yn, backendName: "webgl", kernelFunc: HJ }; -function KJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, l = C.getAxesPermutation(u, i), c = n; - l != null && (c = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), u = C.getInnerMostAxes(u.length, i)), C.assertAxesAreInnerMostDims("any", u, i); - let [m, d] = C.computeOutAndReduceShapes(c.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: c }, backend: t10, attrs: { shape: [-1, f] } }), g = ro(h, h.dtype, "any", t10), x; +var cA = { kernelName: Go, backendName: "webgl", kernelFunc: N9 }; +function T9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = w.getAxesPermutation(u, i), l = n; + c != null && (l = bt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = w.getInnerMostAxes(u.length, i)), w.assertAxesAreInnerMostDims("any", u, i); + let [m, d] = w.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "any", t10), x; if (a) { - let b = C.expandShapeToKeepDim(m, p); + let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), l != null && t10.disposeIntermediateTensorInfo(c), x; + return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } -var YA = { kernelName: bn, backendName: "webgl", kernelFunc: KJ }; -var Ah = class { +var lA = { kernelName: Ho, backendName: "webgl", kernelFunc: T9 }; +var Sh = class { constructor(e, t10, o) { this.variableNames = ["A"]; let { windowSize: n, batchSize: s, outSize: a } = e; @@ -19414,43 +19414,43 @@ var Ah = class { `; } }; -var Fh = class { +var Ih = class { constructor(e, t10, o, n) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, y.assert(e.length > 2, () => `Packed arg${o.charAt(0).toUpperCase() + o.slice(1)} supports only inputs with rank above 2.`); let s = e[e.length - 1], a = Math.ceil(s / t10); this.outputShape = e.slice(0, -1), a > 1 && this.outputShape.push(a), n || this.variableNames.push("bestIndicesA"); - let i = this.outputShape, p = i.length, u = Re(p), l = At("coords", p), c, m; + let i = this.outputShape, p = i.length, u = Re(p), c = Rt("coords", p), l, m; if (a === 1) { m = p + 1; let R = Re(m); - c = ` - ${R} sourceLocR = ${R}(${l.join()}, 0); - ++${l[p - 1]}; - ${R} sourceLocG = ${R}(${l.join()}, 0); - ++${l[p - 2]}; - ${R} sourceLocA = ${R}(${l.join()}, 0); - --${l[p - 1]}; - ${R} sourceLocB = ${R}(${l.join()}, 0); - --${l[p - 2]};`; + l = ` + ${R} sourceLocR = ${R}(${c.join()}, 0); + ++${c[p - 1]}; + ${R} sourceLocG = ${R}(${c.join()}, 0); + ++${c[p - 2]}; + ${R} sourceLocA = ${R}(${c.join()}, 0); + --${c[p - 1]}; + ${R} sourceLocB = ${R}(${c.join()}, 0); + --${c[p - 2]};`; } else - m = p, c = ` + m = p, l = ` ${u} sourceLocR = coords; - ++${l[p - 1]}; + ++${c[p - 1]}; ${u} sourceLocG = coords; - ++${l[p - 2]}; + ++${c[p - 2]}; ${u} sourceLocA = coords; - --${l[p - 1]}; + --${c[p - 1]}; ${u} sourceLocB = coords; - --${l[p - 2]};`; - let d = ["x", "y", "z", "w", "u", "v"].slice(0, m), f = "." + d[m - 1], h = d.map((R) => "int " + R), g = At("sourceLocR", m - 1).concat("inIdx.r"), x = At("sourceLocG", m - 1).concat("inIdx.g"), b = At("sourceLocB", m - 1).concat("inIdx.b"), w = At("sourceLocA", m - 1).concat("inIdx.a"), S = o === "max" ? "greaterThan" : "lessThan", k = n ? "" : ` + --${c[p - 2]};`; + let d = ["x", "y", "z", "w", "u", "v"].slice(0, m), f = "." + d[m - 1], h = d.map((R) => "int " + R), g = Rt("sourceLocR", m - 1).concat("inIdx.r"), x = Rt("sourceLocG", m - 1).concat("inIdx.g"), b = Rt("sourceLocB", m - 1).concat("inIdx.b"), C = Rt("sourceLocA", m - 1).concat("inIdx.a"), S = o === "max" ? "greaterThan" : "lessThan", k = n ? "" : ` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), - getBestIndicesAChannel(${w.join()})));`, T = `vec4( + getBestIndicesAChannel(${C.join()})));`, _ = `vec4( getAChannel(${g.join()}), hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., - hasNextRow && hasNextCol ? getAChannel(${w.join()}) : 0.)`, E = n ? "" : ` + hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`, $ = n ? "" : ` float getBestIndicesAChannel(${h.join()}) { return getChannel(getBestIndicesA(${d.join()}), vec2(${d.slice(-2).join()})); @@ -19460,22 +19460,22 @@ var Fh = class { return getChannel(getA(${d.join()}), vec2(${d.slice(-2).join()})); } - ${E} + ${$} void main() { ${u} coords = getOutputCoords(); - bool hasNextCol = ${l[p - 1]} < ${i[p - 1] - 1}; - bool hasNextRow = ${l[p - 2]} < ${i[p - 2] - 1}; - ${c} + bool hasNextCol = ${c[p - 1]} < ${i[p - 1] - 1}; + bool hasNextRow = ${c[p - 2]} < ${i[p - 2] - 1}; + ${l} ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f}, sourceLocB${f}, sourceLocA${f}) * ${t10}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); - vec4 bestValue = ${T}; + vec4 bestValue = ${_}; for (int i = 0; i < ${t10}; i++) { inIdx = srcIdx; ${k} - vec4 candidate = ${T}; + vec4 candidate = ${_}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${S}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); @@ -19492,92 +19492,92 @@ var Fh = class { `; } }; -function QA(r16, e, t10, o = null) { +function mA(r15, e, t10, o = null) { let n = e.shape[0], s = e.shape[1]; o != null && (n = o.shape[0], s = o.shape[1]); - let a = C.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new Ah(i, t10, o == null), u = [e]; + let a = w.computeOptimalWindowSize(s), i = { windowSize: a, inSize: s, batchSize: n, outSize: Math.ceil(s / a) }, p = new Sh(i, t10, o == null), u = [e]; o != null && u.push(o); - let l = r16.runWebGLProgram(p, u, "int32"); - if (l.shape[1] === 1) - return l; - let c = QA(r16, e, t10, l); - return r16.disposeIntermediateTensorInfo(l), c; -} -function ZA(r16, e, t10, o = null) { - let n = o != null ? o.shape : e.shape, s = n[n.length - 1], a = C.computeOptimalWindowSize(s), i = new Fh(n, a, t10, o == null), p = o == null ? [e] : [e, o], u = r16.runWebGLProgram(i, p, "int32"); + let c = r15.runWebGLProgram(p, u, "int32"); + if (c.shape[1] === 1) + return c; + let l = mA(r15, e, t10, c); + return r15.disposeIntermediateTensorInfo(c), l; +} +function dA(r15, e, t10, o = null) { + let n = o != null ? o.shape : e.shape, s = n[n.length - 1], a = w.computeOptimalWindowSize(s), i = new Ih(n, a, t10, o == null), p = o == null ? [e] : [e, o], u = r15.runWebGLProgram(i, p, "int32"); if (u.shape.length === e.shape.length) { - let l = ZA(r16, e, t10, u); - return r16.disposeIntermediateTensorInfo(u), l; + let c = dA(r15, e, t10, u); + return r15.disposeIntermediateTensorInfo(u), c; } return u; } -function Ph(r16, e, t10, o) { +function vh(r15, e, t10, o) { let n = [t10]; - if (C.assertAxesAreInnerMostDims("arg" + o.charAt(0).toUpperCase() + o.slice(1), n, e.shape.length), !A().getBool("WEBGL_PACK_REDUCE") || e.shape.length <= 2) { - let s = [], a = r16.texData.get(e.dataId), i = a !== null && a.isPacked, p = e; - i && (p = r16.unpackTensor(e), s.push(p)); - let [u, l] = C.computeOutAndReduceShapes(p.shape, n), c = y.sizeFromShape(l), m = te({ inputs: { x: p }, backend: r16, attrs: { shape: [-1, c] } }); + if (w.assertAxesAreInnerMostDims("arg" + o.charAt(0).toUpperCase() + o.slice(1), n, e.shape.length), !A().getBool("WEBGL_PACK_REDUCE") || e.shape.length <= 2) { + let s = [], a = r15.texData.get(e.dataId), i = a !== null && a.isPacked, p = e; + i && (p = r15.unpackTensor(e), s.push(p)); + let [u, c] = w.computeOutAndReduceShapes(p.shape, n), l = y.sizeFromShape(c), m = te({ inputs: { x: p }, backend: r15, attrs: { shape: [-1, l] } }); s.push(m); - let d = QA(r16, m, o); + let d = mA(r15, m, o); s.push(d); - let f = te({ inputs: { x: d }, backend: r16, attrs: { shape: u } }); - return s.forEach((h) => r16.disposeIntermediateTensorInfo(h)), f; - } - return ZA(r16, e, o); -} -function qJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), C.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); - let l = Ph(t10, p, a[0], "max"); - return u.forEach((c) => t10.disposeIntermediateTensorInfo(c)), l; -} -var JA = { kernelName: na, backendName: "webgl", kernelFunc: qJ }; -function jJ(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), C.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); - let l = Ph(t10, p, a[0], "min"); - return u.forEach((c) => t10.disposeIntermediateTensorInfo(c)), l; -} -var eF = { kernelName: sa, backendName: "webgl", kernelFunc: jJ }; -var XJ = Gt + ` + let f = te({ inputs: { x: d }, backend: r15, attrs: { shape: u } }); + return s.forEach((h) => r15.disposeIntermediateTensorInfo(h)), f; + } + return dA(r15, e, o); +} +function _9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = bt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); + let c = vh(t10, p, a[0], "max"); + return u.forEach((l) => t10.disposeIntermediateTensorInfo(l)), c; +} +var fA = { kernelName: Ys, backendName: "webgl", kernelFunc: _9 }; +function E9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = bt({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); + let c = vh(t10, p, a[0], "min"); + return u.forEach((l) => t10.disposeIntermediateTensorInfo(l)), c; +} +var hA = { kernelName: Qs, backendName: "webgl", kernelFunc: E9 }; +var $9 = Wt + ` if (abs(x) > 1.) { return NAN; } return asin(x); `; -var YJ = xe({ opSnippet: XJ }); -var tF = { kernelName: Cn, backendName: "webgl", kernelFunc: YJ }; -var QJ = Gt + "return log(x + sqrt(x * x + 1.0));"; -var ZJ = xe({ opSnippet: QJ }); -var rF = { kernelName: wn, backendName: "webgl", kernelFunc: ZJ }; -var JJ = Gt + ` +var R9 = xe({ opSnippet: $9 }); +var gA = { kernelName: Ko, backendName: "webgl", kernelFunc: R9 }; +var D9 = Wt + "return log(x + sqrt(x * x + 1.0));"; +var A9 = xe({ opSnippet: D9 }); +var xA = { kernelName: qo, backendName: "webgl", kernelFunc: A9 }; +var F9 = Wt + ` return atan(x); `; -var eee = xe({ opSnippet: JJ }); -var oF = { kernelName: Sn, backendName: "webgl", kernelFunc: eee }; -var tee = Gl + ` +var P9 = xe({ opSnippet: F9 }); +var yA = { kernelName: jo, backendName: "webgl", kernelFunc: P9 }; +var O9 = Bc + ` return atan(a, b); `; -var ree = ` +var M9 = ` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + to + ` + ` + Xr + ` return result; `; -var oee = st({ opSnippet: tee, packedOpSnippet: ree }); -var nF = { kernelName: vn, backendName: "webgl", kernelFunc: oee }; -var nee = Gt + ` +var L9 = nt({ opSnippet: O9, packedOpSnippet: M9 }); +var bA = { kernelName: Yo, backendName: "webgl", kernelFunc: L9 }; +var B9 = Wt + ` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`; -var see = xe({ opSnippet: nee }); -var sF = { kernelName: In, backendName: "webgl", kernelFunc: see }; -var Zs = class { +var z9 = xe({ opSnippet: B9 }); +var CA = { kernelName: Xo, backendName: "webgl", kernelFunc: z9 }; +var Us = class { constructor(e, t10, o, n = false, s = false) { if (this.variableNames = ["x"], t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); - let a = e.filterWidth, i = e.strideHeight, p = e.strideWidth, u = e.dilationHeight, l = e.dilationWidth, c = e.effectiveFilterHeight, m = e.effectiveFilterWidth, d = e.padInfo.top, f = e.padInfo.left; + let a = e.filterWidth, i = e.strideHeight, p = e.strideWidth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterHeight, m = e.effectiveFilterWidth, d = e.padInfo.top, f = e.padInfo.left; this.outputShape = e.outShape; let h = t10 === "avg", g = `((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`, x = `(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`, b = "0.0"; if (h || (b = "-1.0 / 1e-20"), o) { @@ -19602,7 +19602,7 @@ var Zs = class { int minMaxPosition = 0; float avgValue = 0.0; - for (int wR = 0; wR < ${c}; + for (int wR = 0; wR < ${l}; wR += ${u}) { int xR = xRCorner + wR; @@ -19611,7 +19611,7 @@ var Zs = class { } for (int wC = 0; wC < ${m}; - wC += ${l}) { + wC += ${c}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { @@ -19636,13 +19636,13 @@ var Zs = class { `; return; } - let w = "max", S = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + let C = "max", S = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; t10 === "avg" && (S = "avgValue / max(count, 1.0)"); - let k = Math.floor(a / 4) * 4, T = a % 4, E = ` + let k = Math.floor(a / 4) * 4, _ = a % 4, $ = ` if (${h}) { avgValue += dot(values, ones); } else { - minMaxValue = ${w}(values, minMaxValue); + minMaxValue = ${C}(values, minMaxValue); } `; this.userCode = ` @@ -19676,7 +19676,7 @@ var Zs = class { float avgValue = 0.0; count = 0.0; - for (int wR = 0; wR < ${c}; + for (int wR = 0; wR < ${l}; wR += ${u}) { int xR = xRCorner + wR; @@ -19685,20 +19685,20 @@ var Zs = class { } for (int wC = 0; wC < ${k}; wC += 4) { - int xC = xCCorner + wC * ${l}; + int xC = xCCorner + wC * ${c}; vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), - getValue(batch, xR, xC + 2 * ${l}, d), - getValue(batch, xR, xC + 3 * ${l}, d) + getValue(batch, xR, xC + ${c}, d), + getValue(batch, xR, xC + 2 * ${c}, d), + getValue(batch, xR, xC + 3 * ${c}, d) ); - ${E} + ${$} } int xC = xCCorner + ${k}; - if (${T === 1}) { + if (${_ === 1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, @@ -19706,25 +19706,25 @@ var Zs = class { initializationValue ); - ${E} - } else if (${T === 2}) { + ${$} + } else if (${_ === 2}) { vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), + getValue(batch, xR, xC + ${c}, d), initializationValue, initializationValue ); - ${E} - } else if (${T === 3}) { + ${$} + } else if (${_ === 3}) { vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), - getValue(batch, xR, xC + 2 * ${l}, d), + getValue(batch, xR, xC + ${c}, d), + getValue(batch, xR, xC + 2 * ${c}, d), initializationValue ); - ${E} + ${$} } } setOutput(${S}); @@ -19732,15 +19732,15 @@ var Zs = class { `; } }; -var Nu = class { +var bu = class { constructor(e, t10, o, n = false, s = false) { if (this.variableNames = ["x"], t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); - let a = e.filterWidth, i = e.strideDepth, p = e.strideHeight, u = e.strideWidth, l = e.dilationDepth, c = e.dilationHeight, m = e.dilationWidth, d = e.effectiveFilterDepth, f = e.effectiveFilterHeight, h = e.effectiveFilterWidth, g = e.padInfo.front, x = e.padInfo.top, b = e.padInfo.left; + let a = e.filterWidth, i = e.strideDepth, p = e.strideHeight, u = e.strideWidth, c = e.dilationDepth, l = e.dilationHeight, m = e.dilationWidth, d = e.effectiveFilterDepth, f = e.effectiveFilterHeight, h = e.effectiveFilterWidth, g = e.padInfo.front, x = e.padInfo.top, b = e.padInfo.left; this.outputShape = e.outShape; - let w = t10 === "avg", S = "0.0"; - if (w || (S = "-1.0 / 1e-20"), o) { - let F = ">="; + let C = t10 === "avg", S = "0.0"; + if (C || (S = "-1.0 / 1e-20"), o) { + let P = ">="; this.userCode = ` const ivec3 strides = ivec3(${i}, ${p}, ${u}); @@ -19763,7 +19763,7 @@ var Nu = class { int minMaxPosition = 0; for (int wD = 0; wD < ${d}; - wD += ${l}) { + wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { @@ -19771,7 +19771,7 @@ var Nu = class { } for (int wR = 0; wR < ${f}; - wR += ${c}) { + wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { @@ -19792,7 +19792,7 @@ var Nu = class { // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); - if (value ${F} currMinMaxValue) { + if (value ${P} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${n ? s ? `(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch` : `wD * ${f} * ${h} + @@ -19806,10 +19806,10 @@ var Nu = class { `; return; } - let k = "max", T = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; - t10 === "avg" && (T = "avgValue / max(count, 1.0)"); - let E = Math.floor(a / 4) * 4, R = a % 4, D = ` - if (${w}) { + let k = "max", _ = `${t10}(${t10}(${t10}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`; + t10 === "avg" && (_ = "avgValue / max(count, 1.0)"); + let $ = Math.floor(a / 4) * 4, R = a % 4, D = ` + if (${C}) { avgValue += dot(values, ones); } else { minMaxValue = ${k}(values, minMaxValue); @@ -19849,7 +19849,7 @@ var Nu = class { count = 0.0; for (int wD = 0; wD < ${d}; - wD += ${l}) { + wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { @@ -19857,14 +19857,14 @@ var Nu = class { } for (int wR = 0; wR < ${f}; - wR += ${c}) { + wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } - for (int wC = 0; wC < ${E}; wC += 4) { + for (int wC = 0; wC < ${$}; wC += 4) { int xC = xCCorner + wC * ${m}; vec4 values = vec4( @@ -19877,7 +19877,7 @@ var Nu = class { ${D} } - int xC = xCCorner + ${E}; + int xC = xCCorner + ${$}; if (${R === 1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), @@ -19908,34 +19908,34 @@ var Nu = class { } } } - setOutput(${T}); + setOutput(${_}); } `; } }; -function aee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e; - Ys(n, "avgPool"); +function V9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; + Vs(n, "avgPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - y.assert(C.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let l = C.computePool2DInfo(n.shape, s, a, u, i, p); - if (l.filterWidth === 1 && l.filterHeight === 1 && y.arraysEqual(l.inShape, l.outShape)) - return Ft({ inputs: { x: n }, backend: t10 }); - let c = new Zs(l, "avg", false); - return t10.runWebGLProgram(c, [n], "float32"); + y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = w.computePool2DInfo(n.shape, s, a, u, i, p); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + return Dt({ inputs: { x: n }, backend: t10 }); + let l = new Us(c, "avg", false); + return t10.runWebGLProgram(l, [n], "float32"); } -var aF = { kernelName: kn, backendName: "webgl", kernelFunc: aee }; -function iee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, l = [1, 1, 1], c = C.computePool3DInfo(n.shape, s, a, l, i, p, u), m = new Nu(c, "avg", false); +var wA = { kernelName: Qo, backendName: "webgl", kernelFunc: V9 }; +function W9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = [1, 1, 1], l = w.computePool3DInfo(n.shape, s, a, c, i, p, u), m = new bu(l, "avg", false); return t10.runWebGLProgram(m, [n], "float32"); } -var iF = { kernelName: aa, backendName: "webgl", kernelFunc: iee }; -var Oh = class { +var SA = { kernelName: Zs, backendName: "webgl", kernelFunc: W9 }; +var kh = class { constructor(e) { this.variableNames = ["dy"], this.outputShape = e.inShape; - let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterHeight, u = e.effectiveFilterWidth, l = p - 1 - e.padInfo.top, c = u - 1 - e.padInfo.left, m = 1 / (t10 * o); + let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterHeight, u = e.effectiveFilterWidth, c = p - 1 - e.padInfo.top, l = u - 1 - e.padInfo.left, m = 1 / (t10 * o); this.userCode = ` - const ivec2 pads = ivec2(${l}, ${c}); + const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${m}); void main() { @@ -19979,10 +19979,10 @@ var Oh = class { `; } }; -var Mh = class { +var Nh = class { constructor(e) { this.variableNames = ["dy"], this.outputShape = e.inShape; - let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, l = e.dilationWidth, c = e.effectiveFilterDepth, m = e.effectiveFilterHeight, d = e.effectiveFilterWidth, f = c - 1 - e.padInfo.front, h = m - 1 - e.padInfo.top, g = d - 1 - e.padInfo.left, x = 1 / (t10 * o * n); + let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.effectiveFilterDepth, m = e.effectiveFilterHeight, d = e.effectiveFilterWidth, f = l - 1 - e.padInfo.front, h = m - 1 - e.padInfo.top, g = d - 1 - e.padInfo.left, x = 1 / (t10 * o * n); this.userCode = ` const ivec3 pads = ivec3(${f}, ${h}, ${g}); const float avgMultiplier = float(${x}); @@ -20002,7 +20002,7 @@ var Mh = class { // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; - for (int wD = 0; wD < ${c}; + for (int wD = 0; wD < ${l}; wD += ${p}) { float dyD = float(dyDCorner + wD) / ${s}.0; @@ -20022,7 +20022,7 @@ var Mh = class { int idyR = int(dyR); for (int wC = 0; wC < ${d}; - wC += ${l}) { + wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || @@ -20042,30 +20042,30 @@ var Mh = class { `; } }; -function uee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: l } = o, c = [1, 1, 1], m = C.computePool3DInfo(a.shape, i, p, c, u, l), d = new Mh(m); +function U9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = w.computePool3DInfo(a.shape, i, p, l, u, c), d = new Nh(m); return t10.runWebGLProgram(d, [n], a.dtype); } -var uF = { kernelName: Vi, backendName: "webgl", kernelFunc: uee }; -function pee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s; - Ys([n, s], "avgPoolGrad"); - let { filterSize: i, strides: p, pad: u } = o, l = C.computePool2DInfo(a.shape, i, p, 1, u), c = new Oh(l); - return t10.runWebGLProgram(c, [n], a.dtype); +var IA = { kernelName: Ri, backendName: "webgl", kernelFunc: U9 }; +function G9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s; + Vs([n, s], "avgPoolGrad"); + let { filterSize: i, strides: p, pad: u } = o, c = w.computePool2DInfo(a.shape, i, p, 1, u), l = new kh(c); + return t10.runWebGLProgram(l, [n], a.dtype); } -var pF = { kernelName: zi, backendName: "webgl", kernelFunc: pee }; -function lee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; - return _p({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); +var vA = { kernelName: $i, backendName: "webgl", kernelFunc: G9 }; +function H9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; + return Sp({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); } -var lF = { kernelName: Nn, backendName: "webgl", kernelFunc: lee }; -var Lh = class { +var kA = { kernelName: Zo, backendName: "webgl", kernelFunc: H9 }; +var Th = class { constructor(e, t10, o, n, s, a) { - this.outputShape = [], this.variableNames = ["x", "mean", "variance"], C.assertAndGetBroadcastShape(e, t10), C.assertAndGetBroadcastShape(e, o); + this.outputShape = [], this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(e, t10), w.assertAndGetBroadcastShape(e, o); let i = "0.0"; - n != null && (C.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); + n != null && (w.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); let p = "1.0"; - s != null && (C.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` + s != null && (w.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -20078,13 +20078,13 @@ var Lh = class { `; } }; -var Bh = class { +var _h = class { constructor(e, t10, o, n, s, a) { - this.packedInputs = true, this.packedOutput = true, this.variableNames = ["x", "mean", "variance"], C.assertAndGetBroadcastShape(e, t10), C.assertAndGetBroadcastShape(e, o); + this.packedInputs = true, this.packedOutput = true, this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(e, t10), w.assertAndGetBroadcastShape(e, o); let i = "vec4(0.0)"; - n != null && (C.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); + n != null && (w.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset"), i = "getOffsetAtOutCoords()"); let p = "vec4(1.0)"; - s != null && (C.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` + s != null && (w.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale"), p = "getScaleAtOutCoords()"), this.outputShape = e, this.userCode = ` void main() { vec4 offset = ${i}; vec4 scale = ${p}; @@ -20100,25 +20100,25 @@ var Bh = class { `; } }; -var cee = ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o, mean: n, variance: s, offset: a, scale: i } = r16; +var K9 = ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o, mean: n, variance: s, offset: a, scale: i } = r15; y.assert(n.shape.length === s.shape.length, () => "Batch normalization gradient requires mean and variance to have equal ranks."), y.assert(a == null || n.shape.length === a.shape.length, () => "Batch normalization gradient requires mean and offset to have equal ranks."), y.assert(i == null || n.shape.length === i.shape.length, () => "Batch normalization gradient requires mean and scale to have equal ranks."); let { varianceEpsilon: p } = t10; p == null && (p = 1e-3); - let u = [o, n, s], l = null; - a != null && (l = a.shape, u.push(a)); - let c = null; - i != null && (c = i.shape, u.push(i)); - let m = A().getBool("WEBGL_PACK_NORMALIZATION") ? new Bh(o.shape, n.shape, s.shape, l, c, p) : new Lh(o.shape, n.shape, s.shape, l, c, p); + let u = [o, n, s], c = null; + a != null && (c = a.shape, u.push(a)); + let l = null; + i != null && (l = i.shape, u.push(i)); + let m = A().getBool("WEBGL_PACK_NORMALIZATION") ? new _h(o.shape, n.shape, s.shape, c, l, p) : new Th(o.shape, n.shape, s.shape, c, l, p); return e.runWebGLProgram(m, u, u[0].dtype); }; -var cF = { kernelName: Hn, backendName: "webgl", kernelFunc: cee }; -var zh = class { +var NA = { kernelName: In, backendName: "webgl", kernelFunc: K9 }; +var Eh = class { constructor(e) { this.variableNames = ["source"], this.outputShape = e, this.rank = e.length; let t10 = Re(this.rank); this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let o = mee(this.rank), n, s = e.map((a, i) => `sourceLoc.${F0[i]} = start[${i}] + coords.${F0[i]};`); + let o = q9(this.rank), n, s = e.map((a, i) => `sourceLoc.${wv[i]} = start[${i}] + coords.${wv[i]};`); n = ` ${t10} sourceLoc; ${t10} coords = getOutputCoords(); @@ -20132,18 +20132,18 @@ var zh = class { `; } }; -var F0 = ["x", "y", "z", "w", "u", "v"]; -function mee(r16) { - if (r16 === 1) +var wv = ["x", "y", "z", "w", "u", "v"]; +function q9(r15) { + if (r15 === 1) return "sourceLoc"; - if (r16 <= 6) - return F0.slice(0, r16).map((e) => "sourceLoc." + e).join(","); - throw Error(`Slicing for rank ${r16} is not yet supported`); + if (r15 <= 6) + return wv.slice(0, r15).map((e) => "sourceLoc." + e).join(","); + throw Error(`Slicing for rank ${r15} is not yet supported`); } -var Vh = class { +var $h = class { constructor(e) { this.variableNames = ["source"], this.packedInputs = true, this.packedOutput = true, this.outputShape = e, this.rank = e.length, this.customUniforms = [{ name: "start", arrayIndex: this.rank, type: "int" }]; - let t10 = Re(this.rank), o = At("coords", this.rank), n = At("sourceLoc", this.rank), s = this.rank === 1 ? "sourceLoc" : `vec2(${n.slice(-2).join()})`, a = `getChannel(getSource(${n.join()}), ${s})`, i = ` + let t10 = Re(this.rank), o = Rt("coords", this.rank), n = Rt("sourceLoc", this.rank), s = this.rank === 1 ? "sourceLoc" : `vec2(${n.slice(-2).join()})`, a = `getChannel(getSource(${n.join()}), ${s})`, i = ` result.x = ${a}; if (++${o[this.rank - 1]} < ${e[this.rank - 1]}) { ++${n[this.rank - 1]}; @@ -20161,7 +20161,7 @@ var Vh = class { } } `, u = this.rank <= 4 ? `sourceLoc = coords + - ${t10}(${e.map((l, c) => `start[${c}]`).join()});` : e.map((l, c) => `${n[c]} = ${o[c]} + start[${c}];`).join(` + ${t10}(${e.map((c, l) => `start[${l}]`).join()});` : e.map((c, l) => `${n[l]} = ${o[l]} + start[${l}];`).join(` `); this.userCode = ` void main() { @@ -20176,113 +20176,113 @@ var Vh = class { `; } }; -function dee(r16, e, t10, o) { - let n = o.texData.get(r16.dataId), s = o.makeTensorInfo(t10, r16.dtype), a = o.texData.get(s.dataId); - Object.assign(a, n), a.refCount = 1, a.shape = t10, a.dtype = r16.dtype; - let i = nt.computeFlatOffset(e, y.computeStrides(r16.shape)); - n.slice && (i += n.slice.flatOffset), a.slice = { flatOffset: i, origDataId: n.slice && n.slice.origDataId || r16.dataId }; +function j9(r15, e, t10, o) { + let n = o.texData.get(r15.dataId), s = o.makeTensorInfo(t10, r15.dtype), a = o.texData.get(s.dataId); + Object.assign(a, n), a.refCount = 1, a.shape = t10, a.dtype = r15.dtype; + let i = pt.computeFlatOffset(e, y.computeStrides(r15.shape)); + n.slice && (i += n.slice.flatOffset), a.slice = { flatOffset: i, origDataId: n.slice && n.slice.origDataId || r15.dataId }; let p = o.dataRefCount.get(a.slice.origDataId) || 1; return o.dataRefCount.set(a.slice.origDataId, p + 1), s; } -function Js(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, size: a } = o, [i, p] = nt.parseSliceParams(n, s, a); - if (nt.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) +function Gs(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, size: a } = o, [i, p] = pt.parseSliceParams(n, s, a); + if (pt.assertParamsValid(n, i, p), y.sizeFromShape(p) === 0) return t10.makeTensorInfo(p, n.dtype, []); if (t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let c = t10.texData.get(n.dataId), m = tA(c.values, i, p, n.shape, n.dtype); + let l = t10.texData.get(n.dataId), m = gD(l.values, i, p, n.shape, n.dtype); return t10.makeTensorInfo(p, n.dtype, m); } - let { isPacked: u } = t10.texData.get(n.dataId), l = nt.isSliceContinous(n.shape, i, p); - if (u || !l) { - let c = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Vh(p) : new zh(p), m = [i]; - return t10.runWebGLProgram(c, [n], n.dtype, m); + let { isPacked: u } = t10.texData.get(n.dataId), c = pt.isSliceContinous(n.shape, i, p); + if (u || !c) { + let l = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new $h(p) : new Eh(p), m = [i]; + return t10.runWebGLProgram(l, [n], n.dtype, m); } - return t10.uploadToGPU(n.dataId), dee(n, i, p, t10); + return t10.uploadToGPU(n.dataId), j9(n, i, p, t10); } -var mF = { kernelName: _s, backendName: "webgl", kernelFunc: Js }; -var fee = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, crops: a } = o; +var TA = { kernelName: ha, backendName: "webgl", kernelFunc: Gs }; +var X9 = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, crops: a } = o; y.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"); - let i = s.reduce((b, w) => b * w), p = C.getReshaped(n.shape, s, i), u = C.getPermuted(p.length, s.length), l = C.getReshapedPermuted(n.shape, s, i), c = C.getSliceBeginCoords(a, s.length), m = C.getSliceSize(l, a, s.length), d = [], f = te({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = Ct({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: l } }), x = Js({ inputs: { x: g }, backend: t10, attrs: { begin: c, size: m } }); + let i = s.reduce((b, C) => b * C), p = w.getReshaped(n.shape, s, i), u = w.getPermuted(p.length, s.length), c = w.getReshapedPermuted(n.shape, s, i), l = w.getSliceBeginCoords(a, s.length), m = w.getSliceSize(c, a, s.length), d = [], f = te({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = bt({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: c } }), x = Gs({ inputs: { x: g }, backend: t10, attrs: { begin: l, size: m } }); return d.push(f), d.push(h), d.push(g), d.forEach((b) => t10.disposeIntermediateTensorInfo(b)), x; }; -var dF = { kernelName: ia, backendName: "webgl", kernelFunc: fee }; -function hee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a } = o, i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), u = Ch(i, p, s.dtype, s.shape, a); +var _A = { kernelName: Js, backendName: "webgl", kernelFunc: X9 }; +function Y9(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a } = o, i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), u = ph(i, p, s.dtype, s.shape, a); return t10.makeTensorInfo([a], s.dtype, u); } -var fF = { kernelName: Tn, backendName: "webgl", kernelFunc: hee }; -var gee = ` +var EA = { kernelName: Jo, backendName: "webgl", kernelFunc: Y9 }; +var Q9 = ` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); int ra = int(a.a) & int(b.a); return vec4(r, g, rb, ra); `; -var xee = ` +var Z9 = ` return float(int(a.r) & int(b.r)); `; -function yee(r16) { - let { inputs: e, backend: t10 } = r16, { a: o, b: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS"), a = A().getNumber("WEBGL_VERSION"); +function J9(r15) { + let { inputs: e, backend: t10 } = r15, { a: o, b: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS"), a = A().getNumber("WEBGL_VERSION"); if (t10.shouldExecuteOnCPU([o, n]) || a === 1) { - let p = t10.texData.get(o.dataId).values, u = t10.texData.get(n.dataId).values, [l, c] = kD(o.shape, n.shape, p, u, o.dtype), m = t10.makeTensorInfo(c, o.dtype), d = t10.texData.get(m.dataId); - return d.values = l, m; + let p = t10.texData.get(o.dataId).values, u = t10.texData.get(n.dataId).values, [c, l] = zR(o.shape, n.shape, p, u, o.dtype), m = t10.makeTensorInfo(l, o.dtype), d = t10.texData.get(m.dataId); + return d.values = c, m; } let i; - return s ? i = new eo(gee, o.shape, n.shape, false) : i = new Br(xee, o.shape, n.shape), t10.runWebGLProgram(i, [o, n], o.dtype); + return s ? i = new jr(Q9, o.shape, n.shape, false) : i = new Pr(Z9, o.shape, n.shape), t10.runWebGLProgram(i, [o, n], o.dtype); } -var hF = { kernelName: _n, backendName: "webgl", kernelFunc: yee }; -function bee(r16) { - let { inputs: e, backend: t10 } = r16, { s0: o, s1: n } = e, s = t10.readSync(o.dataId), a = t10.readSync(n.dataId), i = C.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var $A = { kernelName: qa, backendName: "webgl", kernelFunc: J9 }; +function eJ(r15) { + let { inputs: e, backend: t10 } = r15, { s0: o, s1: n } = e, s = t10.readSync(o.dataId), a = t10.readSync(n.dataId), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return t10.makeTensorInfo([i.length], "int32", Int32Array.from(i)); } -var gF = { kernelName: ua, backendName: "webgl", kernelFunc: bee }; -var Cee = "return float(a != b);"; -var P0 = st({ opSnippet: Cee, cpuKernelImpl: KD, dtype: "bool" }); -var xF = { kernelName: Ro, backendName: "webgl", kernelFunc: P0 }; -function _i(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.texData.get(o.dataId); - return Ft({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); -} -var yF = { kernelName: si, backendName: "webgl", kernelFunc: _i }; -var wee = "return float(int(x));"; -function bF(r16, e) { - let t10 = new nr(r16.shape, wee), o = e.runWebGLProgram(t10, [r16], "int32"); +var RA = { kernelName: ea, backendName: "webgl", kernelFunc: eJ }; +var tJ = "return float(a != b);"; +var Sv = nt({ opSnippet: tJ, cpuKernelImpl: iD, dtype: "bool" }); +var DA = { kernelName: Yn, backendName: "webgl", kernelFunc: Sv }; +function bi(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.texData.get(o.dataId); + return Dt({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); +} +var AA = { kernelName: Hi, backendName: "webgl", kernelFunc: bi }; +var rJ = "return float(int(x));"; +function FA(r15, e) { + let t10 = new tr(r15.shape, rJ), o = e.runWebGLProgram(t10, [r15], "int32"); return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -function O0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dtype: s } = o; +function Iv(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return Ft({ inputs: { x: n }, backend: t10 }); - let a = Yr(n.shape), i = O0({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = zr({ inputs: { real: i, imag: a }, backend: t10 }); + return Dt({ inputs: { x: n }, backend: t10 }); + let a = Gr(n.shape), i = Iv({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = Or({ inputs: { real: i, imag: a }, backend: t10 }); return a.dispose(), t10.disposeIntermediateTensorInfo(i), p; } if (n.dtype === "complex64") { - let a = _i({ inputs: { input: n }, backend: t10 }), i = O0({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); + let a = bi({ inputs: { input: n }, backend: t10 }), i = Iv({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); return t10.disposeIntermediateTensorInfo(a), i; } if (!y.hasEncodingLoss(n.dtype, s)) { - let a = Ft({ inputs: { x: n }, backend: t10 }); + let a = Dt({ inputs: { x: n }, backend: t10 }); return { dataId: a.dataId, shape: a.shape, dtype: s }; } if (t10.shouldExecuteOnCPU([n])) { - let a = t10.texData.get(n.dataId).values, [i, p, u] = ND(a, n.shape, n.dtype, s); + let a = t10.texData.get(n.dataId).values, [i, p, u] = VR(a, n.shape, n.dtype, s); return t10.makeTensorInfo(i, p, u); } if (s === "int32") - return bF(n, t10); + return FA(n, t10); if (s === "bool") { - let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = P0({ inputs: { a: n, b: a }, backend: t10 }); + let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = Sv({ inputs: { a: n, b: a }, backend: t10 }); return t10.disposeIntermediateTensorInfo(a), p; } throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); } -var CF = { kernelName: ho, backendName: "webgl", kernelFunc: O0 }; -var wF = "return ceil(x);"; -var See = xe({ opSnippet: wF, packedOpSnippet: wF, cpuKernelImpl: TD }); -var SF = { kernelName: go, backendName: "webgl", kernelFunc: See }; -var Wh = class { +var PA = { kernelName: yo, backendName: "webgl", kernelFunc: Iv }; +var OA = "return ceil(x);"; +var oJ = xe({ opSnippet: OA, packedOpSnippet: OA, cpuKernelImpl: WR }); +var MA = { kernelName: en, backendName: "webgl", kernelFunc: oJ }; +var Rh = class { constructor(e) { this.variableNames = ["A"], this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = e, this.userCode = ` @@ -20298,7 +20298,7 @@ var Wh = class { `; } }; -var Uh = class { +var Dh = class { constructor(e) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "minVal", type: "float" }, { name: "maxVal", type: "float" }], this.outputShape = e, this.userCode = ` void main() { @@ -20314,14 +20314,14 @@ var Uh = class { `; } }; -function Iee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i; - A().getBool("WEBGL_PACK_CLIP") ? i = new Uh(n.shape) : i = new Wh(n.shape); +function nJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i; + A().getBool("WEBGL_PACK_CLIP") ? i = new Dh(n.shape) : i = new Rh(n.shape); let p = [[s], [a]]; return t10.runWebGLProgram(i, [n], n.dtype, p); } -var IF = { kernelName: Go, backendName: "webgl", kernelFunc: Iee }; -var Gh = class { +var LA = { kernelName: bo, backendName: "webgl", kernelFunc: nJ }; +var Ah = class { constructor(e) { this.variableNames = ["real", "imag"], this.outputShape = e, this.userCode = ` void main() { @@ -20339,17 +20339,17 @@ var Gh = class { `; } }; -function vF(r16, e) { - return { dataId: e.dataId, dtype: e.dtype, shape: r16.shape }; +function BA(r15, e) { + return { dataId: e.dataId, dtype: e.dtype, shape: r15.shape }; } -function vee(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = t10.texData.get(o.dataId), s = new Gh(o.shape), a = [vF(o, n.complexTensorInfos.real), vF(o, n.complexTensorInfos.imag)]; +function sJ(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = t10.texData.get(o.dataId), s = new Ah(o.shape), a = [BA(o, n.complexTensorInfos.real), BA(o, n.complexTensorInfos.imag)]; return t10.runWebGLProgram(s, a, a[0].dtype); } -var kF = { kernelName: Wi, backendName: "webgl", kernelFunc: vee }; -var Hh = class { +var zA = { kernelName: Ai, backendName: "webgl", kernelFunc: sJ }; +var Fh = class { constructor(e) { - this.outputShape = [], this.outputShape = C.computeOutShape(e, 1), this.variableNames = e.map((a, i) => `T${i}`); + this.outputShape = [], this.outputShape = w.computeOutShape(e, 1), this.variableNames = e.map((a, i) => `T${i}`); let t10 = new Array(e.length - 1); t10[0] = e[0][1]; for (let a = 1; a < t10.length; a++) @@ -20372,33 +20372,33 @@ var Hh = class { `; } }; -var qh = class { +var Oh = class { constructor(e, t10) { - this.packedInputs = true, this.packedOutput = true, this.outputShape = [], this.outputShape = C.computeOutShape(e, t10); - let o = this.outputShape, n = o.length, s = Re(n), a = At("coords", n), i = ["x", "y", "z", "w", "u", "v"].slice(0, n); + this.packedInputs = true, this.packedOutput = true, this.outputShape = [], this.outputShape = w.computeOutShape(e, t10); + let o = this.outputShape, n = o.length, s = Re(n), a = Rt("coords", n), i = ["x", "y", "z", "w", "u", "v"].slice(0, n); this.variableNames = e.map((h, g) => `T${g}`); let p = new Array(e.length - 1); p[0] = e[0][t10]; for (let h = 1; h < p.length; h++) p[h] = p[h - 1] + e[h][t10]; - let u = i[t10], l = i.slice(-2), c = i.join(), m = `if (${u} < ${p[0]}) { + let u = i[t10], c = i.slice(-2), l = i.join(), m = `if (${u} < ${p[0]}) { return getChannel( - getT0(${c}), vec2(${l.join()})); + getT0(${l}), vec2(${c.join()})); }`; for (let h = 1; h < p.length; h++) { let g = p[h - 1]; m += ` if (${u} < ${p[h]} && ${u} >= ${p[h - 1]}) { return getChannel( - getT${h}(${Kh(i, u, g)}), - vec2(${Kh(l, u, g)})); + getT${h}(${Ph(i, u, g)}), + vec2(${Ph(c, u, g)})); }`; } let d = p.length, f = p[p.length - 1]; m += ` return getChannel( - getT${d}(${Kh(i, u, f)}), - vec2(${Kh(l, u, f)}));`, this.userCode = ` + getT${d}(${Ph(i, u, f)}), + vec2(${Ph(c, u, f)}));`, this.userCode = ` float getValue(${i.map((h) => "int " + h)}) { ${m} } @@ -20427,73 +20427,73 @@ var qh = class { `; } }; -function Kh(r16, e, t10) { - let o = r16.indexOf(e); - return r16.map((s, a) => a === o ? `${s} - ${t10}` : s).join(); +function Ph(r15, e, t10) { + let o = r15.indexOf(e); + return r15.map((s, a) => a === o ? `${s} - ${t10}` : s).join(); } -function Ep(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.texData.get(o.dataId); - return Ft({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); +function Ip(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.texData.get(o.dataId); + return Dt({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); } -var NF = { kernelName: Qi, backendName: "webgl", kernelFunc: Ep }; -function Kl(r16, e, t10) { - let o = r16[0].dtype; +var VA = { kernelName: Wi, backendName: "webgl", kernelFunc: Ip }; +function Vc(r15, e, t10) { + let o = r15[0].dtype; if (o === "complex64") { - let d = r16.map((b) => _i({ inputs: { input: b }, backend: t10 })), f = r16.map((b) => Ep({ inputs: { input: b }, backend: t10 })), h = Kl(d, e, t10), g = Kl(f, e, t10), x = zr({ inputs: { real: h, imag: g }, backend: t10 }); + let d = r15.map((b) => bi({ inputs: { input: b }, backend: t10 })), f = r15.map((b) => Ip({ inputs: { input: b }, backend: t10 })), h = Vc(d, e, t10), g = Vc(f, e, t10), x = Or({ inputs: { real: h, imag: g }, backend: t10 }); return d.forEach((b) => t10.disposeIntermediateTensorInfo(b)), f.forEach((b) => t10.disposeIntermediateTensorInfo(b)), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), x; } - let n = t10.shouldExecuteOnCPU(r16); + let n = t10.shouldExecuteOnCPU(r15); if (o === "string" && (n = true), n) { - let d = r16.map((S) => { - let T = [-1, y.sizeFromShape(S.shape.slice(e))]; - return te({ inputs: { x: S }, backend: t10, attrs: { shape: T } }); - }), f = d.map((S) => ({ vals: t10.readSync(S.dataId), shape: S.shape })), h = C.computeOutShape(d.map((S) => S.shape), 1), g = d[0].shape[0] === 1, x = _D(f, h, o, g), b = C.computeOutShape(r16.map((S) => S.shape), e), w = t10.makeTensorInfo(b, o, x); - return d.forEach((S) => t10.disposeIntermediateTensorInfo(S)), w; + let d = r15.map((S) => { + let _ = [-1, y.sizeFromShape(S.shape.slice(e))]; + return te({ inputs: { x: S }, backend: t10, attrs: { shape: _ } }); + }), f = d.map((S) => ({ vals: t10.readSync(S.dataId), shape: S.shape })), h = w.computeOutShape(d.map((S) => S.shape), 1), g = d[0].shape[0] === 1, x = UR(f, h, o, g), b = w.computeOutShape(r15.map((S) => S.shape), e), C = t10.makeTensorInfo(b, o, x); + return d.forEach((S) => t10.disposeIntermediateTensorInfo(S)), C; } - let s = r16.filter((d) => y.sizeFromShape(d.shape) > 0), a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && s[0].shape.length > 1; + let s = r15.filter((d) => y.sizeFromShape(d.shape) > 0), a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") && s[0].shape.length > 1; if (s.length === 1) { - let d = a ? new nr(r16[0].shape, Ha) : new Lr(r16[0].shape, Ha); - return t10.runWebGLProgram(d, r16, o); + let d = a ? new tr(r15[0].shape, La) : new Fr(r15[0].shape, La); + return t10.runWebGLProgram(d, r15, o); } let i = A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER"); if (s.length > i) { let d = []; for (let h = 0; h < s.length; h += i) { let g = s.slice(h, h + i); - d.push(Kl(g, e, t10)); + d.push(Vc(g, e, t10)); } - let f = Kl(d, e, t10); + let f = Vc(d, e, t10); for (let h of d) t10.disposeIntermediateTensorInfo(h); return f; } if (a) { - let d = new qh(s.map((f) => f.shape), e); + let d = new Oh(s.map((f) => f.shape), e); return t10.runWebGLProgram(d, s, o); } - let { tensors2D: p, outShape: u } = kee(s, e, t10), l = new Hh(p.map((d) => d.shape)), c = t10.runWebGLProgram(l, p, o); + let { tensors2D: p, outShape: u } = aJ(s, e, t10), c = new Fh(p.map((d) => d.shape)), l = t10.runWebGLProgram(c, p, o); p.forEach((d) => t10.disposeIntermediateTensorInfo(d)); - let m = te({ inputs: { x: c }, attrs: { shape: u }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(c), m; + let m = te({ inputs: { x: l }, attrs: { shape: u }, backend: t10 }); + return t10.disposeIntermediateTensorInfo(l), m; } -function kee(r16, e, t10) { - let o = C.computeOutShape(r16.map((s) => s.shape), e); - return { tensors2D: r16.map((s) => te({ inputs: { x: s }, attrs: { shape: [-1, y.sizeFromShape(s.shape.slice(e))] }, backend: t10 })), outShape: o }; +function aJ(r15, e, t10) { + let o = w.computeOutShape(r15.map((s) => s.shape), e); + return { tensors2D: r15.map((s) => te({ inputs: { x: s }, attrs: { shape: [-1, y.sizeFromShape(s.shape.slice(e))] }, backend: t10 })), outShape: o }; } -function M0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); - C.assertParamsConsistent(a, s); - let i = C.computeOutShape(e.map((u) => u.shape), s); +function vv(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); + w.assertParamsConsistent(a, s); + let i = w.computeOutShape(e.map((u) => u.shape), s); if (y.sizeFromShape(i) === 0) return t10.makeTensorInfo(i, e[0].dtype, []); let p = e.filter((u) => y.sizeFromShape(u.shape) > 0); - return p.length === 1 ? Ft({ inputs: { x: p[0] }, backend: t10 }) : Kl(p, s, t10); + return p.length === 1 ? Dt({ inputs: { x: p[0] }, backend: t10 }) : Vc(p, s, t10); } -var TF = { kernelName: pa, backendName: "webgl", kernelFunc: M0 }; -var ql = class { +var WA = { kernelName: ta, backendName: "webgl", kernelFunc: vv }; +var Wc = class { constructor(e, t10 = false, o = null, n = false, s = false) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let a = e.padInfo.top, i = e.padInfo.left, p = e.strideHeight, u = e.strideWidth, l = e.dilationHeight, c = e.dilationWidth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4, g = e.dataFormat === "channelsLast", x = g ? 1 : 2, b = g ? 2 : 3, w = g ? 3 : 1, S = "", k = ""; + let a = e.padInfo.top, i = e.padInfo.left, p = e.strideHeight, u = e.strideWidth, c = e.dilationHeight, l = e.dilationWidth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4, g = e.dataFormat === "channelsLast", x = g ? 1 : 2, b = g ? 2 : 3, C = g ? 3 : 1, S = "", k = ""; o && (n ? S = `float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} @@ -20505,7 +20505,7 @@ var ql = class { ${o} } `, k = "result = activation(result);"); - let T = t10 ? "result += getBiasAtOutCoords();" : ""; + let _ = t10 ? "result += getBiasAtOutCoords();" : ""; t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` ${S} @@ -20515,7 +20515,7 @@ var ql = class { void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d2 = coords[${w}]; + int d2 = coords[${C}]; ivec2 xRCCorner = ivec2(coords[${x}], coords[${b}]) * strides - pads; @@ -20526,14 +20526,14 @@ var ql = class { // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${m}; wR++) { - int xR = xRCorner + wR * ${l}; + int xR = xRCorner + wR * ${c}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { - int xC = xCCorner + wC * ${c}; + int xC = xCCorner + wC * ${l}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -20626,17 +20626,17 @@ var ql = class { } float result = dotProd; - ${T} + ${_} ${k} setOutput(result); } `; } }; -var jh = class { +var Mh = class { constructor(e) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let t10 = e.padInfo.front, o = e.padInfo.top, n = e.padInfo.left, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, l = e.dilationWidth, c = e.filterDepth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4; + let t10 = e.padInfo.front, o = e.padInfo.top, n = e.padInfo.left, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = e.dilationDepth, u = e.dilationHeight, c = e.dilationWidth, l = e.filterDepth, m = e.filterHeight, d = e.filterWidth, f = Math.floor(e.inChannels / 4) * 4, h = e.inChannels % 4; this.userCode = ` const ivec3 strides = ivec3(${s}, ${a}, ${i}); const ivec3 pads = ivec3(${t10}, ${o}, ${n}); @@ -20655,7 +20655,7 @@ var jh = class { // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; - for (int wF = 0; wF < ${c}; wF++) { + for (int wF = 0; wF < ${l}; wF++) { int xF = xFCorner + wF * ${p}; if (xF < 0 || xF >= ${e.inDepth}) { @@ -20670,7 +20670,7 @@ var jh = class { } for (int wC = 0; wC < ${d}; wC++) { - int xC = xCCorner + wC * ${l}; + int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -20728,13 +20728,13 @@ var jh = class { `; } }; -var jl = class { +var Uc = class { constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); - let a = e.padInfo.left, i = e.strideWidth, p = e.dilationWidth, u = e.filterHeight, l = e.filterWidth, c = l, m = ` + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ut(this.outputShape.length); + let a = e.padInfo.left, i = e.strideWidth, p = e.dilationWidth, u = e.filterHeight, c = e.filterWidth, l = c, m = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; - for (let g = 0; g < l; g++) + for (let g = 0; g < c; g++) m += ` vec4 xTexelC${g * 2}; int xTexelC${g * 2}Ready; @@ -20745,7 +20745,7 @@ var jl = class { for (int r = 0; r < ${u}; r++) { for (int d1 = 0; d1 < ${e.inChannels}; d1 += 2) { `; - for (let g = 0; g < l; g++) + for (let g = 0; g < c; g++) m += ` xTexelC${g * 2} = vec4(0.0); xTexelC${g * 2}Ready = 0; @@ -20756,12 +20756,12 @@ var jl = class { xR = xRCorner + r * dilations[0]; if (xR >=0 && xR < inDims[0]) { `; - for (let g = 0; g < (c + 1) / 2; g++) { + for (let g = 0; g < (l + 1) / 2; g++) { let x = g * 2; if (m += ` xC = xCCorner + ${x * p}; `, i === 1) { - if (x < l && (a % 2 === 1 ? (m += ` + if (x < c && (a % 2 === 1 ? (m += ` xCOffset = xC + 1; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { xTexelC${x} = getX(batch, xR, xCOffset, d1); @@ -20801,7 +20801,7 @@ var jl = class { } xC${x} = xTexelC${x}; - `, x + 1 < l)) { + `, x + 1 < c)) { let b = a % 2 === 0 ? y.nearestLargerEven(p) : p; p % 2 === 0 && a % 2 === 1 || p % 2 !== 0 && a % 2 !== 1 ? (m += ` xCOffset = xC + imod(pads[1], 2) + ${b}; @@ -20843,7 +20843,7 @@ var jl = class { `; } } else - x < l && (a % 2 === 1 ? (m += ` + x < c && (a % 2 === 1 ? (m += ` xCOffset = xC + 1 - strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { xTexelC${x} = getX(batch, xR, xCOffset, d1); @@ -20866,7 +20866,7 @@ var jl = class { } xC${x} = vec4(xTexelC${x}.zw, xTexelC${x + 1}.zw); - `, x + 1 < l && (m += ` + `, x + 1 < c && (m += ` final = vec4(0.0); xCOffset = xC + 1 + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1]) { @@ -20893,16 +20893,16 @@ var jl = class { xC${x} = vec4( xTexelC${x}.xy, xTexelC${x + 1}.xy); - `, x + 1 < l && (m += ` + `, x + 1 < c && (m += ` xC${x + 1} = vec4(xTexelC${x}.zw, xTexelC${x + 1}.zw); `))); - x < l && (m += ` + x < c && (m += ` wTexel = getW(r, ${x}, d1, d2); dotProd += xC${x}.xxzz * vec4(wTexel.xy, wTexel.xy); if(d1 + 1 < ${e.inChannels}) { dotProd += xC${x}.yyww * vec4(wTexel.zw, wTexel.zw); } - `, x + 1 < l && (m += ` + `, x + 1 < c && (m += ` wTexel = getW(r, ${x + 1}, d1, d2); dotProd += xC${x + 1}.xxzz * vec4(wTexel.xy, wTexel.xy); if(d1 + 1 < ${e.inChannels}) { @@ -20952,15 +20952,15 @@ var jl = class { `; } }; -var Xh = class { +var Lh = class { constructor(e, t10) { - this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec4" }, { name: "pad", type: "ivec2" }, { name: "stride", type: "ivec2" }, { name: "dilation", type: "ivec2" }, { name: "inChannels", type: "int" }, { name: "itemsPerBlockRow", type: "int" }, { name: "outWidth", type: "int" }], this.outputShape = e, this.enableShapeUniforms = lt(this.outputShape.length); - let { dataFormat: o } = t10, n = kt(), s = o === "channelsLast", a = s ? 1 : 2, i = s ? 2 : 3, p = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${e[2]} && pos < ${e[1]}) {`, u = ""; - for (let l = 0; l <= 1; l++) - for (let c = 0; c <= 1; c++) + this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "inputShape", type: "ivec4" }, { name: "pad", type: "ivec2" }, { name: "stride", type: "ivec2" }, { name: "dilation", type: "ivec2" }, { name: "inChannels", type: "int" }, { name: "itemsPerBlockRow", type: "int" }, { name: "outWidth", type: "int" }], this.outputShape = e, this.enableShapeUniforms = ut(this.outputShape.length); + let { dataFormat: o } = t10, n = It(), s = o === "channelsLast", a = s ? 1 : 2, i = s ? 2 : 3, p = this.enableShapeUniforms ? "if(blockIndex < outShape[2] && pos < outShape[1]) {" : `if(blockIndex < ${e[2]} && pos < ${e[1]}) {`, u = ""; + for (let c = 0; c <= 1; c++) + for (let l = 0; l <= 1; l++) u += ` - blockIndex = rc.z + ${c}; - pos = rc.y + ${l}; + blockIndex = rc.z + ${l}; + pos = rc.y + ${c}; ${p} offsetY = int(blockIndex / outWidth) * stride[0] - pad[0]; @@ -20980,12 +20980,12 @@ var Xh = class { if (${s}) { innerDims = vec2(d1, ch); - result[${l * 2 + c}] = getChannel( + result[${c * 2 + l}] = getChannel( getA(rc.x, d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); - result[${l * 2 + c}] = getChannel( + result[${c * 2 + l}] = getChannel( getA(rc.x, ch, int(innerDims.x), int(innerDims.y)), innerDims); } @@ -21009,50 +21009,50 @@ var Xh = class { `; } }; -function Yh(r16, e) { - let t10 = r16.length; - return t10 >= 3 ? e ? [...r16.slice(0, -3), r16[t10 - 3] * r16[t10 - 2], r16[t10 - 1]] : [...r16.slice(0, -3), r16[t10 - 3], r16[t10 - 2] * r16[t10 - 1]] : !e && t10 === 1 && r16[0] > 1 ? [r16[0], 1] : null; +function Bh(r15, e) { + let t10 = r15.length; + return t10 >= 3 ? e ? [...r15.slice(0, -3), r15[t10 - 3] * r15[t10 - 2], r15[t10 - 1]] : [...r15.slice(0, -3), r15[t10 - 3], r15[t10 - 2] * r15[t10 - 1]] : !e && t10 === 1 && r15[0] > 1 ? [r15[0], 1] : null; } -function Qh({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = r16.shape, u = o.texData.get(r16.dataId), l = t10.inChannels, c = p[0] * p[1] * p[2], m = t10.outChannels, d = t10.dataFormat === "channelsLast", f = false, h = false, g, x = []; +function zh({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = r15.shape, u = o.texData.get(r15.dataId), c = t10.inChannels, l = p[0] * p[1] * p[2], m = t10.outChannels, d = t10.dataFormat === "channelsLast", f = false, h = false, g, x = []; if (s != null) { - let S = Yh(s.shape, d); + let S = Bh(s.shape, d); S != null && (s = te({ inputs: { x: s }, backend: o, attrs: { shape: S } }), x.push(s)); } if (n != null) { - let S = Yh(n.shape, d); + let S = Bh(n.shape, d); S != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: S } }), x.push(n)); } - if (!((c === 1 || m === 1) && l > A0) && u.isPacked && d && u.texture != null && p[2] % 2 !== 0 && y.arraysEqual(u.shape.slice(-3), p.slice(-3))) { - let S = p[0] * p[1] * (p[2] + 1), k = { dataId: r16.dataId, shape: [1, S, t10.inChannels], dtype: r16.dtype }, T = u.shape; - u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, y.assert(vu(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); - let E = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); - x.push(E); - let R = _p({ a: k, b: E, backend: o, transposeA: f, transposeB: h, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), D = o.texData.get(R.dataId); - y.assert(D.isPacked, () => "batchMatMul result is expected to be packed"), u.shape = T, D.shape = t10.outShape, g = Ft({ inputs: { x: R }, backend: o }), g.shape = t10.outShape, x.push(R); + if (!((l === 1 || m === 1) && c > Cv) && u.isPacked && d && u.texture != null && p[2] % 2 !== 0 && y.arraysEqual(u.shape.slice(-3), p.slice(-3))) { + let S = p[0] * p[1] * (p[2] + 1), k = { dataId: r15.dataId, shape: [1, S, t10.inChannels], dtype: r15.dtype }, _ = u.shape; + u.shape = u.shape.slice(), u.shape[u.shape.length - 2]++, y.assert(xu(u.shape, k.shape), () => `packed reshape ${u.shape} to ${k.shape} isn't free`); + let $ = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); + x.push($); + let R = Sp({ a: k, b: $, backend: o, transposeA: f, transposeB: h, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), D = o.texData.get(R.dataId); + y.assert(D.isPacked, () => "batchMatMul result is expected to be packed"), u.shape = _, D.shape = t10.outShape, g = Dt({ inputs: { x: R }, backend: o }), g.shape = t10.outShape, x.push(R); } else { - let S = t10.outHeight * t10.outWidth, k = te({ inputs: { x: r16 }, backend: o, attrs: { shape: d ? [t10.batchSize, S, t10.inChannels] : [t10.batchSize, t10.inChannels, S] } }), T = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }), E = _p({ a: d ? k : T, b: d ? T : k, transposeA: !d, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); - g = te({ inputs: { x: E }, backend: o, attrs: { shape: t10.outShape } }), x.push(k), x.push(T), x.push(E); + let S = t10.outHeight * t10.outWidth, k = te({ inputs: { x: r15 }, backend: o, attrs: { shape: d ? [t10.batchSize, S, t10.inChannels] : [t10.batchSize, t10.inChannels, S] } }), _ = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }), $ = Sp({ a: d ? k : _, b: d ? _ : k, transposeA: !d, transposeB: h, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); + g = te({ inputs: { x: $ }, backend: o, attrs: { shape: t10.outShape } }), x.push(k), x.push(_), x.push($); } for (let S of x) o.disposeIntermediateTensorInfo(S); return g; } -function Zh({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let { filterWidth: p, filterHeight: u, inChannels: l, outWidth: c, outHeight: m, dataFormat: d } = t10, f = d === "channelsLast", h = p * u * l, g = m * c, x = [t10.batchSize, h, g], b = true, w = false, S = []; +function Vh({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let { filterWidth: p, filterHeight: u, inChannels: c, outWidth: l, outHeight: m, dataFormat: d } = t10, f = d === "channelsLast", h = p * u * c, g = m * l, x = [t10.batchSize, h, g], b = true, C = false, S = []; if (s != null) { - let q = Yh(s.shape, f); + let q = Bh(s.shape, f); q != null && (s = te({ inputs: { x: s }, backend: o, attrs: { shape: q } }), S.push(s)); } if (n != null) { - let q = Yh(n.shape, f); + let q = Bh(n.shape, f); q != null && (n = te({ inputs: { x: n }, backend: o, attrs: { shape: q } }), S.push(n)); } let k = te({ inputs: { x: e }, backend: o, attrs: { shape: [1, h, y.sizeFromShape(e.shape) / h] } }); S.push(k); - let T = new Xh(x, t10), E = [r16.shape, [t10.padInfo.top, t10.padInfo.left], [t10.strideHeight, t10.strideWidth], [t10.dilationHeight, t10.dilationWidth], [t10.inChannels], [t10.filterWidth * t10.inChannels], [t10.outWidth]], R = o.runWebGLProgram(T, [r16], "float32", E), D = te({ inputs: { x: R }, backend: o, attrs: { shape: x } }); + let _ = new Lh(x, t10), $ = [r15.shape, [t10.padInfo.top, t10.padInfo.left], [t10.strideHeight, t10.strideWidth], [t10.dilationHeight, t10.dilationWidth], [t10.inChannels], [t10.filterWidth * t10.inChannels], [t10.outWidth]], R = o.runWebGLProgram(_, [r15], "float32", $), D = te({ inputs: { x: R }, backend: o, attrs: { shape: x } }); S.push(R), S.push(D); - let F = n != null, O = s != null, M = i === "leakyrelu", L = i ? Ti(i, true) : null, B = new Hl(f ? D.shape : k.shape, f ? k.shape : D.shape, f ? [t10.batchSize, g, t10.outChannels] : [t10.batchSize, t10.outChannels, g], b, w, F, L, O, M), z = f ? [D, k] : [k, D]; + let P = n != null, O = s != null, M = i === "leakyrelu", L = i ? yi(i, true) : null, B = new zc(f ? D.shape : k.shape, f ? k.shape : D.shape, f ? [t10.batchSize, g, t10.outChannels] : [t10.batchSize, t10.outChannels, g], b, C, P, L, O, M), z = f ? [D, k] : [k, D]; if (n && z.push(n), O && z.push(s), M) { let q = o.makeTensorInfo([], "float32", y.createScalarValue(a, "float32")); z.push(q), S.push(q); @@ -21063,24 +21063,24 @@ function Zh({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, prel o.disposeIntermediateTensorInfo(q); return j; } -function Nee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: l } = o, c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, s.shape, a, u, i, l, false, c), d; +function iJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l), d; if (m.filterHeight === 1 && m.filterWidth === 1 && m.dilationHeight === 1 && m.dilationWidth === 1 && m.strideHeight === 1 && m.strideWidth === 1 && (m.padInfo.type === "SAME" || m.padInfo.type === "VALID")) - d = Qh({ x: n, filter: s, convInfo: m, backend: t10 }); - else if (m.strideWidth <= 2 && c === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { - let h = new jl(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; + d = zh({ x: n, filter: s, convInfo: m, backend: t10 }); + else if (m.strideWidth <= 2 && l === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { + let h = new Uc(m), g = [[m.padInfo.top, m.padInfo.left], [m.strideHeight, m.strideWidth], [m.dilationHeight, m.dilationWidth], [m.inHeight, m.inWidth]]; d = t10.runWebGLProgram(h, [n, s], "float32", g); } else if (A().getBool("WEBGL_CONV_IM2COL")) - d = Zh({ x: n, filter: s, convInfo: m, backend: t10 }); + d = Vh({ x: n, filter: s, convInfo: m, backend: t10 }); else { - let h = new ql(m); + let h = new Wc(m); d = t10.runWebGLProgram(h, [n, s], "float32"); } let f = te({ inputs: { x: d }, backend: t10, attrs: { shape: m.outShape } }); return t10.disposeIntermediateTensorInfo(d), f; } -var _F = { kernelName: En, backendName: "webgl", kernelFunc: Nee }; -var Jh = class { +var UA = { kernelName: tn, backendName: "webgl", kernelFunc: iJ }; +var Wh = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; let t10 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.dataFormat === "channelsLast"; @@ -21124,19 +21124,19 @@ var Jh = class { `; } }; -var eg = class { +var Uh = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; - let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dataFormat === "channelsLast", i = t10 - 1 - e.padInfo.top, p = o - 1 - e.padInfo.left, u = a ? 1 : 2, l = a ? 2 : 3, c = a ? 3 : 1; + let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = e.dataFormat === "channelsLast", i = t10 - 1 - e.padInfo.top, p = o - 1 - e.padInfo.left, u = a ? 1 : 2, c = a ? 2 : 3, l = a ? 3 : 1; this.userCode = ` const ivec2 pads = ivec2(${i}, ${p}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d1 = coords[${c}]; + int d1 = coords[${l}]; - ivec2 dyCorner = ivec2(coords[${u}], coords[${l}]) - pads; + ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; @@ -21184,7 +21184,7 @@ var eg = class { `; } }; -var tg = class { +var Gh = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; let t10 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.padInfo.front, a = e.padInfo.top, i = e.padInfo.left; @@ -21233,12 +21233,12 @@ var tg = class { `; } }; -var rg = class { +var Hh = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; - let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = t10 - 1 - e.padInfo.front, u = o - 1 - e.padInfo.top, l = n - 1 - e.padInfo.left; + let t10 = e.filterDepth, o = e.filterHeight, n = e.filterWidth, s = e.strideDepth, a = e.strideHeight, i = e.strideWidth, p = t10 - 1 - e.padInfo.front, u = o - 1 - e.padInfo.top, c = n - 1 - e.padInfo.left; this.userCode = ` - const ivec3 pads = ivec3(${p}, ${u}, ${l}); + const ivec3 pads = ivec3(${p}, ${u}, ${c}); void main() { ivec5 coords = getOutputCoords(); @@ -21297,14 +21297,14 @@ var rg = class { `; } }; -function Tee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: l } = o, c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, l, a, 1, i, u, false, c), d = new Jh(m); +function uJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), d = new Wh(m); return t10.runWebGLProgram(d, [n, s], "float32"); } -var EF = { kernelName: Ui, backendName: "webgl", kernelFunc: Tee }; -var og = class { +var GA = { kernelName: Fi, backendName: "webgl", kernelFunc: uJ }; +var Kh = class { constructor(e) { - this.variableNames = ["dy", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "strides", type: "vec2" }], this.outputShape = e.inShape, this.enableShapeUniforms = lt(this.outputShape.length); + this.variableNames = ["dy", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "strides", type: "vec2" }], this.outputShape = e.inShape, this.enableShapeUniforms = ut(this.outputShape.length); let t10 = e.filterHeight, o = e.filterWidth, n = t10 - 1 - e.padInfo.top, s = o - 1 - e.padInfo.left; this.userCode = ` const ivec2 pads = ivec2(${n}, ${s}); @@ -21383,58 +21383,58 @@ var og = class { `; } }; -function _ee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: l } = o, c = C.convertConv2DDataFormat(u), m = C.computeConv2DInfo(a, s.shape, i, 1, p, l, false, c); - if (A().getBool("WEBGL_PACK_CONV2DTRANSPOSE") && c === "channelsLast") { - let d = [[m.strideHeight, m.strideWidth]], f = new og(m); +function pJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(u), m = w.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l); + if (A().getBool("WEBGL_PACK_CONV2DTRANSPOSE") && l === "channelsLast") { + let d = [[m.strideHeight, m.strideWidth]], f = new Kh(m); return t10.runWebGLProgram(f, [n, s], "float32", d); } else { - let d = new eg(m); + let d = new Uh(m); return t10.runWebGLProgram(d, [n, s], "float32"); } } -var $F = { kernelName: $n, backendName: "webgl", kernelFunc: _ee }; -function Eee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = C.computeConv3DInfo(n.shape, s.shape, a, p, i), l = new jh(u); - return t10.runWebGLProgram(l, [n, s], "float32"); +var HA = { kernelName: rn, backendName: "webgl", kernelFunc: pJ }; +function cJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = new Mh(u); + return t10.runWebGLProgram(c, [n, s], "float32"); } -var RF = { kernelName: Rn, backendName: "webgl", kernelFunc: Eee }; -function $ee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = C.computeConv3DInfo(n.shape, p, a, 1, i), l = new tg(u); - return t10.runWebGLProgram(l, [n, s], "float32"); +var KA = { kernelName: on, backendName: "webgl", kernelFunc: cJ }; +function lJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = new Gh(u); + return t10.runWebGLProgram(c, [n, s], "float32"); } -var DF = { kernelName: ti, backendName: "webgl", kernelFunc: $ee }; -function Ree(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o, u = C.computeConv3DInfo(p, s.shape, i, 1, a), l = new rg(u); - return t10.runWebGLProgram(l, [n, s], "float32"); +var qA = { kernelName: ja, backendName: "webgl", kernelFunc: lJ }; +function mJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o, u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = new Hh(u); + return t10.runWebGLProgram(c, [n, s], "float32"); } -var AF = { kernelName: Dn, backendName: "webgl", kernelFunc: Ree }; -var Dee = sn + ` +var jA = { kernelName: nn, backendName: "webgl", kernelFunc: mJ }; +var dJ = Fo + ` return cos(x); `; -var Aee = ` +var fJ = ` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${to} + ${Xr} return result; `; -var Fee = xe({ opSnippet: Dee, packedOpSnippet: Aee }); -var FF = { kernelName: An, backendName: "webgl", kernelFunc: Fee }; -var Pee = ` +var hJ = xe({ opSnippet: dJ, packedOpSnippet: fJ }); +var XA = { kernelName: sn, backendName: "webgl", kernelFunc: hJ }; +var gJ = ` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `; -var Oee = xe({ opSnippet: Pee }); -var PF = { kernelName: Fn, backendName: "webgl", kernelFunc: Oee }; -var ng = class { +var xJ = xe({ opSnippet: gJ }); +var YA = { kernelName: an, backendName: "webgl", kernelFunc: xJ }; +var qh = class { constructor(e, t10, o, n, s) { this.variableNames = ["Image", "Boxes", "BoxInd"], this.outputShape = []; - let [a, i, p, u] = e, [l] = t10, [c, m] = o; - this.outputShape = [l, c, m, u]; - let d = n === "bilinear" ? 1 : 0, [f, h] = [`${i - 1}.0`, `${p - 1}.0`], [g, x, b] = c > 1 ? [`${(i - 1) / (c - 1)}`, "(y2-y1) * height_ratio", `y1*${f} + float(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${f}`], [w, S, k] = m > 1 ? [`${(p - 1) / (m - 1)}`, "(x2-x1) * width_ratio", `x1*${h} + float(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${h}`]; + let [a, i, p, u] = e, [c] = t10, [l, m] = o; + this.outputShape = [c, l, m, u]; + let d = n === "bilinear" ? 1 : 0, [f, h] = [`${i - 1}.0`, `${p - 1}.0`], [g, x, b] = l > 1 ? [`${(i - 1) / (l - 1)}`, "(y2-y1) * height_ratio", `y1*${f} + float(y)*(height_scale)`] : ["0.0", "0.0", `0.5 * (y1+y2) * ${f}`], [C, S, k] = m > 1 ? [`${(p - 1) / (m - 1)}`, "(x2-x1) * width_ratio", `x1*${h} + float(x)*(width_scale)`] : ["0.0", "0.0", `0.5 * (x1+x2) * ${h}`]; this.userCode = ` const float height_ratio = float(${g}); - const float width_ratio = float(${w}); + const float width_ratio = float(${C}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -21496,101 +21496,101 @@ var ng = class { `; } }; -var Mee = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, l = new ng(n.shape, s.shape, i, p, u); - return t10.runWebGLProgram(l, [n, s, a], "float32"); +var yJ = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new qh(n.shape, s.shape, i, p, u); + return t10.runWebGLProgram(c, [n, s, a], "float32"); }; -var OF = { kernelName: Mn, backendName: "webgl", kernelFunc: Mee }; -var $p; -(function(r16) { - r16.Prod = "*", r16.Sum = "+"; -})($p || ($p = {})); -var lm = class { +var QA = { kernelName: cn, backendName: "webgl", kernelFunc: yJ }; +var vp; +(function(r15) { + r15.Prod = "*", r15.Sum = "+"; +})(vp || (vp = {})); +var om = class { constructor(e, t10, o, n) { this.op = e, this.outputShape = t10, this.variableNames = ["x"], this.customUniforms = [{ name: "index", type: "float" }]; - let s = this.outputShape.length, a = this.op === $p.Prod ? "1.0" : "0.0", i = o ? a : `getX(${MF(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", l = ""; - o ? (u = n ? `end != ${p - 1}` : "end != 0", l = n ? "end + 1" : "end - 1") : (u = n ? `end + pow2 < ${p}` : "end >= pow2", l = n ? "end + pow2" : "end - pow2"), this.userCode = ` + let s = this.outputShape.length, a = this.op === vp.Prod ? "1.0" : "0.0", i = o ? a : `getX(${ZA(s, "coords", this.op)})`, p = this.outputShape[this.outputShape.length - 1], u = "", c = ""; + o ? (u = n ? `end != ${p - 1}` : "end != 0", c = n ? "end + 1" : "end - 1") : (u = n ? `end + pow2 < ${p}` : "end >= pow2", c = n ? "end + pow2" : "end - pow2"), this.userCode = ` void main() { ${Re(s)} coords = getOutputCoords(); - int end = ${LF(s, "coords", this.op)}; + int end = ${JA(s, "coords", this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { - int idx = ${l}; - ${LF(s, "coords", this.op)} = idx; - val ${this.op}= getX(${MF(s, "coords", this.op)}); + int idx = ${c}; + ${JA(s, "coords", this.op)} = idx; + val ${this.op}= getX(${ZA(s, "coords", this.op)}); } setOutput(val); } `; } }; -function MF(r16, e, t10) { - if (r16 === 1) +function ZA(r15, e, t10) { + if (r15 === 1) return `${e}`; - if (r16 === 2) + if (r15 === 2) return `${e}.x, ${e}.y`; - if (r16 === 3) + if (r15 === 3) return `${e}.x, ${e}.y, ${e}.z`; - if (r16 === 4) + if (r15 === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; - throw new Error(`Cumulative ${t10} for rank ${r16} is not yet supported`); + throw new Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } -function LF(r16, e, t10) { - if (r16 === 1) +function JA(r15, e, t10) { + if (r15 === 1) return `${e}`; - if (r16 === 2) + if (r15 === 2) return `${e}.y`; - if (r16 === 3) + if (r15 === 3) return `${e}.z`; - if (r16 === 4) + if (r15 === 4) return `${e}.w`; - throw new Error(`Cumulative ${t10} for rank ${r16} is not yet supported`); + throw new Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } -function sg(r16, e, t10, o, n, s) { - let a = e.shape.length, i = C.getAxesPermutation([o], a), p = e; - i != null && (p = Ct({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); - let u = C.getInnerMostAxes(1, a)[0]; +function jh(r15, e, t10, o, n, s) { + let a = e.shape.length, i = w.getAxesPermutation([o], a), p = e; + i != null && (p = bt({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); + let u = w.getInnerMostAxes(1, a)[0]; if (u !== a - 1) throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length - 1} but got axis=${o}`); - let l = p.shape[u], c = Ft({ inputs: { x: p }, backend: t10 }); - for (let m = 0; m <= Math.ceil(Math.log2(l)) - 1; m++) { - let d = new lm(r16, p.shape, false, s), f = [[m]], h = c; - c = t10.runWebGLProgram(d, [c], c.dtype, f), t10.disposeIntermediateTensorInfo(h); + let c = p.shape[u], l = Dt({ inputs: { x: p }, backend: t10 }); + for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { + let d = new om(r15, p.shape, false, s), f = [[m]], h = l; + l = t10.runWebGLProgram(d, [l], l.dtype, f), t10.disposeIntermediateTensorInfo(h); } if (n) { - let m = new lm(r16, p.shape, n, s), d = c; - c = t10.runWebGLProgram(m, [c], c.dtype), t10.disposeIntermediateTensorInfo(d); + let m = new om(r15, p.shape, n, s), d = l; + l = t10.runWebGLProgram(m, [l], l.dtype), t10.disposeIntermediateTensorInfo(d); } if (i != null) { - let m = C.getUndoAxesPermutation(i), d = Ct({ inputs: { x: c }, backend: t10, attrs: { perm: m } }); - return t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(p), d; + let m = w.getUndoAxesPermutation(i), d = bt({ inputs: { x: l }, backend: t10, attrs: { perm: m } }); + return t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(p), d; } - return c; + return l; } -function Lee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return sg($p.Prod, n, t10, s, a, i); +function bJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return jh(vp.Prod, n, t10, s, a, i); } -var BF = { kernelName: Pn, backendName: "webgl", kernelFunc: Lee }; -function Bee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return sg($p.Sum, n, t10, s, a, i); +var eF = { kernelName: un, backendName: "webgl", kernelFunc: bJ }; +function CJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return jh(vp.Sum, n, t10, s, a, i); } -var zF = { kernelName: On, backendName: "webgl", kernelFunc: Bee }; -function zee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; +var tF = { kernelName: pn, backendName: "webgl", kernelFunc: CJ }; +function wJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o; if (n.shape.length === 1) { - let p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), l = Ch(p, u, s.dtype, s.shape, a); - return t10.makeTensorInfo([a], s.dtype, l); + let p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), c = ph(p, u, s.dtype, s.shape, a); + return t10.makeTensorInfo([a], s.dtype, c); } else if (n.shape.length === 2) { - let p = t10.bufferSync(n), u = t10.bufferSync(s), l = vD(p, u, a, i); - return t10.makeTensorInfo(l.shape, s.dtype, l.values); + let p = t10.bufferSync(n), u = t10.bufferSync(s), c = BR(p, u, a, i); + return t10.makeTensorInfo(c.shape, s.dtype, c.values); } throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`); } -var VF = { kernelName: la, backendName: "webgl", kernelFunc: zee }; -var ag = class { +var rF = { kernelName: ra, backendName: "webgl", kernelFunc: wJ }; +var Xh = class { constructor(e, t10, o) { this.variableNames = ["x"], this.outputShape = [], this.outputShape = e, this.blockSize = t10, this.dataFormat = o, this.userCode = ` void main() { @@ -21629,15 +21629,15 @@ var ag = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function Vee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], l = a === "NHWC" ? n.shape[3] : n.shape[1], c = p * s, m = u * s, d = l / (s * s), f = a === "NHWC" ? [i, c, m, d] : [i, d, c, m], h = new ag(f, s, a); +function SJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = new Xh(f, s, a); return t10.runWebGLProgram(h, [n], n.dtype); } -var WF = { kernelName: Ln, backendName: "webgl", kernelFunc: Vee }; -var Xl = class { +var oF = { kernelName: ln, backendName: "webgl", kernelFunc: SJ }; +var Gc = class { constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); - let a = e.filterHeight, i = e.filterWidth, p = e.outChannels / e.inChannels, u = "", l = ""; + this.variableNames = ["x", "W"], this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ut(this.outputShape.length); + let a = e.filterHeight, i = e.filterWidth, p = e.outChannels / e.inChannels, u = "", c = ""; o && (n ? u = `float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} @@ -21648,8 +21648,8 @@ var Xl = class { float activation(float x) { ${o} } - `, l = "result = activation(result);"); - let c = t10 ? "result += getBiasAtOutCoords();" : ""; + `, c = "result = activation(result);"); + let l = t10 ? "result += getBiasAtOutCoords();" : ""; t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), s && this.variableNames.push("leakyreluAlpha"), this.userCode = ` ${u} @@ -21689,20 +21689,20 @@ var Xl = class { } float result = dotProd; - ${c} ${l} + ${c} setOutput(result); } `; } }; -var Yl = class { +var Hc = class { constructor(e, t10 = false, o = null, n = false, s = false) { - this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = lt(this.outputShape.length); - let a = e.outChannels / e.inChannels, i = e.padInfo.left, p = e.strideWidth, u = e.dilationWidth, l = e.filterHeight, c = e.filterWidth, m = c, d = ` + this.variableNames = ["x", "W"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "pads", type: "ivec2" }, { name: "strides", type: "ivec2" }, { name: "dilations", type: "ivec2" }, { name: "inDims", type: "ivec2" }], this.outputShape = e.outShape, this.enableShapeUniforms = ut(this.outputShape.length); + let a = e.outChannels / e.inChannels, i = e.padInfo.left, p = e.strideWidth, u = e.dilationWidth, c = e.filterHeight, l = e.filterWidth, m = l, d = ` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`; - for (let x = 0; x < c; x++) + for (let x = 0; x < l; x++) d += ` vec4 xTexelC${x * 2}; int xTexelC${x * 2}Ready; @@ -21710,9 +21710,9 @@ var Yl = class { int xTexelC${x * 2 + 1}Ready; vec4 xC${x};`; d += ` - for (int r = 0; r < ${l}; r++) { + for (int r = 0; r < ${c}; r++) { `; - for (let x = 0; x < c; x++) + for (let x = 0; x < l; x++) d += ` xTexelC${x * 2} = vec4(0.0); xTexelC${x * 2}Ready = 0; @@ -21728,7 +21728,7 @@ var Yl = class { if (d += ` xC = xCCorner + ${b * u}; `, p === 1) { - if (b < c && (i % 2 === 1 ? (d += ` + if (b < l && (i % 2 === 1 ? (d += ` xCOffset = xC + 1; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -21768,10 +21768,10 @@ var Yl = class { } xC${b} = xTexelC${b}; - `, b + 1 < c)) { - let w = i % 2 === 0 ? y.nearestLargerEven(u) : u; + `, b + 1 < l)) { + let C = i % 2 === 0 ? y.nearestLargerEven(u) : u; u % 2 === 0 && i % 2 === 1 || u % 2 !== 0 && i % 2 !== 1 ? (d += ` - xCOffset = xC + imod(pads[1], 2) + ${w}; + xCOffset = xC + imod(pads[1], 2) + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b + 1}Ready == 0) { xTexelC${b + 1} = getX(batch, xR, xCOffset, d1); @@ -21793,10 +21793,10 @@ var Yl = class { } ` : d += ` xC${b + 1} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.xy); - `) : w === 1 ? d += ` + `) : C === 1 ? d += ` xC${b + 1} = xTexelC${b}; ` : d += ` - xCOffset = xC + ${w}; + xCOffset = xC + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b + 1}Ready == 0) { xTexelC${b + 1} = getX(batch, xR, xCOffset, d1); @@ -21810,7 +21810,7 @@ var Yl = class { `; } } else - b < c && (i % 2 === 1 ? (d += ` + b < l && (i % 2 === 1 ? (d += ` xCOffset = xC + 1 - strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -21833,7 +21833,7 @@ var Yl = class { } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.zw); - `, b + 1 < c && (d += ` + `, b + 1 < l && (d += ` final = vec4(0.0); xCOffset = xC + 1 + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1]) { @@ -21860,13 +21860,13 @@ var Yl = class { xC${b} = vec4( xTexelC${b}.xy, xTexelC${b + 1}.xy); - `, b + 1 < c && (d += ` + `, b + 1 < l && (d += ` xC${b + 1} = vec4(xTexelC${b}.zw, xTexelC${b + 1}.zw); `))); - b < c && (d += ` + b < l && (d += ` wTexel = getW(r, ${b}, d1, q); dotProd += xC${b} * vec4(wTexel.xz, wTexel.xz); - `, b + 1 < c && (d += ` + `, b + 1 < l && (d += ` wTexel = getW(r, ${b + 1}, d1, q); dotProd += xC${b + 1} * vec4(wTexel.xz, wTexel.xz); `)); @@ -21913,16 +21913,16 @@ var Yl = class { `; } }; -function Wee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, l = p; - l == null && (l = [1, 1]), y.assert(C.eitherStridesOrDilationsAreOne(a, l), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${l}'`); - let c = C.computeConv2DInfo(n.shape, s.shape, a, l, i, u, true), m; - A().getBool("WEBGL_PACK_DEPTHWISECONV") && c.strideWidth <= 2 && c.outChannels / c.inChannels === 1 ? m = new Yl(c) : m = new Xl(c); - let d = [[c.padInfo.top, c.padInfo.left], [c.strideHeight, c.strideWidth], [c.dilationHeight, c.dilationWidth], [c.inHeight, c.inWidth]]; +function IJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p, dimRoundingMode: u } = o, c = p; + c == null && (c = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(a, c), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`); + let l = w.computeConv2DInfo(n.shape, s.shape, a, c, i, u, true), m; + A().getBool("WEBGL_PACK_DEPTHWISECONV") && l.strideWidth <= 2 && l.outChannels / l.inChannels === 1 ? m = new Hc(l) : m = new Gc(l); + let d = [[l.padInfo.top, l.padInfo.left], [l.strideHeight, l.strideWidth], [l.dilationHeight, l.dilationWidth], [l.inHeight, l.inWidth]]; return t10.runWebGLProgram(m, [n, s], "float32", d); } -var UF = { kernelName: Bn, backendName: "webgl", kernelFunc: Wee }; -var ig = class { +var nF = { kernelName: mn, backendName: "webgl", kernelFunc: IJ }; +var Yh = class { constructor(e) { this.variableNames = ["x", "dy"], this.outputShape = e.filterShape; let t10 = e.strideHeight, o = e.strideWidth, n = e.padInfo.top, s = e.padInfo.left, a = e.outChannels / e.inChannels; @@ -21964,7 +21964,7 @@ var ig = class { `; } }; -var ug = class { +var Qh = class { constructor(e) { this.variableNames = ["dy", "W"], this.outputShape = e.inShape; let t10 = e.filterHeight, o = e.filterWidth, n = e.strideHeight, s = e.strideWidth, a = t10 - 1 - e.padInfo.top, i = o - 1 - e.padInfo.left, p = e.outChannels / e.inChannels; @@ -22016,17 +22016,17 @@ var ug = class { `; } }; -function Uee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: l } = o, c = C.computeConv2DInfo(n.shape, l, a, i, p, u, true), m = new ig(c); +function vJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new Yh(l); return t10.runWebGLProgram(m, [n, s], "float32"); } -var GF = { kernelName: Gi, backendName: "webgl", kernelFunc: Uee }; -function Gee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: l } = o, c = C.computeConv2DInfo(l, s.shape, a, i, p, u, true), m = new ug(c); +var sF = { kernelName: Pi, backendName: "webgl", kernelFunc: vJ }; +function kJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Qh(l); return t10.runWebGLProgram(m, [n, s], "float32"); } -var HF = { kernelName: Hi, backendName: "webgl", kernelFunc: Gee }; -var pg = class { +var aF = { kernelName: Oi, backendName: "webgl", kernelFunc: kJ }; +var Zh = class { constructor(e) { this.variableNames = ["X"], this.outputShape = [e, e], this.userCode = ` void main() { @@ -22037,18 +22037,18 @@ var pg = class { `; } }; -function Hee(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = te({ inputs: { x: o }, backend: t10, attrs: { shape: [s] } }), i = new pg(s), p = t10.runWebGLProgram(i, [a], a.dtype), u = te({ inputs: { x: p }, backend: t10, attrs: { shape: n } }); +function NJ(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = te({ inputs: { x: o }, backend: t10, attrs: { shape: [s] } }), i = new Zh(s), p = t10.runWebGLProgram(i, [a], a.dtype), u = te({ inputs: { x: p }, backend: t10, attrs: { shape: n } }); return t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(p), u; } -var KF = { kernelName: ca, backendName: "webgl", kernelFunc: Hee }; -var lg = class { +var iF = { kernelName: oa, backendName: "webgl", kernelFunc: NJ }; +var Jh = class { constructor(e) { this.variableNames = ["x", "W"], this.outputShape = e.outShape; - let { inHeight: t10, inWidth: o, padInfo: n, strideHeight: s, strideWidth: a, filterHeight: i, filterWidth: p, dilationHeight: u, dilationWidth: l } = e, { top: c, left: m } = n; + let { inHeight: t10, inWidth: o, padInfo: n, strideHeight: s, strideWidth: a, filterHeight: i, filterWidth: p, dilationHeight: u, dilationWidth: c } = e, { top: l, left: m } = n; this.userCode = ` const ivec2 strides = ivec2(${s}, ${a}); - const ivec2 pads = ivec2(${c}, ${m}); + const ivec2 pads = ivec2(${l}, ${m}); const float neg_infinity = -3.4e38; void main() { @@ -22066,7 +22066,7 @@ var lg = class { if (hIn >= 0 && hIn < ${t10}) { for (int w = 0; w < ${p}; w++) { - int wIn = wBeg + w * ${l}; + int wIn = wBeg + w * ${c}; if (wIn >= 0 && wIn < ${o}) { float xVal = getX(batch, hIn, wIn, d1); @@ -22087,35 +22087,35 @@ var lg = class { `; } }; -function Kee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = C.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), l, c = new lg(u); - l = t10.runWebGLProgram(c, [n, s], "float32"); - let m = te({ inputs: { x: l }, backend: t10, attrs: { shape: u.outShape } }); - return t10.disposeIntermediateTensorInfo(l), m; +function TJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c, l = new Jh(u); + c = t10.runWebGLProgram(l, [n, s], "float32"); + let m = te({ inputs: { x: c }, backend: t10, attrs: { shape: u.outShape } }); + return t10.disposeIntermediateTensorInfo(c), m; } -var qF = { kernelName: zn, backendName: "webgl", kernelFunc: Kee }; -function qee(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = C.decodeEinsumEquation(n, s.length); - C.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: l } = C.getEinsumComputePath(i, p), c = l.length, m = null, d = a.length, f = []; - for (let h = 0; h < c; ++h) { - for (let g of l[h]) { - let { permutationIndices: x, expandDims: b } = C.getEinsumPermutation(d, p[g]), w; - C.isIdentityPermutation(x) ? w = s[g] : (w = Ct({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(w)); - let S = w.shape.slice(); +var uF = { kernelName: dn, backendName: "webgl", kernelFunc: TJ }; +function _J(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); + w.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = w.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; + for (let h = 0; h < l; ++h) { + for (let g of c[h]) { + let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; + w.isIdentityPermutation(x) ? C = s[g] : (C = bt({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); + let S = C.shape.slice(); for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); - y.arraysEqual(w.shape, S) || (w = te({ inputs: { x: w }, backend: t10, attrs: { shape: S } }), f.push(w)), m === null ? m = w : (m = um({ inputs: { a: w, b: m }, backend: t10 }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = te({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = tm({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } - h < c - 1 && (u[h] >= 0 && (m = Tp({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = wp({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && t10.disposeIntermediateTensorInfo(h); return m; } -var jF = { kernelName: ji, backendName: "webgl", kernelFunc: qee }; -var jee = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; -var Xee = ` +var pF = { kernelName: Bi, backendName: "webgl", kernelFunc: _J }; +var EJ = "return (x >= 0.0) ? x : (exp(x) - 1.0);"; +var $J = ` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -22125,46 +22125,46 @@ var Xee = ` return result; `; -var Yee = xe({ opSnippet: jee, packedOpSnippet: Xee }); -var XF = { kernelName: Wn, backendName: "webgl", kernelFunc: Yee }; -var Qee = "return (b >= 0.0) ? a : a * (b + 1.0);"; -var Zee = ` +var RJ = xe({ opSnippet: EJ, packedOpSnippet: $J }); +var cF = { kernelName: hn, backendName: "webgl", kernelFunc: RJ }; +var DJ = "return (b >= 0.0) ? a : a * (b + 1.0);"; +var AJ = ` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `; -var Jee = (r16) => { - let { inputs: e, backend: t10 } = r16, { dy: o, y: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new eo(Zee, o.shape, n.shape) : new Br(Qee, o.shape, n.shape); +var FJ = (r15) => { + let { inputs: e, backend: t10 } = r15, { dy: o, y: n } = e, s = A().getBool("WEBGL_PACK_BINARY_OPERATIONS") ? new jr(AJ, o.shape, n.shape) : new Pr(DJ, o.shape, n.shape); return t10.runWebGLProgram(s, [o, n], o.dtype); }; -var YF = { kernelName: ri, backendName: "webgl", kernelFunc: Jee }; -var ete = ` +var lF = { kernelName: Xa, backendName: "webgl", kernelFunc: FJ }; +var PJ = ` return vec4(equal(a, b)); `; -var tte = "return float(a == b);"; -var rte = st({ opSnippet: tte, packedOpSnippet: ete, dtype: "bool", cpuKernelImpl: ED }); -var QF = { kernelName: xo, backendName: "webgl", kernelFunc: rte }; -var ote = ` +var OJ = "return float(a == b);"; +var MJ = nt({ opSnippet: OJ, packedOpSnippet: PJ, dtype: "bool", cpuKernelImpl: GR }); +var mF = { kernelName: xn, backendName: "webgl", kernelFunc: MJ }; +var LJ = ` // 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 p = ${w.ERF_P}; + float a1 = ${w.ERF_A1}; + float a2 = ${w.ERF_A2}; + float a3 = ${w.ERF_A3}; + float a4 = ${w.ERF_A4}; + float a5 = ${w.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)); `; -var nte = xe({ opSnippet: ote }); -var ZF = { kernelName: Un, backendName: "webgl", kernelFunc: nte }; -var ste = sn + ` +var BJ = xe({ opSnippet: LJ }); +var dF = { kernelName: gn, backendName: "webgl", kernelFunc: BJ }; +var zJ = Fo + ` return exp(x); `; -var ate = ` +var VJ = ` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -22174,17 +22174,17 @@ var ate = ` return result; `; -var L0 = xe({ opSnippet: ste, packedOpSnippet: ate, cpuKernelImpl: $D, dtype: "float32" }); -var JF = { kernelName: yo, backendName: "webgl", kernelFunc: L0 }; -function cg(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; +var kv = xe({ opSnippet: zJ, packedOpSnippet: VJ, cpuKernelImpl: HR, dtype: "float32" }); +var fF = { kernelName: yn, backendName: "webgl", kernelFunc: kv }; +function eg(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; return n < 0 && (y.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), te({ inputs: { x: s }, backend: o, attrs: { shape: i } }); } -var e3 = { kernelName: ma, backendName: "webgl", kernelFunc: cg }; -var t3 = "return exp(x) - 1.0;"; -var ite = xe({ opSnippet: t3, packedOpSnippet: t3, cpuKernelImpl: RD }); -var r32 = { kernelName: bo, backendName: "webgl", kernelFunc: ite }; -var cm = class { +var hF = { kernelName: na, backendName: "webgl", kernelFunc: eg }; +var gF = "return exp(x) - 1.0;"; +var WJ = xe({ opSnippet: gF, packedOpSnippet: gF, cpuKernelImpl: KR }); +var xF = { kernelName: bn, backendName: "webgl", kernelFunc: WJ }; +var nm = class { constructor(e, t10, o) { this.variableNames = ["real", "imag"]; let n = t10[1]; @@ -22232,18 +22232,18 @@ var cm = class { `; } }; -function mg(r16, e, t10) { - let o = t10.texData.get(r16.dataId), n = y.sizeFromShape(r16.shape), s = r16.shape[r16.shape.length - 1], a = n / s, i = te({ inputs: { x: r16 }, backend: t10, attrs: { shape: [a, s] } }), p = i.shape, u = new cm("real", p, e), l = new cm("imag", p, e), c = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: p }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: p }], m = t10.runWebGLProgram(u, c, "float32"), d = t10.runWebGLProgram(l, c, "float32"), f = zr({ inputs: { real: m, imag: d }, backend: t10 }); +function tg(r15, e, t10) { + let o = t10.texData.get(r15.dataId), n = y.sizeFromShape(r15.shape), s = r15.shape[r15.shape.length - 1], a = n / s, i = te({ inputs: { x: r15 }, backend: t10, attrs: { shape: [a, s] } }), p = i.shape, u = new nm("real", p, e), c = new nm("imag", p, e), l = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: p }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: p }], m = t10.runWebGLProgram(u, l, "float32"), d = t10.runWebGLProgram(c, l, "float32"), f = Or({ inputs: { real: m, imag: d }, backend: t10 }); t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d); - let h = te({ inputs: { x: f }, backend: t10, attrs: { shape: r16.shape } }); + let h = te({ inputs: { x: f }, backend: t10, attrs: { shape: r15.shape } }); return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(f), h; } -function ute(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e; - return mg(o, false, t10); +function UJ(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e; + return tg(o, false, t10); } -var o3 = { kernelName: Xi, backendName: "webgl", kernelFunc: ute }; -var dg = class { +var yF = { kernelName: zi, backendName: "webgl", kernelFunc: UJ }; +var rg = class { constructor(e, t10) { this.outputShape = [], this.customUniforms = [{ name: "value", type: "float" }], this.variableNames = ["x"], this.outputShape = e, this.userCode = ` void main() { @@ -22253,18 +22253,18 @@ var dg = class { `; } }; -function Ei(r16) { - let { backend: e, attrs: t10 } = r16, { shape: o, value: n } = t10, { dtype: s } = t10; +function Ci(r15) { + let { backend: e, attrs: t10 } = r15, { shape: o, value: n } = t10, { dtype: s } = t10; if (s = s || y.inferDtype(n), s === "string") { let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), e.makeTensorInfo(o, s, a); } else { - let a = new dg(o, n), i = [[n]]; + let a = new rg(o, n), i = [[n]]; return e.runWebGLProgram(a, [], s, i); } } -var n3 = { kernelName: da, backendName: "webgl", kernelFunc: Ei }; -var fg = class { +var bF = { kernelName: sa, backendName: "webgl", kernelFunc: Ci }; +var og = class { constructor(e) { this.variableNames = ["Image"], this.outputShape = []; let t10 = e[2]; @@ -22285,14 +22285,14 @@ var fg = class { `; } }; -var s3 = { kernelName: Gn, backendName: "webgl", kernelFunc: ({ inputs: r16, backend: e }) => { - let { image: t10 } = r16, o = e, n = new fg(t10.shape); +var CF = { kernelName: Cn, backendName: "webgl", kernelFunc: ({ inputs: r15, backend: e }) => { + let { image: t10 } = r15, o = e, n = new og(t10.shape); return o.runWebGLProgram(n, [t10], t10.dtype); } }; -var a3 = "return floor(x);"; -var pte = xe({ opSnippet: a3, packedOpSnippet: a3, cpuKernelImpl: DD }); -var i3 = { kernelName: Co, backendName: "webgl", kernelFunc: pte }; -var lte = ` +var wF = "return floor(x);"; +var GJ = xe({ opSnippet: wF, packedOpSnippet: wF, cpuKernelImpl: qR }); +var SF = { kernelName: wn, backendName: "webgl", kernelFunc: GJ }; +var HJ = ` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -22303,7 +22303,7 @@ var lte = ` return NAN; } `; -var cte = ` +var KJ = ` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -22325,12 +22325,12 @@ var cte = ` } return vec4(result); `; -var mte = st({ opSnippet: lte, packedOpSnippet: cte, dtype: "int32" }); -var u3 = { kernelName: wo, backendName: "webgl", kernelFunc: mte }; -var hg = class { +var qJ = nt({ opSnippet: HJ, packedOpSnippet: KJ, dtype: "int32" }); +var IF = { kernelName: Sn, backendName: "webgl", kernelFunc: qJ }; +var ng = class { constructor(e) { this.variableNames = ["A"]; - let t10 = kt(), [o, n] = e; + let t10 = It(), [o, n] = e; this.outputShape = e, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -22356,10 +22356,10 @@ var hg = class { `; } }; -var gg = class { +var sg = class { constructor(e) { this.variableNames = ["A"], this.packedInputs = false, this.packedOutput = true; - let t10 = kt(), [o, n] = e; + let t10 = It(), [o, n] = e; this.outputShape = e, this.userCode = ` void main() { ivec3 coords = getOutputCoords(); @@ -22397,65 +22397,65 @@ var gg = class { `; } }; -var p3 = { kernelName: Lu, backendName: "webgl", kernelFunc: dte }; -var Ql; -var B0 = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -function dte(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { pixels: n } = e, { numChannels: s } = o, a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, [p, u] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], l = [u, p], c = [u, p, s]; +var vF = { kernelName: Du, backendName: "webgl", kernelFunc: jJ }; +var Kc; +var Nv = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +function jJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { pixels: n } = e, { numChannels: s } = o, a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, [p, u] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], c = [u, p], l = [u, p, s]; if (i || a) { let h = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); - (Ql == null || h !== B0) && (B0 = h, Ql = document.createElement("canvas").getContext("2d", { willReadFrequently: B0 })), Ql.canvas.width = p, Ql.canvas.height = u, Ql.drawImage(n, 0, 0, p, u), n = Ql.canvas; + (Kc == null || h !== Nv) && (Nv = h, Kc = document.createElement("canvas").getContext("2d", { willReadFrequently: Nv })), Kc.canvas.width = p, Kc.canvas.height = u, Kc.drawImage(n, 0, 0, p, u), n = Kc.canvas; } - let m = t10.makeTensorInfo(l, "int32"); - t10.texData.get(m.dataId).usage = hr.PIXELS, t10.gpgpu.uploadPixelDataToTexture(t10.getTexture(m.dataId), n); - let d = A().getBool("WEBGL_PACK") ? new gg(c) : new hg(c), f = t10.runWebGLProgram(d, [m], "int32"); + let m = t10.makeTensorInfo(c, "int32"); + t10.texData.get(m.dataId).usage = mr.PIXELS, t10.gpgpu.uploadPixelDataToTexture(t10.getTexture(m.dataId), n); + let d = A().getBool("WEBGL_PACK") ? new sg(l) : new ng(l), f = t10.runWebGLProgram(d, [m], "int32"); return t10.disposeData(m.dataId), f; } -function fte(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = C.convertConv2DDataFormat(l), g = C.computeConv2DInfo(n.shape, s.shape, p, c, u, m, false, h), x, b = [], w = a != null, S = i != null, k = d === "leakyrelu", T = () => { - let R = [n, s], D = (F, O) => { - if (O === "NCHW" && F.shape.length === 1 && F.shape[0] !== 1) { - let M = te({ inputs: { x: F }, backend: t10, attrs: { shape: [F.shape[0], 1, 1] } }); +function XJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = w.convertConv2DDataFormat(c), g = w.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h), x, b = [], C = a != null, S = i != null, k = d === "leakyrelu", _ = () => { + let R = [n, s], D = (P, O) => { + if (O === "NCHW" && P.shape.length === 1 && P.shape[0] !== 1) { + let M = te({ inputs: { x: P }, backend: t10, attrs: { shape: [P.shape[0], 1, 1] } }); return b.push(M), M; } - return F; + return P; }; - if (w && R.push(D(a, l)), S && R.push(D(i, l)), k) { - let F = t10.makeTensorInfo([], "float32", y.createScalarValue(f, "float32")); - R.push(F), b.push(F); + if (C && R.push(D(a, c)), S && R.push(D(i, c)), k) { + let P = t10.makeTensorInfo([], "float32", y.createScalarValue(f, "float32")); + R.push(P), b.push(P); } return R; }; if (g.filterHeight === 1 && g.filterWidth === 1 && g.dilationHeight === 1 && g.dilationWidth === 1 && g.strideHeight === 1 && g.strideWidth === 1 && (g.padInfo.type === "SAME" || g.padInfo.type === "VALID")) - x = Qh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + x = zh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else if (g.strideWidth <= 2 && h === "channelsLast" && A().getBool("WEBGL_EXP_CONV")) { - let R = d ? Ti(d, true) : null, D = new jl(g, w, R, S, k), F = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], O = T(); - x = t10.runWebGLProgram(D, O, "float32", F); + let R = d ? yi(d, true) : null, D = new Uc(g, C, R, S, k), P = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], O = _(); + x = t10.runWebGLProgram(D, O, "float32", P); } else if (A().getBool("WEBGL_CONV_IM2COL")) - x = Zh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); + x = Vh({ x: n, filter: s, convInfo: g, backend: t10, bias: a, activation: d, preluActivationWeights: i, leakyreluAlpha: f }); else { - let R = d ? Ti(d, false) : null, D = new ql(g, w, R, S, k), F = T(); - x = t10.runWebGLProgram(D, F, "float32"); - } - let E = te({ inputs: { x }, backend: t10, attrs: { shape: g.outShape } }); - return b.push(x), b.forEach((R) => t10.disposeIntermediateTensorInfo(R)), E; -} -var l3 = { kernelName: jo, backendName: "webgl", kernelFunc: fte }; -function hte(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: l, dimRoundingMode: c, activation: m, leakyreluAlpha: d } = o, f = [], h = l; - h == null && (h = [1, 1]), y.assert(C.eitherStridesOrDilationsAreOne(p, h), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`); - let g = C.computeConv2DInfo(n.shape, s.shape, p, h, u, c, true), x = A().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? Ti(m, x) : null, w = [n, s], S = a != null, k = i != null, T = m === "leakyrelu"; - if (S && w.push(a), k && w.push(i), T) { - let F = t10.makeTensorInfo([], "float32", y.createScalarValue(d, "float32")); - w.push(F), f.push(F); - } - let E; - x ? E = new Yl(g, S, b, k, T) : E = new Xl(g, S, b, k, T); - let R = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], D = t10.runWebGLProgram(E, w, "float32", R); - return f.forEach((F) => t10.disposeIntermediateTensorInfo(F)), D; -} -var c3 = { kernelName: Xo, backendName: "webgl", kernelFunc: hte }; -var xg = class { + let R = d ? yi(d, false) : null, D = new Wc(g, C, R, S, k), P = _(); + x = t10.runWebGLProgram(D, P, "float32"); + } + let $ = te({ inputs: { x }, backend: t10, attrs: { shape: g.outShape } }); + return b.push(x), b.forEach((R) => t10.disposeIntermediateTensorInfo(R)), $; +} +var kF = { kernelName: Io, backendName: "webgl", kernelFunc: XJ }; +function YJ(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = [], h = c; + h == null && (h = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(p, h), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`); + let g = w.computeConv2DInfo(n.shape, s.shape, p, h, u, l, true), x = A().getBool("WEBGL_PACK_DEPTHWISECONV") && g.strideWidth <= 2 && g.outChannels / g.inChannels === 1, b = m ? yi(m, x) : null, C = [n, s], S = a != null, k = i != null, _ = m === "leakyrelu"; + if (S && C.push(a), k && C.push(i), _) { + let P = t10.makeTensorInfo([], "float32", y.createScalarValue(d, "float32")); + C.push(P), f.push(P); + } + let $; + x ? $ = new Hc(g, S, b, k, _) : $ = new Gc(g, S, b, k, _); + let R = [[g.padInfo.top, g.padInfo.left], [g.strideHeight, g.strideWidth], [g.dilationHeight, g.dilationWidth], [g.inHeight, g.inWidth]], D = t10.runWebGLProgram($, C, "float32", R); + return f.forEach((P) => t10.disposeIntermediateTensorInfo(P)), D; +} +var NF = { kernelName: vo, backendName: "webgl", kernelFunc: YJ }; +var ag = class { constructor(e, t10, o, n) { this.sliceDim = e, this.strides = t10, this.paramsShape = n, this.variableNames = ["x", "indices"], this.outputShape = o; let s = Re(o.length), a = ` @@ -22479,20 +22479,20 @@ var xg = class { `; } }; -function gte(r16) { - let { inputs: e, backend: t10 } = r16, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, l, c] = C.prepareAndValidate(o, n), m = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), d = te({ inputs: { x: o }, backend: t10, attrs: { shape: [y.sizeFromShape(o.shape) / l, l] } }); +function QJ(r15) { + let { inputs: e, backend: t10 } = r15, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, c, l] = w.prepareAndValidate(o, n), m = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), d = te({ inputs: { x: o }, backend: t10, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); if (t10.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let x = t10.readSync(n.dataId), b = t10.bufferSync(o), w = AD(x, b, o.dtype, u, a, l, c, o.shape, i); - return t10.makeTensorInfo(p, o.dtype, w.values); + let x = t10.readSync(n.dataId), b = t10.bufferSync(o), C = jR(x, b, o.dtype, u, a, c, l, o.shape, i); + return t10.makeTensorInfo(p, o.dtype, C.values); } - let f = new xg(a, c, [u, l], o.shape), h = t10.runWebGLProgram(f, [d, m], d.dtype), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: p } }); + let f = new ag(a, l, [u, c], o.shape), h = t10.runWebGLProgram(f, [d, m], d.dtype), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: p } }); return t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(h), g; } -var m3 = { kernelName: Kn, backendName: "webgl", kernelFunc: gte }; -var yg = class { +var TF = { kernelName: vn, backendName: "webgl", kernelFunc: QJ }; +var ig = class { constructor(e, t10) { this.variableNames = ["A", "indices"], this.outputShape = t10, this.rank = t10.length; - let o = Re(this.rank), n = xte(e, 2); + let o = Re(this.rank), n = ZJ(e, 2); this.userCode = ` void main() { ${o} resRC = getOutputCoords(); @@ -22503,81 +22503,81 @@ var yg = class { `; } }; -function xte(r16, e) { +function ZJ(r15, e) { let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r16.length; n++) + for (let n = 0; n < r15.length; n++) n === 2 ? o.push("index") : o.push(`${t10[n]}`); return o.join(); } -function z0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0]; +function Tv(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0]; if (A().get("DEBUG")) { - let b = t10.readSync(s.dataId), w = n.shape[p]; + let b = t10.readSync(s.dataId), C = n.shape[p]; for (let S = 0; S < b.length; ++S) { let k = b[S]; - y.assert(k <= w - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${w - 1}]`); + y.assert(k <= C - 1 && k >= 0, () => `GatherV2: the index value ${k} is not in [0, ${C - 1}]`); } } - let u = C.segment_util.collectGatherOpShapeInfo(n, s, p, i), l = y.sizeFromShape(s.shape), c = [], m = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = te({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, l / u.batchSize] } }); - c.push(m), c.push(d); - let f = [u.batchSize, u.outerSize, l / u.batchSize, u.sliceSize]; + let u = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = te({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, c / u.batchSize] } }); + l.push(m), l.push(d); + let f = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; if (t10.shouldExecuteOnCPU([n, s]) || n.dtype === "string") { - let b = t10.bufferSync(d), w = t10.bufferSync(m), S = FD(w, b, f); - return c.forEach((k) => t10.disposeIntermediateTensorInfo(k)), t10.makeTensorInfo(u.outputShape, S.dtype, S.values); + let b = t10.bufferSync(d), C = t10.bufferSync(m), S = XR(C, b, f); + return l.forEach((k) => t10.disposeIntermediateTensorInfo(k)), t10.makeTensorInfo(u.outputShape, S.dtype, S.values); } - let h = new yg(m.shape, f), g = t10.runWebGLProgram(h, [m, d], m.dtype); - c.push(g); + let h = new ig(m.shape, f), g = t10.runWebGLProgram(h, [m, d], m.dtype); + l.push(g); let x = te({ inputs: { x: g }, backend: t10, attrs: { shape: u.outputShape } }); - return c.forEach((b) => t10.disposeIntermediateTensorInfo(b)), x; + return l.forEach((b) => t10.disposeIntermediateTensorInfo(b)), x; } -var d3 = { kernelName: fa, backendName: "webgl", kernelFunc: z0 }; -var yte = "return float(a > b);"; -var bte = ` +var _F = { kernelName: aa, backendName: "webgl", kernelFunc: Tv }; +var JJ = "return float(a > b);"; +var eee = ` return vec4(greaterThan(a, b)); `; -var Cte = st({ opSnippet: yte, packedOpSnippet: bte, cpuKernelImpl: PD, dtype: "bool" }); -var f3 = { kernelName: So, backendName: "webgl", kernelFunc: Cte }; -var wte = "return float(a >= b);"; -var Ste = ` +var tee = nt({ opSnippet: JJ, packedOpSnippet: eee, cpuKernelImpl: YR, dtype: "bool" }); +var EF = { kernelName: kn, backendName: "webgl", kernelFunc: tee }; +var ree = "return float(a >= b);"; +var oee = ` return vec4(greaterThanEqual(a, b)); `; -var Ite = st({ opSnippet: wte, packedOpSnippet: Ste, dtype: "bool", cpuKernelImpl: OD }); -var h3 = { kernelName: Io, backendName: "webgl", kernelFunc: Ite }; -function vte(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e; - return mg(o, true, t10); -} -var g3 = { kernelName: Yi, backendName: "webgl", kernelFunc: vte }; -var kte = "return float(!isnan(x) && !isinf(x));"; -var Nte = xe({ opSnippet: kte, dtype: "bool" }); -var x3 = { kernelName: qn, backendName: "webgl", kernelFunc: Nte }; -var Tte = "return float(isinf(x));"; -var _te = xe({ opSnippet: Tte, dtype: "bool" }); -var y3 = { kernelName: jn, backendName: "webgl", kernelFunc: _te }; -var Ete = "return float(isnan(x));"; -var $te = xe({ opSnippet: Ete, dtype: "bool" }); -var b3 = { kernelName: Xn, backendName: "webgl", kernelFunc: $te }; -var Rte = "return float(a < b);"; -var Dte = ` +var nee = nt({ opSnippet: ree, packedOpSnippet: oee, dtype: "bool", cpuKernelImpl: QR }); +var $F = { kernelName: Nn, backendName: "webgl", kernelFunc: nee }; +function see(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e; + return tg(o, true, t10); +} +var RF = { kernelName: Vi, backendName: "webgl", kernelFunc: see }; +var aee = "return float(!isnan(x) && !isinf(x));"; +var iee = xe({ opSnippet: aee, dtype: "bool" }); +var DF = { kernelName: Tn, backendName: "webgl", kernelFunc: iee }; +var uee = "return float(isinf(x));"; +var pee = xe({ opSnippet: uee, dtype: "bool" }); +var AF = { kernelName: _n, backendName: "webgl", kernelFunc: pee }; +var cee = "return float(isnan(x));"; +var lee = xe({ opSnippet: cee, dtype: "bool" }); +var FF = { kernelName: En, backendName: "webgl", kernelFunc: lee }; +var mee = "return float(a < b);"; +var dee = ` return vec4(lessThan(a, b)); `; -var Ate = st({ opSnippet: Rte, packedOpSnippet: Dte, cpuKernelImpl: MD, dtype: "bool" }); -var C3 = { kernelName: ko, backendName: "webgl", kernelFunc: Ate }; -var Fte = "return float(a <= b);"; -var Pte = ` +var fee = nt({ opSnippet: mee, packedOpSnippet: dee, cpuKernelImpl: ZR, dtype: "bool" }); +var PF = { kernelName: Rn, backendName: "webgl", kernelFunc: fee }; +var hee = "return float(a <= b);"; +var gee = ` return vec4(lessThanEqual(a, b)); `; -var Ote = st({ opSnippet: Fte, packedOpSnippet: Pte, cpuKernelImpl: LD, dtype: "bool" }); -var w3 = { kernelName: No, backendName: "webgl", kernelFunc: Ote }; -function Mte(r16) { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, num: s } = t10, a = BD(o, n, s); +var xee = nt({ opSnippet: hee, packedOpSnippet: gee, cpuKernelImpl: JR, dtype: "bool" }); +var OF = { kernelName: Dn, backendName: "webgl", kernelFunc: xee }; +function yee(r15) { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, num: s } = t10, a = eD(o, n, s); return e.makeTensorInfo([a.length], "float32", a); } -var S3 = { kernelName: Qn, backendName: "webgl", kernelFunc: Mte }; -var Lte = sn + ` +var MF = { kernelName: An, backendName: "webgl", kernelFunc: yee }; +var bee = Fo + ` return x < 0.0 ? 0./0. : log(x); `; -var Bte = ` +var Cee = ` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -22586,34 +22586,34 @@ var Bte = ` result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; `; -var zte = xe({ opSnippet: Lte, packedOpSnippet: Bte, cpuKernelImpl: zD }); -var I3 = { kernelName: To, backendName: "webgl", kernelFunc: zte }; -var Vte = sn + ` +var wee = xe({ opSnippet: bee, packedOpSnippet: Cee, cpuKernelImpl: tD }); +var LF = { kernelName: Fn, backendName: "webgl", kernelFunc: wee }; +var See = Fo + ` return log(1.0 + x); `; -var Wte = xe({ opSnippet: Vte }); -var v3 = { kernelName: Zn, backendName: "webgl", kernelFunc: Wte }; -var Ute = "return float(a >= 1.0 && b >= 1.0);"; -var Gte = ` +var Iee = xe({ opSnippet: See }); +var BF = { kernelName: Pn, backendName: "webgl", kernelFunc: Iee }; +var vee = "return float(a >= 1.0 && b >= 1.0);"; +var kee = ` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `; -var Hte = st({ opSnippet: Ute, packedOpSnippet: Gte, dtype: "bool" }); -var k3 = { kernelName: Jn, backendName: "webgl", kernelFunc: Hte }; -var Kte = "return float(!(x >= 1.0));"; -var qte = xe({ opSnippet: Kte }); -var N3 = { kernelName: es, backendName: "webgl", kernelFunc: qte }; -var jte = "return float(a >= 1.0 || b >= 1.0);"; -var Xte = ` +var Nee = nt({ opSnippet: vee, packedOpSnippet: kee, dtype: "bool" }); +var zF = { kernelName: On, backendName: "webgl", kernelFunc: Nee }; +var Tee = "return float(!(x >= 1.0));"; +var _ee = xe({ opSnippet: Tee }); +var VF = { kernelName: Mn, backendName: "webgl", kernelFunc: _ee }; +var Eee = "return float(a >= 1.0 || b >= 1.0);"; +var $ee = ` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `; -var Yte = st({ opSnippet: jte, packedOpSnippet: Xte, dtype: "bool" }); -var T3 = { kernelName: ts, backendName: "webgl", kernelFunc: Yte }; -var bg = class { +var Ree = nt({ opSnippet: Eee, packedOpSnippet: $ee, dtype: "bool" }); +var WF = { kernelName: Ln, backendName: "webgl", kernelFunc: Ree }; +var ug = class { constructor(e, t10, o, n, s) { this.variableNames = ["x"], this.outputShape = []; let a = t10, i = e[3] - 1; @@ -22641,7 +22641,7 @@ var bg = class { `; } }; -var Cg = class { +var pg = class { constructor(e, t10, o, n, s) { this.variableNames = ["x"], this.outputShape = [], this.packedInputs = true, this.packedOutput = true; let a = t10, i = e[3] - 1; @@ -22712,12 +22712,12 @@ var Cg = class { `; } }; -var Qte = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u = A().getBool("WEBGL_PACK_NORMALIZATION") ? new Cg(n.shape, s, a, i, p) : new bg(n.shape, s, a, i, p); +var Dee = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u = A().getBool("WEBGL_PACK_NORMALIZATION") ? new pg(n.shape, s, a, i, p) : new ug(n.shape, s, a, i, p); return t10.runWebGLProgram(u, [n], n.dtype); }; -var _3 = { kernelName: rs, backendName: "webgl", kernelFunc: Qte }; -var wg = class { +var UF = { kernelName: Bn, backendName: "webgl", kernelFunc: Dee }; +var cg = class { constructor(e, t10, o, n, s) { this.variableNames = ["inputImage", "outputImage", "dy"], this.outputShape = [], this.outputShape = e, this.depth = e[3], this.depthRadius = t10, this.bias = o, this.alpha = n, this.beta = s, this.userCode = ` void main() { @@ -22777,75 +22777,75 @@ var wg = class { `; } }; -var Zte = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: l } = o, c = new wg(n.shape, i, p, u, l); - return t10.runWebGLProgram(c, [n, s, a], n.dtype); +var Aee = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new cg(n.shape, i, p, u, c); + return t10.runWebGLProgram(l, [n, s, a], n.dtype); }; -var E3 = { kernelName: oi, backendName: "webgl", kernelFunc: Zte }; -function $3(r16, e, t10, o) { - let n = y.sizeFromShape(e), a = y.sizeFromShape(r16.shape) / n, i = te({ inputs: { x: r16 }, attrs: { shape: [a, n] }, backend: o }), p = ro(i, r16.dtype, "max", o), u = te({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); +var GF = { kernelName: Ya, backendName: "webgl", kernelFunc: Aee }; +function HF(r15, e, t10, o) { + let n = y.sizeFromShape(e), a = y.sizeFromShape(r15.shape) / n, i = te({ inputs: { x: r15 }, attrs: { shape: [a, n] }, backend: o }), p = Yr(i, r15.dtype, "max", o), u = te({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -function V0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, l = C.getAxesPermutation(u, i), c = l != null, m = t10.shouldExecuteOnCPU([n]), d = n; - if (c) { +function _v(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reductionIndices: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = w.getAxesPermutation(u, i), l = c != null, m = t10.shouldExecuteOnCPU([n]), d = n; + if (l) { if (m) { - let w = t10.texData.get(d.dataId).values, S = new Array(i); - for (let E = 0; E < S.length; E++) - S[E] = n.shape[l[E]]; - let k = Np(w, n.shape, n.dtype, l, S); + let C = t10.texData.get(d.dataId).values, S = new Array(i); + for (let $ = 0; $ < S.length; $++) + S[$] = n.shape[c[$]]; + let k = Cp(C, n.shape, n.dtype, c, S); d = t10.makeTensorInfo(S, n.dtype); - let T = t10.texData.get(d.dataId); - T.values = k; + let _ = t10.texData.get(d.dataId); + _.values = k; } else - d = ku(n, l, t10); - u = C.getInnerMostAxes(u.length, i); + d = yu(n, c, t10); + u = w.getInnerMostAxes(u.length, i); } - C.assertAxesAreInnerMostDims("max", u, i); - let [f, h] = C.computeOutAndReduceShapes(d.shape, u), g = f; - a && (g = C.expandShapeToKeepDim(f, p)); + w.assertAxesAreInnerMostDims("max", u, i); + let [f, h] = w.computeOutAndReduceShapes(d.shape, u), g = f; + a && (g = w.expandShapeToKeepDim(f, p)); let x; if (m) { - let w = t10.texData.get(d.dataId).values, S = VD(w, y.sizeFromShape(h), g, n.dtype); + let C = t10.texData.get(d.dataId).values, S = rD(C, y.sizeFromShape(h), g, n.dtype); x = t10.makeTensorInfo(g, n.dtype); let k = t10.texData.get(x.dataId); k.values = S; } else - x = $3(d, h, g, t10); - return c && t10.disposeIntermediateTensorInfo(d), x; + x = HF(d, h, g, t10); + return l && t10.disposeIntermediateTensorInfo(d), x; } -var R3 = { kernelName: os, backendName: "webgl", kernelFunc: V0 }; -var Jte = Gl + ` +var KF = { kernelName: zn, backendName: "webgl", kernelFunc: _v }; +var Fee = Bc + ` return max(a, b); `; -var ere = ` +var Pee = ` vec4 result = vec4(max(a, b)); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + to + ` + ` + Xr + ` return result; `; -var tre = st({ opSnippet: Jte, packedOpSnippet: ere, cpuKernelImpl: WD }); -var D3 = { kernelName: _o, backendName: "webgl", kernelFunc: tre }; -function rre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e; - Ys(n, "maxPool"); +var Oee = nt({ opSnippet: Fee, packedOpSnippet: Pee, cpuKernelImpl: oD }); +var qF = { kernelName: Vn, backendName: "webgl", kernelFunc: Oee }; +function Mee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; + Vs(n, "maxPool"); let { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, u = 1; - y.assert(C.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let l = C.computePool2DInfo(n.shape, s, a, u, i, p); - if (l.filterWidth === 1 && l.filterHeight === 1 && y.arraysEqual(l.inShape, l.outShape)) - return Ft({ inputs: { x: n }, backend: t10 }); - let c = new Zs(l, "max", false); - return t10.runWebGLProgram(c, [n], n.dtype); + y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = w.computePool2DInfo(n.shape, s, a, u, i, p); + if (c.filterWidth === 1 && c.filterHeight === 1 && y.arraysEqual(c.inShape, c.outShape)) + return Dt({ inputs: { x: n }, backend: t10 }); + let l = new Us(c, "max", false); + return t10.runWebGLProgram(l, [n], n.dtype); } -var A3 = { kernelName: ns, backendName: "webgl", kernelFunc: rre }; -function ore(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, l = [1, 1, 1], c = C.computePool3DInfo(n.shape, s, a, l, i, u, p), m = new Nu(c, "max", false); +var jF = { kernelName: Wn, backendName: "webgl", kernelFunc: Mee }; +function Lee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, c = [1, 1, 1], l = w.computePool3DInfo(n.shape, s, a, c, i, u, p), m = new bu(l, "max", false); return t10.runWebGLProgram(m, [n], n.dtype); } -var F3 = { kernelName: ha, backendName: "webgl", kernelFunc: ore }; -var Sg = class { +var XF = { kernelName: ia, backendName: "webgl", kernelFunc: Lee }; +var lg = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.outputShape = e.inShape; let t10 = e.strideHeight, o = e.strideWidth, n = e.dilationHeight, s = e.effectiveFilterHeight, a = e.effectiveFilterWidth, i = s - 1 - e.padInfo.top, p = a - 1 - e.padInfo.left, u = s * a - 1; @@ -22898,12 +22898,12 @@ var Sg = class { `; } }; -var Ig = class { +var mg = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.outputShape = e.inShape; - let t10 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.dilationDepth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterDepth, u = e.effectiveFilterHeight, l = e.effectiveFilterWidth, c = p - 1 - e.padInfo.front, m = u - 1 - e.padInfo.top, d = l - 1 - e.padInfo.left, f = p * u * l - 1; + let t10 = e.strideDepth, o = e.strideHeight, n = e.strideWidth, s = e.dilationDepth, a = e.dilationHeight, i = e.dilationWidth, p = e.effectiveFilterDepth, u = e.effectiveFilterHeight, c = e.effectiveFilterWidth, l = p - 1 - e.padInfo.front, m = u - 1 - e.padInfo.top, d = c - 1 - e.padInfo.left, f = p * u * c - 1; this.userCode = ` - const ivec3 pads = ivec3(${c}, ${m}, ${d}); + const ivec3 pads = ivec3(${l}, ${m}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -22939,7 +22939,7 @@ var Ig = class { } int idyR = int(dyR); - for (int wC = 0; wC < ${l}; + for (int wC = 0; wC < ${c}; wC += ${i}) { float dyC = float(dyCCorner + wC) / ${n}.0; @@ -22956,8 +22956,8 @@ var Ig = class { // Get the current value, check it against the value from the // position matrix. int curPosValue = - wD * ${u} * ${l} + - wR * ${l} + wC; + wD * ${u} * ${c} + + wR * ${c} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; @@ -22969,88 +22969,88 @@ var Ig = class { `; } }; -function nre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: l } = o, c = [1, 1, 1], m = C.computePool3DInfo(a.shape, i, p, c, u, l), d = new Nu(m, "max", true), f = t10.runWebGLProgram(d, [a], a.dtype), h = new Ig(m), g = t10.runWebGLProgram(h, [n, f], a.dtype); +function Bee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = w.computePool3DInfo(a.shape, i, p, l, u, c), d = new bu(m, "max", true), f = t10.runWebGLProgram(d, [a], a.dtype), h = new mg(m), g = t10.runWebGLProgram(h, [n, f], a.dtype); return t10.disposeIntermediateTensorInfo(f), g; } -var P3 = { kernelName: Ji, backendName: "webgl", kernelFunc: nre }; -function sre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s, output: a } = e, i = s; - Ys([s, a], "maxPoolGrad"); - let { filterSize: p, strides: u, pad: l, dimRoundingMode: c } = o, m = C.computePool2DInfo(i.shape, p, u, 1, l, c), d = true, f = new Zs(m, "max", d), h = t10.runWebGLProgram(f, [i], i.dtype), g = new Sg(m), x = t10.runWebGLProgram(g, [n, h], i.dtype); +var YF = { kernelName: Gi, backendName: "webgl", kernelFunc: Bee }; +function zee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s, output: a } = e, i = s; + Vs([s, a], "maxPoolGrad"); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = true, f = new Us(m, "max", d), h = t10.runWebGLProgram(f, [i], i.dtype), g = new lg(m), x = t10.runWebGLProgram(g, [n, h], i.dtype); return t10.disposeIntermediateTensorInfo(h), x; } -var O3 = { kernelName: Zi, backendName: "webgl", kernelFunc: sre }; -function M3(r16, e, t10, o) { - let n = new Zs(t10, "max", false), s = o.runWebGLProgram(n, [r16], "float32"); - n = new Zs(t10, "max", true, true, e); - let a = o.runWebGLProgram(n, [r16], "float32"); +var QF = { kernelName: Ui, backendName: "webgl", kernelFunc: zee }; +function ZF(r15, e, t10, o) { + let n = new Us(t10, "max", false), s = o.runWebGLProgram(n, [r15], "float32"); + n = new Us(t10, "max", true, true, e); + let a = o.runWebGLProgram(n, [r15], "float32"); return [s, a]; } -var L3 = { kernelName: ga, backendName: "webgl", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { x: o } = r16, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; +var JF = { kernelName: ua, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { x: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = e, p = t10; y.assert(o.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`); let u = [1, 1]; - y.assert(C.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); - let l = C.computePool2DInfo(o.shape, n, s, u, a), [c, m] = M3(o, i, l, p); - return [c, m]; + y.assert(w.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); + let c = w.computePool2DInfo(o.shape, n, s, u, a), [l, m] = ZF(o, i, c, p); + return [l, m]; } }; -function B3(r16, e, t10, o) { - let n = y.sizeFromShape(e), a = y.sizeFromShape(r16.shape) / n, i = te({ inputs: { x: r16 }, attrs: { shape: [a, n] }, backend: o }), p = ro(i, "float32", "mean", o), u = te({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); +function e3(r15, e, t10, o) { + let n = y.sizeFromShape(e), a = y.sizeFromShape(r15.shape) / n, i = te({ inputs: { x: r15 }, attrs: { shape: [a, n] }, backend: o }), p = Yr(i, "float32", "mean", o), u = te({ inputs: { x: p }, attrs: { shape: t10 }, backend: o }); return o.disposeIntermediateTensorInfo(i), o.disposeIntermediateTensorInfo(p), u; } -var z3 = { kernelName: ss, backendName: "webgl", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { x: o } = r16, { keepDims: n, axis: s } = e, a = t10, i = o.shape.length, p = y.parseAxisParam(s, o.shape), u = p, l = C.getAxesPermutation(u, i), c = l != null, m = a.shouldExecuteOnCPU([o]), d = [], f = o; - if (c) { +var t3 = { kernelName: Un, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { x: o } = r15, { keepDims: n, axis: s } = e, a = t10, i = o.shape.length, p = y.parseAxisParam(s, o.shape), u = p, c = w.getAxesPermutation(u, i), l = c != null, m = a.shouldExecuteOnCPU([o]), d = [], f = o; + if (l) { if (m) { let S = a.texData.get(f.dataId).values, k = new Array(i); for (let R = 0; R < k.length; R++) - k[R] = o.shape[l[R]]; - let T = Np(S, o.shape, o.dtype, l, k); + k[R] = o.shape[c[R]]; + let _ = Cp(S, o.shape, o.dtype, c, k); f = a.makeTensorInfo(k, o.dtype); - let E = a.texData.get(f.dataId); - E.values = T; + let $ = a.texData.get(f.dataId); + $.values = _; } else - f = ku(o, l, a); - d.push(f), u = C.getInnerMostAxes(u.length, i); - } - C.assertAxesAreInnerMostDims("sum", u, i); - let [h, g] = C.computeOutAndReduceShapes(f.shape, u), x = h; - n && (x = C.expandShapeToKeepDim(h, p)); - let b = B3(f, g, x, a); - for (let w of d) - a.disposeIntermediateTensorInfo(w); + f = yu(o, c, a); + d.push(f), u = w.getInnerMostAxes(u.length, i); + } + w.assertAxesAreInnerMostDims("sum", u, i); + let [h, g] = w.computeOutAndReduceShapes(f.shape, u), x = h; + n && (x = w.expandShapeToKeepDim(h, p)); + let b = e3(f, g, x, a); + for (let C of d) + a.disposeIntermediateTensorInfo(C); return b; } }; -function are(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, l = C.getAxesPermutation(u, i), c = n; - l != null && (c = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), u = C.getInnerMostAxes(u.length, n.shape.length)), C.assertAxesAreInnerMostDims("min", u, i); - let [m, d] = C.computeOutAndReduceShapes(c.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: c }, backend: t10, attrs: { shape: [-1, f] } }), g = ro(h, h.dtype, "min", t10), x; +function Vee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = y.parseAxisParam(s, n.shape), u = p, c = w.getAxesPermutation(u, i), l = n; + c != null && (l = bt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), u = w.getInnerMostAxes(u.length, n.shape.length)), w.assertAxesAreInnerMostDims("min", u, i); + let [m, d] = w.computeOutAndReduceShapes(l.shape, u), f = y.sizeFromShape(d), h = te({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, f] } }), g = Yr(h, h.dtype, "min", t10), x; if (a) { - let b = C.expandShapeToKeepDim(m, p); + let b = w.expandShapeToKeepDim(m, p); x = te({ inputs: { x: g }, backend: t10, attrs: { shape: b } }); } else x = te({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); - return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), l != null && t10.disposeIntermediateTensorInfo(c), x; + return t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(g), c != null && t10.disposeIntermediateTensorInfo(l), x; } -var V3 = { kernelName: as, backendName: "webgl", kernelFunc: are }; -var ire = Gl + ` +var r32 = { kernelName: Gn, backendName: "webgl", kernelFunc: Vee }; +var Wee = Bc + ` return min(a, b); `; -var ure = ` +var Uee = ` vec4 result = vec4(min(a, b)); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - ` + to + ` + ` + Xr + ` return result; `; -var pre = st({ opSnippet: ire, packedOpSnippet: ure, cpuKernelImpl: UD }); -var W3 = { kernelName: Eo, backendName: "webgl", kernelFunc: pre }; -var vg = class { +var Gee = nt({ opSnippet: Wee, packedOpSnippet: Uee, cpuKernelImpl: nD }); +var o3 = { kernelName: Hn, backendName: "webgl", kernelFunc: Gee }; +var dg = class { constructor(e, t10, o) { - this.variableNames = ["x"], this.outputShape = t10.map((l, c) => l[0] + e[c] + l[1]); - let n = e.length, s = Re(n), a = t10.map((l) => l[0]).join(","), i = t10.map((l, c) => l[0] + e[c]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n), u = o === "reflect" ? 0 : 1; + this.variableNames = ["x"], this.outputShape = t10.map((c, l) => c[0] + e[l] + c[1]); + let n = e.length, s = Re(n), a = t10.map((c) => c[0]).join(","), i = t10.map((c, l) => c[0] + e[l]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n), u = o === "reflect" ? 0 : 1; if (n === 1) { this.userCode = ` int start = ${a}; @@ -23087,10 +23087,10 @@ var vg = class { `; } }; -var kg = class { +var fg = class { constructor(e, t10, o) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.outputShape = t10.map((f, h) => f[0] + e[h] + f[1]); - let n = e.length, s = Re(n), a = t10.map((f) => f[0]).join(","), i = t10.map((f, h) => f[0] + e[h]).join(","), p = At("rc", n), u = At("source", n), l = `${p[n - 1]} < ${this.outputShape[n - 1]}`, c = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = o === "reflect" ? 0 : 1, d = ""; + let n = e.length, s = Re(n), a = t10.map((f) => f[0]).join(","), i = t10.map((f, h) => f[0] + e[h]).join(","), p = Rt("rc", n), u = Rt("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = o === "reflect" ? 0 : 1, d = ""; if (n === 1) { let f = ` ${s} source = rc; @@ -23104,11 +23104,11 @@ var kg = class { d = ` ${s} rc = outputLoc; ${f} - result[0] = getChannel(getX(${u.join()}), ${c}); + result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[1] = getChannel(getX(${u.join()}), ${c}); + result[1] = getChannel(getX(${u.join()}), ${l}); } `; } else { @@ -23125,21 +23125,21 @@ var kg = class { d = ` ${s} rc = outputLoc; ${f} - result[0] = getChannel(getX(${u.join()}), ${c}); + result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[1] = getChannel(getX(${u.join()}), ${c}); + result[1] = getChannel(getX(${u.join()}), ${l}); } rc = outputLoc; ${p[n - 2]} += 1; if(${p[n - 2]} < ${this.outputShape[n - 2]}) { ${f} - result[2] = getChannel(getX(${u.join()}), ${c}); + result[2] = getChannel(getX(${u.join()}), ${l}); ${p[n - 1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[3] = getChannel(getX(${u.join()}), ${c}); + result[3] = getChannel(getX(${u.join()}), ${l}); } } `; @@ -23157,22 +23157,22 @@ var kg = class { `; } }; -var lre = ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o } = r16, { paddings: n, mode: s } = t10, a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new kg(o.shape, n, s) : new vg(o.shape, n, s); +var Hee = ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o } = r15, { paddings: n, mode: s } = t10, a = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new fg(o.shape, n, s) : new dg(o.shape, n, s); return e.runWebGLProgram(a, [o], o.dtype); }; -var U3 = { kernelName: is, backendName: "webgl", kernelFunc: lre }; -var cre = `if (b == 0.0) return NAN; +var n3 = { kernelName: Kn, backendName: "webgl", kernelFunc: Hee }; +var Kee = `if (b == 0.0) return NAN; return mod(a, b);`; -var mre = ` +var qee = ` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - ` + to + ` + ` + Xr + ` return result; `; -var dre = st({ opSnippet: cre, packedOpSnippet: mre }); -var G3 = { kernelName: us, backendName: "webgl", kernelFunc: dre }; -var Ng = class { +var jee = nt({ opSnippet: Kee, packedOpSnippet: qee }); +var s3 = { kernelName: qn, backendName: "webgl", kernelFunc: jee }; +var hg = class { constructor(e, t10, o) { this.variableNames = ["probs"], this.customUniforms = [{ name: "seed", type: "float" }], this.outputShape = [e, o], this.userCode = ` void main() { @@ -23197,12 +23197,12 @@ var Ng = class { `; } }; -var fre = ` +var Xee = ` if (a == b) { return 1.0; }; return a / b;`; -var hre = ` +var Yee = ` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -23221,25 +23221,25 @@ var hre = ` return result; `; -var W0 = st({ opSnippet: fre, packedOpSnippet: hre, checkOutOfBounds: true }); -var H3 = { kernelName: Vn, backendName: "webgl", kernelFunc: W0 }; -var K3 = "return a - b;"; -var U0 = st({ opSnippet: K3, packedOpSnippet: K3, supportsComplex: true, cpuKernelImpl: lA }); -var q3 = { kernelName: Oo, backendName: "webgl", kernelFunc: U0 }; -function G0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = V0({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: a, keepDims: false } }), p = C.expandShapeToKeepDim(i.shape, a), u = te({ inputs: { x: i }, backend: t10, attrs: { shape: p } }), l = U0({ inputs: { a: n, b: u }, backend: t10 }), c = L0({ inputs: { x: l }, backend: t10 }), m = Tp({ inputs: { x: c }, backend: t10, attrs: { axis: a, keepDims: false } }), d = te({ inputs: { x: m }, backend: t10, attrs: { shape: p } }), f = W0({ inputs: { a: c, b: d }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), f; -} -var j3 = { kernelName: Fs, backendName: "webgl", kernelFunc: G0 }; -function gre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : G0({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], l = p.shape[1], c = new Ng(u, l, s), m = [[a]], d = t10.runWebGLProgram(c, [p], "int32", m); +var Ev = nt({ opSnippet: Xee, packedOpSnippet: Yee, checkOutOfBounds: true }); +var a3 = { kernelName: fn, backendName: "webgl", kernelFunc: Ev }; +var i3 = "return a - b;"; +var $v = nt({ opSnippet: i3, packedOpSnippet: i3, supportsComplex: true, cpuKernelImpl: kD }); +var u3 = { kernelName: Ts, backendName: "webgl", kernelFunc: $v }; +function Rv(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { dim: s } = o, a = y.parseAxisParam([s], n.shape), i = _v({ inputs: { x: n }, backend: t10, attrs: { reductionIndices: a, keepDims: false } }), p = w.expandShapeToKeepDim(i.shape, a), u = te({ inputs: { x: i }, backend: t10, attrs: { shape: p } }), c = $v({ inputs: { a: n, b: u }, backend: t10 }), l = kv({ inputs: { x: c }, backend: t10 }), m = wp({ inputs: { x: l }, backend: t10, attrs: { axis: a, keepDims: false } }), d = te({ inputs: { x: m }, backend: t10, attrs: { shape: p } }), f = Ev({ inputs: { a: l, b: d }, backend: t10 }); + return t10.disposeIntermediateTensorInfo(i), t10.disposeIntermediateTensorInfo(u), t10.disposeIntermediateTensorInfo(c), t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(m), t10.disposeIntermediateTensorInfo(d), f; +} +var p3 = { kernelName: Is, backendName: "webgl", kernelFunc: Rv }; +function Qee(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : Rv({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new hg(u, c, s), m = [[a]], d = t10.runWebGLProgram(l, [p], "int32", m); return i || t10.disposeIntermediateTensorInfo(p), d; } -var X3 = { kernelName: ps, backendName: "webgl", kernelFunc: gre }; -var xre = Gt + ` +var c3 = { kernelName: jn, backendName: "webgl", kernelFunc: Qee }; +var Zee = Wt + ` return -x; `; -var yre = ` +var Jee = ` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -23250,38 +23250,38 @@ var yre = ` return result; `; -function bre(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +function ete(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (t10.shouldExecuteOnCPU([o])) { - let s = t10.texData.get(o.dataId), [a, i] = HD(s.values, o.shape, o.dtype); + let s = t10.texData.get(o.dataId), [a, i] = aD(s.values, o.shape, o.dtype); return t10.makeTensorInfo(i, o.dtype, a); } let n; - return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Lr(o.shape, yre) : n = new nr(o.shape, xre), t10.runWebGLProgram(n, [o], o.dtype); -} -var Y3 = { kernelName: ls, backendName: "webgl", kernelFunc: bre }; -var Cre = Ut.nonMaxSuppressionV3Impl; -function wre(r16) { - C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), l = t10.readSync(s.dataId), { selectedIndices: c } = Cre(u, l, a, i, p); - return t10.makeTensorInfo([c.length], "int32", new Int32Array(c)); -} -var Q3 = { kernelName: cs, backendName: "webgl", kernelFunc: wre }; -var Sre = Ut.nonMaxSuppressionV4Impl; -function Ire(r16) { - C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, l = t10.readSync(n.dataId), c = t10.readSync(s.dataId), { selectedIndices: m, validOutputs: d } = Sre(l, c, a, i, p, u); + return A().getBool("WEBGL_PACK_UNARY_OPERATIONS") ? n = new Fr(o.shape, Jee) : n = new tr(o.shape, Zee), t10.runWebGLProgram(n, [o], o.dtype); +} +var l3 = { kernelName: pa, backendName: "webgl", kernelFunc: ete }; +var tte = Vt.nonMaxSuppressionV3Impl; +function rte(r15) { + w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), { selectedIndices: l } = tte(u, c, a, i, p); + return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); +} +var m3 = { kernelName: Qn, backendName: "webgl", kernelFunc: rte }; +var ote = Vt.nonMaxSuppressionV4Impl; +function nte(r15) { + w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, padToMaxOutputSize: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), { selectedIndices: m, validOutputs: d } = ote(c, l, a, i, p, u); return [t10.makeTensorInfo([m.length], "int32", new Int32Array(m)), t10.makeTensorInfo([], "int32", new Int32Array([d]))]; } -var Z3 = { kernelName: ni, backendName: "webgl", kernelFunc: Ire }; -var vre = Ut.nonMaxSuppressionV5Impl; -function kre(r16) { - C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, l = t10.readSync(n.dataId), c = t10.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = vre(l, c, m, d, f, h); +var d3 = { kernelName: Qa, backendName: "webgl", kernelFunc: nte }; +var ste = Vt.nonMaxSuppressionV5Impl; +function ate(r15) { + w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = ste(c, l, m, d, f, h); return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var J3 = { kernelName: ms, backendName: "webgl", kernelFunc: kre }; -var Tg = class { +var f3 = { kernelName: Zn, backendName: "webgl", kernelFunc: ate }; +var gg = class { constructor(e, t10, o, n) { this.variableNames = ["indices"], this.outputShape = [e, t10], this.userCode = ` void main() { @@ -23293,52 +23293,52 @@ var Tg = class { `; } }; -var Nre = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), l = new Tg(u, a, i, p), c = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u] } }), m = t10.runWebGLProgram(l, [c], s); - t10.disposeIntermediateTensorInfo(c); +var ite = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new gg(u, a, i, p), l = te({ inputs: { x: n }, backend: t10, attrs: { shape: [u] } }), m = t10.runWebGLProgram(c, [l], s); + t10.disposeIntermediateTensorInfo(l); let d = [...n.shape, a], f = te({ inputs: { x: m }, backend: t10, attrs: { shape: d } }); return t10.disposeIntermediateTensorInfo(m), f; }; -var eP = { kernelName: ds, backendName: "webgl", kernelFunc: Nre }; -function mm(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var h3 = { kernelName: Jn, backendName: "webgl", kernelFunc: ite }; +function sm(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "complex64") { - let n = _i({ inputs: { input: o }, backend: t10 }), s = mm({ inputs: { x: n }, backend: t10 }), a = Ep({ inputs: { input: o }, backend: t10 }), i = mm({ inputs: { x: a }, backend: t10 }), p = zr({ inputs: { real: s, imag: i }, backend: t10 }); + let n = bi({ inputs: { input: o }, backend: t10 }), s = sm({ inputs: { x: n }, backend: t10 }), a = Ip({ inputs: { input: o }, backend: t10 }), i = sm({ inputs: { x: a }, backend: t10 }), p = Or({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; } else - return Ei({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); } -var tP = { kernelName: _a, backendName: "webgl", kernelFunc: mm }; -function rP(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var g3 = { kernelName: Sa, backendName: "webgl", kernelFunc: sm }; +function x3(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = _i({ inputs: { input: o }, backend: t10 }), s = rP({ inputs: { x: n }, backend: t10 }), a = Ep({ inputs: { input: o }, backend: t10 }), i = mm({ inputs: { x: a }, backend: t10 }), p = zr({ inputs: { real: s, imag: i }, backend: t10 }); + let n = bi({ inputs: { input: o }, backend: t10 }), s = x3({ inputs: { x: n }, backend: t10 }), a = Ip({ inputs: { input: o }, backend: t10 }), i = sm({ inputs: { x: a }, backend: t10 }), p = Or({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeIntermediateTensorInfo(n), t10.disposeIntermediateTensorInfo(s), t10.disposeIntermediateTensorInfo(a), t10.disposeIntermediateTensorInfo(i), p; } else - return Ei({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + return Ci({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); } -var oP = { kernelName: xa, backendName: "webgl", kernelFunc: rP }; -function Tre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o; +var y3 = { kernelName: ca, backendName: "webgl", kernelFunc: x3 }; +function ute(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; if (e.length === 1) - return cg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return eg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; - e.forEach((l) => { - y.assertShapesMatch(s, l.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === l.dtype, () => "All tensors passed to stack must have matching dtypes"); + e.forEach((c) => { + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); - let i = [], p = e.map((l) => { - let c = cg({ inputs: { input: l }, backend: t10, attrs: { dim: n } }); - return i.push(c), c; - }), u = M0({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((l) => t10.disposeIntermediateTensorInfo(l)), u; + let i = [], p = e.map((c) => { + let l = eg({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + return i.push(l), l; + }), u = vv({ inputs: p, backend: t10, attrs: { axis: n } }); + return i.forEach((c) => t10.disposeIntermediateTensorInfo(c)), u; } -var nP = { kernelName: ya, backendName: "webgl", kernelFunc: Tre }; -var _g = class { +var b3 = { kernelName: la, backendName: "webgl", kernelFunc: ute }; +var xg = class { constructor(e, t10, o) { - this.variableNames = ["x"], this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t10.map((u, l) => u[0] + e[l] + u[1]); - let n = e.length, s = Re(n), a = t10.map((u) => u[0]).join(","), i = t10.map((u, l) => u[0] + e[l]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n); + this.variableNames = ["x"], this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t10.map((u, c) => u[0] + e[c] + u[1]); + let n = e.length, s = Re(n), a = t10.map((u) => u[0]).join(","), i = t10.map((u, c) => u[0] + e[c]).join(","), p = ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, n); if (n === 1) { this.userCode = ` int start = ${a}; @@ -23371,16 +23371,16 @@ var _g = class { `; } }; -var Eg = class { +var yg = class { constructor(e, t10, o) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true, this.customUniforms = [{ name: "value", type: "float" }], this.outputShape = t10.map((h, g) => h[0] + e[g] + h[1]); - let n = e.length, s = Re(n), a = t10.map((h) => h[0]).join(","), i = t10.map((h, g) => h[0] + e[g]).join(","), p = At("rc", n), u = At("source", n), l = `${p[n - 1]} < ${this.outputShape[n - 1]}`, c = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = [`${s} rc = outputLoc;`, `${p[n - 1]} += 1; - if(${l}) { + let n = e.length, s = Re(n), a = t10.map((h) => h[0]).join(","), i = t10.map((h, g) => h[0] + e[g]).join(","), p = Rt("rc", n), u = Rt("source", n), c = `${p[n - 1]} < ${this.outputShape[n - 1]}`, l = n === 1 ? "source" : `vec2(${u.slice(-2).join()})`, m = [`${s} rc = outputLoc;`, `${p[n - 1]} += 1; + if(${c}) { `, n === 1 ? "" : `} rc = outputLoc; ${p[n - 2]} += 1; if(${p[n - 2]} < ${this.outputShape[n - 2]}) {`, n === 1 ? "" : ` ${p[n - 1]} += 1; - if(${l}) {`], d = n === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))", f = ""; + if(${c}) {`], d = n === 1 ? "rc < start || rc >= end" : "any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))", f = ""; for (let h = 0, g = n === 1 ? 2 : 4; h < g; h++) f += ` ${m[h]} @@ -23388,7 +23388,7 @@ var Eg = class { result[${h}] = float(value); } else { ${s} source = rc - start; - result[${h}] = getChannel(getX(${u.join()}), ${c}); + result[${h}] = getChannel(getX(${u.join()}), ${l}); } `; f += n === 1 ? "} " : "}}", this.userCode = ` @@ -23404,17 +23404,17 @@ var Eg = class { `; } }; -var H0 = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { paddings: s, constantValue: a } = o; +var Dv = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, constantValue: a } = o; if (y.sizeFromShape(n.shape) === 0) { - let u = s.map((l, c) => l[0] + n.shape[c] + l[1]); - return Ei({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); + let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); + return Ci({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); } - let i = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Eg(n.shape, s, a) : new _g(n.shape, s, a), p = [[a]]; + let i = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new yg(n.shape, s, a) : new xg(n.shape, s, a), p = [[a]]; return t10.runWebGLProgram(i, [n], n.dtype, p); }; -var sP = { kernelName: fs, backendName: "webgl", kernelFunc: H0 }; -var _re = ` +var C3 = { kernelName: es, backendName: "webgl", kernelFunc: Dv }; +var pte = ` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -23424,7 +23424,7 @@ var _re = ` return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `; -var Ere = ` +var cte = ` // 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); @@ -23440,57 +23440,57 @@ var Ere = ` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - ` + to + ` + ` + Xr + ` return result; `; -var $re = st({ opSnippet: _re, packedOpSnippet: Ere }); -var aP = { kernelName: hs, backendName: "webgl", kernelFunc: $re }; -function Rre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = [], u = y.parseAxisParam(s, n.shape), l = u, c = C.getAxesPermutation(l, i), m = n; - c != null && (m = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), l = C.getInnerMostAxes(l.length, i), p.push(m)), C.assertAxesAreInnerMostDims("prod", l, i); +var lte = nt({ opSnippet: pte, packedOpSnippet: cte }); +var w3 = { kernelName: ts, backendName: "webgl", kernelFunc: lte }; +function mte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o, i = n.shape.length, p = [], u = y.parseAxisParam(s, n.shape), c = u, l = w.getAxesPermutation(c, i), m = n; + l != null && (m = bt({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), c = w.getInnerMostAxes(c.length, i), p.push(m)), w.assertAxesAreInnerMostDims("prod", c, i); let d; if (t10.shouldExecuteOnCPU([m])) { - let f = t10.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: x } = qD(m.shape, m.dtype, f, l); + let f = t10.texData.get(m.dataId).values, { outVals: h, outShape: g, outDtype: x } = uD(m.shape, m.dtype, f, c); d = t10.makeTensorInfo(g, x, h); } else { - let [f, h] = C.computeOutAndReduceShapes(m.shape, l), g = y.sizeFromShape(h), x = te({ inputs: { x: m }, backend: t10, attrs: { shape: [-1, g] } }), b = mi(n.dtype), w = ro(x, b, "prod", t10); - d = te({ inputs: { x: w }, backend: t10, attrs: { shape: f } }), p.push(x), p.push(w); + let [f, h] = w.computeOutAndReduceShapes(m.shape, c), g = y.sizeFromShape(h), x = te({ inputs: { x: m }, backend: t10, attrs: { shape: [-1, g] } }), b = oi(n.dtype), C = Yr(x, b, "prod", t10); + d = te({ inputs: { x: C }, backend: t10, attrs: { shape: f } }), p.push(x), p.push(C); } if (a) { p.push(d); - let f = C.expandShapeToKeepDim(d.shape, u); + let f = w.expandShapeToKeepDim(d.shape, u); d = te({ inputs: { x: d }, backend: t10, attrs: { shape: f } }); } return p.forEach((f) => t10.disposeIntermediateTensorInfo(f)), d; } -var iP = { kernelName: Ho, backendName: "webgl", kernelFunc: Rre }; -function Dre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t10.readSync(x.dataId)), u = n.map((x) => x.shape), l = t10.readSync(s.dataId), c = t10.readSync(a.dataId), [m, d, f] = jD(p, u, l, s.shape, s.dtype, c, a.shape, i), h = m.map((x) => t10.makeTensorInfo([x.length], "int32", x)), g = t10.makeTensorInfo(f, s.dtype, d); +var S3 = { kernelName: os, backendName: "webgl", kernelFunc: mte }; +function dte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { paramsNestedSplits: n, paramsDenseValues: s, indices: a } = e, { outputRaggedRank: i } = o, p = n.map((x) => t10.readSync(x.dataId)), u = n.map((x) => x.shape), c = t10.readSync(s.dataId), l = t10.readSync(a.dataId), [m, d, f] = pD(p, u, c, s.shape, s.dtype, l, a.shape, i), h = m.map((x) => t10.makeTensorInfo([x.length], "int32", x)), g = t10.makeTensorInfo(f, s.dtype, d); return h.concat([g]); } -var uP = { kernelName: Qp, backendName: "webgl", kernelFunc: Dre }; -function Are(r16) { - let { inputs: e, backend: t10 } = r16, { starts: o, limits: n, deltas: s } = e, a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, l] = XD(a, o.shape, o.dtype, i, n.shape, p, s.shape), c = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([l.length], o.dtype, l); - return [c, m]; +var I3 = { kernelName: Hp, backendName: "webgl", kernelFunc: dte }; +function fte(r15) { + let { inputs: e, backend: t10 } = r15, { starts: o, limits: n, deltas: s } = e, a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = cD(a, o.shape, o.dtype, i, n.shape, p, s.shape), l = t10.makeTensorInfo([u.length], "int32", u), m = t10.makeTensorInfo([c.length], o.dtype, c); + return [l, m]; } -var pP = { kernelName: Zp, backendName: "webgl", kernelFunc: Are }; -function Fre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.readSync(n.dataId), l = t10.readSync(s.dataId), c = t10.readSync(a.dataId), m = i.map((g) => t10.readSync(g.dataId)), d = i.map((g) => g.shape), [f, h] = YD(u, n.shape, l, s.shape, s.dtype, c, a.shape, m, d, p); +var v3 = { kernelName: Kp, backendName: "webgl", kernelFunc: fte }; +function hte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { shape: n, values: s, defaultValue: a, rowPartitionTensors: i } = e, { rowPartitionTypes: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), l = t10.readSync(a.dataId), m = i.map((g) => t10.readSync(g.dataId)), d = i.map((g) => g.shape), [f, h] = lD(u, n.shape, c, s.shape, s.dtype, l, a.shape, m, d, p); return t10.makeTensorInfo(f, s.dtype, h); } -var lP = { kernelName: Jp, backendName: "webgl", kernelFunc: Fre }; -var K0 = (r16) => { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, step: s, dtype: a } = t10, i = QD(o, n, s, a); +var k3 = { kernelName: qp, backendName: "webgl", kernelFunc: hte }; +var Av = (r15) => { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, step: s, dtype: a } = t10, i = mD(o, n, s, a); return e.makeTensorInfo([i.length], a, i); }; -var cP = { kernelName: ba, backendName: "webgl", kernelFunc: K0 }; -var Pre = "return 1.0 / x;"; -var Ore = xe({ opSnippet: Pre }); -var mP = { kernelName: xs, backendName: "webgl", kernelFunc: Ore }; -var Mre = Gt + ` +var N3 = { kernelName: ma, backendName: "webgl", kernelFunc: Av }; +var gte = "return 1.0 / x;"; +var xte = xe({ opSnippet: gte }); +var T3 = { kernelName: ns, backendName: "webgl", kernelFunc: xte }; +var yte = Wt + ` return (x < 0.0) ? 0.0 : x; `; -var Lre = ` +var bte = ` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -23501,12 +23501,12 @@ var Lre = ` return result; `; -var Bre = xe({ opSnippet: Mre, packedOpSnippet: Lre }); -var dP = { kernelName: ys, backendName: "webgl", kernelFunc: Bre }; -var zre = Gt + ` +var Cte = xe({ opSnippet: yte, packedOpSnippet: bte }); +var _3 = { kernelName: ss, backendName: "webgl", kernelFunc: Cte }; +var wte = Wt + ` return (x < 0.0) ? 0.0 : min(6.0, x); `; -var Vre = ` +var Ste = ` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -23517,18 +23517,18 @@ var Vre = ` return result; `; -var Wre = xe({ opSnippet: zre, packedOpSnippet: Vre }); -var fP = { kernelName: ws, backendName: "webgl", kernelFunc: Wre }; -var $g = class { +var Ite = xe({ opSnippet: wte, packedOpSnippet: Ste }); +var E3 = { kernelName: us, backendName: "webgl", kernelFunc: Ite }; +var bg = class { constructor(e, t10, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = e; this.outputShape = [a, t10, o, u]; - let l = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], c = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; + let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; s ? m = "(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)" : m = "vec2(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${l[0] / c[0]}, - ${l[1] / c[1]}); + ${c[0] / l[0]}, + ${c[1] / l[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${p}.0); void main() { @@ -23561,17 +23561,17 @@ var $g = class { `; } }; -var Rg = class { +var Cg = class { constructor(e, t10, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = e; this.outputShape = [a, t10, o, u]; - let l = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], c = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; + let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m; s ? m = "(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)" : m = "vec3(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${l[0] / c[0]}, - ${l[1] / c[1]}, - ${l[1] / c[1]}); + ${c[0] / l[0]}, + ${c[1] / l[1]}, + ${c[1] / l[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${p}.0, ${p}.0); @@ -23647,15 +23647,15 @@ var Rg = class { `; } }; -function Ure(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, l = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new Rg(n.shape, p, u, s, a) : new $g(n.shape, p, u, s, a); - return t10.runWebGLProgram(l, [n], "float32"); +function vte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new Cg(n.shape, p, u, s, a) : new bg(n.shape, p, u, s, a); + return t10.runWebGLProgram(c, [n], "float32"); } -var hP = { kernelName: Cs, backendName: "webgl", kernelFunc: Ure }; -var Dg = class { +var $3 = { kernelName: is, backendName: "webgl", kernelFunc: vte }; +var wg = class { constructor(e, t10, o) { this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t10; - let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], l = p[0] / u[0], c = p[1] / u[1], m = 1 / l, d = 1 / c, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; + let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, d = 1 / l, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -23666,8 +23666,8 @@ var Dg = class { float accumulator = 0.0; - const float heightScale = float(${l}); - const float widthScale = float(${c}); + const float heightScale = float(${c}); + const float widthScale = float(${l}); const float invHeightScale = float(${m}); const float invWidthScale = float(${d}); @@ -23740,21 +23740,21 @@ var Dg = class { `; } }; -function Gre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, i = new Dg(s.shape, n.shape, a); +function kte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, i = new wg(s.shape, n.shape, a); return t10.runWebGLProgram(i, [s], s.dtype); } -var gP = { kernelName: ii, backendName: "webgl", kernelFunc: Gre }; -var Ag = class { +var R3 = { kernelName: Ja, backendName: "webgl", kernelFunc: kte }; +var Sg = class { constructor(e, t10, o, n, s) { this.variableNames = ["A"], this.outputShape = []; let [a, i, p, u] = e; this.outputShape = [a, t10, o, u]; - let l = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], c = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; + let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; s ? d = "max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))" : d = "vec2(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${l[0] / c[0]}, - ${l[1] / c[1]}); + ${c[0] / l[0]}, + ${c[1] / l[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${p}.0); void main() { @@ -23776,17 +23776,17 @@ var Ag = class { `; } }; -var Fg = class { +var Ig = class { constructor(e, t10, o, n, s) { this.variableNames = ["A"], this.packedInputs = true, this.packedOutput = true, this.outputShape = []; let [a, i, p, u] = e; this.outputShape = [a, t10, o, u]; - let l = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], c = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; + let c = [n && t10 > 1 ? i - 1 : i, n && o > 1 ? p - 1 : p], l = [n && t10 > 1 ? t10 - 1 : t10, n && o > 1 ? o - 1 : o], m = n ? "0.5" : "0.0", d; s ? d = "max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))" : d = "vec3(yRC) * effectiveInputOverOutputRatioRC", this.userCode = ` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${l[0] / c[0]}, - ${l[1] / c[1]}, - ${l[1] / c[1]}); + ${c[0] / l[0]}, + ${c[1] / l[1]}, + ${c[1] / l[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${p}.0, ${p}.0); @@ -23826,15 +23826,15 @@ var Fg = class { `; } }; -function Hre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, l = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new Fg(n.shape, p, u, s, a) : new Ag(n.shape, p, u, s, a); - return t10.runWebGLProgram(l, [n], n.dtype); +function Nte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = A().getBool("WEBGL_PACK_IMAGE_OPERATIONS") ? new Ig(n.shape, p, u, s, a) : new Sg(n.shape, p, u, s, a); + return t10.runWebGLProgram(c, [n], n.dtype); } -var xP = { kernelName: bs, backendName: "webgl", kernelFunc: Hre }; -var Pg = class { +var D3 = { kernelName: as, backendName: "webgl", kernelFunc: Nte }; +var vg = class { constructor(e, t10, o) { this.variableNames = ["dy"], this.outputShape = [], this.outputShape = t10; - let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], l = p[0] / u[0], c = p[1] / u[1], m = 1 / l, d = 1 / c, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; + let [, n, s] = t10, [, a, i] = e, p = [o && a > 1 ? n - 1 : n, o && i > 1 ? s - 1 : s], u = [o && a > 1 ? a - 1 : a, o && i > 1 ? i - 1 : i], c = p[0] / u[0], l = p[1] / u[1], m = 1 / c, d = 1 / l, f = Math.ceil(m) * 2 + 2, h = Math.ceil(d) * 2 + 2; this.userCode = ` void main() { ivec4 coords = getOutputCoords(); @@ -23845,8 +23845,8 @@ var Pg = class { float accumulator = 0.0; - const float heightScale = float(${l}); - const float widthScale = float(${c}); + const float heightScale = float(${c}); + const float widthScale = float(${l}); const float invHeightScale = float(${m}); const float invWidthScale = float(${d}); @@ -23908,12 +23908,12 @@ var Pg = class { `; } }; -function Kre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, i = new Pg(s.shape, n.shape, a); +function Tte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, i = new vg(s.shape, n.shape, a); return t10.runWebGLProgram(i, [s], s.dtype); } -var yP = { kernelName: ai, backendName: "webgl", kernelFunc: Kre }; -var Og = class { +var A3 = { kernelName: Za, backendName: "webgl", kernelFunc: Tte }; +var kg = class { constructor(e, t10) { this.variableNames = ["x"]; let o = e.length; @@ -23937,14 +23937,14 @@ var Og = class { `; } }; -var Mg = class { +var Ng = class { constructor(e, t10) { this.variableNames = ["x"], this.packedInputs = true, this.packedOutput = true; let o = e.length; if (o > 4) throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`); this.outputShape = e; - let n = At("rc", o), s = `${n[o - 1]} + 1 < ${this.outputShape[o - 1]}`, a = `${n[o - 2]} + 1 < ${this.outputShape[o - 2]}`, i = Re(o); + let n = Rt("rc", o), s = `${n[o - 1]} + 1 < ${this.outputShape[o - 1]}`, a = `${n[o - 2]} + 1 < ${this.outputShape[o - 2]}`, i = Re(o); o === 1 ? this.userCode = ` void main(){ int rc = getOutputCoords(); @@ -23966,9 +23966,9 @@ var Mg = class { result.g = ${u(n.slice())}; } if(${a}) { - result.b = ${l(n.slice())}; + result.b = ${c(n.slice())}; if(${s}) { - result.a = ${c(n.slice())}; + result.a = ${l(n.slice())}; } } setOutput(result); @@ -23980,14 +23980,14 @@ var Mg = class { function u(f) { return f[o - 1] = "(" + f[o - 1] + " + 1)", m(f); } - function l(f) { + function c(f) { return f[o - 2] = "(" + f[o - 2] + " + 1)", m(f); } - function c(f) { + function l(f) { return f[o - 1] = "(" + f[o - 1] + " + 1)", f[o - 2] = "(" + f[o - 2] + " + 1)", m(f); } function m(f) { - let h = e.map((b, w) => d(w, f)), g = h.join(","), x = h.slice(-2).join(","); + let h = e.map((b, C) => d(C, f)), g = h.join(","), x = h.slice(-2).join(","); return `getChannel(getX(${g}), vec2(${x}))`; } function d(f, h) { @@ -23995,15 +23995,15 @@ var Mg = class { } } }; -function qre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); +function _te(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = n.shape.length, i = y.parseAxisParam(s, n.shape); if (a === 0) - return Ft({ inputs: { x: n }, backend: t10 }); - let p = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Mg(n.shape, i) : new Og(n.shape, i); + return Dt({ inputs: { x: n }, backend: t10 }); + let p = A().getBool("WEBGL_PACK_ARRAY_OPERATIONS") ? new Ng(n.shape, i) : new kg(n.shape, i); return t10.runWebGLProgram(p, [n], n.dtype); } -var bP = { kernelName: Ss, backendName: "webgl", kernelFunc: qre }; -var Lg = class { +var F3 = { kernelName: ps, backendName: "webgl", kernelFunc: _te }; +var Tg = class { constructor(e, t10) { this.variableNames = ["Image"], this.outputShape = [], this.customUniforms = [{ name: "params", type: "vec4" }]; let o = e[1], n = e[2]; @@ -24031,11 +24031,11 @@ var Lg = class { `; } }; -var CP = { kernelName: Vs, backendName: "webgl", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { image: o } = r16, { radians: n, fillValue: s, center: a } = e, i = t10, p = new Lg(o.shape, s), [u, l] = C.getImageCenter(a, o.shape[1], o.shape[2]), c = [[u, l, Math.sin(n), Math.cos(n)]]; - return i.runWebGLProgram(p, [o], o.dtype, c); +var P3 = { kernelName: Ds, backendName: "webgl", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = e, i = t10, p = new Tg(o.shape, s), [u, c] = w.getImageCenter(a, o.shape[1], o.shape[2]), l = [[u, c, Math.sin(n), Math.cos(n)]]; + return i.runWebGLProgram(p, [o], o.dtype, l); } }; -var jre = ` +var Ete = ` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -24051,17 +24051,17 @@ var jre = ` } } `; -var Xre = xe({ opSnippet: jre }); -var wP = { kernelName: Is, backendName: "webgl", kernelFunc: Xre }; -var Yre = "return inversesqrt(x);"; -var Qre = xe({ opSnippet: Yre, cpuKernelImpl: ZD }); -var SP = { kernelName: Do, backendName: "webgl", kernelFunc: Qre }; -var Tu = class { +var $te = xe({ opSnippet: Ete }); +var O3 = { kernelName: cs, backendName: "webgl", kernelFunc: $te }; +var Rte = "return inversesqrt(x);"; +var Dte = xe({ opSnippet: Rte, cpuKernelImpl: dD }); +var M3 = { kernelName: ls, backendName: "webgl", kernelFunc: Dte }; +var Cu = class { constructor(e, t10, o, n, s, a, i = true, p = false) { this.variableNames = ["updates", "indices", "defaultValue"], this.outputShape = a; - let u = Re(s.length), l = Re(a.length), c = ""; - o === 1 ? c = "i" : o === 2 && (c = "i, j"); - let m = `getIndices(${c})`, d = ""; + let u = Re(s.length), c = Re(a.length), l = ""; + o === 1 ? l = "i" : o === 2 && (l = "i, j"); + let m = `getIndices(${l})`, d = ""; n === 1 ? d = "i" : n === 2 && (d = "i, coords[1]"); let f = `getUpdates(${d})`, h = ""; p && (h = "coords[0], coords[1]"); @@ -24070,7 +24070,7 @@ var Tu = class { ${u} strides = ${u}(${s}); void main() { - ${l} coords = getOutputCoords(); + ${c} coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < ${e}; i++) { @@ -24089,12 +24089,12 @@ var Tu = class { `; } }; -var Bg = class { +var _g = class { constructor(e, t10, o, n, s, a, i = true, p = false) { this.variableNames = ["updates", "indices", "defaultValue"], this.packedInputs = true, this.packedOutput = true, this.outputShape = a; - let u = Re(s.length), l = Re(a.length), c = ""; - o === 1 ? c = "i" : o === 2 && (c = "i, j"); - let m = `getIndices(${c})`, d = ""; + let u = Re(s.length), c = Re(a.length), l = ""; + o === 1 ? l = "i" : o === 2 && (l = "i, j"); + let m = `getIndices(${l})`, d = ""; n === 1 ? d = "i" : n === 2 && (d = "i, coords[1]"); let f = `getUpdates(${d})`, h = ""; p && (h = "coords[0], coords[1]"); @@ -24103,7 +24103,7 @@ var Bg = class { ${u} strides = ${u}(${s}); void main() { - ${l} coords = getOutputCoords(); + ${c} coords = getOutputCoords(); vec4 sum = vec4(0.); vec4 found = vec4(0.); for (int i = 0; i < ${e}; i+=2) { @@ -24139,17 +24139,17 @@ var Bg = class { `; } }; -function Zre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: l, outputSize: c } = C.calculateShapes(s, n, a), m = [c / u, u]; - if (c === 0) +function Ate(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; + if (l === 0) return t10.makeTensorInfo(a, n.dtype); let d = te({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), f = te({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = t10.makeTensorInfo([], "float32", new Float32Array([0])), g; - A().getBool("WEBGL_PACK") ? g = new Bg(p, i, d.shape.length, f.shape.length, l, m) : g = new Tu(p, i, d.shape.length, f.shape.length, l, m); + A().getBool("WEBGL_PACK") ? g = new _g(p, i, d.shape.length, f.shape.length, c, m) : g = new Cu(p, i, d.shape.length, f.shape.length, c, m); let x = t10.runWebGLProgram(g, [f, d, h], f.dtype), b = te({ inputs: { x }, backend: t10, attrs: { shape: a } }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(x), t10.disposeIntermediateTensorInfo(h), b; } -var IP = { kernelName: vs, backendName: "webgl", kernelFunc: Zre }; -var zg = class { +var L3 = { kernelName: ms, backendName: "webgl", kernelFunc: Ate }; +var Eg = class { constructor(e, t10, o, n) { this.variableNames = ["sortedSequence", "values"], this.customUniforms = [{ name: "numInputs", type: "int" }], this.outputShape = [e, o]; let s = "while (left < right) {", a = `for (int i = 0; i < ${Math.ceil(Math.log2(t10 + 1))}; ++i) { if (left >= right) break;`, i = A().getNumber("WEBGL_VERSION") === 2 ? s : a, p = n === "left" ? "<" : "<="; @@ -24181,12 +24181,12 @@ var zg = class { `; } }; -function Jre(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sortedSequence: n, values: s } = e, { side: a } = o, i = new zg(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; +function Fte(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o, i = new Eg(n.shape[0], n.shape[1], s.shape[1], a), p = [[n.shape[1]]]; return t10.runWebGLProgram(i, [n, s], "int32", p); } -var vP = { kernelName: Ns, backendName: "webgl", kernelFunc: Jre }; -var Vg = class { +var B3 = { kernelName: fs, backendName: "webgl", kernelFunc: Fte }; +var $g = class { constructor(e, t10, o) { this.variableNames = ["c", "a", "b"], this.outputShape = t10; let n, s; @@ -24196,8 +24196,8 @@ var Vg = class { s = "resRC", n = "resRC"; else { let i = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], p = [], u = []; - for (let l = 0; l < t10.length; l++) - u.push(`${i[l]}`), l < e && p.push(`${i[l]}`); + for (let c = 0; c < t10.length; c++) + u.push(`${i[c]}`), c < e && p.push(`${i[c]}`); n = p.join(), s = u.join(); } let a = Re(o); @@ -24214,24 +24214,24 @@ var Vg = class { `; } }; -function eoe(r16) { - let { inputs: e, backend: t10 } = r16, { condition: o, t: n, e: s } = e, a = new Vg(o.shape.length, n.shape, n.shape.length); - return t10.runWebGLProgram(a, [o, n, s], pt(n.dtype, s.dtype)); +function Pte(r15) { + let { inputs: e, backend: t10 } = r15, { condition: o, t: n, e: s } = e, a = new $g(o.shape.length, n.shape, n.shape.length); + return t10.runWebGLProgram(a, [o, n, s], dt(n.dtype, s.dtype)); } -var kP = { kernelName: wa, backendName: "webgl", kernelFunc: eoe }; -var toe = ` +var z3 = { kernelName: fa, backendName: "webgl", kernelFunc: Pte }; +var Ote = ` // 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}; + float scaleAlpha = ${w.SELU_SCALEALPHA}; + float scale = ${w.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `; -var roe = xe({ opSnippet: toe }); -var NP = { kernelName: Ts, backendName: "webgl", kernelFunc: roe }; -var ooe = sn + ` +var Mte = xe({ opSnippet: Ote }); +var V3 = { kernelName: hs, backendName: "webgl", kernelFunc: Mte }; +var Lte = Fo + ` return 1.0 / (1.0 + exp(-1.0 * x)); `; -var noe = ` +var Bte = ` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -24242,32 +24242,32 @@ var noe = ` return result; `; -var soe = xe({ opSnippet: ooe, packedOpSnippet: noe, cpuKernelImpl: eA }); -var TP = { kernelName: Ao, backendName: "webgl", kernelFunc: soe }; -var aoe = ` +var zte = xe({ opSnippet: Lte, packedOpSnippet: Bte, cpuKernelImpl: hD }); +var W3 = { kernelName: bs, backendName: "webgl", kernelFunc: zte }; +var Vte = ` if (isnan(x)) { return 0.0; } return sign(x); `; -var ioe = xe({ opSnippet: aoe }); -var _P = { kernelName: Rs, backendName: "webgl", kernelFunc: ioe }; -var uoe = sn + ` +var Wte = xe({ opSnippet: Vte }); +var U3 = { kernelName: ys, backendName: "webgl", kernelFunc: Wte }; +var Ute = Fo + ` return sin(x); `; -var poe = ` +var Gte = ` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${to} + ${Xr} return result; `; -var loe = xe({ opSnippet: uoe, packedOpSnippet: poe }); -var EP = { kernelName: Es, backendName: "webgl", kernelFunc: loe }; -var coe = ` +var Hte = xe({ opSnippet: Ute, packedOpSnippet: Gte }); +var G3 = { kernelName: gs, backendName: "webgl", kernelFunc: Hte }; +var Kte = ` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `; -var moe = xe({ opSnippet: coe }); -var $P = { kernelName: $s, backendName: "webgl", kernelFunc: moe }; -var doe = ` +var qte = xe({ opSnippet: Kte }); +var H3 = { kernelName: xs, backendName: "webgl", kernelFunc: qte }; +var jte = ` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -24288,21 +24288,21 @@ var doe = ` } return result; `; -var foe = xe({ opSnippet: doe }); -var RP = { kernelName: Ds, backendName: "webgl", kernelFunc: foe }; -var hoe = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, paddings: a } = o; +var Xte = xe({ opSnippet: jte }); +var K3 = { kernelName: Cs, backendName: "webgl", kernelFunc: Xte }; +var Yte = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, paddings: a } = o; y.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"); let i = s.reduce((x, b) => x * b), p = [[0, 0]]; p.push(...a); for (let x = 1 + s.length; x < n.shape.length; ++x) p.push([0, 0]); - let u = [], l = H0({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = C.getReshaped(l.shape, s, i, false), m = C.getPermuted(c.length, s.length, false), d = C.getReshapedPermuted(l.shape, s, i, false), f = te({ inputs: { x: l }, backend: t10, attrs: { shape: c } }), h = Ct({ inputs: { x: f }, backend: t10, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: d } }); - return u.push(l), u.push(f), u.push(h), u.forEach((x) => t10.disposeIntermediateTensorInfo(x)), g; + let u = [], c = Dv({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = w.getReshaped(c.shape, s, i, false), m = w.getPermuted(l.length, s.length, false), d = w.getReshapedPermuted(c.shape, s, i, false), f = te({ inputs: { x: c }, backend: t10, attrs: { shape: l } }), h = bt({ inputs: { x: f }, backend: t10, attrs: { perm: m } }), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: d } }); + return u.push(c), u.push(f), u.push(h), u.forEach((x) => t10.disposeIntermediateTensorInfo(x)), g; }; -var DP = { kernelName: Sa, backendName: "webgl", kernelFunc: hoe }; -function goe(r16) { - let { inputs: e, backend: t10 } = r16, { indices: o, values: n, denseShape: s, defaultValue: a } = e; +var q3 = { kernelName: ga, backendName: "webgl", kernelFunc: Yte }; +function Qte(r15) { + let { inputs: e, backend: t10 } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = e; if (s.shape.length !== 1) throw new Error(`Dense shape must be a vector, saw: ${s.shape}`); @@ -24315,24 +24315,24 @@ function goe(r16) { if (a.shape.length !== 0) throw new Error(`Default value must be a scalar, saw: ${a.shape}`); - let i = t10.readSync(o.dataId), p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), l = t10.readSync(a.dataId)[0], [c, m, d, f, h] = rA(i, o.shape, o.dtype, p, n.dtype, u, l); - return [t10.makeTensorInfo(m, o.dtype, c), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; + let i = t10.readSync(o.dataId), p = t10.readSync(n.dataId), u = t10.readSync(s.dataId), c = t10.readSync(a.dataId)[0], [l, m, d, f, h] = xD(i, o.shape, o.dtype, p, n.dtype, u, c); + return [t10.makeTensorInfo(m, o.dtype, l), t10.makeTensorInfo([m[0]], n.dtype, d), t10.makeTensorInfo([f.length], "bool", new Uint8Array(f.map((g) => Number(g)))), t10.makeTensorInfo([h.length], o.dtype, new Int32Array(h))]; } -var AP = { kernelName: eu, backendName: "webgl", kernelFunc: goe }; -function xoe(r16) { - let { inputs: e, backend: t10 } = r16, { inputIndices: o, inputShape: n, newShape: s } = e; +var j3 = { kernelName: Ki, backendName: "webgl", kernelFunc: Qte }; +function Zte(r15) { + let { inputs: e, backend: t10 } = r15, { inputIndices: o, inputShape: n, newShape: s } = e; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); if (n.shape.length !== 1) throw new Error(`Input shape should be a vector but received shape ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = Array.from(t10.readSync(n.dataId)), i = t10.readSync(o.dataId), p = Array.from(t10.readSync(s.dataId)), [u, l, c] = oA(i, o.shape, o.dtype, a, p); - return [t10.makeTensorInfo(l, o.dtype, u), t10.makeTensorInfo([c.length], s.dtype, new Int32Array(c))]; + let a = Array.from(t10.readSync(n.dataId)), i = t10.readSync(o.dataId), p = Array.from(t10.readSync(s.dataId)), [u, c, l] = yD(i, o.shape, o.dtype, a, p); + return [t10.makeTensorInfo(c, o.dtype, u), t10.makeTensorInfo([l.length], s.dtype, new Int32Array(l))]; } -var FP = { kernelName: ui, backendName: "webgl", kernelFunc: xoe }; -function yoe(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; +var X3 = { kernelName: ei, backendName: "webgl", kernelFunc: Zte }; +function Jte(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -24341,12 +24341,12 @@ function yoe(r16) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, l] = Sh(a, o.shape, o.dtype, i, p, true); - return t10.makeTensorInfo(l, o.dtype, u); + let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = lh(a, o.shape, o.dtype, i, p, true); + return t10.makeTensorInfo(c, o.dtype, u); } -var PP = { kernelName: va, backendName: "webgl", kernelFunc: yoe }; -function boe(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; +var Y3 = { kernelName: ya, backendName: "webgl", kernelFunc: Jte }; +function ere(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; if (o.shape.length < 1) throw new Error("Data should be at least 1 dimensional but received scalar"); if (n.shape.length !== 1) @@ -24355,55 +24355,55 @@ function boe(r16) { if (s.shape.length !== 1) throw new Error(`Segment ids should be a vector but received shape ${s.shape}`); - let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, l] = Sh(a, o.shape, o.dtype, i, p); - return t10.makeTensorInfo(l, o.dtype, u); + let a = t10.readSync(o.dataId), i = t10.readSync(n.dataId), p = t10.readSync(s.dataId), [u, c] = lh(a, o.shape, o.dtype, i, p); + return t10.makeTensorInfo(c, o.dtype, u); } -var OP = { kernelName: ka, backendName: "webgl", kernelFunc: boe }; -function Coe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: l, strides: c, outputSize: m } = C.calculateShapes(s, n, i), d = false; +var Q3 = { kernelName: ba, backendName: "webgl", kernelFunc: ere }; +function tre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let x = t10.bufferSync(n), b = t10.bufferSync(s), w = y.decodeString(t10.readSync(a.dataId)[0]), S = JD(x, b, i, m, l, u, p, c, w, d); + let x = t10.bufferSync(n), b = t10.bufferSync(s), C = y.decodeString(t10.readSync(a.dataId)[0]), S = fD(x, b, i, m, c, u, p, l, C, d); return t10.makeTensorInfo(i, S.dtype, S.values); } - let f = new Tu(u, p, n.shape.length, s.shape.length, c, [m, 1], d), h = t10.runWebGLProgram(f, [s, n, a], s.dtype), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: i } }); + let f = new Cu(u, p, n.shape.length, s.shape.length, l, [m, 1], d), h = t10.runWebGLProgram(f, [s, n, a], s.dtype), g = te({ inputs: { x: h }, backend: t10, attrs: { shape: i } }); return t10.disposeIntermediateTensorInfo(h), g; } -var MP = { kernelName: Ps, backendName: "webgl", kernelFunc: Coe }; -function woe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = C.prepareSplitSize(n, s, i), u = n.shape.length, l = new Array(u).fill(0), c = n.shape.slice(); +var Z3 = { kernelName: vs, backendName: "webgl", kernelFunc: tre }; +function rre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = w.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); return p.map((m) => { - let d = [...c]; + let d = [...l]; d[i] = m; - let f = Js({ inputs: { x: n }, backend: t10, attrs: { begin: l, size: d } }); - return l[i] += m, f; + let f = Gs({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: d } }); + return c[i] += m, f; }); } -var LP = { kernelName: Ia, backendName: "webgl", kernelFunc: woe }; -var BP = "return sqrt(x);"; -var Soe = xe({ opSnippet: BP, packedOpSnippet: BP, cpuKernelImpl: nA }); -var zP = { kernelName: Fo, backendName: "webgl", kernelFunc: Soe }; -var Ioe = "return x * x;"; -var voe = xe({ opSnippet: Ioe }); -var VP = { kernelName: tu, backendName: "webgl", kernelFunc: voe }; -var WP = "return (a - b) * (a - b);"; -var koe = st({ opSnippet: WP, packedOpSnippet: WP }); -var UP = { kernelName: Po, backendName: "webgl", kernelFunc: koe }; -function Noe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e; +var J3 = { kernelName: xa, backendName: "webgl", kernelFunc: rre }; +var eP = "return sqrt(x);"; +var ore = xe({ opSnippet: eP, packedOpSnippet: eP, cpuKernelImpl: bD }); +var tP = { kernelName: ws, backendName: "webgl", kernelFunc: ore }; +var nre = "return x * x;"; +var sre = xe({ opSnippet: nre }); +var rP = { kernelName: qi, backendName: "webgl", kernelFunc: sre }; +var oP = "return (a - b) * (a - b);"; +var are = nt({ opSnippet: oP, packedOpSnippet: oP }); +var nP = { kernelName: ks, backendName: "webgl", kernelFunc: are }; +function ire(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e; if (n.dtype !== "string") throw new Error("Input must be of datatype string"); - let s = t10.readSync(n.dataId), a = C.fromUint8ToStringArray(s), i = sA(a, "string", o); + let s = t10.readSync(n.dataId), a = w.fromUint8ToStringArray(s), i = CD(a, "string", o); return t10.makeTensorInfo(n.shape, "string", i); } -var GP = { kernelName: pi, backendName: "webgl", kernelFunc: Noe }; -function Toe({ inputs: r16, attrs: e, backend: t10 }) { - let { x: o } = r16, n = Gt + ` +var sP = { kernelName: Ru, backendName: "webgl", kernelFunc: ire }; +function ure({ inputs: r15, attrs: e, backend: t10 }) { + let { x: o } = r15, n = Wt + ` return x > 0.0 ? 1.0 : float(${e.alpha}); - `, s = new nr(o.shape, n); + `, s = new tr(o.shape, n); return t10.runWebGLProgram(s, [o], o.dtype); } -var HP = { kernelName: Ko, backendName: "webgl", kernelFunc: Toe }; -var Wg = class { +var aP = { kernelName: wo, backendName: "webgl", kernelFunc: ure }; +var Rg = class { constructor(e, t10, o) { this.variableNames = ["x"], this.outputShape = o; let n = o.length, s = Re(o.length), a = Re(o.length), i = ""; @@ -24411,7 +24411,7 @@ var Wg = class { i = "coords * strides + begin"; else { let p = 0; - i = o.map((u, l) => (p++, o.length === 1 ? `coords * strides[${l}] + begin[${l}]` : `coords[${p - 1}] * strides[${l}] + begin[${l}]`)).join(","); + i = o.map((u, c) => (p++, o.length === 1 ? `coords * strides[${c}] + begin[${c}]` : `coords[${p - 1}] * strides[${c}] + begin[${c}]`)).join(","); } this.userCode = ` ${s} begin = ${s}(${e}); @@ -24424,77 +24424,77 @@ var Wg = class { `; } }; -function _oe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: l, newAxisMask: c, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: w, strides: S } = nt.sliceInfo(n.shape, s, a, i, p, u, l, c, m), k; +function pre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) k = te({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); else if (g || x) { y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let E = nt.computeOutShape(b, w, S), R = Js({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: E } }); + let $ = pt.computeOutShape(b, C, S), R = Gs({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: $ } }); k = te({ inputs: { x: R }, backend: t10, attrs: { shape: f } }), t10.disposeIntermediateTensorInfo(R); } else if (t10.shouldExecuteOnCPU([n])) { - let R = t10.readSync(n.dataId), D = ie(n.shape, n.dtype, R), F = aA(d, D, S, b); - k = t10.makeTensorInfo(f, n.dtype, F.values); + let R = t10.readSync(n.dataId), D = me(n.shape, n.dtype, R), P = wD(d, D, S, b); + k = t10.makeTensorInfo(f, n.dtype, P.values); } else { - let R = new Wg(b, S, d); + let R = new Rg(b, S, d); k = t10.runWebGLProgram(R, [n], n.dtype); } - let T = te({ inputs: { x: k }, backend: t10, attrs: { shape: f } }); - return t10.disposeIntermediateTensorInfo(k), T; + let _ = te({ inputs: { x: k }, backend: t10, attrs: { shape: f } }); + return t10.disposeIntermediateTensorInfo(k), _; } -var KP = { kernelName: Os, backendName: "webgl", kernelFunc: _oe }; -function Eoe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: l, dataSplits: c } = e, m = t10.readSync(l.dataId), d = t10.readSync(c.dataId), [f, h] = iA(m, d, n, s, a, i, p, u); - return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(c.shape, "int32", h)]; +var iP = { kernelName: Ns, backendName: "webgl", kernelFunc: pre }; +function cre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.readSync(c.dataId), d = t10.readSync(l.dataId), [f, h] = SD(m, d, n, s, a, i, p, u); + return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(l.shape, "int32", h)]; } -var qP = { kernelName: Na, backendName: "webgl", kernelFunc: Eoe }; -function $oe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { skipEmpty: n } = o, { input: s, delimiter: a } = e; +var uP = { kernelName: Ca, backendName: "webgl", kernelFunc: cre }; +function lre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { skipEmpty: n } = o, { input: s, delimiter: a } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (s.shape.length !== 1) throw new Error(`Input must be a vector, got shape: ${s.shape}`); if (a.shape.length !== 0) throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`); - let i = t10.readSync(s.dataId), p = t10.readSync(a.dataId)[0], [u, l, c] = uA(i, p, n), m = l.length; - return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", l), t10.makeTensorInfo([2], "int32", new Int32Array(c))]; + let i = t10.readSync(s.dataId), p = t10.readSync(a.dataId)[0], [u, c, l] = ID(i, p, n), m = c.length; + return [t10.makeTensorInfo([m, 2], "int32", u), t10.makeTensorInfo([m], "string", c), t10.makeTensorInfo([2], "int32", new Int32Array(l))]; } -var jP = { kernelName: ru, backendName: "webgl", kernelFunc: $oe }; -function Roe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { numBuckets: n } = o, { input: s } = e; +var pP = { kernelName: ji, backendName: "webgl", kernelFunc: lre }; +function mre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { numBuckets: n } = o, { input: s } = e; if (s.dtype !== "string") throw new Error("Input must be of datatype string"); if (n <= 0) throw new Error("Number of buckets must be at least 1"); - let a = t10.readSync(s.dataId), i = pA(a, n); + let a = t10.readSync(s.dataId), i = vD(a, n); return t10.makeTensorInfo(s.shape, "int32", i); } -var XP = { kernelName: ou, backendName: "webgl", kernelFunc: Roe }; -var Doe = "return tan(x);"; -var Aoe = xe({ opSnippet: Doe }); -var YP = { kernelName: Ms, backendName: "webgl", kernelFunc: Aoe }; -var Foe = ` +var cP = { kernelName: Xi, backendName: "webgl", kernelFunc: mre }; +var dre = "return tan(x);"; +var fre = xe({ opSnippet: dre }); +var lP = { kernelName: _s, backendName: "webgl", kernelFunc: fre }; +var hre = ` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `; -var Poe = xe({ opSnippet: Foe }); -var QP = { kernelName: Ls, backendName: "webgl", kernelFunc: Poe }; -function Ooe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: l, outputSize: c } = C.calculateShapes(a, s, n.shape), m = [c / u, u]; - if (c === 0) +var gre = xe({ opSnippet: hre }); +var mP = { kernelName: Es, backendName: "webgl", kernelFunc: gre }; +function xre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; + if (l === 0) return t10.makeTensorInfo(n.shape, s.dtype); - let d = te({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }), f = te({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }), h = te({ inputs: { x: n }, backend: t10, attrs: { shape: m } }), g = new Tu(p, i, d.shape.length, f.shape.length, l, m, false, true), x = t10.runWebGLProgram(g, [f, d, h], h.dtype), b = te({ inputs: { x }, backend: t10, attrs: { shape: n.shape } }); + let d = te({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }), f = te({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }), h = te({ inputs: { x: n }, backend: t10, attrs: { shape: m } }), g = new Cu(p, i, d.shape.length, f.shape.length, c, m, false, true), x = t10.runWebGLProgram(g, [f, d, h], h.dtype), b = te({ inputs: { x }, backend: t10, attrs: { shape: n.shape } }); return t10.disposeIntermediateTensorInfo(d), t10.disposeIntermediateTensorInfo(f), t10.disposeIntermediateTensorInfo(h), t10.disposeIntermediateTensorInfo(x), b; } -var ZP = { kernelName: ks, backendName: "webgl", kernelFunc: Ooe }; -var Ug = class { +var dP = { kernelName: ds, backendName: "webgl", kernelFunc: xre }; +var Dg = class { constructor(e, t10) { this.variableNames = ["A"]; let o = new Array(e.length); for (let a = 0; a < o.length; a++) o[a] = e[a] * t10[a]; this.outputShape = o, this.rank = o.length; - let n = Re(this.rank), s = Moe(e); + let n = Re(this.rank), s = yre(e); this.userCode = ` void main() { ${n} resRC = getOutputCoords(); @@ -24503,28 +24503,28 @@ var Ug = class { `; } }; -function Moe(r16) { - let e = r16.length; +function yre(r15) { + let e = r15.length; if (e > 5) throw Error(`Tile for rank ${e} is not yet supported`); if (e === 1) - return `imod(resRC, ${r16[0]})`; + return `imod(resRC, ${r15[0]})`; let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w", "resRC.u"], o = []; - for (let n = 0; n < r16.length; n++) - o.push(`imod(${t10[n]}, ${r16[n]})`); + for (let n = 0; n < r15.length; n++) + o.push(`imod(${t10[n]}, ${r15[n]})`); return o.join(); } -function q0(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reps: s } = o; +function Fv(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reps: s } = o; if (n.dtype === "string" || n.shape.length > 5) { - let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, l = ie(n.shape, n.dtype, u), c = cA(l, s); - return t10.makeTensorInfo(c.shape, c.dtype, c.values); + let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = ND(c, s); + return t10.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new Ug(n.shape, s); + let a = new Dg(n.shape, s); return t10.runWebGLProgram(a, [n], n.dtype); } -var JP = { kernelName: Mo, backendName: "webgl", kernelFunc: q0 }; -var Gg = class { +var fP = { kernelName: po, backendName: "webgl", kernelFunc: Fv }; +var Ag = class { constructor(e) { this.variableNames = ["x", "indices"], this.customUniforms = [{ name: "n", type: "int" }, { name: "firstPass", type: "int" }, { name: "negativeInf", type: "float" }, { name: "dir", type: "int" }, { name: "inc", type: "int" }], this.outputShape = e, this.userCode = ` void main() { @@ -24569,7 +24569,7 @@ var Gg = class { `; } }; -var Hg = class { +var Fg = class { constructor(e) { this.variableNames = ["x", "indices"], this.customUniforms = [{ name: "n", type: "int" }, { name: "firstPass", type: "int" }, { name: "k", type: "int" }], this.outputShape = e, this.userCode = ` void main() { @@ -24608,54 +24608,54 @@ var Hg = class { `; } }; -function Rp(r16, e) { - e !== null && r16.disposeIntermediateTensorInfo(e); +function kp(r15, e) { + e !== null && r15.disposeIntermediateTensorInfo(e); } -function eO(r16) { +function hP(r15) { let e = 1; - for (; e < r16; ) + for (; e < r15; ) e *= 2; return e; } -function Loe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { k: s, sorted: a } = o, i = A().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = A().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, l = u[u.length - 1]; - if (t10.shouldExecuteOnCPU([n]) || l < i || s > p) { - let F = t10.readSync(n.dataId), [O, M] = mA(F, u, n.dtype, s, a); +function bre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { k: s, sorted: a } = o, i = A().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"), p = A().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"), u = n.shape, c = u[u.length - 1]; + if (t10.shouldExecuteOnCPU([n]) || c < i || s > p) { + let P = t10.readSync(n.dataId), [O, M] = TD(P, u, n.dtype, s, a); return [t10.makeTensorInfo(O.shape, O.dtype, O.values), t10.makeTensorInfo(M.shape, M.dtype, M.values)]; } if (s === 0) return u[u.length - 1] = 0, [t10.makeTensorInfo(u, n.dtype, []), t10.makeTensorInfo(u, "int32", [])]; - if (l === 1) - return [n, Ei({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t10 })]; - let c = t10.texData.get(n.dataId), m = c !== null && c.isPacked, d = m ? t10.unpackTensor(n) : n, h = y.sizeFromShape(u) / l, g = te({ inputs: { x: d }, attrs: { shape: [h, l] }, backend: t10 }); - m && Rp(t10, d); - let x = eO(s), b = eO(l), w = null, S = () => w === null ? [g, g] : [g, w], k = (F, O, M) => { - let L = S(), B = new Gg(M), U = [[l], [w === null ? 1 : 0], [Number.NEGATIVE_INFINITY], [F], [O]], j = w; - w = t10.runWebGLProgram(B, L, "int32", U), Rp(t10, j); + if (c === 1) + return [n, Ci({ attrs: { shape: u, dtype: "int32", value: 0 }, backend: t10 })]; + let l = t10.texData.get(n.dataId), m = l !== null && l.isPacked, d = m ? t10.unpackTensor(n) : n, h = y.sizeFromShape(u) / c, g = te({ inputs: { x: d }, attrs: { shape: [h, c] }, backend: t10 }); + m && kp(t10, d); + let x = hP(s), b = hP(c), C = null, S = () => C === null ? [g, g] : [g, C], k = (P, O, M) => { + let L = S(), B = new Ag(M), U = [[c], [C === null ? 1 : 0], [Number.NEGATIVE_INFINITY], [P], [O]], j = C; + C = t10.runWebGLProgram(B, L, "int32", U), kp(t10, j); }; - for (let F = 1; F < x; F *= 2) { - let O = F * 2; - for (let M = F; M >= 1; M /= 2) + for (let P = 1; P < x; P *= 2) { + let O = P * 2; + for (let M = P; M >= 1; M /= 2) k(O, M, [h, b]); } - for (let F = b; F > x; F /= 2) { - let O = S(), M = new Hg([h, F / 2]), B = [[l], [w === null ? 1 : 0], [x]], z = w; - w = t10.runWebGLProgram(M, O, "int32", B), Rp(t10, z); + for (let P = b; P > x; P /= 2) { + let O = S(), M = new Fg([h, P / 2]), B = [[c], [C === null ? 1 : 0], [x]], z = C; + C = t10.runWebGLProgram(M, O, "int32", B), kp(t10, z); let U = x / 2, j = U * 2; for (let q = U; q >= 1; q /= 2) - k(j, q, w.shape); + k(j, q, C.shape); } - let T = w; - w = Js({ inputs: { x: w }, backend: t10, attrs: { begin: 0, size: [h, s] } }), Rp(t10, T); - let E = z0({ inputs: { x: g, indices: w }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); - Rp(t10, g); + let _ = C; + C = Gs({ inputs: { x: C }, backend: t10, attrs: { begin: 0, size: [h, s] } }), kp(t10, _); + let $ = Tv({ inputs: { x: g, indices: C }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); + kp(t10, g); let R = u.slice(0, -1); - R.push(s), T = w, w = te({ inputs: { x: w }, attrs: { shape: R }, backend: t10 }), Rp(t10, T); - let D = E; - return E = te({ inputs: { x: E }, attrs: { shape: R }, backend: t10 }), Rp(t10, D), [E, w]; + R.push(s), _ = C, C = te({ inputs: { x: C }, attrs: { shape: R }, backend: t10 }), kp(t10, _); + let D = $; + return $ = te({ inputs: { x: $ }, attrs: { shape: R }, backend: t10 }), kp(t10, D), [$, C]; } -var tO = { kernelName: Bs, backendName: "webgl", kernelFunc: Loe }; -var Kg = class { +var gP = { kernelName: $s, backendName: "webgl", kernelFunc: bre }; +var Pg = class { constructor(e, t10, o, n, s, a) { this.variableNames = ["Image", "Transforms"], this.outputShape = a; let i = o === "nearest" ? 1 : 2, p; @@ -24791,41 +24791,41 @@ var Kg = class { `; } }; -function Boe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [l, c, m, d] = n.shape, [f, h] = u != null ? u : [c, m], g = [l, f, h, d], x = new Kg(c, m, a, i, p, g); +function Cre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new Pg(l, m, a, i, p, g); return t10.runWebGLProgram(x, [n, s], "float32"); } -var rO = { kernelName: zs, backendName: "webgl", kernelFunc: Boe }; -function zoe(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { axis: n } = t10, { x: s } = e; - Ys(s, "unique"), console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); - let a = o.readSync(s.dataId), { outputValues: i, outputShape: p, indices: u } = dA(a, n, s.shape, s.dtype); +var xP = { kernelName: Rs, backendName: "webgl", kernelFunc: Cre }; +function wre(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { axis: n } = t10, { x: s } = e; + Vs(s, "unique"), console.warn("WARNING: ", "UI might be locked temporarily as data is being downloaded"); + let a = o.readSync(s.dataId), { outputValues: i, outputShape: p, indices: u } = _D(a, n, s.shape, s.dtype); return [o.makeTensorInfo(p, s.dtype, i), o.makeTensorInfo([u.length], "int32", u)]; } -var oO = { kernelName: nu, backendName: "webgl", kernelFunc: zoe }; -function Voe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { value: n } = e, { axis: s } = o; +var yP = { kernelName: Yi, backendName: "webgl", kernelFunc: wre }; +function Sre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); - let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), l = 0; + let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), c = 0; for (let h = 0; h < i; h++) - h !== s && (u[l++] = a.shape[h]); - let c = [], m = new Array(i).fill(0), d = a.shape.slice(); + h !== s && (u[c++] = a.shape[h]); + let l = [], m = new Array(i).fill(0), d = a.shape.slice(); d[s] = 1; let f = new Array(p); for (let h = 0; h < f.length; h++) { m[s] = h; - let g = Js({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: d } }), x = te({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); - f[h] = x, c.push(g); + let g = Gs({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: d } }), x = te({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); + f[h] = x, l.push(g); } - return c.forEach((h) => t10.disposeIntermediateTensorInfo(h)), f; + return l.forEach((h) => t10.disposeIntermediateTensorInfo(h)), f; } -var nO = { kernelName: Ta, backendName: "webgl", kernelFunc: Voe }; -var qg = class { +var bP = { kernelName: wa, backendName: "webgl", kernelFunc: Sre }; +var Og = class { constructor(e, t10) { this.variableNames = ["x", "segmentIds"]; let o = e.windowSize, n = e.batchSize, s = e.inSize, a = e.numSegments, i = a * Math.ceil(s / o); this.outputShape = [n, i]; - let p = "0.0", u = "sumValue", l = Math.floor(o / 4) * 4, c = o % 4, m = ` + let p = "0.0", u = "sumValue", c = Math.floor(o / 4) * 4, l = o % 4, m = ` sumValue += dot(values, segFilter); `, d = ""; s % o > 0 && (d = ` @@ -24861,7 +24861,7 @@ var qg = class { float sumValue = 0.0; - for (int i = 0; i < ${l}; i += 4) { + for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), @@ -24880,8 +24880,8 @@ var qg = class { ${m} } - int inIdx = inOffset + ${l}; - if (${c === 1}) { + int inIdx = inOffset + ${c}; + if (${l === 1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, @@ -24899,7 +24899,7 @@ var qg = class { ); ${m} - } else if (${c === 2}) { + } else if (${l === 2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -24915,7 +24915,7 @@ var qg = class { ); ${m} - } else if (${c === 3}) { + } else if (${l === 3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -24937,135 +24937,135 @@ var qg = class { `; } }; -function Woe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, l = C.getAxesPermutation([u], i), c = n; - l != null && (c = Ct({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), p.push(c), u = C.getInnerMostAxes(1, i)[0]); - let m = C.segment_util.computeOutShape(c.shape, u, a), d = y.sizeFromShape([c.shape[u]]), f = te({ inputs: { x: c }, backend: t10, attrs: { shape: [-1, d] } }); +function Ire(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = w.getAxesPermutation([u], i), l = n; + c != null && (l = bt({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), p.push(l), u = w.getInnerMostAxes(1, i)[0]); + let m = w.segment_util.computeOutShape(l.shape, u, a), d = y.sizeFromShape([l.shape[u]]), f = te({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, d] } }); p.push(f); - let h = mi(n.dtype), g = (S, k, T, E, R) => { - let D = S.shape[0], F = S.shape[1], O = C.segment_util.segOpComputeOptimalWindowSize(F, R), M = { windowSize: O, inSize: F, batchSize: D, numSegments: R }, L = new qg(M, k), B = t10.compileAndRun(L, [S, T], E); + let h = oi(n.dtype), g = (S, k, _, $, R) => { + let D = S.shape[0], P = S.shape[1], O = w.segment_util.segOpComputeOptimalWindowSize(P, R), M = { windowSize: O, inSize: P, batchSize: D, numSegments: R }, L = new Og(M, k), B = t10.compileAndRun(L, [S, _], $); if (p.push(B), B.shape[1] === R) return B; - let z = K0({ backend: t10, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), U = q0({ inputs: { x: z }, backend: t10, attrs: { reps: [F / O] } }); - return p.push(z), p.push(U), g(B, k, U, E, R); - }, x = g(f, "unsortedSegmentSum", s, h, a), b = te({ inputs: { x }, backend: t10, attrs: { shape: m } }), w = b; - if (l != null) { + let z = Av({ backend: t10, attrs: { start: 0, stop: R, step: 1, dtype: "float32" } }), U = Fv({ inputs: { x: z }, backend: t10, attrs: { reps: [P / O] } }); + return p.push(z), p.push(U), g(B, k, U, $, R); + }, x = g(f, "unsortedSegmentSum", s, h, a), b = te({ inputs: { x }, backend: t10, attrs: { shape: m } }), C = b; + if (c != null) { p.push(b); - let S = C.getUndoAxesPermutation(l); - w = Ct({ inputs: { x: w }, backend: t10, attrs: { perm: S } }); + let S = w.getUndoAxesPermutation(c); + C = bt({ inputs: { x: C }, backend: t10, attrs: { perm: S } }); } - return p.forEach((S) => t10.disposeIntermediateTensorInfo(S)), w; + return p.forEach((S) => t10.disposeIntermediateTensorInfo(S)), C; } -var sO = { kernelName: su, backendName: "webgl", kernelFunc: Woe }; -var Uoe = [VA, UA, GA, HA, qA, jA, XA, YA, JA, eF, tF, rF, oF, nF, sF, aF, iF, uF, pF, lF, cF, dF, fF, hF, gF, CF, SF, IF, RA, kF, TF, _F, EF, $F, RF, DF, AF, FF, PF, OF, BF, zF, VF, WF, UF, GF, HF, KF, qF, jF, XF, YF, QF, ZF, JF, e3, r32, o3, n3, s3, i3, u3, p3, l3, c3, m3, d3, f3, h3, $A, g3, NF, x3, y3, b3, DA, C3, w3, S3, I3, v3, k3, N3, T3, _3, E3, R3, D3, A3, F3, P3, O3, L3, z3, V3, W3, U3, G3, X3, PA, Y3, Q3, Z3, J3, xF, eP, oP, nP, sP, aP, AA, iP, uP, pP, lP, cP, yF, H3, mP, dP, fP, MA, hP, gP, xP, yP, bP, CP, wP, SP, IP, vP, kP, NP, TP, _P, EP, $P, mF, j3, RP, DP, AP, FP, PP, OP, MP, LP, zP, VP, UP, GP, HP, KP, qP, jP, XP, q3, BA, YP, QP, ZP, JP, tO, rO, zA, oO, nO, sO, tP]; -for (let r16 of Uoe) - li(r16); +var CP = { kernelName: Qi, backendName: "webgl", kernelFunc: Ire }; +var vre = [rA, nA, sA, aA, uA, pA, cA, lA, fA, hA, gA, xA, yA, bA, CA, wA, SA, IA, vA, kA, NA, _A, EA, $A, RA, PA, MA, LA, KD, zA, WA, UA, GA, HA, KA, qA, jA, XA, YA, QA, eF, tF, rF, oF, nF, sF, aF, iF, uF, pF, cF, lF, mF, dF, fF, hF, xF, yF, bF, CF, SF, IF, vF, kF, NF, TF, _F, EF, $F, HD, RF, VA, DF, AF, FF, qD, PF, OF, MF, LF, BF, zF, VF, WF, UF, GF, KF, qF, jF, XF, YF, QF, JF, t3, r32, o3, n3, s3, c3, YD, l3, m3, d3, f3, DA, h3, y3, b3, C3, w3, jD, S3, I3, v3, k3, N3, AA, a3, T3, _3, E3, ZD, $3, R3, D3, A3, F3, P3, O3, M3, L3, B3, z3, V3, W3, U3, G3, H3, TA, p3, K3, q3, j3, X3, Y3, Q3, Z3, J3, tP, rP, nP, sP, aP, iP, uP, pP, cP, u3, eA, lP, mP, dP, fP, gP, xP, tA, yP, bP, CP, g3]; +for (let r15 of vre) + ti(r15); var we; -(function(r16) { - r16[r16.float32 = 0] = "float32", r16[r16.int32 = 1] = "int32", r16[r16.bool = 2] = "bool", r16[r16.string = 3] = "string", r16[r16.complex64 = 4] = "complex64"; +(function(r15) { + r15[r15.float32 = 0] = "float32", r15[r15.int32 = 1] = "int32", r15[r15.bool = 2] = "bool", r15[r15.string = 3] = "string", r15[r15.complex64 = 4] = "complex64"; })(we || (we = {})); -var _u; -(function(r16) { - r16[r16.linear = 0] = "linear", r16[r16.relu = 1] = "relu", r16[r16.relu6 = 2] = "relu6", r16[r16.prelu = 3] = "prelu", r16[r16.leakyrelu = 4] = "leakyrelu", r16[r16.sigmoid = 5] = "sigmoid", r16[r16.elu = 6] = "elu"; -})(_u || (_u = {})); -var aO; -function Goe(r16) { - aO = r16.wasm.cwrap(qo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function Hoe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s, bias: a, preluActivationWeights: i } = e; +var wu; +(function(r15) { + r15[r15.linear = 0] = "linear", r15[r15.relu = 1] = "relu", r15[r15.relu6 = 2] = "relu6", r15[r15.prelu = 3] = "prelu", r15[r15.leakyrelu = 4] = "leakyrelu", r15[r15.sigmoid = 5] = "sigmoid", r15[r15.elu = 6] = "elu"; +})(wu || (wu = {})); +var wP; +function kre(r15) { + wP = r15.wasm.cwrap(So, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function Nre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = e; if (n.dtype !== "float32" || s.dtype !== "float32") throw new Error("_FusedMatMul for non non-float32 tensors not yet supported."); - let { transposeA: p, transposeB: u, activation: l, leakyreluAlpha: c } = o, m = t10.dataIdMap.get(n.dataId).id, d = t10.dataIdMap.get(s.dataId).id, f = 0; + let { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o, m = t10.dataIdMap.get(n.dataId).id, d = t10.dataIdMap.get(s.dataId).id, f = 0; if (a != null) { let R = t10.dataIdMap.get(a.dataId); if (R.shape.length !== 1) throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`); f = R.id; } - let h = i == null ? 0 : t10.dataIdMap.get(i.dataId).id, g = _u[l]; + let h = i == null ? 0 : t10.dataIdMap.get(i.dataId).id, g = wu[c]; if (g == null) - throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`); - let x = p ? n.shape[2] : n.shape[1], b = u ? s.shape[1] : s.shape[2], w = kr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), S = t10.makeOutput([...w, x, b], n.dtype), k = t10.dataIdMap.get(S.dataId).id, T = new Uint8Array(new Int32Array(n.shape).buffer), E = new Uint8Array(new Int32Array(s.shape).buffer); - return aO(m, T, n.shape.length, d, E, s.shape.length, p, u, g, f, h, c || 0, k), S; + throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`); + let x = p ? n.shape[2] : n.shape[1], b = u ? s.shape[1] : s.shape[2], C = Sr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)), S = t10.makeOutput([...C, x, b], n.dtype), k = t10.dataIdMap.get(S.dataId).id, _ = new Uint8Array(new Int32Array(n.shape).buffer), $ = new Uint8Array(new Int32Array(s.shape).buffer); + return wP(m, _, n.shape.length, d, $, s.shape.length, p, u, g, f, h, l || 0, k), S; } -var iO = { kernelName: qo, backendName: "wasm", setupFunc: Goe, kernelFunc: Hoe }; -function he(r16, e) { +var SP = { kernelName: So, backendName: "wasm", setupFunc: kre, kernelFunc: Nre }; +function he(r15, e) { let t10; function o(s) { - t10 = s.wasm.cwrap(r16, null, ["number", "number", "number"]); + t10 = s.wasm.cwrap(r15, null, ["number", "number", "number"]); } function n(s) { - let { backend: a, inputs: { x: i } } = s, p = a.dataIdMap.get(i.dataId).id, u = a.makeOutput(i.shape, e || i.dtype), l = a.dataIdMap.get(u.dataId).id; - return y.sizeFromShape(u.shape) === 0 || t10(p, we[i.dtype], l), u; + let { backend: a, inputs: { x: i } } = s, p = a.dataIdMap.get(i.dataId).id, u = a.makeOutput(i.shape, e || i.dtype), c = a.dataIdMap.get(u.dataId).id; + return y.sizeFromShape(u.shape) === 0 || t10(p, we[i.dtype], c), u; } - return { kernelName: r16, backendName: "wasm", setupFunc: o, kernelFunc: n }; + return { kernelName: r15, backendName: "wasm", setupFunc: o, kernelFunc: n }; } -var uO = he(fn); -var pO = he(hn); -var lO = he(gn); -function He(r16, e, t10) { +var IP = he(Xs); +var vP = he(Vo); +var kP = he(Wo); +function Ge(r15, e, t10) { let o; function n(a) { - o = a.wasm.cwrap(r16, null, ["number", "array", "number", "number", "array", "number", "number", "number"]); + o = a.wasm.cwrap(r15, null, ["number", "array", "number", "number", "array", "number", "number", "number"]); } function s(a) { - let { backend: i, inputs: p } = a, { a: u, b: l } = p, c = i.dataIdMap.get(u.dataId).id, m = i.dataIdMap.get(l.dataId).id, d = t10 != null ? t10 : u.dtype, f = C.assertAndGetBroadcastShape(u.shape, l.shape), h = i.makeOutput(f, d); + let { backend: i, inputs: p } = a, { a: u, b: c } = p, l = i.dataIdMap.get(u.dataId).id, m = i.dataIdMap.get(c.dataId).id, d = t10 != null ? t10 : u.dtype, f = w.assertAndGetBroadcastShape(u.shape, c.shape), h = i.makeOutput(f, d); if (y.sizeFromShape(f) === 0) return h; - let g = new Uint8Array(new Int32Array(u.shape).buffer), x = new Uint8Array(new Int32Array(l.shape).buffer), b = i.dataIdMap.get(h.dataId).id; - return o(c, g, u.shape.length, m, x, l.shape.length, we[u.dtype], b), h; + let g = new Uint8Array(new Int32Array(u.shape).buffer), x = new Uint8Array(new Int32Array(c.shape).buffer), b = i.dataIdMap.get(h.dataId).id; + return o(l, g, u.shape.length, m, x, c.shape.length, we[u.dtype], b), h; } - return { kernelName: r16, backendName: "wasm", setupFunc: n, kernelFunc: s }; + return { kernelName: r15, backendName: "wasm", setupFunc: n, kernelFunc: s }; } -var Koe = true; -var cO = He(Rr, Koe); -var mO; -function qoe(r16) { - mO = r16.wasm.cwrap(xn, null, ["array", "number", "number", "number"]); +var Tre = true; +var NP = Ge(uo, Tre); +var TP; +function _re(r15) { + TP = r15.wasm.cwrap(Uo, null, ["array", "number", "number", "number"]); } -function joe(r16) { - let { inputs: e, backend: t10 } = r16, o = t10.makeOutput(e[0].shape, e[0].dtype); +function Ere(r15) { + let { inputs: e, backend: t10 } = r15, o = t10.makeOutput(e[0].shape, e[0].dtype); if (y.sizeFromShape(o.shape) === 0) return o; let n = e.map((i) => t10.dataIdMap.get(i.dataId).id), s = new Uint8Array(new Int32Array(n).buffer), a = t10.dataIdMap.get(o.dataId).id; - return mO(s, n.length, we[o.dtype], a), o; + return TP(s, n.length, we[o.dtype], a), o; } -var dO = { kernelName: xn, backendName: "wasm", setupFunc: qoe, kernelFunc: joe }; -function Dp(r16) { - let { inputs: { x: e }, backend: t10 } = r16; +var _P = { kernelName: Uo, backendName: "wasm", setupFunc: _re, kernelFunc: Ere }; +function Np(r15) { + let { inputs: { x: e }, backend: t10 } = r15; if (e.dtype === "string") - return pr(t10.readSync(e.dataId), e.shape, e.dtype); + return ar(t10.readSync(e.dataId), e.shape, e.dtype); let o = t10.makeOutput(e.shape, e.dtype), n = t10.typedArrayFromHeap(e); return t10.typedArrayFromHeap(o).set(n), o; } -var fO = { kernelName: vo, backendName: "wasm", kernelFunc: Dp }; -var hO; -function Xoe(r16) { - hO = r16.wasm.cwrap(Kr, null, ["number", "array", "number", "number", "number", "array", "number"]); +var EP = { kernelName: Co, backendName: "wasm", kernelFunc: Np }; +var $P; +function $re(r15) { + $P = r15.wasm.cwrap(co, null, ["number", "array", "number", "number", "number", "array", "number"]); } -function Vo(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, [n, s] = Qoe(e.x.shape, o.perm), a = true; +function ho(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, [n, s] = Dre(e.x.shape, o.perm), a = true; for (let f = 0; f < s.length; f++) s[f] !== f && (a = false); - let i = Yoe(e.x.shape, o.perm), p = { dataId: e.x.dataId, shape: n, dtype: e.x.dtype }; + let i = Rre(e.x.shape, o.perm), p = { dataId: e.x.dataId, shape: n, dtype: e.x.dtype }; if (a) { - let f = Dp({ inputs: e, backend: t10 }); + let f = Np({ inputs: e, backend: t10 }); return f.shape = i, f; } - let u = t10.makeOutput(i, p.dtype), l = t10.dataIdMap.get(p.dataId).id, c = t10.dataIdMap.get(u.dataId).id, m = new Uint8Array(new Int32Array(s).buffer), d = new Uint8Array(new Int32Array(p.shape).buffer); - return hO(l, d, p.shape.length, we[p.dtype], c, m, s.length), u; + let u = t10.makeOutput(i, p.dtype), c = t10.dataIdMap.get(p.dataId).id, l = t10.dataIdMap.get(u.dataId).id, m = new Uint8Array(new Int32Array(s).buffer), d = new Uint8Array(new Int32Array(p.shape).buffer); + return $P(c, d, p.shape.length, we[p.dtype], l, m, s.length), u; } -function Yoe(r16, e) { - let t10 = new Array(r16.length); +function Rre(r15, e) { + let t10 = new Array(r15.length); for (let o = 0; o < t10.length; o++) - t10[o] = r16[e[o]]; + t10[o] = r15[e[o]]; return t10; } -function Qoe(r16, e) { +function Dre(r15, e) { let t10 = [], o = []; - for (let n = 0; n < r16.length; ++n) - r16[n] !== 1 && t10.push(r16[n]), r16[e[n]] !== 1 && o.push(e[n]); + for (let n = 0; n < r15.length; ++n) + r15[n] !== 1 && t10.push(r15[n]), r15[e[n]] !== 1 && o.push(e[n]); for (let n = 0; n < o.length; ++n) { let s = -1; for (let a = 0; a < o.length; ++a) @@ -25074,1121 +25074,1121 @@ function Qoe(r16, e) { } return [t10, o]; } -var gO = { kernelName: Kr, backendName: "wasm", kernelFunc: Vo, setupFunc: Xoe }; -function $r(r16, e, t10) { - let o = r16.shape, n = r16.shape.length, s = y.parseAxisParam(e, o), a = s, i = C.getAxesPermutation(a, n), p = null, u = false; +var RP = { kernelName: co, backendName: "wasm", kernelFunc: ho, setupFunc: $re }; +function Tr(r15, e, t10) { + let o = r15.shape, n = r15.shape.length, s = y.parseAxisParam(e, o), a = s, i = w.getAxesPermutation(a, n), p = null, u = false; if (i != null) { - let l = new Array(n); - for (let d = 0; d < l.length; d++) - l[d] = o[i[d]]; - a = C.getInnerMostAxes(a.length, n), p = Vo({ inputs: { x: r16 }, attrs: { perm: i }, backend: t10 }); - let c = t10.dataIdMap.get(r16.dataId).id; - t10.dataIdMap.get(p.dataId).id !== c && (u = true); + let c = new Array(n); + for (let d = 0; d < c.length; d++) + c[d] = o[i[d]]; + a = w.getInnerMostAxes(a.length, n), p = ho({ inputs: { x: r15 }, attrs: { perm: i }, backend: t10 }); + let l = t10.dataIdMap.get(r15.dataId).id; + t10.dataIdMap.get(p.dataId).id !== l && (u = true); } return { transposed: p, originalAxes: s, axes: a, inputWasTransposed: u }; } -var xO; -function Zoe(r16) { - xO = r16.wasm.cwrap(yn, null, ["number, number, number"]); +var DP; +function Are(r15) { + DP = r15.wasm.cwrap(Go, null, ["number, number, number"]); } -function Joe(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e); +function Fre(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e); if (d) { - let w = e.dataIdMap.get(l.dataId).id; - u = l, p = w; + let C = e.dataIdMap.get(c.dataId).id; + u = c, p = C; } let f = u.shape.length; - C.assertAxesAreInnerMostDims("all", c, f); - let [h, g] = C.computeOutAndReduceShapes(u.shape, c), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + w.assertAxesAreInnerMostDims("all", l, f); + let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - xO(p, x, w); + let C = e.dataIdMap.get(b.dataId).id; + DP(p, x, C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var yO = { kernelName: yn, backendName: "wasm", setupFunc: Zoe, kernelFunc: Joe }; -var bO; -function ene(r16) { - bO = r16.wasm.cwrap(bn, null, ["number, number, number"]); +var AP = { kernelName: Go, backendName: "wasm", setupFunc: Are, kernelFunc: Fre }; +var FP; +function Pre(r15) { + FP = r15.wasm.cwrap(Ho, null, ["number, number, number"]); } -function tne(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e); +function Ore(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e); if (d) { - let w = e.dataIdMap.get(l.dataId).id; - u = l, p = w; + let C = e.dataIdMap.get(c.dataId).id; + u = c, p = C; } let f = u.shape.length; - C.assertAxesAreInnerMostDims("any", c, f); - let [h, g] = C.computeOutAndReduceShapes(u.shape, c), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + w.assertAxesAreInnerMostDims("any", l, f); + let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - bO(p, x, w); + let C = e.dataIdMap.get(b.dataId).id; + FP(p, x, C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var CO = { kernelName: bn, backendName: "wasm", setupFunc: ene, kernelFunc: tne }; -function jg(r16) { +var PP = { kernelName: Ho, backendName: "wasm", setupFunc: Pre, kernelFunc: Ore }; +function Mg(r15) { let e; function t10(n) { - e = n.wasm.cwrap(r16, null, ["number", "number", "number", "number", "number"]); + e = n.wasm.cwrap(r15, null, ["number", "number", "number", "number", "number"]); } function o(n) { - let { backend: s, inputs: a, attrs: i } = n, { axis: p } = i, { x: u } = a, l = s.dataIdMap.get(u.dataId).id, c = l, m = u, { transposed: d, axes: f, inputWasTransposed: h } = $r(u, p, s); + let { backend: s, inputs: a, attrs: i } = n, { axis: p } = i, { x: u } = a, c = s.dataIdMap.get(u.dataId).id, l = c, m = u, { transposed: d, axes: f, inputWasTransposed: h } = Tr(u, p, s); if (h) { let k = s.dataIdMap.get(d.dataId).id; - k !== l && (m = d, c = k); - } - let g = m.shape.slice(0, -1), x = s.makeOutput(g, "int32"), b = s.dataIdMap.get(x.dataId).id, w = y.sizeFromShape(x.shape), S = m.shape[f[0]]; - return e(c, we[m.dtype], w, S, b), h && s.disposeData(d.dataId), x; - } - return { kernelName: r16, backendName: "wasm", setupFunc: t10, kernelFunc: o }; -} -var wO = jg(na); -var SO = jg(sa); -var IO = he(Cn); -var vO = he(wn); -var kO = he(Sn); -var NO = He(vn, false); -var TO = he(In); -var _O; -function rne(r16) { - _O = r16.wasm.cwrap(kn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function one(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, n = e.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, l = C.computePool2DInfo(n.shape, a, i, 1, p, u), c = l.filterHeight, m = l.filterWidth, d = l.padInfo.top, f = l.padInfo.right, h = l.padInfo.bottom, g = l.padInfo.left, x = l.strideHeight, b = l.strideWidth, w = l.inChannels; - if (l.dataFormat !== "channelsLast") - throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`); - if (l.dilationWidth !== 1 || l.dilationHeight !== 1) - throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${l.dilationHeight}, ${l.dilationWidth}].`); - let S = o.makeOutput(l.outShape, "float32"), k = o.dataIdMap.get(S.dataId).id; - return _O(s, n.shape[0], n.shape[1], n.shape[2], c, m, d, f, h, g, x, b, w, k), S; -} -var EO = { kernelName: kn, backendName: "wasm", setupFunc: rne, kernelFunc: one }; -var $O; -function nne(r16) { - $O = r16.wasm.cwrap("AvgPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function sne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, l = C.computePool3DInfo(n.shape, s, a, 1, i, p, u), c = t10.makeOutput(l.outShape, n.dtype); - return $O(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, l.batchSize, l.inChannels, l.inDepth, l.inHeight, l.inWidth, l.outDepth, l.outHeight, l.outWidth, l.strideDepth, l.strideHeight, l.strideWidth, l.dilationDepth, l.dilationHeight, l.dilationWidth, l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.front, l.padInfo.top, l.padInfo.left), c; -} -var RO = { kernelName: aa, backendName: "wasm", setupFunc: nne, kernelFunc: sne }; -var DO; -function ane(r16) { - DO = r16.wasm.cwrap("AvgPool3DGrad", 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"]); -} -function ine(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, l = C.computePool3DInfo(s.shape, a, i, 1, p, u), c = t10.makeOutput(s.shape, s.dtype); - return DO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, l.batchSize, l.inChannels, l.inDepth, l.inHeight, l.inWidth, l.outDepth, l.outHeight, l.outWidth, l.strideDepth, l.strideHeight, l.strideWidth, l.dilationDepth, l.dilationHeight, l.dilationWidth, l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.front, l.padInfo.top, l.padInfo.left, l.filterDepth, l.filterHeight, l.filterWidth), c; -} -var AO = { kernelName: Vi, backendName: "wasm", setupFunc: ane, kernelFunc: ine }; -var FO; -function une(r16) { - FO = r16.wasm.cwrap("AvgPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function pne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p } = o, u = C.computePool2DInfo(s.shape, a, i, 1, p), l = t10.makeOutput(s.shape, s.dtype); - return FO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.effectiveFilterHeight, u.effectiveFilterWidth, u.padInfo.top, u.padInfo.left, u.filterHeight, u.filterWidth), l; -} -var PO = { kernelName: zi, backendName: "wasm", setupFunc: une, kernelFunc: pne }; -function Wt(r16) { - let { inputs: e, attrs: t10 } = r16, { x: o } = e, { shape: n } = t10, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s); - return y.assert(s === y.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r16.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; -} -var OO = { kernelName: Ca, backendName: "wasm", kernelFunc: Wt }; -var MO; -function lne(r16) { - MO = r16.wasm.cwrap(Nn, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); -} -function cne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; + k !== c && (m = d, l = k); + } + let g = m.shape.slice(0, -1), x = s.makeOutput(g, "int32"), b = s.dataIdMap.get(x.dataId).id, C = y.sizeFromShape(x.shape), S = m.shape[f[0]]; + return e(l, we[m.dtype], C, S, b), h && s.disposeData(d.dataId), x; + } + return { kernelName: r15, backendName: "wasm", setupFunc: t10, kernelFunc: o }; +} +var OP = Mg(Ys); +var MP = Mg(Qs); +var LP = he(Ko); +var BP = he(qo); +var zP = he(jo); +var VP = Ge(Yo, false); +var WP = he(Xo); +var UP; +function Mre(r15) { + UP = r15.wasm.cwrap(Qo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function Lre(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, n = e.x, s = o.dataIdMap.get(n.dataId).id, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, c = w.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, d = c.padInfo.top, f = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, x = c.strideHeight, b = c.strideWidth, C = c.inChannels; + if (c.dataFormat !== "channelsLast") + throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`); + if (c.dilationWidth !== 1 || c.dilationHeight !== 1) + throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${c.dilationHeight}, ${c.dilationWidth}].`); + let S = o.makeOutput(c.outShape, "float32"), k = o.dataIdMap.get(S.dataId).id; + return UP(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, k), S; +} +var GP = { kernelName: Qo, backendName: "wasm", setupFunc: Mre, kernelFunc: Lre }; +var HP; +function Bre(r15) { + HP = r15.wasm.cwrap("AvgPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function zre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.makeOutput(c.outShape, n.dtype); + return HP(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, c.batchSize, c.inChannels, c.inDepth, c.inHeight, c.inWidth, c.outDepth, c.outHeight, c.outWidth, c.strideDepth, c.strideHeight, c.strideWidth, c.dilationDepth, c.dilationHeight, c.dilationWidth, c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.front, c.padInfo.top, c.padInfo.left), l; +} +var KP = { kernelName: Zs, backendName: "wasm", setupFunc: Bre, kernelFunc: zre }; +var qP; +function Vre(r15) { + qP = r15.wasm.cwrap("AvgPool3DGrad", 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"]); +} +function Wre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = t10.makeOutput(s.shape, s.dtype); + return qP(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, c.batchSize, c.inChannels, c.inDepth, c.inHeight, c.inWidth, c.outDepth, c.outHeight, c.outWidth, c.strideDepth, c.strideHeight, c.strideWidth, c.dilationDepth, c.dilationHeight, c.dilationWidth, c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.front, c.padInfo.top, c.padInfo.left, c.filterDepth, c.filterHeight, c.filterWidth), l; +} +var jP = { kernelName: Ri, backendName: "wasm", setupFunc: Vre, kernelFunc: Wre }; +var XP; +function Ure(r15) { + XP = r15.wasm.cwrap("AvgPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function Gre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p } = o, u = w.computePool2DInfo(s.shape, a, i, 1, p), c = t10.makeOutput(s.shape, s.dtype); + return XP(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.effectiveFilterHeight, u.effectiveFilterWidth, u.padInfo.top, u.padInfo.left, u.filterHeight, u.filterWidth), c; +} +var YP = { kernelName: $i, backendName: "wasm", setupFunc: Ure, kernelFunc: Gre }; +function zt(r15) { + let { inputs: e, attrs: t10 } = r15, { x: o } = e, { shape: n } = t10, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s); + return y.assert(s === y.sizeFromShape(a), () => `new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`), r15.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; +} +var QP = { kernelName: da, backendName: "wasm", kernelFunc: zt }; +var ZP; +function Hre(r15) { + ZP = r15.wasm.cwrap(Zo, null, ["number", "array", "number", "number", "array", "number", "number", "number", "number"]); +} +function Kre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; if (n.dtype !== "float32" || s.dtype !== "float32") throw new Error("BatchMatMul for non non-float32 tensors not yet supported."); - let p = n.shape.length, u = s.shape.length, l = a ? n.shape[p - 2] : n.shape[p - 1], c = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), w = kr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); - y.assert(l === c, () => `Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); - let S = a ? [g, l, m] : [g, m, l], k = i ? [x, d, c] : [x, c, d], T = Wt({ inputs: { x: n }, backend: t10, attrs: { shape: S } }), E = Wt({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = t10.dataIdMap.get(T.dataId).id, D = t10.dataIdMap.get(E.dataId).id, F = a ? T.shape[2] : T.shape[1], O = i ? E.shape[1] : E.shape[2], M = Math.max(g, x), L = t10.makeOutput([M, F, O], T.dtype), B = t10.dataIdMap.get(L.dataId).id, z = new Uint8Array(new Int32Array(T.shape).buffer), U = new Uint8Array(new Int32Array(E.shape).buffer); - return MO(R, z, T.shape.length, D, U, E.shape.length, a, i, B), t10.disposeData(T.dataId), t10.disposeData(E.dataId), L.shape = w, L; -} -var LO = { kernelName: Nn, backendName: "wasm", setupFunc: lne, kernelFunc: cne }; -function an(r16) { - let { inputs: { x: e }, attrs: { begin: t10, size: o }, backend: n } = r16, [s, a] = nt.parseSliceParams(e, t10, o), i = nt.isSliceContinous(e.shape, s, a), p = n.readSync(e.dataId), u = n.makeOutput(a, e.dtype), l = y.computeStrides(e.shape), c = n.dataIdMap.get(u.dataId); + let p = n.shape.length, u = s.shape.length, c = a ? n.shape[p - 2] : n.shape[p - 1], l = i ? s.shape[u - 1] : s.shape[u - 2], m = a ? n.shape[p - 1] : n.shape[p - 2], d = i ? s.shape[u - 2] : s.shape[u - 1], f = n.shape.slice(0, -2), h = s.shape.slice(0, -2), g = y.sizeFromShape(f), x = y.sizeFromShape(h), C = Sr.assertAndGetBroadcastShape(n.shape.slice(0, -2), s.shape.slice(0, -2)).concat([m, d]); + y.assert(c === l, () => `Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`); + let S = a ? [g, c, m] : [g, m, c], k = i ? [x, d, l] : [x, l, d], _ = zt({ inputs: { x: n }, backend: t10, attrs: { shape: S } }), $ = zt({ inputs: { x: s }, backend: t10, attrs: { shape: k } }), R = t10.dataIdMap.get(_.dataId).id, D = t10.dataIdMap.get($.dataId).id, P = a ? _.shape[2] : _.shape[1], O = i ? $.shape[1] : $.shape[2], M = Math.max(g, x), L = t10.makeOutput([M, P, O], _.dtype), B = t10.dataIdMap.get(L.dataId).id, z = new Uint8Array(new Int32Array(_.shape).buffer), U = new Uint8Array(new Int32Array($.shape).buffer); + return ZP(R, z, _.shape.length, D, U, $.shape.length, a, i, B), t10.disposeData(_.dataId), t10.disposeData($.dataId), L.shape = C, L; +} +var JP = { kernelName: Zo, backendName: "wasm", setupFunc: Hre, kernelFunc: Kre }; +function Po(r15) { + let { inputs: { x: e }, attrs: { begin: t10, size: o }, backend: n } = r15, [s, a] = pt.parseSliceParams(e, t10, o), i = pt.isSliceContinous(e.shape, s, a), p = n.readSync(e.dataId), u = n.makeOutput(a, e.dtype), c = y.computeStrides(e.shape), l = n.dataIdMap.get(u.dataId); if (i) { - let f = nt.computeFlatOffset(s, l); - return e.dtype === "string" ? c.stringBytes = p.slice(f, f + y.sizeFromShape(a)) : n.typedArrayFromHeap(u).set(p.subarray(f, f + y.sizeFromShape(a))), u; + let f = pt.computeFlatOffset(s, c); + return e.dtype === "string" ? l.stringBytes = p.slice(f, f + y.sizeFromShape(a)) : n.typedArrayFromHeap(u).set(p.subarray(f, f + y.sizeFromShape(a))), u; } if (e.dtype === "string") { - let f = hp(p, s, a, e.shape, e.dtype); - return c.stringBytes = f, u; + let f = pp(p, s, a, e.shape, e.dtype); + return l.stringBytes = f, u; } let m = n.typedArrayFromHeap(u), d = e.shape.length; if (d === 2) - mne(p, l[0], m, s, a); + qre(p, c[0], m, s, a); else if (d === 3) - dne(p, l[0], l[1], m, s, a); + jre(p, c[0], c[1], m, s, a); else if (d === 4) - fne(p, l[0], l[1], l[2], m, s, a); + Xre(p, c[0], c[1], c[2], m, s, a); else { - let f = hp(p, s, a, e.shape, e.dtype); + let f = pp(p, s, a, e.shape, e.dtype); m.set(f); } return u; } -function mne(r16, e, t10, o, n) { +function qre(r15, e, t10, o, n) { let s = 0, a = o[0], i = o[1], p = a + n[0]; for (let u = a; u < p; u++) { - let l = u * e + i; - t10.set(r16.subarray(l, l + n[1]), s), s += n[1]; + let c = u * e + i; + t10.set(r15.subarray(c, c + n[1]), s), s += n[1]; } } -function dne(r16, e, t10, o, n, s) { - let a = 0, i = n[0], p = n[1], u = n[2], l = i + s[0], c = p + s[1]; - for (let m = i; m < l; m++) - for (let d = p; d < c; d++) { +function jre(r15, e, t10, o, n, s) { + let a = 0, i = n[0], p = n[1], u = n[2], c = i + s[0], l = p + s[1]; + for (let m = i; m < c; m++) + for (let d = p; d < l; d++) { let f = m * e + d * t10 + u; - o.set(r16.subarray(f, f + s[2]), a), a += s[2]; + o.set(r15.subarray(f, f + s[2]), a), a += s[2]; } } -function fne(r16, e, t10, o, n, s, a) { - let i = 0, p = s[0], u = s[1], l = s[2], c = p + a[0], m = u + a[1], d = l + a[2], f = s[3]; - for (let h = p; h < c; h++) +function Xre(r15, e, t10, o, n, s, a) { + let i = 0, p = s[0], u = s[1], c = s[2], l = p + a[0], m = u + a[1], d = c + a[2], f = s[3]; + for (let h = p; h < l; h++) for (let g = u; g < m; g++) - for (let x = l; x < d; x++) { + for (let x = c; x < d; x++) { let b = h * e + g * t10 + x * o + f; - n.set(r16.subarray(b, b + a[3]), i), i += a[3]; + n.set(r15.subarray(b, b + a[3]), i), i += a[3]; } } -var BO = { kernelName: _s, backendName: "wasm", kernelFunc: an }; -function hne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, crops: a } = o, i = s.reduce((x, b) => x * b), p = C.getReshaped(n.shape, s, i), u = C.getPermuted(p.length, s.length), l = C.getReshapedPermuted(n.shape, s, i), c = C.getSliceBeginCoords(a, s.length), m = C.getSliceSize(l, a, s.length), d = Wt({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), f = Vo({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), h = Wt({ inputs: { x: f }, backend: t10, attrs: { shape: l } }), g = an({ inputs: { x: h }, backend: t10, attrs: { begin: c, size: m } }); +var eO = { kernelName: ha, backendName: "wasm", kernelFunc: Po }; +function Yre(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, crops: a } = o, i = s.reduce((x, b) => x * b), p = w.getReshaped(n.shape, s, i), u = w.getPermuted(p.length, s.length), c = w.getReshapedPermuted(n.shape, s, i), l = w.getSliceBeginCoords(a, s.length), m = w.getSliceSize(c, a, s.length), d = zt({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), f = ho({ inputs: { x: d }, backend: t10, attrs: { perm: u } }), h = zt({ inputs: { x: f }, backend: t10, attrs: { shape: c } }), g = Po({ inputs: { x: h }, backend: t10, attrs: { begin: l, size: m } }); return t10.disposeData(d.dataId), t10.disposeData(f.dataId), t10.disposeData(h.dataId), g; } -var zO = { kernelName: ia, backendName: "wasm", kernelFunc: hne }; -var VO; -function gne(r16) { - VO = r16.wasm.cwrap(Tn, null, ["number", "number", "boolean", "number", "number", "number"]); +var tO = { kernelName: Js, backendName: "wasm", kernelFunc: Yre }; +var rO; +function Qre(r15) { + rO = r15.wasm.cwrap(Jo, null, ["number", "number", "boolean", "number", "number", "number"]); } -function xne(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { x: n, weights: s } = t10, { size: a } = o, i = s.shape.reduce((c, m) => c * m, 1) !== 0, p = n.shape.length === 1 ? [a] : [n.shape[0], a], u = e.makeOutput(p, s.dtype); - function l(c) { - return e.dataIdMap.get(c.dataId).id; +function Zre(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { x: n, weights: s } = t10, { size: a } = o, i = s.shape.reduce((l, m) => l * m, 1) !== 0, p = n.shape.length === 1 ? [a] : [n.shape[0], a], u = e.makeOutput(p, s.dtype); + function c(l) { + return e.dataIdMap.get(l.dataId).id; } - return VO(l(n), a, i, l(s), we[s.dtype], l(u)), u; + return rO(c(n), a, i, c(s), we[s.dtype], c(u)), u; } -var WO = { kernelName: Tn, backendName: "wasm", setupFunc: gne, kernelFunc: xne }; -var yne = true; -var UO = He(_n, yne); -function bne(r16) { - let { inputs: e, backend: t10 } = r16, { s0: o, s1: n } = e, s = t10.typedArrayFromHeap(o), a = t10.typedArrayFromHeap(n), i = C.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); +var oO = { kernelName: Jo, backendName: "wasm", setupFunc: Qre, kernelFunc: Zre }; +var Jre = true; +var nO = Ge(qa, Jre); +function eoe(r15) { + let { inputs: e, backend: t10 } = r15, { s0: o, s1: n } = e, s = t10.typedArrayFromHeap(o), a = t10.typedArrayFromHeap(n), i = w.assertAndGetBroadcastShape(Array.from(s), Array.from(a)); return t10.makeOutput([i.length], "int32", void 0, new Int32Array(i)); } -var GO = { kernelName: ua, backendName: "wasm", kernelFunc: bne }; -function Vr(r16) { - let { inputs: { x: e }, attrs: { dtype: t10 }, backend: o } = r16, n = o.makeOutput(e.shape, t10), s = o.typedArrayFromHeap(e); +var sO = { kernelName: ea, backendName: "wasm", kernelFunc: eoe }; +function Mr(r15) { + let { inputs: { x: e }, attrs: { dtype: t10 }, backend: o } = r15, n = o.makeOutput(e.shape, t10), s = o.typedArrayFromHeap(e); return o.typedArrayFromHeap(n).set(s), n; } -var HO = { kernelName: ho, backendName: "wasm", kernelFunc: Vr }; -var KO = he(go); -var qO; -function Cne(r16) { - qO = r16.wasm.cwrap(Go, null, ["number", "number", "number", "number"]); -} -function wne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i = t10.dataIdMap.get(n.dataId).id, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(p.dataId).id; - return qO(i, s, a, u), p; -} -var jO = { kernelName: Go, backendName: "wasm", setupFunc: Cne, kernelFunc: wne }; -function j0(r16) { - let { inputs: e, backend: t10 } = r16, o = y.parseAxisParam(r16.attrs.axis, e[0].shape)[0], n = e.map((d) => d.shape); - C.assertParamsConsistent(n, o); - let s = C.computeOutShape(e.map((d) => d.shape), o), a = e.filter((d) => y.sizeFromShape(d.shape) > 0); +var aO = { kernelName: yo, backendName: "wasm", kernelFunc: Mr }; +var iO = he(en); +var uO; +function toe(r15) { + uO = r15.wasm.cwrap(bo, null, ["number", "number", "number", "number"]); +} +function roe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i = t10.dataIdMap.get(n.dataId).id, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(p.dataId).id; + return uO(i, s, a, u), p; +} +var pO = { kernelName: bo, backendName: "wasm", setupFunc: toe, kernelFunc: roe }; +function Pv(r15) { + let { inputs: e, backend: t10 } = r15, o = y.parseAxisParam(r15.attrs.axis, e[0].shape)[0], n = e.map((d) => d.shape); + w.assertParamsConsistent(n, o); + let s = w.computeOutShape(e.map((d) => d.shape), o), a = e.filter((d) => y.sizeFromShape(d.shape) > 0); if (a.length === 1) - return Dp({ inputs: { x: a[0] }, backend: t10 }); + return Np({ inputs: { x: a[0] }, backend: t10 }); let i = t10.makeOutput(s, e[0].dtype); if (y.sizeFromShape(s) === 0) return i; if (a[0].dtype === "string") { - let d = a.map((w) => { - let k = [-1, y.sizeFromShape(w.shape.slice(o))]; - return Wt({ inputs: { x: w }, backend: t10, attrs: { shape: k } }); - }), f = d.map((w) => ({ vals: t10.readSync(w.dataId), shape: w.shape })); - s = C.computeOutShape(d.map((w) => w.shape), 1); - let h = d[0].shape[0] === 1, g = mp(f, s, e[0].dtype, h), x = C.computeOutShape(a.map((w) => w.shape), o); + let d = a.map((C) => { + let k = [-1, y.sizeFromShape(C.shape.slice(o))]; + return zt({ inputs: { x: C }, backend: t10, attrs: { shape: k } }); + }), f = d.map((C) => ({ vals: t10.readSync(C.dataId), shape: C.shape })); + s = w.computeOutShape(d.map((C) => C.shape), 1); + let h = d[0].shape[0] === 1, g = ap(f, s, e[0].dtype, h), x = w.computeOutShape(a.map((C) => C.shape), o); i.shape = x; let b = t10.dataIdMap.get(i.dataId); - return b.stringBytes = C.fromStringArrayToUint8(g), d.forEach((w) => t10.disposeData(w.dataId)), i; + return b.stringBytes = w.fromStringArrayToUint8(g), d.forEach((C) => t10.disposeData(C.dataId)), i; } - let p = y.sizeFromShape(a[0].shape.slice(0, o)), u = 0, l = a.map((d) => { + let p = y.sizeFromShape(a[0].shape.slice(0, o)), u = 0, c = a.map((d) => { let f = y.sizeFromShape(d.shape.slice(o)); return u += f, f; - }), c = a.map((d) => t10.typedArrayFromHeap(d)), m = t10.typedArrayFromHeap(i); + }), l = a.map((d) => t10.typedArrayFromHeap(d)), m = t10.typedArrayFromHeap(i); for (let d = 0; d < p; d++) { let f = d * u; - for (let h = 0; h < c.length; h++) { - let g = l[h], x = d * g, b = c[h].subarray(x, x + g); + for (let h = 0; h < l.length; h++) { + let g = c[h], x = d * g, b = l[h].subarray(x, x + g); m.set(b, f), f += g; } } return i; } -var XO = { kernelName: pa, backendName: "wasm", kernelFunc: j0 }; -var YO; -function Sne(r16) { - YO = r16.wasm.cwrap(En, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var cO = { kernelName: ta, backendName: "wasm", kernelFunc: Pv }; +var lO; +function ooe(r15) { + lO = r15.wasm.cwrap(tn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Ine(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: l, dimRoundingMode: c, dataFormat: m } = t10, d = C.convertConv2DDataFormat(m), f = C.computeConv2DInfo(n.shape, s.shape, p, u, l, c, false, d), h = f.filterHeight, g = f.filterWidth, x = f.padInfo.top, b = f.padInfo.right, w = f.padInfo.bottom, S = f.padInfo.left, k = f.dilationHeight, T = f.dilationWidth, E = f.strideHeight, R = f.strideWidth, D = f.inChannels, F = f.outChannels, O = f.padInfo.type === "SAME" ? 1 : 0; +function noe(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l, dataFormat: m } = t10, d = w.convertConv2DDataFormat(m), f = w.computeConv2DInfo(n.shape, s.shape, p, u, c, l, false, d), h = f.filterHeight, g = f.filterWidth, x = f.padInfo.top, b = f.padInfo.right, C = f.padInfo.bottom, S = f.padInfo.left, k = f.dilationHeight, _ = f.dilationWidth, $ = f.strideHeight, R = f.strideWidth, D = f.inChannels, P = f.outChannels, O = 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 M = o.makeOutput(f.outShape, "float32"), L = o.dataIdMap.get(M.dataId).id; - return YO(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, w, S, O, k, T, E, R, D, F, L), M; + return lO(a, n.shape[0], n.shape[1], n.shape[2], i, h, g, x, b, C, S, O, k, _, $, R, D, P, L), M; } -var QO = { kernelName: En, backendName: "wasm", setupFunc: Sne, kernelFunc: Ine }; -var ZO; -function vne(r16) { - ZO = r16.wasm.cwrap($n, 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"]); +var mO = { kernelName: tn, backendName: "wasm", setupFunc: ooe, kernelFunc: noe }; +var dO; +function soe(r15) { + dO = r15.wasm.cwrap(rn, 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 kne(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { dy: n, filter: s } = t10, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: l } = o, c = 1, m = C.convertConv2DDataFormat(p), d = C.computeConv2DInfo(l, s.shape, a, c, i, u, false, m), { batchSize: f, filterHeight: h, filterWidth: g, inChannels: x, inHeight: b, inWidth: w, outChannels: S, outHeight: k, outWidth: T, strideHeight: E, strideWidth: R } = d, D = h - 1 - d.padInfo.top, F = g - 1 - d.padInfo.left, O = d.dataFormat === "channelsLast", M = y.computeStrides(d.inShape), L = y.computeStrides(n.shape), [B, z, U] = y.computeStrides(s.shape), j = M[0], q = O ? M[1] : M[2], Y = O ? M[2] : 1, J = O ? 1 : M[1], re = L[0], ne = O ? L[1] : L[2], ee = O ? L[2] : 1, oe = O ? 1 : L[1], ue = e.makeOutput(d.inShape, "float32"), me = e.dataIdMap.get(ue.dataId).id, be = e.dataIdMap.get(n.dataId).id, _e = e.dataIdMap.get(s.dataId).id; - return ZO(be, _e, f, h, g, b, w, x, k, T, S, E, R, D, F, B, z, U, j, q, Y, J, re, ne, ee, oe, me), ue; +function aoe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { dy: n, filter: s } = t10, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, inputShape: c } = o, l = 1, m = w.convertConv2DDataFormat(p), d = w.computeConv2DInfo(c, s.shape, a, l, i, u, false, m), { batchSize: f, filterHeight: h, filterWidth: g, inChannels: x, inHeight: b, inWidth: C, outChannels: S, outHeight: k, outWidth: _, strideHeight: $, strideWidth: R } = d, D = h - 1 - d.padInfo.top, P = g - 1 - d.padInfo.left, O = d.dataFormat === "channelsLast", M = y.computeStrides(d.inShape), L = y.computeStrides(n.shape), [B, z, U] = y.computeStrides(s.shape), j = M[0], q = O ? M[1] : M[2], Y = O ? M[2] : 1, J = O ? 1 : M[1], re = L[0], ne = O ? L[1] : L[2], ee = O ? L[2] : 1, oe = O ? 1 : L[1], ie = e.makeOutput(d.inShape, "float32"), le = e.dataIdMap.get(ie.dataId).id, be = e.dataIdMap.get(n.dataId).id, _e = e.dataIdMap.get(s.dataId).id; + return dO(be, _e, f, h, g, b, C, x, k, _, S, $, R, D, P, B, z, U, j, q, Y, J, re, ne, ee, oe, le), ie; } -var JO = { kernelName: $n, backendName: "wasm", setupFunc: vne, kernelFunc: kne }; -var eM; -function Nne(r16) { - eM = r16.wasm.cwrap(Rn, 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"]); +var fO = { kernelName: rn, backendName: "wasm", setupFunc: soe, kernelFunc: aoe }; +var hO; +function ioe(r15) { + hO = r15.wasm.cwrap(on, 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"]); } -function Tne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; +function uoe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; if (n.dtype !== "float32") throw new Error(`Tensor x must have dtype float32, got ${n.dtype}`); if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); - let u = C.computeConv3DInfo(n.shape, s.shape, a, p, i), l = t10.makeOutput(u.outShape, n.dtype); - return eM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(l.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), l; + let u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = t10.makeOutput(u.outShape, n.dtype); + return hO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; } -var tM = { kernelName: Rn, backendName: "wasm", setupFunc: Nne, kernelFunc: Tne }; -var rM; -function _ne(r16) { - rM = r16.wasm.cwrap(ti, 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"]); +var gO = { kernelName: on, backendName: "wasm", setupFunc: ioe, kernelFunc: uoe }; +var xO; +function poe(r15) { + xO = r15.wasm.cwrap(ja, 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"]); } -function Ene(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; +function coe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o; if (n.dtype !== "float32") throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); - let u = C.computeConv3DInfo(n.shape, p, a, 1, i), l = t10.makeOutput(u.filterShape, s.dtype); - return rM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(l.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), l; + let u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = t10.makeOutput(u.filterShape, s.dtype); + return xO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; } -var oM = { kernelName: ti, backendName: "wasm", setupFunc: _ne, kernelFunc: Ene }; -var nM; -function $ne(r16) { - nM = r16.wasm.cwrap(Dn, 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"]); +var yO = { kernelName: ja, backendName: "wasm", setupFunc: poe, kernelFunc: coe }; +var bO; +function loe(r15) { + bO = r15.wasm.cwrap(nn, 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"]); } -function Rne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; +function moe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { pad: a, strides: i, inputShape: p } = o; if (n.dtype !== "float32") throw new Error(`Tensor dy must have dtype float32, got ${n.dtype}`); if (s.dtype !== "float32") throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`); - let u = C.computeConv3DInfo(p, s.shape, i, 1, a), l = t10.makeOutput(u.inShape, n.dtype); - return nM(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), l; -} -var sM = { kernelName: Dn, backendName: "wasm", setupFunc: $ne, kernelFunc: Rne }; -var aM = he(An); -var iM = he(Fn); -var X0; -(function(r16) { - r16[r16.bilinear = 0] = "bilinear", r16[r16.nearest = 1] = "nearest"; -})(X0 || (X0 = {})); -var uM; -function Dne(r16) { - uM = r16.wasm.cwrap(Mn, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); -} -function Ane(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = t10, l = p.shape[0], [c, m] = a, d = [l, c, m, i.shape[3]], f = e.dataIdMap.get(i.dataId), h; - i.dtype !== "float32" && (h = Vr({ backend: e, inputs: { x: i }, attrs: { dtype: "float32" } }), f = e.dataIdMap.get(h.dataId)); - let g = f.id, x = e.dataIdMap.get(p.dataId).id, b = e.dataIdMap.get(u.dataId).id, w = e.makeOutput(d, "float32"), S = e.dataIdMap.get(w.dataId).id, k = new Uint8Array(new Int32Array(i.shape).buffer); - return uM(g, x, b, l, k, c, m, X0[n], s, S), h != null && e.disposeData(h.dataId), w; -} -var pM = { kernelName: Mn, backendName: "wasm", setupFunc: Dne, kernelFunc: Ane }; -var lM; -function Fne(r16) { - lM = r16.wasm.cwrap(Pn, null, ["number", "number", "number", "number", "number", "number"]); -} -function Pne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; + let u = w.computeConv3DInfo(p, s.shape, i, 1, a), c = t10.makeOutput(u.inShape, n.dtype); + return bO(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, u.batchSize, u.inDepth, u.inHeight, u.inWidth, u.inChannels, u.outDepth, u.outHeight, u.outWidth, u.outChannels, u.strideDepth, u.strideHeight, u.strideWidth, u.dilationDepth, u.dilationHeight, u.dilationWidth, u.filterDepth, u.filterHeight, u.filterWidth, u.padInfo.front, u.padInfo.top, u.padInfo.left), c; +} +var CO = { kernelName: nn, backendName: "wasm", setupFunc: loe, kernelFunc: moe }; +var wO = he(sn); +var SO = he(an); +var Ov; +(function(r15) { + r15[r15.bilinear = 0] = "bilinear", r15[r15.nearest = 1] = "nearest"; +})(Ov || (Ov = {})); +var IO; +function doe(r15) { + IO = r15.wasm.cwrap(cn, null, ["number", "number", "number", "number", "array", "number", "number", "number", "number", "number"]); +} +function foe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { method: n, extrapolationValue: s, cropSize: a } = o, { image: i, boxes: p, boxInd: u } = t10, c = p.shape[0], [l, m] = a, d = [c, l, m, i.shape[3]], f = e.dataIdMap.get(i.dataId), h; + i.dtype !== "float32" && (h = Mr({ backend: e, inputs: { x: i }, attrs: { dtype: "float32" } }), f = e.dataIdMap.get(h.dataId)); + let g = f.id, x = e.dataIdMap.get(p.dataId).id, b = e.dataIdMap.get(u.dataId).id, C = e.makeOutput(d, "float32"), S = e.dataIdMap.get(C.dataId).id, k = new Uint8Array(new Int32Array(i.shape).buffer); + return IO(g, x, b, c, k, l, m, Ov[n], s, S), h != null && e.disposeData(h.dataId), C; +} +var vO = { kernelName: cn, backendName: "wasm", setupFunc: doe, kernelFunc: foe }; +var kO; +function hoe(r15) { + kO = r15.wasm.cwrap(un, null, ["number", "number", "number", "number", "number", "number"]); +} +function goe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; y.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumprod does not support ${n.dtype} tensors in the WASM backend`); - let u = C.getAxesPermutation([s], p), l = n; - u !== null && (l = Vo({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); - let c = C.getInnerMostAxes(1, p)[0]; - C.assertAxesAreInnerMostDims("cumprod", [c], p); - let m = t10.makeOutput(l.shape, l.dtype), d = l.shape[c], f = t10.dataIdMap.get(l.dataId).id, h = t10.dataIdMap.get(m.dataId).id; - lM(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); + let u = w.getAxesPermutation([s], p), c = n; + u !== null && (c = ho({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); + let l = w.getInnerMostAxes(1, p)[0]; + w.assertAxesAreInnerMostDims("cumprod", [l], p); + let m = t10.makeOutput(c.shape, c.dtype), d = c.shape[l], f = t10.dataIdMap.get(c.dataId).id, h = t10.dataIdMap.get(m.dataId).id; + kO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); let g = m; if (u !== null) { - let x = C.getUndoAxesPermutation(u); - g = Vo({ inputs: { x: m }, attrs: { perm: x }, backend: t10 }), t10.disposeData(l.dataId), t10.disposeData(m.dataId); + let x = w.getUndoAxesPermutation(u); + g = ho({ inputs: { x: m }, attrs: { perm: x }, backend: t10 }), t10.disposeData(c.dataId), t10.disposeData(m.dataId); } return g; } -var cM = { kernelName: Pn, backendName: "wasm", setupFunc: Fne, kernelFunc: Pne }; -var mM; -function One(r16) { - mM = r16.wasm.cwrap(On, null, ["number", "number", "number", "number", "number", "number"]); +var NO = { kernelName: un, backendName: "wasm", setupFunc: hoe, kernelFunc: goe }; +var TO; +function xoe(r15) { + TO = r15.wasm.cwrap(pn, null, ["number", "number", "number", "number", "number", "number"]); } -function Mne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; +function yoe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o, p = n.shape.length; y.assert(n.dtype === "float32" || n.dtype === "int32", () => `cumsum does not support ${n.dtype} tensors in the WASM backend`); - let u = C.getAxesPermutation([s], p), l = n; - u !== null && (l = Vo({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); - let c = C.getInnerMostAxes(1, p)[0]; - C.assertAxesAreInnerMostDims("cumsum", [c], p); - let m = t10.makeOutput(l.shape, l.dtype), d = l.shape[c], f = t10.dataIdMap.get(l.dataId).id, h = t10.dataIdMap.get(m.dataId).id; - mM(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); + let u = w.getAxesPermutation([s], p), c = n; + u !== null && (c = ho({ inputs: { x: n }, attrs: { perm: u }, backend: t10 })); + let l = w.getInnerMostAxes(1, p)[0]; + w.assertAxesAreInnerMostDims("cumsum", [l], p); + let m = t10.makeOutput(c.shape, c.dtype), d = c.shape[l], f = t10.dataIdMap.get(c.dataId).id, h = t10.dataIdMap.get(m.dataId).id; + TO(f, a ? 1 : 0, i ? 1 : 0, d, h, we[n.dtype]); let g = m; if (u !== null) { - let x = C.getUndoAxesPermutation(u); - g = Vo({ inputs: { x: m }, attrs: { perm: x }, backend: t10 }), t10.disposeData(l.dataId), t10.disposeData(m.dataId); + let x = w.getUndoAxesPermutation(u); + g = ho({ inputs: { x: m }, attrs: { perm: x }, backend: t10 }), t10.disposeData(c.dataId), t10.disposeData(m.dataId); } return g; } -var dM = { kernelName: On, backendName: "wasm", setupFunc: One, kernelFunc: Mne }; -var fM; -function Lne(r16) { - fM = r16.wasm.cwrap("DenseBincount", null, ["number", "array", "number", "number", "boolean", "number", "number", "boolean", "number"]); +var _O = { kernelName: pn, backendName: "wasm", setupFunc: xoe, kernelFunc: yoe }; +var EO; +function boe(r15) { + EO = r15.wasm.cwrap("DenseBincount", null, ["number", "array", "number", "number", "boolean", "number", "number", "boolean", "number"]); } -function Bne(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { x: n, weights: s } = t10, { size: a, binaryOutput: i } = o, p = s.shape.reduce((m, d) => m * d, 1) !== 0, u = n.shape.length === 1 ? [a] : [n.shape[0], a], l = e.makeOutput(u, s.dtype); - function c(m) { +function Coe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { x: n, weights: s } = t10, { size: a, binaryOutput: i } = o, p = s.shape.reduce((m, d) => m * d, 1) !== 0, u = n.shape.length === 1 ? [a] : [n.shape[0], a], c = e.makeOutput(u, s.dtype); + function l(m) { return e.dataIdMap.get(m.dataId).id; } - return fM(c(n), new Uint8Array(new Int32Array(n.shape).buffer), n.shape.length, a, p, c(s), we[s.dtype], i, c(l)), l; + return EO(l(n), new Uint8Array(new Int32Array(n.shape).buffer), n.shape.length, a, p, l(s), we[s.dtype], i, l(c)), c; } -var hM = { kernelName: la, backendName: "wasm", setupFunc: Lne, kernelFunc: Bne }; -var gM; -function zne(r16) { - gM = r16.wasm.cwrap(Ln, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); +var $O = { kernelName: ra, backendName: "wasm", setupFunc: boe, kernelFunc: Coe }; +var RO; +function woe(r15) { + RO = r15.wasm.cwrap(ln, null, ["number", "number", "number", "array", "number", "array", "array", "number", "number"]); } -function Vne(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { x: n } = t10, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], l = a === "NHWC" ? n.shape[3] : n.shape[1], c = p * s, m = u * s, d = l / (s * s), f = a === "NHWC" ? [i, c, m, d] : [i, d, c, m], h = e.makeOutput(f, "float32"), x = e.dataIdMap.get(n.dataId).id, b = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), w = new Uint8Array(new Int32Array(f).buffer), S = new Uint8Array(new Int32Array(y.computeStrides(f)).buffer), k = e.dataIdMap.get(h.dataId).id; - return gM(x, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, w, S, f.length, k), h; +function Soe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { x: n } = t10, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = e.makeOutput(f, "float32"), x = e.dataIdMap.get(n.dataId).id, b = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), C = new Uint8Array(new Int32Array(f).buffer), S = new Uint8Array(new Int32Array(y.computeStrides(f)).buffer), k = e.dataIdMap.get(h.dataId).id; + return RO(x, s, a === "NHWC" ? 1 : 0, b, n.shape.length - 1, C, S, f.length, k), h; } -var xM = { kernelName: Ln, backendName: "wasm", setupFunc: zne, kernelFunc: Vne }; -var yM; -function Wne(r16) { - yM = r16.wasm.cwrap(Bn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var DO = { kernelName: ln, backendName: "wasm", setupFunc: woe, kernelFunc: Soe }; +var AO; +function Ioe(r15) { + AO = r15.wasm.cwrap(mn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Une(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: l, dimRoundingMode: c } = t10, m = u == null ? [1, 1] : u, d = C.computeConv2DInfo(n.shape, s.shape, p, m, l, c, true), f = d.filterHeight, h = d.filterWidth, g = d.padInfo.top, x = d.padInfo.right, b = d.padInfo.bottom, w = d.padInfo.left, S = d.dilationHeight, k = d.dilationWidth, T = d.strideHeight, E = d.strideWidth, R = d.inChannels, D = d.outChannels, F = d.padInfo.type === "SAME" ? 1 : 0; +function voe(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s } = e, a = o.dataIdMap.get(n.dataId).id, i = o.dataIdMap.get(s.dataId).id, { strides: p, dilations: u, pad: c, dimRoundingMode: l } = t10, m = u == null ? [1, 1] : u, d = w.computeConv2DInfo(n.shape, s.shape, p, m, c, l, true), f = d.filterHeight, h = d.filterWidth, g = d.padInfo.top, x = d.padInfo.right, b = d.padInfo.bottom, C = d.padInfo.left, S = d.dilationHeight, k = d.dilationWidth, _ = d.strideHeight, $ = d.strideWidth, R = d.inChannels, D = d.outChannels, P = d.padInfo.type === "SAME" ? 1 : 0; if (d.dataFormat !== "channelsLast") throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`); let O = o.makeOutput(d.outShape, "float32"), M = o.dataIdMap.get(O.dataId).id; - return yM(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, w, F, S, k, T, E, R, D, M), O; + return AO(a, n.shape[0], n.shape[1], n.shape[2], i, f, h, g, x, b, C, P, S, k, _, $, R, D, M), O; } -var bM = { kernelName: Bn, backendName: "wasm", setupFunc: Wne, kernelFunc: Une }; -var CM; -function Gne(r16) { - CM = r16.wasm.cwrap("Diag", null, ["number", "number", "number", "number"]); +var FO = { kernelName: mn, backendName: "wasm", setupFunc: Ioe, kernelFunc: voe }; +var PO; +function koe(r15) { + PO = r15.wasm.cwrap("Diag", null, ["number", "number", "number", "number"]); } -function Hne(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = y.sizeFromShape(o.shape), s = t10.makeOutput([...o.shape, ...o.shape], o.dtype); - return CM(t10.dataIdMap.get(o.dataId).id, we[o.dtype], n, t10.dataIdMap.get(s.dataId).id), s; +function Noe(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = y.sizeFromShape(o.shape), s = t10.makeOutput([...o.shape, ...o.shape], o.dtype); + return PO(t10.dataIdMap.get(o.dataId).id, we[o.dtype], n, t10.dataIdMap.get(s.dataId).id), s; } -var wM = { kernelName: ca, backendName: "wasm", setupFunc: Gne, kernelFunc: Hne }; -var SM; -function Kne(r16) { - SM = r16.wasm.cwrap(zn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var OO = { kernelName: oa, backendName: "wasm", setupFunc: koe, kernelFunc: Noe }; +var MO; +function Toe(r15) { + MO = r15.wasm.cwrap(dn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function qne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; +function _oe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o; if (n.dtype !== s.dtype) throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`); - let u = C.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), l = t10.makeOutput(u.outShape, n.dtype); - return SM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(l.dataId).id, we[n.dtype], u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.filterHeight, u.filterWidth, u.padInfo.top, u.padInfo.left), l; + let u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c = t10.makeOutput(u.outShape, n.dtype); + return MO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(c.dataId).id, we[n.dtype], u.batchSize, u.inChannels, u.inHeight, u.inWidth, u.outHeight, u.outWidth, u.strideHeight, u.strideWidth, u.dilationHeight, u.dilationWidth, u.filterHeight, u.filterWidth, u.padInfo.top, u.padInfo.left), c; } -var IM = { kernelName: zn, backendName: "wasm", setupFunc: Kne, kernelFunc: qne }; -var vM; -function jne(r16) { - vM = r16.wasm.cwrap(qi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var LO = { kernelName: dn, backendName: "wasm", setupFunc: Toe, kernelFunc: _oe }; +var BO; +function Eoe(r15) { + BO = r15.wasm.cwrap(Li, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Xne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; +function $oe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; if (n.dtype !== s.dtype || n.dtype !== a.dtype) throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); - let l = C.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), c = t10.makeOutput(s.shape, s.dtype); - return vM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(c.dataId).id, we[n.dtype], l.batchSize, l.inChannels, l.inHeight, l.inWidth, l.outHeight, l.outWidth, l.strideHeight, l.strideWidth, l.dilationHeight, l.dilationWidth, l.filterHeight, l.filterWidth, l.padInfo.top, l.padInfo.left), c; + let c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = t10.makeOutput(s.shape, s.dtype); + return BO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, we[n.dtype], c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.filterHeight, c.filterWidth, c.padInfo.top, c.padInfo.left), l; } -var kM = { kernelName: qi, backendName: "wasm", setupFunc: jne, kernelFunc: Xne }; -var NM; -function Yne(r16) { - NM = r16.wasm.cwrap(Ki, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var zO = { kernelName: Li, backendName: "wasm", setupFunc: Eoe, kernelFunc: $oe }; +var VO; +function Roe(r15) { + VO = r15.wasm.cwrap(Mi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Qne(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; +function Doe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o; if (n.dtype !== s.dtype || n.dtype !== a.dtype) throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`); - let l = C.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), c = t10.makeOutput(n.shape, n.dtype); - return NM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(c.dataId).id, we[n.dtype], l.batchSize, l.inChannels, l.inHeight, l.inWidth, l.outHeight, l.outWidth, l.strideHeight, l.strideWidth, l.dilationHeight, l.dilationWidth, l.filterHeight, l.filterWidth, l.padInfo.top, l.padInfo.left), c; -} -var TM = { kernelName: Ki, backendName: "wasm", setupFunc: Yne, kernelFunc: Qne }; -var _M = he(Wn); -var EM; -function Zne(r16) { - EM = r16.wasm.cwrap(ri, null, ["number", "number", "number"]); -} -function Jne(r16) { - let { inputs: e, backend: t10 } = r16, { dy: o, y: n } = e, s = t10.makeOutput(n.shape, "float32"), a = (i) => t10.dataIdMap.get(i.dataId).id; - return EM(a(n), a(o), a(s)), s; -} -var $M = { kernelName: ri, backendName: "wasm", setupFunc: Zne, kernelFunc: Jne }; -var ese = false; -var RM = He(xo, ese, "bool"); -var DM = he(Un); -var AM = he(yo, "float32"); -function Xg(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { input: n } = e, { dim: s } = t10, a = n.shape.length, i = n.shape.slice(), p = s; - return s < 0 && (y.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), Wt({ inputs: { x: n }, backend: o, attrs: { shape: i } }); -} -var FM = { kernelName: ma, backendName: "wasm", kernelFunc: Xg }; -var PM = he(bo, "float32"); -function Y0(r16) { - let { attrs: { shape: e, value: t10 }, backend: o } = r16, { attrs: { dtype: n } } = r16; + let c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = t10.makeOutput(n.shape, n.dtype); + return VO(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, we[n.dtype], c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.filterHeight, c.filterWidth, c.padInfo.top, c.padInfo.left), l; +} +var WO = { kernelName: Mi, backendName: "wasm", setupFunc: Roe, kernelFunc: Doe }; +var UO = he(hn); +var GO; +function Aoe(r15) { + GO = r15.wasm.cwrap(Xa, null, ["number", "number", "number"]); +} +function Foe(r15) { + let { inputs: e, backend: t10 } = r15, { dy: o, y: n } = e, s = t10.makeOutput(n.shape, "float32"), a = (i) => t10.dataIdMap.get(i.dataId).id; + return GO(a(n), a(o), a(s)), s; +} +var HO = { kernelName: Xa, backendName: "wasm", setupFunc: Aoe, kernelFunc: Foe }; +var Poe = false; +var KO = Ge(xn, Poe, "bool"); +var qO = he(gn); +var jO = he(yn, "float32"); +function Lg(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { input: n } = e, { dim: s } = t10, a = n.shape.length, i = n.shape.slice(), p = s; + return s < 0 && (y.assert(-(a + 1) <= s, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + s + 1), i.splice(p, 0, 1), zt({ inputs: { x: n }, backend: o, attrs: { shape: i } }); +} +var XO = { kernelName: na, backendName: "wasm", kernelFunc: Lg }; +var YO = he(bn, "float32"); +function Mv(r15) { + let { attrs: { shape: e, value: t10 }, backend: o } = r15, { attrs: { dtype: n } } = r15; n = n || y.inferDtype(t10); let s = o.makeOutput(e, n); return o.typedArrayFromHeap(s).fill(t10), s; } -var OM = { kernelName: da, backendName: "wasm", kernelFunc: Y0 }; -var MM; -function tse(r16) { - MM = r16.wasm.cwrap(Gn, null, ["number", "number", "number", "number", "number", "number"]); -} -function rse(r16) { - let { inputs: e, backend: t10 } = r16, { image: o } = e, n = t10.makeOutput(o.shape, o.dtype), s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, [i, p, u, l] = o.shape; - return MM(s, i, p, u, l, a), n; -} -var LM = { kernelName: Gn, backendName: "wasm", kernelFunc: rse, setupFunc: tse }; -var BM = he(Co); -var ose = false; -var zM = He(wo, ose); -var VM; -function nse(r16) { - VM = r16.wasm.cwrap(Hn, null, ["number", "number", "number", "number", "number", "number", "number"]); -} -function sse(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = t10, l = e.dataIdMap.get(s.dataId).id, c = e.dataIdMap.get(a.dataId).id, m = e.dataIdMap.get(i.dataId).id, d = p != null ? e.dataIdMap.get(p.dataId).id : 0, f = u != null ? e.dataIdMap.get(u.dataId).id : 0, h = e.makeOutput(s.shape, s.dtype); +var QO = { kernelName: sa, backendName: "wasm", kernelFunc: Mv }; +var ZO; +function Ooe(r15) { + ZO = r15.wasm.cwrap(Cn, null, ["number", "number", "number", "number", "number", "number"]); +} +function Moe(r15) { + let { inputs: e, backend: t10 } = r15, { image: o } = e, n = t10.makeOutput(o.shape, o.dtype), s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, [i, p, u, c] = o.shape; + return ZO(s, i, p, u, c, a), n; +} +var JO = { kernelName: Cn, backendName: "wasm", kernelFunc: Moe, setupFunc: Ooe }; +var eM = he(wn); +var Loe = false; +var tM = Ge(Sn, Loe); +var rM; +function Boe(r15) { + rM = r15.wasm.cwrap(In, null, ["number", "number", "number", "number", "number", "number", "number"]); +} +function zoe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { varianceEpsilon: n } = o, { x: s, mean: a, variance: i, offset: p, scale: u } = t10, c = e.dataIdMap.get(s.dataId).id, l = e.dataIdMap.get(a.dataId).id, m = e.dataIdMap.get(i.dataId).id, d = p != null ? e.dataIdMap.get(p.dataId).id : 0, f = u != null ? e.dataIdMap.get(u.dataId).id : 0, h = e.makeOutput(s.shape, s.dtype); if (y.sizeFromShape(s.shape) === 0) return h; let g = e.dataIdMap.get(h.dataId).id; - return VM(l, c, m, d, f, n, g), h; + return rM(c, l, m, d, f, n, g), h; } -var WM = { kernelName: Hn, backendName: "wasm", setupFunc: nse, kernelFunc: sse }; -var UM; -function ase(r16) { - UM = r16.wasm.cwrap(jo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var oM = { kernelName: In, backendName: "wasm", setupFunc: Boe, kernelFunc: zoe }; +var nM; +function Voe(r15) { + nM = r15.wasm.cwrap(Io, 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 ise(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: l, dataFormat: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = C.computeConv2DInfo(n.shape, s.shape, p, l, u, m), g = _u[d]; +function Woe(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m), g = wu[d]; if (g == null) throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`); - let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, w = h.outChannels, S = 0; + let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, S = 0; if (a != null) { let ee = o.dataIdMap.get(a.dataId); if (ee.shape.length !== 1) throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); - if (ee.shape[0] !== w) - throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`); + if (ee.shape[0] !== C) + throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); S = ee.id; } - let k = h.filterHeight, T = h.filterWidth, E = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, F = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; - if (c !== "NHWC") - throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`); + let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, P = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; + if (l !== "NHWC") + throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); let J = o.makeOutput(h.outShape, "float32"), re = o.dataIdMap.get(J.dataId).id, ne = i == null ? 0 : o.dataIdMap.get(i.dataId).id; - return UM(x, j, q, Y, b, k, T, S, E, R, D, F, U, O, M, L, B, z, w, g, ne, f || 0, re), J; + return nM(x, j, q, Y, b, k, _, S, $, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } -var GM = { kernelName: jo, backendName: "wasm", setupFunc: ase, kernelFunc: ise }; -var HM; -function use(r16) { - HM = r16.wasm.cwrap(Xo, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var sM = { kernelName: Io, backendName: "wasm", setupFunc: Voe, kernelFunc: Woe }; +var aM; +function Uoe(r15) { + aM = r15.wasm.cwrap(vo, 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 pse(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: l, dataFormat: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = C.computeConv2DInfo(n.shape, s.shape, p, l, u, m, true), g = _u[d]; +function Goe(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dataFormat: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = t10, h = w.computeConv2DInfo(n.shape, s.shape, p, c, u, m, true), g = wu[d]; if (g == null) throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`); - let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, w = h.outChannels, S = 0; + let x = o.dataIdMap.get(n.dataId).id, b = o.dataIdMap.get(s.dataId).id, C = h.outChannels, S = 0; if (a != null) { let ee = o.dataIdMap.get(a.dataId); if (ee.shape.length !== 1) throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`); - if (ee.shape[0] !== w) - throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`); + if (ee.shape[0] !== C) + throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`); S = ee.id; } - let k = h.filterHeight, T = h.filterWidth, E = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, F = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; - if (c !== "NHWC") - throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`); + let k = h.filterHeight, _ = h.filterWidth, $ = h.padInfo.top, R = h.padInfo.right, D = h.padInfo.bottom, P = h.padInfo.left, O = h.dilationHeight, M = h.dilationWidth, L = h.strideHeight, B = h.strideWidth, z = h.inChannels, U = h.padInfo.type === "SAME" ? 1 : 0, j = h.batchSize, q = h.inHeight, Y = h.inWidth; + if (l !== "NHWC") + throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`); let J = o.makeOutput(h.outShape, "float32"), re = o.dataIdMap.get(J.dataId).id, ne = i == null ? 0 : o.dataIdMap.get(i.dataId).id; - return HM(x, j, q, Y, b, k, T, S, E, R, D, F, U, O, M, L, B, z, w, g, ne, f || 0, re), J; + return aM(x, j, q, Y, b, k, _, S, $, R, D, P, U, O, M, L, B, z, C, g, ne, f || 0, re), J; } -var KM = { kernelName: Xo, backendName: "wasm", setupFunc: use, kernelFunc: pse }; -var qM; -function lse(r16) { - qM = r16.wasm.cwrap(Kn, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); +var iM = { kernelName: vo, backendName: "wasm", setupFunc: Uoe, kernelFunc: Goe }; +var uM; +function Hoe(r15) { + uM = r15.wasm.cwrap(vn, null, ["number", "number", "number", "number", "number", "number", "array", "number"]); } -function cse(r16) { - let { backend: e, inputs: t10 } = r16, { params: o, indices: n } = t10, [s, a, i, p] = xf.prepareAndValidate(o, n), u = e.makeOutput(s, o.dtype); +function Koe(r15) { + let { backend: e, inputs: t10 } = r15, { params: o, indices: n } = t10, [s, a, i, p] = af.prepareAndValidate(o, n), u = e.makeOutput(s, o.dtype); if (a === 0) return u; - let l = n.shape, c = l[l.length - 1], d = e.dataIdMap.get(o.dataId).id, h = e.dataIdMap.get(n.dataId).id, g = new Uint8Array(new Int32Array(p).buffer), x = e.dataIdMap.get(u.dataId).id; - return qM(d, we[o.dtype], h, a, c, i, g, x), u; + let c = n.shape, l = c[c.length - 1], d = e.dataIdMap.get(o.dataId).id, h = e.dataIdMap.get(n.dataId).id, g = new Uint8Array(new Int32Array(p).buffer), x = e.dataIdMap.get(u.dataId).id; + return uM(d, we[o.dtype], h, a, l, i, g, x), u; } -var jM = { kernelName: Kn, backendName: "wasm", setupFunc: lse, kernelFunc: cse }; -var XM; -function mse(r16) { - XM = r16.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); +var pM = { kernelName: vn, backendName: "wasm", setupFunc: Hoe, kernelFunc: Koe }; +var cM; +function qoe(r15) { + cM = r15.wasm.cwrap("Gather", null, ["number", "number", "array", "number", "number", "number", "array", "number"]); } -function dse(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { x: n, indices: s } = t10, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = e.readSync(s.dataId), l = n.shape[p]; +function joe(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { x: n, indices: s } = t10, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = e.readSync(s.dataId), c = n.shape[p]; for (let D = 0; D < u.length; ++D) { - let F = u[D]; - y.assert(F <= l - 1 && F >= 0, () => `GatherV2: the index value ${F} is not in [0, ${l - 1}]`); + let P = u[D]; + y.assert(P <= c - 1 && P >= 0, () => `GatherV2: the index value ${P} is not in [0, ${c - 1}]`); } - let c = C.segment_util.collectGatherOpShapeInfo(n, s, p, i), m = Wt({ inputs: { x: n }, attrs: { shape: [c.batchSize, c.outerSize, c.dimSize, c.sliceSize] }, backend: e }), d = y.sizeFromShape(s.shape), f = Wt({ inputs: { x: s }, attrs: { shape: [c.batchSize, d / c.batchSize] }, backend: e }), h = [c.batchSize, c.outerSize, d / c.batchSize, c.sliceSize], g = e.makeOutput(h, n.dtype); + let l = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), m = zt({ inputs: { x: n }, attrs: { shape: [l.batchSize, l.outerSize, l.dimSize, l.sliceSize] }, backend: e }), d = y.sizeFromShape(s.shape), f = zt({ inputs: { x: s }, attrs: { shape: [l.batchSize, d / l.batchSize] }, backend: e }), h = [l.batchSize, l.outerSize, d / l.batchSize, l.sliceSize], g = e.makeOutput(h, n.dtype); if (y.sizeFromShape(n.shape) === 0) return g; - let x = m.shape.length - 1, w = e.dataIdMap.get(m.dataId).id, k = e.dataIdMap.get(f.dataId).id, T = e.dataIdMap.get(g.dataId).id, E = new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer), R = new Uint8Array(new Int32Array(y.computeStrides(h)).buffer); - return XM(w, we[n.dtype], E, x, k, c.batchSize, R, T), e.disposeData(m.dataId), e.disposeData(f.dataId), g.shape = c.outputShape, g; -} -var YM = { kernelName: fa, backendName: "wasm", setupFunc: mse, kernelFunc: dse }; -var fse = false; -var QM = He(So, fse, "bool"); -var hse = false; -var ZM = He(Io, hse, "bool"); -var JM = he(qn, "bool"); -var eL = he(jn, "bool"); -var tL = he(Xn, "bool"); -var rL; -function gse(r16) { - rL = r16.wasm.cwrap(Yn, null, ["number", "number", "number", "number"]); -} -function xse(r16) { - let { inputs: { x: e }, attrs: { alpha: t10 }, backend: o } = r16, n = o.dataIdMap.get(e.dataId).id, s = o.makeOutput(e.shape, "float32"); + let x = m.shape.length - 1, C = e.dataIdMap.get(m.dataId).id, k = e.dataIdMap.get(f.dataId).id, _ = e.dataIdMap.get(g.dataId).id, $ = new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer), R = new Uint8Array(new Int32Array(y.computeStrides(h)).buffer); + return cM(C, we[n.dtype], $, x, k, l.batchSize, R, _), e.disposeData(m.dataId), e.disposeData(f.dataId), g.shape = l.outputShape, g; +} +var lM = { kernelName: aa, backendName: "wasm", setupFunc: qoe, kernelFunc: joe }; +var Xoe = false; +var mM = Ge(kn, Xoe, "bool"); +var Yoe = false; +var dM = Ge(Nn, Yoe, "bool"); +var fM = he(Tn, "bool"); +var hM = he(_n, "bool"); +var gM = he(En, "bool"); +var xM; +function Qoe(r15) { + xM = r15.wasm.cwrap($n, null, ["number", "number", "number", "number"]); +} +function Zoe(r15) { + let { inputs: { x: e }, attrs: { alpha: t10 }, backend: o } = r15, n = o.dataIdMap.get(e.dataId).id, s = o.makeOutput(e.shape, "float32"); if (y.sizeFromShape(e.shape) !== 0) { let a = o.dataIdMap.get(s.dataId).id; - rL(n, we[e.dtype], t10, a); + xM(n, we[e.dtype], t10, a); } return s; } -var oL = { kernelName: Yn, backendName: "wasm", setupFunc: gse, kernelFunc: xse }; -var yse = false; -var nL = He(ko, yse, "bool"); -var bse = false; -var sL = He(No, bse, "bool"); -var aL; -function Cse(r16) { - aL = r16.wasm.cwrap(Qn, null, ["number", "number", "number", "number"]); -} -function wse(r16) { - let { attrs: e, backend: t10 } = r16, { start: o, stop: n, num: s } = e, a = Math.floor(s), i = t10.makeOutput([a], "float32"); - return aL(t10.dataIdMap.get(i.dataId).id, o, n, a), i; -} -var iL = { kernelName: Qn, backendName: "wasm", setupFunc: Cse, kernelFunc: wse }; -var uL = he(To); -var pL = he(Zn); -var Sse = false; -var lL = He(Jn, Sse, "bool"); -var cL = he(es); -var Ise = false; -var mL = He(ts, Ise, "bool"); -var vse = false; -var dL = He(gk, vse, "bool"); -var fL; -function kse(r16) { - fL = r16.wasm.cwrap(rs, null, ["number", "number", "number", "number", "number", "number", "number"]); -} -function Nse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; +var yM = { kernelName: $n, backendName: "wasm", setupFunc: Qoe, kernelFunc: Zoe }; +var Joe = false; +var bM = Ge(Rn, Joe, "bool"); +var ene = false; +var CM = Ge(Dn, ene, "bool"); +var wM; +function tne(r15) { + wM = r15.wasm.cwrap(An, null, ["number", "number", "number", "number"]); +} +function rne(r15) { + let { attrs: e, backend: t10 } = r15, { start: o, stop: n, num: s } = e, a = Math.floor(s), i = t10.makeOutput([a], "float32"); + return wM(t10.dataIdMap.get(i.dataId).id, o, n, a), i; +} +var SM = { kernelName: An, backendName: "wasm", setupFunc: tne, kernelFunc: rne }; +var IM = he(Fn); +var vM = he(Pn); +var one = false; +var kM = Ge(On, one, "bool"); +var NM = he(Mn); +var nne = false; +var TM = Ge(Ln, nne, "bool"); +var sne = false; +var _M = Ge(R0, sne, "bool"); +var EM; +function ane(r15) { + EM = r15.wasm.cwrap(Bn, null, ["number", "number", "number", "number", "number", "number", "number"]); +} +function ine(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o; if (n.dtype !== "float32") throw new Error("LRN error: x must have dtype float32"); let u = t10.makeOutput(n.shape, n.dtype); - return fL(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(u.dataId).id, n.shape[3], s, a, i, p), u; + return EM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(u.dataId).id, n.shape[3], s, a, i, p), u; } -var hL = { kernelName: rs, backendName: "wasm", setupFunc: kse, kernelFunc: Nse }; -var gL; -function Tse(r16) { - gL = r16.wasm.cwrap(oi, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var $M = { kernelName: Bn, backendName: "wasm", setupFunc: ane, kernelFunc: ine }; +var RM; +function une(r15) { + RM = r15.wasm.cwrap(Ya, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function _se(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: l } = o; +function pne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o; if (n.dtype !== "float32" || s.dtype !== "float32" || a.dtype !== "float32") throw new Error("LRNGrad error: x, y, and dy must have dtype float32"); - let c = t10.makeOutput(n.shape, n.dtype); - return gL(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(c.dataId).id, a.shape[3], i, p, u, l), c; + let l = t10.makeOutput(n.shape, n.dtype); + return RM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(a.dataId).id, t10.dataIdMap.get(l.dataId).id, a.shape[3], i, p, u, c), l; } -var xL = { kernelName: oi, backendName: "wasm", setupFunc: Tse, kernelFunc: _se }; -var yL; -function Ese(r16) { - yL = r16.wasm.cwrap(os, null, ["number", "number", "number", "number"]); +var DM = { kernelName: Ya, backendName: "wasm", setupFunc: une, kernelFunc: pne }; +var AM; +function cne(r15) { + AM = r15.wasm.cwrap(zn, null, ["number", "number", "number", "number"]); } -function $se(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { reductionIndices: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e); +function lne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { reductionIndices: n, keepDims: s } = o, { x: a } = t10, p = e.dataIdMap.get(a.dataId).id, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e); if (d) { - let w = e.dataIdMap.get(l.dataId).id; - u = l, p = w; + let C = e.dataIdMap.get(c.dataId).id; + u = c, p = C; } let f = u.shape.length; - C.assertAxesAreInnerMostDims("max", c, f); - let [h, g] = C.computeOutAndReduceShapes(u.shape, c), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); + w.assertAxesAreInnerMostDims("max", l, f); + let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, a.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - yL(p, we[a.dtype], x, w); + let C = e.dataIdMap.get(b.dataId).id; + AM(p, we[a.dtype], x, C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var bL = { kernelName: os, backendName: "wasm", setupFunc: Ese, kernelFunc: $se }; -var Rse = false; -var CL = He(_o, Rse); -var wL; -function Dse(r16) { - wL = r16.wasm.cwrap(ns, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var FM = { kernelName: zn, backendName: "wasm", setupFunc: cne, kernelFunc: lne }; +var mne = false; +var PM = Ge(Vn, mne); +var OM; +function dne(r15) { + OM = r15.wasm.cwrap(Wn, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Ase(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, n = e.x, s = o.dataIdMap.get(n.dataId).id; +function fne(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, n = e.x, s = o.dataIdMap.get(n.dataId).id; y.assert(n.dtype === "float32", () => `Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`); - let { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, l = C.computePool2DInfo(n.shape, a, i, 1, p, u), c = l.filterHeight, m = l.filterWidth, d = l.padInfo.top, f = l.padInfo.right, h = l.padInfo.bottom, g = l.padInfo.left, x = l.dilationHeight, b = l.dilationWidth, w = l.strideHeight, S = l.strideWidth, k = l.inChannels, T = l.outChannels; - if (l.dataFormat !== "channelsLast") - throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`); - let E = o.makeOutput(l.outShape, "float32"), R = o.dataIdMap.get(E.dataId).id; - return wL(s, n.shape[0], n.shape[1], n.shape[2], c, m, d, f, h, g, x, b, w, S, k, T, R), E; -} -var SL = { kernelName: ns, backendName: "wasm", setupFunc: Dse, kernelFunc: Ase }; -var IL; -function Fse(r16) { - IL = r16.wasm.cwrap("MaxPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function Pse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, l = C.computePool3DInfo(n.shape, s, a, 1, i, p, u), c = t10.makeOutput(l.outShape, n.dtype); - return IL(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, l.batchSize, l.inChannels, l.inDepth, l.inHeight, l.inWidth, l.outDepth, l.outHeight, l.outWidth, l.strideDepth, l.strideHeight, l.strideWidth, l.dilationDepth, l.dilationHeight, l.dilationWidth, l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.front, l.padInfo.top, l.padInfo.left), c; -} -var vL = { kernelName: ha, backendName: "wasm", setupFunc: Fse, kernelFunc: Pse }; -var kL; -function Ose(r16) { - kL = r16.wasm.cwrap("MaxPool3DGrad", 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 Mse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, l = C.computePool3DInfo(s.shape, a, i, 1, p, u), c = t10.makeOutput(s.shape, s.dtype); - return kL(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, l.batchSize, l.inChannels, l.inDepth, l.inHeight, l.inWidth, l.outDepth, l.outHeight, l.outWidth, l.strideDepth, l.strideHeight, l.strideWidth, l.dilationDepth, l.dilationHeight, l.dilationWidth, l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.front, l.padInfo.top, l.padInfo.left), c; -} -var NL = { kernelName: Ji, backendName: "wasm", setupFunc: Ose, kernelFunc: Mse }; -var TL; -function Lse(r16) { - TL = r16.wasm.cwrap("MaxPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function Bse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, l = C.computePool2DInfo(s.shape, a, i, 1, p, u), c = t10.makeOutput(s.shape, s.dtype); - return TL(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, l.batchSize, l.inChannels, l.inHeight, l.inWidth, l.outHeight, l.outWidth, l.strideHeight, l.strideWidth, l.dilationHeight, l.dilationWidth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.top, l.padInfo.left), c; -} -var _L = { kernelName: Zi, backendName: "wasm", setupFunc: Lse, kernelFunc: Bse }; -var EL; -function zse(r16) { - EL = r16.wasm.cwrap("MaxPoolWithArgmax", null, ["number", "number", "number", "number", "boolean", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function Vse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, includeBatchInIndex: p } = o; + let { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = t10, c = w.computePool2DInfo(n.shape, a, i, 1, p, u), l = c.filterHeight, m = c.filterWidth, d = c.padInfo.top, f = c.padInfo.right, h = c.padInfo.bottom, g = c.padInfo.left, x = c.dilationHeight, b = c.dilationWidth, C = c.strideHeight, S = c.strideWidth, k = c.inChannels, _ = c.outChannels; + if (c.dataFormat !== "channelsLast") + throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`); + let $ = o.makeOutput(c.outShape, "float32"), R = o.dataIdMap.get($.dataId).id; + return OM(s, n.shape[0], n.shape[1], n.shape[2], l, m, d, f, h, g, x, b, C, S, k, _, R), $; +} +var MM = { kernelName: Wn, backendName: "wasm", setupFunc: dne, kernelFunc: fne }; +var LM; +function hne(r15) { + LM = r15.wasm.cwrap("MaxPool3D", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function gne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p, dataFormat: u } = o, c = w.computePool3DInfo(n.shape, s, a, 1, i, p, u), l = t10.makeOutput(c.outShape, n.dtype); + return LM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, c.batchSize, c.inChannels, c.inDepth, c.inHeight, c.inWidth, c.outDepth, c.outHeight, c.outWidth, c.strideDepth, c.strideHeight, c.strideWidth, c.dilationDepth, c.dilationHeight, c.dilationWidth, c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.front, c.padInfo.top, c.padInfo.left), l; +} +var BM = { kernelName: ia, backendName: "wasm", setupFunc: hne, kernelFunc: gne }; +var zM; +function xne(r15) { + zM = r15.wasm.cwrap("MaxPool3DGrad", 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 yne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool3DInfo(s.shape, a, i, 1, p, u), l = t10.makeOutput(s.shape, s.dtype); + return zM(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, c.batchSize, c.inChannels, c.inDepth, c.inHeight, c.inWidth, c.outDepth, c.outHeight, c.outWidth, c.strideDepth, c.strideHeight, c.strideWidth, c.dilationDepth, c.dilationHeight, c.dilationWidth, c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.front, c.padInfo.top, c.padInfo.left), l; +} +var VM = { kernelName: Gi, backendName: "wasm", setupFunc: xne, kernelFunc: yne }; +var WM; +function bne(r15) { + WM = r15.wasm.cwrap("MaxPoolGrad", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function Cne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, { filterSize: a, strides: i, pad: p, dimRoundingMode: u } = o, c = w.computePool2DInfo(s.shape, a, i, 1, p, u), l = t10.makeOutput(s.shape, s.dtype); + return WM(t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.top, c.padInfo.left), l; +} +var UM = { kernelName: Ui, backendName: "wasm", setupFunc: bne, kernelFunc: Cne }; +var GM; +function wne(r15) { + GM = r15.wasm.cwrap("MaxPoolWithArgmax", null, ["number", "number", "number", "number", "boolean", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function Sne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, includeBatchInIndex: p } = o; y.assert(n.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`); let u = [1, 1]; - y.assert(C.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); - let l = C.computePool2DInfo(n.shape, s, a, [1, 1], i), c = t10.makeOutput(l.outShape, n.dtype), m = t10.makeOutput(l.outShape, "int32"); - return EL(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(c.dataId).id, t10.dataIdMap.get(m.dataId).id, we[n.dtype], p, l.batchSize, l.inChannels, l.inHeight, l.inWidth, l.outHeight, l.outWidth, l.strideHeight, l.strideWidth, l.dilationHeight, l.dilationWidth, l.effectiveFilterHeight, l.effectiveFilterWidth, l.padInfo.top, l.padInfo.left), [c, m]; + y.assert(w.eitherStridesOrDilationsAreOne(a, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`); + let c = w.computePool2DInfo(n.shape, s, a, [1, 1], i), l = t10.makeOutput(c.outShape, n.dtype), m = t10.makeOutput(c.outShape, "int32"); + return GM(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(l.dataId).id, t10.dataIdMap.get(m.dataId).id, we[n.dtype], p, c.batchSize, c.inChannels, c.inHeight, c.inWidth, c.outHeight, c.outWidth, c.strideHeight, c.strideWidth, c.dilationHeight, c.dilationWidth, c.effectiveFilterHeight, c.effectiveFilterWidth, c.padInfo.top, c.padInfo.left), [l, m]; } -var $L = { kernelName: ga, backendName: "wasm", setupFunc: zse, kernelFunc: Vse }; -var RL; -function Wse(r16) { - RL = r16.wasm.cwrap(ss, null, ["number, number, number"]); +var HM = { kernelName: ua, backendName: "wasm", setupFunc: wne, kernelFunc: Sne }; +var KM; +function Ine(r15) { + KM = r15.wasm.cwrap(Un, null, ["number, number, number"]); } -function Use(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e), f = c; +function vne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e), f = l; if (d) { - let S = e.dataIdMap.get(l.dataId).id; - S !== i && (u = l, p = S, f = C.getInnerMostAxes(f.length, u.shape.length)); + let S = e.dataIdMap.get(c.dataId).id; + S !== i && (u = c, p = S, f = w.getInnerMostAxes(f.length, u.shape.length)); } - C.assertAxesAreInnerMostDims("mean", f, u.shape.length); - let [h, g] = C.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = u; - u.dtype !== "float32" && (b = Vr({ backend: e, inputs: { x: u }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(b.dataId).id); - let w = e.makeOutput(h, "float32"); + w.assertAxesAreInnerMostDims("mean", f, u.shape.length); + let [h, g] = w.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = u; + u.dtype !== "float32" && (b = Mr({ backend: e, inputs: { x: u }, attrs: { dtype: "float32" } }), p = e.dataIdMap.get(b.dataId).id); + let C = e.makeOutput(h, "float32"); if (y.sizeFromShape(u.shape) !== 0) { - let S = e.dataIdMap.get(w.dataId).id; - RL(p, x, S); + let S = e.dataIdMap.get(C.dataId).id; + KM(p, x, S); } - if (d && e.disposeData(l.dataId), s) { - let S = C.expandShapeToKeepDim(w.shape, m); - w.shape = S; + if (d && e.disposeData(c.dataId), s) { + let S = w.expandShapeToKeepDim(C.shape, m); + C.shape = S; } - return u.dtype !== "float32" && e.disposeData(b.dataId), w; + return u.dtype !== "float32" && e.disposeData(b.dataId), C; } -var DL = { kernelName: ss, backendName: "wasm", setupFunc: Wse, kernelFunc: Use }; -var AL; -function Gse(r16) { - AL = r16.wasm.cwrap(as, null, ["number", "number", "number", "number"]); +var qM = { kernelName: Un, backendName: "wasm", setupFunc: Ine, kernelFunc: vne }; +var jM; +function kne(r15) { + jM = r15.wasm.cwrap(Gn, null, ["number", "number", "number", "number"]); } -function Hse(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e); +function Nne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e); if (d) { - let w = e.dataIdMap.get(l.dataId).id; - w !== i && (u = l, p = w); + let C = e.dataIdMap.get(c.dataId).id; + C !== i && (u = c, p = C); } let f = u.shape.length; - C.assertAxesAreInnerMostDims("min", c, f); - let [h, g] = C.computeOutAndReduceShapes(u.shape, c), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + w.assertAxesAreInnerMostDims("min", l, f); + let [h, g] = w.computeOutAndReduceShapes(u.shape, l), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - AL(p, we[a.dtype], x, w); + let C = e.dataIdMap.get(b.dataId).id; + jM(p, we[a.dtype], x, C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var FL = { kernelName: as, backendName: "wasm", setupFunc: Gse, kernelFunc: Hse }; -var Kse = false; -var PL = He(Eo, Kse); -var Q0; -(function(r16) { - r16[r16.reflect = 0] = "reflect", r16[r16.symmetric = 1] = "symmetric"; -})(Q0 || (Q0 = {})); -var OL; -function qse(r16) { - OL = r16.wasm.cwrap(is, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); -} -function jse(r16) { - let { inputs: { x: e }, backend: t10, attrs: { paddings: o, mode: n } } = r16, s = o.map((f, h) => f[0] + e.shape[h] + f[1]), a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), p = t10.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(e.shape).buffer), l = o.map((f) => f[0]), c = o.map((f) => f[1]), m = new Uint8Array(new Int32Array(l).buffer), d = new Uint8Array(new Int32Array(c).buffer); - return OL(a, u, e.shape.length, we[e.dtype], m, d, Q0[n], p), i; -} -var ML = { kernelName: is, backendName: "wasm", kernelFunc: jse, setupFunc: qse }; -var LL; -function Xse(r16) { - LL = r16.wasm.cwrap(Fs, null, ["number", "number", "number", "number"]); -} -function Z0(r16) { - let { backend: e, inputs: { logits: t10 }, attrs: { dim: o } } = r16, n = e.dataIdMap.get(t10.dataId).id, s = e.makeOutput(t10.shape, t10.dtype), a = e.dataIdMap.get(s.dataId).id, i = t10.shape[o], p = y.sizeFromShape(t10.shape) / i; - return y.sizeFromShape(s.shape) === 0 || LL(n, a, i, p), s; -} -var BL = { kernelName: Fs, backendName: "wasm", setupFunc: Xse, kernelFunc: Z0 }; -var zL; -function Yse(r16) { - zL = r16.wasm.cwrap(ps, null, ["number", "number", "number", "number", "number", "number"]); -} -function Qse(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; +var XM = { kernelName: Gn, backendName: "wasm", setupFunc: kne, kernelFunc: Nne }; +var Tne = false; +var YM = Ge(Hn, Tne); +var Lv; +(function(r15) { + r15[r15.reflect = 0] = "reflect", r15[r15.symmetric = 1] = "symmetric"; +})(Lv || (Lv = {})); +var QM; +function _ne(r15) { + QM = r15.wasm.cwrap(Kn, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +} +function Ene(r15) { + let { inputs: { x: e }, backend: t10, attrs: { paddings: o, mode: n } } = r15, s = o.map((f, h) => f[0] + e.shape[h] + f[1]), a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), p = t10.dataIdMap.get(i.dataId).id, u = new Uint8Array(new Int32Array(e.shape).buffer), c = o.map((f) => f[0]), l = o.map((f) => f[1]), m = new Uint8Array(new Int32Array(c).buffer), d = new Uint8Array(new Int32Array(l).buffer); + return QM(a, u, e.shape.length, we[e.dtype], m, d, Lv[n], p), i; +} +var ZM = { kernelName: Kn, backendName: "wasm", kernelFunc: Ene, setupFunc: _ne }; +var JM; +function $ne(r15) { + JM = r15.wasm.cwrap(Is, null, ["number", "number", "number", "number"]); +} +function Bv(r15) { + let { backend: e, inputs: { logits: t10 }, attrs: { dim: o } } = r15, n = e.dataIdMap.get(t10.dataId).id, s = e.makeOutput(t10.shape, t10.dtype), a = e.dataIdMap.get(s.dataId).id, i = t10.shape[o], p = y.sizeFromShape(t10.shape) / i; + return y.sizeFromShape(s.shape) === 0 || JM(n, a, i, p), s; +} +var eL = { kernelName: Is, backendName: "wasm", setupFunc: $ne, kernelFunc: Bv }; +var tL; +function Rne(r15) { + tL = r15.wasm.cwrap(jn, null, ["number", "number", "number", "number", "number", "number"]); +} +function Dne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o; if (n.dtype !== "float32") throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`); - let p = i ? n : Z0({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), [u, l] = p.shape, c = t10.makeOutput([u, s], "int32"); - return zL(t10.dataIdMap.get(p.dataId).id, u, l, s, a, t10.dataIdMap.get(c.dataId).id), i || t10.disposeData(p.dataId), c; -} -var VL = { kernelName: ps, backendName: "wasm", setupFunc: Yse, kernelFunc: Qse }; -var WL = He(us, true); -var Zse = true; -var UL = He($o, Zse); -var GL = he(ls); -function Zl(r16, e) { - let t10 = new Int32Array(r16.wasm.HEAPU8.buffer, e, 4), o = t10[0], n = t10[1], s = t10[2], a = t10[3]; - return r16.wasm._free(e), { pSelectedIndices: o, selectedSize: n, pSelectedScores: s, pValidOutputs: a }; -} -var HL; -function Jse(r16) { - HL = r16.wasm.cwrap(cs, "number", ["number", "number", "number", "number", "number"]); -} -function eae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = t10, u = e.dataIdMap.get(i.dataId).id, l = e.dataIdMap.get(p.dataId).id, c = HL(u, l, s, n, a), { pSelectedIndices: m, selectedSize: d, pSelectedScores: f, pValidOutputs: h } = Zl(e, c); + let p = i ? n : Bv({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), [u, c] = p.shape, l = t10.makeOutput([u, s], "int32"); + return tL(t10.dataIdMap.get(p.dataId).id, u, c, s, a, t10.dataIdMap.get(l.dataId).id), i || t10.disposeData(p.dataId), l; +} +var rL = { kernelName: jn, backendName: "wasm", setupFunc: Rne, kernelFunc: Dne }; +var oL = Ge(qn, true); +var Ane = true; +var nL = Ge(Xn, Ane); +var sL = he(pa); +function qc(r15, e) { + let t10 = new Int32Array(r15.wasm.HEAPU8.buffer, e, 4), o = t10[0], n = t10[1], s = t10[2], a = t10[3]; + return r15.wasm._free(e), { pSelectedIndices: o, selectedSize: n, pSelectedScores: s, pValidOutputs: a }; +} +var aL; +function Fne(r15) { + aL = r15.wasm.cwrap(Qn, "number", ["number", "number", "number", "number", "number"]); +} +function Pne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a } = o, { boxes: i, scores: p } = t10, u = e.dataIdMap.get(i.dataId).id, c = e.dataIdMap.get(p.dataId).id, l = aL(u, c, s, n, a), { pSelectedIndices: m, selectedSize: d, pSelectedScores: f, pValidOutputs: h } = qc(e, l); return e.wasm._free(f), e.wasm._free(h), e.makeOutput([d], "int32", m); } -var KL = { kernelName: cs, backendName: "wasm", setupFunc: Jse, kernelFunc: eae }; -var qL; -function tae(r16) { - qL = r16.wasm.cwrap(ni, "number", ["number", "number", "number", "number", "number", "bool"]); +var iL = { kernelName: Qn, backendName: "wasm", setupFunc: Fne, kernelFunc: Pne }; +var uL; +function One(r15) { + uL = r15.wasm.cwrap(Qa, "number", ["number", "number", "number", "number", "number", "bool"]); } -function rae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = t10, l = e.dataIdMap.get(p.dataId).id, c = e.dataIdMap.get(u.dataId).id, m = qL(l, c, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Zl(e, m); +function Mne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, padToMaxOutputSize: i } = o, { boxes: p, scores: u } = t10, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = uL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = qc(e, m); e.wasm._free(h); let x = e.makeOutput([f], "int32", d), b = e.makeOutput([], "int32", g); return [x, b]; } -var jL = { kernelName: ni, backendName: "wasm", setupFunc: tae, kernelFunc: rae }; -var XL; -function oae(r16) { - XL = r16.wasm.cwrap(ms, "number", ["number", "number", "number", "number", "number", "number"]); +var pL = { kernelName: Qa, backendName: "wasm", setupFunc: One, kernelFunc: Mne }; +var cL; +function Lne(r15) { + cL = r15.wasm.cwrap(Zn, "number", ["number", "number", "number", "number", "number", "number"]); } -function nae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = t10, l = e.dataIdMap.get(p.dataId).id, c = e.dataIdMap.get(u.dataId).id, m = XL(l, c, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = Zl(e, m); +function Bne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { iouThreshold: n, maxOutputSize: s, scoreThreshold: a, softNmsSigma: i } = o, { boxes: p, scores: u } = t10, c = e.dataIdMap.get(p.dataId).id, l = e.dataIdMap.get(u.dataId).id, m = cL(c, l, s, n, a, i), { pSelectedIndices: d, selectedSize: f, pSelectedScores: h, pValidOutputs: g } = qc(e, m); e.wasm._free(g); let x = e.makeOutput([f], "int32", d), b = e.makeOutput([f], "float32", h); return [x, b]; } -var YL = { kernelName: ms, backendName: "wasm", setupFunc: oae, kernelFunc: nae }; -var sae = false; -var QL = He(Ro, sae, "bool"); -var ZL; -function aae(r16) { - ZL = r16.wasm.cwrap(ds, null, ["number", "number", "number", "number", "number"]); +var lL = { kernelName: Zn, backendName: "wasm", setupFunc: Lne, kernelFunc: Bne }; +var zne = false; +var mL = Ge(Yn, zne, "bool"); +var dL; +function Vne(r15) { + dL = r15.wasm.cwrap(Jn, null, ["number", "number", "number", "number", "number"]); } -function iae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = t10.makeOutput([...n.shape, a], s), l = t10.dataIdMap.get(u.dataId).id, m = t10.dataIdMap.get(n.dataId).id; - return ZL(m, a, i, p, l), u; +function Wne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = t10.makeOutput([...n.shape, a], s), c = t10.dataIdMap.get(u.dataId).id, m = t10.dataIdMap.get(n.dataId).id; + return dL(m, a, i, p, c), u; } -var JL = { kernelName: ds, backendName: "wasm", setupFunc: aae, kernelFunc: iae }; -function uae(r16) { - let { inputs: { x: e }, backend: t10 } = r16, o = t10.makeOutput(e.shape, e.dtype); +var fL = { kernelName: Jn, backendName: "wasm", setupFunc: Vne, kernelFunc: Wne }; +function Une(r15) { + let { inputs: { x: e }, backend: t10 } = r15, o = t10.makeOutput(e.shape, e.dtype); return t10.typedArrayFromHeap(o).fill(1), o; } -var eB = { kernelName: xa, backendName: "wasm", kernelFunc: uae }; -function pae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o; +var hL = { kernelName: ca, backendName: "wasm", kernelFunc: Une }; +function Gne(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; if (e.length === 1) - return Xg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return Lg({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; - e.forEach((l) => { - y.assertShapesMatch(s, l.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === l.dtype, () => "All tensors passed to stack must have matching dtypes"); + e.forEach((c) => { + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); - let i = [], p = e.map((l) => { - let c = Xg({ inputs: { input: l }, backend: t10, attrs: { dim: n } }); - return i.push(c), c; - }), u = j0({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((l) => t10.disposeData(l.dataId)), u; -} -var tB = { kernelName: ya, backendName: "wasm", kernelFunc: pae }; -var rB; -function lae(r16) { - rB = r16.wasm.cwrap(fs, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); -} -function cae(r16) { - let { inputs: { x: e }, backend: t10, attrs: { paddings: o, constantValue: n } } = r16, s = o.map((h, g) => h[0] + e.shape[g] + h[1]); + let i = [], p = e.map((c) => { + let l = Lg({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + return i.push(l), l; + }), u = Pv({ inputs: p, backend: t10, attrs: { axis: n } }); + return i.forEach((c) => t10.disposeData(c.dataId)), u; +} +var gL = { kernelName: la, backendName: "wasm", kernelFunc: Gne }; +var xL; +function Hne(r15) { + xL = r15.wasm.cwrap(es, null, ["number", "array", "number", "number", "array", "array", "number", "number"]); +} +function Kne(r15) { + let { inputs: { x: e }, backend: t10, attrs: { paddings: o, constantValue: n } } = r15, s = o.map((h, g) => h[0] + e.shape[g] + h[1]); if (y.sizeFromShape(e.shape) === 0) - return Y0({ backend: t10, attrs: { shape: s, value: n, dtype: e.dtype } }); - let a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), u = t10.dataIdMap.get(i.dataId).id, l = new Uint8Array(new Int32Array(e.shape).buffer), c = o.map((h) => h[0]), m = o.map((h) => h[1]), d = new Uint8Array(new Int32Array(c).buffer), f = new Uint8Array(new Int32Array(m).buffer); - return rB(a, l, e.shape.length, we[e.dtype], d, f, n, u), i; -} -var Yg = { kernelName: fs, backendName: "wasm", kernelFunc: cae, setupFunc: lae }; -var mae = false; -var oB = He(hs, mae); -var nB; -function dae(r16) { - nB = r16.wasm.cwrap(gs, null, ["number", "number", "number"]); -} -function fae(r16) { - let { inputs: e, backend: t10 } = r16, { x: o, alpha: n } = e, s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; - p.dtype !== "float32" && (u = Vr({ backend: t10, inputs: { x: o }, attrs: { dtype: "float32" } }), i = t10.dataIdMap.get(u.dataId).id); - let l = t10.makeOutput(o.shape, "float32"), c = t10.dataIdMap.get(l.dataId).id; - return nB(i, a, c), p.dtype !== "float32" && t10.disposeData(u.dataId), l; -} -var sB = { kernelName: gs, backendName: "wasm", setupFunc: dae, kernelFunc: fae }; -var aB; -function hae(r16) { - aB = r16.wasm.cwrap(Ho, null, ["number", "number", "number", "number"]); + return Mv({ backend: t10, attrs: { shape: s, value: n, dtype: e.dtype } }); + let a = t10.dataIdMap.get(e.dataId).id, i = t10.makeOutput(s, e.dtype), u = t10.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(e.shape).buffer), l = o.map((h) => h[0]), m = o.map((h) => h[1]), d = new Uint8Array(new Int32Array(l).buffer), f = new Uint8Array(new Int32Array(m).buffer); + return xL(a, c, e.shape.length, we[e.dtype], d, f, n, u), i; +} +var Bg = { kernelName: es, backendName: "wasm", kernelFunc: Kne, setupFunc: Hne }; +var qne = false; +var yL = Ge(ts, qne); +var bL; +function jne(r15) { + bL = r15.wasm.cwrap(rs, null, ["number", "number", "number"]); +} +function Xne(r15) { + let { inputs: e, backend: t10 } = r15, { x: o, alpha: n } = e, s = t10.dataIdMap.get(o.dataId).id, a = t10.dataIdMap.get(n.dataId).id, i = s, p = o, u = p; + p.dtype !== "float32" && (u = Mr({ backend: t10, inputs: { x: o }, attrs: { dtype: "float32" } }), i = t10.dataIdMap.get(u.dataId).id); + let c = t10.makeOutput(o.shape, "float32"), l = t10.dataIdMap.get(c.dataId).id; + return bL(i, a, l), p.dtype !== "float32" && t10.disposeData(u.dataId), c; +} +var CL = { kernelName: rs, backendName: "wasm", setupFunc: jne, kernelFunc: Xne }; +var wL; +function Yne(r15) { + wL = r15.wasm.cwrap(os, null, ["number", "number", "number", "number"]); } -function gae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e), f = c; +function Qne(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e), f = l; if (d) { - let w = e.dataIdMap.get(l.dataId).id; - w !== i && (u = l, p = w, f = C.getInnerMostAxes(f.length, u.shape.length)); + let C = e.dataIdMap.get(c.dataId).id; + C !== i && (u = c, p = C, f = w.getInnerMostAxes(f.length, u.shape.length)); } - C.assertAxesAreInnerMostDims("prod", f, u.shape.length); - let [h, g] = C.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + w.assertAxesAreInnerMostDims("prod", f, u.shape.length); + let [h, g] = w.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - aB(p, x, we[b.dtype], w); + let C = e.dataIdMap.get(b.dataId).id; + wL(p, x, we[b.dtype], C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var iB = { kernelName: Ho, backendName: "wasm", setupFunc: hae, kernelFunc: gae }; -var xae = (r16) => { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, step: s, dtype: a } = t10, i = fp(o, n, s, a), p = e.makeOutput([i.length], a); +var SL = { kernelName: os, backendName: "wasm", setupFunc: Yne, kernelFunc: Qne }; +var Zne = (r15) => { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, step: s, dtype: a } = t10, i = up(o, n, s, a), p = e.makeOutput([i.length], a); return e.typedArrayFromHeap(p).set(i), p; }; -var uB = { kernelName: ba, backendName: "wasm", kernelFunc: xae }; -var yae = true; -var pB = He(Vn, yae); -var lB = he(xs); -var cB = he(ys); -var mB = he(ws); -var dB; -function bae(r16) { - dB = r16.wasm.cwrap(Cs, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); -} -function Cae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [l, c, m, d] = n.shape, f = [l, p, u, d], h = e.dataIdMap.get(n.dataId), g; - h.dtype !== "float32" && (g = Vr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), h = e.dataIdMap.get(g.dataId)); +var IL = { kernelName: ma, backendName: "wasm", kernelFunc: Zne }; +var Jne = true; +var vL = Ge(fn, Jne); +var kL = he(ns); +var NL = he(ss); +var TL = he(us); +var _L; +function ese(r15) { + _L = r15.wasm.cwrap(is, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +} +function tse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = e.dataIdMap.get(n.dataId), g; + h.dtype !== "float32" && (g = Mr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), h = e.dataIdMap.get(g.dataId)); let x = h.id, b = e.makeOutput(f, "float32"); if (y.sizeFromShape(n.shape) === 0) return b; - let w = e.dataIdMap.get(b.dataId).id; - return dB(x, l, c, m, d, p, u, s ? 1 : 0, a ? 1 : 0, w), g != null && e.disposeData(g.dataId), b; + let C = e.dataIdMap.get(b.dataId).id; + return _L(x, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), g != null && e.disposeData(g.dataId), b; } -var fB = { kernelName: Cs, backendName: "wasm", setupFunc: bae, kernelFunc: Cae }; -var hB; -function wae(r16) { - hB = r16.wasm.cwrap(ii, null, ["number", "number", "number", "array", "array", "boolean"]); +var EL = { kernelName: is, backendName: "wasm", setupFunc: ese, kernelFunc: tse }; +var $L; +function rse(r15) { + $L = r15.wasm.cwrap(Ja, null, ["number", "number", "number", "array", "array", "boolean"]); } -function Sae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, i = t10.makeOutput(n.shape, "float32"), p = t10.dataIdMap.get(n.dataId), u; - return p.dtype !== "float32" && (u = Vr({ backend: t10, inputs: { x: n }, attrs: { dtype: "float32" } }), p = t10.dataIdMap.get(u.dataId)), hB(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && t10.disposeData(u.dataId), i; +function ose(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, i = t10.makeOutput(n.shape, "float32"), p = t10.dataIdMap.get(n.dataId), u; + return p.dtype !== "float32" && (u = Mr({ backend: t10, inputs: { x: n }, attrs: { dtype: "float32" } }), p = t10.dataIdMap.get(u.dataId)), $L(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && t10.disposeData(u.dataId), i; } -var gB = { kernelName: ii, backendName: "wasm", setupFunc: wae, kernelFunc: Sae }; -var xB; -function Iae(r16) { - xB = r16.wasm.cwrap(bs, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var RL = { kernelName: Ja, backendName: "wasm", setupFunc: rse, kernelFunc: ose }; +var DL; +function nse(r15) { + DL = r15.wasm.cwrap(as, null, ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function vae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [l, c, m, d] = n.shape, f = [l, p, u, d], h = e.makeOutput(f, "float32"); +function sse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { images: n } = t10, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, [c, l, m, d] = n.shape, f = [c, p, u, d], h = e.makeOutput(f, "float32"); if (y.sizeFromShape(n.shape) === 0) return h; let g = e.dataIdMap.get(n.dataId), x; - g.dtype !== "float32" && (x = Vr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), g = e.dataIdMap.get(x.dataId)); - let b = g.id, w = e.dataIdMap.get(h.dataId).id; - return xB(b, l, c, m, d, p, u, s ? 1 : 0, a ? 1 : 0, w), x != null && e.disposeData(x.dataId), h; -} -var yB = { kernelName: bs, backendName: "wasm", setupFunc: Iae, kernelFunc: vae }; -var bB; -function kae(r16) { - bB = r16.wasm.cwrap(ai, null, ["number", "number", "number", "array", "array", "boolean"]); -} -function Nae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, i = t10.makeOutput(n.shape, "float32"), p = t10.dataIdMap.get(n.dataId), u; - return p.dtype !== "float32" && (u = Vr({ backend: t10, inputs: { x: n }, attrs: { dtype: "float32" } }), p = t10.dataIdMap.get(u.dataId)), bB(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && t10.disposeData(u.dataId), i; -} -var CB = { kernelName: ai, backendName: "wasm", setupFunc: kae, kernelFunc: Nae }; -var wB; -function Tae(r16) { - wB = r16.wasm.cwrap(Ss, null, ["number", "array", "number", "array", "number", "number"]); -} -function _ae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dims: s } = o, a = y.parseAxisParam(s, n.shape); - if (n.shape.length === 0) - return Dp({ inputs: { x: n }, backend: t10 }); - let i = t10.makeOutput(n.shape, n.dtype), p = t10.dataIdMap.get(n.dataId).id, u = t10.dataIdMap.get(i.dataId).id, l = new Uint8Array(new Int32Array(a).buffer), c = new Uint8Array(new Int32Array(n.shape).buffer); - wB(p, l, a.length, c, n.shape.length, u); - let m = Wt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: t10 }); - return t10.disposeData(i.dataId), m; + g.dtype !== "float32" && (x = Mr({ backend: e, inputs: { x: n }, attrs: { dtype: "float32" } }), g = e.dataIdMap.get(x.dataId)); + let b = g.id, C = e.dataIdMap.get(h.dataId).id; + return DL(b, c, l, m, d, p, u, s ? 1 : 0, a ? 1 : 0, C), x != null && e.disposeData(x.dataId), h; } -var SB = { kernelName: Ss, backendName: "wasm", kernelFunc: _ae, setupFunc: Tae }; -var IB; -function Eae(r16) { - IB = r16.wasm.cwrap(Vs, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var AL = { kernelName: as, backendName: "wasm", setupFunc: nse, kernelFunc: sse }; +var FL; +function ase(r15) { + FL = r15.wasm.cwrap(Za, null, ["number", "number", "number", "array", "array", "boolean"]); } -function $ae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n } = e, { radians: s, fillValue: a, center: i } = o, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(n.dataId).id, l = t10.dataIdMap.get(p.dataId).id, [c, m, d, f] = n.shape, [h, g] = C.getImageCenter(i, m, d), x = a === 0, b = 255, w = typeof a == "number" ? [a, a, a, x ? 0 : b] : [...a, b], S = new Uint8Array(new Int32Array(w).buffer); - return IB(u, c, m, d, f, s, h, g, S, w.length, l), p; +function ise(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, i = t10.makeOutput(n.shape, "float32"), p = t10.dataIdMap.get(n.dataId), u; + return p.dtype !== "float32" && (u = Mr({ backend: t10, inputs: { x: n }, attrs: { dtype: "float32" } }), p = t10.dataIdMap.get(u.dataId)), FL(t10.dataIdMap.get(n.dataId).id, t10.dataIdMap.get(s.dataId).id, t10.dataIdMap.get(i.dataId).id, new Uint8Array(new Int32Array(n.shape).buffer), new Uint8Array(new Int32Array(s.shape).buffer), a), u != null && t10.disposeData(u.dataId), i; } -var vB = { kernelName: Vs, backendName: "wasm", kernelFunc: $ae, setupFunc: Eae }; -var kB = he(Is); -var NB = he(Do); -var TB; -function Rae(r16) { - TB = r16.wasm.cwrap(vs, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var PL = { kernelName: Za, backendName: "wasm", setupFunc: ase, kernelFunc: ise }; +var OL; +function use(r15) { + OL = r15.wasm.cwrap(ps, null, ["number", "array", "number", "array", "number", "number"]); +} +function pse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = y.parseAxisParam(s, n.shape); + if (n.shape.length === 0) + return Np({ inputs: { x: n }, backend: t10 }); + let i = t10.makeOutput(n.shape, n.dtype), p = t10.dataIdMap.get(n.dataId).id, u = t10.dataIdMap.get(i.dataId).id, c = new Uint8Array(new Int32Array(a).buffer), l = new Uint8Array(new Int32Array(n.shape).buffer); + OL(p, c, a.length, l, n.shape.length, u); + let m = zt({ inputs: { x: i }, attrs: { shape: n.shape }, backend: t10 }); + return t10.disposeData(i.dataId), m; } -function Dae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { indices: n, updates: s } = t10, { shape: a } = o, i = e.makeOutput(a, s.dtype); +var ML = { kernelName: ps, backendName: "wasm", kernelFunc: pse, setupFunc: use }; +var LL; +function cse(r15) { + LL = r15.wasm.cwrap(Ds, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +} +function lse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n } = e, { radians: s, fillValue: a, center: i } = o, p = t10.makeOutput(n.shape, n.dtype), u = t10.dataIdMap.get(n.dataId).id, c = t10.dataIdMap.get(p.dataId).id, [l, m, d, f] = n.shape, [h, g] = w.getImageCenter(i, m, d), x = a === 0, b = 255, C = typeof a == "number" ? [a, a, a, x ? 0 : b] : [...a, b], S = new Uint8Array(new Int32Array(C).buffer); + return LL(u, l, m, d, f, s, h, g, S, C.length, c), p; +} +var BL = { kernelName: Ds, backendName: "wasm", kernelFunc: lse, setupFunc: cse }; +var zL = he(cs); +var VL = he(ls); +var WL; +function mse(r15) { + WL = r15.wasm.cwrap(ms, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number"]); +} +function dse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { indices: n, updates: s } = t10, { shape: a } = o, i = e.makeOutput(a, s.dtype); if (y.sizeFromShape(a) === 0) return i; - let { sliceRank: p, numUpdates: u, sliceSize: l, strides: c, outputSize: m } = Cu.calculateShapes(s, n, a), f = e.dataIdMap.get(n.dataId).id, g = e.dataIdMap.get(s.dataId).id, x = new Uint8Array(new Int32Array(c).buffer), b = e.dataIdMap.get(i.dataId).id; - return TB(f, g, we[s.dtype], p, u, l, x, m, b), i; + let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = du.calculateShapes(s, n, a), f = e.dataIdMap.get(n.dataId).id, g = e.dataIdMap.get(s.dataId).id, x = new Uint8Array(new Int32Array(l).buffer), b = e.dataIdMap.get(i.dataId).id; + return WL(f, g, we[s.dtype], p, u, c, x, m, b), i; } -var _B = { kernelName: vs, backendName: "wasm", setupFunc: Rae, kernelFunc: Dae }; -var EB; -function Aae(r16) { - EB = r16.wasm.cwrap(Ns, null, ["number", "number", "number", "number", "number", "number", "bool", "number"]); +var UL = { kernelName: ms, backendName: "wasm", setupFunc: mse, kernelFunc: dse }; +var GL; +function fse(r15) { + GL = r15.wasm.cwrap(fs, null, ["number", "number", "number", "number", "number", "number", "bool", "number"]); } -function Fae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sortedSequence: n, values: s } = e, { side: a } = o; +function hse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o; if (n.dtype !== s.dtype) throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`); let i = t10.makeOutput(s.shape, "int32"); function p(u) { return t10.dataIdMap.get(u.dataId).id; } - return EB(p(n), p(s), n.shape[0], n.shape[1], s.shape[1], we[n.dtype], a === "left", p(i)), i; + return GL(p(n), p(s), n.shape[0], n.shape[1], s.shape[1], we[n.dtype], a === "left", p(i)), i; } -var $B = { kernelName: Ns, backendName: "wasm", setupFunc: Aae, kernelFunc: Fae }; -var RB; -function Pae(r16) { - RB = r16.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); -} -function Oae(r16) { - let { inputs: e, backend: t10 } = r16, { condition: o, t: n, e: s } = e, a = t10.dataIdMap.get(o.dataId).id, i = t10.dataIdMap.get(n.dataId).id, p = t10.dataIdMap.get(s.dataId).id, u = t10.makeOutput(n.shape, n.dtype), l = t10.dataIdMap.get(u.dataId).id, c = o.shape.length, m = n.shape.length, d = c === 0 || c > 1 || m === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); - return RB(a, i, p, d, l), u; -} -var DB = { kernelName: wa, backendName: "wasm", kernelFunc: Oae, setupFunc: Pae }; -var AB = he(Ts); -var FB; -function Mae(r16) { - FB = r16.wasm.cwrap(Ao, null, ["number", "number"]); -} -function Lae(r16) { - let { backend: e, inputs: { x: t10 } } = r16, o = e.dataIdMap.get(t10.dataId).id, n = e.makeOutput(t10.shape, t10.dtype), s = e.dataIdMap.get(n.dataId).id; - return y.sizeFromShape(n.shape) === 0 || FB(o, s), n; -} -var PB = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: Mae, kernelFunc: Lae }; -var OB = he(Rs); -var MB = he(Es); -var LB = he($s); -var BB = he(Ds); -function Bae(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, paddings: a } = o, i = y.sizeFromShape(s), p = [[0, 0]]; +var HL = { kernelName: fs, backendName: "wasm", setupFunc: fse, kernelFunc: hse }; +var KL; +function gse(r15) { + KL = r15.wasm.cwrap("SelectV2", null, ["number", "number", "number", "number", "number"]); +} +function xse(r15) { + let { inputs: e, backend: t10 } = r15, { condition: o, t: n, e: s } = e, a = t10.dataIdMap.get(o.dataId).id, i = t10.dataIdMap.get(n.dataId).id, p = t10.dataIdMap.get(s.dataId).id, u = t10.makeOutput(n.shape, n.dtype), c = t10.dataIdMap.get(u.dataId).id, l = o.shape.length, m = n.shape.length, d = l === 0 || l > 1 || m === 1 ? 1 : y.sizeFromShape(n.shape.slice(1)); + return KL(a, i, p, d, c), u; +} +var qL = { kernelName: fa, backendName: "wasm", kernelFunc: xse, setupFunc: gse }; +var jL = he(hs); +var XL; +function yse(r15) { + XL = r15.wasm.cwrap(bs, null, ["number", "number"]); +} +function bse(r15) { + let { backend: e, inputs: { x: t10 } } = r15, o = e.dataIdMap.get(t10.dataId).id, n = e.makeOutput(t10.shape, t10.dtype), s = e.dataIdMap.get(n.dataId).id; + return y.sizeFromShape(n.shape) === 0 || XL(o, s), n; +} +var YL = { kernelName: "Sigmoid", backendName: "wasm", setupFunc: yse, kernelFunc: bse }; +var QL = he(ys); +var ZL = he(gs); +var JL = he(xs); +var eB = he(Cs); +function Cse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, paddings: a } = o, i = y.sizeFromShape(s), p = [[0, 0]]; p.push(...a); - for (let T = 1 + s.length; T < n.shape.length; ++T) + for (let _ = 1 + s.length; _ < n.shape.length; ++_) p.push([0, 0]); - let u = Yg.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), l = C.getReshaped(u.shape, s, i, false), c = C.getPermuted(l.length, s.length, false), m = C.getReshapedPermuted(u.shape, s, i, false), h = Wt({ inputs: { x: u }, backend: t10, attrs: { shape: l } }), b = Vo({ inputs: { x: h }, backend: t10, attrs: { perm: c } }), k = Wt({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); + let u = Bg.kernelFunc({ inputs: { x: n }, backend: t10, attrs: { paddings: p, constantValue: 0 } }), c = w.getReshaped(u.shape, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u.shape, s, i, false), h = zt({ inputs: { x: u }, backend: t10, attrs: { shape: c } }), b = ho({ inputs: { x: h }, backend: t10, attrs: { perm: l } }), k = zt({ inputs: { x: b }, backend: t10, attrs: { shape: m } }); return t10.disposeData(u.dataId), t10.disposeData(h.dataId), t10.disposeData(b.dataId), k; } -var zB = { kernelName: Sa, backendName: "wasm", kernelFunc: Bae }; -var VB; -function zae(r16) { - VB = r16.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var tB = { kernelName: ga, backendName: "wasm", kernelFunc: Cse }; +var rB; +function wse(r15) { + rB = r15.wasm.cwrap("SparseFillEmptyRows", "number", ["number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Vae(r16) { - let { backend: e, inputs: t10 } = r16, { indices: o, values: n, denseShape: s, defaultValue: a } = t10, i = o.shape[0], p = o.shape[1], u = e.readSync(s.dataId)[0], l = [i + u, p], c = e.dataIdMap.get(o.dataId).id, m = e.dataIdMap.get(n.dataId).id, d = e.dataIdMap.get(a.dataId).id, f = e.makeOutput(l, o.dtype), h = e.dataIdMap.get(f.dataId).id, g = e.makeOutput(l.slice(0, 1), n.dtype), x = e.dataIdMap.get(g.dataId).id, b = e.makeOutput([u], "bool"), w = e.dataIdMap.get(b.dataId).id, S = e.makeOutput([i], o.dtype), k = e.dataIdMap.get(S.dataId).id, T = e.makeOutput([4], "int32"), E = e.dataIdMap.get(T.dataId).id, R = VB(c, m, we[n.dtype], i, u, p, d, h, x, w, k, E), D = e.readSync(T.dataId), F; +function Sse(r15) { + let { backend: e, inputs: t10 } = r15, { indices: o, values: n, denseShape: s, defaultValue: a } = t10, i = o.shape[0], p = o.shape[1], u = e.readSync(s.dataId)[0], c = [i + u, p], l = e.dataIdMap.get(o.dataId).id, m = e.dataIdMap.get(n.dataId).id, d = e.dataIdMap.get(a.dataId).id, f = e.makeOutput(c, o.dtype), h = e.dataIdMap.get(f.dataId).id, g = e.makeOutput(c.slice(0, 1), n.dtype), x = e.dataIdMap.get(g.dataId).id, b = e.makeOutput([u], "bool"), C = e.dataIdMap.get(b.dataId).id, S = e.makeOutput([i], o.dtype), k = e.dataIdMap.get(S.dataId).id, _ = e.makeOutput([4], "int32"), $ = e.dataIdMap.get(_.dataId).id, R = rB(l, m, we[n.dtype], i, u, p, d, h, x, C, k, $), D = e.readSync(_.dataId), P; switch (D[0]) { case 1: { - F = C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(D[1]); + P = w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(D[1]); break; } case 2: { - F = C.getSparseFillEmptyRowsNegativeIndexErrorMessage(D[1], D[2]); + P = w.getSparseFillEmptyRowsNegativeIndexErrorMessage(D[1], D[2]); break; } case 3: - F = C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(D[1], D[2], D[3]); + P = w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(D[1], D[2], D[3]); break; default: - F = ""; + P = ""; } - if (e.disposeData(T.dataId), F) - throw e.disposeData(f.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(S.dataId), new Error(F); + if (e.disposeData(_.dataId), P) + throw e.disposeData(f.dataId), e.disposeData(g.dataId), e.disposeData(b.dataId), e.disposeData(S.dataId), new Error(P); let O = f, M = g; - return R !== l[0] && (O = an({ inputs: { x: f }, attrs: { begin: 0, size: [R, p] }, backend: e }), M = an({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: e }), e.disposeData(f.dataId), e.disposeData(g.dataId)), [O, M, b, S]; + return R !== c[0] && (O = Po({ inputs: { x: f }, attrs: { begin: 0, size: [R, p] }, backend: e }), M = Po({ inputs: { x: g }, attrs: { begin: 0, size: R }, backend: e }), e.disposeData(f.dataId), e.disposeData(g.dataId)), [O, M, b, S]; } -var WB = { kernelName: eu, backendName: "wasm", setupFunc: zae, kernelFunc: Vae }; -var UB; -function Wae(r16) { - UB = r16.wasm.cwrap(ui, null, ["number", "number", "number", "number", "number", "number", "number"]); +var oB = { kernelName: Ki, backendName: "wasm", setupFunc: wse, kernelFunc: Sse }; +var nB; +function Ise(r15) { + nB = r15.wasm.cwrap(ei, null, ["number", "number", "number", "number", "number", "number", "number"]); } -function Uae(r16) { - let { backend: e, inputs: t10 } = r16, { inputIndices: o, inputShape: n, newShape: s } = t10; +function vse(r15) { + let { backend: e, inputs: t10 } = r15, { inputIndices: o, inputShape: n, newShape: s } = t10; if (o.shape.length !== 2) throw new Error(`Input indices should be a matrix but received shape ${o.shape}`); @@ -26197,66 +26197,66 @@ function Uae(r16) { ${n.shape}`); if (s.shape.length !== 1) throw new Error(`Target shape should be a vector but received shape ${s.shape}`); - let a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = o.shape[0], l = y.sizeFromShape(s.shape), c = e.makeOutput([u, l], o.dtype), m = e.dataIdMap.get(c.dataId).id, d = e.makeOutput([l], s.dtype), f = e.dataIdMap.get(d.dataId).id, h = e.makeOutput([3], "int32"), g = e.dataIdMap.get(h.dataId).id; - UB(a, i, p, u, m, f, g); + let a = e.dataIdMap.get(o.dataId).id, i = e.dataIdMap.get(n.dataId).id, p = e.dataIdMap.get(s.dataId).id, u = o.shape[0], c = y.sizeFromShape(s.shape), l = e.makeOutput([u, c], o.dtype), m = e.dataIdMap.get(l.dataId).id, d = e.makeOutput([c], s.dtype), f = e.dataIdMap.get(d.dataId).id, h = e.makeOutput([3], "int32"), g = e.dataIdMap.get(h.dataId).id; + nB(a, i, p, u, m, f, g); let x = e.readSync(h.dataId), b; switch (x[0]) { case 0: { - b = C.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1], x[2]); + b = w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1], x[2]); break; } case 1: { - b = C.getSparseReshapeNegativeOutputDimErrorMessage(x[1], x[2]); + b = w.getSparseReshapeNegativeOutputDimErrorMessage(x[1], x[2]); break; } case 2: - b = C.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); + b = w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage(); break; case 3: { - let w = Array.from(e.readSync(n.dataId)), S = Array.from(e.readSync(d.dataId)); - b = C.getSparseReshapeInputOutputMultipleErrorMessage(w, S); + let C = Array.from(e.readSync(n.dataId)), S = Array.from(e.readSync(d.dataId)); + b = w.getSparseReshapeInputOutputMultipleErrorMessage(C, S); break; } case 4: { - let w = Array.from(e.readSync(n.dataId)), S = Array.from(e.readSync(d.dataId)); - b = C.getSparseReshapeInputOutputMismatchErrorMessage(w, S); + let C = Array.from(e.readSync(n.dataId)), S = Array.from(e.readSync(d.dataId)); + b = w.getSparseReshapeInputOutputMismatchErrorMessage(C, S); break; } default: b = ""; } if (e.disposeData(h.dataId), b) - throw e.disposeData(c.dataId), e.disposeData(d.dataId), new Error(b); - return [c, d]; + throw e.disposeData(l.dataId), e.disposeData(d.dataId), new Error(b); + return [l, d]; } -var GB = { kernelName: ui, backendName: "wasm", setupFunc: Wae, kernelFunc: Uae }; -var HB; -function Qg(r16) { - HB = r16.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); +var sB = { kernelName: ei, backendName: "wasm", setupFunc: Ise, kernelFunc: vse }; +var aB; +function zg(r15) { + aB = r15.wasm.cwrap("SparseSegmentReduction", null, ["number", "number", "number", "number", "number", "number", "number", "number", "number"]); } -function Zg(r16, e) { - let { backend: t10, inputs: o } = r16, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = t10.readSync(a.dataId, i - 1, i)[0], l = i > 0 ? p + 1 : 0; - if (l < 0) - throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let c = n.shape.slice(); - c[0] = l; - let m = t10.dataIdMap.get(n.dataId).id, d = t10.dataIdMap.get(s.dataId).id, f = t10.dataIdMap.get(a.dataId).id, h = t10.makeOutput(c, n.dtype), g = t10.dataIdMap.get(h.dataId).id, x = t10.makeOutput([4], "int32"), b = t10.dataIdMap.get(x.dataId).id; - HB(m, we[n.dtype], n.shape[0], d, f, g, b, e, 0); - let w = t10.readSync(x.dataId), S; - switch (w[0]) { +function Vg(r15, e) { + let { backend: t10, inputs: o } = r15, { data: n, indices: s, segmentIds: a } = o, i = s.shape[0], p = t10.readSync(a.dataId, i - 1, i)[0], c = i > 0 ? p + 1 : 0; + if (c < 0) + throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); + let l = n.shape.slice(); + l[0] = c; + let m = t10.dataIdMap.get(n.dataId).id, d = t10.dataIdMap.get(s.dataId).id, f = t10.dataIdMap.get(a.dataId).id, h = t10.makeOutput(l, n.dtype), g = t10.dataIdMap.get(h.dataId).id, x = t10.makeOutput([4], "int32"), b = t10.dataIdMap.get(x.dataId).id; + aB(m, we[n.dtype], n.shape[0], d, f, g, b, e, 0); + let C = t10.readSync(x.dataId), S; + switch (C[0]) { case 0: { - S = C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); + S = w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage(); break; } case 1: { - S = C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); + S = w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage(); break; } case 2: - S = C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(w[1], w[2]); + S = w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1], C[2]); break; case 3: - S = C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w[1], w[2], w[3]); + S = w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1], C[2], C[3]); break; default: S = ""; @@ -26265,228 +26265,228 @@ function Zg(r16, e) { throw t10.disposeData(h.dataId), new Error(S); return h; } -function Gae(r16) { - return Zg(r16, true); +function kse(r15) { + return Vg(r15, true); } -var KB = { kernelName: va, backendName: "wasm", setupFunc: Qg, kernelFunc: Gae }; -function Hae(r16) { - return Zg(r16, false); +var iB = { kernelName: ya, backendName: "wasm", setupFunc: zg, kernelFunc: kse }; +function Nse(r15) { + return Vg(r15, false); } -var qB = { kernelName: ka, backendName: "wasm", setupFunc: Qg, kernelFunc: Hae }; -var jB; -function Kae(r16) { - jB = r16.wasm.cwrap(Ps, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); +var uB = { kernelName: ba, backendName: "wasm", setupFunc: zg, kernelFunc: Nse }; +var pB; +function Tse(r15) { + pB = r15.wasm.cwrap(vs, null, ["number", "number", "number", "number", "number", "number", "number", "number", "array", "number", "number"]); } -function qae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { sparseIndices: n, sparseValues: s, defaultValue: a } = t10, { outputShape: i } = o, p = e.makeOutput(i, a.dtype); +function _se(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = t10, { outputShape: i } = o, p = e.makeOutput(i, a.dtype); if (y.sizeFromShape(i) === 0) return p; - let { sliceRank: u, numUpdates: l, sliceSize: c, strides: m, outputSize: d } = C.calculateShapes(s, n, i), f = e.dataIdMap.get(n.dataId).id, h = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, x = new Uint8Array(new Int32Array(m).buffer), b = e.dataIdMap.get(p.dataId).id; - return jB(f, h, s.shape.length, g, we[a.dtype], u, l, c, x, d, b), p; -} -var XB = { kernelName: Ps, backendName: "wasm", setupFunc: Kae, kernelFunc: qae }; -function jae(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n } = e, { numOrSizeSplits: s, axis: a } = t10, i = y.parseAxisParam(a, n.shape)[0], p = C.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), l = n.shape.slice(); - return p.map((c) => { - let m = [...l]; - m[i] = c; - let d = an({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); - return u[i] += c, d; + let { sliceRank: u, numUpdates: c, sliceSize: l, strides: m, outputSize: d } = w.calculateShapes(s, n, i), f = e.dataIdMap.get(n.dataId).id, h = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, x = new Uint8Array(new Int32Array(m).buffer), b = e.dataIdMap.get(p.dataId).id; + return pB(f, h, s.shape.length, g, we[a.dtype], u, c, l, x, d, b), p; +} +var cB = { kernelName: vs, backendName: "wasm", setupFunc: Tse, kernelFunc: _se }; +function Ese(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n } = e, { numOrSizeSplits: s, axis: a } = t10, i = y.parseAxisParam(a, n.shape)[0], p = w.prepareSplitSize(n, s, i), u = new Array(n.shape.length).fill(0), c = n.shape.slice(); + return p.map((l) => { + let m = [...c]; + m[i] = l; + let d = Po({ inputs: { x: n }, attrs: { begin: u, size: m }, backend: o }); + return u[i] += l, d; }); } -var YB = { kernelName: Ia, backendName: "wasm", kernelFunc: jae }; -var QB = he(Fo); -var ZB = he(tu); -var Xae = true; -var JB = He(Po, Xae); -var ez; -function Yae(r16) { - ez = r16.wasm.cwrap(Ko, null, ["number", "number", "number", "number"]); -} -function Qae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { alpha: n } = o, { x: s } = t10, a = e.dataIdMap.get(s.dataId).id, i = e.makeOutput(s.shape, s.dtype), p = e.dataIdMap.get(i.dataId).id; - return ez(a, n, we[s.dtype], p), i; -} -var tz = { kernelName: Ko, backendName: "wasm", setupFunc: Yae, kernelFunc: Qae }; -var rz; -function Zae(r16) { - rz = r16.wasm.cwrap(Os, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); -} -function Jae(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { x: n } = t10, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: l, newAxisMask: c, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: w, strides: S } = nt.sliceInfo(n.shape, s, a, i, p, u, l, c, m), k; +var lB = { kernelName: xa, backendName: "wasm", kernelFunc: Ese }; +var mB = he(ws); +var dB = he(qi); +var $se = true; +var fB = Ge(ks, $se); +var hB; +function Rse(r15) { + hB = r15.wasm.cwrap(wo, null, ["number", "number", "number", "number"]); +} +function Dse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { alpha: n } = o, { x: s } = t10, a = e.dataIdMap.get(s.dataId).id, i = e.makeOutput(s.shape, s.dtype), p = e.dataIdMap.get(i.dataId).id; + return hB(a, n, we[s.dtype], p), i; +} +var gB = { kernelName: wo, backendName: "wasm", setupFunc: Rse, kernelFunc: Dse }; +var xB; +function Ase(r15) { + xB = r15.wasm.cwrap(Ns, null, ["number", "array", "number", "array", "array", "array", "array", "array", "number", "number"]); +} +function Fse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { x: n } = t10, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = Wt({ inputs: { x: n }, backend: e, attrs: { shape: f } }); + k = zt({ inputs: { x: n }, backend: e, attrs: { shape: f } }); else if (g || x) { y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let T = nt.computeOutShape(b, w, S), E = an({ inputs: { x: n }, backend: e, attrs: { begin: b, size: T } }); - k = Wt({ inputs: { x: E }, backend: e, attrs: { shape: f } }), e.disposeData(E.dataId); + let _ = pt.computeOutShape(b, C, S), $ = Po({ inputs: { x: n }, backend: e, attrs: { begin: b, size: _ } }); + k = zt({ inputs: { x: $ }, backend: e, attrs: { shape: f } }), e.disposeData($.dataId); } else { - let T = e.makeOutput(d, "float32"), E = e.dataIdMap.get(n.dataId).id, R = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), D = new Uint8Array(new Int32Array(b).buffer), F = new Uint8Array(new Int32Array(w).buffer), O = new Uint8Array(new Int32Array(S).buffer), M = new Uint8Array(new Int32Array(d).buffer), L = new Uint8Array(new Int32Array(y.computeStrides(d)).buffer), B = e.dataIdMap.get(T.dataId).id; - rz(E, R, n.shape.length, D, F, O, M, L, d.length, B), k = Wt({ inputs: { x: T }, backend: e, attrs: { shape: f } }), e.disposeData(T.dataId); + let _ = e.makeOutput(d, "float32"), $ = e.dataIdMap.get(n.dataId).id, R = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), D = new Uint8Array(new Int32Array(b).buffer), P = new Uint8Array(new Int32Array(C).buffer), O = new Uint8Array(new Int32Array(S).buffer), M = new Uint8Array(new Int32Array(d).buffer), L = new Uint8Array(new Int32Array(y.computeStrides(d)).buffer), B = e.dataIdMap.get(_.dataId).id; + xB($, R, n.shape.length, D, P, O, M, L, d.length, B), k = zt({ inputs: { x: _ }, backend: e, attrs: { shape: f } }), e.disposeData(_.dataId); } return k; } -var oz = { kernelName: Os, backendName: "wasm", setupFunc: Zae, kernelFunc: Jae }; -function eie(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { data: n, dataSplits: s } = t10, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: l, preserveShortSequences: c } = o, m = e.readSync(n.dataId), d = e.readSync(s.dataId), [f, h] = gp(m, d, a, i, p, u, l, c), g = e.makeOutput([f.length], "string"), x = e.dataIdMap.get(g.dataId); +var yB = { kernelName: Ns, backendName: "wasm", setupFunc: Ase, kernelFunc: Fse }; +function Pse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { data: n, dataSplits: s } = t10, { separator: a, nGramWidths: i, leftPad: p, rightPad: u, padWidth: c, preserveShortSequences: l } = o, m = e.readSync(n.dataId), d = e.readSync(s.dataId), [f, h] = cp(m, d, a, i, p, u, c, l), g = e.makeOutput([f.length], "string"), x = e.dataIdMap.get(g.dataId); x.stringBytes = f; let b = e.makeOutput(s.shape, "int32"); return e.typedArrayFromHeap(b).set(h), [g, b]; } -var nz = { kernelName: Na, backendName: "wasm", kernelFunc: eie }; -function tie(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { input: n, delimiter: s } = t10, { skipEmpty: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, l, c] = xp(i, p[0], a), m = l.length, d = e.makeOutput([m, 2], "int32"); +var bB = { kernelName: Ca, backendName: "wasm", kernelFunc: Pse }; +function Ose(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { input: n, delimiter: s } = t10, { skipEmpty: a } = o, i = e.readSync(n.dataId), p = e.readSync(s.dataId), [u, c, l] = lp(i, p[0], a), m = c.length, d = e.makeOutput([m, 2], "int32"); e.typedArrayFromHeap(d).set(u); let h = e.makeOutput([m], "string"), g = e.dataIdMap.get(h.dataId); - g.stringBytes = l; + g.stringBytes = c; let x = e.makeOutput([2], "int32"); - return e.typedArrayFromHeap(x).set(c), [d, h, x]; + return e.typedArrayFromHeap(x).set(l), [d, h, x]; } -var sz = { kernelName: ru, backendName: "wasm", kernelFunc: tie }; -function rie(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { input: n } = t10, { numBuckets: s } = o, a = e.readSync(n.dataId), i = yp(a, s), p = e.makeOutput(n.shape, "int32"); +var CB = { kernelName: ji, backendName: "wasm", kernelFunc: Ose }; +function Mse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { input: n } = t10, { numBuckets: s } = o, a = e.readSync(n.dataId), i = mp(a, s), p = e.makeOutput(n.shape, "int32"); return e.typedArrayFromHeap(p).set(i), p; } -var az = { kernelName: ou, backendName: "wasm", kernelFunc: rie }; -var oie = true; -var iz = He(Oo, oie); -var uz; -function nie(r16) { - uz = r16.wasm.cwrap(As, null, ["number", "number", "number", "number"]); +var wB = { kernelName: Xi, backendName: "wasm", kernelFunc: Mse }; +var Lse = true; +var SB = Ge(Ts, Lse); +var IB; +function Bse(r15) { + IB = r15.wasm.cwrap(Ss, null, ["number", "number", "number", "number"]); } -function sie(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: l, axes: c, originalAxes: m, inputWasTransposed: d } = $r(a, n, e), f = c; +function zse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { axis: n, keepDims: s } = o, { x: a } = t10, i = e.dataIdMap.get(a.dataId).id, p = i, u = a, { transposed: c, axes: l, originalAxes: m, inputWasTransposed: d } = Tr(a, n, e), f = l; if (d) { - let w = e.dataIdMap.get(l.dataId).id; - w !== i && (u = l, p = w, f = C.getInnerMostAxes(f.length, u.shape.length)); + let C = e.dataIdMap.get(c.dataId).id; + C !== i && (u = c, p = C, f = w.getInnerMostAxes(f.length, u.shape.length)); } - C.assertAxesAreInnerMostDims("sum", f, u.shape.length); - let [h, g] = C.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); + w.assertAxesAreInnerMostDims("sum", f, u.shape.length); + let [h, g] = w.computeOutAndReduceShapes(u.shape, f), x = y.sizeFromShape(g), b = e.makeOutput(h, u.dtype); if (y.sizeFromShape(u.shape) !== 0) { - let w = e.dataIdMap.get(b.dataId).id; - uz(p, x, we[b.dtype], w); + let C = e.dataIdMap.get(b.dataId).id; + IB(p, x, we[b.dtype], C); } - if (d && e.disposeData(l.dataId), s) { - let w = C.expandShapeToKeepDim(b.shape, m); - b.shape = w; + if (d && e.disposeData(c.dataId), s) { + let C = w.expandShapeToKeepDim(b.shape, m); + b.shape = C; } return b; } -var pz = { kernelName: As, backendName: "wasm", setupFunc: nie, kernelFunc: sie }; -var lz = he(Ms); -var cz = he(Ls); -var mz; -function aie(r16) { - mz = r16.wasm.cwrap(ks, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number", "number"]); +var vB = { kernelName: Ss, backendName: "wasm", setupFunc: Bse, kernelFunc: zse }; +var kB = he(_s); +var NB = he(Es); +var TB; +function Vse(r15) { + TB = r15.wasm.cwrap(ds, null, ["number", "number", "number", "number", "number", "number", "array", "number", "number", "number"]); } -function iie(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { tensor: n, indices: s, updates: a } = t10, {} = o, i = e.makeOutput(n.shape, n.dtype); +function Wse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = t10, {} = o, i = e.makeOutput(n.shape, n.dtype); if (y.sizeFromShape(n.shape) === 0) return i; - let { sliceRank: p, numUpdates: u, sliceSize: l, strides: c, outputSize: m } = Cu.calculateShapes(a, s, n.shape), f = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, b = e.dataIdMap.get(n.dataId).id, w = new Uint8Array(new Int32Array(c).buffer), S = e.dataIdMap.get(i.dataId).id; - return mz(f, g, we[a.dtype], p, u, l, w, m, S, b), i; + let { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = du.calculateShapes(a, s, n.shape), f = e.dataIdMap.get(s.dataId).id, g = e.dataIdMap.get(a.dataId).id, b = e.dataIdMap.get(n.dataId).id, C = new Uint8Array(new Int32Array(l).buffer), S = e.dataIdMap.get(i.dataId).id; + return TB(f, g, we[a.dtype], p, u, c, C, m, S, b), i; } -var dz = { kernelName: ks, backendName: "wasm", setupFunc: aie, kernelFunc: iie }; -var fz; -function uie(r16) { - fz = r16.wasm.cwrap(Mo, null, ["number", "array", "number", "array", "number", "number"]); +var _B = { kernelName: ds, backendName: "wasm", setupFunc: Vse, kernelFunc: Wse }; +var EB; +function Use(r15) { + EB = r15.wasm.cwrap(po, null, ["number", "array", "number", "array", "number", "number"]); } -function pie(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, s = t10.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); +function Gse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, s = t10.dataIdMap.get(n.dataId).id, { reps: a } = o, i = new Array(n.shape.length); for (let m = 0; m < i.length; m++) i[m] = n.shape[m] * a[m]; - let p = new Uint8Array(new Int32Array(n.shape).buffer), u = new Uint8Array(new Int32Array(i).buffer), l = t10.makeOutput(i, n.dtype), c = t10.dataIdMap.get(l.dataId).id; - return fz(s, p, n.shape.length, u, i.length, we[l.dtype], c), l; + let p = new Uint8Array(new Int32Array(n.shape).buffer), u = new Uint8Array(new Int32Array(i).buffer), c = t10.makeOutput(i, n.dtype), l = t10.dataIdMap.get(c.dataId).id; + return EB(s, p, n.shape.length, u, i.length, we[c.dtype], l), c; } -var hz = { kernelName: Mo, backendName: "wasm", setupFunc: uie, kernelFunc: pie }; -var gz; -function lie(r16) { - gz = r16.wasm.cwrap(Bs, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); +var $B = { kernelName: po, backendName: "wasm", setupFunc: Use, kernelFunc: Gse }; +var RB; +function Hse(r15) { + RB = r15.wasm.cwrap($s, null, ["number", "array", "number", "number", "number", "bool", "number", "number"]); } -var cie = ({ inputs: r16, backend: e, attrs: t10 }) => { - let { x: o } = r16, { k: n, sorted: s } = t10, a = e.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); +var Kse = ({ inputs: r15, backend: e, attrs: t10 }) => { + let { x: o } = r15, { k: n, sorted: s } = t10, a = e.dataIdMap.get(o.dataId).id, i = new Uint8Array(new Int32Array(o.shape).buffer), p = o.shape.slice(); p[p.length - 1] = n; - let u = e.makeOutput(p, o.dtype), l = e.dataIdMap.get(u.dataId).id, c = e.makeOutput(p, "int32"), m = e.dataIdMap.get(c.dataId).id; - return gz(a, i, o.shape.length, we[o.dtype], n, s, l, m), [u, c]; + let u = e.makeOutput(p, o.dtype), c = e.dataIdMap.get(u.dataId).id, l = e.makeOutput(p, "int32"), m = e.dataIdMap.get(l.dataId).id; + return RB(a, i, o.shape.length, we[o.dtype], n, s, c, m), [u, l]; }; -var xz = { kernelName: Bs, backendName: "wasm", setupFunc: lie, kernelFunc: cie }; -var yz; -function mie(r16) { - yz = r16.wasm.cwrap(zs, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); +var DB = { kernelName: $s, backendName: "wasm", setupFunc: Hse, kernelFunc: Kse }; +var AB; +function qse(r15) { + AB = r15.wasm.cwrap(Rs, null, ["number", "number", "bool", "number", "number", "number", "number", "number", "number", "array", "number", "array", "number", "number", "number", "number", "number"]); } -function die(r16) { - let { backend: e, inputs: t10, attrs: o } = r16, { image: n, transforms: s } = t10, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [l, c, m, d] = n.shape, [f, h] = u != null ? u : [c, m], g = [l, f, h, d], x = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(y.computeStrides(g)).buffer), w = e.makeOutput(g, n.dtype), S = e.dataIdMap.get(w.dataId).id, T = e.dataIdMap.get(n.dataId).id, R = e.dataIdMap.get(s.dataId).id, D = a === "nearest" ? 1 : 2, F; +function jse(r15) { + let { backend: e, inputs: t10, attrs: o } = r15, { image: n, transforms: s } = t10, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer), b = new Uint8Array(new Int32Array(y.computeStrides(g)).buffer), C = e.makeOutput(g, n.dtype), S = e.dataIdMap.get(C.dataId).id, _ = e.dataIdMap.get(n.dataId).id, R = e.dataIdMap.get(s.dataId).id, D = a === "nearest" ? 1 : 2, P; switch (i) { case "constant": - F = 1; + P = 1; break; case "reflect": - F = 2; + P = 2; break; case "wrap": - F = 3; + P = 3; break; case "nearest": - F = 4; + P = 4; break; default: - F = 1; + P = 1; break; } - return yz(T, R, s.shape[0] > 1, l, f, h, d, m, c, x, n.shape.length - 1, b, g.length - 1, D, F, p, S), w; + return AB(_, R, s.shape[0] > 1, c, f, h, d, m, l, x, n.shape.length - 1, b, g.length - 1, D, P, p, S), C; } -var bz = { kernelName: zs, backendName: "wasm", setupFunc: mie, kernelFunc: die }; -function fie(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { axis: n } = t10, { x: s } = e, { outputValues: a, outputShape: i, indices: p } = bp(o.readSync(s.dataId), n, s.shape, s.dtype); +var FB = { kernelName: Rs, backendName: "wasm", setupFunc: qse, kernelFunc: jse }; +function Xse(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { axis: n } = t10, { x: s } = e, { outputValues: a, outputShape: i, indices: p } = dp(o.readSync(s.dataId), n, s.shape, s.dtype); return [o.makeOutput(i, s.dtype, void 0, a), o.makeOutput([p.length], "int32", void 0, p)]; } -var Cz = { kernelName: nu, backendName: "wasm", kernelFunc: fie }; -function hie(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { value: n } = e, { axis: s } = o; +var PB = { kernelName: Yi, backendName: "wasm", kernelFunc: Xse }; +function Yse(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); let a = n.shape[s], i = n.shape.length, p = new Array(i - 1), u = 0; for (let d = 0; d < i; d++) d !== s && (p[u++] = n.shape[d]); - let l = new Array(a), c = new Array(i).fill(0), m = n.shape.slice(); + let c = new Array(a), l = new Array(i).fill(0), m = n.shape.slice(); m[s] = 1; - for (let d = 0; d < l.length; d++) - c[s] = d, l[d] = an({ inputs: { x: n }, attrs: { begin: c, size: m }, backend: t10 }); - return l.map(({ dataId: d, dtype: f }) => ({ dataId: d, dtype: f, shape: p })); + for (let d = 0; d < c.length; d++) + l[s] = d, c[d] = Po({ inputs: { x: n }, attrs: { begin: l, size: m }, backend: t10 }); + return c.map(({ dataId: d, dtype: f }) => ({ dataId: d, dtype: f, shape: p })); } -var wz = { kernelName: Ta, backendName: "wasm", kernelFunc: hie }; -function gie(r16) { - let { inputs: { x: e }, backend: t10 } = r16, o = t10.makeOutput(e.shape, e.dtype); +var OB = { kernelName: wa, backendName: "wasm", kernelFunc: Yse }; +function Qse(r15) { + let { inputs: { x: e }, backend: t10 } = r15, o = t10.makeOutput(e.shape, e.dtype); return t10.typedArrayFromHeap(o).fill(0), o; } -var Sz = { kernelName: _a, backendName: "wasm", kernelFunc: gie }; -var xie = [iO, uO, pO, lO, cO, dO, yO, CO, wO, SO, IO, vO, kO, NO, TO, EO, PO, RO, AO, LO, zO, WO, UO, GO, HO, KO, jO, XO, QO, JO, tM, oM, sM, aM, iM, pM, cM, dM, hM, xM, bM, wM, IM, kM, TM, _M, $M, RM, DM, AM, FM, PM, OM, LM, BM, zM, WM, GM, KM, jM, YM, QM, ZM, fO, JM, eL, tL, oL, nL, sL, iL, pL, uL, lL, cL, mL, dL, hL, xL, bL, CL, SL, vL, NL, _L, $L, DL, FL, PL, ML, VL, WL, UL, GL, KL, jL, YL, QL, JL, eB, tB, Yg, oB, sB, iB, uB, pB, lB, cB, mB, OO, fB, gB, yB, CB, SB, vB, kB, NB, _B, $B, DB, AB, PB, OB, MB, LB, BO, BL, BB, zB, WB, GB, KB, qB, XB, YB, QB, ZB, JB, tz, oz, nz, sz, az, iz, pz, lz, cz, dz, hz, xz, bz, gO, Cz, wz, Sz]; -for (let r16 of xie) - li(r16); -var J0 = A(); -J0.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { +var MB = { kernelName: Sa, backendName: "wasm", kernelFunc: Qse }; +var Zse = [SP, IP, vP, kP, NP, _P, AP, PP, OP, MP, LP, BP, zP, VP, WP, GP, YP, KP, jP, JP, tO, oO, nO, sO, aO, iO, pO, cO, mO, fO, gO, yO, CO, wO, SO, vO, NO, _O, $O, DO, FO, OO, LO, zO, WO, UO, HO, KO, qO, jO, XO, YO, QO, JO, eM, tM, oM, sM, iM, pM, lM, mM, dM, EP, fM, hM, gM, yM, bM, CM, SM, vM, IM, kM, NM, TM, _M, $M, DM, FM, PM, MM, BM, VM, UM, HM, qM, XM, YM, ZM, rL, oL, nL, sL, iL, pL, lL, mL, fL, hL, gL, Bg, yL, CL, SL, IL, vL, kL, NL, TL, QP, EL, RL, AL, PL, ML, BL, zL, VL, UL, HL, qL, jL, YL, QL, ZL, JL, eO, eL, eB, tB, oB, sB, iB, uB, cB, lB, mB, dB, fB, gB, yB, bB, CB, wB, SB, vB, kB, NB, _B, $B, DB, FB, RP, PB, OB, MB]; +for (let r15 of Zse) + ti(r15); +var zv = A(); +zv.registerFlag("WASM_HAS_SIMD_SUPPORT", async () => { try { return 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])); - } catch (r16) { + } catch (r15) { return false; } }); -J0.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { - if (J0.get("IS_NODE")) +zv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT", async () => { + if (zv.get("IS_NODE")) return false; 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 (r16) { + } catch (r15) { return false; } }); -var iv = Kp(Nz()); -var Dz = Kp(_z()); -var uv = Kp(Ez()); -var $z = iv.default || iv; -var yie = uv.default || uv; -var gm = class extends mo { +var jv = zp(VB()); +var qB = zp(UB()); +var Xv = zp(GB()); +var HB = jv.default || jv; +var Jse = Xv.default || Xv; +var pm = class extends ao { constructor(e) { - super(), this.wasm = e, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(Fz), av = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new mn(this, cr()); + super(), this.wasm = e, this.dataIdNextNumber = 1, this.wasm.tfjs.initWithThreadsCount(XB), qv = this.wasm.tfjs.getThreadsCount(), this.dataIdMap = new Bo(this, ur()); } write(e, t10, o) { let n = { id: this.dataIdNextNumber++ }; @@ -26502,8 +26502,8 @@ var gm = class extends mo { move(e, t10, o, n, s) { let a = this.dataIdNextNumber++; if (n === "string") { - let l = t10; - this.dataIdMap.set(e, { id: a, stringBytes: l, shape: o, dtype: n, memoryOffset: null, refCount: s }); + let c = t10; + this.dataIdMap.set(e, { id: a, stringBytes: c, shape: o, dtype: n, memoryOffset: null, refCount: s }); return; } let i = y.sizeFromShape(o), p = i * y.bytesPerElement(n), u = this.wasm._malloc(p) >>> 0; @@ -26518,7 +26518,7 @@ var gm = class extends mo { return (t10 == null || t10 === 0) && (o == null || o >= i.length) ? i : i.slice(t10, o); t10 = t10 || 0, o = o || y.sizeFromShape(a); let p = y.bytesPerElement(s), u = this.wasm.HEAPU8.slice(n + t10 * p, n + o * p); - return Cie(u.buffer, s); + return tae(u.buffer, s); } disposeData(e, t10 = false) { if (this.dataIdMap.has(e)) { @@ -26574,113 +26574,113 @@ var gm = class extends mo { } } }; -function bie(r16) { - return (e, t10) => (y.fetch(r16, { credentials: "same-origin" }).then((o) => { - o.ok || e.env.a(`failed to load wasm binary file at '${r16}'`), o.arrayBuffer().then((n) => { +function eae(r15) { + return (e, t10) => (y.fetch(r15, { credentials: "same-origin" }).then((o) => { + o.ok || e.env.a(`failed to load wasm binary file at '${r15}'`), o.arrayBuffer().then((n) => { WebAssembly.instantiate(n, e).then((s) => { t10(s.instance, s.module); }); }); }), {}); } -function Rz(r16, e, t10) { - if (tx != null) - return tx; +function KB(r15, e, t10) { + if (Gg != null) + return Gg; let o = "tfjs-backend-wasm.wasm"; - return r16 && e ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r16 && (o = "tfjs-backend-wasm-simd.wasm"), fm != null && fm[o] != null ? fm[o] : t10 + o; + return r15 && e ? o = "tfjs-backend-wasm-threaded-simd.wasm" : r15 && (o = "tfjs-backend-wasm-simd.wasm"), im != null && im[o] != null ? im[o] : t10 + o; } -async function Az() { - let [r16, e] = await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"), A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); +async function jB() { + let [r15, e] = await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"), A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]); return new Promise((t10, o) => { let n = {}; n.locateFile = (i, p) => { if (i.endsWith(".worker.js")) { - let u = Dz.wasmWorkerContents.replace(/\n/g, "\\n"), l = new Blob([u], { type: "application/javascript" }); - return URL.createObjectURL(l); + let u = qB.wasmWorkerContents.replace(/\n/g, "\\n"), c = new Blob([u], { type: "application/javascript" }); + return URL.createObjectURL(c); } - return i.endsWith(".wasm") ? Rz(r16, e, dm != null ? dm : p) : p + i; - }, pv && (n.instantiateWasm = bie(Rz(r16, e, dm != null ? dm : ""))); + return i.endsWith(".wasm") ? KB(r15, e, am != null ? am : p) : p + i; + }, Yv && (n.instantiateWasm = eae(KB(r15, e, am != null ? am : ""))); let s = false; n.onAbort = () => { - if (s || hm) + if (s || um) return; - hm = true, o({ 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" }); + um = true, o({ 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" }); }; let a; - e && r16 && tx == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + $z.toString()], { type: "text/javascript" }), a = $z(n)) : a = yie(n), a.then((i) => { - s = true, hm = false; + e && r15 && Gg == null ? (n.mainScriptUrlOrBlob = new Blob(["var WasmBackendModuleThreadedSimd = " + HB.toString()], { type: "text/javascript" }), a = HB(n)) : a = Jse(n), a.then((i) => { + s = true, um = false; let p = null; i.tfjs = { init: i.cwrap("init", null, []), initWithThreadsCount: i.cwrap("init_with_threads_count", null, ["number"]), getThreadsCount: i.cwrap("get_threads_count", "number", []), registerTensor: i.cwrap("register_tensor", null, ["number", "number", "number"]), disposeData: i.cwrap("dispose_data", p, ["number"]), dispose: i.cwrap("dispose", p, []) }, t10({ wasm: i }); }).catch(o); }); } -function Cie(r16, e) { +function tae(r15, e) { switch (e) { case "float32": - return new Float32Array(r16); + return new Float32Array(r15); case "int32": - return new Int32Array(r16); + return new Int32Array(r15); case "bool": - return new Uint8Array(r16); + return new Uint8Array(r15); default: throw new Error(`Unknown dtype ${e}`); } } -var wie = ["tfjs-backend-wasm.wasm", "tfjs-backend-wasm-simd.wasm", "tfjs-backend-wasm-threaded-simd.wasm"]; -var tx = null; -var dm = null; -var fm = {}; -var hm = false; -var pv = false; -function Sie(r16, e = false) { - if (zw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), hm) +var rae = ["tfjs-backend-wasm.wasm", "tfjs-backend-wasm-simd.wasm", "tfjs-backend-wasm-threaded-simd.wasm"]; +var Gg = null; +var am = null; +var im = {}; +var um = false; +var Yv = false; +function oae(r15, e = false) { + if (Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."), um) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`"); - tx = r16, pv = e; + Gg = r15, Yv = e; } -function Iie(r16, e = false) { - if (hm) +function nae(r15, e = false) { + if (um) throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`"); - if (typeof r16 == "string") - dm = r16; + if (typeof r15 == "string") + am = r15; else { - fm = r16; - let t10 = wie.filter((o) => fm[o] == null); + im = r15; + let t10 = rae.filter((o) => im[o] == null); if (t10.length > 0) throw new Error(`There were no entries found for the following binaries: ${t10.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.`); } - pv = e; + Yv = e; } -var Fz = -1; -var av = -1; -function vie(r16) { - Fz = r16; +var XB = -1; +var qv = -1; +function sae(r15) { + XB = r15; } -function kie() { - if (av === -1) +function aae() { + if (qv === -1) throw new Error("WASM backend not initialized."); - return av; -} -var Nie = "4.17.0"; -var Tie = 2; -pu("wasm", async () => { - let { wasm: r16 } = await Az(); - return new gm(r16); -}, Tie); -var Wo = A(); -Wo.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); -Wo.registerFlag("WEBGPU_CPU_FORWARD", () => true); -Wo.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); -Wo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => true); -Wo.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); -Wo.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); -Wo.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); -Wo.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); -Wo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); -Wo.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL", () => -1); -Wo.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER", () => false); -Wo.registerFlag("WEBGPU_PRINT_SHADER", () => ""); -Wo.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY", () => false); -var rx = class { + return qv; +} +var iae = "4.17.0"; +var uae = 2; +tu("wasm", async () => { + let { wasm: r15 } = await jB(); + return new pm(r15); +}, uae); +var go = A(); +go.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE", () => 15); +go.registerFlag("WEBGPU_CPU_FORWARD", () => true); +go.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE", () => -1); +go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE", () => true); +go.registerFlag("WEBGPU_USE_LOW_POWER_GPU", () => false); +go.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD", () => 1e3); +go.registerFlag("WEBGPU_USE_PROFILE_TOOL", () => false); +go.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE", () => true); +go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG", () => false); +go.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL", () => -1); +go.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER", () => false); +go.registerFlag("WEBGPU_PRINT_SHADER", () => ""); +go.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY", () => false); +var Hg = class { constructor(e) { e && (this.vendor = e.vendor, this.architecture = e.architecture, this.intelGPUGeneration = this.getIntelGPUGeneration()); } @@ -26697,18 +26697,18 @@ var rx = class { return this.vendor === "intel"; } }; -var ox = class { +var Kg = class { constructor(e) { this.device = e, this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } acquireBuffer(e, t10, o = false, n = true) { - let s, a = Pz(e, t10); + let s, a = YB(e, t10); return n ? (this.freeBuffers.has(a) || this.freeBuffers.set(a, []), this.freeBuffers.get(a).length > 0 ? (s = this.freeBuffers.get(a).pop(), this.numFreeBuffers--) : (s = this.device.createBuffer({ size: e, usage: t10, mappedAtCreation: o }), this.numBytesAllocated += e)) : (s = this.device.createBuffer({ size: e, usage: t10, mappedAtCreation: o }), this.numBytesAllocated += e), this.usedBuffers.has(a) || this.usedBuffers.set(a, []), this.usedBuffers.get(a).push(s), this.numUsedBuffers++, this.numBytesUsed += e, s; } releaseBuffer(e, t10 = true) { if (this.freeBuffers.size === 0) return; - let o = e.size, n = e.usage, s = Pz(o, n), a = this.usedBuffers.get(s), i = a.indexOf(e); + let o = e.size, n = e.usage, s = YB(o, n), a = this.usedBuffers.get(s), i = a.indexOf(e); if (i < 0) throw new Error("Cannot find the buffer in buffer manager"); a[i] = a[a.length - 1], a.pop(), this.numUsedBuffers--, this.numBytesUsed -= o, t10 ? (this.freeBuffers.get(s).push(e), this.numFreeBuffers++) : (e.destroy(), this.numBytesAllocated -= o); @@ -26731,15 +26731,15 @@ var ox = class { }), this.freeBuffers = /* @__PURE__ */ new Map(), this.usedBuffers = /* @__PURE__ */ new Map(), this.numUsedBuffers = 0, this.numFreeBuffers = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function Pz(r16, e) { - return `${r16}_${e}`; +function YB(r15, e) { + return `${r15}_${e}`; } -var nx = class { +var qg = class { constructor(e) { this.device = e, this.numUsedTextures = 0, this.numFreeTextures = 0, this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numBytesUsed = 0, this.numBytesAllocated = 0; } acquireTexture(e, t10, o, n) { - let s = Mz(o), a = e * t10 * s, i = Oz(e, t10, o, n); + let s = ZB(o), a = e * t10 * s, i = QB(e, t10, o, n); if (this.freeTextures.has(i) || this.freeTextures.set(i, []), this.usedTextures.has(i) || this.usedTextures.set(i, []), this.numBytesUsed += a, this.numUsedTextures++, this.freeTextures.get(i).length > 0) { this.numFreeTextures--; let u = this.freeTextures.get(i).shift(); @@ -26752,14 +26752,14 @@ var nx = class { releaseTexture(e) { if (this.freeTextures.size === 0) return; - let t10 = e.width, o = e.height, n = e.format, s = e.usage, a = Oz(t10, o, n, s); + let t10 = e.width, o = e.height, n = e.format, s = e.usage, a = QB(t10, o, n, s); this.freeTextures.has(a) || this.freeTextures.set(a, []), this.freeTextures.get(a).push(e), this.numFreeTextures++, this.numUsedTextures--; let i = this.usedTextures.get(a), p = i.indexOf(e); if (p < 0) throw new Error("Cannot release a texture that was never provided by this texture manager"); i.splice(p, 1); - let u = Mz(n), l = t10 * o * u; - this.numBytesUsed -= l; + let u = ZB(n), c = t10 * o * u; + this.numBytesUsed -= c; } getNumUsedTextures() { return this.numUsedTextures; @@ -26779,51 +26779,51 @@ var nx = class { }), this.freeTextures = /* @__PURE__ */ new Map(), this.usedTextures = /* @__PURE__ */ new Map(), this.numUsedTextures = 0, this.numFreeTextures = 0, this.numBytesUsed = 0, this.numBytesAllocated = 0; } }; -function Oz(r16, e, t10, o) { - return `${r16}_${e}_${t10}_${o}`; +function QB(r15, e, t10, o) { + return `${r15}_${e}_${t10}_${o}`; } -function Mz(r16) { - if (r16 === "rgba8unorm") +function ZB(r15) { + if (r15 === "rgba8unorm") return 16; - throw new Error(`${r16} is not supported!`); + throw new Error(`${r15} is not supported!`); } -function Lz(r16, e) { - if (Math.max(...r16) > 5) +function JB(r15, e) { + if (Math.max(...r15) > 5) throw new Error("Cannot symbolically compute strides for rank > 6 tensor."); - let t10 = r16.length, o = "xyzwuv", n = r16.map((a) => `${e}.${o[a]}`), s = new Array(t10 - 1); + let t10 = r15.length, o = "xyzwuv", n = r15.map((a) => `${e}.${o[a]}`), s = new Array(t10 - 1); s[t10 - 2] = n[t10 - 1]; for (let a = t10 - 3; a >= 0; --a) s[a] = `(${s[a + 1]} * ${n[a + 1]})`; return s; } -var oo = (r16, e, t10) => t10 === "int32" ? `atomicAdd(${r16}, bitcast(${e}));` : ` +var Qr = (r15, e, t10) => t10 === "int32" ? `atomicAdd(${r15}, bitcast(${e}));` : ` { var oldValue = 0; loop { let newValueF32 = bitcast(oldValue) + (${e}); let newValue = bitcast(newValueF32); - let res = atomicCompareExchangeWeak(${r16}, oldValue, newValue); + let res = atomicCompareExchangeWeak(${r15}, oldValue, newValue); if res.exchanged { break; } oldValue = res.old_value; } }`; -var $i; -(function(r16) { - r16[r16.FROM_PIXELS = 0] = "FROM_PIXELS", r16[r16.DRAW = 1] = "DRAW"; -})($i || ($i = {})); -var Wz = (r16, e, t10, o, n) => { - let s = { dtype: o.dtype, shape: o.shape }, a = Eie(t10, s, e), i = r16.createShaderModule({ code: a, label: e.constructor.name }), p = A().get("WEBGPU_PRINT_SHADER"); +var wi; +(function(r15) { + r15[r15.FROM_PIXELS = 0] = "FROM_PIXELS", r15[r15.DRAW = 1] = "DRAW"; +})(wi || (wi = {})); +var oz = (r15, e, t10, o, n) => { + let s = { dtype: o.dtype, shape: o.shape }, a = cae(t10, s, e), i = r15.createShaderModule({ code: a, label: e.constructor.name }), p = A().get("WEBGPU_PRINT_SHADER"); if (p !== "") { p = p.toLowerCase(); let u = p.split(","); - (p === "all" || u.some((l) => e.shaderKey.toLowerCase().includes(l))) && (console.group(e.shaderKey), console.debug(a), console.groupEnd()); + (p === "all" || u.some((c) => e.shaderKey.toLowerCase().includes(c))) && (console.group(e.shaderKey), console.debug(a), console.groupEnd()); } - return n ? r16.createComputePipelineAsync({ compute: { module: i, entryPoint: "_start" }, label: e.constructor.name, layout: "auto" }) : r16.createComputePipeline({ compute: { module: i, entryPoint: "_start" }, label: e.constructor.name, layout: "auto" }); + return n ? r15.createComputePipelineAsync({ compute: { module: i, entryPoint: "_start" }, label: e.constructor.name, layout: "auto" }) : r15.createComputePipeline({ compute: { module: i, entryPoint: "_start" }, label: e.constructor.name, layout: "auto" }); }; -var Ae = (r16, e = "f32") => { - switch (r16) { +var Ae = (r15, e = "f32") => { + switch (r15) { case 1: return `${e}`; case 2: @@ -26833,42 +26833,42 @@ var Ae = (r16, e = "f32") => { case 4: return `vec4<${e}>`; default: - throw new Error(`${r16}-component ${e} is not supported.`); + throw new Error(`${r15}-component ${e} is not supported.`); } }; -function ft(r16) { - if (r16 <= 1) +function ft(r15) { + if (r15 <= 1) return "i32"; - if (r16 === 2) + if (r15 === 2) return "vec2"; - if (r16 === 3) + if (r15 === 3) return "vec3"; - if (r16 === 4) + if (r15 === 4) return "vec4"; - if (r16 === 5) + if (r15 === 5) return "vec5"; - if (r16 === 6) + if (r15 === 6) return "vec6"; - throw Error(`GPU for rank ${r16} is not yet supported`); + throw Error(`GPU for rank ${r15} is not yet supported`); } -function un(r16) { - if (r16 === 0) +function Oo(r15) { + if (r15 === 0) return "x"; - if (r16 === 1) + if (r15 === 1) return "y"; - if (r16 === 2) + if (r15 === 2) return "z"; - if (r16 === 3) + if (r15 === 3) return "w"; - if (r16 === 4) + if (r15 === 4) return "u"; - if (r16 === 5) + if (r15 === 5) return "v"; - throw Error(`Index ${r16} is not yet supported`); + throw Error(`Index ${r15} is not yet supported`); } -function G(...r16) { +function G(...r15) { let e; - switch (r16.length) { + switch (r15.length) { case 0: e = ` fn main() @@ -26876,7 +26876,7 @@ function G(...r16) { break; case 1: e = ` - fn main(${r16[0]} : i32) + fn main(${r15[0]} : i32) `; break; default: @@ -26884,10 +26884,10 @@ function G(...r16) { } return e; } -function Bz(r16, e) { +function ez(r15, e) { let t10; return t10 = ` - ${_ie(e)} + ${pae(e)} fn _start(@builtin(local_invocation_id) LocalId : vec3, @builtin(global_invocation_id) GlobalId : vec3, @builtin(local_invocation_index) LocalIndex: u32, @@ -26898,16 +26898,16 @@ function Bz(r16, e) { globalId = GlobalId; numWorkgroups = NumWorkgroups; workgroupId = WorkgroupId; - ${r16 ? "main(getGlobalIndex());" : "main();"}; + ${r15 ? "main(getGlobalIndex());" : "main();"}; } `, t10; } -function _ie(r16) { +function pae(r15) { return ` - @compute @workgroup_size(${r16.workgroupSize[0]}, ${r16.workgroupSize[1]}, ${r16.workgroupSize[2]}) + @compute @workgroup_size(${r15.workgroupSize[0]}, ${r15.workgroupSize[1]}, ${r15.workgroupSize[2]}) `; } -function Eie(r16, e, t10) { +function cae(r15, e, t10) { let o = [], n = t10.workgroupSize[0] * t10.workgroupSize[1] * t10.workgroupSize[2]; if (t10.outputComponent = t10.outputComponent ? t10.outputComponent : 1, o.push(` @@ -26919,13 +26919,13 @@ function Eie(r16, e, t10) { // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${Gz(t10) ? " return i32(globalId.x);" : ` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${sz(t10) ? " return i32(globalId.x);" : ` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u + localIndex); `} } `), t10.pixelsOpType != null) { - let f = t10.pixelsOpType === $i.FROM_PIXELS ? `@group(0) @binding(0) var result: array<${Eu(e.dtype, t10.outputComponent)}>;` : `@group(0) @binding(1) var inBuf : array<${Eu(r16[0].dtype, t10.outputComponent)}>;`, h = e.shape.length === 3 ? "vec2" : "i32"; + let f = t10.pixelsOpType === wi.FROM_PIXELS ? `@group(0) @binding(0) var result: array<${Su(e.dtype, t10.outputComponent)}>;` : `@group(0) @binding(1) var inBuf : array<${Su(r15[0].dtype, t10.outputComponent)}>;`, h = e.shape.length === 3 ? "vec2" : "i32"; o.push(` struct Uniform { outShapeStrides : ${h}, @@ -26937,53 +26937,53 @@ function Eie(r16, e, t10) { ${f} @group(0) @binding(2) var uniforms: Uniform; `); - let g = Vz(t10); - return [zz, o.join(` -`), xm(e.shape), t10.getUserCode(), Bz(g, t10)].join(` + let g = rz(t10); + return [tz, o.join(` +`), cm(e.shape), t10.getUserCode(), ez(g, t10)].join(` `); } let s, a, i = "struct Uniforms { NAN : f32, INFINITY : f32, "; t10.variableNames.forEach((f, h) => { - let g = ft(r16[h].shape.length); - i += `${f.charAt(0).toLowerCase() + f.slice(1)}Shape : ${g}, `, s = r16[h].shape.length - 1, a = ft(s), i += `${f.charAt(0).toLowerCase() + f.slice(1)}ShapeStrides: ${a}, `; + let g = ft(r15[h].shape.length); + i += `${f.charAt(0).toLowerCase() + f.slice(1)}Shape : ${g}, `, s = r15[h].shape.length - 1, a = ft(s), i += `${f.charAt(0).toLowerCase() + f.slice(1)}ShapeStrides: ${a}, `; }); let p = ft(e.shape.length); i += `outShape : ${p}, `, s = e.shape.length - 1, a = ft(s), i += ` - outShapeStrides: ${a}, `, t10.size && (i += "size : i32, "), t10.uniforms && (i += t10.uniforms), i += "};", i = Mie(i), o.push(i), t10.atomic ? o.push(` + outShapeStrides: ${a}, `, t10.size && (i += "size : i32, "), t10.uniforms && (i += t10.uniforms), i += "};", i = yae(i), o.push(i), t10.atomic ? o.push(` @group(0) @binding(0) var result: array>; `) : o.push(` - @group(0) @binding(0) var result: array<${Eu(e.dtype, t10.outputComponent)}>; + @group(0) @binding(0) var result: array<${Su(e.dtype, t10.outputComponent)}>; `), t10.variableNames.forEach((f, h) => { o.push(` - @group(0) @binding(${1 + h}) var ${f}: array<${t10.variableComponents ? Eu(r16[h].dtype, t10.variableComponents[h]) : Eu(r16[h].dtype, t10.outputComponent)}>; + @group(0) @binding(${1 + h}) var ${f}: array<${t10.variableComponents ? Su(r15[h].dtype, t10.variableComponents[h]) : Su(r15[h].dtype, t10.outputComponent)}>; `); }), i !== "" && o.push(` @group(0) @binding(${1 + t10.variableNames.length}) var uniforms: Uniforms; `); - let u = Fie(e.shape, t10.dispatchLayout), l = [zz, o.join(` -`) + $ie, xm(e.shape), u, Pie(e.shape.length)]; - t10.atomic || l.push(Oie(e.shape, e.dtype, t10.outputComponent)), t10.variableNames.forEach((f, h) => { - l.push(`${xm(r16[h].shape, f)}`); + let u = hae(e.shape, t10.dispatchLayout), c = [tz, o.join(` +`) + lae, cm(e.shape), u, gae(e.shape.length)]; + t10.atomic || c.push(xae(e.shape, e.dtype, t10.outputComponent)), t10.variableNames.forEach((f, h) => { + c.push(`${cm(r15[h].shape, f)}`); }); - let c = r16.map((f, h) => Aie(f, e.shape, t10.variableComponents ? t10.variableComponents[h] : t10.outputComponent, t10.dispatchLayout.x.length === e.shape.length)).join(` + let l = r15.map((f, h) => fae(f, e.shape, t10.variableComponents ? t10.variableComponents[h] : t10.outputComponent, t10.dispatchLayout.x.length === e.shape.length)).join(` `); - l.push(c), l.push(t10.getUserCode()); - let m = Vz(t10); - return l.push(Bz(m, t10)), l.join(` + c.push(l), c.push(t10.getUserCode()); + let m = rz(t10); + return c.push(ez(m, t10)), c.join(` `); } -function Uz(r16, e, t10) { - let o = r16.shaderKey; - if (r16.pixelsOpType != null) +function nz(r15, e, t10) { + let o = r15.shaderKey; + if (r15.pixelsOpType != null) return o; let n = [], s = []; - e.forEach((l) => { - n.push(l.shape), s.push(l.dtype); + e.forEach((c) => { + n.push(c.shape), s.push(c.dtype); }), n.push(t10.shape), s.push(t10.dtype); - let a = e.map((l) => C.getBroadcastDims(l.shape, t10.shape)), i = e.map((l) => y.arraysEqual(l.shape, t10.shape)).join("_"), p = a.map((l) => l.join("_")).join(";"), u = Gz(r16) ? "flatDispatch" : ""; - return o += "_" + (r16.workgroupSize ? r16.workgroupSize.join(",") : "") + n.map((l) => l.length).join(",") + s.join(",") + r16.variableNames.join(",") + p + i + u, o; + let a = e.map((c) => w.getBroadcastDims(c.shape, t10.shape)), i = e.map((c) => y.arraysEqual(c.shape, t10.shape)).join("_"), p = a.map((c) => c.join("_")).join(";"), u = sz(r15) ? "flatDispatch" : ""; + return o += "_" + (r15.workgroupSize ? r15.workgroupSize.join(",") : "") + n.map((c) => c.length).join(",") + s.join(",") + r15.variableNames.join(",") + p + i + u, o; } -var zz = ` +var tz = ` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -27034,16 +27034,16 @@ var zz = ` return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u); } `; -var $ie = ` +var lae = ` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } `; -function xm(r16, e = "") { - let t10 = r16.length, o = e !== "" ? `get${e.charAt(0).toUpperCase() + e.slice(1)}CoordsFromIndex` : "getCoordsFromIndex", n = e !== "" ? `${e.charAt(0).toLowerCase() + e.slice(1)}ShapeStrides` : "outShapeStrides"; +function cm(r15, e = "") { + let t10 = r15.length, o = e !== "" ? `get${e.charAt(0).toUpperCase() + e.slice(1)}CoordsFromIndex` : "getCoordsFromIndex", n = e !== "" ? `${e.charAt(0).toLowerCase() + e.slice(1)}ShapeStrides` : "outShapeStrides"; if (t10 <= 1) return `fn ${o}(index : i32) -> i32 { return index; }`; - let s = y.computeStrides(r16), a = ft(t10), i = []; + let s = y.computeStrides(r15), a = ft(t10), i = []; for (let u = 0; u < t10; u++) i.push(`d${u}`); if (s.length === 1) @@ -27052,9 +27052,9 @@ function xm(r16, e = "") { return vec2(d0, d1); }`; let p; - return p = "var index2 = index;" + s.map((u, l) => { - let c = `let ${i[l]} = index2 / uniforms.${n}.${un(l)}`, m = l === s.length - 1 ? `let ${i[l + 1]} = index2 - ${i[l]} * uniforms.${n}.${un(l)}` : `index2 = index2 - ${i[l]} * uniforms.${n}.${un(l)}`; - return `${c}; ${m};`; + return p = "var index2 = index;" + s.map((u, c) => { + let l = `let ${i[c]} = index2 / uniforms.${n}.${Oo(c)}`, m = c === s.length - 1 ? `let ${i[c + 1]} = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}` : `index2 = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`; + return `${l}; ${m};`; }).join(""), ` fn ${o}(index : i32) -> ${a} { ${p} @@ -27062,8 +27062,8 @@ function xm(r16, e = "") { } `; } -function Rie(r16, e) { - let t10 = r16.name, o = r16.shape.length, n = ft(o), s = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((l) => `${l} : i32`).join(", "); +function mae(r15, e) { + let t10 = r15.name, o = r15.shape.length, n = ft(o), s = "get" + t10.charAt(0).toUpperCase() + t10.slice(1), a = ["d0", "d1", "d2", "d3", "d4", "d5"].slice(0, o), i = a.map((c) => `${c} : i32`).join(", "); if (o < 1) return ` fn ${s}() -> ${Ae(e)} { @@ -27078,9 +27078,9 @@ function Rie(r16, e) { } `; } -function Die(r16, e, t10, o) { - let n = r16.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r16.shape.length, p = e.length, u = ft(p); - if (y.arraysEqual(r16.shape, e) && o) +function dae(r15, e, t10, o) { + let n = r15.name, s = n.charAt(0).toUpperCase() + n.slice(1), a = "get" + s + "ByOutput", i = r15.shape.length, p = e.length, u = ft(p); + if (y.arraysEqual(r15.shape, e) && o) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(t10)} { return ${Ae(t10)}(${n}[globalIndex]); @@ -27090,7 +27090,7 @@ function Die(r16, e, t10, o) { return ${Ae(t10)}(${n}[${p > 1 ? "getOutputIndexFromCoords(coords)" : "coords"}${t10 === 1 ? "" : ` / ${t10}`}]); } `; - let l = C.getBroadcastDims(r16.shape, e), c = p - i, m = ""; + let c = w.getBroadcastDims(r15.shape, e), l = p - i, m = ""; if (i === 0) return ` fn ${a}Index(globalIndex : i32) -> ${Ae(t10)}{ @@ -27101,13 +27101,13 @@ function Die(r16, e, t10, o) { return get${s}(); } `; - p < 2 && l.length >= 1 ? m = "coords = 0;" : m = l.map((g) => `coords.${un(g + c)} = 0;`).join(` + p < 2 && c.length >= 1 ? m = "coords = 0;" : m = c.map((g) => `coords.${Oo(g + l)} = 0;`).join(` `); let d = ""; if (p < 2 && i > 0) d = "coords"; else if (p > 1) { - let g = ft(i), x = r16.shape.map((b, w) => `coords.${un(w + c)}`).join(", "); + let g = ft(i), x = r15.shape.map((b, C) => `coords.${Oo(C + l)}`).join(", "); d = `${g}(${x})`; } else d = "coords"; @@ -27126,12 +27126,12 @@ function Die(r16, e, t10, o) { } `; } -function Aie(r16, e, t10, o) { - let n = Rie(r16, t10); - return r16.shape.length <= e.length && (n += Die(r16, e, t10, o)), n; +function fae(r15, e, t10, o) { + let n = mae(r15, t10); + return r15.shape.length <= e.length && (n += dae(r15, e, t10, o)), n; } -function Fie(r16, e) { - let { x: t10, y: o = [], z: n = [] } = e, s = r16.length, a = t10.length + o.length + n.length; +function hae(r15, e) { + let { x: t10, y: o = [], z: n = [] } = e, s = r15.length, a = t10.length + o.length + n.length; if (a !== s) return ""; if (t10.length === s) @@ -27147,7 +27147,7 @@ function Fie(r16, e) { if (d.length === 1) i += `let d${d[0]} = i32(globalId[${m}]);`; else { - let f = Lz(d, "uniforms.outShape"); + let f = JB(d, "uniforms.outShape"); i += `var index${m} = i32(globalId[${m}]);`; for (let h = 0; h < f.length; h++) i += `let d${d[h]} = index${m} / ${f[h]};`, h === f.length - 1 ? i += `let d${d[h + 1]} = index${m} - d${d[h]} * ${f[h]};` : i += `index${m} = index${m} - d${d[h]} * ${f[h]};`; @@ -27156,14 +27156,14 @@ function Fie(r16, e) { let u = []; for (let m = 0; m < a; m++) u.push(`d${m}`); - let l = ft(a), c = `fn getOutputCoords() -> ${l} { + let c = ft(a), l = `fn getOutputCoords() -> ${c} { ${i} `; - return u.length === 0 ? c += `return ${l}(0); }` : c += `return ${l}(${u.join(",")}); }`, c; + return u.length === 0 ? l += `return ${c}(0); }` : l += `return ${c}(${u.join(",")}); }`, l; } -function Pie(r16) { +function gae(r15) { let e = ""; - switch (r16) { + switch (r15) { case 0: case 1: e += ` @@ -27218,23 +27218,23 @@ function Pie(r16) { `; break; default: - y.assert(false, () => `Unsupported ${r16}D shape`); + y.assert(false, () => `Unsupported ${r15}D shape`); break; } return e; } -function Gz(r16) { - return r16.dispatch[1] === 1 && r16.dispatch[2] === 1; +function sz(r15) { + return r15.dispatch[1] === 1 && r15.dispatch[2] === 1; } -function Eu(r16, e = 1) { - if (r16 === "float32") +function Su(r15, e = 1) { + if (r15 === "float32") return Ae(e, "f32"); - if (r16 === "int32" || r16 === "bool") + if (r15 === "int32" || r15 === "bool") return Ae(e, "i32"); - throw new Error(`type ${r16} is not supported.`); + throw new Error(`type ${r15} is not supported.`); } -function Oie(r16, e, t10) { - let o = r16.length, n = Eu(e, t10), s = `fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t10)}) { +function xae(r15, e, t10) { + let o = r15.length, n = Su(e, t10), s = `fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t10)}) { result[flatIndex] = ${n}(value); } @@ -27257,87 +27257,87 @@ function Oie(r16, e, t10) { } return s; } -function Mie(r16) { +function yae(r15) { let e = /(\w+)\s*:\s*vec(5|6)/g; - r16 = r16.replace(e, (o) => "@align(16) " + o); + r15 = r15.replace(e, (o) => "@align(16) " + o); let t10 = /vec(5|6)\s*,\s*(\w+)/g; - return r16 = r16.replace(t10, (o, n, s) => `vec${n}, @align(16) ${s}`), r16; + return r15 = r15.replace(t10, (o, n, s) => `vec${n}, @align(16) ${s}`), r15; } -function Vz(r16) { - return !(r16.dispatchLayout.hasOwnProperty("y") && r16.dispatchLayout.y.length !== 0 || r16.dispatchLayout.hasOwnProperty("z") && r16.dispatchLayout.z.length !== 0); +function rz(r15) { + return !(r15.dispatchLayout.hasOwnProperty("y") && r15.dispatchLayout.y.length !== 0 || r15.dispatchLayout.hasOwnProperty("z") && r15.dispatchLayout.z.length !== 0); } -var cv = {}; -qe(cv, { GPUBytesPerElement: () => sx, MatMulProgramType: () => pn, assertNotComplex: () => wm, computeDispatch: () => H, computeWorkPerThreadForConv2d: () => bm, computeWorkgroupInfoForMatMul: () => lv, computeWorkgroupSizeForConv2d: () => ym, flatDispatchLayout: () => X, isWebGPUSupported: () => Cm, tilesFitEvenlyIntoShape: () => Bie }); -var Ap = (r16) => { +var Zv = {}; +qe(Zv, { GPUBytesPerElement: () => jg, MatMulProgramType: () => Mo, assertNotComplex: () => fm, computeDispatch: () => H, computeWorkPerThreadForConv2d: () => mm, computeWorkgroupInfoForMatMul: () => Qv, computeWorkgroupSizeForConv2d: () => lm, flatDispatchLayout: () => X, isWebGPUSupported: () => dm, tilesFitEvenlyIntoShape: () => Cae }); +var Tp = (r15) => { let e = 1; - for (let t10 = 0; t10 < r16.length; t10++) - e *= r16[t10]; + for (let t10 = 0; t10 < r15.length; t10++) + e *= r15[t10]; return e; }; -function Bie(r16, e) { - if (r16.length !== e.length) - throw new Error(`Cannot compute whether rank ${r16.length} tiles fit evenly into rank ${e.length} shape - ranks must match.`); - return e.every((t10, o) => t10 % r16[o] === 0); +function Cae(r15, e) { + if (r15.length !== e.length) + throw new Error(`Cannot compute whether rank ${r15.length} tiles fit evenly into rank ${e.length} shape - ranks must match.`); + return e.every((t10, o) => t10 % r15[o] === 0); } -function H(r16, e, t10 = [1, 1, 1], o = [1, 1, 1]) { - let [n, s, a] = [Math.ceil(Ap(r16.x.map((i) => e[i])) / (t10[0] * o[0])), r16.y ? Math.ceil(Ap(r16.y.map((i) => e[i])) / (t10[1] * o[1])) : 1, r16.z ? Math.ceil(Ap(r16.z.map((i) => e[i])) / (t10[2] * o[2])) : 1]; +function H(r15, e, t10 = [1, 1, 1], o = [1, 1, 1]) { + let [n, s, a] = [Math.ceil(Tp(r15.x.map((i) => e[i])) / (t10[0] * o[0])), r15.y ? Math.ceil(Tp(r15.y.map((i) => e[i])) / (t10[1] * o[1])) : 1, r15.z ? Math.ceil(Tp(r15.z.map((i) => e[i])) / (t10[2] * o[2])) : 1]; return [n, s, a]; } -function lv(r16, e, t10, o = false) { +function Qv(r15, e, t10, o = false) { let n = [8, 8, 1], s = [4, 4, 1]; - return o || (r16 <= 8 && (s[1] = 1), e <= 16 && t10 <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; + return o || (r15 <= 8 && (s[1] = 1), e <= 16 && t10 <= 16 && (n[0] = 4)), { workgroupSize: n, elementsPerThread: s }; } -function ym(r16, e, t10 = false) { +function lm(r15, e, t10 = false) { if (t10) return [8, 8, 1]; - let o = Ap(r16.x.map((s) => e[s])), n = Ap(r16.y.map((s) => e[s])); + let o = Tp(r15.x.map((s) => e[s])), n = Tp(r15.y.map((s) => e[s])); return o <= 4 ? [4, 16, 1] : n <= 4 ? [16, 4, 1] : [16, 16, 1]; } -function bm(r16, e, t10 = false) { +function mm(r15, e, t10 = false) { if (t10) return [4, 4, 1]; - let o = Ap(r16.x.map((s) => e[s])), n = Ap(r16.y.map((s) => e[s])); + let o = Tp(r15.x.map((s) => e[s])), n = Tp(r15.y.map((s) => e[s])); return o <= 4 ? [1, 2, 1] : n <= 4 ? [2, 1, 1] : [2, 2, 1]; } -function X(r16) { - return { x: r16.map((e, t10) => t10) }; +function X(r15) { + return { x: r15.map((e, t10) => t10) }; } -function sx(r16) { - if (r16 === "float32" || r16 === "int32" || r16 === "bool" || r16 === "string") +function jg(r15) { + if (r15 === "float32" || r15 === "int32" || r15 === "bool" || r15 === "string") return 4; - if (r16 === "complex64") + if (r15 === "complex64") return 8; - throw new Error(`Unknown dtype ${r16}`); + throw new Error(`Unknown dtype ${r15}`); } -function Cm() { - return !!(globalThis && globalThis.navigator && globalThis.navigator.gpu); +function dm() { + return !!(typeof globalThis != "undefined" && globalThis.navigator && globalThis.navigator.gpu); } -function wm(r16, e) { - Array.isArray(r16) || (r16 = [r16]), r16.forEach((t10) => { +function fm(r15, e) { + Array.isArray(r15) || (r15 = [r15]), r15.forEach((t10) => { t10 != null && y.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the WebGPU backend.`); }); } -var pn; -(function(r16) { - r16[r16.MatMulReduceProgram = 0] = "MatMulReduceProgram", r16[r16.MatMulSplitKProgram = 1] = "MatMulSplitKProgram", r16[r16.MatMulSmallOutputSizeProgram = 2] = "MatMulSmallOutputSizeProgram", r16[r16.MatMulPackedProgram = 3] = "MatMulPackedProgram", r16[r16.MatMulMax = 4] = "MatMulMax"; -})(pn || (pn = {})); -var zie = A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); -var Vie = (r16, e) => { - let t10 = r16.limits.maxComputeWorkgroupsPerDimension, o = e.dispatchLayout, n = e.dispatch; +var Mo; +(function(r15) { + r15[r15.MatMulReduceProgram = 0] = "MatMulReduceProgram", r15[r15.MatMulSplitKProgram = 1] = "MatMulSplitKProgram", r15[r15.MatMulSmallOutputSizeProgram = 2] = "MatMulSmallOutputSizeProgram", r15[r15.MatMulPackedProgram = 3] = "MatMulPackedProgram", r15[r15.MatMulMax = 4] = "MatMulMax"; +})(Mo || (Mo = {})); +var wae = A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"); +var Sae = (r15, e) => { + let t10 = r15.limits.maxComputeWorkgroupsPerDimension, o = e.dispatchLayout, n = e.dispatch; if (n.every((a) => a <= t10)) return n; y.assert(n[0] > t10 && o.y === void 0 && o.z === void 0, () => "Dispatch size exceeds WebGPU limits in Y or Z dimension."); let s = Math.ceil(Math.sqrt(n[0])); return s > t10 ? (s = Math.ceil(Math.cbrt(n[0])), y.assert(s <= t10, () => "Total dispatch size exceeds WebGPU maximum."), [s, s, s]) : [s, s, 1]; }; -var Jl = class r14 extends mo { +var jc = class r14 extends ao { nextDataId() { return r14.nextDataId++; } constructor(e, t10) { - if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchCountInPass = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.queryResolveBuffer = null, this.querySet = null, this.querySetCount = 2, this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, this.hasReadSyncWarned = false, this.hasTimestampQueryWarned = false, !Cm()) + if (super(), this.commandQueueOwnedIds = /* @__PURE__ */ new WeakSet(), this.dispatchCountInPass = 0, this.disposed = false, this.downloadWaitMs = 0, this.tensorDataPendingDisposal = [], this.queryResolveBuffer = null, this.querySet = null, this.querySetCount = 2, this.stagingPendingDisposal = [], this.uniformPendingDisposal = [], this.uploadWaitMs = 0, this.hasReadSyncWarned = false, this.hasTimestampQueryWarned = false, !dm()) throw new Error("WebGPU is not supported on this device"); - this.pipelineCache = {}, this.device = e, this.queue = e.queue, this.commandEncoder = null, this.computePassEncoder = null, this.adapterInfo = new rx(t10), this.supportTimestampQuery = this.device.features.has("timestamp-query"), this.thresholdToIncreaseWorkgroups = this.adapterInfo.intelGPUGeneration >= 12 ? 16 : 8, this.bufferManager = new ox(this.device), this.textureManager = new nx(this.device), this.tensorMap = new mn(this, cr()), A().getBool("WEBGPU_USE_PROFILE_TOOL") && (this.dummyCanvas = document.createElement("canvas"), this.dummyCanvas.width = 1, this.dummyCanvas.height = 1, this.dummyContext = this.dummyCanvas.getContext("webgpu"), this.dummyContext.configure({ device: e, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); + this.pipelineCache = {}, this.device = e, this.queue = e.queue, this.commandEncoder = null, this.computePassEncoder = null, this.adapterInfo = new Hg(t10), this.supportTimestampQuery = this.device.features.has("timestamp-query"), this.thresholdToIncreaseWorkgroups = this.adapterInfo.intelGPUGeneration >= 12 ? 16 : 8, this.bufferManager = new Kg(this.device), this.textureManager = new qg(this.device), this.tensorMap = new Bo(this, ur()), A().getBool("WEBGPU_USE_PROFILE_TOOL") && (this.dummyCanvas = document.createElement("canvas"), this.dummyCanvas.width = 1, this.dummyCanvas.height = 1, this.dummyContext = this.dummyCanvas.getContext("webgpu"), this.dummyContext.configure({ device: e, format: "bgra8unorm" }), document.body.appendChild(this.dummyCanvas)); } floatPrecision() { return 32; @@ -27424,22 +27424,22 @@ var Jl = class r14 extends mo { if (o != null || t10.dtype === "string") return o; if (t10.dtype === "complex64") { - let h = this.readSync(n.real.dataId), g = this.readSync(n.imag.dataId), x = y.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(h, g).buffer, "float32"); + let h = this.readSync(n.real.dataId), g = this.readSync(n.imag.dataId), x = y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h, g).buffer, "float32"); return this.convertAndCacheOnCPU(e, x), x; } this.hasReadSyncWarned || (this.hasReadSyncWarned = true, console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead.")); let s = ["opaque", "premultiplied"], a = t10.resource, i = a.size; y.assert(i % 4 === 0, () => "Because there is 4 bytes for one pixel, buffer size must be multiple of 4."); - let p = i / 4, u = new ArrayBuffer(i), l = 256, c = 256, m = s.map((h) => new OffscreenCanvas(l, c)), d = new OffscreenCanvas(l, c); + let p = i / 4, u = new ArrayBuffer(i), c = 256, l = 256, m = s.map((h) => new OffscreenCanvas(c, l)), d = new OffscreenCanvas(c, l); this.endComputePassEncoder(), m.map((h, g) => { let x = h.getContext("webgpu"); return x.configure({ device: this.device, format: "bgra8unorm", usage: GPUTextureUsage.COPY_DST, alphaMode: s[g] }), x.getCurrentTexture(); }).map((h, g) => { - let x = l * 4, b = (R, D, F) => { - this.ensureCommandEncoderReady(), this.commandEncoder.copyBufferToTexture({ buffer: a, bytesPerRow: x, offset: F }, { texture: h }, { width: R, height: D }), this.submitQueue(); + let x = c * 4, b = (R, D, P) => { + this.ensureCommandEncoderReady(), this.commandEncoder.copyBufferToTexture({ buffer: a, bytesPerRow: x, offset: P }, { texture: h }, { width: R, height: D }), this.submitQueue(); let O = d.getContext("2d", { willReadFrequently: true }); O.clearRect(0, 0, R, D), O.drawImage(m[g], 0, 0); - let M = O.getImageData(0, 0, R, D).data, L = s[g], B = new Uint8ClampedArray(u, F, R * D * 4); + let M = O.getImageData(0, 0, R, D).data, L = s[g], B = new Uint8ClampedArray(u, P, R * D * 4); for (let z = 0; z < B.length; z += 4) if (L === "premultiplied") B[z + 3] = M[z + 3]; @@ -27447,11 +27447,11 @@ var Jl = class r14 extends mo { let U = M[z]; B[z] = M[z + 2], B[z + 1] = M[z + 1], B[z + 2] = U; } - }, w = Math.floor(p / (l * c)), S = l, k = c, T = 0; - for (let R = 0; R < w; R++) - b(S, k, T), T += l * c * 4; - let E = p % (l * c); - k = Math.floor(E / l), k > 0 && (b(S, k, T), T += k * (l * 4)), S = E % l, S > 0 && b(S, 1, T); + }, C = Math.floor(p / (c * l)), S = c, k = l, _ = 0; + for (let R = 0; R < C; R++) + b(S, k, _), _ += c * l * 4; + let $ = p % (c * l); + k = Math.floor($ / c), k > 0 && (b(S, k, _), _ += k * (c * 4)), S = $ % c, S > 0 && b(S, 1, _); }); let f = y.convertBackendValuesAndArrayBuffer(u, t10.dtype); return this.convertAndCacheOnCPU(e, f), f; @@ -27465,7 +27465,7 @@ var Jl = class r14 extends mo { let n; if (t10.dtype === "complex64") { let s = await Promise.all([this.read(t10.complexTensorInfos.real.dataId), this.read(t10.complexTensorInfos.imag.dataId)]), a = s[0], i = s[1]; - n = C.mergeRealAndImagArrays(a, i); + n = w.mergeRealAndImagArrays(a, i); } else { let s = await this.getBufferData(t10.resource); n = y.convertBackendValuesAndArrayBuffer(s, t10.dtype); @@ -27482,12 +27482,12 @@ var Jl = class r14 extends mo { throw new Error("Cannot write to a complex64 dtype. "); let s = { id: this.nextDataId() }; this.tensorMap.set(s, { dtype: o, shape: t10, values: null, refCount: 1, external: e.zeroCopy }); - let a = this.tensorMap.get(s), i = sx(a.dtype) * y.sizeFromShape(a.shape); + let a = this.tensorMap.get(s), i = jg(a.dtype) * y.sizeFromShape(a.shape); if (e.buffer.size < i) throw new Error(`GPUBuffer size(${e.buffer.size}) is smaller than tensor size(${i})!`); if ((e.buffer.usage & (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) !== (GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC)) throw new Error("GPUBuffer.usage should include GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC!"); - return e.zeroCopy !== true && (n = this.copyBuffer(n)), a.resource = n, cr().makeTensorFromDataId(s, t10, o, this); + return e.zeroCopy !== true && (n = this.copyBuffer(n)), a.resource = n, ur().makeTensorFromDataId(s, t10, o, this); } readToGPU(e) { let t10 = this.tensorMap.get(e), { values: o, dtype: n, shape: s, resource: a } = t10; @@ -27495,21 +27495,21 @@ var Jl = class r14 extends mo { throw new Error("Does not support reading buffer for complex64 dtype."); if (a == null) throw o != null ? new Error("Data is not on GPU but on CPU.") : new Error("There is no data on GPU or CPU."); - let i = a, p = i.size, u = i.usage, l = this.bufferManager.acquireBuffer(p, u); - this.ensureCommandEncoderReady(), this.endComputePassEncoder(), this.commandEncoder.copyBufferToBuffer(a, 0, l, 0, p), this.submitQueue(); - let c = this.makeTensorInfo(s, n), m = cr().makeTensorFromTensorInfo(c), d = this.tensorMap.get(c.dataId); - return d.resource = l, { tensorRef: m, buffer: l }; + let i = a, p = i.size, u = i.usage, c = this.bufferManager.acquireBuffer(p, u); + this.ensureCommandEncoderReady(), this.endComputePassEncoder(), this.commandEncoder.copyBufferToBuffer(a, 0, c, 0, p), this.submitQueue(); + let l = this.makeTensorInfo(s, n), m = ur().makeTensorFromTensorInfo(l), d = this.tensorMap.get(l.dataId); + return d.resource = c, { tensorRef: m, buffer: c }; } bufferSync(e) { let t10 = this.readSync(e.dataId); if (e.dtype === "string") try { let o = t10.map((n) => y.decodeString(n)); - return ie(e.shape, e.dtype, o); + return me(e.shape, e.dtype, o); } catch (o) { throw new Error("Failed to decode encoded string bytes into utf-8"); } - return ie(e.shape, e.dtype, t10); + return me(e.shape, e.dtype, t10); } async time(e) { !this.supportTimestampQuery && !this.hasTimestampQueryWarned && (console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."), this.hasTimestampQueryWarned = true); @@ -27518,7 +27518,7 @@ var Jl = class r14 extends mo { let s = y.flatten(this.activeTimers.map((u) => u.query)).filter((u) => u != null), a = y.flatten(this.activeTimers.map((u) => u.name)).filter((u) => u != null); this.activeTimers = t10, n && (this.programTimersStack = null); let i = { uploadWaitMs: this.uploadWaitMs, downloadWaitMs: this.downloadWaitMs, kernelMs: null, wallMs: null }, p = await Promise.all(s); - return i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, l) => ({ name: a[l], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "), this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; + return i.kernelMs = y.sum(p), i.getExtraProfileInfo = () => p.map((u, c) => ({ name: a[c], ms: u })).map((u) => `${u.name}: ${u.ms}`).join(", "), this.uploadWaitMs = 0, this.downloadWaitMs = 0, i; } makeTensorInfo(e, t10, o) { return t10 === "string" && o != null && o.length > 0 && y.isString(o[0]) && (o = o.map((s) => y.encodeString(s))), { dataId: this.write(o, e, t10), shape: e, dtype: t10 }; @@ -27533,7 +27533,7 @@ var Jl = class r14 extends mo { let t10 = this.tensorMap.get(e); if (t10.resource != null) return; - let o = sx(t10.dtype) * y.sizeFromShape(t10.shape), n, s = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; + let o = jg(t10.dtype) * y.sizeFromShape(t10.shape), n, s = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC | GPUBufferUsage.COPY_DST; if (t10.values) { if (n = this.bufferManager.acquireBuffer(o, s, true), n.mapState === "unmapped") { let a = this.bufferManager.acquireBuffer(o, GPUBufferUsage.MAP_WRITE | GPUBufferUsage.COPY_SRC, true, false), i = a.getMappedRange(); @@ -27578,8 +27578,8 @@ var Jl = class r14 extends mo { }), t10 = Math.ceil(t10 / s) * s; let a = new ArrayBuffer(t10); e.forEach((p, u) => { - let l = n[u]; - p.type === "int32" ? new Int32Array(a, l, p.data.length).set(p.data) : p.type === "uint32" ? new Uint32Array(a, l, p.data.length).set(p.data) : new Float32Array(a, l, p.data.length).set(p.data); + let c = n[u]; + p.type === "int32" ? new Int32Array(a, c, p.data.length).set(p.data) : p.type === "uint32" ? new Uint32Array(a, c, p.data.length).set(p.data) : new Float32Array(a, c, p.data.length).set(p.data); }); let i = this.bufferManager.acquireBuffer(t10, GPUBufferUsage.COPY_DST | GPUBufferUsage.UNIFORM); return this.queue.writeBuffer(i, 0, a, 0, t10), this.uniformPendingDisposal.push(i), { offset: 0, size: t10, buffer: i }; @@ -27587,15 +27587,15 @@ var Jl = class r14 extends mo { runWebGPUProgram(e, t10, o, n, s) { if (s || (s = this.makeTensorInfo(e.outputShape, o)), y.sizeFromShape(s.shape) === 0) return this.tensorMap.get(s.dataId).values = y.getTypedArrayFromDType(s.dtype, 0), s; - this.uploadToGPU(s.dataId), e.dispatch = Vie(this.device, e); + this.uploadToGPU(s.dataId), e.dispatch = Sae(this.device, e); let a = t10.map((p, u) => { if (p.dtype === "complex64") throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts."); return this.uploadToGPU(p.dataId), { dtype: this.tensorMap.get(p.dataId).dtype, shape: p.shape, name: e.variableNames[u] }; }); - e.shaderKey = Uz(e, a, s); + e.shaderKey = nz(e, a, s); let i = A().getBool("WEBGPU_ENGINE_COMPILE_ONLY"); - return e.shaderKey in this.pipelineCache || (this.pipelineCache[e.shaderKey] = Wz(this.device, e, a, s, i)), e.pipeline = this.pipelineCache[e.shaderKey], i || this.recordAndSubmit(e, s, t10, n), s; + return e.shaderKey in this.pipelineCache || (this.pipelineCache[e.shaderKey] = oz(this.device, e, a, s, i)), e.pipeline = this.pipelineCache[e.shaderKey], i || this.recordAndSubmit(e, s, t10, n), s; } recordAndSubmit(e, t10, o, n) { if (e.pipeline instanceof Promise) @@ -27622,10 +27622,10 @@ var Jl = class r14 extends mo { o.forEach((m) => { this.commandQueueOwnedIds.add(m.dataId); }), this.commandQueueOwnedIds.add(t10.dataId); - let u = this.device.createBindGroup({ layout: e.pipeline.getBindGroupLayout(0), entries: p.map((m, d) => ({ binding: d, resource: m })) }), l = this.activeTimers != null; + let u = this.device.createBindGroup({ layout: e.pipeline.getBindGroupLayout(0), entries: p.map((m, d) => ({ binding: d, resource: m })) }), c = this.activeTimers != null; this.ensureCommandEncoderReady(); - let c = {}; - l && this.supportTimestampQuery ? (this.endComputePassEncoder(), this.querySet == null && (this.querySet = this.device.createQuerySet({ type: "timestamp", count: this.querySetCount })), c.timestampWrites = { querySet: this.querySet, beginningOfPassWriteIndex: 0, endOfPassWriteIndex: 1 }, this.computePassEncoder = this.commandEncoder.beginComputePass(c)) : this.computePassEncoder || (this.computePassEncoder = this.commandEncoder.beginComputePass(c)), this.computePassEncoder.setPipeline(e.pipeline), this.computePassEncoder.setBindGroup(0, u), this.computePassEncoder.dispatchWorkgroups(e.dispatch[0], e.dispatch[1], e.dispatch[2]), this.dispatchCountInPass++, (l || A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchCountInPass || e.pixelsOpType === $i.DRAW) && (this.endComputePassEncoder(), l ? this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime() }) : this.submitQueue()); + let l = {}; + c && this.supportTimestampQuery ? (this.endComputePassEncoder(), this.querySet == null && (this.querySet = this.device.createQuerySet({ type: "timestamp", count: this.querySetCount })), l.timestampWrites = { querySet: this.querySet, beginningOfPassWriteIndex: 0, endOfPassWriteIndex: 1 }, this.computePassEncoder = this.commandEncoder.beginComputePass(l)) : this.computePassEncoder || (this.computePassEncoder = this.commandEncoder.beginComputePass(l)), this.computePassEncoder.setPipeline(e.pipeline), this.computePassEncoder.setBindGroup(0, u), this.computePassEncoder.dispatchWorkgroups(e.dispatch[0], e.dispatch[1], e.dispatch[2]), this.dispatchCountInPass++, (c || A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE") <= this.dispatchCountInPass || e.pixelsOpType === wi.DRAW) && (this.endComputePassEncoder(), c ? this.activeTimers.push({ name: e.constructor.name, query: this.getQueryTime() }) : this.submitQueue()); } async getQueryTime() { if (!this.supportTimestampQuery) @@ -27636,7 +27636,7 @@ var Jl = class r14 extends mo { let t10 = new BigUint64Array(e.getMappedRange()), o = Number(t10[1] - t10[0]) / 1e6; return e.unmap(), this.bufferManager.releaseBuffer(e), o; } - shouldExecuteOnCPU(e, t10 = zie) { + shouldExecuteOnCPU(e, t10 = wae) { return A().getBool("WEBGPU_CPU_FORWARD") && e.every((o) => this.tensorMap.get(o.dataId).resource == null && y.sizeFromShape(o.shape) < t10); } numDataIds() { @@ -27646,72 +27646,72 @@ var Jl = class r14 extends mo { this.disposed || (this.querySet != null && this.querySet.destroy(), this.bufferManager.dispose(), this.textureManager.dispose(), this.disposed = true); } }; -Jl.nextDataId = 0; -Cm() && pu("webgpu", async () => { - let r16 = { powerPreference: A().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, e = await navigator.gpu.requestAdapter(r16), t10 = {}, o = []; +jc.nextDataId = 0; +dm() && tu("webgpu", async () => { + let r15 = { powerPreference: A().get("WEBGPU_USE_LOW_POWER_GPU") ? "low-power" : "high-performance" }, e = await navigator.gpu.requestAdapter(r15), t10 = {}, o = []; e.features.has("timestamp-query") && o.push("timestamp-query"), e.features.has("bgra8unorm-storage") && o.push(["bgra8unorm-storage"]), t10.requiredFeatures = o; let n = e.limits; t10.requiredLimits = { maxComputeWorkgroupStorageSize: n.maxComputeWorkgroupStorageSize, maxComputeWorkgroupsPerDimension: n.maxComputeWorkgroupsPerDimension, maxStorageBufferBindingSize: n.maxStorageBufferBindingSize, maxBufferSize: n.maxBufferSize, maxComputeWorkgroupSizeX: n.maxComputeWorkgroupSizeX, maxComputeInvocationsPerWorkgroup: n.maxComputeInvocationsPerWorkgroup }; let s = await e.requestDevice(t10), a = await e.requestAdapterInfo(); - return new Jl(s, a); + return new jc(s, a); }, 3); var fe; -(function(r16) { - r16[r16.ADD = 0] = "ADD", r16[r16.ATAN2 = 1] = "ATAN2", r16[r16.COMPLEX_MULTIPLY_IMAG = 2] = "COMPLEX_MULTIPLY_IMAG", r16[r16.COMPLEX_MULTIPLY_REAL = 3] = "COMPLEX_MULTIPLY_REAL", r16[r16.DIV = 4] = "DIV", r16[r16.ELU_DER = 5] = "ELU_DER", r16[r16.EQUAL = 6] = "EQUAL", r16[r16.FLOOR_DIV = 7] = "FLOOR_DIV", r16[r16.GREATER = 8] = "GREATER", r16[r16.GREATER_EQUAL = 9] = "GREATER_EQUAL", r16[r16.LESS = 10] = "LESS", r16[r16.LESS_EQUAL = 11] = "LESS_EQUAL", r16[r16.LOGICAL_AND = 12] = "LOGICAL_AND", r16[r16.LOGICAL_OR = 13] = "LOGICAL_OR", r16[r16.MAX = 14] = "MAX", r16[r16.MIN = 15] = "MIN", r16[r16.MOD = 16] = "MOD", r16[r16.MUL = 17] = "MUL", r16[r16.NOT_EQUAL = 18] = "NOT_EQUAL", r16[r16.POW = 19] = "POW", r16[r16.PRELU = 20] = "PRELU", r16[r16.SQUARED_DIFFERENCE = 21] = "SQUARED_DIFFERENCE", r16[r16.SUB = 22] = "SUB"; +(function(r15) { + r15[r15.ADD = 0] = "ADD", r15[r15.ATAN2 = 1] = "ATAN2", r15[r15.COMPLEX_MULTIPLY_IMAG = 2] = "COMPLEX_MULTIPLY_IMAG", r15[r15.COMPLEX_MULTIPLY_REAL = 3] = "COMPLEX_MULTIPLY_REAL", r15[r15.DIV = 4] = "DIV", r15[r15.ELU_DER = 5] = "ELU_DER", r15[r15.EQUAL = 6] = "EQUAL", r15[r15.FLOOR_DIV = 7] = "FLOOR_DIV", r15[r15.GREATER = 8] = "GREATER", r15[r15.GREATER_EQUAL = 9] = "GREATER_EQUAL", r15[r15.LESS = 10] = "LESS", r15[r15.LESS_EQUAL = 11] = "LESS_EQUAL", r15[r15.LOGICAL_AND = 12] = "LOGICAL_AND", r15[r15.LOGICAL_OR = 13] = "LOGICAL_OR", r15[r15.MAX = 14] = "MAX", r15[r15.MIN = 15] = "MIN", r15[r15.MOD = 16] = "MOD", r15[r15.MUL = 17] = "MUL", r15[r15.NOT_EQUAL = 18] = "NOT_EQUAL", r15[r15.POW = 19] = "POW", r15[r15.PRELU = 20] = "PRELU", r15[r15.SQUARED_DIFFERENCE = 21] = "SQUARED_DIFFERENCE", r15[r15.SUB = 22] = "SUB"; })(fe || (fe = {})); -var Wie = "let resultTemp = a + b;"; -var Uie = "let resultTemp = atan2(a, b);"; -var Gie = "let resultTemp = areal * breal - aimag * bimag;"; -var Hie = "let resultTemp = areal * bimag + aimag * breal;"; -var Kie = "let resultTemp = a / b;"; -var qie = "let resultTemp = select(a * (b + 1.0), a, b >= b - b);"; -var jie = ` +var Iae = "let resultTemp = a + b;"; +var vae = "let resultTemp = atan2(a, b);"; +var kae = "let resultTemp = areal * breal - aimag * bimag;"; +var Nae = "let resultTemp = areal * bimag + aimag * breal;"; +var Tae = "let resultTemp = a / b;"; +var _ae = "let resultTemp = select(a * (b + 1.0), a, b >= b - b);"; +var Eae = ` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); `; -var Xie = ` +var $ae = ` let remainder = select(a % b, round(a % b), (round(a) == a) & (round(b) == b)); let quotient = (a - remainder) / b; let resultTemp = round(select(quotient, quotient - 1, sign(remainder) == -sign(b))); `; -var Yie = ` +var Rae = ` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a > b); `; -var Qie = ` +var Dae = ` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a >= b); `; -var Zie = ` +var Aae = ` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a < b); `; -var Jie = ` +var Fae = ` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a <= b); `; -var eue = "return f32(a >= 1.0 && b >= 1.0);"; -var tue = `return (vec4(a >= vec4(1.0)) * +var Pae = "return f32(a >= 1.0 && b >= 1.0);"; +var Oae = `return (vec4(a >= vec4(1.0)) * vec4(b >= vec4(1.0)));`; -var rue = "return f32(a >= 1.0 || b >= 1.0);"; -var oue = `return min(vec4(a >= vec4(1.0)) + +var Mae = "return f32(a >= 1.0 || b >= 1.0);"; +var Lae = `return min(vec4(a >= vec4(1.0)) + vec4(b >= vec4(1.0)), vec4(1.0));`; -var nue = "let resultTemp = max(a, b);"; -var sue = "let resultTemp = min(a, b);"; -var aue = ` +var Bae = "let resultTemp = max(a, b);"; +var zae = "let resultTemp = min(a, b);"; +var Vae = ` let isNaN = b == 0.; var resultTemp = a % b; resultTemp = select((resultTemp + b) % b, resultTemp, (a < 0. && b < 0.) || (a >= 0. && b > 0.)); `; -var iue = ` +var Wae = ` let isNaN = !vec4(b); var resultTemp = vec4(a % b); if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { @@ -27727,16 +27727,16 @@ var iue = ` resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; } `; -var uue = "let resultTemp = a * b;"; -var pue = ` +var Uae = "let resultTemp = a * b;"; +var Gae = ` var resultTemp = f32(a != b); let valueForNaN = 1.0; `; -var lue = ` +var Hae = ` var resultTemp = vec4(a != b); let valueForNaN = 1.0; `; -var cue = ` +var Kae = ` let isNaN = a < 0.0 && floor(b) < b; if (b == 0.0) { return 1.0; @@ -27744,7 +27744,7 @@ var cue = ` var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b), round(abs(b) % 2.0) != 1.0); `; -var mue = ` +var qae = ` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -27766,34 +27766,34 @@ var mue = ` } let isNaN = (a < vec4(0.0)) & (floor(b) < b); `; -var due = "if (a < 0.0) { return b * a; } return a;"; -var fue = ` +var jae = "if (a < 0.0) { return b * a; } return a;"; +var Xae = ` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -var hue = "let resultTemp = (a - b) * (a - b);"; -var gue = "let resultTemp = a - b;"; -function ec(r16, e) { +var Yae = "let resultTemp = (a - b) * (a - b);"; +var Qae = "let resultTemp = a - b;"; +function Xc(r15, e) { let t10; do { - switch (r16) { + switch (r15) { case fe.ATAN2: - t10 = Uie; + t10 = vae; break; case fe.MAX: - t10 = nue; + t10 = Bae; break; case fe.MIN: - t10 = sue; + t10 = zae; break; case fe.MOD: - t10 = e ? iue : aue; + t10 = e ? Wae : Vae; break; case fe.NOT_EQUAL: - t10 = e ? lue : pue; + t10 = e ? Hae : Gae; break; case fe.POW: - t10 = e ? mue : cue; + t10 = e ? qae : Kae; break; default: continue; @@ -27816,54 +27816,54 @@ function ec(r16, e) { } `; } while (false); - switch (r16) { + switch (r15) { case fe.ADD: - t10 = Wie; + t10 = Iae; break; case fe.COMPLEX_MULTIPLY_IMAG: - t10 = Hie; + t10 = Nae; break; case fe.COMPLEX_MULTIPLY_REAL: - t10 = Gie; + t10 = kae; break; case fe.DIV: - t10 = Kie; + t10 = Tae; break; case fe.ELU_DER: - t10 = qie; + t10 = _ae; break; case fe.EQUAL: - t10 = jie; + t10 = Eae; break; case fe.FLOOR_DIV: - t10 = Xie; + t10 = $ae; break; case fe.GREATER: - t10 = Yie; + t10 = Rae; break; case fe.GREATER_EQUAL: - t10 = Qie; + t10 = Dae; break; case fe.LESS: - t10 = Zie; + t10 = Aae; break; case fe.LESS_EQUAL: - t10 = Jie; + t10 = Fae; break; case fe.LOGICAL_AND: - return e ? tue : eue; + return e ? Oae : Pae; case fe.LOGICAL_OR: - return e ? oue : rue; + return e ? Lae : Mae; case fe.MUL: - t10 = uue; + t10 = Uae; break; case fe.PRELU: - return e ? fue : due; + return e ? Xae : jae; case fe.SQUARED_DIFFERENCE: - t10 = hue; + t10 = Yae; break; case fe.SUB: - t10 = gue; + t10 = Qae; break; default: } @@ -27873,36 +27873,36 @@ function ec(r16, e) { `; } var Z; -(function(r16) { - r16[r16.ABS = 0] = "ABS", r16[r16.ACOS = 1] = "ACOS", r16[r16.ACOSH = 2] = "ACOSH", r16[r16.ASIN = 3] = "ASIN", r16[r16.ASINH = 4] = "ASINH", r16[r16.ATAN = 5] = "ATAN", r16[r16.ATANH = 6] = "ATANH", r16[r16.CEIL = 7] = "CEIL", r16[r16.COS = 8] = "COS", r16[r16.COSH = 9] = "COSH", r16[r16.ELU = 10] = "ELU", r16[r16.ERF = 11] = "ERF", r16[r16.EXP = 12] = "EXP", r16[r16.EXPM1 = 13] = "EXPM1", r16[r16.FLOOR = 14] = "FLOOR", r16[r16.IS_FINITE = 15] = "IS_FINITE", r16[r16.IS_INF = 16] = "IS_INF", r16[r16.IS_NAN = 17] = "IS_NAN", r16[r16.LINEAR = 18] = "LINEAR", r16[r16.LOG = 19] = "LOG", r16[r16.LOG1P = 20] = "LOG1P", r16[r16.LOGICAL_NOT = 21] = "LOGICAL_NOT", r16[r16.NEG = 22] = "NEG", r16[r16.RELU = 23] = "RELU", r16[r16.RELU6 = 24] = "RELU6", r16[r16.LEAKYRELU = 25] = "LEAKYRELU", r16[r16.RECIPROCAL = 26] = "RECIPROCAL", r16[r16.ROUND = 27] = "ROUND", r16[r16.RSQRT = 28] = "RSQRT", r16[r16.SELU = 29] = "SELU", r16[r16.SIGMOID = 30] = "SIGMOID", r16[r16.SIGN = 31] = "SIGN", r16[r16.SIN = 32] = "SIN", r16[r16.SINH = 33] = "SINH", r16[r16.SOFTPLUS = 34] = "SOFTPLUS", r16[r16.SQRT = 35] = "SQRT", r16[r16.SQUARE = 36] = "SQUARE", r16[r16.STEP = 37] = "STEP", r16[r16.TAN = 38] = "TAN", r16[r16.TANH = 39] = "TANH", r16[r16.TO_INT = 40] = "TO_INT"; +(function(r15) { + r15[r15.ABS = 0] = "ABS", r15[r15.ACOS = 1] = "ACOS", r15[r15.ACOSH = 2] = "ACOSH", r15[r15.ASIN = 3] = "ASIN", r15[r15.ASINH = 4] = "ASINH", r15[r15.ATAN = 5] = "ATAN", r15[r15.ATANH = 6] = "ATANH", r15[r15.CEIL = 7] = "CEIL", r15[r15.COS = 8] = "COS", r15[r15.COSH = 9] = "COSH", r15[r15.ELU = 10] = "ELU", r15[r15.ERF = 11] = "ERF", r15[r15.EXP = 12] = "EXP", r15[r15.EXPM1 = 13] = "EXPM1", r15[r15.FLOOR = 14] = "FLOOR", r15[r15.IS_FINITE = 15] = "IS_FINITE", r15[r15.IS_INF = 16] = "IS_INF", r15[r15.IS_NAN = 17] = "IS_NAN", r15[r15.LINEAR = 18] = "LINEAR", r15[r15.LOG = 19] = "LOG", r15[r15.LOG1P = 20] = "LOG1P", r15[r15.LOGICAL_NOT = 21] = "LOGICAL_NOT", r15[r15.NEG = 22] = "NEG", r15[r15.RELU = 23] = "RELU", r15[r15.RELU6 = 24] = "RELU6", r15[r15.LEAKYRELU = 25] = "LEAKYRELU", r15[r15.RECIPROCAL = 26] = "RECIPROCAL", r15[r15.ROUND = 27] = "ROUND", r15[r15.RSQRT = 28] = "RSQRT", r15[r15.SELU = 29] = "SELU", r15[r15.SIGMOID = 30] = "SIGMOID", r15[r15.SIGN = 31] = "SIGN", r15[r15.SIN = 32] = "SIN", r15[r15.SINH = 33] = "SINH", r15[r15.SOFTPLUS = 34] = "SOFTPLUS", r15[r15.SQRT = 35] = "SQRT", r15[r15.SQUARE = 36] = "SQUARE", r15[r15.STEP = 37] = "STEP", r15[r15.TAN = 38] = "TAN", r15[r15.TANH = 39] = "TANH", r15[r15.TO_INT = 40] = "TO_INT"; })(Z || (Z = {})); -var xue = "return abs(a);"; -var yue = ` +var Zae = "return abs(a);"; +var Jae = ` if (abs(a) > 1.) { return uniforms.NAN; } return acos(a); `; -var bue = ` +var eie = ` if (a < 1.) { return uniforms.NAN; } return acosh(a); `; -var Cue = ` +var tie = ` if (abs(a) > 1.) { return uniforms.NAN; } return asin(a); `; -var wue = "return asinh(a);"; -var Sue = ` +var rie = "return asinh(a);"; +var oie = ` if (isnan(a)) { return uniforms.NAN; } return atan(a); `; -var Iue = ` +var nie = ` if (abs(a) > 1.) { return uniforms.NAN; } @@ -27914,15 +27914,15 @@ var Iue = ` } return atanh(a); `; -var vue = "return ceil(a);"; -var kue = "return cos(a);"; -var Nue = ` +var sie = "return ceil(a);"; +var aie = "return cos(a);"; +var iie = ` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; `; -var Tue = "return exp(a) - 1.0;"; -var _ue = "if (a >= 0.0) { return a; } return (exp(a) - 1.0);"; -var Eue = ` +var uie = "return exp(a) - 1.0;"; +var pie = "if (a >= 0.0) { return a; } return (exp(a) - 1.0);"; +var cie = ` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -27938,65 +27938,65 @@ var Eue = ` } return resFloat; `; -var $ue = ` +var lie = ` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - let p = ${C.ERF_P}; - let a1 = ${C.ERF_A1}; - let a2 = ${C.ERF_A2}; - let a3 = ${C.ERF_A3}; - let a4 = ${C.ERF_A4}; - let a5 = ${C.ERF_A5}; + let p = ${w.ERF_P}; + let a1 = ${w.ERF_A1}; + let a2 = ${w.ERF_A2}; + let a3 = ${w.ERF_A3}; + let a4 = ${w.ERF_A4}; + let a5 = ${w.ERF_A5}; let sign = sign(a); let absA = abs(a); let t = 1.0 / (1.0 + p * absA); return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); `; -var Rue = "return exp(a);"; -var Due = "return floor(a);"; -var Aue = "return f32(!isnan(a) && !isinf(a));"; -var Fue = "return f32(isinf(a));"; -var Pue = "return f32(isnan(a));"; -var Oue = "return a;"; -var Mue = `if (a < 0.0) { return uniforms.NAN; } +var mie = "return exp(a);"; +var die = "return floor(a);"; +var fie = "return f32(!isnan(a) && !isinf(a));"; +var hie = "return f32(isinf(a));"; +var gie = "return f32(isnan(a));"; +var xie = "return a;"; +var yie = `if (a < 0.0) { return uniforms.NAN; } return log(a);`; -var Lue = ` +var bie = ` if (isnan(a)) { return a; } return log(1.0 + a); `; -var Bue = "return f32(!(a >= 1.0));"; -var zue = "return -a;"; -var Vue = "if (a < 0.0) { return uniforms.alpha * a; } return a;"; -var Wue = ` +var Cie = "return f32(!(a >= 1.0));"; +var wie = "return -a;"; +var Sie = "if (a < 0.0) { return uniforms.alpha * a; } return a;"; +var Iie = ` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); `; -var Uue = "return 1.0 / a;"; -var Gue = "return select(a, 0.0, a < 0.0);"; -var Hue = "return clamp(a, 0.0, 6.0);"; -var Kue = "return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));"; -var que = ` +var vie = "return 1.0 / a;"; +var kie = "return select(a, 0.0, a < 0.0);"; +var Nie = "return clamp(a, 0.0, 6.0);"; +var Tie = "return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));"; +var _ie = ` return select(a, vec4(0.0), a < vec4(0.0)); `; -var jue = "return round(a);"; -var Xue = "return inverseSqrt(a);"; -var Yue = ` +var Eie = "return round(a);"; +var $ie = "return inverseSqrt(a);"; +var Rie = ` if (a >= 0.0) { - return ${C.SELU_SCALE} * a; + return ${w.SELU_SCALE} * a; } else { - return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0); + return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0); } `; -var Que = "return 1.0 / (1.0 + exp(-1.0 * a));"; -var Zue = "return sign(a);"; -var Jue = "return sin(a);"; -var epe = ` +var Die = "return 1.0 / (1.0 + exp(-1.0 * a));"; +var Aie = "return sign(a);"; +var Fie = "return sin(a);"; +var Pie = ` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; `; -var tpe = ` +var Oie = ` let epsilon = 1.1920928955078125e-7; let threshold = log(epsilon) + 2.0; @@ -28012,129 +28012,129 @@ var tpe = ` return log(exp_a + 1.0); } `; -var rpe = "return sqrt(a);"; -var ope = "return a * a;"; -var npe = ` +var Mie = "return sqrt(a);"; +var Lie = "return a * a;"; +var Bie = ` if (isnan(a)) { return a; } return select(uniforms.stepAlpha, 1.0, a > 0.0); `; -var spe = "return tan(a);"; -var ape = ` +var zie = "return tan(a);"; +var Vie = ` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); `; -var ipe = "return f32(i32((a)));"; -function Ri(r16, e) { - switch (r16) { +var Wie = "return f32(i32((a)));"; +function Si(r15, e) { + switch (r15) { case Z.ABS: - return xue; + return Zae; case Z.ACOS: - return yue; + return Jae; case Z.ACOSH: - return bue; + return eie; case Z.ASIN: - return Cue; + return tie; case Z.ASINH: - return wue; + return rie; case Z.ATAN: - return Sue; + return oie; case Z.ATANH: - return Iue; + return nie; case Z.COS: - return kue; + return aie; case Z.COSH: - return Nue; + return iie; case Z.CEIL: - return vue; + return sie; case Z.ELU: - return e ? Eue : _ue; + return e ? cie : pie; case Z.ERF: - return $ue; + return lie; case Z.EXP: - return Rue; + return mie; case Z.EXPM1: - return Tue; + return uie; case Z.FLOOR: - return Due; + return die; case Z.IS_FINITE: - return Aue; + return fie; case Z.IS_INF: - return Fue; + return hie; case Z.IS_NAN: - return Pue; + return gie; case Z.LINEAR: - return Oue; + return xie; case Z.LOG: - return Mue; + return yie; case Z.LOG1P: - return Lue; + return bie; case Z.LOGICAL_NOT: - return Bue; + return Cie; case Z.NEG: - return zue; + return wie; case Z.LEAKYRELU: - return e ? Wue : Vue; + return e ? Iie : Sie; case Z.RECIPROCAL: - return Uue; + return vie; case Z.RELU: - return e ? que : Gue; + return e ? _ie : kie; case Z.RELU6: - return e ? Kue : Hue; + return e ? Tie : Nie; case Z.ROUND: - return jue; + return Eie; case Z.RSQRT: - return Xue; + return $ie; case Z.SELU: - return Yue; + return Rie; case Z.SIGMOID: - return Que; + return Die; case Z.SIGN: - return Zue; + return Aie; case Z.SIN: - return Jue; + return Fie; case Z.SINH: - return epe; + return Pie; case Z.SOFTPLUS: - return tpe; + return Oie; case Z.SQRT: - return rpe; + return Mie; case Z.SQUARE: - return ope; + return Lie; case Z.STEP: - return npe; + return Bie; case Z.TAN: - return spe; + return zie; case Z.TANH: - return ape; + return Vie; case Z.TO_INT: - return ipe; + return Wie; default: - throw new Error(`BinaryType ${r16} is not implemented!`); + throw new Error(`BinaryType ${r15} is not implemented!`); } } -function gr(r16, e = false, t10 = false, o = 3) { - if (r16 === null) +function dr(r15, e = false, t10 = false, o = 3) { + if (r15 === null) return ""; let n = ""; - if (r16 === "linear") - n = Ri(Z.LINEAR); - else if (r16 === "relu") - n = Ri(Z.RELU, t10); - else if (r16 === "elu") - n = Ri(Z.ELU, t10); - else if (r16 === "relu6") - n = Ri(Z.RELU6, t10); - else if (r16 === "prelu") - n = ec(fe.PRELU, t10); - else if (r16 === "sigmoid") - n = Ri(Z.SIGMOID, t10); - else if (r16 === "leakyrelu") - n = Ri(Z.LEAKYRELU, t10); + if (r15 === "linear") + n = Si(Z.LINEAR); + else if (r15 === "relu") + n = Si(Z.RELU, t10); + else if (r15 === "elu") + n = Si(Z.ELU, t10); + else if (r15 === "relu6") + n = Si(Z.RELU6, t10); + else if (r15 === "prelu") + n = Xc(fe.PRELU, t10); + else if (r15 === "sigmoid") + n = Si(Z.SIGMOID, t10); + else if (r15 === "leakyrelu") + n = Si(Z.LEAKYRELU, t10); else - throw new Error(`Activation ${r16} has not been implemented for the WebGPU backend.`); + throw new Error(`Activation ${r15} has not been implemented for the WebGPU backend.`); let a = Ae(t10 ? 4 : 1), i = ""; return e ? i = ` fn activation(a : ${a}, coords : vec${o}) -> ${a} { @@ -28145,23 +28145,23 @@ function gr(r16, e = false, t10 = false, o = 3) { ${n} }`, i; } -function no(r16, e) { +function Zr(r15, e) { return ` - ${r16 ? "value = value + getBiasByOutputCoords(coords);" : ""} + ${r15 ? "value = value + getBiasByOutputCoords(coords);" : ""} ${e ? "value = activation(value, coords);" : ""} `; } -function mv(r16, e, t10 = false, o = false, n = false, s = 1) { - y.assert(r16 && s === 1 || !r16, () => `transposeA ${r16} is not compatible with component size ${s}`); +function Jv(r15, e, t10 = false, o = false, n = false, s = 1) { + y.assert(r15 && s === 1 || !r15, () => `transposeA ${r15} is not compatible with component size ${s}`); let a = ` - ${r16 ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} + ${r15 ? "value = getA(batch, col, row);" : "value = getA(batch, row, col);"} `, i = e ? "value = getB(batch, col, row);" : "value = getB(batch, row, col);"; return ` fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} { var value = ${Ae(s)}(0.0); ${t10 && n ? a : ` - ${r16 ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} + ${r15 ? "if(row < uniforms.dimAOuter && col < uniforms.dimInner)" : "if(row < uniforms.aShape[1] && col < uniforms.aShape[2])"} { ${a} } @@ -28176,21 +28176,21 @@ function mv(r16, e, t10 = false, o = false, n = false, s = 1) { } `; } -function Sm(r16, e, t10, o, n = false, s = false, a = false, i = 1) { +function hm(r15, e, t10, o, n = false, s = false, a = false, i = 1) { return ` - ${mv(t10, o, n, s, a, i)} + ${Jv(t10, o, n, s, a, i)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) { ${n && s ? "" : "if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${no(r16, e)} + ${Zr(r15, e)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } `; } -var upe = (r16, e) => r16 ? ` +var Uie = (r15, e) => r15 ? ` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${e}); @@ -28199,8 +28199,8 @@ var upe = (r16, e) => r16 ? ` globalRow + innerRow, kStart + inputCol * ${e}); `; -var ppe = (r16, e, t10, o) => { - if (r16) +var Gie = (r15, e, t10, o) => { + if (r15) return ` for (var k = 0; k < ${o}; k++) { let BCached0 = mm_Bsub[k][tileCol]; @@ -28223,13 +28223,13 @@ var ppe = (r16, e, t10, o) => { }`; } }; -function Fp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false) { - let i = e[1] * r16[1], p = e[0] * r16[0], u = t10 ? i : o, l = t10 ? o : i, c = u / e[0], m = o / e[1], d = r16[1], f = r16[0]; - return y.assert((t10 && c === 4 && r16[1] === 4 || !t10 && (c === 3 || c === 4)) && u % e[0] === 0 && o % e[1] === 0 && r16[0] === 4, () => `If transposeA ${t10} is true, innerElementSize ${c} and workPerThread[1] ${r16[1]} must be 4. - Otherwise, innerElementSize ${c} must be 3 or 4. - tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r16[0]} must be 4.`), ` - var mm_Asub : array, ${u / c}>, ${l}>; - var mm_Bsub : array, ${p / r16[0]}>, ${o}>; +function _p(r15, e, t10 = false, o = 32, n = false, s = 32, a = false) { + let i = e[1] * r15[1], p = e[0] * r15[0], u = t10 ? i : o, c = t10 ? o : i, l = u / e[0], m = o / e[1], d = r15[1], f = r15[0]; + return y.assert((t10 && l === 4 && r15[1] === 4 || !t10 && (l === 3 || l === 4)) && u % e[0] === 0 && o % e[1] === 0 && r15[0] === 4, () => `If transposeA ${t10} is true, innerElementSize ${l} and workPerThread[1] ${r15[1]} must be 4. + Otherwise, innerElementSize ${l} must be 3 or 4. + tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r15[0]} must be 4.`), ` + var mm_Asub : array, ${u / l}>, ${c}>; + var mm_Bsub : array, ${p / r15[0]}>, ${o}>; ${G()} { let localRow = i32(localId.y); @@ -28255,7 +28255,7 @@ function Fp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false) { for (var innerRow = 0; innerRow < ${d}; innerRow++) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${upe(t10, c)} + ${Uie(t10, l)} } // Load one tile of B into local memory. @@ -28268,7 +28268,7 @@ function Fp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false) { workgroupBarrier(); // Compute acc values for a single thread. - ${ppe(t10, c, d, o)} + ${Gie(t10, l, d, o)} workgroupBarrier(); } @@ -28277,7 +28277,7 @@ function Fp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false) { } }`; } -var Hz = (r16) => r16 ? ` +var az = (r15) => r15 ? ` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -28286,11 +28286,11 @@ var Hz = (r16) => r16 ? ` globalRowStart + inputRow, kStart + inputCol); `; -var lpe = (r16) => r16 ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; -function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false) { - let p = r16[1] * e[1], u = r16[0] * e[0], l = t10 ? p : o, c = t10 ? o : p; - y.assert(c % e[1] === 0 && l % e[0] === 0 && o % e[1] === 0, () => `tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${l} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`); - let m = c / e[1], d = l / e[0], f = o / e[1], h = r16[1], g = r16[0], x = a ? ` +var Hie = (r15) => r15 ? "let ACached = mm_Asub[k][tileRow + innerRow];" : "let ACached = mm_Asub[tileRow + innerRow][k];"; +function Ep(r15, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false) { + let p = r15[1] * e[1], u = r15[0] * e[0], c = t10 ? p : o, l = t10 ? o : p; + y.assert(l % e[1] === 0 && c % e[0] === 0 && o % e[1] === 0, () => `tileAHight ${l} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`); + let m = l / e[1], d = c / e[0], f = o / e[1], h = r15[1], g = r15[0], x = a ? ` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${p}; @@ -28299,9 +28299,9 @@ function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false // Loop over shared dimension. for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. - for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) { - for (var inputCol = localCol; inputCol < ${l}; inputCol = inputCol + ${e[0]}) { - ${Hz(t10)} + for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${e[1]}) { + for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${e[0]}) { + ${az(t10)} } } // Load one tile of B into local memory. @@ -28356,7 +28356,7 @@ function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false for (var innerCol = 0; innerCol < ${d}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${Hz(t10)} + ${az(t10)} } } @@ -28381,7 +28381,7 @@ function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false } for (var innerRow = 0; innerRow < ${h}; innerRow++) { - ${lpe(t10)} + ${Hie(t10)} for (var innerCol = 0; innerCol < ${g}; innerCol++) { acc[innerRow][innerCol] = fma(ACached, BCached[innerCol], acc[innerRow][innerCol]); @@ -28400,7 +28400,7 @@ function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false } `; return ` - var mm_Asub : array, ${c}>; + var mm_Asub : array, ${l}>; var mm_Bsub : array, ${o}>; ${G()} { @@ -28422,7 +28422,7 @@ function Pp(r16, e, t10 = false, o = 32, n = false, s = 32, a = false, i = false } `; } -var cpe = (r16) => r16 ? ` +var Kie = (r15) => r15 ? ` mm_readA(batchA, colA, globalRow), mm_readA(batchA, colA + 1, globalRow), mm_readA(batchA, colA + 2, globalRow), @@ -28433,11 +28433,11 @@ var cpe = (r16) => r16 ? ` mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) `; -function mpe(r16, e = false) { - y.assert(r16[1] === 1 && r16[2] === 1, () => `A linear work group size is required. But got ${r16}.`); - let t10 = r16[0] * 4; +function qie(r15, e = false) { + y.assert(r15[1] === 1 && r15[2] === 1, () => `A linear work group size is required. But got ${r15}.`); + let t10 = r15[0] * 4; return ` - var mm_Asub : array, ${r16[0]}>; + var mm_Asub : array, ${r15[0]}>; ${G()} { let tileCol = i32(localId.x); @@ -28455,7 +28455,7 @@ function mpe(r16, e = false) { for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. let colA = t * ${t10} + tileCol * 4; - mm_Asub[tileCol] = vec4(${cpe(e)}); + mm_Asub[tileCol] = vec4(${Kie(e)}); workgroupBarrier(); // Compute acc values for a single thread. @@ -28477,19 +28477,19 @@ function mpe(r16, e = false) { } `; } -var ax = class { +var Xg = class { constructor(e, t10, o = false, n = false, s = null, a = null, i = null, p = false) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = t10, this.dispatchLayout = { x: [2], y: [1], z: [0] }; let u = o ? e[1] : e[2]; if (this.isVec4 = (u % 4 === 0 && !o || t10[1] % 4 === 0 && o) && t10[2] % 4 === 0 && !n, this.outputComponent = this.isVec4 ? 4 : 1, this.isVectorA = t10[1] === 1 && !o, !this.isVec4 && this.isVectorA) this.elementsPerThread = [1, 1, 1], this.workgroupSize = [32, 1, 1]; else { - let m = lv(t10[1], u, t10[2], o); + let m = Qv(t10[1], u, t10[2], o); this.workgroupSize = m.workgroupSize, this.elementsPerThread = m.elementsPerThread; } this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread); - let l = s != null, c = i != null; - l && this.variableNames.push("bias"), c && this.variableNames.push("preluActivationWeights"), this.sequentialAccessByThreads = p, this.transposeA = o, this.transposeB = n, this.addBias = l, this.activation = a, this.hasPreluActivationWeights = c, [this.fitAOuter, this.fitBOuter, this.fitInner] = this.getShapeFit(t10[1], t10[2], u), this.shaderKey = `matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`; + let c = s != null, l = i != null; + c && this.variableNames.push("bias"), l && this.variableNames.push("preluActivationWeights"), this.sequentialAccessByThreads = p, this.transposeA = o, this.transposeB = n, this.addBias = c, this.activation = a, this.hasPreluActivationWeights = l, [this.fitAOuter, this.fitBOuter, this.fitInner] = this.getShapeFit(t10[1], t10[2], u), this.shaderKey = `matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`; } getShapeFit(e, t10, o) { let n = this.workgroupSize[1] * this.elementsPerThread[1], s = this.workgroupSize[0] * this.elementsPerThread[0]; @@ -28499,15 +28499,15 @@ var ax = class { } getUserCode() { return ` - ${gr(this.activation, this.hasPreluActivationWeights, this.isVec4)} - ${Sm(this.addBias, this.activation, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} - ${this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, true) : this.isVectorA ? mpe(this.workgroupSize, this.transposeA) : Pp(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads, true)} + ${dr(this.activation, this.hasPreluActivationWeights, this.isVec4)} + ${hm(this.addBias, this.activation, false, this.transposeB, this.fitAOuter, this.fitBOuter, this.fitInner, this.isVec4 ? 4 : 1)} + ${this.isVec4 ? _p(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, true) : this.isVectorA ? qie(this.workgroupSize, this.transposeA) : Ep(this.elementsPerThread, this.workgroupSize, this.transposeA, this.tileInner, false, null, this.sequentialAccessByThreads, true)} `; } }; -function dpe(r16) { +function jie(r15) { return ` - var sumValues : array; + var sumValues : array; ${G()} { let coords = getOutputCoords(); let batch = coords[0]; @@ -28517,7 +28517,7 @@ function dpe(r16) { let col = coords[2]; var sum = 0.0; let Length = uniforms.dimInner; - for (var k = i32(localId.x); k < Length; k = k + ${r16}) { + for (var k = i32(localId.x); k < Length; k = k + ${r15}) { let dataA = mm_readA(batchA, row, k); let dataB = mm_readB(batchB, k, col); sum = sum + dataA * dataB; @@ -28525,7 +28525,7 @@ function dpe(r16) { sumValues[localId.x] = sum; workgroupBarrier(); - for(var currentSize = ${r16 / 2}u; currentSize > 1u; + for(var currentSize = ${r15 / 2}u; currentSize > 1u; currentSize = currentSize / 2u) { if (localId.x < currentSize) { @@ -28541,7 +28541,7 @@ function dpe(r16) { } `; } -var ix = class { +var Yg = class { constructor(e, t10 = false, o = false, n = null, s = null, a = null) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = { x: [], y: [1, 2], z: [0] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize); let i = n != null, p = a != null; @@ -28549,14 +28549,14 @@ var ix = class { } getUserCode() { return ` - ${gr(this.activation, this.hasPreluActivationWeights)} - ${Sm(this.addBias, this.activation, this.transposeA, this.transposeB)} - ${dpe(this.workgroupSize[0])} + ${dr(this.activation, this.hasPreluActivationWeights)} + ${hm(this.addBias, this.activation, this.transposeA, this.transposeB)} + ${jie(this.workgroupSize[0])} `; } }; -function fpe(r16) { - let e = r16[1], t10 = r16[0], o = e > t10 ? e : t10; +function Xie(r15) { + let e = r15[1], t10 = r15[0], o = e > t10 ? e : t10; return ` var mm_Asub : array, ${e}>; var mm_Bsub : array, ${o}>; @@ -28611,23 +28611,23 @@ function fpe(r16) { } `; } -var ux = class { +var Qg = class { constructor(e, t10, o, n = false, s = false, a = null, i = null, p = null) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [16, 8, 1], this.outputShape = o, this.dispatchLayout = { x: [2], y: [1], z: [0] }, this.dispatch = [Math.ceil(o[2] / this.workgroupSize[0]), Math.ceil(o[1] / this.workgroupSize[1]), o[0]]; let u = a != null; u && this.variableNames.push("bias"); - let l = p != null; - l && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = l, this.shaderKey = `matMulSmallOutputSize_${this.activation}_${n}_${s}`; + let c = p != null; + c && this.variableNames.push("preluActivationWeights"), this.transposeA = n, this.transposeB = s, this.addBias = u, this.activation = i, this.hasPreluActivationWeights = c, this.shaderKey = `matMulSmallOutputSize_${this.activation}_${n}_${s}`; } getUserCode() { return ` - ${gr(this.activation, this.hasPreluActivationWeights)} - ${Sm(this.addBias, this.activation, this.transposeA, this.transposeB)} - ${fpe(this.workgroupSize)} + ${dr(this.activation, this.hasPreluActivationWeights)} + ${hm(this.addBias, this.activation, this.transposeA, this.transposeB)} + ${Xie(this.workgroupSize)} `; } }; -var px = class { +var Zg = class { constructor(e, t10, o = false, n = false) { this.variableNames = ["A", "B"], this.uniforms = "dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.workgroupSize = [8, 8, 1], this.atomic = true, this.splitedDimInner = 128, y.assert(e[0] === 1, () => "MatMulSplitKProgram only supports batch = 1."), this.outputShape = e, this.dispatchLayout = { x: [2], y: [1], z: [0, 3] }; let s = (o && this.outputShape[1] % 4 === 0 || !o && t10 % 4 === 0) && this.outputShape[2] % 4 === 0; @@ -28636,7 +28636,7 @@ var px = class { getUserCode() { let e = this.outputComponent; return ` - ${mv(false, this.transposeB, false, false, false, e)} + ${Jv(false, this.transposeB, false, false, false, e)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -28644,33 +28644,33 @@ var px = class { // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${e}; i = i + 1) { - ${oo("&result[flatIndex + i]", `${e > 1 ? "value[i]" : "value"}`, "float32")} + ${Qr("&result[flatIndex + i]", `${e > 1 ? "value[i]" : "value"}`, "float32")} } } } - ${e === 4 ? Fp(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner) : Pp(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner)} + ${e === 4 ? _p(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner) : Ep(this.elementsPerThread, this.workgroupSize, this.transposeA, 32, true, this.splitedDimInner)} `; } }; -var lx = class { +var Jg = class { constructor(e, t10 = null, o = null, n = null) { this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.addBias = t10 != null, this.hasPreluActivationWeights = n != null, this.activation = o, this.addBias && this.variableNames.push("bias"), this.hasPreluActivationWeights && this.variableNames.push("preluActivationWeights"), this.shaderKey = `biasActivation_${o}`; } getUserCode() { return ` - ${gr(this.activation, this.hasPreluActivationWeights)} + ${dr(this.activation, this.hasPreluActivationWeights)} ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${no(this.addBias, this.activation)} + ${Zr(this.addBias, this.activation)} setOutputAtIndex(index, value); } } `; } }; -var cx = class { +var ex = class { constructor(e) { this.variableNames = [], this.outputShape = [], this.uniforms = "value : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "fill"; } @@ -28684,42 +28684,42 @@ var cx = class { `; } }; -function Nt(r16) { - let { backend: e, attrs: t10 } = r16, { shape: o, value: n } = t10, { dtype: s } = t10; +function vt(r15) { + let { backend: e, attrs: t10 } = r15, { shape: o, value: n } = t10, { dtype: s } = t10; if (s = s || y.inferDtype(n), s === "string") { let a = y.getArrayFromDType(s, y.sizeFromShape(o)); return a.fill(n), e.makeTensorInfo(o, s, a); } else { - let a = new cx(o), i = [{ type: "float32", data: [n] }]; + let a = new ex(o), i = [{ type: "float32", data: [n] }]; return e.runWebGPUProgram(a, [], s, i); } } -var Kz = { kernelName: da, backendName: "webgpu", kernelFunc: Nt }; -function le(r16) { - let { inputs: e, attrs: t10 } = r16, { x: o } = e, { shape: n } = t10, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s), i = y.sizeFromShape(a); - return y.assert(s === i, () => `The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`), r16.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; +var iz = { kernelName: sa, backendName: "webgpu", kernelFunc: vt }; +function pe(r15) { + let { inputs: e, attrs: t10 } = r15, { x: o } = e, { shape: n } = t10, s = y.sizeFromShape(o.shape), a = y.inferFromImplicitShape(n, s), i = y.sizeFromShape(a); + return y.assert(s === i, () => `The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`), r15.backend.incRef(o.dataId), { dataId: o.dataId, shape: a, dtype: o.dtype }; } -var qz = { kernelName: Ca, backendName: "webgpu", kernelFunc: le }; -function Op({ a: r16, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { - let u = r16.shape.length, l = e.shape.length, c = t10 ? r16.shape[u - 2] : r16.shape[u - 1], m = o ? e.shape[l - 1] : e.shape[l - 2], d = t10 ? r16.shape[u - 1] : r16.shape[u - 2], f = o ? e.shape[l - 2] : e.shape[l - 1], h = r16.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = kr.assertAndGetBroadcastShape(r16.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); - y.assert(c === m, () => `Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r16.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); - let k = t10 ? [x, c, d] : [x, d, c], T = o ? [b, f, m] : [b, m, f], E = le({ inputs: { x: r16 }, backend: n, attrs: { shape: k } }), R = le({ inputs: { x: e }, backend: n, attrs: { shape: T } }), D = [E, R], F = Math.max(x, b), O = [E, R], M = [{ type: "int32", data: [d] }, { type: "int32", data: [f] }, { type: "int32", data: [c] }], L, B, z = [F, d, f], U = A().get("WEBGPU_MATMUL_PROGRAM_TYPE"); +var uz = { kernelName: da, backendName: "webgpu", kernelFunc: pe }; +function $p({ a: r15, b: e, transposeA: t10, transposeB: o, backend: n, bias: s = null, preluActivationWeights: a = null, leakyreluAlpha: i = 0, activation: p = null }) { + let u = r15.shape.length, c = e.shape.length, l = t10 ? r15.shape[u - 2] : r15.shape[u - 1], m = o ? e.shape[c - 1] : e.shape[c - 2], d = t10 ? r15.shape[u - 1] : r15.shape[u - 2], f = o ? e.shape[c - 2] : e.shape[c - 1], h = r15.shape.slice(0, -2), g = e.shape.slice(0, -2), x = y.sizeFromShape(h), b = y.sizeFromShape(g), S = Sr.assertAndGetBroadcastShape(r15.shape.slice(0, -2), e.shape.slice(0, -2)).concat([d, f]); + y.assert(l === m, () => `Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r15.shape} and ${e.shape} and transposeA=${t10} and transposeB=${o} must match.`); + let k = t10 ? [x, l, d] : [x, d, l], _ = o ? [b, f, m] : [b, m, f], $ = pe({ inputs: { x: r15 }, backend: n, attrs: { shape: k } }), R = pe({ inputs: { x: e }, backend: n, attrs: { shape: _ } }), D = [$, R], P = Math.max(x, b), O = [$, R], M = [{ type: "int32", data: [d] }, { type: "int32", data: [f] }, { type: "int32", data: [l] }], L, B, z = [P, d, f], U = A().get("WEBGPU_MATMUL_PROGRAM_TYPE"); if (U < 0) { - let q = A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), Y = q > 0 ? q : n.thresholdToIncreaseWorkgroups, J = F * Math.ceil(d / 32) * Math.ceil(f / 32); - J <= Y || d <= 8 && J <= Y * 2 ? F * d * f <= 128 ? U = pn.MatMulReduceProgram : F === 1 && m >= 2e3 ? U = pn.MatMulSplitKProgram : U = pn.MatMulSmallOutputSizeProgram : U = pn.MatMulPackedProgram; + let q = A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), Y = q > 0 ? q : n.thresholdToIncreaseWorkgroups, J = P * Math.ceil(d / 32) * Math.ceil(f / 32); + J <= Y || d <= 8 && J <= Y * 2 ? P * d * f <= 128 ? U = Mo.MatMulReduceProgram : P === 1 && m >= 2e3 ? U = Mo.MatMulSplitKProgram : U = Mo.MatMulSmallOutputSizeProgram : U = Mo.MatMulPackedProgram; } switch (U) { - case pn.MatMulReduceProgram: - L = new ix(z, t10, o, s, p, a); + case Mo.MatMulReduceProgram: + L = new Yg(z, t10, o, s, p, a); break; - case pn.MatMulSplitKProgram: { - if (B = Nt({ backend: n, attrs: { shape: z, value: 0, dtype: r16.dtype } }), L = new px(z, m, t10, o), s || p) { - B = n.runWebGPUProgram(L, O, r16.dtype, M, B); - let Y = new lx(B.shape, s, p, a), J = null, re = [B]; + case Mo.MatMulSplitKProgram: { + if (B = vt({ backend: n, attrs: { shape: z, value: 0, dtype: r15.dtype } }), L = new Zg(z, m, t10, o), s || p) { + B = n.runWebGPUProgram(L, O, r15.dtype, M, B); + let Y = new Jg(B.shape, s, p, a), J = null, re = [B]; s && re.push(s), a && re.push(a), p === "leakyrelu" && (J = [{ type: "float32", data: [i] }], Y.uniforms += " alpha : f32,"); let ne = n.runWebGPUProgram(Y, re, B.dtype, J); D.push(B); - let ee = le({ inputs: { x: ne }, backend: n, attrs: { shape: S } }); + let ee = pe({ inputs: { x: ne }, backend: n, attrs: { shape: S } }); D.push(ne); for (let oe of D) n.disposeData(oe.dataId); @@ -28727,37 +28727,37 @@ function Op({ a: r16, b: e, transposeA: t10, transposeB: o, backend: n, bias: s } break; } - case pn.MatMulSmallOutputSizeProgram: - L = new ux(k, T, z, t10, o, s, p, a); + case Mo.MatMulSmallOutputSizeProgram: + L = new Qg(k, _, z, t10, o, s, p, a); break; - case pn.MatMulPackedProgram: + case Mo.MatMulPackedProgram: let q = n.adapterInfo.isIntel(); - L = new ax(k, z, t10, o, s, p, a, q); + L = new Xg(k, z, t10, o, s, p, a, q); break; default: throw new Error(`Unsupported MatMulProgramType ${U}.`); } - s && O.push(s), a && O.push(a), p === "leakyrelu" && (M.push({ type: "float32", data: [i] }), L.uniforms += " alpha : f32,"), B = n.runWebGPUProgram(L, O, r16.dtype, M, B); - let j = le({ inputs: { x: B }, backend: n, attrs: { shape: S } }); + s && O.push(s), a && O.push(a), p === "leakyrelu" && (M.push({ type: "float32", data: [i] }), L.uniforms += " alpha : f32,"), B = n.runWebGPUProgram(L, O, r15.dtype, M, B); + let j = pe({ inputs: { x: B }, backend: n, attrs: { shape: S } }); D.push(B); for (let q of D) n.disposeData(q.dataId); return j; } -function hpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: l, leakyreluAlpha: c } = o; - return Op({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: c, activation: l }); +function Yie(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s, bias: a, preluActivationWeights: i } = e, { transposeA: p, transposeB: u, activation: c, leakyreluAlpha: l } = o; + return $p({ a: n, b: s, transposeA: p, transposeB: u, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: l, activation: c }); } -var jz = { kernelName: qo, backendName: "webgpu", kernelFunc: hpe }; -var Im = class { +var pz = { kernelName: So, backendName: "webgpu", kernelFunc: Yie }; +var gm = class { constructor(e, t10, o) { - this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.workgroupSize = [128, 1, 1], this.size = true, this.outputShape = C.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `binaryOpComplex_${e}`, this.op = e; + this.variableNames = ["AReal", "AImag", "BReal", "BImag"], this.workgroupSize = [128, 1, 1], this.size = true, this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `binaryOpComplex_${e}`, this.op = e; } getUserCode() { return ` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${ec(this.op, false)} + ${Xc(this.op, false)} } ${G("index")} { @@ -28772,9 +28772,9 @@ var Im = class { `; } }; -var Di = class { +var Ii = class { constructor(e, t10, o) { - if (this.size = true, this.variableNames = ["A", "B"], this.outputShape = C.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(this.outputShape), this.op = e, this.useSharedMemoryWithA = t10.length <= 1 && o.length > 1 && t10[0] < 128, this.useSharedMemoryWithB = o.length <= 1 && t10.length > 1 && o[0] < 128, this.useSharedMemoryWithA || this.useSharedMemoryWithB) + if (this.size = true, this.variableNames = ["A", "B"], this.outputShape = w.assertAndGetBroadcastShape(t10, o), this.dispatchLayout = X(this.outputShape), this.op = e, this.useSharedMemoryWithA = t10.length <= 1 && o.length > 1 && t10[0] < 128, this.useSharedMemoryWithB = o.length <= 1 && t10.length > 1 && o[0] < 128, this.useSharedMemoryWithA || this.useSharedMemoryWithB) this.outputComponent = 1, this.variableComponents = [1, 1], this.lastDimensionSize = this.useSharedMemoryWithB ? o[0] : t10[0], this.shaderKey = `binary_${e}_${this.lastDimensionSize}`, this.type = "shared", this.workgroupSize = [256, 1, 1]; else { let n = t10.length > 0 && t10[t10.length - 1] % 4 === 0, s = o.length > 0 && o[o.length - 1] % 4 === 0; @@ -28785,7 +28785,7 @@ var Di = class { getUserCode() { let e, t10 = this.outputComponent === 4 ? "vec4" : "f32", o = ` fn binaryOperation(a : ${t10}, b : ${t10}) -> ${t10} { - ${ec(this.op, this.outputComponent === 4)} + ${Xc(this.op, this.outputComponent === 4)} }; `; if (this.type === "shared") { @@ -28825,17 +28825,17 @@ var Di = class { return e; } }; -function Pt(r16) { - let { inputs: e } = r16, { x: t10 } = e; - return r16.backend.incRef(t10.dataId), { dataId: t10.dataId, shape: t10.shape, dtype: t10.dtype }; +function At(r15) { + let { inputs: e } = r15, { x: t10 } = e; + return r15.backend.incRef(t10.dataId), { dataId: t10.dataId, shape: t10.shape, dtype: t10.dtype }; } -var Xz = { kernelName: vo, backendName: "webgpu", kernelFunc: Pt }; -function Uo(r16) { - let { inputs: e, backend: t10 } = r16, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.tensorMap.get(s.dataId), i = Pt({ inputs: { x: o }, backend: t10 }), p = Pt({ inputs: { x: n }, backend: t10 }); +var cz = { kernelName: Co, backendName: "webgpu", kernelFunc: At }; +function xo(r15) { + let { inputs: e, backend: t10 } = r15, { real: o, imag: n } = e, s = t10.makeTensorInfo(o.shape, "complex64"), a = t10.tensorMap.get(s.dataId), i = At({ inputs: { x: o }, backend: t10 }), p = At({ inputs: { x: n }, backend: t10 }); return a.complexTensorInfos = { real: i, imag: p }, s; } -var Yz = { kernelName: ei, backendName: "webgpu", kernelFunc: Uo }; -var so = class { +var lz = { kernelName: Di, backendName: "webgpu", kernelFunc: xo }; +var Jr = class { constructor(e, t10, o = "") { this.variableNames = ["A"], this.size = true; let n = 128; @@ -28844,7 +28844,7 @@ var so = class { getUserCode() { return ` fn unaryOperation(a : f32) -> f32 { - ${Ri(this.op, false)} + ${Si(this.op, false)} } ${G("index")} { if (index < uniforms.size) { @@ -28855,1099 +28855,53 @@ var so = class { `; } }; -function ye({ opType: r16, cpuKernelImpl: e, dtype: t10 }) { +function ye({ opType: r15, cpuKernelImpl: e, dtype: t10 }) { return ({ inputs: o, backend: n }) => { let { x: s } = o, a = n, i = t10 || s.dtype; if (a.shouldExecuteOnCPU([s]) && e != null) { - let u = a.tensorMap.get(s.dataId), l = e(u.values, i); - return a.makeTensorInfo(s.shape, i, l); + let u = a.tensorMap.get(s.dataId), c = e(u.values, i); + return a.makeTensorInfo(s.shape, i, c); } - let p = new so(s.shape, r16); + let p = new Jr(s.shape, r15); return a.runWebGPUProgram(p, [s], i); }; } -function tt({ opType: r16, cpuKernelImpl: e, supportsComplex: t10 = false, dtype: o }) { +function et({ opType: r15, cpuKernelImpl: e, supportsComplex: t10 = false, dtype: o }) { return ({ inputs: n, backend: s }) => { let { a, b: i } = n, p = s; if (t10 && a.dtype === "complex64") { - let c = p.tensorMap.get(a.dataId), m = p.tensorMap.get(i.dataId), d, f; - if (r16 !== fe.MUL) - [d, f] = [[c.complexTensorInfos.real, m.complexTensorInfos.real], [c.complexTensorInfos.imag, m.complexTensorInfos.imag]].map((g) => { - let [x, b] = g, w = { dataId: x.dataId, dtype: x.dtype, shape: a.shape }, S = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Di(r16, a.shape, i.shape); - return p.runWebGPUProgram(k, [w, S], pt(x.dtype, b.dtype)); + let l = p.tensorMap.get(a.dataId), m = p.tensorMap.get(i.dataId), d, f; + if (r15 !== fe.MUL) + [d, f] = [[l.complexTensorInfos.real, m.complexTensorInfos.real], [l.complexTensorInfos.imag, m.complexTensorInfos.imag]].map((g) => { + let [x, b] = g, C = { dataId: x.dataId, dtype: x.dtype, shape: a.shape }, S = { dataId: b.dataId, dtype: b.dtype, shape: i.shape }, k = new Ii(r15, a.shape, i.shape); + return p.runWebGPUProgram(k, [C, S], dt(x.dtype, b.dtype)); }); else { - let g = new Im(fe.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), x = new Im(fe.COMPLEX_MULTIPLY_IMAG, a.shape, i.shape), b = [{ dataId: c.complexTensorInfos.real.dataId, dtype: c.complexTensorInfos.real.dtype, shape: a.shape }, { dataId: c.complexTensorInfos.imag.dataId, dtype: c.complexTensorInfos.imag.dtype, shape: a.shape }, { dataId: m.complexTensorInfos.real.dataId, dtype: m.complexTensorInfos.real.dtype, shape: i.shape }, { dataId: m.complexTensorInfos.imag.dataId, dtype: m.complexTensorInfos.imag.dtype, shape: i.shape }]; + let g = new gm(fe.COMPLEX_MULTIPLY_REAL, a.shape, i.shape), x = new gm(fe.COMPLEX_MULTIPLY_IMAG, a.shape, i.shape), b = [{ 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 }, { dataId: m.complexTensorInfos.real.dataId, dtype: m.complexTensorInfos.real.dtype, shape: i.shape }, { dataId: m.complexTensorInfos.imag.dataId, dtype: m.complexTensorInfos.imag.dtype, shape: i.shape }]; d = p.runWebGPUProgram(g, b, "float32"), f = p.runWebGPUProgram(x, b, "float32"); } - let h = Uo({ inputs: { real: d, imag: f }, backend: p }); + let h = xo({ inputs: { real: d, imag: f }, backend: p }); return p.disposeData(d.dataId), p.disposeData(f.dataId), h; } - let u = o || pt(a.dtype, i.dtype); + let u = o || dt(a.dtype, i.dtype); if ((a.dtype === "string" || i.dtype === "string" || p.shouldExecuteOnCPU([a, i])) && e != null) { - let c = p.tensorMap.get(a.dataId).values, m = p.tensorMap.get(i.dataId).values, d = a.dtype === "string" ? C.fromUint8ToStringArray(c) : c, f = a.dtype === "string" ? C.fromUint8ToStringArray(m) : m, [h, g] = e(a.shape, i.shape, d, f, u); + let l = p.tensorMap.get(a.dataId).values, m = p.tensorMap.get(i.dataId).values, d = a.dtype === "string" ? w.fromUint8ToStringArray(l) : l, f = a.dtype === "string" ? w.fromUint8ToStringArray(m) : m, [h, g] = e(a.shape, i.shape, d, f, u); return p.makeTensorInfo(g, u, h); } - let l = new Di(r16, a.shape, i.shape); - return p.runWebGPUProgram(l, [a, i], u); - }; -} -var Lv = {}; -qe(Lv, { addImpl: () => hv, bincountImpl: () => Jz, bincountReduceImpl: () => eV, bitwiseAndImpl: () => gv, castImpl: () => fv, ceilImpl: () => xv, concatImpl: () => tV, equalImpl: () => yv, expImpl: () => bv, expm1Impl: () => Cv, floorDivImpl: () => Sv, floorImpl: () => wv, gatherNdImpl: () => rV, gatherV2Impl: () => oV, greaterEqualImpl: () => vv, greaterImpl: () => Iv, lessEqualImpl: () => Nv, lessImpl: () => kv, linSpaceImpl: () => nV, logImpl: () => Tv, maxImpl: () => sV, maximumImpl: () => _v, minimumImpl: () => Ev, multiplyImpl: () => km, negImpl: () => aV, notEqualImpl: () => $v, prodImpl: () => iV, raggedGatherImpl: () => pV, raggedRangeImpl: () => cV, raggedTensorToTensorImpl: () => fV, rangeImpl: () => hV, rsqrtImpl: () => Av, scatterImpl: () => gV, sigmoidImpl: () => xV, simpleAbsImpl: () => Qz, sliceImpl: () => yV, sparseFillEmptyRowsImpl: () => bV, sparseReshapeImpl: () => CV, sparseSegmentReductionImpl: () => wV, sqrtImpl: () => SV, squaredDifferenceImpl: () => Fv, staticRegexReplaceImpl: () => Pv, stridedSliceImpl: () => IV, stringNGramsImpl: () => vV, stringSplitImpl: () => kV, stringToHashBucketFastImpl: () => NV, subImpl: () => Mv, tileImpl: () => TV, topKImpl: () => EV, transposeImpl: () => Rv, uniqueImpl: () => $V }); -function Ai(r16, e) { - Array.isArray(r16) || (r16 = [r16]), r16.forEach((t10) => { - t10 != null && y.assert(t10.dtype !== "complex64", () => `${e} does not support complex64 tensors in the CPU backend.`); - }); -} -function Qz(r16) { - let e = new Float32Array(r16.length); - for (let t10 = 0; t10 < r16.length; ++t10) - e[t10] = Math.abs(r16[t10]); - return e; -} -function ht(r16) { - return (e, t10, o, n, s) => { - let a = C.assertAndGetBroadcastShape(e, t10), i = a.length, p = y.computeStrides(a), u = y.sizeFromShape(a), l = y.getTypedArrayFromDType(s, u), c = e.length, m = t10.length, d = y.computeStrides(e), f = y.computeStrides(t10), h = C.getBroadcastDims(e, a), g = C.getBroadcastDims(t10, a); - if (h.length + g.length === 0) - for (let x = 0; x < l.length; ++x) - l[x] = r16(o[x % o.length], n[x % n.length]); - else - for (let x = 0; x < l.length; ++x) { - let b = y.indexToLoc(x, i, p), w = b.slice(-c); - h.forEach((E) => w[E] = 0); - let S = y.locToIndex(w, c, d), k = b.slice(-m); - g.forEach((E) => k[E] = 0); - let T = y.locToIndex(k, m, f); - l[x] = r16(o[S], n[T]); - } - return [l, a]; - }; -} -function tc(r16) { - let { inputs: e, backend: t10 } = r16, { real: o, imag: n } = e, s = t10.data.get(o.dataId).values, a = t10.data.get(n.dataId).values, i = t10.makeTensorInfo(o.shape, "complex64"), p = t10.data.get(i.dataId); - return p.complexTensorInfos = { real: t10.makeTensorInfo(o.shape, "float32", s), imag: t10.makeTensorInfo(n.shape, "float32", a) }, i; -} -function mx(r16, e, t10 = "float32") { - if (t10 === "complex64") { - let n = mx(r16, e, "float32"), s = mx(r16, e, "float32"); - return tc({ inputs: { real: n, imag: s }, backend: r16 }); - } - let o = y.makeZerosTypedArray(y.sizeFromShape(e), t10); - return r16.makeTensorInfo(e, t10, o); -} -function dv(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; - return t10.incRef(o.dataId), { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; -} -function Zz(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.data.get(o.dataId).complexTensorInfos.real, s = t10.data.get(n.dataId).values; - return t10.makeTensorInfo(n.shape, n.dtype, s); -} -function fv(r16, e, t10, o) { - if (o === "int32") { - let n = Int32Array.from(r16); - return [e, "int32", n]; - } - if (o === "bool") { - let n = y.toTypedArray([0], t10), [s, a] = ht((i, p) => i !== p ? 1 : 0)(e, [], r16, n, "bool"); - return [a, "bool", s]; - } - throw new Error(`Error in Cast: failed to cast ${t10} to ${o}`); -} -function vm(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dtype: s } = o; - if (s === "complex64") { - if (n.dtype === "complex64") - return dv({ inputs: { x: n }, backend: t10 }); - let l = mx(t10, n.shape, n.dtype), c = vm({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), m = tc({ inputs: { real: c, imag: l }, backend: t10 }); - return t10.disposeIntermediateTensorInfo(l), t10.disposeIntermediateTensorInfo(c), m; - } - if (n.dtype === "complex64") { - let l = Zz({ inputs: { input: n }, backend: t10 }), c = vm({ inputs: { x: l }, backend: t10, attrs: { dtype: s } }); - return t10.disposeIntermediateTensorInfo(l), c; - } - if (!y.hasEncodingLoss(n.dtype, s)) { - let l = dv({ inputs: { x: n }, backend: t10 }); - return { dataId: l.dataId, shape: l.shape, dtype: s }; - } - let a = t10.data.get(n.dataId).values, [i, p, u] = fv(a, n.shape, n.dtype, s); - return t10.makeTensorInfo(i, p, u); -} -function wt(r16, e, t10, o) { - return t10 == null ? ({ inputs: n, backend: s }) => { - let { a, b: i } = n, p = s; - Ai([a, i], r16); - let u = p.data.get(a.dataId).values, l = p.data.get(i.dataId).values, c = a.dtype === "string" ? C.fromUint8ToStringArray(u) : u, m = a.dtype === "string" ? C.fromUint8ToStringArray(l) : l, d = o || a.dtype, [f, h] = e(a.shape, i.shape, c, m, d); - return p.makeTensorInfo(h, d, f); - } : ({ inputs: n, backend: s }) => { - let { a, b: i } = n, p = s; - if (a.dtype === "complex64" || i.dtype === "complex64") { - let u = vm({ inputs: { x: a }, backend: p, attrs: { dtype: "complex64" } }), l = p.data.get(u.dataId), c = l.complexTensorInfos.real, m = l.complexTensorInfos.imag, d = p.data.get(c.dataId).values, f = p.data.get(m.dataId).values, h = vm({ inputs: { x: i }, backend: p, attrs: { dtype: "complex64" } }), g = p.data.get(h.dataId), x = g.complexTensorInfos.real, b = g.complexTensorInfos.imag, w = p.data.get(x.dataId).values, S = p.data.get(b.dataId).values, [k, T, E] = t10(a.shape, i.shape, d, f, w, S), R = p.makeTensorInfo(E, "float32", k), D = p.makeTensorInfo(E, "float32", T), F = tc({ inputs: { real: R, imag: D }, backend: p }); - return p.disposeIntermediateTensorInfo(u), p.disposeIntermediateTensorInfo(h), p.disposeIntermediateTensorInfo(R), p.disposeIntermediateTensorInfo(D), F; - } else { - let u = p.data.get(a.dataId).values, l = p.data.get(i.dataId).values, c = o || a.dtype, [m, d] = e(a.shape, i.shape, u, l, c); - return p.makeTensorInfo(d, c, m); - } - }; -} -function rc(r16) { - return (e, t10, o, n, s, a) => { - let i = C.assertAndGetBroadcastShape(e, t10), p = y.sizeFromShape(i), u = i.length, l = y.computeStrides(i), c = y.getTypedArrayFromDType("float32", p), m = y.getTypedArrayFromDType("float32", p), d = C.getBroadcastDims(e, i), f = C.getBroadcastDims(t10, i), h = C.mergeRealAndImagArrays(o, n), g = C.mergeRealAndImagArrays(s, a), x = e.length, b = y.computeStrides(e), w = t10.length, S = y.computeStrides(t10); - if (d.length + f.length === 0) - for (let k = 0; k < c.length; k++) { - let T = k % h.length, E = k % g.length, R = r16(h[T * 2], h[T * 2 + 1], g[E * 2], g[E * 2 + 1]); - c[k] = R.real, m[k] = R.imag; - } - else - for (let k = 0; k < c.length; k++) { - let T = y.indexToLoc(k, u, l), E = T.slice(-x); - d.forEach((M) => E[M] = 0); - let R = y.locToIndex(E, x, b), D = T.slice(-w); - f.forEach((M) => D[M] = 0); - let F = y.locToIndex(D, w, S), O = r16(h[R * 2], h[R * 2 + 1], g[F * 2], g[F * 2 + 1]); - c[k] = O.real, m[k] = O.imag; - } - return [c, m, i]; + let c = new Ii(r15, a.shape, i.shape); + return p.runWebGPUProgram(c, [a, i], u); }; } -var hv = ht((r16, e) => r16 + e); -var gpe = rc((r16, e, t10, o) => ({ real: r16 + t10, imag: e + o })); -var uLt = wt(Rr, hv, gpe); -function Jz(r16, e, t10, o, n) { - let s = y.sizeFromShape(o), a = y.makeZerosTypedArray(n, t10); - for (let i = 0; i < r16.length; i++) { - let p = r16[i]; - if (p < 0) - throw new Error("Input x must be non-negative!"); - p >= n || (s > 0 ? a[p] += e[i] : a[p] += 1); - } - return a; -} -function eV(r16, e, t10, o = false) { - let n = r16.shape[0], s = r16.shape[1], a = ie([n, t10], e.dtype); - for (let i = 0; i < n; i++) - for (let p = 0; p < s; p++) { - let u = r16.get(i, p); - if (u < 0) - throw new Error("Input x must be non-negative!"); - u >= t10 || (o ? a.set(1, i, u) : e.size > 0 ? a.set(a.get(i, u) + e.get(i, p), i, u) : a.set(a.get(i, u) + 1, i, u)); - } - return a; -} -var gv = ht((r16, e) => r16 & e); -var hLt = wt(_n, gv); -function Qt(r16) { - return (e, t10, o) => { - let n = y.getArrayFromDType(t10, e.length); - for (let s = 0; s < e.length; ++s) - n[s] = r16(e[s], o); - return n; - }; -} -function dx(r16, e, t10) { - let o = Qt(e); - return Wr(r16, o, t10); -} -function Wr(r16, e, t10) { - return ({ inputs: o, attrs: n, backend: s }) => { - let { x: a } = o; - Ai(a, r16); - let i = s, p = i.data.get(a.dataId).values, u; - if (a.dtype === "string") { - if (!Array.isArray(p)) - throw new Error("String tensor's value was not an instance of Array"); - u = C.fromUint8ToStringArray(p); - } else - u = p; - let l = t10 || a.dtype, c = e(u, l, n); - return i.makeTensorInfo(a.shape, l, c); - }; -} -var xv = Qt((r16) => Math.ceil(r16)); -var NLt = Wr(go, xv); -function tV(r16, e, t10, o) { - let n = y.getArrayFromDType(t10, y.sizeFromShape(e)); - if (o && t10 !== "string") { - let s = 0; - r16.forEach((a) => { - let i = y.sizeFromShape(a.shape); - n.set(a.vals, s), s += i; - }); - } else { - let s = 0; - r16.forEach((a) => { - let i = t10 === "string" ? C.fromUint8ToStringArray(a.vals) : a.vals, p = 0; - for (let u = 0; u < a.shape[0]; ++u) { - let l = u * e[1] + s; - for (let c = 0; c < a.shape[1]; ++c) - n[l + c] = i[p++]; - } - s += a.shape[1]; - }); - } - return n; -} -var yv = ht((r16, e) => r16 === e ? 1 : 0); -var ALt = wt(xo, yv, null, "bool"); -var bv = Qt((r16) => Math.exp(r16)); -var LLt = Wr(yo, bv, "float32"); -var Cv = Qt((r16) => Math.expm1(r16)); -var ULt = Wr(bo, Cv); -var wv = Qt((r16) => Math.floor(r16)); -var jLt = Wr(Co, wv); -var Sv = ht((r16, e) => Math.floor(r16 / e)); -var JLt = wt(wo, Sv, null, "int32"); -function rV(r16, e, t10, o, n, s, a, i, p) { - let u = ie([o, s], t10); - for (let l = 0; l < o; l++) { - let c = [], m = 0; - for (let d = 0; d < n; d++) { - let f = r16[l * n + d]; - m += f * a[d], c.push(f); - } - if (m < 0 || m >= p / s) - throw new Error(`Invalid indices: ${c} does not index into ${i}`); - for (let d = 0; d < s; d++) - u.values[l * s + d] = e.get(...e.indexToLoc(m * s + d)); - } - return u; -} -function oV(r16, e, t10) { - let o = ie(t10, r16.dtype); - for (let n = 0; n < o.size; ++n) { - let a = o.indexToLoc(n).slice(), i = a[0], p = a[2], u = e.locToIndex([i, p]); - a[2] = e.values[u]; - let l = r16.locToIndex(a); - 0 <= l && l < r16.values.length && (o.values[n] = r16.values[l]); - } - return o; -} -var Iv = ht((r16, e) => r16 > e ? 1 : 0); -var uBt = wt(So, Iv, null, "bool"); -var vv = ht((r16, e) => r16 >= e ? 1 : 0); -var dBt = wt(Io, vv, null, "bool"); -var kv = ht((r16, e) => r16 < e ? 1 : 0); -var yBt = wt(ko, kv, null, "bool"); -var Nv = ht((r16, e) => r16 <= e ? 1 : 0); -var IBt = wt(No, Nv, null, "bool"); -function nV(r16, e, t10) { - let o = (e - r16) / (t10 - 1), n = y.makeZerosTypedArray(t10, "float32"); - n[0] = r16; - for (let s = 1; s < n.length; s++) - n[s] = n[s - 1] + o; - return n; -} -var Tv = Qt((r16) => Math.log(r16)); -var $Bt = Wr(To, Tv); -function sV(r16, e, t10, o) { - let n = y.getTypedArrayFromDType(o, y.sizeFromShape(t10)); - for (let s = 0; s < n.length; ++s) { - let a = s * e, i = r16[a]; - for (let p = 0; p < e; ++p) { - let u = r16[a + p]; - (Number.isNaN(u) || u > i) && (i = u); - } - n[s] = i; - } - return n; -} -var _v = ht((r16, e) => Math.max(r16, e)); -var MBt = wt(_o, _v); -var Ev = ht((r16, e) => Math.min(r16, e)); -var WBt = wt(Eo, Ev); -var km = ht((r16, e) => r16 * e); -var xpe = rc((r16, e, t10, o) => ({ real: r16 * t10 - e * o, imag: r16 * o + e * t10 })); -var qBt = wt($o, km, xpe); -function aV(r16, e, t10) { - let o = y.createScalarValue(-1, t10); - return km([], e, o, r16, t10); -} -var $v = ht((r16, e) => r16 !== e ? 1 : 0); -var rzt = wt(Ro, $v, null, "bool"); -function Rv(r16, e, t10, o, n) { - let s = e.length, a = y.sizeFromShape(e), i = y.computeStrides(e), p = y.computeStrides(n), u = y.getTypedArrayFromDType(t10, y.sizeFromShape(n)); - for (let l = 0; l < a; ++l) { - let c = y.indexToLoc(l, s, i), m = new Array(c.length); - for (let f = 0; f < m.length; f++) - m[f] = c[o[f]]; - let d = y.locToIndex(m, s, p); - u[d] = r16[l]; - } - return u; -} -function iV(r16, e, t10, o) { - let [n, s] = C.computeOutAndReduceShapes(r16, o), a = pt(e, "int32"), i = y.makeZerosTypedArray(y.sizeFromShape(n), a), p = y.sizeFromShape(s); - for (let u = 0; u < i.length; ++u) { - let l = u * p, c = 1; - for (let m = 0; m < p; ++m) - c *= t10[l + m]; - i[u] = c; - } - return { outVals: i, outShape: n, outDtype: a }; -} -function ype(r16, e, t10) { - r16.forEach((o, n) => { - if (o < 0 || o >= t10) { - let s = y.indexToLoc(n, e.length, y.computeStrides(e)).join(","); - throw new Error(`indices[${s}] = ${o} is not in [0, ${t10})`); - } - }); -} -function bpe(r16, e) { - for (let t10 = 0; t10 < r16.length; ++t10) { - let o = r16[t10], n = t10 === r16.length - 1 ? e : r16[t10 + 1].length; - if (o.length === 0) - throw new Error("Ragged splits may not be empty"); - if (o[0] < 0) - throw new Error("Ragged splits must be non-negative"); - if (o[o.length - 1] > n) - throw new Error("Ragged splits must not point past values"); - for (let s = 1; s < o.length; ++s) - if (o[s - 1] > o[s]) - throw new Error("Ragged splits must be sorted in ascending order"); - } -} -function Cpe(r16, e, t10, o) { - let n = [], s = 0, a = e.length - 1 + t10.length, i = new Array(a).fill(null).map(() => [0]); - bpe(t10, o); - let p = 1; - for (let u = 0; u < e.length - 1; ++u) { - p *= e[u]; - let l = e[u + 1]; - for (let c = 1; c < p + 1; ++c) - i[u].push(c * l); - } - for (let u = 0; u < r16.length; ++u) { - let l = r16[u], c = r16[u] + 1; - for (let m = 0; m < t10.length; ++m) { - let d = t10[m], f = m + e.length - 1; - if (f >= 0) { - let h = i[f], g = h[h.length - 1] - d[l]; - for (let x = l; x < c; ++x) - i[f].push(d[x + 1] + g); - } - l = d[l], c = d[c]; - } - c !== l && (n.push([l, c]), s += c - l); - } - return { outSplits: i, valueSlices: n, numValues: s }; -} -function wpe(r16) { - let e = []; - for (let t10 = 0; t10 < r16.length; ++t10) { - let o = r16[t10].length, n = y.getArrayFromDType("int32", o); - e.push(n), r16[t10].forEach((s, a) => n[a] = s); - } - return e; -} -function uV(r16, e) { - let t10 = r16.slice(0, e); - for (; t10.length < e; ) - t10.push(1); - for (let o = e; o < r16.length; o++) - t10[e - 1] *= r16[o]; - return t10; -} -function Spe(r16, e, t10, o, n, s) { - let a = uV(e, 2)[1], i = uV(s, 2)[1], p = 0; - for (let u of t10) - for (let l = u[0]; l < u[1]; ++l) { - for (let c = 0; c < o; ++c) - n[p * i + c] = r16[l * a + c]; - ++p; - } -} -function Ipe(r16, e, t10, o, n) { - let s = e.slice(); - s[0] = n; - let a = y.getArrayFromDType(t10, y.sizeFromShape(s)), i = r16.length, p = i === 0 ? 0 : i / e[0]; - return Spe(r16, e, o, p, a, s), [a, s]; -} -function pV(r16, e, t10, o, n, s, a, i) { - if (r16.length === 0) - throw new Error("paramsNestedSplits must be non empty"); - if (e[0].length === 0) - throw new Error("Split tensors must not be scalars"); - let p = e[0][0] - 1; - if (ype(s, a, p), o.length === 0) - throw new Error("params.rank must be nonzero"); - let u = o[0], { outSplits: l, valueSlices: c, numValues: m } = Cpe(s, a, r16, u), d = wpe(l), f = Ipe(t10, o, n, c, m); - return [d, f[0], f[1]]; -} -var lV = 2147483647; -function cV(r16, e, t10, o, n, s, a) { - if (e.length > 1) - throw new Error("starts must be a scalar or vector"); - if (n.length > 1) - throw new Error("limits must be a scalar or vector"); - if (a.length > 1) - throw new Error("deltas must be a scalar or vector"); - let i = e.length === 0, p = n.length === 0, u = a.length === 0, l = []; - i || l.push(e[0]), p || l.push(n[0]), u || l.push(a[0]); - for (let g = 1; g < l.length; ++g) - if (l[g] !== l[g - 1]) - throw new Error("starts, limits, and deltas must have the same shape"); - let c = l.length === 0 ? 1 : l[0], m = y.getArrayFromDType("int32", c + 1); - m[0] = 0; - for (let g = 0; g < c; ++g) { - let x = i ? r16[0] : r16[g], b = p ? o[0] : o[g], w = u ? s[0] : s[g]; - if (w === 0) - throw new Error("Requires delta != 0"); - let S; - if (w > 0 && b < x || w < 0 && b > x) - S = 0; - else if (S = Math.ceil(Math.abs((b - x) / w)), S > lV) - throw new Error(`Requires ((limit - start) / delta) <= ${lV}`); - m[g + 1] = m[g] + S; - } - let d = m[c], f = y.getArrayFromDType(t10, d), h = 0; - for (let g = 0; g < c; ++g) { - let x = m[g + 1] - m[g], b = i ? r16[0] : r16[g], w = u ? s[0] : s[g]; - for (let S = 0; S < x; ++S) - f[h++] = b, b += w; - } - return [m, f]; -} -var ln = C.RowPartitionType; -var Dv = class r15 { - constructor(e, t10, o, n, s, a, i, p, u, l) { - this.shape = e, this.shapeShape = t10, this.values = o, this.valuesShape = n, this.valuesDType = s, this.defaultValue = a, this.defaultValueShape = i, this.rowPartitionValues = p, this.rowPartitionValuesShapes = u, this.rowPartitionTypes = C.getRowPartitionTypesHelper(l), this.raggedRank = C.getRaggedRank(this.rowPartitionTypes); - } - getRowPartitionTypeByDimension(e) { - return this.rowPartitionTypes[0] === ln.FIRST_DIM_SIZE ? this.rowPartitionTypes[e + 1] : this.rowPartitionTypes[e]; - } - getRowPartitionTensor(e) { - return this.rowPartitionTypes[0] === ln.FIRST_DIM_SIZE ? this.rowPartitionValues[e + 1] : this.rowPartitionValues[e]; - } - getMaxWidth(e) { - let t10 = this.getRowPartitionTensor(e - 1); - switch (this.getRowPartitionTypeByDimension(e - 1)) { - case ln.VALUE_ROWIDS: - return r15.getMaxWidthValueRowID(t10); - case ln.ROW_SPLITS: - return r15.getMaxWidthRowSplit(t10); - default: - throw new Error(`Cannot handle partition type ${ln[this.getRowPartitionTypeByDimension(e - 1)]}`); - } - } - static getMaxWidthRowSplit(e) { - let t10 = e.length; - if (t10 === 0 || t10 === 1) - return 0; - let o = 0; - for (let n = 0; n < t10 - 1; ++n) { - let s = e[n + 1] - e[n]; - s > o && (o = s); - } - return o; - } - static getMaxWidthValueRowID(e) { - let t10 = e.length; - if (t10 === 0) - return 0; - let o = 0, n = e[0], s = 0; - for (let a = 1; a < t10; ++a) { - let i = e[a]; - i !== n && (n = i, s = Math.max(a - o, s), o = a); - } - return Math.max(t10 - o, s); - } - tensorShapeFromTensor(e, t10, o = true) { - if (t10.length === 0) { - if (e[0] === -1) - return []; - throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1."); - } - return dV(e, o); - } - calculateOutputSize(e) { - let t10 = this.valuesShape, o = this.defaultValueShape; - C.validateDefaultValueShape(o, t10); - let n = this.tensorShapeFromTensor(this.shape, this.shapeShape), a = C.combineRaggedTensorToTensorShapes(this.raggedRank, n, t10); - a[0] < 0 && (a[0] = e); - for (let i = 1; i <= this.raggedRank; ++i) - a[i] < 0 && (a[i] = this.getMaxWidth(i)); - return a; - } - calculateFirstParentOutputIndex(e, t10, o) { - let n = Math.min(e, o), s = [], a = 0; - for (let i = 0; i < n; ++i, a += t10) - s.push(a); - for (let i = n; i < e; ++i) - s.push(-1); - return y.assert(s.length === e, () => "Final length of result must be equal to firstDimension."), s; - } - calculateOutputIndexRowSplit(e, t10, o, n) { - let s = e.length, a = []; - for (let i = 0; i < s - 1; ++i) { - let p = e[i + 1] - e[i], u = Math.min(n, p), l = t10[i]; - l === -1 && (u = 0); - for (let c = 0; c < u; ++c) - a.push(l), l += o; - for (let c = 0; c < p - u; ++c) - a.push(-1); - } - if (s > 0 && a.length !== e[s - 1]) - throw new Error("Invalid row split size."); - return a; - } - calculateOutputIndexValueRowID(e, t10, o, n) { - let s = e.length, a = []; - if (s === 0) - return []; - let i = 0, p = e[0]; - if (p >= t10.length) - throw new Error(`Got currentValueRowId=${p}, which is not less than ${t10.length}`); - let u = t10[p]; - a.push(u); - for (let l = 1; l < s; ++l) { - let c = e[l]; - if (c === p) - u >= 0 && (++i, i < n ? u += o : u = -1); - else { - if (i = 0, p = c, c >= t10.length) - throw new Error(`Got nextValueRowId=${c} which is not less than ${t10.length}`); - u = t10[c]; - } - a.push(u); - } - if (a.length !== e.length) - throw new Error("Invalid row ids."); - return a; - } - calculateOutputIndex(e, t10, o, n) { - let s = this.getRowPartitionTensor(e), a = this.getRowPartitionTypeByDimension(e); - switch (a) { - case ln.VALUE_ROWIDS: - return this.calculateOutputIndexValueRowID(s, t10, o, n); - case ln.ROW_SPLITS: - if (s.length - 1 > t10.length) - throw new Error(`Row partition size is greater than output size: ${s.length - 1} > ${t10.length}`); - return this.calculateOutputIndexRowSplit(s, t10, o, n); - default: - throw new Error(`Unsupported partition type: ${ln[a]}`); - } - } - getFirstDimensionSize() { - let e = this.rowPartitionValues[0]; - if (this.rowPartitionTypes.length === 0) - throw new Error("No row_partition_types given."); - let t10 = this.rowPartitionTypes[0]; - switch (t10) { - case ln.FIRST_DIM_SIZE: - return e[0]; - case ln.VALUE_ROWIDS: - throw new Error("Cannot handle VALUE_ROWIDS in first dimension."); - case ln.ROW_SPLITS: - return this.rowPartitionValuesShapes[0][0] - 1; - default: - throw new Error(`Cannot handle type ${ln[t10]}`); - } - } - compute() { - if (this.rowPartitionValues[0].length <= 0) - throw new Error("Invalid first partition input. Tensor requires at least one element."); - let t10 = this.getFirstDimensionSize(), o = this.calculateOutputSize(t10), n = new Array(this.raggedRank + 1); - n[n.length - 1] = 1; - for (let p = n.length - 2; p >= 0; --p) - n[p] = n[p + 1] * o[p + 1]; - let s = dV(o, false), a = y.getArrayFromDType(this.valuesDType, y.sizeFromShape(s)); - if (n[0] * o[0] > 0) { - let p = this.calculateFirstParentOutputIndex(t10, n[0], o[0]); - for (let u = 1; u <= this.raggedRank; ++u) - p = this.calculateOutputIndex(u - 1, p, n[u], o[u]); - this.setOutput(this.raggedRank, p, a, s); - } - return [s, a]; - } - setOutput(e, t10, o, n) { - if (o.length === 0) - return; - let s = this.values, a = o, i = n.slice(); - i = i.slice(e + 1); - let p = y.sizeFromShape(i), u = t10.length, l = this.defaultValue; - if (l.length !== p && l.length !== 1) { - let f = this.defaultValueShape; - De(() => { - let h = W(l, f); - l = Oa(h, i).dataSync(); - }); - } - let c = 0, m = 0, d = 0; - for (let f = 0; f <= u; ++f) { - let h = f < u ? t10[f] : -1; - if (h === d) { - ++d; - continue; - } - if (m < d) { - let g = s.subarray(c * p), x = a.subarray(m * p), b = (d - m) * p; - mV(x, g, b); - } - if (f >= u) { - let g = o.length; - h = Math.floor(g / p); - } - if (h > d) - if (this.defaultValue.length === 1) - a.subarray(d * p, h * p).fill(this.defaultValue[0]), d = h; - else - for (; h > d; ) { - let g = a.slice(d * p); - mV(g, l, p), ++d; - } - h < 0 ? (c = f + 1, m = d) : (c = f, m = d, d = m + 1); - } - } -}; -function mV(r16, e, t10) { - for (let o = 0; o < t10; o++) - r16[o] = e[o]; -} -function dV(r16, e) { - let t10 = []; - for (let o of r16) { - if (o < 0) { - if (!e) - throw new Error(`Dimension ${o} must be >= 0`); - if (o < -1) - throw new Error(`Dimension ${o} must be >= -1`); - o = -1; - } - t10.push(o); - } - return t10; -} -function fV(r16, e, t10, o, n, s, a, i, p, u) { - return new Dv(r16, e, t10, o, n, s, a, i, p, u).compute(); -} -function hV(r16, e, t10, o) { - let n = r16 === e, s = r16 < e && t10 < 0, a = e < r16 && t10 > 1; - if (n || s || a) - return y.makeZerosTypedArray(0, o); - let i = Math.abs(Math.ceil((e - r16) / t10)), p = y.makeZerosTypedArray(i, o); - e < r16 && t10 === 1 && (t10 = -1), p[0] = r16; - for (let u = 1; u < p.length; u++) - p[u] = p[u - 1] + t10; - return p; -} -var Av = Qt((r16) => 1 / Math.sqrt(r16)); -var Nzt = Wr(Do, Av); -function gV(r16, e, t10, o, n, s, a, i, p, u) { - let l = [o / n, n], c = r16.values, m = e.values; - if (o === 0) - return ie(t10, e.dtype); - let d = p instanceof Ge ? p : ie(l, e.dtype); - typeof p == "string" || typeof p == "number" ? d.values.fill(p) : typeof p == "boolean" && d.values.fill(+p); - for (let f = 0; f < s; f++) { - let h = [], g = 0; - for (let x = 0; x < a; x++) { - let b = c[f * a + x]; - h.push(b), g += b * i[x]; - } - if (g < 0 || g >= o / n) - throw new Error(`Invalid indices: ${h} does not index into ${t10}`); - for (let x = 0; x < n; x++) - u ? d.values[g * n + x] += m[f * n + x] : d.values[g * n + x] = e.rank === 0 ? m[0] : m[f * n + x]; - } - return d; -} -var xV = Qt((r16) => 1 / (1 + Math.exp(-r16))); -var Azt = dx(Ao, (r16) => 1 / (1 + Math.exp(-r16))); -function yV(r16, e, t10, o, n) { - let s = nt.isSliceContinous(o, e, t10), a = y.sizeFromShape(t10), i = y.computeStrides(o); - if (s) { - let c = nt.computeFlatOffset(e, i); - return n === "string" ? r16.slice(c, c + a) : r16.subarray(c, c + a); - } - let p = n === "string" ? C.fromUint8ToStringArray(r16) : r16, u = ie(o, n, p), l = ie(t10, n); - for (let c = 0; c < l.size; ++c) { - let m = l.indexToLoc(c), d = m.map((f, h) => f + e[h]); - l.set(u.get(...d), ...m); - } - return n === "string" ? C.fromStringArrayToUint8(l.values) : l.values; -} -function bV(r16, e, t10, o, n, s, a) { - let i = e[0], p = s[0], u = new Array(p), l = new Array(i), c = e[1]; - if (p === 0) { - if (i !== 0) - throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i)); - let g = y.getArrayFromDType(t10, 0), x = y.getArrayFromDType(n, 0); - return [g, [0, c], x, u, l]; - } - let m = true, d = 0, f = new Array(p).fill(0); - for (let g = 0; g < i; ++g) { - let x = r16[g * c]; - if (x < 0) - throw new Error(C.getSparseFillEmptyRowsNegativeIndexErrorMessage(g, x)); - if (x >= p) - throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g, x, p)); - ++f[x], m = m && x >= d, d = x; - } - let h = true; - for (let g = 0; g < p; ++g) { - let x = f[g] === 0; - u[g] = x, h = h && !x, f[g] = Math.max(f[g], 1), g > 0 && (f[g] += f[g - 1]); - } - if (h && m) { - let g = r16, x = o; - for (let b = 0; b < i; ++b) - l[b] = b; - return [g, [i, c], x, u, l]; - } else { - let g = f[p - 1], x = y.getArrayFromDType(t10, g * c), b = y.getArrayFromDType(n, g), w = new Array(p).fill(0); - for (let S = 0; S < i; ++S) { - let k = r16[S * c], T = w[k], E = (k === 0 ? 0 : f[k - 1]) + T; - w[k]++; - for (let R = 0; R < c; ++R) - x[E * c + R] = r16[S * c + R]; - b[E] = o[S], l[S] = E; - } - for (let S = 0; S < p; ++S) - if (w[S] === 0) { - let T = S === 0 ? 0 : f[S - 1]; - x[T * c + 0] = S; - for (let E = 1; E < c; ++E) - x[T * c + E] = 0; - b[T] = a; - } - return [x, [g, c], b, u, l]; - } -} -function CV(r16, e, t10, o, n) { - let s = y.sizeFromShape(o), a = e[0], i = n.length, p = [], u = 1, l = -1; - for (let g = 0; g < i; ++g) { - let x = n[g]; - if (x === -1) { - if (l !== -1) - throw new Error(C.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(l, g)); - l = g, p.push(1); - } else { - if (x < 0) - throw new Error(C.getSparseReshapeNegativeOutputDimErrorMessage(g, x)); - u *= x, p.push(x); - } - } - if (l !== -1) { - if (u <= 0) - throw new Error(C.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage()); - let g = Math.trunc(s / u); - if (u * g !== s) - throw new Error(C.getSparseReshapeInputOutputMultipleErrorMessage(o, p)); - p[l] = g; - } - if (y.sizeFromShape(p) !== s) - throw new Error(C.getSparseReshapeInputOutputMismatchErrorMessage(o, p)); - let m = o.length, d = []; - if (m > 0) { - d[m - 1] = 1; - for (let g = m - 2; g >= 0; --g) - d[g] = d[g + 1] * o[g + 1]; - } - let f = []; - if (i > 0) { - f[i - 1] = 1; - for (let g = i - 2; g >= 0; --g) - f[g] = f[g + 1] * p[g + 1]; - } - let h = y.getArrayFromDType(t10, a * i); - for (let g = 0; g < a; ++g) { - let x = 0; - for (let b = 0; b < m; ++b) - x += r16[g * m + b] * d[b]; - for (let b = 0; b < i; ++b) - h[g * i + b] = Math.trunc(x / f[b]), x %= f[b]; - } - return [h, [a, i], p]; -} -function wV(r16, e, t10, o, n, s = false, a = 0) { - let i = o.length, p = [e[0], r16.length / e[0]], u = p[1], c = i > 0 ? n[i - 1] + 1 : 0; - if (c < 0) - throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let m = e.slice(); - m[0] = c; - let d = m.reduce((w, S) => w * S, 1), f = y.getArrayFromDType(t10, d); - if (i === 0) - return c > 0 && f.fill(a), [f, m]; - if (c <= 0) - throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage()); - let h = 0, g = 1, x = 0, b = n[h]; - for (; ; ) { - let w = 0; - if (g < i) { - if (w = n[g], b === w) { - ++g; - continue; - } - if (b >= w) - throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage()); - } - if (b < 0 || b >= c) - throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b, c)); - b > x && f.fill(a, x * u, b * u); - for (let S = h; S < g; ++S) { - let k = o[S]; - if (k < 0 || k >= p[0]) - throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S, o[S], p[0])); - for (let T = 0; T < u; T++) - f[b * u + T] += r16[k * u + T]; - } - if (s) - for (let S = 0; S < u; S++) - f[b * u + S] /= g - h; - if (h = g, ++g, x = b + 1, b = w, g > i) - break; - } - return x < c && f.fill(a, x * u, c * u), [f, m]; -} -var SV = Qt((r16) => Math.sqrt(r16)); -var qzt = dx(Fo, (r16) => Math.sqrt(r16)); -var Fv = ht((r16, e) => { - let t10 = r16 - e; - return t10 * t10; -}); -var Zzt = wt(Po, Fv); -var Pv = Qt((r16, e) => { - let { pattern: t10, replaceGlobal: o, rewrite: n } = e; - return r16.replace(new RegExp(t10, o ? "g" : ""), n); -}); -var oVt = Wr(pi, Pv); -function IV(r16, e, t10, o) { - let n = ie(r16, e.dtype); - for (let s = 0; s < n.size; s++) { - let a = n.indexToLoc(s), i = new Array(a.length); - for (let p = 0; p < i.length; p++) - i[p] = a[p] * t10[p] + o[p]; - n.set(e.get(...i), ...a); - } - return n; -} -var Ov = class { - constructor(e, t10, o, n, s, a) { - this.separator = y.encodeString(e), this.nGramWidths = t10, this.leftPad = y.encodeString(o), this.rightPad = y.encodeString(n), this.padWidth = s, this.preserveShort = a; - } - getPadWidth(e) { - return Math.min(this.padWidth < 0 ? e - 1 : this.padWidth, e - 1); - } - getNumNGrams(e, t10) { - let o = this.getPadWidth(t10); - return Math.max(0, e + 2 * o - t10 + 1); - } - createNGrams(e, t10, o, n, s, a) { - for (let i = 0; i < s; ++i) { - let p = this.getPadWidth(a), u = Math.max(0, p - i), l = Math.max(0, p - (s - (i + 1))), c = a - (u + l), m = t10 + (u > 0 ? 0 : i - p), d = 0; - d += u * this.leftPad.length; - for (let b = 0; b < c; ++b) - d += e[m + b].length; - d += l * this.rightPad.length; - let f = u + l + c - 1; - d += f * this.separator.length, o[n + i] = new Uint8Array(d); - let h = o[n + i], g = 0, x = (b) => b.forEach((w) => h[g++] = w); - for (let b = 0; b < u; ++b) - x(this.leftPad), x(this.separator); - for (let b = 0; b < c - 1; ++b) - x(e[m + b]), x(this.separator); - if (c > 0) { - x(e[m + c - 1]); - for (let b = 0; b < l; ++b) - x(this.separator), x(this.rightPad); - } else { - for (let b = 0; b < l - 1; ++b) - x(this.rightPad), x(this.separator); - x(this.rightPad); - } - } - } - compute(e, t10) { - let o = e.length, n = t10.length; - if (n > 0) { - let p = t10[0]; - if (p !== 0) - throw new Error(`First split value must be 0, got ${p}`); - for (let u = 1; u < n; ++u) { - let l = t10[u] >= p; - if (l = l && t10[u] <= o, !l) - throw new Error(`Invalid split value ${t10[u]}, must be in [${p}, ${o}]`); - p = t10[u]; - } - if (p !== o) - throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`); - } - let s = n - 1, a = y.getArrayFromDType("int32", n); - if (o === 0 || n === 0) { - let p = new Array(o); - for (let u = 0; u <= s; ++u) - a[u] = 0; - return [p, a]; - } - a[0] = 0; - for (let p = 1; p <= s; ++p) { - let u = t10[p] - t10[p - 1], l = 0; - this.nGramWidths.forEach((c) => { - l += this.getNumNGrams(u, c); - }), this.preserveShort && u > 0 && l === 0 && (l = 1), a[p] = a[p - 1] + l; - } - let i = new Array(a[s]); - for (let p = 0; p < s; ++p) { - let u = t10[p], l = a[p]; - if (this.nGramWidths.forEach((c) => { - let m = t10[p + 1] - t10[p], d = this.getNumNGrams(m, c); - this.createNGrams(e, u, i, l, d, c), l += d; - }), this.preserveShort && l === a[p]) { - let c = t10[p + 1] - t10[p]; - if (c === 0) - continue; - let m = c + 2 * this.padWidth; - this.createNGrams(e, u, i, l, 1, m); - } - } - return [i, a]; - } -}; -function vV(r16, e, t10, o, n, s, a, i) { - return new Ov(t10, o, n, s, a, i).compute(r16, e); -} -function vpe(r16, e, t10, o) { - if (!r16.length) - return; - if (e.length === 0) { - for (let s = 0; s < r16.length; ++s) - o.push(r16.subarray(s, s + 1)); - return; - } - if (e.length === 1) { - let s = e[0], a = r16.indexOf(s); - for (; a !== -1; ) { - let i = r16.subarray(0, a); - (!t10 || i.length !== 0) && o.push(i), r16 = r16.subarray(a + 1), a = r16.indexOf(s); - } - (!t10 || r16.length !== 0) && o.push(r16); - return; - } - let n = 0; - for (let s = 0; s < r16.length + 1; s++) - if (s === r16.length || e.indexOf(r16[s]) !== -1) { - let a = r16.subarray(n, s); - (!t10 || a.length !== 0) && o.push(a), n = s + 1; - } -} -function kV(r16, e, t10) { - let o = r16.length, n = [], s = 0, a = 0, i = new Array(o); - for (let m = 0; m < o; ++m) { - let d = n.length; - vpe(r16[m], e, t10, n); - let f = n.length - d; - i[m] = f, s += f, a = Math.max(a, f); - } - let p = y.getArrayFromDType("int32", s * 2), u = new Array(s), l = [o, a], c = 0; - for (let m = 0; m < o; ++m) - for (let d = 0; d < i[m]; ++d) - p[c * 2] = m, p[c * 2 + 1] = d, u[c] = n[c], ++c; - return [p, u, l]; -} -function NV(r16, e) { - let t10 = y.getArrayFromDType("int32", r16.length); - for (let o = 0; o < r16.length; ++o) - t10[o] = y.fingerPrint64(r16[o]).modulo(e).getLowBitsUnsigned(); - return t10; -} -var Mv = ht((r16, e) => r16 - e); -var kpe = rc((r16, e, t10, o) => ({ real: r16 - t10, imag: e - o })); -var gVt = wt(Oo, Mv, kpe); -function TV(r16, e) { - let t10 = new Array(r16.rank); - for (let n = 0; n < t10.length; n++) - t10[n] = r16.shape[n] * e[n]; - let o = ie(t10, r16.dtype); - for (let n = 0; n < o.values.length; ++n) { - let s = o.indexToLoc(n), a = new Array(r16.rank); - for (let p = 0; p < a.length; p++) - a[p] = s[p] % r16.shape[p]; - let i = r16.locToIndex(a); - o.values[n] = r16.values[i]; - } - return o; -} -var Nm = (r16, e) => { - let t10 = e.value - r16.value; - return t10 === 0 ? r16.index - e.index : t10; -}; -function _V(r16, e, t10 = 0, o = r16.length - 1) { - for (; o > t10; ) { - if (o - t10 > 600) { - let i = o - t10 + 1, p = e - t10 + 1, u = Math.log(i), l = 0.5 * Math.exp(2 * u / 3), c = 0.5 * Math.sqrt(u * l * (i - l) / i) * Math.sign(p - i / 2), m = Math.max(t10, Math.floor(e - p * l / i + c)), d = Math.min(o, Math.floor(e + (i - p) * l / i + c)); - _V(r16, e, m, d); - } - let n = r16[e], s = t10, a = o; - for (y.swap(r16, t10, e), Nm(r16[o], n) > 0 && y.swap(r16, t10, o); s < a; ) { - for (y.swap(r16, s, a), s++, a--; Nm(r16[s], n) < 0; ) - s = s + 1; - for (; Nm(r16[a], n) > 0; ) - a = a - 1; - } - Nm(r16[t10], n) === 0 ? y.swap(r16, t10, a) : (a = a + 1, y.swap(r16, a, o)), a <= e && (t10 = a + 1), e <= a && (o = a - 1); - } -} -function EV(r16, e, t10, o, n) { - let s = e[e.length - 1], [a, i] = [r16.length / s, s], p = y.getTypedArrayFromDType(t10, a * o), u = y.getTypedArrayFromDType("int32", a * o); - for (let c = 0; c < a; c++) { - let m = c * i, d = r16.subarray(m, m + i), f = new Array(d.length); - d.forEach((b, w) => f[w] = { value: b, index: w }), o < f.length && (_V(f, o), f = f.slice(0, o)), n && f.sort(Nm); - let h = c * o, g = p.subarray(h, h + o), x = u.subarray(h, h + o); - for (let b = 0; b < o; b++) - g[b] = f[b].value, x[b] = f[b].index; - } - let l = e.slice(); - return l[l.length - 1] = o, [ie(l, t10, p), ie(l, "int32", u)]; -} -function $V(r16, e, t10, o) { - let n = y.parseAxisParam(e, t10)[0], s = [1, t10[0], 1]; - for (let f = 0; f < n; f++) - s[0] *= t10[f]; - s[1] = t10[n]; - for (let f = n + 1; f < t10.length; f++) - s[2] *= t10[f]; - let a = /* @__PURE__ */ new Map(), i = new Int32Array(t10[n]), p = new Ge(s, o, r16), u = [], l = s[0] === 1 && s[2] === 1; - for (let f = 0; f < t10[n]; f++) { - let h; - if (l) - h = r16[f].toString(); - else { - let x = []; - for (let b = 0; b < s[0]; b++) - for (let w = 0; w < s[2]; w++) - x.push(p.get(b, f, w)); - h = x.join(","); - } - let g = a.get(h); - if (g != null) - i[f] = g; - else { - let x = a.size; - a.set(h, x), i[f] = x, u.push(f); - } - } - let c = s.slice(); - c[1] = a.size; - let m = new Ge(c, o); - u.forEach((f, h) => { - for (let g = 0; g < s[0]; g++) - for (let x = 0; x < s[2]; x++) - m.set(p.get(g, f, x), g, h, x); - }); - let d = t10.slice(); - return d[n] = c[1], { outputValues: m.values, outputShape: d, indices: i }; -} -var { addImpl: RV, castImpl: DV, ceilImpl: AV, concatImpl: FV, equalImpl: PV, expImpl: OV, expm1Impl: MV, floorImpl: LV, floorDivImpl: BV, gatherNdImpl: zV, gatherV2Impl: VV, greaterEqualImpl: WV, greaterImpl: UV, lessEqualImpl: GV, lessImpl: HV, logImpl: KV, maxImpl: qV, maximumImpl: jV, minimumImpl: XV, multiplyImpl: YV, negImpl: QV, notEqualImpl: ZV, prodImpl: JV, rangeImpl: eW, rsqrtImpl: tW, scatterImpl: rW, simpleAbsImpl: oW, sliceImpl: nW, stridedSliceImpl: sW, stringNGramsImpl: aW, subImpl: iW, tileImpl: uW, topKImpl: pW, transposeImpl: lW, uniqueImpl: CWt } = Lv; -var Npe = ye({ opType: Z.ABS, cpuKernelImpl: oW }); -var cW = { kernelName: fn, backendName: "webgpu", kernelFunc: Npe }; -var Tpe = ye({ opType: Z.ACOS }); -var mW = { kernelName: hn, backendName: "webgpu", kernelFunc: Tpe }; -var _pe = ye({ opType: Z.ACOSH }); -var dW = { kernelName: gn, backendName: "webgpu", kernelFunc: _pe }; -var Epe = tt({ opType: fe.ADD, cpuKernelImpl: RV, supportsComplex: true }); -var fW = { kernelName: Rr, backendName: "webgpu", kernelFunc: Epe }; -var fx = class { +var { addImpl: mz, castImpl: dz, ceilImpl: fz, concatImpl: hz, equalImpl: gz, expImpl: xz, expm1Impl: yz, floorImpl: bz, floorDivImpl: Cz, gatherNdImpl: wz, gatherV2Impl: Sz, greaterEqualImpl: Iz, greaterImpl: vz, lessEqualImpl: kz, lessImpl: Nz, logImpl: Tz, maxImpl: _z, maximumImpl: Ez, minimumImpl: $z, multiplyImpl: Rz, negImpl: Dz, notEqualImpl: Az, prodImpl: Fz, rangeImpl: Pz, rsqrtImpl: Oz, scatterImpl: Mz, simpleAbsImpl: Lz, sliceImpl: Bz, stridedSliceImpl: zz, stringNGramsImpl: Vz, subImpl: Wz, tileImpl: Uz, topKImpl: Gz, transposeImpl: Hz, uniqueImpl: rOt } = Ic; +var Qie = ye({ opType: Z.ABS, cpuKernelImpl: Lz }); +var Kz = { kernelName: Xs, backendName: "webgpu", kernelFunc: Qie }; +var Zie = ye({ opType: Z.ACOS }); +var qz = { kernelName: Vo, backendName: "webgpu", kernelFunc: Zie }; +var Jie = ye({ opType: Z.ACOSH }); +var jz = { kernelName: Wo, backendName: "webgpu", kernelFunc: Jie }; +var eue = et({ opType: fe.ADD, cpuKernelImpl: mz, supportsComplex: true }); +var Xz = { kernelName: uo, backendName: "webgpu", kernelFunc: eue }; +var tx = class { constructor(e) { this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e[0], this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "addN"; } @@ -29972,15 +28926,15 @@ var fx = class { `; } }; -function $pe(r16) { - let { inputs: e, backend: t10 } = r16, o = e; +function tue(r15) { + let { inputs: e, backend: t10 } = r15, o = e; if (o.length === 1) - return Pt({ inputs: { x: o[0] }, backend: t10 }); - let n = o.map((i) => i.dtype).reduce((i, p) => pt(i, p)), s = o.map((i) => i.shape), a = new fx(s); + return At({ inputs: { x: o[0] }, backend: t10 }); + let n = o.map((i) => i.dtype).reduce((i, p) => dt(i, p)), s = o.map((i) => i.shape), a = new tx(s); return t10.runWebGPUProgram(a, o, n); } -var hW = { kernelName: xn, backendName: "webgpu", kernelFunc: $pe }; -var hx = class { +var Yz = { kernelName: Uo, backendName: "webgpu", kernelFunc: tue }; +var rx = class { constructor(e, t10) { this.variableNames = ["A"], this.workgroupSize = [16, 16, 1]; let o = new Array(e.length); @@ -30013,7 +28967,7 @@ var hx = class { `; } }; -var gx = class { +var ox = class { constructor(e, t10) { this.variableNames = ["A"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true; let o = new Array(e.length); @@ -30022,7 +28976,7 @@ var gx = class { this.outputShape = o, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.newDim = t10, this.shaderKey = `transpose_${t10}`; } getUserCode() { - let e = ft(this.outputShape.length), t10 = Bv(this.newDim); + let e = ft(this.outputShape.length), t10 = e0(this.newDim); return ` ${G("index")} { for(var i = 0; i < ${this.workPerThread}; i = i + 1) { @@ -30037,35 +28991,35 @@ var gx = class { `; } }; -function Bv(r16) { - let e = r16.length; +function e0(r15) { + let e = r15.length; if (e > 6) throw Error(`Transpose for rank ${e} is not yet supported`); let t10 = new Array(e); - for (let o = 0; o < r16.length; o++) - t10[r16[o]] = `coords.${un(o)}`; + for (let o = 0; o < r15.length; o++) + t10[r15[o]] = `coords.${Oo(o)}`; return t10.join(); } -function Cr(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); - for (let l = 0; l < p.length; l++) - p[l] = n.shape[s[l]]; +function xr(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { perm: s } = o, a = t10, i = n.shape.length, p = new Array(i); + for (let c = 0; c < p.length; c++) + p[c] = n.shape[s[c]]; if (t10.shouldExecuteOnCPU([n])) { - let c = a.tensorMap.get(n.dataId).values, m = lW(c, n.shape, n.dtype, s, p); + let l = a.tensorMap.get(n.dataId).values, m = Hz(l, n.shape, n.dtype, s, p); return t10.makeTensorInfo(p, n.dtype, m); } if (n.shape.length === 2 && y.arraysEqual(s, [1, 0])) { - let l = new hx(n.shape, s); - return a.runWebGPUProgram(l, [n], n.dtype); + let c = new rx(n.shape, s); + return a.runWebGPUProgram(c, [n], n.dtype); } - let u = new gx(n.shape, s); + let u = new ox(n.shape, s); return a.runWebGPUProgram(u, [n], n.dtype); } -var gW = { kernelName: Kr, backendName: "webgpu", kernelFunc: Cr }; -var xx = class { +var Qz = { kernelName: co, backendName: "webgpu", kernelFunc: xr }; +var nx = class { constructor(e, t10, o) { this.variableNames = ["x"], this.uniforms = "reduceSize : i32,", this.size = true, this.inputShape = [e.batchSize, e.inSize]; - let [n] = C.computeOutAndReduceShapes(this.inputShape, [1]); + let [n] = w.computeOutAndReduceShapes(this.inputShape, [1]); this.outputShape = n.length === 0 ? [1] : n, e.inSize >= 32768 && o >= 512 ? this.workgroupSize = [512, 1, 1] : e.inSize >= 4096 ? this.workgroupSize = [256, 1, 1] : this.workgroupSize = [64, 1, 1], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, [1, 1, 1]), this.reduceType = t10, this.shaderKey = `reduce_${t10}`; } getUserCode() { @@ -30123,59 +29077,59 @@ var xx = class { `; } }; -var Rpe = { mean: "float32", all: "bool", any: "bool" }; -function ao(r16, e, t10, o, n) { - let s = r16.shape.length, a = [], i = y.parseAxisParam(e, r16.shape), p = i, u = C.getAxesPermutation(p, s), l = r16; - u != null && (l = Cr({ inputs: { x: r16 }, attrs: { perm: u }, backend: n }), p = C.getInnerMostAxes(p.length, s), a.push(l)), C.assertAxesAreInnerMostDims(o, p, s); - let [c, m] = C.computeOutAndReduceShapes(l.shape, p), d = c; - t10 && (d = C.expandShapeToKeepDim(c, i)); +var rue = { mean: "float32", all: "bool", any: "bool" }; +function eo(r15, e, t10, o, n) { + let s = r15.shape.length, a = [], i = y.parseAxisParam(e, r15.shape), p = i, u = w.getAxesPermutation(p, s), c = r15; + u != null && (c = xr({ inputs: { x: r15 }, attrs: { perm: u }, backend: n }), p = w.getInnerMostAxes(p.length, s), a.push(c)), w.assertAxesAreInnerMostDims(o, p, s); + let [l, m] = w.computeOutAndReduceShapes(c.shape, p), d = l; + t10 && (d = w.expandShapeToKeepDim(l, i)); let f; - if ((o === "max" || o === "prod") && n.shouldExecuteOnCPU([l])) { - let h = n.tensorMap.get(l.dataId).values; + if ((o === "max" || o === "prod") && n.shouldExecuteOnCPU([c])) { + let h = n.tensorMap.get(c.dataId).values; switch (o) { case "max": - let g = qV(h, y.sizeFromShape(m), d, r16.dtype); - f = n.makeTensorInfo(d, r16.dtype, g); + let g = _z(h, y.sizeFromShape(m), d, r15.dtype); + f = n.makeTensorInfo(d, r15.dtype, g); break; case "prod": - let { outVals: x, outShape: b, outDtype: w } = JV(l.shape, l.dtype, h, p); - f = n.makeTensorInfo(b, w, x); + let { outVals: x, outShape: b, outDtype: C } = Fz(c.shape, c.dtype, h, p); + f = n.makeTensorInfo(b, C, x); break; default: throw new Error(`${o} CPU implementation is not yet supported.`); } } else { - let h = y.sizeFromShape(m), x = y.sizeFromShape(l.shape) / h, b = { windowSize: h, inSize: h, batchSize: x, outSize: 1 }, w = Rpe[o] || mi(r16.dtype), S = [{ type: "int32", data: [h] }], k = new xx(b, o, n.device.limits.maxComputeWorkgroupSizeX), T = n.runWebGPUProgram(k, [l], w, S); - a.push(T), f = le({ inputs: { x: T }, attrs: { shape: d }, backend: n }); + let h = y.sizeFromShape(m), x = y.sizeFromShape(c.shape) / h, b = { windowSize: h, inSize: h, batchSize: x, outSize: 1 }, C = rue[o] || oi(r15.dtype), S = [{ type: "int32", data: [h] }], k = new nx(b, o, n.device.limits.maxComputeWorkgroupSizeX), _ = n.runWebGPUProgram(k, [c], C, S); + a.push(_), f = pe({ inputs: { x: _ }, attrs: { shape: d }, backend: n }); } return a.forEach((h) => n.disposeData(h.dataId)), f; } -function Dpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { keepDims: s, axis: a } = o; - return ao(n, a, s, "all", t10); +function oue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { keepDims: s, axis: a } = o; + return eo(n, a, s, "all", t10); } -var xW = { kernelName: yn, backendName: "webgpu", kernelFunc: Dpe }; -function Ape(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { keepDims: s, axis: a } = o; - return ao(n, a, s, "any", t10); +var Zz = { kernelName: Go, backendName: "webgpu", kernelFunc: oue }; +function nue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { keepDims: s, axis: a } = o; + return eo(n, a, s, "any", t10); } -var yW = { kernelName: bn, backendName: "webgpu", kernelFunc: Ape }; -var oc = class { +var Jz = { kernelName: Ho, backendName: "webgpu", kernelFunc: nue }; +var Yc = class { constructor(e, t10, o) { this.workgroupSize = [64, 1, 1], this.variableNames = ["x"], this.uniforms = "infinityValue : f32,", this.size = true; let n = [t10]; this.op = o === "min" ? "<" : ">"; - let [s, a] = C.computeOutAndReduceShapes(e, n); + let [s, a] = w.computeOutAndReduceShapes(e, n); this.outputShape = s.length === 0 ? [1] : s, this.dispatchLayout = X(this.outputShape), y.sizeFromShape(a) < 32 ? (this.type = "plain", this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize)) : (this.type = "shared", this.dispatch = H(this.dispatchLayout, this.outputShape, [1, 1, 1])), this.inputShape = e, this.shaderKey = `argMinMax_${this.op}_${this.type}`; } getUserCode() { - let e = this.workgroupSize[0], t10 = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${un(this.inputShape.length - 1)}`, o = () => { + let e = this.workgroupSize[0], t10 = () => this.inputShape.length === 1 ? "uniforms.xShape" : `uniforms.xShape.${Oo(this.inputShape.length - 1)}`, o = () => { let n = ""; if (this.outputShape.length === 1) this.inputShape.length !== 1 && (n += "outputCoords,"); else for (let s = 0; s < this.outputShape.length; s++) - n += `outputCoords.${un(s)},`; + n += `outputCoords.${Oo(s)},`; return n; }; return this.type === "shared" ? ` @@ -30247,31 +29201,31 @@ var oc = class { `; } }; -function Fpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Cr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), C.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); - let l = new oc(p.shape, a[0], "max"), c = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = t10.runWebGPUProgram(l, [p], "int32", c); +function sue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = xr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMax", [a[0]], p.shape.length); + let c = new Yc(p.shape, a[0], "max"), l = [{ type: "float32", data: [Number.NEGATIVE_INFINITY] }], m = t10.runWebGPUProgram(c, [p], "int32", l); return u.forEach((d) => t10.disposeData(d.dataId)), m; } -var bW = { kernelName: na, backendName: "webgpu", kernelFunc: Fpe }; -function Ppe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = C.getAxesPermutation(a, n.shape.length), p = n, u = []; - i != null && (p = Cr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = C.getInnerMostAxes(a.length, p.shape.length)), C.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); - let l = new oc(p.shape, a[0], "min"), c = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = t10.runWebGPUProgram(l, [p], "int32", c); +var eV = { kernelName: Ys, backendName: "webgpu", kernelFunc: sue }; +function aue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s } = o, a = y.parseAxisParam(s, n.shape), i = w.getAxesPermutation(a, n.shape.length), p = n, u = []; + i != null && (p = xr({ inputs: { x: n }, backend: t10, attrs: { perm: i } }), u.push(p), a = w.getInnerMostAxes(a.length, p.shape.length)), w.assertAxesAreInnerMostDims("argMin", [a[0]], p.shape.length); + let c = new Yc(p.shape, a[0], "min"), l = [{ type: "float32", data: [Number.POSITIVE_INFINITY] }], m = t10.runWebGPUProgram(c, [p], "int32", l); return u.forEach((d) => t10.disposeData(d.dataId)), m; } -var CW = { kernelName: sa, backendName: "webgpu", kernelFunc: Ppe }; -var Ope = ye({ opType: Z.ASIN }); -var wW = { kernelName: Cn, backendName: "webgpu", kernelFunc: Ope }; -var Mpe = ye({ opType: Z.ASINH }); -var SW = { kernelName: wn, backendName: "webgpu", kernelFunc: Mpe }; -var Lpe = ye({ opType: Z.ATAN }); -var IW = { kernelName: Sn, backendName: "webgpu", kernelFunc: Lpe }; -var Bpe = tt({ opType: fe.ATAN2 }); -var vW = { kernelName: vn, backendName: "webgpu", kernelFunc: Bpe }; -var zpe = ye({ opType: Z.ATANH }); -var kW = { kernelName: In, backendName: "webgpu", kernelFunc: zpe }; -var yx = class { +var tV = { kernelName: Qs, backendName: "webgpu", kernelFunc: aue }; +var iue = ye({ opType: Z.ASIN }); +var rV = { kernelName: Ko, backendName: "webgpu", kernelFunc: iue }; +var uue = ye({ opType: Z.ASINH }); +var oV = { kernelName: qo, backendName: "webgpu", kernelFunc: uue }; +var pue = ye({ opType: Z.ATAN }); +var nV = { kernelName: jo, backendName: "webgpu", kernelFunc: pue }; +var cue = et({ opType: fe.ATAN2 }); +var sV = { kernelName: Yo, backendName: "webgpu", kernelFunc: cue }; +var lue = ye({ opType: Z.ATANH }); +var aV = { kernelName: Xo, backendName: "webgpu", kernelFunc: lue }; +var sx = class { constructor(e) { this.variableNames = ["x"], this.uniforms = "strides : vec2,", this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "poolWithFilterSizeEqualsOne"; } @@ -30294,7 +29248,7 @@ var yx = class { `; } }; -var Ka = class { +var Ba = class { constructor(e, t10, o = false, n = false, s = false) { if (this.variableNames = ["x"], this.uniforms = "strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); @@ -30348,7 +29302,7 @@ var Ka = class { `; } }; -var $u = class { +var Iu = class { constructor(e, t10, o = false, n = false, s = false) { if (this.variableNames = ["x"], this.uniforms = "strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,", this.workgroupSize = [128, 1, 1], this.size = true, t10 === "avg" && o) throw new Error("Cannot compute positions for average pool."); @@ -30410,39 +29364,39 @@ var $u = class { `; } }; -function zv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reductionIndices: s, keepDims: a } = o; - return ao(n, s, a, "max", t10); +function t0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reductionIndices: s, keepDims: a } = o; + return eo(n, s, a, "max", t10); } -var NW = { kernelName: os, backendName: "webgpu", kernelFunc: zv }; -function Vv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { keepDims: s, axis: a } = o; - return ao(n, a, s, "mean", t10); +var iV = { kernelName: zn, backendName: "webgpu", kernelFunc: t0 }; +function r0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { keepDims: s, axis: a } = o; + return eo(n, a, s, "mean", t10); } -var TW = { kernelName: ss, backendName: "webgpu", kernelFunc: Vv }; -function bx(r16, e, t10, o) { +var uV = { kernelName: Un, backendName: "webgpu", kernelFunc: r0 }; +function ax(r15, e, t10, o) { if (e.filterWidth === 1 && e.filterHeight === 1 && y.arraysEqual(e.inShape, e.outShape)) - return Pt({ inputs: { x: r16 }, backend: o }); + return At({ inputs: { x: r15 }, backend: o }); if (e.filterWidth === e.inWidth && e.filterHeight === e.inHeight && e.batchSize === 1 && e.padInfo.type === "VALID") { - let a = r16.shape.length, i = le({ inputs: { x: r16 }, backend: o, attrs: { shape: [r16.shape[a - 3] * r16.shape[a - 2], r16.shape[a - 1]] } }), p; - t10 === "avg" ? p = Vv({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(t10 === "max", () => `Invalid pool type ${t10}`), p = zv({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); - let u = le({ inputs: { x: p }, backend: o, attrs: { shape: e.outShape } }); + let a = r15.shape.length, i = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: [r15.shape[a - 3] * r15.shape[a - 2], r15.shape[a - 1]] } }), p; + t10 === "avg" ? p = r0({ inputs: { x: i }, backend: o, attrs: { axis: 0, keepDims: false } }) : (y.assert(t10 === "max", () => `Invalid pool type ${t10}`), p = t0({ inputs: { x: i }, backend: o, attrs: { reductionIndices: 0, keepDims: false } })); + let u = pe({ inputs: { x: p }, backend: o, attrs: { shape: e.outShape } }); return o.disposeData(i.dataId), o.disposeData(p.dataId), u; } let n, s = [{ type: "int32", data: [e.strideHeight, e.strideWidth] }]; - return e.filterHeight === 1 && e.filterWidth === 1 ? n = new yx(e) : (t10 === "avg" ? n = new Ka(e, "avg") : (y.assert(t10 === "max", () => `Invalid pool type ${t10}`), n = new Ka(e, "max")), s.push({ type: "int32", data: [e.padInfo.top, e.padInfo.left] }, { type: "int32", data: [e.dilationHeight, e.dilationWidth] }, { type: "int32", data: [e.inHeight, e.inWidth] }, { type: "int32", data: [e.effectiveFilterHeight, e.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r16], r16.dtype, s); + return e.filterHeight === 1 && e.filterWidth === 1 ? n = new sx(e) : (t10 === "avg" ? n = new Ba(e, "avg") : (y.assert(t10 === "max", () => `Invalid pool type ${t10}`), n = new Ba(e, "max")), s.push({ type: "int32", data: [e.padInfo.top, e.padInfo.left] }, { type: "int32", data: [e.dilationHeight, e.dilationWidth] }, { type: "int32", data: [e.inHeight, e.inWidth] }, { type: "int32", data: [e.effectiveFilterHeight, e.effectiveFilterWidth] })), o.runWebGPUProgram(n, [r15], r15.dtype, s); } -function Vpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, l = C.computePool2DInfo(n.shape, s, a, 1, i, p); - return bx(n, l, "avg", t10); +function mue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, c = w.computePool2DInfo(n.shape, s, a, 1, i, p); + return ax(n, c, "avg", t10); } -var _W = { kernelName: kn, backendName: "webgpu", kernelFunc: Vpe }; -function Wpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, l = [1, 1, 1], c = C.computePool3DInfo(n.shape, s, a, l, i, u, p), m = new $u(c, "avg"), d = [{ type: "int32", data: [c.strideDepth, c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.padInfo.front, c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.inDepth, c.inHeight, c.inWidth] }, { type: "int32", data: [c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth] }]; +var pV = { kernelName: Qo, backendName: "webgpu", kernelFunc: mue }; +function due(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, c = [1, 1, 1], l = w.computePool3DInfo(n.shape, s, a, c, i, u, p), m = new Iu(l, "avg"), d = [{ type: "int32", data: [l.strideDepth, l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.padInfo.front, l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.inDepth, l.inHeight, l.inWidth] }, { type: "int32", data: [l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth] }]; return t10.runWebGPUProgram(m, [n], n.dtype, d); } -var EW = { kernelName: aa, backendName: "webgpu", kernelFunc: Wpe }; -var Cx = class { +var cV = { kernelName: Zs, backendName: "webgpu", kernelFunc: due }; +var ix = class { constructor(e) { this.variableNames = ["dy"], this.uniforms = `strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, avgMultiplier : f32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "avgPool2DBackprop"; @@ -30489,7 +29443,7 @@ var Cx = class { `; } }; -var wx = class { +var ux = class { constructor(e) { this.variableNames = ["dy"], this.uniforms = `strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "avgPool3DBackprop"; @@ -30546,30 +29500,30 @@ var wx = class { `; } }; -function Upe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: l } = o, c = C.computePool3DInfo(a.shape, i, p, 1, u, l), m = new wx(c), d = 1 / (c.filterDepth * c.filterHeight * c.filterWidth), f = [{ type: "int32", data: [c.strideDepth, c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.effectiveFilterDepth - 1 - c.padInfo.front, c.effectiveFilterHeight - 1 - c.padInfo.top, c.effectiveFilterWidth - 1 - c.padInfo.left] }, { type: "int32", data: [c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth] }, { type: "int32", data: [c.outDepth] }, { type: "int32", data: [c.outHeight] }, { type: "int32", data: [c.outWidth] }, { type: "float32", data: [d] }]; +function fue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = w.computePool3DInfo(a.shape, i, p, 1, u, c), m = new ux(l), d = 1 / (l.filterDepth * l.filterHeight * l.filterWidth), f = [{ type: "int32", data: [l.strideDepth, l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.effectiveFilterDepth - 1 - l.padInfo.front, l.effectiveFilterHeight - 1 - l.padInfo.top, l.effectiveFilterWidth - 1 - l.padInfo.left] }, { type: "int32", data: [l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth] }, { type: "int32", data: [l.outDepth] }, { type: "int32", data: [l.outHeight] }, { type: "int32", data: [l.outWidth] }, { type: "float32", data: [d] }]; return t10.runWebGPUProgram(m, [n], a.dtype, f); } -var $W = { kernelName: Vi, backendName: "webgpu", kernelFunc: Upe }; -function Gpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s; - wm([n, s], "avgPoolGrad"); - let { filterSize: i, strides: p, pad: u } = o, l = C.computePool2DInfo(a.shape, i, p, 1, u), c = new Cx(l), m = 1 / (l.filterHeight * l.filterWidth), d = [{ type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.effectiveFilterHeight - 1 - l.padInfo.top, l.effectiveFilterWidth - 1 - l.padInfo.left] }, { type: "int32", data: [l.dilationHeight, l.dilationWidth] }, { type: "int32", data: [l.effectiveFilterHeight, l.effectiveFilterWidth] }, { type: "int32", data: [l.outHeight] }, { type: "int32", data: [l.outWidth] }, { type: "float32", data: [m] }]; - return t10.runWebGPUProgram(c, [n], a.dtype, d); +var lV = { kernelName: Ri, backendName: "webgpu", kernelFunc: fue }; +function hue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s; + fm([n, s], "avgPoolGrad"); + let { filterSize: i, strides: p, pad: u } = o, c = w.computePool2DInfo(a.shape, i, p, 1, u), l = new ix(c), m = 1 / (c.filterHeight * c.filterWidth), d = [{ type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.effectiveFilterHeight - 1 - c.padInfo.top, c.effectiveFilterWidth - 1 - c.padInfo.left] }, { type: "int32", data: [c.dilationHeight, c.dilationWidth] }, { type: "int32", data: [c.effectiveFilterHeight, c.effectiveFilterWidth] }, { type: "int32", data: [c.outHeight] }, { type: "int32", data: [c.outWidth] }, { type: "float32", data: [m] }]; + return t10.runWebGPUProgram(l, [n], a.dtype, d); } -var RW = { kernelName: zi, backendName: "webgpu", kernelFunc: Gpe }; -function Hpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; - return Op({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); +var mV = { kernelName: $i, backendName: "webgpu", kernelFunc: hue }; +function gue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { a: n, b: s } = e, { transposeA: a, transposeB: i } = o; + return $p({ a: n, b: s, transposeA: a, transposeB: i, backend: t10 }); } -var DW = { kernelName: Nn, backendName: "webgpu", kernelFunc: Hpe }; -var Sx = class { +var dV = { kernelName: Zo, backendName: "webgpu", kernelFunc: gue }; +var px = class { constructor(e, t10) { this.variableNames = ["source"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.rank = t10.length, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.start = e, this.uniforms = `start : ${ft(e.length)}, `, this.shaderKey = "slice"; } getUserCode() { - let e = ft(this.rank), t10 = Kpe(this.rank), o; - return this.start.length === 1 ? o = this.outputShape.map((s, a) => "sourceLoc = uniforms.start + coords;") : o = this.outputShape.map((s, a) => `sourceLoc.${Wv[a]} = uniforms.start.${un(a)} + coords.${Wv[a]};`), ` + let e = ft(this.rank), t10 = xue(this.rank), o; + return this.start.length === 1 ? o = this.outputShape.map((s, a) => "sourceLoc = uniforms.start + coords;") : o = this.outputShape.map((s, a) => `sourceLoc.${o0[a]} = uniforms.start.${Oo(a)} + coords.${o0[a]};`), ` ${G("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; @@ -30582,50 +29536,50 @@ var Sx = class { `; } }; -var Wv = ["x", "y", "z", "w", "u", "v"]; -function Kpe(r16) { - if (r16 === 1) +var o0 = ["x", "y", "z", "w", "u", "v"]; +function xue(r15) { + if (r15 === 1) return "sourceLoc"; - if (r16 <= 6) - return Wv.slice(0, r16).map((e) => `sourceLoc.${e}`).join(","); - throw Error(`Slicing for rank ${r16} is not yet supported`); -} -function ea(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, size: a } = o, [i, p] = nt.parseSliceParams(n, s, a); - if (nt.assertParamsValid(n, i, p), t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { - let c = t10.tensorMap.get(n.dataId), m = nW(c.values, i, p, n.shape, n.dtype); + if (r15 <= 6) + return o0.slice(0, r15).map((e) => `sourceLoc.${e}`).join(","); + throw Error(`Slicing for rank ${r15} is not yet supported`); +} +function Hs(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, size: a } = o, [i, p] = pt.parseSliceParams(n, s, a); + if (pt.assertParamsValid(n, i, p), t10.shouldExecuteOnCPU([n]) || n.dtype === "string") { + let l = t10.tensorMap.get(n.dataId), m = Bz(l.values, i, p, n.shape, n.dtype); return t10.makeTensorInfo(p, n.dtype, m); } if (y.sizeFromShape(p) === 0) return t10.makeTensorInfo(p, n.dtype, []); - let u = new Sx(i, p), l = [{ type: "int32", data: i }]; - return t10.runWebGPUProgram(u, [n], n.dtype, l); + let u = new px(i, p), c = [{ type: "int32", data: i }]; + return t10.runWebGPUProgram(u, [n], n.dtype, c); } -var AW = { kernelName: _s, backendName: "webgpu", kernelFunc: ea }; -var qpe = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, crops: a } = o; +var fV = { kernelName: ha, backendName: "webgpu", kernelFunc: Hs }; +var yue = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, crops: a } = o; y.assert(n.shape.length <= 4, () => "batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet"); - let i = s.reduce((b, w) => b * w), p = C.getReshaped(n.shape, s, i), u = C.getPermuted(p.length, s.length), l = C.getReshapedPermuted(n.shape, s, i), c = C.getSliceBeginCoords(a, s.length), m = C.getSliceSize(l, a, s.length), d = [], f = le({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = Cr({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), g = le({ inputs: { x: h }, backend: t10, attrs: { shape: l } }), x = ea({ inputs: { x: g }, backend: t10, attrs: { begin: c, size: m } }); + let i = s.reduce((b, C) => b * C), p = w.getReshaped(n.shape, s, i), u = w.getPermuted(p.length, s.length), c = w.getReshapedPermuted(n.shape, s, i), l = w.getSliceBeginCoords(a, s.length), m = w.getSliceSize(c, a, s.length), d = [], f = pe({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), h = xr({ inputs: { x: f }, backend: t10, attrs: { perm: u } }), g = pe({ inputs: { x: h }, backend: t10, attrs: { shape: c } }), x = Hs({ inputs: { x: g }, backend: t10, attrs: { begin: l, size: m } }); return d.push(f), d.push(h), d.push(g), d.forEach((b) => t10.disposeData(b.dataId)), x; }; -var FW = { kernelName: ia, backendName: "webgpu", kernelFunc: qpe }; -var jpe = ` +var hV = { kernelName: Js, backendName: "webgpu", kernelFunc: yue }; +var bue = ` fn bincount_write(index: i32, value: f32) { - ${oo("&result[index]", "value", "float32")} + ${Qr("&result[index]", "value", "float32")} } `; -var Xpe = ` +var Cue = ` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } `; -var nc = class { +var Qc = class { constructor(e, t10, o = false) { this.outputShape = [], this.variableNames = ["x"], this.uniforms = "binCountSize : i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.hasWeights = true, this.binaryOutput = false, this.outputShape = e, this.rank = e.length, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.binaryOutput = o, o && (this.atomic = false), this.hasWeights = t10, this.hasWeights && this.variableNames.push("w"), this.shaderKey = `bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`; } getUserCode() { return ` - ${this.binaryOutput ? Xpe : jpe} + ${this.binaryOutput ? Cue : bue} ${G("index")} { ${this.rank === 1 ? `if (index < uniforms.xShape) { let indexVal = i32(getX(index)); @@ -30645,12 +29599,12 @@ var nc = class { `; } }; -function Ype(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a } = o, i = y.sizeFromShape(n.shape), u = y.sizeFromShape(s.shape) > 0, l = [a], c = s.dtype, m = Nt({ backend: t10, attrs: { shape: l, value: 0, dtype: c } }), d = new nc([i], u), f = [{ type: "int32", data: [a] }], h = u ? [n, s] : [n]; - return t10.runWebGPUProgram(d, h, c, f, m); +function wue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a } = o, i = y.sizeFromShape(n.shape), u = y.sizeFromShape(s.shape) > 0, c = [a], l = s.dtype, m = vt({ backend: t10, attrs: { shape: c, value: 0, dtype: l } }), d = new Qc([i], u), f = [{ type: "int32", data: [a] }], h = u ? [n, s] : [n]; + return t10.runWebGPUProgram(d, h, l, f, m); } -var PW = { kernelName: Tn, backendName: "webgpu", kernelFunc: Ype }; -var Ix = class { +var gV = { kernelName: Jo, backendName: "webgpu", kernelFunc: wue }; +var cx = class { constructor(e) { this.outputShape = [], this.variableNames = ["s0", "s1"], this.uniforms = "s0Size : i32, s1Size : i32, ", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "broadcastArgs"; } @@ -30683,59 +29637,59 @@ var Ix = class { `; } }; -function Qpe(r16) { - let { inputs: e, backend: t10 } = r16, { s0: o, s1: n } = e; +function Sue(r15) { + let { inputs: e, backend: t10 } = r15, { s0: o, s1: n } = e; if (t10.shouldExecuteOnCPU([o, n])) { - let l = t10.tensorMap.get(o.dataId), c = t10.tensorMap.get(n.dataId), m = l.values, d = c.values, f = C.assertAndGetBroadcastShape(Array.from(m), Array.from(d)); + let c = t10.tensorMap.get(o.dataId), l = t10.tensorMap.get(n.dataId), m = c.values, d = l.values, f = w.assertAndGetBroadcastShape(Array.from(m), Array.from(d)); return t10.makeTensorInfo([f.length], "int32", Int32Array.from(f)); } - let s = y.sizeFromShape(o.shape), a = y.sizeFromShape(n.shape), i = Math.max(s, a), p = new Ix(i), u = [{ type: "int32", data: [s] }, { type: "int32", data: [a] }]; + let s = y.sizeFromShape(o.shape), a = y.sizeFromShape(n.shape), i = Math.max(s, a), p = new cx(i), u = [{ type: "int32", data: [s] }, { type: "int32", data: [a] }]; return t10.runWebGPUProgram(p, [o, n], "int32", u); } -var OW = { kernelName: ua, backendName: "webgpu", kernelFunc: Qpe }; -var Uv = tt({ opType: fe.NOT_EQUAL, dtype: "bool", cpuKernelImpl: ZV }); -var MW = { kernelName: Ro, backendName: "webgpu", kernelFunc: Uv }; -function Fi(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.tensorMap.get(o.dataId); - return Pt({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); +var xV = { kernelName: ea, backendName: "webgpu", kernelFunc: Sue }; +var n0 = et({ opType: fe.NOT_EQUAL, dtype: "bool", cpuKernelImpl: Az }); +var yV = { kernelName: Yn, backendName: "webgpu", kernelFunc: n0 }; +function vi(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.tensorMap.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.real }, backend: t10 }); } -var LW = { kernelName: si, backendName: "webgpu", kernelFunc: Fi }; -function BW(r16, e) { - let t10 = new so(r16.shape, Z.TO_INT), o = e.runWebGPUProgram(t10, [r16], "int32"); +var bV = { kernelName: Hi, backendName: "webgpu", kernelFunc: vi }; +function CV(r15, e) { + let t10 = new Jr(r15.shape, Z.TO_INT), o = e.runWebGPUProgram(t10, [r15], "int32"); return { dataId: o.dataId, shape: o.shape, dtype: o.dtype }; } -function Gv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dtype: s } = o; +function s0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dtype: s } = o; if (s === "complex64") { if (n.dtype === "complex64") - return Pt({ inputs: { x: n }, backend: t10 }); - let a = Yr(n.shape), i = Gv({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = Uo({ inputs: { real: i, imag: a }, backend: t10 }); + return At({ inputs: { x: n }, backend: t10 }); + let a = Gr(n.shape), i = s0({ inputs: { x: n }, backend: t10, attrs: { dtype: "float32" } }), p = xo({ inputs: { real: i, imag: a }, backend: t10 }); return a.dispose(), t10.disposeData(i.dataId), p; } if (n.dtype === "complex64") { - let a = Fi({ inputs: { input: n }, backend: t10 }), i = Gv({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); + let a = vi({ inputs: { input: n }, backend: t10 }), i = s0({ inputs: { x: a }, backend: t10, attrs: { dtype: s } }); return t10.disposeData(a.dataId), i; } if (!y.hasEncodingLoss(n.dtype, s)) { - let a = Pt({ inputs: { x: n }, backend: t10 }); + let a = At({ inputs: { x: n }, backend: t10 }); return { dataId: a.dataId, shape: a.shape, dtype: s }; } if (t10.shouldExecuteOnCPU([n])) { - let a = t10.tensorMap.get(n.dataId).values, [i, p, u] = DV(a, n.shape, n.dtype, s); + let a = t10.tensorMap.get(n.dataId).values, [i, p, u] = dz(a, n.shape, n.dtype, s); return t10.makeTensorInfo(i, p, u); } if (s === "int32") - return BW(n, t10); + return CV(n, t10); if (s === "bool") { - let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = Uv({ inputs: { a: n, b: a }, backend: t10 }); + let a = t10.makeTensorInfo([], "bool", y.getTypedArrayFromDType("bool", 1)), p = n0({ inputs: { a: n, b: a }, backend: t10 }); return t10.disposeData(a.dataId), p; } throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`); } -var zW = { kernelName: ho, backendName: "webgpu", kernelFunc: Gv }; -var Zpe = ye({ opType: Z.CEIL, cpuKernelImpl: AV }); -var VW = { kernelName: go, backendName: "webgpu", kernelFunc: Zpe }; -var vx = class { +var wV = { kernelName: yo, backendName: "webgpu", kernelFunc: s0 }; +var Iue = ye({ opType: Z.CEIL, cpuKernelImpl: fz }); +var SV = { kernelName: en, backendName: "webgpu", kernelFunc: Iue }; +var lx = class { constructor(e) { this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workPerThread = 4, this.workgroupSize = [64, 1, 1], this.outputComponent = 4, this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.shaderKey = "clipVec4"; } @@ -30753,7 +29707,7 @@ var vx = class { `; } }; -var kx = class { +var mx = class { constructor(e) { this.variableNames = ["A"], this.uniforms = "minVal : f32, maxVal : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "clip"; } @@ -30772,12 +29726,12 @@ var kx = class { `; } }; -function Jpe(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i, p = [{ type: "float32", data: [s] }, { type: "float32", data: [a] }]; - return y.sizeFromShape(n.shape) % 4 === 0 ? i = new vx(n.shape) : i = new kx(n.shape), t10.runWebGPUProgram(i, [n], n.dtype, p); +function vue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { clipValueMin: s, clipValueMax: a } = o, i, p = [{ type: "float32", data: [s] }, { type: "float32", data: [a] }]; + return y.sizeFromShape(n.shape) % 4 === 0 ? i = new lx(n.shape) : i = new mx(n.shape), t10.runWebGPUProgram(i, [n], n.dtype, p); } -var WW = { kernelName: Go, backendName: "webgpu", kernelFunc: Jpe }; -var Nx = class { +var IV = { kernelName: bo, backendName: "webgpu", kernelFunc: vue }; +var dx = class { constructor(e) { this.outputShape = [], this.variableNames = ["real", "imag"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "complexAbs"; } @@ -30797,17 +29751,17 @@ var Nx = class { `; } }; -function UW(r16, e) { - return { dataId: e.dataId, dtype: e.dtype, shape: r16.shape }; +function vV(r15, e) { + return { dataId: e.dataId, dtype: e.dtype, shape: r15.shape }; } -function ele(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = t10.tensorMap.get(o.dataId), s = new Nx(o.shape), a = [UW(o, n.complexTensorInfos.real), UW(o, n.complexTensorInfos.imag)]; +function kue(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = t10.tensorMap.get(o.dataId), s = new dx(o.shape), a = [vV(o, n.complexTensorInfos.real), vV(o, n.complexTensorInfos.imag)]; return t10.runWebGPUProgram(s, a, a[0].dtype); } -var GW = { kernelName: Wi, backendName: "webgpu", kernelFunc: ele }; -var Tx = class { +var kV = { kernelName: Ai, backendName: "webgpu", kernelFunc: kue }; +var fx = class { constructor(e) { - this.uniforms = "", this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = C.computeOutShape(e, 1), this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.offsetLength = e.length - 1; + this.uniforms = "", this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = w.computeOutShape(e, 1), this.variableNames = e.map((t10, o) => `T${o}`), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]), this.offsetLength = e.length - 1; for (let t10 = 0; t10 < this.offsetLength; t10++) this.uniforms += `offset${t10} : i32,`; this.shaderKey = "concat"; @@ -30839,64 +29793,64 @@ var Tx = class { `; } }; -function Mp(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e, n = t10.tensorMap.get(o.dataId); - return Pt({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); +function Rp(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e, n = t10.tensorMap.get(o.dataId); + return At({ inputs: { x: n.complexTensorInfos.imag }, backend: t10 }); } -var HW = { kernelName: Qi, backendName: "webgpu", kernelFunc: Mp }; -function sc(r16, e, t10) { - let o = r16[0].dtype; +var NV = { kernelName: Wi, backendName: "webgpu", kernelFunc: Rp }; +function Zc(r15, e, t10) { + let o = r15[0].dtype; if (o === "complex64") { - let f = r16.map((w) => Fi({ inputs: { input: w }, backend: t10 })), h = r16.map((w) => Mp({ inputs: { input: w }, backend: t10 })), g = sc(f, e, t10), x = sc(h, e, t10), b = Uo({ inputs: { real: g, imag: x }, backend: t10 }); - return f.forEach((w) => t10.disposeData(w.dataId)), h.forEach((w) => t10.disposeData(w.dataId)), t10.disposeData(g.dataId), t10.disposeData(x.dataId), b; + let f = r15.map((C) => vi({ inputs: { input: C }, backend: t10 })), h = r15.map((C) => Rp({ inputs: { input: C }, backend: t10 })), g = Zc(f, e, t10), x = Zc(h, e, t10), b = xo({ inputs: { real: g, imag: x }, backend: t10 }); + return f.forEach((C) => t10.disposeData(C.dataId)), h.forEach((C) => t10.disposeData(C.dataId)), t10.disposeData(g.dataId), t10.disposeData(x.dataId), b; } - let n = t10.shouldExecuteOnCPU(r16); + let n = t10.shouldExecuteOnCPU(r15); if (o === "string" && (n = true), n) { - let f = r16.map((k) => { - let E = [-1, y.sizeFromShape(k.shape.slice(e))]; - return le({ inputs: { x: k }, backend: t10, attrs: { shape: E } }); - }), h = f.map((k) => ({ vals: t10.readSync(k.dataId), shape: k.shape })), g = C.computeOutShape(f.map((k) => k.shape), 1), x = f[0].shape[0] === 1, b = FV(h, g, o, x), w = C.computeOutShape(r16.map((k) => k.shape), e), S = t10.makeTensorInfo(w, o, b); + let f = r15.map((k) => { + let $ = [-1, y.sizeFromShape(k.shape.slice(e))]; + return pe({ inputs: { x: k }, backend: t10, attrs: { shape: $ } }); + }), h = f.map((k) => ({ vals: t10.readSync(k.dataId), shape: k.shape })), g = w.computeOutShape(f.map((k) => k.shape), 1), x = f[0].shape[0] === 1, b = hz(h, g, o, x), C = w.computeOutShape(r15.map((k) => k.shape), e), S = t10.makeTensorInfo(C, o, b); return f.forEach((k) => t10.disposeData(k.dataId)), S; } let s = t10.device.limits.maxStorageBuffersPerShaderStage - 1; - if (r16.length > s) { + if (r15.length > s) { let f = []; - for (let g = 0; g < r16.length; g += s) { - let x = r16.slice(g, g + s); - f.push(sc(x, e, t10)); + for (let g = 0; g < r15.length; g += s) { + let x = r15.slice(g, g + s); + f.push(Zc(x, e, t10)); } - let h = sc(f, e, t10); + let h = Zc(f, e, t10); for (let g of f) t10.disposeData(g.dataId); return h; } - let { tensors2D: a, outShape: i } = tle(r16, e, t10), p = a.map((f) => f.shape), u = new Tx(p), l = [], c = new Array(p.length - 1); - if (c.length > 0) { - c[0] = p[0][1], l.push({ type: "int32", data: [c[0]] }); - for (let f = 1; f < c.length; f++) - c[f] = c[f - 1] + p[f][1], l.push({ type: "int32", data: [c[f]] }); + let { tensors2D: a, outShape: i } = Nue(r15, e, t10), p = a.map((f) => f.shape), u = new fx(p), c = [], l = new Array(p.length - 1); + if (l.length > 0) { + l[0] = p[0][1], c.push({ type: "int32", data: [l[0]] }); + for (let f = 1; f < l.length; f++) + l[f] = l[f - 1] + p[f][1], c.push({ type: "int32", data: [l[f]] }); } - let m = t10.runWebGPUProgram(u, a, a[0].dtype, l); + let m = t10.runWebGPUProgram(u, a, a[0].dtype, c); a.forEach((f) => t10.disposeData(f.dataId)); - let d = le({ inputs: { x: m }, backend: t10, attrs: { shape: i } }); + let d = pe({ inputs: { x: m }, backend: t10, attrs: { shape: i } }); return t10.disposeData(m.dataId), d; } -function tle(r16, e, t10) { - let o = C.computeOutShape(r16.map((s) => s.shape), e); - return { tensors2D: r16.map((s) => le({ inputs: { x: s }, backend: t10, attrs: { shape: [y.sizeFromShape(s.shape.slice(0, e)), y.sizeFromShape(s.shape.slice(e))] } })), outShape: o }; +function Nue(r15, e, t10) { + let o = w.computeOutShape(r15.map((s) => s.shape), e); + return { tensors2D: r15.map((s) => pe({ inputs: { x: s }, backend: t10, attrs: { shape: [y.sizeFromShape(s.shape.slice(0, e)), y.sizeFromShape(s.shape.slice(e))] } })), outShape: o }; } -function Hv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); - C.assertParamsConsistent(a, s); - let i = C.computeOutShape(e.map((u) => u.shape), s); +function a0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o, s = y.parseAxisParam(n, e[0].shape)[0], a = e.map((u) => u.shape); + w.assertParamsConsistent(a, s); + let i = w.computeOutShape(e.map((u) => u.shape), s); if (y.sizeFromShape(i) === 0) return t10.makeTensorInfo(i, e[0].dtype, []); let p = e.filter((u) => y.sizeFromShape(u.shape) > 0); - return p.length === 1 ? Pt({ inputs: { x: p[0] }, backend: t10 }) : sc(p, s, t10); + return p.length === 1 ? At({ inputs: { x: p[0] }, backend: t10 }) : Zc(p, s, t10); } -var KW = { kernelName: pa, backendName: "webgpu", kernelFunc: Hv }; -function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { - let l = (D) => { +var TV = { kernelName: ta, backendName: "webgpu", kernelFunc: a0 }; +function Tue(r15, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4) { + let c = (D) => { switch (D) { case 1: return "resData = f32(x[xIndex]);"; @@ -30907,7 +29861,7 @@ function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4 default: throw new Error(`innerElementSize ${D} is not supported.`); } - }, c = (D) => { + }, l = (D) => { switch (D) { case 1: return "return f32(W[row * uniforms.wShape[3] + col]);"; @@ -30916,11 +29870,11 @@ function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4 default: throw new Error(`innerElementSize ${D} is not supported.`); } - }, m = r16 ? ` + }, m = r15 ? ` let coord = vec4(batch, xRow, xCol, xCh); ` : ` let coord = vec4(batch, xCh, xRow, xCol); - `, d = r16 ? ` + `, d = r15 ? ` let coords = vec4( batch, row / outWidth, @@ -30932,9 +29886,9 @@ function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4 row, col / outWidth, col % outWidth); - `, f = r16 ? "uniforms.xShape[1]" : "uniforms.xShape[2]", h = r16 ? "uniforms.xShape[2]" : "uniforms.xShape[3]", g = r16 ? "row" : "col", x = r16 ? "col" : "row", b = ` + `, f = r15 ? "uniforms.xShape[1]" : "uniforms.xShape[2]", h = r15 ? "uniforms.xShape[2]" : "uniforms.xShape[3]", g = r15 ? "row" : "col", x = r15 ? "col" : "row", b = ` let inChannels = uniforms.wShape[2]; - let outWidth = ${r16 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; + let outWidth = ${r15 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; let outRow = ${g} / outWidth; let outCol = ${g} % outWidth; @@ -30949,9 +29903,9 @@ function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4 if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) { ${m} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); - ${l(i)} + ${c(i)} } - return resData;`, w = r16 ? e && o ? ` + return resData;`, C = r15 ? e && o ? ` ${b}` : ` if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${b} @@ -30961,47 +29915,47 @@ function rle(r16, e, t10, o, n = false, s = null, a = false, i = 4, p = 4, u = 4 if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${b} } - return ${Ae(i)}(0.0);`, S = `${c(p)}`, k = Ae(u), T = r16 ? Ae(i) : Ae(p), E = r16 ? Ae(p) : Ae(i); + return ${Ae(i)}(0.0);`, S = `${l(p)}`, k = Ae(u), _ = r15 ? Ae(i) : Ae(p), $ = r15 ? Ae(p) : Ae(i); return ` - ${gr(s, a, u === 4, 4)} - fn mm_readA(batch: i32, row : i32, col : i32) -> ${T} { - ${r16 ? w : S} + ${dr(s, a, u === 4, 4)} + fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} { + ${r15 ? C : S} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${E} { - ${r16 ? S : w} + fn mm_readB(batch: i32, row : i32, col : i32) -> ${$} { + ${r15 ? S : C} } fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { var value = valueIn; - let outWidth = ${r16 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; + let outWidth = ${r15 ? "uniforms.outShape[2]" : "uniforms.outShape[3]"}; ${d} - ${no(n, s)} + ${Zr(n, s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } }`; } -var _x = class { +var hx = class { constructor(e, t10, o, n, s = false, a = null, i = false, p = false) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.isVec4 = ((e.inChannels % 4 === 0 || e.inChannels % 3 === 0) && this.isChannelsLast || e.outWidth % 4 === 0 && !this.isChannelsLast) && e.outChannels % 4 === 0, this.dispatchLayout = this.isChannelsLast ? { x: [3], y: [1, 2], z: [0] } : { x: [2, 3], y: [1], z: [0] }, this.workgroupSize = ym(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = bm(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 ? (this.outputComponent = 4, this.isChannelsLast && e.inChannels % 4 !== 0 ? (this.innerElementSize = 3, this.variableComponents = [1, 4]) : (this.innerElementSize = 4, this.variableComponents = [4, 4]), s && (this.variableNames.push("bias"), this.variableComponents.push(4)), i && (this.variableNames.push("preluActivationWeights"), this.variableComponents.push(4))) : (this.innerElementSize = this.elementsPerThread[0], s && this.variableNames.push("bias"), i && this.variableNames.push("preluActivationWeights")), this.sequentialAccessByThreads = p, this.addBias = s, this.activation = a, this.hasPreluActivationWeights = i, this.tileAOuter = this.workgroupSize[1] * this.elementsPerThread[1], this.tileBOuter = this.workgroupSize[0] * this.elementsPerThread[0], this.tileInner = Math.max(this.workgroupSize[0] * this.innerElementSize, this.workgroupSize[1]), this.fitAOuter = t10 % this.tileAOuter === 0, this.fitBOuter = o % this.tileBOuter === 0, this.fitInner = n % this.tileInner === 0, this.shaderKey = `conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`; + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.isVec4 = ((e.inChannels % 4 === 0 || e.inChannels % 3 === 0) && this.isChannelsLast || e.outWidth % 4 === 0 && !this.isChannelsLast) && e.outChannels % 4 === 0, this.dispatchLayout = this.isChannelsLast ? { x: [3], y: [1, 2], z: [0] } : { x: [2, 3], y: [1], z: [0] }, this.workgroupSize = lm(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = mm(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 ? (this.outputComponent = 4, this.isChannelsLast && e.inChannels % 4 !== 0 ? (this.innerElementSize = 3, this.variableComponents = [1, 4]) : (this.innerElementSize = 4, this.variableComponents = [4, 4]), s && (this.variableNames.push("bias"), this.variableComponents.push(4)), i && (this.variableNames.push("preluActivationWeights"), this.variableComponents.push(4))) : (this.innerElementSize = this.elementsPerThread[0], s && this.variableNames.push("bias"), i && this.variableNames.push("preluActivationWeights")), this.sequentialAccessByThreads = p, this.addBias = s, this.activation = a, this.hasPreluActivationWeights = i, this.tileAOuter = this.workgroupSize[1] * this.elementsPerThread[1], this.tileBOuter = this.workgroupSize[0] * this.elementsPerThread[0], this.tileInner = Math.max(this.workgroupSize[0] * this.innerElementSize, this.workgroupSize[1]), this.fitAOuter = t10 % this.tileAOuter === 0, this.fitBOuter = o % this.tileBOuter === 0, this.fitInner = n % this.tileInner === 0, this.shaderKey = `conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`; } getUserCode() { - let e = this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner) : Pp(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), t10 = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; + let e = this.isVec4 ? _p(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner) : Ep(this.elementsPerThread, this.workgroupSize, !this.isChannelsLast, this.tileInner, false, null, this.sequentialAccessByThreads), t10 = this.isVec4 ? [this.innerElementSize, 4, 4] : [1, 1, 1]; return ` - ${rle(this.isChannelsLast, this.fitAOuter, this.fitBOuter, this.fitInner, this.addBias, this.activation, this.hasPreluActivationWeights, t10[0], t10[1], t10[2])} + ${Tue(this.isChannelsLast, this.fitAOuter, this.fitBOuter, this.fitInner, this.addBias, this.activation, this.hasPreluActivationWeights, t10[0], t10[1], t10[2])} ${e} `; } }; -var Ex = class { +var gx = class { constructor(e, t10 = false, o = null, n = false) { this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,", this.workgroupSize = [4, 4, 8], this.outputShape = e.outShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.dispatchLayout = this.isChannelsLast ? { x: [2], y: [1], z: [0, 3] } : { x: [3], y: [2], z: [0, 1] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.addBias = t10, this.activation = o, this.hasPreluActivationWeights = n, t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.shaderKey = `conv2dnaive_${this.activation}_${this.isChannelsLast}`; } getUserCode() { return ` - ${gr(this.activation, this.hasPreluActivationWeights, false, 4)} + ${dr(this.activation, this.hasPreluActivationWeights, false, 4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -31022,7 +29976,7 @@ var Ex = class { let coords = ${this.isChannelsLast ? "vec4(batch, row, col, chan);" : "vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${no(this.addBias, this.activation)} + ${Zr(this.addBias, this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -31049,7 +30003,7 @@ var Ex = class { `; } }; -var $x = class { +var xx = class { constructor(e, t10) { this.variableNames = ["x"], this.uniforms = `pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, inChannels : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = t10, this.shaderKey = `im2col_${this.isChannelsLast}`; @@ -31082,78 +30036,78 @@ var $x = class { `; } }; -function Rx(r16, e) { - let t10 = r16.length; - return t10 >= 3 ? e ? [...r16.slice(0, -3), r16[t10 - 3] * r16[t10 - 2], r16[t10 - 1]] : [...r16.slice(0, -3), r16[t10 - 3], r16[t10 - 2] * r16[t10 - 1]] : !e && t10 === 1 && r16[0] > 1 ? [r16[0], 1] : null; +function yx(r15, e) { + let t10 = r15.length; + return t10 >= 3 ? e ? [...r15.slice(0, -3), r15[t10 - 3] * r15[t10 - 2], r15[t10 - 1]] : [...r15.slice(0, -3), r15[t10 - 3], r15[t10 - 2] * r15[t10 - 1]] : !e && t10 === 1 && r15[0] > 1 ? [r15[0], 1] : null; } -function ole({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = t10.dataFormat === "channelsLast", u = !p, l = false, c = p && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = [], d, f; - if (c) { +function _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = t10.dataFormat === "channelsLast", u = !p, c = false, l = p && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = [], d, f; + if (l) { let x = t10.inHeight * t10.inWidth * t10.inChannels; - d = le({ inputs: { x: r16 }, backend: o, attrs: { shape: [1, t10.batchSize, x] } }), f = le({ inputs: { x: e }, backend: o, attrs: { shape: [1, x, t10.outChannels] } }); + d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: [1, t10.batchSize, x] } }), f = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, x, t10.outChannels] } }); } else - d = le({ inputs: { x: r16 }, backend: o, attrs: { shape: p ? [t10.batchSize, t10.inHeight * t10.inWidth, t10.inChannels] : [t10.batchSize, t10.inChannels, t10.inHeight * t10.inWidth] } }), f = le({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); + d = pe({ inputs: { x: r15 }, backend: o, attrs: { shape: p ? [t10.batchSize, t10.inHeight * t10.inWidth, t10.inChannels] : [t10.batchSize, t10.inChannels, t10.inHeight * t10.inWidth] } }), f = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, t10.inChannels, t10.outChannels] } }); if (m.push(d), m.push(f), s != null) { - let x = Rx(s.shape, p); - x != null && (s = le({ inputs: { x: s }, backend: o, attrs: { shape: x } }), m.push(s)); + let x = yx(s.shape, p); + x != null && (s = pe({ inputs: { x: s }, backend: o, attrs: { shape: x } }), m.push(s)); } if (n != null) { - let x = Rx(n.shape, p); - x != null && (n = le({ inputs: { x: n }, backend: o, attrs: { shape: x } }), m.push(n)); + let x = yx(n.shape, p); + x != null && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: x } }), m.push(n)); } - let h = Op({ a: p ? d : f, b: p ? f : d, transposeA: u, transposeB: l, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), g = le({ inputs: { x: h }, backend: o, attrs: { shape: t10.outShape } }); + let h = $p({ a: p ? d : f, b: p ? f : d, transposeA: u, transposeB: c, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), g = pe({ inputs: { x: h }, backend: o, attrs: { shape: t10.outShape } }); m.push(h); for (let x of m) o.disposeData(x.dataId); return g; } -function nle({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let { filterWidth: p, filterHeight: u, inChannels: l, strideWidth: c, strideHeight: m, padInfo: d, outWidth: f, outHeight: h, dilationWidth: g, dilationHeight: x, dataFormat: b } = t10, w = b === "channelsLast", S = p * u * l, k = h * f, T = w ? [t10.batchSize, k, S] : [t10.batchSize, S, k], E = new $x(T, w), R = [{ type: "int32", data: [d.top, d.left] }, { type: "int32", data: [m, c] }, { type: "int32", data: [x, g] }, { type: "int32", data: [f] }, { type: "int32", data: [l * p] }, { type: "int32", data: [l] }], D = o.runWebGPUProgram(E, [r16], r16.dtype, R), F = []; - F.push(D); - let O = le({ inputs: { x: e }, backend: o, attrs: { shape: [1, S, -1] } }); - if (F.push(O), s != null) { - let U = Rx(s.shape, w); - U != null && (s = le({ inputs: { x: s }, backend: o, attrs: { shape: U } }), F.push(s)); +function Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let { filterWidth: p, filterHeight: u, inChannels: c, strideWidth: l, strideHeight: m, padInfo: d, outWidth: f, outHeight: h, dilationWidth: g, dilationHeight: x, dataFormat: b } = t10, C = b === "channelsLast", S = p * u * c, k = h * f, _ = C ? [t10.batchSize, k, S] : [t10.batchSize, S, k], $ = new xx(_, C), R = [{ type: "int32", data: [d.top, d.left] }, { type: "int32", data: [m, l] }, { type: "int32", data: [x, g] }, { type: "int32", data: [f] }, { type: "int32", data: [c * p] }, { type: "int32", data: [c] }], D = o.runWebGPUProgram($, [r15], r15.dtype, R), P = []; + P.push(D); + let O = pe({ inputs: { x: e }, backend: o, attrs: { shape: [1, S, -1] } }); + if (P.push(O), s != null) { + let U = yx(s.shape, C); + U != null && (s = pe({ inputs: { x: s }, backend: o, attrs: { shape: U } }), P.push(s)); } if (n != null) { - let U = Rx(n.shape, w); - U != null && (n = le({ inputs: { x: n }, backend: o, attrs: { shape: U } }), F.push(n)); + let U = yx(n.shape, C); + U != null && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: U } }), P.push(n)); } - let B = Op({ a: w ? D : O, b: w ? O : D, transposeA: !w, transposeB: false, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), z = le({ inputs: { x: B }, backend: o, attrs: { shape: t10.outShape } }); - F.push(B); - for (let U of F) + let B = $p({ a: C ? D : O, b: C ? O : D, transposeA: !C, transposeB: false, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }), z = pe({ inputs: { x: B }, backend: o, attrs: { shape: t10.outShape } }); + P.push(B); + for (let U of P) o.disposeData(U.dataId); return z; } -function Dx({ x: r16, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { - let p = n != null, u = s != null, l = t10.dataFormat === "channelsLast", c = l && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG"); - if (!m && (c || t10.filterHeight === 1 && t10.filterWidth === 1 && t10.dilationHeight === 1 && t10.dilationWidth === 1 && t10.strideHeight === 1 && t10.strideWidth === 1 && (t10.padInfo.type === "SAME" || t10.padInfo.type === "VALID"))) - return ole({ x: r16, filter: e, convInfo: t10, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); +function bx({ x: r15, filter: e, convInfo: t10, backend: o, bias: n = null, preluActivationWeights: s = null, leakyreluAlpha: a = 0, activation: i = null }) { + let p = n != null, u = s != null, c = t10.dataFormat === "channelsLast", l = c && t10.filterHeight === t10.inHeight && t10.filterWidth === t10.inWidth && t10.padInfo.type === "VALID", m = A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG"); + if (!m && (l || t10.filterHeight === 1 && t10.filterWidth === 1 && t10.dilationHeight === 1 && t10.dilationWidth === 1 && t10.strideHeight === 1 && t10.strideWidth === 1 && (t10.padInfo.type === "SAME" || t10.padInfo.type === "VALID"))) + return _ue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, activation: i, preluActivationWeights: s, leakyreluAlpha: a }); let d = A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"), f = d > -1 ? d : o.thresholdToIncreaseWorkgroups, h = t10.batchSize * Math.ceil(t10.outHeight * t10.outWidth / 32) * Math.ceil(t10.outChannels / 32); if (A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER") || h <= f) - return nle({ x: r16, filter: e, convInfo: t10, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); + return Eue({ x: r15, filter: e, convInfo: t10, backend: o, bias: n, preluActivationWeights: s, leakyreluAlpha: a, activation: i }); let g, x = [t10.padInfo.top, t10.padInfo.left], b = [{ type: "int32", data: [t10.filterHeight, t10.filterWidth] }, { type: "int32", data: [...x] }, { type: "int32", data: [t10.strideHeight, t10.strideWidth] }, { type: "int32", data: [t10.dilationHeight, t10.dilationWidth] }]; if (m) - g = new Ex(t10, p, i, u); + g = new gx(t10, p, i, u); else { - let T = l ? t10.outHeight * t10.outWidth : t10.outChannels, E = l ? t10.outChannels : t10.outHeight * t10.outWidth, R = t10.filterHeight * t10.filterWidth * t10.inChannels; - b.push({ type: "int32", data: [T] }, { type: "int32", data: [E] }, { type: "int32", data: [R] }); + let _ = c ? t10.outHeight * t10.outWidth : t10.outChannels, $ = c ? t10.outChannels : t10.outHeight * t10.outWidth, R = t10.filterHeight * t10.filterWidth * t10.inChannels; + b.push({ type: "int32", data: [_] }, { type: "int32", data: [$] }, { type: "int32", data: [R] }); let D = o.adapterInfo.isIntel(); - g = new _x(t10, T, E, R, p, i, u, D); + g = new hx(t10, _, $, R, p, i, u, D); } - let w = [], S = [r16, e]; - p && (!l && n.shape.length === 1 && (n = le({ inputs: { x: n }, backend: o, attrs: { shape: [n.shape[0], 1, 1] } }), w.push(n)), S.push(n)), u && (!l && s.shape.length === 1 && (s = le({ inputs: { x: s }, backend: o, attrs: { shape: [s.shape[0], 1, 1] } }), w.push(s)), S.push(s)), i === "leakyrelu" && (b.push({ type: "float32", data: [a] }), g.uniforms += " alpha : f32,"); - let k = o.runWebGPUProgram(g, S, r16.dtype, b); - for (let T of w) - o.disposeData(T.dataId); + let C = [], S = [r15, e]; + p && (!c && n.shape.length === 1 && (n = pe({ inputs: { x: n }, backend: o, attrs: { shape: [n.shape[0], 1, 1] } }), C.push(n)), S.push(n)), u && (!c && s.shape.length === 1 && (s = pe({ inputs: { x: s }, backend: o, attrs: { shape: [s.shape[0], 1, 1] } }), C.push(s)), S.push(s)), i === "leakyrelu" && (b.push({ type: "float32", data: [a] }), g.uniforms += " alpha : f32,"); + let k = o.runWebGPUProgram(g, S, r15.dtype, b); + for (let _ of C) + o.disposeData(_.dataId); return k; } -function sle(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: l } = t10, c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, s.shape, a, u, i, l, false, c); - return Dx({ x: n, filter: s, convInfo: m, backend: o }); +function $ue(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = t10, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, s.shape, a, u, i, c, false, l); + return bx({ x: n, filter: s, convInfo: m, backend: o }); } -var qW = { kernelName: En, backendName: "webgpu", kernelFunc: sle }; -var Ax = class { +var _V = { kernelName: tn, backendName: "webgpu", kernelFunc: $ue }; +var Cx = class { constructor(e) { this.variableNames = ["dy", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,", this.workgroupSize = [64, 1, 1], this.size = false, this.isVec4 = false, this.workPerThread = 1, this.outputShape = e.inShape, this.isChannelsLast = e.dataFormat === "channelsLast", this.isVec4 = this.isChannelsLast && e.outChannels % 4 === 0 && e.inChannels % 4 === 0, this.isVec4 ? (this.workPerThread = 2, this.outputComponent = 4, this.workgroupSize = [4, 4, 4], this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [4, this.workPerThread, 1])) : (this.size = true, this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize)), this.shaderKey = `conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`; } @@ -31305,7 +30259,7 @@ var Ax = class { `; } }; -var Fx = class { +var wx = class { constructor(e) { this.variableNames = ["x", "dy"], this.uniforms = "pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", this.shaderKey = `conv2DDerFilter_${this.isChannelsLast}`; } @@ -31354,7 +30308,7 @@ var Fx = class { `; } }; -var Px = class { +var Sx = class { constructor(e) { this.variableNames = ["x", "dy"], this.uniforms = `pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3DDerFilter"; @@ -31403,7 +30357,7 @@ var Px = class { `; } }; -var Ox = class { +var Ix = class { constructor(e) { this.variableNames = ["dy", "W"], this.uniforms = `filterDims : vec3, pads : vec3, strides : vec3, outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3DDerInput"; @@ -31465,12 +30419,12 @@ var Ox = class { `; } }; -function ale(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: l } = o, c = C.convertConv2DDataFormat(p), m = C.computeConv2DInfo(n.shape, l, a, 1, i, u, false, c), d = new Fx(m), f = [{ type: "int32", data: [m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize] }, { type: "int32", data: [m.outHeight] }, { type: "int32", data: [m.outWidth] }, { type: "int32", data: [m.inHeight] }, { type: "int32", data: [m.inWidth] }]; +function Rue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, dataFormat: p, dimRoundingMode: u, filterShape: c } = o, l = w.convertConv2DDataFormat(p), m = w.computeConv2DInfo(n.shape, c, a, 1, i, u, false, l), d = new wx(m), f = [{ type: "int32", data: [m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize] }, { type: "int32", data: [m.outHeight] }, { type: "int32", data: [m.outWidth] }, { type: "int32", data: [m.inHeight] }, { type: "int32", data: [m.inWidth] }]; return t10.runWebGPUProgram(d, [n, s], n.dtype, f); } -var jW = { kernelName: Ui, backendName: "webgpu", kernelFunc: ale }; -function ile(r16 = 4) { +var EV = { kernelName: Fi, backendName: "webgpu", kernelFunc: Rue }; +function Due(r15 = 4) { let e = (s) => { switch (s) { case 1: @@ -31499,25 +30453,25 @@ function ile(r16 = 4) { let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.strides[0]); let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]); if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) { - return ${Ae(r16)}(0.0); + return ${Ae(r15)}(0.0); } if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) { - return ${Ae(r16)}(0.0); + return ${Ae(r15)}(0.0); } let coord = vec4( batch, i32(xR), i32(xC), col % uniforms.outBackprop[3]); - return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r16}];`} + return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r15}];`} } - return ${Ae(r16)}(0.0);`; + return ${Ae(r15)}(0.0);`; return ` - fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r16)} { + fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r15)} { ${o} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r16)} { + fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r15)} { let coordX = uniforms.filterDims.x - 1 - row / (uniforms.filterDims[1] * uniforms.outBackprop[3]); let coordY = uniforms.filterDims.y - 1 - @@ -31526,12 +30480,12 @@ function ile(r16 = 4) { coordX >= 0 && coordY >= 0) { let rowInner = row % uniforms.outBackprop[3]; let coord = vec4(coordX, coordY, col, rowInner); - ${e(r16)} + ${e(r15)} } - return ${Ae(r16)}(0.0); + return ${Ae(r15)}(0.0); } - fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r16)}) { + fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r15)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { var value = valueInput; let outCoord = vec4( @@ -31539,35 +30493,35 @@ function ile(r16 = 4) { row / uniforms.outShape[2], row % uniforms.outShape[2], col); - result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r16}] = value; + result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r15}] = value; } }`; } -var Mx = class { +var vx = class { constructor(e) { - this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.inShape, y.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = e.inChannels % 4 === 0 && e.outChannels % 4 === 0, this.dispatchLayout = { x: [3], y: [1, 2], z: [0] }, this.workgroupSize = ym(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = bm(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 && (this.outputComponent = 4, this.variableComponents = [4, 1]), this.shaderKey = `conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`; + this.variableNames = ["x", "W"], this.uniforms = "filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,", this.outputShape = e.inShape, y.assert(e.dataFormat === "channelsLast", () => "TODO: NCHW is unimplemented"), this.isVec4 = e.inChannels % 4 === 0 && e.outChannels % 4 === 0, this.dispatchLayout = { x: [3], y: [1, 2], z: [0] }, this.workgroupSize = lm(this.dispatchLayout, this.outputShape, this.isVec4), this.elementsPerThread = mm(this.dispatchLayout, this.outputShape, this.isVec4), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, this.elementsPerThread), this.isVec4 && (this.outputComponent = 4, this.variableComponents = [4, 1]), this.shaderKey = `conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`; } getUserCode() { - let e = this.isVec4 ? Fp(this.elementsPerThread, this.workgroupSize) : Pp(this.elementsPerThread, this.workgroupSize); + let e = this.isVec4 ? _p(this.elementsPerThread, this.workgroupSize) : Ep(this.elementsPerThread, this.workgroupSize); return ` - ${ile(this.isVec4 ? 4 : 1)} + ${Due(this.isVec4 ? 4 : 1)} ${e} `; } }; -function ule(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: l } = o, c = C.convertConv2DDataFormat(u), m = C.computeConv2DInfo(a, s.shape, i, 1, p, l, false, c), d = [{ type: "int32", data: [m.filterHeight, m.filterWidth] }, { type: "int32", data: [m.filterHeight - 1 - m.padInfo.top, m.filterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize, m.outHeight, m.outWidth, m.outChannels] }], f; +function Aue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { inputShape: a, strides: i, pad: p, dataFormat: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(u), m = w.computeConv2DInfo(a, s.shape, i, 1, p, c, false, l), d = [{ type: "int32", data: [m.filterHeight, m.filterWidth] }, { type: "int32", data: [m.filterHeight - 1 - m.padInfo.top, m.filterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.batchSize, m.outHeight, m.outWidth, m.outChannels] }], f; if (A().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE") || m.dataFormat !== "channelsLast") - f = new Ax(m); + f = new Cx(m); else { - f = new Mx(m); + f = new vx(m); let h = m.inHeight * m.inWidth, g = m.inChannels, x = m.filterHeight * m.filterWidth * m.outChannels; d.push({ type: "uint32", data: [h] }, { type: "uint32", data: [g] }, { type: "uint32", data: [x] }); } return t10.runWebGPUProgram(f, [n, s], "float32", d); } -var XW = { kernelName: $n, backendName: "webgpu", kernelFunc: ule }; -var Lx = class { +var $V = { kernelName: rn, backendName: "webgpu", kernelFunc: Aue }; +var kx = class { constructor(e) { this.variableNames = ["x", "W"], this.uniforms = "filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "conv3dnaive"; } @@ -31657,26 +30611,26 @@ var Lx = class { }`; } }; -function ple(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = C.computeConv3DInfo(n.shape, s.shape, a, p, i), l = [u.padInfo.front, u.padInfo.top, u.padInfo.left], c = [{ type: "int32", data: [u.filterDepth, u.filterHeight, u.filterWidth] }, { type: "int32", data: [...l] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.dilationDepth, u.dilationHeight, u.dilationWidth] }], m = new Lx(u), d = pt(n.dtype, s.dtype); - return t10.runWebGPUProgram(m, [n, s], d, c); +function Fue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = w.computeConv3DInfo(n.shape, s.shape, a, p, i), c = [u.padInfo.front, u.padInfo.top, u.padInfo.left], l = [{ type: "int32", data: [u.filterDepth, u.filterHeight, u.filterWidth] }, { type: "int32", data: [...c] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.dilationDepth, u.dilationHeight, u.dilationWidth] }], m = new kx(u), d = dt(n.dtype, s.dtype); + return t10.runWebGPUProgram(m, [n, s], d, l); } -var YW = { kernelName: Rn, backendName: "webgpu", kernelFunc: ple }; -function lle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = C.computeConv3DInfo(n.shape, p, a, 1, i), l = new Px(u), c = [{ type: "int32", data: [u.padInfo.front, u.padInfo.top, u.padInfo.left] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.batchSize] }, { type: "int32", data: [u.outDepth] }, { type: "int32", data: [u.outHeight] }, { type: "int32", data: [u.outWidth] }, { type: "int32", data: [u.inDepth] }, { type: "int32", data: [u.inHeight] }, { type: "int32", data: [u.inWidth] }]; - return t10.runWebGPUProgram(l, [n, s], s.dtype, c); +var RV = { kernelName: on, backendName: "webgpu", kernelFunc: Fue }; +function Pue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, pad: i, filterShape: p } = o, u = w.computeConv3DInfo(n.shape, p, a, 1, i), c = new Sx(u), l = [{ type: "int32", data: [u.padInfo.front, u.padInfo.top, u.padInfo.left] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.batchSize] }, { type: "int32", data: [u.outDepth] }, { type: "int32", data: [u.outHeight] }, { type: "int32", data: [u.outWidth] }, { type: "int32", data: [u.inDepth] }, { type: "int32", data: [u.inHeight] }, { type: "int32", data: [u.inWidth] }]; + return t10.runWebGPUProgram(c, [n, s], s.dtype, l); } -var QW = { kernelName: ti, backendName: "webgpu", kernelFunc: lle }; -function cle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { strides: a, pad: i, inputShape: p } = o, u = C.computeConv3DInfo(p, s.shape, a, 1, i), l = new Ox(u), c = [{ type: "int32", data: [u.filterDepth, u.filterHeight, u.filterWidth] }, { type: "int32", data: [u.filterDepth - 1 - u.padInfo.front, u.filterHeight - 1 - u.padInfo.top, u.filterWidth - 1 - u.padInfo.left] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.outDepth] }, { type: "int32", data: [u.outHeight] }, { type: "int32", data: [u.outWidth] }, { type: "int32", data: [u.outChannels] }]; - return t10.runWebGPUProgram(l, [n, s], n.dtype, c); +var DV = { kernelName: ja, backendName: "webgpu", kernelFunc: Pue }; +function Oue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, pad: i, inputShape: p } = o, u = w.computeConv3DInfo(p, s.shape, a, 1, i), c = new Ix(u), l = [{ type: "int32", data: [u.filterDepth, u.filterHeight, u.filterWidth] }, { type: "int32", data: [u.filterDepth - 1 - u.padInfo.front, u.filterHeight - 1 - u.padInfo.top, u.filterWidth - 1 - u.padInfo.left] }, { type: "int32", data: [u.strideDepth, u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.outDepth] }, { type: "int32", data: [u.outHeight] }, { type: "int32", data: [u.outWidth] }, { type: "int32", data: [u.outChannels] }]; + return t10.runWebGPUProgram(c, [n, s], n.dtype, l); } -var ZW = { kernelName: Dn, backendName: "webgpu", kernelFunc: cle }; -var mle = ye({ opType: Z.COS }); -var JW = { kernelName: An, backendName: "webgpu", kernelFunc: mle }; -var dle = ye({ opType: Z.COSH }); -var eU = { kernelName: Fn, backendName: "webgpu", kernelFunc: dle }; -var Bx = class { +var AV = { kernelName: nn, backendName: "webgpu", kernelFunc: Oue }; +var Mue = ye({ opType: Z.COS }); +var FV = { kernelName: sn, backendName: "webgpu", kernelFunc: Mue }; +var Lue = ye({ opType: Z.COSH }); +var PV = { kernelName: an, backendName: "webgpu", kernelFunc: Lue }; +var Nx = class { constructor(e, t10, o, n) { this.variableNames = ["Image", "Boxes", "BoxInd"], this.uniforms = "extrapolationValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true; let [s] = t10; @@ -31743,33 +30697,33 @@ var Bx = class { `; } }; -var fle = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, l = new Bx(n.shape[3], s.shape, i, p), c = [{ type: "float32", data: [u] }]; - return t10.runWebGPUProgram(l, [n, s, a], "float32", c); +var Bue = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n, boxes: s, boxInd: a } = e, { cropSize: i, method: p, extrapolationValue: u } = o, c = new Nx(n.shape[3], s.shape, i, p), l = [{ type: "float32", data: [u] }]; + return t10.runWebGPUProgram(c, [n, s, a], "float32", l); }; -var tU = { kernelName: Mn, backendName: "webgpu", kernelFunc: fle }; -var Lp; -(function(r16) { - r16.Prod = "*", r16.Sum = "+"; -})(Lp || (Lp = {})); -var Tm = class { +var OV = { kernelName: cn, backendName: "webgpu", kernelFunc: Bue }; +var Dp; +(function(r15) { + r15.Prod = "*", r15.Sum = "+"; +})(Dp || (Dp = {})); +var xm = class { constructor(e, t10, o, n) { this.variableNames = ["x"], this.uniforms = "index : f32,", this.size = true, this.workgroupSize = [128, 1, 1], this.outputShape = t10, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.exclusive = o, this.reverse = n, this.op = e, this.shaderKey = `cum_${this.op}_${this.exclusive}_${this.reverse}`; } getUserCode() { - let e = this.outputShape.length, t10 = this.op === Lp.Prod ? "1.0" : "0.0", o = this.exclusive ? t10 : `getX(${rU(e, "coords", this.op)})`, n = this.outputShape[this.outputShape.length - 1], s = "", a = ""; + let e = this.outputShape.length, t10 = this.op === Dp.Prod ? "1.0" : "0.0", o = this.exclusive ? t10 : `getX(${MV(e, "coords", this.op)})`, n = this.outputShape[this.outputShape.length - 1], s = "", a = ""; return this.exclusive ? (s = this.reverse ? `end != ${n - 1}` : "end != 0", a = this.reverse ? "end + 1" : "end - 1") : (s = this.reverse ? `end + pow2 < ${n}` : "end >= pow2", a = this.reverse ? "end + pow2" : "end - pow2"), ` ${G("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${oU(e, "coords", this.op)}; + let end = ${LV(e, "coords", this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${oU(e, "coords", this.op)} = idx; - val ${this.op}= getX(${rU(e, "coords", this.op)}); + ${LV(e, "coords", this.op)} = idx; + val ${this.op}= getX(${MV(e, "coords", this.op)}); } setOutputAtIndex(index, val); } @@ -31777,65 +30731,65 @@ var Tm = class { `; } }; -function rU(r16, e, t10) { - if (r16 === 1) +function MV(r15, e, t10) { + if (r15 === 1) return `${e}`; - if (r16 === 2) + if (r15 === 2) return `${e}.x, ${e}.y`; - if (r16 === 3) + if (r15 === 3) return `${e}.x, ${e}.y, ${e}.z`; - if (r16 === 4) + if (r15 === 4) return `${e}.x, ${e}.y, ${e}.z, ${e}.w`; - throw Error(`Cumulative ${t10} for rank ${r16} is not yet supported`); + throw Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } -function oU(r16, e, t10) { - if (r16 === 1) +function LV(r15, e, t10) { + if (r15 === 1) return `${e}`; - if (r16 === 2) + if (r15 === 2) return `${e}.y`; - if (r16 === 3) + if (r15 === 3) return `${e}.z`; - if (r16 === 4) + if (r15 === 4) return `${e}.w`; - throw Error(`Cumulative ${t10} for rank ${r16} is not yet supported`); + throw Error(`Cumulative ${t10} for rank ${r15} is not yet supported`); } -function zx(r16, e, t10, o, n, s) { - let a = e.shape.length, i = C.getAxesPermutation([o], a), p = e; - i != null && (p = Cr({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); - let u = C.getInnerMostAxes(1, a)[0]; +function Tx(r15, e, t10, o, n, s) { + let a = e.shape.length, i = w.getAxesPermutation([o], a), p = e; + i != null && (p = xr({ inputs: { x: e }, backend: t10, attrs: { perm: i } })); + let u = w.getInnerMostAxes(1, a)[0]; if (u !== a - 1) throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length - 1} but got axis=${o}`); - let l = p.shape[u], c = Pt({ inputs: { x: p }, backend: t10 }); - for (let m = 0; m <= Math.ceil(Math.log2(l)) - 1; m++) { - let d = new Tm(r16, p.shape, false, s), f = c, h = [{ type: "float32", data: [m] }]; - c = t10.runWebGPUProgram(d, [c], c.dtype, h), t10.disposeData(f.dataId); + let c = p.shape[u], l = At({ inputs: { x: p }, backend: t10 }); + for (let m = 0; m <= Math.ceil(Math.log2(c)) - 1; m++) { + let d = new xm(r15, p.shape, false, s), f = l, h = [{ type: "float32", data: [m] }]; + l = t10.runWebGPUProgram(d, [l], l.dtype, h), t10.disposeData(f.dataId); } if (n) { - let m = new Tm(r16, p.shape, n, s), d = c, f = [{ type: "float32", data: [0] }]; - c = t10.runWebGPUProgram(m, [c], c.dtype, f), t10.disposeData(d.dataId); + let m = new xm(r15, p.shape, n, s), d = l, f = [{ type: "float32", data: [0] }]; + l = t10.runWebGPUProgram(m, [l], l.dtype, f), t10.disposeData(d.dataId); } if (i != null) { - let m = C.getUndoAxesPermutation(i), d = Cr({ inputs: { x: c }, backend: t10, attrs: { perm: m } }); - return t10.disposeData(c.dataId), t10.disposeData(p.dataId), d; + let m = w.getUndoAxesPermutation(i), d = xr({ inputs: { x: l }, backend: t10, attrs: { perm: m } }); + return t10.disposeData(l.dataId), t10.disposeData(p.dataId), d; } - return c; + return l; } -function hle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return zx(Lp.Prod, n, t10, s, a, i); +function zue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return Tx(Dp.Prod, n, t10, s, a, i); } -var nU = { kernelName: Pn, backendName: "webgpu", kernelFunc: hle }; -function gle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; - return zx(Lp.Sum, n, t10, s, a, i); +var BV = { kernelName: un, backendName: "webgpu", kernelFunc: zue }; +function Vue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, exclusive: a, reverse: i } = o; + return Tx(Dp.Sum, n, t10, s, a, i); } -var sU = { kernelName: On, backendName: "webgpu", kernelFunc: gle }; -function xle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o, p = n.shape.length === 1, l = y.sizeFromShape(s.shape) > 0, c = s.dtype, m = p ? [n.shape[0]] : [n.shape[0], n.shape[1]], d = p ? [a] : [n.shape[0], a], f = Nt({ backend: t10, attrs: { shape: d, value: 0, dtype: c } }), h = new nc(m, l, i), g = [{ type: "int32", data: [a] }], x = l ? [n, s] : [n]; - return t10.runWebGPUProgram(h, x, c, g, f); +var zV = { kernelName: pn, backendName: "webgpu", kernelFunc: Vue }; +function Wue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, weights: s } = e, { size: a, binaryOutput: i } = o, p = n.shape.length === 1, c = y.sizeFromShape(s.shape) > 0, l = s.dtype, m = p ? [n.shape[0]] : [n.shape[0], n.shape[1]], d = p ? [a] : [n.shape[0], a], f = vt({ backend: t10, attrs: { shape: d, value: 0, dtype: l } }), h = new Qc(m, c, i), g = [{ type: "int32", data: [a] }], x = c ? [n, s] : [n]; + return t10.runWebGPUProgram(h, x, l, g, f); } -var aU = { kernelName: la, backendName: "webgpu", kernelFunc: xle }; -var Vx = class { +var VV = { kernelName: ra, backendName: "webgpu", kernelFunc: Wue }; +var _x = class { constructor(e, t10) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.uniforms = "blockSize : i32,", this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `depthToSpace_${t10}`, this.dataFormat = t10; } @@ -31878,19 +30832,19 @@ var Vx = class { return this.dataFormat === "NHWC" ? "getX(b, in_h, in_w, in_d)" : "getX(b, in_d, in_h, in_w)"; } }; -function yle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], l = a === "NHWC" ? n.shape[3] : n.shape[1], c = p * s, m = u * s, d = l / (s * s), f = a === "NHWC" ? [i, c, m, d] : [i, d, c, m], h = [{ type: "int32", data: [s] }], g = new Vx(f, a); +function Uue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockSize: s, dataFormat: a } = o, i = n.shape[0], p = a === "NHWC" ? n.shape[1] : n.shape[2], u = a === "NHWC" ? n.shape[2] : n.shape[3], c = a === "NHWC" ? n.shape[3] : n.shape[1], l = p * s, m = u * s, d = c / (s * s), f = a === "NHWC" ? [i, l, m, d] : [i, d, l, m], h = [{ type: "int32", data: [s] }], g = new _x(f, a); return t10.runWebGPUProgram(g, [n], n.dtype, h); } -var iU = { kernelName: Ln, backendName: "webgpu", kernelFunc: yle }; -var Wx = class { +var WV = { kernelName: ln, backendName: "webgpu", kernelFunc: Uue }; +var Ex = class { constructor(e, t10, o, n = false, s = null, a = false) { this.variableNames = ["x", "W"], this.uniforms = "pads : vec2, inDims : vec2,", this.workgroupSize = [16, 16, 1], this.outputShape = e, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), n && this.variableNames.push("bias"), a && this.variableNames.push("preluActivationWeights"), this.addBias = n, this.activation = s, this.hasPreluActivation = a, this.filterHeight = t10, this.filterWidth = o, this.shaderKey = `depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`; } getUserCode() { let e = this.filterWidth * this.filterHeight, t10 = this.workgroupSize[0] * this.workgroupSize[1] * this.workgroupSize[2], o = this.workgroupSize[1] + this.filterHeight - 1, n = this.workgroupSize[0] + this.filterWidth - 1; return ` - ${gr(this.activation, this.hasPreluActivation, false, 4)} + ${dr(this.activation, this.hasPreluActivation, false, 4)} var mm_Asub : array, ${o}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -31946,7 +30900,7 @@ var Wx = class { value = fma(xVal, wVal, value); } } - ${no(this.addBias, this.activation)} + ${Zr(this.addBias, this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } @@ -31954,7 +30908,7 @@ var Wx = class { `; } }; -var ac = class { +var Jc = class { constructor(e, t10 = false, o = null, n = false) { this.variableNames = ["x", "W"], this.uniforms = "pads : vec2, inDims : vec2, virtualWidth : i32,", this.workgroupSize = [64, 1, 1], this.workPerThread = 4, this.outputComponent = 4, this.outputShape = e.outShape, this.virtualWidth = Math.ceil(this.outputShape[2] / this.workPerThread) * this.workPerThread; let s = [this.outputShape[0], this.outputShape[1], this.virtualWidth, this.outputShape[3]]; @@ -31963,7 +30917,7 @@ var ac = class { getUserCode() { let e = (this.workPerThread - 1) * this.convInfo.strideWidth + this.convInfo.filterWidth, t10 = this.convInfo.strideHeight, o = this.convInfo.strideWidth; return ` - ${gr(this.activation, this.hasPreluActivation, true, 4)} + ${dr(this.activation, this.hasPreluActivation, true, 4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -32012,7 +30966,7 @@ var ac = class { let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${no(this.addBias, this.activation)} + ${Zr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } @@ -32020,7 +30974,7 @@ var ac = class { `; } }; -var ic = class { +var el = class { constructor(e, t10 = false, o = null, n = false) { this.variableNames = ["x", "W"], this.uniforms = `pads : vec2, inDims : vec2, filterHeight : i32, filterWidth : i32, strides : vec2, dilations : vec2,`, this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.isChannelsLast = e.dataFormat === "channelsLast", t10 && this.variableNames.push("bias"), n && this.variableNames.push("preluActivationWeights"), this.convInfo = e, this.addBias = t10, this.activation = o, this.hasPreluActivation = n, this.shaderKey = `depthwise_${this.activation}_${this.isChannelsLast}`; @@ -32028,7 +30982,7 @@ var ic = class { getUserCode() { let e = this.isChannelsLast ? "getX(batch, xR, xC, d1);" : "getX(batch, d1, xR, xC);"; return ` - ${gr(this.activation, this.hasPreluActivation, false, 4)} + ${dr(this.activation, this.hasPreluActivation, false, 4)} ${G("index")} { if (index < uniforms.size) { @@ -32089,21 +31043,21 @@ var ic = class { } } } - ${no(this.addBias, this.activation)} + ${Zr(this.addBias, this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } `; } }; -function ble(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: l } = o, c = C.convertConv2DDataFormat(p), m = u; +function Gue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dataFormat: p, dilations: u, dimRoundingMode: c } = o, l = w.convertConv2DDataFormat(p), m = u; m == null && (m = [1, 1]); - let d = C.computeConv2DInfo(n.shape, s.shape, a, m, i, l, true, c), f = [{ type: "int32", data: [d.padInfo.top, d.padInfo.left] }, { type: "int32", data: [d.inHeight, d.inWidth] }], h = d.dataFormat === "channelsLast", g; - return !h && d.inHeight > 16 && d.inWidth > 16 && d.strideHeight === 1 && d.strideWidth === 1 && d.dilationWidth === 1 && d.dilationHeight === 1 && d.inChannels === d.outChannels ? g = new Wx(d.outShape, d.filterHeight, d.filterWidth) : h && d.outHeight > 4 && d.outWidth > 4 && d.strideWidth <= 2 && d.inChannels === d.outChannels && d.dilationHeight === 1 && d.dilationWidth === 1 && d.inChannels % 4 === 0 ? (g = new ac(d), f.push({ type: "int32", data: [g.virtualWidth] })) : (g = new ic(d), f.push({ type: "int32", data: [d.filterHeight] }, { type: "int32", data: [d.filterWidth] }, { type: "int32", data: [d.strideHeight, d.strideWidth] }, { type: "int32", data: [d.dilationHeight, d.dilationWidth] })), t10.runWebGPUProgram(g, [n, s], n.dtype, f); + let d = w.computeConv2DInfo(n.shape, s.shape, a, m, i, c, true, l), f = [{ type: "int32", data: [d.padInfo.top, d.padInfo.left] }, { type: "int32", data: [d.inHeight, d.inWidth] }], h = d.dataFormat === "channelsLast", g; + return !h && d.inHeight > 16 && d.inWidth > 16 && d.strideHeight === 1 && d.strideWidth === 1 && d.dilationWidth === 1 && d.dilationHeight === 1 && d.inChannels === d.outChannels ? g = new Ex(d.outShape, d.filterHeight, d.filterWidth) : h && d.outHeight > 4 && d.outWidth > 4 && d.strideWidth <= 2 && d.inChannels === d.outChannels && d.dilationHeight === 1 && d.dilationWidth === 1 && d.inChannels % 4 === 0 ? (g = new Jc(d), f.push({ type: "int32", data: [g.virtualWidth] })) : (g = new el(d), f.push({ type: "int32", data: [d.filterHeight] }, { type: "int32", data: [d.filterWidth] }, { type: "int32", data: [d.strideHeight, d.strideWidth] }, { type: "int32", data: [d.dilationHeight, d.dilationWidth] })), t10.runWebGPUProgram(g, [n, s], n.dtype, f); } -var uU = { kernelName: Bn, backendName: "webgpu", kernelFunc: ble }; -var Ux = class { +var UV = { kernelName: mn, backendName: "webgpu", kernelFunc: Gue }; +var $x = class { constructor(e) { this.variableNames = ["x", "dy"], this.uniforms = `strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.filterShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "depthwise_conv2d_backprop_filter"; @@ -32147,7 +31101,7 @@ var Ux = class { `; } }; -var Gx = class { +var Rx = class { constructor(e) { this.variableNames = ["dy", "W"], this.uniforms = `strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, channelMul : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "depthwise_conv2d_backprop_input"; @@ -32198,17 +31152,17 @@ var Gx = class { `; } }; -function Cle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: l } = o, c = C.computeConv2DInfo(n.shape, l, a, i, p, u, true), m = new Ux(c), d = [{ type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.filterHeight, c.filterWidth] }, { type: "int32", data: [c.outHeight] }, { type: "int32", data: [c.outWidth] }, { type: "int32", data: [c.inHeight] }, { type: "int32", data: [c.inWidth] }, { type: "int32", data: [c.batchSize] }, { type: "int32", data: [c.outChannels / c.inChannels] }]; +function Hue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, dy: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, filterShape: c } = o, l = w.computeConv2DInfo(n.shape, c, a, i, p, u, true), m = new $x(l), d = [{ type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.filterHeight, l.filterWidth] }, { type: "int32", data: [l.outHeight] }, { type: "int32", data: [l.outWidth] }, { type: "int32", data: [l.inHeight] }, { type: "int32", data: [l.inWidth] }, { type: "int32", data: [l.batchSize] }, { type: "int32", data: [l.outChannels / l.inChannels] }]; return t10.runWebGPUProgram(m, [n, s], "float32", d); } -var pU = { kernelName: Gi, backendName: "webgpu", kernelFunc: Cle }; -function wle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: l } = o, c = C.computeConv2DInfo(l, s.shape, a, i, p, u, true), m = new Gx(c), d = [{ type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.filterHeight - 1 - c.padInfo.top, c.filterWidth - 1 - c.padInfo.left] }, { type: "int32", data: [c.filterHeight, c.filterWidth] }, { type: "int32", data: [c.outHeight] }, { type: "int32", data: [c.outWidth] }, { type: "int32", data: [c.outChannels / c.inChannels] }]; +var GV = { kernelName: Pi, backendName: "webgpu", kernelFunc: Hue }; +function Kue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, filter: s } = e, { strides: a, dilations: i, pad: p, dimRoundingMode: u, inputShape: c } = o, l = w.computeConv2DInfo(c, s.shape, a, i, p, u, true), m = new Rx(l), d = [{ type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.filterHeight - 1 - l.padInfo.top, l.filterWidth - 1 - l.padInfo.left] }, { type: "int32", data: [l.filterHeight, l.filterWidth] }, { type: "int32", data: [l.outHeight] }, { type: "int32", data: [l.outWidth] }, { type: "int32", data: [l.outChannels / l.inChannels] }]; return t10.runWebGPUProgram(m, [n, s], n.dtype, d); } -var lU = { kernelName: Hi, backendName: "webgpu", kernelFunc: wle }; -var Hx = class { +var HV = { kernelName: Oi, backendName: "webgpu", kernelFunc: Kue }; +var Dx = class { constructor(e) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e, e], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "diag"; } @@ -32224,12 +31178,12 @@ var Hx = class { `; } }; -function Sle(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = le({ inputs: { x: o }, backend: t10, attrs: { shape: [s] } }), i = new Hx(s), p = t10.runWebGPUProgram(i, [a], a.dtype), u = le({ inputs: { x: p }, backend: t10, attrs: { shape: n } }); +function que(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e, n = [...o.shape, ...o.shape], s = y.sizeFromShape(o.shape), a = pe({ inputs: { x: o }, backend: t10, attrs: { shape: [s] } }), i = new Dx(s), p = t10.runWebGPUProgram(i, [a], a.dtype), u = pe({ inputs: { x: p }, backend: t10, attrs: { shape: n } }); return t10.disposeData(a.dataId), t10.disposeData(p.dataId), u; } -var cU = { kernelName: ca, backendName: "webgpu", kernelFunc: Sle }; -var Kx = class { +var KV = { kernelName: oa, backendName: "webgpu", kernelFunc: que }; +var Ax = class { constructor(e) { this.variableNames = ["x", "w"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.outShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "dilation2d"; } @@ -32269,12 +31223,12 @@ var Kx = class { `; } }; -function Ile(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = C.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), l = [u.padInfo.top, u.padInfo.left], c = [{ type: "int32", data: [u.filterHeight, u.filterWidth] }, { type: "int32", data: [...l] }, { type: "int32", data: [u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.dilationHeight, u.dilationWidth] }], m = new Kx(u); - return t10.runWebGPUProgram(m, [n, s], n.dtype, c); +function jue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s } = e, { strides: a, pad: i, dilations: p } = o, u = w.computeDilation2DInfo(n.shape, s.shape, a, i, "NHWC", p), c = [u.padInfo.top, u.padInfo.left], l = [{ type: "int32", data: [u.filterHeight, u.filterWidth] }, { type: "int32", data: [...c] }, { type: "int32", data: [u.strideHeight, u.strideWidth] }, { type: "int32", data: [u.dilationHeight, u.dilationWidth] }], m = new Ax(u); + return t10.runWebGPUProgram(m, [n, s], n.dtype, l); } -var mU = { kernelName: zn, backendName: "webgpu", kernelFunc: Ile }; -var qx = class { +var qV = { kernelName: dn, backendName: "webgpu", kernelFunc: jue }; +var Fx = class { constructor(e, t10) { if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.inShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), t10 !== "float32" && t10 !== "int32") throw new Error(`Dilation2DBackpropInput only supports float32 and int32 @@ -32322,13 +31276,13 @@ var qx = class { let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${oo("&result[flatIndexIn]", "value", this.type)} + ${Qr("&result[flatIndexIn]", "value", this.type)} } } `; } }; -var jx = class { +var Px = class { constructor(e, t10, o) { if (this.variableNames = ["x", "w", "dy"], this.uniforms = "filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e.filterShape, this.dispatchLayout = X(e.outShape), this.dispatch = H(this.dispatchLayout, e.outShape, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 @@ -32375,25 +31329,25 @@ var jx = class { let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${oo("&result[flatIndexIn]", "value", this.type)} + ${Qr("&result[flatIndexIn]", "value", this.type)} } } `; } }; -function vle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o, l = C.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), c = s.dtype, m = new jx(l, s.shape, c), d = [{ type: "int32", data: [l.filterHeight, l.filterWidth] }, { type: "int32", data: [l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.dilationHeight, l.dilationWidth] }, { type: "int32", data: [y.sizeFromShape(l.outShape)] }], f = Nt({ backend: t10, attrs: { shape: s.shape, value: 0, dtype: c } }); - return t10.runWebGPUProgram(m, [n, s, a], c, d, f); +function Xue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o, c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = s.dtype, m = new Px(c, s.shape, l), d = [{ type: "int32", data: [c.filterHeight, c.filterWidth] }, { type: "int32", data: [c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.dilationHeight, c.dilationWidth] }, { type: "int32", data: [y.sizeFromShape(c.outShape)] }], f = vt({ backend: t10, attrs: { shape: s.shape, value: 0, dtype: l } }); + return t10.runWebGPUProgram(m, [n, s, a], l, d, f); } -var dU = { kernelName: qi, backendName: "webgpu", kernelFunc: vle }; -function kle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o, l = C.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), c = n.dtype, m = new qx(l, c), d = [{ type: "int32", data: [l.filterHeight, l.filterWidth] }, { type: "int32", data: [l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.dilationHeight, l.dilationWidth] }, { type: "int32", data: [y.sizeFromShape(l.outShape)] }], f = Nt({ backend: t10, attrs: { shape: l.inShape, value: 0, dtype: c } }); - return t10.runWebGPUProgram(m, [n, s, a], c, d, f); +var jV = { kernelName: Li, backendName: "webgpu", kernelFunc: Xue }; +function Yue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, dy: a } = e, { strides: i, pad: p, dilations: u } = o, c = w.computeDilation2DInfo(n.shape, s.shape, i, p, "NHWC", u), l = n.dtype, m = new Fx(c, l), d = [{ type: "int32", data: [c.filterHeight, c.filterWidth] }, { type: "int32", data: [c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.dilationHeight, c.dilationWidth] }, { type: "int32", data: [y.sizeFromShape(c.outShape)] }], f = vt({ backend: t10, attrs: { shape: c.inShape, value: 0, dtype: l } }); + return t10.runWebGPUProgram(m, [n, s, a], l, d, f); } -var fU = { kernelName: Ki, backendName: "webgpu", kernelFunc: kle }; -var Xx = class { +var XV = { kernelName: Mi, backendName: "webgpu", kernelFunc: Yue }; +var Ox = class { constructor(e, t10, o) { - this.variableNames = ["Image"], this.uniforms = "alpha: f32,", this.workgroupSize = [64, 1, 1], this.pixelsOpType = $i.DRAW, this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.type = t10, this.textureFormat = o, this.shaderKey = `draw_${t10}_${o}`; + this.variableNames = ["Image"], this.uniforms = "alpha: f32,", this.workgroupSize = [64, 1, 1], this.pixelsOpType = wi.DRAW, this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.type = t10, this.textureFormat = o, this.shaderKey = `draw_${t10}_${o}`; } getUserCode() { let e, t10 = this.type === "float32" ? "value" : "value / 255.0"; @@ -32423,73 +31377,73 @@ var Xx = class { `; } }; -function Nle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n } = e, { canvas: s, options: a } = o, [i, p] = n.shape.slice(0, 2), { imageOptions: u } = a || {}, l = (u == null ? void 0 : u.alpha) || 1, c = t10.device.features.has("bgra8unorm-storage") ? "bgra8unorm" : "rgba8unorm", m = [i, p], d = new Xx(m, n.dtype, c); +function Que(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n } = e, { canvas: s, options: a } = o, [i, p] = n.shape.slice(0, 2), { imageOptions: u } = a || {}, c = (u == null ? void 0 : u.alpha) || 1, l = t10.device.features.has("bgra8unorm-storage") ? "bgra8unorm" : "rgba8unorm", m = [i, p], d = new Ox(m, n.dtype, l); s.width = p, s.height = i; let f = "webgpu", h = s.getContext(f), g; h || (g = new OffscreenCanvas(p, i), h = g.getContext(f)); let x = n.shape.length === 3 ? n.shape[2] : 1; - h.configure({ device: t10.device, format: c, usage: GPUTextureUsage.STORAGE_BINDING, alphaMode: "premultiplied" }); - let b = "int32", w = t10.makeTensorInfo(m, b), S = t10.tensorMap.get(w.dataId); + h.configure({ device: t10.device, format: l, usage: GPUTextureUsage.STORAGE_BINDING, alphaMode: "premultiplied" }); + let b = "int32", C = t10.makeTensorInfo(m, b), S = t10.tensorMap.get(C.dataId); S.resource = h.getCurrentTexture(), S.external = true; - let k = [{ type: "uint32", data: [x] }, { type: "float32", data: [l] }]; - if (t10.runWebGPUProgram(d, [n], b, k, w), g) { - let T = s.getContext("2d"); - if (!T) + let k = [{ type: "uint32", data: [x] }, { type: "float32", data: [c] }]; + if (t10.runWebGPUProgram(d, [n], b, k, C), g) { + let _ = s.getContext("2d"); + if (!_) throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!"); - T.drawImage(g, 0, 0); - } - return t10.disposeData(w.dataId), n; -} -var hU = { kernelName: Mu, backendName: "webgpu", kernelFunc: Nle }; -var Kv = tt({ opType: fe.MUL, cpuKernelImpl: YV, supportsComplex: true }); -var gU = { kernelName: $o, backendName: "webgpu", kernelFunc: Kv }; -function qv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; - return ao(n, s, a, "sum", t10); -} -var xU = { kernelName: As, backendName: "webgpu", kernelFunc: qv }; -function Tle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = C.decodeEinsumEquation(n, s.length); - C.checkEinsumDimSizes(a.length, p, s); - let { path: u, steps: l } = C.getEinsumComputePath(i, p), c = l.length, m = null, d = a.length, f = []; - for (let h = 0; h < c; ++h) { - for (let g of l[h]) { - let { permutationIndices: x, expandDims: b } = C.getEinsumPermutation(d, p[g]), w; - C.isIdentityPermutation(x) ? w = s[g] : (w = Cr({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(w)); - let S = w.shape.slice(); + _.drawImage(g, 0, 0); + } + return t10.disposeData(C.dataId), n; +} +var YV = { kernelName: $u, backendName: "webgpu", kernelFunc: Que }; +var i0 = et({ opType: fe.MUL, cpuKernelImpl: Rz, supportsComplex: true }); +var QV = { kernelName: Xn, backendName: "webgpu", kernelFunc: i0 }; +function u0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; + return eo(n, s, a, "sum", t10); +} +var ZV = { kernelName: Ss, backendName: "webgpu", kernelFunc: u0 }; +function Zue(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { equation: n } = o, s = e, { allDims: a, summedDims: i, idDims: p } = w.decodeEinsumEquation(n, s.length); + w.checkEinsumDimSizes(a.length, p, s); + let { path: u, steps: c } = w.getEinsumComputePath(i, p), l = c.length, m = null, d = a.length, f = []; + for (let h = 0; h < l; ++h) { + for (let g of c[h]) { + let { permutationIndices: x, expandDims: b } = w.getEinsumPermutation(d, p[g]), C; + w.isIdentityPermutation(x) ? C = s[g] : (C = xr({ inputs: { x: s[g] }, backend: t10, attrs: { perm: x } }), f.push(C)); + let S = C.shape.slice(); for (let k = 0; k < b.length; ++k) S.splice(b[k], 0, 1); - y.arraysEqual(w.shape, S) || (w = le({ inputs: { x: w }, backend: t10, attrs: { shape: S } }), f.push(w)), m === null ? m = w : (m = Kv({ inputs: { a: w, b: m }, backend: t10 }), f.push(m)); + y.arraysEqual(C.shape, S) || (C = pe({ inputs: { x: C }, backend: t10, attrs: { shape: S } }), f.push(C)), m === null ? m = C : (m = i0({ inputs: { a: C, b: m }, backend: t10 }), f.push(m)); } - h < c - 1 && (u[h] >= 0 && (m = qv({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); + h < l - 1 && (u[h] >= 0 && (m = u0({ inputs: { x: m }, backend: t10, attrs: { axis: u[h] - (a.length - d), keepDims: false } }), f.push(m)), d--); } for (let h of f) h !== m && t10.disposeData(h.dataId); return m; } -var yU = { kernelName: ji, backendName: "webgpu", kernelFunc: Tle }; -var _le = ye({ opType: Z.ELU }); -var bU = { kernelName: Wn, backendName: "webgpu", kernelFunc: _le }; -var Ele = (r16) => { - let { inputs: e, backend: t10 } = r16, { dy: o, y: n } = e, s = new Di(fe.ELU_DER, o.shape, n.shape); +var JV = { kernelName: Bi, backendName: "webgpu", kernelFunc: Zue }; +var Jue = ye({ opType: Z.ELU }); +var eW = { kernelName: hn, backendName: "webgpu", kernelFunc: Jue }; +var epe = (r15) => { + let { inputs: e, backend: t10 } = r15, { dy: o, y: n } = e, s = new Ii(fe.ELU_DER, o.shape, n.shape); return t10.runWebGPUProgram(s, [o, n], o.dtype); }; -var CU = { kernelName: ri, backendName: "webgpu", kernelFunc: Ele }; -var $le = tt({ opType: fe.EQUAL, dtype: "bool", cpuKernelImpl: PV }); -var wU = { kernelName: xo, backendName: "webgpu", kernelFunc: $le }; -var Rle = ye({ opType: Z.ERF }); -var SU = { kernelName: Un, backendName: "webgpu", kernelFunc: Rle }; -var Dle = ye({ opType: Z.EXP, cpuKernelImpl: OV, dtype: "float32" }); -var IU = { kernelName: yo, backendName: "webgpu", kernelFunc: Dle }; -function Yx(r16) { - let { inputs: e, attrs: t10, backend: o } = r16, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; - return n < 0 && (y.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), le({ inputs: { x: s }, backend: o, attrs: { shape: i } }); -} -var vU = { kernelName: ma, backendName: "webgpu", kernelFunc: Yx }; -var Ale = ye({ opType: Z.EXPM1, cpuKernelImpl: MV }); -var kU = { kernelName: bo, backendName: "webgpu", kernelFunc: Ale }; -var _m = class { +var tW = { kernelName: Xa, backendName: "webgpu", kernelFunc: epe }; +var tpe = et({ opType: fe.EQUAL, dtype: "bool", cpuKernelImpl: gz }); +var rW = { kernelName: xn, backendName: "webgpu", kernelFunc: tpe }; +var rpe = ye({ opType: Z.ERF }); +var oW = { kernelName: gn, backendName: "webgpu", kernelFunc: rpe }; +var ope = ye({ opType: Z.EXP, cpuKernelImpl: xz, dtype: "float32" }); +var nW = { kernelName: yn, backendName: "webgpu", kernelFunc: ope }; +function Mx(r15) { + let { inputs: e, attrs: t10, backend: o } = r15, { dim: n } = t10, { input: s } = e, a = s.shape.length, i = s.shape.slice(), p = n; + return n < 0 && (y.assert(-(a + 1) <= n, () => `Axis must be in the interval [${-(a + 1)}, ${a}]`), p = a + n + 1), i.splice(p, 0, 1), pe({ inputs: { x: s }, backend: o, attrs: { shape: i } }); +} +var sW = { kernelName: na, backendName: "webgpu", kernelFunc: Mx }; +var npe = ye({ opType: Z.EXPM1, cpuKernelImpl: yz }); +var aW = { kernelName: bn, backendName: "webgpu", kernelFunc: npe }; +var ym = class { constructor(e, t10) { this.variableNames = ["real", "imag"], this.outputShape = [], this.uniforms = "exponentMultiplier : f32, denominator: f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.component = e, this.shaderKey = `fft_${e}`; } @@ -32530,24 +31484,24 @@ var _m = class { `; } }; -function Qx(r16, e, t10) { - let o = t10.tensorMap.get(r16.dataId), n = y.sizeFromShape(r16.shape), s = r16.shape[r16.shape.length - 1], a = n / s, i = [], p = le({ inputs: { x: r16 }, backend: t10, attrs: { shape: [a, s] } }); +function Lx(r15, e, t10) { + let o = t10.tensorMap.get(r15.dataId), n = y.sizeFromShape(r15.shape), s = r15.shape[r15.shape.length - 1], a = n / s, i = [], p = pe({ inputs: { x: r15 }, backend: t10, attrs: { shape: [a, s] } }); i.push(p); - let u = p.shape, l = new _m("real", u), c = new _m("imag", u), m = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: u }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: u }], d = e ? 2 * Math.PI : -2 * Math.PI, f = e ? u[1] : 1, h = [{ type: "float32", data: [d] }, { type: "float32", data: [f] }], g = t10.runWebGPUProgram(l, m, "float32", h); + let u = p.shape, c = new ym("real", u), l = new ym("imag", u), m = [{ dataId: o.complexTensorInfos.real.dataId, dtype: o.complexTensorInfos.real.dtype, shape: u }, { dataId: o.complexTensorInfos.imag.dataId, dtype: o.complexTensorInfos.imag.dtype, shape: u }], d = e ? 2 * Math.PI : -2 * Math.PI, f = e ? u[1] : 1, h = [{ type: "float32", data: [d] }, { type: "float32", data: [f] }], g = t10.runWebGPUProgram(c, m, "float32", h); i.push(g); - let x = t10.runWebGPUProgram(c, m, "float32", h); + let x = t10.runWebGPUProgram(l, m, "float32", h); i.push(x); - let b = Uo({ inputs: { real: g, imag: x }, backend: t10 }); + let b = xo({ inputs: { real: g, imag: x }, backend: t10 }); i.push(b); - let w = le({ inputs: { x: b }, backend: t10, attrs: { shape: r16.shape } }); - return i.forEach((S) => t10.disposeData(S.dataId)), w; + let C = pe({ inputs: { x: b }, backend: t10, attrs: { shape: r15.shape } }); + return i.forEach((S) => t10.disposeData(S.dataId)), C; } -function Fle(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e; - return Qx(o, false, t10); +function spe(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e; + return Lx(o, false, t10); } -var NU = { kernelName: Xi, backendName: "webgpu", kernelFunc: Fle }; -var Zx = class { +var iW = { kernelName: zi, backendName: "webgpu", kernelFunc: spe }; +var Bx = class { constructor(e) { this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "flipLeftRight"; } @@ -32564,17 +31518,17 @@ var Zx = class { `; } }; -var TU = { kernelName: Gn, backendName: "webgpu", kernelFunc: ({ inputs: r16, backend: e }) => { - let { image: t10 } = r16, o = e, n = new Zx(t10.shape); +var uW = { kernelName: Cn, backendName: "webgpu", kernelFunc: ({ inputs: r15, backend: e }) => { + let { image: t10 } = r15, o = e, n = new Bx(t10.shape); return o.runWebGPUProgram(n, [t10], t10.dtype); } }; -var Ple = ye({ opType: Z.FLOOR, cpuKernelImpl: LV }); -var _U = { kernelName: Co, backendName: "webgpu", kernelFunc: Ple }; -var Ole = tt({ opType: fe.FLOOR_DIV, cpuKernelImpl: BV, dtype: "int32" }); -var EU = { kernelName: wo, backendName: "webgpu", kernelFunc: Ole }; -var Jx = class { +var ape = ye({ opType: Z.FLOOR, cpuKernelImpl: bz }); +var pW = { kernelName: wn, backendName: "webgpu", kernelFunc: ape }; +var ipe = et({ opType: fe.FLOOR_DIV, cpuKernelImpl: Cz, dtype: "int32" }); +var cW = { kernelName: Sn, backendName: "webgpu", kernelFunc: ipe }; +var zx = class { constructor(e, t10, o = false) { - this.pixelsOpType = $i.FROM_PIXELS, this.outputShape = [0], this.variableNames = [], this.workgroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [t10, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; + this.pixelsOpType = wi.FROM_PIXELS, this.outputShape = [0], this.variableNames = [], this.workgroupSize = [256, 1, 1], this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [t10, 1, 1]), this.importVideo = o, this.shaderKey = `fromPixels_${this.importVideo}`; } getUserCode() { let e = this.importVideo ? "textureLoad(src, vec2(coords.yx));" : "textureLoad(src, vec2(coords.yx), 0)"; @@ -32593,14 +31547,14 @@ var Jx = class { `; } }; -var $U = { kernelName: Lu, backendName: "webgpu", kernelFunc: Mle }; -var uc; -var jv = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); -function Mle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { pixels: n } = e, { numChannels: s } = o; +var lW = { kernelName: Du, backendName: "webgpu", kernelFunc: upe }; +var tl; +var p0 = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); +function upe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { pixels: n } = e, { numChannels: s } = o; if (n == null) throw new Error("pixels passed to tf.browser.fromPixels() can not be null"); - let a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, p = typeof HTMLCanvasElement != "undefined" && n instanceof HTMLCanvasElement || typeof OffscreenCanvas != "undefined" && n instanceof OffscreenCanvas, u = typeof ImageBitmap != "undefined" && n instanceof ImageBitmap, [l, c] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], m = [c, l, s], d = A().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE") && a, f = a || i; + let a = typeof HTMLVideoElement != "undefined" && n instanceof HTMLVideoElement, i = typeof HTMLImageElement != "undefined" && n instanceof HTMLImageElement, p = typeof HTMLCanvasElement != "undefined" && n instanceof HTMLCanvasElement || typeof OffscreenCanvas != "undefined" && n instanceof OffscreenCanvas, u = typeof ImageBitmap != "undefined" && n instanceof ImageBitmap, [c, l] = a ? [n.videoWidth, n.videoHeight] : [n.width, n.height], m = [l, c, s], d = A().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE") && a, f = a || i; if (u || p || f) { let b; if (d) @@ -32608,29 +31562,29 @@ function Mle(r16) { else { if (f) { let L = A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU"); - (uc == null || L !== jv) && (jv = L, uc = document.createElement("canvas").getContext("2d", { willReadFrequently: jv })), uc.canvas.width = l, uc.canvas.height = c, uc.drawImage(n, 0, 0, l, c), n = uc.canvas; + (tl == null || L !== p0) && (p0 = L, tl = document.createElement("canvas").getContext("2d", { willReadFrequently: p0 })), tl.canvas.width = c, tl.canvas.height = l, tl.drawImage(n, 0, 0, c, l), n = tl.canvas; } - let F = GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, M = t10.textureManager.acquireTexture(m[1], m[0], "rgba8unorm", F); + let P = GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, M = t10.textureManager.acquireTexture(m[1], m[0], "rgba8unorm", P); t10.queue.copyExternalImageToTexture({ source: n }, { texture: M }, [m[1], m[0]]), b = M; } - let w = y.sizeFromShape(m), S = y.computeStrides(m), k = new Jx(m, s, d), T = [{ type: "uint32", data: [w] }, { type: "uint32", data: [s] }, { type: "uint32", data: [...S] }], E = t10.makeTensorInfo([c, l], "int32"), R = t10.tensorMap.get(E.dataId); + let C = y.sizeFromShape(m), S = y.computeStrides(m), k = new zx(m, s, d), _ = [{ type: "uint32", data: [C] }, { type: "uint32", data: [s] }, { type: "uint32", data: [...S] }], $ = t10.makeTensorInfo([l, c], "int32"), R = t10.tensorMap.get($.dataId); R.resource = b; - let D = t10.runWebGPUProgram(k, [E], "int32", T); - return t10.disposeData(E.dataId), D; + let D = t10.runWebGPUProgram(k, [$], "int32", _); + return t10.disposeData($.dataId), D; } let h = n.data, g = h; if (s != null && s !== 4) { g = new Uint8Array(n.width * n.height * s); - let b = h.length, w = 0; + let b = h.length, C = 0; for (let S = 0; S < b; S++) - S % 4 < s && (g[w++] = h[S]); + S % 4 < s && (g[C++] = h[S]); } let x = t10.makeTensorInfo(m, "int32", new Int32Array(g)); return t10.uploadToGPU(x.dataId), x; } -var ey = class { +var Vx = class { constructor(e, t10, o, n, s) { - this.uniforms = "varianceEpsilon : f32,", this.workgroupSize = [128, 1, 1], this.size = true, this.variableNames = ["x", "mean", "variance"], C.assertAndGetBroadcastShape(e, t10), C.assertAndGetBroadcastShape(e, o), this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), n != null && (C.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset")), s != null && (C.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale")), this.offsetShape = n, this.scaleShape = s, this.shaderKey = "batchNorm"; + this.uniforms = "varianceEpsilon : f32,", this.workgroupSize = [128, 1, 1], this.size = true, this.variableNames = ["x", "mean", "variance"], w.assertAndGetBroadcastShape(e, t10), w.assertAndGetBroadcastShape(e, o), this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), n != null && (w.assertAndGetBroadcastShape(e, n), this.variableNames.push("offset")), s != null && (w.assertAndGetBroadcastShape(e, s), this.variableNames.push("scale")), this.offsetShape = n, this.scaleShape = s, this.shaderKey = "batchNorm"; } getUserCode() { let e = "0.0"; @@ -32652,29 +31606,29 @@ var ey = class { `; } }; -var RU = { kernelName: Hn, backendName: "webgpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { x: o, scale: n, offset: s, mean: a, variance: i } = r16, { varianceEpsilon: p } = e, u = t10, l = [o, a, i], c = null; - s != null && (c = s.shape, l.push(s)); +var mW = { kernelName: In, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { x: o, scale: n, offset: s, mean: a, variance: i } = r15, { varianceEpsilon: p } = e, u = t10, c = [o, a, i], l = null; + s != null && (l = s.shape, c.push(s)); let m = null; - n != null && (m = n.shape, l.push(n)); - let d = new ey(o.shape, a.shape, i.shape, c, m), f = [{ type: "float32", data: [p] }]; - return u.runWebGPUProgram(d, l, o.dtype, f); + n != null && (m = n.shape, c.push(n)); + let d = new Vx(o.shape, a.shape, i.shape, l, m), f = [{ type: "float32", data: [p] }]; + return u.runWebGPUProgram(d, c, o.dtype, f); } }; -function Lle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: l, dilations: c, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = C.convertConv2DDataFormat(l), g = C.computeConv2DInfo(n.shape, s.shape, p, c, u, m, false, h); - return Dx({ x: n, filter: s, convInfo: g, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: f, activation: d }); -} -var DU = { kernelName: jo, backendName: "webgpu", kernelFunc: Lle }; -function Ble(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: l, dimRoundingMode: c, activation: m, leakyreluAlpha: d } = o, f = l; - f == null && (f = [1, 1]), y.assert(C.eitherStridesOrDilationsAreOne(p, f), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`); - let h = C.computeConv2DInfo(n.shape, s.shape, p, f, u, c, true), g = [n, s], x = a != null, b = i != null; +function ppe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dataFormat: c, dilations: l, dimRoundingMode: m, activation: d, leakyreluAlpha: f } = o, h = w.convertConv2DDataFormat(c), g = w.computeConv2DInfo(n.shape, s.shape, p, l, u, m, false, h); + return bx({ x: n, filter: s, convInfo: g, backend: t10, bias: a, preluActivationWeights: i, leakyreluAlpha: f, activation: d }); +} +var dW = { kernelName: Io, backendName: "webgpu", kernelFunc: ppe }; +function cpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, filter: s, bias: a, preluActivationWeights: i } = e, { strides: p, pad: u, dilations: c, dimRoundingMode: l, activation: m, leakyreluAlpha: d } = o, f = c; + f == null && (f = [1, 1]), y.assert(w.eitherStridesOrDilationsAreOne(p, f), () => `Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`); + let h = w.computeConv2DInfo(n.shape, s.shape, p, f, u, l, true), g = [n, s], x = a != null, b = i != null; x && g.push(a), b && g.push(i); - let w = [{ type: "int32", data: [h.padInfo.top, h.padInfo.left] }, { type: "int32", data: [h.inHeight, h.inWidth] }], S; - return h.outHeight > 4 && h.outWidth > 4 && h.strideWidth <= 2 && h.inChannels === h.outChannels && h.dilationHeight === 1 && h.dilationWidth === 1 && h.inChannels % 4 === 0 ? (S = new ac(h, x, m, b), w.push({ type: "int32", data: [S.virtualWidth] })) : (S = new ic(h, x, m, b), w.push({ type: "int32", data: [h.filterHeight] }, { type: "int32", data: [h.filterWidth] }, { type: "int32", data: [h.strideHeight, h.strideWidth] }, { type: "int32", data: [h.dilationHeight, h.dilationWidth] })), m === "leakyrelu" && (w.push({ type: "float32", data: [d] }), S.uniforms += " alpha : f32,"), t10.runWebGPUProgram(S, g, "float32", w); + let C = [{ type: "int32", data: [h.padInfo.top, h.padInfo.left] }, { type: "int32", data: [h.inHeight, h.inWidth] }], S; + return h.outHeight > 4 && h.outWidth > 4 && h.strideWidth <= 2 && h.inChannels === h.outChannels && h.dilationHeight === 1 && h.dilationWidth === 1 && h.inChannels % 4 === 0 ? (S = new Jc(h, x, m, b), C.push({ type: "int32", data: [S.virtualWidth] })) : (S = new el(h, x, m, b), C.push({ type: "int32", data: [h.filterHeight] }, { type: "int32", data: [h.filterWidth] }, { type: "int32", data: [h.strideHeight, h.strideWidth] }, { type: "int32", data: [h.dilationHeight, h.dilationWidth] })), m === "leakyrelu" && (C.push({ type: "float32", data: [d] }), S.uniforms += " alpha : f32,"), t10.runWebGPUProgram(S, g, "float32", C); } -var AU = { kernelName: Xo, backendName: "webgpu", kernelFunc: Ble }; -var ty = class { +var fW = { kernelName: vo, backendName: "webgpu", kernelFunc: cpe }; +var Wx = class { constructor(e, t10) { this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = `gathernd_${e}`, this.sliceDim = e, this.uniforms = `sliceDim : i32, strides : ${ft(e)},`; } @@ -32697,22 +31651,22 @@ var ty = class { `; } }; -function zle(r16) { - let { inputs: e, backend: t10 } = r16, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, l, c] = C.prepareAndValidate(o, n), m = le({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), d = le({ inputs: { x: o }, backend: t10, attrs: { shape: [y.sizeFromShape(o.shape) / l, l] } }); +function lpe(r15) { + let { inputs: e, backend: t10 } = r15, { params: o, indices: n } = e, s = n.shape, a = s[s.length - 1], i = y.sizeFromShape(o.shape), [p, u, c, l] = w.prepareAndValidate(o, n), m = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [u, a] } }), d = pe({ inputs: { x: o }, backend: t10, attrs: { shape: [y.sizeFromShape(o.shape) / c, c] } }); if (t10.shouldExecuteOnCPU([o, n]) || o.dtype === "string") { - let b = t10.readSync(n.dataId), w = t10.bufferSync(o), S = zV(b, w, o.dtype, u, a, l, c, o.shape, i); + let b = t10.readSync(n.dataId), C = t10.bufferSync(o), S = wz(b, C, o.dtype, u, a, c, l, o.shape, i); return t10.makeTensorInfo(p, o.dtype, S.values); } - let f = new ty(a, [u, l]), h = [{ type: "int32", data: [a] }, { type: "int32", data: c }], g = t10.runWebGPUProgram(f, [d, m], d.dtype, h), x = le({ inputs: { x: g }, backend: t10, attrs: { shape: p } }); + let f = new Wx(a, [u, c]), h = [{ type: "int32", data: [a] }, { type: "int32", data: l }], g = t10.runWebGPUProgram(f, [d, m], d.dtype, h), x = pe({ inputs: { x: g }, backend: t10, attrs: { shape: p } }); return t10.disposeData(m.dataId), t10.disposeData(d.dataId), t10.disposeData(g.dataId), x; } -var FU = { kernelName: Kn, backendName: "webgpu", kernelFunc: zle }; -var ry = class { +var hW = { kernelName: vn, backendName: "webgpu", kernelFunc: lpe }; +var Ux = class { constructor(e, t10) { this.variableNames = ["A", "indices"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.slice(), this.aShape = e, this.outputShape = t10, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "gather"; } getUserCode() { - let e = Vle(this.aShape); + let e = mpe(this.aShape); return ` ${G("index")} { if (index < uniforms.size) { @@ -32725,51 +31679,51 @@ var ry = class { `; } }; -function Vle(r16) { +function mpe(r15) { let e = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], t10 = []; - for (let o = 0; o < r16.length; o++) + for (let o = 0; o < r15.length; o++) o === 2 ? t10.push("indexZ") : t10.push(`${e[o]}`); return t10.join(); } -function Xv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = C.segment_util.collectGatherOpShapeInfo(n, s, p, i), l = y.sizeFromShape(s.shape), c = [], m = le({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = le({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, l / u.batchSize] } }); - c.push(m), c.push(d); - let f = [u.batchSize, u.outerSize, l / u.batchSize, u.sliceSize]; +function c0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, indices: s } = e, { axis: a, batchDims: i } = o, p = y.parseAxisParam(a, n.shape)[0], u = w.segment_util.collectGatherOpShapeInfo(n, s, p, i), c = y.sizeFromShape(s.shape), l = [], m = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [u.batchSize, u.outerSize, u.dimSize, u.sliceSize] } }), d = pe({ inputs: { x: s }, backend: t10, attrs: { shape: [u.batchSize, c / u.batchSize] } }); + l.push(m), l.push(d); + let f = [u.batchSize, u.outerSize, c / u.batchSize, u.sliceSize]; if (t10.shouldExecuteOnCPU([n, s])) { - let w = t10.tensorMap.get(d.dataId).values, S = ie(d.shape, d.dtype, w), T = t10.tensorMap.get(m.dataId).values, E = ie(m.shape, m.dtype, T), R = VV(E, S, f); - return c.forEach((D) => t10.disposeData(D.dataId)), t10.makeTensorInfo(u.outputShape, R.dtype, R.values); - } - let h = new ry(m.shape, f), g = t10.runWebGPUProgram(h, [m, d], m.dtype); - c.push(g); - let x = le({ inputs: { x: g }, backend: t10, attrs: { shape: u.outputShape } }); - return c.forEach((b) => t10.disposeData(b.dataId)), x; -} -var PU = { kernelName: fa, backendName: "webgpu", kernelFunc: Xv }; -var Wle = tt({ opType: fe.GREATER, cpuKernelImpl: UV, dtype: "bool" }); -var OU = { kernelName: So, backendName: "webgpu", kernelFunc: Wle }; -var Ule = tt({ opType: fe.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: WV }); -var MU = { kernelName: Io, backendName: "webgpu", kernelFunc: Ule }; -function Gle(r16) { - let { inputs: e, backend: t10 } = r16, { input: o } = e; - return Qx(o, true, t10); -} -var LU = { kernelName: Yi, backendName: "webgpu", kernelFunc: Gle }; -var Hle = ye({ opType: Z.IS_FINITE, dtype: "bool" }); -var BU = { kernelName: qn, backendName: "webgpu", kernelFunc: Hle }; -var Kle = ye({ opType: Z.IS_INF, dtype: "bool" }); -var zU = { kernelName: jn, backendName: "webgpu", kernelFunc: Kle }; -var qle = ye({ opType: Z.IS_NAN, dtype: "bool" }); -var VU = { kernelName: Xn, backendName: "webgpu", kernelFunc: qle }; -function jle(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new so(n.shape, Z.LEAKYRELU, "alpha : f32,"); + let C = t10.tensorMap.get(d.dataId).values, S = me(d.shape, d.dtype, C), _ = t10.tensorMap.get(m.dataId).values, $ = me(m.shape, m.dtype, _), R = Sz($, S, f); + return l.forEach((D) => t10.disposeData(D.dataId)), t10.makeTensorInfo(u.outputShape, R.dtype, R.values); + } + let h = new Ux(m.shape, f), g = t10.runWebGPUProgram(h, [m, d], m.dtype); + l.push(g); + let x = pe({ inputs: { x: g }, backend: t10, attrs: { shape: u.outputShape } }); + return l.forEach((b) => t10.disposeData(b.dataId)), x; +} +var gW = { kernelName: aa, backendName: "webgpu", kernelFunc: c0 }; +var dpe = et({ opType: fe.GREATER, cpuKernelImpl: vz, dtype: "bool" }); +var xW = { kernelName: kn, backendName: "webgpu", kernelFunc: dpe }; +var fpe = et({ opType: fe.GREATER_EQUAL, dtype: "bool", cpuKernelImpl: Iz }); +var yW = { kernelName: Nn, backendName: "webgpu", kernelFunc: fpe }; +function hpe(r15) { + let { inputs: e, backend: t10 } = r15, { input: o } = e; + return Lx(o, true, t10); +} +var bW = { kernelName: Vi, backendName: "webgpu", kernelFunc: hpe }; +var gpe = ye({ opType: Z.IS_FINITE, dtype: "bool" }); +var CW = { kernelName: Tn, backendName: "webgpu", kernelFunc: gpe }; +var xpe = ye({ opType: Z.IS_INF, dtype: "bool" }); +var wW = { kernelName: _n, backendName: "webgpu", kernelFunc: xpe }; +var ype = ye({ opType: Z.IS_NAN, dtype: "bool" }); +var SW = { kernelName: En, backendName: "webgpu", kernelFunc: ype }; +function bpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { alpha: s } = o, a = [{ type: "float32", data: [s] }], i = new Jr(n.shape, Z.LEAKYRELU, "alpha : f32,"); return t10.runWebGPUProgram(i, [n], "float32", a); } -var WU = { kernelName: Yn, backendName: "webgpu", kernelFunc: jle }; -var Xle = tt({ opType: fe.LESS, dtype: "bool", cpuKernelImpl: HV }); -var UU = { kernelName: ko, backendName: "webgpu", kernelFunc: Xle }; -var Yle = tt({ opType: fe.LESS_EQUAL, dtype: "bool", cpuKernelImpl: GV }); -var GU = { kernelName: No, backendName: "webgpu", kernelFunc: Yle }; -var oy = class { +var IW = { kernelName: $n, backendName: "webgpu", kernelFunc: bpe }; +var Cpe = et({ opType: fe.LESS, dtype: "bool", cpuKernelImpl: Nz }); +var vW = { kernelName: Rn, backendName: "webgpu", kernelFunc: Cpe }; +var wpe = et({ opType: fe.LESS_EQUAL, dtype: "bool", cpuKernelImpl: kz }); +var kW = { kernelName: Dn, backendName: "webgpu", kernelFunc: wpe }; +var Gx = class { constructor(e) { this.variableNames = [], this.outputShape = [], this.uniforms = "start : f32, step : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "linSpace"; } @@ -32783,22 +31737,22 @@ var oy = class { `; } }; -function Qle(r16) { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, num: s } = t10, a = (n - o) / (s - 1), i = new oy(s), p = [{ type: "float32", data: [o] }, { type: "float32", data: [a] }]; +function Spe(r15) { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, num: s } = t10, a = (n - o) / (s - 1), i = new Gx(s), p = [{ type: "float32", data: [o] }, { type: "float32", data: [a] }]; return e.runWebGPUProgram(i, [], "float32", p); } -var HU = { kernelName: Qn, backendName: "webgpu", kernelFunc: Qle }; -var Zle = ye({ opType: Z.LOG, cpuKernelImpl: KV }); -var KU = { kernelName: To, backendName: "webgpu", kernelFunc: Zle }; -var Jle = ye({ opType: Z.LOG1P }); -var qU = { kernelName: Zn, backendName: "webgpu", kernelFunc: Jle }; -var ece = tt({ opType: fe.LOGICAL_AND, dtype: "bool" }); -var jU = { kernelName: Jn, backendName: "webgpu", kernelFunc: ece }; -var tce = ye({ opType: Z.LOGICAL_NOT }); -var XU = { kernelName: es, backendName: "webgpu", kernelFunc: tce }; -var rce = tt({ opType: fe.LOGICAL_OR }); -var YU = { kernelName: ts, backendName: "webgpu", kernelFunc: rce }; -var QU = ` +var NW = { kernelName: An, backendName: "webgpu", kernelFunc: Spe }; +var Ipe = ye({ opType: Z.LOG, cpuKernelImpl: Tz }); +var TW = { kernelName: Fn, backendName: "webgpu", kernelFunc: Ipe }; +var vpe = ye({ opType: Z.LOG1P }); +var _W = { kernelName: Pn, backendName: "webgpu", kernelFunc: vpe }; +var kpe = et({ opType: fe.LOGICAL_AND, dtype: "bool" }); +var EW = { kernelName: On, backendName: "webgpu", kernelFunc: kpe }; +var Npe = ye({ opType: Z.LOGICAL_NOT }); +var $W = { kernelName: Mn, backendName: "webgpu", kernelFunc: Npe }; +var Tpe = et({ opType: fe.LOGICAL_OR }); +var RW = { kernelName: Ln, backendName: "webgpu", kernelFunc: Tpe }; +var DW = ` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -32809,7 +31763,7 @@ var QU = ` powValue = exp(log(basis) * (-uniforms.beta)); } `; -var ny = class { +var Hx = class { constructor(e) { this.outputShape = [], this.variableNames = ["x"], this.uniforms = "radius : i32, bias : f32, alpha : f32, beta : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "lrn"; } @@ -32832,7 +31786,7 @@ var ny = class { sum = sum + z * z; } } - ${QU} + ${DW} setOutputAtIndex(index, x * powValue); } @@ -32840,7 +31794,7 @@ var ny = class { `; } }; -var sy = class { +var Kx = class { constructor(e, t10) { this.outputShape = [], this.variableNames = ["x"], this.uniforms = "radius : i32, bias : f32, alpha : f32, beta : f32,", this.workgroupSize = [256, 1, 1], this.maxAllowRadius = 16, y.assert(t10 <= this.maxAllowRadius, () => `Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t10}`), this.outputShape = e, this.elementsPerWorkgroup = this.workgroupSize[0] - 2 * this.maxAllowRadius, this.dispatchLayout = { x: [3], y: [2], z: [0, 1] }, this.dispatch = H(this.dispatchLayout, this.outputShape, [this.elementsPerWorkgroup, this.workgroupSize[1], this.workgroupSize[2]]), this.shaderKey = "lrn_shared"; } @@ -32873,21 +31827,21 @@ var sy = class { let z = lrnSub[index + i]; sum = sum + z * z; } - ${QU} + ${DW} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } } `; } }; -function oce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u; - s > 16 ? u = new ny(n.shape) : u = new sy(n.shape, s); - let l = [{ type: "int32", data: [s] }, { type: "float32", data: [a] }, { type: "float32", data: [i] }, { type: "float32", data: [p] }]; - return t10.runWebGPUProgram(u, [n], n.dtype, l); +function _pe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { depthRadius: s, bias: a, alpha: i, beta: p } = o, u; + s > 16 ? u = new Hx(n.shape) : u = new Kx(n.shape, s); + let c = [{ type: "int32", data: [s] }, { type: "float32", data: [a] }, { type: "float32", data: [i] }, { type: "float32", data: [p] }]; + return t10.runWebGPUProgram(u, [n], n.dtype, c); } -var ZU = { kernelName: rs, backendName: "webgpu", kernelFunc: oce }; -var ay = class { +var AW = { kernelName: Bn, backendName: "webgpu", kernelFunc: _pe }; +var qx = class { constructor(e) { this.outputShape = [], this.variableNames = ["inputImage", "outputImage", "dy"], this.uniforms = "depthRadius : i32, bias : f32, alpha : f32, beta : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "lrn_grad"; } @@ -32945,24 +31899,24 @@ var ay = class { `; } }; -function nce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: l } = o, c = new ay(n.shape), m = [{ type: "int32", data: [i] }, { type: "float32", data: [p] }, { type: "float32", data: [u] }, { type: "float32", data: [l] }]; - return t10.runWebGPUProgram(c, [n, s, a], n.dtype, m); +function Epe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, y: s, dy: a } = e, { depthRadius: i, bias: p, alpha: u, beta: c } = o, l = new qx(n.shape), m = [{ type: "int32", data: [i] }, { type: "float32", data: [p] }, { type: "float32", data: [u] }, { type: "float32", data: [c] }]; + return t10.runWebGPUProgram(l, [n, s, a], n.dtype, m); } -var JU = { kernelName: oi, backendName: "webgpu", kernelFunc: nce }; -var sce = tt({ opType: fe.MAX, cpuKernelImpl: jV }); -var eG = { kernelName: _o, backendName: "webgpu", kernelFunc: sce }; -function ace(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, l = C.computePool2DInfo(n.shape, s, a, 1, i, p); - return bx(n, l, "max", t10); +var FW = { kernelName: Ya, backendName: "webgpu", kernelFunc: Epe }; +var $pe = et({ opType: fe.MAX, cpuKernelImpl: Ez }); +var PW = { kernelName: Vn, backendName: "webgpu", kernelFunc: $pe }; +function Rpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dimRoundingMode: p } = o, c = w.computePool2DInfo(n.shape, s, a, 1, i, p); + return ax(n, c, "max", t10); } -var tG = { kernelName: ns, backendName: "webgpu", kernelFunc: ace }; -function ice(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, l = [1, 1, 1], c = C.computePool3DInfo(n.shape, s, a, l, i, u, p), m = new $u(c, "max"), d = [{ type: "int32", data: [c.strideDepth, c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.padInfo.front, c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.inDepth, c.inHeight, c.inWidth] }, { type: "int32", data: [c.effectiveFilterDepth, c.effectiveFilterHeight, c.effectiveFilterWidth] }]; +var OW = { kernelName: Wn, backendName: "webgpu", kernelFunc: Rpe }; +function Dpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { filterSize: s, strides: a, pad: i, dataFormat: p, dimRoundingMode: u } = o, c = [1, 1, 1], l = w.computePool3DInfo(n.shape, s, a, c, i, u, p), m = new Iu(l, "max"), d = [{ type: "int32", data: [l.strideDepth, l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.padInfo.front, l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.inDepth, l.inHeight, l.inWidth] }, { type: "int32", data: [l.effectiveFilterDepth, l.effectiveFilterHeight, l.effectiveFilterWidth] }]; return t10.runWebGPUProgram(m, [n], n.dtype, d); } -var rG = { kernelName: ha, backendName: "webgpu", kernelFunc: ice }; -var iy = class { +var MW = { kernelName: ia, backendName: "webgpu", kernelFunc: Dpe }; +var jx = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.uniforms = `strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "maxPool2DBackprop"; @@ -33015,7 +31969,7 @@ var iy = class { `; } }; -var uy = class { +var Xx = class { constructor(e) { this.variableNames = ["dy", "maxPos"], this.uniforms = `strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e.inShape, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "maxPool3DBackprop"; @@ -33081,48 +32035,48 @@ var uy = class { `; } }; -function uce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: l } = o, c = [1, 1, 1], m = C.computePool3DInfo(a.shape, i, p, c, u, l), d = new $u(m, "max", true), f = [{ type: "int32", data: [m.strideDepth, m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.padInfo.front, m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.inDepth, m.inHeight, m.inWidth] }, { type: "int32", data: [m.effectiveFilterDepth, m.effectiveFilterHeight, m.effectiveFilterWidth] }], h = t10.runWebGPUProgram(d, [a], "int32", f), g = new uy(m); +function Ape(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s } = e, a = s, { filterSize: i, strides: p, pad: u, dimRoundingMode: c } = o, l = [1, 1, 1], m = w.computePool3DInfo(a.shape, i, p, l, u, c), d = new Iu(m, "max", true), f = [{ type: "int32", data: [m.strideDepth, m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.padInfo.front, m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.inDepth, m.inHeight, m.inWidth] }, { type: "int32", data: [m.effectiveFilterDepth, m.effectiveFilterHeight, m.effectiveFilterWidth] }], h = t10.runWebGPUProgram(d, [a], "int32", f), g = new Xx(m); f = [{ type: "int32", data: [m.strideDepth, m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.effectiveFilterDepth - 1 - m.padInfo.front, m.effectiveFilterHeight - 1 - m.padInfo.top, m.effectiveFilterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.effectiveFilterDepth, m.effectiveFilterHeight, m.effectiveFilterWidth] }, { type: "int32", data: [m.outDepth] }, { type: "int32", data: [m.outHeight] }, { type: "int32", data: [m.outWidth] }]; let x = t10.runWebGPUProgram(g, [n, h], a.dtype, f); return t10.disposeData(h.dataId), x; } -var oG = { kernelName: Ji, backendName: "webgpu", kernelFunc: uce }; -function pce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { dy: n, input: s, output: a } = e, i = s; - wm([s, a], "maxPoolGrad"); - let { filterSize: p, strides: u, pad: l, dimRoundingMode: c } = o, m = C.computePool2DInfo(i.shape, p, u, 1, l, c), d = new Ka(m, "max", true), f = [{ type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.dilationHeight, m.dilationWidth] }, { type: "int32", data: [m.inHeight, m.inWidth] }, { type: "int32", data: [m.effectiveFilterHeight, m.effectiveFilterWidth] }], h = t10.runWebGPUProgram(d, [i], "int32", f), g = new iy(m); +var LW = { kernelName: Gi, backendName: "webgpu", kernelFunc: Ape }; +function Fpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { dy: n, input: s, output: a } = e, i = s; + fm([s, a], "maxPoolGrad"); + let { filterSize: p, strides: u, pad: c, dimRoundingMode: l } = o, m = w.computePool2DInfo(i.shape, p, u, 1, c, l), d = new Ba(m, "max", true), f = [{ type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.padInfo.top, m.padInfo.left] }, { type: "int32", data: [m.dilationHeight, m.dilationWidth] }, { type: "int32", data: [m.inHeight, m.inWidth] }, { type: "int32", data: [m.effectiveFilterHeight, m.effectiveFilterWidth] }], h = t10.runWebGPUProgram(d, [i], "int32", f), g = new jx(m); f = [{ type: "int32", data: [m.strideHeight, m.strideWidth] }, { type: "int32", data: [m.effectiveFilterHeight - 1 - m.padInfo.top, m.effectiveFilterWidth - 1 - m.padInfo.left] }, { type: "int32", data: [m.dilationHeight, m.dilationWidth] }, { type: "int32", data: [m.effectiveFilterHeight, m.effectiveFilterWidth] }, { type: "int32", data: [m.outHeight] }, { type: "int32", data: [m.outWidth] }]; let x = t10.runWebGPUProgram(g, [n, h], i.dtype, f); return t10.disposeData(h.dataId), x; } -var nG = { kernelName: Zi, backendName: "webgpu", kernelFunc: pce }; -function lce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = o, { x: p } = e; +var BW = { kernelName: Ui, backendName: "webgpu", kernelFunc: Fpe }; +function Ppe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { filterSize: n, strides: s, pad: a, includeBatchInIndex: i } = o, { x: p } = e; y.assert(p.shape.length === 4, () => `Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`); let u = [1, 1]; - y.assert(C.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); - let l = C.computePool2DInfo(p.shape, n, s, u, a), c = [{ type: "int32", data: [l.strideHeight, l.strideWidth] }, { type: "int32", data: [l.padInfo.top, l.padInfo.left] }, { type: "int32", data: [l.dilationHeight, l.dilationWidth] }, { type: "int32", data: [l.inHeight, l.inWidth] }, { type: "int32", data: [l.effectiveFilterHeight, l.effectiveFilterWidth] }], m = new Ka(l, "max", false), d = t10.runWebGPUProgram(m, [p], p.dtype, c); - m = new Ka(l, "max", true, true, i); - let f = t10.runWebGPUProgram(m, [p], "int32", c); + y.assert(w.eitherStridesOrDilationsAreOne(s, u), () => `Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`); + let c = w.computePool2DInfo(p.shape, n, s, u, a), l = [{ type: "int32", data: [c.strideHeight, c.strideWidth] }, { type: "int32", data: [c.padInfo.top, c.padInfo.left] }, { type: "int32", data: [c.dilationHeight, c.dilationWidth] }, { type: "int32", data: [c.inHeight, c.inWidth] }, { type: "int32", data: [c.effectiveFilterHeight, c.effectiveFilterWidth] }], m = new Ba(c, "max", false), d = t10.runWebGPUProgram(m, [p], p.dtype, l); + m = new Ba(c, "max", true, true, i); + let f = t10.runWebGPUProgram(m, [p], "int32", l); return [d, f]; } -var sG = { kernelName: ga, backendName: "webgpu", kernelFunc: lce }; -function cce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; - return ao(n, s, a, "min", t10); +var zW = { kernelName: ua, backendName: "webgpu", kernelFunc: Ppe }; +function Ope(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; + return eo(n, s, a, "min", t10); } -var aG = { kernelName: as, backendName: "webgpu", kernelFunc: cce }; -var mce = tt({ opType: fe.MIN, cpuKernelImpl: XV }); -var iG = { kernelName: Eo, backendName: "webgpu", kernelFunc: mce }; -var py = class { +var VW = { kernelName: Gn, backendName: "webgpu", kernelFunc: Ope }; +var Mpe = et({ opType: fe.MIN, cpuKernelImpl: $z }); +var WW = { kernelName: Hn, backendName: "webgpu", kernelFunc: Mpe }; +var Yx = class { constructor(e, t10, o) { this.uniforms = "", this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10.map((n, s) => n[0] + e[s] + n[1]), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.xShape = e, t10.map((n, s) => { this.uniforms += ` pad${s} : vec2,`; }), this.offset = o === "reflect" ? 0 : 1, this.shaderKey = `mirrorPad_${o}`; } getUserCode() { - let e = this.xShape.length, t10 = this.xShape.map((u, l) => `uniforms.pad${l}[0]`).join(","), o = this.xShape.map((u, l) => `uniforms.pad${l}[0] + uniforms.xShape${e > 1 ? `[${l}]` : ""}`).join(","), n = e === 1 ? "start" : "start[i]", s = e === 1 ? "end" : "end[i]", a = e === 1 ? "outC" : "outC[i]", i = ft(e), p = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; + let e = this.xShape.length, t10 = this.xShape.map((u, c) => `uniforms.pad${c}[0]`).join(","), o = this.xShape.map((u, c) => `uniforms.pad${c}[0] + uniforms.xShape${e > 1 ? `[${c}]` : ""}`).join(","), n = e === 1 ? "start" : "start[i]", s = e === 1 ? "end" : "end[i]", a = e === 1 ? "outC" : "outC[i]", i = ft(e), p = e > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, e) : "coords"; return ` ${G("index")} { if (index < uniforms.size) { @@ -33143,13 +32097,13 @@ var py = class { `; } }; -var uG = { kernelName: is, backendName: "webgpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { x: o } = r16, { paddings: n, mode: s } = e, a = t10, i = n.map((l) => ({ type: "int32", data: [l[0], l[1]] })), p = new py(o.shape, n, s); +var UW = { kernelName: Kn, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { x: o } = r15, { paddings: n, mode: s } = e, a = t10, i = n.map((c) => ({ type: "int32", data: [c[0], c[1]] })), p = new Yx(o.shape, n, s); return a.runWebGPUProgram(p, [o], o.dtype, i); } }; -var dce = tt({ opType: fe.MOD }); -var pG = { kernelName: us, backendName: "webgpu", kernelFunc: dce }; -var ly = class { +var Lpe = et({ opType: fe.MOD }); +var GW = { kernelName: qn, backendName: "webgpu", kernelFunc: Lpe }; +var Qx = class { constructor(e, t10) { this.variableNames = ["probs"], this.outputShape = [], this.uniforms = "seed : f32, numOutcomes: i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e, t10], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "multinomial"; } @@ -33190,7 +32144,7 @@ var ly = class { `; } }; -var cy = class { +var Zx = class { constructor(e) { this.variableNames = ["logits"], this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = [this.outputShape[0], 1, 1], this.outputShape[1] >= 4096 ? this.workgroupSize = [256, 1, 1] : this.workgroupSize = [64, 1, 1], this.shaderKey = "softmax"; } @@ -33257,39 +32211,39 @@ var cy = class { `; } }; -function Yv(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { dim: s } = o, a = le({ inputs: { x: n }, backend: t10, attrs: { shape: [y.sizeFromShape(n.shape) / n.shape[s], n.shape[s]] } }), i = new cy(a.shape), p = t10.runWebGPUProgram(i, [a], n.dtype), u = le({ inputs: { x: p }, backend: t10, attrs: { shape: n.shape } }); +function l0(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { dim: s } = o, a = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [y.sizeFromShape(n.shape) / n.shape[s], n.shape[s]] } }), i = new Zx(a.shape), p = t10.runWebGPUProgram(i, [a], n.dtype), u = pe({ inputs: { x: p }, backend: t10, attrs: { shape: n.shape } }); return t10.disposeData(a.dataId), t10.disposeData(p.dataId), u; } -var lG = { kernelName: Fs, backendName: "webgpu", kernelFunc: Yv }; -function fce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : Yv({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], l = p.shape[1], c = new ly(u, s), m = [{ type: "float32", data: [a] }, { type: "int32", data: [l] }], d = t10.runWebGPUProgram(c, [p], "int32", m); +var HW = { kernelName: Is, backendName: "webgpu", kernelFunc: l0 }; +function Bpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { logits: n } = e, { numSamples: s, seed: a, normalized: i } = o, p = i ? n : l0({ inputs: { logits: n }, backend: t10, attrs: { dim: n.shape.length - 1 } }), u = p.shape[0], c = p.shape[1], l = new Qx(u, s), m = [{ type: "float32", data: [a] }, { type: "int32", data: [c] }], d = t10.runWebGPUProgram(l, [p], "int32", m); return i || t10.disposeData(p.dataId), d; } -var cG = { kernelName: ps, backendName: "webgpu", kernelFunc: fce }; -function hce(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var KW = { kernelName: jn, backendName: "webgpu", kernelFunc: Bpe }; +function zpe(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (t10.shouldExecuteOnCPU([o])) { - let s = t10.tensorMap.get(o.dataId), [a, i] = QV(s.values, o.shape, o.dtype); + let s = t10.tensorMap.get(o.dataId), [a, i] = Dz(s.values, o.shape, o.dtype); return t10.makeTensorInfo(i, o.dtype, a); } - let n = new so(o.shape, Z.NEG); + let n = new Jr(o.shape, Z.NEG); return t10.runWebGPUProgram(n, [o], o.dtype); } -var mG = { kernelName: ls, backendName: "webgpu", kernelFunc: hce }; -function gce(r16) { +var qW = { kernelName: pa, backendName: "webgpu", kernelFunc: zpe }; +function Vpe(r15) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), l = t10.readSync(s.dataId), { selectedIndices: c } = Ut.nonMaxSuppressionV3Impl(u, l, a, i, p); - return t10.makeTensorInfo([c.length], "int32", new Int32Array(c)); + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p } = o, u = t10.readSync(n.dataId), c = t10.readSync(s.dataId), { selectedIndices: l } = Vt.nonMaxSuppressionV3Impl(u, c, a, i, p); + return t10.makeTensorInfo([l.length], "int32", new Int32Array(l)); } -var dG = { kernelName: cs, backendName: "webgpu", kernelFunc: gce }; -function xce(r16) { +var jW = { kernelName: Qn, backendName: "webgpu", kernelFunc: Vpe }; +function Wpe(r15) { console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead"); - let { inputs: e, backend: t10, attrs: o } = r16, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, l = t10.readSync(n.dataId), c = t10.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Ut.nonMaxSuppressionV5Impl(l, c, m, d, f, h); + let { inputs: e, backend: t10, attrs: o } = r15, { boxes: n, scores: s } = e, { maxOutputSize: a, iouThreshold: i, scoreThreshold: p, softNmsSigma: u } = o, c = t10.readSync(n.dataId), l = t10.readSync(s.dataId), m = a, d = i, f = p, h = u, { selectedIndices: g, selectedScores: x } = Vt.nonMaxSuppressionV5Impl(c, l, m, d, f, h); return [t10.makeTensorInfo([g.length], "int32", new Int32Array(g)), t10.makeTensorInfo([x.length], "float32", new Float32Array(x))]; } -var fG = { kernelName: ms, backendName: "webgpu", kernelFunc: xce }; -var my = class { +var XW = { kernelName: Zn, backendName: "webgpu", kernelFunc: Wpe }; +var Jx = class { constructor(e, t10) { this.variableNames = ["x"], this.uniforms = "onValue : f32, offValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e, t10], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "onehot"; } @@ -33305,50 +32259,50 @@ var my = class { `; } }; -function yce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), l = new my(u, a), c = le({ inputs: { x: n }, backend: t10, attrs: { shape: [u] } }), m = [{ type: "float32", data: [i] }, { type: "float32", data: [p] }], d = t10.runWebGPUProgram(l, [c], s, m); - t10.disposeData(c.dataId); - let f = [...n.shape, a], h = le({ inputs: { x: d }, backend: t10, attrs: { shape: f } }); +function Upe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n } = e, { dtype: s, depth: a, onValue: i, offValue: p } = o, u = y.sizeFromShape(n.shape), c = new Jx(u, a), l = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [u] } }), m = [{ type: "float32", data: [i] }, { type: "float32", data: [p] }], d = t10.runWebGPUProgram(c, [l], s, m); + t10.disposeData(l.dataId); + let f = [...n.shape, a], h = pe({ inputs: { x: d }, backend: t10, attrs: { shape: f } }); return t10.disposeData(d.dataId), h; } -var hG = { kernelName: ds, backendName: "webgpu", kernelFunc: yce }; -function Em(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var YW = { kernelName: Jn, backendName: "webgpu", kernelFunc: Upe }; +function bm(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "complex64") { - let n = Fi({ inputs: { input: o }, backend: t10 }), s = Em({ inputs: { x: n }, backend: t10 }), a = Mp({ inputs: { input: o }, backend: t10 }), i = Em({ inputs: { x: a }, backend: t10 }), p = Uo({ inputs: { real: s, imag: i }, backend: t10 }); + let n = vi({ inputs: { input: o }, backend: t10 }), s = bm({ inputs: { x: n }, backend: t10 }), a = Rp({ inputs: { input: o }, backend: t10 }), i = bm({ inputs: { x: a }, backend: t10 }), p = xo({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeData(n.dataId), t10.disposeData(s.dataId), t10.disposeData(a.dataId), t10.disposeData(i.dataId), p; } else - return Nt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); + return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: o.dtype === "string" ? "" : 0 }, backend: t10 }); } -var gG = { kernelName: _a, backendName: "webgpu", kernelFunc: Em }; -function xG(r16) { - let { inputs: e, backend: t10 } = r16, { x: o } = e; +var QW = { kernelName: Sa, backendName: "webgpu", kernelFunc: bm }; +function ZW(r15) { + let { inputs: e, backend: t10 } = r15, { x: o } = e; if (o.dtype === "string") throw new Error("onesLike is not supported under string dtype"); if (o.dtype === "complex64") { - let n = Fi({ inputs: { input: o }, backend: t10 }), s = xG({ inputs: { x: n }, backend: t10 }), a = Mp({ inputs: { input: o }, backend: t10 }), i = Em({ inputs: { x: a }, backend: t10 }), p = Uo({ inputs: { real: s, imag: i }, backend: t10 }); + let n = vi({ inputs: { input: o }, backend: t10 }), s = ZW({ inputs: { x: n }, backend: t10 }), a = Rp({ inputs: { input: o }, backend: t10 }), i = bm({ inputs: { x: a }, backend: t10 }), p = xo({ inputs: { real: s, imag: i }, backend: t10 }); return t10.disposeData(n.dataId), t10.disposeData(s.dataId), t10.disposeData(a.dataId), t10.disposeData(i.dataId), p; } else - return Nt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); + return vt({ attrs: { shape: o.shape, dtype: o.dtype, value: 1 }, backend: t10 }); } -var yG = { kernelName: xa, backendName: "webgpu", kernelFunc: xG }; -function bce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { axis: n } = o; +var JW = { kernelName: ca, backendName: "webgpu", kernelFunc: ZW }; +function Gpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { axis: n } = o; if (e.length === 1) - return Yx({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); + return Mx({ inputs: { input: e[0] }, backend: t10, attrs: { dim: n } }); let s = e[0].shape, a = e[0].dtype; - e.forEach((l) => { - y.assertShapesMatch(s, l.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === l.dtype, () => "All tensors passed to stack must have matching dtypes"); + e.forEach((c) => { + y.assertShapesMatch(s, c.shape, "All tensors passed to stack must have matching shapes"), y.assert(a === c.dtype, () => "All tensors passed to stack must have matching dtypes"); }); - let i = [], p = e.map((l) => { - let c = Yx({ inputs: { input: l }, backend: t10, attrs: { dim: n } }); - return i.push(c), c; - }), u = Hv({ inputs: p, backend: t10, attrs: { axis: n } }); - return i.forEach((l) => t10.disposeData(l.dataId)), u; -} -var bG = { kernelName: ya, backendName: "webgpu", kernelFunc: bce }; -function Qv(r16, e = false) { - let t10 = r16.length, o = ft(t10), n = r16.map((c, m) => `uniforms.pad${m}[0]`).join(","), s = r16.map((c, m) => `uniforms.pad${m}[0] + uniforms.xShape${t10 > 1 ? `[${m}]` : ""}`).join(","), a = t10 > 1 ? `${o}(${n})` : `${n}`, i = t10 > 1 ? `${o}(${s})` : `${s}`, p = t10 > 1 ? "any(paddedCoords < start)" : "paddedCoords < start", u = t10 > 1 ? "any(paddedCoords >= end)" : "paddedCoords >= end", l = t10 > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, t10) : "coords"; + let i = [], p = e.map((c) => { + let l = Mx({ inputs: { input: c }, backend: t10, attrs: { dim: n } }); + return i.push(l), l; + }), u = a0({ inputs: p, backend: t10, attrs: { axis: n } }); + return i.forEach((c) => t10.disposeData(c.dataId)), u; +} +var eU = { kernelName: la, backendName: "webgpu", kernelFunc: Gpe }; +function m0(r15, e = false) { + let t10 = r15.length, o = ft(t10), n = r15.map((l, m) => `uniforms.pad${m}[0]`).join(","), s = r15.map((l, m) => `uniforms.pad${m}[0] + uniforms.xShape${t10 > 1 ? `[${m}]` : ""}`).join(","), a = t10 > 1 ? `${o}(${n})` : `${n}`, i = t10 > 1 ? `${o}(${s})` : `${s}`, p = t10 > 1 ? "any(paddedCoords < start)" : "paddedCoords < start", u = t10 > 1 ? "any(paddedCoords >= end)" : "paddedCoords >= end", c = t10 > 1 ? ["coords[0]", "coords[1]", "coords[2]", "coords[3]"].slice(0, t10) : "coords"; return ` let start = ${a}; let end = ${i}; @@ -33356,11 +32310,11 @@ function Qv(r16, e = false) { setOutputAtIndex(index, ${e ? 0 : "uniforms.constantValue"}); } else { let coords = paddedCoords - start; - setOutputAtIndex(index, getX(${l})); + setOutputAtIndex(index, getX(${c})); } `; } -var dy = class { +var ey = class { constructor(e, t10) { this.variableNames = ["x"], this.uniforms = "constantValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10.map((o, n) => o[0] + e[n] + o[1]), this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), t10.map((o, n) => { this.uniforms += ` pad${n} : vec2,`; @@ -33371,52 +32325,52 @@ var dy = class { ${G("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${Qv(this.xShape)} + ${m0(this.xShape)} } } `; } }; -var Cce = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { paddings: s, constantValue: a } = o; +var Hpe = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { paddings: s, constantValue: a } = o; if (s.every((u) => y.arraysEqual(u, [0, 0]))) - return Pt({ inputs: { x: n }, backend: t10 }); + return At({ inputs: { x: n }, backend: t10 }); if (y.sizeFromShape(n.shape) === 0) { - let u = s.map((l, c) => l[0] + n.shape[c] + l[1]); - return Nt({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); + let u = s.map((c, l) => c[0] + n.shape[l] + c[1]); + return vt({ backend: t10, attrs: { shape: u, value: a, dtype: n.dtype } }); } let i = [{ type: "float32", data: [a] }]; s.map((u) => i.push({ type: "int32", data: [u[0], u[1]] })); - let p = new dy(n.shape, s); + let p = new ey(n.shape, s); return t10.runWebGPUProgram(p, [n], n.dtype, i); }; -var CG = { kernelName: fs, backendName: "webgpu", kernelFunc: Cce }; -var wce = tt({ opType: fe.POW }); -var wG = { kernelName: hs, backendName: "webgpu", kernelFunc: wce }; -function Sce(r16) { - let { inputs: e, backend: t10 } = r16, { x: o, alpha: n } = e, s = new Di(fe.PRELU, o.shape, n.shape); +var tU = { kernelName: es, backendName: "webgpu", kernelFunc: Hpe }; +var Kpe = et({ opType: fe.POW }); +var rU = { kernelName: ts, backendName: "webgpu", kernelFunc: Kpe }; +function qpe(r15) { + let { inputs: e, backend: t10 } = r15, { x: o, alpha: n } = e, s = new Ii(fe.PRELU, o.shape, n.shape); return t10.runWebGPUProgram(s, [o, n], "float32"); } -var SG = { kernelName: gs, backendName: "webgpu", kernelFunc: Sce }; -function Ice(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { axis: s, keepDims: a } = o; - return ao(n, s, a, "prod", t10); +var oU = { kernelName: rs, backendName: "webgpu", kernelFunc: qpe }; +function jpe(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { axis: s, keepDims: a } = o; + return eo(n, s, a, "prod", t10); } -var IG = { kernelName: Ho, backendName: "webgpu", kernelFunc: Ice }; -var vce = (r16) => { - let { backend: e, attrs: t10 } = r16, { start: o, stop: n, step: s, dtype: a } = t10, i = eW(o, n, s, a); +var nU = { kernelName: os, backendName: "webgpu", kernelFunc: jpe }; +var Xpe = (r15) => { + let { backend: e, attrs: t10 } = r15, { start: o, stop: n, step: s, dtype: a } = t10, i = Pz(o, n, s, a); return e.makeTensorInfo([i.length], a, i); }; -var vG = { kernelName: ba, backendName: "webgpu", kernelFunc: vce }; -var kce = tt({ opType: fe.DIV }); -var kG = { kernelName: Vn, backendName: "webgpu", kernelFunc: kce }; -var Nce = ye({ opType: Z.RECIPROCAL }); -var NG = { kernelName: xs, backendName: "webgpu", kernelFunc: Nce }; -var Tce = ye({ opType: Z.RELU }); -var TG = { kernelName: ys, backendName: "webgpu", kernelFunc: Tce }; -var _ce = ye({ opType: Z.RELU6 }); -var _G = { kernelName: ws, backendName: "webgpu", kernelFunc: _ce }; -var fy = class { +var sU = { kernelName: ma, backendName: "webgpu", kernelFunc: Xpe }; +var Ype = et({ opType: fe.DIV }); +var aU = { kernelName: fn, backendName: "webgpu", kernelFunc: Ype }; +var Qpe = ye({ opType: Z.RECIPROCAL }); +var iU = { kernelName: ns, backendName: "webgpu", kernelFunc: Qpe }; +var Zpe = ye({ opType: Z.RELU }); +var uU = { kernelName: ss, backendName: "webgpu", kernelFunc: Zpe }; +var Jpe = ye({ opType: Z.RELU6 }); +var pU = { kernelName: us, backendName: "webgpu", kernelFunc: Jpe }; +var ty = class { constructor(e, t10, o) { this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, halfPixelCenters : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t10, o, e[3]], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "resizeBilinear"; } @@ -33467,12 +32421,12 @@ var fy = class { `; } }; -function Ece(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, l = s && p > 1 ? 1 : 0, c = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [l, c] }, { type: "float32", data: [i ? 0.5 : 0] }], f = new fy(n.shape, p, u); +function ece(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, size: a, halfPixelCenters: i } = o, [p, u] = a, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [i ? 0.5 : 0] }], f = new ty(n.shape, p, u); return t10.runWebGPUProgram(f, [n], "float32", d); } -var EG = { kernelName: Cs, backendName: "webgpu", kernelFunc: Ece }; -var hy = class { +var cU = { kernelName: is, backendName: "webgpu", kernelFunc: ece }; +var ry = class { constructor(e, t10) { this.variableNames = ["dy"], this.uniforms = `effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.alignCorners = t10, this.shaderKey = `resizeBilinearBackprop_${t10}`; @@ -33555,12 +32509,12 @@ var hy = class { `; } }; -function $ce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, [, i, p] = n.shape, [, u, l] = s.shape, c = [a && u > 1 ? i - 1 : i, a && l > 1 ? p - 1 : p], m = [a && u > 1 ? u - 1 : u, a && l > 1 ? l - 1 : l], d = c[0] / m[0], f = c[1] / m[1], h = 1 / d, g = 1 / f, x = Math.ceil(h) * 2 + 2, b = Math.ceil(g) * 2 + 2, w = new hy(n.shape, a), S = [{ type: "int32", data: c }, { type: "int32", data: m }, { type: "float32", data: [d] }, { type: "float32", data: [f] }, { type: "float32", data: [h] }, { type: "float32", data: [g] }, { type: "int32", data: [x] }, { type: "int32", data: [b] }]; - return t10.runWebGPUProgram(w, [s], s.dtype, S); +function tce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, [, i, p] = n.shape, [, u, c] = s.shape, l = [a && u > 1 ? i - 1 : i, a && c > 1 ? p - 1 : p], m = [a && u > 1 ? u - 1 : u, a && c > 1 ? c - 1 : c], d = l[0] / m[0], f = l[1] / m[1], h = 1 / d, g = 1 / f, x = Math.ceil(h) * 2 + 2, b = Math.ceil(g) * 2 + 2, C = new ry(n.shape, a), S = [{ type: "int32", data: l }, { type: "int32", data: m }, { type: "float32", data: [d] }, { type: "float32", data: [f] }, { type: "float32", data: [h] }, { type: "float32", data: [g] }, { type: "int32", data: [x] }, { type: "int32", data: [b] }]; + return t10.runWebGPUProgram(C, [s], s.dtype, S); } -var $G = { kernelName: ii, backendName: "webgpu", kernelFunc: $ce }; -var gy = class { +var lU = { kernelName: Ja, backendName: "webgpu", kernelFunc: tce }; +var oy = class { constructor(e, t10, o, n) { this.variableNames = ["x"], this.uniforms = "adjustHeightWidth : vec2, roundBase : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = [e[0], t10, o, e[3]], this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.halfPixelCenters = n, this.shaderKey = `resizeNearest_${n}`; } @@ -33600,12 +32554,12 @@ var gy = class { `; } }; -function Rce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, l = s && p > 1 ? 1 : 0, c = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [l, c] }, { type: "float32", data: [s ? 0.5 : 0] }], f = new gy(n.shape, p, u, a); +function rce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n } = e, { alignCorners: s, halfPixelCenters: a, size: i } = o, [p, u] = i, c = s && p > 1 ? 1 : 0, l = s && u > 1 ? 1 : 0, d = [{ type: "float32", data: [c, l] }, { type: "float32", data: [s ? 0.5 : 0] }], f = new oy(n.shape, p, u, a); return t10.runWebGPUProgram(f, [n], n.dtype, d); } -var RG = { kernelName: bs, backendName: "webgpu", kernelFunc: Rce }; -var xy = class { +var mU = { kernelName: as, backendName: "webgpu", kernelFunc: rce }; +var ny = class { constructor(e, t10) { this.variableNames = ["dy"], this.uniforms = `effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.alignCorners = t10, this.shaderKey = `resizeNearestNeigborBackprop_${t10}`; @@ -33673,12 +32627,12 @@ var xy = class { `; } }; -function Dce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { images: n, dy: s } = e, { alignCorners: a } = o, [, i, p] = n.shape, [, u, l] = s.shape, c = [a && u > 1 ? i - 1 : i, a && l > 1 ? p - 1 : p], m = [a && u > 1 ? u - 1 : u, a && l > 1 ? l - 1 : l], d = c[0] / m[0], f = c[1] / m[1], h = 1 / d, g = 1 / f, x = Math.ceil(h) * 2 + 2, b = Math.ceil(g) * 2 + 2, w = new xy(n.shape, a), S = [{ type: "int32", data: c }, { type: "int32", data: m }, { type: "float32", data: [h] }, { type: "float32", data: [g] }, { type: "int32", data: [x] }, { type: "int32", data: [b] }]; - return t10.runWebGPUProgram(w, [s], s.dtype, S); +function oce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { images: n, dy: s } = e, { alignCorners: a } = o, [, i, p] = n.shape, [, u, c] = s.shape, l = [a && u > 1 ? i - 1 : i, a && c > 1 ? p - 1 : p], m = [a && u > 1 ? u - 1 : u, a && c > 1 ? c - 1 : c], d = l[0] / m[0], f = l[1] / m[1], h = 1 / d, g = 1 / f, x = Math.ceil(h) * 2 + 2, b = Math.ceil(g) * 2 + 2, C = new ny(n.shape, a), S = [{ type: "int32", data: l }, { type: "int32", data: m }, { type: "float32", data: [h] }, { type: "float32", data: [g] }, { type: "int32", data: [x] }, { type: "int32", data: [b] }]; + return t10.runWebGPUProgram(C, [s], s.dtype, S); } -var DG = { kernelName: ai, backendName: "webgpu", kernelFunc: Dce }; -var yy = class { +var dU = { kernelName: Za, backendName: "webgpu", kernelFunc: oce }; +var sy = class { constructor(e) { this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = " axis : vec4,", this.shaderKey = "reverse"; } @@ -33716,27 +32670,27 @@ var yy = class { `; } }; -function Ace(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { dims: s } = o, a = n.shape.length; +function nce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { dims: s } = o, a = n.shape.length; if (a === 0) - return Pt({ inputs: { x: n }, backend: t10 }); + return At({ inputs: { x: n }, backend: t10 }); let i = n.shape, p = [1, 1, 1, 1]; i.forEach((g, x) => { let b = x + 4 - a; p[b] = g; }); - let u = y.parseAxisParam(s, n.shape), l = [0, 0, 0, 0]; + let u = y.parseAxisParam(s, n.shape), c = [0, 0, 0, 0]; u.forEach((g) => { let x = g + 4 - a; - l[x] = 1; + c[x] = 1; }); - let c = [{ type: "int32", data: l }], m = le({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), d = new yy(p), f = t10.runWebGPUProgram(d, [m], m.dtype, c); + let l = [{ type: "int32", data: c }], m = pe({ inputs: { x: n }, backend: t10, attrs: { shape: p } }), d = new sy(p), f = t10.runWebGPUProgram(d, [m], m.dtype, l); t10.disposeData(m.dataId); - let h = le({ inputs: { x: f }, backend: t10, attrs: { shape: i } }); + let h = pe({ inputs: { x: f }, backend: t10, attrs: { shape: i } }); return t10.disposeData(f.dataId), h; } -var AG = { kernelName: Ss, backendName: "webgpu", kernelFunc: Ace }; -var by = class { +var fU = { kernelName: ps, backendName: "webgpu", kernelFunc: nce }; +var ay = class { constructor(e, t10) { this.outputShape = [], this.variableNames = ["x"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`, this.shaderKey = "rotate", this.outputShape = e, typeof t10 == "number" ? (this.uniforms += " fillValue : f32,", this.fillSnippet = "var outputValue = uniforms.fillValue;", this.shaderKey += "_float") : (this.uniforms += " fillValue : vec3,", this.fillSnippet = "var outputValue = uniforms.fillValue[coords[3]];", this.shaderKey += "_vec3"); @@ -33765,15 +32719,15 @@ var by = class { `; } }; -var FG = { kernelName: Vs, backendName: "webgpu", kernelFunc: ({ inputs: r16, attrs: e, backend: t10 }) => { - let { image: o } = r16, { radians: n, fillValue: s, center: a } = e, i = t10, p = new by(o.shape, s), [u, l] = C.getImageCenter(a, o.shape[1], o.shape[2]), c = [{ type: "float32", data: [u] }, { type: "float32", data: [l] }, { type: "float32", data: [Math.sin(n)] }, { type: "float32", data: [Math.cos(n)] }]; - return typeof s == "number" ? c.push({ type: "float32", data: [Number.parseFloat(s.toFixed(2))] }) : c.push({ type: "float32", data: s }), i.runWebGPUProgram(p, [o], o.dtype, c); +var hU = { kernelName: Ds, backendName: "webgpu", kernelFunc: ({ inputs: r15, attrs: e, backend: t10 }) => { + let { image: o } = r15, { radians: n, fillValue: s, center: a } = e, i = t10, p = new ay(o.shape, s), [u, c] = w.getImageCenter(a, o.shape[1], o.shape[2]), l = [{ type: "float32", data: [u] }, { type: "float32", data: [c] }, { type: "float32", data: [Math.sin(n)] }, { type: "float32", data: [Math.cos(n)] }]; + return typeof s == "number" ? l.push({ type: "float32", data: [Number.parseFloat(s.toFixed(2))] }) : l.push({ type: "float32", data: s }), i.runWebGPUProgram(p, [o], o.dtype, l); } }; -var Fce = ye({ opType: Z.ROUND }); -var PG = { kernelName: Is, backendName: "webgpu", kernelFunc: Fce }; -var Pce = ye({ opType: Z.RSQRT, cpuKernelImpl: tW }); -var OG = { kernelName: Do, backendName: "webgpu", kernelFunc: Pce }; -var qa = class { +var sce = ye({ opType: Z.ROUND }); +var gU = { kernelName: cs, backendName: "webgpu", kernelFunc: sce }; +var ace = ye({ opType: Z.RSQRT, cpuKernelImpl: Oz }); +var xU = { kernelName: ls, backendName: "webgpu", kernelFunc: ace }; +var za = class { constructor(e, t10, o, n, s, a, i, p = true) { this.variableNames = ["updates", "indices"], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = a, this.type = i, this.sumDupeIndices = p, this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), this.sliceDimGreaterThanOne = t10 > 1, this.shaderKey = `scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`; let u = ft(s.length); @@ -33799,7 +32753,7 @@ var qa = class { return vec2(d0, d1); } `); - let i = `getUpdates(${Array.from({ length: this.updatesRank }, (u, l) => `coords[${l}]`).join(", ")})`; + let i = `getUpdates(${Array.from({ length: this.updatesRank }, (u, c) => `coords[${c}]`).join(", ")})`; return ` ${s} ${G("index")} { @@ -33811,23 +32765,23 @@ var qa = class { flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Eu(this.type)}(${i}); + ${Su(this.type)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices ? oo("&result[flatIndex]", "updateValue", this.type) : "atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices ? Qr("&result[flatIndex]", "updateValue", this.type) : "atomicStore(&result[flatIndex], bitcast(updateValue));"} } }`; } }; -function Oce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: l, outputSize: c } = C.calculateShapes(s, n, a), m = [c / u, u]; - if (c === 0) +function ice(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { indices: n, updates: s } = e, { shape: a } = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(s, n, a), m = [l / u, u]; + if (l === 0) return t10.makeTensorInfo(a, n.dtype); - let d = le({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), f = le({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = f.dtype, g = Nt({ backend: t10, attrs: { shape: m, value: 0, dtype: h } }), x = y.sizeFromShape(f.shape), b = [{ type: "int32", data: [i] }, { type: "int32", data: l }, { type: "int32", data: [x] }], w = new qa(f.shape, i, d.shape.length, f.shape.length, l, m, h), S = t10.runWebGPUProgram(w, [f, d], h, b, g), k = le({ inputs: { x: S }, backend: t10, attrs: { shape: a } }); + let d = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [p, i] } }), f = pe({ inputs: { x: s }, backend: t10, attrs: { shape: [p, u] } }), h = f.dtype, g = vt({ backend: t10, attrs: { shape: m, value: 0, dtype: h } }), x = y.sizeFromShape(f.shape), b = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [x] }], C = new za(f.shape, i, d.shape.length, f.shape.length, c, m, h), S = t10.runWebGPUProgram(C, [f, d], h, b, g), k = pe({ inputs: { x: S }, backend: t10, attrs: { shape: a } }); return t10.disposeData(d.dataId), t10.disposeData(f.dataId), t10.disposeData(S.dataId), k; } -var MG = { kernelName: vs, backendName: "webgpu", kernelFunc: Oce }; -var Cy = class { +var yU = { kernelName: ms, backendName: "webgpu", kernelFunc: ice }; +var iy = class { constructor(e, t10) { this.outputShape = [], this.variableNames = ["sortedSequence", "values"], this.uniforms = "numInputs : i32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.side = t10, this.shaderKey = `search_sorted_${t10}`; } @@ -33857,12 +32811,12 @@ var Cy = class { `; } }; -function Mce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sortedSequence: n, values: s } = e, { side: a } = o, i = new Cy([s.shape[0], s.shape[1]], a), p = [{ type: "int32", data: [n.shape[1]] }]; +function uce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sortedSequence: n, values: s } = e, { side: a } = o, i = new iy([s.shape[0], s.shape[1]], a), p = [{ type: "int32", data: [n.shape[1]] }]; return t10.runWebGPUProgram(i, [n, s], "int32", p); } -var LG = { kernelName: Ns, backendName: "webgpu", kernelFunc: Mce }; -var wy = class { +var bU = { kernelName: fs, backendName: "webgpu", kernelFunc: uce }; +var uy = class { constructor(e, t10, o) { this.variableNames = ["c", "a", "b"], this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = t10, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.cRank = e, this.rank = o, this.shaderKey = "select"; } @@ -33893,24 +32847,24 @@ var wy = class { `; } }; -function Lce(r16) { - let { inputs: e, backend: t10 } = r16, { condition: o, t: n, e: s } = e, a = new wy(o.shape.length, n.shape, n.shape.length); - return t10.runWebGPUProgram(a, [o, n, s], pt(n.dtype, s.dtype)); -} -var BG = { kernelName: wa, backendName: "webgpu", kernelFunc: Lce }; -var Bce = ye({ opType: Z.SELU }); -var zG = { kernelName: Ts, backendName: "webgpu", kernelFunc: Bce }; -var zce = ye({ opType: Z.SIGMOID }); -var VG = { kernelName: Ao, backendName: "webgpu", kernelFunc: zce }; -var Vce = ye({ opType: Z.SIGN }); -var WG = { kernelName: Rs, backendName: "webgpu", kernelFunc: Vce }; -var Wce = ye({ opType: Z.SIN }); -var UG = { kernelName: Es, backendName: "webgpu", kernelFunc: Wce }; -var Uce = ye({ opType: Z.SINH }); -var GG = { kernelName: $s, backendName: "webgpu", kernelFunc: Uce }; -var Gce = ye({ opType: Z.SOFTPLUS }); -var HG = { kernelName: Ds, backendName: "webgpu", kernelFunc: Gce }; -var Sy = class { +function pce(r15) { + let { inputs: e, backend: t10 } = r15, { condition: o, t: n, e: s } = e, a = new uy(o.shape.length, n.shape, n.shape.length); + return t10.runWebGPUProgram(a, [o, n, s], dt(n.dtype, s.dtype)); +} +var CU = { kernelName: fa, backendName: "webgpu", kernelFunc: pce }; +var cce = ye({ opType: Z.SELU }); +var wU = { kernelName: hs, backendName: "webgpu", kernelFunc: cce }; +var lce = ye({ opType: Z.SIGMOID }); +var SU = { kernelName: bs, backendName: "webgpu", kernelFunc: lce }; +var mce = ye({ opType: Z.SIGN }); +var IU = { kernelName: ys, backendName: "webgpu", kernelFunc: mce }; +var dce = ye({ opType: Z.SIN }); +var vU = { kernelName: gs, backendName: "webgpu", kernelFunc: dce }; +var fce = ye({ opType: Z.SINH }); +var kU = { kernelName: xs, backendName: "webgpu", kernelFunc: fce }; +var hce = ye({ opType: Z.SOFTPLUS }); +var NU = { kernelName: Cs, backendName: "webgpu", kernelFunc: hce }; +var py = class { constructor(e, t10, o, n, s, a) { this.variableNames = ["x"], this.outputShape = [], this.uniforms = "", this.workgroupSize = [64, 1, 1], this.size = true; let i = new Array(n.length); @@ -33921,34 +32875,34 @@ var Sy = class { }), this.shaderKey = `spaceToBatchND_${s}`; } getUserCode() { - let e = ft(this.outputShape.length), t10 = Bv(this.newDim); + let e = ft(this.outputShape.length), t10 = e0(this.newDim); return ` - ${xm(this.paddedXShape, "PaddedX")} + ${cm(this.paddedXShape, "PaddedX")} ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t10}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${Qv(this.xShape, true)} + ${m0(this.xShape, true)} } } `; } }; -var Hce = (r16) => { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { blockShape: s, paddings: a } = o; +var gce = (r15) => { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { blockShape: s, paddings: a } = o; y.assert(n.shape.length <= 4, () => "spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet"); - let i = s.reduce((b, w) => b * w), p = [[0, 0]]; + let i = s.reduce((b, C) => b * C), p = [[0, 0]]; p.push(...a); for (let b = 1 + s.length; b < n.shape.length; ++b) p.push([0, 0]); - let u = p.map((b, w) => b[0] + n.shape[w] + b[1]), l = C.getReshaped(u, s, i, false), c = C.getPermuted(l.length, s.length, false), m = C.getReshapedPermuted(u, s, i, false), d = y.computeStrides(u), f = new Sy(n.shape, u, p, l, c, d.length), h = [{ type: "int32", data: l }, { type: "int32", data: d }]; + let u = p.map((b, C) => b[0] + n.shape[C] + b[1]), c = w.getReshaped(u, s, i, false), l = w.getPermuted(c.length, s.length, false), m = w.getReshapedPermuted(u, s, i, false), d = y.computeStrides(u), f = new py(n.shape, u, p, c, l, d.length), h = [{ type: "int32", data: c }, { type: "int32", data: d }]; p.map((b) => h.push({ type: "int32", data: [b[0], b[1]] })); - let g = t10.runWebGPUProgram(f, [n], n.dtype, h), x = le({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); + let g = t10.runWebGPUProgram(f, [n], n.dtype, h), x = pe({ inputs: { x: g }, backend: t10, attrs: { shape: m } }); return t10.disposeData(g.dataId), x; }; -var KG = { kernelName: Sa, backendName: "webgpu", kernelFunc: Hce }; -var Iy = class { +var TU = { kernelName: ga, backendName: "webgpu", kernelFunc: gce }; +var cy = class { constructor(e, t10, o) { this.variableNames = ["input", "indices", "segmentIds"], this.outputShape = [], this.uniforms = "segmentSize : i32, sparseSize : i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = e, this.type = o, this.dispatchLayout = X([t10]), this.dispatch = H(this.dispatchLayout, [t10], this.workgroupSize), this.shaderKey = "sparseSegmentSum"; } @@ -33963,13 +32917,13 @@ var Iy = class { let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${oo("&result[outIndex]", "value", this.type)} + ${Qr("&result[outIndex]", "value", this.type)} } } `; } }; -var vy = class { +var ly = class { constructor(e, t10) { this.variableNames = ["segmentIds"], this.outputShape = [], this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = [e], this.dispatchLayout = X(t10), this.dispatch = H(this.dispatchLayout, t10, this.workgroupSize), this.shaderKey = "sparseSegmentIdCountProgram"; } @@ -33978,13 +32932,13 @@ var vy = class { ${G("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; - ${oo("&result[segmentId]", "1", "int32")} + ${Qr("&result[segmentId]", "1", "int32")} } } `; } }; -var ky = class { +var my = class { constructor(e, t10) { this.variableNames = ["segmentSum", "sameSegmentIdCount"], this.outputShape = [], this.uniforms = "segmentSize : i32", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.type = t10, this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), this.shaderKey = "sparseSegmentMean"; } @@ -34002,32 +32956,32 @@ var ky = class { `; } }; -function Ny(r16, e, t10, o = false, n) { - let a = y.sizeFromShape(r16.shape) / r16.shape[0], i = r16.dtype, p = y.sizeFromShape(e.shape), u = n.readSync(t10.dataId), c = p > 0 ? u[p - 1] + 1 : 0, m, d = r16.shape.slice(); - d[0] = c; - let f = p * a, h = Nt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); - m = new Iy(d, f, i); - let g = [{ type: "int32", data: [a] }, { type: "int32", data: [f] }], x = n.runWebGPUProgram(m, [r16, e, t10], i, g, h); +function dy(r15, e, t10, o = false, n) { + let a = y.sizeFromShape(r15.shape) / r15.shape[0], i = r15.dtype, p = y.sizeFromShape(e.shape), u = n.readSync(t10.dataId), l = p > 0 ? u[p - 1] + 1 : 0, m, d = r15.shape.slice(); + d[0] = l; + let f = p * a, h = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); + m = new cy(d, f, i); + let g = [{ type: "int32", data: [a] }, { type: "int32", data: [f] }], x = n.runWebGPUProgram(m, [r15, e, t10], i, g, h); if (o) return x; - let b = Nt({ backend: n, attrs: { shape: [c], value: 0, dtype: "int32" } }); - m = new vy(c, t10.shape); - let w = n.runWebGPUProgram(m, [t10], "int32", null, b), S = Nt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); - m = new ky(d, i), g = [{ type: "int32", data: [a] }]; - let k = n.runWebGPUProgram(m, [x, w], i, g, S); - return n.disposeData(x.dataId), n.disposeData(w.dataId), k; -} -function Kce(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; - return Ny(o, n, s, false, t10); -} -var qG = { kernelName: va, backendName: "webgpu", kernelFunc: Kce }; -function qce(r16) { - let { inputs: e, backend: t10 } = r16, { data: o, indices: n, segmentIds: s } = e; - return Ny(o, n, s, true, t10); -} -var jG = { kernelName: ka, backendName: "webgpu", kernelFunc: qce }; -var Ty = class { + let b = vt({ backend: n, attrs: { shape: [l], value: 0, dtype: "int32" } }); + m = new ly(l, t10.shape); + let C = n.runWebGPUProgram(m, [t10], "int32", null, b), S = vt({ backend: n, attrs: { shape: d, value: 0, dtype: i } }); + m = new my(d, i), g = [{ type: "int32", data: [a] }]; + let k = n.runWebGPUProgram(m, [x, C], i, g, S); + return n.disposeData(x.dataId), n.disposeData(C.dataId), k; +} +function xce(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; + return dy(o, n, s, false, t10); +} +var _U = { kernelName: ya, backendName: "webgpu", kernelFunc: xce }; +function yce(r15) { + let { inputs: e, backend: t10 } = r15, { data: o, indices: n, segmentIds: s } = e; + return dy(o, n, s, true, t10); +} +var EU = { kernelName: ba, backendName: "webgpu", kernelFunc: yce }; +var fy = class { constructor(e, t10) { this.variableNames = ["A"], this.workgroupSize = [64, 1, 1], this.size = true; let o = new Array(e.length); @@ -34036,7 +32990,7 @@ var Ty = class { this.outputShape = o, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.rank = this.outputShape.length, this.shaderKey = "tile"; } getUserCode() { - let e = jce(this.rank, "uniforms."); + let e = bce(this.rank, "uniforms."); return ` ${G("index")} { if (index < uniforms.size) { @@ -34047,80 +33001,80 @@ var Ty = class { `; } }; -function jce(r16, e = "") { - if (r16 >= 5) - throw Error(`Tile for rank ${r16} is not yet supported`); - if (r16 === 1) +function bce(r15, e = "") { + if (r15 >= 5) + throw Error(`Tile for rank ${r15} is not yet supported`); + if (r15 === 1) return `(resRC % ${e}aShape)`; let t10 = ["resRC.x", "resRC.y", "resRC.z", "resRC.w"], o = []; - for (let n = 0; n < r16; n++) + for (let n = 0; n < r15; n++) o.push(`(${t10[n]} % ${e}aShape[${n}])`); return o.join(); } -function $m(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { reps: s } = o; +function Cm(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { reps: s } = o; if (t10.shouldExecuteOnCPU([n]) || n.dtype === "string" || n.shape.length >= 5) { - let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, l = ie(n.shape, n.dtype, u), c = uW(l, s); - return t10.makeTensorInfo(c.shape, c.dtype, c.values); + let p = t10.readSync(n.dataId), u = n.dtype === "string" ? p.map((m) => y.decodeString(m)) : p, c = me(n.shape, n.dtype, u), l = Uz(c, s); + return t10.makeTensorInfo(l.shape, l.dtype, l.values); } - let a = new Ty(n.shape, s); + let a = new fy(n.shape, s); return t10.runWebGPUProgram(a, [n], n.dtype); } -var XG = { kernelName: Mo, backendName: "webgpu", kernelFunc: $m }; -function Xce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: l, strides: c, outputSize: m } = C.calculateShapes(s, n, i), d = false; +var $U = { kernelName: po, backendName: "webgpu", kernelFunc: Cm }; +function Cce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { sparseIndices: n, sparseValues: s, defaultValue: a } = e, { outputShape: i } = o, { sliceRank: p, numUpdates: u, sliceSize: c, strides: l, outputSize: m } = w.calculateShapes(s, n, i), d = false; if (s.dtype === "string") { - let R = t10.bufferSync(n), D = t10.bufferSync(s), F = y.decodeString(t10.readSync(a.dataId)[0]), O = rW(R, D, i, m, l, u, p, c, F, d); + let R = t10.bufferSync(n), D = t10.bufferSync(s), P = y.decodeString(t10.readSync(a.dataId)[0]), O = Mz(R, D, i, m, c, u, p, l, P, d); return t10.makeTensorInfo(i, O.dtype, O.values); } - let f = [m / l, l], h = le({ inputs: { x: n }, backend: t10, attrs: { shape: [u, p] } }), g = s.shape.length ? le({ inputs: { x: s }, backend: t10, attrs: { shape: [u, l] } }) : Pt({ inputs: { x: s }, backend: t10 }), x = g.dtype, b = t10.makeTensorInfo([], x, y.makeZerosTypedArray(1, x)), w = le({ inputs: { x: a }, backend: t10, attrs: { shape: Array(f.length).fill(1) } }), S = $m({ inputs: { x: w }, backend: t10, attrs: { reps: f } }), k = y.sizeFromShape([u, l]), T = [{ type: "int32", data: [p] }, { type: "int32", data: c }, { type: "int32", data: [k] }]; + let f = [m / c, c], h = pe({ inputs: { x: n }, backend: t10, attrs: { shape: [u, p] } }), g = s.shape.length ? pe({ inputs: { x: s }, backend: t10, attrs: { shape: [u, c] } }) : At({ inputs: { x: s }, backend: t10 }), x = g.dtype, b = t10.makeTensorInfo([], x, y.makeZerosTypedArray(1, x)), C = pe({ inputs: { x: a }, backend: t10, attrs: { shape: Array(f.length).fill(1) } }), S = Cm({ inputs: { x: C }, backend: t10, attrs: { reps: f } }), k = y.sizeFromShape([u, c]), _ = [{ type: "int32", data: [p] }, { type: "int32", data: l }, { type: "int32", data: [k] }]; switch (u) { case 0: break; case 1: { - let R = new qa([u, l], p, h.shape.length, g.shape.length, c, f, x, d); - t10.runWebGPUProgram(R, [g, h], x, T, S); + let R = new za([u, c], p, h.shape.length, g.shape.length, l, f, x, d); + t10.runWebGPUProgram(R, [g, h], x, _, S); } break; default: { - let R = new qa([u, l], p, h.shape.length, b.shape.length, c, f, x, d); - t10.runWebGPUProgram(R, [b, h], x, T, S); + let R = new za([u, c], p, h.shape.length, b.shape.length, l, f, x, d); + t10.runWebGPUProgram(R, [b, h], x, _, S); } { - let R = new qa([u, l], p, h.shape.length, g.shape.length, c, f, x); - t10.runWebGPUProgram(R, [g, h], x, T, S); + let R = new za([u, c], p, h.shape.length, g.shape.length, l, f, x); + t10.runWebGPUProgram(R, [g, h], x, _, S); } } - let E = le({ inputs: { x: S }, backend: t10, attrs: { shape: i } }); - return t10.disposeData(h.dataId), t10.disposeData(g.dataId), t10.disposeData(w.dataId), t10.disposeData(b.dataId), t10.disposeData(S.dataId), E; + let $ = pe({ inputs: { x: S }, backend: t10, attrs: { shape: i } }); + return t10.disposeData(h.dataId), t10.disposeData(g.dataId), t10.disposeData(C.dataId), t10.disposeData(b.dataId), t10.disposeData(S.dataId), $; } -var YG = { kernelName: Ps, backendName: "webgpu", kernelFunc: Xce }; -function Yce(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = C.prepareSplitSize(n, s, i), u = n.shape.length, l = new Array(u).fill(0), c = n.shape.slice(); +var RU = { kernelName: vs, backendName: "webgpu", kernelFunc: Cce }; +function wce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { numOrSizeSplits: s, axis: a } = o, i = y.parseAxisParam(a, n.shape)[0], p = w.prepareSplitSize(n, s, i), u = n.shape.length, c = new Array(u).fill(0), l = n.shape.slice(); return p.map((m) => { - let d = [...c]; + let d = [...l]; d[i] = m; - let f = ea({ inputs: { x: n }, backend: t10, attrs: { begin: l, size: d } }); - return l[i] += m, f; + let f = Hs({ inputs: { x: n }, backend: t10, attrs: { begin: c, size: d } }); + return c[i] += m, f; }); } -var QG = { kernelName: Ia, backendName: "webgpu", kernelFunc: Yce }; -var Qce = ye({ opType: Z.SQRT }); -var ZG = { kernelName: Fo, backendName: "webgpu", kernelFunc: Qce }; -var JG = { kernelName: tu, backendName: "webgpu", kernelFunc: ({ inputs: r16, backend: e }) => { - let { x: t10 } = r16, o = e, n = new so(t10.shape, Z.SQUARE); +var DU = { kernelName: xa, backendName: "webgpu", kernelFunc: wce }; +var Sce = ye({ opType: Z.SQRT }); +var AU = { kernelName: ws, backendName: "webgpu", kernelFunc: Sce }; +var FU = { kernelName: qi, backendName: "webgpu", kernelFunc: ({ inputs: r15, backend: e }) => { + let { x: t10 } = r15, o = e, n = new Jr(t10.shape, Z.SQUARE); return o.runWebGPUProgram(n, [t10], t10.dtype); } }; -var Zce = tt({ opType: fe.SQUARED_DIFFERENCE }); -var e4 = { kernelName: Po, backendName: "webgpu", kernelFunc: Zce }; -function Jce({ inputs: r16, attrs: e, backend: t10 }) { - let { x: o } = r16, n = new so(o.shape, Z.STEP, "stepAlpha : f32,"), s = [{ type: "float32", data: [e.alpha] }]; +var Ice = et({ opType: fe.SQUARED_DIFFERENCE }); +var PU = { kernelName: ks, backendName: "webgpu", kernelFunc: Ice }; +function vce({ inputs: r15, attrs: e, backend: t10 }) { + let { x: o } = r15, n = new Jr(o.shape, Z.STEP, "stepAlpha : f32,"), s = [{ type: "float32", data: [e.alpha] }]; return t10.runWebGPUProgram(n, [o], o.dtype, s); } -var t4 = { kernelName: Ko, backendName: "webgpu", kernelFunc: Jce }; -var _y = class { +var OU = { kernelName: wo, backendName: "webgpu", kernelFunc: vce }; +var hy = class { constructor(e) { this.variableNames = ["x"], this.workPerThread = 1, this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize, [this.workPerThread, 1, 1]); let t10 = ft(this.outputShape.length); @@ -34144,52 +33098,52 @@ var _y = class { `; } }; -function eme(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: l, newAxisMask: c, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: w, strides: S } = nt.sliceInfo(n.shape, s, a, i, p, u, l, c, m), k; +function kce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { begin: s, end: a, strides: i, beginMask: p, endMask: u, ellipsisMask: c, newAxisMask: l, shrinkAxisMask: m } = o, { finalShapeSparse: d, finalShape: f, isIdentity: h, sliceDim0: g, isSimpleSlice: x, begin: b, end: C, strides: S } = pt.sliceInfo(n.shape, s, a, i, p, u, c, l, m), k; if (h) - k = le({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); + k = pe({ inputs: { x: n }, backend: t10, attrs: { shape: f } }); else if (g || x) { y.assert(n.shape.length >= 1, () => `Input must have rank at least 1, got: ${n.shape.length}`); - let T = nt.computeOutShape(b, w, S), E = ea({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: T } }); - k = le({ inputs: { x: E }, backend: t10, attrs: { shape: f } }), t10.disposeData(E.dataId); + let _ = pt.computeOutShape(b, C, S), $ = Hs({ inputs: { x: n }, backend: t10, attrs: { begin: b, size: _ } }); + k = pe({ inputs: { x: $ }, backend: t10, attrs: { shape: f } }), t10.disposeData($.dataId); } else if (t10.shouldExecuteOnCPU([n])) { - let E = t10.readSync(n.dataId), R = ie(n.shape, n.dtype, E), D = sW(d, R, S, b); + let $ = t10.readSync(n.dataId), R = me(n.shape, n.dtype, $), D = zz(d, R, S, b); k = t10.makeTensorInfo(f, n.dtype, D.values); } else { - let E = new _y(d), R = [{ type: "int32", data: b }, { type: "int32", data: S }], D = t10.runWebGPUProgram(E, [n], n.dtype, R); - k = le({ inputs: { x: D }, backend: t10, attrs: { shape: f } }), t10.disposeData(D.dataId); + let $ = new hy(d), R = [{ type: "int32", data: b }, { type: "int32", data: S }], D = t10.runWebGPUProgram($, [n], n.dtype, R); + k = pe({ inputs: { x: D }, backend: t10, attrs: { shape: f } }), t10.disposeData(D.dataId); } return k; } -var r42 = { kernelName: Os, backendName: "webgpu", kernelFunc: eme }; -function tme(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: l, dataSplits: c } = e, m = t10.readSync(l.dataId), d = t10.readSync(c.dataId), [f, h] = aW(m, d, n, s, a, i, p, u); - return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(c.shape, "int32", h)]; -} -var o4 = { kernelName: Na, backendName: "webgpu", kernelFunc: tme }; -var rme = tt({ opType: fe.SUB, cpuKernelImpl: iW, supportsComplex: true }); -var n4 = { kernelName: Oo, backendName: "webgpu", kernelFunc: rme }; -var ome = ye({ opType: Z.TAN }); -var s4 = { kernelName: Ms, backendName: "webgpu", kernelFunc: ome }; -var nme = ye({ opType: Z.TANH }); -var a4 = { kernelName: Ls, backendName: "webgpu", kernelFunc: nme }; -function sme(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: l, outputSize: c } = C.calculateShapes(a, s, n.shape), m = [c / u, u]; - if (c === 0) +var MU = { kernelName: Ns, backendName: "webgpu", kernelFunc: kce }; +function Nce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { separator: n, nGramWidths: s, leftPad: a, rightPad: i, padWidth: p, preserveShortSequences: u } = o, { data: c, dataSplits: l } = e, m = t10.readSync(c.dataId), d = t10.readSync(l.dataId), [f, h] = Vz(m, d, n, s, a, i, p, u); + return [t10.makeTensorInfo([f.length], "string", f), t10.makeTensorInfo(l.shape, "int32", h)]; +} +var LU = { kernelName: Ca, backendName: "webgpu", kernelFunc: Nce }; +var Tce = et({ opType: fe.SUB, cpuKernelImpl: Wz, supportsComplex: true }); +var BU = { kernelName: Ts, backendName: "webgpu", kernelFunc: Tce }; +var _ce = ye({ opType: Z.TAN }); +var zU = { kernelName: _s, backendName: "webgpu", kernelFunc: _ce }; +var Ece = ye({ opType: Z.TANH }); +var VU = { kernelName: Es, backendName: "webgpu", kernelFunc: Ece }; +function $ce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { tensor: n, indices: s, updates: a } = e, {} = o, { sliceRank: i, numUpdates: p, sliceSize: u, strides: c, outputSize: l } = w.calculateShapes(a, s, n.shape), m = [l / u, u]; + if (l === 0) return t10.makeTensorInfo(n.shape, s.dtype); - let d = [], f = le({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }); + let d = [], f = pe({ inputs: { x: s }, backend: t10, attrs: { shape: [p, i] } }); d.push(f); - let h = le({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }); + let h = pe({ inputs: { x: a }, backend: t10, attrs: { shape: [p, u] } }); d.push(h); - let g = le({ inputs: { x: n }, backend: t10, attrs: { shape: m } }); + let g = pe({ inputs: { x: n }, backend: t10, attrs: { shape: m } }); d.push(g); - let x = $m({ inputs: { x: g }, backend: t10, attrs: { reps: Array(m.length).fill(1) } }), b = new qa([p, u], i, f.shape.length, h.shape.length, l, m, n.dtype, false), w = y.sizeFromShape([p, u]), S = [{ type: "int32", data: [i] }, { type: "int32", data: l }, { type: "int32", data: [w] }], k = t10.runWebGPUProgram(b, [h, f], g.dtype, S, x); + let x = Cm({ inputs: { x: g }, backend: t10, attrs: { reps: Array(m.length).fill(1) } }), b = new za([p, u], i, f.shape.length, h.shape.length, c, m, n.dtype, false), C = y.sizeFromShape([p, u]), S = [{ type: "int32", data: [i] }, { type: "int32", data: c }, { type: "int32", data: [C] }], k = t10.runWebGPUProgram(b, [h, f], g.dtype, S, x); d.push(k); - let T = le({ inputs: { x: k }, backend: t10, attrs: { shape: n.shape } }); - return d.forEach((E) => t10.disposeData(E.dataId)), T; + let _ = pe({ inputs: { x: k }, backend: t10, attrs: { shape: n.shape } }); + return d.forEach(($) => t10.disposeData($.dataId)), _; } -var i4 = { kernelName: ks, backendName: "webgpu", kernelFunc: sme }; -var Ey = class { +var WU = { kernelName: ds, backendName: "webgpu", kernelFunc: $ce }; +var gy = class { constructor(e) { this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = `inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`, this.shaderKey = "swap"; @@ -34265,7 +33219,7 @@ var Ey = class { `; } }; -var $y = class { +var xy = class { constructor(e) { this.variableNames = ["x", "indices"], this.workgroupSize = [256, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.uniforms = "inputSize : i32, firstPass : i32, k : i32,", this.shaderKey = "merge"; } @@ -34332,52 +33286,52 @@ var $y = class { `; } }; -function pc(r16, e) { - e !== null && r16.disposeData(e.dataId); +function rl(r15, e) { + e !== null && r15.disposeData(e.dataId); } -function u4(r16) { +function UU(r15) { let e = 1; - for (; e < r16; ) + for (; e < r15; ) e *= 2; return e; } -function ame(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n } = e, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; +function Rce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n } = e, { k: s, sorted: a } = o, i = n.shape, p = i[i.length - 1]; if (t10.shouldExecuteOnCPU([n])) { - let k = t10.readSync(n.dataId), [T, E] = pW(k, i, n.dtype, s, a); - return [t10.makeTensorInfo(T.shape, T.dtype, T.values), t10.makeTensorInfo(E.shape, E.dtype, E.values)]; + let k = t10.readSync(n.dataId), [_, $] = Gz(k, i, n.dtype, s, a); + return [t10.makeTensorInfo(_.shape, _.dtype, _.values), t10.makeTensorInfo($.shape, $.dtype, $.values)]; } if (s === 0) return i[i.length - 1] = 0, [t10.makeTensorInfo(i, n.dtype, []), t10.makeTensorInfo(i, "int32", [])]; if (p === 1) - return [n, Nt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t10 })]; - let l = y.sizeFromShape(i) / p, c = le({ inputs: { x: n }, attrs: { shape: [l, p] }, backend: t10 }), m = u4(s), d = u4(p), f = null, h = () => f === null ? [c, c] : [c, f], g = (k, T, E) => { - let R = h(), D = new Ey(E), O = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "float32", data: [Number.NEGATIVE_INFINITY] }, { type: "int32", data: [k] }, { type: "int32", data: [T] }], M = f; - f = t10.runWebGPUProgram(D, R, "int32", O), pc(t10, M); + return [n, vt({ attrs: { shape: i, dtype: "int32", value: 0 }, backend: t10 })]; + let c = y.sizeFromShape(i) / p, l = pe({ inputs: { x: n }, attrs: { shape: [c, p] }, backend: t10 }), m = UU(s), d = UU(p), f = null, h = () => f === null ? [l, l] : [l, f], g = (k, _, $) => { + let R = h(), D = new gy($), O = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "float32", data: [Number.NEGATIVE_INFINITY] }, { type: "int32", data: [k] }, { type: "int32", data: [_] }], M = f; + f = t10.runWebGPUProgram(D, R, "int32", O), rl(t10, M); }; for (let k = 1; k < m; k *= 2) { - let T = k * 2; - for (let E = k; E >= 1; E /= 2) - g(T, E, [l, d]); + let _ = k * 2; + for (let $ = k; $ >= 1; $ /= 2) + g(_, $, [c, d]); } for (let k = d; k > m; k /= 2) { - let T = h(), E = new $y([l, k / 2]), D = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], F = f; - f = t10.runWebGPUProgram(E, T, "int32", D), pc(t10, F); + let _ = h(), $ = new xy([c, k / 2]), D = [{ type: "int32", data: [p] }, { type: "int32", data: [f === null ? 1 : 0] }, { type: "int32", data: [m] }], P = f; + f = t10.runWebGPUProgram($, _, "int32", D), rl(t10, P); let O = m / 2, M = O * 2; for (let L = O; L >= 1; L /= 2) g(M, L, f.shape); } let x = f; - f = ea({ inputs: { x: f }, backend: t10, attrs: { begin: 0, size: [l, s] } }), pc(t10, x); - let b = Xv({ inputs: { x: c, indices: f }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); - pc(t10, c); - let w = i.slice(0, -1); - w.push(s), x = f, f = le({ inputs: { x: f }, attrs: { shape: w }, backend: t10 }), pc(t10, x); + f = Hs({ inputs: { x: f }, backend: t10, attrs: { begin: 0, size: [c, s] } }), rl(t10, x); + let b = c0({ inputs: { x: l, indices: f }, backend: t10, attrs: { axis: 1, batchDims: 1 } }); + rl(t10, l); + let C = i.slice(0, -1); + C.push(s), x = f, f = pe({ inputs: { x: f }, attrs: { shape: C }, backend: t10 }), rl(t10, x); let S = b; - return b = le({ inputs: { x: b }, attrs: { shape: w }, backend: t10 }), pc(t10, S), [b, f]; + return b = pe({ inputs: { x: b }, attrs: { shape: C }, backend: t10 }), rl(t10, S), [b, f]; } -var p4 = { kernelName: Bs, backendName: "webgpu", kernelFunc: ame }; -var Ry = class { +var GU = { kernelName: $s, backendName: "webgpu", kernelFunc: Rce }; +var yy = class { constructor(e) { this.variableNames = ["Image", "Transforms"], this.uniforms = "interpolationModeId : i32, fillModeId : i32, fillValue : f32,", this.workgroupSize = [64, 1, 1], this.size = true, this.outputShape = e, this.dispatchLayout = X(this.outputShape), this.dispatch = H(this.dispatchLayout, this.outputShape, this.workgroupSize), this.shaderKey = "transform"; } @@ -34501,47 +33455,47 @@ var Ry = class { `; } }; -function ime(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [l, c, m, d] = n.shape, [f, h] = u != null ? u : [c, m], g = [l, f, h, d], x = new Ry(g), b = a === "nearest" ? 1 : 2, w; +function Dce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { image: n, transforms: s } = e, { interpolation: a, fillMode: i, fillValue: p, outputShape: u } = o, [c, l, m, d] = n.shape, [f, h] = u != null ? u : [l, m], g = [c, f, h, d], x = new yy(g), b = a === "nearest" ? 1 : 2, C; switch (i) { case "constant": - w = 1; + C = 1; break; case "reflect": - w = 2; + C = 2; break; case "wrap": - w = 3; + C = 3; break; case "nearest": - w = 4; + C = 4; break; default: - w = 1; + C = 1; break; } - let S = [{ type: "int32", data: [b] }, { type: "int32", data: [w] }, { type: "float32", data: [p] }]; + let S = [{ type: "int32", data: [b] }, { type: "int32", data: [C] }, { type: "float32", data: [p] }]; return t10.runWebGPUProgram(x, [n, s], "float32", S); } -var l4 = { kernelName: zs, backendName: "webgpu", kernelFunc: ime }; -function ume(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { value: n } = e, { axis: s } = o; +var HU = { kernelName: Rs, backendName: "webgpu", kernelFunc: Dce }; +function Ace(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { value: n } = e, { axis: s } = o; s < 0 && (s += n.shape.length); - let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), l = 0; + let a = n, i = a.shape.length, p = n.shape[s], u = new Array(i - 1), c = 0; for (let h = 0; h < i; h++) - h !== s && (u[l++] = a.shape[h]); - let c = [], m = new Array(i).fill(0), d = a.shape.slice(); + h !== s && (u[c++] = a.shape[h]); + let l = [], m = new Array(i).fill(0), d = a.shape.slice(); d[s] = 1; let f = new Array(p); for (let h = 0; h < f.length; h++) { m[s] = h; - let g = ea({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: d } }), x = le({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); - f[h] = x, c.push(g); + let g = Hs({ inputs: { x: a }, backend: t10, attrs: { begin: m, size: d } }), x = pe({ inputs: { x: g }, backend: t10, attrs: { shape: u } }); + f[h] = x, l.push(g); } - return c.forEach((h) => t10.disposeData(h.dataId)), f; + return l.forEach((h) => t10.disposeData(h.dataId)), f; } -var c4 = { kernelName: Ta, backendName: "webgpu", kernelFunc: ume }; -var Dy = class { +var KU = { kernelName: wa, backendName: "webgpu", kernelFunc: Ace }; +var by = class { constructor(e, t10, o) { if (this.outputShape = [], this.variableNames = ["x", "segmentIds"], this.uniforms = "numSegments : i32, xSize: i32,", this.workgroupSize = [64, 1, 1], this.atomic = true, this.outputShape = t10, this.dispatchLayout = X(e), this.dispatch = H(this.dispatchLayout, e, this.workgroupSize), o !== "float32" && o !== "int32") throw new Error(`UnsortedSegmentSum only supports float32 and int32 @@ -34561,40 +33515,40 @@ var Dy = class { let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${oo("&result[flatIndex]", "value", this.type)} + ${Qr("&result[flatIndex]", "value", this.type)} } } } `; } }; -function pme(r16) { - let { inputs: e, backend: t10, attrs: o } = r16, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, l = C.getAxesPermutation([u], i), c = n; - l != null && (c = Cr({ inputs: { x: n }, backend: t10, attrs: { perm: l } }), p.push(c), u = C.getInnerMostAxes(1, i)[0]); - let m = C.segment_util.computeOutShape(c.shape, u, a), d = y.sizeFromShape([c.shape[u]]), f = le({ inputs: { x: c }, backend: t10, attrs: { shape: [-1, d] } }); +function Fce(r15) { + let { inputs: e, backend: t10, attrs: o } = r15, { x: n, segmentIds: s } = e, { numSegments: a } = o, i = n.shape.length, p = [], u = 0, c = w.getAxesPermutation([u], i), l = n; + c != null && (l = xr({ inputs: { x: n }, backend: t10, attrs: { perm: c } }), p.push(l), u = w.getInnerMostAxes(1, i)[0]); + let m = w.segment_util.computeOutShape(l.shape, u, a), d = y.sizeFromShape([l.shape[u]]), f = pe({ inputs: { x: l }, backend: t10, attrs: { shape: [-1, d] } }); p.push(f); - let h = n.dtype, g = [f.shape[0], a], x = Nt({ backend: t10, attrs: { shape: g, value: 0, dtype: h } }), b = new Dy(f.shape, g, h), w = [{ type: "int32", data: [a] }, { type: "int32", data: [y.sizeFromShape(f.shape)] }], S = t10.runWebGPUProgram(b, [f, s], h, w, x), k = le({ inputs: { x: S }, backend: t10, attrs: { shape: m } }); + let h = n.dtype, g = [f.shape[0], a], x = vt({ backend: t10, attrs: { shape: g, value: 0, dtype: h } }), b = new by(f.shape, g, h), C = [{ type: "int32", data: [a] }, { type: "int32", data: [y.sizeFromShape(f.shape)] }], S = t10.runWebGPUProgram(b, [f, s], h, C, x), k = pe({ inputs: { x: S }, backend: t10, attrs: { shape: m } }); p.push(S); - let T = k; - if (l != null) { + let _ = k; + if (c != null) { p.push(k); - let E = C.getUndoAxesPermutation(l); - T = Cr({ inputs: { x: T }, backend: t10, attrs: { perm: E } }); - } - return p.forEach((E) => t10.disposeData(E.dataId)), T; -} -var m4 = { kernelName: su, backendName: "webgpu", kernelFunc: pme }; -var lme = [jz, cW, mW, dW, fW, hW, xW, yW, bW, CW, wW, SW, IW, vW, kW, _W, EW, $W, RW, DW, FW, PW, OW, zW, VW, WW, Yz, GW, KW, qW, jW, XW, YW, QW, ZW, JW, eU, tU, nU, sU, aU, iU, pU, lU, uU, cU, mU, dU, fU, hU, yU, bU, CU, wU, SU, IU, vU, kU, NU, Kz, TU, $U, _U, EU, RU, DU, AU, FU, PU, OU, MU, Xz, LU, HW, BU, zU, VU, WU, UU, GU, HU, qU, KU, jU, XU, YU, ZU, JU, NW, eG, tG, nG, rG, oG, sG, TW, aG, iG, uG, pG, cG, gU, mG, dG, fG, MW, hG, yG, bG, CG, wG, SG, IG, vG, LW, kG, NG, TG, _G, qz, EG, $G, RG, DG, AG, FG, PG, OG, MG, LG, BG, zG, VG, WG, UG, GG, AW, t4, r42, o4, lG, HG, KG, qG, jG, YG, QG, ZG, JG, e4, n4, xU, s4, a4, i4, XG, p4, l4, gW, c4, m4, gG]; -for (let r16 of lme) - li(r16); -var d4 = "4.17.0"; -var cme = "4.17.0"; -var mme = "4.17.0"; -var dme = "4.17.0"; -var fme = "4.17.0"; -var hme = "4.14.0"; -var gme = { tfjs: d4, "tfjs-core": d4, "tfjs-converter": cme, "tfjs-backend-cpu": mme, "tfjs-backend-webgl": dme, "tfjs-backend-wasm": fme, "tfjs-backend-webgpu": hme }; -var qtr = void 0; + let $ = w.getUndoAxesPermutation(c); + _ = xr({ inputs: { x: _ }, backend: t10, attrs: { perm: $ } }); + } + return p.forEach(($) => t10.disposeData($.dataId)), _; +} +var qU = { kernelName: Qi, backendName: "webgpu", kernelFunc: Fce }; +var Pce = [pz, Kz, qz, jz, Xz, Yz, Zz, Jz, eV, tV, rV, oV, nV, sV, aV, pV, cV, lV, mV, dV, hV, gV, xV, wV, SV, IV, lz, kV, TV, _V, EV, $V, RV, DV, AV, FV, PV, OV, BV, zV, VV, WV, GV, HV, UV, KV, qV, jV, XV, YV, JV, eW, tW, rW, oW, nW, sW, aW, iW, iz, uW, lW, pW, cW, mW, dW, fW, hW, gW, xW, yW, cz, bW, NV, CW, wW, SW, IW, vW, kW, NW, _W, TW, EW, $W, RW, AW, FW, iV, PW, OW, BW, MW, LW, zW, uV, VW, WW, UW, GW, KW, QV, qW, jW, XW, yV, YW, JW, eU, tU, rU, oU, nU, sU, bV, aU, iU, uU, pU, uz, cU, lU, mU, dU, fU, hU, gU, xU, yU, bU, CU, wU, SU, IU, vU, kU, fV, OU, MU, LU, HW, NU, TU, _U, EU, RU, DU, AU, FU, PU, BU, ZV, zU, VU, WU, $U, GU, HU, Qz, KU, qU, QW]; +for (let r15 of Pce) + ti(r15); +var jU = "4.17.0"; +var Oce = "4.17.0"; +var Mce = "4.17.0"; +var Lce = "4.17.0"; +var Bce = "4.17.0"; +var zce = "4.17.0"; +var Vce = { tfjs: jU, "tfjs-core": jU, "tfjs-converter": Oce, "tfjs-backend-cpu": Mce, "tfjs-backend-webgl": Lce, "tfjs-backend-wasm": Bce, "tfjs-backend-webgpu": zce }; +var E7t = void 0; // src/util/util.ts function log(...msg) { @@ -34702,7 +33656,7 @@ var config = { minConfidence: 0.2, minSize: 0, iouThreshold: 0.1, - scale: 1.4, + scale: 1, mask: false, return: false }, @@ -34890,8 +33844,8 @@ var convolution = ` // src/image/imagefx.ts var collect = (source, prefix, collection) => { - const r16 = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); - source.replace(r16, (match2, name) => { + const r15 = new RegExp("\\b" + prefix + " \\w+ (\\w+)", "ig"); + source.replace(r15, (match2, name) => { collection[name] = 0; return match2; }); @@ -35081,20 +34035,20 @@ function GLImageFilter() { }, saturation: (amount) => { const x = (amount || 0) * 2 / 3 + 1; - const y4 = (x - 1) * -0.5; + const y8 = (x - 1) * -0.5; filter.colorMatrix([ x, - y4, - y4, + y8, + y8, 0, 0, - y4, + y8, x, - y4, + y8, 0, 0, - y4, - y4, + y8, + y8, x, 0, 0, @@ -35109,22 +34063,22 @@ function GLImageFilter() { filter.saturation(-1); }, contrast: (amount) => { - const v4 = (amount || 0) + 1; - const o = -128 * (v4 - 1); + const v8 = (amount || 0) + 1; + const o = -128 * (v8 - 1); filter.colorMatrix([ - v4, + v8, 0, 0, 0, o, 0, - v4, + v8, 0, 0, o, 0, 0, - v4, + v8, 0, o, 0, @@ -35495,10 +34449,10 @@ function GLImageFilter() { // src/image/enhance.ts async function histogramEqualization(inputImage) { - const squeeze = inputImage.shape.length === 4 ? gl(inputImage) : inputImage; - const rgb3 = Ci(squeeze, 3, 2); - const min = [Ac(rgb3[0]), Ac(rgb3[1]), Ac(rgb3[2])]; - const max = [La(rgb3[0]), La(rgb3[1]), La(rgb3[2])]; + const squeeze = inputImage.shape.length === 4 ? cc(inputImage) : inputImage; + const rgb3 = li(squeeze, 3, 2); + const min = [Nl(rgb3[0]), Nl(rgb3[1]), Nl(rgb3[2])]; + const max = [Ra(rgb3[0]), Ra(rgb3[1]), Ra(rgb3[2])]; const absMax = await Promise.all(max.map((channel) => channel.data())); const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]); const maxRange = maxValue > 1 ? 255 : 1; @@ -35508,13 +34462,13 @@ async function histogramEqualization(inputImage) { const sub = [Te(rgb3[0], min[0]), Te(rgb3[1], min[1]), Te(rgb3[2], min[2])]; const range = [Te(max[0], min[0]), Te(max[1], min[1]), Te(max[2], min[2])]; const enh = [se(sub[0], factor), se(sub[1], factor), se(sub[2], factor)]; - const stack = Tr([enh[0], enh[1], enh[2]], 2); + const stack = vr([enh[0], enh[1], enh[2]], 2); final = W(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]); - Lt([...sub, ...range, ...enh, stack]); + Ot([...sub, ...range, ...enh, stack]); } else { - final = Ks(squeeze, 0); + final = Ms(squeeze, 0); } - Lt([...rgb3, ...min, ...max, rgb3, squeeze, inputImage]); + Ot([...rgb3, ...min, ...max, rgb3, squeeze, inputImage]); return final; } @@ -35574,16 +34528,16 @@ function copy(input, output) { return outputCanvas; } async function process2(input, config3, getTensor = true) { - var _a2, _b, _c2; + var _a, _b, _c2; if (!input) { if (config3.debug) log("input error: input is missing"); return { tensor: null, canvas: null }; } - if (!(input instanceof dt) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { + if (!(input instanceof mt) && !(typeof Image !== "undefined" && input instanceof Image) && !(typeof globalThis.Canvas !== "undefined" && input instanceof globalThis.Canvas) && !(typeof ImageData !== "undefined" && input instanceof ImageData) && !(typeof ImageBitmap !== "undefined" && input instanceof ImageBitmap) && !(typeof HTMLImageElement !== "undefined" && input instanceof HTMLImageElement) && !(typeof HTMLMediaElement !== "undefined" && input instanceof HTMLMediaElement) && !(typeof HTMLVideoElement !== "undefined" && input instanceof HTMLVideoElement) && !(typeof HTMLCanvasElement !== "undefined" && input instanceof HTMLCanvasElement) && !(typeof OffscreenCanvas !== "undefined" && input instanceof OffscreenCanvas)) { throw new Error("input error: type not recognized"); } - if (input instanceof dt) { + if (input instanceof mt) { let tensor2 = null; if (input["isDisposedInternal"]) throw new Error("input error: attempted to use tensor but it is disposed"); @@ -35591,24 +34545,24 @@ async function process2(input, config3, getTensor = true) { throw new Error("input error: attempted to use tensor without a shape"); if (input.shape.length === 3) { if (input.shape[2] === 3) { - tensor2 = Ks(input, 0); + tensor2 = Ms(input, 0); } else if (input.shape[2] === 4) { - const rgb3 = vN(input, [0, 0, 0], [-1, -1, 3]); - tensor2 = Ks(rgb3, 0); - Lt(rgb3); + const rgb3 = B1(input, [0, 0, 0], [-1, -1, 3]); + tensor2 = Ms(rgb3, 0); + Ot(rgb3); } } else if (input.shape.length === 4) { if (input.shape[3] === 3) { - tensor2 = Xr(input); + tensor2 = Ur(input); } else if (input.shape[3] === 4) { - tensor2 = kN(input, [0, 0, 0, 0], [-1, -1, -1, 3]); + tensor2 = z1(input, [0, 0, 0, 0], [-1, -1, -1, 3]); } } if (tensor2 == null || tensor2.shape.length !== 4 || tensor2.shape[0] !== 1 || tensor2.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${input.shape.toString()}`); if (tensor2.dtype === "int32") { const cast = Ue(tensor2, "float32"); - Lt(tensor2); + Ot(tensor2); tensor2 = cast; } return { tensor: tensor2, canvas: config3.filter.return ? outCanvas : null }; @@ -35635,7 +34589,7 @@ async function process2(input, config3, getTensor = true) { targetHeight = maxSize; targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight); } - if ((((_a2 = config3.filter) == null ? void 0 : _a2.width) || 0) > 0) + if ((((_a = config3.filter) == null ? void 0 : _a.width) || 0) > 0) targetWidth = config3.filter.width; else if ((((_b = config3.filter) == null ? void 0 : _b.height) || 0) > 0) targetWidth = originalWidth * ((config3.filter.height || 0) / originalHeight); @@ -35720,22 +34674,22 @@ async function process2(input, config3, getTensor = true) { let pixels; let depth = 3; if (typeof ImageData !== "undefined" && input instanceof ImageData || input.data && input.width && input.height) { - if (env.browser && XT) { - pixels = XT ? XT.fromPixels(input) : null; + if (env.browser && cT) { + pixels = cT ? cT.fromPixels(input) : null; } else { depth = input.data.length / input.height / input.width; const arr = new Uint8Array(input.data.buffer); - pixels = pr(arr, [input.height, input.width, depth], "int32"); + pixels = ar(arr, [input.height, input.width, depth], "int32"); } } else { if (!tmpCanvas || outCanvas.width !== tmpCanvas.width || outCanvas.height !== tmpCanvas.height) tmpCanvas = canvas(outCanvas.width, outCanvas.height); - if (XT && env.browser) { + if (cT && env.browser) { if (config3.backend === "webgl" || config3.backend === "humangl" || config3.backend === "webgpu") { - pixels = XT.fromPixels(outCanvas); + pixels = cT.fromPixels(outCanvas); } else { tmpCanvas = copy(outCanvas); - pixels = XT.fromPixels(tmpCanvas); + pixels = cT.fromPixels(tmpCanvas); } } else { const tempCanvas = copy(outCanvas); @@ -35743,24 +34697,24 @@ async function process2(input, config3, getTensor = true) { const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight); depth = tempData.data.length / targetWidth / targetHeight; const arr = new Uint8Array(tempData.data.buffer); - pixels = pr(arr, [targetWidth, targetHeight, depth]); + pixels = ar(arr, [targetWidth, targetHeight, depth]); } } if (depth === 4) { - const rgb3 = vN(pixels, [0, 0, 0], [-1, -1, 3]); - Lt(pixels); + const rgb3 = B1(pixels, [0, 0, 0], [-1, -1, 3]); + Ot(pixels); pixels = rgb3; } if (!pixels) throw new Error("input error: cannot create tensor"); const casted = Ue(pixels, "float32"); - const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Ks(casted, 0); - Lt([pixels, casted]); + const tensor = config3.filter.equalization ? await histogramEqualization(casted) : Ms(casted, 0); + Ot([pixels, casted]); if (config3.filter.autoBrightness) { - const max = La(tensor); + const max = Ra(tensor); const maxVal = await max.data(); config3.filter.brightness = maxVal[0] > 1 ? 1 - maxVal[0] / 255 : 1 - maxVal[0]; - Lt(max); + Ot(max); } return { tensor, canvas: config3.filter.return ? outCanvas : null }; } @@ -35769,10 +34723,10 @@ async function skip(config3, input) { if (config3.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; if (!last.inputTensor) { - last.inputTensor = Xr(input); + last.inputTensor = Ur(input); } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { - Lt(last.inputTensor); - last.inputTensor = Xr(input); + Ot(last.inputTensor); + last.inputTensor = Ur(input); } else { const t10 = {}; t10.diff = Te(input, last.inputTensor); @@ -35780,8 +34734,8 @@ async function skip(config3, input) { t10.sum = ot(t10.squared); const diffSum = await t10.sum.data(); const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; - Lt([last.inputTensor, t10.diff, t10.squared, t10.sum]); - last.inputTensor = Xr(input); + Ot([last.inputTensor, t10.diff, t10.squared, t10.sum]); + last.inputTensor = Ur(input); skipFrame = diffRelative <= (config3.cacheSensitivity || 0); } return skipFrame; @@ -35798,14 +34752,14 @@ async function compare(config3, input1, input2) { log("input tensors must be of shape [1, height, width, 3]:", input1.shape, input2.shape); return 0; } - t10.input1 = Xr(input1); - t10.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? b5.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : Xr(input2); + t10.input1 = Ur(input1); + t10.input2 = input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2] ? eX.resizeBilinear(input2, [input1.shape[1], input1.shape[2]]) : Ur(input2); t10.diff = Te(t10.input1, t10.input2); t10.squared = se(t10.diff, t10.diff); t10.sum = ot(t10.squared); const diffSum = await t10.sum.data(); const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3; - Lt([t10.input1, t10.input2, t10.diff, t10.squared, t10.sum]); + Ot([t10.input1, t10.input2, t10.diff, t10.squared, t10.sum]); return diffRelative; } @@ -35875,7 +34829,7 @@ var Env = class { __privateAdd(this, _imageData, void 0); this.browser = typeof navigator !== "undefined" && typeof navigator.appVersion !== "undefined"; this.node = typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined"; - this.tfjs = { version: gme["tfjs-core"] }; + this.tfjs = { version: Vce["tfjs-core"] }; this.offscreen = typeof OffscreenCanvas !== "undefined"; this.initial = true; this.worker = this.browser && this.offscreen ? typeof WorkerGlobalScope !== "undefined" : void 0; @@ -35920,11 +34874,11 @@ var Env = class { } /** update backend information */ async updateBackend() { - this.backends = Object.keys(cr().registryFactory); + this.backends = Object.keys(ur().registryFactory); try { this.tensorflow = { - version: Hk()["binding"] ? Hk()["binding"].TF_Version : void 0, - gpu: Hk()["binding"] ? Hk()["binding"].isUsingGpuDevice() : void 0 + version: ak()["binding"] ? ak()["binding"].TF_Version : void 0, + gpu: ak()["binding"] ? ak()["binding"].isUsingGpuDevice() : void 0 }; } catch (e) { } @@ -35955,7 +34909,7 @@ var Env = class { this.webgpu.supported = false; } try { - this.kernels = ad(Gk()).map((kernel) => kernel.kernelName.toLowerCase()); + this.kernels = Ym(sk()).map((kernel) => kernel.kernelName.toLowerCase()); } catch (e) { } } @@ -35998,7 +34952,7 @@ var WebCam = class { }); /** start method initializizes webcam stream and associates it with a dom video element */ __publicField(this, "start", async (webcamConfig) => { - var _a2, _b; + var _a, _b; if (webcamConfig == null ? void 0 : webcamConfig.debug) this.config.debug = webcamConfig == null ? void 0 : webcamConfig.debug; if (webcamConfig == null ? void 0 : webcamConfig.crop) @@ -36039,7 +34993,7 @@ var WebCam = class { resizeMode: this.config.crop ? "crop-and-scale" : "none" } }; - if (((_a2 = this.config) == null ? void 0 : _a2.width) > 0) + if (((_a = this.config) == null ? void 0 : _a.width) > 0) requestedConstraints.video.width = { ideal: this.config.width }; if (((_b = this.config) == null ? void 0 : _b.height) > 0) requestedConstraints.video.height = { ideal: this.config.height }; @@ -36159,18 +35113,18 @@ var WebCam = class { } /** is webcam paused */ get paused() { - var _a2; - return ((_a2 = this.element) == null ? void 0 : _a2.paused) || false; + var _a; + return ((_a = this.element) == null ? void 0 : _a.paused) || false; } /** webcam current width */ get width() { - var _a2; - return ((_a2 = this.element) == null ? void 0 : _a2.videoWidth) || 0; + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoWidth) || 0; } /** webcam current height */ get height() { - var _a2; - return ((_a2 = this.element) == null ? void 0 : _a2.videoHeight) || 0; + var _a; + return ((_a = this.element) == null ? void 0 : _a.videoHeight) || 0; } }; @@ -36376,7 +35330,7 @@ function setModelLoadOptions(config3) { options.modelBasePath = config3.modelBasePath; } async function loadModel(modelPath) { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; let modelUrl = join(options.modelBasePath, modelPath || ""); if (!modelUrl.toLowerCase().endsWith(".json")) modelUrl += ".json"; @@ -36394,14 +35348,14 @@ async function loadModel(modelPath) { options.cacheSupported = typeof indexedDB !== "undefined"; let cachedModels = {}; try { - cachedModels = options.cacheSupported && options.cacheModels ? await Si.listModels() : {}; + cachedModels = options.cacheSupported && options.cacheModels ? await di.listModels() : {}; } catch (e) { options.cacheSupported = false; } modelStats[shortModelName].inCache = options.cacheSupported && options.cacheModels && Object.keys(cachedModels).includes(cachedModelName); modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl; const tfLoadOptions = typeof fetch === "undefined" ? {} : { fetchFunc: (url, init4) => httpHandler(url, init4) }; - let model23 = new Kc(modelStats[shortModelName].url, tfLoadOptions); + let model23 = new Bl(modelStats[shortModelName].url, tfLoadOptions); let loaded = false; try { model23.findIOHandler(); @@ -36411,12 +35365,12 @@ async function loadModel(modelPath) { log("error finding model i/o handler:", modelUrl, err); } try { - const artifacts = await ((_a2 = model23.handler) == null ? void 0 : _a2.load()) || null; + const artifacts = await ((_a = model23.handler) == null ? void 0 : _a.load()) || null; modelStats[shortModelName].sizeFromManifest = ((_b = artifacts == null ? void 0 : artifacts.weightData) == null ? void 0 : _b.byteLength) || 0; if (artifacts) model23.loadSync(artifacts); else - model23 = await r72(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); + model23 = await M8(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions); modelStats[shortModelName].sizeLoadedWeights = ((_d2 = (_c2 = model23.artifacts) == null ? void 0 : _c2.weightData) == null ? void 0 : _d2.byteLength) || 0; if (options.verbose) log("load:", { model: shortModelName, url: model23["modelUrl"], bytes: modelStats[shortModelName].sizeLoadedWeights }); @@ -36437,7 +35391,7 @@ async function loadModel(modelPath) { } // package.json -var version = "3.2.1"; +var version = "3.2.2"; // src/tfjs/humangl.ts var config2 = { @@ -36467,14 +35421,14 @@ function extensions() { config2.extensions = gl2.getSupportedExtensions(); } function register(instance) { - var _a2; + var _a; if (instance.config.backend !== "humangl") return; - if (config2.name in cr().registry && !((_a2 = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a2.getParameter(config2.gl.VERSION))) { + if (config2.name in ur().registry && !((_a = config2 == null ? void 0 : config2.gl) == null ? void 0 : _a.getParameter(config2.gl.VERSION))) { log("humangl error: backend invalid context"); instance.models.reset(); } - if (!efe(config2.name)) { + if (!kme(config2.name)) { try { config2.canvas = canvas(100, 100); } catch (err) { @@ -36512,23 +35466,23 @@ function register(instance) { return; } try { - BI(2, config2.gl); + NI(2, config2.gl); } catch (err) { log("humangl error: cannot set webgl context:", err); return; } try { - const ctx = new kp(config2.gl); - pu(config2.name, () => new Ul(ctx), config2.priority); + const ctx = new bp(config2.gl); + tu(config2.name, () => new Lc(ctx), config2.priority); } catch (err) { log("humangl error: cannot register webgl backend:", err); return; } try { - const kernels = ad("webgl"); + const kernels = Ym("webgl"); kernels.forEach((kernelConfig) => { const newKernelConfig = { ...kernelConfig, backendName: config2.name }; - li(newKernelConfig); + ti(newKernelConfig); }); } catch (err) { log("humangl error: cannot update webgl backend registration:", err); @@ -36542,7 +35496,7 @@ function register(instance) { return; } extensions(); - const backend = Hk(); + const backend = ak(); const current = typeof backend["gpgpu"] !== "undefined" ? backend["getGPGPUContext"]().gl : null; if (current) { if (instance.config.debug) @@ -36568,14 +35522,14 @@ function init() { constants.tf2 = ke(2, "float32"); constants.tf05 = ke(0.5, "float32"); constants.tf127 = ke(127.5, "float32"); - constants.rgb = rr([0.2989, 0.587, 0.114], "float32"); + constants.rgb = Jt([0.2989, 0.587, 0.114], "float32"); } // src/tfjs/backend.ts async function getBestBackend() { - var _a2; + var _a; await env.updateBackend(); - if ((_a2 = env.tensorflow) == null ? void 0 : _a2.version) + if ((_a = env.tensorflow) == null ? void 0 : _a.version) return "tensorflow"; if (env.webgpu.supported && env.webgpu.backend) return "webgpu"; @@ -36590,36 +35544,36 @@ function registerCustomOps(config3) { if (!env.kernels.includes("mod")) { const kernelMod = { kernelName: "Mod", - backendName: Gk(), - kernelFunc: (op2) => De(() => Te(op2.inputs.a, se(Xe(op2.inputs.a, op2.inputs.b), op2.inputs.b))) + backendName: sk(), + kernelFunc: (op2) => De(() => Te(op2.inputs.a, se(je(op2.inputs.a, op2.inputs.b), op2.inputs.b))) }; - li(kernelMod); + ti(kernelMod); env.kernels.push("mod"); newKernels.push("mod"); } if (!env.kernels.includes("floormod")) { const kernelFloorMod = { kernelName: "FloorMod", - backendName: Gk(), - kernelFunc: (op2) => De(() => Ce(se(Sd(op2.inputs.a, op2.inputs.b), op2.inputs.b), k2(op2.inputs.a, op2.inputs.b))) + backendName: sk(), + kernelFunc: (op2) => De(() => Ce(se(md(op2.inputs.a, op2.inputs.b), op2.inputs.b), z2(op2.inputs.a, op2.inputs.b))) }; - li(kernelFloorMod); + ti(kernelFloorMod); env.kernels.push("floormod"); newKernels.push("floormod"); } if (!env.kernels.includes("rotatewithoffset") && config3.softwareKernels) { const kernelRotateWithOffset = { kernelName: "RotateWithOffset", - backendName: Gk(), + backendName: sk(), kernelFunc: (op2) => De(() => { - const backend = Gk(); - Qde("cpu"); - const t10 = b5.rotateWithOffset(op2.inputs.image, op2.attrs.radians, op2.attrs.fillValue, op2.attrs.center); - Qde(backend); + const backend = sk(); + Sme("cpu"); + const t10 = eX.rotateWithOffset(op2.inputs.image, op2.attrs.radians, op2.attrs.fillValue, op2.attrs.center); + Sme(backend); return t10; }) }; - li(kernelRotateWithOffset); + ti(kernelRotateWithOffset); env.kernels.push("rotatewithoffset"); newKernels.push("rotatewithoffset"); } @@ -36628,11 +35582,11 @@ function registerCustomOps(config3) { } var defaultFlags = {}; async function check(instance, force = false) { - var _a2, _b; + var _a, _b; instance.state = "backend"; - if (((_a2 = instance.config.backend) == null ? void 0 : _a2.length) === 0) + if (((_a = instance.config.backend) == null ? void 0 : _a.length) === 0) instance.config.backend = await getBestBackend(); - if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && Gk() !== instance.config.backend) { + if (force || env.initial || instance.config.backend && instance.config.backend.length > 0 && sk() !== instance.config.backend) { const timeStamp = now(); if (instance.config.backend && instance.config.backend.length > 0) { if (typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined" && instance.config.debug) { @@ -36643,10 +35597,10 @@ async function check(instance, force = false) { if (instance.config.debug) log("running inside electron"); } - let available = Object.keys(cr().registryFactory); + let available = Object.keys(ur().registryFactory); if (instance.config.backend === "humangl" && !available.includes("humangl")) { register(instance); - available = Object.keys(cr().registryFactory); + available = Object.keys(ur().registryFactory); } if (instance.config.debug) log("available backends:", available); @@ -36690,17 +35644,17 @@ async function check(instance, force = false) { A().set("CANVAS2D_WILL_READ_FREQUENTLY", true); if (instance.config.debug) log("wasm path:", instance.config.wasmPath); - if (typeof Iie !== "undefined") - Iie(instance.config.wasmPath, instance.config.wasmPlatformFetch); + if (typeof nae !== "undefined") + nae(instance.config.wasmPath, instance.config.wasmPlatformFetch); else throw new Error("backend error: attempting to use wasm backend but wasm path is not set"); - let mt = false; + let mt2 = false; let simd = false; try { - mt = await A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); + mt2 = await A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"); simd = await A().getAsync("WASM_HAS_SIMD_SUPPORT"); if (instance.config.debug) - log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt ? "multithreaded" : "singlethreaded"}`); + log(`wasm execution: ${simd ? "simd" : "no simd"} ${mt2 ? "multithreaded" : "singlethreaded"}`); if (instance.config.debug && !simd) log("warning: wasm simd support is not enabled"); } catch (e) { @@ -36708,8 +35662,8 @@ async function check(instance, force = false) { } } try { - await Qde(instance.config.backend); - await Zde(); + await Sme(instance.config.backend); + await Ime(); } catch (err) { log("error: cannot set backend:", instance.config.backend, err); return false; @@ -36717,7 +35671,7 @@ async function check(instance, force = false) { if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(A().flags)); } - if (Gk() === "humangl" || Gk() === "webgl") { + if (sk() === "humangl" || sk() === "webgl") { if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) A().set("WEBGL_USE_SHAPES_UNIFORMS", true); if (A().flagRegistry.WEBGL_EXP_CONV) @@ -36727,7 +35681,7 @@ async function check(instance, force = false) { A().set("WEBGL_DELETE_TEXTURE_THRESHOLD", 0); } } - if (Gk() === "webgpu") { + if (sk() === "webgpu") { } if (instance.config.debug) { const newFlags = A().flags; @@ -36738,7 +35692,7 @@ async function check(instance, force = false) { updatedFlags[key] = newFlags[key]; } if (instance.config.debug && Object.keys(updatedFlags).length > 0) - log("backend:", Gk(), "flags:", updatedFlags); + log("backend:", sk(), "flags:", updatedFlags); } if (instance.config.flags && Object.keys(instance.config.flags).length > 0) { if (instance.config.debug) @@ -36747,10 +35701,10 @@ async function check(instance, force = false) { A().set(key, val); } } - Gde(); + hme(); init(); instance.performance.initBackend = Math.trunc(now() - timeStamp); - instance.config.backend = Gk(); + instance.config.backend = sk(); await env.updateBackend(); registerCustomOps(instance.config); } @@ -36762,17 +35716,17 @@ function fakeOps(kernelNames, config3) { kernelName, backendName: config3.backend, kernelFunc: (param) => { - var _a2; + var _a; if (config3.debug) log("kernelFunc", kernelName, config3.backend, param); - return (_a2 = param == null ? void 0 : param.inputs) == null ? void 0 : _a2.info; + return (_a = param == null ? void 0 : param.inputs) == null ? void 0 : _a.info; } // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); }, }; - li(kernelConfig); + ti(kernelConfig); } - env.kernels = ad(Gk()).map((kernel) => kernel.kernelName.toLowerCase()); + env.kernels = Ym(sk()).map((kernel) => kernel.kernelName.toLowerCase()); } // src/draw/draw.ts @@ -36817,38 +35771,38 @@ function labels(ctx, str, startX, startY, localOptions2) { const line = str.replace(/\[.*\]/g, "").split("\n").map((l) => l.trim()); const x = Math.max(0, startX); for (let i = line.length - 1; i >= 0; i--) { - const y4 = i * localOptions2.lineHeight + startY; + const y8 = i * localOptions2.lineHeight + startY; if (localOptions2.shadowColor && localOptions2.shadowColor !== "") { ctx.fillStyle = localOptions2.shadowColor; - ctx.fillText(line[i], x + 5, y4 + 16); + ctx.fillText(line[i], x + 5, y8 + 16); } ctx.fillStyle = localOptions2.labelColor; - ctx.fillText(line[i], x + 4, y4 + 15); + ctx.fillText(line[i], x + 4, y8 + 15); } } -function point(ctx, x, y4, z, localOptions2) { +function point(ctx, x, y8, z, localOptions2) { ctx.fillStyle = colorDepth(z, localOptions2); ctx.beginPath(); - ctx.arc(x, y4, localOptions2.pointSize, 0, 2 * Math.PI); + ctx.arc(x, y8, localOptions2.pointSize, 0, 2 * Math.PI); ctx.fill(); } -function rect(ctx, x, y4, width, height, localOptions2) { +function rect(ctx, x, y8, width, height, localOptions2) { ctx.beginPath(); ctx.lineWidth = localOptions2.lineWidth; if (localOptions2.useCurves) { const cx2 = (x + x + width) / 2; - const cy2 = (y4 + y4 + height) / 2; + const cy2 = (y8 + y8 + height) / 2; ctx.ellipse(cx2, cy2, width / 2, height / 2, 0, 0, 2 * Math.PI); } else { - ctx.moveTo(x + localOptions2.roundRect, y4); - ctx.lineTo(x + width - localOptions2.roundRect, y4); - ctx.quadraticCurveTo(x + width, y4, x + width, y4 + localOptions2.roundRect); - ctx.lineTo(x + width, y4 + height - localOptions2.roundRect); - ctx.quadraticCurveTo(x + width, y4 + height, x + width - localOptions2.roundRect, y4 + height); - ctx.lineTo(x + localOptions2.roundRect, y4 + height); - ctx.quadraticCurveTo(x, y4 + height, x, y4 + height - localOptions2.roundRect); - ctx.lineTo(x, y4 + localOptions2.roundRect); - ctx.quadraticCurveTo(x, y4, x + localOptions2.roundRect, y4); + ctx.moveTo(x + localOptions2.roundRect, y8); + ctx.lineTo(x + width - localOptions2.roundRect, y8); + ctx.quadraticCurveTo(x + width, y8, x + width, y8 + localOptions2.roundRect); + ctx.lineTo(x + width, y8 + height - localOptions2.roundRect); + ctx.quadraticCurveTo(x + width, y8 + height, x + width - localOptions2.roundRect, y8 + height); + ctx.lineTo(x + localOptions2.roundRect, y8 + height); + ctx.quadraticCurveTo(x, y8 + height, x, y8 + height - localOptions2.roundRect); + ctx.lineTo(x, y8 + localOptions2.roundRect); + ctx.quadraticCurveTo(x, y8, x + localOptions2.roundRect, y8); ctx.closePath(); } ctx.stroke(); @@ -36878,9 +35832,9 @@ function curves(ctx, points, localOptions2) { } ctx.moveTo(points[0][0], points[0][1]); for (let i = 0; i < points.length - 2; i++) { - const xc = (points[i][0] + points[i + 1][0]) / 2; - const yc = (points[i][1] + points[i + 1][1]) / 2; - ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc); + const xc2 = (points[i][0] + points[i + 1][0]) / 2; + const yc2 = (points[i][1] + points[i + 1][1]) / 2; + ctx.quadraticCurveTo(points[i][0], points[i][1], xc2, yc2); } ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]); ctx.stroke(); @@ -36889,25 +35843,25 @@ function curves(ctx, points, localOptions2) { ctx.fill(); } } -function arrow(ctx, from, to2, radius = 5) { +function arrow(ctx, from, to, radius = 5) { let angle; let x; - let y4; + let y8; ctx.beginPath(); ctx.moveTo(from[0], from[1]); - ctx.lineTo(to2[0], to2[1]); - angle = Math.atan2(to2[1] - from[1], to2[0] - from[0]); - x = radius * Math.cos(angle) + to2[0]; - y4 = radius * Math.sin(angle) + to2[1]; - ctx.moveTo(x, y4); + ctx.lineTo(to[0], to[1]); + angle = Math.atan2(to[1] - from[1], to[0] - from[0]); + x = radius * Math.cos(angle) + to[0]; + y8 = radius * Math.sin(angle) + to[1]; + ctx.moveTo(x, y8); angle += 1 / 3 * (2 * Math.PI); - x = radius * Math.cos(angle) + to2[0]; - y4 = radius * Math.sin(angle) + to2[1]; - ctx.lineTo(x, y4); + x = radius * Math.cos(angle) + to[0]; + y8 = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y8); angle += 1 / 3 * (2 * Math.PI); - x = radius * Math.cos(angle) + to2[0]; - y4 = radius * Math.sin(angle) + to2[1]; - ctx.lineTo(x, y4); + x = radius * Math.cos(angle) + to[0]; + y8 = radius * Math.sin(angle) + to[1]; + ctx.lineTo(x, y8); ctx.closePath(); ctx.stroke(); ctx.fill(); @@ -40727,8 +39681,8 @@ var LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [ // src/draw/face.ts var localOptions; function drawLabels(f, ctx) { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2; - if (!localOptions.drawLabels || ((_a2 = localOptions.faceLabels) == null ? void 0 : _a2.length) === 0) + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2; + if (!localOptions.drawLabels || ((_a = localOptions.faceLabels) == null ? void 0 : _a.length) === 0) return; let l = localOptions.faceLabels.slice(); l = replace(l, "[id]", f.id.toFixed(0)); @@ -40763,8 +39717,8 @@ function drawLabels(f, ctx) { labels(ctx, l, f.box[0], f.box[1], localOptions); } function drawIrisElipse(f, ctx) { - var _a2, _b, _c2, _d2; - if (((_a2 = f.annotations) == null ? void 0 : _a2.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { + var _a, _b, _c2, _d2; + if (((_a = f.annotations) == null ? void 0 : _a.leftEyeIris) && ((_b = f.annotations) == null ? void 0 : _b.leftEyeIris[0])) { ctx.strokeStyle = localOptions.useDepth ? "rgba(255, 200, 255, 0.3)" : localOptions.color; ctx.beginPath(); const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2; @@ -40790,8 +39744,8 @@ function drawIrisElipse(f, ctx) { } } function drawGazeSpheres(f, ctx) { - var _a2; - if (localOptions.drawGaze && ((_a2 = f.rotation) == null ? void 0 : _a2.angle) && typeof Path2D !== "undefined") { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.angle) && typeof Path2D !== "undefined") { ctx.strokeStyle = "pink"; const valX = f.box[0] + f.box[2] / 2 - f.box[3] * rad2deg(f.rotation.angle.yaw) / 90; const valY = f.box[1] + f.box[3] / 2 + f.box[2] * rad2deg(f.rotation.angle.pitch) / 90; @@ -40814,8 +39768,8 @@ function drawGazeSpheres(f, ctx) { } } function drawGazeArrows(f, ctx) { - var _a2; - if (localOptions.drawGaze && ((_a2 = f.rotation) == null ? void 0 : _a2.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { + var _a; + if (localOptions.drawGaze && ((_a = f.rotation) == null ? void 0 : _a.gaze.strength) && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) { ctx.strokeStyle = "pink"; ctx.fillStyle = "pink"; const leftGaze = [ @@ -40855,10 +39809,10 @@ function drawFacePoints(f, ctx) { } } } else { - for (const [k, v4] of Object.entries((f == null ? void 0 : f.annotations) || {})) { - if (!(v4 == null ? void 0 : v4[0])) + for (const [k, v8] of Object.entries((f == null ? void 0 : f.annotations) || {})) { + if (!(v8 == null ? void 0 : v8[0])) continue; - const pt2 = v4[0]; + const pt2 = v8[0]; point(ctx, pt2[0], pt2[1], 0, localOptions); if (localOptions.drawLabels) labels(ctx, k, pt2[0], pt2[1], localOptions); @@ -40895,7 +39849,7 @@ function face(inCanvas2, result, drawOptions) { // src/draw/body.ts function body(inCanvas2, result, drawOptions) { - var _a2, _b; + var _a, _b; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; @@ -40910,7 +39864,7 @@ function body(inCanvas2, result, drawOptions) { ctx.font = localOptions2.font; if (localOptions2.drawBoxes && result[i].box && result[i].box.length === 4) { rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions2); - if (localOptions2.drawLabels && ((_a2 = localOptions2.bodyLabels) == null ? void 0 : _a2.length) > 0) { + if (localOptions2.drawLabels && ((_a = localOptions2.bodyLabels) == null ? void 0 : _a.length) > 0) { let l = localOptions2.bodyLabels.slice(); l = replace(l, "[id]", result[i].id.toFixed(0)); l = replace(l, "[score]", 100 * result[i].score); @@ -40947,7 +39901,7 @@ function body(inCanvas2, result, drawOptions) { // src/draw/hand.ts function hand(inCanvas2, result, drawOptions) { - var _a2, _b; + var _a, _b; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; @@ -40961,7 +39915,7 @@ function hand(inCanvas2, result, drawOptions) { ctx.strokeStyle = localOptions2.color; ctx.fillStyle = localOptions2.color; rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); - if (localOptions2.drawLabels && ((_a2 = localOptions2.handLabels) == null ? void 0 : _a2.length) > 0) { + if (localOptions2.drawLabels && ((_a = localOptions2.handLabels) == null ? void 0 : _a.length) > 0) { let l = localOptions2.handLabels.slice(); l = replace(l, "[id]", h.id.toFixed(0)); l = replace(l, "[label]", h.label); @@ -41010,7 +39964,7 @@ function hand(inCanvas2, result, drawOptions) { // src/draw/object.ts function object(inCanvas2, result, drawOptions) { - var _a2; + var _a; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; @@ -41024,7 +39978,7 @@ function object(inCanvas2, result, drawOptions) { ctx.strokeStyle = localOptions2.color; ctx.fillStyle = localOptions2.color; rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions2); - if (localOptions2.drawLabels && ((_a2 = localOptions2.objectLabels) == null ? void 0 : _a2.length) > 0) { + if (localOptions2.drawLabels && ((_a = localOptions2.objectLabels) == null ? void 0 : _a.length) > 0) { let l = localOptions2.objectLabels.slice(); l = replace(l, "[id]", h.id.toFixed(0)); l = replace(l, "[label]", h.label); @@ -41038,11 +39992,11 @@ function object(inCanvas2, result, drawOptions) { // src/draw/gesture.ts function gesture(inCanvas2, result, drawOptions) { - var _a2; + var _a; const localOptions2 = mergeDeep(options2, drawOptions); if (!result || !inCanvas2) return; - if (localOptions2.drawGestures && ((_a2 = localOptions2.gestureLabels) == null ? void 0 : _a2.length) > 0) { + if (localOptions2.drawGestures && ((_a = localOptions2.gestureLabels) == null ? void 0 : _a.length) > 0) { const ctx = getCanvasContext(inCanvas2); if (!ctx) return; @@ -41282,16 +40236,16 @@ function createAnchors() { const stride = strides[layerId]; const featureMapHeight = Math.ceil(inputSize / stride); const featureMapWidth = Math.ceil(inputSize / stride); - for (let y4 = 0; y4 < featureMapHeight; ++y4) { + for (let y8 = 0; y8 < featureMapHeight; ++y8) { for (let x = 0; x < featureMapWidth; ++x) { for (let anchorId = 0; anchorId < anchorCount; ++anchorId) { - anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y4 + 0.5) / featureMapHeight }); + anchors3.push({ x: (x + 0.5) / featureMapWidth, y: (y8 + 0.5) / featureMapHeight }); } } } layerId = lastSameStrideLayer; } - anchorTensor = { x: rr(anchors3.map((a) => a.x)), y: rr(anchors3.map((a) => a.y)) }; + anchorTensor = { x: Jt(anchors3.map((a) => a.x)), y: Jt(anchors3.map((a) => a.y)) }; } async function loadDetector(config3) { if (env.initial) @@ -41308,30 +40262,30 @@ async function loadDetector(config3) { var cropFactor = [5, 5]; function decodeBoxes(boxesTensor, anchor) { return De(() => { - const split = Ci(boxesTensor, 12, 1); - let xCenter = gl(split[0]); - let yCenter = gl(split[1]); - let width = gl(split[2]); - let height = gl(split[3]); - xCenter = Ce(Xe(xCenter, inputSize), anchor.x); - yCenter = Ce(Xe(yCenter, inputSize), anchor.y); - width = se(Xe(width, inputSize), cropFactor[0]); - height = se(Xe(height, inputSize), cropFactor[1]); - const xMin = Te(xCenter, Xe(width, 2)); - const yMin = Te(yCenter, Xe(height, 2)); + const split = li(boxesTensor, 12, 1); + let xCenter = cc(split[0]); + let yCenter = cc(split[1]); + let width = cc(split[2]); + let height = cc(split[3]); + xCenter = Ce(je(xCenter, inputSize), anchor.x); + yCenter = Ce(je(yCenter, inputSize), anchor.y); + width = se(je(width, inputSize), cropFactor[0]); + height = se(je(height, inputSize), cropFactor[1]); + const xMin = Te(xCenter, je(width, 2)); + const yMin = Te(yCenter, je(height, 2)); const xMax = Ce(xMin, width); const yMax = Ce(yMin, height); - const boxes = Tr([xMin, yMin, xMax, yMax], 1); + const boxes = vr([xMin, yMin, xMax, yMax], 1); return boxes; }); } async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { - var _a2, _b; + var _a, _b; const detectedBoxes = []; const t10 = {}; t10.boxes = decodeBoxes(boxesTensor, anchorTensor); - t10.scores = Pa(logitsTensor); - t10.nms = await b5.nonMaxSuppressionAsync(t10.boxes, t10.scores, 1, ((_a2 = config3.body["detector"]) == null ? void 0 : _a2.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); + t10.scores = Ea(logitsTensor); + t10.nms = await eX.nonMaxSuppressionAsync(t10.boxes, t10.scores, 1, ((_a = config3.body["detector"]) == null ? void 0 : _a.minConfidence) || 0.1, ((_b = config3.body["detector"]) == null ? void 0 : _b.iouThreshold) || 0.1); const nms = await t10.nms.data(); const scores = await t10.scores.data(); const boxes = await t10.boxes.array(); @@ -41342,18 +40296,18 @@ async function decodeResults(boxesTensor, logitsTensor, config3, outputSize2) { const detectedBox = { score, boxRaw, box }; detectedBoxes.push(detectedBox); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return detectedBoxes; } async function detectBoxes(input, config3, outputSize2) { const t10 = {}; t10.res = model == null ? void 0 : model.execute(input, ["Identity"]); - t10.logitsRaw = Ye(t10.res, [0, 0, 0], [1, -1, 1]); - t10.boxesRaw = Ye(t10.res, [0, 0, 1], [1, -1, -1]); - t10.logits = gl(t10.logitsRaw); - t10.boxes = gl(t10.boxesRaw); + t10.logitsRaw = Xe(t10.res, [0, 0, 0], [1, -1, 1]); + t10.boxesRaw = Xe(t10.res, [0, 0, 1], [1, -1, -1]); + t10.logits = cc(t10.logitsRaw); + t10.boxes = cc(t10.boxesRaw); const boxes = await decodeResults(t10.boxes, t10.logits, config3, outputSize2); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return boxes; } @@ -41412,13 +40366,13 @@ async function loadPose(config3) { return model2; } function prepareImage(input, size2, cropBox) { - var _a2, _b; + var _a, _b; const t10 = {}; - if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) return input; let final; if (cropBox) { - t10.cropped = b5.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); + t10.cropped = eX.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); } if (input.shape[1] !== input.shape[2]) { const height = [ @@ -41439,16 +40393,16 @@ function prepareImage(input, size2, cropBox) { [0, 0] // dont touch rbg ]; - t10.pad = za(t10.cropped || input, padding); - t10.resize = b5.resizeBilinear(t10.pad, [size2, size2]); - final = Xe(t10.resize, constants.tf255); + t10.pad = Aa(t10.cropped || input, padding); + t10.resize = eX.resizeBilinear(t10.pad, [size2, size2]); + final = je(t10.resize, constants.tf255); } else if (input.shape[1] !== size2) { - t10.resize = b5.resizeBilinear(t10.cropped || input, [size2, size2]); - final = Xe(t10.resize, constants.tf255); + t10.resize = eX.resizeBilinear(t10.cropped || input, [size2, size2]); + final = je(t10.resize, constants.tf255); } else { - final = Xe(t10.cropped || input, constants.tf255); + final = je(t10.cropped || input, constants.tf255); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return final; } function rescaleKeypoints(keypoints, outputSize2, cropBox) { @@ -41505,7 +40459,7 @@ async function detectLandmarks(input, config3, outputSize2) { const poseScore = (await t10.poseflag.data())[0]; const points = await t10.ld.data(); const distances = await t10.world.data(); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); const keypointsRelative = []; const depth = 5; for (let i = 0; i < points.length / depth; i++) { @@ -41538,7 +40492,7 @@ async function detectLandmarks(input, config3, outputSize2) { return body4; } async function predict(input, config3) { - var _a2, _b, _c2; + var _a, _b, _c2; const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; const skipTime = (config3.body.skipTime || 0) > now() - lastTime; const skipFrame = skipped < (config3.body.skipFrames || 0); @@ -41546,10 +40500,10 @@ async function predict(input, config3) { skipped++; } else { let boxes = []; - if ((_b = (_a2 = config3.body) == null ? void 0 : _a2["detector"]) == null ? void 0 : _b["enabled"]) { + if ((_b = (_a = config3.body) == null ? void 0 : _a["detector"]) == null ? void 0 : _b["enabled"]) { const preparedImage = prepareImage(input, 224); boxes = await detectBoxes(preparedImage, config3, outputSize2); - Lt(preparedImage); + Ot(preparedImage); } else { boxes = [{ box: [0, 0, 0, 0], boxRaw: [0, 0, 1, 1], score: 0 }]; } @@ -41557,7 +40511,7 @@ async function predict(input, config3) { const preparedBox = prepareImage(input, 256, (_c2 = boxes[i]) == null ? void 0 : _c2.boxRaw); cache.length = 0; const bodyResult = await detectLandmarks(preparedBox, config3, outputSize2); - Lt(preparedBox); + Ot(preparedBox); if (!bodyResult) continue; bodyResult.id = i; @@ -41676,14 +40630,14 @@ async function process3(res, outputShape, config3) { const t10 = {}; const results = []; const detections = await res.array(); - t10.squeeze = gl(res); - const arr = Ci(t10.squeeze, 6, 1); - t10.stack = Tr([arr[1], arr[0], arr[3], arr[2]], 1); - t10.boxes = gl(t10.stack); - t10.scores = gl(arr[4]); - t10.classes = gl(arr[5]); - Lt([res, ...arr]); - t10.nms = await b5.nonMaxSuppressionAsync(t10.boxes, t10.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); + t10.squeeze = cc(res); + const arr = li(t10.squeeze, 6, 1); + t10.stack = vr([arr[1], arr[0], arr[3], arr[2]], 1); + t10.boxes = cc(t10.stack); + t10.scores = cc(arr[4]); + t10.classes = cc(arr[5]); + Ot([res, ...arr]); + t10.nms = await eX.nonMaxSuppressionAsync(t10.boxes, t10.scores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence || 0); const nms = await t10.nms.data(); let i = 0; for (const id2 of Array.from(nms)) { @@ -41692,15 +40646,15 @@ async function process3(res, outputShape, config3) { if (Number.isNaN(classVal)) continue; const label = labels2[classVal].label; - const [x, y4] = [ + const [x, y8] = [ detections[0][id2][0] / inputSize3, detections[0][id2][1] / inputSize3 ]; const boxRaw = [ x, - y4, + y8, detections[0][id2][2] / inputSize3 - x, - detections[0][id2][3] / inputSize3 - y4 + detections[0][id2][3] / inputSize3 - y8 ]; const box = [ Math.trunc(boxRaw[0] * outputShape[0]), @@ -41710,7 +40664,7 @@ async function process3(res, outputShape, config3) { ]; results.push({ id: i++, score, class: classVal, label, box, boxRaw }); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return results; } async function predict2(input, config3) { @@ -41725,10 +40679,10 @@ async function predict2(input, config3) { skipped2 = 0; return new Promise(async (resolve) => { const outputSize2 = [input.shape[2] || 0, input.shape[1] || 0]; - const resize = b5.resizeBilinear(input, [inputSize3, inputSize3]); + const resize = eX.resizeBilinear(input, [inputSize3, inputSize3]); const objectT = config3.object.enabled ? model3 == null ? void 0 : model3.execute(resize, ["tower_0/detections"]) : null; lastTime2 = now(); - Lt(resize); + Ot(resize); const obj = await process3(objectT, outputSize2, config3); last2 = obj; resolve(obj); @@ -41785,18 +40739,18 @@ async function load2(config3) { async function max2d(inputs, minScore) { const [width, height] = inputs.shape; const reshaped = W(inputs, [height * width]); - const max = La(reshaped, 0); + const max = Ra(reshaped, 0); const newScore = (await max.data())[0]; if (newScore > minScore) { - const coordinates = w1(reshaped, 0); - const mod = k2(coordinates, width); + const coordinates = Ok(reshaped, 0); + const mod = z2(coordinates, width); const x = (await mod.data())[0]; - const div = Xe(coordinates, width); - const y4 = (await div.data())[0]; - Lt([reshaped, max, coordinates, mod, div]); - return [x, y4, newScore]; + const div = je(coordinates, width); + const y8 = (await div.data())[0]; + Ot([reshaped, max, coordinates, mod, div]); + return [x, y8, newScore]; } - Lt([reshaped, max]); + Ot([reshaped, max]); return [0, 0, newScore]; } async function predict3(image, config3) { @@ -41811,8 +40765,8 @@ async function predict3(image, config3) { skipped3 = 0; return new Promise(async (resolve) => { const tensor = De(() => { - var _a2, _b; - const resize = b5.resizeBilinear(image, [((_a2 = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a2[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); + var _a, _b; + const resize = eX.resizeBilinear(image, [((_a = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _a[2]) || 0, ((_b = model4 == null ? void 0 : model4.inputs[0].shape) == null ? void 0 : _b[1]) || 0], false); const enhance2 = se(resize, constants.tf2); const norm = Te(enhance2, constants.tf1); return norm; @@ -41821,15 +40775,15 @@ async function predict3(image, config3) { if (config3.body.enabled) resT = model4 == null ? void 0 : model4.execute(tensor); lastTime3 = now(); - Lt(tensor); + Ot(tensor); if (resT) { cache2.keypoints.length = 0; - const squeeze = gl(resT); - Lt(resT); - const stack = zo(squeeze, 2); - Lt(squeeze); + const squeeze = cc(resT); + Ot(resT); + const stack = fo(squeeze, 2); + Ot(squeeze); for (let id2 = 0; id2 < stack.length; id2++) { - const [x4, y10, partScore] = await max2d(stack[id2], config3.body.minConfidence); + const [x8, y10, partScore] = await max2d(stack[id2], config3.body.minConfidence); if (partScore > (config3.body.minConfidence || 0)) { cache2.keypoints.push({ score: Math.round(100 * partScore) / 100, @@ -41837,28 +40791,28 @@ async function predict3(image, config3) { positionRaw: [ // normalized to 0..1 // @ts-ignore model is not undefined here - x4 / model4.inputs[0].shape[2], + x8 / model4.inputs[0].shape[2], y10 / model4.inputs[0].shape[1] ], position: [ // normalized to input image size // @ts-ignore model is not undefined here - Math.round(image.shape[2] * x4 / model4.inputs[0].shape[2]), + Math.round(image.shape[2] * x8 / model4.inputs[0].shape[2]), Math.round(image.shape[1] * y10 / model4.inputs[0].shape[1]) ] }); } } - stack.forEach((s) => Lt(s)); + stack.forEach((s) => Ot(s)); } cache2.score = cache2.keypoints.reduce((prev, curr) => curr.score > prev ? curr.score : prev, 0); const x = cache2.keypoints.map((a) => a.position[0]); - const y4 = cache2.keypoints.map((a) => a.position[1]); + const y8 = cache2.keypoints.map((a) => a.position[1]); cache2.box = [ Math.min(...x), - Math.min(...y4), + Math.min(...y8), Math.max(...x) - Math.min(...x), - Math.max(...y4) - Math.min(...y4) + Math.max(...y8) - Math.min(...y8) ]; const xRaw = cache2.keypoints.map((a) => a.positionRaw[0]); const yRaw = cache2.keypoints.map((a) => a.positionRaw[1]); @@ -41905,11 +40859,11 @@ var scaleBoxCoordinates = (box, factor, anchor) => { }; var cutAndResize = (box, image, cropSize) => { const h = image.shape[1]; - const w = image.shape[2]; - const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w]; - const crop = b5.cropAndResize(image, [cutBox], [0], cropSize); - const norm = Xe(crop, constants.tf255); - Lt(crop); + const w8 = image.shape[2]; + const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w8, box.endPoint[1] / h, box.endPoint[0] / w8]; + const crop = eX.cropAndResize(image, [cutBox], [0], cropSize); + const norm = je(crop, constants.tf255); + Ot(crop); return norm; }; var enlargeBox = (box, factor) => { @@ -41938,17 +40892,17 @@ var squarifyBox = (box) => { }; var calculateLandmarksBoundingBox = (landmarks) => { const x = landmarks.map((d) => d[0]); - const y4 = landmarks.map((d) => d[1]); + const y8 = landmarks.map((d) => d[1]); return { - startPoint: [Math.min(...x), Math.min(...y4)], - endPoint: [Math.max(...x), Math.max(...y4)], + startPoint: [Math.min(...x), Math.min(...y8)], + endPoint: [Math.max(...x), Math.max(...y8)], landmarks }; }; var fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; var normalizeRadians = (angle) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI)); var computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0])); -var buildTranslationMatrix = (x, y4) => [[1, 0, x], [0, 1, y4], [0, 0, 1]]; +var buildTranslationMatrix = (x, y8) => [[1, 0, x], [0, 1, y8], [0, 0, 1]]; var dot = (v12, v22) => { let product = 0; for (let i = 0; i < v12.length; i++) @@ -42037,10 +40991,10 @@ function correctFaceRotation(rotate, box, input, inputSize10) { if (largeAngle) { const center = getBoxCenter(box); const centerRaw = [center[0] / input.shape[2], center[1] / input.shape[1]]; - const rotated = b5.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); + const rotated = eX.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]); rotationMatrix = buildRotationMatrix(-angle, center); face4 = cutAndResize(box, rotated, [inputSize10, inputSize10]); - Lt(rotated); + Ot(rotated); } else { face4 = cutAndResize(box, input, [inputSize10, inputSize10]); } @@ -42051,8 +41005,8 @@ function correctFaceRotation(rotate, box, input, inputSize10) { } var findFaceCenter = (mesh) => { const x = mesh.map((m) => m[0]); - const y4 = mesh.map((m) => m[1]); - return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y4) + (Math.max(...y4) - Math.min(...y4)) / 2]; + const y8 = mesh.map((m) => m[1]); + return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y8) + (Math.max(...y8) - Math.min(...y8)) / 2]; }; var calculateFaceBox = (mesh, previousBox) => { const center = findFaceCenter(mesh); @@ -42072,62 +41026,62 @@ var inputSize4 = 0; var inputSizeT = null; var size = () => inputSize4; async function load3(config3) { - var _a2; + var _a; if (env.initial) model5 = null; if (!model5) - model5 = await loadModel((_a2 = config3.face.detector) == null ? void 0 : _a2.modelPath); + model5 = await loadModel((_a = config3.face.detector) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model5["modelUrl"]); inputSize4 = model5["executor"] && model5.inputs[0].shape ? model5.inputs[0].shape[2] : 256; inputSizeT = ke(inputSize4, "int32"); - anchors = bu(generateAnchors(inputSize4)); + anchors = mu(generateAnchors(inputSize4)); return model5; } function decodeBoxes2(boxOutputs) { if (!anchors || !inputSizeT) - return Yr([0, 0]); + return Gr([0, 0]); const t10 = {}; - t10.boxStarts = Ye(boxOutputs, [0, 1], [-1, 2]); + t10.boxStarts = Xe(boxOutputs, [0, 1], [-1, 2]); t10.centers = Ce(t10.boxStarts, anchors); - t10.boxSizes = Ye(boxOutputs, [0, 3], [-1, 2]); - t10.boxSizesNormalized = Xe(t10.boxSizes, inputSizeT); - t10.centersNormalized = Xe(t10.centers, inputSizeT); - t10.halfBoxSize = Xe(t10.boxSizesNormalized, constants.tf2); + t10.boxSizes = Xe(boxOutputs, [0, 3], [-1, 2]); + t10.boxSizesNormalized = je(t10.boxSizes, inputSizeT); + t10.centersNormalized = je(t10.centers, inputSizeT); + t10.halfBoxSize = je(t10.boxSizesNormalized, constants.tf2); t10.starts = Te(t10.centersNormalized, t10.halfBoxSize); t10.ends = Ce(t10.centersNormalized, t10.halfBoxSize); t10.startNormalized = se(t10.starts, inputSizeT); t10.endNormalized = se(t10.ends, inputSizeT); - const boxes = V1([t10.startNormalized, t10.endNormalized], 1); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + const boxes = r22([t10.startNormalized, t10.endNormalized], 1); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return boxes; } async function getBoxes(inputImage, config3) { - var _a2, _b, _c2, _d2, _e, _f2, _g2; + var _a, _b, _c2, _d2, _e, _f2, _g2; if (!inputImage || inputImage["isDisposedInternal"] || inputImage.shape.length !== 4 || inputImage.shape[1] < 1 || inputImage.shape[2] < 1) return []; const t10 = {}; - t10.resized = b5.resizeBilinear(inputImage, [inputSize4, inputSize4]); - t10.div = Xe(t10.resized, constants.tf127); - t10.normalized = Te(t10.div, constants.tf05); + t10.resized = eX.resizeBilinear(inputImage, [inputSize4, inputSize4]); + t10.div = je(t10.resized, constants.tf127); + t10.normalized = Te(t10.div, constants.tf1); const res = model5 == null ? void 0 : model5.execute(t10.normalized); if (Array.isArray(res) && res.length > 2) { const sorted = res.sort((a, b) => a.size - b.size); - t10.concat384 = bt([sorted[0], sorted[2]], 2); - t10.concat512 = bt([sorted[1], sorted[3]], 2); - t10.concat = bt([t10.concat512, t10.concat384], 1); - t10.batch = gl(t10.concat, [0]); + t10.concat384 = yt([sorted[0], sorted[2]], 2); + t10.concat512 = yt([sorted[1], sorted[3]], 2); + t10.concat = yt([t10.concat512, t10.concat384], 1); + t10.batch = cc(t10.concat, [0]); } else if (Array.isArray(res)) { - t10.batch = gl(res[0]); + t10.batch = cc(res[0]); } else { - t10.batch = gl(res); + t10.batch = cc(res); } - Lt(res); + Ot(res); t10.boxes = decodeBoxes2(t10.batch); - t10.logits = Ye(t10.batch, [0, 0], [-1, 1]); - t10.sigmoid = Pa(t10.logits); - t10.scores = gl(t10.sigmoid); - t10.nms = await b5.nonMaxSuppressionAsync(t10.boxes, t10.scores, ((_a2 = config3.face.detector) == null ? void 0 : _a2.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c2 = config3.face.detector) == null ? void 0 : _c2.minConfidence) || 0); + t10.logits = Xe(t10.batch, [0, 0], [-1, 1]); + t10.sigmoid = Ea(t10.logits); + t10.scores = cc(t10.sigmoid); + t10.nms = await eX.nonMaxSuppressionAsync(t10.boxes, t10.scores, ((_a = config3.face.detector) == null ? void 0 : _a.maxDetected) || 0, ((_b = config3.face.detector) == null ? void 0 : _b.iouThreshold) || 0, ((_c2 = config3.face.detector) == null ? void 0 : _c2.minConfidence) || 0); const nms = await t10.nms.array(); const boxes = []; const scores = await t10.scores.data(); @@ -42135,9 +41089,9 @@ async function getBoxes(inputImage, config3) { const confidence = scores[nms[i]]; if (confidence > (((_d2 = config3.face.detector) == null ? void 0 : _d2.minConfidence) || 0)) { const b = {}; - b.bbox = Ye(t10.boxes, [nms[i], 0], [1, -1]); - b.slice = Ye(t10.batch, [nms[i], keypointsCount - 1], [1, -1]); - b.squeeze = gl(b.slice); + b.bbox = Xe(t10.boxes, [nms[i], 0], [1, -1]); + b.slice = Xe(t10.batch, [nms[i], keypointsCount - 1], [1, -1]); + b.squeeze = cc(b.slice); b.landmarks = W(b.squeeze, [keypointsCount, -1]); const points = await b.bbox.data(); const rawBox = { @@ -42146,17 +41100,17 @@ async function getBoxes(inputImage, config3) { landmarks: await b.landmarks.array(), confidence }; - b.anchor = Ye(anchors, [nms[i], 0], [1, 2]); + b.anchor = Xe(anchors, [nms[i], 0], [1, 2]); const anchor = await b.anchor.data(); const scaledBox = scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize4, (inputImage.shape[1] || 0) / inputSize4], anchor); const enlargedBox = enlargeBox(scaledBox, ((_e = config3.face.detector) == null ? void 0 : _e.scale) || 1.4); const squaredBox = squarifyBox(enlargedBox); if (squaredBox.size[0] > (((_f2 = config3.face.detector) == null ? void 0 : _f2["minSize"]) || 0) && squaredBox.size[1] > (((_g2 = config3.face.detector) == null ? void 0 : _g2["minSize"]) || 0)) boxes.push(squaredBox); - Object.keys(b).forEach((tensor) => Lt(b[tensor])); + Object.keys(b).forEach((tensor) => Ot(b[tensor])); } } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return boxes; } @@ -42176,11 +41130,11 @@ var irisLandmarks = { numCoordinates: 76 }; async function load4(config3) { - var _a2, _b; + var _a, _b; if (env.initial) model6 = null; if (!model6) - model6 = await loadModel((_a2 = config3.face.iris) == null ? void 0 : _a2.modelPath); + model6 = await loadModel((_a = config3.face.iris) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model6["modelUrl"]); inputSize5 = (model6 == null ? void 0 : model6["executor"]) && ((_b = model6.inputs) == null ? void 0 : _b[0].shape) ? model6.inputs[0].shape[2] : 0; @@ -42212,15 +41166,15 @@ var getLeftToRightEyeDepthDifference = (rawCoords) => { var getEyeBox = (rawCoords, face4, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false, scale2 = 2.3) => { const box = squarifyBox(enlargeBox(calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale2)); const boxSize = getBoxSize(box); - let crop = b5.cropAndResize(face4, [[ + let crop = eX.cropAndResize(face4, [[ box.startPoint[1] / meshSize, box.startPoint[0] / meshSize, box.endPoint[1] / meshSize, box.endPoint[0] / meshSize ]], [0], [inputSize5, inputSize5]); if (flip && env.kernels.includes("flipleftright")) { - const flipped = b5.flipLeftRight(crop); - Lt(crop); + const flipped = eX.flipLeftRight(crop); + Ot(crop); crop = flipped; } return { box, boxSize, crop }; @@ -42229,11 +41183,11 @@ var getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => { const eyeRawCoords = []; for (let i = 0; i < irisLandmarks.numCoordinates; i++) { const x = eyeData[i * 3]; - const y4 = eyeData[i * 3 + 1]; + const y8 = eyeData[i * 3 + 1]; const z = eyeData[i * 3 + 2]; eyeRawCoords.push([ (flip ? 1 - x / inputSize5 : x / inputSize5) * eyeBoxSize[0] + eyeBox.startPoint[0], - y4 / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], + y8 / inputSize5 * eyeBoxSize[1] + eyeBox.startPoint[1], z ]); } @@ -42254,18 +41208,18 @@ var getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => { }); }; async function augmentIris(rawCoords, face4, meshSize, config3) { - var _a2, _b; + var _a, _b; if (!(model6 == null ? void 0 : model6["executor"])) return rawCoords; - const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true, ((_a2 = config3.face.iris) == null ? void 0 : _a2.scale) || 2.3); + const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true, ((_a = config3.face.iris) == null ? void 0 : _a.scale) || 2.3); const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face4, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, ((_b = config3.face.iris) == null ? void 0 : _b.scale) || 2.3); - const combined = bt([leftEyeCrop, rightEyeCrop]); - Lt(leftEyeCrop); - Lt(rightEyeCrop); + const combined = yt([leftEyeCrop, rightEyeCrop]); + Ot(leftEyeCrop); + Ot(rightEyeCrop); const eyePredictions = model6.execute(combined); - Lt(combined); + Ot(combined); const eyePredictionsData = await eyePredictions.data(); - Lt(eyePredictions); + Ot(eyePredictions); const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3); const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true); const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3); @@ -42287,20 +41241,20 @@ async function augmentIris(rawCoords, face4, meshSize, config3) { // src/face/attention.ts async function augment(rawCoords, results) { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; const t10 = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords // mesh: results[0], // already have it in rawCoords // output_mesh_identity // flag: results[1], // already processed in parent // conv_faceflag - lips: await ((_b = (_a2 = results.filter((r16) => r16.size === 160)) == null ? void 0 : _a2[0]) == null ? void 0 : _b.data()), + lips: await ((_b = (_a = results.filter((r15) => r15.size === 160)) == null ? void 0 : _a[0]) == null ? void 0 : _b.data()), // 80 x 2d = 160 // output_lips - irisL: await ((_d2 = (_c2 = results.filter((r16) => r16.size === 10)) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.data()), + irisL: await ((_d2 = (_c2 = results.filter((r15) => r15.size === 10)) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.data()), // 5 x 2d = 10 // output_right_iris - eyeL: await ((_f2 = (_e = results.filter((r16) => r16.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f2.data()), + eyeL: await ((_f2 = (_e = results.filter((r15) => r15.size === 142)) == null ? void 0 : _e[0]) == null ? void 0 : _f2.data()), // 71 x 2d = 142 // output_right_eye - irisR: await ((_h2 = (_g2 = results.filter((r16) => r16.size === 10)) == null ? void 0 : _g2[1]) == null ? void 0 : _h2.data()), + irisR: await ((_h2 = (_g2 = results.filter((r15) => r15.size === 10)) == null ? void 0 : _g2[1]) == null ? void 0 : _h2.data()), // 5 x 2d = 10 // output_left_iris - eyeR: await ((_j2 = (_i2 = results.filter((r16) => r16.size === 142)) == null ? void 0 : _i2[1]) == null ? void 0 : _j2.data()) + eyeR: await ((_j2 = (_i2 = results.filter((r15) => r15.size === 142)) == null ? void 0 : _i2[1]) == null ? void 0 : _j2.data()) // 71 x 2d = 142// output_left_eye }; for (const val of Object.values(t10)) { @@ -42331,8 +41285,8 @@ var cache3 = { var model7 = null; var inputSize6 = 0; async function predict4(input, config3) { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; - const skipTime = (((_a2 = config3.face.detector) == null ? void 0 : _a2.skipTime) || 0) > now() - cache3.timestamp; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2; + const skipTime = (((_a = config3.face.detector) == null ? void 0 : _a.skipTime) || 0) > now() - cache3.timestamp; const skipFrame = cache3.skipped < (((_b = config3.face.detector) == null ? void 0 : _b.skipFrames) || 0); if (!config3.skipAllowed || !skipTime || !skipFrame || cache3.boxes.length === 0) { cache3.boxes = await getBoxes(input, config3); @@ -42367,7 +41321,7 @@ async function predict4(input, config3) { [angle, rotationMatrix, face4.tensor] = correctFaceRotation((_c2 = config3.face.detector) == null ? void 0 : _c2.rotation, box, input, ((_d2 = config3.face.mesh) == null ? void 0 : _d2.enabled) ? inputSize6 : size()); if (config3.filter.equalization) { const equilized = face4.tensor ? await histogramEqualization(face4.tensor) : void 0; - Lt(face4.tensor); + Ot(face4.tensor); if (equilized) face4.tensor = equilized; } @@ -42387,7 +41341,7 @@ async function predict4(input, config3) { } else { if (((_f2 = config3.face.attention) == null ? void 0 : _f2.enabled) && !env.kernels.includes("atan2")) { config3.face.attention.enabled = false; - Lt(face4.tensor); + Ot(face4.tensor); return faces; } const results = model7.execute(face4.tensor); @@ -42411,7 +41365,7 @@ async function predict4(input, config3) { const meshT = results.find((t10) => t10.shape[t10.shape.length - 1] === 1404); const coordsReshaped = W(meshT, [-1, 3]); let rawCoords = await coordsReshaped.array(); - Lt(coordsReshaped); + Ot(coordsReshaped); if ((_h2 = config3.face.attention) == null ? void 0 : _h2.enabled) { rawCoords = await augment(rawCoords, results); } else if ((_i2 = config3.face.iris) == null ? void 0 : _i2.enabled) { @@ -42433,21 +41387,21 @@ async function predict4(input, config3) { face4.size = calculatedBox.size; newCache.push(calculatedBox); } - Lt(results); + Ot(results); } if (face4.score > (((_j2 = config3.face.detector) == null ? void 0 : _j2.minConfidence) || 1)) faces.push(face4); else - Lt(face4.tensor); + Ot(face4.tensor); } cache3.boxes = newCache; return faces; } async function load5(config3) { - var _a2, _b, _c2, _d2, _e, _f2; + var _a, _b, _c2, _d2, _e, _f2; if (env.initial) model7 = null; - if (((_a2 = config3.face.attention) == null ? void 0 : _a2.enabled) && (model7 == null ? void 0 : model7["signature"])) { + if (((_a = config3.face.attention) == null ? void 0 : _a.enabled) && (model7 == null ? void 0 : model7["signature"])) { if (Object.keys(((_b = model7 == null ? void 0 : model7["signature"]) == null ? void 0 : _b.outputs) || {}).length < 6) model7 = null; } @@ -42474,11 +41428,11 @@ var lastTime4 = 0; var skipped4 = Number.MAX_SAFE_INTEGER; var rgb = false; async function load6(config3) { - var _a2, _b, _c2; + var _a, _b, _c2; if (env.initial) model8 = null; if (!model8) { - model8 = await loadModel((_a2 = config3.face.emotion) == null ? void 0 : _a2.modelPath); + model8 = await loadModel((_a = config3.face.emotion) == null ? void 0 : _a.modelPath); rgb = ((_c2 = (_b = model8 == null ? void 0 : model8.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c2[3]) === 3; if (!rgb) annotations = ["angry", "disgust", "fear", "happy", "sad", "surprise", "neutral"]; @@ -42490,10 +41444,10 @@ async function load6(config3) { return model8; } async function predict5(image, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!model8) return []; - const skipFrame = skipped4 < (((_a2 = config3.face.emotion) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped4 < (((_a = config3.face.emotion) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face.emotion) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime4; if (config3.skipAllowed && skipTime && skipFrame && lastCount === count2 && last3[idx] && last3[idx].length > 0) { skipped4++; @@ -42501,17 +41455,17 @@ async function predict5(image, config3, idx, count2) { } skipped4 = 0; return new Promise(async (resolve) => { - var _a3, _b2, _c2; + var _a2, _b2, _c2; const obj = []; - if ((_a3 = config3.face.emotion) == null ? void 0 : _a3.enabled) { + if ((_a2 = config3.face.emotion) == null ? void 0 : _a2.enabled) { const t10 = {}; const inputSize10 = (model8 == null ? void 0 : model8.inputs[0].shape) ? model8.inputs[0].shape[2] : 0; if (((_b2 = config3.face.emotion) == null ? void 0 : _b2["crop"]) > 0) { const crop = (_c2 = config3.face.emotion) == null ? void 0 : _c2["crop"]; const box = [[crop, crop, 1 - crop, 1 - crop]]; - t10.resize = b5.cropAndResize(image, box, [0], [inputSize10, inputSize10]); + t10.resize = eX.cropAndResize(image, box, [0], [inputSize10, inputSize10]); } else { - t10.resize = b5.resizeBilinear(image, [inputSize10, inputSize10], false); + t10.resize = eX.resizeBilinear(image, [inputSize10, inputSize10], false); } if (rgb) { t10.mul = se(t10.resize, 255); @@ -42531,7 +41485,7 @@ async function predict5(image, config3, idx, count2) { obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] }); } obj.sort((a, b) => b.score - a.score); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); } last3[idx] = obj; lastCount = count2; @@ -42546,34 +41500,34 @@ var lastTime5 = 0; var lastCount2 = 0; var skipped5 = Number.MAX_SAFE_INTEGER; async function load7(config3) { - var _a2; + var _a; if (env.initial) model9 = null; if (!model9) - model9 = await loadModel((_a2 = config3.face.description) == null ? void 0 : _a2.modelPath); + model9 = await loadModel((_a = config3.face.description) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model9["modelUrl"]); return model9; } function enhance(input, config3) { - var _a2, _b; + var _a, _b; const tensor = input.image || input.tensor || input; if (!(model9 == null ? void 0 : model9.inputs[0].shape)) return tensor; let crop; - if (((_a2 = config3.face.description) == null ? void 0 : _a2["crop"]) > 0) { + if (((_a = config3.face.description) == null ? void 0 : _a["crop"]) > 0) { const cropval = (_b = config3.face.description) == null ? void 0 : _b["crop"]; const box = [[cropval, cropval, 1 - cropval, 1 - cropval]]; - crop = b5.cropAndResize(tensor, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); + crop = eX.cropAndResize(tensor, box, [0], [model9.inputs[0].shape[2], model9.inputs[0].shape[1]]); } else { - crop = b5.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); + crop = eX.resizeBilinear(tensor, [model9.inputs[0].shape[2], model9.inputs[0].shape[1]], false); } const norm = se(crop, constants.tf255); - Lt(crop); + Ot(crop); return norm; } async function predict6(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; const obj = { age: 0, gender: "unknown", @@ -42582,7 +41536,7 @@ async function predict6(image, config3, idx, count2) { }; if (!(model9 == null ? void 0 : model9["executor"])) return obj; - const skipFrame = skipped5 < (((_a2 = config3.face.description) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped5 < (((_a = config3.face.description) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face.description) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime5; if (config3.skipAllowed && skipFrame && skipTime && lastCount2 === count2 && ((_c2 = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _c2.age) > 0 && ((_d2 = last4 == null ? void 0 : last4[idx]) == null ? void 0 : _d2.genderScore) > 0) { skipped5++; @@ -42590,12 +41544,12 @@ async function predict6(image, config3, idx, count2) { } skipped5 = 0; return new Promise(async (resolve) => { - var _a3; - if ((_a3 = config3.face.description) == null ? void 0 : _a3.enabled) { + var _a2; + if ((_a2 = config3.face.description) == null ? void 0 : _a2.enabled) { const enhanced = enhance(image, config3); const resT = model9 == null ? void 0 : model9.execute(enhanced); lastTime5 = now(); - Lt(enhanced); + Ot(enhanced); const genderT = resT.find((t10) => t10.shape[1] === 1); const gender2 = await genderT.data(); const confidence = Math.trunc(200 * Math.abs(gender2[0] - 0.5)) / 100; @@ -42603,9 +41557,9 @@ async function predict6(image, config3, idx, count2) { obj.gender = gender2[0] <= 0.5 ? "female" : "male"; obj.genderScore = Math.min(0.99, confidence); } - const argmax = w1(resT.find((t10) => t10.shape[1] === 100), 1); + const argmax = Ok(resT.find((t10) => t10.shape[1] === 100), 1); const ageIdx = (await argmax.data())[0]; - Lt(argmax); + Ot(argmax); const ageT = resT.find((t10) => t10.shape[1] === 100); const all2 = await ageT.data(); obj.age = Math.round(all2[ageIdx - 1] > all2[ageIdx + 1] ? 10 * ageIdx - 100 * all2[ageIdx - 1] : 10 * ageIdx + 100 * all2[ageIdx + 1]) / 10; @@ -42614,7 +41568,7 @@ async function predict6(image, config3, idx, count2) { const desc = resT.find((t10) => t10.shape[1] === 1024); const descriptor = desc ? await desc.data() : []; obj.descriptor = Array.from(descriptor); - resT.forEach((t10) => Lt(t10)); + resT.forEach((t10) => Ot(t10)); } last4[idx] = obj; lastCount2 = count2; @@ -42625,11 +41579,11 @@ async function predict6(image, config3, idx, count2) { // src/face/mask.ts var expandFact = 0.1; var alpha = 0.5; -function insidePoly(x, y4, polygon) { +function insidePoly(x, y8, polygon) { let inside = false; let j = polygon.length - 1; for (let i = 0; i < polygon.length; j = i++) { - if (polygon[i].y > y4 !== polygon[j].y > y4 && x < (polygon[j].x - polygon[i].x) * (y4 - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) + if (polygon[i].y > y8 !== polygon[j].y > y8 && x < (polygon[j].x - polygon[i].x) * (y8 - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x) inside = !inside; } return inside; @@ -42648,12 +41602,12 @@ async function mask(face4) { if (expandFact && expandFact > 0) silhouette = silhouette.map((pt2) => ({ x: pt2.x > 0.5 ? pt2.x + expandFact : pt2.x - expandFact, y: pt2.y > 0.5 ? pt2.y + expandFact : pt2.y - expandFact })); for (let x = 0; x < width; x++) { - for (let y4 = 0; y4 < height; y4++) { - const inside = insidePoly(x / width, y4 / width, silhouette); + for (let y8 = 0; y8 < height; y8++) { + const inside = insidePoly(x / width, y8 / width, silhouette); if (!inside) { - buffer.set(alpha * buffer.get(0, y4, x, 0), 0, y4, x, 0); - buffer.set(alpha * buffer.get(0, y4, x, 1), 0, y4, x, 1); - buffer.set(alpha * buffer.get(0, y4, x, 2), 0, y4, x, 2); + buffer.set(alpha * buffer.get(0, y8, x, 0), 0, y8, x, 0); + buffer.set(alpha * buffer.get(0, y8, x, 1), 0, y8, x, 1); + buffer.set(alpha * buffer.get(0, y8, x, 2), 0, y8, x, 2); } } } @@ -42668,20 +41622,20 @@ var skipped6 = Number.MAX_SAFE_INTEGER; var lastCount3 = 0; var lastTime6 = 0; async function load8(config3) { - var _a2; + var _a; if (env.initial) model10 = null; if (!model10) - model10 = await loadModel((_a2 = config3.face.antispoof) == null ? void 0 : _a2.modelPath); + model10 = await loadModel((_a = config3.face.antispoof) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model10["modelUrl"]); return model10; } async function predict7(image, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!(model10 == null ? void 0 : model10["executor"])) return 0; - const skipTime = (((_a2 = config3.face.antispoof) == null ? void 0 : _a2.skipTime) || 0) > now() - lastTime6; + const skipTime = (((_a = config3.face.antispoof) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime6; const skipFrame = skipped6 < (((_b = config3.face.antispoof) == null ? void 0 : _b.skipFrames) || 0); if (config3.skipAllowed && skipTime && skipFrame && lastCount3 === count2 && cached[idx]) { skipped6++; @@ -42689,13 +41643,13 @@ async function predict7(image, config3, idx, count2) { } skipped6 = 0; return new Promise(async (resolve) => { - const resize = b5.resizeBilinear(image, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); + const resize = eX.resizeBilinear(image, [(model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[2] : 0, (model10 == null ? void 0 : model10.inputs[0].shape) ? model10.inputs[0].shape[1] : 0], false); const res = model10 == null ? void 0 : model10.execute(resize); const num = (await res.data())[0]; cached[idx] = Math.round(100 * num) / 100; lastCount3 = count2; lastTime6 = now(); - Lt([resize, res]); + Ot([resize, res]); resolve(cached[idx]); }); } @@ -42707,20 +41661,20 @@ var skipped7 = Number.MAX_SAFE_INTEGER; var lastCount4 = 0; var lastTime7 = 0; async function load9(config3) { - var _a2; + var _a; if (env.initial) model11 = null; if (!model11) - model11 = await loadModel((_a2 = config3.face.liveness) == null ? void 0 : _a2.modelPath); + model11 = await loadModel((_a = config3.face.liveness) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model11["modelUrl"]); return model11; } async function predict8(image, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!(model11 == null ? void 0 : model11["executor"])) return 0; - const skipTime = (((_a2 = config3.face.liveness) == null ? void 0 : _a2.skipTime) || 0) > now() - lastTime7; + const skipTime = (((_a = config3.face.liveness) == null ? void 0 : _a.skipTime) || 0) > now() - lastTime7; const skipFrame = skipped7 < (((_b = config3.face.liveness) == null ? void 0 : _b.skipFrames) || 0); if (config3.skipAllowed && skipTime && skipFrame && lastCount4 === count2 && cached2[idx]) { skipped7++; @@ -42728,13 +41682,13 @@ async function predict8(image, config3, idx, count2) { } skipped7 = 0; return new Promise(async (resolve) => { - const resize = b5.resizeBilinear(image, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); + const resize = eX.resizeBilinear(image, [(model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[2] : 0, (model11 == null ? void 0 : model11.inputs[0].shape) ? model11.inputs[0].shape[1] : 0], false); const res = model11 == null ? void 0 : model11.execute(resize); const num = (await res.data())[0]; cached2[idx] = Math.round(100 * num) / 100; lastCount4 = count2; lastTime7 = now(); - Lt([resize, res]); + Ot([resize, res]); resolve(cached2[idx]); }); } @@ -42748,20 +41702,20 @@ var lastCount5 = 0; var lastTime8 = 0; var skipped8 = Number.MAX_SAFE_INTEGER; async function load10(config3) { - var _a2; + var _a; if (env.initial) model12 = null; if (!model12) - model12 = await loadModel((_a2 = config3.face.gear) == null ? void 0 : _a2.modelPath); + model12 = await loadModel((_a = config3.face.gear) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model12["modelUrl"]); return model12; } async function predict9(image, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!model12) return { age: 0, gender: "unknown", genderScore: 0, race: [] }; - const skipFrame = skipped8 < (((_a2 = config3.face.gear) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped8 < (((_a = config3.face.gear) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face.gear) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime8; if (config3.skipAllowed && skipTime && skipFrame && lastCount5 === count2 && last5[idx]) { skipped8++; @@ -42769,16 +41723,16 @@ async function predict9(image, config3, idx, count2) { } skipped8 = 0; return new Promise(async (resolve) => { - var _a3, _b2, _c2, _d2; + var _a2, _b2, _c2, _d2; if (!(model12 == null ? void 0 : model12.inputs[0].shape)) return; const t10 = {}; let box = [[0, 0.1, 0.9, 0.9]]; - if (((_a3 = config3.face.gear) == null ? void 0 : _a3["crop"]) > 0) { + if (((_a2 = config3.face.gear) == null ? void 0 : _a2["crop"]) > 0) { const crop = (_b2 = config3.face.gear) == null ? void 0 : _b2["crop"]; box = [[crop, crop, 1 - crop, 1 - crop]]; } - t10.resize = b5.cropAndResize(image, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); + t10.resize = eX.cropAndResize(image, box, [0], [model12.inputs[0].shape[2], model12.inputs[0].shape[1]]); const obj = { age: 0, gender: "unknown", genderScore: 0, race: [] }; if ((_c2 = config3.face.gear) == null ? void 0 : _c2.enabled) [t10.age, t10.gender, t10.race] = model12.execute(t10.resize, ["age_output", "gender_output", "race_output"]); @@ -42797,7 +41751,7 @@ async function predict9(image, config3, idx, count2) { for (let i = 1; i < ageSorted.length; i++) age2 += ageSorted[i][1] * (ageSorted[i][0] - age2); obj.age = Math.round(10 * age2) / 10; - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); last5[idx] = obj; lastCount5 = count2; lastTime8 = now(); @@ -42821,10 +41775,10 @@ async function load11(config3) { return model13; } async function predict10(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; if (!model13) return { age: 0 }; - const skipFrame = skipped9 < (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped9 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime9; if (config3.skipAllowed && skipFrame && skipTime && lastCount6 === count2 && ((_c2 = last6[idx]) == null ? void 0 : _c2.age) && ((_d2 = last6[idx]) == null ? void 0 : _d2.age) > 0) { skipped9++; @@ -42832,16 +41786,16 @@ async function predict10(image, config3, idx, count2) { } skipped9 = 0; return new Promise(async (resolve) => { - var _a3, _b2, _c3; + var _a2, _b2, _c3; if (!(model13 == null ? void 0 : model13.inputs) || !model13.inputs[0] || !model13.inputs[0].shape) return; const t10 = {}; - if (((_a3 = config3.face["ssrnet"]) == null ? void 0 : _a3["crop"]) > 0) { + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; const box = [[crop, crop, 1 - crop, 1 - crop]]; - t10.resize = b5.cropAndResize(image, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); + t10.resize = eX.cropAndResize(image, box, [0], [model13.inputs[0].shape[2], model13.inputs[0].shape[1]]); } else { - t10.resize = b5.resizeBilinear(image, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); + t10.resize = eX.resizeBilinear(image, [model13.inputs[0].shape[2], model13.inputs[0].shape[1]], false); } t10.enhance = se(t10.resize, constants.tf255); const obj = { age: 0 }; @@ -42851,7 +41805,7 @@ async function predict10(image, config3, idx, count2) { const data = await t10.age.data(); obj.age = Math.trunc(10 * data[0]) / 10; } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); last6[idx] = obj; lastCount6 = count2; lastTime9 = now(); @@ -42867,20 +41821,20 @@ var lastTime10 = 0; var skipped10 = Number.MAX_SAFE_INTEGER; var rgb2 = [0.2989, 0.587, 0.114]; async function load12(config3) { - var _a2; + var _a; if (env.initial) model14 = null; if (!model14) - model14 = await loadModel((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.modelPathGender); + model14 = await loadModel((_a = config3.face["ssrnet"]) == null ? void 0 : _a.modelPathGender); else if (config3.debug) log("cached model:", model14["modelUrl"]); return model14; } async function predict11(image, config3, idx, count2) { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; if (!model14) return { gender: "unknown", genderScore: 0 }; - const skipFrame = skipped10 < (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped10 < (((_a = config3.face["ssrnet"]) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face["ssrnet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime10; if (config3.skipAllowed && skipFrame && skipTime && lastCount7 === count2 && ((_c2 = last7[idx]) == null ? void 0 : _c2.gender) && ((_d2 = last7[idx]) == null ? void 0 : _d2.genderScore) > 0) { skipped10++; @@ -42888,26 +41842,26 @@ async function predict11(image, config3, idx, count2) { } skipped10 = 0; return new Promise(async (resolve) => { - var _a3, _b2, _c3; + var _a2, _b2, _c3; if (!(model14 == null ? void 0 : model14.inputs[0].shape)) return; const t10 = {}; - if (((_a3 = config3.face["ssrnet"]) == null ? void 0 : _a3["crop"]) > 0) { + if (((_a2 = config3.face["ssrnet"]) == null ? void 0 : _a2["crop"]) > 0) { const crop = (_b2 = config3.face["ssrnet"]) == null ? void 0 : _b2["crop"]; const box = [[crop, crop, 1 - crop, 1 - crop]]; - t10.resize = b5.cropAndResize(image, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); + t10.resize = eX.cropAndResize(image, box, [0], [model14.inputs[0].shape[2], model14.inputs[0].shape[1]]); } else { - t10.resize = b5.resizeBilinear(image, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); + t10.resize = eX.resizeBilinear(image, [model14.inputs[0].shape[2], model14.inputs[0].shape[1]], false); } t10.enhance = De(() => { - var _a4, _b3; + var _a3, _b3; let normalize2; - if (((_b3 = (_a4 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a4[0].shape) == null ? void 0 : _b3[3]) === 1) { - const [red, green, blue] = Ci(t10.resize, 3, 3); + if (((_b3 = (_a3 = model14 == null ? void 0 : model14.inputs) == null ? void 0 : _a3[0].shape) == null ? void 0 : _b3[3]) === 1) { + const [red, green, blue] = li(t10.resize, 3, 3); const redNorm = se(red, rgb2[0]); const greenNorm = se(green, rgb2[1]); const blueNorm = se(blue, rgb2[2]); - const grayscale = y1([redNorm, greenNorm, blueNorm]); + const grayscale = Ak([redNorm, greenNorm, blueNorm]); normalize2 = se(Te(grayscale, constants.tf05), 2); } else { normalize2 = se(Te(t10.resize, constants.tf05), 2); @@ -42920,7 +41874,7 @@ async function predict11(image, config3, idx, count2) { const data = await t10.gender.data(); obj.gender = data[0] > data[1] ? "female" : "male"; obj.genderScore = data[0] > data[1] ? Math.trunc(100 * data[0]) / 100 : Math.trunc(100 * data[1]) / 100; - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); last7[idx] = obj; lastCount7 = count2; lastTime10 = now(); @@ -42935,35 +41889,35 @@ var lastCount8 = 0; var lastTime11 = 0; var skipped11 = Number.MAX_SAFE_INTEGER; async function load13(config3) { - var _a2; + var _a; if (env.initial) model15 = null; if (!model15) - model15 = await loadModel((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.modelPath); + model15 = await loadModel((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", model15["modelUrl"]); return model15; } async function predict12(input, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!(model15 == null ? void 0 : model15["executor"])) return []; - const skipFrame = skipped11 < (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped11 < (((_a = config3.face["mobilefacenet"]) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face["mobilefacenet"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime11; if (config3.skipAllowed && skipTime && skipFrame && lastCount8 === count2 && last8[idx]) { skipped11++; return last8[idx]; } return new Promise(async (resolve) => { - var _a3; + var _a2; let data = []; - if (((_a3 = config3.face["mobilefacenet"]) == null ? void 0 : _a3.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { + if (((_a2 = config3.face["mobilefacenet"]) == null ? void 0 : _a2.enabled) && (model15 == null ? void 0 : model15.inputs[0].shape)) { const t10 = {}; - t10.crop = b5.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); + t10.crop = eX.resizeBilinear(input, [model15.inputs[0].shape[2], model15.inputs[0].shape[1]], false); t10.data = model15.execute(t10.crop); const output = await t10.data.data(); data = Array.from(output); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); } last8[idx] = data; lastCount8 = count2; @@ -42988,25 +41942,25 @@ async function load14(config3) { return model16; } async function predict13(input, config3, idx, count2) { - var _a2, _b; + var _a, _b; if (!(model16 == null ? void 0 : model16["executor"])) return []; - const skipFrame = skipped12 < (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.skipFrames) || 0); + const skipFrame = skipped12 < (((_a = config3.face["insightface"]) == null ? void 0 : _a.skipFrames) || 0); const skipTime = (((_b = config3.face["insightface"]) == null ? void 0 : _b.skipTime) || 0) > now() - lastTime12; if (config3.skipAllowed && skipTime && skipFrame && lastCount9 === count2 && last9[idx]) { skipped12++; return last9[idx]; } return new Promise(async (resolve) => { - var _a3; + var _a2; let data = []; - if (((_a3 = config3.face["insightface"]) == null ? void 0 : _a3.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { + if (((_a2 = config3.face["insightface"]) == null ? void 0 : _a2.enabled) && (model16 == null ? void 0 : model16.inputs[0].shape)) { const t10 = {}; - t10.crop = b5.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); + t10.crop = eX.resizeBilinear(input, [model16.inputs[0].shape[2], model16.inputs[0].shape[1]], false); t10.data = model16.execute(t10.crop); const output = await t10.data.data(); data = Array.from(output); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); } last9[idx] = data; lastCount9 = count2; @@ -43037,27 +41991,27 @@ var calculateGaze = (face4) => { return { bearing, strength }; }; var calculateFaceAngle = (face4, imageSize) => { - const normalize2 = (v4) => { - const length = Math.sqrt(v4[0] * v4[0] + v4[1] * v4[1] + v4[2] * v4[2]); - v4[0] /= length; - v4[1] /= length; - v4[2] /= length; - return v4; + const normalize2 = (v8) => { + const length = Math.sqrt(v8[0] * v8[0] + v8[1] * v8[1] + v8[2] * v8[2]); + v8[0] /= length; + v8[1] /= length; + v8[2] /= length; + return v8; }; const subVectors = (a, b) => { const x = a[0] - b[0]; - const y4 = a[1] - b[1]; + const y8 = a[1] - b[1]; const z = a[2] - b[2]; - return [x, y4, z]; + return [x, y8, z]; }; const crossVectors = (a, b) => { const x = a[1] * b[2] - a[2] * b[1]; - const y4 = a[2] * b[0] - a[0] * b[2]; + const y8 = a[2] * b[0] - a[0] * b[2]; const z = a[0] * b[1] - a[1] * b[0]; - return [x, y4, z]; + return [x, y8, z]; }; - const rotationMatrixToEulerAngle = (r16) => { - const [r00, _r01, _r02, r102, r112, r122, r20, r21, r222] = r16; + const rotationMatrixToEulerAngle = (r15) => { + const [r00, _r01, _r02, r102, r112, r122, r20, r21, r222] = r15; let thetaX; let thetaY; let thetaZ; @@ -43121,7 +42075,7 @@ function calculateCameraDistance(face4, width) { // src/face/face.ts var detectFace = async (instance, input) => { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2; let timeStamp = now(); let ageRes; let gearRes; @@ -43146,92 +42100,92 @@ var detectFace = async (instance, input) => { log("Face object is disposed:", faces[i].tensor); continue; } - if ((_a2 = instance.config.face.detector) == null ? void 0 : _a2.mask) { + if ((_a = instance.config.face.detector) == null ? void 0 : _a.mask) { const masked = await mask(faces[i]); - Lt(faces[i].tensor); + Ot(faces[i].tensor); if (masked) faces[i].tensor = masked; } const rotation = faces[i].mesh && faces[i].mesh.length > 200 ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null; instance.analyze("Start Emotion:"); if (instance.config.async) { - emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || pr([]), instance.config, i, faces.length) : []; + emotionRes = ((_b = instance.config.face.emotion) == null ? void 0 : _b.enabled) ? predict5(faces[i].tensor || ar([]), instance.config, i, faces.length) : []; } else { instance.state = "run:emotion"; timeStamp = now(); - emotionRes = ((_c2 = instance.config.face.emotion) == null ? void 0 : _c2.enabled) ? await predict5(faces[i].tensor || pr([]), instance.config, i, faces.length) : []; + emotionRes = ((_c2 = instance.config.face.emotion) == null ? void 0 : _c2.enabled) ? await predict5(faces[i].tensor || ar([]), instance.config, i, faces.length) : []; instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); } instance.analyze("End Emotion:"); instance.analyze("Start AntiSpoof:"); if (instance.config.async) { - antispoofRes = ((_d2 = instance.config.face.antispoof) == null ? void 0 : _d2.enabled) ? predict7(faces[i].tensor || pr([]), instance.config, i, faces.length) : 0; + antispoofRes = ((_d2 = instance.config.face.antispoof) == null ? void 0 : _d2.enabled) ? predict7(faces[i].tensor || ar([]), instance.config, i, faces.length) : 0; } else { instance.state = "run:antispoof"; timeStamp = now(); - antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || pr([]), instance.config, i, faces.length) : 0; + antispoofRes = ((_e = instance.config.face.antispoof) == null ? void 0 : _e.enabled) ? await predict7(faces[i].tensor || ar([]), instance.config, i, faces.length) : 0; instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); } instance.analyze("End AntiSpoof:"); instance.analyze("Start Liveness:"); if (instance.config.async) { - livenessRes = ((_f2 = instance.config.face.liveness) == null ? void 0 : _f2.enabled) ? predict8(faces[i].tensor || pr([]), instance.config, i, faces.length) : 0; + livenessRes = ((_f2 = instance.config.face.liveness) == null ? void 0 : _f2.enabled) ? predict8(faces[i].tensor || ar([]), instance.config, i, faces.length) : 0; } else { instance.state = "run:liveness"; timeStamp = now(); - livenessRes = ((_g2 = instance.config.face.liveness) == null ? void 0 : _g2.enabled) ? await predict8(faces[i].tensor || pr([]), instance.config, i, faces.length) : 0; + livenessRes = ((_g2 = instance.config.face.liveness) == null ? void 0 : _g2.enabled) ? await predict8(faces[i].tensor || ar([]), instance.config, i, faces.length) : 0; instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); } instance.analyze("End Liveness:"); instance.analyze("Start GEAR:"); if (instance.config.async) { - gearRes = ((_h2 = instance.config.face.gear) == null ? void 0 : _h2.enabled) ? predict9(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + gearRes = ((_h2 = instance.config.face.gear) == null ? void 0 : _h2.enabled) ? predict9(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; } else { instance.state = "run:gear"; timeStamp = now(); - gearRes = ((_i2 = instance.config.face.gear) == null ? void 0 : _i2.enabled) ? await predict9(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + gearRes = ((_i2 = instance.config.face.gear) == null ? void 0 : _i2.enabled) ? await predict9(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; instance.performance.gear = Math.trunc(now() - timeStamp); } instance.analyze("End GEAR:"); instance.analyze("Start SSRNet:"); if (instance.config.async) { - ageRes = ((_j2 = instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) ? predict10(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; - genderRes = ((_k2 = instance.config.face["ssrnet"]) == null ? void 0 : _k2.enabled) ? predict11(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + ageRes = ((_j2 = instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) ? predict10(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; + genderRes = ((_k2 = instance.config.face["ssrnet"]) == null ? void 0 : _k2.enabled) ? predict11(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; } else { instance.state = "run:ssrnet"; timeStamp = now(); - ageRes = ((_l2 = instance.config.face["ssrnet"]) == null ? void 0 : _l2.enabled) ? await predict10(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; - genderRes = ((_m2 = instance.config.face["ssrnet"]) == null ? void 0 : _m2.enabled) ? await predict11(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + ageRes = ((_l2 = instance.config.face["ssrnet"]) == null ? void 0 : _l2.enabled) ? await predict10(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; + genderRes = ((_m = instance.config.face["ssrnet"]) == null ? void 0 : _m.enabled) ? await predict11(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; instance.performance.ssrnet = Math.trunc(now() - timeStamp); } instance.analyze("End SSRNet:"); instance.analyze("Start MobileFaceNet:"); if (instance.config.async) { - mobilefacenetRes = ((_n2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _n2.enabled) ? predict12(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + mobilefacenetRes = ((_n2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _n2.enabled) ? predict12(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; } else { instance.state = "run:mobilefacenet"; timeStamp = now(); - mobilefacenetRes = ((_o2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _o2.enabled) ? await predict12(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + mobilefacenetRes = ((_o2 = instance.config.face["mobilefacenet"]) == null ? void 0 : _o2.enabled) ? await predict12(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); } instance.analyze("End MobileFaceNet:"); instance.analyze("Start InsightFace:"); if (instance.config.async) { - insightfaceRes = ((_p2 = instance.config.face["insightface"]) == null ? void 0 : _p2.enabled) ? predict13(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + insightfaceRes = ((_p2 = instance.config.face["insightface"]) == null ? void 0 : _p2.enabled) ? predict13(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; } else { instance.state = "run:mobilefacenet"; timeStamp = now(); - insightfaceRes = ((_q2 = instance.config.face["insightface"]) == null ? void 0 : _q2.enabled) ? await predict13(faces[i].tensor || pr([]), instance.config, i, faces.length) : null; + insightfaceRes = ((_q2 = instance.config.face["insightface"]) == null ? void 0 : _q2.enabled) ? await predict13(faces[i].tensor || ar([]), instance.config, i, faces.length) : null; instance.performance.mobilefacenet = Math.trunc(now() - timeStamp); } instance.analyze("End InsightFace:"); instance.analyze("Start Description:"); if (instance.config.async) { - descRes = predict6(faces[i].tensor || pr([]), instance.config, i, faces.length); + descRes = predict6(faces[i].tensor || ar([]), instance.config, i, faces.length); } else { instance.state = "run:description"; timeStamp = now(); - descRes = await predict6(faces[i].tensor || pr([]), instance.config, i, faces.length); + descRes = await predict6(faces[i].tensor || ar([]), instance.config, i, faces.length); instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp); } instance.analyze("End Description:"); @@ -43263,8 +42217,8 @@ var detectFace = async (instance, input) => { descRes.descriptor = insightfaceRes; } const irisSize = ((_v2 = instance.config.face.iris) == null ? void 0 : _v2.enabled) ? calculateCameraDistance(faces[i], input.shape[2]) : 0; - const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? gl(faces[i].tensor) : null; - Lt(faces[i].tensor); + const tensor = ((_w2 = instance.config.face.detector) == null ? void 0 : _w2.return) ? cc(faces[i].tensor) : null; + Ot(faces[i].tensor); if (faces[i].tensor) delete faces[i].tensor; const res = { @@ -43775,12 +42729,12 @@ var face2 = (res) => { return gestures; }; var iris2 = (res) => { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; if (!res) return []; const gestures = []; for (let i = 0; i < res.length; i++) { - if (!((_b = (_a2 = res[i].annotations) == null ? void 0 : _a2.leftEyeIris) == null ? void 0 : _b[0]) || !((_d2 = (_c2 = res[i].annotations) == null ? void 0 : _c2.rightEyeIris) == null ? void 0 : _d2[0])) + if (!((_b = (_a = res[i].annotations) == null ? void 0 : _a.leftEyeIris) == null ? void 0 : _b[0]) || !((_d2 = (_c2 = res[i].annotations) == null ? void 0 : _c2.rightEyeIris) == null ? void 0 : _d2[0])) continue; const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0]; const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1]; @@ -43860,14 +42814,14 @@ function getBoxCenter2(box) { } function cutBoxFromImageAndResize(box, image, cropSize) { const h = image.shape[1]; - const w = image.shape[2]; + const w8 = image.shape[2]; const boxes = [[ box.startPoint[1] / h, - box.startPoint[0] / w, + box.startPoint[0] / w8, box.endPoint[1] / h, - box.endPoint[0] / w + box.endPoint[0] / w8 ]]; - return b5.cropAndResize(image, boxes, [0], cropSize); + return eX.cropAndResize(image, boxes, [0], cropSize); } function scaleBoxCoordinates2(box, factor) { const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]]; @@ -43902,7 +42856,7 @@ function computeRotation2(point1, point2) { const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]); return normalizeRadians2(radians); } -var buildTranslationMatrix2 = (x, y4) => [[1, 0, x], [0, 1, y4], [0, 0, 1]]; +var buildTranslationMatrix2 = (x, y8) => [[1, 0, x], [0, 1, y8], [0, 0, 1]]; function dot2(v12, v22) { let product = 0; for (let i = 0; i < v12.length; i++) { @@ -46914,59 +45868,59 @@ var HandDetector = class { __publicField(this, "inputSize"); __publicField(this, "inputSizeTensor"); __publicField(this, "doubleInputSizeTensor"); - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; this.model = model23; this.anchors = anchors2.map((anchor) => [anchor.x, anchor.y]); - this.anchorsTensor = bu(this.anchors); - this.inputSize = ((_d2 = (_c2 = (_b = (_a2 = this == null ? void 0 : this.model) == null ? void 0 : _a2.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c2.shape) == null ? void 0 : _d2[2]) || 0; - this.inputSizeTensor = rr([this.inputSize, this.inputSize]); - this.doubleInputSizeTensor = rr([this.inputSize * 2, this.inputSize * 2]); + this.anchorsTensor = mu(this.anchors); + this.inputSize = ((_d2 = (_c2 = (_b = (_a = this == null ? void 0 : this.model) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0]) == null ? void 0 : _c2.shape) == null ? void 0 : _d2[2]) || 0; + this.inputSizeTensor = Jt([this.inputSize, this.inputSize]); + this.doubleInputSizeTensor = Jt([this.inputSize * 2, this.inputSize * 2]); } normalizeBoxes(boxes) { const t10 = {}; - t10.boxOffsets = Ye(boxes, [0, 0], [-1, 2]); - t10.boxSizes = Ye(boxes, [0, 2], [-1, 2]); - t10.div = Xe(t10.boxOffsets, this.inputSizeTensor); + t10.boxOffsets = Xe(boxes, [0, 0], [-1, 2]); + t10.boxSizes = Xe(boxes, [0, 2], [-1, 2]); + t10.div = je(t10.boxOffsets, this.inputSizeTensor); t10.boxCenterPoints = Ce(t10.div, this.anchorsTensor); - t10.halfBoxSizes = Xe(t10.boxSizes, this.doubleInputSizeTensor); + t10.halfBoxSizes = je(t10.boxSizes, this.doubleInputSizeTensor); t10.sub = Te(t10.boxCenterPoints, t10.halfBoxSizes); t10.startPoints = se(t10.sub, this.inputSizeTensor); t10.add = Ce(t10.boxCenterPoints, t10.halfBoxSizes); t10.endPoints = se(t10.add, this.inputSizeTensor); - const res = V1([t10.startPoints, t10.endPoints], 1); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + const res = r22([t10.startPoints, t10.endPoints], 1); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return res; } normalizeLandmarks(rawPalmLandmarks, index2) { const t10 = {}; t10.reshape = W(rawPalmLandmarks, [-1, 7, 2]); - t10.div = Xe(t10.reshape, this.inputSizeTensor); + t10.div = je(t10.reshape, this.inputSizeTensor); t10.landmarks = Ce(t10.div, this.anchors[index2] ? this.anchors[index2] : 0); const res = se(t10.landmarks, this.inputSizeTensor); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return res; } async predict(input, config3) { - var _a2; + var _a; const t10 = {}; - t10.resize = b5.resizeBilinear(input, [this.inputSize, this.inputSize]); - t10.div = Xe(t10.resize, constants.tf127); + t10.resize = eX.resizeBilinear(input, [this.inputSize, this.inputSize]); + t10.div = je(t10.resize, constants.tf127); t10.image = Te(t10.div, constants.tf1); t10.batched = this.model.execute(t10.image); - t10.predictions = gl(t10.batched); - t10.slice = Ye(t10.predictions, [0, 0], [-1, 1]); - t10.sigmoid = Pa(t10.slice); - t10.scores = gl(t10.sigmoid); + t10.predictions = cc(t10.batched); + t10.slice = Xe(t10.predictions, [0, 0], [-1, 1]); + t10.sigmoid = Ea(t10.slice); + t10.scores = cc(t10.sigmoid); const scores = await t10.scores.data(); - t10.boxes = Ye(t10.predictions, [0, 1], [-1, 4]); + t10.boxes = Xe(t10.predictions, [0, 1], [-1, 4]); t10.norm = this.normalizeBoxes(t10.boxes); - t10.nms = await b5.nonMaxSuppressionAsync(t10.norm, t10.scores, 3 * (((_a2 = config3.hand) == null ? void 0 : _a2.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); + t10.nms = await eX.nonMaxSuppressionAsync(t10.norm, t10.scores, 3 * (((_a = config3.hand) == null ? void 0 : _a.maxDetected) || 1), config3.hand.iouThreshold, config3.hand.minConfidence); const nms = await t10.nms.array(); const hands = []; for (const index2 of nms) { const p = {}; - p.box = Ye(t10.norm, [index2, 0], [1, -1]); - p.slice = Ye(t10.predictions, [index2, 5], [1, 14]); + p.box = Xe(t10.norm, [index2, 0], [1, -1]); + p.slice = Xe(t10.predictions, [index2, 5], [1, 14]); p.norm = this.normalizeLandmarks(p.slice, index2); p.palmLandmarks = W(p.norm, [-1, 2]); const box = await p.box.data(); @@ -46976,9 +45930,9 @@ var HandDetector = class { const hand3 = { startPoint, endPoint, palmLandmarks, confidence: scores[index2] }; const scaled = scaleBoxCoordinates2(hand3, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]); hands.push(scaled); - Object.keys(p).forEach((tensor) => Lt(p[tensor])); + Object.keys(p).forEach((tensor) => Ot(p[tensor])); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return hands; } }; @@ -46998,10 +45952,10 @@ var HandPipeline = class { __publicField(this, "storedBoxes"); __publicField(this, "skipped"); __publicField(this, "detectedHands"); - var _a2, _b, _c2; + var _a, _b, _c2; this.handDetector = handDetector; this.handPoseModel = handPoseModel2; - this.inputSize = ((_c2 = (_b = (_a2 = this.handPoseModel) == null ? void 0 : _a2.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c2[2]) || 0; + this.inputSize = ((_c2 = (_b = (_a = this.handPoseModel) == null ? void 0 : _a.inputs) == null ? void 0 : _b[0].shape) == null ? void 0 : _c2[2]) || 0; this.storedBoxes = []; this.skipped = Number.MAX_SAFE_INTEGER; this.detectedHands = 0; @@ -47078,23 +46032,23 @@ var HandPipeline = class { const angle = config3.hand.rotation ? computeRotation2(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0; const palmCenter = getBoxCenter2(currentBox); const palmCenterNormalized = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]]; - const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? b5.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone(); + const rotatedImage = config3.hand.rotation && env.kernels.includes("rotatewithoffset") ? eX.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone(); const rotationMatrix = buildRotationMatrix2(-angle, palmCenter); const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox; const croppedInput = cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]); - const handImage = Xe(croppedInput, constants.tf255); - Lt(croppedInput); - Lt(rotatedImage); + const handImage = je(croppedInput, constants.tf255); + Ot(croppedInput); + Ot(rotatedImage); const [confidenceT, keypoints] = this.handPoseModel.execute(handImage); lastTime13 = now(); - Lt(handImage); + Ot(handImage); const confidence = (await confidenceT.data())[0]; - Lt(confidenceT); + Ot(confidenceT); if (confidence >= config3.hand.minConfidence / 4) { const keypointsReshaped = W(keypoints, [-1, 3]); const rawCoords = await keypointsReshaped.array(); - Lt(keypoints); - Lt(keypointsReshaped); + Ot(keypoints); + Ot(keypointsReshaped); const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix); const nextBoundingBox = this.getBoxForHandLandmarks(coords); this.storedBoxes[i] = { ...nextBoundingBox, confidence }; @@ -47109,7 +46063,7 @@ var HandPipeline = class { } else { this.storedBoxes[i] = null; } - Lt(keypoints); + Ot(keypoints); } else { const enlarged = enlargeBox2(squarifyBox2(currentBox), handBoxEnlargeFactor); const result = { @@ -47209,21 +46163,21 @@ async function predict14(input, config3) { return hands; } async function loadDetect2(config3) { - var _a2; + var _a; if (env.initial) handDetectorModel = null; if (!handDetectorModel) - handDetectorModel = await loadModel((_a2 = config3.hand.detector) == null ? void 0 : _a2.modelPath); + handDetectorModel = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", handDetectorModel["modelUrl"]); return handDetectorModel; } async function loadSkeleton(config3) { - var _a2; + var _a; if (env.initial) handPoseModel = null; if (!handPoseModel) - handPoseModel = await loadModel((_a2 = config3.hand.skeleton) == null ? void 0 : _a2.modelPath); + handPoseModel = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); else if (config3.debug) log("cached model:", handPoseModel["modelUrl"]); return handPoseModel; @@ -47263,12 +46217,12 @@ var fingerMap = { palm: [0, 17, 13, 9, 5, 1, 0] }; async function loadDetect3(config3) { - var _a2; + var _a; if (env.initial) models2[0] = null; if (!models2[0]) { fakeOps(["tensorlistreserve", "enter", "tensorlistfromtensor", "merge", "loopcond", "switch", "exit", "tensorliststack", "nextiteration", "tensorlistsetitem", "tensorlistgetitem", "reciprocal", "shape", "split", "where"], config3); - models2[0] = await loadModel((_a2 = config3.hand.detector) == null ? void 0 : _a2.modelPath); + models2[0] = await loadModel((_a = config3.hand.detector) == null ? void 0 : _a.modelPath); const inputs = models2[0]["executor"] ? Object.values(models2[0].modelSignature["inputs"]) : void 0; inputSize7[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; inputSize7[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; @@ -47277,11 +46231,11 @@ async function loadDetect3(config3) { return models2[0]; } async function loadSkeleton2(config3) { - var _a2; + var _a; if (env.initial) models2[1] = null; if (!models2[1]) { - models2[1] = await loadModel((_a2 = config3.hand.skeleton) == null ? void 0 : _a2.modelPath); + models2[1] = await loadModel((_a = config3.hand.skeleton) == null ? void 0 : _a.modelPath); const inputs = models2[1]["executor"] ? Object.values(models2[1].modelSignature["inputs"]) : void 0; inputSize7[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0; inputSize7[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0; @@ -47297,27 +46251,27 @@ async function detectHands(input, config3) { const ratio2 = (input.shape[2] || 1) / (input.shape[1] || 1); const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); const width = Math.round(height * ratio2 / 8) * 8; - t10.resize = b5.resizeBilinear(input, [height, width]); + t10.resize = eX.resizeBilinear(input, [height, width]); t10.cast = Ue(t10.resize, "int32"); [t10.rawScores, t10.rawBoxes] = await models2[0].executeAsync(t10.cast, modelOutputNodes); - t10.boxes = gl(t10.rawBoxes, [0, 2]); - t10.scores = gl(t10.rawScores, [0]); - const classScores = zo(t10.scores, 1); - Lt(classScores[faceIndex]); + t10.boxes = cc(t10.rawBoxes, [0, 2]); + t10.scores = cc(t10.rawScores, [0]); + const classScores = fo(t10.scores, 1); + Ot(classScores[faceIndex]); classScores.splice(faceIndex, 1); - t10.filtered = Tr(classScores, 1); - Lt(classScores); - t10.max = La(t10.filtered, 1); - t10.argmax = w1(t10.filtered, 1); + t10.filtered = vr(classScores, 1); + Ot(classScores); + t10.max = Ra(t10.filtered, 1); + t10.argmax = Ok(t10.filtered, 1); let id2 = 0; - t10.nms = await b5.nonMaxSuppressionAsync(t10.boxes, t10.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); + t10.nms = await eX.nonMaxSuppressionAsync(t10.boxes, t10.max, (config3.hand.maxDetected || 0) + 1, config3.hand.iouThreshold || 0, config3.hand.minConfidence || 1); const nms = await t10.nms.data(); const scores = await t10.max.data(); const classNum = await t10.argmax.data(); for (const nmsIndex of Array.from(nms)) { - const boxSlice = Ye(t10.boxes, nmsIndex, 1); + const boxSlice = Xe(t10.boxes, nmsIndex, 1); const boxYX = await boxSlice.data(); - Lt(boxSlice); + Ot(boxSlice); const boxData = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; const boxRaw = scale(boxData, detectorExpandFact); const boxFull = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])]; @@ -47326,7 +46280,7 @@ async function detectHands(input, config3) { const hand3 = { id: id2++, score, box: boxFull, boxRaw, label }; hands.push(hand3); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); hands.sort((a, b) => b.score - a.score); if (hands.length > (config3.hand.maxDetected || 1)) hands.length = config3.hand.maxDetected || 1; @@ -47349,8 +46303,8 @@ async function detectFingers(input, h, config3) { if (input && models2[1] && config3.hand.landmarks && h.score > (config3.hand.minConfidence || 0)) { const t10 = {}; const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]]; - t10.crop = b5.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); - t10.div = Xe(t10.crop, constants.tf255); + t10.crop = eX.cropAndResize(input, [boxCrop], [0], [inputSize7[1][0], inputSize7[1][1]], "bilinear"); + t10.div = je(t10.crop, constants.tf255); [t10.score, t10.keypoints] = models2[1].execute(t10.div, ["Identity_1", "Identity"]); const rawScore = (await t10.score.data())[0]; const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; @@ -47366,13 +46320,13 @@ async function detectFingers(input, h, config3) { hand3.annotations[key] = fingerMap[key].map((index2) => hand3.landmarks && hand3.keypoints[index2] ? hand3.keypoints[index2] : null); } } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); } return hand3; } async function predict15(input, config3) { - var _a2, _b; - if (!((_a2 = models2[0]) == null ? void 0 : _a2["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) + var _a, _b; + if (!((_a = models2[0]) == null ? void 0 : _a["executor"]) || !((_b = models2[1]) == null ? void 0 : _b["executor"]) || !models2[0].inputs[0].shape || !models2[1].inputs[0].shape) return []; outputSize = [input.shape[2] || 0, input.shape[1] || 0]; skipped13++; @@ -47484,7 +46438,7 @@ var connected3 = { var bufferedResult = empty(); var interpolateTime = 0; function calc2(newResult, config3) { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y2, _z2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2; const t02 = now(); if (!newResult) return empty(); @@ -47501,7 +46455,7 @@ function calc2(newResult, config3) { const box = newResult.body[i].box.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor); const boxRaw = newResult.body[i].boxRaw.map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor); const keypoints = newResult.body[i].keypoints.map((newKpt, j) => { - var _a3, _b2, _c3, _d3, _e2, _f3, _g3, _h3, _i3; + var _a2, _b2, _c3, _d3, _e2, _f3, _g3, _h3, _i3; return { score: newKpt.score, part: newKpt.part, @@ -47516,7 +46470,7 @@ function calc2(newResult, config3) { bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2] ], distance: [ - bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a3[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c3 = newKpt.distance) == null ? void 0 : _c3[0], + bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_a2 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _a2[0]) || 0) + (((_b2 = newKpt.distance) == null ? void 0 : _b2[0]) || 0)) / bufferedFactor : (_c3 = newKpt.distance) == null ? void 0 : _c3[0], bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_d3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _d3[1]) || 0) + (((_e2 = newKpt.distance) == null ? void 0 : _e2[1]) || 0)) / bufferedFactor : (_f3 = newKpt.distance) == null ? void 0 : _f3[1], bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (((_g3 = bufferedResult.body[i].keypoints[j].distance) == null ? void 0 : _g3[2]) || 0) + (((_h3 = newKpt.distance) == null ? void 0 : _h3[2]) || 0)) / bufferedFactor : (_i3 = newKpt.distance) == null ? void 0 : _i3[2] ] @@ -47524,7 +46478,7 @@ function calc2(newResult, config3) { }); const annotations2 = {}; let coords = { connected: {} }; - if ((_a2 = config3.body.modelPath) == null ? void 0 : _a2.includes("efficientpose")) + if ((_a = config3.body.modelPath) == null ? void 0 : _a.includes("efficientpose")) coords = efficientposecoords_exports; else if ((_b = config3.body.modelPath) == null ? void 0 : _b.includes("blazepose")) coords = blazeposecoords_exports; @@ -47583,14 +46537,14 @@ function calc2(newResult, config3) { const rotation = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } }; rotation.matrix = (_j2 = newResult.face[i].rotation) == null ? void 0 : _j2.matrix; rotation.angle = { - roll: ((bufferedFactor - 1) * (((_l2 = (_k2 = bufferedResult.face[i].rotation) == null ? void 0 : _k2.angle) == null ? void 0 : _l2.roll) || 0) + (((_n2 = (_m2 = newResult.face[i].rotation) == null ? void 0 : _m2.angle) == null ? void 0 : _n2.roll) || 0)) / bufferedFactor, + roll: ((bufferedFactor - 1) * (((_l2 = (_k2 = bufferedResult.face[i].rotation) == null ? void 0 : _k2.angle) == null ? void 0 : _l2.roll) || 0) + (((_n2 = (_m = newResult.face[i].rotation) == null ? void 0 : _m.angle) == null ? void 0 : _n2.roll) || 0)) / bufferedFactor, yaw: ((bufferedFactor - 1) * (((_p2 = (_o2 = bufferedResult.face[i].rotation) == null ? void 0 : _o2.angle) == null ? void 0 : _p2.yaw) || 0) + (((_r2 = (_q2 = newResult.face[i].rotation) == null ? void 0 : _q2.angle) == null ? void 0 : _r2.yaw) || 0)) / bufferedFactor, pitch: ((bufferedFactor - 1) * (((_t = (_s2 = bufferedResult.face[i].rotation) == null ? void 0 : _s2.angle) == null ? void 0 : _t.pitch) || 0) + (((_v2 = (_u2 = newResult.face[i].rotation) == null ? void 0 : _u2.angle) == null ? void 0 : _v2.pitch) || 0)) / bufferedFactor }; rotation.gaze = { // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive bearing: ((bufferedFactor - 1) * (((_w2 = bufferedResult.face[i].rotation) == null ? void 0 : _w2.gaze.bearing) || 0) + (((_x2 = newResult.face[i].rotation) == null ? void 0 : _x2.gaze.bearing) || 0)) / bufferedFactor, - strength: ((bufferedFactor - 1) * (((_y2 = bufferedResult.face[i].rotation) == null ? void 0 : _y2.gaze.strength) || 0) + (((_z2 = newResult.face[i].rotation) == null ? void 0 : _z2.gaze.strength) || 0)) / bufferedFactor + strength: ((bufferedFactor - 1) * (((_y = bufferedResult.face[i].rotation) == null ? void 0 : _y.gaze.strength) || 0) + (((_z2 = newResult.face[i].rotation) == null ? void 0 : _z2.gaze.strength) || 0)) / bufferedFactor }; bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations: annotations2 }; } else { @@ -47638,35 +46592,35 @@ async function load15(config3) { return model17; } async function predict16(input, config3) { - var _a2; + var _a; if (!model17) model17 = await load15(config3); - if (!(model17 == null ? void 0 : model17["executor"]) || !((_a2 = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a2[0].shape)) + if (!(model17 == null ? void 0 : model17["executor"]) || !((_a = model17 == null ? void 0 : model17.inputs) == null ? void 0 : _a[0].shape)) return null; const t10 = {}; - t10.resize = b5.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); - t10.norm = Xe(t10.resize, constants.tf255); + t10.resize = eX.resizeBilinear(input, [model17.inputs[0].shape ? model17.inputs[0].shape[1] : 0, model17.inputs[0].shape ? model17.inputs[0].shape[2] : 0], false); + t10.norm = je(t10.resize, constants.tf255); t10.res = model17.execute(t10.norm); - t10.squeeze = gl(t10.res, [0]); - [t10.bgRaw, t10.fgRaw] = zo(t10.squeeze, 2); - t10.fg = NN(t10.fgRaw); + t10.squeeze = cc(t10.res, [0]); + [t10.bgRaw, t10.fgRaw] = fo(t10.squeeze, 2); + t10.fg = V1(t10.fgRaw); t10.mul = se(t10.fg, constants.tf255); - t10.expand = Ks(t10.mul, 2); - t10.output = b5.resizeBilinear(t10.expand, [input.shape[1] || 0, input.shape[2] || 0]); + t10.expand = Ms(t10.mul, 2); + t10.output = eX.resizeBilinear(t10.expand, [input.shape[1] || 0, input.shape[2] || 0]); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t10.input = gl(input); - t10.concat = bt([t10.input, t10.output], -1); + t10.input = cc(input); + t10.concat = yt([t10.input, t10.output], -1); rgba = Ue(t10.concat, "int32"); break; case "alpha": rgba = Ue(t10.output, "int32"); break; default: - rgba = pr(0); + rgba = ar(0); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return rgba; } @@ -47790,9 +46744,9 @@ function jitter(keypoints) { return keypoints; } function padInput(input, inputSize10) { - var _a2, _b; + var _a, _b; const t10 = {}; - if (!((_a2 = input == null ? void 0 : input.shape) == null ? void 0 : _a2[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) + if (!((_a = input == null ? void 0 : input.shape) == null ? void 0 : _a[1]) || !((_b = input == null ? void 0 : input.shape) == null ? void 0 : _b[2])) return input; cache5.padding = [ [0, 0], @@ -47804,10 +46758,10 @@ function padInput(input, inputSize10) { [0, 0] // dont touch rbg ]; - t10.pad = za(input, cache5.padding); - t10.resize = b5.resizeBilinear(t10.pad, [inputSize10, inputSize10]); + t10.pad = Aa(input, cache5.padding); + t10.resize = eX.resizeBilinear(t10.pad, [inputSize10, inputSize10]); const final = Ue(t10.resize, "int32"); - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return final; } function rescaleBody(body4, outputSize2) { @@ -47838,7 +46792,7 @@ var cache6 = { last: 0 }; async function load16(config3) { - var _a2; + var _a; if (env.initial) model18 = null; if (!model18) { @@ -47846,7 +46800,7 @@ async function load16(config3) { model18 = await loadModel(config3.body.modelPath); } else if (config3.debug) log("cached model:", model18["modelUrl"]); - inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a2 = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a2[0].shape) ? model18.inputs[0].shape[2] : 0; + inputSize8 = (model18 == null ? void 0 : model18["executor"]) && ((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape) ? model18.inputs[0].shape[2] : 0; if (inputSize8 < 64) inputSize8 = 256; if (A().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) @@ -47935,8 +46889,8 @@ function parseMultiPose(res, config3, image) { return bodies; } async function predict17(input, config3) { - var _a2; - if (!(model18 == null ? void 0 : model18["executor"]) || !((_a2 = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a2[0].shape)) + var _a; + if (!(model18 == null ? void 0 : model18["executor"]) || !((_a = model18 == null ? void 0 : model18.inputs) == null ? void 0 : _a[0].shape)) return []; if (!config3.skipAllowed) cache6.boxes.length = 0; @@ -47958,7 +46912,7 @@ async function predict17(input, config3) { rescaleBody(body4, [input.shape[2] || 1, input.shape[1] || 1]); jitter(body4.keypoints); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); resolve(cache6.bodies); }); } @@ -47980,17 +46934,17 @@ async function load17(config3) { return model19; } async function process4(res, outputShape, config3) { - var _a2, _b; + var _a, _b; let id2 = 0; let results = []; const size2 = inputSize9; for (const strideSize of [1, 2, 4]) { const baseSize = strideSize * 13; - const scoresT = gl(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); + const scoresT = cc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) === labels2.length)); const scores = await scoresT.array(); - const featuresT = gl(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); - const boxesMaxT = W(featuresT, [-1, 4, (((_a2 = featuresT.shape) == null ? void 0 : _a2[1]) || 0) / 4]); - const boxIdxT = w1(boxesMaxT, 2); + const featuresT = cc(res.find((a) => a.shape[1] === baseSize ** 2 && (a.shape[2] || 0) < labels2.length)); + const boxesMaxT = W(featuresT, [-1, 4, (((_a = featuresT.shape) == null ? void 0 : _a[1]) || 0) / 4]); + const boxIdxT = Ok(boxesMaxT, 2); const boxIdx = await boxIdxT.array(); for (let i = 0; i < scoresT.shape[0]; i++) { for (let j = 0; j < (((_b = scoresT.shape) == null ? void 0 : _b[1]) || 0); j++) { @@ -47999,15 +46953,15 @@ async function process4(res, outputShape, config3) { const cx2 = (0.5 + Math.trunc(i % baseSize)) / baseSize; const cy2 = (0.5 + Math.trunc(i / baseSize)) / baseSize; const boxOffset = boxIdx[i].map((a) => a * (baseSize / strideSize / size2)); - const [x, y4] = [ + const [x, y8] = [ cx2 - scaleBox / strideSize * boxOffset[0], cy2 - scaleBox / strideSize * boxOffset[1] ]; - const [w, h] = [ + const [w8, h] = [ cx2 + scaleBox / strideSize * boxOffset[2] - x, - cy2 + scaleBox / strideSize * boxOffset[3] - y4 + cy2 + scaleBox / strideSize * boxOffset[3] - y8 ]; - let boxRaw = [x, y4, w, h]; + let boxRaw = [x, y8, w8, h]; boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))); const box = [ // results normalized to input image pixels @@ -48031,15 +46985,15 @@ async function process4(res, outputShape, config3) { } } } - Lt([scoresT, featuresT, boxesMaxT, boxIdxT]); + Ot([scoresT, featuresT, boxesMaxT, boxIdxT]); } const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); const nmsScores = results.map((a) => a.score); let nmsIdx = []; if (nmsBoxes && nmsBoxes.length > 0) { - const nms = await b5.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); + const nms = await eX.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config3.object.maxDetected || 0, config3.object.iouThreshold, config3.object.minConfidence); nmsIdx = Array.from(await nms.data()); - Lt(nms); + Ot(nms); } results = results.filter((_val, idx) => nmsIdx.includes(idx)).sort((a, b) => b.score - a.score); return results; @@ -48058,16 +47012,16 @@ async function predict18(image, config3) { return last10; return new Promise(async (resolve) => { const outputSize2 = [image.shape[2] || 0, image.shape[1] || 0]; - const resizeT = b5.resizeBilinear(image, [inputSize9, inputSize9], false); - const normT = Xe(resizeT, constants.tf255); - const transposeT = yl(normT, [0, 3, 1, 2]); + const resizeT = eX.resizeBilinear(image, [inputSize9, inputSize9], false); + const normT = je(resizeT, constants.tf255); + const transposeT = mc(normT, [0, 3, 1, 2]); let objectT; if (config3.object.enabled) objectT = model19.execute(transposeT); lastTime15 = now(); const obj = await process4(objectT, outputSize2, config3); last10 = obj; - Lt([resizeT, normT, transposeT, ...objectT]); + Ot([resizeT, normT, transposeT, ...objectT]); resolve(obj); }); } @@ -48131,11 +47085,11 @@ var poseChain = [ ["rightKnee", "rightAnkle"] ]; function getBoundingBox(keypoints) { - const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y: y4 } }) => ({ + const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y: y8 } }) => ({ maxX: Math.max(maxX, x), - maxY: Math.max(maxY, y4), + maxY: Math.max(maxY, y8), minX: Math.min(minX, x), - minY: Math.min(minY, y4) + minY: Math.min(minY, y8) }), { maxX: Number.NEGATIVE_INFINITY, maxY: Number.NEGATIVE_INFINITY, @@ -48226,18 +47180,18 @@ var MaxHeap = class { this.priorityQueue[j] = t10; } }; -function getOffsetPoint(y4, x, keypoint, offsets) { +function getOffsetPoint(y8, x, keypoint, offsets) { return { - y: offsets.get(y4, x, keypoint), - x: offsets.get(y4, x, keypoint + count) + y: offsets.get(y8, x, keypoint), + x: offsets.get(y8, x, keypoint + count) }; } function getImageCoords(part, outputStride2, offsets) { const { heatmapY, heatmapX, id: keypoint } = part; - const { y: y4, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); + const { y: y8, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets); return { x: part.heatmapX * outputStride2 + x, - y: part.heatmapY * outputStride2 + y4 + y: part.heatmapY * outputStride2 + y8 }; } function clamp(a, min, max) { @@ -48247,9 +47201,9 @@ function clamp(a, min, max) { return max; return a; } -function squaredDistance(y12, x12, y22, x22) { +function squaredDistance(y12, x1, y22, x22) { const dy2 = y22 - y12; - const dx2 = x22 - x12; + const dx2 = x22 - x1; return dy2 * dy2 + dx2 * dx2; } function addVectors(a, b) { @@ -48358,13 +47312,13 @@ function buildPartWithScoreQueue(minConfidence2, scores) { } return queue; } -function withinRadius(poses, { x, y: y4 }, keypointId) { +function withinRadius(poses, { x, y: y8 }, keypointId) { return poses.some(({ keypoints }) => { - var _a2; - const correspondingKeypoint = (_a2 = keypoints[keypointId]) == null ? void 0 : _a2.position; + var _a; + const correspondingKeypoint = (_a = keypoints[keypointId]) == null ? void 0 : _a.position; if (!correspondingKeypoint) return false; - return squaredDistance(y4, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; + return squaredDistance(y8, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius; }); } function getInstanceScore(existingPoses, keypoints) { @@ -48398,16 +47352,16 @@ async function predict19(input, config3) { const res = De(() => { if (!model20.inputs[0].shape) return []; - const resized = b5.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); - const normalized = Te(Xe(Ue(resized, "float32"), 127.5), 1); + const resized = eX.resizeBilinear(input, [model20.inputs[0].shape[2], model20.inputs[0].shape[1]]); + const normalized = Te(je(Ue(resized, "float32"), 127.5), 1); const results = model20.execute(normalized, poseNetOutputs); - const results3d = results.map((y4) => gl(y4, [0])); - results3d[1] = Pa(results3d[1]); + const results3d = results.map((y8) => cc(y8, [0])); + results3d[1] = Ea(results3d[1]); return results3d; }); const buffers = await Promise.all(res.map((tensor) => tensor.buffer())); for (const t10 of res) - Lt(t10); + Ot(t10); const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config3.body.maxDetected, config3.body.minConfidence); if (!model20.inputs[0].shape) return []; @@ -48428,13 +47382,13 @@ var outputNodes2 = ["fgr", "pha", "r1o", "r2o", "r3o", "r4o"]; var t = {}; var ratio = 0; function init3(config3) { - Lt([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); - t.r1i = pr(0); - t.r2i = pr(0); - t.r3i = pr(0); - t.r4i = pr(0); + Ot([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]); + t.r1i = ar(0); + t.r2i = ar(0); + t.r3i = ar(0); + t.r4i = ar(0); ratio = config3.segmentation.ratio || 0.5; - t.downsample_ratio = pr(ratio); + t.downsample_ratio = ar(ratio); } async function load19(config3) { if (!model21 || env.initial) @@ -48444,34 +47398,34 @@ async function load19(config3) { init3(config3); return model21; } -var normalize = (r16) => De(() => { - const squeeze = gl(r16, [0]); +var normalize = (r15) => De(() => { + const squeeze = cc(r15, [0]); const mul = se(squeeze, constants.tf255); const cast = Ue(mul, "int32"); return cast; }); function getRGBA(fgr, pha) { - const rgb3 = fgr ? normalize(fgr) : Ma([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); - const a = pha ? normalize(pha) : Ma([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); - const rgba = bt([rgb3, a], -1); - Lt([rgb3, a]); + const rgb3 = fgr ? normalize(fgr) : $a([pha.shape[1] || 0, pha.shape[2] || 0, 3], 255, "int32"); + const a = pha ? normalize(pha) : $a([fgr.shape[1] || 0, fgr.shape[2] || 0, 1], 255, "int32"); + const rgba = yt([rgb3, a], -1); + Ot([rgb3, a]); return rgba; } function getState(state) { return De(() => { - const r16 = {}; - r16.unstack = zo(state, -1); - r16.concat = bt(r16.unstack, 1); - r16.split = Ci(r16.concat, 4, 1); - r16.stack = bt(r16.split, 2); - r16.squeeze = gl(r16.stack, [0]); - r16.expand = Ks(r16.squeeze, -1); - r16.add = Ce(r16.expand, 1); - r16.mul = se(r16.add, 127.5); - r16.cast = Ue(r16.mul, "int32"); - r16.tile = hu(r16.cast, [1, 1, 3]); - r16.alpha = Ma([r16.tile.shape[0] || 0, r16.tile.shape[1] || 0, 1], 255, "int32"); - return bt([r16.tile, r16.alpha], -1); + const r15 = {}; + r15.unstack = fo(state, -1); + r15.concat = yt(r15.unstack, 1); + r15.split = li(r15.concat, 4, 1); + r15.stack = yt(r15.split, 2); + r15.squeeze = cc(r15.stack, [0]); + r15.expand = Ms(r15.squeeze, -1); + r15.add = Ce(r15.expand, 1); + r15.mul = se(r15.add, 127.5); + r15.cast = Ue(r15.mul, "int32"); + r15.tile = uu(r15.cast, [1, 1, 3]); + r15.alpha = $a([r15.tile.shape[0] || 0, r15.tile.shape[1] || 0, 1], 255, "int32"); + return yt([r15.tile, r15.alpha], -1); }); } async function predict20(input, config3) { @@ -48479,7 +47433,7 @@ async function predict20(input, config3) { model21 = await load19(config3); if (!(model21 == null ? void 0 : model21["executor"])) return null; - t.src = Xe(input, 255); + t.src = je(input, 255); if (ratio !== config3.segmentation.ratio) init3(config3); const [fgr, pha, r1o, r2o, r3o, r4o] = await model21.executeAsync(t, outputNodes2); @@ -48498,9 +47452,9 @@ async function predict20(input, config3) { rgba = getState(r1o); break; default: - rgba = pr(0); + rgba = ar(0); } - Lt([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); + Ot([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]); [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; return rgba; } @@ -48515,41 +47469,41 @@ async function load20(config3) { return model22; } async function predict21(input, config3) { - var _a2; + var _a; if (!model22) model22 = await load20(config3); - if (!(model22 == null ? void 0 : model22["executor"]) || !((_a2 = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a2[0].shape)) + if (!(model22 == null ? void 0 : model22["executor"]) || !((_a = model22 == null ? void 0 : model22.inputs) == null ? void 0 : _a[0].shape)) return null; const t10 = {}; - t10.resize = b5.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); - t10.norm = Xe(t10.resize, constants.tf255); + t10.resize = eX.resizeBilinear(input, [model22.inputs[0].shape ? model22.inputs[0].shape[1] : 0, model22.inputs[0].shape ? model22.inputs[0].shape[2] : 0], false); + t10.norm = je(t10.resize, constants.tf255); t10.res = model22.execute(t10.norm); - t10.squeeze = gl(t10.res, [0]); - t10.alpha = b5.resizeBilinear(t10.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); + t10.squeeze = cc(t10.res, [0]); + t10.alpha = eX.resizeBilinear(t10.squeeze, [input.shape[1] || 0, input.shape[2] || 0]); t10.mul = se(t10.alpha, constants.tf255); let rgba; switch (config3.segmentation.mode || "default") { case "default": - t10.input = gl(input); - t10.concat = bt([t10.input, t10.mul], -1); + t10.input = cc(input); + t10.concat = yt([t10.input, t10.mul], -1); rgba = Ue(t10.concat, "int32"); break; case "alpha": rgba = Ue(t10.mul, "int32"); break; default: - rgba = pr(0); + rgba = ar(0); } - Object.keys(t10).forEach((tensor) => Lt(t10[tensor])); + Object.keys(t10).forEach((tensor) => Ot(t10[tensor])); return rgba; } // src/models.ts function validateModel(instance, model23, name) { - var _a2, _b; + var _a, _b; if (!model23) return null; - if (!((_a2 = instance == null ? void 0 : instance.config) == null ? void 0 : _a2.validateModels)) + if (!((_a = instance == null ? void 0 : instance.config) == null ? void 0 : _a.validateModels)) return null; const simpleOps = ["const", "placeholder", "noop", "pad", "squeeze", "add", "sub", "mul", "div"]; const ignoreOps = ["biasadd", "fusedbatchnormv3", "matmul", "switch", "shape", "merge", "split", "broadcastto"]; @@ -48609,14 +47563,14 @@ var Models = class { this.models[model23] = null; } async load(instance) { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y2, _z2, _A2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2, _v2, _w2, _x2, _y, _z2, _A2; if (env.initial) this.reset(); if (instance) this.instance = instance; const m = {}; m.blazeface = this.instance.config.face.enabled && !this.models.blazeface ? load3(this.instance.config) : null; - m.antispoof = this.instance.config.face.enabled && ((_a2 = this.instance.config.face.antispoof) == null ? void 0 : _a2.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; + m.antispoof = this.instance.config.face.enabled && ((_a = this.instance.config.face.antispoof) == null ? void 0 : _a.enabled) && !this.models.antispoof ? load8(this.instance.config) : null; m.liveness = this.instance.config.face.enabled && ((_b = this.instance.config.face.liveness) == null ? void 0 : _b.enabled) && !this.models.liveness ? load9(this.instance.config) : null; m.faceres = this.instance.config.face.enabled && ((_c2 = this.instance.config.face.description) == null ? void 0 : _c2.enabled) && !this.models.faceres ? load7(this.instance.config) : null; m.emotion = this.instance.config.face.enabled && ((_d2 = this.instance.config.face.emotion) == null ? void 0 : _d2.enabled) && !this.models.emotion ? load6(this.instance.config) : null; @@ -48627,7 +47581,7 @@ var Models = class { m.ssrnetgender = this.instance.config.face.enabled && ((_j2 = this.instance.config.face["ssrnet"]) == null ? void 0 : _j2.enabled) && !this.models.ssrnetgender ? load12(this.instance.config) : null; m.mobilefacenet = this.instance.config.face.enabled && ((_k2 = this.instance.config.face["mobilefacenet"]) == null ? void 0 : _k2.enabled) && !this.models.mobilefacenet ? load13(this.instance.config) : null; m.insightface = this.instance.config.face.enabled && ((_l2 = this.instance.config.face["insightface"]) == null ? void 0 : _l2.enabled) && !this.models.insightface ? load14(this.instance.config) : null; - m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m2 = this.instance.config.body.modelPath) == null ? void 0 : _m2.includes("blazepose")) ? loadPose(this.instance.config) : null; + m.blazepose = this.instance.config.body.enabled && !this.models.blazepose && ((_m = this.instance.config.body.modelPath) == null ? void 0 : _m.includes("blazepose")) ? loadPose(this.instance.config) : null; m.blazeposedetect = this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body["detector"] && this.instance.config.body["detector"].modelPath ? loadDetect(this.instance.config) : null; m.efficientpose = this.instance.config.body.enabled && !this.models.efficientpose && ((_n2 = this.instance.config.body.modelPath) == null ? void 0 : _n2.includes("efficientpose")) ? load2(this.instance.config) : null; m.movenet = this.instance.config.body.enabled && !this.models.movenet && ((_o2 = this.instance.config.body.modelPath) == null ? void 0 : _o2.includes("movenet")) ? load16(this.instance.config) : null; @@ -48640,7 +47594,7 @@ var Models = class { } m.centernet = this.instance.config.object.enabled && !this.models.centernet && ((_w2 = this.instance.config.object.modelPath) == null ? void 0 : _w2.includes("centernet")) ? load(this.instance.config) : null; m.nanodet = this.instance.config.object.enabled && !this.models.nanodet && ((_x2 = this.instance.config.object.modelPath) == null ? void 0 : _x2.includes("nanodet")) ? load17(this.instance.config) : null; - m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _y2.includes("selfie")) ? load20(this.instance.config) : null; + m.selfie = this.instance.config.segmentation.enabled && !this.models.selfie && ((_y = this.instance.config.segmentation.modelPath) == null ? void 0 : _y.includes("selfie")) ? load20(this.instance.config) : null; m.meet = this.instance.config.segmentation.enabled && !this.models.meet && ((_z2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _z2.includes("meet")) ? load15(this.instance.config) : null; m.rvm = this.instance.config.segmentation.enabled && !this.models.rvm && ((_A2 = this.instance.config.segmentation.modelPath) == null ? void 0 : _A2.includes("rvm")) ? load19(this.instance.config) : null; for (const [model23, promise] of Object.entries(m)) { @@ -48651,8 +47605,8 @@ var Models = class { } list() { const models3 = Object.keys(this.models).map((model23) => { - var _a2; - return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a2 = this.models[model23]) == null ? void 0 : _a2["modelUrl"] : null }; + var _a; + return { name: model23, loaded: this.models[model23] !== null, size: 0, url: this.models[model23] ? (_a = this.models[model23]) == null ? void 0 : _a["modelUrl"] : null }; }); for (const m of models3) { const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name)); @@ -48684,7 +47638,7 @@ var Models = class { // src/util/persons.ts function join2(faces, bodies, hands, gestures, shape) { - var _a2, _b, _c2, _d2, _e, _f2; + var _a, _b, _c2, _d2, _e, _f2; let id2 = 0; const persons = []; for (const face4 of faces) { @@ -48711,7 +47665,7 @@ function join2(faces, bodies, hands, gestures, shape) { person2.gestures.push(gesture2); else if (gesture2["iris"] !== void 0 && gesture2["iris"] === face4.id) person2.gestures.push(gesture2); - else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a2 = person2.body) == null ? void 0 : _a2.id)) + else if (gesture2["body"] !== void 0 && gesture2["body"] === ((_a = person2.body) == null ? void 0 : _a.id)) person2.gestures.push(gesture2); else if (gesture2["hand"] !== void 0 && gesture2["hand"] === ((_b = person2.hands.left) == null ? void 0 : _b.id)) person2.gestures.push(gesture2); @@ -48719,11 +47673,11 @@ function join2(faces, bodies, hands, gestures, shape) { person2.gestures.push(gesture2); } const x = []; - const y4 = []; + const y8 = []; const extractXY = (box) => { if (box && box.length === 4) { x.push(box[0], box[0] + box[2]); - y4.push(box[1], box[1] + box[3]); + y8.push(box[1], box[1] + box[3]); } }; extractXY(person2.face.box); @@ -48731,8 +47685,8 @@ function join2(faces, bodies, hands, gestures, shape) { extractXY((_e = person2.hands.left) == null ? void 0 : _e.box); extractXY((_f2 = person2.hands.right) == null ? void 0 : _f2.box); const minX = Math.min(...x); - const minY = Math.min(...y4); - person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y4) - minY]; + const minY = Math.min(...y8); + person2.box = [minX, minY, Math.max(...x) - minX, Math.max(...y8) - minY]; if ((shape == null ? void 0 : shape[1]) && (shape == null ? void 0 : shape[2])) person2.boxRaw = [person2.box[0] / shape[2], person2.box[1] / shape[1], person2.box[2] / shape[2], person2.box[3] / shape[1]]; persons.push(person2); @@ -49537,9 +48491,9 @@ async function warmupNode(instance) { else img = atob2(body3); let res; - if ("node" in tfjs_esm_exports && Gk() === "tensorflow") { - const data = qtr.decodeJpeg(img); - const expanded = Ks(data, 0); + if ("node" in tfjs_esm_exports && sk() === "tensorflow") { + const data = E7t.decodeJpeg(img); + const expanded = Ms(data, 0); instance.tf.dispose(data); res = await instance.detect(expanded, instance.config); instance.tf.dispose(expanded); @@ -49560,46 +48514,46 @@ async function runInference(instance) { return res; } async function runCompile(instance) { - var _a2, _b, _c2, _d2; + var _a, _b, _c2, _d2; if (!A().flagRegistry.ENGINE_COMPILE_ONLY) return; - const backendType = Gk(); - const webGLBackend = Hk(); + const backendType = sk(); + const webGLBackend = ak(); if (backendType !== "webgl" && backendType !== "humangl" || !(webGLBackend == null ? void 0 : webGLBackend["checkCompileCompletion"])) { return; } A().set("ENGINE_COMPILE_ONLY", true); - const numTensorsStart = cr().state.numTensors; + const numTensorsStart = ur().state.numTensors; const compiledModels = []; for (const [modelName, model23] of Object.entries(instance.models.models)) { if (!model23) continue; - const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a2 = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a2[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; + const shape = (model23 == null ? void 0 : model23.modelSignature) && ((_b = (_a = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _a[0]) == null ? void 0 : _b.shape) ? [...model23.inputs[0].shape] : [1, 64, 64, 3]; const dtype = (model23 == null ? void 0 : model23.modelSignature) && ((_d2 = (_c2 = model23 == null ? void 0 : model23.inputs) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.dtype) ? model23.inputs[0].dtype : "float32"; for (let dim = 0; dim < shape.length; dim++) { if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; } - const tensor = Yr(shape, dtype); + const tensor = Gr(shape, dtype); try { const res = model23.execute(tensor); compiledModels.push(modelName); if (Array.isArray(res)) - res.forEach((t10) => Lt(t10)); + res.forEach((t10) => Ot(t10)); else - Lt(res); + Ot(res); } catch (e) { if (instance.config.debug) log("compile fail model:", modelName); } - Lt(tensor); + Ot(tensor); } const kernels = await webGLBackend["checkCompileCompletionAsync"](); webGLBackend["getUniformLocations"](); if (instance.config.debug) log("compile pass:", { models: compiledModels, kernels: kernels.length }); A().set("ENGINE_COMPILE_ONLY", false); - const numTensorsEnd = cr().state.numTensors; + const numTensorsEnd = ur().state.numTensors; if (numTensorsEnd - numTensorsStart > 0) log("tensor leak:", numTensorsEnd - numTensorsStart); } @@ -49711,7 +48665,7 @@ var Human = class { return null; if (!input) return "input is not defined"; - if (this.env.node && !(input instanceof dt)) + if (this.env.node && !(input instanceof mt)) return "input must be a tensor"; try { this.tf.getBackend(); @@ -49726,13 +48680,13 @@ var Human = class { __publicField(this, "webcam", new WebCam()); /** emit event */ __publicField(this, "emit", (event) => { - var _a2; - if ((_a2 = this.events) == null ? void 0 : _a2.dispatchEvent) + var _a; + if ((_a = this.events) == null ? void 0 : _a.dispatchEvent) this.events.dispatchEvent(new Event(event)); }); /** internal structure that keeps track of processed videos @hidden */ __privateAdd(this, _loops, {}); - const tfVersion = (gme.tfjs || t8).replace(/-(.*)/, ""); + const tfVersion = (Vce.tfjs || OX).replace(/-(.*)/, ""); config.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`; config.modelBasePath = env.browser ? "../models/" : "file://models/"; this.version = version; @@ -49804,7 +48758,7 @@ var Human = class { * Returns tensor which contains image data in RGBA format */ async segmentation(input, userConfig) { - var _a2, _b, _c2; + var _a, _b, _c2; if (userConfig) this.config = mergeDeep(this.config, userConfig); if (!this.config.segmentation.enabled) @@ -49813,13 +48767,13 @@ var Human = class { if (!processed.tensor) return null; let tensor = null; - if ((_a2 = this.config.segmentation.modelPath) == null ? void 0 : _a2.includes("rvm")) + if ((_a = this.config.segmentation.modelPath) == null ? void 0 : _a.includes("rvm")) tensor = await predict20(processed.tensor, this.config); if ((_b = this.config.segmentation.modelPath) == null ? void 0 : _b.includes("meet")) tensor = await predict16(processed.tensor, this.config); if ((_c2 = this.config.segmentation.modelPath) == null ? void 0 : _c2.includes("selfie")) tensor = await predict21(processed.tensor, this.config); - Lt(processed.tensor); + Ot(processed.tensor); return tensor; } /** Compare two input tensors for pixel similarity @@ -49856,7 +48810,7 @@ var Human = class { if (this.env.initial) { if (!await check(this, false)) log("error: backend check failed"); - await Zde(); + await Ime(); if (this.env.browser) { if (this.config.debug) log("configuration:", this.config); @@ -49938,7 +48892,7 @@ var Human = class { async detect(input, userConfig) { this.state = "detect"; return new Promise(async (resolve) => { - var _a2, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m2, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2; + var _a, _b, _c2, _d2, _e, _f2, _g2, _h2, _i2, _j2, _k2, _l2, _m, _n2, _o2, _p2, _q2, _r2, _s2, _t, _u2; this.state = "config"; let timeStamp; this.config = mergeDeep(this.config, userConfig); @@ -49997,7 +48951,7 @@ var Human = class { this.state = "detect:body"; const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * faceRes.length : 1 } }) : this.config; if (this.config.async) { - if ((_a2 = this.config.body.modelPath) == null ? void 0 : _a2.includes("posenet")) + if ((_a = this.config.body.modelPath) == null ? void 0 : _a.includes("posenet")) bodyRes = this.config.body.enabled ? predict19(img.tensor, bodyConfig) : []; else if ((_b = this.config.body.modelPath) == null ? void 0 : _b.includes("blazepose")) bodyRes = this.config.body.enabled ? predict(img.tensor, bodyConfig) : []; @@ -50032,7 +48986,7 @@ var Human = class { delete this.performance.hand; } else { timeStamp = now(); - if ((_n2 = (_m2 = this.config.hand.detector) == null ? void 0 : _m2.modelPath) == null ? void 0 : _n2.includes("handdetect")) + if ((_n2 = (_m = this.config.hand.detector) == null ? void 0 : _m.modelPath) == null ? void 0 : _n2.includes("handdetect")) handRes = this.config.hand.enabled ? await predict14(img.tensor, handConfig) : []; else if ((_p2 = (_o2 = this.config.hand.detector) == null ? void 0 : _o2.modelPath) == null ? void 0 : _p2.includes("handtrack")) handRes = this.config.hand.enabled ? await predict15(img.tensor, handConfig) : []; @@ -50088,7 +49042,7 @@ var Human = class { return join2(faceRes, bodyRes, handRes, gestureRes, shape); } }; - Lt(img.tensor); + Ot(img.tensor); this.emit("detect"); this.state = "idle"; resolve(this.result); diff --git a/dist/human.esm.js.map b/dist/human.esm.js.map index a2fe9f05..e2f1a4a7 100644 --- a/dist/human.esm.js.map +++ b/dist/human.esm.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["tfjs.esm.js", "../src/util/util.ts", "../src/config.ts", "../src/image/imagefxshaders.ts", "../src/image/imagefx.ts", "../src/image/enhance.ts", "../src/image/image.ts", "../src/util/env.ts", "../src/util/webcam.ts", "../models/models.json", "../src/tfjs/load.ts", "../package.json", "../src/tfjs/humangl.ts", "../src/tfjs/constants.ts", "../src/tfjs/backend.ts", "../src/draw/draw.ts", "../src/draw/primitives.ts", "../src/draw/options.ts", "../src/face/facemeshcoords.ts", "../src/face/constants.ts", "../src/draw/face.ts", "../src/draw/body.ts", "../src/draw/hand.ts", "../src/draw/object.ts", "../src/draw/gesture.ts", "../src/draw/labels.ts", "../src/body/blazeposecoords.ts", "../src/body/blazeposedetector.ts", "../src/util/box.ts", "../src/body/blazepose.ts", "../src/object/labels.ts", "../src/object/centernet.ts", "../src/body/efficientposecoords.ts", "../src/body/efficientpose.ts", "../src/face/facemeshutil.ts", "../src/face/blazeface.ts", "../src/face/iris.ts", "../src/face/attention.ts", "../src/face/facemesh.ts", "../src/gear/emotion.ts", "../src/face/faceres.ts", "../src/face/mask.ts", "../src/face/antispoof.ts", "../src/face/liveness.ts", "../src/gear/gear.ts", "../src/gear/ssrnet-age.ts", "../src/gear/ssrnet-gender.ts", "../src/face/mobilefacenet.ts", "../src/face/insightface.ts", "../src/face/angles.ts", "../src/face/anthropometry.ts", "../src/face/face.ts", "../src/hand/fingerdef.ts", "../src/hand/fingergesture.ts", "../src/hand/fingerpose.ts", "../src/gesture/gesture.ts", "../src/hand/handposeutil.ts", "../src/hand/handposeanchors.ts", "../src/hand/handposedetector.ts", "../src/hand/handposepipeline.ts", "../src/hand/handpose.ts", "../src/hand/handtrack.ts", "../src/result.ts", "../src/body/movenetcoords.ts", "../src/util/interpolate.ts", "../src/segmentation/meet.ts", "../src/face/match.ts", "../src/models.ts", "../src/body/movenetfix.ts", "../src/body/movenet.ts", "../src/object/nanodet.ts", "../src/body/posenetutils.ts", "../src/body/posenet.ts", "../src/segmentation/rvm.ts", "../src/segmentation/selfie.ts", "../src/util/persons.ts", "../src/sample.ts", "../src/warmup.ts", "../src/human.ts"], - "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar q4=Object.create;var lw=Object.defineProperty;var j4=Object.getOwnPropertyDescriptor;var X4=Object.getOwnPropertyNames;var Y4=Object.getPrototypeOf,Q4=Object.prototype.hasOwnProperty;var jt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)lw(r,t,{get:e[t],enumerable:!0})},Z4=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of X4(e))!Q4.call(r,n)&&n!==t&&lw(r,n,{get:()=>e[n],enumerable:!(o=j4(e,n))||o.enumerable});return r};var Kp=(r,e,t)=>(t=r!=null?q4(Y4(r)):{},Z4(e||!r||!r.__esModule?lw(t,\"default\",{value:r,enumerable:!0}):t,r));var _k=jt((Lme,Tk)=>{Tk.exports=Tt;var Yo=null;try{Yo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function Tt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}Tt.prototype.__isLong__;Object.defineProperty(Tt.prototype,\"__isLong__\",{value:!0});function jr(r){return(r&&r.__isLong__)===!0}Tt.isLong=jr;var yk={},bk={};function zu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=bk[r],o)?o:(t=_t(r,(r|0)<0?-1:0,!0),n&&(bk[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=yk[r],o)?o:(t=_t(r,r<0?-1:0,!1),n&&(yk[r]=t),t))}Tt.fromInt=zu;function Qo(r,e){if(isNaN(r))return e?Bu:Zo;if(e){if(r<0)return Bu;if(r>=Ik)return Nk}else{if(r<=-wk)return qr;if(r+1>=wk)return kk}return r<0?Qo(-r,e).neg():_t(r%ol|0,r/ol|0,e)}Tt.fromNumber=Qo;function _t(r,e,t){return new Tt(r,e,t)}Tt.fromBits=_t;var ud=Math.pow;function Iw(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return Zo;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return Iw(r.substring(1),e,t).neg();for(var n=Qo(ud(t,8)),s=Zo,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*ol+(this.low>>>0):this.high*ol+(this.low>>>0)};de.toString=function(e){if(e=e||10,e<2||36>>0,l=u.toString(e);if(a=p,a.isZero())return l+i;for(;l.length<6;)l=\"0\"+l;i=\"\"+l+i}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(qr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return jr(e)||(e=Ws(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(jr(e)||(e=Ws(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(qr)?qr:this.not().add(rl)};de.neg=de.negate;de.add=function(e){jr(e)||(e=Ws(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,l=0,c=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,c+=m>>>16,m&=65535,c+=o+i,l+=c>>>16,c&=65535,l+=t+a,l&=65535,_t(m<<16|d,l<<16|c,this.unsigned)};de.subtract=function(e){return jr(e)||(e=Ws(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return Zo;if(jr(e)||(e=Ws(e)),Yo){var t=Yo.mul(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}if(e.isZero())return Zo;if(this.eq(qr))return e.isOdd()?qr:Zo;if(e.eq(qr))return this.isOdd()?qr:Zo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(Sk)&&e.lt(Sk))return Qo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,l=e.low&65535,c=0,m=0,d=0,f=0;return f+=a*l,d+=f>>>16,f&=65535,d+=s*l,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*l,c+=m>>>16,m&=65535,m+=s*u,c+=m>>>16,m&=65535,m+=a*p,c+=m>>>16,m&=65535,c+=o*l+n*u+s*p+a*i,c&=65535,_t(d<<16|f,c<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(jr(e)||(e=Ws(e)),e.isZero())throw Error(\"division by zero\");if(Yo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?Yo.div_u:Yo.div_s)(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Bu:Zo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Bu;if(e.gt(this.shru(1)))return vk;s=Bu}else{if(this.eq(qr)){if(e.eq(rl)||e.eq(Sw))return qr;if(e.eq(qr))return rl;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(Zo)?e.isNegative()?rl:Sw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(qr))return this.unsigned?Bu:Zo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=Zo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:ud(2,i-48),u=Qo(o),l=u.mul(e);l.isNegative()||l.gt(n);)o-=p,u=Qo(o,this.unsigned),l=u.mul(e);u.isZero()&&(u=rl),s=s.add(u),n=n.sub(l)}return s};de.div=de.divide;de.modulo=function(e){if(jr(e)||(e=Ws(e)),Yo){var t=(this.unsigned?Yo.rem_u:Yo.rem_s)(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return _t(~this.low,~this.high,this.unsigned)};de.and=function(e){return jr(e)||(e=Ws(e)),_t(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return jr(e)||(e=Ws(e)),_t(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return jr(e)||(e=Ws(e)),_t(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return jr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?_t(this.low<>>32-e,this.unsigned):_t(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):_t(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(jr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return _t(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?_t(t,0,this.unsigned):_t(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?_t(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:_t(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};de.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};Tt.fromBytes=function(e,t,o){return o?Tt.fromBytesLE(e,t):Tt.fromBytesBE(e,t)};Tt.fromBytesLE=function(e,t){return new Tt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};Tt.fromBytesBE=function(e,t){return new Tt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var f1=jt(()=>{});var h1=jt(()=>{});var W2=jt((V2,tS)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var l=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=l-(p.c=l|0)},p.c=1,p.s0=u(\" \"),p.s1=u(\" \"),p.s2=u(\" \"),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),l=p&&p.state,c=u.next;return c.int32=function(){return u.next()*4294967296|0},c.double=function(){return c()+(c()*2097152|0)*11102230246251565e-32},c.quick=c,l&&(typeof l==\"object\"&&n(l,u),c.state=function(){return n(u,{})}),c}function a(){var i=4022871197,p=function(u){u=String(u);for(var l=0;l>>0,c-=i,c*=i,i=c>>>0,c-=i,i+=c*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(V2,typeof tS==\"object\"&&tS,typeof define==\"function\"&&define)});var G2=jt((U2,rS)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var l=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^l^l>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u==\"object\"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(U2,typeof rS==\"object\"&&rS,typeof define==\"function\"&&define)});var K2=jt((H2,oS)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var l=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(l^l<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u==\"object\"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(H2,typeof oS==\"object\"&&oS,typeof define==\"function\"&&define)});var j2=jt((q2,nS)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,l=i.i,c,m,d;return c=u[l],c^=c>>>7,m=c^c<<24,c=u[l+1&7],m^=c^c>>>10,c=u[l+3&7],m^=c^c>>>3,c=u[l+4&7],m^=c^c<<7,c=u[l+7&7],c=c^c<<13,m^=c^c<<9,u[l]=m,i.i=l+1&7,m};function p(u,l){var c,m,d=[];if(l===(l|0))m=d[0]=l;else for(l=\"\"+l,c=0;c0;--c)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(u.x&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(q2,typeof nS==\"object\"&&nS,typeof define==\"function\"&&define)});var Y2=jt((X2,sS)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,l=i.X,c=i.i,m,d;return i.w=u=u+1640531527|0,d=l[c+34&127],m=l[c=c+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=l[c]=d^m,i.i=c,d+(u^u>>>16)|0};function p(u,l){var c,m,d,f,h,g=[],x=128;for(l===(l|0)?(m=l,l=null):(l=l+\"\\0\",m=0,x=Math.max(x,l.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,c=g[f&127]^=m+h,d=c==0?d+1:0);for(d>=128&&(g[(l&&l.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],c=g[d=d+1&127],m^=m<<13,c^=c<<17,m^=m>>>15,c^=c>>>12,g[d]=m^c;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(u.X&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(X2,typeof sS==\"object\"&&sS,typeof define==\"function\"&&define)});var Z2=jt((Q2,aS)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var l=i.b,c=i.c,m=i.d,d=i.a;return l=l<<25^l>>>7^c,c=c-m|0,m=m<<24^m>>>8^d,d=d-l|0,i.b=l=l<<20^l>>>12^c,i.c=c=c-m|0,i.d=m<<16^c>>>16^d,i.a=d-l|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u==\"object\"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(Q2,typeof aS==\"object\"&&aS,typeof define==\"function\"&&define)});var J2=jt(()=>{});var tN=jt((eN,qd)=>{(function(r,e,t){var o=256,n=6,s=52,a=\"random\",i=t.pow(o,n),p=t.pow(2,s),u=p*2,l=o-1,c;function m(w,S,k){var T=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[w,b(e)]:w==null?x():w,3),T),R=new d(T),D=function(){for(var F=R.g(n),O=i,M=0;F=u;)F/=2,O/=2,M>>>=1;return(F+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(F,O,M,L){return L&&(L.S&&f(L,R),F.state=function(){return f(R,{})}),M?(t[a]=F,O):F})(D,E,\"global\"in S?S.global:this==t,S.state)}function d(w){var S,k=w.length,T=this,E=0,R=T.i=T.j=0,D=T.S=[];for(k||(w=[k++]);E{var Q6=W2(),Z6=G2(),J6=K2(),ej=j2(),tj=Y2(),rj=Z2(),Zu=tN();Zu.alea=Q6;Zu.xor128=Z6;Zu.xorwow=J6;Zu.xorshift7=ej;Zu.xor4096=tj;Zu.tychei=rj;rN.exports=Zu});var ev=jt(()=>{});var tv=jt(()=>{});var Iz=jt(()=>{});var vz=jt(()=>{});var kz=jt(()=>{});var Nz=jt((Jg,ov)=>{var rv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};function t(){return oe.buffer!=Ke&&Et(oe.buffer),mt}function o(){return oe.buffer!=Ke&&Et(oe.buffer),ut}function n(){return oe.buffer!=Ke&&Et(oe.buffer),gt}function s(){return oe.buffer!=Ke&&Et(oe.buffer),Ur}function a(){return oe.buffer!=Ke&&Et(oe.buffer),Bt}function i(){return oe.buffer!=Ke&&Et(oe.buffer),io}function p(){return oe.buffer!=Ke&&Et(oe.buffer),sr}var u=typeof e!=\"undefined\"?e:{},l,c;u.ready=new Promise(function(P,V){l=P,c=V});var m;typeof process!=\"undefined\"&&process.listeners&&(m={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var d=Object.assign({},u),f=[],h=\"./this.program\",g=(P,V)=>{throw V},x=typeof window==\"object\",b=typeof importScripts==\"function\",w=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",S=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function T(P){return u.locateFile?u.locateFile(P,k):k+P}var E,R,D,F;function O(P){if(P instanceof Du)return;j(\"exiting due to exception: \"+P)}if(w){var M=ev(),L=tv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",E=(V,pe)=>(V=zp(V)?new URL(V):L.normalize(V),M.readFileSync(V,pe?void 0:\"utf8\")),D=V=>{var pe=E(V,!0);return pe.buffer||(pe=new Uint8Array(pe)),pe},R=(V,pe,$e)=>{V=zp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):pe(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),f=process.argv.slice(2),process.on(\"uncaughtException\",function(V){if(!(V instanceof Du))throw V}),process.on(\"unhandledRejection\",function(V){throw V}),g=(V,pe)=>{if(cn())throw process.exitCode=V,pe;O(pe),process.exit(V)},u.inspect=function(){return\"[Emscripten Module object]\"};let P;try{P=Iz()}catch(V){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),V}global.Worker=P.Worker}else(x||b)&&(b?k=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(k=document.currentScript.src),typeof r!=\"undefined\"&&r&&(k=r),k.indexOf(\"blob:\")!==0?k=k.substr(0,k.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):k=\"\",w||(E=P=>{var V=new XMLHttpRequest;return V.open(\"GET\",P,!1),V.send(null),V.responseText},b&&(D=P=>{var V=new XMLHttpRequest;return V.open(\"GET\",P,!1),V.responseType=\"arraybuffer\",V.send(null),new Uint8Array(V.response)}),R=(P,V,pe)=>{var $e=new XMLHttpRequest;$e.open(\"GET\",P,!0),$e.responseType=\"arraybuffer\",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}pe()},$e.onerror=pe,$e.send(null)}),F=P=>document.title=P);w&&typeof performance==\"undefined\"&&(global.performance=vz().performance);var B=console.log.bind(console),z=console.warn.bind(console);w&&(B=P=>M.writeSync(1,P+`\n`),z=P=>M.writeSync(2,P+`\n`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&Ru(\"no native wasm support detected\");var oe,ue,me=!1,be;function _e(P,V){P||Ru(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(P,V,pe){V>>>=0;for(var $e=V+pe,Be=V;P[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&P.buffer&&ve)return ve.decode(P.buffer instanceof SharedArrayBuffer?P.slice(V,Be):P.subarray(V,Be));for(var Le=\"\";V>10,56320|co&1023)}}return Le}function Pe(P,V){return P>>>=0,P?Fe(o(),P,V):\"\"}function at(P,V,pe,$e){if(pe>>>=0,!($e>0))return 0;for(var Be=pe,Le=pe+$e-1,ge=0;ge=55296&&Ne<=57343){var Ot=P.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ot&1023}if(Ne<=127){if(pe>=Le)break;V[pe++>>>0]=Ne}else if(Ne<=2047){if(pe+1>=Le)break;V[pe++>>>0]=192|Ne>>6,V[pe++>>>0]=128|Ne&63}else if(Ne<=65535){if(pe+2>=Le)break;V[pe++>>>0]=224|Ne>>12,V[pe++>>>0]=128|Ne>>6&63,V[pe++>>>0]=128|Ne&63}else{if(pe+3>=Le)break;V[pe++>>>0]=240|Ne>>18,V[pe++>>>0]=128|Ne>>12&63,V[pe++>>>0]=128|Ne>>6&63,V[pe++>>>0]=128|Ne&63}}return V[pe>>>0]=0,pe-Be}function ct(P,V,pe){return at(P,o(),V,pe)}var Ke,mt,ut,gt,xt,Ur,Bt,io,sr;S&&(Ke=u.buffer);function Et(P){Ke=P,u.HEAP8=mt=new Int8Array(P),u.HEAP16=gt=new Int16Array(P),u.HEAP32=Ur=new Int32Array(P),u.HEAPU8=ut=new Uint8Array(P),u.HEAPU16=xt=new Uint16Array(P),u.HEAPU32=Bt=new Uint32Array(P),u.HEAPF32=io=new Float32Array(P),u.HEAPF64=sr=new Float64Array(P)}var ar=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ke=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:ar/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j(\"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\"),w&&j(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\"),Error(\"bad memory\");oe&&(Ke=oe.buffer),ar=Ke.byteLength,Et(Ke);var ir,uo=[],po=[],xr=[],ja=!1;function cn(){return ee}function ta(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)lc(u.preRun.shift());dc(uo)}function Zt(){ja=!0,!S&&dc(po)}function Xa(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)Zv(u.postRun.shift());dc(xr)}}function lc(P){uo.unshift(P)}function cc(P){po.unshift(P)}function Zv(P){xr.unshift(P)}var Pi=0,Bp=null,Ya=null;function Ay(P){Pi++,u.monitorRunDependencies&&u.monitorRunDependencies(Pi)}function Rm(P){if(Pi--,u.monitorRunDependencies&&u.monitorRunDependencies(Pi),Pi==0&&(Bp!==null&&(clearInterval(Bp),Bp=null),Ya)){var V=Ya;Ya=null,V()}}function Ru(P){u.onAbort&&u.onAbort(P),P=\"Aborted(\"+P+\")\",j(P),me=!0,be=1,P+=\". Build with -sASSERTIONS for more info.\";var V=new WebAssembly.RuntimeError(P);throw c(V),V}var Fy=\"data:application/octet-stream;base64,\";function Dm(P){return P.startsWith(Fy)}function zp(P){return P.startsWith(\"file://\")}var yr;yr=\"tfjs-backend-wasm-threaded-simd.wasm\",Dm(yr)||(yr=T(yr));function Am(P){try{if(P==yr&&ne)return new Uint8Array(ne);if(D)return D(P);throw\"both async and sync fetching of the wasm failed\"}catch(V){Ru(V)}}function Py(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!zp(yr))return fetch(yr,{credentials:\"same-origin\"}).then(function(P){if(!P.ok)throw\"failed to load wasm binary file at '\"+yr+\"'\";return P.arrayBuffer()}).catch(function(){return Am(yr)});if(R)return new Promise(function(P,V){R(yr,function(pe){P(new Uint8Array(pe))},V)})}return Promise.resolve().then(function(){return Am(yr)})}function Oy(){var P={env:Km,wasi_snapshot_preview1:Km};function V(ge,Ne){var Ot=ge.exports;if(u.asm=Ot,Hy(u.asm._emscripten_tls_init),ir=u.asm.__indirect_function_table,cc(u.asm.__wasm_call_ctors),ue=Ne,!S){var co=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Za){Me.loadWasmModuleToWorker(Za,function(){--co||Rm(\"wasm-instantiate\")})})}}S||Ay(\"wasm-instantiate\");function pe(ge){V(ge.instance,ge.module)}function $e(ge){return Py().then(function(Ne){return WebAssembly.instantiate(Ne,P)}).then(function(Ne){return Ne}).then(ge,function(Ne){j(\"failed to asynchronously prepare wasm: \"+Ne),Ru(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Dm(yr)&&!zp(yr)&&!w&&typeof fetch==\"function\"?fetch(yr,{credentials:\"same-origin\"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,P);return Ne.then(pe,function(Ot){return j(\"wasm streaming compile failed: \"+Ot),j(\"falling back to ArrayBuffer instantiation\"),$e(pe)})}):$e(pe)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(P,V);return Le}catch(ge){j(\"Module.instantiateWasm callback failed with error: \"+ge),c(ge)}return Be().catch(c),{}}var Jv,ek,Fm={};function Du(P){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+P+\")\",this.status=P}function My(P){var V=Me.pthreads[P];delete Me.pthreads[P],V.terminate(),iw(P),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function Ly(P){var V=Me.pthreads[P];V.postMessage({cmd:\"cancel\"})}function mc(P){var V=Me.pthreads[P];_e(V),Me.returnWorkerToPool(V)}function By(P){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[P.pthread_ptr]=V,V.pthread_ptr=P.pthread_ptr;var pe={cmd:\"run\",start_routine:P.startRoutine,arg:P.arg,pthread_ptr:P.pthread_ptr};return V.runPthread=()=>{w&&V.ref(),V.postMessage(pe,P.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var Pm={varargs:void 0,get:function(){Pm.varargs+=4;var P=s()[Pm.varargs-4>>>2];return P},getStr:function(P){var V=Pe(P);return V}};function Om(P){if(S)return Oi(1,1,P);be=P,cn()||(Me.terminateAllThreads(),u.onExit&&u.onExit(P),me=!0),g(P,new Du(P))}function zy(P,V){if(be=P,!V&&S)throw Lm(P),\"unwind\";Om(P)}var Mm=zy;function Vy(P){if(P instanceof Du||P==\"unwind\")return be;g(1,P)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var P=8;P--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(P){be=P},terminateAllThreads:function(){for(var P of Object.values(Me.pthreads))Me.returnWorkerToPool(P);for(var P of Me.unusedWorkers)P.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(P){var V=P.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(P),Me.runningWorkers.splice(Me.runningWorkers.indexOf(P),1),P.pthread_ptr=0,w&&P.unref(),iw(V)},receiveObjectTransfer:function(P){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(P=>P())},loadWasmModuleToWorker:function(P,V){P.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(P.pthread_ptr&&(Me.currentProxiedOperationCallerThread=P.pthread_ptr),ge.targetThread&&ge.targetThread!=Zm()){var Ot=Me.pthreads[ge.targetThread];Ot?Ot.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message \"'+Ne+'\" to target pthread '+ge.targetThread+\", but that thread no longer exists!\"),Me.currentProxiedOperationCallerThread=void 0;return}Ne===\"processProxyingQueue\"?fc(ge.queue):Ne===\"spawnThread\"?By(ge):Ne===\"cleanupThread\"?mc(ge.thread):Ne===\"killThread\"?My(ge.thread):Ne===\"cancelThread\"?Ly(ge.thread):Ne===\"loaded\"?(P.loaded=!0,w&&P.unref(),V&&V(P),P.runPthread&&P.runPthread()):Ne===\"print\"?U(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"printErr\"?j(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"alert\"?alert(\"Thread \"+ge.threadId+\": \"+ge.text):ge.target===\"setimmediate\"?P.postMessage(ge):Ne===\"callHandler\"?u[ge.handler](...ge.args):Ne&&j(\"worker sent an unknown command \"+Ne),Me.currentProxiedOperationCallerThread=void 0},P.onerror=Le=>{var ge=\"worker sent an error!\";throw j(ge+\" \"+Le.filename+\":\"+Le.lineno+\": \"+Le.message),Le},w&&(P.on(\"message\",function(Le){P.onmessage({data:Le})}),P.on(\"error\",function(Le){P.onerror(Le)}),P.on(\"detachedExit\",function(){}));var pe=[],$e=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of $e)u.hasOwnProperty(Be)&&pe.push(Be);P.postMessage({cmd:\"load\",handlers:pe,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ue})},allocateUnusedWorker:function(){var P,V=T(\"tfjs-backend-wasm-threaded-simd.worker.js\");P=new Worker(V),Me.unusedWorkers.push(P)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function dc(P){for(;P.length>0;)P.shift()(u)}function Wy(){var P=Zm(),V=s()[P+52>>>2],pe=s()[P+56>>>2],$e=V-pe;ak(V,$e),Jm(V)}u.establishStackSpace=Wy;function Lm(P){if(S)return Oi(2,0,P);try{Mm(P)}catch(V){Vy(V)}}var Vp=[];function Uy(P){var V=Vp[P];return V||(P>=Vp.length&&(Vp.length=P+1),Vp[P]=V=ir.get(P)),V}function Gy(P,V){var pe=Uy(P)(V);cn()?Me.setExitStatus(pe):sk(pe)}u.invokeEntryPoint=Gy;function Hy(P){Me.tlsInitFunctions.push(P)}function Ky(P){rk(P,!b,1,!x),Me.threadInitTLS()}function qy(P){S?postMessage({cmd:\"cleanupThread\",thread:P}):mc(P)}function Bm(P,V,pe,$e){return S?Oi(3,1,P,V,pe,$e):zm(P,V,pe,$e)}function zm(P,V,pe,$e){if(typeof SharedArrayBuffer==\"undefined\")return j(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Bm(P,V,pe,$e);if(Le)return Le;var ge={startRoutine:pe,pthread_ptr:P,arg:$e,transferList:Be};return S?(ge.cmd=\"spawnThread\",postMessage(ge,Be),0):By(ge)}function jy(){return 65536}var Xy=!0;function Yy(){return Xy}function fc(P){Atomics.store(s(),P>>2,1),Zm()&&nk(P),Atomics.compareExchange(s(),P>>2,1,0)}u.executeNotifiedProxyingQueue=fc;function Qy(P,V,pe,$e){if(P==V)setTimeout(()=>fc($e));else if(S)postMessage({targetThread:P,cmd:\"processProxyingQueue\",queue:$e});else{var Be=Me.pthreads[P];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:$e})}return 1}function Zy(P,V,pe){return-1}function Jy(){Ru(\"\")}function Au(P){Au.shown||(Au.shown={}),Au.shown[P]||(Au.shown[P]=1,w&&(P=\"warning: \"+P),j(P))}function eb(){w||b||Au(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function tb(){return Date.now()}function Vm(){return 4294901760}function rb(){return Vm()}var hc;w?hc=()=>{var P=process.hrtime();return P[0]*1e3+P[1]/1e6}:hc=()=>performance.timeOrigin+performance.now();function ob(P,V,pe){o().copyWithin(P>>>0,V>>>0,V+pe>>>0)}function nb(){return w?kz().cpus().length:navigator.hardwareConcurrency}function sb(P){var V=uw(),pe=P();return Jm(V),pe}function Oi(P,V){var pe=arguments.length-2,$e=arguments;return sb(()=>{for(var Be=pe,Le=ed(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ot}return ok(P,Be,Le,V)})}var gc=[];function ab(P,V,pe){gc.length=V;for(var $e=pe>>3,Be=0;Be>>0];var Le=P<0,ge=Le?Fm[-P-1]:hb[P];return ge.apply(null,gc)}function ib(P){try{return oe.grow(P-Ke.byteLength+65535>>>16),Et(oe.buffer),1}catch(V){}}function ub(P){var V=o().length;if(P=P>>>0,P<=V)return!1;var pe=Vm();if(P>pe)return!1;let $e=(Ot,co)=>Ot+(co-Ot%co)%co;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,P+100663296);var ge=Math.min(pe,$e(Math.max(P,Le),65536)),Ne=ib(ge);if(Ne)return!0}return!1}function pb(){throw\"unwind\"}function Wm(P){return S?Oi(4,1,P):52}function Um(P,V,pe,$e,Be){return S?Oi(5,1,P,V,pe,$e,Be):70}var lb=[null,[],[]];function cb(P,V){var pe=lb[P];V===0||V===10?((P===1?U:j)(Fe(pe,0)),pe.length=0):pe.push(V)}function Gm(P,V,pe,$e){if(S)return Oi(6,1,P,V,pe,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ot=0;Ot>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Hm(P){var V=u[\"_\"+P];return V}function mb(P,V){t().set(P,V>>>0)}function db(P,V,pe,$e,Be){var Le={string:Gr=>{var Hp=0;if(Gr!=null&&Gr!==0){var pk=(Gr.length<<2)+1;Hp=ed(pk),ct(Gr,Hp,pk)}return Hp},array:Gr=>{var Hp=ed(Gr.length);return mb(Gr,Hp),Hp}};function ge(Gr){return V===\"string\"?Pe(Gr):V===\"boolean\"?!!Gr:Gr}var Ne=Hm(P),Ot=[],co=0;if($e)for(var Za=0;Za<$e.length;Za++){var uk=Le[pe[Za]];uk?(co===0&&(co=uw()),Ot[Za]=uk($e[Za])):Ot[Za]=$e[Za]}var pw=Ne.apply(null,Ot);function K4(Gr){return co!==0&&Jm(co),ge(Gr)}return pw=K4(pw),pw}function fb(P,V,pe,$e){pe=pe||[];var Be=pe.every(ge=>ge===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!$e?Hm(P):function(){return db(P,V,pe,arguments,$e)}}Me.init();var hb=[null,Om,Lm,Bm,Wm,Um,Gm],Km={__emscripten_init_main_thread_js:Ky,__emscripten_thread_cleanup:qy,__pthread_create_js:zm,_emscripten_default_pthread_stack_size:jy,_emscripten_get_now_is_monotonic:Yy,_emscripten_notify_task_queue:Qy,_emscripten_set_offscreencanvas_size:Zy,abort:Jy,emscripten_check_blocking_allowed:eb,emscripten_date_now:tb,emscripten_get_heap_max:rb,emscripten_get_now:hc,emscripten_memcpy_big:ob,emscripten_num_logical_cores:nb,emscripten_receive_on_main_thread_js:ab,emscripten_resize_heap:ub,emscripten_unwind_to_js_event_loop:pb,exit:Mm,fd_close:Wm,fd_seek:Um,fd_write:Gm,memory:oe||u.wasmMemory},tk=Oy(),gb=u.___wasm_call_ctors=function(){return(gb=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},xb=u._init=function(){return(xb=u._init=u.asm.init).apply(null,arguments)},yb=u._init_with_threads_count=function(){return(yb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},bb=u._get_threads_count=function(){return(bb=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},Cb=u._register_tensor=function(){return(Cb=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},wb=u._dispose_data=function(){return(wb=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},Sb=u._dispose=function(){return(Sb=u._dispose=u.asm.dispose).apply(null,arguments)},Ib=u._Abs=function(){return(Ib=u._Abs=u.asm.Abs).apply(null,arguments)},vb=u._Acos=function(){return(vb=u._Acos=u.asm.Acos).apply(null,arguments)},kb=u._Acosh=function(){return(kb=u._Acosh=u.asm.Acosh).apply(null,arguments)},Nb=u._Add=function(){return(Nb=u._Add=u.asm.Add).apply(null,arguments)},Tb=u._AddN=function(){return(Tb=u._AddN=u.asm.AddN).apply(null,arguments)},_b=u._All=function(){return(_b=u._All=u.asm.All).apply(null,arguments)},Eb=u._Any=function(){return(Eb=u._Any=u.asm.Any).apply(null,arguments)},$b=u._ArgMax=function(){return($b=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},Rb=u._ArgMin=function(){return(Rb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},Db=u._Asin=function(){return(Db=u._Asin=u.asm.Asin).apply(null,arguments)},Ab=u._Asinh=function(){return(Ab=u._Asinh=u.asm.Asinh).apply(null,arguments)},Fb=u._Atan=function(){return(Fb=u._Atan=u.asm.Atan).apply(null,arguments)},Pb=u._Atan2=function(){return(Pb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ob=u._Atanh=function(){return(Ob=u._Atanh=u.asm.Atanh).apply(null,arguments)},Mb=u._AvgPool=function(){return(Mb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},Lb=u._AvgPool3D=function(){return(Lb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Bb=u._AvgPool3DGrad=function(){return(Bb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},zb=u._AvgPoolGrad=function(){return(zb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},Vb=u._BatchMatMul=function(){return(Vb=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Wb=u._Bincount=function(){return(Wb=u._Bincount=u.asm.Bincount).apply(null,arguments)},Ub=u._BitwiseAnd=function(){return(Ub=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Gb=u._Ceil=function(){return(Gb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Hb=u._ClipByValue=function(){return(Hb=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Kb=u._Conv2D=function(){return(Kb=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},qb=u._Conv2DBackpropInput=function(){return(qb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},jb=u._Conv3D=function(){return(jb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Xb=u._Conv3DBackpropFilterV2=function(){return(Xb=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Yb=u._Conv3DBackpropInputV2=function(){return(Yb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Qb=u._Cos=function(){return(Qb=u._Cos=u.asm.Cos).apply(null,arguments)},Zb=u._Cosh=function(){return(Zb=u._Cosh=u.asm.Cosh).apply(null,arguments)},Jb=u._CropAndResize=function(){return(Jb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},eC=u._Cumprod=function(){return(eC=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},tC=u._Cumsum=function(){return(tC=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},rC=u._DenseBincount=function(){return(rC=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},oC=u._DepthToSpace=function(){return(oC=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},nC=u._DepthwiseConv2dNative=function(){return(nC=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},sC=u._Diag=function(){return(sC=u._Diag=u.asm.Diag).apply(null,arguments)},aC=u._Dilation2D=function(){return(aC=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},iC=u._Dilation2DBackpropFilter=function(){return(iC=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},uC=u._Dilation2DBackpropInput=function(){return(uC=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},pC=u._Elu=function(){return(pC=u._Elu=u.asm.Elu).apply(null,arguments)},lC=u._EluGrad=function(){return(lC=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},cC=u._Equal=function(){return(cC=u._Equal=u.asm.Equal).apply(null,arguments)},mC=u._Erf=function(){return(mC=u._Erf=u.asm.Erf).apply(null,arguments)},dC=u._Exp=function(){return(dC=u._Exp=u.asm.Exp).apply(null,arguments)},fC=u._Expm1=function(){return(fC=u._Expm1=u.asm.Expm1).apply(null,arguments)},hC=u._FlipLeftRight=function(){return(hC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},gC=u._Floor=function(){return(gC=u._Floor=u.asm.Floor).apply(null,arguments)},xC=u._FloorDiv=function(){return(xC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},yC=u._FusedBatchNorm=function(){return(yC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},bC=u._FusedConv2D=function(){return(bC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},CC=u._FusedDepthwiseConv2D=function(){return(CC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},wC=u._Gather=function(){return(wC=u._Gather=u.asm.Gather).apply(null,arguments)},SC=u._GatherNd=function(){return(SC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},IC=u._Greater=function(){return(IC=u._Greater=u.asm.Greater).apply(null,arguments)},vC=u._GreaterEqual=function(){return(vC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},kC=u._IsFinite=function(){return(kC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},NC=u._IsInf=function(){return(NC=u._IsInf=u.asm.IsInf).apply(null,arguments)},TC=u._IsNan=function(){return(TC=u._IsNan=u.asm.IsNan).apply(null,arguments)},_C=u._LRN=function(){return(_C=u._LRN=u.asm.LRN).apply(null,arguments)},EC=u._LRNGrad=function(){return(EC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},$C=u._LeakyRelu=function(){return($C=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},RC=u._Less=function(){return(RC=u._Less=u.asm.Less).apply(null,arguments)},DC=u._LessEqual=function(){return(DC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},AC=u._LinSpace=function(){return(AC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},FC=u._Log=function(){return(FC=u._Log=u.asm.Log).apply(null,arguments)},PC=u._Log1p=function(){return(PC=u._Log1p=u.asm.Log1p).apply(null,arguments)},OC=u._LogicalAnd=function(){return(OC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},MC=u._LogicalNot=function(){return(MC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},LC=u._LogicalOr=function(){return(LC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},BC=u._LogicalXor=function(){return(BC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},zC=u._Max=function(){return(zC=u._Max=u.asm.Max).apply(null,arguments)},VC=u._MaxPool=function(){return(VC=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},WC=u._MaxPool3D=function(){return(WC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},UC=u._MaxPool3DGrad=function(){return(UC=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},GC=u._MaxPoolGrad=function(){return(GC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},HC=u._MaxPoolWithArgmax=function(){return(HC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},KC=u._Maximum=function(){return(KC=u._Maximum=u.asm.Maximum).apply(null,arguments)},qC=u._Mean=function(){return(qC=u._Mean=u.asm.Mean).apply(null,arguments)},jC=u._Min=function(){return(jC=u._Min=u.asm.Min).apply(null,arguments)},XC=u._Minimum=function(){return(XC=u._Minimum=u.asm.Minimum).apply(null,arguments)},YC=u._MirrorPad=function(){return(YC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},QC=u._Mod=function(){return(QC=u._Mod=u.asm.Mod).apply(null,arguments)},ZC=u._Multinomial=function(){return(ZC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},JC=u._Multiply=function(){return(JC=u._Multiply=u.asm.Multiply).apply(null,arguments)},ew=u._Neg=function(){return(ew=u._Neg=u.asm.Neg).apply(null,arguments)},tw=u._NonMaxSuppressionV3=function(){return(tw=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},rw=u._NonMaxSuppressionV4=function(){return(rw=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},qm=u._NonMaxSuppressionV5=function(){return(qm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},jm=u._NotEqual=function(){return(jm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},xc=u._OneHot=function(){return(xc=u._OneHot=u.asm.OneHot).apply(null,arguments)},ow=u._PadV2=function(){return(ow=u._PadV2=u.asm.PadV2).apply(null,arguments)},nw=u._Pow=function(){return(nw=u._Pow=u.asm.Pow).apply(null,arguments)},Wp=u._Prelu=function(){return(Wp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Xm=u._Prod=function(){return(Xm=u._Prod=u.asm.Prod).apply(null,arguments)},Up=u._RealDiv=function(){return(Up=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Gp=u._Reciprocal=function(){return(Gp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},sw=u._Relu=function(){return(sw=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},it=u._ResizeNearestNeighbor=function(){return(it=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},$t=u._ResizeNearestNeighborGrad=function(){return($t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Rt=u._Reverse=function(){return(Rt=u._Reverse=u.asm.Reverse).apply(null,arguments)},Ze=u._RotateWithOffset=function(){return(Ze=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},je=u._Round=function(){return(je=u._Round=u.asm.Round).apply(null,arguments)},Ht=u._Rsqrt=function(){return(Ht=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},lo=u._ScatterNd=function(){return(lo=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Qa=u._SearchSorted=function(){return(Qa=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},Ym=u._SelectV2=function(){return(Ym=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},yc=u._Selu=function(){return(yc=u._Selu=u.asm.Selu).apply(null,arguments)},aw=u._Sigmoid=function(){return(aw=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},wr=u._Sign=function(){return(wr=u._Sign=u.asm.Sign).apply(null,arguments)},Mi=u._Sin=function(){return(Mi=u._Sin=u.asm.Sin).apply(null,arguments)},Qm=u._Sinh=function(){return(Qm=u._Sinh=u.asm.Sinh).apply(null,arguments)},f4=u._Softmax=function(){return(f4=u._Softmax=u.asm.Softmax).apply(null,arguments)},h4=u._Softplus=function(){return(h4=u._Softplus=u.asm.Softplus).apply(null,arguments)},g4=u._SparseFillEmptyRows=function(){return(g4=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},x4=u._SparseReshape=function(){return(x4=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},y4=u._SparseSegmentReduction=function(){return(y4=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},b4=u._SparseToDense=function(){return(b4=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},C4=u._Sqrt=function(){return(C4=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},w4=u._Square=function(){return(w4=u._Square=u.asm.Square).apply(null,arguments)},S4=u._SquaredDifference=function(){return(S4=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},I4=u._Step=function(){return(I4=u._Step=u.asm.Step).apply(null,arguments)},v4=u._StridedSlice=function(){return(v4=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},k4=u._Sub=function(){return(k4=u._Sub=u.asm.Sub).apply(null,arguments)},N4=u._Sum=function(){return(N4=u._Sum=u.asm.Sum).apply(null,arguments)},T4=u._Tan=function(){return(T4=u._Tan=u.asm.Tan).apply(null,arguments)},_4=u._Tanh=function(){return(_4=u._Tanh=u.asm.Tanh).apply(null,arguments)},E4=u._TensorScatterUpdate=function(){return(E4=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},$4=u._Tile=function(){return($4=u._Tile=u.asm.Tile).apply(null,arguments)},R4=u._TopK=function(){return(R4=u._TopK=u.asm.TopK).apply(null,arguments)},D4=u._Transform=function(){return(D4=u._Transform=u.asm.Transform).apply(null,arguments)},A4=u._Transpose=function(){return(A4=u._Transpose=u.asm.Transpose).apply(null,arguments)},F4=u.__FusedMatMul=function(){return(F4=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},P4=u._malloc=function(){return(P4=u._malloc=u.asm.malloc).apply(null,arguments)},O4=u._free=function(){return(O4=u._free=u.asm.free).apply(null,arguments)},M4=u.__emscripten_tls_init=function(){return(M4=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Zm=u._pthread_self=function(){return(Zm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},L4=u.___errno_location=function(){return(L4=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},rk=u.__emscripten_thread_init=function(){return(rk=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},B4=u.__emscripten_thread_crashed=function(){return(B4=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},z4=u._emscripten_main_thread_process_queued_calls=function(){return(z4=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},V4=u._emscripten_main_browser_thread_id=function(){return(V4=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},ok=u._emscripten_run_in_main_runtime_thread_js=function(){return(ok=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},W4=u._emscripten_dispatch_to_thread_=function(){return(W4=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},nk=u.__emscripten_proxy_execute_task_queue=function(){return(nk=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},iw=u.__emscripten_thread_free_data=function(){return(iw=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},sk=u.__emscripten_thread_exit=function(){return(sk=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},ak=u._emscripten_stack_set_limits=function(){return(ak=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},uw=u.stackSave=function(){return(uw=u.stackSave=u.asm.stackSave).apply(null,arguments)},Jm=u.stackRestore=function(){return(Jm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},ed=u.stackAlloc=function(){return(ed=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},U4=u.dynCall_iijjiiii=function(){return(U4=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},G4=u.dynCall_jiji=function(){return(G4=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=cn,u.wasmMemory=oe,u.cwrap=fb,u.ExitStatus=Du,u.PThread=Me;var td;Ya=function P(){td||ik(),td||(Ya=P)};function ik(P){if(P=P||f,Pi>0)return;if(S){l(u),Zt(),startWorker(u);return}if(ta(),Pi>0)return;function V(){td||(td=!0,u.calledRun=!0,!me&&(Zt(),l(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Xa()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();ik();var rd;m&&(rd={uncaughtException:process.listeners(\"uncaughtException\").filter(function(P){return!m.uncaughtException.indexOf(P)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(P){return!m.unhandledRejection.indexOf(P)>-1})});var od;if(typeof WasmBackendModule!=\"undefined\")od=WasmBackendModule;else if(typeof e!=\"undefined\")od=e;else throw new Error(\"Could not find wasm module in post.js\");if(rd){var H4=od._dispose;od._dispose=function(){H4(),rd.uncaughtException.forEach(function(P){process.removeListener(\"uncaughtException\",P)}),rd.unhandledRejection.forEach(function(P){process.removeListener(\"unhandledRejection\",P)})}}return e.ready}})();typeof Jg==\"object\"&&typeof ov==\"object\"?ov.exports=rv:typeof define==\"function\"&&define.amd?define([],function(){return rv}):typeof Jg==\"object\"&&(Jg.WasmBackendModuleThreadedSimd=rv)});var _z=jt((EPt,Tz)=>{Tz.exports.wasmWorkerContents=`\"use strict\";var Module={};var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require(\"worker_threads\");var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",data=>onmessage({data:data}));var fs=require(\"fs\");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,\"utf8\")+\"//# sourceURL=\"+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+\"\n\");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:Module[\"_pthread_self\"]()})}var err=threadPrintErr;self.alert=threadAlert;Module[\"instantiateWasm\"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);receiveInstance(instance);Module[\"wasmModule\"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({\"cmd\":\"loaded\"})};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:\"callHandler\",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd===\"run\"){Module[\"__emscripten_thread_init\"](e.data.pthread_ptr,0,0,1);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module[\"executeNotifiedProxyingQueue\"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module[\"invokeEntryPoint\"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!=\"unwind\"){if(ex instanceof Module[\"ExitStatus\"]){if(Module[\"keepRuntimeAlive\"]()){}else{Module[\"__emscripten_thread_exit\"](ex.status)}}else{throw ex}}}}else if(e.data.cmd===\"cancel\"){if(Module[\"_pthread_self\"]()){Module[\"__emscripten_thread_exit\"](-1)}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processProxyingQueue\"){if(initializedJS){Module[\"executeNotifiedProxyingQueue\"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){if(Module[\"__emscripten_thread_crashed\"]){Module[\"__emscripten_thread_crashed\"]()}throw ex}};`});var Ez=jt((ex,sv)=>{var nv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!=\"undefined\"?e:{},o,n;t.ready=new Promise(function(K,ae){o=K,n=ae});var s;typeof process!=\"undefined\"&&process.listeners&&(s={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var a=Object.assign({},t),i=[],p=\"./this.program\",u=(K,ae)=>{throw ae},l=typeof window==\"object\",c=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",d=\"\";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function w(K){if(K instanceof Bp)return;E(\"exiting due to exception: \"+K)}if(m){var S=ev(),k=tv();c?d=k.dirname(d)+\"/\":d=__dirname+\"/\",h=(K,ae)=>(K=ta(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:\"utf8\")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=ta(K)?new URL(K):k.normalize(K),S.readFile(K,function(it,$t){it?Ee(it):ae($t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(K){if(!(K instanceof Bp))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(ut())throw process.exitCode=K,ae;w(ae),process.exit(K)},t.inspect=function(){return\"[Emscripten Module object]\"}}else(l||c)&&(c?d=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf(\"blob:\")!==0?d=d.substr(0,d.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):d=\"\",h=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.send(null),ae.responseText},c&&(x=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.responseType=\"arraybuffer\",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var it=new XMLHttpRequest;it.open(\"GET\",K,!0),it.responseType=\"arraybuffer\",it.onload=()=>{if(it.status==200||it.status==0&&it.response){ae(it.response);return}Ee()},it.onerror=Ee,it.send(null)},b=K=>document.title=K);var T=t.print||console.log.bind(console),E=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,D;t.wasmBinary&&(D=t.wasmBinary);var F=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&xr(\"no native wasm support detected\");var O,M=!1,L;function B(K,ae){K||xr(ae)}var z=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(K,ae,Ee){ae>>>=0;for(var it=ae+Ee,$t=ae;K[$t]&&!($t>=it);)++$t;if($t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,$t));for(var Rt=\"\";ae<$t;){var Ze=K[ae++];if(!(Ze&128)){Rt+=String.fromCharCode(Ze);continue}var je=K[ae++]&63;if((Ze&224)==192){Rt+=String.fromCharCode((Ze&31)<<6|je);continue}var Ht=K[ae++]&63;if((Ze&240)==224?Ze=(Ze&15)<<12|je<<6|Ht:Ze=(Ze&7)<<18|je<<12|Ht<<6|K[ae++]&63,Ze<65536)Rt+=String.fromCharCode(Ze);else{var lo=Ze-65536;Rt+=String.fromCharCode(55296|lo>>10,56320|lo&1023)}}return Rt}function j(K,ae){return K>>>=0,K?U(ne,K,ae):\"\"}function q(K,ae,Ee,it){if(Ee>>>=0,!(it>0))return 0;for(var $t=Ee,Rt=Ee+it-1,Ze=0;Ze=55296&&je<=57343){var Ht=K.charCodeAt(++Ze);je=65536+((je&1023)<<10)|Ht&1023}if(je<=127){if(Ee>=Rt)break;ae[Ee++>>>0]=je}else if(je<=2047){if(Ee+1>=Rt)break;ae[Ee++>>>0]=192|je>>6,ae[Ee++>>>0]=128|je&63}else if(je<=65535){if(Ee+2>=Rt)break;ae[Ee++>>>0]=224|je>>12,ae[Ee++>>>0]=128|je>>6&63,ae[Ee++>>>0]=128|je&63}else{if(Ee+3>=Rt)break;ae[Ee++>>>0]=240|je>>18,ae[Ee++>>>0]=128|je>>12&63,ae[Ee++>>>0]=128|je>>6&63,ae[Ee++>>>0]=128|je&63}}return ae[Ee>>>0]=0,Ee-$t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ue,me,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ue=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=me=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,at=[],ct=[],Ke=[],mt=!1;function ut(){return F}function gt(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Bt(t.preRun.shift());Ya(at)}function xt(){mt=!0,Ya(ct)}function Ur(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)sr(t.postRun.shift());Ya(Ke)}function Bt(K){at.unshift(K)}function io(K){ct.unshift(K)}function sr(K){Ke.unshift(K)}var Et=0,ar=null,ir=null;function uo(K){Et++,t.monitorRunDependencies&&t.monitorRunDependencies(Et)}function po(K){if(Et--,t.monitorRunDependencies&&t.monitorRunDependencies(Et),Et==0&&(ar!==null&&(clearInterval(ar),ar=null),ir)){var ae=ir;ir=null,ae()}}function xr(K){t.onAbort&&t.onAbort(K),K=\"Aborted(\"+K+\")\",E(K),M=!0,L=1,K+=\". Build with -sASSERTIONS for more info.\";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var ja=\"data:application/octet-stream;base64,\";function cn(K){return K.startsWith(ja)}function ta(K){return K.startsWith(\"file://\")}var Zt;Zt=\"tfjs-backend-wasm.wasm\",cn(Zt)||(Zt=f(Zt));function Xa(K){try{if(K==Zt&&D)return new Uint8Array(D);if(x)return x(K);throw\"both async and sync fetching of the wasm failed\"}catch(ae){xr(ae)}}function lc(){if(!D&&(l||c)){if(typeof fetch==\"function\"&&!ta(Zt))return fetch(Zt,{credentials:\"same-origin\"}).then(function(K){if(!K.ok)throw\"failed to load wasm binary file at '\"+Zt+\"'\";return K.arrayBuffer()}).catch(function(){return Xa(Zt)});if(g)return new Promise(function(K,ae){g(Zt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Xa(Zt)})}function cc(){var K={env:mc,wasi_snapshot_preview1:mc};function ae(Ze,je){var Ht=Ze.exports;t.asm=Ht,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,io(t.asm.__wasm_call_ctors),po(\"wasm-instantiate\")}uo(\"wasm-instantiate\");function Ee(Ze){ae(Ze.instance)}function it(Ze){return lc().then(function(je){return WebAssembly.instantiate(je,K)}).then(function(je){return je}).then(Ze,function(je){E(\"failed to asynchronously prepare wasm: \"+je),xr(je)})}function $t(){return!D&&typeof WebAssembly.instantiateStreaming==\"function\"&&!cn(Zt)&&!ta(Zt)&&!m&&typeof fetch==\"function\"?fetch(Zt,{credentials:\"same-origin\"}).then(function(Ze){var je=WebAssembly.instantiateStreaming(Ze,K);return je.then(Ee,function(Ht){return E(\"wasm streaming compile failed: \"+Ht),E(\"falling back to ArrayBuffer instantiation\"),it(Ee)})}):it(Ee)}if(t.instantiateWasm)try{var Rt=t.instantiateWasm(K,ae);return Rt}catch(Ze){E(\"Module.instantiateWasm callback failed with error: \"+Ze),n(Ze)}return $t().catch(n),{}}var Zv,Pi;function Bp(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ya(K){for(;K.length>0;)K.shift()(t)}function Ay(){xr(\"\")}function Rm(){return 4294901760}function Ru(){return Rm()}function Fy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Dm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function zp(K){var ae=ne.length;K=K>>>0;var Ee=Rm();if(K>Ee)return!1;let it=(Ht,lo)=>Ht+(lo-Ht%lo)%lo;for(var $t=1;$t<=4;$t*=2){var Rt=ae*(1+.2/$t);Rt=Math.min(Rt,K+100663296);var Ze=Math.min(Ee,it(Math.max(K,Rt),65536)),je=Dm(Ze);if(je)return!0}return!1}var yr={varargs:void 0,get:function(){yr.varargs+=4;var K=ue[yr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Am(K){return 52}function Py(K,ae,Ee,it,$t){return 70}var Oy=[null,[],[]];function Jv(K,ae){var Ee=Oy[K];ae===0||ae===10?((K===1?T:E)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function ek(K,ae,Ee,it){for(var $t=0,Rt=0;Rt>>2],je=me[ae+4>>>2];ae+=8;for(var Ht=0;Ht>>0]);$t+=je}return me[it>>>2]=$t,0}function Fm(K){var ae=t[\"_\"+K];return ae}function Du(K,ae){re.set(K,ae>>>0)}function My(K,ae,Ee,it,$t){var Rt={string:wr=>{var Mi=0;if(wr!=null&&wr!==0){var Qm=(wr.length<<2)+1;Mi=xc(Qm),Y(wr,Mi,Qm)}return Mi},array:wr=>{var Mi=xc(wr.length);return Du(wr,Mi),Mi}};function Ze(wr){return ae===\"string\"?j(wr):ae===\"boolean\"?!!wr:wr}var je=Fm(K),Ht=[],lo=0;if(it)for(var Qa=0;QaZe===\"number\"||Ze===\"boolean\"),Rt=ae!==\"string\";return Rt&&$t&&!it?Fm(K):function(){return My(K,ae,Ee,arguments,it)}}var mc={abort:Ay,emscripten_get_heap_max:Ru,emscripten_memcpy_big:Fy,emscripten_resize_heap:zp,fd_close:Am,fd_seek:Py,fd_write:ek},By=cc(),Pm=t.___wasm_call_ctors=function(){return(Pm=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Om=t._init=function(){return(Om=t._init=t.asm.init).apply(null,arguments)},zy=t._init_with_threads_count=function(){return(zy=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Mm=t._get_threads_count=function(){return(Mm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Vy=t._register_tensor=function(){return(Vy=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},dc=t._dispose=function(){return(dc=t._dispose=t.asm.dispose).apply(null,arguments)},Wy=t._Abs=function(){return(Wy=t._Abs=t.asm.Abs).apply(null,arguments)},Lm=t._Acos=function(){return(Lm=t._Acos=t.asm.Acos).apply(null,arguments)},Vp=t._Acosh=function(){return(Vp=t._Acosh=t.asm.Acosh).apply(null,arguments)},Uy=t._Add=function(){return(Uy=t._Add=t.asm.Add).apply(null,arguments)},Gy=t._AddN=function(){return(Gy=t._AddN=t.asm.AddN).apply(null,arguments)},Hy=t._All=function(){return(Hy=t._All=t.asm.All).apply(null,arguments)},Ky=t._Any=function(){return(Ky=t._Any=t.asm.Any).apply(null,arguments)},qy=t._ArgMax=function(){return(qy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Bm=t._ArgMin=function(){return(Bm=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},zm=t._Asin=function(){return(zm=t._Asin=t.asm.Asin).apply(null,arguments)},jy=t._Asinh=function(){return(jy=t._Asinh=t.asm.Asinh).apply(null,arguments)},Xy=t._Atan=function(){return(Xy=t._Atan=t.asm.Atan).apply(null,arguments)},Yy=t._Atan2=function(){return(Yy=t._Atan2=t.asm.Atan2).apply(null,arguments)},fc=t._Atanh=function(){return(fc=t._Atanh=t.asm.Atanh).apply(null,arguments)},Qy=t._AvgPool=function(){return(Qy=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Zy=t._AvgPool3D=function(){return(Zy=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},Jy=t._AvgPool3DGrad=function(){return(Jy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Au=t._AvgPoolGrad=function(){return(Au=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},eb=t._BatchMatMul=function(){return(eb=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},tb=t._Bincount=function(){return(tb=t._Bincount=t.asm.Bincount).apply(null,arguments)},Vm=t._BitwiseAnd=function(){return(Vm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},rb=t._Ceil=function(){return(rb=t._Ceil=t.asm.Ceil).apply(null,arguments)},hc=t._ClipByValue=function(){return(hc=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},ob=t._Conv2D=function(){return(ob=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},nb=t._Conv2DBackpropInput=function(){return(nb=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},sb=t._Conv3D=function(){return(sb=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Oi=t._Conv3DBackpropFilterV2=function(){return(Oi=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},gc=t._Conv3DBackpropInputV2=function(){return(gc=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},ab=t._Cos=function(){return(ab=t._Cos=t.asm.Cos).apply(null,arguments)},ib=t._Cosh=function(){return(ib=t._Cosh=t.asm.Cosh).apply(null,arguments)},ub=t._CropAndResize=function(){return(ub=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},pb=t._Cumprod=function(){return(pb=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Wm=t._Cumsum=function(){return(Wm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Um=t._DenseBincount=function(){return(Um=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},lb=t._DepthToSpace=function(){return(lb=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},cb=t._DepthwiseConv2dNative=function(){return(cb=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Gm=t._Diag=function(){return(Gm=t._Diag=t.asm.Diag).apply(null,arguments)},Hm=t._Dilation2D=function(){return(Hm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},mb=t._Dilation2DBackpropFilter=function(){return(mb=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},db=t._Dilation2DBackpropInput=function(){return(db=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},fb=t._Elu=function(){return(fb=t._Elu=t.asm.Elu).apply(null,arguments)},hb=t._EluGrad=function(){return(hb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Km=t._Equal=function(){return(Km=t._Equal=t.asm.Equal).apply(null,arguments)},tk=t._Erf=function(){return(tk=t._Erf=t.asm.Erf).apply(null,arguments)},gb=t._Exp=function(){return(gb=t._Exp=t.asm.Exp).apply(null,arguments)},xb=t._Expm1=function(){return(xb=t._Expm1=t.asm.Expm1).apply(null,arguments)},yb=t._FlipLeftRight=function(){return(yb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},bb=t._Floor=function(){return(bb=t._Floor=t.asm.Floor).apply(null,arguments)},Cb=t._FloorDiv=function(){return(Cb=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},wb=t._FusedBatchNorm=function(){return(wb=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},Sb=t._FusedConv2D=function(){return(Sb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Ib=t._FusedDepthwiseConv2D=function(){return(Ib=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},vb=t._Gather=function(){return(vb=t._Gather=t.asm.Gather).apply(null,arguments)},kb=t._GatherNd=function(){return(kb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},Nb=t._Greater=function(){return(Nb=t._Greater=t.asm.Greater).apply(null,arguments)},Tb=t._GreaterEqual=function(){return(Tb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},_b=t._IsFinite=function(){return(_b=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},Eb=t._IsInf=function(){return(Eb=t._IsInf=t.asm.IsInf).apply(null,arguments)},$b=t._IsNan=function(){return($b=t._IsNan=t.asm.IsNan).apply(null,arguments)},Rb=t._LRN=function(){return(Rb=t._LRN=t.asm.LRN).apply(null,arguments)},Db=t._LRNGrad=function(){return(Db=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Ab=t._LeakyRelu=function(){return(Ab=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},Fb=t._Less=function(){return(Fb=t._Less=t.asm.Less).apply(null,arguments)},Pb=t._LessEqual=function(){return(Pb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ob=t._LinSpace=function(){return(Ob=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},Mb=t._Log=function(){return(Mb=t._Log=t.asm.Log).apply(null,arguments)},Lb=t._Log1p=function(){return(Lb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Bb=t._LogicalAnd=function(){return(Bb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},zb=t._LogicalNot=function(){return(zb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},Vb=t._LogicalOr=function(){return(Vb=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Wb=t._LogicalXor=function(){return(Wb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},Ub=t._Max=function(){return(Ub=t._Max=t.asm.Max).apply(null,arguments)},Gb=t._MaxPool=function(){return(Gb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Hb=t._MaxPool3D=function(){return(Hb=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Kb=t._MaxPool3DGrad=function(){return(Kb=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},qb=t._MaxPoolGrad=function(){return(qb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},jb=t._MaxPoolWithArgmax=function(){return(jb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Xb=t._Maximum=function(){return(Xb=t._Maximum=t.asm.Maximum).apply(null,arguments)},Yb=t._Mean=function(){return(Yb=t._Mean=t.asm.Mean).apply(null,arguments)},Qb=t._Min=function(){return(Qb=t._Min=t.asm.Min).apply(null,arguments)},Zb=t._Minimum=function(){return(Zb=t._Minimum=t.asm.Minimum).apply(null,arguments)},Jb=t._MirrorPad=function(){return(Jb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},eC=t._Mod=function(){return(eC=t._Mod=t.asm.Mod).apply(null,arguments)},tC=t._Multinomial=function(){return(tC=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},rC=t._Multiply=function(){return(rC=t._Multiply=t.asm.Multiply).apply(null,arguments)},oC=t._Neg=function(){return(oC=t._Neg=t.asm.Neg).apply(null,arguments)},nC=t._NonMaxSuppressionV3=function(){return(nC=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},sC=t._NonMaxSuppressionV4=function(){return(sC=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},aC=t._NonMaxSuppressionV5=function(){return(aC=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},iC=t._NotEqual=function(){return(iC=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},uC=t._OneHot=function(){return(uC=t._OneHot=t.asm.OneHot).apply(null,arguments)},pC=t._PadV2=function(){return(pC=t._PadV2=t.asm.PadV2).apply(null,arguments)},lC=t._Pow=function(){return(lC=t._Pow=t.asm.Pow).apply(null,arguments)},cC=t._Prelu=function(){return(cC=t._Prelu=t.asm.Prelu).apply(null,arguments)},mC=t._Prod=function(){return(mC=t._Prod=t.asm.Prod).apply(null,arguments)},dC=t._RealDiv=function(){return(dC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},fC=t._Reciprocal=function(){return(fC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},hC=t._Relu=function(){return(hC=t._Relu=t.asm.Relu).apply(null,arguments)},gC=t._Relu6=function(){return(gC=t._Relu6=t.asm.Relu6).apply(null,arguments)},xC=t._ResizeBilinear=function(){return(xC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},yC=t._ResizeBilinearGrad=function(){return(yC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},bC=t._ResizeNearestNeighbor=function(){return(bC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},CC=t._ResizeNearestNeighborGrad=function(){return(CC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},wC=t._Reverse=function(){return(wC=t._Reverse=t.asm.Reverse).apply(null,arguments)},SC=t._RotateWithOffset=function(){return(SC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},IC=t._Round=function(){return(IC=t._Round=t.asm.Round).apply(null,arguments)},vC=t._Rsqrt=function(){return(vC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},kC=t._ScatterNd=function(){return(kC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},NC=t._SearchSorted=function(){return(NC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},TC=t._SelectV2=function(){return(TC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},_C=t._Selu=function(){return(_C=t._Selu=t.asm.Selu).apply(null,arguments)},EC=t._Sigmoid=function(){return(EC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},$C=t._Sign=function(){return($C=t._Sign=t.asm.Sign).apply(null,arguments)},RC=t._Sin=function(){return(RC=t._Sin=t.asm.Sin).apply(null,arguments)},DC=t._Sinh=function(){return(DC=t._Sinh=t.asm.Sinh).apply(null,arguments)},AC=t._Softmax=function(){return(AC=t._Softmax=t.asm.Softmax).apply(null,arguments)},FC=t._Softplus=function(){return(FC=t._Softplus=t.asm.Softplus).apply(null,arguments)},PC=t._SparseFillEmptyRows=function(){return(PC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},OC=t._SparseReshape=function(){return(OC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},MC=t._SparseSegmentReduction=function(){return(MC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},LC=t._SparseToDense=function(){return(LC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},BC=t._Sqrt=function(){return(BC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},zC=t._Square=function(){return(zC=t._Square=t.asm.Square).apply(null,arguments)},VC=t._SquaredDifference=function(){return(VC=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},WC=t._Step=function(){return(WC=t._Step=t.asm.Step).apply(null,arguments)},UC=t._StridedSlice=function(){return(UC=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},GC=t._Sub=function(){return(GC=t._Sub=t.asm.Sub).apply(null,arguments)},HC=t._Sum=function(){return(HC=t._Sum=t.asm.Sum).apply(null,arguments)},KC=t._Tan=function(){return(KC=t._Tan=t.asm.Tan).apply(null,arguments)},qC=t._Tanh=function(){return(qC=t._Tanh=t.asm.Tanh).apply(null,arguments)},jC=t._TensorScatterUpdate=function(){return(jC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},XC=t._Tile=function(){return(XC=t._Tile=t.asm.Tile).apply(null,arguments)},YC=t._TopK=function(){return(YC=t._TopK=t.asm.TopK).apply(null,arguments)},QC=t._Transform=function(){return(QC=t._Transform=t.asm.Transform).apply(null,arguments)},ZC=t._Transpose=function(){return(ZC=t._Transpose=t.asm.Transpose).apply(null,arguments)},JC=t.__FusedMatMul=function(){return(JC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},ew=t._malloc=function(){return(ew=t._malloc=t.asm.malloc).apply(null,arguments)},tw=t._free=function(){return(tw=t._free=t.asm.free).apply(null,arguments)},rw=t.___errno_location=function(){return(rw=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},qm=t.stackSave=function(){return(qm=t.stackSave=t.asm.stackSave).apply(null,arguments)},jm=t.stackRestore=function(){return(jm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},xc=t.stackAlloc=function(){return(xc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},ow=t.dynCall_iijjiiii=function(){return(ow=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},nw=t.dynCall_jiji=function(){return(nw=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=Ly;var Wp;ir=function K(){Wp||Xm(),Wp||(ir=K)};function Xm(K){if(K=K||i,Et>0||(gt(),Et>0))return;function ae(){Wp||(Wp=!0,t.calledRun=!0,!M&&(xt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Ur()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Xm();var Up;s&&(Up={uncaughtException:process.listeners(\"uncaughtException\").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Gp;if(typeof e!=\"undefined\")Gp=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Gp=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Up){var sw=Gp._dispose;Gp._dispose=function(){sw(),Up.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Up.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return e.ready}})();typeof ex==\"object\"&&typeof sv==\"object\"?sv.exports=nv:typeof define==\"function\"&&define.amd?define([],function(){return nv}):typeof ex==\"object\"&&(ex.WasmBackendModule=nv)});var mn=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}},mo=class{refCount(e){return Hr(\"refCount\")}incRef(e){return Hr(\"incRef\")}timerAvailable(){return!0}time(e){return Hr(\"time\")}read(e){return Hr(\"read\")}readSync(e){return Hr(\"readSync\")}readToGPU(e,t){return Hr(\"readToGPU\")}numDataIds(){return Hr(\"numDataIds\")}disposeData(e,t){return Hr(\"disposeData\")}write(e,t,o){return Hr(\"write\")}move(e,t,o,n,s){return Hr(\"move\")}createTensorFromGPUData(e,t,o){return Hr(\"createTensorFromGPUData\")}memory(){return Hr(\"memory\")}floatPrecision(){return Hr(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Hr(\"dispose\")}};function Hr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function lk(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,nd(r,e,t)}function J4(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,nd(r,t,o),nd(e,t,o)}function qp(r,e,t){return Math.max(r,Math.min(e,t))}function eH(r){return r%2===0?r:r+1}function nd(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function tH(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function fo(r){$(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function pH(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Li(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),$(r.every(o=>Ja(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function mw(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Li(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function dw(r,e){return sd(r,e)}function sd(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else if(r===\"string\")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function fw(r,e){for(let t=0;te+=t.length),e}function dn(r){return typeof r==\"string\"||r instanceof String}function ck(r){return typeof r==\"boolean\"}function mk(r){return typeof r==\"number\"}function Bi(r){return Array.isArray(r)?Bi(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":mk(r)?\"float32\":dn(r)?\"string\":ck(r)?\"bool\":\"float32\"}function ra(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Xp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function dk(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?\" for a complex tensor\":\"\"}.`);return dk(0,r,e,t)}function cH(r,e){if(Array.isArray(r))return r;if(e===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(e===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function bc(r,e){let t=Yp(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Fu(r,new Float32Array(t));if(e===\"int32\")return Fu(r,new Int32Array(t));if(e===\"bool\")return Fu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function St(r){r.forEach(e=>{$(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function dH(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=yH(n,s)})}};function gH(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(xH(e,o[0],o[1]),o.join(\"=\"))),e}function xH(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function yH(r,e){let t=e.toLowerCase();return t===\"true\"||t===\"false\"?t===\"true\":`${+t}`===t?+t:e}function A(){return xw}var xw=null;function hk(r){xw=r}var yw;function bw(){if(yw==null){let r;if(typeof window!=\"undefined\")r=window;else if(typeof global!=\"undefined\")r=global;else if(typeof process!=\"undefined\")r=process;else if(typeof self!=\"undefined\")r=self;else throw new Error(\"Could not find a global object\");yw=r}return yw}function bH(){let r=bw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function wc(r,e){let t=bH();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var fn=\"Abs\",hn=\"Acos\",gn=\"Acosh\",Rr=\"Add\",xn=\"AddN\",yn=\"All\",bn=\"Any\",na=\"ArgMax\",sa=\"ArgMin\",Cn=\"Asin\",wn=\"Asinh\",Sn=\"Atan\",In=\"Atanh\",vn=\"Atan2\",kn=\"AvgPool\",zi=\"AvgPoolGrad\",aa=\"AvgPool3D\",Vi=\"AvgPool3DGrad\",Nn=\"BatchMatMul\",ia=\"BatchToSpaceND\",Tn=\"Bincount\",_n=\"BitwiseAnd\",Sme=\"BroadcastTo\",ua=\"BroadcastArgs\",ho=\"Cast\",go=\"Ceil\",Go=\"ClipByValue\",ei=\"Complex\",Wi=\"ComplexAbs\",pa=\"Concat\",En=\"Conv2D\",Ui=\"Conv2DBackpropFilter\",$n=\"Conv2DBackpropInput\",Rn=\"Conv3D\",ti=\"Conv3DBackpropFilterV2\",Dn=\"Conv3DBackpropInputV2\",An=\"Cos\",Fn=\"Cosh\",Pn=\"Cumprod\",On=\"Cumsum\",Mn=\"CropAndResize\",la=\"DenseBincount\",Ln=\"DepthToSpace\",Bn=\"DepthwiseConv2dNative\",Gi=\"DepthwiseConv2dNativeBackpropFilter\",Hi=\"DepthwiseConv2dNativeBackpropInput\",ca=\"Diag\",zn=\"Dilation2D\",Ki=\"Dilation2DBackpropInput\",qi=\"Dilation2DBackpropFilter\",Mu=\"Draw\",Vn=\"RealDiv\",ji=\"Einsum\",Wn=\"Elu\",ri=\"EluGrad\",Un=\"Erf\",xo=\"Equal\",yo=\"Exp\",ma=\"ExpandDims\",bo=\"Expm1\",Xi=\"FFT\",da=\"Fill\",Gn=\"FlipLeftRight\",Co=\"Floor\",wo=\"FloorDiv\",Hn=\"FusedBatchNorm\",fa=\"GatherV2\",Kn=\"GatherNd\",So=\"Greater\",Io=\"GreaterEqual\",vo=\"Identity\",Yi=\"IFFT\",Qi=\"Imag\",qn=\"IsFinite\",jn=\"IsInf\",Xn=\"IsNan\",Yn=\"LeakyRelu\",ko=\"Less\",No=\"LessEqual\",Qn=\"LinSpace\",To=\"Log\",Zn=\"Log1p\",Jn=\"LogicalAnd\",es=\"LogicalNot\",ts=\"LogicalOr\",gk=\"LogicalXor\",Ime=\"LogSoftmax\",vme=\"LowerBound\",rs=\"LRN\",oi=\"LRNGrad\",kme=\"MatrixBandPart\",os=\"Max\",_o=\"Maximum\",ns=\"MaxPool\",Zi=\"MaxPoolGrad\",ha=\"MaxPool3D\",Ji=\"MaxPool3DGrad\",ga=\"MaxPoolWithArgmax\",ss=\"Mean\",as=\"Min\",Eo=\"Minimum\",is=\"MirrorPad\",us=\"Mod\",ps=\"Multinomial\",$o=\"Multiply\",ls=\"Neg\",Ro=\"NotEqual\",cs=\"NonMaxSuppressionV3\",ni=\"NonMaxSuppressionV4\",ms=\"NonMaxSuppressionV5\",xa=\"OnesLike\",ds=\"OneHot\",ya=\"Pack\",fs=\"PadV2\",Nme=\"Pool\",hs=\"Pow\",gs=\"Prelu\",Ho=\"Prod\",Qp=\"RaggedGather\",Zp=\"RaggedRange\",Jp=\"RaggedTensorToTensor\",ba=\"Range\",si=\"Real\",xs=\"Reciprocal\",ys=\"Relu\",Ca=\"Reshape\",bs=\"ResizeNearestNeighbor\",ai=\"ResizeNearestNeighborGrad\",Cs=\"ResizeBilinear\",ii=\"ResizeBilinearGrad\",ws=\"Relu6\",Ss=\"Reverse\",Is=\"Round\",Do=\"Rsqrt\",vs=\"ScatterNd\",ks=\"TensorScatterUpdate\",Ns=\"SearchSorted\",wa=\"Select\",Ts=\"Selu\",_s=\"Slice\",Es=\"Sin\",$s=\"Sinh\",Rs=\"Sign\",Ao=\"Sigmoid\",Ds=\"Softplus\",Fo=\"Sqrt\",As=\"Sum\",Sa=\"SpaceToBatchND\",Ia=\"SplitV\",Fs=\"Softmax\",eu=\"SparseFillEmptyRows\",ui=\"SparseReshape\",va=\"SparseSegmentMean\",ka=\"SparseSegmentSum\",Ps=\"SparseToDense\",Po=\"SquaredDifference\",tu=\"Square\",pi=\"StaticRegexReplace\",Os=\"StridedSlice\",Na=\"StringNGrams\",ru=\"StringSplit\",ou=\"StringToHashBucketFast\",Oo=\"Sub\",Ms=\"Tan\",Ls=\"Tanh\",Mo=\"Tile\",Bs=\"TopK\",zs=\"Transform\",Kr=\"Transpose\",nu=\"Unique\",Ta=\"Unpack\",su=\"UnsortedSegmentSum\",Tme=\"UpperBound\",_a=\"ZerosLike\",Ko=\"Step\",Lu=\"FromPixels\",Vs=\"RotateWithOffset\",qo=\"_FusedMatMul\",jo=\"FusedConv2D\",Xo=\"FusedDepthwiseConv2D\";function Ea(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function CH(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var el=wc(\"kernelRegistry\",()=>new Map),Sc=wc(\"gradRegistry\",()=>new Map);function tl(r,e){let t=ww(r,e);return el.get(t)}function Cw(r){return Sc.get(r)}function ad(r){let e=el.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&t.push(a)}return t}function li(r){let{kernelName:e,backendName:t}=r,o=ww(e,t);el.has(o)&&Ea(`The kernel '${e}' for backend '${t}' is already registered`),el.set(o,r)}function Dme(r){let{kernelName:e}=r;Sc.has(e)&&A().getBool(\"DEBUG\")&&Ea(`Overriding the gradient for '${e}'`),Sc.set(e,r)}function Ame(r,e){let t=ww(r,e);if(!el.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);el.delete(t)}function Fme(r){if(!Sc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Sc.delete(r)}function Pme(r,e){ad(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});li(n)})}function ww(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>Sr,arraysEqualWithNull:()=>cw,assert:()=>$,assertNonNegativeIntegerDimensions:()=>St,assertNonNull:()=>fo,assertShapesMatch:()=>yt,bytesFromStringArray:()=>gw,bytesPerElement:()=>jp,checkConversionForErrors:()=>fw,clamp:()=>qp,computeStrides:()=>oa,convertBackendValuesAndArrayBuffer:()=>cH,createScalarValue:()=>TH,createShuffledIndices:()=>iH,decodeString:()=>sl,distSquared:()=>oH,encodeString:()=>iu,fetch:()=>EH,fingerPrint64:()=>NH,flatten:()=>Us,getArrayFromDType:()=>sd,getTypedArrayFromDType:()=>dw,hasEncodingLoss:()=>lH,hexToLong:()=>Ic,indexToLoc:()=>fH,inferDtype:()=>Bi,inferFromImplicitShape:()=>pH,isBoolean:()=>ck,isFunction:()=>ra,isInt:()=>Ja,isNumber:()=>mk,isPromise:()=>Ou,isScalarShape:()=>nH,isString:()=>dn,isTypedArray:()=>Mt,isValidDtype:()=>hw,locToIndex:()=>dH,makeOnesTypedArray:()=>bc,makeZerosNestedTypedArray:()=>mH,makeZerosTypedArray:()=>Yp,nearestDivisor:()=>Xp,nearestLargerEven:()=>eH,now:()=>Uu,parseAxisParam:()=>Li,randUniform:()=>rH,repeatedTry:()=>uH,rightPad:()=>Pu,shuffle:()=>lk,shuffleCombo:()=>J4,sizeFromShape:()=>ze,sizeToSquarishShape:()=>aH,squeezeShape:()=>mw,sum:()=>tH,swap:()=>nd,tanh:()=>sH,toNestedArray:()=>Fu,toTypedArray:()=>nl});function id(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var kw=Kp(_k());var Wu=kw.default||kw;function Ic(r){return Wu.fromString(r,!0,16)}var $k=Ic(\"c3a5c85c97cb3127\"),Vu=Ic(\"b492b66fbe98f273\"),Ir=Ic(\"9ae16a3b2f90404f\");function vw(r){return r.xor(r.shru(47))}function Rk(r,e,t){let o=r.slice(e,e+t);return Wu.fromBytes(Array.from(o),!0,!0)}function It(r,e){return Rk(r,e,8)}function Ek(r,e){return Rk(r,e,4)}function Jt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function au(r,e,t=Ic(\"9ddfea08eb382d69\")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function SH(r,e,t,o,n,s){n=n.add(r),s=Jt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Jt(n,44)),[n.add(o),s.add(a)]}function pd(r,e,t,o){return SH(It(r,e),It(r,e+8),It(r,e+16),It(r,e+24),t,o)}function IH(r,e=r.length){if(e>=8){let t=Ir.add(e*2),o=It(r,0).add(Ir),n=It(r,e-8),s=Jt(n,37).mul(t).add(o),a=Jt(o,25).add(n).mul(t);return au(s,a,t)}if(e>=4){let t=Ir.add(e*2),o=Ek(r,0);return au(o.shl(3).add(e),Ek(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return vw(Ir.mul(s).xor($k.mul(a))).mul(Ir)}return Ir}function vH(r,e=r.length){let t=Ir.add(e*2),o=It(r,0).mul(Vu),n=It(r,8),s=It(r,e-8).mul(t),a=It(r,e-16).mul(Ir);return au(Jt(o.add(n),43).add(Jt(s,30)).add(a),o.add(Jt(n.add(Ir),18)).add(s),t)}function kH(r,e=r.length){let t=Ir.add(e*2),o=It(r,0).mul(Ir),n=It(r,8),s=It(r,e-8).mul(t),a=It(r,e-16).mul(Ir),i=Jt(o.add(n),43).add(Jt(s,30)).add(a),p=au(i,o.add(Jt(n.add(Ir),18)).add(s),t),u=It(r,16).mul(t),l=It(r,24),c=i.add(It(r,e-32)).mul(t),m=p.add(It(r,e-24)).mul(t);return au(Jt(u.add(l),43).add(Jt(c,30)).add(m),u.add(Jt(l.add(o),18)).add(c),t)}function NH(r,e=r.length){let t=Wu.fromNumber(81,!0);if(e<=32)return e<=16?IH(r,e):vH(r,e);if(e<=64)return kH(r,e);let o=t,n=t.mul(Vu).add(113),s=vw(n.mul(Ir).add(113)).mul(Ir),a=[Wu.UZERO,Wu.UZERO],i=[Wu.UZERO,Wu.UZERO];o=o.mul(Ir).add(It(r,0));let p=0,u=(e-1>>6)*64,l=u+(e-1&63)-63;do o=Jt(o.add(n).add(a[0]).add(It(r,p+8)),37).mul(Vu),n=Jt(n.add(a[1]).add(It(r,p+48)),42).mul(Vu),o=o.xor(i[1]),n=n.add(a[0]).add(It(r,p+40)),s=Jt(s.add(i[0]),33).mul(Vu),a=pd(r,p,a[1].mul(Vu),o.add(i[0])),i=pd(r,p+32,s.add(i[1]),n.add(It(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let c=Vu.add(s.and(255).shl(1));return p=l,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Jt(o.add(n).add(a[0]).add(It(r,p+8)),37).mul(c),n=Jt(n.add(a[1]).add(It(r,p+48)),42).mul(c),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(It(r,p+40))),s=Jt(s.add(i[0]),33).mul(c),a=pd(r,p,a[1].mul(c),o.add(i[0])),i=pd(r,p+32,s.add(i[1]),n.add(It(r,p+16))),[s,o]=[o,s],au(au(a[0],i[0],c).add(vw(n).mul($k)).add(s),au(a[1],i[1],c).add(o),c)}function TH(r,e){return e===\"string\"?iu(r):nl([r],e)}function _H(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function nl(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Us(r)),A().getBool(\"DEBUG\")&&fw(r,e),_H(r,e))return r;if(e==null||e===\"float32\"||e===\"complex64\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Uu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Uu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{$H(c,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function $H(r,e,t){if(e!==\"float32\")return!1;for(let o=0;o0?h:\"\"} `}}console.log(`%c${p}\t%c${i}\t%c${u}D ${c}\t%c${l}\t%c${m}\t%c${a}`,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")}};function Dk(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],l=u.inputs;for(let c=0;c=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!==\"float32\")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let l=s.inputs[p];if(!Sr(u.shape,l.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${l.shape}'`);if(r[l.id]==null)r[l.id]=u;else{let c=r[l.id];r[l.id]=o(c,u),c.dispose()}}}}var Fk=20,vc=3,Tw=7;function Pk(r,e,t,o){let n=oa(e),s=RH(r,e,t,n),a=e.length,i=cd(r,e,t,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function RH(r,e,t,o){let n=ze(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t===\"complex64\"?Nc(r):r;if(i>1)for(let u=0;uFk){let g=vc*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-vc)*a,i*a));return t===\"complex64\"&&(x=Nc(x),b=Nc(b)),[\"[\"+x.map((w,S)=>kc(w,n[S],t)).join(\", \")+\", ..., \"+b.map((w,S)=>kc(w,n[i-vc+S],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?Nc(r):Array.from(r)).map((g,x)=>kc(g,n[x],t)).join(\", \")+\"]\"]}let u=e.slice(1),l=o.slice(1),c=o[0]*a,m=[];if(i>Fk){for(let h=0;h0?m[0]+d:\"\");for(let h=1;h`Length of values '${n}' 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=o||sd(t,this.size),this.strides=oa(e)}set(e,...t){t.length===0&&(t=[0]),$(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nsl(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return e}dataToGPU(e){return this.throwIfDisposed(),Gs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Gs().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>sl(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 Gs().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Gs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return al.print(this,e)}clone(){return this.throwIfDisposed(),al.clone(this)}toString(e=!1){let t=this.dataSync();return Pk(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),al.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Gs().makeVariable(this,e,t,o)}};Object.defineProperty(dt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function _w(){return wc(\"Tensor\",()=>dt)}_w();var ci=class extends dt{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}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(!Sr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Gs().disposeTensor(this),this.dataId=e.dataId,Gs().incRef(this,null)}dispose(){Gs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ci,Symbol.hasInstance,{value:r=>r instanceof dt&&r.assign!=null&&r.assign instanceof Function});var Vk={};qe(Vk,{assertTypesMatch:()=>Fw,getTensorsInContainer:()=>Tc,isTensorInList:()=>FH,makeTypesMatch:()=>Oe});var Ew;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(Ew||(Ew={}));var $w;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})($w||($w={}));var Rw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(Rw||(Rw={}));var Dw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(Dw||(Dw={}));var Aw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Aw||(Aw={}));var AH={float32:Dw,int32:$w,bool:Rw,complex64:Aw};function pt(r,e){if(r===\"string\"||e===\"string\"){if(r===\"string\"&&e===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${e}`)}return AH[r][e]}function mi(r){return pt(r,\"int32\")}function md(r){return r!=null&&typeof r==\"object\"&&\"texture\"in r&&r.texture instanceof WebGLTexture}function dd(r){return typeof GPUBuffer!=\"undefined\"&&r!=null&&typeof r==\"object\"&&\"buffer\"in r&&r.buffer instanceof GPUBuffer}function Oe(r,e){if(r.dtype===e.dtype)return[r,e];let t=pt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Fw(r,e){$(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function FH(r,e){return e.some(t=>t.id===r.id)}function Tc(r){let e=[];return zk(r,e,new Set),e}function zk(r,e,t){if(r==null)return;if(r instanceof dt){e.push(r);return}if(!PH(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),zk(s,e,t))}}function PH(r){return Array.isArray(r)||typeof r==\"object\"}function Pw(r){return r.kernelName!=null}var fd=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()}},_c=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new fd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){ad(e).forEach(o=>{o.disposeFunc!=null&&o.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 o=t.factory();if(o&&!(o instanceof mo)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=_.runKernel(vo,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return _.runKernel(ho,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(tl(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype===\"complex64\"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Pw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Pw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=tl(f,this.backendName);$(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let w=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,w);let S=w.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}else{let{forwardFunc:f}=e,h=g=>{n&&(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:l,attrs:c}=e,m=Pw(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(u,l,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,l,t,m,o,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(f=>l[f]!=null?l[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=Cw(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(t),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,l)=>a[l]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=e;o===\"string\"&&dn(e[0])&&(s=e.map(p=>iu(p)));let a=n.write(s,t,o),i=new dt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=gw(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||\"float32\";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new dt(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ci(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype===\"string\"&&this.state.numStringTensors++;let o=0;e.dtype!==\"complex64\"&&e.dtype!==\"string\"&&(o=e.size*jp(e.dtype)),this.state.numBytes+=o,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:o})),e instanceof ci||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 o=e.size*jp(e.dtype);this.state.numBytes-=o}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,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=Cw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((l,c)=>{if(l==null){let m=o[c],d=Yp(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return l}),n(u.length>1?u:u[0],s,a))),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=Tc(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if($(t.length>0,()=>\"gradients() received an empty list of xs.\"),o!=null&&o.dtype!==\"float32\")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy(\"forward\",e));$(s instanceof dt,()=>\"The result y returned by f() must be a tensor.\");let a=Dk(this.state.activeTape,t,s);if(!n&&a.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[s.id]=o==null?OH(s.shape):o,Ak(i,a,u=>this.tidy(u),MH);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let l of u.saved)l.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return $(ra(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{$(t.every(i=>i instanceof dt),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),$(o.value instanceof dt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),$(ra(o.gradFunc),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.\"),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),l=Array.isArray(u)?u:[u];$(l.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(...).\"),$(l.every(m=>m instanceof dt),()=>\"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 c={};return l.forEach((m,d)=>{c[d]=()=>m}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Uu(),o=await this.backend.time(e);return o.wallMs=Uu()-t,o}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 fd;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}};_c.nextTensorId=0;_c.nextVariableId=0;function OH(r){let e=bc(ze(r),\"float32\");return _.makeTensor(e,r,\"float32\")}function Ow(){let r=bw();if(r._tfengine==null){let e=new Cc(r);r._tfengine=new _c(e)}return hk(r._tfengine.ENV),Mk(()=>r._tfengine),r._tfengine}var _=Ow();function MH(r,e){let t={a:r,b:e};return _.runKernel(Rr,t)}var uu={};qe(uu,{isBrowser:()=>Lw,isMobile:()=>zH,mockIsMobile:()=>BH});function LH(){return typeof navigator!=\"undefined\"&&navigator!=null}var Mw;function BH(r){Mw=r}function zH(r){if(Mw!==void 0)return Mw;if(r||LH()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let e=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}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 Lw(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var Dr=A();Dr.registerFlag(\"DEBUG\",()=>!1,r=>{r&&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\",()=>Lw());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(\"IS_SAFARI\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.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\",()=>Dr.getBool(\"DEBUG\"));Dr.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);Dr.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);Dr.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function ur(r,e){let t=r;if(Mt(r))return e===\"string\"?[]:[r.length];if(md(r)){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}else if(dd(r))return[r.buffer.size/(e==null?4:jp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Mt(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&Uk(r,o,[]),o}function Uk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Mt(r)){$(e.length===0,()=>`Element arr[${t.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}$(e.length>0,()=>`Element arr[${t.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===e[0],()=>`Element arr[${t.join(\"][\")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),Wk(o,n,e,t),r==null||!Mt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\"){let p=r==null?\"null\":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=ur(r,n);!Mt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?nl(r,n):Us(r,[],!0);return _.makeTensor(i,s,n)}function di(r,e,t,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Bw=\"__op\";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith(\"_\")&&(t=t.substring(0,t.length-1)),t=t+Bw;let n=(...s)=>{_.startScope(t);try{let a=o(...s);return Ou(a)&&console.error(\"Cannot return a Promise inside of tidy.\"),_.endScope(a),a}catch(a){throw _.endScope(null),a}};return Object.defineProperty(n,\"name\",{value:t,configurable:!0}),n}function VH(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");yt(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return _.runKernel(ei,n)}var Ar=N({complex_:VH});function vr(r,e,t,o){if(o==null)o=Bi(r);else if(o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(dd(r)||md(r)){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return _.backend.createTensorFromGPUData(r,e||t,o)}if(!Mt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"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(e!=null){St(e);let n=ze(e),s=ze(t);$(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Mt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?nl(r,o):Us(r,[],!0),_.makeTensor(r,e,o)}function pr(r,e,t){let o=ur(r,t);return vr(r,e,o,t)}var fi={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var lr=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Mt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=WH(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function WH(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function Gde(){A().set(\"PROD\",!0)}function Hde(){A().set(\"DEBUG\",!0)}function Kde(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function zw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}Bk(zw);function qde(){_.disposeVariables()}function cr(){return _}function jde(){return _.memory()}function Xde(r){return _.profile(r)}function De(r,e){return _.tidy(r,e)}function Lt(r){Tc(r).forEach(t=>t.dispose())}function Fr(r){return _.keep(r)}function Yde(r){return _.time(r)}function Qde(r){return _.setBackend(r)}function Zde(){return _.ready()}function Gk(){return _.backendName}function Jde(r){_.removeBackend(r)}function efe(r){return _.findBackend(r)}function tfe(r){return _.findBackendFactory(r)}function pu(r,e,t=1){return _.registerBackend(r,e,t)}function Hk(){return _.backend}function rfe(r,e){A().setPlatform(r,e)}var lu=4;async function jk(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+lu*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=Xk(s,t.slice(n,n+a)),n+=a}return o}function UH(r,e){let t=ze(r.shape),o;if(\"quantization\"in r){let n=r.quantization;o=fi[n.dtype]}else if(r.dtype===\"string\"){let n=0;for(let s=0;s(n=await Kk(o,n,l),n.slice(u,l)));n=await Kk(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=Xk(s,i);if(t[s.name]=p,Gk()===\"webgpu\"){let u=Hk();\"uploadToGPU\"in u&&ze(p.shape)>=A().get(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\")&&u.uploadToGPU(p.dataId)}}return t}function HH(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{if(e+=s.byteLength,t.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 o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Vw=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function qk(r){return Vw?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function Yk(r){if(Vw)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function qH(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function jH(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function XH(){let r=KH(),e=qH(),t=jH();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var Xt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return r.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},Jk=r=>Xt.registerSaveRouter(r),e1=r=>Xt.registerLoadRouter(r),t1=r=>Xt.getSaveHandlers(r),r1=(r,e)=>Xt.getLoadHandlers(r,e);var Gw=\"tensorflowjs\",Hw=1,Gu=\"models_store\",cu=\"model_info_store\";function o1(){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");let r=typeof window==\"undefined\"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function Kw(r){let e=r.result;e.createObjectStore(Gu,{keyPath:\"modelPath\"}),e.createObjectStore(cu,{keyPath:\"modelPath\"})}var Ra=class{constructor(e){if(this.indexedDB=o1(),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((o,n)=>{let s=this.indexedDB.open(Gw,Hw);s.onupgradeneeded=()=>Kw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Gu,\"readonly\"),u=i.objectStore(Gu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=l=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{t.weightData=lr.join(t.weightData);let i=$a(t),p=a.transaction(cu,\"readwrite\"),u=p.objectStore(cu),l;try{l=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let c;l.onsuccess=()=>{c=a.transaction(Gu,\"readwrite\");let m=c.objectStore(Gu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(cu);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},l.onerror=m=>(a.close(),n(l.error)),p.oncomplete=()=>{c==null?a.close():c.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Ra.URL_SCHEME=\"indexeddb://\";var n1=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Ra.URL_SCHEME)?YH(r.slice(Ra.URL_SCHEME.length)):null;Xt.registerSaveRouter(n1);Xt.registerLoadRouter(n1);function YH(r){return new Ra(r)}function QH(r){return r.startsWith(Ra.URL_SCHEME)?r.slice(Ra.URL_SCHEME.length):r}var yd=class{constructor(){this.indexedDB=o1()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Gw,Hw);o.onupgradeneeded=()=>Kw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(cu,\"readonly\"),i=s.objectStore(cu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=QH(e),new Promise((t,o)=>{let n=this.indexedDB.open(Gw,Hw);n.onupgradeneeded=()=>Kw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(cu,\"readwrite\"),i=a.objectStore(cu),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let l=i.delete(e),c=()=>{u=s.transaction(Gu,\"readwrite\");let d=u.objectStore(Gu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};l.onsuccess=c,l.onerror=m=>(c(),s.close(),o(p.error))}},p.onerror=l=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var hi=\"/\",ul=\"tensorflowjs_models\",s1=\"info\",ZH=\"model_topology\",JH=\"weight_specs\",eK=\"weight_data\",tK=\"model_metadata\";function a1(r){return{info:[ul,r,s1].join(hi),topology:[ul,r,ZH].join(hi),weightSpecs:[ul,r,JH].join(hi),weightData:[ul,r,eK].join(hi),modelMetadata:[ul,r,tK].join(hi)}}function i1(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function rK(r){let e=r.split(hi);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(hi)}function oK(r){return r.startsWith(Da.URL_SCHEME)?r.slice(Da.URL_SCHEME.length):r}var Da=class{constructor(e){if(!A().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=a1(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),o=JSON.stringify(e.weightSpecs),n=$a(e),s=lr.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,Yk(s));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw i1(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=Qk(a),t}};Da.URL_SCHEME=\"localstorage://\";var u1=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Da.URL_SCHEME)?nK(r.slice(Da.URL_SCHEME.length)):null;Xt.registerSaveRouter(u1);Xt.registerLoadRouter(u1);function nK(r){return new Da(r)}var bd=class{constructor(){$(A().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),$(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let e={},t=ul+hi,o=hi+s1;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(pl)&&(e=e.slice(0,e.indexOf(pl))),$(e.length>0,()=>\"scheme must not be an empty string.\");let o=r.getInstance();$(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function Cd(r){if(r.indexOf(pl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Hs.getSchemes().join(\",\")}`);return{scheme:r.split(pl)[0],path:r.split(pl)[1]}}async function p1(r,e,t=!1){$(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=Xt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=Xt.getSaveHandlers(e);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Cd(r).scheme,p=Cd(r).path,u=i===Cd(r).scheme,l=await n.load();t&&u&&await Hs.getManager(i).removeModel(p);let c=await a.save(l);return t&&!u&&await Hs.getManager(i).removeModel(p),c.modelArtifactsInfo}async function l1(){let r=Hs.getSchemes(),e={};for(let t of r){let o=await Hs.getManager(t).listModels();for(let n in o){let s=t+pl+n;e[s]=o[n]}}return e}async function c1(r){let e=Cd(r);return Hs.getManager(e.scheme).removeModel(e.path)}async function m1(r,e){return p1(r,e,!1)}async function d1(r,e){return p1(r,e,!0)}var qw=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window==\"undefined\"||!A().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener(\"message\",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return id(e)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new qw);try{Hs.registerManager(Da.URL_SCHEME,new bd)}catch(r){}try{Hs.registerManager(Ra.URL_SCHEME,new yd)}catch(r){}}var sK={importFetch:()=>f1()},jw;var Xw=class{constructor(){this.util=h1(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(jw==null&&(jw=sK.importFetch()),jw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Xw);function ie(r,e=\"float32\",t){return e=e||\"float32\",St(r),new Ge(r,e,t)}function aK(r,e){let t=v(r,\"x\",\"cast\");if(!hw(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e===\"string\"&&t.dtype!==\"string\"||e!==\"string\"&&t.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:t},n={dtype:e};return _.runKernel(ho,o,n)}var Ue=N({cast_:aK});function iK(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return _.runKernel(vo,t)}var Xr=N({clone_:iK});function wd(r,e=!1){console.log(r.toString(e))}Ow();var uK={buffer:ie,cast:Ue,clone:Xr,print:wd};Lk(uK);function pK(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(Rr,n)}var Ce=N({add_:pK});function lK(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(wo,n)}var Sd=N({floorDiv_:lK});function cK(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Oe(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return Sd(t,o);let n={a:t,b:o},s={};return _.runKernel(Vn,n,s)}var Xe=N({div_:cK});function mK(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel($o,n)}var se=N({mul_:mK});function dK(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return _.runKernel(Wi,t)}else{let t={x:e};return _.runKernel(fn,t)}}var er=N({abs_:dK});function fK(r){let t={x:v(r,\"x\",\"acos\")};return _.runKernel(hn,t)}var g1=N({acos_:fK});function hK(r){let t={x:v(r,\"x\",\"acosh\")};return _.runKernel(gn,t)}var x1=N({acosh_:hK});function gK(r){$(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),e.forEach(n=>{if(!Sr(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return _.runKernel(xn,o)}var y1=N({addN_:gK});function xK(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return _.runKernel(yn,n,s)}var b1=N({all_:xK});function yK(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return _.runKernel(bn,n,s)}var C1=N({any_:yK});function bK(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return _.runKernel(na,o,n)}var w1=N({argMax_:bK});function CK(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return _.runKernel(sa,o,n)}var S1=N({argMin_:CK});function wK(r){let t={x:v(r,\"x\",\"asin\")};return _.runKernel(Cn,t)}var I1=N({asin_:wK});function SK(r){let t={x:v(r,\"x\",\"asinh\")};return _.runKernel(wn,t)}var v1=N({asinh_:SK});function IK(r){let t={x:v(r,\"x\",\"atan\")};return _.runKernel(Sn,t)}var k1=N({atan_:IK});function vK(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(vn,n)}var N1=N({atan2_:vK});function kK(r){let t={x:v(r,\"x\",\"atanh\")};return _.runKernel(In,t)}var T1=N({atanh_:kK});function NK(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=E1(n);return Ku(r,i,t,s,o,null,null,p)}function Qw(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=$c(e),u;if(a===\"channelsLast\")u=[i,p,r[3],r[3]];else if(a===\"channelsFirst\")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Ku(r,u,t,o,n,s,!1,a)}function TK(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=Yw(e),l,c;if(a===\"NDHWC\")c=\"channelsLast\",l=[i,p,u,r[4],r[4]];else if(a===\"NCDHW\")c=\"channelsFirst\",l=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return _1(r,l,t,o,n,!1,c,s)}function Ku(r,e,t,o,n,s,a=!1,i=\"channelsLast\"){let[p,u,l,c]=[-1,-1,-1,-1];if(i===\"channelsLast\")[p,u,l,c]=r;else if(i===\"channelsFirst\")[p,c,u,l]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=$c(t),[x,b]=$c(o),w=ll(m,x),S=ll(d,b),{padInfo:k,outHeight:T,outWidth:E}=$K(n,u,l,h,g,w,S,s,i),R=a?f*c:f,D;return i===\"channelsFirst\"?D=[p,R,T,E]:i===\"channelsLast\"&&(D=[p,T,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:l,inChannels:c,outHeight:T,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:w,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function _1(r,e,t,o,n,s=!1,a=\"channelsLast\",i){let[p,u,l,c,m]=[-1,-1,-1,-1,-1];if(a===\"channelsLast\")[p,u,l,c,m]=r;else if(a===\"channelsFirst\")[p,m,u,l,c]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,w]=Yw(t),[S,k,T]=Yw(o),E=ll(d,S),R=ll(f,k),D=ll(h,T),{padInfo:F,outDepth:O,outHeight:M,outWidth:L}=RK(n,u,l,c,x,b,w,E,R,D,i),B=s?g*m:g,z;return a===\"channelsFirst\"?z=[p,B,O,M,L]:a===\"channelsLast\"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:l,inWidth:c,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:F,strideDepth:x,strideHeight:b,strideWidth:w,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:T,inShape:r,outShape:z,filterShape:e}}function _K(r,e,t,o,n){o==null&&(o=Zw(r,e,t));let s=r[0],a=r[1],i=Rc((s-e+2*o)/t+1,n),p=Rc((a-e+2*o)/t+1,n);return[i,p]}function EK(r,e,t,o,n,s){n==null&&(n=Zw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=Rc((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Zw(r,e,t,o=1){let n=ll(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function $c(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Yw(r){return typeof r==\"number\"?[r,r,r]:r}function ll(r,e){return e<=1?r:r+(r-1)*(e-1)}function $K(r,e,t,o,n,s,a,i,p){let u,l,c;if(typeof r==\"number\"){u={top:r,bottom:r,left:r,right:r,type:r===0?\"VALID\":\"NUMBER\"};let d=_K([e,t],s,o,r,i);l=d[0],c=d[1]}else if(r===\"same\"){l=Math.ceil(e/o),c=Math.ceil(t/n);let m=Math.max(0,(l-1)*o+s-e),d=Math.max(0,(c-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:\"SAME\"}}else if(r===\"valid\")u={top:0,bottom:0,left:0,right:0,type:\"VALID\"},l=Math.ceil((e-s+1)/o),c=Math.ceil((t-a+1)/n);else if(typeof r==\"object\"){let m=p===\"channelsLast\"?r[1][0]:r[2][0],d=p===\"channelsLast\"?r[1][1]:r[2][1],f=p===\"channelsLast\"?r[2][0]:r[3][0],h=p===\"channelsLast\"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?\"VALID\":\"EXPLICIT\"},l=Rc((e-s+m+d)/o+1,i),c=Rc((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:l,outWidth:c}}function RK(r,e,t,o,n,s,a,i,p,u,l){let c,m,d,f;if(r===\"valid\"&&(r=0),typeof r==\"number\"){c={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=EK([e,t,o,1],[i,p,u],1,[n,s,a],r,l);m=g[0],d=g[1],f=g[2]}else if(r===\"same\"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),w=h-b,S=Math.floor(g/2),k=g-S,T=Math.floor(x/2),E=x-T;c={top:S,bottom:k,left:T,right:E,front:b,back:w,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:c,outDepth:m,outHeight:d,outWidth:f}}function Rc(r,e){if(!e)return Math.trunc(r);switch(e){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function Hu(r){let[e,t,o]=$c(r);return e===1&&t===1&&o===1}function br(r,e){return Hu(r)||Hu(e)}function Aa(r){return $c(r).every(e=>e>0)}function E1(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function zt(r,e,t){if(t!=null){if(typeof e==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e==\"number\")$(Ja(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e==\"object\")e.forEach(o=>{o.forEach(n=>{$(Ja(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function DK(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return _.runKernel(Ca,o,n)}var W=N({reshape_:DK});function AK(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;$(br(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),zt(\"avgPool\",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n},c=_.runKernel(kn,u,l);return c=Ue(c,s.dtype),p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Id=N({avgPool_:AK});function FK(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof t==\"number\"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),zt(\"avgPool3d\",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},c=_.runKernel(aa,u,l);return c=Ue(c,i.dtype),p?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var $1=N({avgPool3d_:FK});function PK(r,e=0){$(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=di(r,\"tensors\",\"concat\",\"string_or_numeric\");if(t[0].dtype===\"complex64\"&&t.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),t.length===1)return Xr(t[0]);let o=t,n={axis:e};return _.runKernel(pa,o,n)}var bt=N({concat_:PK});function OK(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return _.runKernel(Nn,a,i)}var Je=N({matMul_:OK});function MK(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return _.runKernel(Ao,t)}var Pa=N({sigmoid_:MK});function LK(r,e,t){let o=v(r,\"x\",\"slice\",\"string_or_numeric\");if(o.rank===0)throw new Error(\"Slicing scalar is not possible\");let n={x:o},s={begin:e,size:t};return _.runKernel(_s,n,s)}var Ye=N({slice_:LK});function BK(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return _.runKernel(Ls,t)}var Dc=N({tanh_:BK});function zK(r,e,t,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(e,\"lstmKernel\",\"basicLSTMCell\"),p=v(t,\"lstmBias\",\"basicLSTMCell\"),u=v(o,\"data\",\"basicLSTMCell\"),l=v(n,\"c\",\"basicLSTMCell\"),c=v(s,\"h\",\"basicLSTMCell\"),m=bt([u,c],1),d=Je(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Ye(f,[0,0],x),w=Ye(f,[0,g],x),S=Ye(f,[0,g*2],x),k=Ye(f,[0,g*3],x),T=Ce(se(Pa(b),Dc(w)),se(l,Pa(Ce(a,S)))),E=se(Dc(T),Pa(k));return[T,E]}var R1=N({basicLSTMCell_:zK});function VK(r,e,t){let o=v(r,\"x\",\"batchToSpaceND\"),n=e.reduce((i,p)=>i*p);$(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),$(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return _.runKernel(ia,s,a)}var vd=N({batchToSpaceND_:VK});function D1(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function WK(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let l;o!=null&&(l=v(o,\"offset\",\"batchNorm\")),$(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),$(l==null||i.rank===l.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),$(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:D1(a),scale:u,offset:l,mean:i,variance:p},d={varianceEpsilon:s},f=_.runKernel(Hn,m,d);return W(f,a.shape)}var mu=N({batchNorm_:WK});function UK(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let l;return o!=null&&(l=v(o,\"offset\",\"batchNorm\")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var A1=N({batchNorm2d_:UK});function GK(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let l;return o!=null&&(l=v(o,\"offset\",\"batchNorm\")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var F1=N({batchNorm3d_:GK});function HK(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let l;return o!=null&&(l=v(o,\"offset\",\"batchNorm\")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var P1=N({batchNorm4d_:HK});function KK(r,e,t){let o=v(r,\"x\",\"bincount\"),n=v(e,\"weights\",\"bincount\");$(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return _.runKernel(Tn,s,a)}var kd=N({bincount_:KK});function qK(r,e){let t=v(r,\"x\",\"bitwiseAnd\"),o=v(e,\"y\",\"bitwiseAnd\");if(!Sr(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return _.runKernel(_n,n)}var O1=N({bitwiseAnd_:qK});function jK(r,e){let t=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(e,\"s1\",\"broadcastArgs\",\"int32\");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return _.runKernel(ua,n)}var M1=N({broadcastArgs_:jK});function XK(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(St(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,l)=>u>1?l:-1).filter(u=>u>=0).length===0)return Xr(t);let i={x:t},p={reps:s};return _.runKernel(Mo,i,p)}var Oa=N({broadcastTo_:XK});function YK(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return _.runKernel(go,t)}var L1=N({ceil_:YK});function Ma(r,e,t){St(r),t=t||Bi(e);let o={shape:r,value:e,dtype:t};return _.runKernel(da,{},o)}function QK(r,e,t){let o=v(r,\"x\",\"clipByValue\");if($(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Ma(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return _.runKernel(Go,n,s)}var B1=N({clipByValue_:QK});function ZK(r){return bt(r,0)}var z1=N({concat1d_:ZK});function JK(r,e){return bt(r,e)}var V1=N({concat2d_:JK});function eq(r,e){return bt(r,e)}var W1=N({concat3d_:eq});function tq(r,e){return bt(r,e)}var U1=N({concat4d_:tq});function rq(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(e,\"filter\",\"conv2d\",\"float32\"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),zt(\"conv2d\",o,a);let c=n===\"NHWC\"?u.shape[3]:u.shape[1];$(c===p.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${p.shape[2]}.`),$(br(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(Aa(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),$(Aa(t),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=_.runKernel(En,m,d);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var du=N({conv2d_:rq});function oq(r,e,t,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(e,\"filter\",\"conv1d\"),u=i,l=!1;i.rank===2&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),zt(\"conv1d\",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(br(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),$(Aa(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),$(Aa(t),()=>\"Error in conv1D: Stride should be larger than 0.\"),$(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let c=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=du(m,c,[1,t],o,\"NHWC\",[1,s],a);return l?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var G1=N({conv1d_:oq});function nq(r,e,t,o,n,s=\"NHWC\",a){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let l=s===\"NHWC\"?i[3]:i[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];$(l===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${l}) must match input depth for filter ${t.shape[2]}.`),$(c===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${t.shape[3]}.`),zt(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=_.runKernel($n,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Nd=N({conv2DBackpropInput_:nq});function sq(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return Nd(t,a,i,o,n,\"NHWC\",s)}var H1=N({conv2dTranspose_:sq});function aq(r,e,t,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(e,\"filter\",\"conv3d\"),p=a,u=!1;a.rank===4&&(u=!0,p=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(br(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Aa(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),$(Aa(t),()=>\"Error in conv3D: Strides should be larger than 0.\");let l={x:p,filter:i},c={strides:t,pad:o,dataFormat:n,dilations:s},m=_.runKernel(Rn,l,c);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var K1=N({conv3d_:aq});function iq(r,e,t,o,n){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),$(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),$(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let l={dy:a,filter:t},c={pad:n,strides:o,inputShape:s},m=_.runKernel(Dn,l,c);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var q1=N({conv3DBackpropInput_:iq});function uq(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return q1(t,s,a,o,n)}var j1=N({conv3dTranspose_:uq});function pq(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return _.runKernel(An,t)}var X1=N({cos_:pq});function lq(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return _.runKernel(Fn,t)}var Y1=N({cosh_:lq});function cq(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return _.runKernel(Pn,s,a)}var Q1=N({cumprod_:cq});function mq(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return _.runKernel(On,s,a)}var Z1=N({cumsum_:mq});function dq(r,e,t,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(e,\"weights\",\"denseBincount\");$(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return _.runKernel(la,a,i)}var J1=N({denseBincount_:dq});function fq(r,e,t=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=t===\"NHWC\"?o.shape[1]:o.shape[2],s=t===\"NHWC\"?o.shape[2]:o.shape[3],a=t===\"NHWC\"?o.shape[3]:o.shape[1];$(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),$(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${e} for depthToSpace with input shape\n ${o.shape}`),$(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${e} for depthToSpace with input shape\n ${o.shape}`),$(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return _.runKernel(Ln,i,p)}var e2=N({depthToSpace_:fq});function hq(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let c=n===\"NHWC\"?u.shape[3]:u.shape[1];$(c===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${p.shape[2]}.`),zt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=_.runKernel(Bn,m,d);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var cl=N({depthwiseConv2d_:hq});function gq(r){let t={x:v(r,\"x\",\"diag\")};return _.runKernel(ca,t)}var t2=N({diag_:gq});function xq(r,e,t,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(e,\"filter\",\"dilation2d\");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let l={x:p,filter:i},c={strides:t,pad:o,dilations:n},m=_.runKernel(zn,l,c);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var r2=N({dilation2d_:xq});var kr={};qe(kr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>o2,getReductionAxes:()=>Td});function o2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function Td(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=W(t,[1,-1]),i=W(o,[-1,1]),p=Je(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Je(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Je(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Je(t,a)}}var s2=N({dot_:Sq});function Iq(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return _.runKernel(ji,t,o)}var fu=N({einsum_:Iq});function vq(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return _.runKernel(Wn,t)}var Ed=N({elu_:vq});function kq(r,e){let t=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!cw(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var a2=N({ensureShape_:kq});function Nq(r){let e=v(r,\"x\",\"erf\");$(e.dtype===\"int32\"||e.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),e.dtype===\"int32\"&&(e=Ue(e,\"float32\"));let t={x:e};return _.runKernel(Un,t)}var i2=N({erf_:Nq});function Jw(r,e){for(let t=0;tr[s]);return[t,n]}function gi(r,e){let t=e.map(o=>1);return u2(r,t,e)}function _q(r,e,t){$(Jw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function Eq(r,e){if(Jw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function $q(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function Rq(r,e){let t=[];for(let o=e-r;o\"Axis must be <= rank of the tensor\");let o={input:t},n={dim:e};return _.runKernel(ma,o,n)}var Ks=N({expandDims_:Wq});function Uq(r){let t={x:v(r,\"x\",\"expm1\")};return _.runKernel(bo,t)}var c2=N({expm1_:Uq});function Gq(r,e){let t=v(r,\"x\",\"tile\",\"string_or_numeric\");$(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return _.runKernel(Mo,o,n)}var hu=N({tile_:Gq});function Hq(r,e,t,o=\"float32\"){e==null&&(e=r);let n=ie([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),$(Ja(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},l=_.runKernel(rs,p,u);return i?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var g2=N({localResponseNormalization_:o6});function n6(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return _.runKernel(To,t)}var yi=N({log_:n6});function s6(r){let t={x:v(r,\"x\",\"log1p\")};return _.runKernel(Zn,t)}var Pd=N({log1p_:s6});function a6(r){return $(ra(r),()=>\"The f passed in grad(f) must be a function\"),(e,t)=>{let o=v(e,\"x\",\"tf.grad\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grad\"):null;return _.tidy(()=>{let{value:s,grads:a}=_.gradients(()=>r(o),[o],n);return n!=null&&yt(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),Od(a),a[0]})}}function i6(r){return $(ra(r),()=>\"The f passed in grads(f) must be a function\"),(e,t)=>{$(Array.isArray(e),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=di(e,\"args\",\"tf.grads\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grads\"):null;return _.tidy(()=>{let{value:s,grads:a}=_.gradients(()=>r(...o),o,n);return n!=null&&yt(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Od(a),a})}}function u6(r){return $(ra(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{$(e instanceof dt,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),$(t==null||t instanceof dt,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=_.gradients(()=>r(e),[e],t);return Od(o),{grad:o[0],value:n}}}function p6(r){return $(ra(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{$(Array.isArray(e)&&e.every(n=>n instanceof dt),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),$(t==null||t instanceof dt,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=_.gradients(()=>r(...e),e,t);return t!=null&&yt(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Od(o.grads),o}}function eS(r,e){$(ra(r),()=>\"The f passed in variableGrads(f) must be a function\"),$(e==null||Array.isArray(e)&&e.every(u=>u instanceof ci),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let t=e!=null;if(!t){e=[];for(let u in _.registeredVariables)e.push(_.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),$(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=_.gradients(r,e,null,s);$(i.some(u=>u!=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().\"),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,l)=>{i[l]!=null&&(p[u.name]=i[l])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Nr(r){return _.customGrad(r)}function Od(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.`)}function l6(r){let t={x:v(r,\"x\",\"neg\")};return _.runKernel(ls,t)}var mr=N({neg_:l6});function c6(r){let t={x:v(r,\"x\",\"softplus\")};return _.runKernel(Ds,t)}var Md=N({softplus_:c6});function m6(r){let e=v(r,\"x\",\"logSigmoid\");return Nr(o=>({value:mr(Md(mr(o))),gradFunc:a=>se(a,Pa(mr(o)))}))(e)}var x2=N({logSigmoid_:m6});function d6(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(Oo,n)}var Te=N({sub_:d6});function f6(r,e=-1){let t=v(r,\"logits\",\"logSoftmax\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Nr((n,s)=>{let i=La(n,e,!0),p=Te(n,i),u=Te(Ue(p,\"float32\"),yi(ot(Jo(p),e,!0)));return s([u]),{value:u,gradFunc:(c,m)=>{let[d]=m,f=!0,h=Jo(d);return Te(c,se(ot(c,e,f),h))}}})(t)}var y2=N({logSoftmax_:f6});function h6(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=Li(e,o.shape),s=La(o,n,!0),a=Te(o,s),i=Jo(a),p=ot(i,n),u=yi(p),l=Ce(W(s,u.shape),u);if(t){let c=gi(l.shape,n);return W(l,c)}return l}var Ld=N({logSumExp_:h6});function g6(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Jn,n)}var Xu=N({logicalAnd_:g6});function x6(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return _.runKernel(es,t)}var Bd=N({logicalNot_:x6});function y6(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(ts,n)}var zd=N({logicalOr_:y6});function b6(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return rt(t.shape,o.shape),Xu(zd(r,e),Bd(Xu(r,e)))}var b2=N({logicalXor_:b6});var Vd=2147483648;function C6(r,e,t=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(e,\"values\",\"searchSorted\"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=W(o,[-1,s]),p=W(n,[-1,a]);if(i.rank<2)throw new Error(\"Sorted input argument must be at least 2-dimensional\");if(i.shape[0]!==p.shape[0])throw new Error(\"Leading dimension of 'sortedSequence' and 'values' must match.\");if(ze(p.shape)>=Vd)throw new Error(`values tensor size must less than ${Vd}`);if(i.shape[1]>=Vd)throw new Error(`trailing dim_size must less than ${Vd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},l={side:t};return _.runKernel(Ns,u,l)}var Pc=N({searchSorted_:C6});function C2(r,e){return Pc(r,e,\"left\")}function w6(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(br(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),zt(\"maxPool\",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n},c=_.runKernel(ns,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Wd=N({maxPool_:w6});function S6(r,e=[1,1,1],t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"maxPool3d\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),zt(\"maxPool3d\",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},c=_.runKernel(ha,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var w2=N({maxPool3d_:S6});function I6(r,e,t,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=_.runKernel(ga,a,i);return{result:p[0],indexes:p[1]}}var S2=N({maxPoolWithArgmax_:I6});function v6(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(_o,n)}var Ud=N({maximum_:v6});function k6(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return _.runKernel(ss,n,s)}var Yu=N({mean_:k6});function Yr(r,e=\"float32\"){if(St(r),e===\"complex64\"){let o=Yr(r,\"float32\"),n=Yr(r,\"float32\");return Ar(o,n)}let t=Yp(ze(r),e);return _.makeTensor(t,r,e)}function Ba(r,e=\"float32\"){if(St(r),e===\"complex64\"){let o=Ba(r,\"float32\"),n=Yr(r,\"float32\");return Ar(o,n)}let t=bc(ze(r),e);return _.makeTensor(t,r,e)}function I2(r,e,{indexing:t=\"xy\"}={}){if(t!==\"xy\"&&t!==\"ij\")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,\"x\",\"meshgrid\",r instanceof dt?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof dt?e.dtype:\"float32\"),s=ze(o.shape),a=ze(n.shape);return t===\"xy\"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Je(Ba([a,1],o.dtype),o),Je(n,Ba([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Je(o,Ba([1,a],o.dtype)),Je(Ba([s,1],n.dtype),n)])}function N6(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Eo,n)}var Qu=N({minimum_:N6});function T6(r,e,t){$(t===\"reflect\"||t===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");$(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),$(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return _.runKernel(is,a,s)}var v2=N({mirrorPad_:T6});function _6(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(us,n)}var k2=N({mod_:_6});function E6(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=Li(e,r.shape),n=Yu(r,o,t),s=n.shape;t||(s=gi(n.shape,o));let a=tr(Te(Ue(r,\"float32\"),W(n,s))),i=Yu(a,o,t);return{mean:n,variance:i}}var N2=N({moments_:E6});function $6(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=di(t,\"c\",\"multiRNNCell\"),a=di(o,\"h\",\"multiRNNCell\"),i=n,p=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},l=_.runKernel(ps,p,u);return a===1?W(l,[l.size]):l}var _2=N({multinomial_:R6});function D6(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Ro,n)}var Gd=N({notEqual_:D6});function A6(r,e,t=1,o=0,n=\"int32\"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:e,onValue:t,offValue:o};return _.runKernel(ds,a,i)}var Oc=N({oneHot_:A6});function F6(r){let t={x:v(r,\"x\",\"onesLike\")};return _.runKernel(xa,t)}var E2=N({onesLike_:F6});function P6(r,e){let t=v(r,\"v1\",\"outerProduct\"),o=v(e,\"v2\",\"outerProduct\");$(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=W(t,[-1,1]),s=W(o,[1,-1]);return Je(n,s)}var $2=N({outerProduct_:P6});function O6(r,e,t=0){let o=v(r,\"x\",\"pad\");if(o.rank===0)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");let n={paddings:e,constantValue:t},s={x:o};return _.runKernel(fs,s,n)}var za=N({pad_:O6});function M6(r,e,t=0){return $(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),za(r,[e],t)}var R2=N({pad1d_:M6});function L6(r,e,t=0){return $(e.length===2&&e[0].length===2&&e[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),za(r,e,t)}var D2=N({pad2d_:L6});function B6(r,e,t=0){return $(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),za(r,e,t)}var A2=N({pad3d_:B6});function z6(r,e,t=0){return $(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),za(r,e,t)}var F2=N({pad4d_:z6});function V6(r,e,t){let o=v(r,\"x\",\"spaceToBatchND\");$(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),$(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return _.runKernel(Sa,n,s)}var Hd=N({spaceToBatchND_:V6});function W6(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o=\"valid\");let i=v(r,\"x\",\"maxPool\"),p=i,u=!1;i.rank===3&&(u=!0,p=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(br(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let l=Qw(p.shape,e,s,n,o),c=[l.dilationHeight,l.dilationWidth],m;o===\"same\"?m=G6([l.filterHeight,l.filterWidth],c):m=[[0,0],[0,0]];let d=c[0]===1&&c[1]===1,[f,h]=U6([l.inHeight,l.inWidth],c,m),g=d?o:\"valid\",x=d?p:Hd(p,c,f),w=(t===\"avg\"?()=>Id(x,e,s,g,a):()=>Wd(x,e,s,g,a))(),S=d?w:vd(w,c,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function U6(r,e,t){let o=t.map(l=>l[0]),n=t.map(l=>l[1]),s=r.concat(o,n),a=e.map((l,c)=>(l-s[c]%l)%l),i=n.map((l,c)=>l+a[c]),p=e.map((l,c)=>[o[c],i[c]]),u=e.map((l,c)=>[0,a[c]]);return[p,u]}function G6(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var P2=N({pool_:W6});function H6(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return _.runKernel(gs,n)}var Kd=N({prelu_:H6});function K6(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=Ue(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return _.runKernel(Ho,n,s)}var O2=N({prod_:K6});function q6(r,e,t,o){let n=r.map((l,c)=>v(l,`tensors${c}`,\"raggedGather\",\"int32\")),s=v(e,\"paramsDenseValues\",\"raggedGather\"),a=v(t,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=_.runKernel(Qp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var M2=N({raggedGather_:q6});function j6(r,e,t){let o=v(r,\"starts\",\"raggedRange\"),n=v(e,\"limits\",\"raggedRange\",o.dtype),s=v(t,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=_.runKernel(Zp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var L2=N({raggedRange_:j6});function X6(r,e,t,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(e,\"values\",\"raggedTensorToTensor\"),i=v(t,\"defaultValue\",\"raggedTensorToTensor\",a.dtype),p=o.map((c,m)=>v(c,`tensors${m}`,\"raggedTensorToTensor\",\"int32\")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},l={rowPartitionTypes:n};return _.runKernel(Jp,u,l)}var B2=N({raggedTensorToTensor_:X6});function Y6(r,e,t){St(r);let o=ze(r),n=null;if(t==null||t===\"float32\")n=new Float32Array(o);else if(t===\"int32\")n=new Int32Array(o);else if(t===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;soN,createVideoElement:()=>pj,encodeStrings:()=>sN,expectArrayBuffersEqual:()=>uj,expectArraysClose:()=>nj,expectArraysEqual:()=>aj,expectNumbersClose:()=>nN,expectPromiseToFail:()=>sj,expectValuesInRange:()=>ij,play:()=>lj,testEpsilon:()=>jd});var oj=.001,oN=.1;function nj(r,e,t){return t==null&&(t=jd()),uS(r,e,(o,n)=>pS(o,n,t))}function jd(){return _.backend.floatPrecision()===32?oj:oN}function uS(r,e,t){let o=!0;if((Mt(r)||Mt(e))&&(o=!1),Mt(r)&&Mt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=ur(r),i=ur(e);if(!Sr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Mt(r)?r:Us(r),s=Mt(e)?e:Us(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}.\nActual: ${n}.\nExpected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!=\"undefined\"&&expect().nothing()}function aj(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return dn(r)||dn(r[0])||dn(e)||dn(e[0])?uS(r,t,(o,n)=>o==n):uS(r,e,(o,n)=>pS(o,n,0))}function nN(r,e,t){if(t==null&&(t=jd()),!pS(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function pS(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function ij(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function uj(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener(\"loadeddata\",o=>t(e)),e.load()})}async function lj(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var Ju=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,this.dtype=o,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=s||Math.random();this.random=Qd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;for(;!o;){let n,s,a;do n=2*this.random()-1,s=2*this.random()-1,a=n*n+s*s;while(a>=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!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}},Xd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Qd.alea(s.toString()),this.randn=new Ju(0,1,o,!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,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n==\"number\"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Qd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function cj(r,e,t=1,o=\"float32\",n){if(St(r),t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Xd(e,t,o,n),a=ie(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),Bo(e,0)}var cN=N({reverse1d_:wj});function Sj(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),Bo(t,e)}var mN=N({reverse2d_:Sj});function Ij(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),Bo(t,e)}var dN=N({reverse3d_:Ij});function vj(r,e){let t=v(r,\"x\",\"reverse\");return $(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),Bo(t,e)}var fN=N({reverse4d_:vj});function kj(r){let t={x:v(r,\"x\",\"round\")};return _.runKernel(Is,t)}var ef=N({round_:kj});function Nj(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return _.runKernel(Do,t)}var hN=N({rsqrt_:Nj});function Tj(r){let t={x:v(r,\"x\",\"selu\")};return _.runKernel(Ts,t)}var gN=N({selu_:Tj});function _j(r,e,t,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(e,\"depthwiseFilter\",\"separableConv2d\"),u=v(t,\"pointwiseFilter\",\"separableConv2d\"),l=i,c=!1;if(i.rank===3&&(c=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a===\"NCHW\")throw new Error(\"separableConv2d currently does not support dataFormat NCHW; only NHWC is supported\");$(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=cl(l,p,o,n,a,s),g=du(f,u,1,\"valid\",a);return c?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var xN=N({separableConv2d_:_j});async function Ej(r,e){let t=v(r,\"x\",\"setdiff1d\"),o=v(e,\"y\",\"setdiff1d\");$(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),$(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let l=0;l`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Ye(o,[e],[t])}var SN=N({slice1d_:Aj});function Fj(r,e,t){let o=v(r,\"x\",\"slice2d\");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var IN=N({slice2d_:Fj});function Pj(r,e,t){let o=v(r,\"x\",\"slice3d\");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var vN=N({slice3d_:Pj});function Oj(r,e,t){let o=v(r,\"x\",\"slice4d\");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var kN=N({slice4d_:Oj});function Mj(r,e=-1){let t=v(r,\"logits\",\"softmax\",\"float32\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return _.runKernel(Fs,o,n)}var NN=N({softmax_:Mj});function Lj(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return _.runKernel(Xi,e)}var fl=N({fft_:Lj});function Bj(r){$(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return _.runKernel(Yi,e)}var ep=N({ifft_:Bj});function zj(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ep(n)}else{let n=[t,2*(e-1)],s=W(bi(r),[t,e]),a=W(gu(r),[t,e]),i=Bo(Ye(s,[0,1],[t,e-2]),1),p=se(Bo(Ye(a,[0,1],[t,e-2]),1),ke(-1)),u=bt([s,i],1),l=bt([a,p],1),c=W(Ar(u,l),[n[0],n[1]]);o=ep(c)}if(o=bi(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var tf=N({irfft_:zj});function Vj(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return _.runKernel(Ia,n,s)}var Ci=N({split_:Vj});function Wj(r,e){$(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Ye(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=bt([r,Yr(f)],r.shape.length-1),t=e}else n=r;let s=Kt(n),a=W(Ar(n,s),[o,t]),i=fl(a),p=Math.floor(t/2)+1,u=bi(i),l=gu(i),c=Ci(u,[p,t-p],u.shape.length-1),m=Ci(l,[p,t-p],l.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Ar(c[0],m[0]),d)}var hl=N({rfft_:Wj});function Uj(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return _.runKernel(Po,n,s)}var rf=N({squaredDifference_:Uj});function Gj(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(t,mw(t.shape,e).newShape)}var gl=N({squeeze_:Gj});function Hj(r,e=0){let t=di(r,\"tensors\",\"stack\",\"string_or_numeric\");$(t.length>=1,()=>\"Pass at least one tensor to tf.stack\"),t.length>0&&$(e<=t[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=t,n={axis:e};return _.runKernel(ya,o,n)}var Tr=N({stack_:Hj});function Kj(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return _.runKernel(Ko,o,n)}var of=N({step_:Kj});function qj(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let l={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},c={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return _.runKernel(Os,l,c)}var TN=N({stridedSlice_:qj});function jj(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return _.runKernel(Ms,t)}var _N=N({tan_:jj});function rr(r,e){fo(r);let t=ur(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return vr(r,null,t,e)}function bu(r,e,t){if(fo(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=ur(r,t);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return vr(r,e,o,t)}function nf(r,e,t){if(fo(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=ur(r,t);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return vr(r,e,o,t)}function EN(r,e,t){if(fo(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=ur(r,t);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return vr(r,e,o,t)}function $N(r,e,t){if(fo(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=ur(r,t);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return vr(r,e,o,t)}function RN(r,e,t){if(fo(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=ur(r,t);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return e=e||o,vr(r,e,o,t)}var Cu={};qe(Cu,{calculateShapes:()=>DN,validateInput:()=>xl,validateUpdateShape:()=>lS});function lS(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let c=n;c= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=_.runKernel(Bs,s,a);return{values:i,indices:p}}var FN=N({topk_:Yj});function Qj(r,e=0,t=1,o,n){if(St(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new Ju(e,t,o,!0,n),a=ie(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:t},n={axis:e},[s,a]=_.runKernel(nu,o,n);return{values:s,indices:a}}var ON=N({unique_:Zj});function Jj(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");$(Ja(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return _.runKernel(su,s,a)}var MN=N({unsortedSegmentSum_:Jj});function eX(r,e=0){let t=v(r,\"x\",\"unstack\",\"string_or_numeric\");$(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return _.runKernel(Ta,o,n)}var zo=N({unstack_:eX});function LN(r,e){return Pc(r,e,\"right\")}function BN(r,e=!0,t,o){return _.makeVariable(r,e,t,o)}function sf(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),yt(i.slice(s,s+a),n.shape,\"mask's shape must match the first K dimensions of tensor's shape,\");let p=1;for(let h=s;hi).reverse()),$(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype===\"complex64\"?De(()=>{let a=bi(o),i=gu(o);return a=_.runKernel(Kr,{x:a},s),i=_.runKernel(Kr,{x:i},s),t&&(i=mr(i)),Ar(a,i)}):_.runKernel(Kr,n,s)}var yl=N({transpose_:nX});function sX(r,e,t,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(e,\"x\",\"movingAverage\"),i=v(t,\"decay\",\"movingAverage\");Fw(s,a),$(Sr(s.shape,a.shape),()=>\"Shape mismatch in v and x\");let p=ke(1),u=Te(p,i),l=se(Te(a,s),u);if(n){$(o!=null,()=>\"When using zeroDebias: true, step is required.\");let c=v(o,\"step\",\"movingAverage\");l=Xe(l,Te(p,xi(i,c)))}return Ce(s,l)}var aX=N({movingAverage_:sX});function iX(r,e,t){St(t);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");xl(n,o,t);let s={indices:o,updates:n},a={shape:t};return _.runKernel(vs,s,a)}var uX=N({scatterND_:iX});function zN(r,e,t,o){if(r.dtype!==\"int32\")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function lX(r,e,t,o=0){St(t);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);zN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return _.runKernel(Ps,i,p)}var cX=N({sparseToDense_:lX});function mX(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return _.runKernel(Kn,n)}var dX=N({gatherND_:mX});function VN(r,e){if(e==null)return r.shape.slice();if(Sr(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),$(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof dt?n.clone():n;let s=VN(n,t),a=1-e,i=Xe(Rd(Ce(dl(s,0,1,\"float32\",o),a)),a);return se(n,i)}var hX=N({dropout_:fX});function cS(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Mc(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),yt(o.shape.slice(0,o.shape.length-1),n.shape,\"predictions's shape should be align with the targets' shape, except the last dimension.\");let s=o.shape[o.shape.length-1];$(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],l=dw(\"bool\",p);for(let c=0;cg.value-h.value),l[c]=0;for(let h=0;hUN,depthwiseConv2d:()=>KN,matMul:()=>qN});function yX(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];$(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),$(l===t[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${t[3]}).`),zt(\"conv2dDerFilter\",n,a);let c={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return _.runKernel(Ui,c,m)}var WN=N({conv2DBackpropFilter_:yX});function tp(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return se(r,of(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function rp(r,e){let t=e,o=Td(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function op(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return yu(r);if(e===\"elu\")return Ed(r);if(e===\"relu6\")return Jd(r);if(e===\"prelu\")return Kd(r,t);if(e===\"leakyrelu\")return Fd(r,o);if(e===\"sigmoid\")return Pa(r);throw new Error(`Unknown fused activation ${e}.`)}var np=(r,e)=>!(r>0)||e===\"linear\";function bX({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:l}){if(p=p||\"linear\",np(_.state.gradientDepth,p)===!1){$(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let T=du(r,e,t,o,n,s,a);return i!=null&&(T=Ce(T,i)),op(T,p,u,l)}let c=v(r,\"x\",\"conv2d\",\"float32\"),m=v(e,\"filter\",\"conv2d\",\"float32\"),d=c,f=!1;c.rank===3&&(f=!0,d=W(c,[1,c.shape[0],c.shape[1],c.shape[2]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),zt(\"fused conv2d\",o,a);let h=n===\"NHWC\"?d.shape[3]:d.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(br(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=Ku(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,c),n===\"NHWC\"?rt(g.outShape,x.shape):($(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let T=u.shape;if($(T.length<=1||T.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${T.length}.`),T.length===1)$(T[0]===1||T[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the number of output channels (${g.outChannels}).`);else if(T.length===3)try{rt(T,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,\"prelu weights\",\"fused conv2d\")}let w=(T,E)=>{$(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,F,O]=E,M=tp(T,F,p);$(Hu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=Nd(D.shape,M,R,t,o),B=WN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=rp(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:l};return i==null?Nr((E,R,D)=>{let F=_.runKernel(jo,S,k);return D([R,E,F]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:w}})(d,m):Nr((E,R,D,F)=>{let O=_.runKernel(jo,S,k);return F([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:w}})(d,m,x)}var UN=N({fusedConv2d_:bX});function CX(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},l={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return _.runKernel(Gi,u,l)}var GN=N({depthwiseConv2dNativeBackpropFilter_:CX});function wX(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},l={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},c=_.runKernel(Hi,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var HN=N({depthwiseConv2dNativeBackpropInput_:wX});function SX({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:l}){if(np(_.state.gradientDepth,p)===!1){let k=cl(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),op(k,p,u,l)}let c=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),d=c,f=!1;c.rank===3&&(f=!0,d=W(c,[1,c.shape[0],c.shape[1],c.shape[2]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),$(br(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),zt(\"fused depthwiseConv2d\",o,a);let h=Ku(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Oe(g,c),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,T)=>{$(Hu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,F]=T,O=tp(k,D,p),M=HN(R.shape,O,E,t,o,s,a),L=GN(R,O,E.shape,t,o,s,a);if(F!=null){let B=rp(g,O);return[M,L,B]}return[M,L]},w={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:l};return i==null?Nr((T,E,R)=>{let D=_.runKernel(Xo,w,S);return R([E,T,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Nr((T,E,R,D)=>{let F=_.runKernel(Xo,w,S);return D([E,T,F,R]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:b}})(d,m,g)}var KN=N({fusedDepthwiseConv2d_:SX});function IX({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(np(_.state.gradientDepth,s)===!1){let O=Je(r,e,t,o);return n!=null&&(O=Ce(O,n)),op(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Oe(p,u);let l=t?p.shape[p.rank-2]:p.shape[p.rank-1],c=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);$(l===c,()=>`Error in fused matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let w=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,l,m]):W(p,[g,m,l]),k=o?W(u,[x,d,c]):W(u,[x,c,d]),T;n!=null&&(T=v(n,\"bias\",\"fused matMul\"),[T]=Oe(T,p),rt(w,T.shape));let E;a!=null&&(E=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=tp(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Je(j,B,!1,!0),Y=Je(L,j,!0,!1)):!t&&o?(q=Je(j,B,!1,!1),Y=Je(j,L,!0,!1)):t&&!o?(q=Je(B,j,!1,!0),Y=Je(L,j,!1,!1)):(q=Je(B,j,!0,!0),Y=Je(j,L,!0,!0)),n!=null){let J=rp(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:T,preluActivationWeights:E},F={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Nr((M,L,B)=>{let z=_.runKernel(qo,D,F);return B([M,L,z]),{value:W(z,w),gradFunc:R}})(S,k):Nr((M,L,B,z)=>{let U=_.runKernel(qo,D,F);return z([M,L,U,B]),{value:W(U,w),gradFunc:R}})(S,k,T)}var qN=N({fusedMatMul_:IX});function vX(r){return Mc(r,.54,.46)}var jN=N({hammingWindow_:vX});function kX(r){return Mc(r,.5,.5)}var uf=N({hannWindow_:kX});function NX(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Ye(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let l={image:a,boxes:i,boxInd:p},c={method:n,extrapolationValue:s,cropSize:o};return _.runKernel(Mn,l,c)}var YN=N({cropAndResize_:_X});function EX(r){let e=v(r,\"image\",\"flipLeftRight\",\"float32\");$(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return _.runKernel(Gn,t,{})}var QN=N({flipLeftRight_:EX});function $X(r){let e=v(r,\"image\",\"grayscaleToRGB\"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,hu(e,n)}var ZN=N({grayscaleToRGB_:$X});function RX(r){let e=v(r,\"image\",\"RGBToGrayscale\"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,\"float32\"),a=rr([.2989,.587,.114]),i;switch(e.rank){case 2:i=fu(\"ij,j->i\",s,a);break;case 3:i=fu(\"ijk,k->ij\",s,a);break;case 4:i=fu(\"ijkl,l->ijk\",s,a);break;case 5:i=fu(\"ijklm,m->ijkl\",s,a);break;case 6:i=fu(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ks(i,-1),Ue(i,n)}var JN=N({rgbToGrayscale_:RX});function DX(r,e,t=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return _.runKernel(Vs,s,a)}var eT=N({rotateWithOffset_:DX});function en(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(e.rank===1,()=>\"scores must be a 1D tensor\"),$(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function AX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=en(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return _.runKernel(cs,{boxes:s,scores:a},p)}var tT=N({nonMaxSuppression_:AX});function rT(r,e,t){let o=FX(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function FX(r,e,t){return OX(r,e,t||PX)}function PX(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function lf(r,e,t,o,n){return dS(r,e,t,o,n,0)}function cf(r,e,t,o,n,s){return dS(r,e,t,o,n,0,!1,s,!0)}function mf(r,e,t,o,n,s){return dS(r,e,t,o,n,s,!0)}function dS(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(oT);let l=s>0?-.5/s:0,c=[],m=[];for(;c.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:w}=g;if(x=w;--k){let T=MX(r,b,c[k]);if(T>=o){S=!0;break}if(g.score=g.score*LX(o,l,T),g.score<=n)break}g.suppressBeginIndex=c.length,S||(g.score===x?(c.push(b),m.push(g.score)):g.score>n&&rT(u,g,oT))}let d=c.length,f=t-d;i&&f>0&&(c.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:c};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function MX(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),l=Math.min(n[1],n[3]),c=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(c-u)*(m-l);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,l),x=Math.min(i,c),b=Math.min(p,m),w=Math.max(x-h,0)*Math.max(b-g,0);return w/(d+f-w)}function LX(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function oT(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function BX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=en(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],l=p[1],{selectedIndices:c}=lf(u,l,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),rr(c,\"int32\")}var nT=BX;function zX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=en(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},l={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},c=_.runKernel(ms,u,l);return{selectedIndices:c[0],selectedScores:c[1]}}var sT=N({nonMaxSuppressionWithScore_:zX});async function VX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=en(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),l=u[0],c=u[1],{selectedIndices:m,selectedScores:d}=mf(l,c,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:rr(m,\"int32\"),selectedScores:rr(d)}}var aT=VX;function WX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=en(a,i,t,o,n,null),u=p.maxOutputSize,l=p.iouThreshold,c=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:l,scoreThreshold:c,padToMaxOutputSize:s},f=_.runKernel(ni,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var iT=N({nonMaxSuppressionPadded_:WX});async function UX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=en(a,i,t,o,n,null),u=p.maxOutputSize,l=p.iouThreshold,c=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=cf(m,d,u,l,c,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:rr(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var uT=UX;function GX(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),$(o===!1||t===!1,()=>\"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=_.runKernel(Cs,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var pT=N({resizeBilinear_:GX});function HX(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),$(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),$(o===!1||t===!1,()=>\"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=_.runKernel(bs,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var lT=N({resizeNearestNeighbor_:HX});function KX(r,e=\"binary\",t=!1,o=.5){let n=v(r,\"image\",\"threshold\"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(rr([o]),255),l,c,m,d;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(e===\"otsu\"||e===\"binary\",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[l,c,m]=Ci(n,[1,1,1],-1);let g=se(l,s),x=se(c,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e===\"otsu\"){let g=kd(Ue(ef(d),\"int32\"),pr([]),256);u=qX(g,p)}let f=t?ml(d,u):ju(d,u);return Ue(se(f,255),\"int32\")}function qX(r,e){let t=rr([-1]),o=rr([0]),n=rr([0]),s,a,i,p,u,l;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return _.runKernel(zs,p,u)}var mT=N({transform_:jX});function XX(r,e,t){let o=v(r,\"a\",\"bandPart\");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof e==\"number\"?($(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),$(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,\"numLower\",\"bandPart\")):($(e.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=Lo(Fc(e,0),s,Qu(e,s))),typeof t==\"number\"?($(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),$(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,\"numUpper\",\"bandPart\")):($(t.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=Lo(Fc(t,0),a,Qu(t,a)));let u=W(xu(0,s,1,\"int32\"),[-1,1]),l=xu(0,a,1,\"int32\"),c=Te(u,l),m=Xu(ml(c,i),Ad(c,mr(p))),d=Yr([s,a],o.dtype);return W(Tr(zo(W(o,[-1,s,a])).map(f=>Lo(m,f,d))),n)}var dT=N({bandPart_:XX});function YX(r){let e;if(Array.isArray(r)){e=!1,$(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=Ci(r,r.shape[0],0).map(n=>gl(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return hT(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=zo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,l]=hT(p,e);n.push(u),s.push(l)});let a=W(Tr(n,0),r.shape),i=W(Tr(s,0),r.shape);return[a,i]}}function hT(r,e=!1){return _.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=$d(t),s=Xr(r),a=bu([[1]],[1,1]),i=Xr(a),p=t>=o?o:t;for(let u=0;u{let d=Ye(s,[u,u],[t-u,1]),f=qu(d),h=Ye(s,[u,u],[1,1]),g=Lo(ju(h,0),bu([[-1]]),bu([[1]])),x=Te(h,se(g,f)),b=Xe(d,x);b.shape[0]===1?i=Xr(a):i=bt([a,Ye(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let w=mr(Xe(Je(g,x),f)),S=Ye(s,[u,0],[t-u,o]),k=se(w,i),T=yl(i);if(u===0)s=Te(S,Je(k,Je(T,S)));else{let D=Te(S,Je(k,Je(T,S)));s=bt([Ye(s,[0,0],[u,o]),D],0)}let E=yl(k),R=Ye(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Je(Je(R,i),E));else{let D=Te(R,Je(Je(R,i),E));n=bt([Ye(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Lt([l,c,m])}return!e&&t>o&&(n=Ye(n,[0,0],[t,o]),s=Ye(s,[0,0],[o,o])),[n,s]})}var gT=N({qr_:QX});var Dt;(function(r){r[r.NONE=0]=\"NONE\",r[r.MEAN=1]=\"MEAN\",r[r.SUM=2]=\"SUM\",r[r.SUM_BY_NONZERO_WEIGHTS=3]=\"SUM_BY_NONZERO_WEIGHTS\"})(Dt||(Dt={}));function ZX(r,e,t=Dt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(t===Dt.NONE)return s;if(t===Dt.SUM)return ot(s);if(t===Dt.MEAN){if(n==null)return Yu(s);{let a=o.size/n.size,i=Xe(ot(s),ot(n));return a>1?Xe(i,ke(a)):i}}if(t===Dt.SUM_BY_NONZERO_WEIGHTS){if(n==null)return Xe(ot(s),ke(o.size));{let a=se(n,Ba(o.shape)),i=Ue(ot(Gd(a,ke(0))),\"float32\");return Xe(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var dr=N({computeWeightedLoss_:ZX});function JX(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),yt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=er(Te(n,s));return dr(i,a,o)}var xT=N({absoluteDifference_:JX});function e5(r,e,t,o,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),yt(s.shape,a.shape,\"Error in cosineDistance: \");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return dr(u,i,n)}var yT=N({cosineDistance_:e5});function t5(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),yt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=yu(Te(i,se(n,s)));return dr(p,a,o)}var bT=N({hingeLoss_:t5});function r5(r,e,t,o=1,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),yt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=er(Te(a,s)),l=Qu(u,p),c=Te(u,l),m=Ce(se(ke(.5),tr(l)),se(p,c));return dr(m,i,n)}var CT=N({huberLoss_:r5});function o5(r,e,t,o=1e-7,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),yt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),l=mr(se(s,yi(Ce(a,u)))),c=se(Te(p,s),yi(Ce(Te(p,a),u))),m=Te(l,c);return dr(m,i,n)}var wT=N({logLoss_:o5});function n5(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),yt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=rf(n,s);return dr(i,a,o)}var ST=N({meanSquaredError_:n5});function s5(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");yt(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=yu(o),s=se(o,t),a=Pd(Jo(mr(er(o))));return Ce(Te(n,s),a)}function a5(r,e,t,o=0,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(e,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"sigmoidCrossEntropy\")),yt(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=ke(o),l=ke(1),c=ke(.5);s=Ce(se(s,Te(l,u)),se(c,u))}let p=s5(s,a);return dr(p,i,n)}var IT=N({sigmoidCrossEntropy_:a5});function i5(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Nr((n,s,a)=>{let p=Ld(s,[t],!0),u=Te(Ue(s,\"float32\"),p);a([n,u]);let l=mr(se(u,n));return{value:ot(l,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=gi(d.shape,[t]);return[se(W(d,x),Te(Ue(h,\"float32\"),Jo(g))),se(W(d,x),Te(Jo(g),Ue(h,\"float32\")))]}}})(r,e)}function u5(r,e,t,o=0,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(e,\"logits\",\"softmaxCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"softmaxCrossEntropy\")),yt(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=ke(o),l=ke(1),c=ke(s.shape[1]);s=Ce(se(s,Te(l,u)),Xe(u,c))}let p=i5(s,a);return dr(p,i,n)}var vT=N({softmaxCrossEntropy_:u5});function p5(r,e,t,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(e,\"values\",\"sparseFillEmptyRows\"),a=v(t,\"denseShape\",\"sparseFillEmptyRows\",\"int32\"),i=v(o,\"defaultValue\",\"sparseFillEmptyRows\",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=_.runKernel(eu,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var kT=N({sparseFillEmptyRows_:p5});function l5(r,e,t){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(e,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(t,\"newShape\",\"sparseReshape\",\"int32\");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape\n ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=_.runKernel(ui,a);return{outputIndices:i[0],outputShape:i[1]}}var NT=N({sparseReshape_:l5});function c5(r,e,t){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(e,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentMean\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return _.runKernel(va,a)}var TT=N({sparseSegmentMean_:c5});function m5(r,e,t){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(e,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentSum\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return _.runKernel(ka,a)}var _T=N({sparseSegmentSum_:m5});function d5(r,e,t,o,n,s,a,i){let p=v(r,\"data\",\"stringNGrams\",\"string\");if(p.dtype!==\"string\")throw new Error(\"Data must be of datatype string\");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let l={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},c={data:p,dataSplits:u},m=_.runKernel(Na,c,l);return{nGrams:m[0],nGramsSplits:m[1]}}var ET=N({stringNGrams_:d5});function f5(r,e,t=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(e,\"delimiter\",\"stringSplit\",\"string\");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=_.runKernel(ru,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var $T=N({stringSplit_:f5});function h5(r,e){let t=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:e};if(e<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:t};return _.runKernel(ou,n,o)}var RT=N({stringToHashBucketFast_:h5});function g5(r,e,t,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:e,rewrite:t,replaceGlobal:o};return _.runKernel(pi,{x:n},s)}var DT=N({staticRegexReplace_:g5});var x5={fft:fl,ifft:ep,rfft:hl,irfft:tf},y5={hammingWindow:jN,hannWindow:uf,frame:pf,stft:XN},b5={flipLeftRight:QN,grayscaleToRGB:ZN,resizeNearestNeighbor:lT,resizeBilinear:pT,rgbToGrayscale:JN,rotateWithOffset:eT,cropAndResize:YN,nonMaxSuppression:tT,nonMaxSuppressionAsync:nT,nonMaxSuppressionWithScore:sT,nonMaxSuppressionWithScoreAsync:aT,nonMaxSuppressionPadded:iT,nonMaxSuppressionPaddedAsync:uT,threshold:cT,transform:mT},C5={bandPart:dT,gramSchmidt:fT,qr:gT},w5={absoluteDifference:xT,computeWeightedLoss:dr,cosineDistance:yT,hingeLoss:bT,huberLoss:CT,logLoss:wT,meanSquaredError:ST,sigmoidCrossEntropy:IT,softmaxCrossEntropy:vT},S5={sparseFillEmptyRows:kT,sparseReshape:NT,sparseSegmentMean:TT,sparseSegmentSum:_T},I5={stringNGrams:ET,stringSplit:$T,stringToHashBucketFast:RT,staticRegexReplace:DT};var AT={};qe(AT,{Serializable:()=>Lc,SerializationMap:()=>df,getRegisteredName:()=>k5,registerClass:()=>hS});var v5=new Map,fS=new Map,Lc=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},df=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function hS(r,e,t){$(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),$(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),$(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),typeof e==\"undefined\"&&(e=\"Custom\"),typeof t==\"undefined\"&&(t=r.className);let o=t,n=e+\">\"+o;return df.register(r),v5.set(n,r),fS.set(r,n),r}function k5(r){return fS.has(r)?fS.get(r):r.className}var _r=class extends Lc{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Lt(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return eS(e,t)}dispose(){this.iterations_!=null&&Lt(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:ke(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(_r,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var sp=class extends _r{static get className(){return\"Adadelta\"}constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Kt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;De(()=>{let l=Ce(se(p,this.rho),se(tr(i),1-this.rho)),c=se(Xe(Pr(Ce(u,this.epsilon)),Pr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(tr(c),1-this.rho));p.assign(l),u.assign(m);let d=Ce(se(c,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Lt(this.accumulatedGrads.map(e=>e.variable)),Lt(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,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};var ap=class extends _r{static get className(){return\"Adagrad\"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ma(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,tr(a));i.assign(p);let u=Ce(se(Xe(a,Pr(Ce(p,_.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Lt(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(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};var ip=class extends _r{static get className(){return\"Adam\"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);t.forEach((s,a)=>{let i=_.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Kt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Kt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let l=this.accumulatedFirstMoment[a].variable,c=this.accumulatedSecondMoment[a].variable,m=Ce(se(l,this.beta1),se(u,1-this.beta1)),d=Ce(se(c,this.beta2),se(tr(u),1-this.beta2)),f=Xe(m,o),h=Xe(d,n);l.assign(m),c.assign(d);let g=Ce(se(Xe(f,Ce(Pr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Lt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Lt(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),De(()=>{this.accBeta1.assign(xi(this.beta1,this.iterations_+1)),this.accBeta2.assign(xi(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}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)}};var up=class extends _r{static get className(){return\"Adamax\"}constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Xe(-this.learningRate,Ce(se(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=_.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Kt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Kt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let l=this.accumulatedFirstMoment[a].variable,c=this.accumulatedWeightedInfNorm[a].variable,m=Ce(se(l,this.beta1),se(u,1-this.beta1)),d=se(c,this.beta2),f=er(u),h=Ud(d,f);l.assign(m),c.assign(h);let g=Ce(se(Xe(n,o),Xe(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Lt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Lt(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)}};var wi=class extends _r{static get className(){return\"SGD\"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=_.registeredVariables[o];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Fr(ke(-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)}};var pp=class extends wi{static get className(){return\"Momentum\"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Kt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Lt(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(o=>({originalName:o.name,variable:o.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)}};var lp=class extends _r{static get className(){return\"RMSProp\"}constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=_.backend.epsilon()),e==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Kt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;De(()=>{let l=Ce(se(p,this.decay),se(tr(i),1-this.decay));if(this.centered){let c=this.accumulatedMeanGrads[n].variable,m=Ce(se(c,this.decay),se(i,1-this.decay)),d=Xe(se(i,this.learningRate),Pr(Te(l,Ce(tr(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(l),c.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let c=Ce(se(p,this.decay),se(tr(i),1-this.decay)),m=Ce(se(u,this.momentum),Xe(se(i,this.learningRate),Pr(Ce(c,this.epsilon))));p.assign(c),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Lt(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Lt(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Lt(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,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}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)}};var N5=[sp,ap,ip,up,pp,lp,wi];function FT(){for(let r of N5)hS(r)}var Si={};qe(Si,{CompositeArrayBuffer:()=>lr,browserFiles:()=>OT,browserHTTPRequest:()=>zT,concatenateArrayBuffers:()=>Zk,copyModel:()=>m1,decodeWeights:()=>hd,decodeWeightsStream:()=>gd,encodeWeights:()=>jk,fromMemory:()=>VT,fromMemorySync:()=>wS,getLoadHandlers:()=>r1,getModelArtifactsForJSON:()=>il,getModelArtifactsForJSONSync:()=>Uw,getModelArtifactsInfoForJSON:()=>$a,getSaveHandlers:()=>t1,getWeightSpecs:()=>Ec,http:()=>hf,isHTTPScheme:()=>ff,listModels:()=>l1,loadWeights:()=>LT,moveModel:()=>d1,registerLoadRouter:()=>e1,registerSaveRouter:()=>Jk,removeModel:()=>c1,weightsLoaderFactory:()=>bS,withSaveHandler:()=>WT,withSaveHandlerSync:()=>UT});var T5=\"model\",_5=\".json\",E5=\".weights.bin\";function PT(r){return new Promise(e=>setTimeout(e)).then(r)}var bl=class r{constructor(e){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=T5),this.modelJsonFileName=e+_5,this.weightDataFileName=e+E5}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=lr.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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}],s=xd(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:\"application/json\"})),i=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await PT(()=>i.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await PT(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:$a(e)}}}};bl.URL_SCHEME=\"downloads://\";var gS=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=il(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,a])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Ww(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ww(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},$5=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(bl.URL_SCHEME)?R5(r.slice(bl.URL_SCHEME.length)):null;Xt.registerSaveRouter($5);function R5(r=\"model\"){return new bl(r)}function OT(r){return new gS(r)}function xS(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let l=t+ ++n/r.length*(o-t);return e(l),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function yS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(c=>t(c,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await xS(o,e.onProgress,0,.5)).map(c=>c.arrayBuffer());return e.onProgress==null?await Promise.all(i):await xS(i,e.onProgress,.5,1)}function MT(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nyS(a,{requestInit:o}))(r,e,t)}function bS(r){return async(e,t=\"\",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x=\"quantization\"in g?g.quantization.dtype:g.dtype,b=fi[x]*ze(g.shape),w=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((S,k)=>{S===g.name&&(w(),a[k]=!0)}):w(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(\", \")}. \nManifest JSON has weights with names: ${i.join(\", \")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith(\"/\")?\"\":\"/\")+f;u.push(h)})});let l=await r(u),c={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=new lr(l.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),w=hd(b,[x.manifestEntry]);for(let S in w)c[S]=w[S]}),m+=f}),c}}var D5=\"application/octet-stream\",A5=\"application/json\",Bc=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?($(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=A().platform.fetch,$(e!=null&&e.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(e)&&$(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||{},this.loadOptions=t}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 o=[{paths:[\"./model.weights.bin\"],weights:e.weightSpecs}],n=xd(e,o);if(t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:A5}),\"model.json\"),e.weightData!=null){let a=lr.join(e.weightData);t.body.append(\"model.weights.bin\",new Blob([a],{type:D5}),\"model.weights.bin\")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:$a(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(\".pb\")?a+=\" 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.\":a+=\" Please make sure the server is serving valid JSON for this request.\",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return il(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Ec(e.weightsManifest),n=()=>MT(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=F5(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Ec(e),n=await yS(t,this.loadOptions);return[o,n]}};Bc.URL_SCHEME_REGEX=/^https?:\\/\\//;function F5(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function ff(r){return r.match(Bc.URL_SCHEME_REGEX)!=null}var BT=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>ff(o)):t=ff(r),t)return hf(r,e)}return null};Xt.registerSaveRouter(BT);Xt.registerLoadRouter(BT);function hf(r,e){return new Bc(r,e)}function zT(r,e){return hf(r,e)}var zc=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},gf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},CS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function VT(r,e,t,o){let n=arguments;return new CS(wS(...n))}function wS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new zc(r):(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 zc({modelTopology:r})):(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 zc({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function WT(r){return new gf(r)}function UT(r){return new gf(r)}var HT={};qe(HT,{confusionMatrix:()=>GT});function P5(r,e,t){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(e,\"predictions\",\"confusionMatrix\");$(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=Oc(Ue(o,\"int32\"),t),a=Oc(Ue(n,\"int32\"),t),i=yl(s),p=Je(i,a);return Ue(p,\"int32\")}var GT=N({confusionMatrix_:P5});var XT={};qe(XT,{draw:()=>U5,fromPixels:()=>G5,fromPixelsAsync:()=>z5,toPixels:()=>W5});var cp,KT=!1;function qT(r,e=3){if(e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");if(r==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!=\"undefined\"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!=\"undefined\"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!=\"undefined\"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!=\"undefined\"&&r instanceof ImageBitmap)i=!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 ${r.constructor.name}`);if(tl(Lu,_.backendName)!=null){let f={pixels:r},h={numChannels:e};return _.runKernel(Lu,f,h)}let[u,l]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],c;if(a)c=r.getContext(\"2d\").getImageData(0,0,u,l).data;else if(o||t)c=r.data;else if(s||n||i){if(cp==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")cp=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else cp=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});cp.canvas.width=u,cp.canvas.height=l,cp.drawImage(r,0,0,u,l),c=cp.getImageData(0,0,u,l).data}let m;if(e===4)m=new Int32Array(c);else{let f=u*l;m=new Int32Array(f*e);for(let h=0;h4||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function V5(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function W5(r,e){let t=v(r,\"img\",\"toPixels\");if(!(r instanceof dt)){let u=t;t=Ue(u,\"int32\"),u.dispose()}jT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],a=await t.data(),i=t.dtype===\"float32\"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype===\"int32\"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(l[0]=d*i,l[1]=d*i,l[2]=d*i):l[m]=d*i}let c=u*4;p[c+0]=Math.round(l[0]),p[c+1]=Math.round(l[1]),p[c+2]=Math.round(l[2]),p[c+3]=Math.round(l[3])}if(e!=null){KT||tl(Mu,_.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),KT=!0),e.width=n,e.height=o;let u=e.getContext(\"2d\"),l=new ImageData(p,n,o);u.putImageData(l,0,0)}return t!==r&&t.dispose(),p}function U5(r,e,t){let o=v(r,\"img\",\"draw\");if(!(r instanceof dt)){let a=o;o=Ue(a,\"int32\"),a.dispose()}jT(o),V5(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};_.runKernel(Mu,n,s)}var G5=N({fromPixels_:qT});var xf={};qe(xf,{prepareAndValidate:()=>YT});function YT(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!==\"int32\")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let c=0;cc/u),1].slice(0,s);return[p,a,u,l]}var nt={};qe(nt,{assertParamsValid:()=>K5,computeFlatOffset:()=>Q5,computeOutShape:()=>j5,getNormalizedAxes:()=>X5,isSliceContinous:()=>Y5,maskToAxes:()=>q5,parseSliceParams:()=>Z5,sliceInfo:()=>J5,startForAxis:()=>n_,startIndicesWithElidedDims:()=>t_,stopForAxis:()=>s_,stopIndicesWithElidedDims:()=>r_,stridesForAxis:()=>o_,stridesWithElidedDims:()=>ZT});var SS=-2,H5=-1;function K5(r,e,t){let o=r.shape.length;$(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),$(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function q5(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function j5(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;l=t_(a,d,f,o,r),c=r_(i,d,f,n,r),m=ZT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=JT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=JT(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=qp(0,a,p-1),a}function s_(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=qp(0,a,p):a=qp(-1,a,p-1),a}function Y5(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function Q5(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return t==null?s=new Array(n).fill(-1):typeof t==\"number\"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function J5(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&a&a-1)throw new Error(\"Multiple ellipses in slice is not allowed.\");let l=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let w=0;w0?0:-1,m.strides[w]>0?k:k-1];if(S&&m.strides[w]<=0)throw Error(\"only stride 1 allowed on non-range indexing.\");h=h&&m.strides[w]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[w]} of dimension ${w} out of bounds.`)}else m.begin[w]=QT(m.begin[w],0,m.strides[w],k,T,E),m.end[w]=QT(m.end[w],1,m.strides[w],k,T,E);let O=m.strides[w]===1&&m.begin[w]===0&&m.end[w]===k;d=d&&O,f=f&&(w===0&&m.strides[w]===1||O)}else d=d&&m.strides[w]===1&&R,f=f&&(w===0&&m.strides[w]===1||R);let D,F=!1;if(m.beginValid&&m.endValid?(D=m.end[w]-m.begin[w],F=!0):S?(D=1,F=!0):R&&k>=0&&(m.strides[w]<0?D=-k:D=k,F=!0),F){let O;D===0||D<0!=m.strides[w]<0?O=0:O=Math.trunc(D/m.strides[w])+(D%m.strides[w]!==0?1:0),g.push(O)}else g.push(-1)}for(let w=0;w=0?x.push(g[S]):S===SS&&x.push(1)}return{finalShapeSparse:x.filter((w,S)=>m.finalShapeGatherIndices[S]!==SS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function e8(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var t8=\"4.17.0\";var Vc=class{static sgd(e){return new wi(e)}static momentum(e,t,o=!1){return new pp(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new lp(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new ip(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new sp(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new up(e,t,o,n,s)}static adagrad(e,t=.1){return new ap(e,t)}};var cHe=Vc;var r8=typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r();function IS(){return new Promise(r=>r8(()=>r()))}var C={};qe(C,{ERF_A1:()=>b8,ERF_A2:()=>C8,ERF_A3:()=>w8,ERF_A4:()=>S8,ERF_A5:()=>I8,ERF_P:()=>y8,PARALLELIZE_THRESHOLD:()=>yf,RowPartitionType:()=>Va,SELU_SCALE:()=>x8,SELU_SCALEALPHA:()=>g8,applyActivation:()=>op,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>_q,assertParamsConsistent:()=>o8,assignToTypedArray:()=>E8,axesAreInnerMostDims:()=>Jw,calculateShapes:()=>DN,checkEinsumDimSizes:()=>P8,checkPadOnDimRoundingMode:()=>zt,combineLocations:()=>u2,combineRaggedTensorToTensorShapes:()=>s8,complexWithEvenIndex:()=>N8,complexWithOddIndex:()=>T8,computeConv2DInfo:()=>Ku,computeConv3DInfo:()=>_1,computeDefaultPad:()=>Zw,computeDilation2DInfo:()=>NK,computeOptimalWindowSize:()=>p8,computeOutAndReduceShapes:()=>Tq,computeOutShape:()=>n8,computePool2DInfo:()=>Qw,computePool3DInfo:()=>TK,convertConv2DDataFormat:()=>E1,decodeEinsumEquation:()=>A8,eitherStridesOrDilationsAreOne:()=>br,expandShapeToKeepDim:()=>gi,exponent:()=>R8,exponents:()=>$8,fromStringArrayToUint8:()=>rY,fromUint8ToStringArray:()=>tY,getAxesPermutation:()=>Eq,getBroadcastDims:()=>o2,getComplexWithIndex:()=>_8,getEinsumComputePath:()=>O8,getEinsumPermutation:()=>F8,getFusedBiasGradient:()=>rp,getFusedDyActivation:()=>tp,getImageCenter:()=>l8,getInnerMostAxes:()=>Rq,getPermuted:()=>m8,getRaggedRank:()=>i8,getReductionAxes:()=>Td,getReshaped:()=>c8,getReshapedPermuted:()=>d8,getRowPartitionTypesHelper:()=>a8,getSliceBeginCoords:()=>f8,getSliceSize:()=>h8,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>z8,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>V8,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>W8,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>H8,getSparseReshapeInputOutputMismatchErrorMessage:()=>q8,getSparseReshapeInputOutputMultipleErrorMessage:()=>K8,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>U8,getSparseReshapeNegativeOutputDimErrorMessage:()=>G8,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>Q8,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>j8,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>X8,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>Y8,getUndoAxesPermutation:()=>$q,isIdentityPermutation:()=>M8,log:()=>CH,mergeRealAndImagArrays:()=>v8,prepareAndValidate:()=>YT,prepareSplitSize:()=>B8,segment_util:()=>kS,shouldFuse:()=>np,slice_util:()=>nt,splitRealAndImagArrays:()=>k8,stridesOrDilationsArePositive:()=>Aa,tupleValuesAreOne:()=>Hu,upcastType:()=>pt,validateDefaultValueShape:()=>u8,validateInput:()=>xl,validateUpdateShape:()=>lS,warn:()=>Ea});function o8(r,e){let t=r[0].length;r.forEach((n,s)=>{$(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),$(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function n8(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function a8(r){let e={FIRST_DIM_SIZE:Va.FIRST_DIM_SIZE,VALUE_ROWIDS:Va.VALUE_ROWIDS,ROW_LENGTHS:Va.ROW_LENGTHS,ROW_SPLITS:Va.ROW_SPLITS,ROW_LIMITS:Va.ROW_LIMITS,ROW_STARTS:Va.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function i8(r){return r.length===0?0:r[0]===Va.FIRST_DIM_SIZE?r.length-1:r.length}function u8(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var yf=30;function p8(r){return r<=yf?r:Xp(r,Math.floor(Math.sqrt(r)))}function l8(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function c8(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function d8(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",D8=/->/g,a_=\",\",i_=\"...\";function A8(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(D8,\"\").length)/vS.length;if(t<1)throw new Error(\"Equations without an arrow are not supported.\");if(t>1)throw new Error(`Equation must contain exactly one arrow (\"${vS}\").`);let[o,n]=r.split(vS);$(o.indexOf(i_)===-1,()=>`The ellipsis notation (\"${i_}\") is not supported yet.`);let s=o.split(a_),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error(\"Support for more than 2 input tensors is not implemented yet.\");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function P8(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function O8(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function L8(r,e){let t=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>\"There should be only one negative value in split array.\");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}$(r.shape[t]===e.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=e}return o}function z8(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function V8(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function W8(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function U8(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function G8(r,e){return`size ${r} must be non-negative, not ${e}`}function H8(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function K8(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function q8(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function j8(){return\"segment ids must be >= 0\"}function X8(){return\"segment ids are not increasing\"}function Y8(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function Q8(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var kS={};qe(kS,{collectGatherOpShapeInfo:()=>eY,computeOutShape:()=>J8,segOpComputeOptimalWindowSize:()=>Z8});function Z8(r,e){let t=!1,o;for(r<=yf?(o=r,t=!0):o=Xp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Xp(r,o+1);return o}function J8(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) (\n ${s}).`);if(tsl(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function rY(r){return r.map(e=>iu(e))}var Ut={};qe(Ut,{nonMaxSuppressionV3Impl:()=>lf,nonMaxSuppressionV4Impl:()=>cf,nonMaxSuppressionV5Impl:()=>mf,whereImpl:()=>sf});FT();var oY=A();oY.registerFlag(\"KEEP_INTERMEDIATE_TENSORS\",()=>!1,r=>{r&&console.warn(\"Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.\")});var Or;(function(r){r[r.DT_INVALID=0]=\"DT_INVALID\",r[r.DT_FLOAT=1]=\"DT_FLOAT\",r[r.DT_DOUBLE=2]=\"DT_DOUBLE\",r[r.DT_INT32=3]=\"DT_INT32\",r[r.DT_UINT8=4]=\"DT_UINT8\",r[r.DT_INT16=5]=\"DT_INT16\",r[r.DT_INT8=6]=\"DT_INT8\",r[r.DT_STRING=7]=\"DT_STRING\",r[r.DT_COMPLEX64=8]=\"DT_COMPLEX64\",r[r.DT_INT64=9]=\"DT_INT64\",r[r.DT_BOOL=10]=\"DT_BOOL\",r[r.DT_QINT8=11]=\"DT_QINT8\",r[r.DT_QUINT8=12]=\"DT_QUINT8\",r[r.DT_QINT32=13]=\"DT_QINT32\",r[r.DT_BFLOAT16=14]=\"DT_BFLOAT16\",r[r.DT_QINT16=15]=\"DT_QINT16\",r[r.DT_QUINT16=16]=\"DT_QUINT16\",r[r.DT_UINT16=17]=\"DT_UINT16\",r[r.DT_COMPLEX128=18]=\"DT_COMPLEX128\",r[r.DT_HALF=19]=\"DT_HALF\",r[r.DT_RESOURCE=20]=\"DT_RESOURCE\",r[r.DT_VARIANT=21]=\"DT_VARIANT\",r[r.DT_UINT32=22]=\"DT_UINT32\",r[r.DT_UINT64=23]=\"DT_UINT64\",r[r.DT_FLOAT_REF=101]=\"DT_FLOAT_REF\",r[r.DT_DOUBLE_REF=102]=\"DT_DOUBLE_REF\",r[r.DT_INT32_REF=103]=\"DT_INT32_REF\",r[r.DT_UINT8_REF=104]=\"DT_UINT8_REF\",r[r.DT_INT16_REF=105]=\"DT_INT16_REF\",r[r.DT_INT8_REF=106]=\"DT_INT8_REF\",r[r.DT_STRING_REF=107]=\"DT_STRING_REF\",r[r.DT_COMPLEX64_REF=108]=\"DT_COMPLEX64_REF\",r[r.DT_INT64_REF=109]=\"DT_INT64_REF\",r[r.DT_BOOL_REF=110]=\"DT_BOOL_REF\",r[r.DT_QINT8_REF=111]=\"DT_QINT8_REF\",r[r.DT_QUINT8_REF=112]=\"DT_QUINT8_REF\",r[r.DT_QINT32_REF=113]=\"DT_QINT32_REF\",r[r.DT_BFLOAT16_REF=114]=\"DT_BFLOAT16_REF\",r[r.DT_QINT16_REF=115]=\"DT_QINT16_REF\",r[r.DT_QUINT16_REF=116]=\"DT_QUINT16_REF\",r[r.DT_UINT16_REF=117]=\"DT_UINT16_REF\",r[r.DT_COMPLEX128_REF=118]=\"DT_COMPLEX128_REF\",r[r.DT_HALF_REF=119]=\"DT_HALF_REF\",r[r.DT_RESOURCE_REF=120]=\"DT_RESOURCE_REF\",r[r.DT_VARIANT_REF=121]=\"DT_VARIANT_REF\",r[r.DT_UINT32_REF=122]=\"DT_UINT32_REF\",r[r.DT_UINT64_REF=123]=\"DT_UINT64_REF\"})(Or||(Or={}));var u_;(function(r){let e;(function(t){t[t.LEGACY=0]=\"LEGACY\",t[t.V1=1]=\"V1\",t[t.V2=2]=\"V2\"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(u_||(u_={}));var TS={};function sY(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};TS[r]=t}function bf(r){return TS[r]}function aY(r){delete TS[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd,u=i<0?e.inputNames.length+i:i;if(s.type===\"tensor\")return Vt(e.inputNames[u],t,o,n);if(s.type===\"tensors\"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!==\"NoOp\"}).map(f=>Vt(f,t,o,n))}let l=Vt(e.inputNames[u],t,o,n),c=l.dataSync();return s.type===\"number\"?c[0]:y.toNestedArray(l.shape,c)}let a=e.attrParams[r];return a&&a.value}function Vt(r,e,t,o){let[n,s]=Er(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[Cf(n,i)]);return a!==void 0?e[Cf(n,a)][s]:void 0}function _S(r,e,t){return e[Cf(r,t.currentContextId)]}function qs(r,e){let[t,o,n]=Er(r,e);return[Cf(t,e&&e.currentContextId),o,n]}function Cf(r,e){return e?`${r}-${e}`:r}function Er(r,e){if(r===\"\")return[\"\",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(\":\"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Wc(r,e,t){let o=I(\"pad\",r,e,t);if(o===\"explicit\"){o=I(\"explicitPaddings\",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function js(r){return r.kept?r:Xr(r)}var ES={};qe(ES,{json:()=>iY});var iY=[{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}]}];var $S={};qe($S,{json:()=>uY});var uY=[{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:\"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}]},{tfOpName:\"IsNan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsFinite\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsInf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var RS={};qe(RS,{json:()=>pY});var pY=[{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:\"TensorListConcatV2\",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\"}]},{tfOpName:\"TensorListLength\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}]},{tfOpName:\"TensorListResize\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"}]}];var DS={};qe(DS,{json:()=>lY});var lY=[{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\",defaultValue:.2}]},{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\"}]}];var AS={};qe(AS,{json:()=>cY});var cY=[{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\"}]},{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:\"RandomStandardNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{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:\"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:\"RandomUniformInt\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\"},{tfName:\"maxval\",name:\"maxval\",type:\"number\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,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\"}]}];var FS={};qe(FS,{json:()=>mY});var mY=[{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}]}];var PS={};qe(PS,{json:()=>dY});var dY=[{tfOpName:\"LowerBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{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:\"UpperBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{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\"}]}];var OS={};qe(OS,{json:()=>fY});var fY=[{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\"}]}];var MS={};qe(MS,{json:()=>hY});var hY=[{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}]},{tfOpName:\"LookupTableSize\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"LookupTableSizeV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"InitializeTable\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]},{tfOpName:\"InitializeTableV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var LS={};qe(LS,{json:()=>gY});var gY=[{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\"}]},{tfOpName:\"ImageProjectiveTransformV3\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"transforms\",type:\"tensor\"},{start:2,name:\"outputShape\",type:\"number[]\"},{start:3,name:\"fillValue\",type:\"number\"}],attrs:[{tfName:\"interpolation\",name:\"interpolation\",type:\"string\"},{tfName:\"fill_mode\",name:\"fillMode\",type:\"string\"}]}];var BS={};qe(BS,{json:()=>xY});var xY=[{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}]},{tfOpName:\"BitwiseAnd\",category:\"logical\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}]}];var zS={};qe(zS,{json:()=>yY});var yY=[{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:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2},{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}]},{tfOpName:\"Einsum\",category:\"matrices\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"equation\",name:\"equation\",type:\"string\"},{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"MatrixBandPart\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"numLower\",type:\"tensor\"},{start:1,name:\"numUpper\",type:\"tensor\"}]}];var VS={};qe(VS,{json:()=>bY});var bY=[{tfOpName:\"EuclideanNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",defaultValue:!1}]},{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\"}]}];var WS={};qe(WS,{json:()=>CY});var CY=[{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\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cumprod\",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\"}]},{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\"}]}];var US={};qe(US,{json:()=>wY});var wY=[{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}]},{tfOpName:\"TensorScatterUpdate\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var GS={};qe(GS,{json:()=>SY});var SY=[{tfOpName:\"SparseFillEmptyRows\",category:\"sparse\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"denseShape\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}]},{tfOpName:\"SparseReshape\",category:\"sparse\",inputs:[{start:0,name:\"inputIndices\",type:\"tensor\"},{start:1,name:\"inputShape\",type:\"tensor\"},{start:2,name:\"newShape\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SparseSegmentMean\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]},{tfOpName:\"SparseSegmentSum\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]}];var HS={};qe(HS,{json:()=>IY});var IY=[{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}]}];var KS={};qe(KS,{json:()=>vY});var vY=[{tfOpName:\"StaticRegexReplace\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"pattern\",name:\"pattern\",type:\"string\"},{tfName:\"rewrite\",name:\"rewrite\",type:\"string\"},{tfName:\"replace_global\",name:\"replaceGlobal\",type:\"bool\"}]},{tfOpName:\"StringNGrams\",category:\"string\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"dataSplits\",type:\"tensor\"}],attrs:[{tfName:\"separator\",name:\"separator\",type:\"string\"},{tfName:\"ngram_widths\",name:\"nGramWidths\",type:\"number[]\"},{tfName:\"left_pad\",name:\"leftPad\",type:\"string\"},{tfName:\"right_pad\",name:\"rightPad\",type:\"string\"},{tfName:\"pad_width\",name:\"padWidth\",type:\"number\"},{tfName:\"preserve_short_sequences\",name:\"preserveShortSequences\",type:\"bool\"}],outputs:[\"ngrams\",\"ngrams_splits\"]},{tfOpName:\"StringSplit\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"delimiter\",type:\"tensor\"}],attrs:[{tfName:\"skip_empty\",name:\"skipEmpty\",type:\"bool\"}],outputs:[\"indices\",\"values\",\"shape\"]},{tfOpName:\"StringToHashBucketFast\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"num_buckets\",name:\"numBuckets\",type:\"number\"}]}];var qS={};qe(qS,{json:()=>kY});var kY=[{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:\"EnsureShape\",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:[]},{tfOpName:\"BroadcastArgs\",category:\"transformation\",inputs:[{start:0,name:\"s0\",type:\"tensor\"},{start:1,name:\"s1\",type:\"tensor\"}],attrs:[]}];var Uc=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[ES,$S,RS,DS,AS,FS,PS,OS,MS,LS,BS,zS,VS,WS,US,GS,HS,KS,qS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith(\"Placeholder\")?n.push(h[g.name]):g.op===\"Const\"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],l={},c={};t!=null&&(l=this.mapSignatureEntries(t.inputs),c=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[w,,S]=qs(x),k=i[w];if(k.outputs!=null){let T=k.outputs.indexOf(S);if(T!==-1){let E=`${w}:${T}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(c).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(c).forEach(h=>{let[g]=qs(h),x=i[g];x!=null&&(x.signatureKey=c[h],u.push(x))}),Object.keys(l).length>0?Object.keys(l).forEach(h=>{let[g]=qs(h),x=i[g];x&&(x.signatureKey=l[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=bf(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=wf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=wf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=_f(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=_f(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=If(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=If(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=Tf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Tf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=Sf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Sf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=$f(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=$f(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=Nf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Nf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=Ef(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Ef(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=vf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=kf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=kf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=p_(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=p_(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((c,m)=>(c[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(c[m.name]),c),{}));let a=[],i=[];e.signature.inputArg.forEach(c=>{let[m]=qs(c.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:jS(c.type),type:\"dtype\"}},children:[]};d.signatureKey=c.name,a.push(d),s[m]=d}),Object.keys(s).forEach(c=>{let m=s[c];m.inputNames.forEach((d,f)=>{let[h,,g]=qs(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let w=`${h}:${b}`;m.inputNames[f]=w}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(c=>{let[m,d]=qs(u[c.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let l=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function NY(r){let e=A().global;if(typeof e.atob!=\"undefined\")return e.atob(r);if(typeof Buffer!=\"undefined\")return new Buffer(r,\"base64\").toString();throw new Error(\"Unable to decode base64 in this environment. Missing built-in atob() or Buffer()\")}function l_(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):NY(r);return e?t:t.toLowerCase()}function wf(r,e,t,o=!1){let n=r[e];return n!=null?l_(n.s,o):t}function Sf(r,e,t){let o=r[e];return o?o.b:t}function If(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n==\"number\"?n:parseInt(n,10)}function jS(r){switch(typeof r==\"string\"&&(r=Or[r]),r){case Or.DT_FLOAT:case Or.DT_HALF:return\"float32\";case Or.DT_INT32:case Or.DT_INT64:case Or.DT_INT8:case Or.DT_UINT8:return\"int32\";case Or.DT_BOOL:return\"bool\";case Or.DT_DOUBLE:return\"float32\";case Or.DT_STRING:return\"string\";case Or.DT_COMPLEX64:case Or.DT_COMPLEX128:return\"complex64\";default:return null}}function p_(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function vf(r,e,t){let o=r[e];return o&&o.type?jS(o.type):t}function kf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>jS(n)):t}function c_(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function Nf(r,e,t){let o=r[e];return o&&o.shape?c_(o.shape):t}function Tf(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):t}function _f(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>l_(s,o)):t}function Ef(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>c_(n)):t}function $f(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var Rf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Vt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Vt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return If(this.node.rawAttrs,e,t);if(o.s!=null)return wf(this.node.rawAttrs,e,t);if(o.b!=null)return Sf(this.node.rawAttrs,e,t);if(o.shape!=null)return Nf(this.node.rawAttrs,e,t);if(o.type!=null)return vf(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return Tf(this.node.rawAttrs,e,t);if(o.list.s!=null)return _f(this.node.rawAttrs,e,t);if(o.list.shape!=null)return Ef(this.node.rawAttrs,e,t);if(o.list.b!=null)return $f(this.node.rawAttrs,e,t);if(o.list.type!=null)return kf(this.node.rawAttrs,e,t)}return t}};var et={};qe(et,{OP_SCOPE_SUFFIX:()=>Bw,abs:()=>er,acos:()=>g1,acosh:()=>x1,add:()=>Ce,addN:()=>y1,all:()=>b1,any:()=>C1,argMax:()=>w1,argMin:()=>S1,asin:()=>I1,asinh:()=>v1,atan:()=>k1,atan2:()=>N1,atanh:()=>T1,avgPool:()=>Id,avgPool3d:()=>$1,basicLSTMCell:()=>R1,batchNorm:()=>mu,batchNorm2d:()=>A1,batchNorm3d:()=>F1,batchNorm4d:()=>P1,batchToSpaceND:()=>vd,bincount:()=>kd,bitwiseAnd:()=>O1,booleanMaskAsync:()=>oX,broadcastArgs:()=>M1,broadcastTo:()=>Oa,buffer:()=>ie,cast:()=>Ue,ceil:()=>L1,clipByValue:()=>B1,clone:()=>Xr,complex:()=>Ar,concat:()=>bt,concat1d:()=>z1,concat2d:()=>V1,concat3d:()=>W1,concat4d:()=>U1,conv1d:()=>G1,conv2d:()=>du,conv2dTranspose:()=>H1,conv3d:()=>K1,conv3dTranspose:()=>j1,cos:()=>X1,cosh:()=>Y1,cosineWindow:()=>Mc,cumprod:()=>Q1,cumsum:()=>Z1,denseBincount:()=>J1,depthToSpace:()=>e2,depthwiseConv2d:()=>cl,diag:()=>t2,dilation2d:()=>r2,div:()=>Xe,divNoNan:()=>n2,dot:()=>s2,dropout:()=>hX,einsum:()=>fu,elu:()=>Ed,enclosingPowerOfTwo:()=>cS,ensureShape:()=>a2,equal:()=>_d,erf:()=>i2,euclideanNorm:()=>l2,exp:()=>Jo,expandDims:()=>Ks,expm1:()=>c2,eye:()=>$d,fft:()=>fl,fill:()=>Ma,floor:()=>Rd,floorDiv:()=>Sd,fused:()=>mS,gather:()=>Dd,gatherND:()=>dX,greater:()=>ju,greaterEqual:()=>Ad,ifft:()=>ep,imag:()=>gu,image:()=>b5,inTopKAsync:()=>xX,irfft:()=>tf,isFinite:()=>m2,isInf:()=>d2,isNaN:()=>f2,leakyRelu:()=>Fd,less:()=>Fc,lessEqual:()=>ml,linalg:()=>C5,linspace:()=>h2,localResponseNormalization:()=>g2,log:()=>yi,log1p:()=>Pd,logSigmoid:()=>x2,logSoftmax:()=>y2,logSumExp:()=>Ld,logicalAnd:()=>Xu,logicalNot:()=>Bd,logicalOr:()=>zd,logicalXor:()=>b2,losses:()=>w5,lowerBound:()=>C2,matMul:()=>Je,max:()=>La,maxPool:()=>Wd,maxPool3d:()=>w2,maxPoolWithArgmax:()=>S2,maximum:()=>Ud,mean:()=>Yu,meshgrid:()=>I2,min:()=>Ac,minimum:()=>Qu,mirrorPad:()=>v2,mod:()=>k2,moments:()=>N2,movingAverage:()=>aX,mul:()=>se,multiRNNCell:()=>T2,multinomial:()=>_2,neg:()=>mr,norm:()=>qu,notEqual:()=>Gd,oneHot:()=>Oc,ones:()=>Ba,onesLike:()=>E2,op:()=>N,outerProduct:()=>$2,pad:()=>za,pad1d:()=>R2,pad2d:()=>D2,pad3d:()=>A2,pad4d:()=>F2,pool:()=>P2,pow:()=>xi,prelu:()=>Kd,print:()=>wd,prod:()=>O2,raggedGather:()=>M2,raggedRange:()=>L2,raggedTensorToTensor:()=>B2,rand:()=>z2,randomGamma:()=>iN,randomNormal:()=>Zd,randomStandardNormal:()=>uN,randomUniform:()=>dl,randomUniformInt:()=>pN,range:()=>xu,real:()=>bi,reciprocal:()=>lN,relu:()=>yu,relu6:()=>Jd,reshape:()=>W,reverse:()=>Bo,reverse1d:()=>cN,reverse2d:()=>mN,reverse3d:()=>dN,reverse4d:()=>fN,rfft:()=>hl,round:()=>ef,rsqrt:()=>hN,scalar:()=>ke,scatterND:()=>uX,searchSorted:()=>Pc,selu:()=>gN,separableConv2d:()=>xN,setdiff1dAsync:()=>yN,sigmoid:()=>Pa,sign:()=>bN,signal:()=>y5,sin:()=>CN,sinh:()=>wN,slice:()=>Ye,slice1d:()=>SN,slice2d:()=>IN,slice3d:()=>vN,slice4d:()=>kN,softmax:()=>NN,softplus:()=>Md,spaceToBatchND:()=>Hd,sparse:()=>S5,sparseToDense:()=>cX,spectral:()=>x5,split:()=>Ci,sqrt:()=>Pr,square:()=>tr,squaredDifference:()=>rf,squeeze:()=>gl,stack:()=>Tr,step:()=>of,stridedSlice:()=>TN,string:()=>I5,sub:()=>Te,sum:()=>ot,tan:()=>_N,tanh:()=>Dc,tensor:()=>pr,tensor1d:()=>rr,tensor2d:()=>bu,tensor3d:()=>nf,tensor4d:()=>EN,tensor5d:()=>$N,tensor6d:()=>RN,tensorScatterUpdate:()=>AN,tile:()=>hu,topk:()=>FN,transpose:()=>yl,truncatedNormal:()=>PN,unique:()=>ON,unsortedSegmentSum:()=>MN,unstack:()=>zo,upperBound:()=>LN,variable:()=>BN,where:()=>Lo,whereAsync:()=>af,zeros:()=>Yr,zerosLike:()=>Kt});var m_=(r,e,t,o=et)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"AddN\":return[o.addN(I(\"tensors\",r,e,t))];case\"FloorMod\":case\"Mod\":return[o.mod(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Mul\":return[o.mul(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"RealDiv\":case\"Div\":return[o.div(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"DivNoNan\":return[o.divNoNan(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"FloorDiv\":return[o.floorDiv(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Sub\":return[o.sub(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Minimum\":return[o.minimum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Maximum\":return[o.maximum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Pow\":return[o.pow(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"SquaredDifference\":return[o.squaredDifference(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var d_=(r,e,t,o=et)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(I(\"x\",r,e,t))];case\"Acos\":return[o.acos(I(\"x\",r,e,t))];case\"Acosh\":return[o.acosh(I(\"x\",r,e,t))];case\"Asin\":return[o.asin(I(\"x\",r,e,t))];case\"Asinh\":return[o.asinh(I(\"x\",r,e,t))];case\"Atan\":return[o.atan(I(\"x\",r,e,t))];case\"Atan2\":return[o.atan2(I(\"x\",r,e,t),I(\"y\",r,e,t))];case\"Atanh\":return[o.atanh(I(\"x\",r,e,t))];case\"Ceil\":return[o.ceil(I(\"x\",r,e,t))];case\"Complex\":return[o.complex(I(\"real\",r,e,t),I(\"imag\",r,e,t))];case\"Cos\":return[o.cos(I(\"x\",r,e,t))];case\"Cosh\":return[o.cosh(I(\"x\",r,e,t))];case\"Elu\":return[o.elu(I(\"x\",r,e,t))];case\"Erf\":return[o.erf(I(\"x\",r,e,t))];case\"Exp\":return[o.exp(I(\"x\",r,e,t))];case\"Expm1\":return[o.expm1(I(\"x\",r,e,t))];case\"Floor\":return[o.floor(I(\"x\",r,e,t))];case\"Log\":return[o.log(I(\"x\",r,e,t))];case\"Log1p\":return[o.log1p(I(\"x\",r,e,t))];case\"Imag\":return[o.imag(I(\"x\",r,e,t))];case\"Neg\":return[o.neg(I(\"x\",r,e,t))];case\"Reciprocal\":return[o.reciprocal(I(\"x\",r,e,t))];case\"Real\":return[o.real(I(\"x\",r,e,t))];case\"Relu\":return[o.relu(I(\"x\",r,e,t))];case\"Round\":return[o.round(I(\"x\",r,e,t))];case\"Selu\":return[o.selu(I(\"x\",r,e,t))];case\"Sigmoid\":return[o.sigmoid(I(\"x\",r,e,t))];case\"Sin\":return[o.sin(I(\"x\",r,e,t))];case\"Sign\":return[o.sign(I(\"x\",r,e,t))];case\"Sinh\":return[o.sinh(I(\"x\",r,e,t))];case\"Softplus\":return[o.softplus(I(\"x\",r,e,t))];case\"Sqrt\":return[o.sqrt(I(\"x\",r,e,t))];case\"Square\":return[o.square(I(\"x\",r,e,t))];case\"Tanh\":return[o.tanh(I(\"x\",r,e,t))];case\"Tan\":return[o.tan(I(\"x\",r,e,t))];case\"ClipByValue\":return[o.clipByValue(I(\"x\",r,e,t),I(\"clipValueMin\",r,e,t),I(\"clipValueMax\",r,e,t))];case\"Relu6\":return[o.relu6(I(\"x\",r,e,t))];case\"Rsqrt\":return[o.rsqrt(Vt(r.inputNames[0],e,t))];case\"LeakyRelu\":return[o.leakyRelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"Prelu\":return[o.prelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"IsNan\":return[o.isNaN(Vt(r.inputNames[0],e,t))];case\"IsInf\":return[o.isInf(Vt(r.inputNames[0],e,t))];case\"IsFinite\":return[o.isFinite(Vt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Qr(r,e,t=\"\"){if(!(typeof r==\"number\"||typeof e==\"number\")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function f_(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function Cl(r,e,t){let o=Df(r,t),n=!f_(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=Df(s.shape,o)}),!f_(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Df(r,e){if(typeof r==\"number\")return e;if(typeof e==\"number\")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var Af=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Fr(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 o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n 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),Qr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,Fr(t),o.written=!0,this.tensors[e]=o}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((o,n)=>this.write(o,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,zo(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 o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, 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 s=o===0?0:t.size/o,a=[];De(()=>{t=W(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Qr(t,s.shape,\"TensorList shape mismatch: \"),Fr(s)}),this.idTensor=ke(0),this.maxNumElements=n,Fr(this.idTensor)}copy(){return new r([...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,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Qr(e,this.elementShape,\"TensorList shape mismatch: \");let n=Cl(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return Tr(s,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 o=Cl(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Qr(n.shape,e,\"TensorList shape mismatch: \"),W(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Qr(e.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");Fr(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}.`);let t=new r([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.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.`);Qr(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=Cl(this.elementShape,this.tensors,t);return W(this.tensors[e],n)}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.`);Qr(this.elementShape,t.shape,\"TensorList shape mismatch: \"),Fr(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Qr(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=Cl(this.elementShape,this.tensors,o);return e.length===0?pr([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return Tr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Qr(this.elementShape,t,\"TensorList shape mismatch: \");let o=Cl(this.elementShape,this.tensors,t);return this.size()===0?pr([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return bt(n,0)})}};function h_(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Qr(n,e,\"TensorList shape mismatch: \");let s=zo(r);return new wl(s,e,o)}function g_(r,e,t,o){return new wl([],r,e,o)}function x_(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new wl([],t,r.dtype,o),a=zo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function y_(r,e,t){let o=0,n=e.map(l=>(o+=l,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=Df(s,t),i=o===0?0:r.size/o,p=De(()=>{let l=[];r=W(r,[1,o,i]);for(let c=0;c{switch(r.op){case\"If\":case\"StatelessIf\":{let o=I(\"thenBranch\",r,e,t),n=I(\"elseBranch\",r,e,t),s=I(\"cond\",r,e,t),a=I(\"args\",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=I(\"body\",r,e,t),n=I(\"cond\",r,e,t),s=I(\"args\",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(l=>l.id),p=await a[0].data();a.forEach(l=>{!l.kept&&i.indexOf(l.id)===-1&&l.dispose()});let u=s;for(;p[0];){let l=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let c=u.map(d=>d.id);l.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&c.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&c.indexOf(d.id)===-1&&d.dispose()})}return u}case\"LoopCond\":{let o=I(\"pred\",r,e,t);return[js(o)]}case\"Switch\":{let o=I(\"pred\",r,e,t),n=I(\"data\",r,e,t);return n.kept||(n=js(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Vt(n,e,t)!==void 0);if(o){let n=Vt(o,e,t);return[js(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,e,t),n=I(\"tensor\",r,e,t);return t.enterFrame(o),[js(n)]}case\"Exit\":{let o=I(\"tensor\",r,e,t);return t.exitFrame(),[js(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,e,t);return t.nextIteration(),[js(o)]}case\"TensorArrayV3\":{let o=I(\"size\",r,e,t),n=I(\"dtype\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"dynamicSize\",r,e,t),i=I(\"clearAfterRead\",r,e,t),p=I(\"identicalElementShapes\",r,e,t),u=I(\"name\",r,e,t),l=new Af(u,n,o,s,p,a,i);return t.addTensorArray(l),[l.idTensor,ke(1)]}case\"TensorArrayWriteV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t);return[t.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"dtype\",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id),s=I(\"dtype\",r,e,t);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"lengths\",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return[ke(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=I(\"indices\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"numElements\",r,e,t),i=x_(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=I(\"elementShape\",r,e,t),n=I(\"elementDType\",r,e,t),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=I(s,r,e,t),i=r.op===\"TensorListReserve\"?-1:a,p=g_(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=I(\"tensorListId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=I(\"numElements\",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=h_(o,n,s);return t.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id),s=I(\"dtype\",r,e,t),a=I(\"elementShape\",r,e,t);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"tensor\",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"lengths\",r,e,t),a=y_(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[ke(n.size(),\"int32\")]}case\"TensorListResize\":{let o=I(\"tensorListId\",r,e,t),n=I(\"size\",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function C_(r,e,t){let[o,n]=I(\"fusedOps\",r,e,t),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=I(\"numArgs\",r,e,t);if(s){if(i&&u!==2)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&s&&u!==1)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.\")}if(p)throw new Error(\"FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported\");let l=I(\"strides\",r,e,t),c=Wc(r,e,t),m=I(\"dataFormat\",r,e,t).toUpperCase(),d=I(\"dilations\",r,e,t),[f,h]=I(\"args\",r,e,t);a&&(h=f,f=void 0);let g=I(\"leakyreluAlpha\",r,e,t);return{stride:l,pad:c,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var w_=(r,e,t,o=et)=>{switch(r.op){case\"Conv1D\":{let n=I(\"stride\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilation\",r,e,t);return[o.conv1d(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,s,a,i)]}case\"Conv2D\":{let n=I(\"strides\",r,e,t),s=Wc(r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case\"_FusedConv2D\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:l,leakyreluAlpha:c}=C_(r,e,t);return[o.fused.conv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:l,preluActivationWeights:u,leakyreluAlpha:c})]}case\"FusedDepthwiseConv2dNative\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:l,leakyreluAlpha:c}=C_(r,e,t);return[o.fused.depthwiseConv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:l,preluActivationWeights:u,leakyreluAlpha:c})]}case\"Conv2DBackpropInput\":case\"Conv2dTranspose\":{let n=I(\"outputShape\",r,e,t),s=I(\"strides\",r,e,t),a=Wc(r,e,t);return[o.conv2dTranspose(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=I(\"strides\",r,e,t),s=Wc(r,e,t),a=I(\"dilations\",r,e,t),i=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthwiseConv2d(I(\"input\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv3d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t),i=I(\"includeBatchInIndex\",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dilations\",r,e,t),i=n[1],p=n[2],u=a[1],l=a[2];return[o.dilation2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[i,p],s,[u,l],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var S_=(r,e,t,o=et)=>{switch(r.op){case\"Fill\":{let n=I(\"shape\",r,e,t),s=I(\"dtype\",r,e,t),a=I(\"value\",r,e,t);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"num\",r,e,t);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=I(\"logits\",r,e,t),s=I(\"numSamples\",r,e,t),a=I(\"seed\",r,e,t);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=I(\"indices\",r,e,t),s=I(\"depth\",r,e,t),a=I(\"onValue\",r,e,t),i=I(\"offValue\",r,e,t),p=I(\"dtype\",r,e,t);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"OnesLike\":return[o.onesLike(I(\"x\",r,e,t))];case\"RandomStandardNormal\":return[o.randomStandardNormal(I(\"shape\",r,e,t),I(\"dtype\",r,e,t),I(\"seed\",r,e,t))];case\"RandomUniform\":return[o.randomUniform(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"dtype\",r,e,t))];case\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"seed\",r,e,t))];case\"Range\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"step\",r,e,t);return[o.range(n,s,a,I(\"dtype\",r,e,t))]}case\"TruncatedNormal\":{let n=I(\"shape\",r,e,t),s=I(\"mean\",r,e,t),a=I(\"stdDev\",r,e,t),i=I(\"seed\",r,e,t);return[o.truncatedNormal(n,s,a,I(\"dtype\",r,e,t),i)]}case\"Zeros\":return[o.zeros(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"ZerosLike\":return[o.zerosLike(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function XS(r,e,t){let o=I(\"boxes\",r,e,t),n=I(\"scores\",r,e,t),s=I(\"maxOutputSize\",r,e,t),a=I(\"iouThreshold\",r,e,t),i=I(\"scoreThreshold\",r,e,t),p=I(\"softNmsSigma\",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var I_=async(r,e,t,o,n=et)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:l}=XS(r,e,t),c=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,l);return[c.selectedIndices,c.selectedScores]}case\"NonMaxSuppressionV4\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=XS(r,e,t),l=I(\"padToMaxOutputSize\",r,e,t),c=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,l);return[c.selectedIndices,c.validOutputs]}case\"NonMaxSuppressionV3\":case\"NonMaxSuppressionV2\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=XS(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(I(\"condition\",r,e,t),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(I(\"x\",r,e,t),I(\"y\",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var v_=(r,e,t,o=et)=>{switch(r.op){case\"LowerBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=I(\"x\",r,e,t),s=I(\"k\",r,e,t),a=I(\"sorted\",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.upperBound(n,s)]}case\"Unique\":{let n=I(\"x\",r,e,t),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=I(\"x\",r,e,t),s=I(\"axis\",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var k_=(r,e,t,o=et)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,e,t);return[Vt(r.name,e,t)||n];case\"Placeholder\":return[Vt(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let l=I(\"x\",r,e,t);return[js(l)]}case\"IdentityN\":return I(\"x\",r,e,t).map(l=>js(l));case\"Snapshot\":let s=I(\"x\",r,e,t);return[js(s)];case\"Shape\":return[o.tensor1d(I(\"x\",r,e,t).shape,\"int32\")];case\"ShapeN\":return I(\"x\",r,e,t).map(l=>o.tensor1d(l.shape));case\"Size\":return[o.scalar(I(\"x\",r,e,t).size,\"int32\")];case\"Rank\":return[o.scalar(I(\"x\",r,e,t).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=I(\"x\",r,e,t),i=I(\"data\",r,e,t),p=I(\"message\",r,e,t),u=I(\"summarize\",r,e,t);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let l=0;le.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),\"int32\")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=zo(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case\"HashTable\":case\"HashTableV2\":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I(\"keyDType\",r,e,t),a=I(\"valueDType\",r,e,t),i=new Ff(s,a);return o.addHashTable(r.name,i),[i.handle]}}case\"InitializeTable\":case\"InitializeTableV2\":case\"LookupTableImport\":case\"LookupTableImportV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"values\",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"defaultValue\",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=I(\"tableHandle\",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var T_=(r,e,t,o=et)=>{switch(r.op){case\"ResizeBilinear\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=I(\"image\",r,e,t),s=I(\"boxes\",r,e,t),a=I(\"boxInd\",r,e,t),i=I(\"cropSize\",r,e,t),p=I(\"method\",r,e,t),u=I(\"extrapolationValue\",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=I(\"images\",r,e,t),s=I(\"transforms\",r,e,t),a=I(\"outputShape\",r,e,t),i=I(\"fillValue\",r,e,t),p=I(\"interpolation\",r,e,t),u=I(\"fillMode\",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var __=(r,e,t,o=et)=>{switch(r.op){case\"Equal\":return[o.equal(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"NotEqual\":return[o.notEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Greater\":return[o.greater(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"GreaterEqual\":return[o.greaterEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Less\":return[o.less(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LessEqual\":return[o.lessEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalAnd\":return[o.logicalAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalNot\":return[o.logicalNot(I(\"a\",r,e,t))];case\"LogicalOr\":return[o.logicalOr(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Select\":case\"SelectV2\":return[o.where(I(\"condition\",r,e,t),I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var E_=(r,e,t,o=et)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(I(\"a\",r,e,t),I(\"b\",r,e,t),I(\"transposeA\",r,e,t),I(\"transposeB\",r,e,t))];case\"Einsum\":return[o.einsum(I(\"equation\",r,e,t),...I(\"tensors\",r,e,t))];case\"Transpose\":return[o.transpose(I(\"x\",r,e,t),I(\"perm\",r,e,t))];case\"_FusedMatMul\":let[n,s]=I(\"fusedOps\",r,e,t),a=n===\"biasadd\",i=s===\"prelu\",p=I(\"numArgs\",r,e,t),u=I(\"leakyreluAlpha\",r,e,t);if(a){if(i&&p!==2)throw new Error(\"Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&p!==1)throw new Error(\"Fused MatMul with BiasAdd must have one extra argument: bias.\")}let[l,c]=I(\"args\",r,e,t);return[o.fused.matMul({a:I(\"a\",r,e,t),b:I(\"b\",r,e,t),transposeA:I(\"transposeA\",r,e,t),transposeB:I(\"transposeB\",r,e,t),bias:l,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,e,t),I(\"numLower\",r,e,t),I(\"numUpper\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var $_=(r,e,t,o=et)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(I(\"x\",r,e,t),I(\"axis\",r,e,t),I(\"keepDims\",r,e,t))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"FusedBatchNormV3\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"LRN\":return[o.localResponseNormalization(I(\"x\",r,e,t),I(\"radius\",r,e,t),I(\"bias\",r,e,t),I(\"alpha\",r,e,t),I(\"beta\",r,e,t))];case\"Softmax\":return[o.softmax(I(\"x\",r,e,t))];case\"LogSoftmax\":return[o.logSoftmax(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var R_=(r,e,t,o=et)=>{switch(r.op){case\"RaggedGather\":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I(\"paramsNestedSplits\",r,e,t),I(\"paramsDenseValues\",r,e,t),I(\"indices\",r,e,t),I(\"outputRaggedRank\",r,e,t));return n.concat(s)}case\"RaggedRange\":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I(\"starts\",r,e,t),I(\"limits\",r,e,t),I(\"splits\",r,e,t));return[n,s]}case\"RaggedTensorToTensor\":return[o.raggedTensorToTensor(I(\"shape\",r,e,t),I(\"values\",r,e,t),I(\"defaultValue\",r,e,t),I(\"rowPartitionTensors\",r,e,t),I(\"rowPartitionTypes\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var D_=(r,e,t,o=et)=>{switch(r.op){case\"Max\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.max(I(\"x\",r,e,t),i,p)]}case\"Mean\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.mean(I(\"x\",r,e,t),i,p)]}case\"Min\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.min(I(\"x\",r,e,t),i,p)]}case\"Sum\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.sum(I(\"x\",r,e,t),i,p)]}case\"All\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.all(I(\"x\",r,e,t),i,p)]}case\"Any\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.any(I(\"x\",r,e,t),i,p)]}case\"ArgMax\":{let i=I(\"axis\",r,e,t);return[o.argMax(I(\"x\",r,e,t),i)]}case\"ArgMin\":{let i=I(\"axis\",r,e,t);return[o.argMin(I(\"x\",r,e,t),i)]}case\"Prod\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.prod(I(\"x\",r,e,t),i,p)]}case\"Cumprod\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumprod(I(\"x\",r,e,t),i,p,u)]}case\"Cumsum\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumsum(I(\"x\",r,e,t),i,p,u)]}case\"Bincount\":let n=I(\"x\",r,e,t),s=I(\"weights\",r,e,t),a=I(\"size\",r,e,t);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=I(\"x\",r,e,t),p=I(\"weights\",r,e,t),u=I(\"size\",r,e,t),l=I(\"binaryOutput\",r,e,t);return[o.denseBincount(i,p,u,l)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var A_=(r,e,t,o=et)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=I(\"n\",r,e,t),s=I(\"axis\",r,e,t),a=I(\"tensors\",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=I(\"axis\",r,e,t),s=I(\"batchDims\",r,e,t),a=I(\"x\",r,e,t),i=I(\"indices\",r,e,t);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=I(\"dims\",r,e,t),s=[];for(let i=0;i{let n=I(\"axis\",r,e,t),s=I(\"tensors\",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let l=y.arraysEqual(u.shape,a);if(!l&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error(\"the input tensors shape does not match\");return l?u:o.reshape(u,a)});return[o.stack(p,n)]});case\"Unpack\":{let n=I(\"axis\",r,e,t),s=I(\"tensor\",r,e,t);return o.unstack(s,n)}case\"Tile\":{let n=I(\"reps\",r,e,t);return[o.tile(I(\"x\",r,e,t),n)]}case\"Split\":case\"SplitV\":{let n=I(\"axis\",r,e,t),s=I(\"numOrSizeSplits\",r,e,t),a=I(\"x\",r,e,t);return o.split(a,s,n)}case\"ScatterNd\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"shape\",r,e,t);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=I(\"sparseIndices\",r,e,t),s=I(\"outputShape\",r,e,t),a=I(\"sparseValues\",r,e,t),i=I(\"defaultValue\",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"tensor\",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var F_=(r,e,t,o=et)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I(\"indices\",r,e,t),I(\"values\",r,e,t),I(\"denseShape\",r,e,t),I(\"defaultValue\",r,e,t));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I(\"inputIndices\",r,e,t),I(\"inputShape\",r,e,t),I(\"newShape\",r,e,t));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var P_=(r,e,t,o=et)=>{switch(r.op){case\"FFT\":return[o.fft(I(\"x\",r,e,t))];case\"IFFT\":return[o.ifft(I(\"x\",r,e,t))];case\"RFFT\":return[o.rfft(I(\"x\",r,e,t))];case\"IRFFT\":return[o.irfft(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var O_=(r,e,t,o=et)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,e,t),I(\"pattern\",r,e,t),I(\"rewrite\",r,e,t),I(\"replaceGlobal\",r,e,t))];case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I(\"data\",r,e,t),I(\"dataSplits\",r,e,t),I(\"separator\",r,e,t),I(\"nGramWidths\",r,e,t),I(\"leftPad\",r,e,t),I(\"rightPad\",r,e,t),I(\"padWidth\",r,e,t),I(\"preserveShortSequences\",r,e,t));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I(\"input\",r,e,t),I(\"delimiter\",r,e,t),I(\"skipEmpty\",r,e,t));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(I(\"input\",r,e,t),I(\"numBuckets\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var M_=(r,e,t,o=et)=>{switch(r.op){case\"Cast\":return[o.cast(I(\"x\",r,e,t),I(\"dtype\",r,e,t))];case\"ExpandDims\":{let n=I(\"axis\",r,e,t);return[o.expandDims(I(\"x\",r,e,t),n)]}case\"Squeeze\":{let n=I(\"axis\",r,e,t);return[o.squeeze(I(\"x\",r,e,t),n)]}case\"Reshape\":return[o.reshape(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"EnsureShape\":return[o.ensureShape(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"MirrorPad\":return[o.mirrorPad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"mode\",r,e,t))];case\"PadV2\":case\"Pad\":return[o.pad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"constantValue\",r,e,t))];case\"SpaceToBatchND\":{let n=I(\"blockShape\",r,e,t),s=I(\"paddings\",r,e,t);return[o.spaceToBatchND(I(\"x\",r,e,t),n,s)]}case\"BatchToSpaceND\":{let n=I(\"blockShape\",r,e,t),s=I(\"crops\",r,e,t);return[o.batchToSpaceND(I(\"x\",r,e,t),n,s)]}case\"DepthToSpace\":{let n=I(\"blockSize\",r,e,t),s=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthToSpace(I(\"x\",r,e,t),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"BroadcastArgs\":return[o.broadcastArgs(I(\"s0\",r,e,t),I(\"s1\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function YS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>m_(a,i,p));case\"basic_math\":return n(()=>d_(a,i,p));case\"control\":return b_(a,i,p);case\"convolution\":return n(()=>w_(a,i,p));case\"creation\":return n(()=>S_(a,i,p));case\"dynamic\":return I_(a,i,p);case\"evaluation\":return n(()=>v_(a,i,p));case\"image\":return n(()=>T_(a,i,p));case\"graph\":return n(()=>k_(a,i,p));case\"logical\":return n(()=>__(a,i,p));case\"matrices\":return n(()=>E_(a,i,p));case\"normalization\":return n(()=>$_(a,i,p));case\"ragged\":return n(()=>R_(a,i,p));case\"reduction\":return n(()=>D_(a,i,p));case\"slice_join\":return n(()=>A_(a,i,p));case\"sparse\":return n(()=>F_(a,i,p));case\"spectral\":return n(()=>P_(a,i,p));case\"string\":return n(()=>O_(a,i,p));case\"transformation\":return n(()=>M_(a,i,p));case\"hash_table\":return N_(a,i,p,o);case\"custom\":let u=bf(a.op);if(u&&u.customExecutor)return u.customExecutor(new Rf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Gc=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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;tt.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 QS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Er(m)[0]));o=o||[];let l=new Set(o.map(m=>Er(m.name)[0])),c=[...e];for(;c.length>0;){let m=c.pop();if((wu(m)||ZY(m)||JY(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&!u.has(m.name)&&!l.has(m.name)){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),c.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function L_(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Er(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g==\"string\"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),l=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let x of g.children)a(x)||(c[x.name]=Number.POSITIVE_INFINITY),c[x.name]=(c[x.name]||0)+1}let m=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=l.get(g);for(let b of x.children.filter(a))--c[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>l.get(g)),h=qY(f,p);return jY(h,p),h}function qY(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var Sl=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function jY(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i==\"string\"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i==\"string\"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new Sl(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new Sl(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new Sl(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new Sl(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function B_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>wu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,l)=>Math.max(u,l),o[p])),a=new Map;for(let i=0;ie[o].map(n=>n.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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=\",\",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,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(o=>{this._functionExecutorMap[o]=new r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(e,t){let o=QS(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let u=t.map(c=>c.name),l=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${l}]. Missing the following inputs: [${n}]`)}let i=L_(this.graph,o),p=B_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return Fr(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(m=>this.graph.nodes[Er(m)[0]]),s=t.map(m=>Er(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let l={},c={};return De(()=>{let m=new Gc(this.weightMap,l,c,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,w]=Er(x,m),S=[];S[w]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=YS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Vt(x,d,m))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){if(!(wu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(wu(p))continue;let u=_S(p.name,o,n);if(u!=null)for(let l of u){if(!l||l.kept||s.has(l.id))continue;let c=i[l.id];c===1?(l.dispose(),delete i[l.id]):c!=null&&i[l.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return wu(p)||s.has(p.name)}if(!(wu(e)||a==null))for(let p of a){if(i(p))continue;let u=_S(p.name,t,o);for(let l of u)!l||l.kept||n.has(l.id)||l.dispose()}}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Gc(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Vt(m,i,a)),u=p.map(m=>m.id),l=Object.keys(e).map(m=>e[m].id),c=new Set([...u,...l,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!c.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(c),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(S=>this.graph.nodes[Er(S)[0]]),i=o.map(S=>Er(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:l,missingInputs:c,dynamicNode:m,syncInputs:d}=QS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,T]=Er(S),E=[];E[T]=e[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,l);await Promise.all(S)}m==null&&!n&&console.warn(\"This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.\");let w=u.filter(S=>!wu(S)&&!Vt(S.name,h,t)).map(S=>S.name);if(w.length>0){let S=\"\";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${w}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${S}`)}return h}processStack(e,t,o,n,s,a,i,p,u){let l=[];for(;t.length>0;){let c=t.pop();o.currentContext=c.contexts;let m=\"\";if(c.node.op===\"Enter\"&&I(\"isConstant\",c.node,n,o)&&([m]=qs(c.node.name,o)),n[c.node.name]==null){let d=YS(c.node,n,o,this._resourceManager);m||([m]=qs(c.node.name,o));let f=o.currentContext;y.isPromise(d)?l.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,c.node,n,o,a,i,p),this.processChildNodes(c.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,c.node,n,o,a,i,p),this.processChildNodes(c.node,t,o,n,s,u))}else this.processChildNodes(c.node,t,o,n,s,u)}return l}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=qs(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Vt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Vt(u,n,o))&&(s[p]=!0,t.push({contexts:o.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 o=e[t],[n]=Er(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Er(o);return this.graph.nodes[n]==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=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Er(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var Pf=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]}};var e7=\"?tfjs-format=file\",t7=\"model.json\",Kc=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},o=Si){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new Pf}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return y.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error(\"Model artifacts missing streamWeights function\");let t=await gd(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Hc(Uc.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Uc.Instance.transformGraph(e.modelInitializer);this.initializer=new Hc(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e==\"string\"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof dt?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof dt)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let l=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return l!=null?s[a]=this.resourceIdToCapturedInput[l]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Lt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function r7(r,e={},t=Si){if(r==null)throw new Error(\"modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model\");e==null&&(e={}),e.fromTFHub&&typeof r==\"string\"&&(r=n7(r));let o=new Kc(r,e,t);return await o.load(),o}function o7(r){if(r==null)throw new Error(\"modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model\");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error(\"modelJSON must be the first element of the array\");if(!n||!(n instanceof ArrayBuffer))throw new Error(\"An ArrayBuffer of weights must be the second element of the array\");if(!(\"modelTopology\"in o))throw new Error(\"Model JSON is missing 'modelTopology'\");if(!(\"weightsManifest\"in o))throw new Error(\"Model JSON is missing 'weightsManifest'\");let s=Si.getWeightSpecs(o.weightsManifest),a=Si.getModelArtifactsForJSONSync(o,s,n);e=Si.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=Si.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new Kc(e);return t.load(),t}function n7(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${t7}${e7}`}var s7=\"4.17.0\";function Q(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var a7=Ut.whereImpl,Il=class r extends mo{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new mn(this,cr())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get(\"IS_NODE\")&&C.warn(`\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,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,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t===\"complex64\"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return C.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ie(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),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:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.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){Q([e],\"where\");let t=this.readSync(e.dataId);return a7(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Il.nextDataId=0;var Xf={};qe(Xf,{addImpl:()=>eI,bincountImpl:()=>Nl,bincountReduceImpl:()=>Of,bitwiseAndImpl:()=>tI,castImpl:()=>JS,ceilImpl:()=>rI,concatImpl:()=>mp,equalImpl:()=>oI,expImpl:()=>sI,expm1Impl:()=>iI,floorDivImpl:()=>pI,floorImpl:()=>uI,gatherNdImpl:()=>Mf,gatherV2Impl:()=>Lf,greaterEqualImpl:()=>cI,greaterImpl:()=>lI,lessEqualImpl:()=>dI,lessImpl:()=>mI,linSpaceImpl:()=>Bf,logImpl:()=>fI,maxImpl:()=>zf,maximumImpl:()=>hI,minimumImpl:()=>gI,multiplyImpl:()=>qc,negImpl:()=>xI,notEqualImpl:()=>yI,prodImpl:()=>bI,raggedGatherImpl:()=>Vf,raggedRangeImpl:()=>Wf,raggedTensorToTensorImpl:()=>Uf,rangeImpl:()=>fp,rsqrtImpl:()=>wI,scatterImpl:()=>Xs,sigmoidImpl:()=>gE,simpleAbsImpl:()=>ZS,sliceImpl:()=>hp,sparseFillEmptyRowsImpl:()=>Gf,sparseReshapeImpl:()=>Hf,sparseSegmentReductionImpl:()=>_l,sqrtImpl:()=>bE,squaredDifferenceImpl:()=>II,staticRegexReplaceImpl:()=>vI,stridedSliceImpl:()=>Kf,stringNGramsImpl:()=>gp,stringSplitImpl:()=>xp,stringToHashBucketFastImpl:()=>yp,subImpl:()=>NI,tileImpl:()=>qf,topKImpl:()=>jf,transposeImpl:()=>Tl,uniqueImpl:()=>bp});function ZS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,\"abs\");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=ZS(n),t.makeOutput(o,e.shape,e.dtype)},z_={kernelName:fn,backendName:\"cpu\",kernelFunc:i7};function Ve(r){return(e,t,o,n,s)=>{let a=C.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),l=y.getTypedArrayFromDType(s,u),c=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=C.getBroadcastDims(e,a),g=C.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xw[E]=0);let S=y.locToIndex(w,c,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let T=y.locToIndex(k,m,f);l[x]=r(o[S],n[T])}return[l,a]}}function qt(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}var V_={kernelName:ei,backendName:\"cpu\",kernelFunc:qt};function vl(r,e,t=\"float32\"){if(t===\"complex64\"){let n=vl(r,e,\"float32\"),s=vl(r,e,\"float32\");return qt({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function fr(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var W_={kernelName:vo,backendName:\"cpu\",kernelFunc:fr};function tn(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var U_={kernelName:si,backendName:\"cpu\",kernelFunc:tn};function JS(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],t),[s,a]=Ve((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function rn(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return fr({inputs:{x:n},backend:t});let l=vl(t,n.shape,n.dtype),c=rn({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=qt({inputs:{real:c,imag:l},backend:t});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),m}if(n.dtype===\"complex64\"){let l=tn({inputs:{input:n},backend:t}),c=rn({inputs:{x:l},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(l),c}if(!y.hasEncodingLoss(n.dtype,s)){let l=fr({inputs:{x:n},backend:t});return{dataId:l.dataId,shape:l.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=JS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var G_={kernelName:ho,backendName:\"cpu\",kernelFunc:rn};function Qe(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=a.dtype===\"string\"?C.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?C.fromUint8ToStringArray(l):l,d=o||a.dtype,[f,h]=e(a.shape,i.shape,c,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=rn({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),l=p.data.get(u.dataId),c=l.complexTensorInfos.real,m=l.complexTensorInfos.imag,d=p.data.get(c.dataId).values,f=p.data.get(m.dataId).values,h=rn({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,w=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,T,E]=t(a.shape,i.shape,d,f,w,S),R=p.makeTensorInfo(E,\"float32\",k),D=p.makeTensorInfo(E,\"float32\",T),F=qt({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),F}else{let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=o||a.dtype,[m,d]=e(a.shape,i.shape,u,l,c);return p.makeTensorInfo(d,c,m)}}}function kl(r){return(e,t,o,n,s,a)=>{let i=C.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,l=y.computeStrides(i),c=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=C.getBroadcastDims(e,i),f=C.getBroadcastDims(t,i),h=C.mergeRealAndImagArrays(o,n),g=C.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),w=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,x,b),D=T.slice(-w);f.forEach(M=>D[M]=0);let F=y.locToIndex(D,w,S),O=r(h[R*2],h[R*2+1],g[F*2],g[F*2+1]);c[k]=O.real,m[k]=O.imag}return[c,m,i]}}var eI=Ve((r,e)=>r+e),u7=kl((r,e,t,o)=>({real:r+t,imag:e+o})),Wa=Qe(Rr,eI,u7),H_={kernelName:Rr,backendName:\"cpu\",kernelFunc:Wa};function Nl(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function Of(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ie([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var tI=Ve((r,e)=>r&e),p7=Qe(_n,tI),K_={kernelName:_n,backendName:\"cpu\",kernelFunc:p7};function Yt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype===\"string\"){if(!Array.isArray(p))throw new Error(\"String tensor's value was not an instance of Array\");u=C.fromUint8ToStringArray(p)}else u=p;let l=t||a.dtype,c=e(u,l,n);return i.makeTensorInfo(a.shape,l,c)}}var rI=Yt(r=>Math.ceil(r)),l7=Mr(go,rI),q_={kernelName:go,backendName:\"cpu\",kernelFunc:l7};function mp(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?C.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),nI=Qe(xo,oI,null,\"bool\"),j_={kernelName:xo,backendName:\"cpu\",kernelFunc:nI};var sI=Yt(r=>Math.exp(r)),aI=Mr(yo,sI,\"float32\"),X_={kernelName:yo,backendName:\"cpu\",kernelFunc:aI};var iI=Yt(r=>Math.expm1(r)),c7=Mr(bo,iI),Y_={kernelName:bo,backendName:\"cpu\",kernelFunc:c7};var uI=Yt(r=>Math.floor(r)),m7=Mr(Co,uI),Q_={kernelName:Co,backendName:\"cpu\",kernelFunc:m7};var pI=Ve((r,e)=>Math.floor(r/e)),d7=Qe(wo,pI,null,\"int32\"),Z_={kernelName:wo,backendName:\"cpu\",kernelFunc:d7};function Mf(r,e,t,o,n,s,a,i,p){let u=ie([o,s],t);for(let l=0;l=p/s)throw new Error(`Invalid indices: ${c} does not index into ${i}`);for(let d=0;dr>e?1:0),f7=Qe(So,lI,null,\"bool\"),J_={kernelName:So,backendName:\"cpu\",kernelFunc:f7};var cI=Ve((r,e)=>r>=e?1:0),h7=Qe(Io,cI,null,\"bool\"),eE={kernelName:Io,backendName:\"cpu\",kernelFunc:h7};var mI=Ve((r,e)=>rr<=e?1:0),x7=Qe(No,dI,null,\"bool\"),rE={kernelName:No,backendName:\"cpu\",kernelFunc:x7};function Bf(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),y7=Mr(To,fI),oE={kernelName:To,backendName:\"cpu\",kernelFunc:y7};function zf(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var hI=Ve((r,e)=>Math.max(r,e)),b7=Qe(_o,hI),nE={kernelName:_o,backendName:\"cpu\",kernelFunc:b7};var gI=Ve((r,e)=>Math.min(r,e)),C7=Qe(Eo,gI),sE={kernelName:Eo,backendName:\"cpu\",kernelFunc:C7};var qc=Ve((r,e)=>r*e),w7=kl((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),dp=Qe($o,qc,w7),aE={kernelName:$o,backendName:\"cpu\",kernelFunc:dp};function xI(r,e,t){let o=y.createScalarValue(-1,t);return qc([],e,o,r,t)}function S7(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=xI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var iE={kernelName:ls,backendName:\"cpu\",kernelFunc:S7};var yI=Ve((r,e)=>r!==e?1:0),I7=Qe(Ro,yI,null,\"bool\"),uE={kernelName:Ro,backendName:\"cpu\",kernelFunc:I7};function Tl(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let l=0;lt.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var lE={kernelName:Ho,backendName:\"cpu\",kernelFunc:v7};function k7(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function N7(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function T7(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);N7(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[l];for(let x=l;xn[a]=s)}return e}function cE(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error(\"starts must be a scalar or vector\");if(n.length>1)throw new Error(\"limits must be a scalar or vector\");if(a.length>1)throw new Error(\"deltas must be a scalar or vector\");let i=e.length===0,p=n.length===0,u=a.length===0,l=[];i||l.push(e[0]),p||l.push(n[0]),u||l.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/w)),S>mE)throw new Error(`Requires ((limit - start) / delta) <= ${mE}`);m[g+1]=m[g]+S}let d=m[c],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let l=1;l=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${t.length}`);u=t[c]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case on.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case on.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${on[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case on.FIRST_DIM_SIZE:return e[0];case on.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case on.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${on[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=fE(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,l=this.defaultValue;if(l.length!==p&&l.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(l,f);l=Oa(h,i).dataSync()})}let c=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);dE(g,l,p),++d}h<0?(c=f+1,m=d):(c=f,m=d,d=m+1)}}};function dE(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function Uf(r,e,t,o,n,s,a,i,p,u){return new CI(r,e,t,o,n,s,a,i,p,u).compute()}function fp(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),R7=Mr(Do,wI),hE={kernelName:Do,backendName:\"cpu\",kernelFunc:R7};function Xs(r,e,t,o,n,s,a,i,p,u){let l=[o/n,n],c=r.values,m=e.values;if(o===0)return ie(t,e.dtype);let d=p instanceof Ge?p:ie(l,e.dtype);typeof p==\"string\"||typeof p==\"number\"?d.values.fill(p):typeof p==\"boolean\"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),SI=Ie(Ao,r=>1/(1+Math.exp(-r))),xE={kernelName:Ao,backendName:\"cpu\",kernelFunc:SI};function hp(r,e,t,o,n){let s=nt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let c=nt.computeFlatOffset(e,i);return n===\"string\"?r.slice(c,c+a):r.subarray(c,c+a)}let p=n===\"string\"?C.fromUint8ToStringArray(r):r,u=ie(o,n,p),l=ie(t,n);for(let c=0;cf+e[h]);l.set(u.get(...d),...m)}return n===\"string\"?C.fromStringArrayToUint8(l.values):l.values}function nn(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=nt.parseSliceParams(n,s,a);nt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,l=hp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,l)}var yE={kernelName:_s,backendName:\"cpu\",kernelFunc:nn};function Gf(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),l=new Array(i),c=e[1];if(p===0){if(i!==0)throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,c],x,u,l]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(c<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=c;let d=m.reduce((w,S)=>w*S,1),f=y.getArrayFromDType(t,d);if(i===0)return c>0&&f.fill(a),[f,m];if(c<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let w=0;if(g=w)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=c)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,c));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let T=0;Ti)break}return xMath.sqrt(r)),D7=Ie(Fo,r=>Math.sqrt(r)),CE={kernelName:Fo,backendName:\"cpu\",kernelFunc:D7};var II=Ve((r,e)=>{let t=r-e;return t*t}),A7=Qe(Po,II),wE={kernelName:Po,backendName:\"cpu\",kernelFunc:A7};var vI=Yt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?\"g\":\"\"),n)}),F7=Mr(pi,vI),SE={kernelName:pi,backendName:\"cpu\",kernelFunc:F7};function Kf(r,e,t,o){let n=ie(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(w=>h[g++]=w);for(let b=0;b0){x(e[m+c-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(l=l&&t[u]<=o,!l)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],l=0;this.nGramWidths.forEach(c=>{l+=this.getNumNGrams(u,c)}),this.preserveShort&&u>0&&l===0&&(l=1),a[p]=a[p-1]+l}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,c);this.createNGrams(e,u,i,l,d,c),l+=d}),this.preserveShort&&l===a[p]){let c=t[p+1]-t[p];if(c===0)continue;let m=c+2*this.padWidth;this.createNGrams(e,u,i,l,1,m)}}return[i,a]}};function gp(r,e,t,o,n,s,a,i){return new kI(t,o,n,s,a,i).compute(r,e)}function P7(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),O7=kl((r,e,t,o)=>({real:r-t,imag:e-o})),jc=Qe(Oo,NI,O7),IE={kernelName:Oo,backendName:\"cpu\",kernelFunc:jc};function qf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function vE(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(i-l)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*l/i+c)),d=Math.min(o,Math.floor(e+(i-p)*l/i+c));vE(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Xc(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Xc(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function jf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let c=0;cf[w]={value:b,index:w}),o{for(let g=0;gnew Il,1);var TI=Ie(Wn,r=>r>=0?r:Math.exp(r)-1),kE={kernelName:Wn,backendName:\"cpu\",kernelFunc:TI};function _I(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([n],\"leakyRelu\");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?e*r:r);function EI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=L7(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var TE={kernelName:gs,backendName:\"cpu\",kernelFunc:EI};var $I=Ie(ys,r=>Math.max(0,r)),_E={kernelName:ys,backendName:\"cpu\",kernelFunc:$I};var RI=Ie(ws,r=>Math.min(Math.max(0,r),6)),EE={kernelName:ws,backendName:\"cpu\",kernelFunc:RI};function Cp(r,e,t,o,n){if(t===\"linear\")return fr({inputs:{x:e},backend:r});if(t===\"relu\")return $I({inputs:{x:e},backend:r});if(t===\"elu\")return TI({inputs:{x:e},backend:r});if(t===\"relu6\")return RI({inputs:{x:e},backend:r});if(t===\"prelu\")return EI({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return _I({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return SI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let l=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;l.shape=i,c.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var $E={kernelName:Ca,backendName:\"cpu\",kernelFunc:We};function DI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([n,s],\"matMul\");let p=n.shape.length,u=s.shape.length,l=a?n.shape[p-2]:n.shape[p-1],c=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(l===c,()=>`Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,l,m]:[g,m,l],k=i?[x,d,c]:[x,c,d],T=We({inputs:{x:n},backend:t,attrs:{shape:S}}),E=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?T.shape[1]:T.shape[2],D=a?T.shape[2]:T.shape[1],F=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=t.data.get(T.dataId).values,L=t.data.get(E.dataId).values,B=y.computeStrides(T.shape),z=y.computeStrides(E.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*F,ee=ie([O,D,F],T.dtype),oe=ee.values,ue=t.blockSize;for(let me=0;meMath.acos(r)),AE={kernelName:hn,backendName:\"cpu\",kernelFunc:z7};var V7=Ie(gn,r=>Math.acosh(r)),FE={kernelName:gn,backendName:\"cpu\",kernelFunc:V7};function W7(r){let{inputs:e,backend:t}=r,o=e;Q(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=ie(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,w=S)}d[g]=w}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(l,\"int32\",d)}var LE={kernelName:na,backendName:\"cpu\",kernelFunc:H7};function K7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,\"argMin\");let a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=vt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],C.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[l,c]=C.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(l),d=y.makeZerosTypedArray(m,\"int32\"),f=y.sizeFromShape(c),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(l,\"int32\",d)}var BE={kernelName:sa,backendName:\"cpu\",kernelFunc:K7};var q7=Ie(Cn,r=>Math.asin(r)),zE={kernelName:Cn,backendName:\"cpu\",kernelFunc:q7};var j7=Ie(wn,r=>Math.asinh(r)),VE={kernelName:wn,backendName:\"cpu\",kernelFunc:j7};var X7=Ie(Sn,r=>Math.atan(r)),WE={kernelName:Sn,backendName:\"cpu\",kernelFunc:X7};var Y7=Ve((r,e)=>Math.atan2(r,e)),Q7=Qe(vn,Y7),UE={kernelName:vn,backendName:\"cpu\",kernelFunc:Q7};var Z7=Ie(In,r=>Math.atanh(r)),GE={kernelName:In,backendName:\"cpu\",kernelFunc:Z7};function El(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=ie(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],w=n.outShape[3];for(let S=0;Sj?j=ue:s===\"avg\"&&(q+=ue,Y++)}if(isNaN(j))break}let J=M+L*w+E;g[J]=s===\"avg\"?q/Y:j}}}return h}function Yf(r,e,t,o,n=!1,s=!1){let a=ie(o.outShape,\"int32\"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,l=o.dilationWidth,c=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=ie(e,t,r);for(let g=0;gF&&(F=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,T,x)}}return a}function Qf(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,l=n.dilationHeight,c=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=ie(n.outShape,t),S=w.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],T=n.outShape[2]*n.outShape[3]*n.outShape[4],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=xt:s===\"avg\"&&(ve+=xt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s===\"avg\"?ve/Math.max(Fe,1):_e}}}}return w}function HE(r,e){let t=ie(e.outShape,\"int32\"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=re,B=U*l*c+q*l+J)}}}t.set(B,h,x,k,D,g)}}}return t}function J7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p),c;if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))c=fr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=El(m,n.shape,n.dtype,d,l,\"avg\");c=t.makeTensorInfo(l.outShape,n.dtype,f.values)}return c}var KE={kernelName:kn,backendName:\"cpu\",kernelFunc:J7};function eQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"avgPool3d\");let l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.data.get(n.dataId).values,m=Qf(c,n.shape,n.dtype,y.computeStrides(n.shape),l,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var qE={kernelName:aa,backendName:\"cpu\",kernelFunc:eQ};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"avgPool3DGrad\");let l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=l.strideDepth,m=l.strideHeight,d=l.strideWidth,f=l.filterDepth,h=l.filterHeight,g=l.filterWidth,x=l.dilationDepth,b=l.dilationHeight,w=l.dilationWidth,S=l.effectiveFilterDepth,k=l.effectiveFilterHeight,T=l.effectiveFilterWidth,E=S-1-l.padInfo.front,R=T-1-l.padInfo.left,D=k-1-l.padInfo.top,F=ie(s.shape,\"float32\"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=l.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=l.outHeight||Math.floor(ue)!==ue))for(let me=0;me=l.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ue,be,B);re+=_e}}}F.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(F.shape,F.dtype,F.values)}var jE={kernelName:Vi,backendName:\"cpu\",kernelFunc:tQ};function rQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=l.strideHeight,m=l.strideWidth,d=l.filterHeight,f=l.filterWidth,h=l.dilationHeight,g=l.dilationWidth,x=l.effectiveFilterHeight,b=l.effectiveFilterWidth,w=b-1-l.padInfo.left,S=x-1-l.padInfo.top,k=ie(a.shape,\"float32\"),T=1/(d*f),E=t.data.get(n.dataId).values,R=ie(n.shape,\"float32\",E);for(let D=0;D=l.outHeight||Math.floor(j)!==j))for(let q=0;q=l.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,F);z+=J}}k.set(z*T,D,O,M,F)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var XE={kernelName:zi,backendName:\"cpu\",kernelFunc:rQ};function oQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||i.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(s==null||i.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\"),Q([n,i,p,s,a],\"batchNorm\");let{varianceEpsilon:u}=o;u==null&&(u=.001);let l=t.data.get(n.dataId).values,c=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(l.length),g=f.length,x=d.length,b=m.length,w=c.length,S=0,k=0,T=0,E=0;for(let R=0;R=g&&(S=0),k>=w&&(k=0),T>=x&&(T=0),E>=b&&(E=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var YE={kernelName:Hn,backendName:\"cpu\",kernelFunc:oQ};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],\"batchToSpaceND\");let i=s.reduce((x,b)=>x*b),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=vt({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:l}}),g=nn({inputs:{x:h},backend:t,attrs:{begin:c,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var QE={kernelName:ia,backendName:\"cpu\",kernelFunc:nQ};function sQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Nl(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var ZE={kernelName:Tn,backendName:\"cpu\",kernelFunc:sQ};function aQ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var JE={kernelName:ua,backendName:\"cpu\",kernelFunc:aQ};var iQ=Ie(Go,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return fr({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(S=>tn({inputs:{input:S},backend:t})),g=p.map(S=>Ua({inputs:{input:S},backend:t})),x=Su({inputs:h,backend:t,attrs:{axis:s}}),b=Su({inputs:g,backend:t,attrs:{axis:s}}),w=qt({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),w}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),l=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=C.computeOutShape(u.map(h=>h.shape),1);let c=u[0].shape[0]===1,m=mp(l,i,e[0].dtype,c),d=C.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var o$={kernelName:pa,backendName:\"cpu\",kernelFunc:Su};function AI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o;Q([n,s],\"conv2d\");let c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,w=m.dataFormat===\"channelsLast\",S=new Ge(m.outShape,n.dtype),k=y.computeStrides(n.shape),T=y.computeStrides(s.shape),E=k[0],R=w?k[1]:k[2],D=w?k[2]:1,F=w?1:k[1],O=S.strides[0],M=w?S.strides[1]:S.strides[2],L=w?S.strides[2]:1,B=w?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let me=oe*T[0],be=Y+ue*R;for(let _e=0;_e=m.inWidth)continue;let ct=me+Pe*T[1],Ke=be+at*D,mt=ct;for(let ut=0;ut=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ue=q+ee*D[1],me=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let at=ue+Fe*D[2],ct=me+Pe*u.inChannels,Ke=at;for(let mt=0;mtMath.cos(r)),l$={kernelName:An,backendName:\"cpu\",kernelFunc:fQ};var hQ=Ie(Fn,r=>Math.cosh(r)),c$={kernelName:Fn,backendName:\"cpu\",kernelFunc:hQ};function gQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[l,c,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=ie([f,h,g,d],\"float32\"),b=t.data.get(s.dataId).values,w=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),T=y.computeStrides(x.shape);for(let E=0;E=l)continue;let B=h>1?(O-D)*(c-1)/(h-1):0,z=g>1?(M-F)*(m-1)/(g-1):0;for(let U=0;U1?D*(c-1)+U*B:.5*(D+O)*(c-1);if(j<0||j>c-1){for(let q=0;q1?F*(m-1)+re*z:.5*(F+M)*(m-1);if(ne<0||ne>m-1){for(let me=0;me1?F*(m-1)+q*z:.5*(F+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],l=n.shape[3],c=p*s,m=u*s,d=l/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*c*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=C.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,w=b.left,S=b.top,k=d.outChannels/d.inChannels,T=new Ge(d.outShape,n.dtype),E=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=T.values;for(let F=0;F=d.inHeight)continue;let q=U*c[0],Y=O+j*l[1];for(let J=0;J=d.inWidth)continue;let ue=q+ee*c[1],me=Y+oe*d.inChannels,be=re,_e=ue;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,l=o.shape.length,c=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:w,strideHeight:S,strideWidth:k,filterHeight:T,filterWidth:E,dilationHeight:R,dilationWidth:D,outShape:F}=C.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),O=y.sizeFromShape(F),M=F.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&mere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(F));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),F,o.dtype),shape:F,dtype:o.dtype}}};var S$={kernelName:qi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,l=y.toNestedArray(o.shape,u.data.get(o.dataId).values),c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:S,filterHeight:k,filterWidth:T,dilationHeight:E,dilationWidth:R,outShape:D}=C.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${qi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let F=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ueY&&(Y=me,J=ne,re=oe)}}}O[J][re][q]+=F[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var I$={kernelName:Ki,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,l=y.toNestedArray(o.shape,u.data.get(o.dataId).values),c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:S,filterHeight:k,filterWidth:T,dilationHeight:E,dilationWidth:R,outShape:D}=C.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Ki}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let F=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ueY&&(Y=me,J=ee,re=ue)}}}O[L][J][re][q]+=F[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function vQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,l=(i==null?void 0:i.contextType)||\"2d\";if(l!==\"2d\")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let c=s.getContext(l,(i==null?void 0:i.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${l} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype===\"float32\"?255:1,x=new Uint8ClampedArray(d*m*4);for(let w=0;w1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${E}.`)}else if(n.dtype===\"int32\"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[T]=E*g}let k=w*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return c.putImageData(b,0,0),n}var v$={kernelName:Mu,backendName:\"cpu\",kernelFunc:vQ};function Ii(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=rn({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=fr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),l=C.getAxesPermutation(u,p),c=u,m=i;l!=null&&(m=vt({inputs:{x:i},backend:t,attrs:{perm:l}}),c=C.getInnerMostAxes(c.length,p)),C.assertAxesAreInnerMostDims(\"sum\",c,m.shape.length);let[d,f]=C.computeOutAndReduceShapes(m.shape,c),h=C.upcastType(m.dtype,\"int32\"),g=vl(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,w=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=Ii({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var N$={kernelName:ji,backendName:\"cpu\",kernelFunc:kQ};function NQ(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([o,n],\"eluGrad\");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var T$={kernelName:ri,backendName:\"cpu\",kernelFunc:NQ};var TQ=C.ERF_P,_Q=C.ERF_A1,EQ=C.ERF_A2,$Q=C.ERF_A3,RQ=C.ERF_A4,DQ=C.ERF_A5,AQ=Ie(Un,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+TQ*t);return e*(1-((((DQ*o+RQ)*o+$Q)*o+EQ)*o+_Q)*o*Math.exp(-t*t))}),_$={kernelName:Un,backendName:\"cpu\",kernelFunc:AQ};function $l(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var E$={kernelName:ma,backendName:\"cpu\",kernelFunc:$l};var FQ=Ve((r,e)=>r/e),Yc=Qe(Vn,FQ),Qc={kernelName:Vn,backendName:\"cpu\",kernelFunc:Yc};function Zf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],l=y.sizeFromShape(u),c=y.getTypedArrayFromDType(\"float32\",l),m=y.getTypedArrayFromDType(\"float32\",l);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,l=n.data.get(o.dataId).values;for(let m=0;m=0&&w=0,()=>`GatherV2: the index value ${k} is not in [0, ${l-1}]`)}let c=i;i==null&&(c=0);let m=y.sizeFromShape(s.shape),d=C.segment_util.collectGatherOpShapeInfo(n,s,p,c),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),w=Lf(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,w.dtype,w.values)}var O$={kernelName:fa,backendName:\"cpu\",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Zf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var M$={kernelName:Yi,backendName:\"cpu\",kernelFunc:GQ};var HQ=Ie(qn,r=>Number.isFinite(r)?1:0,\"bool\"),L$={kernelName:qn,backendName:\"cpu\",kernelFunc:HQ};var KQ=Ie(jn,r=>Math.abs(r)===1/0?1:0,\"bool\"),B$={kernelName:jn,backendName:\"cpu\",kernelFunc:KQ};var qQ=Ie(Xn,r=>Number.isNaN(r)?1:0,\"bool\"),z$={kernelName:Xn,backendName:\"cpu\",kernelFunc:qQ};function jQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Bf(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var V$={kernelName:Qn,backendName:\"cpu\",kernelFunc:jQ};var XQ=Ie(Zn,r=>Math.log1p(r)),W$={kernelName:Zn,backendName:\"cpu\",kernelFunc:XQ};var YQ=Ve((r,e)=>r&&e),QQ=Qe(Jn,YQ,null,\"bool\"),U$={kernelName:Jn,backendName:\"cpu\",kernelFunc:QQ};var ZQ=Ie(es,r=>r?0:1,\"bool\"),G$={kernelName:es,backendName:\"cpu\",kernelFunc:ZQ};var JQ=Ve((r,e)=>r||e),eZ=Qe(ts,JQ,null,\"bool\"),H$={kernelName:ts,backendName:\"cpu\",kernelFunc:eZ};function tZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,\"LRN\");let u=n.shape[3],l=u-1,c=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,l),w=0;for(;x<=b;x++){let S=c[x];w+=S*S}return w}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p),c;if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))c=fr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=El(m,n.shape,n.dtype,d,l,\"max\");c=t.makeTensorInfo(l.outShape,n.dtype,f.values)}return c}var X$={kernelName:ns,backendName:\"cpu\",kernelFunc:oZ};function nZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"maxPool3d\");let l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.data.get(n.dataId).values,m=Qf(c,n.shape,n.dtype,y.computeStrides(n.shape),l,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var Y$={kernelName:ha,backendName:\"cpu\",kernelFunc:nZ};function sZ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"maxPool3DGrad\");let l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=t.bufferSync(s),m=HE(c,l),d=l.strideDepth,f=l.strideHeight,h=l.strideWidth,g=l.dilationDepth,x=l.dilationHeight,b=l.dilationWidth,w=l.effectiveFilterDepth,S=l.effectiveFilterHeight,k=l.effectiveFilterWidth,T=w-1-l.padInfo.front,E=k-1-l.padInfo.left,R=S-1-l.padInfo.top,D=ie(s.shape,\"float32\"),F=t.bufferSync(n);for(let O=0;O=l.outDepth||Math.floor(re)!==re))for(let ne=0;ne=l.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=l.outWidth||Math.floor(ue)!==ue)continue;let me=w*S*k-1-m.get(O,re,ee,ue,M),be=J*S*k+ne*k+oe,_e=me===be?1:0;if(_e===0)continue;let ve=F.get(O,re,ee,ue,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var Q$={kernelName:Ji,backendName:\"cpu\",kernelFunc:sZ};function aZ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=t.data.get(i.dataId).values,f=ie(m.outShape,i.dtype,Yf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,w=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,T=w-1-m.padInfo.top,E=ie(i.shape,\"float32\"),R=t.data.get(n.dataId).values,D=ie(n.shape,\"float32\",R);for(let F=0;F=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=w*S-1-f.get(F,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(F,q,J,O);U+=oe*ee}}E.set(U,F,M,L,O)}return t.makeTensorInfo(E.shape,E.dtype,E.values)}var Z$={kernelName:Zi,backendName:\"cpu\",kernelFunc:aZ};function J$(r,e,t,o,n){let s=y.computeStrides(e),a=El(r,e,t,s,n,\"max\"),i=Yf(r,e,t,n,!0,o);return[a.values,i.values]}var eR={kernelName:ga,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,l=C.computePool2DInfo(o.shape,n,s,[1,1],a),[c,m]=J$(u,o.shape,o.dtype,i,l),d=p.write(c,l.outShape,o.dtype),f=p.write(m,l.outShape,o.dtype);return[{dataId:d,shape:l.outShape,dtype:o.dtype},{dataId:f,shape:l.outShape,dtype:\"int32\"}]}};function iZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=C.computeOutAndReduceShapes(n.shape,i)[1],l=y.sizeFromShape(u),c=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([l]));c.push(m);let d=rn({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});c.push(d);let f=Yc({inputs:{a:d,b:m},backend:t});c.push(f);let h=Ii({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return c.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var tR={kernelName:ss,backendName:\"cpu\",kernelFunc:iZ};function uZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"min\");let i=y.parseAxisParam(s,n.shape),p=i,u=C.getAxesPermutation(p,n.shape.length),l=n;u!=null&&(l=vt({inputs:{x:n},backend:t,attrs:{perm:u}}),p=C.getInnerMostAxes(p.length,n.shape.length)),C.assertAxesAreInnerMostDims(\"min\",p,l.shape.length);let[c,m]=C.computeOutAndReduceShapes(l.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(c),l.dtype),h=t.data.get(l.dataId).values;for(let x=0;xw[0]+n.shape[S]+w[1]),p=s.map(w=>w[0]),u=s.map((w,S)=>w[0]+n.shape[S]),l=a===\"reflect\"?0:1,c=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let w=0;w=u[T]&&(S[T]=(u[T]-1)*2-S[T]+l);S=S.map((T,E)=>T-p[E]);let k=y.locToIndex(S,m,d);x[w]=c[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var oR={kernelName:is,backendName:\"cpu\",kernelFunc:pZ};var lZ=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),cZ=Qe(us,lZ),nR={kernelName:us,backendName:\"cpu\",kernelFunc:cZ};var aR=Kp(iS());function MI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=OI({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),l=C.expandShapeToKeepDim(u.shape,p),c=We({inputs:{x:u},backend:t,attrs:{shape:l}}),m=jc({inputs:{a:n,b:c},backend:t}),d=aI({inputs:{x:m},backend:t}),f=Ii({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:l}}),g=Yc({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var sR={kernelName:Fs,backendName:\"cpu\",kernelFunc:MI};function mZ(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:MI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],l=p.shape[1],c=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),\"int32\");for(let f=0;f=0&&c[m]{y.assertShapesMatch(s,l.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===l.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(l=>{let c=$l({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=Su({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeIntermediateTensorInfo(l)),u}var hR={kernelName:ya,backendName:\"cpu\",kernelFunc:LI};function CZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(n,\"pad\");let i=s.map((b,w)=>b[0]+n.shape[w]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,l=y.sizeFromShape(n.shape),c=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;bT+p[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Jf={kernelName:fs,backendName:\"cpu\",kernelFunc:CZ};var wZ=Ve((r,e)=>Math.pow(r,e)),SZ=Qe(hs,wZ),gR={kernelName:hs,backendName:\"cpu\",kernelFunc:SZ};function IZ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),l=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values,[m,d,f]=Vf(p,u,l,s.shape,s.dtype,c,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var xR={kernelName:Qp,backendName:\"cpu\",kernelFunc:IZ};function vZ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=Wf(a,o.shape,o.dtype,i,n.shape,p,s.shape),c=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([l.length],o.dtype,l);return[c,m]}var yR={kernelName:Zp,backendName:\"cpu\",kernelFunc:vZ};function kZ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,l=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Uf(u,n.shape,l,s.shape,s.dtype,c,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var bR={kernelName:Jp,backendName:\"cpu\",kernelFunc:kZ};function NZ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=fp(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var CR={kernelName:ba,backendName:\"cpu\",kernelFunc:NZ};var TZ=Ie(xs,r=>1/r),wR={kernelName:xs,backendName:\"cpu\",kernelFunc:TZ};function _Z(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(n,\"resizeBilinear\");let p=y.computeStrides(n.shape),[u,l]=i,[c,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([c,u,l,f])),x=[s&&u>1?m-1:m,s&&l>1?d-1:d],b=[s&&u>1?u-1:u,s&&l>1?l-1:l],w=0,S=x[0]/b[0],k=x[1]/b[1];for(let T=0;T1?u-1:u,a&&d>1?l-1:l],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],w=t.data.get(s.dataId).values,S=0;for(let k=0;k1?m-1:m,s&&l>1?d-1:d],b=[s&&u>1?u-1:u,s&&l>1?l-1:l],w=x[0]/b[0],S=x[1]/b[1],k=0;for(let T=0;T1?l-1:l,a&&f>1?c-1:c],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],w=x[0]/b[0],S=x[1]/b[1],k=1/w,T=1/S,E=Math.ceil(k)*2+2,R=Math.ceil(T)*2+2;for(let D=0;D=d)continue;let ee=F+ne*p[1],oe=ne*w,ue=Math.min(l-1,a?Math.round(oe):Math.floor(oe));if(O===ue)for(let me=0;me=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(c-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var kR={kernelName:ai,backendName:\"cpu\",kernelFunc:RZ};function DZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return fr({inputs:{x:n},backend:t});let p=new Ge(n.shape,n.dtype),u=t.bufferSync(n);for(let l=0;lm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...c)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var NR={kernelName:Ss,backendName:\"cpu\",kernelFunc:DZ};var TR={kernelName:Vs,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,l,c,m]=o.shape,[d,f]=C.getImageCenter(a,l,c),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),_R={kernelName:Is,backendName:\"cpu\",kernelFunc:AZ};function FZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=Xs(d,f,a,c,u,p,i,l,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var ER={kernelName:vs,backendName:\"cpu\",kernelFunc:FZ};function PZ(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?zZ*r:BZ*(Math.exp(r)-1)),AR={kernelName:Ts,backendName:\"cpu\",kernelFunc:VZ};var WZ=Ie(Rs,r=>r<0?-1:r>0?1:0),FR={kernelName:Rs,backendName:\"cpu\",kernelFunc:WZ};var UZ=Ie(Es,r=>Math.sin(r)),PR={kernelName:Es,backendName:\"cpu\",kernelFunc:UZ};var GZ=Ie($s,r=>Math.sinh(r)),OR={kernelName:$s,backendName:\"cpu\",kernelFunc:GZ};var HZ=11920928955078125e-23,MR=Math.log(HZ)+2,KZ=Ie(Ds,r=>{let e=r>-MR,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var zR={kernelName:eu,backendName:\"cpu\",kernelFunc:jZ};function XZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,l,c]=Hf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(l,o.dtype,u),t.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var VR={kernelName:ui,backendName:\"cpu\",kernelFunc:XZ};function YZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=_l(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(l,o.dtype,u)}var WR={kernelName:va,backendName:\"cpu\",kernelFunc:YZ};function QZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=_l(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(l,o.dtype,u)}var UR={kernelName:ka,backendName:\"cpu\",kernelFunc:QZ};function ZZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case\"float32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case\"int32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case\"string\":{let g=t.bufferSync(s),x=y.decodeString(t.data.get(a.dataId).values[0]);h=Xs(f,g,i,m,l,u,p,c,x,d);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var GR={kernelName:Ps,backendName:\"cpu\",kernelFunc:ZZ};function JZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),l=n.shape.slice();return p.map(c=>{let m=[...l];m[i]=c;let d=nn({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=c,d})}var HR={kernelName:Ia,backendName:\"cpu\",kernelFunc:JZ};var KR={kernelName:tu,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(t,\"square\");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),qR={kernelName:Ko,backendName:\"cpu\",kernelFunc:e9};function t9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o;Q(n,\"stridedSlice\");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=We({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=nn({inputs:{x:n},backend:t,attrs:{begin:b,size:T}});k=We({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(E)}else{let T=t.bufferSync(n),E=Kf(d,T,S,b);k=t.makeTensorInfo(f,E.dtype,E.values)}return k}var jR={kernelName:Os,backendName:\"cpu\",kernelFunc:t9};function r9(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.data.get(l.dataId).values,d=t.data.get(c.dataId).values,[f,h]=gp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(c.shape,\"int32\",h)]}var XR={kernelName:Na,backendName:\"cpu\",kernelFunc:r9};function o9(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,l,c]=xp(i,p,n),m=l.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",l),t.makeTensorInfo([2],\"int32\",new Int32Array(c))]}var YR={kernelName:ru,backendName:\"cpu\",kernelFunc:o9};function n9(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.data.get(s.dataId).values,i=yp(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var QR={kernelName:ou,backendName:\"cpu\",kernelFunc:n9};var s9=Ie(Ms,r=>Math.tan(r)),ZR={kernelName:Ms,backendName:\"cpu\",kernelFunc:s9};var a9=Ie(Ls,r=>Math.tanh(r)),JR={kernelName:Ls,backendName:\"cpu\",kernelFunc:a9};function i9(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:l}=C.calculateShapes(s,n,o.shape),c=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=Xs(m,d,o.shape,l,p,i,a,u,f,c);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var eD={kernelName:ks,backendName:\"cpu\",kernelFunc:i9};function u9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,\"tile\");let a=qf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var tD={kernelName:Mo,backendName:\"cpu\",kernelFunc:u9};function p9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=jf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var rD={kernelName:Bs,backendName:\"cpu\",kernelFunc:p9};function l9(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=y.computeStrides(n.shape),b=x[0],w=x[1],S=x[2],k=y.computeStrides(g),T=k[0],E=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let F=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function m9(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function d9(r,e){return r}function f9(r,e){return y.clamp(0,r,e-1)}function em(r,e,t,o,n,s,a,i,p,u,l){let c=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var iD={kernelName:su,backendName:\"cpu\",kernelFunc:b9};var C9=[DE,z_,AE,FE,H_,PE,OE,ME,LE,BE,zE,VE,WE,UE,GE,KE,qE,jE,XE,RE,YE,QE,ZE,K_,JE,G_,q_,e$,V_,t$,o$,n$,s$,a$,i$,u$,p$,l$,c$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,N$,kE,T$,j_,_$,X_,E$,Y_,$$,R$,D$,Q_,Z_,A$,F$,P$,O$,J_,eE,W_,M$,r$,L$,B$,z$,NE,tE,rE,V$,oE,W$,U$,G$,H$,K$,q$,j$,nE,X$,Y$,Q$,Z$,eR,tR,rR,sE,oR,nR,iR,aE,iE,uR,pR,lR,uE,cR,fR,hR,Jf,gR,TE,lE,xR,yR,bR,CR,U_,Qc,wR,_E,EE,$E,SR,IR,vR,kR,NR,TR,_R,hE,ER,RR,DR,AR,xE,FR,PR,OR,yE,sR,LR,BR,zR,VR,WR,UR,GR,HR,CE,KR,wE,SE,qR,jR,XR,YR,QR,IE,k$,ZR,JR,eD,tD,rD,nD,pE,sD,aD,iD,mR];for(let r of C9)li(r);var Fl={};qe(Fl,{assertNotComplex:()=>Ys,bindCanvasToFramebuffer:()=>E9,bindColorTextureToFramebuffer:()=>nm,bindTextureToProgramUniformSampler:()=>e0,bindTextureUnit:()=>cD,bindVertexBufferToProgramAttribute:()=>sh,callAndCheck:()=>ce,canBeRepresented:()=>WI,createFragmentShader:()=>GI,createFramebuffer:()=>QI,createProgram:()=>HI,createStaticIndexBuffer:()=>jI,createStaticVertexBuffer:()=>qI,createTexture:()=>XI,createVertexShader:()=>UI,getBatchDim:()=>ki,getExtensionOrThrow:()=>Rl,getFramebufferErrorMessage:()=>mD,getMaxTexturesInShader:()=>o0,getNumChannels:()=>T9,getProgramUniformLocation:()=>JI,getProgramUniformLocationOrThrow:()=>ZI,getRowsCols:()=>Ni,getShapeAs3D:()=>Al,getTextureShapeFromLogicalShape:()=>t0,getWebGLDisjointQueryTimerVersion:()=>n0,getWebGLErrorMessage:()=>lD,getWebGLMaxTextureSize:()=>r0,hasExtension:()=>Jr,isCapableOfRenderingToFloatTexture:()=>s0,isDownloadFloatTextureEnabled:()=>a0,isReshapeFree:()=>vu,isWebGLFenceEnabled:()=>i0,isWebGLVersionEnabled:()=>ih,linkProgram:()=>KI,logShaderSourceAndInfoLog:()=>nh,resetMaxTextureSize:()=>$9,resetMaxTexturesInShader:()=>R9,unbindColorTextureFromFramebuffer:()=>ah,unbindTextureUnit:()=>_9,validateFramebuffer:()=>Dl,validateProgram:()=>om,validateTextureSize:()=>YI});var wp={},eh={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function BI(r,e){wp[r]=e}function Zr(r,e){if(!(r in wp)||e!=null){let o=S9(r,e);if(o!==null)wp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=wp[r];return t==null||t.isContextLost()?(delete wp[r],Zr(r)):(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),wp[r])}function w9(r){if(!A().getBool(\"IS_SAFARI\")&&typeof OffscreenCanvas!=\"undefined\"&&r===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 S9(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?w9(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete wp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(eh.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",eh)||t.getContext(\"experimental-webgl\",eh):t.getContext(\"webgl2\",eh)}var Iu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(Iu||(Iu={}));var hr;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(hr||(hr={}));var or;(function(r){r[r.UNPACKED_FLOAT16=0]=\"UNPACKED_FLOAT16\",r[r.UNPACKED_FLOAT32=1]=\"UNPACKED_FLOAT32\",r[r.PACKED_4X1_UNSIGNED_BYTE=2]=\"PACKED_4X1_UNSIGNED_BYTE\",r[r.PACKED_2X2_FLOAT32=3]=\"PACKED_2X2_FLOAT32\",r[r.PACKED_2X2_FLOAT16=4]=\"PACKED_2X2_FLOAT16\"})(or||(or={}));function Sp(r,e){return[e,r]}function uD(r,e){return r*e}function tm(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ga(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function pD(r,e){let[t,o]=Ga(r,e);return t*o*4}function rm(r,e){let t=r,o,n,s,a,i,p,u,l,c,m;return A().getNumber(\"WEBGL_VERSION\")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,l=1,c=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,l=4,c=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:l,textureTypeHalfFloat:c,textureTypeFloat:m}}function ce(r,e){let t=e();return A().getBool(\"DEBUG\")&&I9(r),t}function I9(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+lD(r,e))}var v9=596e-10,k9=65504;function WI(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||v9r.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function UI(r,e){let t=vi(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error(\"Failed to compile vertex shader.\");return t}function GI(r,e){let t=vi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw nh(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var N9=/ERROR: [0-9]+:([0-9]+):/g;function nh(r,e){let t=N9.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(`\n`),s=n.length.toString().length+2,a=n.map((c,m)=>y.rightPad((m+1).toString(),s)+c),i=0;for(let c=0;cr.createProgram(),\"Unable to create WebGLProgram.\")}function KI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Failed to link vertex and fragment shaders.\")}function om(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Shader program validation failed.\")}function qI(r,e){let t=vi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function jI(r,e){let t=vi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function T9(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function XI(r){return vi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function YI(r,e){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function QI(r){return vi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function sh(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function cD(r,e,t){dD(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function _9(r,e){dD(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function ZI(r,e,t){return vi(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function JI(r,e,t){return r.getUniformLocation(e,t)}function e0(r,e,t,o){ce(r,()=>cD(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function E9(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function nm(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function ah(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Dl(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+mD(r,e))}function mD(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case r.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return`unknown error ${e}`}}function vi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function dD(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function ki(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function Ni(r){if(r.length===0)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function Al(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[ki(r),...Ni(r)]),e}function t0(r,e=!1){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=A().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&A().getBool(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=ki(r),p=2,u=2;r.length&&([p,u]=Ni(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(l=>l*2)}else s=y.sizeToSquarishShape(n);return s}function th(r){return r%2===0}function vu(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r[r.length-1],o=e[e.length-1];if(t===o||th(t)&&th(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&th(r[0])&&th(e[0])}var rh,oh;function r0(r){if(rh==null){let e=Zr(r);rh=e.getParameter(e.MAX_TEXTURE_SIZE)}return rh}function $9(){rh=null}function R9(){oh=null}function o0(r){if(oh==null){let e=Zr(r);oh=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,oh)}function n0(r){if(r===0)return 0;let e,t=Zr(r);return Jr(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:Jr(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function Jr(r,e){return r.getExtension(e)!=null}function ih(r){try{if(Zr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function s0(r){if(r===0)return!1;let e=Zr(r);if(r===1){if(!Jr(e,\"OES_texture_float\"))return!1}else if(!Jr(e,\"EXT_color_buffer_float\"))return!1;return VI(e)}function a0(r){if(r===0)return!1;let e=Zr(r);if(r===1){if(!Jr(e,\"OES_texture_float\")||!Jr(e,\"WEBGL_color_buffer_float\"))return!1}else{if(Jr(e,\"EXT_color_buffer_float\"))return VI(e);let o=\"EXT_color_buffer_half_float\";if(Jr(e,o)){let n=e.getExtension(o);return D9(e,n)}return!1}return VI(e)}function VI(r){let e=rm(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function D9(r,e){let t=rm(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function i0(r){return r!==2?!1:Zr(r).fenceSync!=null}function Ys(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Se=A();Se.registerFlag(\"HAS_WEBGL\",()=>Se.getNumber(\"WEBGL_VERSION\")>0);Se.registerFlag(\"WEBGL_VERSION\",()=>ih(2)?2:ih(1)?1:0);Se.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Se.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Se.get(\"WEBGL_VERSION\")===2);Se.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Se.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Se.registerFlag(\"WEBGL_PACK\",()=>Se.getBool(\"HAS_WEBGL\"));Se.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CLIP\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CONV2DTRANSPOSE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>r0(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>o0(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:n0(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!uu.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>s0(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Se.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Se.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Se.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>a0(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>i0(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Se.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Se.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Se.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>uu.isMobile()?1:-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Se.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Se.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Se.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Se.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Se.getBool(\"IS_TEST\"));Se.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Se.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Se.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);Se.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function kt(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=A().getBool(\"WEBGL2_ISNAN_CUSTOM\")?`\n bool isnan_custom(float val) {\n uint floatToUint = floatBitsToUint(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n `:\"\",p=\"\",u=`\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `):(r=\"\",e=\"attribute\",t=\"varying\",o=\"varying\",n=\"texture2D\",s=\"gl_FragColor\",a=\"\",i=`\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n `,p=`\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n `,u=`\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Qs(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function Ip(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function A9(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function fD(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=A9(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function Pl(r){let e=y.computeStrides(r).map(t=>t.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z;\n }\n`}function Ol(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var uh=`\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n`;var{getBroadcastDims:hD}=C;function gD(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:\"\"};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=ph(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push(\"uniform int outShape;\");break;case 2:o.push(\"uniform ivec2 outShape;\"),o.push(\"uniform int outShapeStrides;\");break;case 3:o.push(\"uniform ivec3 outShape;\"),o.push(\"uniform ivec2 outShapeStrides;\");break;case 4:o.push(\"uniform ivec4 outShape;\"),o.push(\"uniform ivec3 outShapeStrides;\");break;default:break}o.push(\"uniform ivec2 outTexShape;\")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(d=>F9(d,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=kt(),p=M9(i),u,l,c=z9(i);return e.isPacked?(u=P9(e.logicalShape,a,t.enableShapeUniforms),l=B9(i)):(u=O9(e.logicalShape,a,t.enableShapeUniforms),l=L9(i)),t.packedInputs&&(c+=G9),[c,p,l,n,u,s,t.userCode].join(`\n`)}function Ll(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return rJ(r,e);case 1:return nJ(r,e);case 2:return aJ(r,e);case 3:return uJ(r,e);case 4:return lJ(r,e);case 5:return cJ(r);case 6:return mJ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function xD(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return tJ(r);case 1:return oJ(r,e);case 2:return sJ(r,e);case 3:return iJ(r,e);default:return pJ(r,e)}}function F9(r,e,t=!1,o){let n=\"\";t?n+=xD(r,o):n+=Ll(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=dJ(r,e):n+=fJ(r,e)),n}function P9(r,e,t){switch(r.length){case 0:return yD();case 1:return H9(r,e,t);case 2:return J9(r,e,t);case 3:return q9(r,e,t);default:return X9(r,e,t)}}function O9(r,e,t){switch(r.length){case 0:return yD();case 1:return K9(r,e,t);case 2:return eJ(r,e,t);case 3:return j9(r,e,t);case 4:return Y9(r,e,t);case 5:return Q9(r,e);case 6:return Z9(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function M9(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function L9(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function B9(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function z9(r){return`${r.version}\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n ${r.varyingFs} vec2 resultUV;\n ${r.defineOutput}\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n ${r.defineSpecialNaN}\n ${r.defineSpecialInf}\n ${r.defineRound}\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${V9}\n ${W9}\n ${U9}\n `}var V9=`\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,W9=`\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,U9=`\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,G9=`\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n`;function yD(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function H9(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${o[1]}.0);\n }\n `:o[1]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${o[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n return 2 * (resTexRC.x * ${o[1]} + resTexRC.y);\n }\n `}function K9(r,e,t){return e[0]===1?t?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${e[1]}.0);\n }\n `:e[1]===1?t?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${e[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n return resTexRC.x * outTexShape[1] + resTexRC.y;\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n return resTexRC.x * ${e[1]} + resTexRC.y;\n }\n `}function q9(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec3(b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[2]/2),s=n*Math.ceil(r[1]/2);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n int index = resTexRC.x * ${o[1]} + resTexRC.y;\n\n int b = index / ${s};\n index -= b * ${s};\n\n int r = 2 * (index / ${n});\n int c = imod(index, ${n}) * 2;\n\n return ivec3(b, r, c);\n }\n `}function j9(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n ${Ip([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=Qs([\"r\",\"c\",\"d\"],r);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n int index = resTexRC.x * ${e[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function X9(r,e,t){if(t)return`\n ivec4 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatchN = texelsInBatch * outShape[1];\n\n int b2 = index / texelsInBatchN;\n index -= b2 * texelsInBatchN;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec4(b2, b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[r.length-1]/2),s=n*Math.ceil(r[r.length-2]/2),a=s,i=\"\",p=\"b, r, c\";for(let u=2;u=1?l=\"coords = 0;\":l=i.map(b=>`coords.${c[b+u]} = 0;`).join(`\n`);let m=\"\";a<2&&s>0?m=\"coords\":m=r.shapeInfo.logicalShape.map((b,w)=>`coords.${c[w+u]}`).join(\", \");let d=\"return outputValue;\",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=`\n return vec4(outputValue.xy, outputValue.xy);\n `;else if(h&&!x)a===1?d=`\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n `:d=`\n return vec4(outputValue.x);\n `;else if(i.length){let b=s-2,w=s-1;i.indexOf(b)>-1&&i.indexOf(w)>-1?d=\"return vec4(outputValue.x);\":i.indexOf(b)>-1?d=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":i.indexOf(w)>-1&&(d=\"return vec4(outputValue.xx, outputValue.zz);\")}return`\n vec4 ${n}() {\n ${p} coords = getOutputCoords();\n ${l}\n vec4 outputValue = get${o}(${m});\n ${d}\n }\n `}function fJ(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n=\"get\"+o+\"AtOutCoords\",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${t}, resultUV);\n }\n `;let u=Re(p),l=hD(r.shapeInfo.logicalShape,e.logicalShape),c=p-i,m,d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];i===0?m=\"\":p<2&&l.length>=1?m=\"coords = 0;\":m=l.map(h=>`coords.${d[h+c]} = 0;`).join(`\n`);let f=\"\";return p<2&&i>0?f=\"coords\":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+c]}`).join(\", \"),`\n float ${n}() {\n ${u} coords = getOutputCoords();\n ${m}\n return get${o}(${f});\n }\n `}function Re(r){if(r<=1)return\"int\";if(r===2)return\"ivec2\";if(r===3)return\"ivec3\";if(r===4)return\"ivec4\";if(r===5)return\"ivec5\";if(r===6)return\"ivec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function ph(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(\", \")}function CD(r,e,t,o){let n=t.map((l,c)=>{let m={logicalShape:l.shape,texShape:l.isUniform?null:l.texData.texShape,isUniform:l.isUniform,isPacked:l.isUniform?!1:l.texData.isPacked,flatOffset:null};return l.texData!=null&&l.texData.slice!=null&&l.texData.slice.flatOffset>0&&(m.flatOffset=l.texData.slice.flatOffset),{name:e.variableNames[c],shapeInfo:m}}),s=n.map(l=>l.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=gD(n,a,e),p=GI(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},u0(r,e,u)))}function u0(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(t,\"INFINITY\",!1));let l=!1;for(let c of e.variableNames){let m={name:c,uniform:r.getUniformLocation(t,c,l),offset:r.getUniformLocation(t,`offset${c}`,l)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${c}Shape`,l),m.texShape=r.getUniformLocation(t,`${c}TexShape`,l)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,\"outShape\",l),i=r.getUniformLocation(t,\"outShapeStrides\",l),a=r.getUniformLocation(t,\"outTexShape\",l)),e.customUniforms)for(let c of e.customUniforms)n.push(r.getUniformLocation(t,c.name,l));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function bD(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function wD(r,e,t,o,n){e.program.enableShapeUniforms||(bD(e.inShapeInfos,t),bD([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),r.bindVertexArray(e.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:l,keptDims:c}=ph(r.packedInputs,a.shape,p),m=\"\",d=\"\",f=\"\";if(l.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(l.length===2&&!r.packedInputs)d=`${l[0]>1}_${l[1]>1}`;else if(l.length>2&&!r.packedInputs){let k=y.computeStrides(l);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=l.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=C.getBroadcastDims(a.shape,t.shape),w=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||l.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${w}_${u?c:\"\"}_${l.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`}else{let p=a.isUniform?\"uniform\":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+=\"_\"+o+\"_\"+n+`${A().getNumber(\"WEBGL_VERSION\")}`,s}function lt(r){return A().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var lh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Iu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ip([\"r\",\"c\",\"d\"],e):Qs([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n ${t.output} = result;\n }\n `}};var ch=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Iu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?Ip([\"r\",\"c\",\"d\"],e):Qs([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n ${t.output} = result;\n }\n `}};var mh=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=hr.DOWNLOAD;let t=kt();this.outputShape=e,this.userCode=`\n ${uh}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var dh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=hr.DOWNLOAD;let t=kt();this.outputShape=e,this.userCode=`\n ${uh}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${t.output} = encode_float(x);\n }\n `}};var xJ={R:0,G:1,B:2,A:3},sm=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;ix0,createBufferFromOutputTexture:()=>C0,createFloat16MatrixTexture:()=>d0,createFloat16PackedMatrixTexture:()=>g0,createFloat32MatrixTexture:()=>m0,createIndexBuffer:()=>c0,createPackedMatrixTexture:()=>h0,createUnsignedBytesMatrixTexture:()=>f0,createVertexBuffer:()=>l0,createVertexShader:()=>p0,downloadByteEncodedFloatMatrixFromOutputTexture:()=>S0,downloadFloat32MatrixFromBuffer:()=>w0,downloadMatrixFromPackedOutputTexture:()=>v0,downloadPackedMatrixFromBuffer:()=>I0,getInternalFormatForFloat16MatrixTexture:()=>gh,getInternalFormatForFloat16PackedMatrixTexture:()=>bh,getInternalFormatForFloat32MatrixTexture:()=>hh,getInternalFormatForPackedMatrixTexture:()=>yh,getInternalFormatForUnsignedBytesMatrixTexture:()=>xh,uploadDenseMatrixToTexture:()=>y0,uploadPixelDataToTexture:()=>b0});function p0(r){let e=kt(),t=`${e.version}\n precision highp float;\n ${e.attribute} vec3 clipSpacePos;\n ${e.attribute} vec2 uv;\n ${e.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return UI(r,t)}function l0(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return qI(r,e)}function c0(r){let e=new Uint16Array([0,1,2,2,1,3]);return jI(r,e)}function am(r,e,t,o,n,s){YI(e,t);let a=XI(r),i=r.TEXTURE_2D;return ce(r,()=>r.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),A().getNumber(\"WEBGL_VERSION\")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function hh(r){return r.internalFormatFloat}function m0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,hh(o),o.textureFormatFloat,r.FLOAT)}function gh(r){return r.internalFormatHalfFloat}function d0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,gh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function xh(r){return r.downloadTextureFormat}function f0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,xh(o),r.RGBA,r.UNSIGNED_BYTE)}function yh(r){return r.internalFormatPackedFloat}function h0(r,e,t,o){let[n,s]=Ga(e,t);return am(r,n,s,yh(o),r.RGBA,r.FLOAT)}function bh(r){return r.internalFormatPackedHalfFloat}function g0(r,e,t,o){let[n,s]=Ga(e,t);return am(r,n,s,bh(o),r.RGBA,o.textureTypeHalfFloat)}function x0(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),sh(r,e,\"clipSpacePos\",t,3,20,0)&&sh(r,e,\"uv\",t,2,20,12)}function y0(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function b0(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function C0(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function w0(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function S0(r,e,t,o){let[n,s]=Sp(e,t),a=4,i=new Uint8Array(uD(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function I0(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(pD(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function v0(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var kp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber(\"WEBGL_VERSION\");if(e!=null?(this.gl=e,BI(t,e)):this.gl=Zr(t),e=this.gl,A().getNumber(\"WEBGL_VERSION\")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension(\"OES_vertex_array_object\");if(s==null)throw new Error(\"All WebGL1 implementations are expected to offer OES_vertex_array_object.\");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o=\"WEBGL_color_buffer_float\",n=\"EXT_color_buffer_half_float\";if(this.parallelCompilationExtension=this.gl.getExtension(\"KHR_parallel_shader_compile\"),A().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=Rl(this.gl,s),Jr(this.gl,a))this.textureHalfFloatExtension=Rl(this.gl,a);else if(A().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(o),Jr(this.gl,n))this.colorBufferHalfFloatExtension=Rl(this.gl,n);else if(A().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(o=\"EXT_color_buffer_float\",Jr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Jr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=l0(this.gl),this.indexBuffer=c0(this.gl),this.framebuffer=QI(this.gl),this.textureConfig=rm(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),m0(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),d0(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),f0(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),b0(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),y0(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),g0(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),h0(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(ah(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>S0(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return I0(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return w0(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=C0(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(A().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>v0(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=p0(t));let o=HI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),KI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&om(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),x0(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&om(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?ZI(this.gl,e,t):JI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),e0(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ga(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&om(this.gl,this.program),Dl(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,\"VAO changed between setProgram and executeProgram!\"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Rl(this.gl,A().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(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=yJ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;\"setTimeoutCustom\"in A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),nm(this.gl,e,this.framebuffer),this.debug&&Dl(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(nm(this.gl,this.outputTexture,this.framebuffer),this.debug&&Dl(this.gl)):ah(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;nm(n,e,this.framebuffer),this.debug&&Dl(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}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 yJ(r){let e=0;for(;e`${r}.${t}`)}function At(r,e){return e===1?[r]:N0(r,e)}function fA(r,e){if(r===1)return\"rc\";let t=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let t=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),\n cEdge ? 0. : getA(${t[1]}),\n rEdge ? 0. : getA(${t[2]}),\n rEdge || cEdge ? 0. : getA(${t[3]})`}};var Wl=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let o=\"\";for(let n=0;n<4;n++){let s=\"thisRC = rc;\";n%2===1&&(s+=\"thisRC.z += 1;\"),n>1&&(s+=\"thisRC.y += 1;\"),o+=`\n ${s}\n ${n>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\"}\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result[${n}] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n ${n>0?\"}\":\"\"}\n `}this.userCode=`\n ${bJ(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?Ol():Pl(e)}\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = ${this.enableShapeUniforms?\"outShape[1]\":e[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":e[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function bJ(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?fD([\"r\",\"c\",\"d\"],\"inputShape\"):Qs([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var vh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=gA(t,o),s=xA(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=hA(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].pop();return this.usedTextures[s].push(p),p}let i;return n===or.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===or.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===or.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===or.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===or.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=gA(o,n),a=xA(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=hA(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],l=u&&u.indexOf(e);if(l==null||l<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u[l]=u[u.length-1],u.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function CJ(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function hA(r,e,t,o,n){let s=wJ(e,o),a;if(n){let[p,u]=Ga(r[0],r[1]);a=p*u}else{let[p,u]=Sp(r[0],r[1]);a=p*u}let i=CJ(t,s);return a*i}function wJ(r,e){switch(r){case or.PACKED_2X2_FLOAT32:return yh(e);case or.PACKED_2X2_FLOAT16:return bh(e);case or.UNPACKED_FLOAT32:return hh(e);case or.UNPACKED_FLOAT16:return gh(e);case or.PACKED_4X1_UNSIGNED_BYTE:return xh(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function SJ(r){return A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?or.PACKED_2X2_FLOAT32:or.UNPACKED_FLOAT32:r?or.PACKED_2X2_FLOAT16:or.UNPACKED_FLOAT16}function gA(r,e){if(r===hr.UPLOAD)return or.PACKED_2X2_FLOAT32;if(r===hr.RENDER||r==null)return SJ(e);if(r===hr.DOWNLOAD||r===hr.PIXELS)return or.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function xA(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var nr=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${t}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}},Gt=\"if (isnan(x)) return x;\",yA=\"return x;\",T0=\"return abs(x);\";var bA=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",CA=Gt+`\n return (x < 0.0) ? 0.0 : x;\n`,wA=Gt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Ha=\"return x;\",SA=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var vA=\"return x;\",kA=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,NA=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,TA=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,_A=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Lr=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${t}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var kh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.length,o=At(\"rc\",t),n=Re(t),s=fA(t,o),a=o.slice(-2),i=t<=1?\"rc\":`vec2(${a.join(\",\")})`;this.userCode=`\n void main() {\n ${n} rc = getOutputCoords();\n vec4 packedInput = getA(${s});\n\n setOutput(getChannel(packedInput, ${i}));\n }\n `}};var vJ=Ut.whereImpl,kJ=1e-7,NJ=1e-4,Nh={};function TJ(r){return r in Nh||(Nh[r]={}),Nh[r]}var _J=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),EJ=600;function $J(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*EJ/1024/1024}var Ul=class r extends mo{nextDataId(){return r.nextDataId++}constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof kp)t=e;else{let o=Zr(A().getNumber(\"WEBGL_VERSION\"),e);t=new kp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Zr(A().getNumber(\"WEBGL_VERSION\"));t=new kp(o),this.binaryCache=TJ(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new vh(this.gpgpu),this.numMBBeforeWarning=$J(),this.texData=new mn(this,cr())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=Al(t),l=new sm(u,!1,a),c=this.runWebGLProgram(l,[i],o,[[n,s]]);return c.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),c.dataId}write(e,t,o){if((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().getBool(\"DEBUG\"))&&this.checkNumericalProblems(e),o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:hr.UPLOAD,refCount:1}),n}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,o,n,s){if(A().getBool(\"DEBUG\")&&this.checkNumericalProblems(t),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(e,{shape:o,dtype:n,values:t,usage:hr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Lr(i,Ha):m=new nr(i,Ha);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n===\"string\")return o;let u=this.activeTimers!=null,l;u&&(l=y.now());let c;if(n===\"complex64\"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);c=C.mergeRealAndImagArrays(m,d)}else c=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-l),this.convertAndCacheOnCPU(e,c)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Lr(n,Ha):f=new nr(n,Ha);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(A().getBool(\"DEBUG\")&&!A().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&A().getNumber(\"WEBGL_VERSION\")===2)throw new Error(\"tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.\");let u=null,l;if(a!==\"complex64\"&&A().get(\"WEBGL_BUFFER_SUPPORTED\")){l=this.decode(e);let f=this.texData.get(l.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...tm(n))}this.pendingRead.set(e,[]),a!==\"complex64\"&&await this.gpgpu.createAndWaitForFence();let c;if(a===\"complex64\"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];c=C.mergeRealAndImagArrays(h,g)}else if(u==null)c=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(l!=null&&this.disposeIntermediateTensorInfo(l),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,c),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i===\"complex64\")throw new Error(\"Does not support reading texture for complex64 dtype.\");if(a!=null){let d;p?d=new Lr(s,Ha):d=new nr(s,Ha);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let l=this.decode(e,t.customTexShape),c=cr().makeTensorFromTensorInfo(l),m=this.texData.get(l.dataId);return Object.assign({tensorRef:c},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ie(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,l)=>({name:a[l],ms:u})).map(u=>`${u.name}: ${u.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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let l=this.texData.get(e);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=_J){return A().getBool(\"WEBGL_CPU_FORWARD\")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new kh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new Ih(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[ki(e.shape),...Ni(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[ki(t),...Ni(t)],a=new Wl(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>\"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.\")}let i=Al(s),p;n?p=new ch(i):p=new lh(i);let u=!0,l=[t!=null?t:tm(i)],c=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,l,u,t);return{dtype:a,shape:s,dataId:c.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===Iu.DENSE){let x=a!=null?a:tm(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],l=t.map(x=>{if(x.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!vu(b.shape,x.shape)){let w=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),w.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let c={shape:i.shape,texData:p,isUniform:!1},m=SD(e,l,c),d=this.getAndSaveBinary(m,()=>CD(this.gpgpu,e,l,c)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||wD(this.gpgpu,d,l,c,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=A().getNumber(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().getBool(\"WEBGL_LAZILY_UNPACK\")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?kJ:NJ}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,l;u&&(l=y.now());let c=t.texShape;if(c==null&&(c=t0(o,p),t.texShape=c),s!=null){let m=Al(o),d,f=c[1],h=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ga(c[0],c[1])),p?d=new fh(m,g):d=new sm(m,g);let x=g?[h,f]:c,b=this.makeTensorInfo(x,n),w=this.texData.get(b.dataId);g?w.usage=hr.PIXELS:w.usage=hr.UPLOAD,w.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],T=this.runWebGLProgram(d,[b],n,S,!0),E=this.texData.get(T.dataId);t.texShape=E.texShape,t.isPacked=E.isPacked,t.usage=E.usage,A().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(T.dataId):(t.texture=E.texture,t.values=null,this.texData.delete(T.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-l)}else{let m=this.acquireTexture(c,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=RJ(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await IS(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(nh(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error(\"Failed to compile fragment shader.\")):new Error(\"Failed to link vertex and fragment shaders.\");return!0}getUniformLocations(){for(let e of Object.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=u0(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error(\"The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.\");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Ul.nextDataId=0;function RJ(r,e){if(e===\"float32\"||e===\"complex64\")return r;if(e===\"int32\"||e===\"bool\"){let t=e===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Ul,2);var sut={forceHalfFloat:EA};var Gl=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Br=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=C.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${e}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}};var to=`\n result.r = isNaN.r ? NAN : result.r;\n result.g = isNaN.g ? NAN : result.g;\n result.b = isNaN.b ? NAN : result.b;\n result.a = isNaN.a ? NAN : result.a;\n`;var eo=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=lt(s);let a=\"\";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=`\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n `;else if(a=`\n ${Re(s)} coords = getOutputCoords();\n `,s===1)this.enableShapeUniforms?a+=`\n result.y = (coords + 1) >= outShape ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `:a+=`\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;else{let p=At(\"coords\",s);this.enableShapeUniforms?a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= outShape[${s} - 2];\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= outShape[${s} - 1];\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `:a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= ${this.outputShape[s-2]};\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= ${this.outputShape[s-1]};\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `}this.userCode=`\n vec4 binaryOperation(vec4 a, vec4 b) {\n ${e}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${a}\n\n setOutput(result);\n }\n `}};function Ft(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var $A={kernelName:vo,backendName:\"webgl\",kernelFunc:Ft};function zr(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.texData.get(s.dataId),i=Ft({inputs:{x:o},backend:t}),p=Ft({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var RA={kernelName:ei,backendName:\"webgl\",kernelFunc:zr};var _0=\"return (a < 0.) ? b * a : a;\",E0=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function AJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new eo(E0,n.shape,a.shape):new Br(_0,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var DA={kernelName:Yn,backendName:\"webgl\",kernelFunc:AJ};var $0=\"return (a < 0.) ? b * a : a;\",R0=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function FJ(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new eo(R0,o.shape,n.shape):new Br($0,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var AA={kernelName:gs,backendName:\"webgl\",kernelFunc:FJ};var sn=\"if (isnan(x)) return x;\";function xe({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let c=i.texData.get(a.dataId),m=t(c.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,l;return u?l=new Lr(a.shape,e):l=new nr(a.shape,r),i.runWebGLProgram(l,[a],p)}}function st({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,l=i;if(o&&p.dtype===\"complex64\"){let f=l.texData.get(p.dataId),h=l.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(w=>{let[S,k]=w,T={dataId:S.dataId,dtype:S.dtype,shape:p.shape},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Br(r,p.shape,u.shape);return l.runWebGLProgram(R,[T,E],pt(S.dtype,k.dtype))}),b=zr({inputs:{real:g,imag:x},backend:l});return l.disposeIntermediateTensorInfo(g),l.disposeIntermediateTensorInfo(x),b}let c=s||pt(p.dtype,u.dtype);if((p.dtype===\"string\"||u.dtype===\"string\"||l.shouldExecuteOnCPU([p,u]))&&n!=null){let f=l.texData.get(p.dataId).values,h=l.texData.get(u.dataId).values,g=p.dtype===\"string\"?C.fromUint8ToStringArray(f):f,x=p.dtype===\"string\"?C.fromUint8ToStringArray(h):h,[b,w]=n(p.shape,u.shape,g,x,c),S=l.makeTensorInfo(w,c),k=l.texData.get(S.dataId);return k.values=b,S}let m=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,d;return m?d=new eo(e,p.shape,u.shape,t):d=new Br(r,p.shape,u.shape),l.runWebGLProgram(d,[p,u],c)}}function Ti(r,e=!1){if(r===\"linear\")return e?vA:yA;if(r===\"relu\")return e?NA:CA;if(r===\"elu\")return e?kA:bA;if(r===\"relu6\")return e?TA:wA;if(r===\"prelu\")return e?R0:$0;if(r===\"leakyrelu\")return e?E0:_0;if(r===\"sigmoid\")return e?_A:SA;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Hl=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=[\"matrixA\",\"matrixB\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=lt(this.outputShape.length);let l=n?e[1]:e[2],c=Math.ceil(l/2),m=n?\"i * 2, rc.y\":\"rc.y, i * 2\",d=s?\"rc.z, i * 2\":\"i * 2, rc.z\",f=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],h=s?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],g=\"\",x=\"\";i&&(p?g=`vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${i}\n }`:u?g=`vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${i}\n }`:g=`vec4 activation(vec4 x) {\n ${i}\n }`,x=\"result = activation(result);\");let b=a?\"result += getBiasAtOutCoords();\":\"\";a&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),u&&this.variableNames.push(\"leakyreluAlpha\");let w=\"rc.x\",S=\"rc.x\";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let l=a.texData.get(n.dataId);return l.isPacked&&!vu(n.shape,p)&&!(l.texture!==null&&vu(l.shape,p))?OA(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var MA={kernelName:Ca,backendName:\"webgl\",kernelFunc:te};var pm=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(t!=null){let c=1/t;u=`sumValue += dot(values * ${y.isInt(c)?c.toPrecision(2):c}, ones);`}let l=\"\";s%o>0&&(l=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return 0.0;\n }\n `),this.userCode=`\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${l}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${i}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${u}\n }\n\n int inIdx = inOffset + ${i};\n if (${p===1}) {\n vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n ${u}\n } else if (${p===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1), 0.0, 0.0);\n\n ${u}\n } else if (${p===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2), 0.0);\n\n ${u}\n }\n setOutput(sumValue);\n }\n `}};var Th=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=\"0.0\",p=\"\";t===\"prod\"?i=\"1.0\":t===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):t===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"sum\"?u=\"sumValue\":t===\"prod\"?u=\"prodValue\":t===\"all\"?u=\"allValue\":t===\"any\"&&(u=\"anyValue\");let l=Math.floor(o/4)*4,c=o%4,m=`\n if (${t===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${t===\"prod\"}) {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = ${p}(values, minMaxValue);\n if (${t===\"min\"} || ${t===\"max\"}) {\n minMaxValue = ${p}(values, minMaxValue);\n bvec4 isNaN = isnan(values);\n if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n minMaxValue = vec4(NAN);\n }\n }\n }\n `,d=\"vec4\";t===\"all\"?(i=\"1.0\",m=`\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n `,d=\"bvec4\"):t===\"any\"&&(i=\"0.0\",m=`\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n `,d=\"bvec4\");let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `),this.userCode=`\n const float initializationValue = ${i};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${f}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n vec4 minMaxValue = vec4(${i});\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < ${l}; i += 4) {\n int inIdx = inOffset + i;\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${l};\n if (${c===1}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${c===2}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${c===3}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function OJ(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=C.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function ro(r,e,t,o){let n=OJ(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=N0(\"rc\",this.rank),a=new Array(this.rank);for(let l=0;l`Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,c,d]:[x,d,c],T=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:e},backend:n,attrs:{shape:T}}),D=[E,R],F=Math.max(x,b),O=t?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?Ti(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>A0&&U===!1){let Y=E,J=R;t&&(Y=Ct({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=Ct({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[F,O,1]}}),D.push(ee));let oe=f===1?2:1,ue=J;ne&&(ue=te({inputs:{x:J},backend:n,attrs:{shape:[F,1,O]}}),D.push(ue));let me=um({inputs:{a:ee,b:ue},backend:n});j=Tp({inputs:{x:me},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(me)}else{let Y=pt(r.dtype,e.dtype),J=new Hl(k,T,[F,d,f],t,o,M,z,L,B),re=[E,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],\"float32\",y.createScalarValue(i,\"float32\"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function LJ(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:c,activation:l})}var VA={kernelName:qo,backendName:\"webgl\",kernelFunc:LJ};var WA=\"return abs(x);\";function BJ(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=t.texData.get(o.dataId),a=wh(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Lr(o.shape,WA):n=new nr(o.shape,WA),t.runWebGLProgram(n,[o],o.dtype)}var UA={kernelName:fn,backendName:\"webgl\",kernelFunc:BJ};var zJ=Gt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,VJ=xe({opSnippet:zJ}),GA={kernelName:hn,backendName:\"webgl\",kernelFunc:VJ};var WJ=Gt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,backendName:\"webgl\",kernelFunc:UJ};var KA=\"return a + b;\",GJ=st({opSnippet:KA,packedOpSnippet:KA,supportsComplex:!0,cpuKernelImpl:ID}),qA={kernelName:Rr,backendName:\"webgl\",kernelFunc:GJ};var $h=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n float result = ${n};\n setOutput(result);\n }\n `}};var Rh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n vec4 result = ${n};\n setOutput(result);\n }\n `}};function Dh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Ft({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=Dh({inputs:o.slice(0,p),backend:t}),l=Dh({inputs:o.slice(p),backend:t});return Dh({inputs:[u,l],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>pt(p,u)),s=o.map(p=>p.shape),i=A().getBool(\"WEBGL_PACK\")?new Rh(o[0].shape,s):new $h(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var jA={kernelName:xn,backendName:\"webgl\",kernelFunc:Dh};function HJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),u=C.getInnerMostAxes(u.length,i)),C.assertAxesAreInnerMostDims(\"all\",u,i);let[m,d]=C.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:c},backend:t,attrs:{shape:[-1,f]}}),g=ro(h,h.dtype,\"all\",t),x;if(a){let b=C.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),l!=null&&t.disposeIntermediateTensorInfo(c),x}var XA={kernelName:yn,backendName:\"webgl\",kernelFunc:HJ};function KJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),u=C.getInnerMostAxes(u.length,i)),C.assertAxesAreInnerMostDims(\"any\",u,i);let[m,d]=C.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:c},backend:t,attrs:{shape:[-1,f]}}),g=ro(h,h.dtype,\"any\",t),x;if(a){let b=C.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),l!=null&&t.disposeIntermediateTensorInfo(c),x}var YA={kernelName:bn,backendName:\"webgl\",kernelFunc:KJ};var Ah=class{constructor(e,t,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=t===\"max\"?\">\":\"<\",p=o?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < ${n}; i++) {\n int inIdx = ${p};\n float candidate = getA(batch, inIdx);\n if (candidate ${i} bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n `}};var Fh=class{constructor(e,t,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push(\"bestIndicesA\");let i=this.outputShape,p=i.length,u=Re(p),l=At(\"coords\",p),c,m;if(a===1){m=p+1;let R=Re(m);c=`\n ${R} sourceLocR = ${R}(${l.join()}, 0);\n ++${l[p-1]};\n ${R} sourceLocG = ${R}(${l.join()}, 0);\n ++${l[p-2]};\n ${R} sourceLocA = ${R}(${l.join()}, 0);\n --${l[p-1]};\n ${R} sourceLocB = ${R}(${l.join()}, 0);\n --${l[p-2]};`}else m=p,c=`\n ${u} sourceLocR = coords;\n ++${l[p-1]};\n ${u} sourceLocG = coords;\n ++${l[p-2]};\n ${u} sourceLocA = coords;\n --${l[p-1]};\n ${u} sourceLocB = coords;\n --${l[p-2]};`;let d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),f=\".\"+d[m-1],h=d.map(R=>\"int \"+R),g=At(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=At(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=At(\"sourceLocB\",m-1).concat(\"inIdx.b\"),w=At(\"sourceLocA\",m-1).concat(\"inIdx.a\"),S=o===\"max\"?\"greaterThan\":\"lessThan\",k=n?\"\":`\n inIdx = round(vec4(getBestIndicesAChannel(${g.join()}),\n getBestIndicesAChannel(${x.join()}),\n getBestIndicesAChannel(${b.join()}),\n getBestIndicesAChannel(${w.join()})));`,T=`vec4(\n getAChannel(${g.join()}),\n hasNextCol ? getAChannel(${x.join()}) : 0.,\n hasNextRow ? getAChannel(${b.join()}) : 0.,\n hasNextRow && hasNextCol ? getAChannel(${w.join()}) : 0.)`,E=n?\"\":`\n float getBestIndicesAChannel(${h.join()}) {\n return getChannel(getBestIndicesA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }`;this.userCode=`\n float getAChannel(${h.join()}) {\n return getChannel(getA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }\n ${E}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${l[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${l[p-2]} < ${i[p-2]-1};\n ${c}\n ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f},\n sourceLocB${f}, sourceLocA${f}) * ${t};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${T};\n\n for (int i = 0; i < ${t}; i++) {\n inIdx = srcIdx;\n ${k}\n vec4 candidate = ${T};\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4(${S}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n `}};function QA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=C.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new Ah(i,t,o==null),u=[e];o!=null&&u.push(o);let l=r.runWebGLProgram(p,u,\"int32\");if(l.shape[1]===1)return l;let c=QA(r,e,t,l);return r.disposeIntermediateTensorInfo(l),c}function ZA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=C.computeOptimalWindowSize(s),i=new Fh(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===e.shape.length){let l=ZA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),l}return u}function Ph(r,e,t,o){let n=[t];if(C.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().getBool(\"WEBGL_PACK_REDUCE\")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,l]=C.computeOutAndReduceShapes(p.shape,n),c=y.sizeFromShape(l),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,c]}});s.push(m);let d=QA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return ZA(r,e,o)}function qJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let l=Ph(t,p,a[0],\"max\");return u.forEach(c=>t.disposeIntermediateTensorInfo(c)),l}var JA={kernelName:na,backendName:\"webgl\",kernelFunc:qJ};function jJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let l=Ph(t,p,a[0],\"min\");return u.forEach(c=>t.disposeIntermediateTensorInfo(c)),l}var eF={kernelName:sa,backendName:\"webgl\",kernelFunc:jJ};var XJ=Gt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,YJ=xe({opSnippet:XJ}),tF={kernelName:Cn,backendName:\"webgl\",kernelFunc:YJ};var QJ=Gt+\"return log(x + sqrt(x * x + 1.0));\",ZJ=xe({opSnippet:QJ}),rF={kernelName:wn,backendName:\"webgl\",kernelFunc:ZJ};var JJ=Gt+`\n return atan(x);\n`,eee=xe({opSnippet:JJ}),oF={kernelName:Sn,backendName:\"webgl\",kernelFunc:eee};var tee=Gl+`\n return atan(a, b);\n`,ree=`\n vec4 result = atan(a, b);\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n `+to+`\n return result;\n`,oee=st({opSnippet:tee,packedOpSnippet:ree}),nF={kernelName:vn,backendName:\"webgl\",kernelFunc:oee};var nee=Gt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelName:In,backendName:\"webgl\",kernelFunc:see};var Zs=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,l=e.dilationWidth,c=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t===\"avg\",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b=\"0.0\";if(h||(b=\"-1.0 / 1e-20\"),o){let R=\">=\";this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < ${c};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${m};\n wC += ${l}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${R} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?g:x:`wR * ${m} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let w=\"max\",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");let k=Math.floor(a/4)*4,T=a%4,E=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${w}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n const float initializationValue = ${b};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4(${b});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < ${c};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${l};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${l}, d),\n getValue(batch, xR, xC + 2 * ${l}, d),\n getValue(batch, xR, xC + 3 * ${l}, d)\n );\n\n ${E}\n }\n\n int xC = xCCorner + ${k};\n if (${T===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${T===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${l}, d),\n initializationValue,\n initializationValue\n );\n\n ${E}\n } else if (${T===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${l}, d),\n getValue(batch, xR, xC + 2 * ${l}, d),\n initializationValue\n );\n\n ${E}\n }\n }\n setOutput(${S});\n }\n `}},Nu=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,l=e.dilationDepth,c=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let w=t===\"avg\",S=\"0.0\";if(w||(S=\"-1.0 / 1e-20\"),o){let F=\">=\";this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < ${d};\n wD += ${l}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${c}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${h};\n wC += ${m}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${F} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",T=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(T=\"avgValue / max(count, 1.0)\");let E=Math.floor(a/4)*4,R=a%4,D=`\n if (${w}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${k}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n const float initializationValue = ${S};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4(${S});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < ${d};\n wD += ${l}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${c}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${E}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${D}\n }\n\n int xC = xCCorner + ${E};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${D}\n } else if (${R===2}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n initializationValue,\n initializationValue\n );\n\n ${D}\n } else if (${R===3}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n initializationValue\n );\n\n ${D}\n }\n }\n }\n setOutput(${T});\n }\n `}};function aee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Ys(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p);if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))return Ft({inputs:{x:n},backend:t});let c=new Zs(l,\"avg\",!1);return t.runWebGLProgram(c,[n],\"float32\")}var aF={kernelName:kn,backendName:\"webgl\",kernelFunc:aee};function iee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,p,u),m=new Nu(c,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var iF={kernelName:aa,backendName:\"webgl\",kernelFunc:iee};var Oh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=p-1-e.padInfo.top,c=u-1-e.padInfo.left,m=1/(t*o);this.userCode=`\n const ivec2 pads = ivec2(${l}, ${c});\n const float avgMultiplier = float(${m});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${p};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${u};\n wC+= ${i}) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n `}},Mh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,l=e.dilationWidth,c=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=c-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=`\n const ivec3 pads = ivec3(${f}, ${h}, ${g});\n const float avgMultiplier = float(${x});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${c};\n wD += ${p}) {\n float dyD = float(dyDCorner + wD) / ${s}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${m};\n wR += ${u}) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${d};\n wC += ${l}) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function uee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new Mh(m);return t.runWebGLProgram(d,[n],a.dtype)}var uF={kernelName:Vi,backendName:\"webgl\",kernelFunc:uee};function pee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Ys([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=new Oh(l);return t.runWebGLProgram(c,[n],a.dtype)}var pF={kernelName:zi,backendName:\"webgl\",kernelFunc:pee};function lee(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var lF={kernelName:Nn,backendName:\"webgl\",kernelFunc:lee};var Lh=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(C.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = ${i};\n float scale = ${p};\n float inv = scale * inversesqrt(variance + float(${a}));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n `}};var Bh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(C.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n vec4 offset = ${i};\n vec4 scale = ${p};\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4(${a}));\n\n setOutput((x - mean) * inv + offset);\n }\n `}};var cee=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||n.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(i==null||n.shape.length===i.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],l=null;a!=null&&(l=a.shape,u.push(a));let c=null;i!=null&&(c=i.shape,u.push(i));let m=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new Bh(o.shape,n.shape,s.shape,l,c,p):new Lh(o.shape,n.shape,s.shape,l,c,p);return e.runWebGLProgram(m,u,u[0].dtype)},cF={kernelName:Hn,backendName:\"webgl\",kernelFunc:cee};var zh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=mee(this.rank),n,s=e.map((a,i)=>`sourceLoc.${F0[i]} = start[${i}] + coords.${F0[i]};`);n=`\n ${t} sourceLoc;\n ${t} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},F0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function mee(r){if(r===1)return\"sourceLoc\";if(r<=6)return F0.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var Vh=class{constructor(e){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let t=Re(this.rank),o=At(\"coords\",this.rank),n=At(\"sourceLoc\",this.rank),s=this.rank===1?\"sourceLoc\":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=`\n result.x = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.y = ${a};\n --${n[this.rank-1]};\n }\n `,p=this.rank===1?\"\":`\n --${o[this.rank-1]};\n if (++${o[this.rank-2]} < ${e[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${t}(${e.map((l,c)=>`start[${c}]`).join()});`:e.map((l,c)=>`${n[c]} = ${o[c]} + start[${c}];`).join(`\n`);this.userCode=`\n void main() {\n ${t} coords = getOutputCoords();\n ${t} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function dee(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=nt.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function Js(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=nt.parseSliceParams(n,s,a);if(nt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let c=t.texData.get(n.dataId),m=tA(c.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),l=nt.isSliceContinous(n.shape,i,p);if(u||!l){let c=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Vh(p):new zh(p),m=[i];return t.runWebGLProgram(c,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),dee(n,i,p,t)}var mF={kernelName:_s,backendName:\"webgl\",kernelFunc:Js};var fee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((b,w)=>b*w),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Ct({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:l}}),x=Js({inputs:{x:g},backend:t,attrs:{begin:c,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},dF={kernelName:ia,backendName:\"webgl\",kernelFunc:fee};function hee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=Ch(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var fF={kernelName:Tn,backendName:\"webgl\",kernelFunc:hee};var gee=`\n int r = int(a.r) & int(b.r);\n int g = int(a.g) & int(b.g);\n int rb = int(a.b) & int(b.b);\n int ra = int(a.a) & int(b.a);\n return vec4(r, g, rb, ra);\n`,xee=`\n return float(int(a.r) & int(b.r));\n`;function yee(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[l,c]=kD(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(c,o.dtype),d=t.texData.get(m.dataId);return d.values=l,m}let i;return s?i=new eo(gee,o.shape,n.shape,!1):i=new Br(xee,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var hF={kernelName:_n,backendName:\"webgl\",kernelFunc:yee};function bee(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var gF={kernelName:ua,backendName:\"webgl\",kernelFunc:bee};var Cee=\"return float(a != b);\",P0=st({opSnippet:Cee,cpuKernelImpl:KD,dtype:\"bool\"}),xF={kernelName:Ro,backendName:\"webgl\",kernelFunc:P0};function _i(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:t})}var yF={kernelName:si,backendName:\"webgl\",kernelFunc:_i};var wee=\"return float(int(x));\";function bF(r,e){let t=new nr(r.shape,wee),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function O0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Ft({inputs:{x:n},backend:t});let a=Yr(n.shape),i=O0({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=zr({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=_i({inputs:{input:n},backend:t}),i=O0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=ND(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return bF(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=P0({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var CF={kernelName:ho,backendName:\"webgl\",kernelFunc:O0};var wF=\"return ceil(x);\",See=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:TD}),SF={kernelName:go,backendName:\"webgl\",kernelFunc:See};var Wh=class{constructor(e){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n `}};var Uh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n `}};function Iee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool(\"WEBGL_PACK_CLIP\")?i=new Uh(n.shape):i=new Wh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var IF={kernelName:Go,backendName:\"webgl\",kernelFunc:Iee};var Gh=class{constructor(e){this.variableNames=[\"real\",\"imag\"],this.outputShape=e,this.userCode=`\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n `}};function vF(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function vee(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Gh(o.shape),a=[vF(o,n.complexTensorInfos.real),vF(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var kF={kernelName:Wi,backendName:\"webgl\",kernelFunc:vee};var Hh=class{constructor(e){this.outputShape=[],this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) {\n return getChannel(\n getT${h}(${Kh(i,u,g)}),\n vec2(${Kh(l,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${Kh(i,u,f)}),\n vec2(${Kh(l,u,f)}));`,this.userCode=`\n float getValue(${i.map(h=>\"int \"+h)}) {\n ${m}\n }\n\n void main() {\n ${s} coords = getOutputCoords();\n vec4 result = vec4(getValue(${a}), 0., 0., 0.);\n\n ${a[n-1]} = ${a[n-1]} + 1;\n if (${a[n-1]} < ${o[n-1]}) {\n result.g = getValue(${a});\n }\n\n ${a[n-2]} = ${a[n-2]} + 1;\n if (${a[n-2]} < ${o[n-2]}) {\n result.a = getValue(${a});\n }\n\n ${a[n-1]} = ${a[n-1]} - 1;\n if (${a[n-2]} < ${o[n-2]} &&\n ${a[n-1]} < ${o[n-1]}) {\n result.b = getValue(${a});\n }\n setOutput(result);\n }\n `}};function Kh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ep(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.imag},backend:t})}var NF={kernelName:Qi,backendName:\"webgl\",kernelFunc:Ep};function Kl(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>_i({inputs:{input:b},backend:t})),f=r.map(b=>Ep({inputs:{input:b},backend:t})),h=Kl(d,e,t),g=Kl(f,e,t),x=zr({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(S=>{let T=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:T}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=C.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=_D(f,h,o,g),b=C.computeOutShape(r.map(S=>S.shape),e),w=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),w}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&s[0].shape.length>1;if(s.length===1){let d=a?new nr(r[0].shape,Ha):new Lr(r[0].shape,Ha);return t.runWebGLProgram(d,r,o)}let i=A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=kee(s,e,t),l=new Hh(p.map(d=>d.shape)),c=t.runWebGLProgram(l,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:c},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(c),m}function kee(r,e,t){let o=C.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function M0(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:t}):Kl(p,s,t)}var TF={kernelName:pa,backendName:\"webgl\",kernelFunc:M0};var ql=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,l=e.dilationHeight,c=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat===\"channelsLast\",x=g?1:2,b=g?2:3,w=g?3:1,S=\"\",k=\"\";o&&(n?S=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?S=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:S=`\n float activation(float x) {\n ${o}\n }\n `,k=\"result = activation(result);\");let T=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${S}\n\n const ivec2 strides = ivec2(${p}, ${u});\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[${w}];\n\n ivec2 xRCCorner =\n ivec2(coords[${x}], coords[${b}]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${l};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${c};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if (${g}) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if (${h===1}) {\n\n if (${g}) {\n dotProd +=\n getX(batch, xR, xC, ${f}) *\n getW(wR, wC, ${f}, d2);\n } else {\n dotProd +=\n getX(batch, ${f}, xR, xC) *\n getW(wR, wC, ${f}, d2);\n }\n\n } else if (${h===2}) {\n vec2 wValues = vec2(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2)\n );\n\n if (${g}) {\n vec2 xValues = vec2(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if (${h===3}) {\n vec3 wValues = vec3(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2),\n getW(wR, wC, ${f} + 2, d2)\n );\n\n if (${g}) {\n vec3 xValues = vec3(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1),\n getX(batch, xR, xC, ${f} + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC),\n getX(batch, ${f} + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n ${T}\n ${k}\n setOutput(result);\n }\n `}},jh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,l=e.dilationWidth,c=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${t}, ${o}, ${n});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < ${c}; wF++) {\n int xF = xFCorner + wF * ${p};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${u};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${l};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (${h===1}) {\n dotProd +=\n getX(batch, xF, xR, xC, ${f}) *\n getW(wF, wR, wC, ${f}, d2);\n } else if (${h===2}) {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (${h===3}) {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1),\n getX(batch, xF, xR, xC, ${f} + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2),\n getW(wF, wR, wC, ${f} + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};var jl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,l=e.filterWidth,c=l,m=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) {\n `;for(let g=0;g<(c+1)/2;g++){let x=g*2;if(m+=`\n xC = xCCorner + ${x*p};\n `,i===1){if(x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n `,p===1&&x>0?m+=`\n xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy);\n `:m+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${x} = vec4(previous.zw, xTexelC${x}.xy);\n } else {\n xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy);\n }\n `):m+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xC${x} = xTexelC${x};\n `,x+1= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n `,p>1?m+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy);\n } else {\n xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy);\n }\n `:m+=`\n xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy);\n `):b===1?m+=`\n xC${x+1} = xTexelC${x};\n `:m+=`\n xCOffset = xC + ${b};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x+1} = xTexelC${x+1};\n `}}else x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw);\n `,x+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy);\n `)):(m+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(\n xTexelC${x}.xy, xTexelC${x+1}.xy);\n `,x+1= 0) {\n // Use custom imod instead mod. On Intel GPU, mod may generate\n // unexpected value.\n // https://github.com/tensorflow/tfjs/issues/5447\n offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];\n d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n inChannels);\n\n if(d1 < inputShape[${i}] && d1 >= 0) {\n\n ch = imod(pos, inChannels);\n\n if (${s}) {\n innerDims = vec2(d1, ch);\n result[${l*2+c}] = getChannel(\n getA(rc.x, d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${l*2+c}] = getChannel(\n getA(rc.x, ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;this.userCode=`\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n ${u}\n\n ${n.output} = result;\n }\n `}};function Yh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Qh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),l=t.inChannels,c=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat===\"channelsLast\",f=!1,h=!1,g,x=[];if(s!=null){let S=Yh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Yh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((c===1||m===1)&&l>A0)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},T=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(vu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push(E);let R=_p({a:k,b:E,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=T,D.shape=t.outShape,g=Ft({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),T=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),E=_p({a:d?k:T,b:d?T:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(T),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Zh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:l,outWidth:c,outHeight:m,dataFormat:d}=t,f=d===\"channelsLast\",h=p*u*l,g=m*c,x=[t.batchSize,h,g],b=!0,w=!1,S=[];if(s!=null){let q=Yh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Yh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let T=new Xh(x,t),E=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(T,[r],\"float32\",E),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let F=n!=null,O=s!=null,M=i===\"leakyrelu\",L=i?Ti(i,!0):null,B=new Hl(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,w,F,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],\"float32\",y.createScalarValue(a,\"float32\"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,\"float32\"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function Nee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type===\"SAME\"||m.padInfo.type===\"VALID\"))d=Qh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&c===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new jl(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],\"float32\",g)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))d=Zh({x:n,filter:s,convInfo:m,backend:t});else{let h=new ql(m);d=t.runWebGLProgram(h,[n,s],\"float32\")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var _F={kernelName:En,backendName:\"webgl\",kernelFunc:Nee};var Jh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat===\"channelsLast\";this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n ${a?`float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);`:`float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);`}\n }\n }\n }\n setOutput(dotProd);\n }\n `}},eg=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat===\"channelsLast\",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,l=a?2:3,c=a?3:1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[${c}];\n\n ivec2 dyCorner = ivec2(coords[${u}], coords[${l}]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n if (${a}) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},tg=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yF = 0; yF < ${e.outDepth}; yF++) {\n int xF = wF + yF * ${t} - ${s};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}},rg=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,l=n-1-e.padInfo.left;this.userCode=`\n const ivec3 pads = ivec3(${p}, ${u}, ${l});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < ${t}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${t} - 1 - wF;\n\n for (int wR = 0; wR < ${o}; wR++) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${o} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function Tee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,l,a,1,i,u,!1,c),d=new Jh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var EF={kernelName:Ui,backendName:\"webgl\",kernelFunc:Tee};var og=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=e.inShape,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=`\n const ivec2 pads = ivec2(${n}, ${s});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n vec4 result = vec4(0.);\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n int wCPerm = ${o} - 1 - wC;\n\n float dyC = float(dyCCorner + wC) / strides[1];\n bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0)\n && (fract(dyC) == 0.0);\n int idyC = int(dyC);\n\n float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n dySample : getDy(batch, idyR, idyC2, d2);\n\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n\n dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample2.xy : dySample2.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC2, d2);\n vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n }\n }\n }\n setOutput(result);\n }\n `}};function _ee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(u),m=C.computeConv2DInfo(a,s.shape,i,1,p,l,!1,c);if(A().getBool(\"WEBGL_PACK_CONV2DTRANSPOSE\")&&c===\"channelsLast\"){let d=[[m.strideHeight,m.strideWidth]],f=new og(m);return t.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new eg(m);return t.runWebGLProgram(d,[n,s],\"float32\")}}var $F={kernelName:$n,backendName:\"webgl\",kernelFunc:_ee};function Eee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeConv3DInfo(n.shape,s.shape,a,p,i),l=new jh(u);return t.runWebGLProgram(l,[n,s],\"float32\")}var RF={kernelName:Rn,backendName:\"webgl\",kernelFunc:Eee};function $ee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=C.computeConv3DInfo(n.shape,p,a,1,i),l=new tg(u);return t.runWebGLProgram(l,[n,s],\"float32\")}var DF={kernelName:ti,backendName:\"webgl\",kernelFunc:$ee};function Ree(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=C.computeConv3DInfo(p,s.shape,i,1,a),l=new rg(u);return t.runWebGLProgram(l,[n,s],\"float32\")}var AF={kernelName:Dn,backendName:\"webgl\",kernelFunc:Ree};var Dee=sn+`\n return cos(x);\n`,Aee=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${to}\n return result;\n`,Fee=xe({opSnippet:Dee,packedOpSnippet:Aee}),FF={kernelName:An,backendName:\"webgl\",kernelFunc:Fee};var Pee=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,Oee=xe({opSnippet:Pee}),PF={kernelName:Fn,backendName:\"webgl\",kernelFunc:Oee};var ng=class{constructor(e,t,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=e,[l]=t,[c,m]=o;this.outputShape=[l,c,m,u];let d=n===\"bilinear\"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=c>1?[`${(i-1)/(c-1)}`,\"(y2-y1) * height_ratio\",`y1*${f} + float(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${f}`],[w,S,k]=m>1?[`${(p-1)/(m-1)}`,\"(x2-x1) * width_ratio\",`x1*${h} + float(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${h}`];this.userCode=`\n const float height_ratio = float(${g});\n const float width_ratio = float(${w});\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= ${a}) {\n return;\n }\n\n float height_scale = ${x};\n float width_scale = ${S};\n\n float in_y = ${b};\n if( in_y < 0.0 || in_y > ${f} ) {\n setOutput(float(${s}));\n return;\n }\n float in_x = ${k};\n if( in_x < 0.0 || in_x > ${h} ) {\n setOutput(float(${s}));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if(${d} == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n `}};var Mee=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,l=new ng(n.shape,s.shape,i,p,u);return t.runWebGLProgram(l,[n,s,a],\"float32\")},OF={kernelName:Mn,backendName:\"webgl\",kernelFunc:Mee};var $p;(function(r){r.Prod=\"*\",r.Sum=\"+\"})($p||($p={}));var lm=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===$p.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${MF(s,\"coords\",this.op)})`,p=this.outputShape[this.outputShape.length-1],u=\"\",l=\"\";o?(u=n?`end != ${p-1}`:\"end != 0\",l=n?\"end + 1\":\"end - 1\"):(u=n?`end + pow2 < ${p}`:\"end >= pow2\",l=n?\"end + pow2\":\"end - pow2\"),this.userCode=`\n void main() {\n ${Re(s)} coords = getOutputCoords();\n int end = ${LF(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${l};\n ${LF(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${MF(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function MF(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function LF(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function sg(r,e,t,o,n,s){let a=e.shape.length,i=C.getAxesPermutation([o],a),p=e;i!=null&&(p=Ct({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=C.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let l=p.shape[u],c=Ft({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(l))-1;m++){let d=new lm(r,p.shape,!1,s),f=[[m]],h=c;c=t.runWebGLProgram(d,[c],c.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new lm(r,p.shape,n,s),d=c;c=t.runWebGLProgram(m,[c],c.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=C.getUndoAxesPermutation(i),d=Ct({inputs:{x:c},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(p),d}return c}function Lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return sg($p.Prod,n,t,s,a,i)}var BF={kernelName:Pn,backendName:\"webgl\",kernelFunc:Lee};function Bee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return sg($p.Sum,n,t,s,a,i)}var zF={kernelName:On,backendName:\"webgl\",kernelFunc:Bee};function zee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),l=Ch(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,l)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),l=vD(p,u,a,i);return t.makeTensorInfo(l.shape,s.dtype,l.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var VF={kernelName:la,backendName:\"webgl\",kernelFunc:zee};var ag=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = ${this.getHeightCoordString()};\n int w = ${this.getWidthCoordString()};\n int d = ${this.getDepthCoordString()};\n\n int in_h = h / ${t};\n int offset_h = imod(h, ${t});\n int in_w = w / ${t};\n int offset_w = imod(w, ${t});\n int offset_d = (offset_h * ${t} + offset_w) *\n ${this.getOutputDepthSize()};\n int in_d = d + offset_d;\n\n float result = ${this.getInputSamplingString()};\n setOutput(result);\n }\n `}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 Vee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],l=a===\"NHWC\"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a===\"NHWC\"?[i,c,m,d]:[i,d,c,m],h=new ag(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var WF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Vee};var Xl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u=\"\",l=\"\";o&&(n?u=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?u=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:u=`\n float activation(float x) {\n ${o}\n }\n `,l=\"result = activation(result);\");let c=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${u}\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / ${p};\n int q = d2 - d1 * ${p};\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < ${a}; wR++) {\n int xR = xRCorner + wR * dilations[0];\n\n if (xR < 0 || xR >= inDims[0]) {\n continue;\n }\n\n for (int wC = 0; wC < ${i}; wC++) {\n int xC = xCCorner + wC * dilations[1];\n\n if (xC < 0 || xC >= inDims[1]) {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n ${c}\n ${l}\n setOutput(result);\n }\n `}};var Yl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,l=e.filterHeight,c=e.filterWidth,m=c,d=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x=0 && xR < inDims[0]) {\n `;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(d+=`\n xC = xCCorner + ${b*u};\n `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n `,u===1&&b>0?d+=`\n xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy);\n `:d+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${b} = vec4(previous.zw, xTexelC${b}.xy);\n } else {\n xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy);\n }\n `):d+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xC${b} = xTexelC${b};\n `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n `,u>1?d+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy);\n } else {\n xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy);\n }\n `:d+=`\n xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy);\n `):w===1?d+=`\n xC${b+1} = xTexelC${b};\n `:d+=`\n xCOffset = xC + ${w};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b+1} = xTexelC${b+1};\n `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);\n `,b+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy);\n `)):(d+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(\n xTexelC${b}.xy, xTexelC${b+1}.xy);\n `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${l}'`);let c=C.computeConv2DInfo(n.shape,s.shape,a,l,i,u,!0),m;A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?m=new Yl(c):m=new Xl(c);let d=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return t.runWebGLProgram(m,[n,s],\"float32\",d)}var UF={kernelName:Bn,backendName:\"webgl\",kernelFunc:Wee};var ig=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * ${a} + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n `}},ug=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=`\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < ${p}; dm++) {\n int d2 = d1 * ${p} + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function Uee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:l}=o,c=C.computeConv2DInfo(n.shape,l,a,i,p,u,!0),m=new ig(c);return t.runWebGLProgram(m,[n,s],\"float32\")}var GF={kernelName:Gi,backendName:\"webgl\",kernelFunc:Uee};function Gee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:l}=o,c=C.computeConv2DInfo(l,s.shape,a,i,p,u,!0),m=new ug(c);return t.runWebGLProgram(m,[n,s],\"float32\")}var HF={kernelName:Hi,backendName:\"webgl\",kernelFunc:Gee};var pg=class{constructor(e){this.variableNames=[\"X\"],this.outputShape=[e,e],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n `}};function Hee(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new pg(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var KF={kernelName:ca,backendName:\"webgl\",kernelFunc:Hee};var lg=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:l}=e,{top:c,left:m}=n;this.userCode=`\n const ivec2 strides = ivec2(${s}, ${a});\n const ivec2 pads = ivec2(${c}, ${m});\n const float neg_infinity = -3.4e38;\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.w;\n ivec2 outTopLeftCorner =\n coords.yz * strides - pads;\n int hBeg = outTopLeftCorner.x;\n int wBeg = outTopLeftCorner.y;\n\n float curVal = neg_infinity;\n for (int h = 0; h < ${i}; h++) {\n int hIn = hBeg + h * ${u};\n\n if (hIn >= 0 && hIn < ${t}) {\n for (int w = 0; w < ${p}; w++) {\n int wIn = wBeg + w * ${l};\n\n if (wIn >= 0 && wIn < ${o}) {\n float xVal = getX(batch, hIn, wIn, d1);\n float wVal = getW(h, w, d1);\n\n float val = xVal + wVal;\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n float result = curVal;\n setOutput(result);\n }\n `}};function Kee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),l,c=new lg(u);l=t.runWebGLProgram(c,[n,s],\"float32\");let m=te({inputs:{x:l},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(l),m}var qF={kernelName:zn,backendName:\"webgl\",kernelFunc:Kee};function qee(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=C.decodeEinsumEquation(n,s.length);C.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:l}=C.getEinsumComputePath(i,p),c=l.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Tp({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var jF={kernelName:ji,backendName:\"webgl\",kernelFunc:qee};var jee=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",Xee=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,Yee=xe({opSnippet:jee,packedOpSnippet:Xee}),XF={kernelName:Wn,backendName:\"webgl\",kernelFunc:Yee};var Qee=\"return (b >= 0.0) ? a : a * (b + 1.0);\",Zee=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,Jee=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new eo(Zee,o.shape,n.shape):new Br(Qee,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},YF={kernelName:ri,backendName:\"webgl\",kernelFunc:Jee};var ete=`\n return vec4(equal(a, b));\n`,tte=\"return float(a == b);\",rte=st({opSnippet:tte,packedOpSnippet:ete,dtype:\"bool\",cpuKernelImpl:ED}),QF={kernelName:xo,backendName:\"webgl\",kernelFunc:rte};var ote=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n float p = ${C.ERF_P};\n float a1 = ${C.ERF_A1};\n float a2 = ${C.ERF_A2};\n float a3 = ${C.ERF_A3};\n float a4 = ${C.ERF_A4};\n float a5 = ${C.ERF_A5};\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`,nte=xe({opSnippet:ote}),ZF={kernelName:Un,backendName:\"webgl\",kernelFunc:nte};var ste=sn+`\n return exp(x);\n`,ate=`\n vec4 result = exp(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,L0=xe({opSnippet:ste,packedOpSnippet:ate,cpuKernelImpl:$D,dtype:\"float32\"}),JF={kernelName:yo,backendName:\"webgl\",kernelFunc:L0};function cg(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var e3={kernelName:ma,backendName:\"webgl\",kernelFunc:cg};var t3=\"return exp(x) - 1.0;\",ite=xe({opSnippet:t3,packedOpSnippet:t3,cpuKernelImpl:RD}),r3={kernelName:bo,backendName:\"webgl\",kernelFunc:ite};var cm=class{constructor(e,t,o){this.variableNames=[\"real\",\"imag\"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.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=`\n const float exponentMultiplier = ${s};\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n ${i}\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float(${n});\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < ${n}; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / ${a};\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n `}};function mg(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new cm(\"real\",p,e),l=new cm(\"imag\",p,e),c=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,c,\"float32\"),d=t.runWebGLProgram(l,c,\"float32\"),f=zr({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function ute(r){let{inputs:e,backend:t}=r,{input:o}=e;return mg(o,!1,t)}var o3={kernelName:Xi,backendName:\"webgl\",kernelFunc:ute};var dg=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=e,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function Ei(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new dg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var n3={kernelName:da,backendName:\"webgl\",kernelFunc:Ei};var fg=class{constructor(e){this.variableNames=[\"Image\"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${t} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${t}) {\n outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n } else {\n outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var s3={kernelName:Gn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new fg(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var a3=\"return floor(x);\",pte=xe({opSnippet:a3,packedOpSnippet:a3,cpuKernelImpl:DD}),i3={kernelName:Co,backendName:\"webgl\",kernelFunc:pte};var lte=`\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n`,cte=`\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n`,mte=st({opSnippet:lte,packedOpSnippet:cte,dtype:\"int32\"}),u3={kernelName:wo,backendName:\"webgl\",kernelFunc:mte};var hg=class{constructor(e){this.variableNames=[\"A\"];let t=kt(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0);\n\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n `}};var gg=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=kt(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2(${n}.0, ${o}.0);\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n ${t.output} = result;\n }\n `}};var p3={kernelName:Lu,backendName:\"webgl\",kernelFunc:dte},Ql,B0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function dte(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],l=[u,p],c=[u,p,s];if(i||a){let h=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Ql==null||h!==B0)&&(B0=h,Ql=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:B0})),Ql.canvas.width=p,Ql.canvas.height=u,Ql.drawImage(n,0,0,p,u),n=Ql.canvas}let m=t.makeTensorInfo(l,\"int32\");t.texData.get(m.dataId).usage=hr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new gg(c):new hg(c),f=t.runWebGLProgram(d,[m],\"int32\");return t.disposeData(m.dataId),f}function fte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:l,dilations:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=C.convertConv2DDataFormat(l),g=C.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!1,h),x,b=[],w=a!=null,S=i!=null,k=d===\"leakyrelu\",T=()=>{let R=[n,s],D=(F,O)=>{if(O===\"NCHW\"&&F.shape.length===1&&F.shape[0]!==1){let M=te({inputs:{x:F},backend:t,attrs:{shape:[F.shape[0],1,1]}});return b.push(M),M}return F};if(w&&R.push(D(a,l)),S&&R.push(D(i,l)),k){let F=t.makeTensorInfo([],\"float32\",y.createScalarValue(f,\"float32\"));R.push(F),b.push(F)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type===\"SAME\"||g.padInfo.type===\"VALID\"))x=Qh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?Ti(d,!0):null,D=new jl(g,w,R,S,k),F=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=T();x=t.runWebGLProgram(D,O,\"float32\",F)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=Zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?Ti(d,!1):null,D=new ql(g,w,R,S,k),F=T();x=t.runWebGLProgram(D,F,\"float32\")}let E=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),E}var l3={kernelName:jo,backendName:\"webgl\",kernelFunc:fte};function hte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dimRoundingMode:c,activation:m,leakyreluAlpha:d}=o,f=[],h=l;h==null&&(h=[1,1]),y.assert(C.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=C.computeConv2DInfo(n.shape,s.shape,p,h,u,c,!0),x=A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Ti(m,x):null,w=[n,s],S=a!=null,k=i!=null,T=m===\"leakyrelu\";if(S&&w.push(a),k&&w.push(i),T){let F=t.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));w.push(F),f.push(F)}let E;x?E=new Yl(g,S,b,k,T):E=new Xl(g,S,b,k,T);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram(E,w,\"float32\",R);return f.forEach(F=>t.disposeIntermediateTensorInfo(F)),D}var c3={kernelName:Xo,backendName:\"webgl\",kernelFunc:hte};var xg=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=Re(o.length),a=`\n int index;`;for(let i=0;i= ${this.paramsShape[i]};\n flattenIndex += index * ${this.strides[i]};`;this.userCode=`\n void main() {\n ${s} coords = getOutputCoords();\n int flattenIndex = 0;\n bool out_of_bounds = false;\n\n ${a}\n\n setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n }\n `}};function gte(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,l,c]=C.prepareAndValidate(o,n),m=te({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=te({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/l,l]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let x=t.readSync(n.dataId),b=t.bufferSync(o),w=AD(x,b,o.dtype,u,a,l,c,o.shape,i);return t.makeTensorInfo(p,o.dtype,w.values)}let f=new xg(a,c,[u,l],o.shape),h=t.runWebGLProgram(f,[d,m],d.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:p}});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var m3={kernelName:Kn,backendName:\"webgl\",kernelFunc:gte};var yg=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=Re(this.rank),n=xte(e,2);this.userCode=`\n void main() {\n ${o} resRC = getOutputCoords();\n int index = int(getIndices(resRC.x, resRC.z));\n float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function xte(r,e){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${w-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(n,s,p,i),l=y.sizeFromShape(s.shape),c=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,l/u.batchSize]}});c.push(m),c.push(d);let f=[u.batchSize,u.outerSize,l/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=t.bufferSync(d),w=t.bufferSync(m),S=FD(w,b,f);return c.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new yg(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);c.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return c.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var d3={kernelName:fa,backendName:\"webgl\",kernelFunc:z0};var yte=\"return float(a > b);\",bte=`\n return vec4(greaterThan(a, b));\n`,Cte=st({opSnippet:yte,packedOpSnippet:bte,cpuKernelImpl:PD,dtype:\"bool\"}),f3={kernelName:So,backendName:\"webgl\",kernelFunc:Cte};var wte=\"return float(a >= b);\",Ste=`\n return vec4(greaterThanEqual(a, b));\n`,Ite=st({opSnippet:wte,packedOpSnippet:Ste,dtype:\"bool\",cpuKernelImpl:OD}),h3={kernelName:Io,backendName:\"webgl\",kernelFunc:Ite};function vte(r){let{inputs:e,backend:t}=r,{input:o}=e;return mg(o,!0,t)}var g3={kernelName:Yi,backendName:\"webgl\",kernelFunc:vte};var kte=\"return float(!isnan(x) && !isinf(x));\",Nte=xe({opSnippet:kte,dtype:\"bool\"}),x3={kernelName:qn,backendName:\"webgl\",kernelFunc:Nte};var Tte=\"return float(isinf(x));\",_te=xe({opSnippet:Tte,dtype:\"bool\"}),y3={kernelName:jn,backendName:\"webgl\",kernelFunc:_te};var Ete=\"return float(isnan(x));\",$te=xe({opSnippet:Ete,dtype:\"bool\"}),b3={kernelName:Xn,backendName:\"webgl\",kernelFunc:$te};var Rte=\"return float(a < b);\",Dte=`\n return vec4(lessThan(a, b));\n`,Ate=st({opSnippet:Rte,packedOpSnippet:Dte,cpuKernelImpl:MD,dtype:\"bool\"}),C3={kernelName:ko,backendName:\"webgl\",kernelFunc:Ate};var Fte=\"return float(a <= b);\",Pte=`\n return vec4(lessThanEqual(a, b));\n`,Ote=st({opSnippet:Fte,packedOpSnippet:Pte,cpuKernelImpl:LD,dtype:\"bool\"}),w3={kernelName:No,backendName:\"webgl\",kernelFunc:Ote};function Mte(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=BD(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var S3={kernelName:Qn,backendName:\"webgl\",kernelFunc:Mte};var Lte=sn+`\n return x < 0.0 ? 0./0. : log(x);\n`,Bte=`\n vec4 result = log(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n return result;\n`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:zD}),I3={kernelName:To,backendName:\"webgl\",kernelFunc:zte};var Vte=sn+`\n return log(1.0 + x);\n`,Wte=xe({opSnippet:Vte}),v3={kernelName:Zn,backendName:\"webgl\",kernelFunc:Wte};var Ute=\"return float(a >= 1.0 && b >= 1.0);\",Gte=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,Hte=st({opSnippet:Ute,packedOpSnippet:Gte,dtype:\"bool\"}),k3={kernelName:Jn,backendName:\"webgl\",kernelFunc:Hte};var Kte=\"return float(!(x >= 1.0));\",qte=xe({opSnippet:Kte}),N3={kernelName:es,backendName:\"webgl\",kernelFunc:qte};var jte=\"return float(a >= 1.0 || b >= 1.0);\",Xte=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Yte=st({opSnippet:jte,packedOpSnippet:Xte,dtype:\"bool\"}),T3={kernelName:ts,backendName:\"webgl\",kernelFunc:Yte};var bg=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -${a}; j <= ${a}; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= ${i}) {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * ${p};\n setOutput(val);\n }\n `}};var Cg=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < ${this.outputShape[3]};\n bool hasNextRow = c < ${this.outputShape[2]};\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - ${a};\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - ${a}; j <= ${a}; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * ${p};\n setOutput(result);\n }\n `}};var Qte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new Cg(n.shape,s,a,i,p):new bg(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},_3={kernelName:rs,backendName:\"webgl\",kernelFunc:Qte};var wg=class{constructor(e,t,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < ${this.depth}; ++d) {\n int depthBegin = int(max(0.0, float(d - ${t})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${t} + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = ${this.depth};\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float(${n}) * norm + float(${o});\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float(${n})\n * float(${s})\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * ${s});\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n `}};var Zte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o,c=new wg(n.shape,i,p,u,l);return t.runWebGLProgram(c,[n,s,a],n.dtype)},E3={kernelName:oi,backendName:\"webgl\",kernelFunc:Zte};function $3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=ro(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function V0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=l!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(c){if(m){let w=t.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p);if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))return Ft({inputs:{x:n},backend:t});let c=new Zs(l,\"max\",!1);return t.runWebGLProgram(c,[n],n.dtype)}var A3={kernelName:ns,backendName:\"webgl\",kernelFunc:rre};function ore(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new Nu(c,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var F3={kernelName:ha,backendName:\"webgl\",kernelFunc:ore};var Sg=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${s};\n wR += ${n}) {\n float dyR = float(dyRCorner + wR) / ${t}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${a}; wC++) {\n float dyC = float(dyCCorner + wC) / ${o}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * ${a} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n `}},Ig=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,l=e.effectiveFilterWidth,c=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=l-1-e.padInfo.left,f=p*u*l-1;this.userCode=`\n const ivec3 pads = ivec3(${c}, ${m}, ${d});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${p};\n wD += ${s}) {\n float dyD = float(dyDCorner + wD) / ${t}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${u};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${o}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${l};\n wC += ${i}) {\n float dyC = float(dyCCorner + wC) / ${n}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = ${f} -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * ${u} * ${l} +\n wR * ${l} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function nre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new Nu(m,\"max\",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new Ig(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var P3={kernelName:Ji,backendName:\"webgl\",kernelFunc:nre};function sre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Ys([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=!0,f=new Zs(m,\"max\",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new Sg(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var O3={kernelName:Zi,backendName:\"webgl\",kernelFunc:sre};function M3(r,e,t,o){let n=new Zs(t,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new Zs(t,\"max\",!0,!0,e);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var L3={kernelName:ga,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let l=C.computePool2DInfo(o.shape,n,s,u,a),[c,m]=M3(o,i,l,p);return[c,m]}};function B3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=ro(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var z3={kernelName:ss,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,l=C.getAxesPermutation(u,i),c=l!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(c){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;Rl[0]+e[c]+l[1]);let n=e.length,s=Re(n),a=t.map(l=>l[0]).join(\",\"),i=t.map((l,c)=>l[0]+e[c]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n),u=o===\"reflect\"?0:1;if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start) {\n outC = start * 2 - outC - ${u};\n } else if(outC >= end) {\n outC = (end - 1) * 2 - outC + ${u};\n }\n setOutput(getX(outC - start));\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n for (int i = 0; i < ${n}; i++) {\n if (outC[i] < start[i]) {\n outC[i] = start[i] * 2 - outC[i] - ${u};\n } else if(outC[i] >= end[i]) {\n outC[i] = (end[i] - 1) * 2 - outC[i] + ${u};\n }\n }\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n `}};var kg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=Re(n),a=t.map(f=>f[0]).join(\",\"),i=t.map((f,h)=>f[0]+e[h]).join(\",\"),p=At(\"rc\",n),u=At(\"source\",n),l=`${p[n-1]} < ${this.outputShape[n-1]}`,c=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=o===\"reflect\"?0:1,d=\"\";if(n===1){let f=`\n ${s} source = rc;\n if (source < start) {\n source = start * 2 - source - ${m};\n } else if (source >= end) {\n source = (end - 1) * 2 - source + ${m};\n }\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${c});\n ${p[n-1]} += 1;\n if(${l}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${c});\n }\n `}else{let f=`\n ${s} source = rc;\n ${s} lt = ${s}(lessThan(source, start));\n ${s} gte = ${s}(greaterThanEqual(source, end));\n ${s} orig = 1 - (lt + gte);\n source = orig * source +\n lt * (start * 2 - source - ${m}) +\n gte * ((end - 1) * 2 - source + ${m});\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${c});\n ${p[n-1]} += 1;\n if(${l}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${c});\n }\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {\n ${f}\n result[2] = getChannel(getX(${u.join()}), ${c});\n ${p[n-1]} += 1;\n if(${l}) {\n ${f}\n result[3] = getChannel(getX(${u.join()}), ${c});\n }\n }\n `}this.userCode=`\n const ${s} start = ${s}(${a});\n const ${s} end = ${s}(${i});\n\n void main() {\n ${s} outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n ${d}\n setOutput(result);\n }\n `}};var lre=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new kg(o.shape,n,s):new vg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},U3={kernelName:is,backendName:\"webgl\",kernelFunc:lre};var cre=`if (b == 0.0) return NAN;\n return mod(a, b);`,mre=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+to+`\n return result;\n`,dre=st({opSnippet:cre,packedOpSnippet:mre}),G3={kernelName:us,backendName:\"webgl\",kernelFunc:dre};var Ng=class{constructor(e,t,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[e,o],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < ${t-1}; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float(${t-1}));\n }\n `}};var fre=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,hre=`\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n`,W0=st({opSnippet:fre,packedOpSnippet:hre,checkOutOfBounds:!0}),H3={kernelName:Vn,backendName:\"webgl\",kernelFunc:W0};var K3=\"return a - b;\",U0=st({opSnippet:K3,packedOpSnippet:K3,supportsComplex:!0,cpuKernelImpl:lA}),q3={kernelName:Oo,backendName:\"webgl\",kernelFunc:U0};function G0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=V0({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=C.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),l=U0({inputs:{a:n,b:u},backend:t}),c=L0({inputs:{x:l},backend:t}),m=Tp({inputs:{x:c},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=W0({inputs:{a:c,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var j3={kernelName:Fs,backendName:\"webgl\",kernelFunc:G0};function gre(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:G0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],l=p.shape[1],c=new Ng(u,l,s),m=[[a]],d=t.runWebGLProgram(c,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),d}var X3={kernelName:ps,backendName:\"webgl\",kernelFunc:gre};var xre=Gt+`\n return -x;\n`,yre=`\n vec4 result = -x;\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`;function bre(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=HD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Lr(o.shape,yre):n=new nr(o.shape,xre),t.runWebGLProgram(n,[o],o.dtype)}var Y3={kernelName:ls,backendName:\"webgl\",kernelFunc:bre};var Cre=Ut.nonMaxSuppressionV3Impl;function wre(r){C.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:c}=Cre(u,l,a,i,p);return t.makeTensorInfo([c.length],\"int32\",new Int32Array(c))}var Q3={kernelName:cs,backendName:\"webgl\",kernelFunc:wre};var Sre=Ut.nonMaxSuppressionV4Impl;function Ire(r){C.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Sre(l,c,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var Z3={kernelName:ni,backendName:\"webgl\",kernelFunc:Ire};var vre=Ut.nonMaxSuppressionV5Impl;function kre(r){C.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=vre(l,c,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var J3={kernelName:ms,backendName:\"webgl\",kernelFunc:kre};var Tg=class{constructor(e,t,o,n){this.variableNames=[\"indices\"],this.outputShape=[e,t],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float(${n}), float(${o}),\n float(index == coords.y)));\n }\n `}};var Nre=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),l=new Tg(u,a,i,p),c=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(l,[c],s);t.disposeIntermediateTensorInfo(c);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},eP={kernelName:ds,backendName:\"webgl\",kernelFunc:Nre};function mm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=_i({inputs:{input:o},backend:t}),s=mm({inputs:{x:n},backend:t}),a=Ep({inputs:{input:o},backend:t}),i=mm({inputs:{x:a},backend:t}),p=zr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ei({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var tP={kernelName:_a,backendName:\"webgl\",kernelFunc:mm};function rP(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=_i({inputs:{input:o},backend:t}),s=rP({inputs:{x:n},backend:t}),a=Ep({inputs:{input:o},backend:t}),i=mm({inputs:{x:a},backend:t}),p=zr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ei({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var oP={kernelName:xa,backendName:\"webgl\",kernelFunc:rP};function Tre(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return cg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===l.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(l=>{let c=cg({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=M0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeIntermediateTensorInfo(l)),u}var nP={kernelName:ya,backendName:\"webgl\",kernelFunc:Tre};var _g=class{constructor(e,t,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((u,l)=>u[0]+e[l]+u[1]);let n=e.length,s=Re(n),a=t.map(u=>u[0]).join(\",\"),i=t.map((u,l)=>u[0]+e[l]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n);if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(value);\n } else {\n setOutput(getX(outC - start));\n }\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(value);\n } else {\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n }\n `}};var Eg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=Re(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=At(\"rc\",n),u=At(\"source\",n),l=`${p[n-1]} < ${this.outputShape[n-1]}`,c=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1;\n if(${l}) {\n `,n===1?\"\":`}\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?\"\":` ${p[n-1]} += 1;\n if(${l}) {`],d=n===1?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",f=\"\";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((l,c)=>l[0]+n.shape[c]+l[1]);return Ei({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Eg(n.shape,s,a):new _g(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},sP={kernelName:fs,backendName:\"webgl\",kernelFunc:H0};var _re=`\n if(a < 0.0 && floor(b) < b){\n return NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n return (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n`,Ere=`\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n bvec4 isNaN1 = lessThan(a, vec4(0.0));\n bvec4 isNaN2 = lessThan(floor(b), b);\n bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);\n `+to+`\n return result;\n`,$re=st({opSnippet:_re,packedOpSnippet:Ere}),aP={kernelName:hs,backendName:\"webgl\",kernelFunc:$re};function Rre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),l=u,c=C.getAxesPermutation(l,i),m=n;c!=null&&(m=Ct({inputs:{x:n},backend:t,attrs:{perm:c}}),l=C.getInnerMostAxes(l.length,i),p.push(m)),C.assertAxesAreInnerMostDims(\"prod\",l,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=qD(m.shape,m.dtype,f,l);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=C.computeOutAndReduceShapes(m.shape,l),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=mi(n.dtype),w=ro(x,b,\"prod\",t);d=te({inputs:{x:w},backend:t,attrs:{shape:f}}),p.push(x),p.push(w)}if(a){p.push(d);let f=C.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var iP={kernelName:Ho,backendName:\"webgl\",kernelFunc:Rre};function Dre(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),l=t.readSync(s.dataId),c=t.readSync(a.dataId),[m,d,f]=jD(p,u,l,s.shape,s.dtype,c,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var uP={kernelName:Qp,backendName:\"webgl\",kernelFunc:Dre};function Are(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=XD(a,o.shape,o.dtype,i,n.shape,p,s.shape),c=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([l.length],o.dtype,l);return[c,m]}var pP={kernelName:Zp,backendName:\"webgl\",kernelFunc:Are};function Fre(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),c=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=YD(u,n.shape,l,s.shape,s.dtype,c,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var lP={kernelName:Jp,backendName:\"webgl\",kernelFunc:Fre};var K0=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=QD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},cP={kernelName:ba,backendName:\"webgl\",kernelFunc:K0};var Pre=\"return 1.0 / x;\",Ore=xe({opSnippet:Pre}),mP={kernelName:xs,backendName:\"webgl\",kernelFunc:Ore};var Mre=Gt+`\n return (x < 0.0) ? 0.0 : x;\n`,Lre=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Bre=xe({opSnippet:Mre,packedOpSnippet:Lre}),dP={kernelName:ys,backendName:\"webgl\",kernelFunc:Bre};var zre=Gt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Vre=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Wre=xe({opSnippet:zre,packedOpSnippet:Vre}),fP={kernelName:ws,backendName:\"webgl\",kernelFunc:Wre};var $g=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)\":m=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${l[0]/c[0]},\n ${l[1]/c[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n `}};var Rg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)\":m=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${l[0]/c[0]},\n ${l[1]/c[1]},\n ${l[1]/c[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n `}};function Ure(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Rg(n.shape,p,u,s,a):new $g(n.shape,p,u,s,a);return t.runWebGLProgram(l,[n],\"float32\")}var hP={kernelName:Cs,backendName:\"webgl\",kernelFunc:Ure};var Dg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],l=p[0]/u[0],c=p[1]/u[1],m=1/l,d=1/c,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${l});\n const float widthScale = float(${c});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), ${n-1}.0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function Gre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new Dg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var gP={kernelName:ii,backendName:\"webgl\",kernelFunc:Gre};var Ag=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":d=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${l[0]/c[0]},\n ${l[1]/c[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}};var Fg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))\":d=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${l[0]/c[0]},\n ${l[1]/c[1]},\n ${l[1]/c[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec3 sourceNearestRC = ivec3(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n vec4 newValue = vec4(\n getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n setOutput(newValue);\n }\n `}};function Hre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Fg(n.shape,p,u,s,a):new Ag(n.shape,p,u,s,a);return t.runWebGLProgram(l,[n],n.dtype)}var xP={kernelName:bs,backendName:\"webgl\",kernelFunc:Hre};var Pg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],l=p[0]/u[0],c=p[1]/u[1],m=1/l,d=1/c,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${l});\n const float widthScale = float(${c});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float sourceFracRow =\n float(${p[0]}) *\n (float(dyR) / float(${u[0]}));\n\n float sourceFracCol =\n float(${p[1]}) *\n (float(dyC) / float(${u[1]}));\n\n int sourceNearestRow = int(min(\n float(int(${n}) - 1),\n ${o} ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int(${s}) - 1),\n ${o} ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new Pg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var yP={kernelName:ai,backendName:\"webgl\",kernelFunc:Kre};var Og=class{constructor(e,t){this.variableNames=[\"x\"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${e[0]} - coord - 1));\n }\n `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,s=e.map((i,p)=>n(p)).join(\",\"),a=Re(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var Mg=class{constructor(e,t){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=At(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(o);o===1?this.userCode=`\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX(${e[0]} - rc - 1),\n ${e[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),\n ${e[0]} - (rc + 1) - 1);\n }\n setOutput(result);\n }\n `:this.userCode=`\n void main() {\n ${i} rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = ${p(n.slice())};\n if(${s}){\n result.g = ${u(n.slice())};\n }\n if(${a}) {\n result.b = ${l(n.slice())};\n if(${s}) {\n result.a = ${c(n.slice())};\n }\n }\n setOutput(result);\n }\n `;function p(f){return m(f)}function u(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",m(f)}function l(f){return f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function c(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function m(f){let h=e.map((b,w)=>d(w,f)),g=h.join(\",\"),x=h.slice(-2).join(\",\");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function qre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Ft({inputs:{x:n},backend:t});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Mg(n.shape,i):new Og(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var bP={kernelName:Ss,backendName:\"webgl\",kernelFunc:qre};var Lg=class{constructor(e,t){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=e[1],n=e[2];this.outputShape=e;let s=\"\";typeof t==\"number\"?s=`float outputValue = ${t.toFixed(2)};`:s=`\n vec3 fill = vec3(${t.join(\",\")});\n float outputValue = fill[coords[3]];`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n int y = coords[1];\n float coordXFloat = (float(x) - params[0]) * params[3] -\n (float(y) - params[1]) * params[2];\n float coordYFloat = (float(x) - params[0]) * params[2] +\n (float(y) - params[1]) * params[3];\n int coordX = int(round(coordXFloat + params[0]));\n int coordY = int(round(coordYFloat + params[1]));\n ${s}\n if(coordX >= 0 && coordX < ${n} && coordY >= 0 && coordY < ${o}) {\n outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var CP={kernelName:Vs,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Lg(o.shape,s),[u,l]=C.getImageCenter(a,o.shape[1],o.shape[2]),c=[[u,l,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,c)}};var jre=`\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n`,Xre=xe({opSnippet:jre}),wP={kernelName:Is,backendName:\"webgl\",kernelFunc:Xre};var Yre=\"return inversesqrt(x);\",Qre=xe({opSnippet:Yre,cpuKernelImpl:ZD}),SP={kernelName:Do,backendName:\"webgl\",kernelFunc:Qre};var Tu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let u=Re(s.length),l=Re(a.length),c=\"\";o===1?c=\"i\":o===2&&(c=\"i, j\");let m=`getIndices(${c})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${l} coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < ${e}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${t}; j++) {\n int index = round(${m});\n flattenedIndex += index * ${x};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(${g}, sum, float(found)));\n }\n `}};var Bg=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),l=Re(a.length),c=\"\";o===1?c=\"i\":o===2&&(c=\"i, j\");let m=`getIndices(${c})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\",b=t>1?\"strides[j + 1]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${l} coords = getOutputCoords();\n vec4 sum = vec4(0.);\n vec4 found = vec4(0.);\n for (int i = 0; i < ${e}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${t}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${t}) {\n flattenedIndex += index.yw * ${b};\n }\n }\n if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n vec4 updVals = ${f};\n if (flattenedIndex[0] == coords[0]) {\n sum.xy += updVals.xy;\n found.xy = vec2(1.);\n } else if (flattenedIndex[0] == coords[0] + 1) {\n sum.zw += updVals.xy;\n found.zw = vec2(1.);\n }\n if (flattenedIndex[1] == coords[0]) {\n sum.xy += updVals.zw;\n found.xy = vec2(1.);\n } else if (flattenedIndex[1] == coords[0] + 1) {\n sum.zw += updVals.zw;\n found.zw = vec2(1.);\n }\n }\n }\n setOutput(mix(${g}, sum, found));\n }\n `}};function Zre(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=[c/u,u];if(c===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],\"float32\",new Float32Array([0])),g;A().getBool(\"WEBGL_PACK\")?g=new Bg(p,i,d.shape.length,f.shape.length,l,m):g=new Tu(p,i,d.shape.length,f.shape.length,l,m);let x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var IP={kernelName:vs,backendName:\"webgl\",kernelFunc:Zre};var zg=class{constructor(e,t,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[e,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=A().getNumber(\"WEBGL_VERSION\")===2?s:a,p=n===\"left\"?\"<\":\"<=\";this.userCode=`\n int findBound(int batch, float value) {\n int left = 0;\n int right = numInputs;\n int mid;\n ${i}\n mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${p} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int valueIndex = coords[1];\n\n float value = getValues(batch, valueIndex);\n\n setOutput(float(findBound(batch, value)));\n }\n `}};function Jre(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new zg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var vP={kernelName:Ns,backendName:\"webgl\",kernelFunc:Jre};var Vg=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s=\"resRC\",n=\"resRC\";else{let i=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],p=[],u=[];for(let l=0;l= 1.0) {\n setOutput(getA(${s}));\n } else {\n setOutput(getB(${s}));\n }\n }\n `}};function eoe(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new Vg(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],pt(n.dtype,s.dtype))}var kP={kernelName:wa,backendName:\"webgl\",kernelFunc:eoe};var toe=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${C.SELU_SCALEALPHA};\n float scale = ${C.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,roe=xe({opSnippet:toe}),NP={kernelName:Ts,backendName:\"webgl\",kernelFunc:roe};var ooe=sn+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,noe=`\n vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,soe=xe({opSnippet:ooe,packedOpSnippet:noe,cpuKernelImpl:eA}),TP={kernelName:Ao,backendName:\"webgl\",kernelFunc:soe};var aoe=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,ioe=xe({opSnippet:aoe}),_P={kernelName:Rs,backendName:\"webgl\",kernelFunc:ioe};var uoe=sn+`\n return sin(x);\n`,poe=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${to}\n return result;\n`,loe=xe({opSnippet:uoe,packedOpSnippet:poe}),EP={kernelName:Es,backendName:\"webgl\",kernelFunc:loe};var coe=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,moe=xe({opSnippet:coe}),$P={kernelName:$s,backendName:\"webgl\",kernelFunc:moe};var doe=`\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n`,foe=xe({opSnippet:doe}),RP={kernelName:Ds,backendName:\"webgl\",kernelFunc:foe};var hoe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},DP={kernelName:Sa,backendName:\"webgl\",kernelFunc:hoe};function goe(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:\n ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw:\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw:\n ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw:\n ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),l=t.readSync(a.dataId)[0],[c,m,d,f,h]=rA(i,o.shape,o.dtype,p,n.dtype,u,l);return[t.makeTensorInfo(m,o.dtype,c),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],\"bool\",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var AP={kernelName:eu,backendName:\"webgl\",kernelFunc:goe};function xoe(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,l,c]=oA(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(l,o.dtype,u),t.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var FP={kernelName:ui,backendName:\"webgl\",kernelFunc:xoe};function yoe(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=Sh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(l,o.dtype,u)}var PP={kernelName:va,backendName:\"webgl\",kernelFunc:yoe};function boe(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=Sh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(l,o.dtype,u)}var OP={kernelName:ka,backendName:\"webgl\",kernelFunc:boe};function Coe(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let x=t.bufferSync(n),b=t.bufferSync(s),w=y.decodeString(t.readSync(a.dataId)[0]),S=JD(x,b,i,m,l,u,p,c,w,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Tu(u,p,n.shape.length,s.shape.length,c,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var MP={kernelName:Ps,backendName:\"webgl\",kernelFunc:Coe};function woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=n.shape.length,l=new Array(u).fill(0),c=n.shape.slice();return p.map(m=>{let d=[...c];d[i]=m;let f=Js({inputs:{x:n},backend:t,attrs:{begin:l,size:d}});return l[i]+=m,f})}var LP={kernelName:Ia,backendName:\"webgl\",kernelFunc:woe};var BP=\"return sqrt(x);\",Soe=xe({opSnippet:BP,packedOpSnippet:BP,cpuKernelImpl:nA}),zP={kernelName:Fo,backendName:\"webgl\",kernelFunc:Soe};var Ioe=\"return x * x;\",voe=xe({opSnippet:Ioe}),VP={kernelName:tu,backendName:\"webgl\",kernelFunc:voe};var WP=\"return (a - b) * (a - b);\",koe=st({opSnippet:WP,packedOpSnippet:WP}),UP={kernelName:Po,backendName:\"webgl\",kernelFunc:koe};function Noe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=t.readSync(n.dataId),a=C.fromUint8ToStringArray(s),i=sA(a,\"string\",o);return t.makeTensorInfo(n.shape,\"string\",i)}var GP={kernelName:pi,backendName:\"webgl\",kernelFunc:Noe};function Toe({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Gt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new nr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var HP={kernelName:Ko,backendName:\"webgl\",kernelFunc:Toe};var Wg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(o.length),i=\"\";if(n===1)i=\"coords * strides + begin\";else{let p=0;i=o.map((u,l)=>(p++,o.length===1?`coords * strides[${l}] + begin[${l}]`:`coords[${p-1}] * strides[${l}] + begin[${l}]`)).join(\",\")}this.userCode=`\n ${s} begin = ${s}(${e});\n ${s} strides = ${s}(${t});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let E=nt.computeOutShape(b,w,S),R=Js({inputs:{x:n},backend:t,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=ie(n.shape,n.dtype,R),F=aA(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,F.values)}else{let R=new Wg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let T=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),T}var KP={kernelName:Os,backendName:\"webgl\",kernelFunc:_oe};function Eoe(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.readSync(l.dataId),d=t.readSync(c.dataId),[f,h]=iA(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(c.shape,\"int32\",h)]}var qP={kernelName:Na,backendName:\"webgl\",kernelFunc:Eoe};function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,l,c]=uA(i,p,n),m=l.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",l),t.makeTensorInfo([2],\"int32\",new Int32Array(c))]}var jP={kernelName:ru,backendName:\"webgl\",kernelFunc:$oe};function Roe(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.readSync(s.dataId),i=pA(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var XP={kernelName:ou,backendName:\"webgl\",kernelFunc:Roe};var Doe=\"return tan(x);\",Aoe=xe({opSnippet:Doe}),YP={kernelName:Ms,backendName:\"webgl\",kernelFunc:Aoe};var Foe=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,Poe=xe({opSnippet:Foe}),QP={kernelName:Ls,backendName:\"webgl\",kernelFunc:Poe};function Ooe(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(a,s,n.shape),m=[c/u,u];if(c===0)return t.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:t,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:t,attrs:{shape:m}}),g=new Tu(p,i,d.shape.length,f.shape.length,l,m,!1,!0),x=t.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(x),b}var ZP={kernelName:ks,backendName:\"webgl\",kernelFunc:Ooe};var Ug=class{constructor(e,t){this.variableNames=[\"A\"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,l=ie(n.shape,n.dtype,u),c=cA(l,s);return t.makeTensorInfo(c.shape,c.dtype,c.values)}let a=new Ug(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var JP={kernelName:Mo,backendName:\"webgl\",kernelFunc:q0};var Gg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"negativeInf\",type:\"float\"},{name:\"dir\",type:\"int\"},{name:\"inc\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced above,\n // Figure5(a) shows that element[1] is in the\n // second half of the group when group size is 2, but it is in the\n // first half of the group when group size is 4.\n\n bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n // Denotes which direction indices are in (ascending or descending).\n bool reverse = imod(elemIdx, 2 * dir) >= dir;\n bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) { // Elements in opposite order of direction\n int iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutput(float(i0));\n } else {\n setOutput(float(i1));\n }\n }\n `}},Hg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),\n // we only need to output the indices at positions |, the indices at\n // positions _ can be thrown away, see Figure5(b) After Phase 2\n // (Merge phase) in the Bitonic Top K paper referenced above.\n // For example, the paper shows we only need to output the orange bars.\n // The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back\n // to the previous sequence to find the corresponding value,\n // we need to double the index. When we double the index,\n // we basically interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n // of each 2k positions by - elemIdx % k. E.g. for output at\n // index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n float x0 = getX(batch, i0);\n float x1 = i1 < n ? getX(batch, i1) : x0;\n\n setOutput(x0 >= x1 ? float(i0) : float(i1));\n }\n `}};function Rp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function eO(r){let e=1;for(;ep){let F=t.readSync(n.dataId),[O,M]=mA(F,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,\"int32\",[])];if(l===1)return[n,Ei({attrs:{shape:u,dtype:\"int32\",value:0},backend:t})];let c=t.texData.get(n.dataId),m=c!==null&&c.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/l,g=te({inputs:{x:d},attrs:{shape:[h,l]},backend:t});m&&Rp(t,d);let x=eO(s),b=eO(l),w=null,S=()=>w===null?[g,g]:[g,w],k=(F,O,M)=>{let L=S(),B=new Gg(M),U=[[l],[w===null?1:0],[Number.NEGATIVE_INFINITY],[F],[O]],j=w;w=t.runWebGLProgram(B,L,\"int32\",U),Rp(t,j)};for(let F=1;F=1;M/=2)k(O,M,[h,b])}for(let F=b;F>x;F/=2){let O=S(),M=new Hg([h,F/2]),B=[[l],[w===null?1:0],[x]],z=w;w=t.runWebGLProgram(M,O,\"int32\",B),Rp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,w.shape)}let T=w;w=Js({inputs:{x:w},backend:t,attrs:{begin:0,size:[h,s]}}),Rp(t,T);let E=z0({inputs:{x:g,indices:w},backend:t,attrs:{axis:1,batchDims:1}});Rp(t,g);let R=u.slice(0,-1);R.push(s),T=w,w=te({inputs:{x:w},attrs:{shape:R},backend:t}),Rp(t,T);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:t}),Rp(t,D),[E,w]}var tO={kernelName:Bs,backendName:\"webgl\",kernelFunc:Loe};var Kg=class{constructor(e,t,o,n,s,a){this.variableNames=[\"Image\",\"Transforms\"],this.outputShape=a;let i=o===\"nearest\"?1:2,p;switch(n){case\"constant\":p=1;break;case\"reflect\":p=2;break;case\"wrap\":p=3;break;case\"nearest\":p=4;break;default:p=1;break}this.userCode=`\n float mapCoord(float outCoord, float len) {\n float inCoord = outCoord;\n if(${p} == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n inCoord -= sz2 * float(int(float(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord -= len * float(int(float(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n } else {\n return outCoord;\n }\n }\n\n float readWithFillValue(int batch, int coordY, int coordX,\n int channel) {\n float outputValue;\n if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = float(${s});\n }\n return outputValue;\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n float outputValue;\n int batch = coords[0];\n int x = coords[2];\n int y = coords[1];\n int channel = coords[3];\n float xf = float(x);\n float yf = float(y);\n float a1 = getTransforms(batch, 0);\n float a2 = getTransforms(batch, 1);\n float a3 = getTransforms(batch, 2);\n float b1 = getTransforms(batch, 3);\n float b2 = getTransforms(batch, 4);\n float b3 = getTransforms(batch, 5);\n float c1 = getTransforms(batch, 6);\n float c2 = getTransforms(batch, 7);\n float projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = float(${s});\n } else {\n float inX = (a1 * xf + a2 * yf + a3) / projection;\n float inY = (b1 * xf + b2 * yf + b3) / projection;\n float mapX = mapCoord(inX, float(${t}));\n float mapY = mapCoord(inY, float(${e}));\n\n if (${i} == 1) {\n int coordY = int(round(mapY));\n int coordX = int(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n float yFloor = floor(mapY);\n float xFloor = floor(mapX);\n float yCeil = yFloor + 1.0;\n float xCeil = xFloor + 1.0;\n float valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n float valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutput(outputValue);\n }\n `}};function Boe(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Kg(c,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],\"float32\")}var rO={kernelName:zs,backendName:\"webgl\",kernelFunc:Boe};function zoe(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Ys(s,\"unique\"),console.warn(\"WARNING: \",\"UI might be locked temporarily as data is being downloaded\");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=dA(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var oO={kernelName:nu,backendName:\"webgl\",kernelFunc:zoe};function Voe(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),l=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var nO={kernelName:Ta,backendName:\"webgl\",kernelFunc:Voe};var qg=class{constructor(e,t){this.variableNames=[\"x\",\"segmentIds\"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p=\"0.0\",u=\"sumValue\",l=Math.floor(o/4)*4,c=o%4,m=`\n sumValue += dot(values, segFilter);\n `,d=\"\";s%o>0&&(d=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `);let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return -1.0;\n }\n `),this.userCode=`\n const float initializationValue = ${p};\n\n float getValue(int batch, int inIdx) {\n ${d}\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n ${f}\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n ${a})) * float(${o}));\n int currentSeg = int(mod(float(outIdx), float(${a})));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${l}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${l};\n if (${c===1}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${c===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${c===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,l=C.getAxesPermutation([u],i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),p.push(c),u=C.getInnerMostAxes(1,i)[0]);let m=C.segment_util.computeOutShape(c.shape,u,a),d=y.sizeFromShape([c.shape[u]]),f=te({inputs:{x:c},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=mi(n.dtype),g=(S,k,T,E,R)=>{let D=S.shape[0],F=S.shape[1],O=C.segment_util.segOpComputeOptimalWindowSize(F,R),M={windowSize:O,inSize:F,batchSize:D,numSegments:R},L=new qg(M,k),B=t.compileAndRun(L,[S,T],E);if(p.push(B),B.shape[1]===R)return B;let z=K0({backend:t,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=q0({inputs:{x:z},backend:t,attrs:{reps:[F/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,\"unsortedSegmentSum\",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),w=b;if(l!=null){p.push(b);let S=C.getUndoAxesPermutation(l);w=Ct({inputs:{x:w},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),w}var sO={kernelName:su,backendName:\"webgl\",kernelFunc:Woe};var Uoe=[VA,UA,GA,HA,qA,jA,XA,YA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,lF,cF,dF,fF,hF,gF,CF,SF,IF,RA,kF,TF,_F,EF,$F,RF,DF,AF,FF,PF,OF,BF,zF,VF,WF,UF,GF,HF,KF,qF,jF,XF,YF,QF,ZF,JF,e3,r3,o3,n3,s3,i3,u3,p3,l3,c3,m3,d3,f3,h3,$A,g3,NF,x3,y3,b3,DA,C3,w3,S3,I3,v3,k3,N3,T3,_3,E3,R3,D3,A3,F3,P3,O3,L3,z3,V3,W3,U3,G3,X3,PA,Y3,Q3,Z3,J3,xF,eP,oP,nP,sP,aP,AA,iP,uP,pP,lP,cP,yF,H3,mP,dP,fP,MA,hP,gP,xP,yP,bP,CP,wP,SP,IP,vP,kP,NP,TP,_P,EP,$P,mF,j3,RP,DP,AP,FP,PP,OP,MP,LP,zP,VP,UP,GP,HP,KP,qP,jP,XP,q3,BA,YP,QP,ZP,JP,tO,rO,zA,oO,nO,sO,tP];for(let r of Uoe)li(r);var we;(function(r){r[r.float32=0]=\"float32\",r[r.int32=1]=\"int32\",r[r.bool=2]=\"bool\",r[r.string=3]=\"string\",r[r.complex64=4]=\"complex64\"})(we||(we={}));var _u;(function(r){r[r.linear=0]=\"linear\",r[r.relu=1]=\"relu\",r[r.relu6=2]=\"relu6\",r[r.prelu=3]=\"prelu\",r[r.leakyrelu=4]=\"leakyrelu\",r[r.sigmoid=5]=\"sigmoid\",r[r.elu=6]=\"elu\"})(_u||(_u={}));var aO;function Goe(r){aO=r.wasm.cwrap(qo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Hoe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"_FusedMatMul for non non-float32 tensors not yet supported.\");let{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=_u[l];if(g==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...w,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,T=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return aO(m,T,n.shape.length,d,E,s.shape.length,p,u,g,f,h,c||0,k),S}var iO={kernelName:qo,backendName:\"wasm\",setupFunc:Goe,kernelFunc:Hoe};function he(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,[\"number\",\"number\",\"number\"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),l=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,we[i.dtype],l),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var uO=he(fn);var pO=he(hn);var lO=he(gn);function He(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:l}=p,c=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(l.dataId).id,d=t!=null?t:u.dtype,f=C.assertAndGetBroadcastShape(u.shape,l.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(l.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return o(c,g,u.shape.length,m,x,l.shape.length,we[u.dtype],b),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var Koe=!0,cO=He(Rr,Koe);var mO;function qoe(r){mO=r.wasm.cwrap(xn,null,[\"array\",\"number\",\"number\",\"number\"])}function joe(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return mO(s,n.length,we[o.dtype],a),o}var dO={kernelName:xn,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};function Dp(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return pr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var fO={kernelName:vo,backendName:\"wasm\",kernelFunc:Dp};var hO;function Xoe(r){hO=r.wasm.cwrap(Kr,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Vo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Qoe(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var gO={kernelName:Kr,backendName:\"wasm\",kernelFunc:Vo,setupFunc:Xoe};function $r(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=C.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let l=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var OO={kernelName:Ca,backendName:\"wasm\",kernelFunc:Wt};var MO;function lne(r){MO=r.wasm.cwrap(Nn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function cne(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"BatchMatMul for non non-float32 tensors not yet supported.\");let p=n.shape.length,u=s.shape.length,l=a?n.shape[p-2]:n.shape[p-1],c=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(l===c,()=>`Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,l,m]:[g,m,l],k=i?[x,d,c]:[x,c,d],T=Wt({inputs:{x:n},backend:t,attrs:{shape:S}}),E=Wt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(T.dataId).id,D=t.dataIdMap.get(E.dataId).id,F=a?T.shape[2]:T.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=t.makeOutput([M,F,O],T.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(T.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return MO(R,z,T.shape.length,D,U,E.shape.length,a,i,B),t.disposeData(T.dataId),t.disposeData(E.dataId),L.shape=w,L}var LO={kernelName:Nn,backendName:\"wasm\",setupFunc:lne,kernelFunc:cne};function an(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=nt.parseSliceParams(e,t,o),i=nt.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),l=y.computeStrides(e.shape),c=n.dataIdMap.get(u.dataId);if(i){let f=nt.computeFlatOffset(s,l);return e.dtype===\"string\"?c.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype===\"string\"){let f=hp(p,s,a,e.shape,e.dtype);return c.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)mne(p,l[0],m,s,a);else if(d===3)dne(p,l[0],l[1],m,s,a);else if(d===4)fne(p,l[0],l[1],l[2],m,s,a);else{let f=hp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function mne(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=Wt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=Vo({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Wt({inputs:{x:f},backend:t,attrs:{shape:l}}),g=an({inputs:{x:h},backend:t,attrs:{begin:c,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var zO={kernelName:ia,backendName:\"wasm\",kernelFunc:hne};var VO;function gne(r){VO=r.wasm.cwrap(Tn,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function xne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((c,m)=>c*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function l(c){return e.dataIdMap.get(c.dataId).id}return VO(l(n),a,i,l(s),we[s.dtype],l(u)),u}var WO={kernelName:Tn,backendName:\"wasm\",setupFunc:gne,kernelFunc:xne};var yne=!0,UO=He(_n,yne);function bne(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var GO={kernelName:ua,backendName:\"wasm\",kernelFunc:bne};function Vr(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var HO={kernelName:ho,backendName:\"wasm\",kernelFunc:Vr};var KO=he(go);var qO;function Cne(r){qO=r.wasm.cwrap(Go,null,[\"number\",\"number\",\"number\",\"number\"])}function wne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return qO(i,s,a,u),p}var jO={kernelName:Go,backendName:\"wasm\",setupFunc:Cne,kernelFunc:wne};function j0(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);C.assertParamsConsistent(n,o);let s=C.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Dp({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype===\"string\"){let d=a.map(w=>{let k=[-1,y.sizeFromShape(w.shape.slice(o))];return Wt({inputs:{x:w},backend:t,attrs:{shape:k}})}),f=d.map(w=>({vals:t.readSync(w.dataId),shape:w.shape}));s=C.computeOutShape(d.map(w=>w.shape),1);let h=d[0].shape[0]===1,g=mp(f,s,e[0].dtype,h),x=C.computeOutShape(a.map(w=>w.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=C.fromStringArrayToUint8(g),d.forEach(w=>t.disposeData(w.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,l=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),c=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],p),l=n;u!==null&&(l=Vo({inputs:{x:n},attrs:{perm:u},backend:t}));let c=C.getInnerMostAxes(1,p)[0];C.assertAxesAreInnerMostDims(\"cumprod\",[c],p);let m=t.makeOutput(l.shape,l.dtype),d=l.shape[c],f=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(m.dataId).id;lM(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=C.getUndoAxesPermutation(u);g=Vo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(l.dataId),t.disposeData(m.dataId)}return g}var cM={kernelName:Pn,backendName:\"wasm\",setupFunc:Fne,kernelFunc:Pne};var mM;function One(r){mM=r.wasm.cwrap(On,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Mne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype===\"float32\"||n.dtype===\"int32\",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],p),l=n;u!==null&&(l=Vo({inputs:{x:n},attrs:{perm:u},backend:t}));let c=C.getInnerMostAxes(1,p)[0];C.assertAxesAreInnerMostDims(\"cumsum\",[c],p);let m=t.makeOutput(l.shape,l.dtype),d=l.shape[c],f=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(m.dataId).id;mM(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=C.getUndoAxesPermutation(u);g=Vo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(l.dataId),t.disposeData(m.dataId)}return g}var dM={kernelName:On,backendName:\"wasm\",setupFunc:One,kernelFunc:Mne};var fM;function Lne(r){fM=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function Bne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],l=e.makeOutput(u,s.dtype);function c(m){return e.dataIdMap.get(m.dataId).id}return fM(c(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,c(s),we[s.dtype],i,c(l)),l}var hM={kernelName:la,backendName:\"wasm\",setupFunc:Lne,kernelFunc:Bne};var gM;function zne(r){gM=r.wasm.cwrap(Ln,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Vne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],l=a===\"NHWC\"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a===\"NHWC\"?[i,c,m,d]:[i,d,c,m],h=e.makeOutput(f,\"float32\"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),w=new Uint8Array(new Int32Array(f).buffer),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return gM(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,w,S,f.length,k),h}var xM={kernelName:Ln,backendName:\"wasm\",setupFunc:zne,kernelFunc:Vne};var yM;function Wne(r){yM=r.wasm.cwrap(Bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Une(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:l,dimRoundingMode:c}=t,m=u==null?[1,1]:u,d=C.computeConv2DInfo(n.shape,s.shape,p,m,l,c,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,w=d.padInfo.left,S=d.dilationHeight,k=d.dilationWidth,T=d.strideHeight,E=d.strideWidth,R=d.inChannels,D=d.outChannels,F=d.padInfo.type===\"SAME\"?1:0;if(d.dataFormat!==\"channelsLast\")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(d.outShape,\"float32\"),M=o.dataIdMap.get(O.dataId).id;return yM(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,w,F,S,k,T,E,R,D,M),O}var bM={kernelName:Bn,backendName:\"wasm\",setupFunc:Wne,kernelFunc:Une};var CM;function Gne(r){CM=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function Hne(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return CM(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var wM={kernelName:ca,backendName:\"wasm\",setupFunc:Gne,kernelFunc:Hne};var SM;function Kne(r){SM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function qne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=C.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),l=t.makeOutput(u.outShape,n.dtype);return SM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),l}var IM={kernelName:zn,backendName:\"wasm\",setupFunc:Kne,kernelFunc:qne};var vM;function jne(r){vM=r.wasm.cwrap(qi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Xne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let l=C.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),c=t.makeOutput(s.shape,s.dtype);return vM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),c}var kM={kernelName:qi,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var NM;function Yne(r){NM=r.wasm.cwrap(Ki,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Qne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let l=C.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),c=t.makeOutput(n.shape,n.dtype);return NM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),c}var TM={kernelName:Ki,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var _M=he(Wn);var EM;function Zne(r){EM=r.wasm.cwrap(ri,null,[\"number\",\"number\",\"number\"])}function Jne(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,\"float32\"),a=i=>t.dataIdMap.get(i.dataId).id;return EM(a(n),a(o),a(s)),s}var $M={kernelName:ri,backendName:\"wasm\",setupFunc:Zne,kernelFunc:Jne};var ese=!1,RM=He(xo,ese,\"bool\");var DM=he(Un);var AM=he(yo,\"float32\");function Xg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Wt({inputs:{x:n},backend:o,attrs:{shape:i}})}var FM={kernelName:ma,backendName:\"wasm\",kernelFunc:Xg};var PM=he(bo,\"float32\");function Y0(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var OM={kernelName:da,backendName:\"wasm\",kernelFunc:Y0};var MM;function tse(r){MM=r.wasm.cwrap(Gn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function rse(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,l]=o.shape;return MM(s,i,p,u,l,a),n}var LM={kernelName:Gn,backendName:\"wasm\",kernelFunc:rse,setupFunc:tse};var BM=he(Co);var ose=!1,zM=He(wo,ose);var VM;function nse(r){VM=r.wasm.cwrap(Hn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function sse(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,l=e.dataIdMap.get(s.dataId).id,c=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return VM(l,c,m,d,f,n,g),h}var WM={kernelName:Hn,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var UM;function ase(r){UM=r.wasm.cwrap(jo,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 ise(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dataFormat:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=C.computeConv2DInfo(n.shape,s.shape,p,l,u,m),g=_u[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,w=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==w)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`);S=ee.id}let k=h.filterHeight,T=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,F=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(c!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return UM(x,j,q,Y,b,k,T,S,E,R,D,F,U,O,M,L,B,z,w,g,ne,f||0,re),J}var GM={kernelName:jo,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var HM;function use(r){HM=r.wasm.cwrap(Xo,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 pse(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dataFormat:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=C.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!0),g=_u[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,w=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==w)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`);S=ee.id}let k=h.filterHeight,T=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,F=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(c!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return HM(x,j,q,Y,b,k,T,S,E,R,D,F,U,O,M,L,B,z,w,g,ne,f||0,re),J}var KM={kernelName:Xo,backendName:\"wasm\",setupFunc:use,kernelFunc:pse};var qM;function lse(r){qM=r.wasm.cwrap(Kn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function cse(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=xf.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let l=n.shape,c=l[l.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return qM(d,we[o.dtype],h,a,c,i,g,x),u}var jM={kernelName:Kn,backendName:\"wasm\",setupFunc:lse,kernelFunc:cse};var XM;function mse(r){XM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function dse(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),l=n.shape[p];for(let D=0;D=0,()=>`GatherV2: the index value ${F} is not in [0, ${l-1}]`)}let c=C.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Wt({inputs:{x:n},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=Wt({inputs:{x:s},attrs:{shape:[c.batchSize,d/c.batchSize]},backend:e}),h=[c.batchSize,c.outerSize,d/c.batchSize,c.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,w=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,T=e.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return XM(w,we[n.dtype],E,x,k,c.batchSize,R,T),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=c.outputShape,g}var YM={kernelName:fa,backendName:\"wasm\",setupFunc:mse,kernelFunc:dse};var fse=!1,QM=He(So,fse,\"bool\");var hse=!1,ZM=He(Io,hse,\"bool\");var JM=he(qn,\"bool\");var eL=he(jn,\"bool\");var tL=he(Xn,\"bool\");var rL;function gse(r){rL=r.wasm.cwrap(Yn,null,[\"number\",\"number\",\"number\",\"number\"])}function xse(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,\"float32\");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;rL(n,we[e.dtype],t,a)}return s}var oL={kernelName:Yn,backendName:\"wasm\",setupFunc:gse,kernelFunc:xse};var yse=!1,nL=He(ko,yse,\"bool\");var bse=!1,sL=He(No,bse,\"bool\");var aL;function Cse(r){aL=r.wasm.cwrap(Qn,null,[\"number\",\"number\",\"number\",\"number\"])}function wse(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],\"float32\");return aL(t.dataIdMap.get(i.dataId).id,o,n,a),i}var iL={kernelName:Qn,backendName:\"wasm\",setupFunc:Cse,kernelFunc:wse};var uL=he(To);var pL=he(Zn);var Sse=!1,lL=He(Jn,Sse,\"bool\");var cL=he(es);var Ise=!1,mL=He(ts,Ise,\"bool\");var vse=!1,dL=He(gk,vse,\"bool\");var fL;function kse(r){fL=r.wasm.cwrap(rs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Nse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!==\"float32\")throw new Error(\"LRN error: x must have dtype float32\");let u=t.makeOutput(n.shape,n.dtype);return fL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var hL={kernelName:rs,backendName:\"wasm\",setupFunc:kse,kernelFunc:Nse};var gL;function Tse(r){gL=r.wasm.cwrap(oi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function _se(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\"||a.dtype!==\"float32\")throw new Error(\"LRNGrad error: x, y, and dy must have dtype float32\");let c=t.makeOutput(n.shape,n.dtype);return gL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,a.shape[3],i,p,u,l),c}var xL={kernelName:oi,backendName:\"wasm\",setupFunc:Tse,kernelFunc:_se};var yL;function Ese(r){yL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\",\"number\"])}function $se(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e);if(d){let w=e.dataIdMap.get(l.dataId).id;u=l,p=w}let f=u.shape.length;C.assertAxesAreInnerMostDims(\"max\",c,f);let[h,g]=C.computeOutAndReduceShapes(u.shape,c),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;yL(p,we[a.dtype],x,w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var bL={kernelName:os,backendName:\"wasm\",setupFunc:Ese,kernelFunc:$se};var Rse=!1,CL=He(_o,Rse);var wL;function Dse(r){wL=r.wasm.cwrap(ns,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Ase(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype===\"float32\",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,l=C.computePool2DInfo(n.shape,a,i,1,p,u),c=l.filterHeight,m=l.filterWidth,d=l.padInfo.top,f=l.padInfo.right,h=l.padInfo.bottom,g=l.padInfo.left,x=l.dilationHeight,b=l.dilationWidth,w=l.strideHeight,S=l.strideWidth,k=l.inChannels,T=l.outChannels;if(l.dataFormat!==\"channelsLast\")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);let E=o.makeOutput(l.outShape,\"float32\"),R=o.dataIdMap.get(E.dataId).id;return wL(s,n.shape[0],n.shape[1],n.shape[2],c,m,d,f,h,g,x,b,w,S,k,T,R),E}var SL={kernelName:ns,backendName:\"wasm\",setupFunc:Dse,kernelFunc:Ase};var IL;function Fse(r){IL=r.wasm.cwrap(\"MaxPool3D\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Pse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.makeOutput(l.outShape,n.dtype);return IL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),c}var vL={kernelName:ha,backendName:\"wasm\",setupFunc:Fse,kernelFunc:Pse};var kL;function Ose(r){kL=r.wasm.cwrap(\"MaxPool3DGrad\",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 Mse(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=t.makeOutput(s.shape,s.dtype);return kL(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),c}var NL={kernelName:Ji,backendName:\"wasm\",setupFunc:Ose,kernelFunc:Mse};var TL;function Lse(r){TL=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Bse(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,l=C.computePool2DInfo(s.shape,a,i,1,p,u),c=t.makeOutput(s.shape,s.dtype);return TL(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),c}var _L={kernelName:Zi,backendName:\"wasm\",setupFunc:Lse,kernelFunc:Bse};var EL;function zse(r){EL=r.wasm.cwrap(\"MaxPoolWithArgmax\",null,[\"number\",\"number\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Vse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,[1,1],i),c=t.makeOutput(l.outShape,n.dtype),m=t.makeOutput(l.outShape,\"int32\");return EL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),[c,m]}var $L={kernelName:ga,backendName:\"wasm\",setupFunc:zse,kernelFunc:Vse};var RL;function Wse(r){RL=r.wasm.cwrap(ss,null,[\"number, number, number\"])}function Use(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let S=e.dataIdMap.get(l.dataId).id;S!==i&&(u=l,p=S,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims(\"mean\",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=Vr({backend:e,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(b.dataId).id);let w=e.makeOutput(h,\"float32\");if(y.sizeFromShape(u.shape)!==0){let S=e.dataIdMap.get(w.dataId).id;RL(p,x,S)}if(d&&e.disposeData(l.dataId),s){let S=C.expandShapeToKeepDim(w.shape,m);w.shape=S}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),w}var DL={kernelName:ss,backendName:\"wasm\",setupFunc:Wse,kernelFunc:Use};var AL;function Gse(r){AL=r.wasm.cwrap(as,null,[\"number\",\"number\",\"number\",\"number\"])}function Hse(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e);if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w)}let f=u.shape.length;C.assertAxesAreInnerMostDims(\"min\",c,f);let[h,g]=C.computeOutAndReduceShapes(u.shape,c),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;AL(p,we[a.dtype],x,w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var FL={kernelName:as,backendName:\"wasm\",setupFunc:Gse,kernelFunc:Hse};var Kse=!1,PL=He(Eo,Kse);var Q0;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Q0||(Q0={}));var OL;function qse(r){OL=r.wasm.cwrap(is,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function jse(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(f=>f[0]),c=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(l).buffer),d=new Uint8Array(new Int32Array(c).buffer);return OL(a,u,e.shape.length,we[e.dtype],m,d,Q0[n],p),i}var ML={kernelName:is,backendName:\"wasm\",kernelFunc:jse,setupFunc:qse};var LL;function Xse(r){LL=r.wasm.cwrap(Fs,null,[\"number\",\"number\",\"number\",\"number\"])}function Z0(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||LL(n,a,i,p),s}var BL={kernelName:Fs,backendName:\"wasm\",setupFunc:Xse,kernelFunc:Z0};var zL;function Yse(r){zL=r.wasm.cwrap(ps,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Qse(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!==\"float32\")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Z0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,l]=p.shape,c=t.makeOutput([u,s],\"int32\");return zL(t.dataIdMap.get(p.dataId).id,u,l,s,a,t.dataIdMap.get(c.dataId).id),i||t.disposeData(p.dataId),c}var VL={kernelName:ps,backendName:\"wasm\",setupFunc:Yse,kernelFunc:Qse};var WL=He(us,!0);var Zse=!0,UL=He($o,Zse);var GL=he(ls);function Zl(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var HL;function Jse(r){HL=r.wasm.cwrap(cs,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function eae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,l=e.dataIdMap.get(p.dataId).id,c=HL(u,l,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Zl(e,c);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],\"int32\",m)}var KL={kernelName:cs,backendName:\"wasm\",setupFunc:Jse,kernelFunc:eae};var qL;function tae(r){qL=r.wasm.cwrap(ni,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function rae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,l=e.dataIdMap.get(p.dataId).id,c=e.dataIdMap.get(u.dataId).id,m=qL(l,c,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Zl(e,m);e.wasm._free(h);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([],\"int32\",g);return[x,b]}var jL={kernelName:ni,backendName:\"wasm\",setupFunc:tae,kernelFunc:rae};var XL;function oae(r){XL=r.wasm.cwrap(ms,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function nae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,l=e.dataIdMap.get(p.dataId).id,c=e.dataIdMap.get(u.dataId).id,m=XL(l,c,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Zl(e,m);e.wasm._free(g);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([f],\"float32\",h);return[x,b]}var YL={kernelName:ms,backendName:\"wasm\",setupFunc:oae,kernelFunc:nae};var sae=!1,QL=He(Ro,sae,\"bool\");var ZL;function aae(r){ZL=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function iae(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),l=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return ZL(m,a,i,p,l),u}var JL={kernelName:ds,backendName:\"wasm\",setupFunc:aae,kernelFunc:iae};function uae(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var eB={kernelName:xa,backendName:\"wasm\",kernelFunc:uae};function pae(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Xg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===l.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(l=>{let c=Xg({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=j0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeData(l.dataId)),u}var tB={kernelName:ya,backendName:\"wasm\",kernelFunc:pae};var rB;function lae(r){rB=r.wasm.cwrap(fs,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function cae(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Y0({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(m).buffer);return rB(a,l,e.shape.length,we[e.dtype],d,f,n,u),i}var Yg={kernelName:fs,backendName:\"wasm\",kernelFunc:cae,setupFunc:lae};var mae=!1,oB=He(hs,mae);var nB;function dae(r){nB=r.wasm.cwrap(gs,null,[\"number\",\"number\",\"number\"])}function fae(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=Vr({backend:t,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=t.dataIdMap.get(u.dataId).id);let l=t.makeOutput(o.shape,\"float32\"),c=t.dataIdMap.get(l.dataId).id;return nB(i,a,c),p.dtype!==\"float32\"&&t.disposeData(u.dataId),l}var sB={kernelName:gs,backendName:\"wasm\",setupFunc:dae,kernelFunc:fae};var aB;function hae(r){aB=r.wasm.cwrap(Ho,null,[\"number\",\"number\",\"number\",\"number\"])}function gae(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims(\"prod\",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;aB(p,x,we[b.dtype],w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var iB={kernelName:Ho,backendName:\"wasm\",setupFunc:hae,kernelFunc:gae};var xae=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=fp(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},uB={kernelName:ba,backendName:\"wasm\",kernelFunc:xae};var yae=!0,pB=He(Vn,yae);var lB=he(xs);var cB=he(ys);var mB=he(ws);var dB;function bae(r){dB=r.wasm.cwrap(Cs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Cae(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[l,c,m,d]=n.shape,f=[l,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=Vr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return b;let w=e.dataIdMap.get(b.dataId).id;return dB(x,l,c,m,d,p,u,s?1:0,a?1:0,w),g!=null&&e.disposeData(g.dataId),b}var fB={kernelName:Cs,backendName:\"wasm\",setupFunc:bae,kernelFunc:Cae};var hB;function wae(r){hB=r.wasm.cwrap(ii,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Sae(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Vr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),hB(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var gB={kernelName:ii,backendName:\"wasm\",setupFunc:wae,kernelFunc:Sae};var xB;function Iae(r){xB=r.wasm.cwrap(bs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function vae(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[l,c,m,d]=n.shape,f=[l,p,u,d],h=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!==\"float32\"&&(x=Vr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,w=e.dataIdMap.get(h.dataId).id;return xB(b,l,c,m,d,p,u,s?1:0,a?1:0,w),x!=null&&e.disposeData(x.dataId),h}var yB={kernelName:bs,backendName:\"wasm\",setupFunc:Iae,kernelFunc:vae};var bB;function kae(r){bB=r.wasm.cwrap(ai,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function Nae(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Vr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),bB(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var CB={kernelName:ai,backendName:\"wasm\",setupFunc:kae,kernelFunc:Nae};var wB;function Tae(r){wB=r.wasm.cwrap(Ss,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function _ae(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Dp({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(a).buffer),c=new Uint8Array(new Int32Array(n.shape).buffer);wB(p,l,a.length,c,n.shape.length,u);let m=Wt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var SB={kernelName:Ss,backendName:\"wasm\",kernelFunc:_ae,setupFunc:Tae};var IB;function Eae(r){IB=r.wasm.cwrap(Vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function $ae(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,l=t.dataIdMap.get(p.dataId).id,[c,m,d,f]=n.shape,[h,g]=C.getImageCenter(i,m,d),x=a===0,b=255,w=typeof a==\"number\"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(w).buffer);return IB(u,c,m,d,f,s,h,g,S,w.length,l),p}var vB={kernelName:Vs,backendName:\"wasm\",kernelFunc:$ae,setupFunc:Eae};var kB=he(Is);var NB=he(Do);var TB;function Rae(r){TB=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function Dae(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=Cu.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(c).buffer),b=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[s.dtype],p,u,l,x,m,b),i}var _B={kernelName:vs,backendName:\"wasm\",setupFunc:Rae,kernelFunc:Dae};var EB;function Aae(r){EB=r.wasm.cwrap(Ns,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function Fae(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,\"int32\");function p(u){return t.dataIdMap.get(u.dataId).id}return EB(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var $B={kernelName:Ns,backendName:\"wasm\",setupFunc:Aae,kernelFunc:Fae};var RB;function Pae(r){RB=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Oae(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),l=t.dataIdMap.get(u.dataId).id,c=o.shape.length,m=n.shape.length,d=c===0||c>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return RB(a,i,p,d,l),u}var DB={kernelName:wa,backendName:\"wasm\",kernelFunc:Oae,setupFunc:Pae};var AB=he(Ts);var FB;function Mae(r){FB=r.wasm.cwrap(Ao,null,[\"number\",\"number\"])}function Lae(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||FB(o,s),n}var PB={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:Mae,kernelFunc:Lae};var OB=he(Rs);var MB=he(Es);var LB=he($s);var BB=he(Ds);function Bae(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let T=1+s.length;T0?p+1:0;if(l<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=n.shape.slice();c[0]=l;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(c,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],\"int32\"),b=t.dataIdMap.get(x.dataId).id;HB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let w=t.readSync(x.dataId),S;switch(w[0]){case 0:{S=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(w[1],w[2]);break;case 3:S=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w[1],w[2],w[3]);break;default:S=\"\"}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function Gae(r){return Zg(r,!0)}var KB={kernelName:va,backendName:\"wasm\",setupFunc:Qg,kernelFunc:Gae};function Hae(r){return Zg(r,!1)}var qB={kernelName:ka,backendName:\"wasm\",setupFunc:Qg,kernelFunc:Hae};var jB;function Kae(r){jB=r.wasm.cwrap(Ps,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function qae(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:l,sliceSize:c,strides:m,outputSize:d}=C.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return jB(f,h,s.shape.length,g,we[a.dtype],u,l,c,x,d,b),p}var XB={kernelName:Ps,backendName:\"wasm\",setupFunc:Kae,kernelFunc:qae};function jae(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),l=n.shape.slice();return p.map(c=>{let m=[...l];m[i]=c;let d=an({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=c,d})}var YB={kernelName:Ia,backendName:\"wasm\",kernelFunc:jae};var QB=he(Fo);var ZB=he(tu);var Xae=!0,JB=He(Po,Xae);var ez;function Yae(r){ez=r.wasm.cwrap(Ko,null,[\"number\",\"number\",\"number\",\"number\"])}function Qae(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return ez(a,n,we[s.dtype],p),i}var tz={kernelName:Ko,backendName:\"wasm\",setupFunc:Yae,kernelFunc:Qae};var rz;function Zae(r){rz=r.wasm.cwrap(Os,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Jae(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=Wt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=an({inputs:{x:n},backend:e,attrs:{begin:b,size:T}});k=Wt({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else{let T=e.makeOutput(d,\"float32\"),E=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),F=new Uint8Array(new Int32Array(w).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(T.dataId).id;rz(E,R,n.shape.length,D,F,O,M,L,d.length,B),k=Wt({inputs:{x:T},backend:e,attrs:{shape:f}}),e.disposeData(T.dataId)}return k}var oz={kernelName:Os,backendName:\"wasm\",setupFunc:Zae,kernelFunc:Jae};function eie(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:l,preserveShortSequences:c}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=gp(m,d,a,i,p,u,l,c),g=e.makeOutput([f.length],\"string\"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,\"int32\");return e.typedArrayFromHeap(b).set(h),[g,b]}var nz={kernelName:Na,backendName:\"wasm\",kernelFunc:eie};function tie(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,l,c]=xp(i,p[0],a),m=l.length,d=e.makeOutput([m,2],\"int32\");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],\"string\"),g=e.dataIdMap.get(h.dataId);g.stringBytes=l;let x=e.makeOutput([2],\"int32\");return e.typedArrayFromHeap(x).set(c),[d,h,x]}var sz={kernelName:ru,backendName:\"wasm\",kernelFunc:tie};function rie(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=yp(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var az={kernelName:ou,backendName:\"wasm\",kernelFunc:rie};var oie=!0,iz=He(Oo,oie);var uz;function nie(r){uz=r.wasm.cwrap(As,null,[\"number\",\"number\",\"number\",\"number\"])}function sie(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims(\"sum\",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;uz(p,x,we[b.dtype],w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var pz={kernelName:As,backendName:\"wasm\",setupFunc:nie,kernelFunc:sie};var lz=he(Ms);var cz=he(Ls);var mz;function aie(r){mz=r.wasm.cwrap(ks,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function iie(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=Cu.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,w=new Uint8Array(new Int32Array(c).buffer),S=e.dataIdMap.get(i.dataId).id;return mz(f,g,we[a.dtype],p,u,l,w,m,S,b),i}var dz={kernelName:ks,backendName:\"wasm\",setupFunc:aie,kernelFunc:iie};var fz;function uie(r){fz=r.wasm.cwrap(Mo,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function pie(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),l=e.dataIdMap.get(u.dataId).id,c=e.makeOutput(p,\"int32\"),m=e.dataIdMap.get(c.dataId).id;return gz(a,i,o.shape.length,we[o.dtype],n,s,l,m),[u,c]},xz={kernelName:Bs,backendName:\"wasm\",setupFunc:lie,kernelFunc:cie};var yz;function mie(r){yz=r.wasm.cwrap(zs,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function die(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),w=e.makeOutput(g,n.dtype),S=e.dataIdMap.get(w.dataId).id,T=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a===\"nearest\"?1:2,F;switch(i){case\"constant\":F=1;break;case\"reflect\":F=2;break;case\"wrap\":F=3;break;case\"nearest\":F=4;break;default:F=1;break}return yz(T,R,s.shape[0]>1,l,f,h,d,m,c,x,n.shape.length-1,b,g.length-1,D,F,p,S),w}var bz={kernelName:zs,backendName:\"wasm\",setupFunc:mie,kernelFunc:die};function fie(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=bp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],\"int32\",void 0,p)]}var Cz={kernelName:nu,backendName:\"wasm\",kernelFunc:fie};function hie(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var wz={kernelName:Ta,backendName:\"wasm\",kernelFunc:hie};function gie(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var Sz={kernelName:_a,backendName:\"wasm\",kernelFunc:gie};var xie=[iO,uO,pO,lO,cO,dO,yO,CO,wO,SO,IO,vO,kO,NO,TO,EO,PO,RO,AO,LO,zO,WO,UO,GO,HO,KO,jO,XO,QO,JO,tM,oM,sM,aM,iM,pM,cM,dM,hM,xM,bM,wM,IM,kM,TM,_M,$M,RM,DM,AM,FM,PM,OM,LM,BM,zM,WM,GM,KM,jM,YM,QM,ZM,fO,JM,eL,tL,oL,nL,sL,iL,pL,uL,lL,cL,mL,dL,hL,xL,bL,CL,SL,vL,NL,_L,$L,DL,FL,PL,ML,VL,WL,UL,GL,KL,jL,YL,QL,JL,eB,tB,Yg,oB,sB,iB,uB,pB,lB,cB,mB,OO,fB,gB,yB,CB,SB,vB,kB,NB,_B,$B,DB,AB,PB,OB,MB,LB,BO,BL,BB,zB,WB,GB,KB,qB,XB,YB,QB,ZB,JB,tz,oz,nz,sz,az,iz,pz,lz,cz,dz,hz,xz,bz,gO,Cz,wz,Sz];for(let r of xie)li(r);var J0=A();J0.registerFlag(\"WASM_HAS_SIMD_SUPPORT\",async()=>{try{return 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]))}catch(r){return!1}});J0.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(J0.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(r){return!1}});var iv=Kp(Nz()),Dz=Kp(_z()),uv=Kp(Ez());var $z=iv.default||iv,yie=uv.default||uv,gm=class extends mo{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Fz),av=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new mn(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let l=t;this.dataIdMap.set(e,{id:a,stringBytes:l,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p)>>>0;this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s===\"string\")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return Cie(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.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(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case\"float32\":return new Float32Array(n,s,a);case\"int32\":return new Int32Array(n,s,a);case\"bool\":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function bie(r){return(e,t)=>(y.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function Rz(r,e,t){if(tx!=null)return tx;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),fm!=null&&fm[o]!=null?fm[o]:t+o}async function Az(){let[r,e]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=Dz.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),l=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(l)}return i.endsWith(\".wasm\")?Rz(r,e,dm!=null?dm:p):p+i},pv&&(n.instantiateWasm=bie(Rz(r,e,dm!=null?dm:\"\")));let s=!1;n.onAbort=()=>{if(s||hm)return;hm=!0,o({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\"})};let a;e&&r&&tx==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+$z.toString()],{type:\"text/javascript\"}),a=$z(n)):a=yie(n),a.then(i=>{s=!0,hm=!1;let p=null;i.tfjs={init:i.cwrap(\"init\",null,[]),initWithThreadsCount:i.cwrap(\"init_with_threads_count\",null,[\"number\"]),getThreadsCount:i.cwrap(\"get_threads_count\",\"number\",[]),registerTensor:i.cwrap(\"register_tensor\",null,[\"number\",\"number\",\"number\"]),disposeData:i.cwrap(\"dispose_data\",p,[\"number\"]),dispose:i.cwrap(\"dispose\",p,[])},t({wasm:i})}).catch(o)})}function Cie(r,e){switch(e){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var wie=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],tx=null,dm=null,fm={},hm=!1,pv=!1;function Sie(r,e=!1){if(zw(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),hm)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");tx=r,pv=e}function Iie(r,e=!1){if(hm)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`\");if(typeof r==\"string\")dm=r;else{fm=r;let t=wie.filter(o=>fm[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.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.`)}pv=e}var Fz=-1,av=-1;function vie(r){Fz=r}function kie(){if(av===-1)throw new Error(\"WASM backend not initialized.\");return av}var Nie=\"4.17.0\";var Tie=2;pu(\"wasm\",async()=>{let{wasm:r}=await Az();return new gm(r)},Tie);var Wo=A();Wo.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);Wo.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);Wo.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);Wo.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!0);Wo.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);Wo.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);Wo.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);Wo.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);Wo.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);Wo.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>-1);Wo.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);Wo.registerFlag(\"WEBGPU_PRINT_SHADER\",()=>\"\");Wo.registerFlag(\"WEBGPU_ENGINE_COMPILE_ONLY\",()=>!1);var rx=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith(\"gen\"))return Number(this.architecture.match(/\\d+/));if(this.architecture.startsWith(\"xe\"))return 12}return 0}isIntel(){return this.vendor===\"intel\"}};var ox=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,o=!1,n=!0){let s,a=Pz(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=Pz(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error(\"Cannot find the buffer in buffer manager\");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Pz(r,e){return`${r}_${e}`}var nx=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=Mz(o),a=e*t*s,i=Oz(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=Oz(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=Mz(n),l=t*o*u;this.numBytesUsed-=l}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Oz(r,e,t,o){return`${r}_${e}_${t}_${o}`}function Mz(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function Lz(r,e){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let t=r.length,o=\"xyzwuv\",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var oo=(r,e,t)=>t===\"int32\"?`atomicAdd(${r}, bitcast(${e}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${e});\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(${r}, oldValue, newValue);\n if res.exchanged {\n break;\n }\n oldValue = res.old_value;\n }\n }`;var $i;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})($i||($i={}));var Wz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=Eie(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(l=>e.shaderKey.toLowerCase().includes(l)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})},Ae=(r,e=\"f32\")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(r){if(r<=1)return\"i32\";if(r===2)return\"vec2\";if(r===3)return\"vec3\";if(r===4)return\"vec4\";if(r===5)return\"vec5\";if(r===6)return\"vec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function un(r){if(r===0)return\"x\";if(r===1)return\"y\";if(r===2)return\"z\";if(r===3)return\"w\";if(r===4)return\"u\";if(r===5)return\"v\";throw Error(`Index ${r} is not yet supported`)}function G(...r){let e;switch(r.length){case 0:e=`\n fn main()\n `;break;case 1:e=`\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return e}function Bz(r,e){let t;return t=`\n ${_ie(e)}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(workgroup_id) WorkgroupId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n localIndex = LocalIndex;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n workgroupId = WorkgroupId;\n ${r?\"main(getGlobalIndex());\":\"main();\"};\n }\n `,t}function _ie(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function Eie(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(`\n\n var localId: vec3;\n var localIndex: u32;\n var globalId: vec3;\n var numWorkgroups: vec3;\n var workgroupId: vec3;\n\n // Only used when the y/z dimension of workgroup size is 1.\n fn getGlobalIndex() -> i32 {\n ${Gz(t)?\" return i32(globalId.x);\":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y +\n workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u +\n localIndex);\n `}\n }\n `),t.pixelsOpType!=null){let f=t.pixelsOpType===$i.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Eu(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Eu(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?\"vec2\":\"i32\";o.push(`\n struct Uniform {\n outShapeStrides : ${h},\n size : i32,\n numChannels : i32,\n alpha : f32,\n };\n\n ${f}\n @group(0) @binding(2) var uniforms: Uniform;\n `);let g=Vz(t);return[zz,o.join(`\n`),xm(e.shape),t.getUserCode(),Bz(g,t)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";t.variableNames.forEach((f,h)=>{let g=ft(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ft(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ft(e.shape.length);i+=`outShape : ${p}, `,s=e.shape.length-1,a=ft(s),i+=`\n outShapeStrides: ${a}, `,t.size&&(i+=\"size : i32, \"),t.uniforms&&(i+=t.uniforms),i+=\"};\",i=Mie(i),o.push(i),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Eu(e.dtype,t.outputComponent)}>;\n `),t.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Eu(r[h].dtype,t.variableComponents[h]):Eu(r[h].dtype,t.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let u=Fie(e.shape,t.dispatchLayout),l=[zz,o.join(`\n`)+$ie,xm(e.shape),u,Pie(e.shape.length)];t.atomic||l.push(Oie(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{l.push(`${xm(r[h].shape,f)}`)});let c=r.map((f,h)=>Aie(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);l.push(c),l.push(t.getUserCode());let m=Vz(t);return l.push(Bz(m,t)),l.join(`\n`)}function Uz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(l=>{n.push(l.shape),s.push(l.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(l=>C.getBroadcastDims(l.shape,t.shape)),i=e.map(l=>y.arraysEqual(l.shape,t.shape)).join(\"_\"),p=a.map(l=>l.join(\"_\")).join(\";\"),u=Gz(r)?\"flatDispatch\":\"\";return o+=\"_\"+(r.workgroupSize?r.workgroupSize.join(\",\"):\"\")+n.map(l=>l.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,o}var zz=`\n struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32};\n struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32};\n\n // Checks whether coordinates lie within the bounds of the shape.\n fn coordsInBounds2D(coord : vec2, shape : vec2) -> bool {\n return all(coord >= vec2(0)) && all(coord < shape);\n }\n fn coordsInBounds3D(coord : vec3, shape : vec3) -> bool {\n return all(coord >= vec3(0)) && all(coord < shape);\n }\n fn coordsInBounds4D(coord : vec4, shape : vec4) -> bool {\n return all(coord >= vec4(0)) && all(coord < shape);\n }\n\n fn getIndexFromCoords1D(coord : i32, shape : i32) -> i32 {\n return coord;\n }\n fn getIndexFromCoords2D(coords : vec2, shape : vec2) -> i32 {\n return dot(coords, vec2(shape.y, 1));\n }\n fn getIndexFromCoords3D(coords : vec3, shape : vec3) -> i32 {\n return dot(coords, vec3(shape.y * shape.z, shape.z, 1));\n }\n fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\n return dot(coords, vec4(\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\n }\n fn getIndexFromCoords5D(coords : vec5, shape : vec5) -> i32 {\n let shapeStrides: vec5 = vec5(shape.y * shape.z * shape.w * shape.u, shape.z * shape.w * shape.u, shape.w * shape.u, shape.u, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u;\n }\n fn getIndexFromCoords6D(coords : vec6, shape : vec6) -> i32 {\n let shapeStrides: vec6 = vec6(shape.y * shape.z * shape.w * shape.u * shape.v, shape.z * shape.w * shape.u * shape.v, shape.w * shape.u * shape.v, shape.u * shape.v, shape.v, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u + coords.v*shapeStrides.v;\n }\n\n // NaN defination in IEEE 754-1985 is :\n // - sign = either 0 or 1.\n // - biased exponent = all 1 bits.\n // - fraction = anything except all 0 bits (since all 0 bits represents infinity).\n // https://en.wikipedia.org/wiki/IEEE_754-1985#Representation_of_non-numbers\n fn isnan(val: f32) -> bool {\n let floatToUint: u32 = bitcast(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n fn isnanVec4(val : vec4) -> vec4 {\n let floatToUint: vec4 = bitcast>(val);\n return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u);\n }\n`,$ie=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function xm(r,e=\"\"){let t=r.length,o=e!==\"\"?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=e!==\"\"?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:\"outShapeStrides\";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 {\n let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n};\n return vec2(d0, d1);\n }`;let p;return p=\"var index2 = index;\"+s.map((u,l)=>{let c=`let ${i[l]} = index2 / uniforms.${n}.${un(l)}`,m=l===s.length-1?`let ${i[l+1]} = index2 - ${i[l]} * uniforms.${n}.${un(l)}`:`index2 = index2 - ${i[l]} * uniforms.${n}.${un(l)}`;return`${c}; ${m};`}).join(\"\"),`\n fn ${o}(index : i32) -> ${a} {\n ${p}\n return ${a}(${i.join(\",\")});\n }\n `}function Rie(r,e){let t=r.name,o=r.shape.length,n=ft(o),s=\"get\"+t.charAt(0).toUpperCase()+t.slice(1),a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=a.map(l=>`${l} : i32`).join(\", \");if(o<1)return`\n fn ${s}() -> ${Ae(e)} {\n return ${Ae(e)}(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(e)} {\n return ${Ae(e)}(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${e===1?\"\":` / ${e}`}]);\n }\n `}function Die(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=e.length,u=ft(p);if(y.arraysEqual(r.shape,e)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${t===1?\"\":` / ${t}`}]);\n }\n `;let l=C.getBroadcastDims(r.shape,e),c=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)}{\n return get${s}();\n }\n `;p<2&&l.length>=1?m=\"coords = 0;\":m=l.map(g=>`coords.${un(g+c)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=ft(i),x=r.shape.map((b,w)=>`coords.${un(w+c)}`).join(\", \");d=`${g}(${x})`}else d=\"coords\";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(t)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n`}function Aie(r,e,t,o){let n=Rie(r,t);return r.shape.length<=e.length&&(n+=Die(r,e,t,o)),n}function Fie(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return\"\";if(t.length===s)return`fn getOutputCoords() -> ${ft(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[t,o,n];for(let m=0;m ${l} {\n ${i}\n`;return u.length===0?c+=`return ${l}(0); }`:c+=`return ${l}(${u.join(\",\")}); }`,c}function Pie(r){let e=\"\";switch(r){case 0:case 1:e+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:e+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:e+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:e+=`\n fn getOutputIndexFromCoords(coords : vec4) -> i32 {\n return dot(coords, vec4(\n uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, uniforms.outShapeStrides.z, 1));\n }\n `;break;case 5:e+=`\n fn getOutputIndexFromCoords(coords : vec5) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u;\n }\n `;break;case 6:e+=`\n fn getOutputIndexFromCoords(coords : vec6) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u * uniforms.outShapeStrides.u +\n coords.v;\n }\n `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function Gz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Eu(r,e=1){if(r===\"float32\")return Ae(e,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(e,\"i32\");throw new Error(`type ${r} is not supported.`)}function Oie(r,e,t){let o=r.length,n=Eu(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(t,\"i32\")}) {\n result[flatIndex] = ${n}(value);\n }\n `;if(o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=ft(o);s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n `}return s}function Mie(r){let e=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(e,o=>\"@align(16) \"+o);let t=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function Vz(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var cv={};qe(cv,{GPUBytesPerElement:()=>sx,MatMulProgramType:()=>pn,assertNotComplex:()=>wm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>bm,computeWorkgroupInfoForMatMul:()=>lv,computeWorkgroupSizeForConv2d:()=>ym,flatDispatchLayout:()=>X,isWebGPUSupported:()=>Cm,tilesFitEvenlyIntoShape:()=>Bie});var Ap=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Ap(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Ap(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Ap(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function lv(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function ym(r,e,t=!1){if(t)return[8,8,1];let o=Ap(r.x.map(s=>e[s])),n=Ap(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function bm(r,e,t=!1){if(t)return[4,4,1];let o=Ap(r.x.map(s=>e[s])),n=Ap(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function sx(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function Cm(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function wm(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGPU backend.`)})}var pn;(function(r){r[r.MatMulReduceProgram=0]=\"MatMulReduceProgram\",r[r.MatMulSplitKProgram=1]=\"MatMulSplitKProgram\",r[r.MatMulSmallOutputSizeProgram=2]=\"MatMulSmallOutputSizeProgram\",r[r.MatMulPackedProgram=3]=\"MatMulPackedProgram\",r[r.MatMulMax=4]=\"MatMulMax\"})(pn||(pn={}));var zie=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),Vie=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>\"Dispatch size exceeds WebGPU limits in Y or Z dimension.\");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},Jl=class r extends mo{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!Cm())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new rx(t),this.supportTimestampQuery=this.device.features.has(\"timestamp-query\"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new ox(this.device),this.textureManager=new nx(this.device),this.tensorMap=new mn(this,cr()),A().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(this.dummyCanvas=document.createElement(\"canvas\"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext(\"webgpu\"),this.dummyContext.configure({device:e,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(this.releaseResource(e),this.tensorMap.delete(e),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\"))return console.warn(\"The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false\"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o),A().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(y.assert(this.dummyContext!==void 0,()=>\"Fail to get context for profiling tool\"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype===\"string\")return o;if(t.dtype===\"complex64\"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(h,g).buffer,\"float32\");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn(\"The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead.\"));let s=[\"opaque\",\"premultiplied\"],a=t.resource,i=a.size;y.assert(i%4===0,()=>\"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.\");let p=i/4,u=new ArrayBuffer(i),l=256,c=256,m=s.map(h=>new OffscreenCanvas(l,c)),d=new OffscreenCanvas(l,c);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext(\"webgpu\");return x.configure({device:this.device,format:\"bgra8unorm\",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=l*4,b=(R,D,F)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:F},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext(\"2d\",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,F,R*D*4);for(let z=0;z0&&(b(S,k,T),T+=k*(l*4)),S=E%l,S>0&&b(S,1,T)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return o;let n;if(t.dtype===\"complex64\"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=C.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. \");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=sx(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return ie(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled.\"),this.hasTimestampQueryWarned=!0);let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,l)=>({name:a[l],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \"),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=sx(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState===\"unmapped\"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let l=n[u];p.type===\"int32\"?new Int32Array(a,l,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(a,l,p.data.length).set(p.data):new Float32Array(a,l,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Vie(this.device,e);let a=t.map((p,u)=>{if(p.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");return this.uploadToGPU(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=Uz(e,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=Wz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(e.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m=\"int32\";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),l=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};l&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(l||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||e.pixelsOpType===$i.DRAW)&&(this.endComputePassEncoder(),l?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=zie){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),e.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new Jl(s,a)},3);var fe;(function(r){r[r.ADD=0]=\"ADD\",r[r.ATAN2=1]=\"ATAN2\",r[r.COMPLEX_MULTIPLY_IMAG=2]=\"COMPLEX_MULTIPLY_IMAG\",r[r.COMPLEX_MULTIPLY_REAL=3]=\"COMPLEX_MULTIPLY_REAL\",r[r.DIV=4]=\"DIV\",r[r.ELU_DER=5]=\"ELU_DER\",r[r.EQUAL=6]=\"EQUAL\",r[r.FLOOR_DIV=7]=\"FLOOR_DIV\",r[r.GREATER=8]=\"GREATER\",r[r.GREATER_EQUAL=9]=\"GREATER_EQUAL\",r[r.LESS=10]=\"LESS\",r[r.LESS_EQUAL=11]=\"LESS_EQUAL\",r[r.LOGICAL_AND=12]=\"LOGICAL_AND\",r[r.LOGICAL_OR=13]=\"LOGICAL_OR\",r[r.MAX=14]=\"MAX\",r[r.MIN=15]=\"MIN\",r[r.MOD=16]=\"MOD\",r[r.MUL=17]=\"MUL\",r[r.NOT_EQUAL=18]=\"NOT_EQUAL\",r[r.POW=19]=\"POW\",r[r.PRELU=20]=\"PRELU\",r[r.SQUARED_DIFFERENCE=21]=\"SQUARED_DIFFERENCE\",r[r.SUB=22]=\"SUB\"})(fe||(fe={}));var Wie=\"let resultTemp = a + b;\",Uie=\"let resultTemp = atan2(a, b);\",Gie=\"let resultTemp = areal * breal - aimag * bimag;\",Hie=\"let resultTemp = areal * bimag + aimag * breal;\",Kie=\"let resultTemp = a / b;\",qie=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",jie=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,Xie=`\n let remainder =\n select(a % b, round(a % b), (round(a) == a) & (round(b) == b));\n let quotient = (a - remainder) / b;\n let resultTemp =\n round(select(quotient, quotient - 1, sign(remainder) == -sign(b)));\n`,Yie=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,Qie=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,Zie=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Jie=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,eue=\"return f32(a >= 1.0 && b >= 1.0);\",tue=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,rue=\"return f32(a >= 1.0 || b >= 1.0);\",oue=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,nue=\"let resultTemp = max(a, b);\",sue=\"let resultTemp = min(a, b);\",aue=`\n let isNaN = b == 0.;\n var resultTemp = a % b;\n resultTemp = select((resultTemp + b) % b, resultTemp,\n (a < 0. && b < 0.) || (a >= 0. && b > 0.));\n`,iue=`\n let isNaN = !vec4(b);\n var resultTemp = vec4(a % b);\n if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) {\n resultTemp[0] = (resultTemp[0] + b[0]) % b[0];\n }\n if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) {\n resultTemp[1] = (resultTemp[1] + b[1]) % b[1];\n }\n if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) {\n resultTemp[2] = (resultTemp[2] + b[2]) % b[2];\n }\n if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) {\n resultTemp[3] = (resultTemp[3] + b[3]) % b[3];\n }\n`,uue=\"let resultTemp = a * b;\",pue=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,lue=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,cue=`\n let isNaN = a < 0.0 && floor(b) < b;\n if (b == 0.0) {\n return 1.0;\n }\n var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b),\n round(abs(b) % 2.0) != 1.0);\n`,mue=`\n let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1);\n let isModRound1 = vec4(isModRound1Bool);\n let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n var resultTemp = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n let isExpZero = b == vec4(0.0);\n if (isExpZero.r) {\n resultTemp.r = 1.0;\n }\n if (isExpZero.g) {\n resultTemp.g = 1.0;\n }\n if (isExpZero.b) {\n resultTemp.b = 1.0;\n }\n if (isExpZero.a) {\n resultTemp.a = 1.0;\n }\n let isNaN = (a < vec4(0.0)) & (floor(b) < b);\n`,due=\"if (a < 0.0) { return b * a; } return a;\",fue=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,hue=\"let resultTemp = (a - b) * (a - b);\",gue=\"let resultTemp = a - b;\";function ec(r,e){let t;do{switch(r){case fe.ATAN2:t=Uie;break;case fe.MAX:t=nue;break;case fe.MIN:t=sue;break;case fe.MOD:t=e?iue:aue;break;case fe.NOT_EQUAL:t=e?lue:pue;break;case fe.POW:t=e?mue:cue;break;default:continue}let o,n,s;return e?(o=\"isnanVec4\",n=\"vec4\",s=\"vec4\"):(o=\"isnan\",n=\"f32\",s=\"bool\"),`\n let aIsNaN = ${o}(a);\n let aPostLegalization = select(a, ${n}(42), aIsNaN);\n let bIsNaN = ${o}(b);\n let bPostLegalization = select(b, ${n}(42), bIsNaN);\n let isNaN = false;\n let valueForNaN = uniforms.NAN;\n {\n let a = aPostLegalization;\n let b = bPostLegalization;\n ${t}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:t=Wie;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Hie;break;case fe.COMPLEX_MULTIPLY_REAL:t=Gie;break;case fe.DIV:t=Kie;break;case fe.ELU_DER:t=qie;break;case fe.EQUAL:t=jie;break;case fe.FLOOR_DIV:t=Xie;break;case fe.GREATER:t=Yie;break;case fe.GREATER_EQUAL:t=Qie;break;case fe.LESS:t=Zie;break;case fe.LESS_EQUAL:t=Jie;break;case fe.LOGICAL_AND:return e?tue:eue;case fe.LOGICAL_OR:return e?oue:rue;case fe.MUL:t=uue;break;case fe.PRELU:return e?fue:due;case fe.SQUARED_DIFFERENCE:t=hue;break;case fe.SUB:t=gue;break;default:}return`\n ${t}\n return resultTemp;\n `}var Z;(function(r){r[r.ABS=0]=\"ABS\",r[r.ACOS=1]=\"ACOS\",r[r.ACOSH=2]=\"ACOSH\",r[r.ASIN=3]=\"ASIN\",r[r.ASINH=4]=\"ASINH\",r[r.ATAN=5]=\"ATAN\",r[r.ATANH=6]=\"ATANH\",r[r.CEIL=7]=\"CEIL\",r[r.COS=8]=\"COS\",r[r.COSH=9]=\"COSH\",r[r.ELU=10]=\"ELU\",r[r.ERF=11]=\"ERF\",r[r.EXP=12]=\"EXP\",r[r.EXPM1=13]=\"EXPM1\",r[r.FLOOR=14]=\"FLOOR\",r[r.IS_FINITE=15]=\"IS_FINITE\",r[r.IS_INF=16]=\"IS_INF\",r[r.IS_NAN=17]=\"IS_NAN\",r[r.LINEAR=18]=\"LINEAR\",r[r.LOG=19]=\"LOG\",r[r.LOG1P=20]=\"LOG1P\",r[r.LOGICAL_NOT=21]=\"LOGICAL_NOT\",r[r.NEG=22]=\"NEG\",r[r.RELU=23]=\"RELU\",r[r.RELU6=24]=\"RELU6\",r[r.LEAKYRELU=25]=\"LEAKYRELU\",r[r.RECIPROCAL=26]=\"RECIPROCAL\",r[r.ROUND=27]=\"ROUND\",r[r.RSQRT=28]=\"RSQRT\",r[r.SELU=29]=\"SELU\",r[r.SIGMOID=30]=\"SIGMOID\",r[r.SIGN=31]=\"SIGN\",r[r.SIN=32]=\"SIN\",r[r.SINH=33]=\"SINH\",r[r.SOFTPLUS=34]=\"SOFTPLUS\",r[r.SQRT=35]=\"SQRT\",r[r.SQUARE=36]=\"SQUARE\",r[r.STEP=37]=\"STEP\",r[r.TAN=38]=\"TAN\",r[r.TANH=39]=\"TANH\",r[r.TO_INT=40]=\"TO_INT\"})(Z||(Z={}));var xue=\"return abs(a);\",yue=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,bue=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,Cue=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,wue=\"return asinh(a);\",Sue=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,Iue=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n if (a == 1.) {\n return uniforms.INFINITY;\n }\n if (a == -1.) {\n return -uniforms.INFINITY;\n }\n return atanh(a);\n`,vue=\"return ceil(a);\",kue=\"return cos(a);\",Nue=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,Tue=\"return exp(a) - 1.0;\",_ue=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",Eue=`\n var resFloat = exp(a) - vec4(1.0);\n if (a.r >= 0.0) {\n resFloat.r = a.r;\n }\n if (a.g >= 0.0) {\n resFloat.g = a.g;\n }\n if (a.b >= 0.0) {\n resFloat.b = a.b;\n }\n if (a.a >= 0.0) {\n resFloat.a = a.a;\n }\n return resFloat;\n`,$ue=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n let p = ${C.ERF_P};\n let a1 = ${C.ERF_A1};\n let a2 = ${C.ERF_A2};\n let a3 = ${C.ERF_A3};\n let a4 = ${C.ERF_A4};\n let a5 = ${C.ERF_A5};\n\n let sign = sign(a);\n let absA = abs(a);\n let t = 1.0 / (1.0 + p * absA);\n return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA));\n`,Rue=\"return exp(a);\",Due=\"return floor(a);\",Aue=\"return f32(!isnan(a) && !isinf(a));\",Fue=\"return f32(isinf(a));\",Pue=\"return f32(isnan(a));\",Oue=\"return a;\",Mue=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,Lue=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,Bue=\"return f32(!(a >= 1.0));\",zue=\"return -a;\",Vue=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",Wue=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Uue=\"return 1.0 / a;\",Gue=\"return select(a, 0.0, a < 0.0);\",Hue=\"return clamp(a, 0.0, 6.0);\",Kue=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",que=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,jue=\"return round(a);\",Xue=\"return inverseSqrt(a);\",Yue=`\n if (a >= 0.0) {\n return ${C.SELU_SCALE} * a;\n } else {\n return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,Que=\"return 1.0 / (1.0 + exp(-1.0 * a));\",Zue=\"return sign(a);\",Jue=\"return sin(a);\",epe=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,tpe=`\n let epsilon = 1.1920928955078125e-7;\n let threshold = log(epsilon) + 2.0;\n\n let too_large = a > -threshold;\n let too_small = a < threshold;\n let exp_a = exp(a);\n\n if (too_large) {\n return a;\n } else if (too_small) {\n return exp_a;\n } else {\n return log(exp_a + 1.0);\n }\n`,rpe=\"return sqrt(a);\",ope=\"return a * a;\",npe=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,spe=\"return tan(a);\",ape=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,ipe=\"return f32(i32((a)));\";function Ri(r,e){switch(r){case Z.ABS:return xue;case Z.ACOS:return yue;case Z.ACOSH:return bue;case Z.ASIN:return Cue;case Z.ASINH:return wue;case Z.ATAN:return Sue;case Z.ATANH:return Iue;case Z.COS:return kue;case Z.COSH:return Nue;case Z.CEIL:return vue;case Z.ELU:return e?Eue:_ue;case Z.ERF:return $ue;case Z.EXP:return Rue;case Z.EXPM1:return Tue;case Z.FLOOR:return Due;case Z.IS_FINITE:return Aue;case Z.IS_INF:return Fue;case Z.IS_NAN:return Pue;case Z.LINEAR:return Oue;case Z.LOG:return Mue;case Z.LOG1P:return Lue;case Z.LOGICAL_NOT:return Bue;case Z.NEG:return zue;case Z.LEAKYRELU:return e?Wue:Vue;case Z.RECIPROCAL:return Uue;case Z.RELU:return e?que:Gue;case Z.RELU6:return e?Kue:Hue;case Z.ROUND:return jue;case Z.RSQRT:return Xue;case Z.SELU:return Yue;case Z.SIGMOID:return Que;case Z.SIGN:return Zue;case Z.SIN:return Jue;case Z.SINH:return epe;case Z.SOFTPLUS:return tpe;case Z.SQRT:return rpe;case Z.SQUARE:return ope;case Z.STEP:return npe;case Z.TAN:return spe;case Z.TANH:return ape;case Z.TO_INT:return ipe;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function gr(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=Ri(Z.LINEAR);else if(r===\"relu\")n=Ri(Z.RELU,t);else if(r===\"elu\")n=Ri(Z.ELU,t);else if(r===\"relu6\")n=Ri(Z.RELU6,t);else if(r===\"prelu\")n=ec(fe.PRELU,t);else if(r===\"sigmoid\")n=Ri(Z.SIGMOID,t);else if(r===\"leakyrelu\")n=Ri(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(t?4:1),i=\"\";return e?i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n let b = getPreluActivationWeightsByOutputCoords(coords);\n ${n}\n }`:i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n ${n}\n }`,i}function no(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function mv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=`\n ${r?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,i=e?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${t&&n?a:`\n ${r?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${a}\n }\n `}\n return value;\n }\n\n fn mm_readB(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${i}\n return value;\n }\n `}function Sm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return`\n ${mv(t,o,n,s,a,i)}\n fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) {\n ${n&&s?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${no(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var upe=(r,e)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${e});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${e});\n `,ppe=(r,e,t,o)=>{if(r)return`\n for (var k = 0; k < ${o}; k++) {\n let BCached0 = mm_Bsub[k][tileCol];\n let ACached0 = mm_Asub[k][localRow];\n for (var i = 0; i < ${t}; i++) {\n acc[i] = fma(BCached0, vec4(ACached0[i]), acc[i]);\n }\n }`;{let n=\"\",s=\"\";for(let a=0;a(ACached[${a}]), acc[i]);`;return`\n for (var k = 0; k < ${o/e}; k++) {\n ${n}\n for (var i = 0; i < ${t}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function Fp(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,l=t?o:i,c=u/e[0],m=o/e[1],d=r[1],f=r[0];return y.assert((t&&c===4&&r[1]===4||!t&&(c===3||c===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${c} and workPerThread[1] ${r[1]} must be 4.\n Otherwise, innerElementSize ${c} must be 3 or 4.\n tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`),`\n var mm_Asub : array, ${u/c}>, ${l}>;\n var mm_Bsub : array, ${p/r[0]}>, ${o}>;\n\n ${G()} {\n let localRow = i32(localId.y);\n let tileRow = localRow * ${d};\n let tileCol = i32(localId.x);\n\n let globalRow = i32(globalId.y) * ${d};\n let globalCol = i32(globalId.x) * ${f};\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!a?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!a?\"batch\":\"batch % uniforms.bShape[0]\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, ${d}>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${upe(t,c)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB, kStart + inputRow, globalCol);\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n ${ppe(t,c,d,o)}\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var Hz=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,lpe=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Pp(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],l=t?p:o,c=t?o:p;y.assert(c%e[1]===0&&l%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${l} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=c/e[1],d=l/e[0],f=o/e[1],h=r[1],g=r[0],x=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${p};\n let globalColStart = i32(workgroupId.x) * ${u};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${l}; inputCol = inputCol + ${e[0]}) {\n ${Hz(t)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let gCol = globalColStart + localCol + innerCol * ${e[0]};\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\n }\n }\n `:`\n let tileRow = i32(localId.y) * ${h};\n let tileCol = i32(localId.x) * ${g};\n\n let globalRow = i32(globalId.y) * ${h};\n let globalCol = i32(globalId.x) * ${g};\n let globalRowStart = i32(workgroupId.y) * ${p};\n\n let tileRowA = i32(localId.y) * ${m};\n let tileColA = i32(localId.x) * ${d};\n let tileRowB = i32(localId.y) * ${f};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n for (var innerCol = 0; innerCol < ${d}; innerCol++) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${Hz(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${f}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n ${lpe(t)}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${c}>;\n var mm_Bsub : array, ${o}>;\n\n ${G()} {\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!i?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!i?\"batch\":\"batch % uniforms.bShape[0]\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, ${h}>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${x}\n }\n `}var cpe=r=>r?`\n mm_readA(batchA, colA, globalRow),\n mm_readA(batchA, colA + 1, globalRow),\n mm_readA(batchA, colA + 2, globalRow),\n mm_readA(batchA, colA + 3, globalRow)\n `:`\n mm_readA(batchA, globalRow, colA),\n mm_readA(batchA, globalRow, colA + 1),\n mm_readA(batchA, globalRow, colA + 2),\n mm_readA(batchA, globalRow, colA + 3)\n `;function mpe(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return`\n var mm_Asub : array, ${r[0]}>;\n\n ${G()} {\n let tileCol = i32(localId.x);\n let globalCol = i32(globalId.x);\n let globalRow = i32(globalId.y);\n\n let numTiles = (uniforms.dimInner - 1) / ${t} + 1;\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n // Without this initialization strange values show up in acc.\n var acc = 0.0;\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n let colA = t * ${t} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${cpe(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${t/4}; k++) {\n let rowB = t * ${t} + k * 4;\n let BCached = vec4(mm_readB(batchB, rowB, globalCol),\n mm_readB(batchB, rowB + 1, globalCol),\n mm_readB(batchB, rowB + 2, globalCol),\n mm_readB(batchB, rowB + 3, globalCol));\n\n let ACached = mm_Asub[k];\n acc = acc + dot(ACached, BCached);\n }\n\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var ax=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=lv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let l=s!=null,c=i!=null;l&&this.variableNames.push(\"bias\"),c&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=l,this.activation=a,this.hasPreluActivationWeights=c,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${gr(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${Sm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?mpe(this.workgroupSize,this.transposeA):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function dpe(r){return`\n var sumValues : array;\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n let row = coords[1];\n let col = coords[2];\n var sum = 0.0;\n let Length = uniforms.dimInner;\n for (var k = i32(localId.x); k < Length; k = k + ${r}) {\n let dataA = mm_readA(batchA, row, k);\n let dataB = mm_readB(batchB, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = ${r/2}u; currentSize > 1u;\n currentSize = currentSize / 2u) {\n if (localId.x < currentSize)\n {\n sumValues[localId.x] = sumValues[localId.x] + sumValues[localId.x + currentSize];\n }\n workgroupBarrier();\n }\n\n if (localId.x == 0u) {\n sum = sumValues[0] + sumValues[1];\n mm_write(batch, row, col, sum);\n }\n }\n `}var ix=class{constructor(e,t=!1,o=!1,n=null,s=null,a=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return`\n ${gr(this.activation,this.hasPreluActivationWeights)}\n ${Sm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${dpe(this.workgroupSize[0])}\n `}};function fpe(r){let e=r[1],t=r[0],o=e>t?e:t;return`\n var mm_Asub : array, ${e}>;\n var mm_Bsub : array, ${o}>;\n\n // If the output size is small for matrix multiplication, avoid to use vec4\n // and handle some elements per thread to optimally utilize the ALU.\n // Read data from global memory to registers firstly, then store them into\n // shared memory, so it is instruction-Level parallelism for arithmetic\n // operations and others handle IO operations between barrier api, makes ALU\n // and load/store units work simultaneously, could improves the performance.\n ${G()} {\n let tileRow = i32(localId.y);\n let tileCol = i32(localId.x);\n let globalRow = i32(globalId.y);\n let globalCol = i32(globalId.x);\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n\n // uniforms.dimInner should be greater than 0.\n let numTiles = (uniforms.dimInner - 1) / ${o} + 1;\n var acc = 0.0;\n\n var globalColA = tileCol;\n var globalRowB = 0;\n var regA = mm_readA(batchA, globalRow, globalColA);\n var regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batchB, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var t = 0; t < numTiles; t = t + 1) {\n mm_Asub[tileRow][tileCol] = regA;\n mm_Bsub[2 * tileRow][tileCol] = regB0;\n mm_Bsub[2 * tileRow + 1][tileCol] = regB1;\n\n workgroupBarrier();\n\n regA = mm_readA(batchA, globalRow, globalColA);\n regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batchB, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var k = 0; k < ${o}; k = k + 1) {\n acc = acc + mm_Asub[tileRow][k] * mm_Bsub[k][tileCol];\n }\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var ux=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push(\"bias\");let l=p!=null;l&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=l,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return`\n ${gr(this.activation,this.hasPreluActivationWeights)}\n ${Sm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${fpe(this.workgroupSize)}\n `}};var px=class{constructor(e,t,o=!1,n=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,y.assert(e[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return`\n ${mv(!1,this.transposeB,!1,!1,!1,e)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n for (var i = 0; i < ${e}; i = i + 1) {\n ${oo(\"&result[flatIndex + i]\",`${e>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${e===4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},lx=class{constructor(e,t=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push(\"bias\"),this.hasPreluActivationWeights&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return`\n ${gr(this.activation,this.hasPreluActivationWeights)}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${no(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var cx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function Nt(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new cx(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var Kz={kernelName:da,backendName:\"webgpu\",kernelFunc:Nt};function le(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var qz={kernelName:Ca,backendName:\"webgpu\",kernelFunc:le};function Op({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,l=e.shape.length,c=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[l-1]:e.shape[l-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[l-2]:e.shape[l-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=kr.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(c===m,()=>`Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,c,d]:[x,d,c],T=o?[b,f,m]:[b,m,f],E=le({inputs:{x:r},backend:n,attrs:{shape:k}}),R=le({inputs:{x:e},backend:n,attrs:{shape:T}}),D=[E,R],F=Math.max(x,b),O=[E,R],M=[{type:\"int32\",data:[d]},{type:\"int32\",data:[f]},{type:\"int32\",data:[c]}],L,B,z=[F,d,f],U=A().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");if(U<0){let q=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=F*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?F*d*f<=128?U=pn.MatMulReduceProgram:F===1&&m>=2e3?U=pn.MatMulSplitKProgram:U=pn.MatMulSmallOutputSizeProgram:U=pn.MatMulPackedProgram}switch(U){case pn.MatMulReduceProgram:L=new ix(z,t,o,s,p,a);break;case pn.MatMulSplitKProgram:{if(B=Nt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new px(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new lx(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p===\"leakyrelu\"&&(J=[{type:\"float32\",data:[i]}],Y.uniforms+=\" alpha : f32,\");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=le({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case pn.MatMulSmallOutputSizeProgram:L=new ux(k,T,z,t,o,s,p,a);break;case pn.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new ax(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p===\"leakyrelu\"&&(M.push({type:\"float32\",data:[i]}),L.uniforms+=\" alpha : f32,\"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=le({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function hpe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o;return Op({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:c,activation:l})}var jz={kernelName:qo,backendName:\"webgpu\",kernelFunc:hpe};var Im=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=C.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${ec(this.op,!1)}\n }\n\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let areal = getARealByOutputIndex(index);\n let aimag = getAImagByOutputIndex(index);\n let breal = getBRealByOutputIndex(index);\n let bimag = getBImagByOutputIndex(index);\n setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag));\n }\n }\n `}};var Di=class{constructor(e,t,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=C.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type=\"nonshared\",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${ec(this.op,this.outputComponent===4)}\n };\n `;if(this.type===\"shared\"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:\"0\",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index);\n let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}];\n let b = getBByOutputIndex(index);`;e=`\n ${o}\n var sharedBuf : array;\n ${G(\"index\")} {\n // Fill in the shared memory buffer.\n let localIndex = i32(localId.x);\n if(localIndex < ${this.lastDimensionSize}) {\n sharedBuf[localIndex] = f32(${this.useSharedMemoryWithB?\"B\":\"A\"}[localIndex]);\n }\n workgroupBarrier();\n\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n ${s}\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `}else e=`\n ${o}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${t}(getAByOutputCoords(coords));\n let b = ${t}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function Pt(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var Xz={kernelName:vo,backendName:\"webgpu\",kernelFunc:Pt};function Uo(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.tensorMap.get(s.dataId),i=Pt({inputs:{x:o},backend:t}),p=Pt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var Yz={kernelName:ei,backendName:\"webgpu\",kernelFunc:Uo};var so=class{constructor(e,t,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${Ri(this.op,!1)}\n }\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function ye({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),l=e(u.values,i);return a.makeTensorInfo(s.shape,i,l)}let p=new so(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function tt({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype===\"complex64\"){let c=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==fe.MUL)[d,f]=[[c.complexTensorInfos.real,m.complexTensorInfos.real],[c.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,w={dataId:x.dataId,dtype:x.dtype,shape:a.shape},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Di(r,a.shape,i.shape);return p.runWebGPUProgram(k,[w,S],pt(x.dtype,b.dtype))});else{let g=new Im(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new Im(fe.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:a.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,\"float32\"),f=p.runWebGPUProgram(x,b,\"float32\")}let h=Uo({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||pt(a.dtype,i.dtype);if((a.dtype===\"string\"||i.dtype===\"string\"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let c=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype===\"string\"?C.fromUint8ToStringArray(c):c,f=a.dtype===\"string\"?C.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let l=new Di(r,a.shape,i.shape);return p.runWebGPUProgram(l,[a,i],u)}}var Lv={};qe(Lv,{addImpl:()=>hv,bincountImpl:()=>Jz,bincountReduceImpl:()=>eV,bitwiseAndImpl:()=>gv,castImpl:()=>fv,ceilImpl:()=>xv,concatImpl:()=>tV,equalImpl:()=>yv,expImpl:()=>bv,expm1Impl:()=>Cv,floorDivImpl:()=>Sv,floorImpl:()=>wv,gatherNdImpl:()=>rV,gatherV2Impl:()=>oV,greaterEqualImpl:()=>vv,greaterImpl:()=>Iv,lessEqualImpl:()=>Nv,lessImpl:()=>kv,linSpaceImpl:()=>nV,logImpl:()=>Tv,maxImpl:()=>sV,maximumImpl:()=>_v,minimumImpl:()=>Ev,multiplyImpl:()=>km,negImpl:()=>aV,notEqualImpl:()=>$v,prodImpl:()=>iV,raggedGatherImpl:()=>pV,raggedRangeImpl:()=>cV,raggedTensorToTensorImpl:()=>fV,rangeImpl:()=>hV,rsqrtImpl:()=>Av,scatterImpl:()=>gV,sigmoidImpl:()=>xV,simpleAbsImpl:()=>Qz,sliceImpl:()=>yV,sparseFillEmptyRowsImpl:()=>bV,sparseReshapeImpl:()=>CV,sparseSegmentReductionImpl:()=>wV,sqrtImpl:()=>SV,squaredDifferenceImpl:()=>Fv,staticRegexReplaceImpl:()=>Pv,stridedSliceImpl:()=>IV,stringNGramsImpl:()=>vV,stringSplitImpl:()=>kV,stringToHashBucketFastImpl:()=>NV,subImpl:()=>Mv,tileImpl:()=>TV,topKImpl:()=>EV,transposeImpl:()=>Rv,uniqueImpl:()=>$V});function Ai(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}function Qz(r){let e=new Float32Array(r.length);for(let t=0;t{let a=C.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),l=y.getTypedArrayFromDType(s,u),c=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=C.getBroadcastDims(e,a),g=C.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xw[E]=0);let S=y.locToIndex(w,c,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let T=y.locToIndex(k,m,f);l[x]=r(o[S],n[T])}return[l,a]}}function tc(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}function mx(r,e,t=\"float32\"){if(t===\"complex64\"){let n=mx(r,e,\"float32\"),s=mx(r,e,\"float32\");return tc({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function dv(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Zz(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}function fv(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],t),[s,a]=ht((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function vm(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return dv({inputs:{x:n},backend:t});let l=mx(t,n.shape,n.dtype),c=vm({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=tc({inputs:{real:c,imag:l},backend:t});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),m}if(n.dtype===\"complex64\"){let l=Zz({inputs:{input:n},backend:t}),c=vm({inputs:{x:l},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(l),c}if(!y.hasEncodingLoss(n.dtype,s)){let l=dv({inputs:{x:n},backend:t});return{dataId:l.dataId,shape:l.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=fv(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}function wt(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Ai([a,i],r);let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=a.dtype===\"string\"?C.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?C.fromUint8ToStringArray(l):l,d=o||a.dtype,[f,h]=e(a.shape,i.shape,c,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=vm({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),l=p.data.get(u.dataId),c=l.complexTensorInfos.real,m=l.complexTensorInfos.imag,d=p.data.get(c.dataId).values,f=p.data.get(m.dataId).values,h=vm({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,w=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,T,E]=t(a.shape,i.shape,d,f,w,S),R=p.makeTensorInfo(E,\"float32\",k),D=p.makeTensorInfo(E,\"float32\",T),F=tc({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),F}else{let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=o||a.dtype,[m,d]=e(a.shape,i.shape,u,l,c);return p.makeTensorInfo(d,c,m)}}}function rc(r){return(e,t,o,n,s,a)=>{let i=C.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,l=y.computeStrides(i),c=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=C.getBroadcastDims(e,i),f=C.getBroadcastDims(t,i),h=C.mergeRealAndImagArrays(o,n),g=C.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),w=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,x,b),D=T.slice(-w);f.forEach(M=>D[M]=0);let F=y.locToIndex(D,w,S),O=r(h[R*2],h[R*2+1],g[F*2],g[F*2+1]);c[k]=O.real,m[k]=O.imag}return[c,m,i]}}var hv=ht((r,e)=>r+e),gpe=rc((r,e,t,o)=>({real:r+t,imag:e+o})),uLt=wt(Rr,hv,gpe);function Jz(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function eV(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ie([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var gv=ht((r,e)=>r&e),hLt=wt(_n,gv);function Qt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Ai(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype===\"string\"){if(!Array.isArray(p))throw new Error(\"String tensor's value was not an instance of Array\");u=C.fromUint8ToStringArray(p)}else u=p;let l=t||a.dtype,c=e(u,l,n);return i.makeTensorInfo(a.shape,l,c)}}var xv=Qt(r=>Math.ceil(r)),NLt=Wr(go,xv);function tV(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?C.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),ALt=wt(xo,yv,null,\"bool\");var bv=Qt(r=>Math.exp(r)),LLt=Wr(yo,bv,\"float32\");var Cv=Qt(r=>Math.expm1(r)),ULt=Wr(bo,Cv);var wv=Qt(r=>Math.floor(r)),jLt=Wr(Co,wv);var Sv=ht((r,e)=>Math.floor(r/e)),JLt=wt(wo,Sv,null,\"int32\");function rV(r,e,t,o,n,s,a,i,p){let u=ie([o,s],t);for(let l=0;l=p/s)throw new Error(`Invalid indices: ${c} does not index into ${i}`);for(let d=0;dr>e?1:0),uBt=wt(So,Iv,null,\"bool\");var vv=ht((r,e)=>r>=e?1:0),dBt=wt(Io,vv,null,\"bool\");var kv=ht((r,e)=>rr<=e?1:0),IBt=wt(No,Nv,null,\"bool\");function nV(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),$Bt=Wr(To,Tv);function sV(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var _v=ht((r,e)=>Math.max(r,e)),MBt=wt(_o,_v);var Ev=ht((r,e)=>Math.min(r,e)),WBt=wt(Eo,Ev);var km=ht((r,e)=>r*e),xpe=rc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),qBt=wt($o,km,xpe);function aV(r,e,t){let o=y.createScalarValue(-1,t);return km([],e,o,r,t)}var $v=ht((r,e)=>r!==e?1:0),rzt=wt(Ro,$v,null,\"bool\");function Rv(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let l=0;l{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function bpe(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function Cpe(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);bpe(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[l];for(let x=l;xn[a]=s)}return e}function uV(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error(\"starts must be a scalar or vector\");if(n.length>1)throw new Error(\"limits must be a scalar or vector\");if(a.length>1)throw new Error(\"deltas must be a scalar or vector\");let i=e.length===0,p=n.length===0,u=a.length===0,l=[];i||l.push(e[0]),p||l.push(n[0]),u||l.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/w)),S>lV)throw new Error(`Requires ((limit - start) / delta) <= ${lV}`);m[g+1]=m[g]+S}let d=m[c],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let l=1;l=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${t.length}`);u=t[c]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case ln.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case ln.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${ln[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case ln.FIRST_DIM_SIZE:return e[0];case ln.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case ln.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${ln[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=dV(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,l=this.defaultValue;if(l.length!==p&&l.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(l,f);l=Oa(h,i).dataSync()})}let c=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);mV(g,l,p),++d}h<0?(c=f+1,m=d):(c=f,m=d,d=m+1)}}};function mV(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function fV(r,e,t,o,n,s,a,i,p,u){return new Dv(r,e,t,o,n,s,a,i,p,u).compute()}function hV(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),Nzt=Wr(Do,Av);function gV(r,e,t,o,n,s,a,i,p,u){let l=[o/n,n],c=r.values,m=e.values;if(o===0)return ie(t,e.dtype);let d=p instanceof Ge?p:ie(l,e.dtype);typeof p==\"string\"||typeof p==\"number\"?d.values.fill(p):typeof p==\"boolean\"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),Azt=dx(Ao,r=>1/(1+Math.exp(-r)));function yV(r,e,t,o,n){let s=nt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let c=nt.computeFlatOffset(e,i);return n===\"string\"?r.slice(c,c+a):r.subarray(c,c+a)}let p=n===\"string\"?C.fromUint8ToStringArray(r):r,u=ie(o,n,p),l=ie(t,n);for(let c=0;cf+e[h]);l.set(u.get(...d),...m)}return n===\"string\"?C.fromStringArrayToUint8(l.values):l.values}function bV(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),l=new Array(i),c=e[1];if(p===0){if(i!==0)throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,c],x,u,l]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(c<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=c;let d=m.reduce((w,S)=>w*S,1),f=y.getArrayFromDType(t,d);if(i===0)return c>0&&f.fill(a),[f,m];if(c<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let w=0;if(g=w)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=c)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,c));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let T=0;Ti)break}return xMath.sqrt(r)),qzt=dx(Fo,r=>Math.sqrt(r));var Fv=ht((r,e)=>{let t=r-e;return t*t}),Zzt=wt(Po,Fv);var Pv=Qt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?\"g\":\"\"),n)}),oVt=Wr(pi,Pv);function IV(r,e,t,o){let n=ie(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(w=>h[g++]=w);for(let b=0;b0){x(e[m+c-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(l=l&&t[u]<=o,!l)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],l=0;this.nGramWidths.forEach(c=>{l+=this.getNumNGrams(u,c)}),this.preserveShort&&u>0&&l===0&&(l=1),a[p]=a[p-1]+l}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,c);this.createNGrams(e,u,i,l,d,c),l+=d}),this.preserveShort&&l===a[p]){let c=t[p+1]-t[p];if(c===0)continue;let m=c+2*this.padWidth;this.createNGrams(e,u,i,l,1,m)}}return[i,a]}};function vV(r,e,t,o,n,s,a,i){return new Ov(t,o,n,s,a,i).compute(r,e)}function vpe(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),kpe=rc((r,e,t,o)=>({real:r-t,imag:e-o})),gVt=wt(Oo,Mv,kpe);function TV(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function _V(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(i-l)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*l/i+c)),d=Math.min(o,Math.floor(e+(i-p)*l/i+c));_V(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Nm(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Nm(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function EV(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let c=0;cf[w]={value:b,index:w}),o{for(let g=0;g`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"addN\"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(\" + \");return`\n ${G(\"index\")} {\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let flatIndex = index * ${this.workPerThread} + i;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n ${e.join(`\n `)}\n setOutputAtIndex(flatIndex, ${t});\n }\n }\n }\n `}};function $pe(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Pt({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>pt(i,p)),s=o.map(i=>i.shape),a=new fx(s);return t.runWebGPUProgram(a,o,n)}var hW={kernelName:xn,backendName:\"webgpu\",kernelFunc:$pe};var hx=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${e} + i32(localId.x);\n var y = i32(workgroupId.y) * ${e} + i32(localId.y);\n let width = uniforms.outShape[0];\n let height = uniforms.outShape[1];\n if (x < width && y < height) {\n tile[localId.y][localId.x] = f32(A[y * width + x]);\n }\n workgroupBarrier();\n\n x = i32(workgroupId.y) * ${e} + i32(localId.x);\n y = i32(workgroupId.x) * ${e} + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var gx=class{constructor(e,t){this.variableNames=[\"A\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e=\"\",t=\"0.0\",o=this.workgroupSize[0];this.reduceType===\"min\"||this.reduceType===\"max\"?(e=`\n if (isnan(candidate)) {\n bestValue = uniforms.NAN;\n } else if (!isnan(bestValue) && candidate ${this.reduceType===\"min\"?\"<\":\">\"} bestValue)\n { bestValue = candidate; }`,t=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?e=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"?(e=\" bestValue = bestValue * candidate; \",t=\"1.0\"):this.reduceType===\"all\"?(e=\" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); \",t=\"1.0\"):this.reduceType===\"any\"&&(e=\" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); \",t=\"0.0\");let n=this.reduceType===\"mean\"?\"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));\":\"setOutputAtIndex(outputIndex, bestValue);\";return`\n fn DIV_CEIL(a : u32, b : u32) -> u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestValues : array;\n `}\n fn getOffset(outputIndex : i32) -> i32 {\n let outputCoords = getCoordsFromIndex(outputIndex);\n let offset = ${this.outputShape.length===1?\"outputCoords\":\"outputCoords[0]\"} * uniforms.reduceSize;\n return offset;\n }\n ${G(\"index\")} {\n let outputIndex = index / ${o};\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), ${o}u);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + ${o}) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), ${o}u);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n ${e}\n xBestValues[localId.x] = bestValue;\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n ${n}\n }\n }\n `}};var Rpe={mean:\"float32\",all:\"bool\",any:\"bool\"};function ao(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=C.getAxesPermutation(p,s),l=r;u!=null&&(l=Cr({inputs:{x:r},attrs:{perm:u},backend:n}),p=C.getInnerMostAxes(p.length,s),a.push(l)),C.assertAxesAreInnerMostDims(o,p,s);let[c,m]=C.computeOutAndReduceShapes(l.shape,p),d=c;t&&(d=C.expandShapeToKeepDim(c,i));let f;if((o===\"max\"||o===\"prod\")&&n.shouldExecuteOnCPU([l])){let h=n.tensorMap.get(l.dataId).values;switch(o){case\"max\":let g=qV(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:w}=JV(l.shape,l.dtype,h,p);f=n.makeTensorInfo(b,w,x);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=y.sizeFromShape(m),x=y.sizeFromShape(l.shape)/h,b={windowSize:h,inSize:h,batchSize:x,outSize:1},w=Rpe[o]||mi(r.dtype),S=[{type:\"int32\",data:[h]}],k=new xx(b,o,n.device.limits.maxComputeWorkgroupSizeX),T=n.runWebGPUProgram(k,[l],w,S);a.push(T),f=le({inputs:{x:T},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function Dpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,\"all\",t)}var xW={kernelName:yn,backendName:\"webgpu\",kernelFunc:Dpe};function Ape(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,\"any\",t)}var yW={kernelName:bn,backendName:\"webgpu\",kernelFunc:Ape};var oc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[t];this.op=o===\"min\"?\"<\":\">\";let[s,a]=C.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type=\"plain\",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type=\"shared\",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${un(this.inputShape.length-1)}`,o=()=>{let n=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+=\"outputCoords,\");else for(let s=0;s u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${G(\"index\")} {\n let outputIndex = index / ${e};\n let reduceLength = ${t()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + ${e}) {\n let candidate = getX(${o()} k);\n if (!isnan(candidate) && candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = k;\n }\n }\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = bestIndex;\n workgroupBarrier();\n\n var reduceSize = min(u32(reduceLength), ${e}u);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = xBestIndices[localId.x + interval];\n }\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n setOutputAtIndexI32(outputIndex, xBestIndices[localId.x]);\n }\n }\n `:`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${o()} 0);\n let reduceLength = ${t()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${o()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Cr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let l=new oc(p.shape,a[0],\"max\"),c=[{type:\"float32\",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(l,[p],\"int32\",c);return u.forEach(d=>t.disposeData(d.dataId)),m}var bW={kernelName:na,backendName:\"webgpu\",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Cr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let l=new oc(p.shape,a[0],\"min\"),c=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(l,[p],\"int32\",c);return u.forEach(d=>t.disposeData(d.dataId)),m}var CW={kernelName:sa,backendName:\"webgpu\",kernelFunc:Ppe};var Ope=ye({opType:Z.ASIN}),wW={kernelName:Cn,backendName:\"webgpu\",kernelFunc:Ope};var Mpe=ye({opType:Z.ASINH}),SW={kernelName:wn,backendName:\"webgpu\",kernelFunc:Mpe};var Lpe=ye({opType:Z.ATAN}),IW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:Lpe};var Bpe=tt({opType:fe.ATAN2}),vW={kernelName:vn,backendName:\"webgpu\",kernelFunc:Bpe};var zpe=ye({opType:Z.ATANH}),kW={kernelName:In,backendName:\"webgpu\",kernelFunc:zpe};var yx=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let xRCCorner = coords.yz * uniforms.strides;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n let value = getX(batch, xRCorner, xCCorner, d);\n setOutputAtIndex(index, value);\n }\n }\n `}};var Ka=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"((batch * uniforms.xShape[1] + xR) * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"(xR * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"wR * uniforms.filterDims.y + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n let xRCCorner = vec2(coords.yz) * uniforms.strides - uniforms.pads;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilations.x) {\n let xR = xRCorner + wR;\n\n if (xR < 0 || xR >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + uniforms.dilations.y) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.y) {\n continue;\n }\n\n let value = getX(batch, xR, xC, d);\n ${e}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}},$u=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue += value; count += 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"(((batch * uniforms.xShape.y + xD) * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"((xD * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"wD * uniforms.filterDims.y * uniforms.filterDims.y + wR * uniforms.filterDims.z + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let xCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xDCorner = xCorner.x;\n let xRCorner = xCorner.y;\n let xCCorner = xCorner.z;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wD = 0; wD < uniforms.filterDims.x; wD++) {\n let xD = xDCorner + wD;\n if (xD < 0 || xD >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims.y; wR++) {\n let xR = xRCorner + wR;\n if (xR < 0 || xR >= uniforms.convDims.y) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.z; wC++) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.z) {\n continue;\n }\n\n let value = getX(batch, xD, xR, xC, ch);\n ${e}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}};function zv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return ao(n,s,a,\"max\",t)}var NW={kernelName:os,backendName:\"webgpu\",kernelFunc:zv};function Vv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,\"mean\",t)}var TW={kernelName:ss,backendName:\"webgpu\",kernelFunc:Vv};function bx(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return Pt({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type===\"VALID\"){let a=r.shape.length,i=le({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=Vv({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=zv({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=le({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new yx(e):(t===\"avg\"?n=new Ka(e,\"avg\"):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Ka(e,\"max\")),s.push({type:\"int32\",data:[e.padInfo.top,e.padInfo.left]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]},{type:\"int32\",data:[e.inHeight,e.inWidth]},{type:\"int32\",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Vpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,l=C.computePool2DInfo(n.shape,s,a,1,i,p);return bx(n,l,\"avg\",t)}var _W={kernelName:kn,backendName:\"webgpu\",kernelFunc:Vpe};function Wpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new $u(c,\"avg\"),d=[{type:\"int32\",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.inDepth,c.inHeight,c.inWidth]},{type:\"int32\",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var EW={kernelName:aa,backendName:\"webgpu\",kernelFunc:Wpe};var Cx=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR = wR + uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC = wC + uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n\n dotProd = dotProd + dyValue * uniforms.avgMultiplier;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},wx=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n dotProd += dyValue * uniforms.avgMultiplier;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Upe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=C.computePool3DInfo(a.shape,i,p,1,u,l),m=new wx(c),d=1/(c.filterDepth*c.filterHeight*c.filterWidth),f=[{type:\"int32\",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:\"int32\",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:\"int32\",data:[c.outDepth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"float32\",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var $W={kernelName:Vi,backendName:\"webgpu\",kernelFunc:Upe};function Gpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;wm([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=new Cx(l),m=1/(l.filterHeight*l.filterWidth),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.dilationHeight,l.dilationWidth]},{type:\"int32\",data:[l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"float32\",data:[m]}];return t.runWebGPUProgram(c,[n],a.dtype,d)}var RW={kernelName:zi,backendName:\"webgpu\",kernelFunc:Gpe};function Hpe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Op({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var DW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:Hpe};var Sx=class{constructor(e,t){this.variableNames=[\"source\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=ft(this.rank),t=Kpe(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>\"sourceLoc = uniforms.start + coords;\"):o=this.outputShape.map((s,a)=>`sourceLoc.${Wv[a]} = uniforms.start.${un(a)} + coords.${Wv[a]};`),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${e};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${t}));\n }\n }\n `}},Wv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function Kpe(r){if(r===1)return\"sourceLoc\";if(r<=6)return Wv.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function ea(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=nt.parseSliceParams(n,s,a);if(nt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let c=t.tensorMap.get(n.dataId),m=nW(c.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Sx(i,p),l=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,l)}var AW={kernelName:_s,backendName:\"webgpu\",kernelFunc:ea};var qpe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,w)=>b*w),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=[],f=le({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Cr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=le({inputs:{x:h},backend:t,attrs:{shape:l}}),x=ea({inputs:{x:g},backend:t,attrs:{begin:c,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},FW={kernelName:ia,backendName:\"webgpu\",kernelFunc:qpe};var jpe=`\n fn bincount_write(index: i32, value: f32) {\n ${oo(\"&result[index]\",\"value\",\"float32\")}\n }\n`,Xpe=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,nc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"binCountSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push(\"w\"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return`\n ${this.binaryOutput?Xpe:jpe}\n ${G(\"index\")} {\n ${this.rank===1?`if (index < uniforms.xShape) {\n let indexVal = i32(getX(index));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"getW(index)\":\"1.\"};\n bincount_write(indexVal, value);\n }\n }`:`let coord = getCoordsFromIndex(index);\n if (coordsInBounds2D(coord, uniforms.xShape)) {\n let indexVal = i32(getX(coord[0], coord[1]));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"getW(coord[0], coord[1])\":\"1.\"};\n bincount_write(coord.x * uniforms.binCountSize + indexVal, value);\n }\n }`}\n }\n `}};function Ype(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,l=[a],c=s.dtype,m=Nt({backend:t,attrs:{shape:l,value:0,dtype:c}}),d=new nc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,c,f,m)}var PW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:Ype};var Ix=class{constructor(e){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"broadcastArgs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var s0 = 1.0;\n var s1 = 1.0;\n let indexS0 = index - uniforms.size + uniforms.s0Size;\n let indexS1 = index - uniforms.size + uniforms.s1Size;\n if (indexS0 >= 0) {\n s0 = getS0(indexS0);\n }\n if (indexS1 >= 0) {\n s1 = getS1(indexS1);\n }\n\n if (s0 == 1.0) {\n setOutputAtIndex(index, s1);\n } else if (s1 == 1.0) {\n setOutputAtIndex(index, s0);\n } else if (s0 != s1) {\n setOutputAtIndex(index, uniforms.NAN);\n } else {\n setOutputAtIndex(index, s0);\n }\n }\n }\n `}};function Qpe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let l=t.tensorMap.get(o.dataId),c=t.tensorMap.get(n.dataId),m=l.values,d=c.values,f=C.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],\"int32\",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new Ix(i),u=[{type:\"int32\",data:[s]},{type:\"int32\",data:[a]}];return t.runWebGPUProgram(p,[o,n],\"int32\",u)}var OW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Qpe};var Uv=tt({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:ZV}),MW={kernelName:Ro,backendName:\"webgpu\",kernelFunc:Uv};function Fi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Pt({inputs:{x:n.complexTensorInfos.real},backend:t})}var LW={kernelName:si,backendName:\"webgpu\",kernelFunc:Fi};function BW(r,e){let t=new so(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Gv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Pt({inputs:{x:n},backend:t});let a=Yr(n.shape),i=Gv({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Uo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=Fi({inputs:{input:n},backend:t}),i=Gv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Pt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=DV(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return BW(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=Uv({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var zW={kernelName:ho,backendName:\"webgpu\",kernelFunc:Gv};var Zpe=ye({opType:Z.CEIL,cpuKernelImpl:AV}),VW={kernelName:go,backendName:\"webgpu\",kernelFunc:Zpe};var vx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue = clamp(\n value, vec4(uniforms.minVal), vec4(uniforms.maxVal));\n clampedValue = select(clampedValue, value, isnanVec4(value));\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var kx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n if (isnan(value)) {\n setOutputAtIndex(index, value);\n return;\n }\n setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal));\n }\n }\n `}};function Jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:\"float32\",data:[s]},{type:\"float32\",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new vx(n.shape):i=new kx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var WW={kernelName:Go,backendName:\"webgpu\",kernelFunc:Jpe};var Nx=class{constructor(e){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"complexAbs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let re = abs(getRealByOutputIndex(index));\n let im = abs(getImagByOutputIndex(index));\n let mx = max(re, im);\n\n // The length function in wgsl may be not underflow-safe on some GPUs.\n // So the safe solution is to ensure underflow-safety in all cases.\n setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0));\n }\n }\n `}};function UW(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function ele(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.tensorMap.get(o.dataId),s=new Nx(o.shape),a=[UW(o,n.complexTensorInfos.real),UW(o,n.complexTensorInfos.imag)];return t.runWebGPUProgram(s,a,a[0].dtype)}var GW={kernelName:Wi,backendName:\"webgpu\",kernelFunc:ele};var Tx=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;sFi({inputs:{input:w},backend:t})),h=r.map(w=>Mp({inputs:{input:w},backend:t})),g=sc(f,e,t),x=sc(h,e,t),b=Uo({inputs:{real:g,imag:x},backend:t});return f.forEach(w=>t.disposeData(w.dataId)),h.forEach(w=>t.disposeData(w.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(e))];return le({inputs:{x:k},backend:t,attrs:{shape:E}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=C.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=FV(h,g,o,x),w=C.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(w,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new Tx(p),l=[],c=new Array(p.length-1);if(c.length>0){c[0]=p[0][1],l.push({type:\"int32\",data:[c[0]]});for(let f=1;ft.disposeData(f.dataId));let d=le({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function tle(r,e,t){let o=C.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>le({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function Hv(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Pt({inputs:{x:p[0]},backend:t}):sc(p,s,t)}var KW={kernelName:pa,backendName:\"webgpu\",kernelFunc:Hv};function rle(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let l=D=>{switch(D){case 1:return\"resData = f32(x[xIndex]);\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = vec4(x[xIndex / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},c=D=>{switch(D){case 1:return\"return f32(W[row * uniforms.wShape[3] + col]);\";case 4:return\"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},m=r?`\n let coord = vec4(batch, xRow, xCol, xCh);\n `:`\n let coord = vec4(batch, xCh, xRow, xCol);\n `,d=r?`\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n `:`\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `,f=r?\"uniforms.xShape[1]\":\"uniforms.xShape[2]\",h=r?\"uniforms.xShape[2]\":\"uniforms.xShape[3]\",g=r?\"row\":\"col\",x=r?\"col\":\"row\",b=`\n let inChannels = uniforms.wShape[2];\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n let outRow = ${g} / outWidth;\n let outCol = ${g} % outWidth;\n\n let WRow = ${x} / (uniforms.filterDims[1] * inChannels);\n let WCol = ${x} / inChannels % uniforms.filterDims[1];\n let xRow = outRow * uniforms.strides[0] + uniforms.dilations[0] * WRow - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * WCol - uniforms.pads[1];\n let xCh = ${x} % inChannels;\n var resData = ${Ae(i)}(0.0);\n // The bounds checking is always needed since we use it to pad zero for\n // the 'same' padding type.\n if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) {\n ${m}\n let xIndex = getIndexFromCoords4D(coord, uniforms.xShape);\n ${l(i)}\n }\n return resData;`,w=r?e&&o?`\n ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&t?`\n ${b}`:`\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${Ae(i)}(0.0);`,S=`${c(p)}`,k=Ae(u),T=r?Ae(i):Ae(p),E=r?Ae(p):Ae(i);return`\n ${gr(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${T} {\n ${r?w:S}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${E} {\n ${r?S:w}\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\n {\n var value = valueIn;\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n ${d}\n ${no(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var _x=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=ym(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=bm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push(\"bias\"),this.variableComponents.push(4)),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push(\"bias\"),i&&this.variableNames.push(\"preluActivationWeights\")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Pp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${rle(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var Ex=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,\",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return`\n ${gr(this.activation,this.hasPreluActivationWeights,!1,4)}\n fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{\n let coords = vec4(batch, row, col, chan);\n if (coordsInBounds4D(coords, uniforms.xShape)) {\n return getX(batch, row, col, chan);\n } else {\n return 0.0;\n }\n }\n fn readFilt(row : i32, col : i32, xChannel : i32, outChannel : i32) -> f32{\n let coords = vec4(row, col, xChannel, outChannel);\n if(coordsInBounds4D(coords, uniforms.wShape)) {\n return getW(row, col, xChannel, outChannel);\n } else {\n return 0.0;\n }\n }\n fn writeResult(batch : i32, row : i32, col : i32, chan : i32, valueIn : f32) {\n let coords = ${this.isChannelsLast?\"vec4(batch, row, col, chan);\":\"vec4(batch, chan, row, col);\"}\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = valueIn;\n ${no(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${G(\"index\")} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let outChannel = ${this.isChannelsLast?\"coords[3];\":\"coords[1];\"}\n let outRow = ${this.isChannelsLast?\"coords[1];\":\"coords[2];\"}\n let outCol = ${this.isChannelsLast?\"coords[2];\":\"coords[3];\"}\n var acc : f32 = 0.0;\n for (var row = 0; row < uniforms.filterDims[0]; row = row + 1) {\n for (var col = 0; col < uniforms.filterDims[1]; col = col + 1) {\n let xRow = outRow * uniforms.strides[0] + uniforms.dilations[0] * row - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * col - uniforms.pads[1];\n for (var xChannel = 0; xChannel < ${this.isChannelsLast?\"uniforms.xShape[3];\":\"uniforms.xShape[1];\"} xChannel = xChannel + 1) {\n ${this.isChannelsLast?\"let v = readInp(batch, xRow, xCol, xChannel);\":\"let v = readInp(batch, xChannel, xRow, xCol);\"}\n let f = readFilt(row, col, xChannel, outChannel);\n acc = acc + v * f;\n }\n }\n }\n writeResult(batch, outRow, outCol, outChannel, acc);\n }\n `}};var $x=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32,\n inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?\"coords[1]\":\"coords[2]\",n=this.isChannelsLast?\"coords[2]\":\"coords[1]\",s=this.isChannelsLast?\"getX(batch, xRow, xCol, ch)\":\"getX(batch, ch, xRow, xCol)\";return`\n ${G(\"index\")} {\n let coords = getCoordsFromIndex(index);\n if(index < uniforms.size) {\n let batch = coords[0];\n let row = ${o};\n let col = ${n};\n let offsetY = (row / uniforms.outWidth) * uniforms.strides[0] - uniforms.pads[0];\n let xRow = offsetY + uniforms.dilations[0] * (col / uniforms.itemsPerBlockRow);\n var value = 0.0;\n if(xRow < uniforms.xShape[${e}] && xRow >= 0) {\n let offsetX = (row % uniforms.outWidth) * uniforms.strides[1] -\n uniforms.pads[1];\n let xCol = offsetX + uniforms.dilations[1] * ((col %\n uniforms.itemsPerBlockRow) / uniforms.inChannels);\n let ch = col % uniforms.inChannels;\n if(xCol < uniforms.xShape[${t}] && xCol >= 0) {\n value = ${s};\n }\n }\n setOutputAtIndex(index, value);\n }\n }\n `}};function Rx(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function ole({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat===\"channelsLast\",u=!p,l=!1,c=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=[],d,f;if(c){let x=t.inHeight*t.inWidth*t.inChannels;d=le({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=le({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=le({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=le({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=Rx(s.shape,p);x!=null&&(s=le({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=Rx(n.shape,p);x!=null&&(n=le({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=Op({a:p?d:f,b:p?f:d,transposeA:u,transposeB:l,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=le({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function nle({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:l,strideWidth:c,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,w=b===\"channelsLast\",S=p*u*l,k=h*f,T=w?[t.batchSize,k,S]:[t.batchSize,S,k],E=new $x(T,w),R=[{type:\"int32\",data:[d.top,d.left]},{type:\"int32\",data:[m,c]},{type:\"int32\",data:[x,g]},{type:\"int32\",data:[f]},{type:\"int32\",data:[l*p]},{type:\"int32\",data:[l]}],D=o.runWebGPUProgram(E,[r],r.dtype,R),F=[];F.push(D);let O=le({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(F.push(O),s!=null){let U=Rx(s.shape,w);U!=null&&(s=le({inputs:{x:s},backend:o,attrs:{shape:U}}),F.push(s))}if(n!=null){let U=Rx(n.shape,w);U!=null&&(n=le({inputs:{x:n},backend:o,attrs:{shape:U}}),F.push(n))}let B=Op({a:w?D:O,b:w?O:D,transposeA:!w,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=le({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});F.push(B);for(let U of F)o.disposeData(U.dataId);return z}function Dx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,l=t.dataFormat===\"channelsLast\",c=l&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(c||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type===\"SAME\"||t.padInfo.type===\"VALID\")))return ole({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return nle({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:\"int32\",data:[t.filterHeight,t.filterWidth]},{type:\"int32\",data:[...x]},{type:\"int32\",data:[t.strideHeight,t.strideWidth]},{type:\"int32\",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new Ex(t,p,i,u);else{let T=l?t.outHeight*t.outWidth:t.outChannels,E=l?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:\"int32\",data:[T]},{type:\"int32\",data:[E]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new _x(t,T,E,R,p,i,u,D)}let w=[],S=[r,e];p&&(!l&&n.shape.length===1&&(n=le({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),w.push(n)),S.push(n)),u&&(!l&&s.shape.length===1&&(s=le({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),w.push(s)),S.push(s)),i===\"leakyrelu\"&&(b.push({type:\"float32\",data:[a]}),g.uniforms+=\" alpha : f32,\");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let T of w)o.disposeData(T.dataId);return k}function sle(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=t,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c);return Dx({x:n,filter:s,convInfo:m,backend:o})}var qW={kernelName:En,backendName:\"webgpu\",kernelFunc:sle};var Ax=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,\",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=`\n ${G()} {\n let batch = i32(globalId.z) / uniforms.outShape[1];\n let r = i32(globalId.z) % uniforms.outShape[1];\n let c = i32(globalId.y) * ${this.workPerThread};\n let d1 = i32(globalId.x) * 4;\n\n let dyCorner = vec2(r, c) - uniforms.pads;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd: array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = f32(dyCorner.x + wR) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) ||\n fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = f32(dyCorner.y + wC) / f32(uniforms.strides.y);\n let dyC2 = f32(dyCorner.y + 1 + wC) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n var bDyCVal = true;\n var bDyCVal2 = true;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0) {\n bDyCVal = false;\n }\n if (dyC2 < 0.0 || dyC2 >= f32(uniforms.outBackprop[2]) ||\n fract(dyC2) > 0.0) {\n bDyCVal2 = false;\n }\n\n let idyC = i32(dyC);\n let idyC2 = i32(dyC2);\n if (bDyCVal && bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n xValue = getDy(batch, idyR, idyC2, d2);\n dotProd[1] = dotProd[1] + vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n }\n } else if (bDyCVal) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n }\n } else if (bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC2, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[1] = dotProd[1] + tmpval;\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], dotProd[i]);\n }\n }\n }\n `;return this.isVec4?`\n ${n}\n `:`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[${o}];\n\n let dyCorner = vec2(coords[${e}], coords[${t}]) - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = (f32(dyRCorner) + f32(wR)) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) || fract(dyR) > 0.0 ||\n wRPerm < 0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = (f32(dyCCorner) + f32(wC)) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0 || wCPerm < 0) {\n continue;\n }\n let idyC = i32(dyC);\n\n for (var d2 = 0; d2 < uniforms.outBackprop[3]; d2 = d2 + 1) {\n let xValue = ${this.isChannelsLast?\"getDy(batch, idyR, idyC, d2)\":\"getDy(batch, d2, idyR, idyC)\"};\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Fx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=\"pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let d2 = coords[3];\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b = b + 1) {\n for (var yR = 0; yR < uniforms.outHeight; yR = yR + 1) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC = yC + 1) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n if (${this.isChannelsLast}) {\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd = dotProd + xValue * dyValue;\n } else {\n let dyValue = getDy(b, d2, yR, yC);\n let xValue = getX(b, d1, xR, xC);\n dotProd = dotProd + xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Px=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32,\n outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wF = coords.x;\n let wR = coords.y;\n let wC = coords.z;\n let d1 = coords.w;\n let d2 = coords.u;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yF = 0; yF < uniforms.outDepth; yF++) {\n let xF = wF + yF * uniforms.strides[0] - uniforms.pads[0];\n if (xF < 0 || xF >= uniforms.inDepth) {\n continue;\n }\n\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[1] - uniforms.pads[1];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[2] - uniforms.pads[2];\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yF, yR, yC, d2);\n let xValue = getX(b, xF, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Ox=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let d1 = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyFCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let dyF = f32(dyFCorner + wF) / f32(uniforms.strides[0]);\n if (dyF < 0.0 || dyF >= f32(uniforms.outDepth) || fract(dyF) > 0.0) {\n continue;\n }\n let idyF = i32(dyF);\n\n let wFPerm = uniforms.filterDims[0] - 1 - wF;\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n let wRPerm = uniforms.filterDims[1] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let wCPerm = uniforms.filterDims[2] - 1 - wC;\n\n for (var d2 = 0; d2 < uniforms.outChannels; d2++) {\n let xValue = getDy(batch, idyF, idyR, idyC, d2);\n let wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function ale(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,l,a,1,i,u,!1,c),d=new Fx(m),f=[{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]},{type:\"int32\",data:[m.inHeight]},{type:\"int32\",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var jW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:ale};function ile(r=4){let e=s=>{switch(s){case 1:return\"return W[getIndexFromCoords4D(coord, uniforms.wShape)];\";case 4:return`\n let coord1 = vec4(coordX, coordY, col + 1, rowInner);\n let coord2 = vec4(coordX, coordY, col + 2, rowInner);\n let coord3 = vec4(coordX, coordY, col + 3, rowInner);\n let v0 = W[getIndexFromCoords4D(coord, uniforms.wShape)];\n let v1 = W[getIndexFromCoords4D(coord1, uniforms.wShape)];\n let v2 = W[getIndexFromCoords4D(coord2, uniforms.wShape)];\n let v3 = W[getIndexFromCoords4D(coord3, uniforms.wShape)];\n return vec4(v0, v1, v2, v3);\n `;default:throw new Error(`innerElementSize ${s} is not supported.`)}},o=`if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${`\n let outRow = row / uniforms.outShape[2];\n let outCol = row % uniforms.outShape[2];\n\n let WRow = col / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let WCol = col / uniforms.outBackprop[3] % uniforms.filterDims[1];\n let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.strides[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n let coord = vec4(\n batch,\n i32(xR),\n i32(xC),\n col % uniforms.outBackprop[3]);\n return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`}\n }\n return ${Ae(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n let coordX = uniforms.filterDims.x - 1 -\n row / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let coordY = uniforms.filterDims.y - 1 -\n (row / uniforms.outBackprop[3]) % uniforms.filterDims[1];\n if (row < uniforms.dimInner && col < uniforms.dimBOuter &&\n coordX >= 0 && coordY >= 0) {\n let rowInner = row % uniforms.outBackprop[3];\n let coord = vec4(coordX, coordY, col, rowInner);\n ${e(r)}\n }\n return ${Ae(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n var value = valueInput;\n let outCoord = vec4(\n batch,\n row / uniforms.outShape[2],\n row % uniforms.outShape[2],\n col);\n result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value;\n }\n }`}var Mx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.inShape,y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=ym(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=bm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize):Pp(this.elementsPerThread,this.workgroupSize);return`\n ${ile(this.isVec4?4:1)}\n ${e}\n `}};function ule(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(u),m=C.computeConv2DInfo(a,s.shape,i,1,p,l,!1,c),d=[{type:\"int32\",data:[m.filterHeight,m.filterWidth]},{type:\"int32\",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.dataFormat!==\"channelsLast\")f=new Ax(m);else{f=new Mx(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:\"uint32\",data:[h]},{type:\"uint32\",data:[g]},{type:\"uint32\",data:[x]})}return t.runWebGPUProgram(f,[n,s],\"float32\",d)}var XW={kernelName:$n,backendName:\"webgpu\",kernelFunc:ule};var Lx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3dnaive\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords.x;\n let d2 = coords.u;\n\n let xFRCCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xFCorner = xFRCCorner.x;\n let xRCorner = xFRCCorner.y;\n let xCCorner = xFRCCorner.z;\n\n let inputDepthNearestVec4 = (uniforms.xShape.u / 4) * 4;\n let inputDepthVec4Remainder = uniforms.xShape.u % 4;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let xF = xFCorner + wF * uniforms.dilations[0];\n if (xF < 0 || xF >= uniforms.xShape.y) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let xR = xRCorner + wR * uniforms.dilations[1];\n if (xR < 0 || xR >= uniforms.xShape.z) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let xC = xCCorner + wC * uniforms.dilations[2];\n if (xC < 0 || xC >= uniforms.xShape.w) {\n continue;\n }\n\n for (var d1 = 0; d1 < inputDepthNearestVec4; d1 += 4) {\n let xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n let wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (inputDepthVec4Remainder == 1) {\n dotProd += getX(batch, xF, xR, xC, inputDepthNearestVec4) *\n getW(wF, wR, wC, inputDepthNearestVec4, d2);\n } else if (inputDepthVec4Remainder == 2) {\n let xValues = vec2(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)\n );\n let wValues = vec2(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (inputDepthVec4Remainder == 3) {\n let xValues = vec3(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)\n );\n let wValues = vec3(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }`}};function ple(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeConv3DInfo(n.shape,s.shape,a,p,i),l=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...l]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new Lx(u),d=pt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,c)}var YW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:ple};function lle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=C.computeConv3DInfo(n.shape,p,a,1,i),l=new Px(u),c=[{type:\"int32\",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.batchSize]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.inDepth]},{type:\"int32\",data:[u.inHeight]},{type:\"int32\",data:[u.inWidth]}];return t.runWebGPUProgram(l,[n,s],s.dtype,c)}var QW={kernelName:ti,backendName:\"webgpu\",kernelFunc:lle};function cle(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=C.computeConv3DInfo(p,s.shape,a,1,i),l=new Ox(u),c=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.outChannels]}];return t.runWebGPUProgram(l,[n,s],n.dtype,c)}var ZW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:cle};var mle=ye({opType:Z.COS}),JW={kernelName:An,backendName:\"webgpu\",kernelFunc:mle};var dle=ye({opType:Z.COSH}),eU={kernelName:Fn,backendName:\"webgpu\",kernelFunc:dle};var Bx=class{constructor(e,t,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n===\"bilinear\"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${e} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${t} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${t}`];return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let height_ratio = f32(${o});\n let width_ratio = f32(${a});\n let b = coords[0];\n let y = coords[1];\n let x = coords[2];\n let d = coords[3];\n // get box vals\n let y1 = getBoxes(b, 0);\n let x1 = getBoxes(b, 1);\n let y2 = getBoxes(b, 2);\n let x2 = getBoxes(b, 3);\n // get image in batch index\n let bInd = i32(round(getBoxInd(b)));\n if(bInd < 0 || bInd >= uniforms.outShape[0]) {\n return;\n }\n let height_scale = ${n};\n let width_scale = ${i};\n let in_y = ${s};\n if( in_y < 0.0 || in_y > ${e} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let sourceFracIndexCR = vec2(in_x,in_y);\n if(${this.methodId} == 1) {\n // Compute the four integer indices.\n let sourceFloorCR = vec2(sourceFracIndexCR);\n let sourceCeilCR = vec2(ceil(sourceFracIndexCR));\n let topLeft = getImage(bInd, sourceFloorCR.y, sourceFloorCR.x, d);\n let bottomLeft = getImage(bInd, sourceCeilCR.y, sourceFloorCR.x, d);\n let topRight = getImage(bInd, sourceFloorCR.y, sourceCeilCR.x, d);\n let bottomRight = getImage(bInd, sourceCeilCR.y, sourceCeilCR.x, d);\n let fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n let top = topLeft + (topRight - topLeft) * fracCR.x;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n let newValue = top + (bottom - top) * fracCR.y;\n setOutputAtIndex(index, newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n let sourceNearestCR = vec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n let newValue = getImage(\n bInd, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutputAtIndex(index, newValue);\n }\n }\n }\n `}};var fle=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,l=new Bx(n.shape[3],s.shape,i,p),c=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(l,[n,s,a],\"float32\",c)},tU={kernelName:Mn,backendName:\"webgpu\",kernelFunc:fle};var Lp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Lp||(Lp={}));var Tm=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Lp.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${rU(e,\"coords\",this.op)})`,n=this.outputShape[this.outputShape.length-1],s=\"\",a=\"\";return this.exclusive?(s=this.reverse?`end != ${n-1}`:\"end != 0\",a=this.reverse?\"end + 1\":\"end - 1\"):(s=this.reverse?`end + pow2 < ${n}`:\"end >= pow2\",a=this.reverse?\"end + pow2\":\"end - pow2\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${oU(e,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${oU(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${rU(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function rU(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function oU(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function zx(r,e,t,o,n,s){let a=e.shape.length,i=C.getAxesPermutation([o],a),p=e;i!=null&&(p=Cr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=C.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let l=p.shape[u],c=Pt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(l))-1;m++){let d=new Tm(r,p.shape,!1,s),f=c,h=[{type:\"float32\",data:[m]}];c=t.runWebGPUProgram(d,[c],c.dtype,h),t.disposeData(f.dataId)}if(n){let m=new Tm(r,p.shape,n,s),d=c,f=[{type:\"float32\",data:[0]}];c=t.runWebGPUProgram(m,[c],c.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=C.getUndoAxesPermutation(i),d=Cr({inputs:{x:c},backend:t,attrs:{perm:m}});return t.disposeData(c.dataId),t.disposeData(p.dataId),d}return c}function hle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zx(Lp.Prod,n,t,s,a,i)}var nU={kernelName:Pn,backendName:\"webgpu\",kernelFunc:hle};function gle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zx(Lp.Sum,n,t,s,a,i)}var sU={kernelName:On,backendName:\"webgpu\",kernelFunc:gle};function xle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,l=y.sizeFromShape(s.shape)>0,c=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=Nt({backend:t,attrs:{shape:d,value:0,dtype:c}}),h=new nc(m,l,i),g=[{type:\"int32\",data:[a]}],x=l?[n,s]:[n];return t.runWebGPUProgram(h,x,c,g,f)}var aU={kernelName:la,backendName:\"webgpu\",kernelFunc:xle};var Vx=class{constructor(e,t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let h = ${this.getHeightCoordString()};\n let w = ${this.getWidthCoordString()};\n let d = ${this.getDepthCoordString()};\n\n let in_h = h / uniforms.blockSize;\n let offset_h = h % uniforms.blockSize;\n let in_w = w / uniforms.blockSize;\n let offset_w = w % uniforms.blockSize;\n let offset_d = (offset_h * uniforms.blockSize + offset_w) *\n ${this.getOutputDepthSize()};\n let in_d = d + offset_d;\n\n let rlt = ${this.getInputSamplingString()};\n setOutputAtIndex(index, rlt);\n }\n }`}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\"?\"uniforms.outShape[3]\":\"uniforms.outShape[1]\"}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function yle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],l=a===\"NHWC\"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a===\"NHWC\"?[i,c,m,d]:[i,d,c,m],h=[{type:\"int32\",data:[s]}],g=new Vx(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var iU={kernelName:Ln,backendName:\"webgpu\",kernelFunc:yle};var Wx=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push(\"bias\"),a&&this.variableNames.push(\"preluActivationWeights\"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return`\n ${gr(this.activation,this.hasPreluActivation,!1,4)}\n\n var mm_Asub : array, ${o}>;\n var mm_Bsub : array, ${this.filterHeight}>;\n fn readX(batch : i32, channel : i32, row : i32, col : i32) -> f32 {\n var value = 0.0;\n if (row >=0 && row < uniforms.inDims[0] && col >=0 && col < uniforms.inDims[1])\n {\n value = getX(batch, channel, row, col);\n }\n return value;\n }\n\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pads;\n let channelMul = uniforms.wShape[3];\n let d1 = coords[1] / channelMul;\n let q = coords[1] % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n\n // Load one tile of X into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workgroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) {\n let rowOffset = inputRow - localRow;\n let colOffset = inputCol - localCol;\n mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset);\n }\n }\n\n // Load one tile of W into local memory.\n var wIndex = i32(localIndex);\n ${e, inDims : vec2, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return`\n ${gr(this.activation,this.hasPreluActivation,!0,4)}\n fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 {\n var value = vec4(0.0);\n if (col >=0 && col < uniforms.inDims[1]) {\n value = getX(batch, row, col, channel);\n }\n return value;\n }\n\n ${G(\"index\")} {\n let width0 = uniforms.outShape[3] / ${this.outputComponent};\n let d1 = (index % width0) * ${this.outputComponent};\n var index1 = index / width0;\n let width1 = uniforms.virtualWidth / ${this.workPerThread};\n let c = (index1 % width1) * ${this.workPerThread};\n index1 = index1 / width1;\n let r = index1 % uniforms.outShape[1];\n let batch = index1 / uniforms.outShape[1];\n\n let xRCCorner = vec2(r, c) * vec2(${t}, ${o}) - uniforms.pads;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${e}>;\n var dotProd : array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n\n // Use constant instead of uniform can give better performance.\n for (var wR = 0; wR < ${this.convInfo.filterHeight}; wR = wR + 1) {\n let xR = xRCorner + wR;\n if (xR >=0 && xR < uniforms.inDims[0]) {\n for (var i = 0; i < ${e}; i++) {\n xVals[i] = readX(batch, xR, xCCorner + i, d1);\n }\n for (var wC = 0; wC < ${this.convInfo.filterWidth}; wC = wC + 1) {\n let wValue = getW(wR, wC, d1, 0);\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = fma(xVals[i * ${o} + wC], wValue, dotProd[i]);\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = dotProd[i];\n ${no(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var ic=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?\"getX(batch, xR, xC, d1);\":\"getX(batch, d1, xR, xC);\";return`\n ${gr(this.activation,this.hasPreluActivation,!1,4)}\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.${this.isChannelsLast?\"yz\":\"zw\"}) * uniforms.strides - uniforms.pads;\n let d2 = coords[${this.isChannelsLast?3:1}];\n let channelMul = uniforms.wShape[3];\n let d1 = d2 / channelMul;\n let q = d2 % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n let inputRowEnd = inputRowStart + uniforms.filterHeight *\n uniforms.dilations[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilations[1];\n\n // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get\n // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all\n // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC.\n // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW.\n var value = 0.0;\n\n // Extract if checking out of for loop for performance.\n if (inputRowStart >= 0 && inputColStart >= 0 &&\n inputRowEnd < uniforms.inDims[0] &&\n inputColEnd < uniforms.inDims[1]) {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilations[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[1];\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n } else {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilations[0];\n\n if (xR < 0 || xR >= uniforms.inDims[0]) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[1];\n\n if (xC < 0 || xC >= uniforms.inDims[1]) {\n continue;\n }\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n }\n ${no(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function ble(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=C.computeConv2DInfo(n.shape,s.shape,a,m,i,l,!0,c),f=[{type:\"int32\",data:[d.padInfo.top,d.padInfo.left]},{type:\"int32\",data:[d.inHeight,d.inWidth]}],h=d.dataFormat===\"channelsLast\",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new Wx(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?(g=new ac(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new ic(d),f.push({type:\"int32\",data:[d.filterHeight]},{type:\"int32\",data:[d.filterWidth]},{type:\"int32\",data:[d.strideHeight,d.strideWidth]},{type:\"int32\",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var uU={kernelName:Bn,backendName:\"webgpu\",kernelFunc:ble};var Ux=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32,\n outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_filter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let dm = coords[3];\n let d2 = d1 * uniforms.channelMul + dm;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Gx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_input\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[3];\n let dyCorner = coords.yz - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n\n let idyR = i32(dyR);\n let wRPerm = uniforms.filterDims[0] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n\n let idyC = i32(dyC);\n let wCPerm = uniforms.filterDims[1] - 1 - wC;\n\n for (var dm = 0; dm < uniforms.channelMul; dm++) {\n let d2 = d1 * uniforms.channelMul + dm;\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Cle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:l}=o,c=C.computeConv2DInfo(n.shape,l,a,i,p,u,!0),m=new Ux(c),d=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"int32\",data:[c.inHeight]},{type:\"int32\",data:[c.inWidth]},{type:\"int32\",data:[c.batchSize]},{type:\"int32\",data:[c.outChannels/c.inChannels]}];return t.runWebGPUProgram(m,[n,s],\"float32\",d)}var pU={kernelName:Gi,backendName:\"webgpu\",kernelFunc:Cle};function wle(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:l}=o,c=C.computeConv2DInfo(l,s.shape,a,i,p,u,!0),m=new Gx(c),d=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"int32\",data:[c.outChannels/c.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var lU={kernelName:Hi,backendName:\"webgpu\",kernelFunc:wle};var Hx=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"diag\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let value = select(0.0, getX(coords[0]), coords[0] == coords[1]);\n setOutputAtIndex(index, value);\n }\n }\n `}};function Sle(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=le({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Hx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=le({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var cU={kernelName:ca,backendName:\"webgpu\",kernelFunc:Sle};var Kx=class{constructor(e){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"dilation2d\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let neg_infinity = -3.4e38;\n let coords = getOutputCoords();\n let batch = coords.x;\n let d1 = coords.w;\n let outTopLeftCorner = coords.yz * uniforms.strides - uniforms.pads;\n let hBeg = outTopLeftCorner.x;\n let wBeg = outTopLeftCorner.y;\n\n var curVal = neg_infinity;\n for (var h = 0; h < uniforms.filterDims[0]; h = h + 1) {\n let hIn = hBeg + h * uniforms.dilations[0];\n\n if (hIn >= 0 && hIn < uniforms.xShape[1]) {\n for (var w = 0; w < uniforms.filterDims[1]; w = w + 1) {\n let wIn = wBeg + w * uniforms.dilations[1];\n\n if (wIn >= 0 && wIn < uniforms.xShape[2]) {\n let val = getX(batch, hIn, wIn, d1) + getW(h, w, d1);\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n setOutputAtIndex(index, curVal);\n }\n }\n `}};function Ile(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),l=[u.padInfo.top,u.padInfo.left],c=[{type:\"int32\",data:[u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...l]},{type:\"int32\",data:[u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationHeight,u.dilationWidth]}],m=new Kx(u);return t.runWebGPUProgram(m,[n,s],n.dtype,c)}var mU={kernelName:zn,backendName:\"webgpu\",kernelFunc:Ile};var qx=class{constructor(e,t){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!==\"float32\"&&t!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${t} type.`);this.type=t,this.shaderKey=\"dilation2DBackpropInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var xRMax = 0;\n var xCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n xRMax = xR;\n xCMax = xC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.xShape[3] *\n (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b));\n let value = getDy(b, r, c, d);\n ${oo(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}},jx=class{constructor(e,t,o){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"dilation2DBackpropFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var wRMax = 0;\n var wCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n wRMax = wR;\n wCMax = wC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]);\n let value = getDy(b, r, c, d);\n ${oo(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}};function vle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,l=C.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),c=s.dtype,m=new jx(l,s.shape,c),d=[{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.dilationHeight,l.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(l.outShape)]}],f=Nt({backend:t,attrs:{shape:s.shape,value:0,dtype:c}});return t.runWebGPUProgram(m,[n,s,a],c,d,f)}var dU={kernelName:qi,backendName:\"webgpu\",kernelFunc:vle};function kle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,l=C.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),c=n.dtype,m=new qx(l,c),d=[{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.dilationHeight,l.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(l.outShape)]}],f=Nt({backend:t,attrs:{shape:l.inShape,value:0,dtype:c}});return t.runWebGPUProgram(m,[n,s,a],c,d,f)}var fU={kernelName:Ki,backendName:\"webgpu\",kernelFunc:kle};var Xx=class{constructor(e,t,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=$i.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type===\"float32\"?\"value\":\"value / 255.0\";return e=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${t};\n rgba[1] = ${t};\n rgba[2] = ${t};\n } else {\n rgba[d] = ${t};\n }`,`\n @group(0) @binding(0) var outImage : texture_storage_2d<${this.textureFormat}, write>;\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var rgba = vec4(0.0, 0.0, 0.0, uniforms.alpha);\n for (var d = 0; d < uniforms.numChannels; d = d + 1) {\n let value = f32(inBuf[index * uniforms.numChannels + d]);\n ${e}\n }\n rgba.x = rgba.x * rgba.w;\n rgba.y = rgba.y * rgba.w;\n rgba.z = rgba.z * rgba.w;\n let coords = getCoordsFromIndex(index);\n textureStore(outImage, vec2(coords.yx), rgba);\n }\n }\n `}};function Nle(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},l=(u==null?void 0:u.alpha)||1,c=t.device.features.has(\"bgra8unorm-storage\")?\"bgra8unorm\":\"rgba8unorm\",m=[i,p],d=new Xx(m,n.dtype,c);s.width=p,s.height=i;let f=\"webgpu\",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",w=t.makeTensorInfo(m,b),S=t.tensorMap.get(w.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[l]}];if(t.runWebGPUProgram(d,[n],b,k,w),g){let T=s.getContext(\"2d\");if(!T)throw new Error(\"Please make sure this canvas has only been used for 2d or webgpu context!\");T.drawImage(g,0,0)}return t.disposeData(w.dataId),n}var hU={kernelName:Mu,backendName:\"webgpu\",kernelFunc:Nle};var Kv=tt({opType:fe.MUL,cpuKernelImpl:YV,supportsComplex:!0}),gU={kernelName:$o,backendName:\"webgpu\",kernelFunc:Kv};function qv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,\"sum\",t)}var xU={kernelName:As,backendName:\"webgpu\",kernelFunc:qv};function Tle(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=C.decodeEinsumEquation(n,s.length);C.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:l}=C.getEinsumComputePath(i,p),c=l.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=qv({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var yU={kernelName:ji,backendName:\"webgpu\",kernelFunc:Tle};var _le=ye({opType:Z.ELU}),bU={kernelName:Wn,backendName:\"webgpu\",kernelFunc:_le};var Ele=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Di(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},CU={kernelName:ri,backendName:\"webgpu\",kernelFunc:Ele};var $le=tt({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:PV}),wU={kernelName:xo,backendName:\"webgpu\",kernelFunc:$le};var Rle=ye({opType:Z.ERF}),SU={kernelName:Un,backendName:\"webgpu\",kernelFunc:Rle};var Dle=ye({opType:Z.EXP,cpuKernelImpl:OV,dtype:\"float32\"}),IU={kernelName:yo,backendName:\"webgpu\",kernelFunc:Dle};function Yx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),le({inputs:{x:s},backend:o,attrs:{shape:i}})}var vU={kernelName:ma,backendName:\"webgpu\",kernelFunc:Yx};var Ale=ye({opType:Z.EXPM1,cpuKernelImpl:MV}),kU={kernelName:bo,backendName:\"webgpu\",kernelFunc:Ale};var _m=class{constructor(e,t){this.variableNames=[\"real\",\"imag\"],this.outputShape=[],this.uniforms=\"exponentMultiplier : f32, denominator: f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return`\n fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 {\n ${this.component===\"real\"?\"return real * expR - imag * expI;\":\"return real * expI + imag * expR;\"}\n }\n\n fn mulMatDFT(batch: i32, index: i32) -> f32 {\n let indexRatio = f32(index) / f32(uniforms.realShape[1]);\n let exponentMultiplierTimesIndexRatio =\n uniforms.exponentMultiplier * indexRatio;\n\n var result = 0.0;\n\n for (var i = 0; i < uniforms.realShape[1]; i = i + 1) {\n // x = (-2|2 * PI / N) * index * i;\n let x = exponentMultiplierTimesIndexRatio * f32(i);\n let expR = cos(x);\n let expI = sin(x);\n let real = getReal(batch, i);\n let imag = getImag(batch, i);\n\n result = result +\n unaryOpComplex(real, expR, imag, expI) / uniforms.denominator;\n }\n\n return result;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n setOutputAtIndex(index, mulMatDFT(coords[0], coords[1]));\n }\n }\n `}};function Qx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=le({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,l=new _m(\"real\",u),c=new _m(\"imag\",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:\"float32\",data:[d]},{type:\"float32\",data:[f]}],g=t.runWebGPUProgram(l,m,\"float32\",h);i.push(g);let x=t.runWebGPUProgram(c,m,\"float32\",h);i.push(x);let b=Uo({inputs:{real:g,imag:x},backend:t});i.push(b);let w=le({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),w}function Fle(r){let{inputs:e,backend:t}=r,{input:o}=e;return Qx(o,!1,t)}var NU={kernelName:Xi,backendName:\"webgpu\",kernelFunc:Fle};var Zx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordX = uniforms.xShape[2] - coords[2] - 1;\n let outputValue = getX(coords[0], coords[1], coordX, coords[3]);\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var TU={kernelName:Gn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Zx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ple=ye({opType:Z.FLOOR,cpuKernelImpl:LV}),_U={kernelName:Co,backendName:\"webgpu\",kernelFunc:Ple};var Ole=tt({opType:fe.FLOOR_DIV,cpuKernelImpl:BV,dtype:\"int32\"}),EU={kernelName:wo,backendName:\"webgpu\",kernelFunc:Ole};var Jx=class{constructor(e,t,o=!1){this.pixelsOpType=$i.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?\"textureLoad(src, vec2(coords.yx));\":\"textureLoad(src, vec2(coords.yx), 0)\";return`\n @binding(1) @group(0) var src: ${this.importVideo?\"texture_external\":\"texture_2d\"};\n ${G(\"index\")} {\n let flatIndex = index * uniforms.numChannels;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n let values = ${e};\n for (var i = 0; i < uniforms.numChannels; i = i + 1) {\n result[flatIndex + i] = i32(floor(255.0 * values[i]));\n }\n }\n }\n `}};var $U={kernelName:Lu,backendName:\"webgpu\",kernelFunc:Mle},uc,jv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function Mle(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!=\"undefined\"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!=\"undefined\"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!=\"undefined\"&&n instanceof ImageBitmap,[l,c]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[c,l,s],d=A().getBool(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\")&&a,f=a||i;if(u||p||f){let b;if(d)b=t.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(uc==null||L!==jv)&&(jv=L,uc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:jv})),uc.canvas.width=l,uc.canvas.height=c,uc.drawImage(n,0,0,l,c),n=uc.canvas}let F=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M=t.textureManager.acquireTexture(m[1],m[0],\"rgba8unorm\",F);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let w=y.sizeFromShape(m),S=y.computeStrides(m),k=new Jx(m,s,d),T=[{type:\"uint32\",data:[w]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...S]}],E=t.makeTensorInfo([c,l],\"int32\"),R=t.tensorMap.get(E.dataId);R.resource=b;let D=t.runWebGPUProgram(k,[E],\"int32\",T);return t.disposeData(E.dataId),D}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,w=0;for(let S=0;S(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var RU={kernelName:Hn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,l=[o,a,i],c=null;s!=null&&(c=s.shape,l.push(s));let m=null;n!=null&&(m=n.shape,l.push(n));let d=new ey(o.shape,a.shape,i.shape,c,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,l,o.dtype,f)}};function Lle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:l,dilations:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=C.convertConv2DDataFormat(l),g=C.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!1,h);return Dx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var DU={kernelName:jo,backendName:\"webgpu\",kernelFunc:Lle};function Ble(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dimRoundingMode:c,activation:m,leakyreluAlpha:d}=o,f=l;f==null&&(f=[1,1]),y.assert(C.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=C.computeConv2DInfo(n.shape,s.shape,p,f,u,c,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let w=[{type:\"int32\",data:[h.padInfo.top,h.padInfo.left]},{type:\"int32\",data:[h.inHeight,h.inWidth]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new ac(h,x,m,b),w.push({type:\"int32\",data:[S.virtualWidth]})):(S=new ic(h,x,m,b),w.push({type:\"int32\",data:[h.filterHeight]},{type:\"int32\",data:[h.filterWidth]},{type:\"int32\",data:[h.strideHeight,h.strideWidth]},{type:\"int32\",data:[h.dilationHeight,h.dilationWidth]})),m===\"leakyrelu\"&&(w.push({type:\"float32\",data:[d]}),S.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(S,g,\"float32\",w)}var AU={kernelName:Xo,backendName:\"webgpu\",kernelFunc:Ble};var ty=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var flattenIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexTemp = i32(round(getIndices(coords[0], j)));\n let strideNum = ${e};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function zle(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,l,c]=C.prepareAndValidate(o,n),m=le({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=le({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/l,l]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=t.readSync(n.dataId),w=t.bufferSync(o),S=zV(b,w,o.dtype,u,a,l,c,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new ty(a,[u,l]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:c}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=le({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var FU={kernelName:Kn,backendName:\"webgpu\",kernelFunc:zle};var ry=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=Vle(this.aShape);return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let resRC = getCoordsFromIndex(index);\n let indexZ = i32(getIndices(resRC.x, resRC.z));\n let inBounds = select(0.0, 1.0, indexZ >= 0 && indexZ < uniforms.aShape[2]);\n setOutputAtIndex(index, inBounds * getA(${e}));\n }\n }\n `}};function Vle(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new ry(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);c.push(g);let x=le({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return c.forEach(b=>t.disposeData(b.dataId)),x}var PU={kernelName:fa,backendName:\"webgpu\",kernelFunc:Xv};var Wle=tt({opType:fe.GREATER,cpuKernelImpl:UV,dtype:\"bool\"}),OU={kernelName:So,backendName:\"webgpu\",kernelFunc:Wle};var Ule=tt({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:WV}),MU={kernelName:Io,backendName:\"webgpu\",kernelFunc:Ule};function Gle(r){let{inputs:e,backend:t}=r,{input:o}=e;return Qx(o,!0,t)}var LU={kernelName:Yi,backendName:\"webgpu\",kernelFunc:Gle};var Hle=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),BU={kernelName:qn,backendName:\"webgpu\",kernelFunc:Hle};var Kle=ye({opType:Z.IS_INF,dtype:\"bool\"}),zU={kernelName:jn,backendName:\"webgpu\",kernelFunc:Kle};var qle=ye({opType:Z.IS_NAN,dtype:\"bool\"}),VU={kernelName:Xn,backendName:\"webgpu\",kernelFunc:qle};function jle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new so(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return t.runWebGPUProgram(i,[n],\"float32\",a)}var WU={kernelName:Yn,backendName:\"webgpu\",kernelFunc:jle};var Xle=tt({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:HV}),UU={kernelName:ko,backendName:\"webgpu\",kernelFunc:Xle};var Yle=tt({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:GV}),GU={kernelName:No,backendName:\"webgpu\",kernelFunc:Yle};var oy=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"linSpace\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step);\n }\n }\n `}};function Qle(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new oy(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return e.runWebGPUProgram(i,[],\"float32\",p)}var HU={kernelName:Qn,backendName:\"webgpu\",kernelFunc:Qle};var Zle=ye({opType:Z.LOG,cpuKernelImpl:KV}),KU={kernelName:To,backendName:\"webgpu\",kernelFunc:Zle};var Jle=ye({opType:Z.LOG1P}),qU={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Jle};var ece=tt({opType:fe.LOGICAL_AND,dtype:\"bool\"}),jU={kernelName:Jn,backendName:\"webgpu\",kernelFunc:ece};var tce=ye({opType:Z.LOGICAL_NOT}),XU={kernelName:es,backendName:\"webgpu\",kernelFunc:tce};var rce=tt({opType:fe.LOGICAL_OR}),YU={kernelName:ts,backendName:\"webgpu\",kernelFunc:rce};var QU=`\n var powValue = 0.0;\n let basis = uniforms.bias + uniforms.alpha * sum;\n if (uniforms.beta == 0.5) {\n powValue = inverseSqrt(basis);\n } else if (uniforms.beta == 1.0) {\n powValue = 1.0 / basis;\n } else {\n powValue = exp(log(basis) * (-uniforms.beta));\n }\n`,ny=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let x = getX(b, r, c, d);\n var sum = 0.0;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let idx = d + i;\n if (idx >= 0 && idx < uniforms.xShape[3]) {\n let z = getX(b, r, c, idx);\n sum = sum + z * z;\n }\n }\n ${QU}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},sy=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey=\"lrn_shared\"}getUserCode(){return`\n var lrnSub: array;\n const elementsPerWorkgroup = ${this.elementsPerWorkgroup};\n const maxAllowRadius = ${this.maxAllowRadius};\n\n ${G()} {\n let localDepth = i32(localId.x);\n let workgroupDepth = i32(workgroupId.x) * elementsPerWorkgroup;\n let xDepth = workgroupDepth + localDepth - maxAllowRadius;\n let b = i32(globalId.z) / uniforms.xShape[1];\n let r = i32(globalId.z) - b * uniforms.xShape[1];\n let c = i32(globalId.y);\n let d = workgroupDepth + localDepth;\n\n var x = 0.0;\n if (xDepth >= 0 && xDepth < uniforms.xShape[3]) {\n x = getX(b, r, c, xDepth);\n }\n lrnSub[localDepth] = x;\n workgroupBarrier();\n\n if (localDepth < elementsPerWorkgroup && d < uniforms.outShape[3]) {\n var sum = 0.0;\n let index = localDepth + maxAllowRadius;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let z = lrnSub[index + i];\n sum = sum + z * z;\n }\n ${QU}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new ny(n.shape):u=new sy(n.shape,s);let l=[{type:\"int32\",data:[s]},{type:\"float32\",data:[a]},{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,l)}var ZU={kernelName:rs,backendName:\"webgpu\",kernelFunc:oce};var ay=class{constructor(e){this.outputShape=[],this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.uniforms=\"depthRadius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn_grad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n\n let MIN_DEPTH_BEGIN = 0;\n let MAX_DEPTH_END = uniforms.outShape[3];\n var result = 0.0;\n for (var d = MIN_DEPTH_BEGIN; d < MAX_DEPTH_END; d++) {\n let depthBegin = max(MIN_DEPTH_BEGIN, d - uniforms.depthRadius);\n let depthEnd = min(MAX_DEPTH_END, d + uniforms.depthRadius + 1);\n\n var norm = 0.0;\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n } else {\n break;\n }\n }\n\n norm = uniforms.alpha * norm + uniforms.bias;\n\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n var dyi = -2.0 * uniforms.alpha * uniforms.beta\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d) / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * uniforms.beta);\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n } else {\n break;\n }\n }\n }\n\n setOutputAtIndex(index, result);\n }\n }\n `}};function nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o,c=new ay(n.shape),m=[{type:\"int32\",data:[i]},{type:\"float32\",data:[p]},{type:\"float32\",data:[u]},{type:\"float32\",data:[l]}];return t.runWebGPUProgram(c,[n,s,a],n.dtype,m)}var JU={kernelName:oi,backendName:\"webgpu\",kernelFunc:nce};var sce=tt({opType:fe.MAX,cpuKernelImpl:jV}),eG={kernelName:_o,backendName:\"webgpu\",kernelFunc:sce};function ace(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,l=C.computePool2DInfo(n.shape,s,a,1,i,p);return bx(n,l,\"max\",t)}var tG={kernelName:ns,backendName:\"webgpu\",kernelFunc:ace};function ice(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new $u(c,\"max\"),d=[{type:\"int32\",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.inDepth,c.inHeight,c.inWidth]},{type:\"int32\",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var rG={kernelName:ha,backendName:\"webgpu\",kernelFunc:ice};var iy=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] - 1;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR += uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC += uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wR * uniforms.filterDims[1] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},uy=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] * uniforms.filterDims[2] - 1;\n\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wD * uniforms.filterDims[1] * uniforms.filterDims[2] + wR * uniforms.filterDims[2] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n }\n\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function uce(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new $u(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.inDepth,m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],\"int32\",f),g=new uy(m);f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outDepth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var oG={kernelName:Ji,backendName:\"webgpu\",kernelFunc:uce};function pce(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;wm([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=new Ka(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],\"int32\",f),g=new iy(m);f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var nG={kernelName:Zi,backendName:\"webgpu\",kernelFunc:pce};function lce(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let l=C.computePool2DInfo(p.shape,n,s,u,a),c=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.dilationHeight,l.dilationWidth]},{type:\"int32\",data:[l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterHeight,l.effectiveFilterWidth]}],m=new Ka(l,\"max\",!1),d=t.runWebGPUProgram(m,[p],p.dtype,c);m=new Ka(l,\"max\",!0,!0,i);let f=t.runWebGPUProgram(m,[p],\"int32\",c);return[d,f]}var sG={kernelName:ga,backendName:\"webgpu\",kernelFunc:lce};function cce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,\"min\",t)}var aG={kernelName:as,backendName:\"webgpu\",kernelFunc:cce};var mce=tt({opType:fe.MIN,cpuKernelImpl:XV}),iG={kernelName:Eo,backendName:\"webgpu\",kernelFunc:mce};var py=class{constructor(e,t,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,l)=>`uniforms.pad${l}[0]`).join(\",\"),o=this.xShape.map((u,l)=>`uniforms.pad${l}[0] + uniforms.xShape${e>1?`[${l}]`:\"\"}`).join(\",\"),n=e===1?\"start\":\"start[i]\",s=e===1?\"end\":\"end[i]\",a=e===1?\"outC\":\"outC[i]\",i=ft(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${t});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${e}; i = i + 1) {\n if (${a} < ${n}) {\n ${a} = ${n} * 2 - ${a} - ${this.offset};\n } else if(${a} >= ${s}) {\n ${a} = (${s} - 1) * 2 - ${a} + ${this.offset};\n }\n }\n let coords = outC - start;\n setOutputAtIndex(index, getX(${p}));\n }\n }\n `}};var uG={kernelName:is,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(l=>({type:\"int32\",data:[l[0],l[1]]})),p=new py(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var dce=tt({opType:fe.MOD}),pG={kernelName:us,backendName:\"webgpu\",kernelFunc:dce};var ly=class{constructor(e,t){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"multinomial\"}getUserCode(){return`\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n fn random (seed : f32, resultUV : vec2) -> f32 {\n let HASHSCALE1 = 443.8975;\n let p = resultUV * seed;\n var p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 = p3 + dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n\n let resUV = vec2(f32(coords[1]) / f32(uniforms.outShape[1]),\n f32(coords[0]) / f32(uniforms.outShape[0]));\n let r = random(uniforms.seed, resUV);\n var cdf = 0.0;\n for (var i = 0; i < uniforms.numOutcomes - 1; i = i + 1) {\n cdf = cdf + getProbs(batch, i);\n\n if (r < cdf) {\n setOutputAtIndexI32(index, i);\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutputAtIndexI32(index, uniforms.numOutcomes - 1);\n }\n }\n `}};var cy=class{constructor(e){this.variableNames=[\"logits\"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey=\"softmax\"}getUserCode(){return`\n var buf : array;\n var rowMaxShared : f32;\n var rowSumShared : f32;\n const blockSize = ${this.workgroupSize[0]};\n ${G(\"index\")} {\n let row = index / blockSize;\n let tid = i32(localId.x);\n let cols = uniforms.outShape[1];\n\n var threadMax = -3.402823e+38f;\n for (var col = tid; col < cols; col += blockSize) {\n let value = getLogits(row, col);\n threadMax = max(threadMax, value);\n }\n if (tid < cols) {\n buf[tid] = threadMax;\n }\n workgroupBarrier();\n\n var reduceSize = min(cols, blockSize);\n for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) {\n reduceSize = currSize + (reduceSize & 1);\n if (tid < currSize) {\n buf[tid] = max(buf[tid], buf[tid + reduceSize]);\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowMaxShared = buf[0];\n }\n workgroupBarrier();\n\n var threadSum = 0.0;\n for (var col = tid; col < cols; col += blockSize) {\n let subExp = exp(getLogits(row, col) - rowMaxShared);\n threadSum += subExp;\n }\n buf[tid] = threadSum;\n workgroupBarrier();\n\n for (var currSize = blockSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (tid < currSize) {\n buf[tid] = buf[tid] + buf[tid + currSize];\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowSumShared = buf[0];\n }\n workgroupBarrier();\n\n for (var col = tid; col < cols; col += blockSize) {\n let value = exp(getLogits(row, col) - rowMaxShared) / rowSumShared;\n setOutputAtCoords(row, col, value);\n }\n }\n `}};function Yv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=le({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new cy(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=le({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var lG={kernelName:Fs,backendName:\"webgpu\",kernelFunc:Yv};function fce(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Yv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],l=p.shape[1],c=new ly(u,s),m=[{type:\"float32\",data:[a]},{type:\"int32\",data:[l]}],d=t.runWebGPUProgram(c,[p],\"int32\",m);return i||t.disposeData(p.dataId),d}var cG={kernelName:ps,backendName:\"webgpu\",kernelFunc:fce};function hce(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=QV(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new so(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var mG={kernelName:ls,backendName:\"webgpu\",kernelFunc:hce};function gce(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:c}=Ut.nonMaxSuppressionV3Impl(u,l,a,i,p);return t.makeTensorInfo([c.length],\"int32\",new Int32Array(c))}var dG={kernelName:cs,backendName:\"webgpu\",kernelFunc:gce};function xce(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Ut.nonMaxSuppressionV5Impl(l,c,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var fG={kernelName:ms,backendName:\"webgpu\",kernelFunc:xce};var my=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"onValue : f32, offValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"onehot\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue,\n f32(i32(round(getX(coords.x))) == coords.y)));\n }\n }\n `}};function yce(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),l=new my(u,a),c=le({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}],d=t.runWebGPUProgram(l,[c],s,m);t.disposeData(c.dataId);let f=[...n.shape,a],h=le({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var hG={kernelName:ds,backendName:\"webgpu\",kernelFunc:yce};function Em(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=Fi({inputs:{input:o},backend:t}),s=Em({inputs:{x:n},backend:t}),a=Mp({inputs:{input:o},backend:t}),i=Em({inputs:{x:a},backend:t}),p=Uo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return Nt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var gG={kernelName:_a,backendName:\"webgpu\",kernelFunc:Em};function xG(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=Fi({inputs:{input:o},backend:t}),s=xG({inputs:{x:n},backend:t}),a=Mp({inputs:{input:o},backend:t}),i=Em({inputs:{x:a},backend:t}),p=Uo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return Nt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var yG={kernelName:xa,backendName:\"webgpu\",kernelFunc:xG};function bce(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Yx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===l.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(l=>{let c=Yx({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=Hv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeData(l.dataId)),u}var bG={kernelName:ya,backendName:\"webgpu\",kernelFunc:bce};function Qv(r,e=!1){let t=r.length,o=ft(t),n=r.map((c,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((c,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:\"\"}`).join(\",\"),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=t>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",l=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${e?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${l}));\n }\n `}var dy=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${Qv(this.xShape)}\n }\n }\n `}};var Cce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Pt({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((l,c)=>l[0]+n.shape[c]+l[1]);return Nt({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:\"float32\",data:[a]}];s.map(u=>i.push({type:\"int32\",data:[u[0],u[1]]}));let p=new dy(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},CG={kernelName:fs,backendName:\"webgpu\",kernelFunc:Cce};var wce=tt({opType:fe.POW}),wG={kernelName:hs,backendName:\"webgpu\",kernelFunc:wce};function Sce(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Di(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var SG={kernelName:gs,backendName:\"webgpu\",kernelFunc:Sce};function Ice(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,\"prod\",t)}var IG={kernelName:Ho,backendName:\"webgpu\",kernelFunc:Ice};var vce=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=eW(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},vG={kernelName:ba,backendName:\"webgpu\",kernelFunc:vce};var kce=tt({opType:fe.DIV}),kG={kernelName:Vn,backendName:\"webgpu\",kernelFunc:kce};var Nce=ye({opType:Z.RECIPROCAL}),NG={kernelName:xs,backendName:\"webgpu\",kernelFunc:Nce};var Tce=ye({opType:Z.RELU}),TG={kernelName:ys,backendName:\"webgpu\",kernelFunc:Tce};var _ce=ye({opType:Z.RELU6}),_G={kernelName:ws,backendName:\"webgpu\",kernelFunc:_ce};var fy=class{constructor(e,t,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC =\n (vec2(rc) + vec2(uniforms.halfPixelCenters)) *\n effectiveInputOverOutputRatioRC - vec2(uniforms.halfPixelCenters);\n\n // Compute the four integer indices.\n let sourceFloorRC = vec2(sourceFracIndexRC);\n let sourceCeilRC = vec2(\n min(vec2(uniforms.xShape.yz) - vec2(1.0), ceil(sourceFracIndexRC)));\n\n let topLeft = getX(b, sourceFloorRC.x, sourceFloorRC.y, d);\n let bottomLeft = getX(b, sourceCeilRC.x, sourceFloorRC.y, d);\n let topRight = getX(b, sourceFloorRC.x, sourceCeilRC.y, d);\n let bottomRight = getX(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n let fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n let top = topLeft + (topRight - topLeft) * fracRC.y;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n let newValue = top + (bottom - top) * fracRC.x;\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function Ece(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,l=s&&p>1?1:0,c=s&&u>1?1:0,d=[{type:\"float32\",data:[l,c]},{type:\"float32\",data:[i?.5:0]}],f=new fy(n.shape,p,u);return t.runWebGPUProgram(f,[n],\"float32\",d)}var EG={kernelName:Cs,backendName:\"webgpu\",kernelFunc:Ece};var hy=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32,\n invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(startRLerp - f32(uniforms.winHeight / 2));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(startCLerp - f32(uniforms.winWidth / 2));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let dxR = f32(dyR) * uniforms.heightScale;\n let topDxRIndex = i32(floor(dxR));\n let bottomDxRIndex = i32(min(ceil(dxR), f32(uniforms.outShape[1] - 1)));\n let dxRLerp = dxR - f32(topDxRIndex);\n let inverseDxRLerp = 1.0 - dxRLerp;\n\n let dxC = f32(dyC) * uniforms.widthScale;\n let leftDxCIndex = i32(floor(dxC));\n let rightDxCIndex = i32(min(ceil(dxC), f32(uniforms.outShape[2] - 1)));\n let dxCLerp = dxC - f32(leftDxCIndex);\n let inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutputAtIndex(index, accumulator);\n }\n }\n `}};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,l]=s.shape,c=[a&&u>1?i-1:i,a&&l>1?p-1:p],m=[a&&u>1?u-1:u,a&&l>1?l-1:l],d=c[0]/m[0],f=c[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,w=new hy(n.shape,a),S=[{type:\"int32\",data:c},{type:\"int32\",data:m},{type:\"float32\",data:[d]},{type:\"float32\",data:[f]},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(w,[s],s.dtype,S)}var $G={kernelName:ii,backendName:\"webgpu\",kernelFunc:$ce};var gy=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":e=\"vec2(rc) * effectiveInputOverOutputRatioRC\",`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC = ${e};\n\n // Compute the coordinators of nearest neighbor point.\n let inputShapeRC = vec2(f32(uniforms.xShape.y), f32(uniforms.xShape.z));\n let sourceNearestRC = vec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + uniforms.roundBase)));\n let newValue = getX(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function Rce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=s&&p>1?1:0,c=s&&u>1?1:0,d=[{type:\"float32\",data:[l,c]},{type:\"float32\",data:[s?.5:0]}],f=new gy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var RG={kernelName:bs,backendName:\"webgpu\",kernelFunc:Rce};var xy=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32,\n winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(floor(startRLerp - f32(uniforms.winHeight / 2)));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(floor(startCLerp - f32(uniforms.winWidth / 2)));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let sourceFracRow = f32(uniforms.effectiveXSize[0]) *\n (f32(dyR) / f32(uniforms.effectiveYSize[0]));\n\n let sourceFracCol = f32(uniforms.effectiveXSize[1]) *\n (f32(dyC) / f32(uniforms.effectiveYSize[1]));\n\n let sourceNearestRow =\n i32(min(f32(uniforms.outShape[1] - 1),\n ${this.alignCorners?\"floor(sourceFracRow + 0.5)\":\"floor(sourceFracRow)\"}));\n\n let sourceNearestCol =\n i32(min(f32(uniforms.outShape[2] - 1),\n ${this.alignCorners?\"floor(sourceFracCol + 0.5)\":\"floor(sourceFracCol)\"}));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutputAtIndex(index, accumulator);\n }\n }\n `}};function Dce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,l]=s.shape,c=[a&&u>1?i-1:i,a&&l>1?p-1:p],m=[a&&u>1?u-1:u,a&&l>1?l-1:l],d=c[0]/m[0],f=c[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,w=new xy(n.shape,a),S=[{type:\"int32\",data:c},{type:\"int32\",data:m},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(w,[s],s.dtype,S)}var DG={kernelName:ai,backendName:\"webgpu\",kernelFunc:Dce};var yy=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\" axis : vec4,\",this.shaderKey=\"reverse\"}getUserCode(){return`\n \n // Using uniform variables as judging conditions, so the function has\n // coherent execution within all threads.\n fn getReverseCoords(coords : vec4) -> vec4 {\n var reverseCoords = coords;\n if (uniforms.axis[0] == 1) {\n reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1;\n }\n if (uniforms.axis[1] == 1) {\n reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1;\n }\n if (uniforms.axis[2] == 1) {\n reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1;\n }\n if (uniforms.axis[3] == 1) {\n reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1;\n }\n\n return reverseCoords;\n }\n \n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let reverseCoords = getReverseCoords(coords);\n setOutputAtIndex(index, getX(reverseCoords[0],\n reverseCoords[1], reverseCoords[2], reverseCoords[3]));\n }\n }\n `}};function Ace(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return Pt({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),l=[0,0,0,0];u.forEach(g=>{let x=g+4-a;l[x]=1});let c=[{type:\"int32\",data:l}],m=le({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new yy(p),f=t.runWebGPUProgram(d,[m],m.dtype,c);t.disposeData(m.dataId);let h=le({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var AG={kernelName:Ss,backendName:\"webgpu\",kernelFunc:Ace};var by=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=e,typeof t==\"number\"?(this.uniforms+=\" fillValue : f32,\",this.fillSnippet=\"var outputValue = uniforms.fillValue;\",this.shaderKey+=\"_float\"):(this.uniforms+=\" fillValue : vec3,\",this.fillSnippet=\"var outputValue = uniforms.fillValue[coords[3]];\",this.shaderKey+=\"_vec3\")}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordXFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.cosRadians - (f32(coords[1]) - uniforms.centerY) *\n uniforms.sinRadians;\n let coordYFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.sinRadians + (f32(coords[1]) - uniforms.centerY) *\n uniforms.cosRadians;\n let coordX = i32(round(coordXFloat + uniforms.centerX));\n let coordY = i32(round(coordYFloat + uniforms.centerY));\n ${this.fillSnippet}\n if(coordX >= 0 && coordX < uniforms.xShape[2] && coordY >= 0 &&\n coordY < uniforms.xShape[1]) {\n outputValue = getX(coords[0], coordY, coordX, coords[3]);\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var FG={kernelName:Vs,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new by(o.shape,s),[u,l]=C.getImageCenter(a,o.shape[1],o.shape[2]),c=[{type:\"float32\",data:[u]},{type:\"float32\",data:[l]},{type:\"float32\",data:[Math.sin(n)]},{type:\"float32\",data:[Math.cos(n)]}];return typeof s==\"number\"?c.push({type:\"float32\",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:\"float32\",data:s}),i.runWebGPUProgram(p,[o],o.dtype,c)}};var Fce=ye({opType:Z.ROUND}),PG={kernelName:Is,backendName:\"webgpu\",kernelFunc:Fce};var Pce=ye({opType:Z.RSQRT,cpuKernelImpl:tW}),OG={kernelName:Do,backendName:\"webgpu\",kernelFunc:Pce};var qa=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=[\"updates\",\"indices\"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e=\"\";this.indicesRank===1?e=\"coords[0]\":this.indicesRank===2&&(e=\"coords[0], j\");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?\"uniforms.strides[j]\":\"uniforms.strides\",n=\"\",s=\"\";this.dispatchLayout.x.length===1?(n=\"flattenedIndex\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 {\n return index;\n }\n `):this.dispatchLayout.x.length===2&&(n=\"vec2(flattenedIndex, coords[1])\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> vec2 {\n // N.B. |updates| could be a scalar tensor, conceptually representing a\n // 2D tensor with all values equal to that. By design, its size must be\n // the same as |outShape[1]| in one dimension, and |indicesShape[0]|\n // gives the other.\n let sliceSize = uniforms.outShape[1];\n let d0 = index / sliceSize;\n let d1 = index - d0 * sliceSize;\n return vec2(d0, d1);\n }\n `);let i=`getUpdates(${Array.from({length:this.updatesRank},(u,l)=>`coords[${l}]`).join(\", \")})`;return`\n ${s}\n ${G(\"index\")} {\n if (index < uniforms.updatesSize) {\n let coords = getUpdatesCoordsFromFlatIndex(index);\n var flattenedIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexInside = i32(round(${t}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${Eu(this.type)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${this.sumDupeIndices?oo(\"&result[flatIndex]\",\"updateValue\",this.type):\"atomicStore(&result[flatIndex], bitcast(updateValue));\"}\n }\n }`}};function Oce(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=[c/u,u];if(c===0)return t.makeTensorInfo(a,n.dtype);let d=le({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=le({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=Nt({backend:t,attrs:{shape:m,value:0,dtype:h}}),x=y.sizeFromShape(f.shape),b=[{type:\"int32\",data:[i]},{type:\"int32\",data:l},{type:\"int32\",data:[x]}],w=new qa(f.shape,i,d.shape.length,f.shape.length,l,m,h),S=t.runWebGPUProgram(w,[f,d],h,b,g),k=le({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var MG={kernelName:vs,backendName:\"webgpu\",kernelFunc:Oce};var Cy=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"sortedSequence\",\"values\"],this.uniforms=\"numInputs : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return`\n fn findBound(batch: i32, value: f32) -> i32 {\n var left = i32(0);\n var right = uniforms.numInputs;\n while (left < right) {\n var mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${this.side===\"left\"?\"<\":\"<=\"} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let value = getValuesByOutputIndex(index);\n setOutputAtIndexI32(index, findBound(coords[0], value));\n }\n }\n `}};function Mce(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Cy([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],\"int32\",p)}var LG={kernelName:Ns,backendName:\"webgpu\",kernelFunc:Mce};var wy=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t=\"resRC\",e=\"resRC\";else{let n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],s=[],a=[];for(let i=0;i= 1.0) {\n setOutputAtIndex(index, getA(${t}));\n } else {\n setOutputAtIndex(index, getB(${t}));\n }\n }\n }\n `}};function Lce(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new wy(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],pt(n.dtype,s.dtype))}var BG={kernelName:wa,backendName:\"webgpu\",kernelFunc:Lce};var Bce=ye({opType:Z.SELU}),zG={kernelName:Ts,backendName:\"webgpu\",kernelFunc:Bce};var zce=ye({opType:Z.SIGMOID}),VG={kernelName:Ao,backendName:\"webgpu\",kernelFunc:zce};var Vce=ye({opType:Z.SIGN}),WG={kernelName:Rs,backendName:\"webgpu\",kernelFunc:Vce};var Wce=ye({opType:Z.SIN}),UG={kernelName:Es,backendName:\"webgpu\",kernelFunc:Wce};var Uce=ye({opType:Z.SINH}),GG={kernelName:$s,backendName:\"webgpu\",kernelFunc:Uce};var Gce=ye({opType:Z.SOFTPLUS}),HG={kernelName:Ds,backendName:\"webgpu\",kernelFunc:Gce};var Sy=class{constructor(e,t,o,n,s,a){this.variableNames=[\"x\"],this.outputShape=[],this.uniforms=\"\",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let p=0;p{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=Bv(this.newDim);return`\n ${xm(this.paddedXShape,\"PaddedX\")}\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${Qv(this.xShape,!0)}\n }\n }\n `}};var Hce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,w)=>b*w),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[w]+b[1]),l=C.getReshaped(u,s,i,!1),c=C.getPermuted(l.length,s.length,!1),m=C.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new Sy(n.shape,u,p,l,c,d.length),h=[{type:\"int32\",data:l},{type:\"int32\",data:d}];p.map(b=>h.push({type:\"int32\",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=le({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},KG={kernelName:Sa,backendName:\"webgpu\",kernelFunc:Hce};var Iy=class{constructor(e,t,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey=\"sparseSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.sparseSize) {\n let indexInSegmentIds = index / uniforms.segmentSize;\n let indexInSegment = index % uniforms.segmentSize;\n let indexInInput = indices[indexInSegmentIds];\n let segmentId = segmentIds[indexInSegmentIds];\n\n let value = input[indexInInput * uniforms.segmentSize + indexInSegment];\n let outIndex = segmentId * uniforms.segmentSize + indexInSegment;\n ${oo(\"&result[outIndex]\",\"value\",this.type)}\n }\n }\n `}},vy=class{constructor(e,t){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey=\"sparseSegmentIdCountProgram\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.segmentIdsShape) {\n let segmentId = segmentIds[index];\n ${oo(\"&result[segmentId]\",\"1\",\"int32\")}\n }\n }\n `}},ky=class{constructor(e,t){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey=\"sparseSegmentMean\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let segmentId = index / uniforms.segmentSize;\n let count = sameSegmentIdCount[segmentId];\n if (count != 0) {\n ${this.type===\"float32\"?\"setOutputAtIndex(index, segmentSum[index] / f32(count));\":\"setOutputAtIndexI32(index, segmentSum[index] / count);\"}\n }\n }\n }\n `}};function Ny(r,e,t,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(e.shape),u=n.readSync(t.dataId),c=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=c;let f=p*a,h=Nt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new Iy(d,f,i);let g=[{type:\"int32\",data:[a]},{type:\"int32\",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=Nt({backend:n,attrs:{shape:[c],value:0,dtype:\"int32\"}});m=new vy(c,t.shape);let w=n.runWebGPUProgram(m,[t],\"int32\",null,b),S=Nt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new ky(d,i),g=[{type:\"int32\",data:[a]}];let k=n.runWebGPUProgram(m,[x,w],i,g,S);return n.disposeData(x.dataId),n.disposeData(w.dataId),k}function Kce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return Ny(o,n,s,!1,t)}var qG={kernelName:va,backendName:\"webgpu\",kernelFunc:Kce};function qce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return Ny(o,n,s,!0,t)}var jG={kernelName:ka,backendName:\"webgpu\",kernelFunc:qce};var Ty=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,l=ie(n.shape,n.dtype,u),c=uW(l,s);return t.makeTensorInfo(c.shape,c.dtype,c.values)}let a=new Ty(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var XG={kernelName:Mo,backendName:\"webgpu\",kernelFunc:$m};function Xce(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let R=t.bufferSync(n),D=t.bufferSync(s),F=y.decodeString(t.readSync(a.dataId)[0]),O=rW(R,D,i,m,l,u,p,c,F,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/l,l],h=le({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?le({inputs:{x:s},backend:t,attrs:{shape:[u,l]}}):Pt({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),w=le({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=$m({inputs:{x:w},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,l]),T=[{type:\"int32\",data:[p]},{type:\"int32\",data:c},{type:\"int32\",data:[k]}];switch(u){case 0:break;case 1:{let R=new qa([u,l],p,h.shape.length,g.shape.length,c,f,x,d);t.runWebGPUProgram(R,[g,h],x,T,S)}break;default:{let R=new qa([u,l],p,h.shape.length,b.shape.length,c,f,x,d);t.runWebGPUProgram(R,[b,h],x,T,S)}{let R=new qa([u,l],p,h.shape.length,g.shape.length,c,f,x);t.runWebGPUProgram(R,[g,h],x,T,S)}}let E=le({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(w.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),E}var YG={kernelName:Ps,backendName:\"webgpu\",kernelFunc:Xce};function Yce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=n.shape.length,l=new Array(u).fill(0),c=n.shape.slice();return p.map(m=>{let d=[...c];d[i]=m;let f=ea({inputs:{x:n},backend:t,attrs:{begin:l,size:d}});return l[i]+=m,f})}var QG={kernelName:Ia,backendName:\"webgpu\",kernelFunc:Yce};var Qce=ye({opType:Z.SQRT}),ZG={kernelName:Fo,backendName:\"webgpu\",kernelFunc:Qce};var JG={kernelName:tu,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new so(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Zce=tt({opType:fe.SQUARED_DIFFERENCE}),e4={kernelName:Po,backendName:\"webgpu\",kernelFunc:Zce};function Jce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new so(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var t4={kernelName:Ko,backendName:\"webgpu\",kernelFunc:Jce};var _y=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let e=this.outputShape.length,t=\"\";if(e===1)t=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(\",\")}return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function eme(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=le({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=ea({inputs:{x:n},backend:t,attrs:{begin:b,size:T}});k=le({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else if(t.shouldExecuteOnCPU([n])){let E=t.readSync(n.dataId),R=ie(n.shape,n.dtype,E),D=sW(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let E=new _y(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=t.runWebGPUProgram(E,[n],n.dtype,R);k=le({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var r4={kernelName:Os,backendName:\"webgpu\",kernelFunc:eme};function tme(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.readSync(l.dataId),d=t.readSync(c.dataId),[f,h]=aW(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(c.shape,\"int32\",h)]}var o4={kernelName:Na,backendName:\"webgpu\",kernelFunc:tme};var rme=tt({opType:fe.SUB,cpuKernelImpl:iW,supportsComplex:!0}),n4={kernelName:Oo,backendName:\"webgpu\",kernelFunc:rme};var ome=ye({opType:Z.TAN}),s4={kernelName:Ms,backendName:\"webgpu\",kernelFunc:ome};var nme=ye({opType:Z.TANH}),a4={kernelName:Ls,backendName:\"webgpu\",kernelFunc:nme};function sme(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(a,s,n.shape),m=[c/u,u];if(c===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=le({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=le({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=le({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=$m({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new qa([p,u],i,f.shape.length,h.shape.length,l,m,n.dtype,!1),w=y.sizeFromShape([p,u]),S=[{type:\"int32\",data:[i]},{type:\"int32\",data:l},{type:\"int32\",data:[w]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let T=le({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach(E=>t.disposeData(E.dataId)),T}var i4={kernelName:ks,backendName:\"webgpu\",kernelFunc:sme};var Ey=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32,\n dir : i32, inc : i32,`,this.shaderKey=\"swap\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced\n // above, Figure5(a) shows that element[1] is in the second half of\n // the group when group size is 2, but it is in the first half of\n // the group when group size is 4.\n let isFirstInPair = elemIdx % (2 * uniforms.inc) < uniforms.inc;\n var i = 0;\n if (isFirstInPair) {\n i = elemIdx;\n } else {\n i = elemIdx - uniforms.inc;\n }\n\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.inc;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.inc));\n }\n\n var x0 = f32(0.0);\n var x1 = f32(0.0);\n if (i0 < uniforms.inputSize) {\n x0 = getX(batch, i0);\n } else {\n x0 = uniforms.negativeInf;\n }\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = uniforms.negativeInf;\n }\n\n let reverse = elemIdx % (2 * uniforms.dir) >= uniforms.dir;\n let isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) {\n // Elements in opposite order of direction\n let iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}},$y=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _\n // (k=4), we only need to output the indices at positions |, the\n // indices at positions _ can be thrown away, see Figure5(b) After\n // Phase 2 (Merge phase) in the Bitonic Top K paper referenced\n // above.\n // For example, the paper shows we only need to output the orange\n // bars. The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back to\n // the previous sequence to find the corresponding value, we need\n // to double the index. When we double the index, we basically\n // interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k\n // position of each 2k positions by - elemIdx % k. E.g. for output\n // at index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n var i = 0;\n if (elemIdx < uniforms.k) {\n i = elemIdx;\n } else {\n i = elemIdx * 2 - elemIdx % uniforms.k;\n }\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.k;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.k));\n }\n\n let x0 = getX(batch, i0);\n var x1 = f32(0.0);\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = x0;\n }\n\n if (x0 >= x1) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}};function pc(r,e){e!==null&&r.disposeData(e.dataId)}function u4(r){let e=1;for(;ef===null?[c,c]:[c,f],g=(k,T,E)=>{let R=h(),D=new Ey(E),O=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"float32\",data:[Number.NEGATIVE_INFINITY]},{type:\"int32\",data:[k]},{type:\"int32\",data:[T]}],M=f;f=t.runWebGPUProgram(D,R,\"int32\",O),pc(t,M)};for(let k=1;k=1;E/=2)g(T,E,[l,d])}for(let k=d;k>m;k/=2){let T=h(),E=new $y([l,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],F=f;f=t.runWebGPUProgram(E,T,\"int32\",D),pc(t,F);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=ea({inputs:{x:f},backend:t,attrs:{begin:0,size:[l,s]}}),pc(t,x);let b=Xv({inputs:{x:c,indices:f},backend:t,attrs:{axis:1,batchDims:1}});pc(t,c);let w=i.slice(0,-1);w.push(s),x=f,f=le({inputs:{x:f},attrs:{shape:w},backend:t}),pc(t,x);let S=b;return b=le({inputs:{x:b},attrs:{shape:w},backend:t}),pc(t,S),[b,f]}var p4={kernelName:Bs,backendName:\"webgpu\",kernelFunc:ame};var Ry=class{constructor(e){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"transform\"}getUserCode(){return`\n fn mapCoord(outCoord : f32, len : f32) -> f32{\n var inCoord = outCoord;\n if(uniforms.fillModeId == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * f32(i32(f32(-inCoord / sz2))) +\n inCoord;\n }\n if (inCoord < -len) {\n inCoord = inCoord + sz2;\n } else {\n inCoord = -inCoord - 1.0;\n }\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n inCoord = inCoord - sz2 * f32(i32(f32(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord + len * (f32(i32(f32(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord - len * f32(i32(f32(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n }\n return outCoord;\n }\n fn readWithFillValue(batch : i32, coordY : i32, coordX : i32,\n channel : i32) -> f32 {\n var outputValue : f32;\n if (0 <= coordY && coordY < uniforms.imageShape[1] && 0 <= coordX && coordX < uniforms.imageShape[2]) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = uniforms.fillValue;\n }\n return outputValue;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var outputValue : f32;\n let batch = coords[0];\n let x = coords[2];\n let y = coords[1];\n let channel = coords[3];\n let xf = f32(x);\n let yf = f32(y);\n let a1 = getTransforms(batch, 0);\n let a2 = getTransforms(batch, 1);\n let a3 = getTransforms(batch, 2);\n let b1 = getTransforms(batch, 3);\n let b2 = getTransforms(batch, 4);\n let b3 = getTransforms(batch, 5);\n let c1 = getTransforms(batch, 6);\n let c2 = getTransforms(batch, 7);\n let projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = uniforms.fillValue;\n } else {\n let inX = (a1 * xf + a2 * yf + a3) / projection;\n let inY = (b1 * xf + b2 * yf + b3) / projection;\n let mapX = mapCoord(inX, f32(uniforms.imageShape[2]));\n let mapY = mapCoord(inY, f32(uniforms.imageShape[1]));\n\n if (uniforms.interpolationModeId == 1) {\n let coordY = i32(round(mapY));\n let coordX = i32(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n let yFloor = floor(mapY);\n let xFloor = floor(mapX);\n let yCeil = yFloor + 1.0;\n let xCeil = xFloor + 1.0;\n let valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, i32(yFloor), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yFloor), i32(xCeil), channel);\n let valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, i32(yCeil), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yCeil), i32(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};function ime(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Ry(g),b=a===\"nearest\"?1:2,w;switch(i){case\"constant\":w=1;break;case\"reflect\":w=2;break;case\"wrap\":w=3;break;case\"nearest\":w=4;break;default:w=1;break}let S=[{type:\"int32\",data:[b]},{type:\"int32\",data:[w]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(x,[n,s],\"float32\",S)}var l4={kernelName:zs,backendName:\"webgpu\",kernelFunc:ime};function ume(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),l=0;for(let h=0;ht.disposeData(h.dataId)),f}var c4={kernelName:Ta,backendName:\"webgpu\",kernelFunc:ume};var Dy=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`UnsortedSegmentSum only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"unsortedSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.xSize) {\n let coords = getXCoordsFromIndex(index);\n let b = coords[0];\n let inCol = coords[1];\n\n let segmentId = i32(getSegmentIds(inCol));\n if (segmentId >= 0) {\n let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments;\n let value = getX(b, inCol);\n\n ${oo(\"&result[flatIndex]\",\"value\",this.type)}\n }\n }\n }\n `}};function pme(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,l=C.getAxesPermutation([u],i),c=n;l!=null&&(c=Cr({inputs:{x:n},backend:t,attrs:{perm:l}}),p.push(c),u=C.getInnerMostAxes(1,i)[0]);let m=C.segment_util.computeOutShape(c.shape,u,a),d=y.sizeFromShape([c.shape[u]]),f=le({inputs:{x:c},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=Nt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new Dy(f.shape,g,h),w=[{type:\"int32\",data:[a]},{type:\"int32\",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,w,x),k=le({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let T=k;if(l!=null){p.push(k);let E=C.getUndoAxesPermutation(l);T=Cr({inputs:{x:T},backend:t,attrs:{perm:E}})}return p.forEach(E=>t.disposeData(E.dataId)),T}var m4={kernelName:su,backendName:\"webgpu\",kernelFunc:pme};var lme=[jz,cW,mW,dW,fW,hW,xW,yW,bW,CW,wW,SW,IW,vW,kW,_W,EW,$W,RW,DW,FW,PW,OW,zW,VW,WW,Yz,GW,KW,qW,jW,XW,YW,QW,ZW,JW,eU,tU,nU,sU,aU,iU,pU,lU,uU,cU,mU,dU,fU,hU,yU,bU,CU,wU,SU,IU,vU,kU,NU,Kz,TU,$U,_U,EU,RU,DU,AU,FU,PU,OU,MU,Xz,LU,HW,BU,zU,VU,WU,UU,GU,HU,qU,KU,jU,XU,YU,ZU,JU,NW,eG,tG,nG,rG,oG,sG,TW,aG,iG,uG,pG,cG,gU,mG,dG,fG,MW,hG,yG,bG,CG,wG,SG,IG,vG,LW,kG,NG,TG,_G,qz,EG,$G,RG,DG,AG,FG,PG,OG,MG,LG,BG,zG,VG,WG,UG,GG,AW,t4,r4,o4,lG,HG,KG,qG,jG,YG,QG,ZG,JG,e4,n4,xU,s4,a4,i4,XG,p4,l4,gW,c4,m4,gG];for(let r of lme)li(r);var d4=\"4.17.0\",cme=\"4.17.0\",mme=\"4.17.0\",dme=\"4.17.0\",fme=\"4.17.0\",hme=\"4.14.0\",gme={tfjs:d4,\"tfjs-core\":d4,\"tfjs-converter\":cme,\"tfjs-backend-cpu\":mme,\"tfjs-backend-webgl\":dme,\"tfjs-backend-wasm\":fme,\"tfjs-backend-webgpu\":hme};var qtr=void 0;export{fn as Abs,hn as Acos,gn as Acosh,sp as AdadeltaOptimizer,ap as AdagradOptimizer,ip as AdamOptimizer,up as AdamaxOptimizer,Rr as Add,xn as AddN,yn as All,bn as Any,na as ArgMax,sa as ArgMin,Cn as Asin,wn as Asinh,Sn as Atan,vn as Atan2,In as Atanh,kn as AvgPool,aa as AvgPool3D,Vi as AvgPool3DGrad,zi as AvgPoolGrad,gm as BackendWasm,Nn as BatchMatMul,ia as BatchToSpaceND,Tn as Bincount,_n as BitwiseAnd,ua as BroadcastArgs,Sme as BroadcastTo,ho as Cast,go as Ceil,Go as ClipByValue,ei as Complex,Wi as ComplexAbs,pa as Concat,En as Conv2D,Ui as Conv2DBackpropFilter,$n as Conv2DBackpropInput,Rn as Conv3D,ti as Conv3DBackpropFilterV2,Dn as Conv3DBackpropInputV2,An as Cos,Fn as Cosh,Mn as CropAndResize,Pn as Cumprod,On as Cumsum,mn as DataStorage,la as DenseBincount,Ln as DepthToSpace,Bn as DepthwiseConv2dNative,Gi as DepthwiseConv2dNativeBackpropFilter,Hi as DepthwiseConv2dNativeBackpropInput,ca as Diag,zn as Dilation2D,qi as Dilation2DBackpropFilter,Ki as Dilation2DBackpropInput,Mu as Draw,xw as ENV,ji as Einsum,Wn as Elu,ri as EluGrad,Cc as Environment,xo as Equal,Un as Erf,yo as Exp,ma as ExpandDims,bo as Expm1,Xi as FFT,da as Fill,Gn as FlipLeftRight,Co as Floor,wo as FloorDiv,Lu as FromPixels,Hn as FusedBatchNorm,jo as FusedConv2D,Xo as FusedDepthwiseConv2D,kp as GPGPUContext,Kn as GatherNd,fa as GatherV2,Kc as GraphModel,So as Greater,Io as GreaterEqual,Yi as IFFT,vo as Identity,Qi as Imag,qn as IsFinite,jn as IsInf,Xn as IsNan,mo as KernelBackend,rs as LRN,oi as LRNGrad,Yn as LeakyRelu,ko as Less,No as LessEqual,Qn as LinSpace,To as Log,Zn as Log1p,Ime as LogSoftmax,Jn as LogicalAnd,es as LogicalNot,ts as LogicalOr,gk as LogicalXor,vme as LowerBound,Il as MathBackendCPU,Ul as MathBackendWebGL,kme as MatrixBandPart,os as Max,ns as MaxPool,ha as MaxPool3D,Ji as MaxPool3DGrad,Zi as MaxPoolGrad,ga as MaxPoolWithArgmax,_o as Maximum,ss as Mean,as as Min,Eo as Minimum,is as MirrorPad,us as Mod,pp as MomentumOptimizer,ps as Multinomial,$o as Multiply,ls as Neg,cs as NonMaxSuppressionV3,ni as NonMaxSuppressionV4,ms as NonMaxSuppressionV5,Ro as NotEqual,Bw as OP_SCOPE_SUFFIX,ds as OneHot,xa as OnesLike,_r as Optimizer,Vc as OptimizerConstructors,ya as Pack,fs as PadV2,Nme as Pool,hs as Pow,gs as Prelu,Ho as Prod,lp as RMSPropOptimizer,Qp as RaggedGather,Zp as RaggedRange,Jp as RaggedTensorToTensor,ba as Range,Ew as Rank,si as Real,Vn as RealDiv,xs as Reciprocal,Dt as Reduction,ys as Relu,ws as Relu6,Ca as Reshape,Cs as ResizeBilinear,ii as ResizeBilinearGrad,bs as ResizeNearestNeighbor,ai as ResizeNearestNeighborGrad,Ss as Reverse,Vs as RotateWithOffset,Is as Round,Do as Rsqrt,wi as SGDOptimizer,vs as ScatterNd,Ns as SearchSorted,wa as Select,Ts as Selu,Ao as Sigmoid,Rs as Sign,Es as Sin,$s as Sinh,_s as Slice,Fs as Softmax,Ds as Softplus,Sa as SpaceToBatchND,eu as SparseFillEmptyRows,ui as SparseReshape,va as SparseSegmentMean,ka as SparseSegmentSum,Ps as SparseToDense,Ia as SplitV,Fo as Sqrt,tu as Square,Po as SquaredDifference,pi as StaticRegexReplace,Ko as Step,Os as StridedSlice,Na as StringNGrams,ru as StringSplit,ou as StringToHashBucketFast,Oo as Sub,As as Sum,Ms as Tan,Ls as Tanh,dt as Tensor,Ge as TensorBuffer,ks as TensorScatterUpdate,Mo as Tile,Bs as TopK,zs as Transform,Kr as Transpose,nu as Unique,Ta as Unpack,su as UnsortedSegmentSum,Tme as UpperBound,ci as Variable,Jl as WebGPUBackend,_a as ZerosLike,qo as _FusedMatMul,er as abs,g1 as acos,x1 as acosh,Ce as add,y1 as addN,b1 as all,C1 as any,w1 as argMax,S1 as argMin,I1 as asin,v1 as asinh,k1 as atan,N1 as atan2,T1 as atanh,Id as avgPool,$1 as avgPool3d,Hk as backend,C as backend_util,R1 as basicLSTMCell,mu as batchNorm,A1 as batchNorm2d,F1 as batchNorm3d,P1 as batchNorm4d,vd as batchToSpaceND,kd as bincount,O1 as bitwiseAnd,oX as booleanMaskAsync,M1 as broadcastArgs,Oa as broadcastTo,kr as broadcast_util,XT as browser,ie as buffer,Ue as cast,L1 as ceil,B1 as clipByValue,Xr as clone,Ar as complex,bt as concat,z1 as concat1d,V1 as concat2d,W1 as concat3d,U1 as concat4d,G1 as conv1d,du as conv2d,H1 as conv2dTranspose,K1 as conv3d,j1 as conv3dTranspose,Pme as copyRegisteredKernels,X1 as cos,Y1 as cosh,Mc as cosineWindow,Q1 as cumprod,Z1 as cumsum,Nr as customGrad,J1 as denseBincount,zw as deprecationWarn,e2 as depthToSpace,cl as depthwiseConv2d,aY as deregisterOp,uu as device_util,t2 as diag,r2 as dilation2d,Kde as disableDeprecationWarnings,Lt as dispose,qde as disposeVariables,Xe as div,n2 as divNoNan,s2 as dot,hX as dropout,fu as einsum,Ed as elu,Hde as enableDebugMode,Gde as enableProdMode,cS as enclosingPowerOfTwo,cr as engine,a2 as ensureShape,A as env,_d as equal,i2 as erf,l2 as euclideanNorm,Jo as exp,Ks as expandDims,c2 as expm1,$d as eye,fl as fft,Ma as fill,efe as findBackend,tfe as findBackendFactory,Rd as floor,Sd as floorDiv,EA as forceHalfFloat,mS as fused,Dd as gather,dX as gatherND,xf as gather_util,Gk as getBackend,Cw as getGradient,tl as getKernel,ad as getKernelsForBackend,kie as getThreadsCount,k0 as gpgpu_util,a6 as grad,i6 as grads,ju as greater,Ad as greaterEqual,ep as ifft,gu as imag,b5 as image,xX as inTopKAsync,Si as io,tf as irfft,m2 as isFinite,d2 as isInf,f2 as isNaN,Fr as keep,Ut as kernel_impls,Fd as leakyRelu,Fc as less,ml as lessEqual,C5 as linalg,h2 as linspace,r7 as loadGraphModel,o7 as loadGraphModelSync,g2 as localResponseNormalization,yi as log,Pd as log1p,x2 as logSigmoid,y2 as logSoftmax,Ld as logSumExp,Xu as logicalAnd,Bd as logicalNot,zd as logicalOr,b2 as logicalXor,w5 as losses,C2 as lowerBound,Je as matMul,HT as math,La as max,Wd as maxPool,w2 as maxPool3d,S2 as maxPoolWithArgmax,Ud as maximum,Yu as mean,jde as memory,I2 as meshgrid,Ac as min,Qu as minimum,v2 as mirrorPad,k2 as mod,N2 as moments,aX as movingAverage,se as mul,T2 as multiRNNCell,_2 as multinomial,mr as neg,IS as nextFrame,qtr as node,qu as norm,Gd as notEqual,Oc as oneHot,Ba as ones,E2 as onesLike,N as op,$2 as outerProduct,za as pad,R2 as pad1d,D2 as pad2d,A2 as pad3d,F2 as pad4d,P2 as pool,xi as pow,Kd as prelu,wd as print,O2 as prod,Xde as profile,M2 as raggedGather,L2 as raggedRange,B2 as raggedTensorToTensor,z2 as rand,iN as randomGamma,Zd as randomNormal,uN as randomStandardNormal,dl as randomUniform,pN as randomUniformInt,xu as range,Zde as ready,bi as real,lN as reciprocal,pu as registerBackend,Dme as registerGradient,li as registerKernel,sY as registerOp,yu as relu,Jd as relu6,Jde as removeBackend,W as reshape,Bo as reverse,cN as reverse1d,mN as reverse2d,dN as reverse3d,fN as reverse4d,hl as rfft,ef as round,hN as rsqrt,ke as scalar,uX as scatterND,Cu as scatter_util,Pc as searchSorted,gN as selu,xN as separableConv2d,AT as serialization,Qde as setBackend,rfe as setPlatform,vie as setThreadsCount,Sie as setWasmPath,Iie as setWasmPaths,BI as setWebGLContext,yN as setdiff1dAsync,Xf as shared,Pa as sigmoid,bN as sign,y5 as signal,CN as sin,wN as sinh,Ye as slice,SN as slice1d,IN as slice2d,vN as slice3d,kN as slice4d,nt as slice_util,NN as softmax,Md as softplus,Hd as spaceToBatchND,S5 as sparse,cX as sparseToDense,x5 as spectral,Ci as split,Pr as sqrt,tr as square,rf as squaredDifference,gl as squeeze,Tr as stack,of as step,TN as stridedSlice,I5 as string,Te as sub,ot as sum,mi as sumOutType,_N as tan,Dc as tanh,pr as tensor,rr as tensor1d,bu as tensor2d,nf as tensor3d,EN as tensor4d,$N as tensor5d,RN as tensor6d,AN as tensorScatterUpdate,Vk as tensor_util,aN as test_util,De as tidy,hu as tile,Yde as time,FN as topk,cHe as train,yl as transpose,PN as truncatedNormal,ON as unique,Fme as unregisterGradient,Ame as unregisterKernel,MN as unsortedSegmentSum,zo as unstack,pt as upcastType,LN as upperBound,y as util,u6 as valueAndGrad,p6 as valueAndGrads,BN as variable,eS as variableGrads,gme as version,s7 as version_converter,t8 as version_core,M7 as version_cpu,Nie as version_wasm,DJ as version_webgl,sut as webgl,Fl as webgl_util,cv as webgpu_util,Lo as where,af as whereAsync,Yr as zeros,Kt as zerosLike};\n", "import type { Config } from '../exports';\n\n/**\n * Simple helper functions used accross codebase\n */\n\n// helper function: wrapper around console output\nexport function log(...msg): void {\n const dt = new Date();\n const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;\n if (msg) console.log(ts, 'Human:', ...msg); // eslint-disable-line no-console\n}\n\n// helper function: join two paths\nexport function join(folder: string, file: string): string {\n const separator = folder.endsWith('/') ? '' : '/';\n const skipJoin = file.startsWith('.') || file.startsWith('/') || file.startsWith('http:') || file.startsWith('https:') || file.startsWith('file:');\n const path = skipJoin ? `${file}` : `${folder}${separator}${file}`;\n if (!path.toLocaleLowerCase().includes('.json')) throw new Error(`modelpath error: expecting json file: ${path}`);\n return path;\n}\n\n// helper function: gets elapsed time on both browser and nodejs\nexport const now = () => {\n if (typeof performance !== 'undefined') return performance.now();\n return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());\n};\n\n// helper function: checks current config validity\nexport function validate(defaults: Partial, config: Partial, parent = 'config', msgs: { reason: string, where: string, expected?: string }[] = []) {\n for (const key of Object.keys(config)) {\n if (typeof config[key] === 'object') {\n validate(defaults[key], config[key], key, msgs);\n } else {\n const defined = defaults && (typeof defaults[key] !== 'undefined');\n if (!defined) msgs.push({ reason: 'unknown property', where: `${parent}.${key} = ${config[key]}` });\n const same = defaults && typeof defaults[key] === typeof config[key];\n if (defined && !same) msgs.push({ reason: 'property type mismatch', where: `${parent}.${key} = ${config[key]}`, expected: typeof defaults[key] });\n }\n // ok = ok && defined && same;\n }\n if (config.debug && parent === 'config' && msgs.length > 0) log('invalid configuration', msgs);\n return msgs;\n}\n\n// helper function: perform deep merge of multiple objects so it allows full inheritance with overrides\nexport function mergeDeep(...objects) {\n const isObject = (obj) => obj && typeof obj === 'object';\n return objects.reduce((prev, obj) => {\n Object.keys(obj || {}).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n if (Array.isArray(pVal) && Array.isArray(oVal)) prev[key] = pVal.concat(...oVal);\n else if (isObject(pVal) && isObject(oVal)) prev[key] = mergeDeep(pVal, oVal);\n else prev[key] = oVal;\n });\n return prev;\n }, {});\n}\n\n// helper function: return min and max from input array\nexport const minmax = (data: number[]) => data.reduce((acc: number[], val) => {\n acc[0] = (acc[0] === undefined || val < acc[0]) ? val : acc[0];\n acc[1] = (acc[1] === undefined || val > acc[1]) ? val : acc[1];\n return acc;\n}, []);\n\n// helper function: async wait\nexport async function wait(time: number) {\n const waiting = new Promise((resolve) => { setTimeout(() => resolve(true), time); });\n await waiting;\n}\n", "/* eslint-disable no-multi-spaces */\n\n/** Possible TensorFlow backends */\nexport type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu';\n\n/** Possible values for `human.warmup` */\nexport type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body';\n\n/** Possible segmentation model behavior */\nexport type SegmentationEnum = 'default' | 'alpha' | 'foreground' | 'state'\n\n/** Generic config type inherited by all module types */\nexport interface GenericConfig {\n /** is module enabled? */\n enabled: boolean,\n /** path to model json file (relative to `modelBasePath` */\n modelPath: string,\n /** how many max frames to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipFrames: number,\n /** how many max milliseconds to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipTime: number,\n}\n\n/** Detector part of face configuration */\nexport interface FaceDetectorConfig extends GenericConfig {\n /** is face rotation correction performed after detecting face?\n * used to correctly analyze faces under high angles\n */\n rotation: boolean,\n /** maximum number of detected faces */\n maxDetected: number,\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n /** minimum size in pixels of a detected face box before resutls are discared */\n minSize: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** how much should face box be enlarged over the min/max facial coordinates */\n scale: number,\n /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {\n /** how much should iris box be enlarged over the min/max iris coordinates */\n scale: number,\n}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n scale: 1.4,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n scale: 2.3,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-lite.json',\n },\n },\n object: {\n enabled: false,\n modelPath: 'centernet.json',\n minConfidence: 0.2,\n iouThreshold: 0.4,\n maxDetected: 10,\n skipFrames: 99,\n skipTime: 2000,\n },\n segmentation: {\n enabled: false,\n modelPath: 'rvm.json',\n ratio: 0.5,\n mode: 'default',\n },\n};\n\nexport { config as defaults };\n", "export const vertexIdentity = `\n precision highp float;\n attribute vec2 pos;\n attribute vec2 uv;\n varying vec2 vUv;\n uniform float flipY;\n void main(void) {\n vUv = uv;\n gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);\n }\n`;\n\nexport const fragmentIdentity = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n void main(void) {\n gl_FragColor = texture2D(texture, vUv);\n }\n`;\n\nexport const colorMatrixWithAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];\n gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];\n }\n`;\n\nexport const colorMatrixWithoutAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];\n gl_FragColor.a = c.a;\n }\n`;\n\nexport const pixelate = `\n precision highp float;\n varying vec2 vUv;\n uniform vec2 size;\n uniform sampler2D texture;\n vec2 pixelate(vec2 coord, vec2 size) {\n return floor( coord / size ) * size;\n }\n void main(void) {\n gl_FragColor = vec4(0.0);\n vec2 coord = pixelate(vUv, size);\n gl_FragColor += texture2D(texture, coord);\n }\n`;\n\nexport const blur = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n void main(void) {\n gl_FragColor = vec4(0.0);\n gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;\n gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv )*0.159576912161;\n gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;\n }\n`;\n\nexport const convolution = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n uniform float m[9];\n void main(void) {\n vec4 c11 = texture2D(texture, vUv - px); // top left\n vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y)); // top center\n vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y)); // top right\n vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) ); // mid left\n vec4 c22 = texture2D(texture, vUv); // mid center\n vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) ); // mid right\n vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) ); // bottom left\n vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) ); // bottom center\n vec4 c33 = texture2D(texture, vUv + px ); // bottom right\n gl_FragColor = \n c11 * m[0] + c12 * m[1] + c22 * m[2] +\n c21 * m[3] + c22 * m[4] + c23 * m[5] +\n c31 * m[6] + c32 * m[7] + c33 * m[8];\n gl_FragColor.a = c22.a;\n }\n`;\n", "/**\n * Image Filters in WebGL algoritm implementation\n * Based on: [WebGLImageFilter](https://github.com/phoboslab/WebGLImageFilter)\n */\n\n/* eslint-disable func-names */\n\nimport * as shaders from './imagefxshaders';\nimport { canvas } from './image';\nimport { log } from '../util/util';\n\nconst collect = (source, prefix: string, collection) => {\n const r = new RegExp('\\\\b' + prefix + ' \\\\w+ (\\\\w+)', 'ig');\n source.replace(r, (match, name) => {\n collection[name] = 0;\n return match;\n });\n};\n\nclass GLProgram {\n uniform = {};\n attribute = {};\n gl: WebGLRenderingContext;\n id: WebGLProgram;\n\n constructor(gl, vertexSource, fragmentSource) {\n this.gl = gl;\n const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER);\n const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER);\n this.id = this.gl.createProgram() as WebGLProgram;\n if (!vertexShader || !fragmentShader) return;\n if (!this.id) {\n log('filter: could not create webgl program');\n return;\n }\n this.gl.attachShader(this.id, vertexShader);\n this.gl.attachShader(this.id, fragmentShader);\n this.gl.linkProgram(this.id);\n if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) {\n log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || 'unknown'}`);\n return;\n }\n this.gl.useProgram(this.id);\n collect(vertexSource, 'attribute', this.attribute); // Collect attributes\n for (const a in this.attribute) this.attribute[a] = this.gl.getAttribLocation(this.id, a);\n collect(vertexSource, 'uniform', this.uniform); // Collect uniforms\n collect(fragmentSource, 'uniform', this.uniform);\n for (const u in this.uniform) this.uniform[u] = this.gl.getUniformLocation(this.id, u);\n }\n\n compile = (source, type): WebGLShader | null => {\n const shader = this.gl.createShader(type);\n if (!shader) {\n log('filter: could not create shader');\n return null;\n }\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || 'unknown'}`);\n return null;\n }\n return shader;\n };\n}\n\n// function that is instantiated as class so it has private this members\n/**\n * @class GLImageFilter\n * @property {function} reset reset current filter chain\n * @property {function} add add specified filter to filter chain\n * @property {function} apply execute filter chain and draw result\n * @property {function} draw just draw input to result\n */\n\nexport function GLImageFilter() {\n let drawCount = 0;\n let sourceTexture: WebGLTexture | null = null;\n let lastInChain = false;\n let currentFramebufferIndex = -1;\n let tempFramebuffers: [null, null] | [{ fbo: WebGLFramebuffer | null, texture: WebGLTexture | null }] = [null, null];\n let filterChain: Record[] = [];\n let vertexBuffer: WebGLBuffer | null = null;\n let currentProgram: GLProgram | null = null;\n const fxcanvas = canvas(100, 100) as HTMLCanvasElement;\n const shaderProgramCache = { }; // key is the shader program source, value is the compiled program\n const DRAW = { INTERMEDIATE: 1 };\n const gl = fxcanvas.getContext('webgl') as WebGLRenderingContext;\n if (!gl) {\n log('filter: cannot get webgl context');\n return;\n }\n // @ts-ignore used for sanity checks outside of imagefx\n this.gl = gl;\n\n function resize(width, height) {\n if (width === fxcanvas.width && height === fxcanvas.height) return; // Same width/height? Nothing to do here\n fxcanvas.width = width;\n fxcanvas.height = height;\n if (!vertexBuffer) { // Create the context if we don't have it yet\n const vertices = 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]); // Create the vertex buffer for the two triangles [x, y, u, v] * 6\n vertexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n }\n gl.viewport(0, 0, fxcanvas.width, fxcanvas.height);\n tempFramebuffers = [null, null]; // Delete old temp framebuffers\n }\n\n function createFramebufferTexture(width, height) {\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const renderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return { fbo, texture };\n }\n\n function getTempFramebuffer(index): { fbo: WebGLFramebuffer | null, texture: WebGLTexture | null } {\n tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);\n return tempFramebuffers[index] as { fbo: WebGLFramebuffer, texture: WebGLTexture };\n }\n\n function draw(flags = 0) {\n if (!currentProgram) return;\n let source: WebGLTexture | null = null;\n let target: WebGLFramebuffer | null = null;\n let flipY = false;\n if (drawCount === 0) source = sourceTexture; // First draw call - use the source texture\n else source = getTempFramebuffer(currentFramebufferIndex).texture || null; // All following draw calls use the temp buffer last drawn to\n drawCount++;\n if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { // Last filter in our chain - draw directly to the WebGL Canvas. We may also have to flip the image vertically now\n target = null;\n flipY = drawCount % 2 === 0;\n } else {\n currentFramebufferIndex = (currentFramebufferIndex + 1) % 2;\n target = getTempFramebuffer(currentFramebufferIndex).fbo || null; // Intermediate draw call - get a temp buffer to draw to\n }\n gl.bindTexture(gl.TEXTURE_2D, source); // Bind the source and target and draw the two triangles\n gl.bindFramebuffer(gl.FRAMEBUFFER, target);\n gl.uniform1f(currentProgram.uniform['flipY'], (flipY ? -1 : 1));\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n function compileShader(fragmentSource): GLProgram | null {\n if (shaderProgramCache[fragmentSource]) {\n currentProgram = shaderProgramCache[fragmentSource];\n gl.useProgram((currentProgram ? currentProgram.id : null) || null);\n return currentProgram;\n }\n currentProgram = new GLProgram(gl, shaders.vertexIdentity, fragmentSource);\n if (!currentProgram) {\n log('filter: could not get webgl program');\n return null;\n }\n const floatSize = Float32Array.BYTES_PER_ELEMENT;\n const vertSize = 4 * floatSize;\n gl.enableVertexAttribArray(currentProgram.attribute['pos']);\n gl.vertexAttribPointer(currentProgram.attribute['pos'], 2, gl.FLOAT, false, vertSize, 0 * floatSize);\n gl.enableVertexAttribArray(currentProgram.attribute['uv']);\n gl.vertexAttribPointer(currentProgram.attribute['uv'], 2, gl.FLOAT, false, vertSize, 2 * floatSize);\n shaderProgramCache[fragmentSource] = currentProgram;\n return currentProgram;\n }\n\n const filter = {\n colorMatrix: (matrix: number[]) => { // general color matrix filter\n const m = new Float32Array(matrix);\n m[4] /= 255;\n m[9] /= 255;\n m[14] /= 255;\n m[19] /= 255;\n const shader = (m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0) // Can we ignore the alpha value? Makes things a bit faster.\n ? shaders.colorMatrixWithoutAlpha\n : shaders.colorMatrixWithAlpha;\n const program = compileShader(shader);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n draw();\n },\n\n brightness: (brightness: number) => {\n const b = (brightness || 0) + 1;\n filter.colorMatrix([\n b, 0, 0, 0, 0,\n 0, b, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n saturation: (amount: number) => {\n const x = (amount || 0) * 2 / 3 + 1;\n const y = ((x - 1) * -0.5);\n filter.colorMatrix([\n x, y, y, 0, 0,\n y, x, y, 0, 0,\n y, y, x, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturate: () => {\n filter.saturation(-1);\n },\n\n contrast: (amount: number) => {\n const v = (amount || 0) + 1;\n const o = -128 * (v - 1);\n filter.colorMatrix([\n v, 0, 0, 0, o,\n 0, v, 0, 0, o,\n 0, 0, v, 0, o,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n negative: () => {\n filter.contrast(-2);\n },\n\n hue: (rotation: number) => {\n rotation = (rotation || 0) / 180 * Math.PI;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const lumR = 0.213;\n const lumG = 0.715;\n const lumB = 0.072;\n filter.colorMatrix([\n lumR + cos * (1 - lumR) + sin * (-lumR), lumG + cos * (-lumG) + sin * (-lumG), lumB + cos * (-lumB) + sin * (1 - lumB), 0, 0,\n lumR + cos * (-lumR) + sin * (0.143), lumG + cos * (1 - lumG) + sin * (0.140), lumB + cos * (-lumB) + sin * (-0.283), 0, 0,\n lumR + cos * (-lumR) + sin * (-(1 - lumR)), lumG + cos * (-lumG) + sin * (lumG), lumB + cos * (1 - lumB) + sin * (lumB), 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturateLuminance: () => {\n filter.colorMatrix([\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n sepia: () => {\n filter.colorMatrix([\n 0.393, 0.7689999, 0.18899999, 0, 0,\n 0.349, 0.6859999, 0.16799999, 0, 0,\n 0.272, 0.5339999, 0.13099999, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n brownie: () => {\n filter.colorMatrix([\n 0.5997023498159715, 0.34553243048391263, -0.2708298674538042, 0, 47.43192855600873,\n -0.037703249837783157, 0.8609577587992641, 0.15059552388459913, 0, -36.96841498319127,\n 0.24113635128153335, -0.07441037908422492, 0.44972182064877153, 0, -7.562075277591283,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n vintagePinhole: () => {\n filter.colorMatrix([\n 0.6279345635605994, 0.3202183420819367, -0.03965408211312453, 0, 9.651285835294123,\n 0.02578397704808868, 0.6441188644374771, 0.03259127616149294, 0, 7.462829176470591,\n 0.0466055556782719, -0.0851232987247891, 0.5241648018700465, 0, 5.159190588235296,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n kodachrome: () => {\n filter.colorMatrix([\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n technicolor: () => {\n filter.colorMatrix([\n 1.9125277891456083, -0.8545344976951645, -0.09155508482755585, 0, 11.793603434377337,\n -0.3087833385928097, 1.7658908555458428, -0.10601743074722245, 0, -70.35205161461398,\n -0.231103377548616, -0.7501899197440212, 1.847597816108189, 0, 30.950940869491138,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n polaroid: () => {\n filter.colorMatrix([\n 1.438, -0.062, -0.062, 0, 0,\n -0.122, 1.378, -0.122, 0, 0,\n -0.016, -0.016, 1.483, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n shiftToBGR: () => {\n filter.colorMatrix([\n 0, 0, 1, 0, 0,\n 0, 1, 0, 0, 0,\n 1, 0, 0, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n convolution: (matrix: number[]) => { // general convolution Filter\n const m = new Float32Array(matrix);\n const pixelSizeX = 1 / fxcanvas.width;\n const pixelSizeY = 1 / fxcanvas.height;\n const program = compileShader(shaders.convolution);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n gl.uniform2f(program.uniform['px'], pixelSizeX, pixelSizeY);\n draw();\n },\n\n detectEdges: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, 1, 0,\n 1, -4, 1,\n 0, 1, 0,\n ]);\n },\n\n sobelX: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, 0, 1,\n -2, 0, 2,\n -1, 0, 1,\n ]);\n },\n\n sobelY: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, -2, -1,\n 0, 0, 0,\n 1, 2, 1,\n ]);\n },\n\n sharpen: (amount) => {\n const a = amount || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, -1 * a, 0,\n -1 * a, 1 + 4 * a, -1 * a,\n 0, -1 * a, 0,\n ]);\n },\n\n emboss: (size: number) => {\n const s = size || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n -2 * s, -1 * s, 0,\n -1 * s, 1, 1 * s,\n 0, 1 * s, 2 * s,\n ]);\n },\n\n blur: (size: number) => {\n const blurSizeX = (size / 7) / fxcanvas.width;\n const blurSizeY = (size / 7) / fxcanvas.height;\n const program = compileShader(shaders.blur);\n if (!program) return;\n // Vertical\n gl.uniform2f(program.uniform['px'], 0, blurSizeY);\n draw(DRAW.INTERMEDIATE);\n // Horizontal\n gl.uniform2f(program.uniform['px'], blurSizeX, 0);\n draw();\n },\n\n pixelate: (size: number) => {\n const blurSizeX = (size) / fxcanvas.width;\n const blurSizeY = (size) / fxcanvas.height;\n const program = compileShader(shaders.pixelate);\n if (!program) return;\n gl.uniform2f(program.uniform['size'], blurSizeX, blurSizeY);\n draw();\n },\n };\n\n // @ts-ignore this\n this.add = function (name) {\n const args = Array.prototype.slice.call(arguments, 1); // eslint-disable-line prefer-rest-params\n const func = filter[name];\n filterChain.push({ func, args });\n };\n\n // @ts-ignore this\n this.reset = function () {\n filterChain = [];\n };\n\n // @ts-ignore this\n this.get = function () {\n return filterChain;\n };\n\n // @ts-ignore this\n this.apply = function (image) {\n resize(image.width, image.height);\n drawCount = 0;\n if (!sourceTexture) sourceTexture = gl.createTexture(); // Create the texture for the input image if we haven't yet\n gl.bindTexture(gl.TEXTURE_2D, sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n for (let i = 0; i < filterChain.length; i++) {\n lastInChain = (i === filterChain.length - 1);\n const f = filterChain[i];\n // @ts-ignore function assigment\n f.func.apply(this, f.args || []);\n }\n return fxcanvas;\n };\n\n // @ts-ignore this\n this.draw = function (image) {\n this.add('brightness', 0);\n return this.apply(image);\n };\n}\n", "/**\n * Image enhancements\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function histogramEqualization(inputImage: Tensor): Promise {\n const squeeze = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage;\n const rgb = tf.split(squeeze, 3, 2);\n const min: Tensor[] = [tf.min(rgb[0]), tf.min(rgb[1]), tf.min(rgb[2])]; // minimum pixel value per channel T[]\n const max: Tensor[] = [tf.max(rgb[0]), tf.max(rgb[1]), tf.max(rgb[2])]; // maximum pixel value per channel T[]\n // const absMin = await Promise.all(min.map((channel) => channel.data())); // minimum pixel value per channel A[]\n // const minValue = Math.min(absMax[0][0], absMin[1][0], absMin[2][0]);\n const absMax = await Promise.all(max.map((channel) => channel.data())); // maximum pixel value per channel A[]\n const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]);\n const maxRange = maxValue > 1 ? 255 : 1;\n const factor = maxRange / maxValue;\n let final: Tensor;\n if (factor > 1) {\n const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values\n const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges\n // const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between\n const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];\n const stack = tf.stack([enh[0], enh[1], enh[2]], 2);\n final = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);\n tf.dispose([...sub, ...range, ...enh, stack]);\n } else {\n final = tf.expandDims(squeeze, 0);\n }\n tf.dispose([...rgb, ...min, ...max, rgb, squeeze, inputImage]);\n return final;\n}\n", "/**\n * Image Processing algorithm implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as fxImage from './imagefx';\nimport type { Input, AnyCanvas, Config } from '../exports';\nimport type { Tensor, Tensor3D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport * as enhance from './enhance';\n\nconst maxSize = 3840;\n// internal temp canvases\nlet inCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet outCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet tmpCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\n// @ts-ignore // imagefx is js module that should be converted to a class\nlet fx: fxImage.GLImageFilter | null; // eslint-disable-line @typescript-eslint/no-redundant-type-constituents\n\nconst last: { inputSum: number, cacheDiff: number, sumMethod: number, inputTensor: undefined | Tensor } = {\n inputSum: 0,\n cacheDiff: 1,\n sumMethod: 0,\n inputTensor: undefined,\n};\n\nexport function reset() {\n last.inputSum = 0;\n last.cacheDiff = 1;\n last.sumMethod = 0;\n last.inputTensor = undefined;\n}\n\nexport function canvas(width: number, height: number): AnyCanvas {\n let c: AnyCanvas;\n if (env.browser) { // browser defines canvas object\n if (env.worker) { // if runing in web worker use OffscreenCanvas\n if (typeof OffscreenCanvas === 'undefined') throw new Error('canvas error: attempted to run in web worker but OffscreenCanvas is not supported');\n c = new OffscreenCanvas(width, height);\n } else { // otherwise use DOM canvas\n if (typeof document !== 'undefined') {\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n } else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n else throw new Error('canvas error: attempted to use canvas in react-native without canvas support installed');\n } else {\n throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n }\n }\n } else { // if not running in browser, there is no \"default\" canvas object, so we need monkey patch or fail\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n // else throw new Error('canvas error: attempted to use canvas in nodejs without canvas support installed');\n }\n // @ts-ignore its either defined or we already threw an error\n return c;\n}\n\n// helper function to copy canvas from input to output\nexport function copy(input: AnyCanvas, output?: AnyCanvas) {\n const outputCanvas = output || canvas(input.width, input.height);\n const ctx = outputCanvas.getContext('2d') as CanvasRenderingContext2D;\n ctx.drawImage(input, 0, 0);\n return outputCanvas;\n}\n\n// process input image and return tensor\n// input can be tensor, imagedata, htmlimageelement, htmlvideoelement\n// input is resized and run through imagefx filter\nexport async function process(input: Input, config: Config, getTensor: boolean = true): Promise<{ tensor: Tensor4D | null, canvas: AnyCanvas | null }> {\n if (!input) {\n // throw new Error('input is missing');\n if (config.debug) log('input error: input is missing');\n return { tensor: null, canvas: null }; // video may become temporarily unavailable due to onresize\n }\n // sanity checks since different browsers do not implement all dom elements\n if (\n !(input instanceof tf.Tensor)\n && !(typeof Image !== 'undefined' && input instanceof Image)\n && !(typeof globalThis.Canvas !== 'undefined' && input instanceof globalThis.Canvas)\n && !(typeof ImageData !== 'undefined' && input instanceof ImageData)\n && !(typeof ImageBitmap !== 'undefined' && input instanceof ImageBitmap)\n && !(typeof HTMLImageElement !== 'undefined' && input instanceof HTMLImageElement)\n && !(typeof HTMLMediaElement !== 'undefined' && input instanceof HTMLMediaElement)\n && !(typeof HTMLVideoElement !== 'undefined' && input instanceof HTMLVideoElement)\n && !(typeof HTMLCanvasElement !== 'undefined' && input instanceof HTMLCanvasElement)\n && !(typeof OffscreenCanvas !== 'undefined' && input instanceof OffscreenCanvas)\n ) {\n throw new Error('input error: type not recognized');\n }\n if (input instanceof tf.Tensor) { // if input is tensor use as-is without filters but correct shape as needed\n let tensor: Tensor | null = null;\n if (input['isDisposedInternal']) throw new Error('input error: attempted to use tensor but it is disposed');\n if (!(input as Tensor).shape) throw new Error('input error: attempted to use tensor without a shape');\n if ((input as Tensor).shape.length === 3) { // [height, width, 3 || 4]\n if ((input as Tensor).shape[2] === 3) { // [height, width, 3] so add batch\n tensor = tf.expandDims(input, 0);\n } else if ((input as Tensor).shape[2] === 4) { // [height, width, 4] so strip alpha and add batch\n const rgb = tf.slice3d(input as Tensor3D, [0, 0, 0], [-1, -1, 3]);\n tensor = tf.expandDims(rgb, 0);\n tf.dispose(rgb);\n }\n } else if ((input as Tensor).shape.length === 4) { // [1, width, height, 3 || 4]\n if ((input as Tensor).shape[3] === 3) { // [1, width, height, 3] just clone\n tensor = tf.clone(input);\n } else if ((input as Tensor).shape[3] === 4) { // [1, width, height, 4] so strip alpha\n tensor = tf.slice4d(input as Tensor4D, [0, 0, 0, 0], [-1, -1, -1, 3]);\n }\n }\n // at the end shape must be [1, height, width, 3]\n if (tensor == null || tensor.shape.length !== 4 || tensor.shape[0] !== 1 || tensor.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${((input as Tensor).shape).toString()}`);\n if ((tensor).dtype === 'int32') {\n const cast = tf.cast(tensor, 'float32');\n tf.dispose(tensor);\n tensor = cast;\n }\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n }\n // check if resizing will be needed\n if (typeof input['readyState'] !== 'undefined' && (input as HTMLMediaElement).readyState <= 2) {\n if (config.debug) log('input stream is not ready');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n const originalWidth: number = input['naturalWidth'] || input['videoWidth'] || input['width'] || (input['shape'] && (input['shape'][1] > 0));\n const originalHeight: number = input['naturalHeight'] || input['videoHeight'] || input['height'] || (input['shape'] && (input['shape'][2] > 0));\n if (!originalWidth || !originalHeight) {\n if (config.debug) log('cannot determine input dimensions');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n let targetWidth: number = originalWidth;\n let targetHeight: number = originalHeight;\n if (targetWidth > maxSize) {\n targetWidth = maxSize;\n targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth);\n }\n if (targetHeight > maxSize) {\n targetHeight = maxSize;\n targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight);\n }\n\n // create our canvas and resize it if needed\n if ((config.filter?.width || 0) > 0) targetWidth = config.filter.width as number;\n else if ((config.filter?.height || 0) > 0) targetWidth = originalWidth * ((config.filter.height || 0) / originalHeight);\n if ((config.filter.height || 0) > 0) targetHeight = config.filter.height as number;\n else if ((config.filter.width || 0) > 0) targetHeight = originalHeight * ((config.filter.width || 0) / originalWidth);\n if (!targetWidth || !targetHeight) throw new Error('input error: cannot determine dimension');\n if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) inCanvas = canvas(targetWidth, targetHeight);\n\n // draw input to our canvas\n const inCtx = inCanvas.getContext('2d') as CanvasRenderingContext2D;\n if ((typeof ImageData !== 'undefined') && (input instanceof ImageData)) {\n inCtx.putImageData(input, 0, 0);\n } else {\n if (config.filter.flip && typeof inCtx.translate !== 'undefined') {\n inCtx.translate(originalWidth, 0);\n inCtx.scale(-1, 1);\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults\n } else {\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n }\n }\n\n if (!outCanvas || (inCanvas.width !== outCanvas.width) || (inCanvas.height !== outCanvas.height)) outCanvas = canvas(inCanvas.width, inCanvas.height); // init output canvas\n\n // imagefx transforms using gl from input canvas to output canvas\n if (config.filter.enabled && env.webgl.supported) {\n if (!fx) fx = env.browser ? new fxImage.GLImageFilter() : null; // && (typeof document !== 'undefined')\n env.filter = !!fx;\n if (!fx?.add) {\n if (config.debug) log('input process error: cannot initialize filters');\n env.webgl.supported = false;\n config.filter.enabled = false;\n copy(inCanvas, outCanvas); // filter failed to initialize\n // return { tensor: null, canvas: inCanvas };\n } else {\n fx.reset();\n if (config.filter.brightness !== 0) fx.add('brightness', config.filter.brightness);\n if (config.filter.contrast !== 0) fx.add('contrast', config.filter.contrast);\n if (config.filter.sharpness !== 0) fx.add('sharpen', config.filter.sharpness);\n if (config.filter.blur !== 0) fx.add('blur', config.filter.blur);\n if (config.filter.saturation !== 0) fx.add('saturation', config.filter.saturation);\n if (config.filter.hue !== 0) fx.add('hue', config.filter.hue);\n if (config.filter.negative) fx.add('negative');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.vintage) fx.add('brownie');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.kodachrome) fx.add('kodachrome');\n if (config.filter.technicolor) fx.add('technicolor');\n if (config.filter.polaroid) fx.add('polaroid');\n if (config.filter.pixelate !== 0) fx.add('pixelate', config.filter.pixelate);\n if (fx.get()?.length > 1) outCanvas = fx.apply(inCanvas);\n else outCanvas = fx.draw(inCanvas);\n }\n } else {\n copy(inCanvas, outCanvas); // if no filters applied, output canvas is input canvas\n if (fx) fx = null;\n env.filter = !!fx;\n }\n\n if (!getTensor) return { tensor: null, canvas: outCanvas }; // just canvas was requested\n if (!outCanvas) throw new Error('canvas error: cannot create output');\n\n // create tensor from image unless input was a tensor already\n let pixels;\n let depth = 3;\n if ((typeof ImageData !== 'undefined' && input instanceof ImageData) || ((input as ImageData).data && (input as ImageData).width && (input as ImageData).height)) { // if input is imagedata, just use it\n if (env.browser && tf.browser) {\n pixels = tf.browser ? tf.browser.fromPixels(input as ImageData) : null;\n } else {\n depth = (input as ImageData).data.length / (input as ImageData).height / (input as ImageData).width;\n // const arr = Uint8Array.from(input['data']);\n const arr = new Uint8Array((input as ImageData).data.buffer);\n pixels = tf.tensor(arr, [(input as ImageData).height, (input as ImageData).width, depth], 'int32');\n }\n } else {\n if (!tmpCanvas || (outCanvas.width !== tmpCanvas.width) || (outCanvas.height !== tmpCanvas.height)) tmpCanvas = canvas(outCanvas.width, outCanvas.height); // init output canvas\n if (tf.browser && env.browser) {\n if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') {\n pixels = tf.browser.fromPixels(outCanvas as HTMLCanvasElement); // safe to reuse since both backend and context are gl based\n } else {\n tmpCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n pixels = tf.browser.fromPixels(tmpCanvas as HTMLCanvasElement);\n }\n } else {\n const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D;\n const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);\n depth = tempData.data.length / targetWidth / targetHeight;\n const arr = new Uint8Array(tempData.data.buffer);\n pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]);\n }\n }\n if (depth === 4) { // rgba to rgb\n const rgb = tf.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); // strip alpha channel\n tf.dispose(pixels);\n pixels = rgb;\n }\n if (!pixels) throw new Error('input error: cannot create tensor');\n const casted: Tensor = tf.cast(pixels, 'float32');\n const tensor: Tensor = config.filter.equalization ? await enhance.histogramEqualization(casted) : tf.expandDims(casted, 0);\n tf.dispose([pixels, casted]);\n\n if (config.filter.autoBrightness) {\n const max = tf.max(tensor);\n const maxVal = await max.data();\n config.filter.brightness = maxVal[0] > 1 ? (1 - maxVal[0] / 255) : (1 - maxVal[0]);\n tf.dispose(max);\n }\n\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n}\n\n/*\nconst checksum = async (input: Tensor): Promise => { // use tf sum or js based sum loop depending on which is faster\n const resizeFact = 48;\n const reduced: Tensor = tf.image.resizeBilinear(input, [Math.trunc((input.shape[1] || 1) / resizeFact), Math.trunc((input.shape[2] || 1) / resizeFact)]);\n const tfSum = async (): Promise => {\n const sumT = tf.sum(reduced);\n const sum0 = await sumT.data();\n tf.dispose(sumT);\n return sum0[0];\n };\n const jsSum = async (): Promise => {\n const reducedData = await reduced.data(); // raw image rgb array\n let sum0 = 0;\n for (let i = 0; i < reducedData.length / 3; i++) sum0 += reducedData[3 * i + 2]; // look only at green value of each pixel\n return sum0;\n };\n if (last.sumMethod === 0) {\n const t0 = now();\n await jsSum();\n const t1 = now();\n await tfSum();\n const t2 = now();\n last.sumMethod = t1 - t0 < t2 - t1 ? 1 : 2;\n }\n const res = last.sumMethod === 1 ? await jsSum() : await tfSum();\n tf.dispose(reduced);\n return res;\n};\n*/\n\nexport async function skip(config: Partial, input: Tensor) {\n let skipFrame = false;\n if (config.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; // cache disabled or input is invalid or too large for cache analysis\n\n /*\n const checkSum = await checksum(input);\n const diff = 100 * (Math.max(checkSum, last.inputSum) / Math.min(checkSum, last.inputSum) - 1);\n last.inputSum = checkSum;\n // if previous frame was skipped, skip this frame if changed more than cacheSensitivity\n // if previous frame was not skipped, then look for cacheSensitivity or difference larger than one in previous frame to avoid resetting cache in subsequent frames unnecessarily\n let skipFrame = diff < Math.max(config.cacheSensitivity, last.cacheDiff);\n // if difference is above 10x threshold, don't use last value to force reset cache for significant change of scenes or images\n last.cacheDiff = diff > 10 * config.cacheSensitivity ? 0 : diff;\n skipFrame = skipFrame && (last.cacheDiff > 0); // if no cached diff value then force no skip\n */\n\n if (!last.inputTensor) {\n last.inputTensor = tf.clone(input);\n } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { // input resolution changed\n tf.dispose(last.inputTensor);\n last.inputTensor = tf.clone(input);\n } else {\n const t: Record = {};\n t.diff = tf.sub(input, last.inputTensor);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; // squared difference relative to input resolution and averaged per channel\n tf.dispose([last.inputTensor, t.diff, t.squared, t.sum]);\n last.inputTensor = tf.clone(input);\n skipFrame = diffRelative <= (config.cacheSensitivity || 0);\n }\n return skipFrame;\n}\n\nexport async function compare(config: Partial, input1: Tensor, input2: Tensor): Promise {\n const t: Record = {};\n if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) {\n if (!config.debug) log('invalid input tensor or tensor shapes do not match:', input1.shape, input2.shape);\n return 0;\n }\n if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) {\n if (!config.debug) log('input tensors must be of shape [1, height, width, 3]:', input1.shape, input2.shape);\n return 0;\n }\n t.input1 = tf.clone(input1);\n t.input2 = (input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2]) ? tf.image.resizeBilinear(input2 as Tensor3D, [input1.shape[1], input1.shape[2]]) : tf.clone(input2);\n t.diff = tf.sub(t.input1, t.input2);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3;\n tf.dispose([t.input1, t.input2, t.diff, t.squared, t.sum]);\n return diffRelative;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as image from '../image/image';\n\n/** Env class that holds detected capabilities */\nexport class Env {\n /** Running in Browser */\n browser: boolean;\n /** Running in NodeJS */\n node: boolean;\n /** Running in WebWorker thread */\n worker: boolean;\n /** Detected platform */\n platform: string = '';\n /** Detected agent */\n agent: string = '';\n /** List of supported backends */\n backends: string[] = [];\n /** Has any work been performed so far */\n initial: boolean;\n /** Are image filters supported? */\n filter: boolean | undefined;\n /** TFJS instance details */\n tfjs: {\n version: undefined | string,\n };\n /** Is offscreenCanvas supported? */\n offscreen: undefined | boolean;\n /** Are performance counter instant values or additive */\n perfadd: boolean = false;\n /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */\n tensorflow: {\n version: undefined | string,\n gpu: undefined | boolean,\n } = {\n version: undefined,\n gpu: undefined,\n };\n /** WASM detected capabilities */\n wasm: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n simd: undefined | boolean,\n multithread: undefined | boolean,\n } = {\n supported: undefined,\n backend: undefined,\n simd: undefined,\n multithread: undefined,\n };\n /** WebGL detected capabilities */\n webgl: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n version: undefined | string,\n renderer: undefined | string,\n shader: undefined | string,\n vendor: undefined | string,\n } = {\n supported: undefined,\n backend: undefined,\n version: undefined,\n renderer: undefined,\n shader: undefined,\n vendor: undefined,\n };\n /** WebGPU detected capabilities */\n webgpu: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n adapter: undefined | GPUAdapterInfo,\n } = {\n supported: undefined,\n backend: undefined,\n adapter: undefined,\n };\n /** CPU info */\n cpu: {\n model: undefined | string,\n flags: string[],\n } = {\n model: undefined,\n flags: [],\n };\n /** List of supported kernels for current backend */\n kernels: string[] = [];\n\n /** MonkeyPatch for Canvas/Image/ImageData */\n #canvas: undefined;\n #image: undefined;\n #imageData: undefined;\n\n get Canvas() { return this.#canvas; }\n set Canvas(val) { this.#canvas = val; globalThis.Canvas = val; }\n get Image() { return this.#image; }\n // @ts-ignore monkey-patch;\n set Image(val) { this.#image = val; globalThis.Image = val; }\n get ImageData() { return this.#imageData; }\n // @ts-ignore monkey-patch;\n set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; }\n\n constructor() {\n this.browser = (typeof navigator !== 'undefined') && (typeof navigator.appVersion !== 'undefined');\n this.node = (typeof process !== 'undefined') && (typeof process.versions !== 'undefined') && (typeof process.versions.node !== 'undefined');\n this.tfjs = { version: tf.version['tfjs-core'] };\n this.offscreen = typeof OffscreenCanvas !== 'undefined';\n this.initial = true;\n\n // @ts-ignore WorkerGlobalScope evaluated in browser only\n this.worker = this.browser && this.offscreen ? (typeof WorkerGlobalScope !== 'undefined') : undefined;\n if ((typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined')) { // TBD replace with navigator.userAgentData once in mainline\n const agent = navigator.userAgent || '';\n const raw = agent.match(/\\(([^()]+)\\)/g);\n if (raw?.[0]) {\n const platformMatch = raw[0].match(/\\(([^()]+)\\)/g);\n this.platform = (platformMatch?.[0]) ? platformMatch[0].replace(/\\(|\\)/g, '') : '';\n this.agent = agent.replace(raw[0], '');\n if (this.platform[1]) this.agent = this.agent.replace(raw[1], '');\n this.agent = this.agent.replace(/ /g, ' ');\n }\n } else if (typeof process !== 'undefined') {\n this.platform = `${process.platform} ${process.arch}`;\n this.agent = `NodeJS ${process.version}`;\n }\n }\n\n /** update backend information */\n async updateBackend() {\n // analyze backends\n this.backends = Object.keys(tf.engine().registryFactory);\n try { // backend may not be initialized\n this.tensorflow = {\n version: (tf.backend()['binding'] ? tf.backend()['binding'].TF_Version : undefined),\n gpu: (tf.backend()['binding'] ? tf.backend()['binding'].isUsingGpuDevice() : undefined),\n };\n } catch { /**/ }\n this.wasm.supported = typeof WebAssembly !== 'undefined';\n this.wasm.backend = this.backends.includes('wasm');\n if (this.wasm.supported && this.wasm.backend) {\n this.wasm.simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n this.wasm.multithread = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n }\n const c = image.canvas(100, 100);\n const gl = c ? c.getContext('webgl2') as WebGL2RenderingContext : undefined; // causes too many gl contexts\n this.webgl.supported = typeof gl !== 'undefined';\n this.webgl.backend = this.backends.includes('webgl');\n if (this.webgl.supported && this.webgl.backend && gl) {\n this.webgl.version = gl.getParameter(gl.VERSION);\n this.webgl.vendor = gl.getParameter(gl.VENDOR);\n this.webgl.renderer = gl.getParameter(gl.RENDERER);\n this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\n }\n this.webgpu.supported = this.browser && typeof navigator !== 'undefined' && typeof navigator.gpu !== 'undefined';\n this.webgpu.backend = this.backends.includes('webgpu');\n try {\n if (this.webgpu.supported) {\n const adapter = await navigator.gpu.requestAdapter();\n this.webgpu.adapter = await adapter?.requestAdapterInfo();\n }\n } catch {\n this.webgpu.supported = false;\n }\n try {\n this.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase());\n } catch { /**/ }\n }\n\n /** update cpu information */\n updateCPU() {\n const cpu = { model: '', flags: [] };\n if (this.node && this.platform.startsWith('linux')) {\n /*\n const fs = require('fs');\n try {\n const data = fs.readFileSync('/proc/cpuinfo').toString();\n for (const line of data.split('\\n')) {\n if (line.startsWith('model name')) cpu.model = line.match(/:(.*)/g)[0].replace(':', '').trim();\n if (line.startsWith('flags')) cpu.flags = line.match(/:(.*)/g)[0].replace(':', '').trim().split(' ').sort();\n }\n } catch { }\n */\n }\n if (!this.cpu) Object.defineProperty(this, 'cpu', { value: cpu });\n else this.cpu = cpu;\n }\n}\n\nexport const env = new Env();\n", "import { log } from './util';\n\n// const log = (...msg) => console.log('webcam', ...msg); // eslint-disable-line no-console\n\n/** WebCam configuration */\nexport interface WebCamConfig {\n /**\n * element can be:\n * - string which indicates dom element id\n * - actual HTMLVideo dom element\n * - undefined in which case a new HTMLVideoElement will be created\n */\n element: string | HTMLVideoElement | undefined,\n /** print messages on console */\n debug: boolean,\n /** use front or back camera */\n mode: 'front' | 'back',\n /** camera crop mode */\n crop: boolean,\n /** desired webcam width */\n width: number,\n /** desired webcam height */\n height: number,\n /** deviceId of the video device to use */\n id?: string,\n}\n\nexport class WebCam { // eslint-disable-line @typescript-eslint/no-extraneous-class\n /** current webcam configuration */\n config: WebCamConfig;\n /** instance of dom element associated with webcam stream */\n element: HTMLVideoElement | undefined;\n /** active webcam stream */\n stream: MediaStream | undefined;\n /** enumerated video devices */\n devices: MediaDeviceInfo[] = [];\n\n constructor() {\n this.config = {\n element: undefined,\n debug: true,\n mode: 'front',\n crop: false,\n width: 0,\n height: 0,\n };\n }\n\n /** get active webcam stream track */\n public get track(): MediaStreamTrack | undefined {\n if (!this.stream) return undefined;\n return this.stream.getVideoTracks()[0];\n }\n\n /** get webcam capabilities */\n public get capabilities(): MediaTrackCapabilities | undefined {\n if (!this.track) return undefined;\n return this.track.getCapabilities ? this.track.getCapabilities() : undefined;\n }\n\n /** get webcam constraints */\n public get constraints(): MediaTrackConstraints | undefined {\n if (!this.track) return undefined;\n return this.track.getConstraints ? this.track.getConstraints() : undefined;\n }\n\n /** get webcam settings */\n public get settings(): MediaTrackSettings | undefined {\n if (!this.stream) return undefined;\n const track: MediaStreamTrack = this.stream.getVideoTracks()[0];\n return track.getSettings ? track.getSettings() : undefined;\n }\n\n /** get webcam label */\n public get label(): string {\n if (!this.track) return '';\n return this.track.label;\n }\n\n /** is webcam paused */\n public get paused(): boolean {\n return this.element?.paused || false;\n }\n\n /** webcam current width */\n public get width(): number {\n return this.element?.videoWidth || 0;\n }\n\n /** webcam current height */\n public get height(): number {\n return this.element?.videoHeight || 0;\n }\n\n public enumerate = async (): Promise => {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.devices = devices.filter((device) => device.kind === 'videoinput');\n } catch {\n this.devices = [];\n }\n return this.devices;\n };\n\n /** start method initializizes webcam stream and associates it with a dom video element */\n public start = async (webcamConfig?: Partial): Promise => {\n // set config\n if (webcamConfig?.debug) this.config.debug = webcamConfig?.debug;\n if (webcamConfig?.crop) this.config.crop = webcamConfig?.crop;\n if (webcamConfig?.mode) this.config.mode = webcamConfig?.mode;\n if (webcamConfig?.width) this.config.width = webcamConfig?.width;\n if (webcamConfig?.height) this.config.height = webcamConfig?.height;\n if (webcamConfig?.id) this.config.id = webcamConfig?.id;\n\n // use or create dom element\n if (webcamConfig?.element) {\n if (typeof webcamConfig.element === 'string') {\n const el = document.getElementById(webcamConfig.element);\n if (el && el instanceof HTMLVideoElement) {\n this.element = el;\n } else {\n if (this.config.debug) log('webcam', 'cannot get dom element', webcamConfig.element);\n return `webcam error: cannot get dom element: ${webcamConfig.element}`;\n }\n } else if (webcamConfig.element instanceof HTMLVideoElement) {\n this.element = webcamConfig.element;\n } else {\n if (this.config.debug) log('webcam', 'unknown dom element', webcamConfig.element);\n return `webcam error: unknown dom element: ${webcamConfig.element}`;\n }\n } else {\n this.element = document.createElement('video');\n }\n\n // set constraints to use\n const requestedConstraints: MediaStreamConstraints = {\n audio: false,\n video: {\n facingMode: this.config.mode === 'front' ? 'user' : 'environment',\n // @ts-ignore // resizeMode is still not defined in tslib\n resizeMode: this.config.crop ? 'crop-and-scale' : 'none',\n },\n };\n if (this.config?.width > 0) (requestedConstraints.video as MediaTrackConstraints).width = { ideal: this.config.width };\n if (this.config?.height > 0) (requestedConstraints.video as MediaTrackConstraints).height = { ideal: this.config.height };\n if (this.config.id) (requestedConstraints.video as MediaTrackConstraintSet).deviceId = this.config.id;\n\n // set default event listeners\n this.element.addEventListener('play', () => { if (this.config.debug) log('webcam', 'play'); });\n this.element.addEventListener('pause', () => { if (this.config.debug) log('webcam', 'pause'); });\n this.element.addEventListener('click', async () => { // pause when clicked on screen and resume on next click\n if (!this.element || !this.stream) return;\n if (this.element.paused) await this.element.play();\n else this.element.pause();\n });\n\n // get webcam and set it to run in dom element\n if (!navigator?.mediaDevices) {\n if (this.config.debug) log('webcam error', 'no devices');\n return 'webcam error: no devices';\n }\n try {\n this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); // get stream that satisfies constraints\n } catch (err) {\n log('webcam', err);\n return `webcam error: ${err}`;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam error', 'no stream');\n return 'webcam error no stream';\n }\n this.element.srcObject = this.stream; // assign it to dom element\n const ready = new Promise((resolve) => { // wait until stream is ready\n if (!this.element) resolve(false);\n else this.element.onloadeddata = () => resolve(true);\n });\n await ready;\n await this.element.play(); // start playing\n\n if (this.config.debug) {\n log('webcam', {\n width: this.width,\n height: this.height,\n label: this.label,\n stream: this.stream,\n track: this.track,\n settings: this.settings,\n constraints: this.constraints,\n capabilities: this.capabilities,\n });\n }\n return `webcam: ${this.label}`;\n };\n\n /** pause webcam video method */\n public pause = (): void => {\n if (this.element) this.element.pause();\n };\n\n /** play webcam video method */\n public play = async (): Promise => {\n if (this.element) await this.element.play();\n };\n\n /** stop method stops active webcam stream track and disconnects webcam */\n public stop = (): void => {\n if (this.config.debug) log('webcam', 'stop');\n if (this.track) this.track.stop();\n };\n}\n", "{\n \"antispoof\": 853098,\n \"blazeface\": 538928,\n \"centernet\": 4030290,\n \"emotion\": 820516,\n \"facemesh\": 1477958,\n \"faceres\": 6978814,\n \"handlandmark-lite\": 2023432,\n \"handtrack\": 2964837,\n \"iris\": 2599092,\n \"liveness\": 592976,\n \"models\": 0,\n \"movenet-lightning\": 4650216,\n \"affectnet-mobilenet\": 6920630,\n \"age\": 161240,\n \"blazeface-back\": 538928,\n \"blazeface-front\": 402048,\n \"blazepose-detector\": 5928856,\n \"blazepose-full\": 6339202,\n \"blazepose-heavy\": 27502466,\n \"blazepose-lite\": 2726402,\n \"efficientpose\": 5651240,\n \"faceboxes\": 2013002,\n \"facemesh-attention-pinto\": 2387598,\n \"facemesh-attention\": 2382414,\n \"facemesh-detection-full\": 1026192,\n \"facemesh-detection-short\": 201268,\n \"faceres-deep\": 13957620,\n \"gear-e1\": 112438,\n \"gear-e2\": 112438,\n \"gear\": 1498916,\n \"gender-ssrnet-imdb\": 161236,\n \"gender\": 201808,\n \"handdetect\": 3515612,\n \"handlandmark-full\": 5431368,\n \"handlandmark-sparse\": 5286322,\n \"handskeleton\": 5502280,\n \"meet\": 372228,\n \"mobileface\": 2183192,\n \"mobilefacenet\": 5171976,\n \"movenet-multipose\": 9448838,\n \"movenet-thunder\": 12477112,\n \"nanodet\": 7574558,\n \"posenet\": 5032780,\n \"rvm\": 3739355,\n \"selfie\": 212886,\n \"anti-spoofing\": 853098,\n \"efficientpose-i-lite\": 2269064,\n \"efficientpose-ii-lite\": 5651240,\n \"efficientpose-iv\": 25643252,\n \"insightface-efficientnet-b0\": 13013224,\n \"insightface-ghostnet-strides1\": 8093408,\n \"insightface-ghostnet-strides2\": 8049584,\n \"insightface-mobilenet-emore\": 6938536,\n \"insightface-mobilenet-swish\": 12168584,\n \"nanodet-e\": 12319156,\n \"nanodet-g\": 7574558,\n \"nanodet-m\": 1887474,\n \"nanodet-t\": 5294216\n}", "import * as tf from 'dist/tfjs.esm.js';\nimport { log, join } from '../util/util';\nimport type { GraphModel } from './types';\nimport type { Config } from '../config';\nimport * as modelsDefs from '../../models/models.json';\n\nconst options = {\n cacheModels: true,\n cacheSupported: true,\n verbose: true,\n debug: false,\n modelBasePath: '',\n};\n\nexport interface ModelInfo {\n name: string,\n inCache: boolean,\n sizeDesired: number,\n sizeFromManifest: number,\n sizeLoadedWeights: number,\n url: string,\n}\n\nexport const modelStats: Record = {};\n\nasync function httpHandler(url: string, init?: RequestInit): Promise {\n if (options.debug) log('load model fetch:', url, init);\n return fetch(url, init);\n}\n\nexport function setModelLoadOptions(config: Config) {\n options.cacheModels = config.cacheModels;\n options.verbose = config.debug;\n options.modelBasePath = config.modelBasePath;\n}\n\nexport async function loadModel(modelPath: string | undefined): Promise {\n let modelUrl = join(options.modelBasePath, modelPath || '');\n if (!modelUrl.toLowerCase().endsWith('.json')) modelUrl += '.json';\n const modelPathSegments = modelUrl.includes('/') ? modelUrl.split('/') : modelUrl.split('\\\\');\n const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace('.json', '');\n const cachedModelName = 'indexeddb://' + shortModelName; // generate short model name for cache\n modelStats[shortModelName] = {\n name: shortModelName,\n sizeFromManifest: 0,\n sizeLoadedWeights: 0,\n sizeDesired: modelsDefs[shortModelName],\n inCache: false,\n url: '',\n };\n options.cacheSupported = (typeof indexedDB !== 'undefined'); // check if localStorage and indexedb are available\n let cachedModels = {};\n try {\n cachedModels = (options.cacheSupported && options.cacheModels) ? await tf.io.listModels() : {}; // list all models already in cache // this fails for webview although localStorage is defined\n } catch {\n options.cacheSupported = false;\n }\n modelStats[shortModelName].inCache = (options.cacheSupported && options.cacheModels) && Object.keys(cachedModels).includes(cachedModelName); // is model found in cache\n modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl;\n const tfLoadOptions = typeof fetch === 'undefined' ? {} : { fetchFunc: (url: string, init?: RequestInit) => httpHandler(url, init) };\n let model: GraphModel = new tf.GraphModel(modelStats[shortModelName].url, tfLoadOptions) as unknown as GraphModel; // create model prototype and decide if load from cache or from original modelurl\n let loaded = false;\n try {\n // @ts-ignore private function\n model.findIOHandler(); // decide how to actually load a model\n if (options.debug) log('model load handler:', model['handler']);\n } catch (err) {\n log('error finding model i/o handler:', modelUrl, err);\n }\n try {\n // @ts-ignore private property\n const artifacts = await model.handler?.load() || null; // load manifest\n modelStats[shortModelName].sizeFromManifest = artifacts?.weightData?.byteLength || 0;\n if (artifacts) model.loadSync(artifacts); // load weights\n else model = await tf.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions) as unknown as GraphModel;\n // @ts-ignore private property\n modelStats[shortModelName].sizeLoadedWeights = model.artifacts?.weightData?.byteLength || 0;\n if (options.verbose) log('load:', { model: shortModelName, url: model['modelUrl'], bytes: modelStats[shortModelName].sizeLoadedWeights });\n loaded = true;\n } catch (err) {\n log('error loading model:', modelUrl, err);\n }\n if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { // save model to cache\n try {\n const saveResult = await model.save(cachedModelName);\n if (options.debug) log('model saved:', cachedModelName, saveResult);\n } catch (err) {\n log('error saving model:', modelUrl, err);\n }\n }\n return model;\n}\n", "{\n \"name\": \"@vladmandic/human\",\n \"version\": \"3.2.1\",\n \"description\": \"Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition\",\n \"sideEffects\": false,\n \"main\": \"dist/human.node.js\",\n \"module\": \"dist/human.esm.js\",\n \"browser\": \"dist/human.esm.js\",\n \"types\": \"types/human.d.ts\",\n \"exports\": {\n \"node\": {\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.node.js\",\n \"module\": \"./dist/human.node.js\"\n },\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.esm.js\",\n \"script\": \"./dist/human.js\",\n \"module\": \"./dist/human.esm.js\",\n \"types\": \"./types/human.d.ts\",\n \"dist/human\": \"./dist/human.js\",\n \"dist/human.js\": \"./dist/human.js\",\n \"dist/human.esm\": \"./dist/human.esm.js\",\n \"dist/human.esm.js\": \"./dist/human.esm.js\",\n \"dist/human.esm-nobundle\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.esm-nobundle.js\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.node\": \"./dist/human.node.js\",\n \"dist/human.node.js\": \"./dist/human.node.js\",\n \"dist/human.node-wasm\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-wasm.js\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-gpu\": \"./dist/human.node-gpu.js\",\n \"dist/human.node-gpu.js\": \"./dist/human.node-gpu.js\"\n },\n \"author\": \"Vladimir Mandic \",\n \"bugs\": {\n \"url\": \"https://github.com/vladmandic/human/issues\"\n },\n \"homepage\": \"https://vladmandic.github.io/human/demo/index.html\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=14.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/vladmandic/human.git\"\n },\n \"scripts\": {\n \"start\": \"node --no-warnings demo/nodejs/node.js\",\n \"dev\": \"build --profile development\",\n \"clean\": \"build --profile clean\",\n \"build\": \"rimraf test/build.log && node build.js\",\n \"test\": \"node --no-warnings --unhandled-rejections=strict --trace-uncaught test/node.js\",\n \"lint\": \"eslint *.json *.js src demo test models wiki\",\n \"scan\": \"npx auditjs@latest ossi --dev --quiet\"\n },\n \"keywords\": [\n \"human\",\n \"human-library\",\n \"face-detection\",\n \"faceid\",\n \"face-geometry\",\n \"face-embedding\",\n \"face-recognition\",\n \"face-description\",\n \"face-matching\",\n \"body-tracking\",\n \"body-segmentation\",\n \"hand-tracking\",\n \"iris-tracking\",\n \"age-estimation\",\n \"emotion-detection\",\n \"gender-prediction\",\n \"gesture-recognition\",\n \"gaze-tracking\",\n \"age-gender\",\n \"tensorflowjs\",\n \"tfjs\",\n \"tensorflow\"\n ],\n \"devDependencies\": {\n \"@html-eslint/eslint-plugin\": \"^0.21.0\",\n \"@html-eslint/parser\": \"^0.21.0\",\n \"@microsoft/api-extractor\": \"^7.40.1\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.14.0\",\n \"@tensorflow/tfjs-converter\": \"^4.17.0\",\n \"@tensorflow/tfjs-core\": \"^4.17.0\",\n \"@tensorflow/tfjs-data\": \"^4.17.0\",\n \"@tensorflow/tfjs-layers\": \"^4.17.0\",\n \"@tensorflow/tfjs-node\": \"^4.17.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.17.0\",\n \"@types/node\": \"^20.11.19\",\n \"@types/offscreencanvas\": \"^2019.7.3\",\n \"@typescript-eslint/eslint-plugin\": \"^6.21.0\",\n \"@typescript-eslint/parser\": \"^6.21.0\",\n \"@vladmandic/build\": \"^0.9.3\",\n \"@vladmandic/pilogger\": \"^0.4.9\",\n \"@vladmandic/tfjs\": \"github:vladmandic/tfjs\",\n \"canvas\": \"^2.11.2\",\n \"esbuild\": \"^0.19.12\",\n \"eslint\": \"8.55.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^7.1.0\",\n \"eslint-plugin-import\": \"^2.29.1\",\n \"eslint-plugin-json\": \"^3.1.0\",\n \"eslint-plugin-markdown\": \"^3.0.1\",\n \"eslint-plugin-node\": \"^11.1.0\",\n \"eslint-plugin-promise\": \"^6.1.1\",\n \"rimraf\": \"^5.0.5\",\n \"tslib\": \"^2.6.2\",\n \"typedoc\": \"0.25.4\",\n \"typescript\": \"~5.3.3\"\n }\n}\n", "/** TFJS custom backend registration */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human } from '../human';\nimport { log } from '../util/util';\nimport * as image from '../image/image';\nimport type { AnyCanvas } from '../exports';\n\nexport const config = {\n name: 'humangl',\n priority: 999,\n canvas: null as null | AnyCanvas,\n gl: null as null | WebGL2RenderingContext,\n extensions: [] as string[] | null,\n webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2\n alpha: false,\n antialias: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: false,\n stencil: false,\n failIfMajorPerformanceCaveat: false, // default=true\n desynchronized: true, // default=undefined\n },\n};\n\nfunction extensions(): void {\n /*\n https://www.khronos.org/registry/webgl/extensions/\n https://webglreport.com/?v=2\n */\n const gl = config.gl;\n if (!gl) return;\n config.extensions = gl.getSupportedExtensions();\n // gl.getExtension('KHR_parallel_shader_compile');\n}\n\n/**\n * Registers custom WebGL2 backend to be used by Human library\n *\n * @returns void\n */\nexport function register(instance: Human): void {\n // force backend reload if gl context is not valid\n if (instance.config.backend !== 'humangl') return;\n if ((config.name in tf.engine().registry) && !config?.gl?.getParameter(config.gl.VERSION)) {\n log('humangl error: backend invalid context');\n instance.models.reset();\n /*\n log('resetting humangl backend');\n await tf.removeBackend(config.name);\n await register(instance); // re-register\n */\n }\n if (!tf.findBackend(config.name)) {\n try {\n config.canvas = image.canvas(100, 100);\n } catch (err) {\n log('humangl error: cannot create canvas:', err);\n return;\n }\n try {\n config.gl = config.canvas.getContext('webgl2', config.webGLattr) as WebGL2RenderingContext;\n if (!config.gl) {\n log('humangl error: cannot get webgl context');\n return;\n }\n const glv2 = config.gl.getParameter(config.gl.VERSION).includes('2.0');\n if (!glv2) {\n log('backend override: using fallback webgl backend as webgl 2.0 is not detected');\n instance.config.backend = 'webgl';\n return;\n }\n if (config.canvas) {\n config.canvas.addEventListener('webglcontextlost', (e) => {\n log('humangl error:', e.type);\n log('possible browser memory leak using webgl or conflict with multiple backend registrations');\n instance.emit('error');\n throw new Error('backend error: webgl context lost');\n });\n config.canvas.addEventListener('webglcontextrestored', (e) => {\n log('humangl error: context restored:', e);\n });\n config.canvas.addEventListener('webglcontextcreationerror', (e) => {\n log('humangl error: context create:', e);\n });\n }\n } catch (err) {\n log('humangl error: cannot get webgl context:', err);\n return;\n }\n try {\n tf.setWebGLContext(2, config.gl);\n } catch (err) {\n log('humangl error: cannot set webgl context:', err);\n return;\n }\n try {\n const ctx = new tf.GPGPUContext(config.gl);\n // @ts-ignore uncompatible kernelMs timing info\n tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);\n } catch (err) {\n log('humangl error: cannot register webgl backend:', err);\n return;\n }\n try {\n const kernels = tf.getKernelsForBackend('webgl');\n kernels.forEach((kernelConfig) => {\n const newKernelConfig = { ...kernelConfig, backendName: config.name };\n tf.registerKernel(newKernelConfig);\n });\n } catch (err) {\n log('humangl error: cannot update webgl backend registration:', err);\n return;\n }\n try {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_VERSION) tf.env().set('WEBGL_VERSION', 2);\n } catch (err) {\n log('humangl error: cannot set WebGL backend flags:', err);\n return;\n }\n extensions();\n const backend = tf.backend();\n const current = typeof backend['gpgpu'] !== 'undefined' ? backend['getGPGPUContext']().gl : null;\n if (current) {\n if (instance.config.debug) log('humangl backend registered:', { webgl: current.getParameter(current.VERSION) as string, renderer: current.getParameter(current.RENDERER) as string });\n } else {\n log('humangl error: no current gl context:', current, config.gl);\n }\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from './types';\n\nexport const constants: Record = {\n tf255: 255.0,\n tf1: 1.0,\n tf2: 2.0,\n tf05: 0.5,\n tf127: 127.5,\n rgb: [0.2989, 0.5870, 0.1140],\n};\n\nexport function init() {\n constants.tf255 = tf.scalar(255.0, 'float32');\n constants.tf1 = tf.scalar(1.0, 'float32');\n constants.tf2 = tf.scalar(2.0, 'float32');\n constants.tf05 = tf.scalar(0.5, 'float32');\n constants.tf127 = tf.scalar(127.5, 'float32');\n constants.rgb = tf.tensor1d([0.2989, 0.5870, 0.1140], 'float32'); // factors for red/green/blue colors when converting to grayscale\n}\n", "/** TFJS backend initialization and customization */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human, Config, BackendEnum } from '../human';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as humangl from './humangl';\nimport * as constants from './constants';\nimport type { TensorInfo } from './types';\n\nexport async function getBestBackend(): Promise {\n await env.updateBackend(); // update env on backend init\n if (env.tensorflow?.version) return 'tensorflow';\n if (env.webgpu.supported && env.webgpu.backend) return 'webgpu';\n if (env.webgl.supported && env.webgl.backend) return 'webgl';\n if (env.wasm.supported && env.wasm.backend) return 'wasm';\n return 'cpu';\n}\n\nfunction registerCustomOps(config: Config) {\n const newKernels: string[] = [];\n if (!env.kernels.includes('mod')) {\n const kernelMod = {\n kernelName: 'Mod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.sub(op.inputs.a, tf.mul(tf.div(op.inputs.a, op.inputs.b), op.inputs.b))),\n };\n tf.registerKernel(kernelMod);\n env.kernels.push('mod');\n newKernels.push('mod');\n }\n if (!env.kernels.includes('floormod')) {\n const kernelFloorMod = {\n kernelName: 'FloorMod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.add(tf.mul(tf.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf.mod(op.inputs.a, op.inputs.b))),\n };\n tf.registerKernel(kernelFloorMod);\n env.kernels.push('floormod');\n newKernels.push('floormod');\n }\n /*\n if (!env.kernels.includes('atan2') && config.softwareKernels) {\n const kernelAtan2 = {\n kernelName: 'Atan2',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu');\n const t = tf.atan2(op.inputs.a, op.inputs.b);\n tf.setBackend(backend);\n return t;\n }),\n };\n if (config.debug) log('registered kernel:', 'atan2');\n log('registered kernel:', 'atan2');\n tf.registerKernel(kernelAtan2);\n env.kernels.push('atan2');\n newKernels.push('atan2');\n }\n */\n if (!env.kernels.includes('rotatewithoffset') && config.softwareKernels) {\n const kernelRotateWithOffset = {\n kernelName: 'RotateWithOffset',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu'); // eslint-disable-line @typescript-eslint/no-floating-promises\n const t = tf.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center);\n tf.setBackend(backend); // eslint-disable-line @typescript-eslint/no-floating-promises\n return t;\n }),\n };\n tf.registerKernel(kernelRotateWithOffset);\n env.kernels.push('rotatewithoffset');\n newKernels.push('rotatewithoffset');\n }\n if ((newKernels.length > 0) && config.debug) log('registered kernels:', newKernels);\n}\n\nlet defaultFlags: Record = {};\n\nexport async function check(instance: Human, force = false) {\n instance.state = 'backend';\n if (instance.config.backend?.length === 0) instance.config.backend = await getBestBackend();\n if (force || env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {\n const timeStamp = now();\n\n if (instance.config.backend && instance.config.backend.length > 0) {\n // detect web worker\n // @ts-ignore ignore missing type for WorkerGlobalScope as that is the point\n if (typeof window === 'undefined' && typeof WorkerGlobalScope !== 'undefined' && instance.config.debug) {\n if (instance.config.debug) log('running inside web worker');\n }\n\n if (typeof navigator !== 'undefined' && navigator?.userAgent?.toLowerCase().includes('electron')) {\n if (instance.config.debug) log('running inside electron');\n }\n\n // check available backends\n let available = Object.keys(tf.engine().registryFactory as Record);\n if (instance.config.backend === 'humangl' && !available.includes('humangl')) {\n humangl.register(instance);\n available = Object.keys(tf.engine().registryFactory as Record);\n }\n if (instance.config.debug) log('available backends:', available);\n\n // force browser vs node backend\n if (env.browser && !env.node && (instance.config.backend === 'tensorflow') && available.includes('webgl')) {\n if (instance.config.debug) log('override: backend set to tensorflow while running in browser');\n instance.config.backend = 'webgl';\n }\n if (env.node && !env.browser && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl') && available.includes('tensorflow')) {\n if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`);\n instance.config.backend = 'tensorflow';\n }\n\n // handle webgpu\n if (env.browser && instance.config.backend === 'webgpu') {\n if (typeof navigator === 'undefined' || typeof navigator.gpu === 'undefined') {\n log('override: backend set to webgpu but browser does not support webgpu');\n instance.config.backend = 'webgl';\n } else {\n const adapter = await navigator.gpu.requestAdapter();\n if (instance.config.debug) log('enumerated webgpu adapter:', adapter);\n if (!adapter) {\n log('override: backend set to webgpu but browser reports no available gpu');\n instance.config.backend = 'webgl';\n } else {\n // @ts-ignore requestAdapterInfo is not in tslib\n const adapterInfo = 'requestAdapterInfo' in adapter ? await adapter.requestAdapterInfo() : undefined;\n // if (adapter.features) adapter.features.forEach((feature) => log('webgpu features:', feature));\n log('webgpu adapter info:', adapterInfo);\n }\n }\n }\n\n if (!available.includes(instance.config.backend)) {\n log(`error: backend ${instance.config.backend} not found in registry`);\n instance.config.backend = env.node ? 'tensorflow' : 'webgl';\n if (instance.config.debug) log(`override: setting backend ${instance.config.backend}`);\n }\n\n if (instance.config.debug) log('setting backend:', [instance.config.backend]);\n\n // customize wasm\n if (instance.config.backend === 'wasm') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true);\n if (instance.config.debug) log('wasm path:', instance.config.wasmPath);\n if (typeof tf.setWasmPaths !== 'undefined') tf.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch);\n else throw new Error('backend error: attempting to use wasm backend but wasm path is not set');\n let mt = false;\n let simd = false;\n try {\n mt = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n if (instance.config.debug) log(`wasm execution: ${simd ? 'simd' : 'no simd'} ${mt ? 'multithreaded' : 'singlethreaded'}`);\n if (instance.config.debug && !simd) log('warning: wasm simd support is not enabled');\n } catch {\n log('wasm detection failed');\n }\n }\n\n try {\n await tf.setBackend(instance.config.backend);\n await tf.ready();\n } catch (err) {\n log('error: cannot set backend:', instance.config.backend, err);\n return false;\n }\n // @ts-ignore private property\n if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(tf.env().flags));\n }\n\n // customize humangl\n if (tf.getBackend() === 'humangl' || tf.getBackend() === 'webgl') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', true); // default=false \n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_EXP_CONV) tf.env().set('WEBGL_EXP_CONV', true); // default=false \n // if (tf.env().flagRegistry['WEBGL_PACK_DEPTHWISECONV']) tf.env().set('WEBGL_PACK_DEPTHWISECONV', false); // default=true \n // if (tf.env().flagRegistry.USE_SETTIMEOUTCUSTOM) tf.env().set('USE_SETTIMEOUTCUSTOM', true); // default=false \n // if (tf.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD) tf.env().set('CPU_HANDOFF_SIZE_THRESHOLD', 1024); // default=1000\n // if (tf.env().flagRegistry['WEBGL_FORCE_F16_TEXTURES'] && !instance.config.object.enabled) tf.env().set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision\n if (instance.config.debug && typeof instance.config.deallocate !== 'undefined' && instance.config.deallocate) { // hidden param\n log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', true);\n tf.env().set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0);\n }\n }\n\n // customize webgpu\n if (tf.getBackend() === 'webgpu') {\n // if (tf.env().flagRegistry['WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512);\n // if (tf.env().flagRegistry['WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE']) tf.env().set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0);\n // if (tf.env().flagRegistry['WEBGPU_CPU_FORWARD']) tf.env().set('WEBGPU_CPU_FORWARD', true);\n }\n\n if (instance.config.debug) {\n // @ts-ignore private property\n const newFlags = tf.env().flags;\n const updatedFlags = {};\n for (const key of Object.keys(newFlags)) {\n if (defaultFlags[key] === newFlags[key]) continue;\n updatedFlags[key] = newFlags[key];\n }\n if (instance.config.debug && Object.keys(updatedFlags).length > 0) log('backend:', tf.getBackend(), 'flags:', updatedFlags);\n }\n\n if (instance.config.flags && Object.keys(instance.config.flags).length > 0) {\n if (instance.config.debug) log('flags:', instance.config['flags']);\n for (const [key, val] of Object.entries(instance.config.flags)) {\n tf.env().set(key, val as number | boolean);\n }\n }\n\n tf.enableProdMode();\n constants.init();\n instance.performance.initBackend = Math.trunc(now() - timeStamp);\n instance.config.backend = tf.getBackend() as BackendEnum;\n await env.updateBackend(); // update env on backend init\n registerCustomOps(instance.config);\n // await env.updateBackend(); // update env on backend init\n // env.initial = false;\n }\n return true;\n}\n\n// register fake missing tfjs ops\nexport function fakeOps(kernelNames: string[], config) {\n // if (config.debug) log('registerKernel:', kernelNames);\n for (const kernelName of kernelNames) {\n const kernelConfig = {\n kernelName,\n backendName: config.backend,\n kernelFunc: (param): TensorInfo => {\n if (config.debug) log('kernelFunc', kernelName, config.backend, param);\n return param?.inputs?.info as TensorInfo;\n },\n // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n };\n tf.registerKernel(kernelConfig);\n }\n env.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); // re-scan registered ops\n}\n", "/**\n * Module that implements helper draw functions, exposed as human.draw\n */\n\nimport { mergeDeep, now } from '../util/util';\nimport { env } from '../util/env';\nimport { getCanvasContext, rect } from './primitives';\nimport { options } from './options';\nimport { face } from './face';\nimport { body } from './body';\nimport { hand } from './hand';\nimport { object } from './object';\nimport { gesture } from './gesture';\nimport { defaultLabels } from './labels';\nimport type { Result, PersonResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet drawTime = 0;\n\nexport { options } from './options';\nexport { face } from './face';\nexport { body } from './body';\nexport { hand } from './hand';\nexport { object } from './object';\nexport { gesture } from './gesture';\n\n/** draw combined person results instead of individual detection result objects */\nexport function person(inCanvas: AnyCanvas, result: PersonResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n\n for (let i = 0; i < result.length; i++) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels) {\n const label = `person #${i}`;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.stroke();\n }\n }\n}\n\n/** draw processed canvas */\nexport function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, output: AnyCanvas) {\n if (!input || !output) return;\n const ctx = getCanvasContext(output) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.drawImage(input, 0, 0);\n}\n\n/** meta-function that performs draw for: canvas, face, body, hand */\nexport async function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial) {\n if (!result?.performance || !inCanvas) return null;\n const timeStamp = now();\n const localOptions = mergeDeep(options, drawOptions);\n const promise = Promise.all([\n face(inCanvas, result.face, localOptions),\n body(inCanvas, result.body, localOptions),\n hand(inCanvas, result.hand, localOptions),\n object(inCanvas, result.object, localOptions),\n gesture(inCanvas, result.gesture, localOptions), // gestures do not have buffering\n // person(inCanvas, result.persons, localOptions); // already included above\n ]);\n drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp);\n result.performance.draw = drawTime;\n return promise;\n}\n\n/** sets default label templates for face/body/hand/object/gestures */\nexport function init() {\n options.faceLabels = defaultLabels.face;\n options.bodyLabels = defaultLabels.body;\n options.bodyPartLabels = defaultLabels.bodyPart;\n options.handLabels = defaultLabels.hand;\n options.fingerLabels = defaultLabels.finger;\n options.objectLabels = defaultLabels.object;\n options.gestureLabels = defaultLabels.gesture;\n}\n", "import { log } from '../util/util';\nimport type { AnyCanvas } from '../exports';\nimport type { Point } from '../result';\nimport type { DrawOptions } from './options';\n\nexport const getCanvasContext = (input: AnyCanvas) => {\n if (!input) log('draw error: invalid canvas');\n else if (!input.getContext) log('draw error: canvas context not defined');\n else {\n const ctx = input.getContext('2d', { willReadFrequently: true });\n if (!ctx) log('draw error: cannot get canvas context');\n else return ctx;\n }\n return null;\n};\n\nexport const rad2deg = (theta: number) => Math.round((theta * 180) / Math.PI);\n\nexport const replace = (str: string, source: string, target: string | number) => str.replace(source, typeof target === 'number' ? target.toFixed(1) : target);\n\nexport const colorDepth = (z: number | undefined, opt: DrawOptions): string => { // performance optimization needed\n if (!opt.useDepth || typeof z === 'undefined') return opt.color;\n const rgb = Uint8ClampedArray.from([127 + (2 * z), 127 - (2 * z), 255]);\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opt.alpha})`;\n};\n\nexport function labels(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, str: string, startX: number, startY: number, localOptions: DrawOptions) {\n const line: string[] = str.replace(/\\[.*\\]/g, '').split('\\n').map((l) => l.trim()); // remove unmatched templates and split into array\n const x = Math.max(0, startX);\n for (let i = line.length - 1; i >= 0; i--) {\n const y = i * localOptions.lineHeight + startY;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(line[i], x + 5, y + 16);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(line[i], x + 4, y + 15);\n }\n}\n\nexport function point(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, z: number | undefined, localOptions: DrawOptions) {\n ctx.fillStyle = colorDepth(z, localOptions);\n ctx.beginPath();\n ctx.arc(x, y, localOptions.pointSize, 0, 2 * Math.PI);\n ctx.fill();\n}\n\nexport function rect(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, width: number, height: number, localOptions: DrawOptions) {\n ctx.beginPath();\n ctx.lineWidth = localOptions.lineWidth;\n if (localOptions.useCurves) {\n const cx = (x + x + width) / 2;\n const cy = (y + y + height) / 2;\n ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n ctx.moveTo(x + localOptions.roundRect, y);\n ctx.lineTo(x + width - localOptions.roundRect, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions.roundRect);\n ctx.lineTo(x + width, y + height - localOptions.roundRect);\n ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions.roundRect, y + height);\n ctx.lineTo(x + localOptions.roundRect, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions.roundRect);\n ctx.lineTo(x, y + localOptions.roundRect);\n ctx.quadraticCurveTo(x, y, x + localOptions.roundRect, y);\n ctx.closePath();\n }\n ctx.stroke();\n}\n\nexport function lines(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n for (const pt of points) {\n ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions);\n ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1]));\n }\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function curves(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.lineWidth = localOptions.lineWidth;\n if (!localOptions.useCurves || points.length <= 2) {\n lines(ctx, points, localOptions);\n return;\n }\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 0; i < points.length - 2; i++) {\n const xc = (points[i][0] + points[i + 1][0]) / 2;\n const yc = (points[i][1] + points[i + 1][1]) / 2;\n ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc);\n }\n ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function arrow(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, from: Point, to: Point, radius = 5) {\n let angle;\n let x;\n let y;\n ctx.beginPath();\n ctx.moveTo(from[0], from[1]);\n ctx.lineTo(to[0], to[1]);\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.moveTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n}\n", "/** Draw Options\n * - Accessed via `human.draw.options` or provided per each draw method as the drawOptions optional parameter\n */\n\nexport interface DrawOptions {\n /** draw line color */\n color: string,\n /** alpha value used for lines */\n alpha: number,\n /** label color */\n labelColor: string,\n /** label shadow color */\n shadowColor: string,\n /** label font */\n font: string,\n /** line spacing between labels */\n lineHeight: number,\n /** line width for drawn lines */\n lineWidth: number,\n /** size of drawn points */\n pointSize: number,\n /** draw rounded boxes by n pixels */\n roundRect: number,\n /** should points be drawn? */\n drawPoints: boolean,\n /** should labels be drawn? */\n drawLabels: boolean,\n /** should face attention keypoints be highlighted */\n drawAttention: boolean;\n /** should detected gestures be drawn? */\n drawGestures: boolean,\n /** should draw boxes around detection results? */\n drawBoxes: boolean,\n /** should draw polygons from detection points? */\n drawPolygons: boolean,\n /** should draw gaze arrows? */\n drawGaze: boolean,\n /** should fill polygons? */\n fillPolygons: boolean,\n /** use z-coordinate when available */\n useDepth: boolean,\n /** should lines be curved? */\n useCurves: boolean,\n /** string template for face labels */\n faceLabels: string,\n /** string template for body labels */\n bodyLabels: string,\n /** string template for body part labels */\n bodyPartLabels: string,\n /** string template for hand labels */\n handLabels: string,\n /** string template for hand labels */\n fingerLabels: string,\n /** string template for object labels */\n objectLabels: string,\n /** string template for gesture labels */\n gestureLabels: string,\n}\n\n/** currently set draw options {@link DrawOptions} */\nexport const options: DrawOptions = {\n color: 'rgba(173, 216, 230, 0.6)' as string, // 'lightblue' with light alpha channel\n labelColor: 'rgba(173, 216, 230, 1)' as string, // 'lightblue' with dark alpha channel\n shadowColor: 'black' as string,\n alpha: 0.5 as number,\n font: 'small-caps 16px \"Segoe UI\"' as string,\n lineHeight: 18 as number,\n lineWidth: 4 as number,\n pointSize: 2 as number,\n roundRect: 8 as number,\n drawPoints: false as boolean,\n drawLabels: true as boolean,\n drawBoxes: true as boolean,\n drawAttention: true as boolean,\n drawGestures: true as boolean,\n drawPolygons: true as boolean,\n drawGaze: true as boolean,\n fillPolygons: false as boolean,\n useDepth: true as boolean,\n useCurves: false as boolean,\n faceLabels: '' as string,\n bodyLabels: '' as string,\n bodyPartLabels: '' as string,\n objectLabels: '' as string,\n handLabels: '' as string,\n fingerLabels: '' as string,\n gestureLabels: '' as string,\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nexport const meshAnnotations: Record = {\n silhouette: [\n 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288,\n 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136,\n 172, 58, 132, 93, 234, 127, 162, 21, 54, 103, 67, 109,\n ],\n // lipsUpperOuter: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11\n // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10\n // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11\n // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11\n lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409],\n lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291],\n lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415],\n lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308],\n lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306],\n lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408],\n lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292],\n lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407],\n rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], // 7\n rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], // 9\n rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], // 7\n rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], // 9\n rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], // 7\n rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], // 9\n rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], // 9\n rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], // 8\n rightEyebrowLower: [35, 124, 46, 53, 52, 65], // 6\n rightEyeIris: [473, 474, 475, 476, 477], // 5\n leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398],\n leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362],\n leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414],\n leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463],\n leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413],\n leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464],\n leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465],\n leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417],\n leftEyebrowLower: [265, 353, 276, 283, 282, 295],\n leftEyeIris: [468, 469, 470, 471, 472],\n midwayBetweenEyes: [168],\n noseTip: [1],\n noseBottom: [2],\n noseRightCorner: [98],\n noseLeftCorner: [327],\n rightCheek: [205],\n leftCheek: [425],\n};\n\nexport const meshLandmarks: Record = {\n count: 468,\n mouth: 13,\n symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]],\n};\n\nexport const blazeFaceLandmarks: Record = {\n leftEye: 0,\n rightEye: 1,\n nose: 2,\n mouth: 3,\n leftEar: 4,\n rightEar: 5,\n symmetryLine: [3, 2],\n};\n\nexport const irisIndices: { key: string, indices: number[] }[] = [ // A mapping from facemesh model keypoints to iris model keypoints.\n { key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] }, // 7 x 3d\n { key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] }, // 7 x 3d\n { key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] }, // 7 x 3d\n { key: 'EyeLower0', indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, // 7 x 3d\n { key: 'EyeLower1', indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, // 9 x 3d\n { key: 'EyeLower2', indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, // 9 x 3d\n { key: 'EyeLower3', indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, // 9 x 3d\n { key: 'EyebrowUpper', indices: [63, 64, 65, 66, 67, 68, 69, 70] }, // 8 x 3d\n { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] }, // 6 x 3d\n];\n\nexport const UV468: [number, number][] = [\n [0.499976992607117, 0.652534008026123],\n [0.500025987625122, 0.547487020492554],\n [0.499974012374878, 0.602371990680695],\n [0.482113003730774, 0.471979022026062],\n [0.500150978565216, 0.527155995368958],\n [0.499909996986389, 0.498252987861633],\n [0.499523013830185, 0.40106201171875],\n [0.289712011814117, 0.380764007568359],\n [0.499954998493195, 0.312398016452789],\n [0.499987006187439, 0.269918978214264],\n [0.500023007392883, 0.107050001621246],\n [0.500023007392883, 0.666234016418457],\n [0.5000159740448, 0.679224014282227],\n [0.500023007392883, 0.692348003387451],\n [0.499976992607117, 0.695277988910675],\n [0.499976992607117, 0.70593398809433],\n [0.499976992607117, 0.719385027885437],\n [0.499976992607117, 0.737019002437592],\n [0.499967992305756, 0.781370997428894],\n [0.499816000461578, 0.562981009483337],\n [0.473773002624512, 0.573909997940063],\n [0.104906998574734, 0.254140973091125],\n [0.365929991006851, 0.409575998783112],\n [0.338757991790771, 0.41302502155304],\n [0.311120003461838, 0.409460008144379],\n [0.274657994508743, 0.389131009578705],\n [0.393361985683441, 0.403706014156342],\n [0.345234006643295, 0.344011008739471],\n [0.370094001293182, 0.346076011657715],\n [0.319321990013123, 0.347265005111694],\n [0.297903001308441, 0.353591024875641],\n [0.24779200553894, 0.410809993743896],\n [0.396889001131058, 0.842755019664764],\n [0.280097991228104, 0.375599980354309],\n [0.106310002505779, 0.399955987930298],\n [0.2099249958992, 0.391353011131287],\n [0.355807989835739, 0.534406006336212],\n [0.471751004457474, 0.65040397644043],\n [0.474155008792877, 0.680191993713379],\n [0.439785003662109, 0.657229006290436],\n [0.414617002010345, 0.66654098033905],\n [0.450374007225037, 0.680860996246338],\n [0.428770989179611, 0.682690978050232],\n [0.374971002340317, 0.727805018424988],\n [0.486716985702515, 0.547628998756409],\n [0.485300987958908, 0.527395009994507],\n [0.257764995098114, 0.314490020275116],\n [0.401223003864288, 0.455172002315521],\n [0.429818987846375, 0.548614978790283],\n [0.421351999044418, 0.533740997314453],\n [0.276895999908447, 0.532056987285614],\n [0.483370006084442, 0.499586999416351],\n [0.33721199631691, 0.282882988452911],\n [0.296391993761063, 0.293242990970612],\n [0.169294998049736, 0.193813979625702],\n [0.447580009698868, 0.302609980106354],\n [0.392390012741089, 0.353887975215912],\n [0.354490011930466, 0.696784019470215],\n [0.067304998636246, 0.730105042457581],\n [0.442739009857178, 0.572826027870178],\n [0.457098007202148, 0.584792017936707],\n [0.381974011659622, 0.694710969924927],\n [0.392388999462128, 0.694203019142151],\n [0.277076005935669, 0.271932005882263],\n [0.422551989555359, 0.563233017921448],\n [0.385919004678726, 0.281364023685455],\n [0.383103013038635, 0.255840003490448],\n [0.331431001424789, 0.119714021682739],\n [0.229923993349075, 0.232002973556519],\n [0.364500999450684, 0.189113974571228],\n [0.229622006416321, 0.299540996551514],\n [0.173287004232407, 0.278747975826263],\n [0.472878992557526, 0.666198015213013],\n [0.446828007698059, 0.668527007102966],\n [0.422762006521225, 0.673889994621277],\n [0.445307999849319, 0.580065965652466],\n [0.388103008270264, 0.693961024284363],\n [0.403039008378983, 0.706539988517761],\n [0.403629004955292, 0.693953037261963],\n [0.460041999816895, 0.557139039039612],\n [0.431158006191254, 0.692366003990173],\n [0.452181994915009, 0.692366003990173],\n [0.475387006998062, 0.692366003990173],\n [0.465828001499176, 0.779190003871918],\n [0.472328990697861, 0.736225962638855],\n [0.473087012767792, 0.717857003211975],\n [0.473122000694275, 0.704625964164734],\n [0.473033010959625, 0.695277988910675],\n [0.427942007780075, 0.695277988910675],\n [0.426479011774063, 0.703539967536926],\n [0.423162013292313, 0.711845993995667],\n [0.4183090031147, 0.720062971115112],\n [0.390094995498657, 0.639572978019714],\n [0.013953999616206, 0.560034036636353],\n [0.499913990497589, 0.58014702796936],\n [0.413199990987778, 0.69539999961853],\n [0.409626007080078, 0.701822996139526],\n [0.468080013990402, 0.601534962654114],\n [0.422728985548019, 0.585985004901886],\n [0.463079988956451, 0.593783974647522],\n [0.37211999297142, 0.47341400384903],\n [0.334562003612518, 0.496073007583618],\n [0.411671012639999, 0.546965003013611],\n [0.242175996303558, 0.14767599105835],\n [0.290776997804642, 0.201445996761322],\n [0.327338010072708, 0.256527006626129],\n [0.399509996175766, 0.748921036720276],\n [0.441727995872498, 0.261676013469696],\n [0.429764986038208, 0.187834024429321],\n [0.412198007106781, 0.108901023864746],\n [0.288955003023148, 0.398952007293701],\n [0.218936994671822, 0.435410976409912],\n [0.41278201341629, 0.398970007896423],\n [0.257135003805161, 0.355440020561218],\n [0.427684992551804, 0.437960982322693],\n [0.448339998722076, 0.536936044692993],\n [0.178560003638268, 0.45755398273468],\n [0.247308000922203, 0.457193970680237],\n [0.286267012357712, 0.467674970626831],\n [0.332827985286713, 0.460712015628815],\n [0.368755996227264, 0.447206974029541],\n [0.398963987827301, 0.432654976844788],\n [0.476410001516342, 0.405806005001068],\n [0.189241006970406, 0.523923993110657],\n [0.228962004184723, 0.348950982093811],\n [0.490725994110107, 0.562400996685028],\n [0.404670000076294, 0.485132992267609],\n [0.019469000399113, 0.401564002037048],\n [0.426243007183075, 0.420431017875671],\n [0.396993011236191, 0.548797011375427],\n [0.266469985246658, 0.376977026462555],\n [0.439121007919312, 0.51895797252655],\n [0.032313998788595, 0.644356966018677],\n [0.419054001569748, 0.387154996395111],\n [0.462783008813858, 0.505746960639954],\n [0.238978996872902, 0.779744982719421],\n [0.198220998048782, 0.831938028335571],\n [0.107550002634525, 0.540755033493042],\n [0.183610007166862, 0.740257024765015],\n [0.134409993886948, 0.333683013916016],\n [0.385764002799988, 0.883153975009918],\n [0.490967005491257, 0.579378008842468],\n [0.382384985685349, 0.508572995662689],\n [0.174399003386497, 0.397670984268188],\n [0.318785011768341, 0.39623498916626],\n [0.343364000320435, 0.400596976280212],\n [0.396100014448166, 0.710216999053955],\n [0.187885001301765, 0.588537991046906],\n [0.430987000465393, 0.944064974784851],\n [0.318993002176285, 0.898285031318665],\n [0.266247987747192, 0.869701027870178],\n [0.500023007392883, 0.190576016902924],\n [0.499976992607117, 0.954452991485596],\n [0.366169989109039, 0.398822009563446],\n [0.393207013607025, 0.39553701877594],\n [0.410373002290726, 0.391080021858215],\n [0.194993004202843, 0.342101991176605],\n [0.388664990663528, 0.362284004688263],\n [0.365961998701096, 0.355970978736877],\n [0.343364000320435, 0.355356991291046],\n [0.318785011768341, 0.35834002494812],\n [0.301414996385574, 0.363156020641327],\n [0.058132998645306, 0.319076001644135],\n [0.301414996385574, 0.387449026107788],\n [0.499987989664078, 0.618434011936188],\n [0.415838003158569, 0.624195992946625],\n [0.445681989192963, 0.566076993942261],\n [0.465844005346298, 0.620640993118286],\n [0.49992299079895, 0.351523995399475],\n [0.288718998432159, 0.819945991039276],\n [0.335278987884521, 0.852819979190826],\n [0.440512001514435, 0.902418971061707],\n [0.128294005990028, 0.791940987110138],\n [0.408771991729736, 0.373893976211548],\n [0.455606997013092, 0.451801002025604],\n [0.499877005815506, 0.908990025520325],\n [0.375436991453171, 0.924192011356354],\n [0.11421000212431, 0.615022003650665],\n [0.448662012815475, 0.695277988910675],\n [0.4480200111866, 0.704632043838501],\n [0.447111994028091, 0.715808033943176],\n [0.444831997156143, 0.730794012546539],\n [0.430011987686157, 0.766808986663818],\n [0.406787008047104, 0.685672998428345],\n [0.400738000869751, 0.681069016456604],\n [0.392399996519089, 0.677703022956848],\n [0.367855995893478, 0.663918972015381],\n [0.247923001646996, 0.601333022117615],\n [0.452769994735718, 0.420849978923798],\n [0.43639200925827, 0.359887003898621],\n [0.416164010763168, 0.368713974952698],\n [0.413385987281799, 0.692366003990173],\n [0.228018000721931, 0.683571994304657],\n [0.468268007040024, 0.352671027183533],\n [0.411361992359161, 0.804327011108398],\n [0.499989002943039, 0.469825029373169],\n [0.479153990745544, 0.442654013633728],\n [0.499974012374878, 0.439637005329132],\n [0.432112008333206, 0.493588984012604],\n [0.499886006116867, 0.866917014122009],\n [0.49991300702095, 0.821729004383087],\n [0.456548988819122, 0.819200992584229],\n [0.344549000263214, 0.745438992977142],\n [0.37890899181366, 0.574010014533997],\n [0.374292999505997, 0.780184984207153],\n [0.319687992334366, 0.570737957954407],\n [0.357154995203018, 0.604269981384277],\n [0.295284003019333, 0.621580958366394],\n [0.447750002145767, 0.862477004528046],\n [0.410986006259918, 0.508723020553589],\n [0.31395098567009, 0.775308012962341],\n [0.354128003120422, 0.812552988529205],\n [0.324548006057739, 0.703992962837219],\n [0.189096003770828, 0.646299958229065],\n [0.279776990413666, 0.71465802192688],\n [0.1338230073452, 0.682700991630554],\n [0.336768001317978, 0.644733011722565],\n [0.429883986711502, 0.466521978378296],\n [0.455527991056442, 0.548622965812683],\n [0.437114000320435, 0.558896005153656],\n [0.467287987470627, 0.529924988746643],\n [0.414712011814117, 0.335219979286194],\n [0.37704598903656, 0.322777986526489],\n [0.344107985496521, 0.320150971412659],\n [0.312875986099243, 0.32233202457428],\n [0.283526003360748, 0.333190023899078],\n [0.241245999932289, 0.382785975933075],\n [0.102986000478268, 0.468762993812561],\n [0.267612010240555, 0.424560010433197],\n [0.297879010438919, 0.433175981044769],\n [0.333433985710144, 0.433878004550934],\n [0.366427004337311, 0.426115989685059],\n [0.396012008190155, 0.416696012020111],\n [0.420121014118195, 0.41022801399231],\n [0.007561000064015, 0.480777025222778],\n [0.432949006557465, 0.569517970085144],\n [0.458638995885849, 0.479089021682739],\n [0.473466008901596, 0.545744001865387],\n [0.476087987422943, 0.563830018043518],\n [0.468472003936768, 0.555056989192963],\n [0.433990985155106, 0.582361996173859],\n [0.483518004417419, 0.562983989715576],\n [0.482482999563217, 0.57784903049469],\n [0.42645001411438, 0.389798998832703],\n [0.438998997211456, 0.39649498462677],\n [0.450067013502121, 0.400434017181396],\n [0.289712011814117, 0.368252992630005],\n [0.276670008897781, 0.363372981548309],\n [0.517862021923065, 0.471948027610779],\n [0.710287988185883, 0.380764007568359],\n [0.526226997375488, 0.573909997940063],\n [0.895093023777008, 0.254140973091125],\n [0.634069979190826, 0.409575998783112],\n [0.661242008209229, 0.41302502155304],\n [0.688880026340485, 0.409460008144379],\n [0.725341975688934, 0.389131009578705],\n [0.606630027294159, 0.40370500087738],\n [0.654766023159027, 0.344011008739471],\n [0.629905998706818, 0.346076011657715],\n [0.680678009986877, 0.347265005111694],\n [0.702096998691559, 0.353591024875641],\n [0.75221198797226, 0.410804986953735],\n [0.602918028831482, 0.842862963676453],\n [0.719901978969574, 0.375599980354309],\n [0.893692970275879, 0.399959981441498],\n [0.790081977844238, 0.391354024410248],\n [0.643998026847839, 0.534487962722778],\n [0.528249025344849, 0.65040397644043],\n [0.525849997997284, 0.680191040039062],\n [0.560214996337891, 0.657229006290436],\n [0.585384011268616, 0.66654098033905],\n [0.549625992774963, 0.680860996246338],\n [0.57122802734375, 0.682691991329193],\n [0.624852001667023, 0.72809898853302],\n [0.513050019741058, 0.547281980514526],\n [0.51509702205658, 0.527251958847046],\n [0.742246985435486, 0.314507007598877],\n [0.598631024360657, 0.454979002475739],\n [0.570338010787964, 0.548575043678284],\n [0.578631997108459, 0.533622980117798],\n [0.723087012767792, 0.532054007053375],\n [0.516445994377136, 0.499638974666595],\n [0.662801027297974, 0.282917976379395],\n [0.70362401008606, 0.293271005153656],\n [0.830704987049103, 0.193813979625702],\n [0.552385985851288, 0.302568018436432],\n [0.607609987258911, 0.353887975215912],\n [0.645429015159607, 0.696707010269165],\n [0.932694971561432, 0.730105042457581],\n [0.557260990142822, 0.572826027870178],\n [0.542901992797852, 0.584792017936707],\n [0.6180260181427, 0.694710969924927],\n [0.607590973377228, 0.694203019142151],\n [0.722943007946014, 0.271963000297546],\n [0.577413976192474, 0.563166975975037],\n [0.614082992076874, 0.281386971473694],\n [0.616907000541687, 0.255886018276215],\n [0.668509006500244, 0.119913995265961],\n [0.770092010498047, 0.232020974159241],\n [0.635536015033722, 0.189248979091644],\n [0.77039098739624, 0.299556016921997],\n [0.826722025871277, 0.278755009174347],\n [0.527121007442474, 0.666198015213013],\n [0.553171992301941, 0.668527007102966],\n [0.577238023281097, 0.673889994621277],\n [0.554691970348358, 0.580065965652466],\n [0.611896991729736, 0.693961024284363],\n [0.59696102142334, 0.706539988517761],\n [0.596370995044708, 0.693953037261963],\n [0.539958000183105, 0.557139039039612],\n [0.568841993808746, 0.692366003990173],\n [0.547818005084991, 0.692366003990173],\n [0.52461302280426, 0.692366003990173],\n [0.534089982509613, 0.779141008853912],\n [0.527670979499817, 0.736225962638855],\n [0.526912987232208, 0.717857003211975],\n [0.526877999305725, 0.704625964164734],\n [0.526966989040375, 0.695277988910675],\n [0.572058022022247, 0.695277988910675],\n [0.573521018028259, 0.703539967536926],\n [0.57683801651001, 0.711845993995667],\n [0.581691026687622, 0.720062971115112],\n [0.609944999217987, 0.639909982681274],\n [0.986046016216278, 0.560034036636353],\n [0.5867999792099, 0.69539999961853],\n [0.590372025966644, 0.701822996139526],\n [0.531915009021759, 0.601536989212036],\n [0.577268004417419, 0.585934996604919],\n [0.536915004253387, 0.593786001205444],\n [0.627542972564697, 0.473352015018463],\n [0.665585994720459, 0.495950996875763],\n [0.588353991508484, 0.546862006187439],\n [0.757824003696442, 0.14767599105835],\n [0.709249973297119, 0.201507985591888],\n [0.672684013843536, 0.256581008434296],\n [0.600408971309662, 0.74900496006012],\n [0.55826598405838, 0.261672019958496],\n [0.570303976535797, 0.187870979309082],\n [0.588165998458862, 0.109044015407562],\n [0.711045026779175, 0.398952007293701],\n [0.781069993972778, 0.435405015945435],\n [0.587247014045715, 0.398931980133057],\n [0.742869973182678, 0.355445981025696],\n [0.572156012058258, 0.437651991844177],\n [0.55186802148819, 0.536570012569427],\n [0.821442008018494, 0.457556009292603],\n [0.752701997756958, 0.457181990146637],\n [0.71375697851181, 0.467626988887787],\n [0.66711300611496, 0.460672974586487],\n [0.631101012229919, 0.447153985500336],\n [0.6008620262146, 0.432473003864288],\n [0.523481011390686, 0.405627012252808],\n [0.810747981071472, 0.523926019668579],\n [0.771045982837677, 0.348959028720856],\n [0.509127020835876, 0.562718033790588],\n [0.595292985439301, 0.485023975372314],\n [0.980530977249146, 0.401564002037048],\n [0.573499977588654, 0.420000016689301],\n [0.602994978427887, 0.548687994480133],\n [0.733529984951019, 0.376977026462555],\n [0.560611009597778, 0.519016981124878],\n [0.967685997486115, 0.644356966018677],\n [0.580985009670258, 0.387160003185272],\n [0.537728011608124, 0.505385041236877],\n [0.760966002941132, 0.779752969741821],\n [0.801778972148895, 0.831938028335571],\n [0.892440974712372, 0.54076099395752],\n [0.816350996494293, 0.740260004997253],\n [0.865594983100891, 0.333687007427216],\n [0.614073991775513, 0.883246004581451],\n [0.508952975273132, 0.579437971115112],\n [0.617941975593567, 0.508316040039062],\n [0.825608015060425, 0.397674977779388],\n [0.681214988231659, 0.39623498916626],\n [0.656635999679565, 0.400596976280212],\n [0.603900015354156, 0.710216999053955],\n [0.81208598613739, 0.588539004325867],\n [0.56801301240921, 0.944564998149872],\n [0.681007981300354, 0.898285031318665],\n [0.733752012252808, 0.869701027870178],\n [0.633830010890961, 0.398822009563446],\n [0.606792986392975, 0.39553701877594],\n [0.589659988880157, 0.391062021255493],\n [0.805015981197357, 0.342108011245728],\n [0.611334979534149, 0.362284004688263],\n [0.634037971496582, 0.355970978736877],\n [0.656635999679565, 0.355356991291046],\n [0.681214988231659, 0.35834002494812],\n [0.698584973812103, 0.363156020641327],\n [0.941866993904114, 0.319076001644135],\n [0.698584973812103, 0.387449026107788],\n [0.584177017211914, 0.624107003211975],\n [0.554318010807037, 0.566076993942261],\n [0.534153997898102, 0.62064003944397],\n [0.711217999458313, 0.819975018501282],\n [0.664629995822906, 0.852871000766754],\n [0.559099972248077, 0.902631998062134],\n [0.871706008911133, 0.791940987110138],\n [0.591234028339386, 0.373893976211548],\n [0.544341027736664, 0.451583981513977],\n [0.624562978744507, 0.924192011356354],\n [0.88577002286911, 0.615028977394104],\n [0.551338016986847, 0.695277988910675],\n [0.551980018615723, 0.704632043838501],\n [0.552887976169586, 0.715808033943176],\n [0.555167973041534, 0.730794012546539],\n [0.569944024085999, 0.767035007476807],\n [0.593203008174896, 0.685675978660583],\n [0.599261999130249, 0.681069016456604],\n [0.607599973678589, 0.677703022956848],\n [0.631937980651855, 0.663500010967255],\n [0.752032995223999, 0.601315021514893],\n [0.547226011753082, 0.420395016670227],\n [0.563543975353241, 0.359827995300293],\n [0.583841025829315, 0.368713974952698],\n [0.586614012718201, 0.692366003990173],\n [0.771915018558502, 0.683578014373779],\n [0.531597018241882, 0.352482974529266],\n [0.588370978832245, 0.804440975189209],\n [0.52079701423645, 0.442565023899078],\n [0.567984998226166, 0.493479013442993],\n [0.543282985687256, 0.819254994392395],\n [0.655317008495331, 0.745514988899231],\n [0.621008992195129, 0.574018001556396],\n [0.625559985637665, 0.78031200170517],\n [0.680198013782501, 0.570719003677368],\n [0.64276397228241, 0.604337990283966],\n [0.704662978649139, 0.621529996395111],\n [0.552012026309967, 0.862591981887817],\n [0.589071989059448, 0.508637011051178],\n [0.685944974422455, 0.775357007980347],\n [0.645735025405884, 0.812640011310577],\n [0.675342977046967, 0.703978002071381],\n [0.810858011245728, 0.646304965019226],\n [0.72012197971344, 0.714666962623596],\n [0.866151988506317, 0.682704985141754],\n [0.663187026977539, 0.644596993923187],\n [0.570082008838654, 0.466325998306274],\n [0.544561982154846, 0.548375964164734],\n [0.562758982181549, 0.558784961700439],\n [0.531987011432648, 0.530140042304993],\n [0.585271000862122, 0.335177004337311],\n [0.622952997684479, 0.32277899980545],\n [0.655896008014679, 0.320163011550903],\n [0.687132000923157, 0.322345972061157],\n [0.716481983661652, 0.333200991153717],\n [0.758756995201111, 0.382786989212036],\n [0.897013008594513, 0.468769013881683],\n [0.732392013072968, 0.424547016620636],\n [0.70211398601532, 0.433162987232208],\n [0.66652500629425, 0.433866024017334],\n [0.633504986763, 0.426087975502014],\n [0.603875994682312, 0.416586995124817],\n [0.579657971858978, 0.409945011138916],\n [0.992439985275269, 0.480777025222778],\n [0.567192018032074, 0.569419980049133],\n [0.54136598110199, 0.478899002075195],\n [0.526564002037048, 0.546118021011353],\n [0.523913025856018, 0.563830018043518],\n [0.531529009342194, 0.555056989192963],\n [0.566035985946655, 0.582329034805298],\n [0.51631098985672, 0.563053965568542],\n [0.5174720287323, 0.577877044677734],\n [0.573594987392426, 0.389806985855103],\n [0.560697972774506, 0.395331978797913],\n [0.549755990505219, 0.399751007556915],\n [0.710287988185883, 0.368252992630005],\n [0.723330020904541, 0.363372981548309],\n];\n\nexport const TRI468: number[] = [\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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];\n\nexport const TRI68: number[] = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59,\n 8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16,\n 45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24,\n 23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29,\n 39, 40, 29, 47, 42, 30, 31, 32, 30, 32, 33, 30, 33, 34, 30, 34, 35, 31, 50, 32, 31, 40, 41, 31, 48, 49, 31, 49, 50, 32, 51, 33, 32, 50, 51, 33, 51, 34, 34, 52,\n 35, 34, 51, 52, 35, 46, 47, 35, 52, 53, 35, 53, 54, 36, 41, 37, 37, 40, 38, 37, 41, 40, 38, 40, 39, 42, 47, 43, 43, 47, 44, 44, 46, 45, 44, 47, 46, 48, 60, 49,\n 48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56,\n 66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22];\n\nexport const TRI33: number[] = [\n /* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3,\n /* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2,\n /* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25,\n /* nose */ 11, 12, 4, 11, 4, 13, 1, 12, 11, 11, 13, 2, 12, 14, 4, 4, 14, 13,\n /* up-lip */ 14, 5, 15, 14, 15, 6, 12, 5, 14, 14, 6, 13,\n /* cheeks */ 8, 12, 1, 2, 13, 10, 8, 26, 12, 10, 13, 27, 26, 5, 12, 13, 6, 27, 0, 26, 8, 10, 27, 3,\n /* chin */ 5, 32, 16, 16, 32, 6, 5, 30, 32, 6, 32, 31,\n /* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29,\n];\n\nexport const TRI7: number[] = [0, 4, 1, 2, 4, 3, 4, 5, 6];\n\nexport const VTX68: number[] = [\n /* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356,\n /* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300,\n /* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327,\n /* eyes */ 33, 160, 158, 133, 153, 144, 362, 385, 387, 263, 373, 380,\n /* lip */ 57, 40, 37, 0, 267, 270, 287, 321, 314, 17, 84, 91,\n /* mouth */ 78, 81, 13, 311, 308, 402, 14, 178,\n];\n\nexport const VTX33: number[] = [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];\n\nexport const VTX7: number[] = [33, 133, 362, 263, 1, 78, 308];\n\nexport const UV68 = VTX68.map((x) => UV468[x]);\n\nexport const UV33 = VTX33.map((x) => UV468[x]);\n\nexport const UV7 = VTX7.map((x) => UV468[x]);\n\n// https://github.com/tensorflow/tfjs-models/blob/master/face-landmarks-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const pairsLips: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nexport const pairsLeftEye: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nexport const pairsLeftEyebrow: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nexport const pairsLeftIris: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nexport const pairsRightEye: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nexport const pairsRightEyebrow: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nexport const pairsRightIris: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nexport const pairsFaceContour: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389],\n [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397],\n [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172],\n [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162],\n [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const contourKeypoints = {\n lips: connectionsToIndices(pairsLips),\n leftEye: connectionsToIndices(pairsLeftEye),\n leftEyebrow: connectionsToIndices(pairsLeftEyebrow),\n leftIris: connectionsToIndices(pairsLeftIris),\n rightEye: connectionsToIndices(pairsRightEye),\n rightEyebrow: connectionsToIndices(pairsRightEyebrow),\n rightIris: connectionsToIndices(pairsRightIris),\n faceOval: connectionsToIndices(pairsFaceContour),\n};\n\nexport const pairsFaceMesh: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11],\n [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72],\n [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175],\n [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73],\n [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74],\n [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40],\n [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76],\n [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56],\n [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21],\n [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144],\n [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91],\n [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85],\n [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193],\n [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247],\n [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117],\n [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98],\n [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209],\n [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47],\n [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67],\n [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230],\n [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46],\n [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46],\n [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236],\n [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154],\n [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57],\n [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28],\n [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113],\n [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62],\n [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64],\n [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41],\n [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170],\n [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122],\n [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89],\n [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63],\n [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14],\n [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100],\n [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88],\n [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215],\n [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43],\n [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81],\n [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229],\n [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107],\n [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129],\n [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117],\n [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3],\n [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220],\n [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71],\n [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188],\n [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164],\n [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38],\n [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206],\n [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165],\n [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214],\n [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171],\n [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84],\n [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201],\n [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57],\n [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214],\n [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44],\n [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64],\n [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2],\n [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24],\n [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26],\n [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189],\n [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29],\n [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247],\n [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147],\n [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187],\n [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114],\n [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217],\n [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110],\n [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356],\n [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357],\n [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333],\n [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9],\n [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418],\n [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450],\n [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313],\n [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335],\n [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423],\n [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307],\n [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421],\n [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426],\n [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322],\n [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456],\n [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417],\n [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355],\n [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382],\n [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443],\n [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431],\n [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446],\n [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458],\n [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372],\n [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274],\n [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269],\n [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266],\n [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265],\n [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424],\n [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366],\n [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423],\n [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432],\n [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394],\n [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352],\n [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295],\n [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323],\n [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358],\n [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374],\n [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6],\n [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344],\n [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195],\n [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283],\n [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282],\n [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338],\n [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292],\n [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442],\n [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441],\n [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300],\n [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263],\n [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436],\n [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370],\n [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293],\n [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330],\n [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440],\n [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459],\n [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354],\n [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315],\n [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366],\n [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291],\n [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264],\n [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352],\n [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433],\n [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462],\n [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255],\n [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252],\n [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441],\n [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257],\n [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459],\n [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290],\n [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341],\n [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357],\n [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420],\n [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372],\n [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133],\n [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33],\n [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263],\n [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466],\n [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72],\n [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73],\n [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152],\n [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74],\n [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184],\n [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185],\n [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77],\n [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190],\n [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54],\n [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145],\n [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181],\n [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16],\n [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245],\n [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30],\n [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111],\n [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240],\n [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198],\n [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114],\n [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109],\n [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231],\n [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124],\n [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70],\n [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3],\n [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26],\n [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43],\n [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56],\n [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124],\n [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96],\n [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235],\n [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42],\n [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140],\n [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193],\n [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179],\n [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68],\n [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15],\n [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120],\n [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89],\n [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138],\n [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57],\n [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41],\n [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118],\n [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66],\n [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142],\n [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118],\n [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196],\n [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156],\n [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122],\n [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164],\n [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12],\n [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31],\n [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98],\n [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237],\n [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179],\n [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181],\n [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184],\n [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186],\n [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218],\n [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45],\n [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235],\n [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97],\n [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230],\n [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232],\n [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222],\n [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224],\n [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213],\n [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192],\n [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188],\n [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174],\n [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25],\n [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264],\n [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350],\n [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299],\n [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151],\n [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424],\n [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449],\n [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18],\n [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434],\n [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301],\n [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280],\n [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335],\n [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396],\n [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413],\n [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168],\n [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417],\n [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381],\n [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365],\n [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395],\n [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335],\n [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250],\n [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292],\n [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354],\n [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426],\n [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371],\n [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290],\n [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422],\n [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422],\n [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358],\n [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331],\n [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395],\n [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296],\n [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285],\n [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329],\n [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331],\n [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8],\n [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351],\n [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397],\n [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248],\n [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175],\n [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295],\n [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356],\n [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308],\n [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265],\n [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285],\n [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457],\n [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394],\n [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410],\n [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268],\n [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298],\n [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420],\n [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344],\n [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274],\n [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316],\n [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323],\n [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306],\n [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372],\n [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366],\n [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435],\n [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328],\n [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359],\n [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253],\n [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286],\n [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258],\n [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309],\n [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305],\n [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453],\n [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343],\n [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360],\n [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265],\n [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n", "// @tensorflow/tfjs-models/face-landmark-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nconst LIPS_CONNECTIONS: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nconst LEFT_EYE_CONNECTIONS: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nconst LEFT_EYEBROW_CONNECTIONS: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nconst LEFT_IRIS_CONNECTIONS: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nconst RIGHT_EYE_CONNECTIONS: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nconst RIGHT_EYEBROW_CONNECTIONS: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nconst RIGHT_IRIS_CONNECTIONS: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nconst FACE_OVAL_CONNECTIONS: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389], [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397], [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172], [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162], [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const MEDIAPIPE_FACE_MESH_CONNECTED_KEYPOINTS_PAIRS: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11], [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72], [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175], [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73], [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74], [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40], [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76], [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56], [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21], [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144], [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91], [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85], [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193], [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247], [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117], [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98], [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209], [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47], [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67], [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230], [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46], [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46], [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236], [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154], [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57], [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28], [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113], [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62], [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64], [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41], [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170], [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122], [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89], [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63], [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14], [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100], [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88], [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215], [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43], [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81], [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229], [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107], [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129], [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117], [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3], [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220], [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71], [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188], [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164], [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38], [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206], [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165], [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214], [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171], [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84], [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201], [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57], [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214], [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44], [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64], [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2], [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24], [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26], [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189], [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29], [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247], [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147], [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187], [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114], [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217], [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110], [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356], [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357], [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333], [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9], [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418], [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450], [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313], [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335], [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423], [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307], [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421], [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426], [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322], [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456], [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417], [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355], [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382], [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443], [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431], [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446], [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458], [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372], [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274], [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269], [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266], [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265], [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424], [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366], [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423], [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432], [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394], [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352], [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295], [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323], [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358], [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374], [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6], [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344], [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195], [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283], [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282], [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338], [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292], [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442], [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441], [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300], [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263], [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436], [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370], [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293], [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330], [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440], [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459], [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354], [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315], [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366], [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291], [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264], [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352], [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433], [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462], [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255], [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252], [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441], [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257], [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459], [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290], [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341], [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357], [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420], [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372], [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133], [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33], [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263], [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466], [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72], [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73], [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152], [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74], [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184], [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185], [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77], [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190], [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54], [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145], [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181], [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16], [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245], [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30], [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111], [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240], [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198], [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114], [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109], [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231], [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124], [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70], [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3], [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26], [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43], [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56], [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124], [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96], [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235], [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42], [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140], [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193], [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179], [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68], [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15], [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120], [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89], [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138], [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57], [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41], [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118], [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66], [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142], [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118], [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196], [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156], [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122], [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164], [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12], [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31], [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98], [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237], [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179], [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181], [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184], [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186], [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218], [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45], [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235], [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97], [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230], [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232], [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222], [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224], [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213], [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192], [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188], [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174], [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25], [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264], [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350], [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299], [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151], [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424], [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449], [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18], [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434], [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301], [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280], [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335], [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396], [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413], [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168], [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417], [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381], [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365], [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395], [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335], [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250], [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292], [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354], [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426], [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371], [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290], [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422], [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422], [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358], [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331], [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395], [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296], [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285], [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329], [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331], [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8], [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351], [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397], [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248], [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175], [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295], [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356], [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308], [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265], [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285], [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457], [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394], [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410], [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268], [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298], [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420], [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344], [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274], [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316], [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323], [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306], [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372], [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366], [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435], [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328], [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359], [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253], [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286], [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258], [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309], [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305], [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453], [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343], [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360], [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265], [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = {\n lips: connectionsToIndices(LIPS_CONNECTIONS),\n leftEye: connectionsToIndices(LEFT_EYE_CONNECTIONS),\n leftEyebrow: connectionsToIndices(LEFT_EYEBROW_CONNECTIONS),\n leftIris: connectionsToIndices(LEFT_IRIS_CONNECTIONS),\n rightEye: connectionsToIndices(RIGHT_EYE_CONNECTIONS),\n rightEyebrow: connectionsToIndices(RIGHT_EYEBROW_CONNECTIONS),\n rightIris: connectionsToIndices(RIGHT_IRIS_CONNECTIONS),\n faceOval: connectionsToIndices(FACE_OVAL_CONNECTIONS),\n};\n\nconst indexLabelPairs: [number, string][] = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR)\n .map(([label, indices]) => indices.map((index) => [index, label] as [number, string]))\n .flat();\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs);\n\ntype AssignAverage = number[];\nexport interface LandmarksRefinementConfig {\n indexesMapping: number[]; // Maps indexes of the given set of landmarks to indexes of the resulting set of landmarks. Should be non empty and contain the same amount of indexes as landmarks in the corresponding input\n zRefinement: 'none'|'copy'|AssignAverage; // Z refinement instructions.\n}\n\nexport const LANDMARKS_REFINEMENT_LIPS_CONFIG = [\n 61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291, // Lower outer.\n 185, 40, 39, 37, 0, 267, 269, 270, 409, // Upper outer(excluding corners).\n 78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308, // Lower inner.\n 191, 80, 81, 82, 13, 312, 311, 310, 415, // Upper inner(excluding corners).\n 76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306, // Lower semi - outer.\n 184, 74, 73, 72, 11, 302, 303, 304, 408, // Upper semi - outer(excluding corners).\n 62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292, // Lower semi - inner.\n 183, 42, 41, 38, 12, 268, 271, 272, 407, // Upper semi - inner(excluding corners).\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // upper contour (excluding corners).\n 130, 25, 110, 24, 23, 22, 26, 112, 243, // Halo x2 lower contour.\n 247, 30, 29, 27, 28, 56, 190, // Halo x2 upper contour (excluding corners).\n 226, 31, 228, 229, 230, 231, 232, 233, 244, // Halo x3 lower contour.\n 113, 225, 224, 223, 222, 221, 189, // Halo x3 upper contour (excluding corners).\n 35, 124, 46, 53, 52, 65, // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour.\n 143, 111, 117, 118, 119, 120, 121, 128, 245, // Halo x5 lower contour.\n 156, 70, 63, 105, 66, 107, 55, 193, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n 359, 255, 339, 254, 253, 252, 256, 341, 463, // Halo x2 lower contour.\n 467, 260, 259, 257, 258, 286, 414, // Halo x2 upper contour (excluding corners).\n 446, 261, 448, 449, 450, 451, 452, 453, 464, // Halo x3 lower contour.\n 342, 445, 444, 443, 442, 441, 413, // Halo x3 upper contour (excluding corners).\n 265, 353, 276, 283, 282, 295, // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour.\n 372, 340, 346, 347, 348, 349, 350, 357, 465, // Halo x5 lower contour.\n 383, 300, 293, 334, 296, 336, 285, 417, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_IRIS_CONFIG = [\n 468, // Center.\n 469, // Iris right edge.\n 470, // Iris top edge.\n 471, // Iris left edge.\n 472, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // Upper contour (excluding corners).\n];\n*/\n\nexport const LANDMARKS_REFINEMENT_RIGHT_IRIS_CONFIG = [\n 473, // Center.\n 474, // Iris right edge.\n 475, // Iris top edge.\n 476, // Iris left edge.\n 477, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n];\n*/\n", "import { TRI468 as triangulation } from '../face/facemeshcoords';\nimport { mergeDeep } from '../util/util';\nimport { getCanvasContext, rad2deg, rect, point, lines, arrow, labels, replace } from './primitives';\nimport { options } from './options';\nimport * as facemeshConstants from '../face/constants';\nimport type { FaceResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet localOptions: DrawOptions;\n\nfunction drawLabels(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (!localOptions.drawLabels || (localOptions.faceLabels?.length === 0)) return;\n let l = localOptions.faceLabels.slice();\n l = replace(l, '[id]', f.id.toFixed(0));\n if (f.score) l = replace(l, '[score]', 100 * f.score);\n if (f.gender) l = replace(l, '[gender]', f.gender);\n if (f.genderScore) l = replace(l, '[genderScore]', 100 * f.genderScore);\n if (f.age) l = replace(l, '[age]', f.age);\n if (f.distance) l = replace(l, '[distance]', 100 * f.distance);\n if (f.real) l = replace(l, '[real]', 100 * f.real);\n if (f.live) l = replace(l, '[live]', 100 * f.live);\n if (f.emotion && f.emotion.length > 0) {\n const emotion = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`);\n if (emotion.length > 3) emotion.length = 3;\n l = replace(l, '[emotions]', emotion.join(' '));\n }\n if (f.rotation?.angle?.roll) l = replace(l, '[roll]', rad2deg(f.rotation.angle.roll));\n if (f.rotation?.angle?.yaw) l = replace(l, '[yaw]', rad2deg(f.rotation.angle.yaw));\n if (f.rotation?.angle?.pitch) l = replace(l, '[pitch]', rad2deg(f.rotation.angle.pitch));\n if (f.rotation?.gaze?.bearing) l = replace(l, '[gaze]', rad2deg(f.rotation.gaze.bearing));\n labels(ctx, l, f.box[0], f.box[1], localOptions);\n}\n\nfunction drawIrisElipse(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n // iris: array[center, left, top, right, bottom]\n if (f.annotations?.leftEyeIris && f.annotations?.leftEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n if (f.annotations?.rightEyeIris && f.annotations?.rightEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n}\n\nfunction drawGazeSpheres(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.angle && typeof Path2D !== 'undefined') {\n ctx.strokeStyle = 'pink';\n const valX = (f.box[0] + f.box[2] / 2) - (f.box[3] * rad2deg(f.rotation.angle.yaw) / 90);\n const valY = (f.box[1] + f.box[3] / 2) + (f.box[2] * rad2deg(f.rotation.angle.pitch) / 90);\n const pathV = new Path2D(`\n M ${f.box[0] + f.box[2] / 2} ${f.box[1]}\n C\n ${valX} ${f.box[1]},\n ${valX} ${f.box[1] + f.box[3]},\n ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]}\n `);\n const pathH = new Path2D(`\n M ${f.box[0]} ${f.box[1] + f.box[3] / 2}\n C \n ${f.box[0]} ${valY},\n ${f.box[0] + f.box[2]} ${valY},\n ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2}\n `);\n ctx.stroke(pathH);\n ctx.stroke(pathV);\n }\n}\n\nfunction drawGazeArrows(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.gaze.strength && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) {\n ctx.strokeStyle = 'pink';\n ctx.fillStyle = 'pink';\n const leftGaze = [\n f.annotations.leftEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.leftEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4);\n const rightGaze = [\n f.annotations.rightEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.rightEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4);\n }\n}\n\nfunction drawFacePolygons(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPolygons && f.mesh.length >= 468) {\n ctx.lineWidth = 1;\n for (let i = 0; i < triangulation.length / 3; i++) {\n const points = [triangulation[i * 3 + 0], triangulation[i * 3 + 1], triangulation[i * 3 + 2]].map((index) => f.mesh[index]);\n lines(ctx, points, localOptions);\n }\n drawIrisElipse(f, ctx);\n }\n /*\n if (localOptions.drawPolygons && f.contours.length > 1) {\n ctx.lineWidth = 5;\n lines(ctx, f.contours, opt);\n }\n ctx.lineWidth = 1;\n */\n}\n\nfunction drawFacePoints(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPoints) {\n if (f?.mesh.length >= 468) {\n for (let i = 0; i < f.mesh.length; i++) {\n point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions);\n if (localOptions.drawAttention) {\n if (facemeshConstants.LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) + 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n }\n }\n } else {\n for (const [k, v] of Object.entries(f?.annotations || {})) {\n if (!v?.[0]) continue;\n const pt = v[0];\n point(ctx, pt[0], pt[1], 0, localOptions);\n if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], localOptions);\n }\n }\n }\n}\n\nfunction drawFaceBoxes(f: FaceResult, ctx) {\n if (localOptions.drawBoxes) {\n rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions);\n }\n}\n\n/** draw detected faces */\nexport function face(inCanvas: AnyCanvas, result: FaceResult[], drawOptions?: Partial) {\n localOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n for (const f of result) {\n drawFaceBoxes(f, ctx);\n drawLabels(f, ctx);\n if (f.mesh && f.mesh.length > 0) {\n drawFacePoints(f, ctx);\n drawFacePolygons(f, ctx);\n drawGazeSpheres(f, ctx);\n drawGazeArrows(f, ctx);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, curves, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { BodyResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected bodies */\nexport function body(inCanvas: AnyCanvas, result: BodyResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n for (let i = 0; i < result.length; i++) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n ctx.lineWidth = localOptions.lineWidth;\n ctx.font = localOptions.font;\n if (localOptions.drawBoxes && result[i].box && result[i].box.length === 4) {\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.bodyLabels?.length > 0)) {\n let l = localOptions.bodyLabels.slice();\n l = replace(l, '[id]', result[i].id.toFixed(0));\n l = replace(l, '[score]', 100 * result[i].score);\n labels(ctx, l, result[i].box[0], result[i].box[1], localOptions);\n }\n }\n if (localOptions.drawPoints && result[i].keypoints) {\n for (let pt = 0; pt < result[i].keypoints.length; pt++) {\n if (!result[i].keypoints[pt].score || (result[i].keypoints[pt].score === 0)) continue;\n ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions);\n point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);\n }\n }\n if (localOptions.drawLabels && (localOptions.bodyPartLabels?.length > 0) && result[i].keypoints) {\n ctx.font = localOptions.font;\n for (const pt of result[i].keypoints) {\n if (!pt.score || (pt.score === 0)) continue;\n let l = localOptions.bodyPartLabels.slice();\n l = replace(l, '[label]', pt.part);\n l = replace(l, '[score]', 100 * pt.score);\n labels(ctx, l, pt.position[0], pt.position[1], localOptions);\n }\n }\n if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {\n for (const part of Object.values(result[i].annotations)) {\n for (const connected of part) curves(ctx, connected, localOptions);\n }\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { HandResult } from '../result';\nimport type { AnyCanvas, DrawOptions, Point } from '../exports';\n\n/** draw detected hands */\nexport function hand(inCanvas: AnyCanvas, result: HandResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.handLabels?.length > 0)) {\n let l = localOptions.handLabels.slice();\n l = replace(l, '[id]', h.id.toFixed(0));\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n if (localOptions.drawPoints) {\n if (h.keypoints && h.keypoints.length > 0) {\n for (const pt of h.keypoints) {\n ctx.fillStyle = colorDepth(pt[2], localOptions);\n point(ctx, pt[0], pt[1], 0, localOptions);\n }\n }\n }\n if (localOptions.drawLabels && h.annotations && (localOptions.fingerLabels?.length > 0)) {\n for (const [part, pt] of Object.entries(h.annotations)) {\n let l = localOptions.fingerLabels.slice();\n l = replace(l, '[label]', part);\n labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions);\n }\n }\n if (localOptions.drawPolygons && h.annotations) {\n const addHandLine = (part: Point[]) => {\n if (!part || part.length === 0 || !part[0]) return;\n for (let i = 0; i < part.length; i++) {\n ctx.beginPath();\n const z = part[i][2] || 0;\n ctx.strokeStyle = colorDepth(i * z, localOptions);\n ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]);\n ctx.lineTo(part[i][0], part[i][1]);\n ctx.stroke();\n }\n };\n ctx.lineWidth = localOptions.lineWidth;\n addHandLine(h.annotations.index);\n addHandLine(h.annotations.middle);\n addHandLine(h.annotations.ring);\n addHandLine(h.annotations.pinky);\n addHandLine(h.annotations.thumb);\n // addPart(h.annotations.palm);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { ObjectResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected objects */\nexport function object(inCanvas: AnyCanvas, result: ObjectResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.objectLabels?.length > 0)) {\n let l = localOptions.objectLabels.slice();\n l = replace(l, '[id]', h.id.toFixed(0));\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { GestureResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected gestures */\nexport function gesture(inCanvas: AnyCanvas, result: GestureResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n if (localOptions.drawGestures && (localOptions.gestureLabels?.length > 0)) {\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.fillStyle = localOptions.color;\n let i = 1;\n for (let j = 0; j < result.length; j++) {\n const [where, what] = Object.entries(result[j]);\n if ((what.length > 1) && ((what[1] as string).length > 0)) {\n const who = where[1] as number > 0 ? `#${where[1]}` : '';\n let l = localOptions.gestureLabels.slice();\n l = replace(l, '[where]', where[0]);\n l = replace(l, '[who]', who);\n l = replace(l, '[what]', what[1]);\n labels(ctx, l, 8, 2 + (i * localOptions.lineHeight), localOptions);\n i += 1;\n }\n }\n }\n}\n", "export const defaultLabels = {\n face: `face\n confidence: [score]%\n [gender] [genderScore]%\n age: [age] years\n distance: [distance]cm\n real: [real]%\n live: [live]%\n [emotions]\n roll: [roll]\u00B0 yaw:[yaw]\u00B0 pitch:[pitch]\u00B0\n gaze: [gaze]\u00B0`,\n body: 'body [score]%',\n bodyPart: '[label] [score]%',\n object: '[label] [score]%',\n hand: '[label] [score]%',\n finger: '[label]',\n gesture: '[where] [who]: [what]',\n};\n", "/* eslint-disable no-multi-spaces */\n\nexport const kpt: string[] = [\n 'nose', // 0\n 'leftEyeInside', // 1\n 'leftEye', // 2\n 'leftEyeOutside', // 3\n 'rightEyeInside', // 4\n 'rightEye', // 5\n 'rightEyeOutside', // 6\n 'leftEar', // 7\n 'rightEar', // 8\n 'leftMouth', // 9\n 'rightMouth', // 10\n 'leftShoulder', // 11\n 'rightShoulder', // 12\n 'leftElbow', // 13\n 'rightElbow', // 14\n 'leftWrist', // 15\n 'rightWrist', // 16\n 'leftPinky', // 17\n 'rightPinky', // 18\n 'leftIndex', // 19\n 'rightIndex', // 20\n 'leftThumb', // 21\n 'rightThumb', // 22\n 'leftHip', // 23\n 'rightHip', // 24\n 'leftKnee', // 25\n 'rightKnee', // 26\n 'leftAnkle', // 27\n 'rightAnkle', // 28\n 'leftHeel', // 29\n 'rightHeel', // 30\n 'leftFoot', // 31\n 'rightFoot', // 32\n 'bodyCenter', // 33\n 'bodyTop', // 34\n 'leftPalm', // 35 // z-coord not ok\n 'leftHand', // 36 // similar to wrist but z-coord not ok\n 'rightPalm', // 37 // z-coord not ok\n 'rightHand', // 38 // similar to wrist but z-coord not ok\n];\n\nexport const connected: Record = {\n shoulders: ['leftShoulder', 'rightShoulder'],\n hips: ['rightHip', 'leftHip'],\n mouth: ['leftMouth', 'rightMouth'],\n leftLegUpper: ['leftHip', 'leftKnee'],\n leftLegLower: ['leftKnee', 'leftAnkle'],\n leftFoot: ['leftAnkle', 'leftHeel', 'leftFoot'],\n leftTorso: ['leftShoulder', 'leftHip'],\n leftArmUpper: ['leftShoulder', 'leftElbow'],\n leftArmLower: ['leftElbow', 'leftWrist'],\n leftHand: ['leftWrist', 'leftPalm'],\n leftHandPinky: ['leftPalm', 'leftPinky'],\n leftHandIndex: ['leftPalm', 'leftIndex'],\n leftHandThumb: ['leftPalm', 'leftThumb'],\n leftEyeOutline: ['leftEyeInside', 'leftEyeOutside'],\n rightLegUpper: ['rightHip', 'rightKnee'],\n rightLegLower: ['rightKnee', 'rightAnkle'],\n rightFoot: ['rightAnkle', 'rightHeel', 'rightFoot'],\n rightTorso: ['rightShoulder', 'rightHip'],\n rightArmUpper: ['rightShoulder', 'rightElbow'],\n rightArmLower: ['rightElbow', 'rightWrist'],\n rightHand: ['rightWrist', 'rightPalm'],\n rightHandPinky: ['rightPalm', 'rightPinky'],\n rightHandIndex: ['rightPalm', 'rightIndex'],\n rightHandThumb: ['rightPalm', 'rightThumb'],\n rightEyeOutline: ['rightEyeInside', 'rightEyeOutside'],\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport type { Box } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D } from '../tfjs/types';\n\nexport interface DetectedBox { box: Box, boxRaw: Box, score: number }\n\nlet model: GraphModel | null;\nlet inputSize = 224;\nlet anchorTensor: { x, y };\nconst numLayers = 5;\nconst strides = [8, 16, 32, 32, 32];\n\nexport function createAnchors() {\n const anchors: { x: number, y: number }[] = [];\n let layerId = 0;\n while (layerId < numLayers) {\n let anchorCount = 0;\n let lastSameStrideLayer = layerId;\n while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) {\n anchorCount += 2;\n lastSameStrideLayer++;\n }\n const stride = strides[layerId];\n const featureMapHeight = Math.ceil(inputSize / stride);\n const featureMapWidth = Math.ceil(inputSize / stride);\n for (let y = 0; y < featureMapHeight; ++y) {\n for (let x = 0; x < featureMapWidth; ++x) {\n for (let anchorId = 0; anchorId < anchorCount; ++anchorId) {\n anchors.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight });\n }\n }\n }\n layerId = lastSameStrideLayer;\n }\n anchorTensor = { x: tf.tensor1d(anchors.map((a) => a.x)), y: tf.tensor1d(anchors.map((a) => a.y)) };\n}\n\nexport async function loadDetector(config: Config): Promise {\n if (env.initial) model = null;\n if (!model && config.body['detector'] && config.body['detector'].modelPath || '') {\n model = await loadModel(config.body['detector'].modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug && model) log('cached model:', model['modelUrl']);\n createAnchors();\n return model as GraphModel;\n}\n\nconst cropFactor = [5.0, 5.0];\nexport function decodeBoxes(boxesTensor, anchor) {\n return tf.tidy(() => {\n const split = tf.split(boxesTensor, 12, 1); // first 4 are box data [x,y,w,h] and 4 are keypoints data [x,y] for total of 12\n let xCenter = tf.squeeze(split[0]);\n let yCenter = tf.squeeze(split[1]);\n let width = tf.squeeze(split[2]);\n let height = tf.squeeze(split[3]);\n xCenter = tf.add(tf.div(xCenter, inputSize), anchor.x);\n yCenter = tf.add(tf.div(yCenter, inputSize), anchor.y);\n width = tf.mul(tf.div(width, inputSize), cropFactor[0]);\n height = tf.mul(tf.div(height, inputSize), cropFactor[1]);\n const xMin = tf.sub(xCenter, tf.div(width, 2));\n const yMin = tf.sub(yCenter, tf.div(height, 2));\n const xMax = tf.add(xMin, width);\n const yMax = tf.add(yMin, height);\n const boxes = tf.stack([xMin, yMin, xMax, yMax], 1);\n return boxes;\n });\n}\n\nasync function decodeResults(boxesTensor: Tensor, logitsTensor: Tensor, config: Config, outputSize: [number, number]): Promise {\n const detectedBoxes: DetectedBox[] = [];\n const t: Record = {};\n t.boxes = decodeBoxes(boxesTensor, anchorTensor);\n t.scores = tf.sigmoid(logitsTensor);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, 1, config.body['detector']?.minConfidence || 0.1, config.body['detector']?.iouThreshold || 0.1);\n const nms = await t.nms.data();\n const scores = await t.scores.data();\n const boxes = await t.boxes.array();\n for (const i of Array.from(nms)) {\n const score = scores[i];\n const boxRaw: Box = boxes[i];\n const box: Box = [Math.round(boxRaw[0] * outputSize[0]), Math.round(boxRaw[1] * outputSize[1]), Math.round(boxRaw[2] * outputSize[0]), Math.round(boxRaw[3] * outputSize[1])];\n const detectedBox: DetectedBox = { score, boxRaw, box };\n detectedBoxes.push(detectedBox);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return detectedBoxes;\n}\n\nexport async function detectBoxes(input: Tensor, config: Config, outputSize: [number, number]) {\n const t: Record = {};\n t.res = model?.execute(input, ['Identity']) as Tensor; //\n t.logitsRaw = tf.slice(t.res, [0, 0, 0], [1, -1, 1]);\n t.boxesRaw = tf.slice(t.res, [0, 0, 1], [1, -1, -1]);\n t.logits = tf.squeeze(t.logitsRaw);\n t.boxes = tf.squeeze(t.boxesRaw);\n const boxes = await decodeResults(t.boxes, t.logits, config, outputSize);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import type { Point, Box } from '../result';\n\nexport function calc(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const box: Box = [min[0], min[1], max[0] - min[0], max[1] - min[1]];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function square(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const center = [(min[0] + max[0]) / 2, (min[1] + max[1]) / 2]; // find center x and y coord of all fingers\n const dist = Math.max(center[0] - min[0], center[1] - min[1], -center[0] + max[0], -center[1] + max[1]); // largest distance from center in any direction\n const box: Box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function scale(box: Box, scaleFact: number) {\n const dist = [box[2] * scaleFact, box[3] * scaleFact];\n const newBox: Box = [\n box[0] - (dist[0] - box[2]) / 2,\n box[1] - (dist[1] - box[3]) / 2,\n dist[0],\n dist[1],\n ];\n return newBox;\n}\n\nexport function crop(box: Box) { // [y1, x1, y2, x2] clamped to 0..1\n const yxBox: Box = [Math.max(0, box[1]), Math.max(0, box[0]), Math.min(1, box[3] + box[1]), Math.min(1, box[2] + box[0])];\n return yxBox;\n}\n", "/**\n * BlazePose model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { log, now } from '../util/util';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, Box, Point, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport * as coords from './blazeposecoords';\nimport { loadDetector, detectBoxes, DetectedBox } from './blazeposedetector';\nimport * as box from '../util/box';\nimport { env } from '../util/env';\n\n// const models: [GraphModel | null, GraphModel | null] = [null, null];\nlet model: GraphModel | null;\nlet inputSize = 256;\nlet skipped = Number.MAX_SAFE_INTEGER;\nconst outputNodes: { detector: string[], landmarks: string[] } = {\n landmarks: ['ld_3d', 'activation_segmentation', 'activation_heatmap', 'world_3d', 'output_poseflag'],\n detector: [],\n};\n\nconst cache: BodyResult[] = [];\nlet padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];\nlet lastTime = 0;\n\nconst sigmoid = (x) => (1 - (1 / (1 + Math.exp(x))));\n\nexport const loadDetect = (config: Config): Promise => loadDetector(config);\n\nexport async function loadPose(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.body.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nfunction prepareImage(input: Tensor4D, size: number, cropBox?: Box): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n let final: Tensor;\n if (cropBox) {\n t.cropped = tf.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); // if we have cached box use it to crop input\n }\n if (input.shape[1] !== input.shape[2]) { // only pad if width different than height\n const height: [number, number] = [\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n ];\n const width: [number, number] = [\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n ];\n padding = [\n [0, 0], // dont touch batch\n height, // height before&after\n width, // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(t.cropped || input, padding); // use cropped box if it exists\n t.resize = tf.image.resizeBilinear(t.pad as Tensor4D, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else if (input.shape[1] !== size) { // if input needs resizing\n t.resize = tf.image.resizeBilinear(t.cropped as Tensor4D || input, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else { // if input is already in a correct resolution just normalize it\n final = tf.div(t.cropped || input, constants.tf255);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nfunction rescaleKeypoints(keypoints: BodyKeypoint[], outputSize: [number, number], cropBox?: Box): BodyKeypoint[] {\n for (const kpt of keypoints) { // first rescale due to padding\n kpt.position = [\n Math.trunc(kpt.position[0] * (outputSize[0] + padding[2][0] + padding[2][1]) / outputSize[0] - padding[2][0]),\n Math.trunc(kpt.position[1] * (outputSize[1] + padding[1][0] + padding[1][1]) / outputSize[1] - padding[1][0]),\n kpt.position[2] as number,\n ];\n kpt.positionRaw = [kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1], 2 * (kpt.position[2] as number) / (outputSize[0] + outputSize[1])];\n }\n if (cropBox) { // second rescale due to cropping\n const width = cropBox[2] - cropBox[0];\n const height = cropBox[3] - cropBox[1];\n for (const kpt of keypoints) {\n kpt.positionRaw = [\n kpt.positionRaw[0] / height + cropBox[1], // correct offset due to crop\n kpt.positionRaw[1] / width + cropBox[0], // correct offset due to crop\n kpt.positionRaw[2] as number,\n ];\n kpt.position = [\n Math.trunc(kpt.positionRaw[0] * outputSize[0]),\n Math.trunc(kpt.positionRaw[1] * outputSize[1]),\n kpt.positionRaw[2] as number,\n ];\n }\n }\n return keypoints;\n}\n\nfunction fixKeypoints(keypoints: BodyKeypoint[]) {\n // palm z-coord is incorrect around near-zero so we approximate it\n const leftPalm = keypoints.find((k) => k.part === 'leftPalm') as BodyKeypoint;\n const leftWrist = keypoints.find((k) => k.part === 'leftWrist') as BodyKeypoint;\n const leftIndex = keypoints.find((k) => k.part === 'leftIndex') as BodyKeypoint;\n leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2;\n const rightPalm = keypoints.find((k) => k.part === 'rightPalm') as BodyKeypoint;\n const rightWrist = keypoints.find((k) => k.part === 'rightWrist') as BodyKeypoint;\n const rightIndex = keypoints.find((k) => k.part === 'rightIndex') as BodyKeypoint;\n rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2;\n}\n\nasync function detectLandmarks(input: Tensor, config: Config, outputSize: [number, number]): Promise {\n /**\n * t.ld: 39 keypoints [x,y,z,score,presence] normalized to input size\n * t.segmentation:\n * t.heatmap:\n * t.world: 39 keypoints [x,y,z] normalized to -1..1\n * t.poseflag: body score\n */\n if (!model?.['executor']) return null;\n const t: Record = {};\n [t.ld/* 1,195(39*5) */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117(39*3) */, t.poseflag/* 1,1 */] = model?.execute(input, outputNodes.landmarks) as Tensor[]; // run model\n const poseScore = (await t.poseflag.data())[0];\n const points = await t.ld.data();\n const distances = await t.world.data();\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor])); // dont need tensors after this\n const keypointsRelative: BodyKeypoint[] = [];\n const depth = 5; // each points has x,y,z,visibility,presence\n for (let i = 0; i < points.length / depth; i++) {\n const score = sigmoid(points[depth * i + 3]);\n const presence = sigmoid(points[depth * i + 4]);\n const adjScore = Math.trunc(100 * score * presence * poseScore) / 100;\n const positionRaw: Point = [points[depth * i + 0] / inputSize, points[depth * i + 1] / inputSize, points[depth * i + 2] + 0];\n const position: Point = [Math.trunc(outputSize[0] * positionRaw[0]), Math.trunc(outputSize[1] * positionRaw[1]), positionRaw[2] as number];\n const distance: Point = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0];\n keypointsRelative.push({ part: coords.kpt[i] as BodyLandmark, positionRaw, position, distance, score: adjScore });\n }\n if (poseScore < (config.body.minConfidence || 0)) return null;\n fixKeypoints(keypointsRelative);\n const keypoints: BodyKeypoint[] = rescaleKeypoints(keypointsRelative, outputSize); // keypoints were relative to input image which is padded\n const kpts = keypoints.map((k) => k.position);\n const boxes = box.calc(kpts, [outputSize[0], outputSize[1]]); // now find boxes based on rescaled keypoints\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations };\n return body;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && cache !== null) {\n skipped++;\n } else {\n let boxes: DetectedBox[] = [];\n if (config.body?.['detector']?.['enabled']) {\n const preparedImage = prepareImage(input, 224);\n boxes = await detectBoxes(preparedImage, config, outputSize);\n tf.dispose(preparedImage);\n } else {\n boxes = [{ box: [0, 0, 0, 0] as Box, boxRaw: [0, 0, 1, 1], score: 0 }]; // running without detector\n }\n for (let i = 0; i < boxes.length; i++) {\n const preparedBox = prepareImage(input, 256, boxes[i]?.boxRaw); // padded and resized\n cache.length = 0;\n const bodyResult = await detectLandmarks(preparedBox, config, outputSize);\n tf.dispose(preparedBox);\n if (!bodyResult) continue;\n bodyResult.id = i;\n // bodyResult.score = 0; // TBD\n cache.push(bodyResult);\n }\n /*\n cropBox = [0, 0, 1, 1]; // reset crop coordinates\n if (cache?.boxRaw && config.skipAllowed) {\n const cx = (2.0 * cache.boxRaw[0] + cache.boxRaw[2]) / 2;\n const cy = (2.0 * cache.boxRaw[1] + cache.boxRaw[3]) / 2;\n let size = cache.boxRaw[2] > cache.boxRaw[3] ? cache.boxRaw[2] : cache.boxRaw[3];\n size = (size * 1.0) / 2; // enlarge and half it\n if (cx > 0.1 && cx < 0.9 && cy > 0.1 && cy < 0.9 && size > 0.1) { // only update if box is sane\n const y = 0; // cy - size;\n const x = cx - size;\n cropBox = [y, x, y + 1, x + 1]; // [y0,x0,y1,x1] used for cropping but width/height are not yet implemented so we only reposition image to center of body\n }\n }\n */\n lastTime = now();\n skipped = 0;\n }\n return cache;\n}\n", "/**\n * CoCo Labels used by object detection implementations\n */\nexport const labels = [\n { class: 1, label: 'person' },\n { class: 2, label: 'bicycle' },\n { class: 3, label: 'car' },\n { class: 4, label: 'motorcycle' },\n { class: 5, label: 'airplane' },\n { class: 6, label: 'bus' },\n { class: 7, label: 'train' },\n { class: 8, label: 'truck' },\n { class: 9, label: 'boat' },\n { class: 10, label: 'traffic light' },\n { class: 11, label: 'fire hydrant' },\n { class: 12, label: 'stop sign' },\n { class: 13, label: 'parking meter' },\n { class: 14, label: 'bench' },\n { class: 15, label: 'bird' },\n { class: 16, label: 'cat' },\n { class: 17, label: 'dog' },\n { class: 18, label: 'horse' },\n { class: 19, label: 'sheep' },\n { class: 20, label: 'cow' },\n { class: 21, label: 'elephant' },\n { class: 22, label: 'bear' },\n { class: 23, label: 'zebra' },\n { class: 24, label: 'giraffe' },\n { class: 25, label: 'backpack' },\n { class: 26, label: 'umbrella' },\n { class: 27, label: 'handbag' },\n { class: 28, label: 'tie' },\n { class: 29, label: 'suitcase' },\n { class: 30, label: 'frisbee' },\n { class: 31, label: 'skis' },\n { class: 32, label: 'snowboard' },\n { class: 33, label: 'sports ball' },\n { class: 34, label: 'kite' },\n { class: 35, label: 'baseball bat' },\n { class: 36, label: 'baseball glove' },\n { class: 37, label: 'skateboard' },\n { class: 38, label: 'surfboard' },\n { class: 39, label: 'tennis racket' },\n { class: 40, label: 'bottle' },\n { class: 41, label: 'wine glass' },\n { class: 42, label: 'cup' },\n { class: 43, label: 'fork' },\n { class: 44, label: 'knife' },\n { class: 45, label: 'spoon' },\n { class: 46, label: 'bowl' },\n { class: 47, label: 'banana' },\n { class: 48, label: 'apple' },\n { class: 49, label: 'sandwich' },\n { class: 50, label: 'orange' },\n { class: 51, label: 'broccoli' },\n { class: 52, label: 'carrot' },\n { class: 53, label: 'hot dog' },\n { class: 54, label: 'pizza' },\n { class: 55, label: 'donut' },\n { class: 56, label: 'cake' },\n { class: 57, label: 'chair' },\n { class: 58, label: 'couch' },\n { class: 59, label: 'potted plant' },\n { class: 60, label: 'bed' },\n { class: 61, label: 'dining table' },\n { class: 62, label: 'toilet' },\n { class: 63, label: 'tv' },\n { class: 64, label: 'laptop' },\n { class: 65, label: 'mouse' },\n { class: 66, label: 'remote' },\n { class: 67, label: 'keyboard' },\n { class: 68, label: 'cell phone' },\n { class: 69, label: 'microwave' },\n { class: 70, label: 'oven' },\n { class: 71, label: 'toaster' },\n { class: 72, label: 'sink' },\n { class: 73, label: 'refrigerator' },\n { class: 74, label: 'book' },\n { class: 75, label: 'clock' },\n { class: 76, label: 'vase' },\n { class: 77, label: 'scissors' },\n { class: 78, label: 'teddy bear' },\n { class: 79, label: 'hair drier' },\n { class: 80, label: 'toothbrush' },\n];\n", "/**\n * CenterNet object detection model implementation\n *\n * Based on: [**MB3-CenterNet**](https://github.com/610265158/mobilenetv3_centernet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n // fakeOps(['floormod'], config);\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor | null, outputShape: [number, number], config: Config) {\n if (!res) return [];\n const t: Record = {};\n const results: ObjectResult[] = [];\n const detections = await res.array() as number[][][];\n t.squeeze = tf.squeeze(res);\n const arr = tf.split(t.squeeze, 6, 1); // x1, y1, x2, y2, score, class\n t.stack = tf.stack([arr[1], arr[0], arr[3], arr[2]], 1); // reorder dims as tf.nms expects y, x\n t.boxes = tf.squeeze(t.stack);\n t.scores = tf.squeeze(arr[4]);\n t.classes = tf.squeeze(arr[5]);\n tf.dispose([res, ...arr]);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, config.object.maxDetected || 0, config.object.iouThreshold, (config.object.minConfidence || 0));\n const nms = await t.nms.data();\n let i = 0;\n for (const id of Array.from(nms)) {\n const score = Math.trunc(100 * detections[0][id][4]) / 100;\n const classVal = detections[0][id][5];\n if (Number.isNaN(classVal)) continue;\n const label = labels[classVal].label as ObjectType;\n const [x, y] = [\n detections[0][id][0] / inputSize,\n detections[0][id][1] / inputSize,\n ];\n const boxRaw: Box = [\n x,\n y,\n detections[0][id][2] / inputSize - x,\n detections[0][id][3] / inputSize - y,\n ];\n const box: Box = [\n Math.trunc(boxRaw[0] * outputShape[0]),\n Math.trunc(boxRaw[1] * outputShape[1]),\n Math.trunc(boxRaw[2] * outputShape[0]),\n Math.trunc(boxRaw[3] * outputShape[1]),\n ];\n results.push({ id: i++, score, class: classVal, label, box, boxRaw });\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return results;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const outputSize = [input.shape[2] || 0, input.shape[1] || 0] as [number, number];\n const resize = tf.image.resizeBilinear(input, [inputSize, inputSize]);\n const objectT = config.object.enabled ? model?.execute(resize, ['tower_0/detections']) as Tensor : null;\n lastTime = now();\n tf.dispose(resize);\n\n const obj = await process(objectT, outputSize, config);\n last = obj;\n\n resolve(obj);\n });\n}\n", "export const kpt: string[] = [\n 'head',\n 'neck',\n 'rightShoulder',\n 'rightElbow',\n 'rightWrist',\n 'chest',\n 'leftShoulder',\n 'leftElbow',\n 'leftWrist',\n 'bodyCenter',\n 'rightHip',\n 'rightKnee',\n 'rightAnkle',\n 'leftHip',\n 'leftKnee',\n 'leftAnkle',\n];\n\nexport const connected: Record = {\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * EfficientPose model implementation\n *\n * Based on: [**EfficientPose**](https://github.com/daniegr/EfficientPose)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as coords from './efficientposecoords';\nimport { constants } from '../tfjs/constants';\nimport type { BodyResult, Point, BodyLandmark, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet lastTime = 0;\nconst cache: BodyResult = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} as Record };\n\n// const keypoints: Array = [];\n// let box: Box = [0, 0, 0, 0];\n// let boxRaw: Box = [0, 0, 0, 0];\n// let score = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n// performs argmax and max functions on a 2d tensor\nasync function max2d(inputs, minScore): Promise<[number, number, number]> {\n const [width, height] = inputs.shape;\n const reshaped = tf.reshape(inputs, [height * width]); // combine all data\n const max = tf.max(reshaped, 0);\n const newScore: number = (await max.data())[0]; // get highest score\n if (newScore > minScore) { // skip coordinate calculation is score is too low\n const coordinates = tf.argMax(reshaped, 0);\n const mod = tf.mod(coordinates, width);\n const x = (await mod.data())[0];\n const div = tf.div(coordinates, width);\n const y: number = (await div.data())[0];\n tf.dispose([reshaped, max, coordinates, mod, div]);\n return [x, y, newScore];\n }\n tf.dispose([reshaped, max]);\n return [0, 0, newScore];\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs[0].shape) return [];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && Object.keys(cache.keypoints).length > 0) {\n skipped++;\n return [cache];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const tensor = tf.tidy(() => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape?.[2] || 0, model?.inputs[0].shape?.[1] || 0], false);\n const enhance = tf.mul(resize, constants.tf2);\n const norm = tf.sub(enhance, constants.tf1);\n return norm;\n });\n let resT;\n if (config.body.enabled) resT = model?.execute(tensor);\n lastTime = now();\n tf.dispose(tensor);\n\n if (resT) {\n cache.keypoints.length = 0;\n const squeeze = tf.squeeze(resT);\n tf.dispose(resT);\n // body parts are basically just a stack of 2d tensors\n const stack = tf.unstack(squeeze, 2);\n tf.dispose(squeeze);\n\n // process each unstacked tensor as a separate body part\n for (let id = 0; id < stack.length; id++) {\n // actual processing to get coordinates and score\n const [x, y, partScore] = await max2d(stack[id], config.body.minConfidence);\n if (partScore > (config.body.minConfidence || 0)) {\n cache.keypoints.push({\n score: Math.round(100 * partScore) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw: [ // normalized to 0..1\n // @ts-ignore model is not undefined here\n x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],\n ],\n position: [ // normalized to input image size\n // @ts-ignore model is not undefined here\n Math.round(image.shape[2] * x / model.inputs[0].shape[2]), Math.round(image.shape[1] * y / model.inputs[0].shape[1]),\n ],\n });\n }\n }\n stack.forEach((s) => tf.dispose(s));\n }\n cache.score = cache.keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const x = cache.keypoints.map((a) => a.position[0]);\n const y = cache.keypoints.map((a) => a.position[1]);\n cache.box = [\n Math.min(...x),\n Math.min(...y),\n Math.max(...x) - Math.min(...x),\n Math.max(...y) - Math.min(...y),\n ];\n const xRaw = cache.keypoints.map((a) => a.positionRaw[0]);\n const yRaw = cache.keypoints.map((a) => a.positionRaw[1]);\n cache.boxRaw = [\n Math.min(...xRaw),\n Math.min(...yRaw),\n Math.max(...xRaw) - Math.min(...xRaw),\n Math.max(...yRaw) - Math.min(...yRaw),\n ];\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = cache.keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = cache.keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n cache.annotations[name] = pt;\n }\n resolve([cache]);\n });\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport { constants } from '../tfjs/constants';\nimport type { Box, Point } from '../result';\nimport { env } from '../util/env';\n\nexport const createBox = (startEndTensor) => ({ startPoint: tf.slice(startEndTensor, [0, 0], [-1, 2]), endPoint: tf.slice(startEndTensor, [0, 2], [-1, 2]) });\n\nexport const disposeBox = (t) => tf.dispose([t.startPoint, t.endPoint]);\n\nexport const getBoxSize = (box): [number, number] => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])];\n\nexport const getBoxCenter = (box): [number, number, number] => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1];\n\nexport const clampBox = (box, input): Box => (box ? [\n Math.trunc(Math.max(0, box.startPoint[0])),\n Math.trunc(Math.max(0, box.startPoint[1])),\n Math.trunc(Math.min((input.shape[2] || 0), box.endPoint[0]) - Math.max(0, box.startPoint[0])),\n Math.trunc(Math.min((input.shape[1] || 0), box.endPoint[1]) - Math.max(0, box.startPoint[1])),\n] : [0, 0, 0, 0]);\n\nexport const getRawBox = (box, input): Box => (box ? [\n box.startPoint[0] / (input.shape[2] || 0),\n box.startPoint[1] / (input.shape[1] || 0),\n (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0),\n (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0),\n] : [0, 0, 0, 0]);\n\nexport const scaleBoxCoordinates = (box, factor, anchor) => {\n const startPoint: Point = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]];\n const endPoint: Point = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]];\n // const centerPoint = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2];\n const landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]);\n /**\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0]) / 2) + (pt[0] * input.shape[2] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1]) / 2) + (pt[1] * input.shape[1] / blazeface.size()),\n ]);\n */\n\n return { startPoint, endPoint, landmarks, confidence: box.confidence };\n};\n\nexport const cutAndResize = (box, image, cropSize) => {\n const h = image.shape[1];\n const w = image.shape[2];\n const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w];\n const crop = tf.image.cropAndResize(image, [cutBox], [0], cropSize);\n const norm = tf.div(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n};\n\nexport const enlargeBox = (box, factor) => {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize: [number, number] = [factor * size[0] / 2, factor * size[1] / 2];\n return {\n startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point,\n endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size,\n };\n};\n\nexport const squarifyBox = (box) => {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize = Math.max(...size) / 2;\n return {\n startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point,\n endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size: [Math.round(size[0]), Math.round(size[1])] as [number, number],\n };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return {\n startPoint: [Math.min(...x), Math.min(...y)] as Point,\n endPoint: [Math.max(...x), Math.max(...y)] as Point,\n landmarks,\n };\n};\n\nexport const fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];\n\nexport const normalizeRadians = (angle: number) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n\nexport const computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]));\n\nexport const radToDegrees = (rad) => rad * 180 / Math.PI;\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport const dot = (v1: number[], v2: number[]) => {\n let product = 0;\n for (let i = 0; i < v1.length; i++) product += v1[i] * v2[i];\n return product;\n};\n\nexport const getColumnFrom2DArr = (arr, columnIndex) => {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) column.push(arr[i][columnIndex]);\n return column;\n};\n\nexport const multiplyTransformMatrices = (mat1, mat2) => {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n return product;\n};\n\nexport const buildRotationMatrix = (rotation, center) => {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n};\n\nexport const invertTransformMatrix = (matrix) => {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)];\n return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]];\n};\n\nexport const rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])];\n\nexport const xyDistanceBetweenPoints = (a, b) => Math.sqrt(((a[0] - b[0]) ** 2) + ((a[1] - b[1]) ** 2));\n\nexport function generateAnchors(inputSize: number) {\n const spec = inputSize === 192\n ? { strides: [4], anchors: [1] } // facemesh-detector\n : { strides: [inputSize / 16, inputSize / 8], anchors: [2, 6] }; // blazeface\n const anchors: [number, number][] = [];\n for (let i = 0; i < spec.strides.length; i++) {\n const stride = spec.strides[i];\n const gridRows = Math.floor((inputSize + stride - 1) / stride);\n const gridCols = Math.floor((inputSize + stride - 1) / stride);\n const anchorsNum = spec.anchors[i];\n for (let gridY = 0; gridY < gridRows; gridY++) {\n const anchorY = stride * (gridY + 0.5);\n for (let gridX = 0; gridX < gridCols; gridX++) {\n const anchorX = stride * (gridX + 0.5);\n for (let n = 0; n < anchorsNum; n++) anchors.push([anchorX, anchorY]);\n }\n }\n }\n return anchors;\n}\n\nexport function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize) {\n const boxSize = getBoxSize(box);\n const coordsScaled = coordsRaw.map((coord) => ([ // scaled around zero-point\n (boxSize[0] / inputSize) * (coord[0] - (inputSize / 2)),\n (boxSize[1] / inputSize) * (coord[1] - (inputSize / 2)),\n (coord[2] || 0),\n ]));\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix;\n const coordsRotated = largeAngle ? coordsScaled.map((coord) => ([...rotatePoint(coord, coordsRotationMatrix), coord[2]])) : coordsScaled;\n const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix;\n const boxCenter = getBoxCenter(box);\n const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])];\n return coordsRotated.map((coord) => ([\n Math.trunc(coord[0] + offsets[0]),\n Math.trunc(coord[1] + offsets[1]),\n Math.trunc(coord[2] || 0),\n ]));\n}\n\nexport function correctFaceRotation(rotate, box, input, inputSize) {\n const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count)\n ? coords.meshLandmarks.symmetryLine\n : coords.blazeFaceLandmarks.symmetryLine;\n let angle = 0; // default\n let rotationMatrix = fixedRotationMatrix; // default\n let face; // default\n\n if (rotate && env.kernels.includes('rotatewithoffset')) {\n angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n if (largeAngle) { // perform rotation only if angle is sufficiently high\n const center: Point = getBoxCenter(box);\n const centerRaw: Point = [center[0] / input.shape[2], center[1] / input.shape[1]];\n const rotated = tf.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]);\n rotationMatrix = buildRotationMatrix(-angle, center);\n face = cutAndResize(box, rotated, [inputSize, inputSize]);\n tf.dispose(rotated);\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n return [angle, rotationMatrix, face];\n}\n\nexport const findFaceCenter = (mesh) => {\n const x = mesh.map((m) => m[0]);\n const y = mesh.map((m) => m[1]);\n // weighted center\n /*\n const sum = (arr: number[]) => arr.reduce((prev, curr) => prev + curr, 0);\n return [sum(x) / mesh.length, sum(y) / mesh.length];\n */\n // absolute center\n return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2];\n};\n\nexport const calculateFaceBox = (mesh, previousBox) => {\n const center = findFaceCenter(mesh);\n const boxSize = getBoxSize(previousBox);\n const calculatedBox = {\n startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2] as Point,\n endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] as Point,\n };\n return calculatedBox;\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport * as util from './facemeshutil';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { Tensor, GraphModel, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport type { Point } from '../result';\n\nconst keypointsCount = 6;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\nexport interface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number, size: [number, number] }\n\nexport const size = () => inputSize;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.detector?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model['executor'] && model.inputs[0].shape) ? model.inputs[0].shape[2] : 256;\n inputSizeT = tf.scalar(inputSize, 'int32') as Tensor;\n anchors = tf.tensor2d(util.generateAnchors(inputSize)) as Tensor;\n return model;\n}\n\nfunction decodeBoxes(boxOutputs: Tensor) {\n if (!anchors || !inputSizeT) return tf.zeros([0, 0]);\n const t: Record = {};\n t.boxStarts = tf.slice(boxOutputs, [0, 1], [-1, 2]);\n t.centers = tf.add(t.boxStarts, anchors);\n t.boxSizes = tf.slice(boxOutputs, [0, 3], [-1, 2]);\n t.boxSizesNormalized = tf.div(t.boxSizes, inputSizeT);\n t.centersNormalized = tf.div(t.centers, inputSizeT);\n t.halfBoxSize = tf.div(t.boxSizesNormalized, constants.tf2);\n t.starts = tf.sub(t.centersNormalized, t.halfBoxSize);\n t.ends = tf.add(t.centersNormalized, t.halfBoxSize);\n t.startNormalized = tf.mul(t.starts, inputSizeT);\n t.endNormalized = tf.mul(t.ends, inputSizeT);\n const boxes = tf.concat2d([t.startNormalized as Tensor2D, t.endNormalized as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n\nexport async function getBoxes(inputImage: Tensor4D, config: Config): Promise {\n // sanity check on input\n if ((!inputImage) || (inputImage['isDisposedInternal']) || (inputImage.shape.length !== 4) || (inputImage.shape[1] < 1) || (inputImage.shape[2] < 1)) return [];\n const t: Record = {};\n t.resized = tf.image.resizeBilinear(inputImage, [inputSize, inputSize]);\n t.div = tf.div(t.resized, constants.tf127);\n t.normalized = tf.sub(t.div, constants.tf05);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n\n if (confidence > (config.face.detector?.minConfidence || 0)) {\n const b: Record = {};\n b.bbox = tf.slice(t.boxes, [nms[i], 0], [1, -1]);\n b.slice = tf.slice(t.batch, [nms[i], keypointsCount - 1], [1, -1]);\n b.squeeze = tf.squeeze(b.slice);\n b.landmarks = tf.reshape(b.squeeze, [keypointsCount, -1]);\n const points = await b.bbox.data();\n const rawBox = {\n startPoint: [points[0], points[1]] as Point,\n endPoint: [points[2], points[3]] as Point,\n landmarks: (await b.landmarks.array()) as Point[],\n confidence,\n };\n b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]);\n const anchor = await b.anchor.data();\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor);\n const enlargedBox = util.enlargeBox(scaledBox, config.face.detector?.scale || 1.4);\n const squaredBox = util.squarifyBox(enlargedBox);\n if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) boxes.push(squaredBox);\n Object.keys(b).forEach((tensor) => tf.dispose(b[tensor]));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport * as util from './facemeshutil';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { Point } from '../result';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false, scale = 2.3) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize, config: Config) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\nimport type { DetectBox } from './blazeface';\n\nconst cache = {\n boxes: [] as DetectBox[],\n skipped: Number.MAX_SAFE_INTEGER,\n timestamp: 0,\n};\n\nlet model: GraphModel | null = null;\nlet inputSize = 0;\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n // reset cached boxes\n const skipTime = (config.face.detector?.skipTime || 0) > (now() - cache.timestamp);\n const skipFrame = cache.skipped < (config.face.detector?.skipFrames || 0);\n if (!config.skipAllowed || !skipTime || !skipFrame || cache.boxes.length === 0) {\n cache.boxes = await blazeface.getBoxes(input, config); // get results from blazeface detector\n cache.timestamp = now();\n cache.skipped = 0;\n } else {\n cache.skipped++;\n }\n const faces: FaceResult[] = [];\n const newCache: DetectBox[] = [];\n let id = 0;\n const size = inputSize;\n for (let i = 0; i < cache.boxes.length; i++) {\n const box = cache.boxes[i];\n let angle = 0;\n let rotationMatrix;\n const face: FaceResult = { // init face result\n id: id++,\n mesh: [],\n meshRaw: [],\n box: [0, 0, 0, 0],\n boxRaw: [0, 0, 0, 0],\n score: 0,\n boxScore: 0,\n faceScore: 0,\n size: [0, 0],\n // contoursRaw: [],\n // contours: [],\n annotations: {} as Record,\n };\n\n // optional rotation correction based on detector data only if mesh is disabled otherwise perform it later when we have more accurate mesh data. if no rotation correction this function performs crop\n [angle, rotationMatrix, face.tensor] = util.correctFaceRotation(config.face.detector?.rotation, box, input, config.face.mesh?.enabled ? inputSize : blazeface.size());\n if (config.filter.equalization) {\n const equilized = face.tensor ? await histogramEqualization(face.tensor) : undefined;\n tf.dispose(face.tensor);\n if (equilized) face.tensor = equilized;\n }\n face.boxScore = Math.round(100 * box.confidence) / 100;\n if (!config.face.mesh?.enabled || !model?.['executor']) { // mesh not enabled or not loaded, return resuts from detector only\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.size = box.size;\n face.mesh = box.landmarks;\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n } else if (!model) { // mesh enabled, but not loaded\n if (config.debug) log('face mesh detection requested, but model is not loaded');\n } else { // mesh enabled\n if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {\n config.face.attention.enabled = false;\n tf.dispose(face.tensor);\n return faces;\n }\n const results = model.execute(face.tensor as Tensor) as Tensor[];\n const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;\n const faceConfidence = await confidenceT.data();\n face.faceScore = Math.round(100 * faceConfidence[0]) / 100;\n if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh\n box.confidence = face.faceScore; // reset confidence of cached box\n if (config.face.mesh['keepInvalid']) {\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.size = box.size;\n face.score = face.boxScore;\n face.mesh = box.landmarks;\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n }\n } else {\n const meshT = results.find((t) => t.shape[t.shape.length - 1] === 1404) as Tensor;\n const coordsReshaped = tf.reshape(meshT, [-1, 3]);\n let rawCoords = await coordsReshaped.array();\n tf.dispose(coordsReshaped);\n if (config.face.attention?.enabled) {\n rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results\n } else if (config.face.iris?.enabled) {\n rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize, config); // run iris model and augment results\n }\n face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.meshAnnotations)) face.annotations[key] = coords.meshAnnotations[key].map((index) => face.mesh[index]); // add annotations\n face.score = face.faceScore;\n const calculatedBox = {\n ...util.calculateFaceBox(face.mesh, box),\n confidence: box.confidence,\n landmarks: box.landmarks,\n size: box.size,\n };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n face.size = calculatedBox.size;\n /*\n const contoursT = results.find((t) => t.shape[t.shape.length - 1] === 266) as Tensor;\n const contoursData = contoursT && await contoursT.data(); // 133 x 2d points\n face.contoursRaw = [];\n for (let j = 0; j < contoursData.length / 2; j++) face.contoursRaw.push([contoursData[2 * j + 0] / inputSize, contoursData[2 * j + 1] / inputSize]);\n face.contours = face.contoursRaw.map((c) => [Math.trunc((input.shape[2] || 1) * c[0]), Math.trunc((input.shape[1] || 1) * c[1])]);\n */\n newCache.push(calculatedBox);\n }\n tf.dispose(results);\n }\n if (face.score > (config.face.detector?.minConfidence || 1)) faces.push(face);\n else tf.dispose(face.tensor);\n }\n cache.boxes = newCache; // reset cache\n return faces;\n}\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (config.face.attention?.enabled && model?.['signature']) {\n if (Object.keys(model?.['signature']?.outputs || {}).length < 6) model = null;\n }\n if (!model) {\n if (config.face.attention?.enabled) model = await loadModel(config.face.attention.modelPath);\n else model = await loadModel(config.face.mesh?.modelPath);\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n inputSize = (model['executor'] && model?.inputs?.[0].shape) ? model?.inputs?.[0].shape[2] : 256;\n return model;\n}\n\nexport const triangulation = coords.TRI468;\nexport const uvmap = coords.UV468;\n", "/**\n * Emotion model implementation\n *\n * [**Oarriaga**](https://github.com/oarriaga/face_classification)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Emotion } from '../result';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\n\nlet annotations: string[] = [];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet rgb = false;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.face.emotion?.modelPath);\n rgb = model?.inputs?.[0].shape?.[3] === 3;\n if (!rgb) annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']; // oarriaga and gear\n else annotations = ['angry', 'disgust', 'fear', 'happy', 'neutral', 'sad', 'surprise']; // affectnet\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ score: number, emotion: Emotion }[]> {\n if (!model) return [];\n const skipFrame = skipped < (config.face.emotion?.skipFrames || 0);\n const skipTime = (config.face.emotion?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx] && (last[idx].length > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const obj: { score: number, emotion: Emotion }[] = [];\n if (config.face.emotion?.enabled) {\n const t: Record = {};\n const inputSize = model?.inputs[0].shape ? model.inputs[0].shape[2] : 0;\n if (config.face.emotion?.['crop'] > 0) { // optional crop\n const crop = config.face.emotion?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n }\n if (rgb) {\n t.mul = tf.mul(t.resize, 255);\n t.normalize = tf.sub(t.mul, [103.939, 116.779, 123.68]); // affectnet uses specific norm values\n t.emotion = model?.execute(t.normalize) as Tensor; // result is already in range 0..1, no need for additional activation\n } else {\n // [t.red, t.green, t.blue] = tf.split(t.resize, 3, 3);\n // weighted rgb to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n // t.redNorm = tf.mul(t.red, rgb[0]);\n // t.greenNorm = tf.mul(t.green, rgb[1]);\n // t.blueNorm = tf.mul(t.blue, rgb[2]);\n // t.grayscale = tf.addN([t.redNorm, t.greenNorm, t.blueNorm]);\n t.channels = tf.mul(t.resize, constants.rgb);\n t.grayscale = tf.sum(t.channels, 3, true);\n t.grayscaleSub = tf.sub(t.grayscale, constants.tf05);\n t.grayscaleMul = tf.mul(t.grayscaleSub, constants.tf2);\n t.emotion = model?.execute(t.grayscaleMul) as Tensor; // result is already in range 0..1, no need for additional activation\n }\n lastTime = now();\n const data = await t.emotion.data();\n for (let i = 0; i < data.length; i++) {\n if (data[i] > (config.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] as Emotion });\n }\n obj.sort((a, b) => b.score - a.score);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "/**\n * FaceRes model implementation\n *\n * Returns Age, Gender, Descriptor\n * Implements Face similarity function\n *\n * Based on: [**HSE-FaceRes**](https://github.com/HSE-asavchenko/HSE_FaceRec_tf)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel, Tensor4D, Tensor1D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport type { Gender, Race } from '../result';\n\nexport interface FaceRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nlet model: GraphModel | null;\nconst last: FaceRes[] = [];\n\nlet lastTime = 0;\nlet lastCount = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.description?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport function enhance(input, config: Config): Tensor {\n const tensor = (input.image || input.tensor || input) as Tensor4D; // input received from detector is already normalized to 0..1, input is also assumed to be straightened\n if (!model?.inputs[0].shape) return tensor; // model has no shape so no point continuing\n let crop: Tensor;\n if (config.face.description?.['crop'] > 0) { // optional crop\n const cropval = config.face.description?.['crop'];\n const box = [[cropval, cropval, 1 - cropval, 1 - cropval]];\n crop = tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n crop = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n const norm: Tensor = tf.mul(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n /*\n // do a tight crop of image and resize it to fit the model\n const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n const crop = (tensor.shape.length === 3)\n ? tf.image.cropAndResize(tf.expandDims(tensor, 0), box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]) // add batch dimension if missing\n : tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n */\n /*\n // convert to black&white to avoid colorization impact\n const rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n const [red, green, blue] = tf.split(crop, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n */\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n const obj: FaceRes = {\n age: 0 as number,\n gender: 'unknown' as Gender,\n genderScore: 0 as number,\n descriptor: [] as number[],\n };\n if (!model?.['executor']) return obj;\n const skipFrame = skipped < (config.face.description?.skipFrames || 0);\n const skipTime = (config.face.description?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && (last?.[idx]?.age > 0) && (last?.[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (config.face.description?.enabled) {\n const enhanced = enhance(image, config);\n const resT = model?.execute(enhanced) as Tensor[];\n lastTime = now();\n tf.dispose(enhanced);\n const genderT = resT.find((t) => t.shape[1] === 1) as Tensor;\n const gender = await genderT.data();\n const confidence = Math.trunc(200 * Math.abs((gender[0] - 0.5))) / 100;\n if (confidence > (config.face.description.minConfidence || 0)) {\n obj.gender = gender[0] <= 0.5 ? 'female' : 'male';\n obj.genderScore = Math.min(0.99, confidence);\n }\n const argmax = tf.argMax(resT.find((t) => t.shape[1] === 100) as Tensor1D, 1);\n const ageIdx: number = (await argmax.data())[0];\n tf.dispose(argmax);\n const ageT = resT.find((t) => t.shape[1] === 100) as Tensor;\n const all = await ageT.data();\n obj.age = Math.round(all[ageIdx - 1] > all[ageIdx + 1] ? 10 * ageIdx - 100 * all[ageIdx - 1] : 10 * ageIdx + 100 * all[ageIdx + 1]) / 10;\n\n if (Number.isNaN(gender[0]) || Number.isNaN(all[0])) log('faceres error:', { model, result: resT });\n\n const desc = resT.find((t) => t.shape[1] === 1024);\n // const reshape = desc.reshape([128, 8]); // reshape large 1024-element descriptor to 128 x 8\n // const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it which leaves us with 128-element descriptor\n const descriptor = desc ? await desc.data() : [] as number[];\n obj.descriptor = Array.from(descriptor);\n resT.forEach((t) => tf.dispose(t));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "import type { Tensor } from '../tfjs/types';\nimport type { FaceResult } from '../result';\n// import * as tf from 'dist/tfjs.esm.js';\nimport { meshAnnotations } from './facemeshcoords';\n\nconst expandFact = 0.1;\nconst alpha = 0.5;\n\n// point inclusion in polygon based on https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\nfunction insidePoly(x: number, y: number, polygon: { x: number, y: number }[]): boolean {\n let inside = false;\n let j = polygon.length - 1;\n for (let i = 0; i < polygon.length; j = i++) {\n if (((polygon[i].y > y) !== (polygon[j].y > y)) && (x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) inside = !inside;\n }\n return inside;\n}\n\nexport async function mask(face: FaceResult): Promise {\n if (!face.tensor) return face.tensor;\n if (!face.mesh || face.mesh.length < 100) return face.tensor;\n const width = face.tensor.shape[2] || 0;\n const height = face.tensor.shape[1] || 0;\n const buffer = await face.tensor.buffer();\n let silhouette: { x: number, y: number }[] = [];\n for (const pt of meshAnnotations.silhouette) silhouette.push({ x: (face.mesh[pt][0] - face.box[0]) / face.box[2], y: (face.mesh[pt][1] - face.box[1]) / face.box[3] }); // add all silhouette points scaled to local box\n if (expandFact && expandFact > 0) silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); // expand silhouette\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const inside = insidePoly(x / width, y / width, silhouette);\n if (!inside) {\n buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0);\n buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1);\n buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2);\n }\n }\n }\n const output = buffer.toTensor();\n // tf.dispose(buffer);\n return output;\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.antispoof?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.antispoof?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.antispoof?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.liveness?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.liveness?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.liveness?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * GEAR [gender/emotion/age/race] model implementation\n *\n * Based on: [**GEAR Predictor**](https://github.com/Udolf15/GEAR-Predictor)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Gender, Race } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nexport interface GearType { age: number, gender: Gender, genderScore: number, race: { score: number, race: Race }[] }\nlet model: GraphModel | null;\nconst last: GearType[] = [];\nconst raceNames = ['white', 'black', 'asian', 'indian', 'other'];\nconst ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.gear?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model) return { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n const skipFrame = skipped < (config.face.gear?.skipFrames || 0);\n const skipTime = (config.face.gear?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n // t.resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape[2], model?.inputs[0].shape[1]], false);\n let box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n if (config.face.gear?.['crop'] > 0) { // optional crop config value\n const crop = config.face.gear?.['crop'];\n box = [[crop, crop, 1 - crop, 1 - crop]];\n }\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const obj: GearType = { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n if (config.face.gear?.enabled) [t.age, t.gender, t.race] = model.execute(t.resize, ['age_output', 'gender_output', 'race_output']) as Tensor[];\n const gender = await t.gender.data();\n obj.gender = gender[0] > gender[1] ? 'male' : 'female';\n obj.genderScore = Math.round(100 * (gender[0] > gender[1] ? gender[0] : gender[1])) / 100;\n const race = await t.race.data();\n for (let i = 0; i < race.length; i++) {\n if (race[i] > (config.face.gear?.minConfidence || 0.2)) obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] as Race });\n }\n obj.race.sort((a, b) => b.score - a.score);\n // {0: 'Below20', 1: '21-25', 2: '26-30', 3: '31-40',4: '41-50', 5: '51-60', 6: 'Above60'}\n const ageDistribution = Array.from(await t.age.data());\n const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]);\n let age = ageSorted[0][0]; // pick best starting point\n for (let i = 1; i < ageSorted.length; i++) age += ageSorted[i][1] * (ageSorted[i][0] - age); // adjust with each other choice by weight\n obj.age = Math.round(10 * age) / 10;\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Age model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\n\nlet model: GraphModel | null;\nconst last: { age: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet'].modelPathAge);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ age: number }> {\n if (!model) return { age: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.age && (last[idx]?.age > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs || !model.inputs[0] || !model.inputs[0].shape) return;\n const t: Record = {};\n if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.mul(t.resize, constants.tf255);\n const obj = { age: 0 };\n if (config.face['ssrnet']?.enabled) t.age = model.execute(t.enhance) as Tensor;\n if (t.age) {\n const data = await t.age.data();\n obj.age = Math.trunc(10 * data[0]) / 10;\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Gender model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Gender } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: { gender: Gender, genderScore: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\n// tuning values\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet']?.modelPathGender);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx, count): Promise<{ gender: Gender, genderScore: number }> {\n if (!model) return { gender: 'unknown', genderScore: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.gender && (last[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.tidy(() => {\n let normalize: Tensor;\n if (model?.inputs?.[0].shape?.[3] === 1) {\n const [red, green, blue] = tf.split(t.resize, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n } else {\n normalize = tf.mul(tf.sub(t.resize, constants.tf05), 2); // range rgb:-1..1\n }\n return normalize;\n });\n const obj: { gender: Gender, genderScore: number } = { gender: 'unknown', genderScore: 0 };\n if (config.face['ssrnet']?.enabled) t.gender = model.execute(t.enhance) as Tensor;\n const data = await t.gender.data();\n obj.gender = data[0] > data[1] ? 'female' : 'male'; // returns two values 0..1, bigger one is prediction\n obj.genderScore = data[0] > data[1] ? (Math.trunc(100 * data[0]) / 100) : (Math.trunc(100 * data[1]) / 100);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * MobileFaceNet model implementation\n *\n * Based on: [**BecauseofAI MobileFace**](https://github.com/becauseofAI/MobileFace)\n *\n * Obsolete and replaced by `faceres` that performs age/gender/descriptor analysis\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['mobilefacenet']?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n/*\n// convert to black&white to avoid colorization impact\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\nconst [red, green, blue] = tf.split(crop, 3, 3);\nconst redNorm = tf.mul(red, rgb[0]);\nconst greenNorm = tf.mul(green, rgb[1]);\nconst blueNorm = tf.mul(blue, rgb[2]);\nconst grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\nconst merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n\n// optional increase image contrast\n// or do it per-channel so mean is done on each channel\n// or do it based on histogram\nconst mean = merge.mean();\nconst factor = 5;\nconst contrast = merge.sub(mean).mul(factor).add(mean);\n*/\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['mobilefacenet']?.skipFrames || 0);\n const skipTime = (config.face['mobilefacenet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['mobilefacenet']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n /*\n // optional normalize outputs with l2 normalization\n const scaled = tf.tidy(() => {\n const l2 = res.norm('euclidean');\n const scale = res.div(l2);\n return scale;\n });\n\n // optional reduce feature vector complexity\n const reshape = tf.reshape(res, [128, 2]); // split 256 vectors into 128 x 2\n const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it\n */\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "/**\n * InsightFace model implementation\n *\n * Based on: [**DeepInsight InsightFace**](https://github.com/deepinsight/insightface)\n *\n * Alternative face embedding detection\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['insightface'].modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['insightface']?.skipFrames || 0);\n const skipTime = (config.face['insightface']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['insightface']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "import type { Point, FaceResult } from '../result';\n\ntype Vector = [number, number, number];\n\nconst calculateGaze = (face: FaceResult): { bearing: number, strength: number } => {\n const radians = (pt1: Point, pt2: Point) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); // function to calculate angle between any two points\n if (!face.annotations.rightEyeIris || !face.annotations.leftEyeIris) return { bearing: 0, strength: 0 };\n\n const offsetIris = [0, -0.1]; // iris center may not align with average of eye extremes\n const eyeRatio = 1; // factor to normalize changes x vs y\n\n const left = (face.mesh[33][2] || 0) > (face.mesh[263][2] || 0); // pick left or right eye depending which one is closer bazed on outsize point z axis\n const irisCenter = left ? face.mesh[473] : face.mesh[468];\n const eyeCenter = left // eye center is average of extreme points on x axis for both x and y, ignoring y extreme points as eyelids naturally open/close more when gazing up/down so relative point is less precise\n ? [(face.mesh[133][0] + face.mesh[33][0]) / 2, (face.mesh[133][1] + face.mesh[33][1]) / 2]\n : [(face.mesh[263][0] + face.mesh[362][0]) / 2, (face.mesh[263][1] + face.mesh[362][1]) / 2];\n const eyeSize = left // eye size is difference between extreme points for both x and y, used to normalize & squarify eye dimensions\n ? [face.mesh[133][0] - face.mesh[33][0], face.mesh[23][1] - face.mesh[27][1]]\n : [face.mesh[263][0] - face.mesh[362][0], face.mesh[253][1] - face.mesh[257][1]];\n const eyeDiff: Point = [ // x distance between extreme point and center point normalized with eye size\n (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0],\n eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1],\n ];\n let strength = Math.sqrt((eyeDiff[0] * eyeDiff[0]) + (eyeDiff[1] * eyeDiff[1])); // vector length is a diagonal between two differences\n strength = Math.min(strength, face.boxRaw[2] / 2, face.boxRaw[3] / 2); // limit strength to half of box size to avoid clipping due to low precision\n const bearing = (radians([0, 0], eyeDiff) + (Math.PI / 2)) % Math.PI; // using eyeDiff instead eyeCenter/irisCenter combo due to manual adjustments and rotate clockwise 90degrees\n return { bearing, strength };\n};\n\nexport const calculateFaceAngle = (face: FaceResult, imageSize: [number, number]): {\n angle: { pitch: number, yaw: number, roll: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n} => {\n // const degrees = (theta) => Math.abs(((theta * 180) / Math.PI) % 360);\n const normalize = (v: Vector): Vector => { // normalize vector\n const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n v[0] /= length;\n v[1] /= length;\n v[2] /= length;\n return v;\n };\n const subVectors = (a: Vector, b: Vector): Vector => { // vector subtraction (a - b)\n const x = a[0] - b[0];\n const y = a[1] - b[1];\n const z = a[2] - b[2];\n return [x, y, z];\n };\n const crossVectors = (a: Vector, b: Vector): Vector => { // vector cross product (a x b)\n const x = a[1] * b[2] - a[2] * b[1];\n const y = a[2] * b[0] - a[0] * b[2];\n const z = a[0] * b[1] - a[1] * b[0];\n return [x, y, z];\n };\n // 3x3 rotation matrix to Euler angles based on https://www.geometrictools.com/Documentation/EulerAngles.pdf\n const rotationMatrixToEulerAngle = (r: number[]): { pitch: number, yaw: number, roll: number } => {\n const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; // eslint-disable-line @typescript-eslint/no-unused-vars\n let thetaX: number;\n let thetaY: number;\n let thetaZ: number;\n if (r10 < 1) { // YZX calculation\n if (r10 > -1) {\n thetaZ = Math.asin(r10);\n thetaY = Math.atan2(-r20, r00);\n thetaX = Math.atan2(-r12, r11);\n } else {\n thetaZ = -Math.PI / 2;\n thetaY = -Math.atan2(r21, r22);\n thetaX = 0;\n }\n } else {\n thetaZ = Math.PI / 2;\n thetaY = Math.atan2(r21, r22);\n thetaX = 0;\n }\n if (Number.isNaN(thetaX)) thetaX = 0;\n if (Number.isNaN(thetaY)) thetaY = 0;\n if (Number.isNaN(thetaZ)) thetaZ = 0;\n return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ };\n };\n\n /*\n const meshToEulerAngle = (mesh) => { // simple Euler angle calculation based existing 3D mesh\n const radians = (a1, a2, b1, b2) => Math.atan2(b2 - a2, b1 - a1);\n return { // values are in radians in range of -pi/2 to pi/2 which is -90 to +90 degrees, value of 0 means center\n pitch: radians(mesh[10][1], mesh[10][2], mesh[152][1], mesh[152][2]), // looking at y,z of top and bottom points of the face // pitch is face move up/down\n yaw: radians(mesh[33][0], mesh[33][2], mesh[263][0], mesh[263][2]), // looking at x,z of outside corners of leftEye and rightEye // yaw is face turn left/right\n roll: radians(mesh[33][0], mesh[33][1], mesh[263][0], mesh[263][1]), // looking at x,y of outside corners of leftEye and rightEye // roll is face lean left/right\n };\n };\n */\n\n // initialize gaze and mesh\n const mesh = face.meshRaw;\n if (!mesh || mesh.length < 300) return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } };\n\n const size = Math.max(face.boxRaw[2] * imageSize[0], face.boxRaw[3] * imageSize[1]) / 1.5;\n // top, bottom, left, right\n const pts: Point[] = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size, pt[1] * imageSize[1] / size, pt[2]] as Point); // make the xyz coordinates proportional, independent of the image/box size\n\n const yAxis = normalize(subVectors(pts[1] as Vector, pts[0] as Vector));\n let xAxis = normalize(subVectors(pts[3] as Vector, pts[2] as Vector));\n const zAxis = normalize(crossVectors(xAxis, yAxis));\n // adjust xAxis to make sure that all axes are perpendicular to each other\n xAxis = crossVectors(yAxis, zAxis);\n\n // Rotation Matrix from Axis Vectors - http://renderdan.blogspot.com/2006/05/rotation-matrix-from-axis-vectors.html\n // 3x3 rotation matrix is flatten to array in row-major order. Note that the rotation represented by this matrix is inverted.\n const matrix: [number, number, number, number, number, number, number, number, number] = [\n xAxis[0], xAxis[1], xAxis[2],\n yAxis[0], yAxis[1], yAxis[2],\n zAxis[0], zAxis[1], zAxis[2],\n ];\n const angle = rotationMatrixToEulerAngle(matrix);\n // const angle = meshToEulerAngle(mesh);\n\n // we have iris keypoints so we can calculate gaze direction\n const gaze = mesh.length === 478 ? calculateGaze(face) : { bearing: 0, strength: 0 };\n\n return { angle, matrix, gaze };\n};\n", "import type { FaceResult } from '../result';\n\nexport function calculateCameraDistance(face: FaceResult, width: number): number {\n // iris points are [center, left, top, right, bottom]\n // average size of human iris is 11.7mm - fairly constant for all ages/genders/races\n const f = face?.annotations;\n if (!f?.leftEyeIris || !f?.rightEyeIris) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // distance of eye from camera in meters\n const cameraDistance = Math.round(1.17 / irisSize) / 100;\n return cameraDistance;\n}\n\nexport function calculateEyesDistance(face: FaceResult, width: number): number {\n // average distance between eyes is 65mm - fairly constant for typical adult male, but varies otherwise\n const f = face?.annotations;\n if (!f?.leftEyeIris || !f?.rightEyeIris) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // pixel x and y distance of centers of left and right iris, you can use edges instead\n const irisDistanceXY = [f.leftEyeIris[0][0] - f.rightEyeIris[0][0], f.leftEyeIris[0][1] - f.rightEyeIris[0][1]];\n // absolute distance bewtween eyes in 0..1 range to account for head pitch (we can ignore yaw)\n const irisDistance = Math.sqrt((irisDistanceXY[0] * irisDistanceXY[0]) + (irisDistanceXY[1] * irisDistanceXY[1])) / width;\n // distance between eyes in meters\n const eyesDistance = Math.round(1.17 * irisDistance / irisSize) / 100;\n return eyesDistance;\n}\n", "/**\n * Face algorithm implementation\n * Uses FaceMesh, Emotion and FaceRes models to create a unified pipeline\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as facemesh from './facemesh';\nimport * as emotion from '../gear/emotion';\nimport * as faceres from './faceres';\nimport * as mask from './mask';\nimport * as antispoof from './antispoof';\nimport * as liveness from './liveness';\nimport * as gear from '../gear/gear';\nimport * as ssrnetAge from '../gear/ssrnet-age';\nimport * as ssrnetGender from '../gear/ssrnet-gender';\nimport * as mobilefacenet from './mobilefacenet';\nimport * as insightface from './insightface';\nimport type { FaceResult, Emotion, Gender, Race } from '../result';\nimport type { Tensor4D } from '../tfjs/types';\nimport type { Human } from '../human';\nimport { calculateFaceAngle } from './angles';\nimport { calculateCameraDistance } from './anthropometry';\n\ninterface DescRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nexport const detectFace = async (instance: Human /* instance of human */, input: Tensor4D): Promise => {\n // run facemesh, includes blazeface and iris\n let timeStamp: number = now();\n let ageRes: { age: number } | Promise<{ age: number }> | null;\n let gearRes: gear.GearType | Promise | null;\n let genderRes: { gender: string, genderScore: number } | Promise<{ gender: string, genderScore: number }> | null;\n let emotionRes: { score: number, emotion: Emotion }[] | Promise<{ score: number, emotion: Emotion }[]>;\n let mobilefacenetRes: number[] | Promise | null;\n let insightfaceRes: number[] | Promise | null;\n let antispoofRes: number | Promise | null;\n let livenessRes: number | Promise | null;\n let descRes: DescRes | Promise | null;\n\n const faceRes: FaceResult[] = [];\n instance.state = 'run:face';\n const faces: FaceResult[] = await facemesh.predict(input, instance.config);\n instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n if (!input.shape || input.shape.length !== 4) return [];\n if (!faces) return [];\n // for (const face of faces) {\n for (let i = 0; i < faces.length; i++) {\n instance.analyze('Get Face');\n\n // is something went wrong, skip the face\n // @ts-ignore possibly undefied\n if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) {\n log('Face object is disposed:', faces[i].tensor);\n continue;\n }\n\n // optional face mask\n if (instance.config.face.detector?.mask) {\n const masked = await mask.mask(faces[i]);\n tf.dispose(faces[i].tensor);\n if (masked) faces[i].tensor = masked;\n }\n\n // calculate face angles\n const rotation = faces[i].mesh && (faces[i].mesh.length > 200) ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null;\n\n // run emotion, inherits face from blazeface\n instance.analyze('Start Emotion:');\n if (instance.config.async) {\n emotionRes = instance.config.face.emotion?.enabled ? emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n } else {\n instance.state = 'run:emotion';\n timeStamp = now();\n emotionRes = instance.config.face.emotion?.enabled ? await emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Emotion:');\n\n // run antispoof, inherits face from blazeface\n instance.analyze('Start AntiSpoof:');\n if (instance.config.async) {\n antispoofRes = instance.config.face.antispoof?.enabled ? antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:antispoof';\n timeStamp = now();\n antispoofRes = instance.config.face.antispoof?.enabled ? await antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End AntiSpoof:');\n\n // run liveness, inherits face from blazeface\n instance.analyze('Start Liveness:');\n if (instance.config.async) {\n livenessRes = instance.config.face.liveness?.enabled ? liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:liveness';\n timeStamp = now();\n livenessRes = instance.config.face.liveness?.enabled ? await liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Liveness:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start GEAR:');\n if (instance.config.async) {\n gearRes = instance.config.face.gear?.enabled ? gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:gear';\n timeStamp = now();\n gearRes = instance.config.face.gear?.enabled ? await gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.gear = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End GEAR:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start SSRNet:');\n if (instance.config.async) {\n ageRes = instance.config.face['ssrnet']?.enabled ? ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:ssrnet';\n timeStamp = now();\n ageRes = instance.config.face['ssrnet']?.enabled ? await ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? await ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.ssrnet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End SSRNet:');\n\n // run mobilefacenet alternative, inherits face from blazeface\n instance.analyze('Start MobileFaceNet:');\n if (instance.config.async) {\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? await mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End MobileFaceNet:');\n\n // run insightface alternative, inherits face from blazeface\n instance.analyze('Start InsightFace:');\n if (instance.config.async) {\n insightfaceRes = instance.config.face['insightface']?.enabled ? insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n insightfaceRes = instance.config.face['insightface']?.enabled ? await insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End InsightFace:');\n\n // run faceres, inherits face from blazeface\n instance.analyze('Start Description:');\n if (instance.config.async) {\n descRes = faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n } else {\n instance.state = 'run:description';\n timeStamp = now();\n descRes = await faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Description:');\n\n // if async wait for results\n if (instance.config.async) {\n [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]);\n }\n instance.analyze('Finish Face:');\n\n if (instance.config.face['ssrnet']?.enabled && ageRes && genderRes) { // override age/gender if ssrnet model is used\n descRes = {\n ...(descRes as DescRes),\n age: (ageRes as { age: number}).age,\n gender: (genderRes as { gender: Gender, genderScore: number }).gender,\n genderScore: (genderRes as { gender: Gender, genderScore: number }).genderScore,\n };\n }\n if (instance.config.face.gear?.enabled && gearRes) { // override age/gender/race if gear model is used\n descRes = {\n ...(descRes as DescRes),\n age: (gearRes as gear.GearType).age,\n gender: (gearRes as gear.GearType).gender,\n genderScore: (gearRes as gear.GearType).genderScore,\n race: (gearRes as gear.GearType).race,\n };\n }\n if (instance.config.face['mobilefacenet']?.enabled && mobilefacenetRes) { // override descriptor if mobilefacenet model is used\n (descRes as DescRes).descriptor = mobilefacenetRes as number[];\n }\n\n if (instance.config.face['insightface']?.enabled && insightfaceRes) { // override descriptor if insightface model is used\n (descRes as DescRes).descriptor = insightfaceRes as number[];\n }\n\n const irisSize = instance.config.face.iris?.enabled ? calculateCameraDistance(faces[i], input.shape[2]) : 0;\n\n // optionally return tensor\n const tensor = instance.config.face.detector?.return ? tf.squeeze(faces[i].tensor as Tensor4D) : null;\n // dispose original face tensor\n tf.dispose(faces[i].tensor);\n // delete temp face image\n if (faces[i].tensor) delete faces[i].tensor;\n // combine results\n const res: FaceResult = {\n ...faces[i],\n id: i,\n };\n if ((descRes as DescRes).age) res.age = (descRes as DescRes).age;\n if ((descRes as DescRes).gender) res.gender = (descRes as DescRes).gender;\n if ((descRes as DescRes).genderScore) res.genderScore = (descRes as DescRes).genderScore;\n if ((descRes as DescRes).descriptor) res.embedding = (descRes as DescRes).descriptor;\n if ((descRes as DescRes).race) res.race = (descRes as DescRes).race as { score: number, race: Race }[];\n if (emotionRes) res.emotion = emotionRes as { score: number, emotion: Emotion }[];\n if (antispoofRes) res.real = antispoofRes as number;\n if (livenessRes) res.live = livenessRes as number;\n if (irisSize > 0) res.distance = irisSize;\n if (rotation) res.rotation = rotation;\n if (tensor) res.tensor = tensor;\n faceRes.push(res);\n instance.analyze('End Face');\n }\n instance.analyze('End FaceMesh:');\n if (instance.config.async) {\n if (instance.performance.face) delete instance.performance.face;\n if (instance.performance.age) delete instance.performance.age;\n if (instance.performance.gender) delete instance.performance.gender;\n if (instance.performance.emotion) delete instance.performance.emotion;\n }\n return faceRes;\n};\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nexport const Finger = {\n thumb: 0,\n index: 1,\n middle: 2,\n ring: 3,\n pinky: 4,\n all: [0, 1, 2, 3, 4], // just for convenience\n nameMapping: { 0: 'thumb', 1: 'index', 2: 'middle', 3: 'ring', 4: 'pinky' },\n // Describes mapping of joints based on the 21 points returned by handpose.\n // [0] Palm\n // [1-4] Thumb\n // [5-8] Index\n // [9-12] Middle\n // [13-16] Ring\n // [17-20] Pinky\n pointsMapping: {\n 0: [[0, 1], [1, 2], [2, 3], [3, 4]],\n 1: [[0, 5], [5, 6], [6, 7], [7, 8]],\n 2: [[0, 9], [9, 10], [10, 11], [11, 12]],\n 3: [[0, 13], [13, 14], [14, 15], [15, 16]],\n 4: [[0, 17], [17, 18], [18, 19], [19, 20]],\n },\n getName: (value) => Finger.nameMapping[value],\n getPoints: (value) => Finger.pointsMapping[value],\n};\n\nexport const FingerCurl = {\n none: 0,\n half: 1,\n full: 2,\n nameMapping: { 0: 'none', 1: 'half', 2: 'full' },\n getName: (value) => FingerCurl.nameMapping[value],\n};\n\nexport const FingerDirection = {\n verticalUp: 0,\n verticalDown: 1,\n horizontalLeft: 2,\n horizontalRight: 3,\n diagonalUpRight: 4,\n diagonalUpLeft: 5,\n diagonalDownRight: 6,\n diagonalDownLeft: 7,\n nameMapping: { 0: 'verticalUp', 1: 'verticalDown', 2: 'horizontalLeft', 3: 'horizontalRight', 4: 'diagonalUpRight', 5: 'diagonalUpLeft', 6: 'diagonalDownRight', 7: 'diagonalDownLeft' },\n getName: (value) => FingerDirection.nameMapping[value],\n};\n\nexport class FingerGesture {\n name;\n curls;\n directions;\n weights;\n weightsRelative;\n\n constructor(name) {\n // name (should be unique)\n this.name = name;\n this.curls = {};\n this.directions = {};\n this.weights = [1.0, 1.0, 1.0, 1.0, 1.0];\n this.weightsRelative = [1.0, 1.0, 1.0, 1.0, 1.0];\n }\n\n curl(finger, curl, confidence) {\n if (typeof this.curls[finger] === 'undefined') this.curls[finger] = [];\n this.curls[finger].push([curl, confidence]);\n }\n\n direction(finger, position, confidence) {\n if (!this.directions[finger]) this.directions[finger] = [];\n this.directions[finger].push([position, confidence]);\n }\n\n weight(finger, weight) {\n this.weights[finger] = weight;\n // recalculate relative weights\n const total = this.weights.reduce((a, b) => a + b, 0);\n this.weightsRelative = this.weights.map((el) => el * 5 / total);\n }\n\n matchAgainst(detectedCurls, detectedDirections) {\n let confidence = 0.0;\n // look at the detected curl of each finger and compare with\n // the expected curl of this finger inside current gesture\n for (const fingerIdx in detectedCurls) {\n const detectedCurl = detectedCurls[fingerIdx];\n const expectedCurls = this.curls[fingerIdx];\n if (typeof expectedCurls === 'undefined') {\n // no curl description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible curl of this specific finger\n for (const [expectedCurl, score] of expectedCurls) {\n if (detectedCurl === expectedCurl) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n // same for detected direction of each finger\n for (const fingerIdx in detectedDirections) {\n const detectedDirection = detectedDirections[fingerIdx];\n const expectedDirections = this.directions[fingerIdx];\n if (typeof expectedDirections === 'undefined') {\n // no direction description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible direction of this specific finger\n for (const [expectedDirection, score] of expectedDirections) {\n if (detectedDirection === expectedDirection) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n return confidence / 10;\n }\n}\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nimport { Finger, FingerCurl, FingerDirection, FingerGesture } from './fingerdef';\n\nexport const { thumb, index, middle, ring, pinky } = Finger;\nexport const { none, half, full } = FingerCurl;\nexport const { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;\n\n// describe thumbs up gesture \uD83D\uDC4D\nconst ThumbsUp = new FingerGesture('thumbs up');\nThumbsUp.curl(thumb, none, 1.0);\nThumbsUp.direction(thumb, verticalUp, 1.0);\nThumbsUp.direction(thumb, diagonalUpLeft, 0.25);\nThumbsUp.direction(thumb, diagonalUpRight, 0.25);\nfor (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {\n ThumbsUp.curl(finger, full, 1.0);\n ThumbsUp.direction(finger, horizontalLeft, 1.0);\n ThumbsUp.direction(finger, horizontalRight, 1.0);\n}\n\n// describe Victory gesture \u270C\uFE0F\nconst Victory = new FingerGesture('victory');\nVictory.curl(thumb, half, 0.5);\nVictory.curl(thumb, none, 0.5);\nVictory.direction(thumb, verticalUp, 1.0);\nVictory.direction(thumb, diagonalUpLeft, 1.0);\nVictory.curl(index, none, 1.0);\nVictory.direction(index, verticalUp, 0.75);\nVictory.direction(index, diagonalUpLeft, 1.0);\nVictory.curl(middle, none, 1.0);\nVictory.direction(middle, verticalUp, 1.0);\nVictory.direction(middle, diagonalUpLeft, 0.75);\nVictory.curl(ring, full, 1.0);\nVictory.direction(ring, verticalUp, 0.2);\nVictory.direction(ring, diagonalUpLeft, 1.0);\nVictory.direction(ring, horizontalLeft, 0.2);\nVictory.curl(pinky, full, 1.0);\nVictory.direction(pinky, verticalUp, 0.2);\nVictory.direction(pinky, diagonalUpLeft, 1.0);\nVictory.direction(pinky, horizontalLeft, 0.2);\nVictory.weight(index, 2);\nVictory.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst Point = new FingerGesture('point');\nPoint.curl(thumb, full, 1.0);\nPoint.curl(index, none, 0.5);\nPoint.curl(middle, full, 0.5);\nPoint.curl(ring, full, 0.5);\nPoint.curl(pinky, full, 0.5);\nPoint.weight(index, 2);\nPoint.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst MiddleFinger = new FingerGesture('middle finger');\nMiddleFinger.curl(thumb, none, 1.0);\nMiddleFinger.curl(index, full, 0.5);\nMiddleFinger.curl(middle, full, 0.5);\nMiddleFinger.curl(ring, full, 0.5);\nMiddleFinger.curl(pinky, full, 0.5);\nMiddleFinger.weight(index, 2);\nMiddleFinger.weight(middle, 2);\n\n// describe Open Palm gesture \u270C\uFE0F\nconst OpenPalm = new FingerGesture('open palm');\nOpenPalm.curl(thumb, none, 0.75);\nOpenPalm.curl(index, none, 0.75);\nOpenPalm.curl(middle, none, 0.75);\nOpenPalm.curl(ring, none, 0.75);\nOpenPalm.curl(pinky, none, 0.75);\n\nexport default [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];\n", "/**\n * FingerPose algorithm implementation constants\n *\n * Based on: [**FingerPose***](https://github.com/andypotato/fingerpose)\n */\n\n/* eslint-disable camelcase */\n\nimport { Finger, FingerCurl, FingerDirection } from './fingerdef';\nimport Gestures from '../hand/fingergesture';\n\nconst minConfidence = 0.7;\nconst options = {\n // curl estimation\n HALF_CURL_START_LIMIT: 60.0,\n NO_CURL_START_LIMIT: 130.0,\n // direction estimation\n DISTANCE_VOTE_POWER: 1.1,\n SINGLE_ANGLE_VOTE_POWER: 0.9,\n TOTAL_ANGLE_VOTE_POWER: 1.6,\n};\n\nfunction calculateSlope(point1x, point1y, point2x, point2y) {\n const value = (point1y - point2y) / (point1x - point2x);\n let slope = Math.atan(value) * 180 / Math.PI;\n if (slope <= 0) slope = -slope;\n else if (slope > 0) slope = 180 - slope;\n return slope;\n}\n\n// point1, point2 are 2d or 3d point arrays (xy[z])\n// returns either a single scalar (2d) or array of two slopes (3d)\nfunction getSlopes(point1, point2) {\n if (!point1 || !point2) return [0, 0];\n const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);\n if (point1.length === 2) return slopeXY;\n const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]);\n return [slopeXY, slopeYZ];\n}\n\nfunction angleOrientationAt(angle, weightageAt = 1.0) {\n let isVertical = 0;\n let isDiagonal = 0;\n let isHorizontal = 0;\n if (angle >= 75.0 && angle <= 105.0) isVertical = 1 * weightageAt;\n else if (angle >= 25.0 && angle <= 155.0) isDiagonal = 1 * weightageAt;\n else isHorizontal = 1 * weightageAt;\n return [isVertical, isDiagonal, isHorizontal];\n}\n\nfunction estimateFingerCurl(startPoint, midPoint, endPoint) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const start_mid_z_dist = startPoint[2] - midPoint[2];\n const start_end_z_dist = startPoint[2] - endPoint[2];\n const mid_end_z_dist = midPoint[2] - endPoint[2];\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist);\n let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist);\n if (cos_in > 1.0) cos_in = 1.0;\n else if (cos_in < -1.0) cos_in = -1.0;\n let angleOfCurve = Math.acos(cos_in);\n angleOfCurve = (57.2958 * angleOfCurve) % 180;\n let fingerCurl;\n if (angleOfCurve > options.NO_CURL_START_LIMIT) fingerCurl = FingerCurl.none;\n else if (angleOfCurve > options.HALF_CURL_START_LIMIT) fingerCurl = FingerCurl.half;\n else fingerCurl = FingerCurl.full;\n return fingerCurl;\n}\n\nfunction estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n if (max_dist_x === Math.abs(start_end_x_dist)) {\n if (start_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else if (max_dist_x === Math.abs(start_mid_x_dist)) {\n if (start_mid_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else {\n if (mid_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n }\n return estimatedDirection;\n}\n\nfunction estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) {\n let estimatedDirection;\n if (max_dist_y === Math.abs(start_end_y_dist)) {\n if (start_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else if (max_dist_y === Math.abs(start_mid_y_dist)) {\n if (start_mid_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else {\n if (mid_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n }\n return estimatedDirection;\n}\n\nfunction estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n if (reqd_vertical_direction === FingerDirection.verticalUp) {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalUpLeft;\n else estimatedDirection = FingerDirection.diagonalUpRight;\n } else {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalDownLeft;\n else estimatedDirection = FingerDirection.diagonalDownRight;\n }\n return estimatedDirection;\n}\n\nfunction calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist));\n const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist));\n let voteVertical = 0.0;\n let voteDiagonal = 0.0;\n let voteHorizontal = 0.0;\n const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 0.00001);\n if (start_end_x_y_dist_ratio > 1.5) voteVertical += options.DISTANCE_VOTE_POWER;\n else if (start_end_x_y_dist_ratio > 0.66) voteDiagonal += options.DISTANCE_VOTE_POWER;\n else voteHorizontal += options.DISTANCE_VOTE_POWER;\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist);\n const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist);\n let calc_start_point_x = startPoint[0];\n let calc_start_point_y = startPoint[1];\n let calc_end_point_x = endPoint[0];\n let calc_end_point_y = endPoint[1];\n if (max_dist === start_mid_dist) {\n calc_end_point_x = endPoint[0];\n calc_end_point_y = endPoint[1];\n } else if (max_dist === mid_end_dist) {\n calc_start_point_x = midPoint[0];\n calc_start_point_y = midPoint[1];\n }\n const calcStartPoint = [calc_start_point_x, calc_start_point_y];\n const calcEndPoint = [calc_end_point_x, calc_end_point_y];\n const totalAngle = getSlopes(calcStartPoint, calcEndPoint);\n const votes = angleOrientationAt(totalAngle, options.TOTAL_ANGLE_VOTE_POWER);\n voteVertical += votes[0];\n voteDiagonal += votes[1];\n voteHorizontal += votes[2];\n for (const fingerSlope of fingerSlopes) {\n const fingerVotes = angleOrientationAt(fingerSlope, options.SINGLE_ANGLE_VOTE_POWER);\n voteVertical += fingerVotes[0];\n voteDiagonal += fingerVotes[1];\n voteHorizontal += fingerVotes[2];\n }\n // in case of tie, highest preference goes to Vertical,\n // followed by horizontal and then diagonal\n let estimatedDirection;\n if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n } else {\n estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n }\n return estimatedDirection;\n}\n\nfunction estimate(landmarks) {\n // step 1: calculate slopes\n const slopesXY: number[][] = [];\n const slopesYZ: number[][] = [];\n const fingerCurls: number[] = [];\n const fingerDirections: number[] = [];\n if (!landmarks) return { curls: fingerCurls, directions: fingerDirections };\n\n // step 1: calculate slopes\n for (const finger of Finger.all) {\n const points = Finger.getPoints(finger);\n const slopeAtXY: number[] = [];\n const slopeAtYZ: number[] = [];\n for (const point of points) {\n const point1 = landmarks[point[0]];\n const point2 = landmarks[point[1]];\n // calculate single slope\n const slopes = getSlopes(point1, point2);\n const slopeXY = slopes[0];\n const slopeYZ = slopes[1];\n slopeAtXY.push(slopeXY);\n slopeAtYZ.push(slopeYZ);\n }\n slopesXY.push(slopeAtXY);\n slopesYZ.push(slopeAtYZ);\n }\n\n // step 2: calculate orientations\n for (const finger of Finger.all) {\n // start finger predictions from palm - except for thumb\n const pointIndexAt = (finger === Finger.thumb) ? 1 : 0;\n const fingerPointsAt = Finger.getPoints(finger);\n const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]];\n const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]];\n const endPoint = landmarks[fingerPointsAt[3][1]];\n // check if finger is curled\n const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint);\n const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt));\n fingerCurls[finger] = fingerCurled;\n fingerDirections[finger] = fingerPosition;\n }\n return { curls: fingerCurls, directions: fingerDirections };\n}\n\nexport function analyze(keypoints) { // get estimations of curl / direction for each finger\n if (!keypoints || keypoints.length === 0) return null;\n const estimatorRes = estimate(keypoints);\n const landmarks = {};\n for (const fingerIdx of Finger.all) {\n landmarks[Finger.getName(fingerIdx)] = {\n curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]),\n direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]),\n };\n }\n return landmarks;\n}\n\nexport function match(keypoints) { // compare gesture description to each known gesture\n const poses: { name: string, confidence: number }[] = [];\n if (!keypoints || keypoints.length === 0) return poses;\n const estimatorRes = estimate(keypoints);\n for (const gesture of Gestures) {\n const confidence = gesture.matchAgainst(estimatorRes.curls, estimatorRes.directions);\n if (confidence >= minConfidence) poses.push({ name: gesture.name, confidence });\n }\n return poses;\n}\n", "/**\n * Gesture detection algorithm\n */\n\nimport type { GestureResult, BodyResult, FaceResult, HandResult, Point } from '../result';\nimport * as fingerPose from '../hand/fingerpose';\n\n/** face gesture type */\nexport type FaceGesture =\n `facing ${'left' | 'center' | 'right'}`\n | `blink ${'left' | 'right'} eye`\n | `mouth ${number}% open`\n | `head ${'up' | 'down'}`;\n\n/** iris gesture type */\nexport type IrisGesture =\n 'facing center'\n | `looking ${'left' | 'right' | 'up' | 'down'}`\n | 'looking center';\n\n/** body gesture type */\nexport type BodyGesture =\n `leaning ${'left' | 'right'}`\n | `raise ${'left' | 'right'} hand`\n | 'i give up';\n\n/** hand gesture type */\nexport type HandGesture =\n `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} forward`\n | `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} up`\n | 'victory'\n | 'thumbs up';\n\nexport const body = (res: BodyResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { body: number, gesture: BodyGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n // raising hands\n const leftWrist = res[i].keypoints.find((a) => (a.part === 'leftWrist'));\n const rightWrist = res[i].keypoints.find((a) => (a.part === 'rightWrist'));\n const nose = res[i].keypoints.find((a) => (a.part === 'nose'));\n if (nose && leftWrist && rightWrist && (leftWrist.position[1] < nose.position[1]) && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'i give up' });\n else if (nose && leftWrist && (leftWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise left hand' });\n else if (nose && rightWrist && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise right hand' });\n\n // leaning\n const leftShoulder = res[i].keypoints.find((a) => (a.part === 'leftShoulder'));\n const rightShoulder = res[i].keypoints.find((a) => (a.part === 'rightShoulder'));\n if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) {\n gestures.push({ body: i, gesture: `leaning ${(leftShoulder.position[1] > rightShoulder.position[1]) ? 'left' : 'right'}` });\n }\n }\n return gestures;\n};\n\nexport const face = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { face: number, gesture: FaceGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (res[i].mesh && res[i].mesh.length > 450) {\n const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0);\n const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0];\n if (Math.abs(zDiff / xDiff) <= 0.15) gestures.push({ face: i, gesture: 'facing center' });\n else gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? 'left' : 'right'}` });\n const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openLeft < 0.2) gestures.push({ face: i, gesture: 'blink left eye' });\n const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openRight < 0.2) gestures.push({ face: i, gesture: 'blink right eye' });\n const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1]));\n if (mouthOpen > 10) gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` });\n const chinDepth = res[i].mesh[152][2] || 0;\n if (Math.abs(chinDepth) > 10) gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? 'up' : 'down'}` });\n }\n }\n return gestures;\n};\n\nexport const iris = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { iris: number, gesture: IrisGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!res[i].annotations?.leftEyeIris?.[0] || !res[i].annotations?.rightEyeIris?.[0]) continue;\n const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0];\n const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1];\n const areaLeft = Math.abs(sizeXLeft * sizeYLeft);\n\n const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0];\n const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1];\n const areaRight = Math.abs(sizeXRight * sizeYRight);\n\n let center = false;\n const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight);\n if (difference < 0.25) {\n center = true;\n gestures.push({ iris: i, gesture: 'facing center' });\n }\n\n const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2];\n const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2];\n if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) center = false;\n if (leftIrisCenterX > rightIrisCenterX) { // check eye with bigger offset\n if (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (leftIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking left' });\n }\n\n const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3];\n const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3];\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) center = false;\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) gestures.push({ iris: i, gesture: 'looking down' });\n if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) gestures.push({ iris: i, gesture: 'looking up' });\n\n // still center;\n if (center) gestures.push({ iris: i, gesture: 'looking center' });\n }\n return gestures;\n};\n\nexport const hand = (res: HandResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { hand: number, gesture: HandGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n const fingers: { name: string, position: Point }[] = [];\n if (res[i].annotations) {\n for (const [finger, pos] of Object.entries(res[i].annotations)) {\n if (finger !== 'palmBase' && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger\n }\n }\n if (fingers && fingers.length > 0) {\n const closest = fingers.reduce((best, a) => ((best.position[2] || 0) < (a.position[2] || 0) ? best : a));\n gestures.push({ hand: i, gesture: `${closest.name} forward` as HandGesture });\n const highest = fingers.reduce((best, a) => (best.position[1] < a.position[1] ? best : a));\n gestures.push({ hand: i, gesture: `${highest.name} up` as HandGesture });\n }\n if (res[i].keypoints) {\n const poses = fingerPose.match(res[i].keypoints);\n for (const pose of poses) gestures.push({ hand: i, gesture: pose.name as HandGesture });\n }\n }\n return gestures;\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Point } from '../result';\n\nexport function getBoxSize(box) {\n return [\n Math.abs(box.endPoint[0] - box.startPoint[0]),\n Math.abs(box.endPoint[1] - box.startPoint[1]),\n ];\n}\n\nexport function getBoxCenter(box) {\n return [\n box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2,\n box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2,\n ];\n}\n\nexport function cutBoxFromImageAndResize(box, image, cropSize) {\n const h = image.shape[1];\n const w = image.shape[2];\n const boxes = [[\n box.startPoint[1] / h,\n box.startPoint[0] / w,\n box.endPoint[1] / h,\n box.endPoint[0] / w,\n ]];\n return tf.image.cropAndResize(image, boxes, [0], cropSize);\n}\n\nexport function scaleBoxCoordinates(box, factor) {\n const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]] as Point;\n const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]] as Point;\n const palmLandmarks = box.palmLandmarks.map((coord) => {\n const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]];\n return scaledCoord;\n });\n return { startPoint, endPoint, palmLandmarks, confidence: box.confidence };\n}\n\nexport function enlargeBox(box, factor = 1.5) {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const newHalfSize = [factor * size[0] / 2, factor * size[1] / 2];\n const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]] as Point;\n const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function squarifyBox(box) {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const maxEdge = Math.max(...size);\n const halfSize = maxEdge / 2;\n const startPoint = [centers[0] - halfSize, centers[1] - halfSize] as Point;\n const endPoint = [centers[0] + halfSize, centers[1] + halfSize] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function shiftBox(box, shiftFactor) {\n const boxSize = [\n box.endPoint[0] - box.startPoint[0],\n box.endPoint[1] - box.startPoint[1],\n ];\n const shiftVector = [boxSize[0] * shiftFactor[0], boxSize[1] * shiftFactor[1]];\n const startPoint = [box.startPoint[0] + shiftVector[0], box.startPoint[1] + shiftVector[1]] as Point;\n const endPoint = [box.endPoint[0] + shiftVector[0], box.endPoint[1] + shiftVector[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function normalizeRadians(angle) {\n return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n}\n\nexport function computeRotation(point1, point2) {\n const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]);\n return normalizeRadians(radians);\n}\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport function dot(v1, v2) {\n let product = 0;\n for (let i = 0; i < v1.length; i++) {\n product += v1[i] * v2[i];\n }\n return product;\n}\n\nexport function getColumnFrom2DArr(arr, columnIndex) {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) {\n column.push(arr[i][columnIndex]);\n }\n return column;\n}\n\nexport function multiplyTransformMatrices(mat1, mat2) {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) {\n product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n }\n return product;\n}\n\nexport function buildRotationMatrix(rotation, center) {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n}\n\nexport function invertTransformMatrix(matrix) {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [\n -dot(rotationComponent[0], translationComponent),\n -dot(rotationComponent[1], translationComponent),\n ];\n return [\n rotationComponent[0].concat(invertedTranslation[0]),\n rotationComponent[1].concat(invertedTranslation[1]),\n [0, 0, 1],\n ];\n}\n\nexport function rotatePoint(homogeneousCoordinate, rotationMatrix) {\n return [\n dot(homogeneousCoordinate, rotationMatrix[0]),\n dot(homogeneousCoordinate, rotationMatrix[1]),\n ];\n}\n", "/**\n * HandPose model implementation constants\n * See `handpose.ts` for entry point\n */\n\nexport const anchors = [\n { x: 0.015625, y: 0.015625 },\n { x: 0.015625, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n];\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport * as anchors from './handposeanchors';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, Tensor1D, Tensor2D, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Point } from '../result';\nimport type { Config } from '../config';\n\nexport class HandDetector {\n model: GraphModel;\n anchors: number[][];\n anchorsTensor: Tensor;\n inputSize: number;\n inputSizeTensor: Tensor;\n doubleInputSizeTensor: Tensor;\n\n constructor(model: GraphModel) {\n this.model = model;\n this.anchors = anchors.anchors.map((anchor) => [anchor.x, anchor.y]);\n this.anchorsTensor = tf.tensor2d(this.anchors);\n this.inputSize = this?.model?.inputs?.[0]?.shape?.[2] || 0;\n this.inputSizeTensor = tf.tensor1d([this.inputSize, this.inputSize]);\n this.doubleInputSizeTensor = tf.tensor1d([this.inputSize * 2, this.inputSize * 2]);\n }\n\n normalizeBoxes(boxes) {\n const t: Record = {};\n t.boxOffsets = tf.slice(boxes, [0, 0], [-1, 2]);\n t.boxSizes = tf.slice(boxes, [0, 2], [-1, 2]);\n t.div = tf.div(t.boxOffsets, this.inputSizeTensor);\n t.boxCenterPoints = tf.add(t.div, this.anchorsTensor);\n t.halfBoxSizes = tf.div(t.boxSizes, this.doubleInputSizeTensor);\n t.sub = tf.sub(t.boxCenterPoints, t.halfBoxSizes);\n t.startPoints = tf.mul(t.sub, this.inputSizeTensor);\n t.add = tf.add(t.boxCenterPoints, t.halfBoxSizes);\n t.endPoints = tf.mul(t.add, this.inputSizeTensor);\n const res = tf.concat2d([t.startPoints as Tensor2D, t.endPoints as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res as Tensor;\n }\n\n normalizeLandmarks(rawPalmLandmarks, index: number): Tensor {\n const t: Record = {};\n t.reshape = tf.reshape(rawPalmLandmarks, [-1, 7, 2]);\n t.div = tf.div(t.reshape, this.inputSizeTensor);\n t.landmarks = tf.add(t.div, this.anchors[index] ? this.anchors[index] : 0);\n const res = tf.mul(t.landmarks, this.inputSizeTensor);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res;\n }\n\n async predict(input: Tensor4D, config: Config): Promise<{ startPoint: Point; endPoint: Point, palmLandmarks: Point[]; confidence: number }[]> {\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);\n t.div = tf.div(t.resize, constants.tf127);\n t.image = tf.sub(t.div, constants.tf1);\n t.batched = this.model.execute(t.image) as Tensor;\n t.predictions = tf.squeeze(t.batched);\n t.slice = tf.slice(t.predictions, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.slice);\n t.scores = tf.squeeze(t.sigmoid);\n const scores = await t.scores.data();\n t.boxes = tf.slice(t.predictions, [0, 1], [-1, 4]);\n t.norm = this.normalizeBoxes(t.boxes);\n // box detection is flaky so we look for 3x boxes than we need results\n t.nms = await tf.image.nonMaxSuppressionAsync(t.norm as Tensor2D, t.scores as Tensor1D, 3 * (config.hand?.maxDetected || 1), config.hand.iouThreshold, config.hand.minConfidence);\n const nms = await t.nms.array() as number[];\n const hands: { startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number }[] = [];\n for (const index of nms) {\n const p: Record = {};\n p.box = tf.slice(t.norm, [index, 0], [1, -1]);\n p.slice = tf.slice(t.predictions, [index, 5], [1, 14]);\n p.norm = this.normalizeLandmarks(p.slice, index);\n p.palmLandmarks = tf.reshape(p.norm, [-1, 2]);\n const box = await p.box.data();\n const startPoint = box.slice(0, 2) as unknown as Point;\n const endPoint = box.slice(2, 4) as unknown as Point;\n const palmLandmarks = await p.palmLandmarks.array();\n const hand = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };\n const scaled = util.scaleBoxCoordinates(hand, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]);\n hands.push(scaled);\n Object.keys(p).forEach((tensor) => tf.dispose(p[tensor]));\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport type * as detector from './handposedetector';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { now } from '../util/util';\nimport type { Point } from '../result';\n\nconst palmBoxEnlargeFactor = 5; // default 3\nconst handBoxEnlargeFactor = 1.65; // default 1.65\nconst palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2];\nconst palmLandmarksPalmBase = 0;\nconst palmLandmarksMiddleFingerBase = 2;\nlet lastTime = 0;\n\nexport class HandPipeline {\n handDetector: detector.HandDetector;\n handPoseModel: GraphModel;\n inputSize: number;\n storedBoxes: ({ startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number } | null)[];\n skipped: number;\n detectedHands: number;\n\n constructor(handDetector, handPoseModel) {\n this.handDetector = handDetector;\n this.handPoseModel = handPoseModel;\n this.inputSize = this.handPoseModel?.inputs?.[0].shape?.[2] || 0;\n this.storedBoxes = [];\n this.skipped = Number.MAX_SAFE_INTEGER;\n this.detectedHands = 0;\n }\n\n calculateLandmarksBoundingBox(landmarks) { // eslint-disable-line class-methods-use-this\n const xs = landmarks.map((d) => d[0]);\n const ys = landmarks.map((d) => d[1]);\n const startPoint = [Math.min(...xs), Math.min(...ys)];\n const endPoint = [Math.max(...xs), Math.max(...ys)];\n return { startPoint, endPoint };\n }\n\n getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) {\n const rotatedPalmLandmarks = palmLandmarks.map((coord) => util.rotatePoint([...coord, 1], rotationMatrix));\n const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks);\n return util.enlargeBox(util.squarifyBox(boxAroundPalm), palmBoxEnlargeFactor);\n }\n\n getBoxForHandLandmarks(landmarks) {\n const boundingBox = this.calculateLandmarksBoundingBox(landmarks);\n const boxAroundHand = util.enlargeBox(util.squarifyBox(boundingBox), handBoxEnlargeFactor);\n boxAroundHand.palmLandmarks = [];\n for (let i = 0; i < palmLandmarkIds.length; i++) {\n boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2));\n }\n return boxAroundHand;\n }\n\n transformRawCoords(rawCoords, box2, angle, rotationMatrix) {\n const boxSize = util.getBoxSize(box2);\n const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2];\n const coordsScaled = rawCoords.map((coord) => [\n scaleFactor[0] * (coord[0] - this.inputSize / 2),\n scaleFactor[1] * (coord[1] - this.inputSize / 2),\n scaleFactor[2] * coord[2],\n ]);\n const coordsRotationMatrix = util.buildRotationMatrix(angle, [0, 0]);\n const coordsRotated = coordsScaled.map((coord) => {\n const rotated = util.rotatePoint(coord, coordsRotationMatrix);\n return [...rotated, coord[2]];\n });\n const inverseRotationMatrix = util.invertTransformMatrix(rotationMatrix);\n const boxCenter = [...util.getBoxCenter(box2), 1];\n const originalBoxCenter = [\n util.dot(boxCenter, inverseRotationMatrix[0]),\n util.dot(boxCenter, inverseRotationMatrix[1]),\n ];\n return coordsRotated.map((coord) => [\n Math.trunc(coord[0] + originalBoxCenter[0]),\n Math.trunc(coord[1] + originalBoxCenter[1]),\n Math.trunc(coord[2]),\n ]);\n }\n\n async estimateHands(image, config) {\n let useFreshBox = false;\n\n // run new detector every skipFrames\n let boxes;\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = this.skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n this.skipped++;\n } else {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\n\n // if detector result count doesn't match current working set, use it to reset current working set\n if (boxes && (boxes.length > 0) && ((boxes.length !== this.detectedHands) && (this.detectedHands !== config.hand.maxDetected) || !config.hand.landmarks)) {\n this.detectedHands = 0;\n this.storedBoxes = [...boxes];\n // for (const possible of boxes) this.storedBoxes.push(possible);\n if (this.storedBoxes.length > 0) useFreshBox = true;\n }\n const hands: { landmarks: Point[], confidence: number, boxConfidence: number, fingerConfidence: number, box: { topLeft: Point, bottomRight: Point } }[] = [];\n\n // go through working set of boxes\n for (let i = 0; i < this.storedBoxes.length; i++) {\n const currentBox = this.storedBoxes[i];\n if (!currentBox) continue;\n if (config.hand.landmarks) {\n const angle = config.hand.rotation ? util.computeRotation(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0;\n const palmCenter = util.getBoxCenter(currentBox);\n const palmCenterNormalized: [number, number] = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]];\n const rotatedImage = config.hand.rotation && env.kernels.includes('rotatewithoffset') ? tf.image.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone();\n const rotationMatrix = util.buildRotationMatrix(-angle, palmCenter);\n const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox;\n const croppedInput = util.cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]);\n const handImage = tf.div(croppedInput, constants.tf255);\n tf.dispose(croppedInput);\n tf.dispose(rotatedImage);\n const [confidenceT, keypoints] = this.handPoseModel.execute(handImage) as Tensor[];\n lastTime = now();\n tf.dispose(handImage);\n const confidence = (await confidenceT.data())[0];\n tf.dispose(confidenceT);\n if (confidence >= config.hand.minConfidence / 4) {\n const keypointsReshaped = tf.reshape(keypoints, [-1, 3]);\n const rawCoords = await keypointsReshaped.array();\n tf.dispose(keypoints);\n tf.dispose(keypointsReshaped);\n const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);\n const nextBoundingBox = this.getBoxForHandLandmarks(coords);\n this.storedBoxes[i] = { ...nextBoundingBox, confidence };\n const result = {\n landmarks: coords,\n confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: confidence,\n box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint },\n };\n hands.push(result);\n } else {\n this.storedBoxes[i] = null;\n }\n tf.dispose(keypoints);\n } else {\n // const enlarged = box.enlargeBox(box.squarifyBox(box.shiftBox(currentBox, HAND_BOX_SHIFT_VECTOR)), handBoxEnlargeFactor);\n const enlarged = util.enlargeBox(util.squarifyBox(currentBox), handBoxEnlargeFactor);\n const result = {\n confidence: currentBox.confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: 0,\n box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint },\n landmarks: [],\n };\n hands.push(result);\n }\n }\n this.storedBoxes = this.storedBoxes.filter((a) => a !== null);\n this.detectedHands = hands.length;\n if (hands.length > config.hand.maxDetected) hands.length = config.hand.maxDetected;\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n *\n * Based on: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n */\n\nimport { log } from '../util/util';\nimport * as handdetector from './handposedetector';\nimport * as handpipeline from './handposepipeline';\nimport * as fingerPose from './fingerpose';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, Box, Point } from '../result';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nconst meshAnnotations = {\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n palm: [0],\n};\n\nlet handDetectorModel: GraphModel | null;\nlet handPoseModel: GraphModel | null;\nlet handPipeline: handpipeline.HandPipeline;\n\nexport function initPipeline() {\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!handPipeline) initPipeline();\n const predictions = await handPipeline.estimateHands(input, config);\n if (!predictions) return [];\n const hands: HandResult[] = [];\n for (let i = 0; i < predictions.length; i++) {\n const annotations = {};\n if (predictions[i].landmarks) {\n for (const key of Object.keys(meshAnnotations)) {\n annotations[key] = meshAnnotations[key].map((index) => predictions[i].landmarks[index]);\n }\n }\n const keypoints = predictions[i].landmarks as unknown as Point[];\n let box: Box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; // maximums so conditionals work\n let boxRaw: Box = [0, 0, 0, 0];\n if (keypoints && keypoints.length > 0) { // if we have landmarks, calculate box based on landmarks\n for (const pt of keypoints) {\n if (pt[0] < box[0]) box[0] = pt[0];\n if (pt[1] < box[1]) box[1] = pt[1];\n if (pt[0] > box[2]) box[2] = pt[0];\n if (pt[1] > box[3]) box[3] = pt[1];\n }\n box[2] -= box[0];\n box[3] -= box[1];\n boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)];\n } else { // otherwise use box from prediction\n box = predictions[i].box ? [\n Math.trunc(Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.max(0, predictions[i].box.topLeft[1])),\n Math.trunc(Math.min((input.shape[2] || 0), predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.min((input.shape[1] || 0), predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])),\n ] : [0, 0, 0, 0];\n boxRaw = [\n (predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n ];\n }\n const landmarks = fingerPose.analyze(keypoints);\n hands.push({\n id: i,\n score: Math.round(100 * predictions[i].confidence) / 100,\n boxScore: Math.round(100 * predictions[i].boxConfidence) / 100,\n fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100,\n label: 'hand',\n box,\n boxRaw,\n keypoints,\n annotations: annotations as HandResult['annotations'],\n landmarks: landmarks as HandResult['landmarks'],\n });\n }\n return hands;\n}\n\nexport async function loadDetect(config: Config): Promise {\n if (env.initial) handDetectorModel = null;\n if (!handDetectorModel) handDetectorModel = await loadModel(config.hand.detector?.modelPath);\n else if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n return handDetectorModel;\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) handPoseModel = null;\n if (!handPoseModel) handPoseModel = await loadModel(config.hand.skeleton?.modelPath);\n else if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n return handPoseModel;\n}\n", "/**\n * HandTrack model implementation\n *\n * Based on:\n * - Hand Detection & Skeleton: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n * - Hand Tracking: [**HandTracking**](https://github.com/victordibia/handtracking)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, HandType, Box, Point } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as fingerPose from './fingerpose';\nimport { fakeOps } from '../tfjs/backend';\nimport { constants } from '../tfjs/constants';\n\nconst models: [GraphModel | null, GraphModel | null] = [null, null];\nconst modelOutputNodes = ['StatefulPartitionedCall/Postprocessor/Slice', 'StatefulPartitionedCall/Postprocessor/ExpandDims_1'];\n\nconst inputSize = [[0, 0], [0, 0]];\n\nconst classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];\nconst faceIndex = 4;\n\nconst boxExpandFact = 1.6;\nconst maxDetectorResolution = 512;\nconst detectorExpandFact = 1.4;\n\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastTime = 0;\nlet outputSize: [number, number] = [0, 0];\n\ninterface HandDetectResult {\n id: number,\n score: number,\n box: Box,\n boxRaw: Box,\n label: HandType,\n}\n\nconst cache: {\n boxes: HandDetectResult[],\n hands: HandResult[];\n} = {\n boxes: [],\n hands: [],\n};\n\nconst fingerMap = {\n /*\n thumb: [0, 1, 2, 3, 4],\n index: [0, 5, 6, 7, 8],\n middle: [0, 9, 10, 11, 12],\n ring: [0, 13, 14, 15, 16],\n pinky: [0, 17, 18, 19, 20],\n palm: [0],\n */\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n base: [0],\n palm: [0, 17, 13, 9, 5, 1, 0],\n};\n\nexport async function loadDetect(config: Config): Promise {\n // HandTrack Model: Original: TFJS Port: \n if (env.initial) models[0] = null;\n if (!models[0]) {\n // handtrack model has some kernel ops defined in model but those are never referenced and non-existent in tfjs\n // ideally need to prune the model itself\n fakeOps(['tensorlistreserve', 'enter', 'tensorlistfromtensor', 'merge', 'loopcond', 'switch', 'exit', 'tensorliststack', 'nextiteration', 'tensorlistsetitem', 'tensorlistgetitem', 'reciprocal', 'shape', 'split', 'where'], config);\n models[0] = await loadModel(config.hand.detector?.modelPath);\n const inputs = models[0]['executor'] ? Object.values(models[0].modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[0]['modelUrl']);\n return models[0];\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) models[1] = null;\n if (!models[1]) {\n models[1] = await loadModel(config.hand.skeleton?.modelPath);\n const inputs = models[1]['executor'] ? Object.values(models[1].modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[1]['modelUrl']);\n return models[1];\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (!models[0]) await loadDetect(config);\n if (!models[1]) await loadSkeleton(config);\n return models;\n}\n\nasync function detectHands(input: Tensor4D, config: Config): Promise {\n const hands: HandDetectResult[] = [];\n if (!input || !models[0]) return hands;\n const t: Record = {};\n const ratio = (input.shape[2] || 1) / (input.shape[1] || 1);\n const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); // use dynamic input size but cap at 512\n const width = Math.round(height * ratio / 8) * 8;\n t.resize = tf.image.resizeBilinear(input, [height, width]); // todo: resize with padding\n t.cast = tf.cast(t.resize, 'int32');\n [t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[];\n t.boxes = tf.squeeze(t.rawBoxes, [0, 2]);\n t.scores = tf.squeeze(t.rawScores, [0]);\n const classScores: Tensor[] = tf.unstack(t.scores, 1); // unstack scores based on classes\n tf.dispose(classScores[faceIndex]);\n classScores.splice(faceIndex, 1); // remove faces\n t.filtered = tf.stack(classScores, 1); // restack\n tf.dispose(classScores);\n // t.filtered = t.scores;\n t.max = tf.max(t.filtered, 1); // max overall score\n t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score\n let id = 0;\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.max as Tensor1D, (config.hand.maxDetected || 0) + 1, config.hand.iouThreshold || 0, config.hand.minConfidence || 1);\n const nms = await t.nms.data();\n const scores = await t.max.data();\n const classNum = await t.argmax.data();\n for (const nmsIndex of Array.from(nms)) { // generates results for each class\n const boxSlice = tf.slice(t.boxes, nmsIndex, 1);\n const boxYX = await boxSlice.data();\n tf.dispose(boxSlice);\n const boxData: Box = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; // yx box reshaped to standard box\n const boxRaw: Box = box.scale(boxData, detectorExpandFact);\n const boxFull: Box = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];\n const score = scores[nmsIndex];\n const label = classes[classNum[nmsIndex]] as HandType;\n const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, label };\n hands.push(hand);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n hands.sort((a, b) => b.score - a.score);\n if (hands.length > (config.hand.maxDetected || 1)) hands.length = (config.hand.maxDetected || 1);\n return hands;\n}\n\nasync function detectFingers(input: Tensor4D, h: HandDetectResult, config: Config): Promise {\n const hand: HandResult = { // initial values inherited from hand detect\n id: h.id,\n score: Math.round(100 * h.score) / 100,\n boxScore: Math.round(100 * h.score) / 100,\n fingerScore: 0,\n box: h.box,\n boxRaw: h.boxRaw,\n label: h.label,\n keypoints: [],\n landmarks: {} as HandResult['landmarks'],\n annotations: {} as HandResult['annotations'],\n };\n if (input && models[1] && config.hand.landmarks && h.score > (config.hand.minConfidence || 0)) {\n const t: Record = {};\n const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]] as Box;\n t.crop = tf.image.cropAndResize(input, [boxCrop], [0], [inputSize[1][0], inputSize[1][1]], 'bilinear');\n t.div = tf.div(t.crop, constants.tf255);\n [t.score, t.keypoints] = models[1].execute(t.div, ['Identity_1', 'Identity']) as Tensor[];\n const rawScore = (await t.score.data())[0];\n const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; // reverse sigmoid value\n if (score >= (config.hand.minConfidence || 0)) {\n hand.fingerScore = score;\n t.reshaped = tf.reshape(t.keypoints, [-1, 3]);\n const coordsData: Point[] = await t.reshaped.array() as Point[];\n const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]);\n const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]);\n hand.keypoints = (coordsNorm).map((kpt) => [outputSize[0] * (kpt[0] + h.boxRaw[0]), outputSize[1] * (kpt[1] + h.boxRaw[1]), (kpt[2] || 0)]);\n hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger gestures\n for (const key of Object.keys(fingerMap)) { // map keypoints to per-finger annotations\n hand.annotations[key] = fingerMap[key].map((index: number) => (hand.landmarks && hand.keypoints[index] ? hand.keypoints[index] : null));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n return hand;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!models[0]?.['executor'] || !models[1]?.['executor'] || !models[0].inputs[0].shape || !models[1].inputs[0].shape) return []; // something is wrong with the model\n outputSize = [input.shape[2] || 0, input.shape[1] || 0];\n skipped++; // increment skip frames\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.hands; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const skipTimeExtended = 3 * (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrameExtended = skipped < 3 * (config.hand.skipFrames || 0);\n if (config.skipAllowed && cache.hands.length === config.hand.maxDetected) { // we have all detected hands so we're definitely skipping\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else if (config.skipAllowed && skipTimeExtended && skipFrameExtended && cache.hands.length > 0) { // we have some cached results: maybe not enough but anyhow continue for bit longer\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else { // finally rerun detector\n cache.boxes = await detectHands(input, config);\n lastTime = now();\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n skipped = 0;\n }\n\n const oldCache = [...cache.boxes];\n cache.boxes.length = 0; // reset cache\n if (config.cacheSensitivity > 0) {\n for (let i = 0; i < cache.hands.length; i++) {\n const boxKpt = box.square(cache.hands[i].keypoints, outputSize);\n if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache.hands[i].fingerScore && cache.hands[i].fingerScore > (config.hand.minConfidence || 0)) {\n const boxScale = box.scale(boxKpt.box, boxExpandFact);\n const boxScaleRaw = box.scale(boxKpt.boxRaw, boxExpandFact);\n // const boxCrop = box.crop(boxScaleRaw);\n cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw });\n }\n }\n }\n for (let i = 0; i < cache.hands.length; i++) { // replace detected boxes with calculated boxes in final output\n const bbox = box.calc(cache.hands[i].keypoints, outputSize);\n cache.hands[i].box = bbox.box;\n cache.hands[i].boxRaw = bbox.boxRaw;\n }\n resolve(cache.hands);\n });\n}\n", "/**\n * Type definitions for Human result object\n */\n\nimport type { Tensor } from './tfjs/types';\nimport type { FaceGesture, BodyGesture, HandGesture, IrisGesture } from './gesture/gesture';\nimport type { AnyCanvas } from './exports';\n\n/** generic box as [x, y, width, height] */\nexport type Box = [number, number, number, number];\n/** generic point as [x, y, z?] */\nexport type Point = [number, number, number?];\n\nexport type Emotion = 'angry' | 'disgust' | 'fear' | 'happy' | 'sad' | 'surprise' | 'neutral';\nexport type Gender = 'male' | 'female' | 'unknown';\nexport type Race = 'white' | 'black' | 'asian' | 'indian' | 'other';\nexport type FaceLandmark = 'leftEye' | 'rightEye' | 'nose' | 'mouth' | 'leftEar' | 'rightEar' | 'symmetryLine' | 'silhouette'\n | 'lipsUpperOuter' | 'lipsLowerOuter' | 'lipsUpperInner' | 'lipsLowerInner'\n | 'rightEyeUpper0' | 'rightEyeLower0' | 'rightEyeUpper1' | 'rightEyeLower1' | 'rightEyeUpper2' | 'rightEyeLower2' | 'rightEyeLower3' | 'rightEyebrowUpper' | 'rightEyebrowLower' | 'rightEyeIris'\n | 'leftEyeUpper0' | 'leftEyeLower0' | 'leftEyeUpper1' | 'leftEyeLower1' | 'leftEyeUpper2' | 'leftEyeLower2' | 'leftEyeLower3' | 'leftEyebrowUpper' | 'leftEyebrowLower' | 'leftEyeIris'\n | 'midwayBetweenEyes' | 'noseTip' | 'noseBottom' | 'noseRightCorner' | 'noseLeftCorner' | 'rightCheek' | 'leftCheek';\n\n/** Face results\n * - Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models\n * - Some values may be null if specific model is not enabled\n */\nexport interface FaceResult {\n /** face id */\n id: number\n /** overall face score */\n score: number,\n /** detection score */\n boxScore: number,\n /** mesh score */\n faceScore: number,\n /** detected face box */\n box: Box,\n /** detected face box normalized to 0..1 */\n boxRaw: Box,\n /** detected face box size */\n size: [number, number],\n /** detected face mesh */\n mesh: Point[]\n /** detected face mesh normalized to 0..1 */\n meshRaw: Point[],\n /** face contours as array of 2d points normalized to 0..1 */\n // contoursRaw: Array<[number, number]>,\n /** face contours as array of 2d points */\n // contours: Array<[number, number]>,\n /** mesh keypoints combined into annotated results */\n annotations: Record,\n /** detected age */\n age?: number,\n /** detected gender */\n gender?: Gender,\n /** gender detection score */\n genderScore?: number,\n /** detected emotions */\n emotion?: { score: number, emotion: Emotion }[],\n /** detected race */\n race?: { score: number, race: Race }[],\n /** face descriptor */\n embedding?: number[],\n /** face distance from camera */\n distance?: number,\n /** face anti-spoofing result confidence */\n real?: number,\n /** face liveness result confidence */\n live?: number,\n /** face rotation details */\n rotation?: {\n angle: { roll: number, yaw: number, pitch: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n } | null,\n /** detected face as tensor that can be used in further pipelines */\n tensor?: Tensor,\n}\n\nexport type BodyLandmarkPoseNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkMoveNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkEfficientNet = 'head' | 'neck' | 'rightShoulder' | 'rightElbow' | 'rightWrist' | 'chest' | 'leftShoulder' | 'leftElbow' | 'leftWrist' | 'bodyCenter' | 'rightHip' | 'rightKnee' | 'rightAnkle' | 'leftHip' | 'leftKnee' | 'leftAnkle';\nexport type BodyLandmarkBlazePose = 'nose' | 'leftEyeInside' | 'leftEye' | 'leftEyeOutside' | 'rightEyeInside' | 'rightEye' | 'rightEyeOutside' | 'leftEar' | 'rightEar' | 'leftMouth' | 'rightMouth' | 'leftShoulder' | 'rightShoulder'\n | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftPinky' | 'rightPinky' | 'leftIndex' | 'rightIndex' | 'leftThumb' | 'rightThumb' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle'\n | 'leftHeel' | 'rightHeel' | 'leftFoot' | 'rightFoot' | 'bodyCenter' | 'bodyTop' | 'leftPalm' | 'leftHand' | 'rightPalm' | 'rightHand';\nexport type BodyLandmark = BodyLandmarkPoseNet | BodyLandmarkMoveNet | BodyLandmarkEfficientNet | BodyLandmarkBlazePose;\nexport type BodyAnnotationBlazePose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'leftEye' | 'rightEye' | 'mouth';\nexport type BodyAnnotationEfficientPose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'head';\nexport type BodyAnnotation = BodyAnnotationBlazePose | BodyAnnotationEfficientPose;\n\n/** Body Result keypoints */\nexport interface BodyKeypoint {\n /** body part name */\n part: BodyLandmark,\n /** body part position */\n position: Point,\n /** body part position normalized to 0..1 */\n positionRaw: Point,\n /** body part position relative to body center in meters */\n distance?: Point,\n /** body part detection score */\n score: number,\n}\n\n/** Body results */\nexport interface BodyResult {\n /** body id */\n id: number,\n /** body detection score */\n score: number,\n /** detected body box */\n box: Box,\n /** detected body box normalized to 0..1 */\n boxRaw: Box,\n /** detected body keypoints */\n keypoints: BodyKeypoint[]\n /** detected body keypoints combined into annotated parts */\n annotations: Record,\n}\n\nexport type HandType = 'hand' | 'fist' | 'pinch' | 'point' | 'face' | 'tip' | 'pinchtip';\nexport type Finger = 'index' | 'middle' | 'pinky' | 'ring' | 'thumb' | 'palm';\nexport type FingerCurl = 'none' | 'half' | 'full';\nexport type FingerDirection = 'verticalUp' | 'verticalDown' | 'horizontalLeft' | 'horizontalRight' | 'diagonalUpRight' | 'diagonalUpLeft' | 'diagonalDownRight' | 'diagonalDownLeft';\n\n/** Hand results */\nexport interface HandResult {\n /** hand id */\n id: number,\n /** hand overal score */\n score: number,\n /** hand detection score */\n boxScore: number,\n /** hand skelton score */\n fingerScore: number,\n /** detected hand box */\n box: Box,\n /** detected hand box normalized to 0..1 */\n boxRaw: Box,\n /** detected hand keypoints */\n keypoints: Point[],\n /** detected hand class */\n label: HandType,\n /** detected hand keypoints combined into annotated parts */\n annotations: Record,\n /** detected hand parts annotated with part gestures */\n landmarks: Record,\n}\n\nexport type ObjectType = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter'\n | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee'\n | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork'\n | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant'\n | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book'\n | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush';\n\n/** Object results */\nexport interface ObjectResult {\n /** object id */\n id: number,\n /** object detection score */\n score: number,\n /** detected object class id */\n class: number,\n /** detected object class name */\n label: ObjectType,\n /** detected object box */\n box: Box,\n /** detected object box normalized to 0..1 */\n boxRaw: Box,\n}\n\n/** Gesture combined results\n * Each result has:\n * - part: part name and number where gesture was detected: `face`, `iris`, `body`, `hand`\n * - gesture: gesture detected\n */\nexport type GestureResult =\n { 'face': number, gesture: FaceGesture }\n | { 'iris': number, gesture: IrisGesture }\n | { 'body': number, gesture: BodyGesture }\n | { 'hand': number, gesture: HandGesture }\n\n/** Person getter\n* - Triggers combining all individual results into a virtual person object\n*/\nexport interface PersonResult {\n /** person id */\n id: number,\n /** face result that belongs to this person */\n face: FaceResult,\n /** body result that belongs to this person */\n body: BodyResult | null,\n /** left and right hand results that belong to this person */\n hands: { left: HandResult | null, right: HandResult | null },\n /** detected gestures specific to this person */\n gestures: GestureResult[],\n /** box that defines the person */\n box: Box,\n /** box that defines the person normalized to 0..1 */\n boxRaw?: Box,\n}\n\n/**\n * Result interface definition for **Human** library\n *\n * Contains all possible detection results\n */\nexport interface Result {\n /** {@link FaceResult}: detection & analysis results */\n face: FaceResult[],\n /** {@link BodyResult}: detection & analysis results */\n body: BodyResult[],\n /** {@link HandResult}: detection & analysis results */\n hand: HandResult[],\n /** {@link GestureResult}: detection & analysis results */\n gesture: GestureResult[],\n /** {@link ObjectResult}: detection & analysis results */\n object: ObjectResult[]\n /** global performance object with timing values for each operation */\n performance: Record,\n /** optional processed canvas that can be used to draw input on screen */\n canvas?: AnyCanvas | null,\n /** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */\n readonly timestamp: number,\n /** getter property that returns unified persons object */\n persons: PersonResult[],\n /** Last known error message */\n error: string | null;\n /** Resolution width */\n width: number,\n /** Resolution height */\n height: number,\n}\n\nexport const empty = (error: string | null = null): Result => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error });\n", "export const kpt: string[] = [ // used to create part labels\n 'nose',\n 'leftEye',\n 'rightEye',\n 'leftEar',\n 'rightEar',\n 'leftShoulder',\n 'rightShoulder',\n 'leftElbow',\n 'rightElbow',\n 'leftWrist',\n 'rightWrist',\n 'leftHip',\n 'rightHip',\n 'leftKnee',\n 'rightKnee',\n 'leftAnkle',\n 'rightAnkle',\n];\n\nexport const horizontal: string[][] = [ // used to fix left vs right\n ['leftEye', 'rightEye'],\n ['leftEar', 'rightEar'],\n ['leftShoulder', 'rightShoulder'],\n ['leftElbow', 'rightElbow'],\n ['leftWrist', 'rightWrist'],\n ['leftHip', 'rightHip'],\n ['leftKnee', 'rightKnee'],\n ['leftAnkle', 'rightAnkle'],\n];\n\nexport const vertical: string[][] = [ // used to remove unlikely keypoint positions\n ['leftKnee', 'leftShoulder'],\n ['rightKnee', 'rightShoulder'],\n ['leftAnkle', 'leftKnee'],\n ['rightAnkle', 'rightKnee'],\n];\n\nexport const relative: string[][][] = [ // used to match relative body parts\n [['leftHip', 'rightHip'], ['leftShoulder', 'rightShoulder']],\n [['leftElbow', 'rightElbow'], ['leftShoulder', 'rightShoulder']],\n];\n\nexport const connected: Record = { // used to create body outline in annotations\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * Results interpolation for smoothening of video detection results inbetween detected frames\n */\n\nimport { Result, FaceResult, BodyResult, HandResult, ObjectResult, PersonResult, Box, Point, BodyLandmark, BodyAnnotation, empty, FaceLandmark } from '../result';\nimport type { Config } from '../config';\n\nimport * as moveNetCoords from '../body/movenetcoords';\nimport * as blazePoseCoords from '../body/blazeposecoords';\nimport * as efficientPoseCoords from '../body/efficientposecoords';\nimport { now } from './util';\nimport { env } from './env';\n\nconst bufferedResult: Result = empty();\nlet interpolateTime = 0;\n\nexport function calc(newResult: Result, config: Config): Result {\n const t0 = now();\n if (!newResult) return empty();\n // each record is only updated using deep clone when number of detected record changes, otherwise it will converge by itself\n // otherwise bufferedResult is a shallow clone of result plus updated local calculated values\n // thus mixing by-reference and by-value assignments to minimize memory operations\n\n const elapsed = Date.now() - newResult.timestamp;\n\n /* curve fitted: buffer = 8 - ln(delay)\n interpolation formula: current = ((buffer - 1) * previous + live) / buffer\n - at 50ms delay buffer = ~4.1 => 28% towards live data\n - at 250ms delay buffer = ~2.5 => 40% towards live data\n - at 500ms delay buffer = ~1.8 => 55% towards live data\n - at 750ms delay buffer = ~1.4 => 71% towards live data\n - at 1sec delay buffer = 1 which means live data is used\n */\n const bufferedFactor = elapsed < 1000 ? 8 - Math.log(elapsed + 1) : 1;\n\n if (newResult.canvas) bufferedResult.canvas = newResult.canvas;\n if (newResult.error) bufferedResult.error = newResult.error;\n\n // interpolate body results\n if (!bufferedResult.body || (newResult.body.length !== bufferedResult.body.length)) {\n bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)) as BodyResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.body.length; i++) {\n const box = newResult.body[i].box // update box\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor) as Box;\n const boxRaw = newResult.body[i].boxRaw // update boxRaw\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor) as Box;\n const keypoints = (newResult.body[i].keypoints // update keypoints\n .map((newKpt, j) => ({\n score: newKpt.score,\n part: newKpt.part,\n position: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2],\n ],\n positionRaw: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2],\n ],\n distance: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[0] || 0) + (newKpt.distance?.[0] || 0)) / bufferedFactor : newKpt.distance?.[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[1] || 0) + (newKpt.distance?.[1] || 0)) / bufferedFactor : newKpt.distance?.[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[2] || 0) + (newKpt.distance?.[2] || 0)) / bufferedFactor : newKpt.distance?.[2],\n ],\n }))) as { score: number, part: BodyLandmark, position: [number, number, number?], positionRaw: [number, number, number?] }[];\n\n const annotations: Record = {} as Record; // recreate annotations\n let coords = { connected: {} };\n if (config.body.modelPath?.includes('efficientpose')) coords = efficientPoseCoords;\n else if (config.body.modelPath?.includes('blazepose')) coords = blazePoseCoords;\n else if (config.body.modelPath?.includes('movenet')) coords = moveNetCoords;\n for (const [name, indexes] of Object.entries(coords.connected as Record)) {\n const pt: Point[][] = [];\n for (let j = 0; j < indexes.length - 1; j++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[j]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]);\n // if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations }; // shallow clone plus updated values\n }\n }\n\n // interpolate hand results\n if (!bufferedResult.hand || (newResult.hand.length !== bufferedResult.hand.length)) {\n bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); // deep clone once\n } else {\n for (let i = 0; i < newResult.hand.length; i++) {\n const box = (newResult.hand[i].box// update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.hand[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; // reset keypoints as previous frame did not have them\n const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints // update landmarks\n .map((landmark, j) => landmark\n .map((coord, k) => (((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) as Point)\n : [];\n let annotations = {};\n if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) {\n bufferedResult.hand[i].annotations = newResult.hand[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.hand[i].annotations;\n } else if (newResult.hand[i].annotations) {\n for (const key of Object.keys(newResult.hand[i].annotations)) { // update annotations\n annotations[key] = newResult.hand[i]?.annotations?.[key]?.[0]\n ? newResult.hand[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations as HandResult['annotations'] }; // shallow clone plus updated values\n }\n }\n\n // interpolate face results\n if (!bufferedResult.face || (newResult.face.length !== bufferedResult.face.length)) {\n bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)) as FaceResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.face.length; i++) {\n const box = (newResult.face[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.face[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n let annotations: Record = newResult.face[i].annotations;\n if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) {\n bufferedResult.face[i].annotations = newResult.face[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.face[i].annotations;\n } else if (newResult.face[i].annotations) {\n for (const key of Object.keys(newResult.face[i].annotations)) { // update annotations\n annotations[key] = newResult.face[i]?.annotations?.[key]?.[0]\n ? newResult.face[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n if (newResult.face[i].rotation) {\n const rotation: {\n matrix: [number, number, number, number, number, number, number, number, number],\n angle: { roll: number, yaw: number, pitch: number },\n gaze: { bearing: number, strength: number }\n } = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } };\n rotation.matrix = newResult.face[i].rotation?.matrix as [number, number, number, number, number, number, number, number, number];\n rotation.angle = {\n roll: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.roll || 0) + (newResult.face[i].rotation?.angle?.roll || 0)) / bufferedFactor,\n yaw: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.yaw || 0) + (newResult.face[i].rotation?.angle?.yaw || 0)) / bufferedFactor,\n pitch: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.pitch || 0) + (newResult.face[i].rotation?.angle?.pitch || 0)) / bufferedFactor,\n };\n rotation.gaze = {\n // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive\n bearing: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.bearing || 0) + (newResult.face[i].rotation?.gaze.bearing || 0)) / bufferedFactor,\n strength: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.strength || 0) + (newResult.face[i].rotation?.gaze.strength || 0)) / bufferedFactor,\n };\n bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations }; // shallow clone plus updated values\n }\n }\n }\n\n // interpolate object detection results\n if (!bufferedResult.object || (newResult.object.length !== bufferedResult.object.length)) {\n bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)) as ObjectResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.object.length; i++) {\n const box = (newResult.object[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.object[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n\n // interpolate person results\n if (newResult.persons) {\n const newPersons = newResult.persons; // trigger getter function\n if (!bufferedResult.persons || (newPersons.length !== bufferedResult.persons.length)) {\n bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)) as PersonResult[];\n } else {\n for (let i = 0; i < newPersons.length; i++) { // update person box, we don't update the rest as it's updated as reference anyhow\n bufferedResult.persons[i].box = (newPersons[i].box\n .map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor)) as Box;\n }\n }\n }\n\n // copy latest gestures without interpolation\n if (newResult.gesture) bufferedResult.gesture = newResult.gesture;\n\n // copy resolution info\n bufferedResult.width = newResult.width;\n bufferedResult.height = newResult.height;\n\n // append interpolation performance data\n const t1 = now();\n interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0);\n if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime };\n\n return bufferedResult;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Meet**](https://drive.google.com/file/d/1lnP1bRi9CSqQQXUHa13159vLELYDgDu0/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]);\n // t.softmax = tf.softmax(t.squeeze); // model meet has two channels for fg and bg\n [t.bgRaw, t.fgRaw] = tf.unstack(t.squeeze, 2);\n // t.bg = tf.softmax(t.bgRaw); // we can ignore bg channel\n t.fg = tf.softmax(t.fgRaw);\n t.mul = tf.mul(t.fg, constants.tf255);\n t.expand = tf.expandDims(t.mul, 2);\n t.output = tf.image.resizeBilinear(t.expand as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.output], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.output, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/** Face descriptor type as number array */\nexport type Descriptor = number[]\nexport type MatchOptions = { order?: number, threshold?: number, multiplier?: number, min?: number, max?: number } | undefined;\n\n/** Calculates distance between two descriptors\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n */\nexport function distance(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25 }) {\n // general minkowski distance, euclidean distance is limited case where order is 2\n if (!descriptor1 || !descriptor1) return Number.MAX_SAFE_INTEGER;\n let sum = 0;\n for (let i = 0; i < descriptor1.length; i++) {\n const diff = (!options.order || options.order === 2) ? (descriptor1[i] - descriptor2[i]) : (Math.abs(descriptor1[i] - descriptor2[i]));\n sum += (!options.order || options.order === 2) ? (diff * diff) : (diff ** options.order);\n }\n return (options.multiplier || 20) * sum;\n}\n\n// invert distance to similarity, normalize to given range and clamp\nconst normalizeDistance = (dist, order, min, max) => {\n if (dist === 0) return 1; // short circuit for identical inputs\n const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); // take root of distance\n const norm = (1 - (root / 100) - min) / (max - min); // normalize to range\n const clamp = Math.max(Math.min(norm, 1), 0); // clamp to 0..1\n return clamp;\n};\n\n/** Calculates normalized similarity between two face descriptors based on their `distance`\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n * - min - normalize similarity result to a given range\n * - max - normalzie similarity resutl to a given range\n * default is 0.2...0.8\n * Returns similarity between two face descriptors normalized to 0..1 range where 0 is no similarity and 1 is perfect similarity\n */\nexport function similarity(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) {\n const dist = distance(descriptor1, descriptor2, options);\n return normalizeDistance(dist, options.order || 2, options.min || 0, options.max || 1);\n}\n\n/** Matches given descriptor to a closest entry in array of descriptors\n * @param descriptor - face descriptor\n * @param descriptors - array of face descriptors to commpare given descriptor to\n * @param options - see `similarity` method for options description\n * Returns\n * - `index` index array index where best match was found or -1 if no matches\n * - `distance` calculated `distance` of given descriptor to the best match\n * - `similarity` calculated normalized `similarity` of given descriptor to the best match\n*/\nexport function find(descriptor: Descriptor, descriptors: Descriptor[], options: MatchOptions = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) {\n if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { // validate input\n return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };\n }\n let lowestDistance = Number.MAX_SAFE_INTEGER;\n let index = -1;\n for (let i = 0; i < descriptors.length; i++) {\n const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options) : Number.MAX_SAFE_INTEGER;\n if (res < lowestDistance) {\n lowestDistance = res;\n index = i;\n }\n if (lowestDistance < (options.threshold || 0)) break;\n }\n const normalizedSimilarity = normalizeDistance(lowestDistance, options.order || 2, options.min || 0, options.max || 1);\n return { index, distance: lowestDistance, similarity: normalizedSimilarity };\n}\n", "/**\n * Loader and Validator for all models used by Human\n */\n\nimport { env } from './util/env';\nimport { log } from './util/util';\nimport * as antispoof from './face/antispoof';\nimport * as blazeface from './face/blazeface';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as emotion from './gear/emotion';\nimport * as facemesh from './face/facemesh';\nimport * as faceres from './face/faceres';\nimport * as gear from './gear/gear';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as insightface from './face/insightface';\nimport * as iris from './face/iris';\nimport * as liveness from './face/liveness';\nimport * as meet from './segmentation/meet';\nimport * as mobilefacenet from './face/mobilefacenet';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as ssrnetAge from './gear/ssrnet-age';\nimport * as ssrnetGender from './gear/ssrnet-gender';\nimport { modelStats, ModelInfo } from './tfjs/load';\nimport type { GraphModel } from './tfjs/types';\nimport type { Human } from './human';\n\nexport interface KernelOps { name: string, url: string, missing: string[], ops: string[] }\n\nexport function validateModel(instance: Human | null, model: GraphModel | null, name: string): KernelOps | null {\n if (!model) return null;\n if (!instance?.config?.validateModels) return null;\n const simpleOps = ['const', 'placeholder', 'noop', 'pad', 'squeeze', 'add', 'sub', 'mul', 'div'];\n const ignoreOps = ['biasadd', 'fusedbatchnormv3', 'matmul', 'switch', 'shape', 'merge', 'split', 'broadcastto'];\n const ops: string[] = [];\n const missing: string[] = [];\n interface Op { name: string, category: string, op: string }\n const url = model['modelUrl'] as string;\n const executor = model['executor'];\n if (executor?.graph?.nodes) {\n for (const kernel of Object.values(executor.graph.nodes)) {\n const op = (kernel as Op).op.toLowerCase();\n if (!ops.includes(op)) ops.push(op);\n }\n } else {\n if (!executor && instance.config.debug) {\n log('model not loaded', name);\n }\n }\n for (const op of ops) {\n if (!simpleOps.includes(op) // exclude simple ops\n && !ignoreOps.includes(op) // exclude specific ops\n && !instance.env.kernels.includes(op) // check actual kernel ops\n && !instance.env.kernels.includes(op.replace('_', '')) // check variation without _\n && !instance.env.kernels.includes(op.replace('native', '')) // check standard variation\n && !instance.env.kernels.includes(op.replace('v2', ''))) { // check non-versioned variation\n missing.push(op);\n }\n }\n if (instance.config.debug && missing.length > 0) log('model validation failed:', name, missing);\n return missing.length > 0 ? { name, missing, ops, url } : null;\n}\n\n/** structure that holds global stats for currently loaded models */\nexport interface ModelStats {\n numLoadedModels: number,\n numDefinedModels: number,\n percentageLoaded: number,\n totalSizeFromManifest: number,\n totalSizeWeights: number,\n totalSizeLoading: number,\n modelStats: ModelInfo[],\n}\n\n/** Models class used by Human\n * - models: record of all GraphModels\n * - list: returns list of configured models with their stats\n * - loaded: returns array of loaded models\n * - reset: unloads all models\n * - validate: checks loaded models for valid kernel ops vs current backend\n * - stats: live detailed model stats that can be checked during model load phase\n */\nexport class Models {\n private instance: Human;\n models: Record = {};\n\n constructor(currentInstance: Human) {\n this.models = {};\n this.instance = currentInstance;\n }\n\n stats(): ModelStats {\n let totalSizeFromManifest = 0;\n let totalSizeWeights = 0;\n let totalSizeLoading = 0;\n for (const m of Object.values(modelStats)) {\n totalSizeFromManifest += m.sizeFromManifest;\n totalSizeWeights += m.sizeLoadedWeights;\n totalSizeLoading += m.sizeDesired;\n }\n const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0;\n return {\n numLoadedModels: Object.values(modelStats).length,\n numDefinedModels: Object.keys(this.models).length,\n percentageLoaded,\n totalSizeFromManifest,\n totalSizeWeights,\n totalSizeLoading,\n modelStats: Object.values(modelStats),\n };\n }\n\n reset(): void {\n for (const model of Object.keys(this.models)) this.models[model] = null;\n }\n\n async load(instance?: Human): Promise {\n if (env.initial) this.reset();\n if (instance) this.instance = instance;\n const m: Record> = {};\n // face main models\n m.blazeface = (this.instance.config.face.enabled && !this.models.blazeface) ? blazeface.load(this.instance.config) : null;\n m.antispoof = (this.instance.config.face.enabled && this.instance.config.face.antispoof?.enabled && !this.models.antispoof) ? antispoof.load(this.instance.config) : null;\n m.liveness = (this.instance.config.face.enabled && this.instance.config.face.liveness?.enabled && !this.models.liveness) ? liveness.load(this.instance.config) : null;\n m.faceres = (this.instance.config.face.enabled && this.instance.config.face.description?.enabled && !this.models.faceres) ? faceres.load(this.instance.config) : null;\n m.emotion = (this.instance.config.face.enabled && this.instance.config.face.emotion?.enabled && !this.models.emotion) ? emotion.load(this.instance.config) : null;\n m.iris = (this.instance.config.face.enabled && this.instance.config.face.iris?.enabled && !this.instance.config.face.attention?.enabled && !this.models.iris) ? iris.load(this.instance.config) : null;\n m.facemesh = (this.instance.config.face.enabled && this.instance.config.face.mesh?.enabled && (!this.models.facemesh)) ? facemesh.load(this.instance.config) : null;\n // face alternatives\n m.gear = (this.instance.config.face.enabled && this.instance.config.face['gear']?.enabled && !this.models.gear) ? gear.load(this.instance.config) : null;\n m.ssrnetage = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetage) ? ssrnetAge.load(this.instance.config) : null;\n m.ssrnetgender = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetgender) ? ssrnetGender.load(this.instance.config) : null;\n m.mobilefacenet = (this.instance.config.face.enabled && this.instance.config.face['mobilefacenet']?.enabled && !this.models.mobilefacenet) ? mobilefacenet.load(this.instance.config) : null;\n m.insightface = (this.instance.config.face.enabled && this.instance.config.face['insightface']?.enabled && !this.models.insightface) ? insightface.load(this.instance.config) : null;\n // body alterinatives\n m.blazepose = (this.instance.config.body.enabled && !this.models.blazepose && this.instance.config.body.modelPath?.includes('blazepose')) ? blazepose.loadPose(this.instance.config) : null;\n m.blazeposedetect = (this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body['detector'] && this.instance.config.body['detector'].modelPath) ? blazepose.loadDetect(this.instance.config) : null;\n m.efficientpose = (this.instance.config.body.enabled && !this.models.efficientpose && this.instance.config.body.modelPath?.includes('efficientpose')) ? efficientpose.load(this.instance.config) : null;\n m.movenet = (this.instance.config.body.enabled && !this.models.movenet && this.instance.config.body.modelPath?.includes('movenet')) ? movenet.load(this.instance.config) : null;\n m.posenet = (this.instance.config.body.enabled && !this.models.posenet && this.instance.config.body.modelPath?.includes('posenet')) ? posenet.load(this.instance.config) : null;\n // hand alternatives\n m.handtrack = (this.instance.config.hand.enabled && !this.models.handtrack && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadDetect(this.instance.config) : null;\n m.handskeleton = (this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadSkeleton(this.instance.config) : null;\n // if (this.instance.config.hand.detector?.modelPath?.includes('handdetect')) [m.handpose, m.handskeleton] = (!this.models.handpose) ? await handpose.load(this.instance.config) : [null, null];\n if (this.instance.config.hand.enabled && !this.models.handdetect && this.instance.config.hand.detector?.modelPath?.includes('handdetect')) {\n m.handdetect = handpose.loadDetect(this.instance.config);\n m.handskeleton = handpose.loadSkeleton(this.instance.config);\n }\n // object detection alternatives\n m.centernet = (this.instance.config.object.enabled && !this.models.centernet && this.instance.config.object.modelPath?.includes('centernet')) ? centernet.load(this.instance.config) : null;\n m.nanodet = (this.instance.config.object.enabled && !this.models.nanodet && this.instance.config.object.modelPath?.includes('nanodet')) ? nanodet.load(this.instance.config) : null;\n // segmentation alternatives\n m.selfie = (this.instance.config.segmentation.enabled && !this.models.selfie && this.instance.config.segmentation.modelPath?.includes('selfie')) ? selfie.load(this.instance.config) : null;\n m.meet = (this.instance.config.segmentation.enabled && !this.models.meet && this.instance.config.segmentation.modelPath?.includes('meet')) ? meet.load(this.instance.config) : null;\n m.rvm = (this.instance.config.segmentation.enabled && !this.models.rvm && this.instance.config.segmentation.modelPath?.includes('rvm')) ? rvm.load(this.instance.config) : null;\n\n // models are loaded in parallel asynchronously so lets wait until they are actually loaded\n for (const [model, promise] of Object.entries(m)) {\n if (promise?.['then']) promise['then']((val) => this.models[model] = val);\n }\n await Promise.all(Object.values(m)); // wait so this function does not resolve prematurely\n }\n\n list() {\n const models = Object.keys(this.models).map((model) => ({ name: model, loaded: (this.models[model] !== null), size: 0, url: this.models[model] ? this.models[model]?.['modelUrl'] : null }));\n for (const m of models) {\n const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name));\n if (!stats) continue;\n m.size = modelStats[stats].sizeLoadedWeights;\n m.url = modelStats[stats].url;\n }\n return models;\n }\n\n loaded() {\n const list = this.list();\n const loaded = list.filter((model) => model.loaded).map((model) => model.name);\n return loaded;\n }\n\n validate(): { name: string, missing: string[] }[] {\n const missing: KernelOps[] = [];\n for (const defined of Object.keys(this.models)) {\n const model: GraphModel | null = this.models[defined as keyof Models];\n if (!model) continue;\n const res = validateModel(this.instance, model, defined);\n if (res) missing.push(res);\n }\n return missing;\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { BodyKeypoint, BodyResult } from '../result';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport type { Tensor, Tensor3D } from '../tfjs/types';\n\nconst maxJitter = 0.005; // default allowed jitter is within 0.5%\n\nconst cache: {\n keypoints: BodyKeypoint[],\n padding: [number, number][];\n} = {\n keypoints: [],\n padding: [[0, 0], [0, 0], [0, 0], [0, 0]],\n};\n\nexport function bodyParts(body: BodyResult) { // model sometimes mixes up left vs right keypoints so we fix them\n for (const pair of coords.horizontal) { // fix body parts left vs right\n const left = body.keypoints.findIndex((kp) => kp.part === pair[0]);\n const right = body.keypoints.findIndex((kp) => kp.part === pair[1]);\n if (body.keypoints[left] && body.keypoints[right]) {\n if (body.keypoints[left].position[0] < body.keypoints[right].position[0]) {\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n }\n for (const pair of coords.vertical) { // remove body parts with improbable vertical position\n const lower = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const higher = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n if (body.keypoints[lower] && body.keypoints[higher]) {\n if (body.keypoints[lower].position[1] < body.keypoints[higher].position[1]) {\n body.keypoints.splice(lower, 1);\n }\n }\n }\n for (const [pair, compare] of coords.relative) { // rearrange body parts according to their relative position\n const left = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const right = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n const leftTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[0]));\n const rightTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[1]));\n if (!body.keypoints[leftTo] || !body.keypoints[rightTo]) continue; // only if we have both compare points\n const distanceLeft = body.keypoints[left] ? [\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[left].position[0]),\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[left].position[0]),\n ] : [0, 0];\n const distanceRight = body.keypoints[right] ? [\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[right].position[0]),\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[right].position[0]),\n ] : [0, 0];\n if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { // should flip keypoints\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n}\n\nexport function jitter(keypoints: BodyKeypoint[]): BodyKeypoint[] {\n for (let i = 0; i < keypoints.length; i++) {\n if (keypoints[i] && cache.keypoints[i]) {\n const diff = [Math.abs(keypoints[i].positionRaw[0] - cache.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache.keypoints[i].positionRaw[1])];\n if (diff[0] < maxJitter && diff[1] < maxJitter) {\n keypoints[i] = cache.keypoints[i]; // below jitter so replace keypoint\n } else {\n cache.keypoints[i] = keypoints[i]; // above jitter so update cache\n }\n } else {\n cache.keypoints[i] = keypoints[i]; // cache for keypoint doesnt exist so create it here\n }\n }\n return keypoints;\n}\n\nexport function padInput(input: Tensor, inputSize: number): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n cache.padding = [\n [0, 0], // dont touch batch\n [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], // height before&after\n [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(input, cache.padding);\n t.resize = tf.image.resizeBilinear(t.pad as Tensor3D, [inputSize, inputSize]);\n const final = tf.cast(t.resize, 'int32');\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nexport function rescaleBody(body: BodyResult, outputSize: [number, number]): BodyResult {\n body.keypoints = body.keypoints.filter((kpt) => kpt?.position); // filter invalid keypoints\n for (const kpt of body.keypoints) {\n kpt.position = [\n kpt.position[0] * (outputSize[0] + cache.padding[2][0] + cache.padding[2][1]) / outputSize[0] - cache.padding[2][0],\n kpt.position[1] * (outputSize[1] + cache.padding[1][0] + cache.padding[1][1]) / outputSize[1] - cache.padding[1][0],\n ];\n kpt.positionRaw = [\n kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1],\n ];\n }\n const rescaledBoxes = box.calc(body.keypoints.map((pt) => pt.position), outputSize);\n body.box = rescaledBoxes.box;\n body.boxRaw = rescaledBoxes.boxRaw;\n return body;\n}\n", "/**\n * MoveNet model implementation\n *\n * Based on: [**MoveNet**](https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport * as fix from './movenetfix';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, BodyAnnotation, Box, Point } from '../result';\nimport type { GraphModel, Tensor } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { fakeOps } from '../tfjs/backend';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n// const boxExpandFact = 1.5; // increase to 150%\n\nconst cache: {\n boxes: Box[], // unused\n bodies: BodyResult[];\n last: number,\n} = {\n boxes: [],\n bodies: [],\n last: 0,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n fakeOps(['size'], config);\n model = await loadModel(config.body.modelPath);\n } else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model?.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize < 64) inputSize = 256;\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', false); // default=false \n return model;\n}\n\nfunction parseSinglePose(res, config, image) {\n const kpt = res[0][0];\n const keypoints: BodyKeypoint[] = [];\n let score = 0;\n for (let id = 0; id < kpt.length; id++) {\n score = kpt[id][2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[id][1], kpt[id][0]];\n keypoints.push({\n score: Math.round(100 * score) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw,\n position: [ // normalized to input image size\n Math.round((image.shape[2] || 0) * positionRaw[0]),\n Math.round((image.shape[1] || 0) * positionRaw[1]),\n ],\n });\n }\n }\n score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const bodies: BodyResult[] = [];\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n const annotations: Record = {};\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations };\n fix.bodyParts(body);\n bodies.push(body);\n return bodies;\n}\n\nfunction parseMultiPose(res, config, image) {\n const bodies: BodyResult[] = [];\n for (let id = 0; id < res[0].length; id++) {\n const kpt = res[0][id];\n const boxScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (boxScore > config.body.minConfidence) {\n const keypoints: BodyKeypoint[] = [];\n for (let i = 0; i < 17; i++) {\n const score = kpt[3 * i + 2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[3 * i + 1], kpt[3 * i + 0]];\n keypoints.push({\n part: coords.kpt[i] as BodyLandmark,\n score: Math.round(100 * score) / 100,\n positionRaw,\n position: [Math.round((image.shape[2] || 0) * positionRaw[0]), Math.round((image.shape[1] || 0) * positionRaw[1])],\n });\n }\n }\n // const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n // movenet-multipose has built-in box details\n const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];\n const boxNorm: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n // const body: BodyResult = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations };\n const body: BodyResult = { id, score: boxScore, box: boxNorm, boxRaw, keypoints: [...keypoints], annotations };\n fix.bodyParts(body);\n bodies.push(body);\n }\n }\n bodies.sort((a, b) => b.score - a.score);\n if (bodies.length > config.body.maxDetected) bodies.length = config.body.maxDetected;\n return bodies;\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return []; // something is wrong with the model\n if (!config.skipAllowed) cache.boxes.length = 0; // allowed to use cache or not\n skipped++; // increment skip frames\n const skipTime = (config.body.skipTime || 0) > (now() - cache.last);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.bodies; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const t: Record = {};\n skipped = 0;\n // run detection on squared input and no cached boxes\n t.input = fix.padInput(input, inputSize);\n t.res = model?.execute(t.input) as Tensor;\n cache.last = now();\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17)\n ? parseSinglePose(res, config, input)\n : parseMultiPose(res, config, input);\n for (const body of cache.bodies) {\n fix.rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n fix.jitter(body.keypoints);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n\n resolve(cache.bodies);\n });\n}\n", "/**\n * NanoDet object detection model implementation\n *\n * Based on: [**NanoDet**](https://github.com/RangiLyu/nanodet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet inputSize = 0;\n\nconst scaleBox = 2.5; // increase box size\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) {\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor[], outputShape: [number, number], config: Config) {\n let id = 0;\n let results: ObjectResult[] = [];\n const size = inputSize;\n for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects\n // find scores, boxes, classes\n const baseSize = strideSize * 13; // 13x13=169, 26x26=676, 52x52=2704\n // find boxes and scores output depending on stride\n const scoresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) === labels.length)) as Tensor2D);\n const scores = await scoresT.array(); // optionally use exponential scores or just as-is\n const featuresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) < labels.length)) as Tensor2D);\n const boxesMaxT = tf.reshape(featuresT, [-1, 4, (featuresT.shape?.[1] || 0) / 4]); // reshape [output] to [4, output / 4] where number is number of different features inside each stride\n const boxIdxT = tf.argMax(boxesMaxT, 2); // what we need is indexes of features with highest scores, not values itself\n const boxIdx = await boxIdxT.array(); // what we need is indexes of features with highest scores, not values itself\n for (let i = 0; i < scoresT.shape[0]; i++) { // total strides (x * y matrix)\n for (let j = 0; j < (scoresT.shape?.[1] || 0); j++) { // one score for each class\n const score = scores[i][j]; // get score for current position\n if (score > (config.object.minConfidence || 0) && j !== 61) {\n const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; // center.x normalized to range 0..1\n const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; // center.y normalized to range 0..1\n const boxOffset = boxIdx[i].map((a: number) => a * (baseSize / strideSize / (size))); // just grab indexes of features with highest scores\n const [x, y] = [\n cx - (scaleBox / strideSize * boxOffset[0]),\n cy - (scaleBox / strideSize * boxOffset[1]),\n ];\n const [w, h] = [\n cx + (scaleBox / strideSize * boxOffset[2]) - x,\n cy + (scaleBox / strideSize * boxOffset[3]) - y,\n ];\n let boxRaw: Box = [x, y, w, h]; // results normalized to range 0..1\n boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))) as Box; // fix out-of-bounds coords\n const box = [ // results normalized to input image pixels\n boxRaw[0] * outputShape[0],\n boxRaw[1] * outputShape[1],\n boxRaw[2] * outputShape[0],\n boxRaw[3] * outputShape[1],\n ];\n const result = {\n id: id++,\n // strideSize,\n score: Math.round(100 * score) / 100,\n class: j + 1,\n label: labels[j].label as ObjectType,\n // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)],\n // centerRaw: [cx, cy],\n box: box.map((a) => Math.trunc(a)) as Box,\n boxRaw,\n };\n results.push(result);\n }\n }\n }\n tf.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]);\n }\n\n // normally nms is run on raw results, but since boxes need to be calculated this way we skip calulcation of\n // unnecessary boxes and run nms only on good candidates (basically it just does IOU analysis as scores are already filtered)\n const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); // switches coordinates from x,y to y,x as expected by tf.nms\n const nmsScores = results.map((a) => a.score);\n let nmsIdx: number[] = [];\n if (nmsBoxes && nmsBoxes.length > 0) {\n const nms = await tf.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config.object.maxDetected || 0, config.object.iouThreshold, config.object.minConfidence);\n nmsIdx = Array.from(await nms.data());\n tf.dispose(nms);\n }\n\n // filter & sort results\n results = results\n .filter((_val, idx) => nmsIdx.includes(idx))\n .sort((a, b) => (b.score - a.score));\n\n return results;\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n if (!env.kernels.includes('mod') || !env.kernels.includes('sparsetodense')) return last;\n return new Promise(async (resolve) => {\n const outputSize = [image.shape[2] || 0, image.shape[1] || 0];\n const resizeT = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n const normT = tf.div(resizeT, constants.tf255);\n const transposeT = tf.transpose(normT, [0, 3, 1, 2]);\n\n let objectT;\n if (config.object.enabled) objectT = model.execute(transposeT);\n lastTime = now();\n\n const obj = await process(objectT as Tensor[], outputSize as [number, number], config);\n last = obj;\n tf.dispose([resizeT, normT, transposeT, ...objectT]);\n resolve(obj);\n });\n}\n", "/**\n * PoseNet body detection model implementation constants\n * See `posenet.ts` for entry point\n */\n\nimport type { Point, BodyResult, BodyAnnotation, BodyLandmark } from '../result';\n\nexport const partNames = [\n 'nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder',\n 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist',\n 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle',\n];\n\nexport const count = partNames.length; // 17 keypoints\n\nexport const partIds = partNames.reduce((result, jointName, i) => {\n result[jointName] = i;\n return result;\n}, {});\n\nconst connectedPartNames = [\n ['leftHip', 'leftShoulder'], ['leftElbow', 'leftShoulder'],\n ['leftElbow', 'leftWrist'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['rightHip', 'rightShoulder'],\n ['rightElbow', 'rightShoulder'], ['rightElbow', 'rightWrist'],\n ['rightHip', 'rightKnee'], ['rightKnee', 'rightAnkle'],\n ['leftShoulder', 'rightShoulder'], ['leftHip', 'rightHip'],\n];\nexport const connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => ([partIds[jointNameA], partIds[jointNameB]]));\n\nexport const poseChain = [\n ['nose', 'leftEye'], ['leftEye', 'leftEar'], ['nose', 'rightEye'],\n ['rightEye', 'rightEar'], ['nose', 'leftShoulder'],\n ['leftShoulder', 'leftElbow'], ['leftElbow', 'leftWrist'],\n ['leftShoulder', 'leftHip'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['nose', 'rightShoulder'],\n ['rightShoulder', 'rightElbow'], ['rightElbow', 'rightWrist'],\n ['rightShoulder', 'rightHip'], ['rightHip', 'rightKnee'],\n ['rightKnee', 'rightAnkle'],\n];\n\nexport function eitherPointDoesntMeetConfidence(a: number, b: number, minConfidence: number) {\n return (a < minConfidence || b < minConfidence);\n}\n\nexport function getAdjacentKeyPoints(keypoints, minConfidence: number) {\n return connectedPartIndices.reduce((result, [leftJoint, rightJoint]) => {\n if (eitherPointDoesntMeetConfidence(keypoints[leftJoint].score, keypoints[rightJoint].score, minConfidence)) {\n return result;\n }\n result.push([keypoints[leftJoint], keypoints[rightJoint]]);\n return result;\n }, []);\n}\n\nexport function getBoundingBox(keypoints): [number, number, number, number] {\n const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({\n maxX: Math.max(maxX, x),\n maxY: Math.max(maxY, y),\n minX: Math.min(minX, x),\n minY: Math.min(minY, y),\n }), {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY];\n}\n\nexport function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]): BodyResult[] {\n const scaleY = height / inputResolutionHeight;\n const scaleX = width / inputResolutionWidth;\n const scalePose = (pose, i): BodyResult => ({\n id: i,\n score: pose.score,\n boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight],\n box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)],\n keypoints: pose.keypoints.map(({ score, part, position }) => ({\n score: score as number,\n part: part as BodyLandmark,\n position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)] as Point,\n positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] as Point,\n })),\n annotations: {} as Record,\n });\n const scaledPoses = poses.map((pose, i) => scalePose(pose, i));\n return scaledPoses;\n}\n\n// algorithm based on Coursera Lecture from Algorithms, Part 1: https://www.coursera.org/learn/algorithms-part1/lecture/ZjoSM/heapsort\nexport class MaxHeap {\n priorityQueue: unknown[]; // don't touch\n numberOfElements: number;\n getElementValue: unknown; // function call\n\n constructor(maxSize, getElementValue) {\n this.priorityQueue = new Array(maxSize);\n this.numberOfElements = -1;\n this.getElementValue = getElementValue;\n }\n\n enqueue(x) {\n this.priorityQueue[++this.numberOfElements] = x;\n this.swim(this.numberOfElements);\n }\n\n dequeue() {\n const max = this.priorityQueue[0];\n this.exchange(0, this.numberOfElements--);\n this.sink(0);\n this.priorityQueue[this.numberOfElements + 1] = null;\n return max;\n }\n\n empty() { return this.numberOfElements === -1; }\n\n size() { return this.numberOfElements + 1; }\n\n all() { return this.priorityQueue.slice(0, this.numberOfElements + 1); }\n\n max() { return this.priorityQueue[0]; }\n\n swim(k) {\n while (k > 0 && this.less(Math.floor(k / 2), k)) {\n this.exchange(k, Math.floor(k / 2));\n k = Math.floor(k / 2);\n }\n }\n\n sink(k) {\n while (2 * k <= this.numberOfElements) {\n let j = 2 * k;\n if (j < this.numberOfElements && this.less(j, j + 1)) j++;\n if (!this.less(k, j)) break;\n this.exchange(k, j);\n k = j;\n }\n }\n\n getValueAt(i) {\n // @ts-ignore getter is of unknown type\n return this.getElementValue(this.priorityQueue[i]);\n }\n\n less(i, j) {\n return this.getValueAt(i) < this.getValueAt(j);\n }\n\n exchange(i, j) {\n const t = this.priorityQueue[i];\n this.priorityQueue[i] = this.priorityQueue[j];\n this.priorityQueue[j] = t;\n }\n}\n\nexport function getOffsetPoint(y, x, keypoint: number, offsets) {\n return {\n y: offsets.get(y, x, keypoint),\n x: offsets.get(y, x, keypoint + count),\n };\n}\n\nexport function getImageCoords(part, outputStride: number, offsets) {\n const { heatmapY, heatmapX, id: keypoint } = part;\n const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets);\n return {\n x: part.heatmapX * outputStride + x,\n y: part.heatmapY * outputStride + y,\n };\n}\n\nexport function fillArray(element, size) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = element;\n }\n return result;\n}\n\nexport function clamp(a, min, max) {\n if (a < min) return min;\n if (a > max) return max;\n return a;\n}\n\nexport function squaredDistance(y1, x1, y2, x2) {\n const dy = y2 - y1;\n const dx = x2 - x1;\n return dy * dy + dx * dx;\n}\n\nexport function addVectors(a: { x: number, y: number }, b: { x: number, y: number }) {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\nexport function clampVector(a, min, max) {\n return { y: clamp(a.y, min, max), x: clamp(a.x, min, max) };\n}\n", "/**\n * PoseNet body detection model implementation\n *\n * Based on: [**PoseNet**](https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyResult, BodyLandmark, Box } from '../result';\nimport type { Tensor, GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as utils from './posenetutils';\n\nlet model: GraphModel;\nconst poseNetOutputs = ['MobilenetV1/offset_2/BiasAdd'/* offsets */, 'MobilenetV1/heatmap_2/BiasAdd'/* heatmapScores */, 'MobilenetV1/displacement_fwd_2/BiasAdd'/* displacementFwd */, 'MobilenetV1/displacement_bwd_2/BiasAdd'/* displacementBwd */];\nconst localMaximumRadius = 1;\nconst outputStride = 16;\nconst squaredNmsRadius = 50 ** 2;\n\nfunction traverse(edgeId: number, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) {\n const getDisplacement = (point) => ({\n y: displacements.get(point.y, point.x, edgeId),\n x: displacements.get(point.y, point.x, (displacements.shape[2] / 2) + edgeId),\n });\n const getStridedIndexNearPoint = (point, height, width) => ({\n y: utils.clamp(Math.round(point.y / outputStride), 0, height - 1),\n x: utils.clamp(Math.round(point.x / outputStride), 0, width - 1),\n });\n\n const [height, width] = scores.shape;\n // Nearest neighbor interpolation for the source->target displacements.\n const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width);\n const displacement = getDisplacement(sourceKeypointIndices);\n const displacedPoint = utils.addVectors(sourceKeypoint.position, displacement);\n let targetKeypoint = displacedPoint;\n for (let i = 0; i < offsetRefineStep; i++) {\n const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const offsetPoint = utils.getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets);\n targetKeypoint = utils.addVectors(\n { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride },\n { x: offsetPoint.x, y: offsetPoint.y },\n );\n }\n const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId);\n return { position: targetKeypoint, part: utils.partNames[targetId], score };\n}\n\nexport function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) {\n const tuples = utils.poseChain.map(([parentJoinName, childJoinName]) => ([utils.partIds[parentJoinName], utils.partIds[childJoinName]]));\n const edgesFwd = tuples.map(([, childJointId]) => childJointId);\n const edgesBwd = tuples.map(([parentJointId]) => parentJointId);\n const numParts = scores.shape[2]; // [21,21,17]\n const numEdges = edgesFwd.length;\n const keypoints = new Array(numParts);\n // Start a new detection instance at the position of the root.\n const rootPoint = utils.getImageCoords(root.part, outputStride, offsets);\n keypoints[root.part.id] = {\n score: root.score,\n part: utils.partNames[root.part.id] as BodyLandmark,\n position: rootPoint,\n };\n // Decode the part positions upwards in the tree, following the backward displacements.\n for (let edge = numEdges - 1; edge >= 0; --edge) {\n const sourceId = edgesFwd[edge];\n const targetId = edgesBwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd);\n }\n }\n // Decode the part positions downwards in the tree, following the forward displacements.\n for (let edge = 0; edge < numEdges; ++edge) {\n const sourceId = edgesBwd[edge];\n const targetId = edgesFwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd);\n }\n }\n return keypoints;\n}\n\nfunction scoreIsMaximumInLocalWindow(keypointId, score: number, heatmapY: number, heatmapX: number, scores) {\n const [height, width]: [number, number] = scores.shape;\n let localMaximum = true;\n const yStart = Math.max(heatmapY - localMaximumRadius, 0);\n const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height);\n for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) {\n const xStart = Math.max(heatmapX - localMaximumRadius, 0);\n const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width);\n for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) {\n if (scores.get(yCurrent, xCurrent, keypointId) > score) {\n localMaximum = false;\n break;\n }\n }\n if (!localMaximum) break;\n }\n return localMaximum;\n}\n\nexport function buildPartWithScoreQueue(minConfidence, scores) {\n const [height, width, numKeypoints] = scores.shape;\n const queue = new utils.MaxHeap(height * width * numKeypoints, ({ score }) => score);\n for (let heatmapY = 0; heatmapY < height; ++heatmapY) {\n for (let heatmapX = 0; heatmapX < width; ++heatmapX) {\n for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) {\n const score = scores.get(heatmapY, heatmapX, keypointId);\n // Only consider parts with score greater or equal to threshold as root candidates.\n if (score < minConfidence) continue;\n // Only consider keypoints whose score is maximum in a local window.\n if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } });\n }\n }\n }\n return queue;\n}\n\nfunction withinRadius(poses, { x, y }, keypointId) {\n return poses.some(({ keypoints }) => {\n const correspondingKeypoint = keypoints[keypointId]?.position;\n if (!correspondingKeypoint) return false;\n return utils.squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius;\n });\n}\n\nfunction getInstanceScore(existingPoses, keypoints) {\n const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => {\n if (!withinRadius(existingPoses, position, keypointId)) result += score;\n return result;\n }, 0.0);\n return notOverlappedKeypointScores / keypoints.length;\n}\n\nexport function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence) {\n const poses: { keypoints, box: Box, score: number }[] = [];\n const queue = buildPartWithScoreQueue(minConfidence, scores);\n // Generate at most maxDetected object instances per image in decreasing root part score order.\n while (poses.length < maxDetected && !queue.empty()) {\n // The top element in the queue is the next root candidate.\n const root = queue.dequeue();\n // Part-based non-maximum suppression: We reject a root candidate if it is within a disk of `nmsRadius` pixels from the corresponding part of a previously detected instance.\n // @ts-ignore this one is tree walk\n const rootImageCoords = utils.getImageCoords(root.part, outputStride, offsets);\n // @ts-ignore this one is tree walk\n if (withinRadius(poses, rootImageCoords, root.part.id)) continue;\n // Else start a new detection instance at the position of the root.\n let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd);\n keypoints = keypoints.filter((a) => a.score > minConfidence);\n const score = getInstanceScore(poses, keypoints);\n const box = utils.getBoundingBox(keypoints);\n if (score > minConfidence) poses.push({ keypoints, box, score: Math.round(100 * score) / 100 });\n }\n return poses;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n /** posenet is mostly obsolete\n * caching is not implemented\n */\n if (!model?.['executor']) return [];\n const res = tf.tidy(() => {\n if (!model.inputs[0].shape) return [];\n const resized = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const normalized = tf.sub(tf.div(tf.cast(resized, 'float32'), 127.5), 1.0);\n const results: Tensor[] = model.execute(normalized, poseNetOutputs) as Tensor[];\n const results3d = results.map((y) => tf.squeeze(y, [0]));\n results3d[1] = tf.sigmoid(results3d[1]); // apply sigmoid on scores\n return results3d;\n });\n\n const buffers = await Promise.all(res.map((tensor: Tensor) => tensor.buffer()));\n for (const t of res) tf.dispose(t);\n\n const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config.body.maxDetected, config.body.minConfidence);\n if (!model.inputs[0].shape) return [];\n const scaled = utils.scalePoses(decoded, [input.shape[1], input.shape[2]], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n return scaled;\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**Robust Video Matting**](https://github.com/PeterL1n/RobustVideoMatting)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\n// internal state varaibles\nconst outputNodes = ['fgr', 'pha', 'r1o', 'r2o', 'r3o', 'r4o'];\nconst t: Record = {}; // contains input tensor and recurrent states\nlet ratio = 0;\n\nfunction init(config: Config) {\n tf.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]);\n t.r1i = tf.tensor(0.0);\n t.r2i = tf.tensor(0.0);\n t.r3i = tf.tensor(0.0);\n t.r4i = tf.tensor(0.0);\n ratio = config.segmentation.ratio || 0.5;\n t.downsample_ratio = tf.tensor(ratio); // initialize downsample ratio\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n init(config);\n return model;\n}\n\nconst normalize = (r: Tensor): Tensor => tf.tidy(() => {\n const squeeze = tf.squeeze(r, ([0]));\n const mul = tf.mul(squeeze, constants.tf255);\n const cast = tf.cast(mul, 'int32');\n return cast;\n});\n\nfunction getRGBA(fgr: Tensor | null, pha: Tensor | null): Tensor { // gets rgba // either fgr or pha must be present\n const rgb = fgr\n ? normalize(fgr) // normalize and use value\n : tf.fill([pha!.shape[1] || 0, pha!.shape[2] || 0, 3], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const a = pha\n ? normalize(pha) // normalize and use value\n : tf.fill([fgr!.shape[1] || 0, fgr!.shape[2] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const rgba = tf.concat([rgb, a], -1);\n tf.dispose([rgb, a]);\n return rgba;\n}\n\nfunction getState(state: Tensor): Tensor { // gets internal recurrent states\n return tf.tidy(() => {\n const r: Record = {};\n r.unstack = tf.unstack(state, -1);\n r.concat = tf.concat(r.unstack, 1);\n r.split = tf.split(r.concat, 4, 1);\n r.stack = tf.concat(r.split, 2);\n r.squeeze = tf.squeeze(r.stack, [0]);\n r.expand = tf.expandDims(r.squeeze, -1);\n r.add = tf.add(r.expand, 1);\n r.mul = tf.mul(r.add, 127.5);\n r.cast = tf.cast(r.mul, 'int32');\n r.tile = tf.tile(r.cast, [1, 1, 3]);\n r.alpha = tf.fill([(r.tile as Tensor).shape[0] || 0, (r.tile as Tensor).shape[1] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\n return tf.concat([r.tile, r.alpha], -1);\n });\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor']) return null;\n // const expand = tf.expandDims(input, 0);\n t.src = tf.div(input, 255);\n if (ratio !== config.segmentation.ratio) init(config); // reinitialize recurrent states if requested downsample ratio changed\n const [fgr, pha, r1o, r2o, r3o, r4o] = await model.executeAsync(t, outputNodes) as Tensor[]; // execute model\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n rgba = getRGBA(fgr, pha);\n break;\n case 'alpha':\n rgba = getRGBA(null, pha);\n break;\n case 'foreground':\n rgba = getRGBA(fgr, null);\n break;\n case 'state':\n rgba = getState(r1o); // can view any internal recurrent state r10, r20, r3o, r4o\n break;\n default:\n rgba = tf.tensor(0);\n }\n tf.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]);\n [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; // update recurrent states\n return rgba;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Selfie**](https://drive.google.com/file/d/1dCfozqknMa068vVsO2j_1FgZkW_e3VWv/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]); // meet.shape:[1,256,256,1], selfie.shape:[1,144,256,2]\n t.alpha = tf.image.resizeBilinear(t.squeeze as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]); // model selfie has a single channel that we can use directly\n t.mul = tf.mul(t.alpha, constants.tf255);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.mul], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.mul, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/**\n * Analyze detection Results and sort&combine them into per-person view\n */\n\nimport type { FaceResult, BodyResult, HandResult, GestureResult, PersonResult, Box } from '../result';\n\nexport function join(faces: FaceResult[], bodies: BodyResult[], hands: HandResult[], gestures: GestureResult[], shape: number[] | undefined): PersonResult[] {\n let id = 0;\n const persons: PersonResult[] = [];\n for (const face of faces) { // person is defined primarily by face and then we append other objects as found\n const person: PersonResult = { id: id++, face, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] };\n for (const body of bodies) {\n if (face.box[0] > body.box[0] // x within body\n && face.box[0] < body.box[0] + body.box[2]\n && face.box[1] + face.box[3] > body.box[1] // y within body\n && face.box[1] + face.box[3] < body.box[1] + body.box[3]) {\n person.body = body;\n }\n }\n if (person.body) { // only try to join hands if body is found\n for (const hand of hands) {\n if (hand.box[0] + hand.box[2] > person.body.box[0] // x within body for left hand\n && hand.box[0] + hand.box[2] < person.body.box[0] + person.body.box[2]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for left hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.left = hand;\n }\n if (hand.box[0] < person.body.box[0] + person.body.box[2] // x within body for right hand\n && hand.box[0] > person.body.box[0]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for right hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.right = hand;\n }\n }\n }\n for (const gesture of gestures) { // append all gestures according to ids\n if (gesture['face'] !== undefined && gesture['face'] === face.id) person.gestures.push(gesture);\n else if (gesture['iris'] !== undefined && gesture['iris'] === face.id) person.gestures.push(gesture);\n else if (gesture['body'] !== undefined && gesture['body'] === person.body?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.left?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.right?.id) person.gestures.push(gesture);\n }\n\n // create new overarching box from all boxes belonging to person\n const x: number[] = [];\n const y: number[] = [];\n const extractXY = (box: Box | undefined) => { // extract all [x, y] coordinates from boxes [x, y, width, height]\n if (box && box.length === 4) {\n x.push(box[0], box[0] + box[2]);\n y.push(box[1], box[1] + box[3]);\n }\n };\n extractXY(person.face.box);\n extractXY(person.body?.box);\n extractXY(person.hands.left?.box);\n extractXY(person.hands.right?.box);\n const minX = Math.min(...x);\n const minY = Math.min(...y);\n person.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; // create new overarching box\n\n // shape is known so we calculate boxRaw as well\n if (shape?.[1] && shape?.[2]) person.boxRaw = [person.box[0] / shape[2], person.box[1] / shape[1], person.box[2] / shape[2], person.box[3] / shape[1]];\n\n persons.push(person);\n }\n return persons;\n}\n", "/**\n * Embedded sample images used during warmup in dataURL format\n */\n\n// data:image/jpeg;base64,\nexport const face = `\n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`;\n\n// data:image/jpeg;base64,\nexport const body = `\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N\nmtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm\n9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N\nIpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W\nMYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2\n+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql\no+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37\nO99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE\nTE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1\nL7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4\nizsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt\n1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb\nV5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum\nL37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12\n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\nAOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM\nd8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5\n6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP\nbFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu\nLJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy\nwt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX\n0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK\n3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn\nKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0\nvobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t\nzya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps\nuOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi\nFdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA\n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\nNO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h\n2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te\npSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7\ncvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7\nmZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA\nAAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA\nhGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J\nqx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI\nXRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy\nRHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX\nqNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX\nkaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P\nya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC\nExKJgBnEpiyvdlEgsizKLKollFgWxLKJVRLKJBbEp3VxLKJBnuMWQJEbpBIAAAJAAAABIAAAAAAA\nlAJAAAAAAAAAAAAAASAAAAAAAAAAAAAJAAAABAJABAlAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA\nAAABAJQAAAAgAABAAI2EoBGyJhkgGPKxmqxAKpownHC+YRMdN5BrTj67R3bOn01o7p01Iv71u89o\n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\n2Q==`;\n", "/**\n * Warmup algorithm that uses embedded images to exercise loaded models for faster future inference\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep } from './util/util';\nimport * as sample from './sample';\nimport * as image from './image/image';\nimport * as backend from './tfjs/backend';\nimport { env } from './util/env';\nimport { empty, Result } from './result';\nimport type { Config } from './config';\nimport type { Human } from './human';\nimport type { Tensor, DataType } from './tfjs/types';\n\nasync function warmupBitmap(instance: Human): Promise {\n const b64toBlob = (base64: string, type = 'application/octet-stream') => fetch(`data:${type};base64,${base64}`).then((res) => res.blob());\n let blob: Blob | null;\n let res: Result | undefined;\n switch (instance.config.warmup) {\n case 'face': blob = await b64toBlob(sample.face); break;\n case 'body':\n case 'full': blob = await b64toBlob(sample.body); break;\n default: blob = null;\n }\n if (blob) {\n const bitmap = await createImageBitmap(blob);\n res = await instance.detect(bitmap, instance.config);\n bitmap.close();\n }\n return res;\n}\n\nasync function warmupCanvas(instance: Human): Promise {\n return new Promise((resolve) => {\n let src: string;\n // let size = 0;\n switch (instance.config.warmup) {\n case 'face':\n // size = 256;\n src = 'data:image/jpeg;base64,' + sample.face;\n break;\n case 'full':\n case 'body':\n // size = 1200;\n src = 'data:image/jpeg;base64,' + sample.body;\n break;\n default:\n src = '';\n }\n // src = encodeURI('../assets/human-sample-upper.jpg');\n let img: HTMLImageElement;\n if (typeof Image !== 'undefined') img = new Image();\n // @ts-ignore env.image is an external monkey-patch\n else if (env.Image) img = new env.Image();\n else {\n resolve(undefined);\n return;\n }\n img.onload = async () => {\n const canvas = image.canvas(img.naturalWidth, img.naturalHeight);\n if (!canvas) {\n log('Warmup: Canvas not found');\n resolve(undefined);\n } else {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (ctx) ctx.drawImage(img, 0, 0);\n // const data = ctx?.getImageData(0, 0, canvas.height, canvas.width);\n const tensor = await instance.image(canvas, true);\n const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : undefined;\n resolve(res);\n }\n };\n if (src) img.src = src;\n else resolve(undefined);\n });\n}\n\nasync function warmupNode(instance: Human): Promise {\n const atob = (str: string) => Buffer.from(str, 'base64');\n let img;\n if (instance.config.warmup === 'face') img = atob(sample.face);\n else img = atob(sample.body);\n let res: Result;\n if (('node' in tf) && (tf.getBackend() === 'tensorflow')) {\n // @ts-ignore\n const data: Tensor = tf['node'].decodeJpeg(img); // eslint-disable-line import/namespace\n const expanded: Tensor = tf.expandDims(data, 0);\n instance.tf.dispose(data);\n // log('Input:', expanded);\n res = await instance.detect(expanded, instance.config);\n instance.tf.dispose(expanded);\n } else {\n if (instance.config.debug) log('Warmup tfjs-node not loaded');\n /*\n const input = await canvasJS.loadImage(img);\n const canvas = canvasJS.createCanvas(input.width, input.height);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, input.width, input.height);\n res = await instance.detect(input, instance.config);\n */\n }\n // @ts-ignore\n return res;\n}\n\nasync function runInference(instance: Human) {\n let res: Result | undefined;\n if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);\n else if ((typeof Image !== 'undefined') || (env.Canvas !== undefined)) res = await warmupCanvas(instance);\n else res = await warmupNode(instance);\n return res;\n}\n\n/** Runs pre-compile on all loaded models */\nexport async function runCompile(instance: Human) {\n // @ts-ignore private property\n if (!tf.env().flagRegistry.ENGINE_COMPILE_ONLY) return; // tfjs does not support compile-only inference\n const backendType = tf.getBackend();\n const webGLBackend = tf.backend();\n if ((backendType !== 'webgl' && backendType !== 'humangl') || !webGLBackend?.['checkCompileCompletion']) {\n // log('compile pass: skip');\n return;\n }\n tf.env().set('ENGINE_COMPILE_ONLY', true);\n const numTensorsStart = tf.engine().state.numTensors;\n const compiledModels: string[] = [];\n for (const [modelName, model] of Object.entries(instance.models.models)) {\n if (!model) continue;\n const shape = (model?.modelSignature && model?.inputs?.[0]?.shape) ? [...model.inputs[0].shape] : [1, 64, 64, 3];\n const dtype: DataType = (model?.modelSignature && model?.inputs?.[0]?.dtype) ? model.inputs[0].dtype : 'float32';\n for (let dim = 0; dim < shape.length; dim++) {\n if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; // override batch number and any dynamic dimensions\n }\n const tensor = tf.zeros(shape, dtype);\n try {\n const res = model.execute(tensor);\n compiledModels.push(modelName);\n if (Array.isArray(res)) res.forEach((t) => tf.dispose(t));\n else tf.dispose(res);\n } catch {\n if (instance.config.debug) log('compile fail model:', modelName);\n }\n tf.dispose(tensor);\n }\n const kernels = await webGLBackend['checkCompileCompletionAsync']();\n webGLBackend['getUniformLocations']();\n if (instance.config.debug) log('compile pass:', { models: compiledModels, kernels: kernels.length });\n tf.env().set('ENGINE_COMPILE_ONLY', false);\n const numTensorsEnd = tf.engine().state.numTensors;\n if ((numTensorsEnd - numTensorsStart) > 0) log('tensor leak:', numTensorsEnd - numTensorsStart);\n}\n\n/** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used in browser environments for `webgl` and `humangl` backends\n * @param userConfig?: Config\n*/\nexport async function warmup(instance: Human, userConfig?: Partial): Promise {\n await backend.check(instance, false);\n const t0 = now();\n instance.state = 'warmup';\n if (userConfig) instance.config = mergeDeep(instance.config, userConfig) as Config;\n if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === 'none') {\n return empty();\n }\n return new Promise(async (resolve) => {\n await instance.models.load();\n await runCompile(instance);\n const res = await runInference(instance);\n const t1 = now();\n if (instance.config.debug) log('warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');\n instance.emit('warmup');\n resolve(res);\n });\n}\n", "/**\n * Human main module\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\n// module imports\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep, validate } from './util/util';\nimport { defaults } from './config';\nimport { env, Env } from './util/env';\nimport { WebCam } from './util/webcam';\nimport { setModelLoadOptions } from './tfjs/load';\nimport * as app from '../package.json';\nimport * as backend from './tfjs/backend';\nimport * as draw from './draw/draw';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as face from './face/face';\nimport * as facemesh from './face/facemesh';\nimport * as gesture from './gesture/gesture';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as image from './image/image';\nimport * as interpolate from './util/interpolate';\nimport * as meet from './segmentation/meet';\nimport * as match from './face/match';\nimport * as models from './models';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as persons from './util/persons';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as warmups from './warmup';\n\n// type definitions\nimport { Input, Config, Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, AnyCanvas, empty } from './exports';\nimport type { Tensor, Tensor4D } from './tfjs/types';\n// type exports\nexport * from './exports';\n\n/** **Human** library main class\n *\n * All methods and properties are available only as members of Human class\n *\n * - Configuration object definition: {@link Config}\n * - Results object definition: {@link Result}\n * - Possible inputs: {@link Input}\n *\n * @param userConfig - {@link Config}\n * @returns instance of {@link Human}\n */\nexport class Human {\n /** Current version of Human library in *semver* format */\n version: string;\n\n /** Current configuration\n * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\n config: Config;\n\n /** Last known result of detect run\n * - Can be accessed anytime after initial detection\n */\n result: Result;\n\n /** Current state of Human library\n * - Can be polled to determine operations that are currently executed\n * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'\n */\n state: string;\n\n /** currenty processed image tensor and canvas */\n process: { tensor: Tensor | null, canvas: AnyCanvas | null };\n\n /** Instance of TensorFlow/JS used by Human\n * - Can be embedded or externally provided\n * [TFJS API](https://js.tensorflow.org/api/latest/)\n */\n tf;\n\n /** Object containing environment information used for diagnostics */\n env: Env = env;\n\n /** Draw helper classes that can draw detected objects on canvas using specified draw\n * - canvas: draws input to canvas\n * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions}\n * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas\n */\n // draw: { canvas: typeof draw.canvas, face: typeof draw.face, body: typeof draw.body, hand: typeof draw.hand, gesture: typeof draw.gesture, object: typeof draw.object, person: typeof draw.person, all: typeof draw.all, options: DrawOptions };\n draw: typeof draw = draw;\n\n /** Face Matching\n * - similarity: compare two face descriptors and return similarity index\n * - distance: compare two face descriptors and return raw calculated differences\n * - find: compare face descriptor to array of face descriptors and return best match\n */\n match: typeof match = match;\n\n /** Currently loaded models\n * @internal\n * {@link models#Models}\n */\n models: models.Models;\n\n /** Container for events dispatched by Human\n * Possible events:\n * - `create`: triggered when Human object is instantiated\n * - `load`: triggered when models are loaded (explicitly or on-demand)\n * - `image`: triggered when input image is processed\n * - `result`: triggered when detection is complete\n * - `warmup`: triggered when warmup is complete\n * - `error`: triggered on some errors\n */\n events: EventTarget | undefined;\n /** Reference face triangualtion array of 468 points, used for triangle references between points */\n faceTriangulation: number[];\n /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */\n faceUVMap: [number, number][];\n /** Performance object that contains values for all recently performed operations */\n performance: Record; // perf members are dynamically defined as needed\n #numTensors: number;\n #analyzeMemoryLeaks: boolean;\n #checkSanity: boolean;\n // definition end\n\n /** Constructor for **Human** library that is futher used for all operations\n * @param userConfig - user configuration object {@link Config}\n */\n constructor(userConfig?: Partial) {\n /*\n defaults.wasmPath = tf.version['tfjs-core'].includes('-') // custom build or official build\n ? 'https://vladmandic.github.io/tfjs/dist/'\n : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`;\n */\n const tfVersion = (tf.version.tfjs || tf.version_core).replace(/-(.*)/, '');\n defaults.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`;\n defaults.modelBasePath = env.browser ? '../models/' : 'file://models/';\n this.version = app.version; // expose version property on instance of class\n Object.defineProperty(this, 'version', { value: app.version }); // expose version property directly on class itself\n this.config = JSON.parse(JSON.stringify(defaults));\n Object.seal(this.config);\n this.config.cacheModels = typeof indexedDB !== 'undefined';\n if (userConfig) this.config = mergeDeep(this.config, userConfig);\n setModelLoadOptions(this.config);\n this.tf = tf;\n this.state = 'idle';\n this.#numTensors = 0;\n this.#analyzeMemoryLeaks = false;\n this.#checkSanity = false;\n this.performance = {};\n this.events = (typeof EventTarget !== 'undefined') ? new EventTarget() : undefined;\n // object that contains all initialized models\n this.models = new models.Models(this);\n // reexport draw methods\n draw.init();\n this.result = empty();\n // export access to image processing\n this.process = { tensor: null, canvas: null };\n // export raw access to underlying models\n this.faceTriangulation = facemesh.triangulation;\n this.faceUVMap = facemesh.uvmap;\n // init model validation\n models.validateModel(this, null, '');\n // include platform info\n this.emit('create');\n if (this.config.debug || this.env.browser) log(`version: ${this.version}`);\n if (this.config.debug) log(`tfjs version: ${this.tf.version['tfjs-core']}`);\n const envTemp = JSON.parse(JSON.stringify(this.env));\n delete envTemp.kernels;\n delete envTemp.initial;\n delete envTemp.perfadd;\n if (this.config.debug) log('environment:', envTemp);\n }\n\n /** internal function to measure tensor leaks */\n analyze = (...msg: string[]) => {\n if (!this.#analyzeMemoryLeaks) return;\n const currentTensors = this.tf.engine().state.numTensors;\n const previousTensors = this.#numTensors;\n this.#numTensors = currentTensors;\n const leaked = currentTensors - previousTensors;\n if (leaked !== 0) log(...msg, leaked);\n };\n\n /** internal function for quick sanity check on inputs @hidden */\n #sanity = (input: Input): null | string => {\n if (!this.#checkSanity) return null;\n if (!input) return 'input is not defined';\n if (this.env.node && !(input instanceof tf.Tensor)) return 'input must be a tensor';\n try {\n this.tf.getBackend();\n } catch {\n return 'backend not loaded';\n }\n return null;\n };\n\n /** Reset configuration to default values */\n reset(): void {\n const currentBackend = this.config.backend; // save backend;\n this.config = JSON.parse(JSON.stringify(defaults));\n this.config.backend = currentBackend;\n image.reset();\n env.initial = true;\n }\n\n /** Validate current configuration schema */\n validate(userConfig?: Partial) {\n const msgs = validate(defaults, userConfig || this.config);\n if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig) as Config;\n return msgs;\n }\n\n /** Utility wrapper for performance.now() */\n now(): number { // eslint-disable-line class-methods-use-this\n return now();\n }\n\n /** Process input as return canvas and tensor\n *\n * @param input - any input {@link Input}\n * @param getTensor - should image processing also return tensor or just canvas\n * Returns object with `tensor` and `canvas`\n */\n image(input: Input, getTensor: boolean = false) {\n return image.process(input, this.config, getTensor);\n }\n\n /** Segmentation method takes any input and returns RGBA tensor\n * Note: Segmentation is not triggered as part of detect process\n *\n * @param input - {@link Input}\n * Returns tensor which contains image data in RGBA format\n */\n async segmentation(input: Input, userConfig?: Partial): Promise {\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (!this.config.segmentation.enabled) return null;\n const processed = await image.process(input, this.config);\n if (!processed.tensor) return null;\n let tensor: Tensor | null = null;\n if (this.config.segmentation.modelPath?.includes('rvm')) tensor = await rvm.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('meet')) tensor = await meet.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('selfie')) tensor = await selfie.predict(processed.tensor, this.config);\n tf.dispose(processed.tensor);\n return tensor;\n }\n\n /** Compare two input tensors for pixel similarity\n * - use `human.image` to process any valid input and get a tensor that can be used for compare\n * - when passing manually generated tensors:\n * - both input tensors must be in format [1, height, width, 3]\n * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor\n * - return value is pixel similarity score normalized by input resolution and rgb channels\n */\n compare(firstImageTensor: Tensor, secondImageTensor: Tensor): Promise {\n return image.compare(this.config, firstImageTensor, secondImageTensor);\n }\n\n /** Explicit backend initialization\n * - Normally done implicitly during initial load phase\n * - Call to explictly register and initialize TFJS backend without any other operations\n * - Use when changing backend during runtime\n */\n async init(): Promise {\n await backend.check(this, true);\n await this.tf.ready();\n image.reset();\n }\n\n /** WebCam helper methods\n *\n */\n public webcam = new WebCam();\n\n /** Load method preloads all configured models on-demand\n * - Not explicitly required as any required model is load implicitly on it's first run\n *\n * @param userConfig - {@link Config}\n */\n async load(userConfig?: Partial): Promise {\n this.state = 'load';\n const timeStamp = now();\n const count = Object.values(this.models.models).filter((model) => model).length;\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (this.env.initial) { // print version info on first run and check for correct backend setup\n if (!await backend.check(this, false)) log('error: backend check failed');\n await tf.ready();\n if (this.env.browser) {\n if (this.config.debug) log('configuration:', this.config);\n if (this.config.debug) log('tf flags:', this.tf.ENV.flags);\n }\n }\n\n await this.models.load(this); // actually loads models\n if (this.env.initial && this.config.debug) log('tf engine state:', this.tf.engine().state.numBytes, 'bytes', this.tf.engine().state.numTensors, 'tensors'); // print memory stats on first run\n this.env.initial = false;\n\n const loaded = Object.values(this.models.models).filter((model) => model).length;\n if (loaded !== count) { // number of loaded models changed\n this.models.validate(); // validate kernel ops used by model against current backend\n this.emit('load');\n }\n\n const current = Math.trunc(now() - timeStamp);\n if (current > (this.performance.loadModels || 0)) this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current;\n }\n\n /** emit event */\n emit = (event: string) => {\n if (this.events?.dispatchEvent) this.events.dispatchEvent(new Event(event));\n };\n\n /** Runs interpolation using last known result and returns smoothened result\n * Interpolation is based on time since last known result so can be called independently\n *\n * @param result - {@link Result} optional use specific result set to run interpolation on\n * @returns result - {@link Result}\n */\n next(result: Result = this.result): Result {\n return interpolate.calc(result, this.config);\n }\n\n /** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used for `webgl` and `humangl` backends\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async warmup(userConfig?: Partial) {\n const t0 = now();\n const res = await warmups.warmup(this, userConfig);\n const t1 = now();\n this.performance.warmup = Math.trunc(t1 - t0);\n return res;\n }\n\n /** Run detect with tensorflow profiling\n * - result object will contain total exeuction time information for top-20 kernels\n * - actual detection object can be accessed via `human.result`\n */\n async profile(input: Input, userConfig?: Partial): Promise<{ kernel: string, time: number, perc: number }[]> {\n // @ts-ignore profile wraps method return values\n const profile = await this.tf.profile(() => this.detect(input, userConfig));\n const kernels: Record = {};\n let total = 0;\n for (const kernel of profile.kernels) { // sum kernel time values per kernel\n const ms = Number(kernel.kernelTimeMs) || 0;\n if (kernels[kernel.name]) kernels[kernel.name] += ms;\n else kernels[kernel.name] = ms;\n total += ms;\n }\n const kernelArr: { kernel: string, time: number, perc: number }[] = [];\n Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1] as unknown as number, perc: 0 })); // convert to array\n for (const kernel of kernelArr) {\n kernel.perc = Math.round(1000 * kernel.time / total) / 1000;\n kernel.time = Math.round(1000 * kernel.time) / 1000;\n }\n kernelArr.sort((a, b) => b.time - a.time); // sort\n kernelArr.length = 20; // crop\n return kernelArr;\n }\n\n /** Main detection method\n * - Analyze configuration: {@link Config}\n * - Pre-process input: {@link Input}\n * - Run inference for all configured models\n * - Process and return result: {@link Result}\n *\n * @param input - {@link Input}\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async detect(input: Input, userConfig?: Partial): Promise {\n // detection happens inside a promise\n this.state = 'detect';\n return new Promise(async (resolve) => {\n this.state = 'config';\n let timeStamp;\n\n // update configuration\n this.config = mergeDeep(this.config, userConfig) as Config;\n\n // sanity checks\n this.state = 'check';\n const error = this.#sanity(input);\n if (error) {\n log(error, input);\n this.emit('error');\n resolve(empty(error));\n }\n\n const timeStart = now();\n\n // load models if enabled\n await this.load();\n\n timeStamp = now();\n this.state = 'image';\n const img = await image.process(input, this.config) as { canvas: AnyCanvas, tensor: Tensor4D };\n this.process = img;\n this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Get Image:');\n\n if (!img.tensor) {\n if (this.config.debug) log('could not convert input to tensor');\n this.emit('error');\n resolve(empty('could not convert input to tensor'));\n return;\n }\n this.emit('image');\n\n timeStamp = now();\n this.config.skipAllowed = await image.skip(this.config, img.tensor);\n this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; // disable autoBrightness on scene change\n if (!this.performance.totalFrames) this.performance.totalFrames = 0;\n if (!this.performance.cachedFrames) this.performance.cachedFrames = 0;\n (this.performance.totalFrames)++;\n if (this.config.skipAllowed) this.performance.cachedFrames++;\n this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Check Changed:');\n\n // prepare where to store model results\n // keep them with weak typing as it can be promise or not\n let faceRes: FaceResult[] | Promise | never[] = [];\n let bodyRes: BodyResult[] | Promise | never[] = [];\n let handRes: HandResult[] | Promise | never[] = [];\n let objectRes: ObjectResult[] | Promise | never[] = [];\n\n // run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion\n this.state = 'detect:face';\n if (this.config.async) {\n faceRes = this.config.face.enabled ? face.detectFace(this, img.tensor) : [];\n if (this.performance.face) delete this.performance.face;\n } else {\n timeStamp = now();\n faceRes = this.config.face.enabled ? await face.detectFace(this, img.tensor) : [];\n this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n\n if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) faceRes = await faceRes; // need face result for auto-detect number of hands or bodies\n\n // run body: can be posenet, blazepose, efficientpose, movenet\n this.analyze('Start Body:');\n this.state = 'detect:body';\n const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of bodies\n if (this.config.async) {\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(img.tensor, bodyConfig) : [];\n if (this.performance.body) delete this.performance.body;\n } else {\n timeStamp = now();\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(img.tensor, bodyConfig) : [];\n this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Body:');\n\n // run handpose\n this.analyze('Start Hand:');\n this.state = 'detect:hand';\n const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of hands\n if (this.config.async) {\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? handtrack.predict(img.tensor, handConfig) : [];\n if (this.performance.hand) delete this.performance.hand;\n } else {\n timeStamp = now();\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? await handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? await handtrack.predict(img.tensor, handConfig) : [];\n this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Hand:');\n\n // run object detection\n this.analyze('Start Object:');\n this.state = 'detect:object';\n if (this.config.async) {\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(img.tensor, this.config) : [];\n if (this.performance.object) delete this.performance.object;\n } else {\n timeStamp = now();\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(img.tensor, this.config) : [];\n this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Object:');\n\n // if async wait for results\n this.state = 'detect:await';\n if (this.config.async) [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);\n\n // run gesture analysis last\n this.state = 'detect:gesture';\n let gestureRes: GestureResult[] = [];\n if (this.config.gesture.enabled) {\n timeStamp = now();\n gestureRes = [...gesture.face(faceRes as FaceResult[]), ...gesture.body(bodyRes as BodyResult[]), ...gesture.hand(handRes as HandResult[]), ...gesture.iris(faceRes as FaceResult[])];\n if (!this.config.async) this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n else if (this.performance.gesture) delete this.performance.gesture;\n }\n\n this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart);\n const shape = this.process.tensor?.shape || [0, 0, 0, 0];\n this.result = {\n face: faceRes as FaceResult[],\n body: bodyRes as BodyResult[],\n hand: handRes as HandResult[],\n gesture: gestureRes,\n object: objectRes as ObjectResult[],\n performance: this.performance,\n canvas: this.process.canvas,\n timestamp: Date.now(),\n error: null,\n width: shape[2],\n height: shape[1],\n get persons() { return persons.join(faceRes as FaceResult[], bodyRes as BodyResult[], handRes as HandResult[], gestureRes, shape); },\n };\n\n // finally dispose input tensor\n tf.dispose(img.tensor);\n\n // log('Result:', result);\n this.emit('detect');\n this.state = 'idle';\n resolve(this.result);\n });\n }\n\n /** Helper function\n * @param ms - sleep time in miliseconds\n */\n async sleep(ms: number): Promise { // eslint-disable-line class-methods-use-this\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n }\n\n /** internal structure that keeps track of processed videos @hidden */\n #loops: Record = {};\n /** Continously detect video frames\n * @param element - HTMLVideoElement input\n * @param run - boolean run continously or stop if already running, default true\n * @param delay - number delay detection between frames for number of miliseconds, default 0\n */\n async video(element: HTMLVideoElement, run: boolean = true, delay: number = 0) {\n if (run) {\n if (!this.#loops[element.id]) {\n if (this.config.debug) log('video start', element.id);\n this.#loops[element.id] = true;\n }\n if (!element.paused && this.#loops[element.id] && (element.readyState >= 2)) await this.detect(element);\n if (delay > 0) await this.sleep(delay);\n if (this.#loops[element.id]) requestAnimationFrame(() => this.video(element, run, delay));\n } else {\n if (this.config.debug) log('video stop', element.id);\n this.#loops[element.id] = false;\n }\n }\n}\n\n/** Class Human as default export */\n/* eslint no-restricted-exports: [\"off\", { \"restrictedNamedExports\": [\"default\"] }] */\nexport { Human as default, match, draw, models };\n"], - "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,IAAI,KAAG,OAAO;AAAO,IAAI,KAAG,OAAO;AAAe,IAAI,KAAG,OAAO;AAAyB,IAAI,KAAG,OAAO;AAAoB,IAAI,KAAG,OAAO;AAAd,IAA6B,KAAG,OAAO,UAAU;AAAe,IAAI,KAAG,CAACC,KAAE,MAAI,OAAK,KAAGA,KAAG,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQ,CAAC,GAAE,EAAE;AAAtD,IAA+D,KAAG,CAACA,KAAE,MAAI;AAAC,WAAQC,OAAK;AAAE,OAAGD,KAAEC,KAAE,EAAC,KAAI,EAAEA,GAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAACD,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAG,KAAG,OAAO,KAAG,YAAU,OAAO,KAAG;AAAW,aAAQ,KAAK,GAAG,CAAC;AAAE,OAAC,GAAG,KAAKD,KAAE,CAAC,KAAG,MAAIC,OAAG,GAAGD,KAAE,GAAE,EAAC,KAAI,MAAI,EAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAG,GAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAOA;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,SAAKA,MAAED,OAAG,OAAK,GAAG,GAAGA,GAAC,CAAC,IAAE,CAAC,GAAE,GAAG,KAAG,CAACA,OAAG,CAACA,IAAE,aAAW,GAAGC,KAAE,WAAU,EAAC,OAAMD,KAAE,YAAW,KAAE,CAAC,IAAEC,KAAED,GAAC;AAAG,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,KAAG,UAAQ;AAAG,MAAI,KAAG;AAAK,MAAG;AAAC,SAAG,IAAI,YAAY,SAAS,IAAI,YAAY,OAAO,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI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B;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,gBAAgB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,gBAAgB;AAAA,EAClC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAi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AA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACtJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACnJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AA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AAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EA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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Jb,IAAMC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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", - "names": ["r2", "r7", "r", "t", "r8", "r9", "r3", "r4", "dt", "ts", "config", "r", "match", "gl", "index", "y", "v", "size", "rgb", "fx", "process", "config", "_a", "_c", "tensor", "rgb", "t", "gl", "_a", "el", "affectnet-mobilenet", "anti-spoofing", "blazeface-back", "blazeface-front", "blazepose-detector", "blazepose-full", "blazepose-heavy", "blazepose-lite", "efficientpose-i-lite", "efficientpose-ii-lite", "efficientpose-iv", "facemesh-attention", "facemesh-attention-pinto", "facemesh-detection-full", "facemesh-detection-short", "faceres-deep", "gear-e1", "gear-e2", "gender-ssrnet-imdb", "handlandmark-full", "handlandmark-lite", "handlandmark-sparse", "insightface-efficientnet-b0", "insightface-ghostnet-strides1", "insightface-ghostnet-strides2", "insightface-mobilenet-emore", "insightface-mobilenet-swish", "movenet-lightning", "movenet-multipose", "movenet-thunder", "nanodet-e", "nanodet-g", "nanodet-m", "nanodet-t", "init", "config", "_a", "_c", "_d", "model", "r7", "config", "gl", "_a", "_a", "config", "op", "t", "canvas", "init", "options", "rgb", "localOptions", "y", "cx", "cy", "pt", "to", "options", "connectionsToIndices", "index", "_a", "_c", "_d", "_f", "_g", "_h", "_i", "emotion", "index", "v", "pt", "inCanvas", "options", "inCanvas", "_a", "localOptions", "options", "pt", "connected", "inCanvas", "_a", "localOptions", "options", "pt", "inCanvas", "_a", "localOptions", "options", "inCanvas", "_a", "localOptions", "options", "inCanvas", "localOptions", "options", "canvas", "init", "anchors", "y", "config", "outputSize", "_a", "t", "outputSize", "pt", "model", "inputSize", "config", "size", "_a", "t", "outputSize", "kpt", "distance", "annotations", "pt", "body", "_c", "labels", "model", "inputSize", "last", "lastTime", "skipped", "config", "process", "t", "id", "labels", "y", "predict", "outputSize", "connected", "kpt", "model", "lastTime", "cache", "skipped", "load", "config", "y", "predict", "_a", "enhance", "id", "x", "kpt", "connected", "pt", "pt", "size", "y", "y", "v1", "v2", "size", "inputSize", "anchors", "face", "y", "model", "inputSize", "load", "config", "_a", "decodeBoxes", "t", "_c", "_d", "_f", "_g", "model", "inputSize", "load", "config", "_a", "index", "face", "scale", "y", "_a", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "t", "r", "cache", "model", "inputSize", "predict", "config", "_a", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "id", "size", "face", "pt", "t", "index", "load", "model", "last", "lastTime", "skipped", "load", "config", "_a", "_c", "predict", "count", "_b", "t", "inputSize", "model", "last", "lastTime", "lastCount", "skipped", "load", "config", "_a", "predict", "count", "_c", "_d", "t", "gender", "all", "y", "face", "pt", "model", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "model", "cached", "skipped", "lastCount", "lastTime", "load", "config", "_a", "predict", "count", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "_b", "_c", "_d", "t", "gender", "age", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_c", "_d", "_b", "t", "model", "last", "lastCount", "lastTime", "skipped", "rgb", "load", "config", "_a", "predict", "count", "_c", "_d", "_b", "t", "normalize", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "_a", "predict", "count", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "face", "normalize", "v", "y", "r", "r10", "r11", "r12", "r22", "size", "pt", "face", "_a", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "predict", "el", "options", "point", "point2", "gesture", "body", "face", "iris", "_a", "_c", "_d", "hand", "getBoxSize", "getBoxCenter", "scaleBoxCoordinates", "enlargeBox", "size", "squarifyBox", "normalizeRadians", "computeRotation", "buildTranslationMatrix", "y", "dot", "v1", "v2", "getColumnFrom2DArr", "multiplyTransformMatrices", "size", "buildRotationMatrix", "invertTransformMatrix", "rotatePoint", "anchors", "model", "_a", "_c", "_d", "anchors", "t", "index", "config", "hand", "scaleBoxCoordinates", "lastTime", "handPoseModel", "_a", "_c", "xs", "ys", "rotatePoint", "enlargeBox", "squarifyBox", "getBoxSize", "buildRotationMatrix", "invertTransformMatrix", "getBoxCenter", "dot", "config", "computeRotation", "meshAnnotations", "predict", "config", "annotations", "index", "pt", "loadDetect", "_a", "models", "inputSize", "skipped", "lastTime", "cache", "loadDetect", "config", "_a", "loadSkeleton", "config", "models", "t", "ratio", "id", "hand", "inputSize", "kpt", "index", "predict", "_a", "skipped", "lastTime", "cache", "connected", "kpt", "calc", "config", "_a", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_y", "_z", "t0", "_b", "_e", "annotations", "pt", "kp", "t1", "model", "load", "config", "predict", "_a", "t", "options", "clamp", "index", "models_exports", "cache", "body", "kp", "compare", "inputSize", "_a", "t", "outputSize", "kpt", "pt", "model", "inputSize", "skipped", "cache", "load", "config", "_a", "kpt", "id", "pt", "annotations", "connected", "kp", "body", "predict", "t", "model", "last", "lastTime", "skipped", "inputSize", "load", "config", "process", "_a", "id", "size", "labels", "cx", "cy", "y", "predict", "outputSize", "y", "maxSize", "t", "outputStride", "y1", "x1", "y2", "x2", "dy", "dx", "model", "point", "height", "width", "minConfidence", "y", "_a", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "r", "rgb", "predict", "model", "load", "config", "predict", "_a", "t", "model", "_a", "op", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_y", "_z", "_A", "load", "loadDetect", "loadSkeleton", "models", "join", "_a", "_c", "_d", "_f", "id", "face", "person", "body", "hand", "gesture", "y", "face", "body", "res", "face", "body", "canvas", "atob", "_a", "_c", "_d", "model", "t", "t0", "t1", "_a", "init", "process", "_c", "predict", "count", "model", "calc", "t0", "t1", "ms", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] + "sourcesContent": ["/*\n Human\n homepage: \n author: '\n*/\n\nvar _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,\"default\",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{W0.exports=kt;var ko=null;try{ko=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,\"__isLong__\",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error(\"empty string\");if(r===\"NaN\"||r===\"Infinity\"||r===\"+Infinity\"||r===\"-Infinity\")return To;if(typeof e==\"number\"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error(\"interior hyphen\");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c=\"0\"+c;i=\"\"+c+i}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(M0)&&e.lt(M0))return No(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,d=0,f=0;return f+=a*c,d+=f>>>16,f&=65535,d+=s*c,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error(\"division by zero\");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=To}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};de.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{});var $k=Kt(()=>{});var o1=Kt((r1,Ww)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(\" \"),p.s1=u(\" \"),p.s2=u(\" \"),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c==\"object\"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(r1,typeof Ww==\"object\"&&Ww,typeof define==\"function\"&&define)});var s1=Kt((n1,Uw)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(n1,typeof Uw==\"object\"&&Uw,typeof define==\"function\"&&define)});var i1=Kt((a1,Gw)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(a1,typeof Gw==\"object\"&&Gw,typeof define==\"function\"&&define)});var p1=Kt((u1,Hw)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,d;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,d=[];if(c===(c|0))m=d[0]=c;else for(c=\"\"+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(u1,typeof Hw==\"object\"&&Hw,typeof define==\"function\"&&define)});var l1=Kt((c1,Kw)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,d;return i.w=u=u+1640531527|0,d=c[l+34&127],m=c[l=l+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=c[l]=d^m,i.i=l,d+(u^u>>>16)|0};function p(u,c){var l,m,d,f,h,g=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+\"\\0\",m=0,x=Math.max(x,c.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,l=g[f&127]^=m+h,d=l==0?d+1:0);for(d>=128&&(g[(c&&c.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],l=g[d=d+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[d]=m^l;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(c1,typeof Kw==\"object\"&&Kw,typeof define==\"function\"&&define)});var d1=Kt((m1,qw)=>{(function(r,e,t){function o(a){var i=this,p=\"\";i.next=function(){var c=i.b,l=i.c,m=i.d,d=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^d,d=d-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^d,i.a=d-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u==\"object\"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(m1,typeof qw==\"object\"&&qw,typeof define==\"function\"&&define)});var f1=Kt(()=>{});var g1=Kt((h1,Md)=>{(function(r,e,t){var o=256,n=6,s=52,a=\"random\",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,\"global\"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{});var Wv=Kt(()=>{});var LB=Kt(()=>{});var BB=Kt(()=>{});var zB=Kt(()=>{});var VB=Kt((Wg,Gv)=>{var Uv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};function t(){return oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!=\"undefined\"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});var m;typeof process!=\"undefined\"&&process.listeners&&(m={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var d=Object.assign({},u),f=[],h=\"./this.program\",g=(F,V)=>{throw V},x=typeof window==\"object\",b=typeof importScripts==\"function\",C=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",S=u.ENVIRONMENT_IS_PTHREAD||!1,k=\"\";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j(\"exiting due to exception: \"+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+\"/\":k=__dirname+\"/\",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:\"utf8\")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\\\/g,\"/\")),f=process.argv.slice(2),process.on(\"uncaughtException\",function(V){if(!(V instanceof ku))throw V}),process.on(\"unhandledRejection\",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return\"[Emscripten Module object]\"};let F;try{F=LB()}catch(V){throw console.error('The \"worker_threads\" module is not supported in this node.js build - perhaps a newer version is needed?'),V}global.Worker=F.Worker}else(x||b)&&(b?k=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(k=document.currentScript.src),typeof r!=\"undefined\"&&r&&(k=r),k.indexOf(\"blob:\")!==0?k=k.substr(0,k.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):k=\"\",C||($=F=>{var V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open(\"GET\",F,!1),V.responseType=\"arraybuffer\",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open(\"GET\",F,!0),$e.responseType=\"arraybuffer\",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance==\"undefined\"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+`\n`),z=F=>M.writeSync(2,F+`\n`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&vu(\"no native wasm support detected\");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le=\"\";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):\"\"}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j(\"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\"),C&&j(\"(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)\"),Error(\"bad memory\");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun==\"function\"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun==\"function\"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F=\"Aborted(\"+F+\")\",j(F),le=!0,be=1,F+=\". Build with -sASSERTIONS for more info.\";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy=\"data:application/octet-stream;base64,\";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith(\"file://\")}var hr;hr=\"tfjs-backend-wasm-threaded-simd.wasm\",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw\"both async and sync fetching of the wasm failed\"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch==\"function\"&&!Fp(hr))return fetch(hr,{credentials:\"same-origin\"}).then(function(F){if(!F.ok)throw\"failed to load wasm binary file at '\"+hr+\"'\";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm(\"wasm-instantiate\")})})}}S||Cy(\"wasm-instantiate\");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j(\"failed to asynchronously prepare wasm: \"+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch==\"function\"?fetch(hr,{credentials:\"same-origin\"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j(\"wasm streaming compile failed: \"+Ft),j(\"falling back to ArrayBuffer instantiation\"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j(\"Module.instantiateWasm callback failed with error: \"+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+F+\")\",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:\"cancel\"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:\"run\",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),\"unwind\";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F==\"unwind\")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message \"'+Ne+'\" to target pthread '+ge.targetThread+\", but that thread no longer exists!\"),Me.currentProxiedOperationCallerThread=void 0;return}Ne===\"processProxyingQueue\"?il(ge.queue):Ne===\"spawnThread\"?Ny(ge):Ne===\"cleanupThread\"?sl(ge.thread):Ne===\"killThread\"?vy(ge.thread):Ne===\"cancelThread\"?ky(ge.thread):Ne===\"loaded\"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne===\"print\"?U(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"printErr\"?j(\"Thread \"+ge.threadId+\": \"+ge.text):Ne===\"alert\"?alert(\"Thread \"+ge.threadId+\": \"+ge.text):ge.target===\"setimmediate\"?F.postMessage(ge):Ne===\"callHandler\"?u[ge.handler](...ge.args):Ne&&j(\"worker sent an unknown command \"+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge=\"worker sent an error!\";throw j(ge+\" \"+Le.filename+\":\"+Le.lineno+\": \"+Le.message),Le},C&&(F.on(\"message\",function(Le){F.onmessage({data:Le})}),F.on(\"error\",function(Le){F.onerror(Le)}),F.on(\"detachedExit\",function(){}));var ue=[],$e=[\"onExit\",\"onAbort\",\"print\",\"printErr\"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:\"load\",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_(\"tfjs-backend-wasm-threaded-simd.worker.js\");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:\"cleanupThread\",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer==\"undefined\")return j(\"Current environment does not support SharedArrayBuffer, pthreads are not available!\"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd=\"spawnThread\",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:\"processProxyingQueue\",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:\"processProxyingQueue\",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu(\"\")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F=\"warning: \"+F),j(F))}function Vy(){C||b||Nu(\"Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread\")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw\"unwind\"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u[\"_\"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V===\"string\"?Pe(Br):V===\"boolean\"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge===\"number\"||ge===\"boolean\"),Le=V!==\"string\";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){u.setStatus(\"\")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit==\"function\"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={uncaughtException:process.listeners(\"uncaughtException\").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var qm;if(typeof WasmBackendModule!=\"undefined\")qm=WasmBackendModule;else if(typeof e!=\"undefined\")qm=e;else throw new Error(\"Could not find wasm module in post.js\");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener(\"uncaughtException\",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener(\"unhandledRejection\",F)})}}return e.ready}})();typeof Wg==\"object\"&&typeof Gv==\"object\"?Gv.exports=Uv:typeof define==\"function\"&&define.amd?define([],function(){return Uv}):typeof Wg==\"object\"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{WB.exports.wasmWorkerContents=`\"use strict\";var Module={};var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require(\"worker_threads\");var parentPort=nodeWorkerThreads.parentPort;parentPort.on(\"message\",data=>onmessage({data:data}));var fs=require(\"fs\");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,\"utf8\")+\"//# sourceURL=\"+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(\" \");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+\"\n\");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(\" \");postMessage({cmd:\"alert\",text:text,threadId:Module[\"_pthread_self\"]()})}var err=threadPrintErr;self.alert=threadAlert;Module[\"instantiateWasm\"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module[\"wasmModule\"],info);receiveInstance(instance);Module[\"wasmModule\"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({\"cmd\":\"loaded\"})};self.onmessage=e=>{try{if(e.data.cmd===\"load\"){Module[\"wasmModule\"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:\"callHandler\",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd===\"run\"){Module[\"__emscripten_thread_init\"](e.data.pthread_ptr,0,0,1);Module[\"establishStackSpace\"]();Module[\"PThread\"].receiveObjectTransfer(e.data);Module[\"PThread\"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module[\"executeNotifiedProxyingQueue\"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module[\"invokeEntryPoint\"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!=\"unwind\"){if(ex instanceof Module[\"ExitStatus\"]){if(Module[\"keepRuntimeAlive\"]()){}else{Module[\"__emscripten_thread_exit\"](ex.status)}}else{throw ex}}}}else if(e.data.cmd===\"cancel\"){if(Module[\"_pthread_self\"]()){Module[\"__emscripten_thread_exit\"](-1)}}else if(e.data.target===\"setimmediate\"){}else if(e.data.cmd===\"processProxyingQueue\"){if(initializedJS){Module[\"executeNotifiedProxyingQueue\"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err(\"worker.js received unknown command \"+e.data.cmd);err(e.data)}}catch(ex){if(Module[\"__emscripten_thread_crashed\"]){Module[\"__emscripten_thread_crashed\"]()}throw ex}};`});var GB=Kt((Ug,Kv)=>{var Hv=(()=>{var r=typeof document!=\"undefined\"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!=\"undefined\"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!=\"undefined\"?e:{},o,n;t.ready=new Promise(function(K,ae){o=K,n=ae});var s;typeof process!=\"undefined\"&&process.listeners&&(s={uncaughtException:process.listeners(\"uncaughtException\"),unhandledRejection:process.listeners(\"unhandledRejection\")});var a=Object.assign({},t),i=[],p=\"./this.program\",u=(K,ae)=>{throw ae},c=typeof window==\"object\",l=typeof importScripts==\"function\",m=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",d=\"\";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$(\"exiting due to exception: \"+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+\"/\":d=__dirname+\"/\",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:\"utf8\")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\\\/g,\"/\")),i=process.argv.slice(2),process.on(\"uncaughtException\",function(K){if(!(K instanceof Ap))throw K}),process.on(\"unhandledRejection\",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},t.inspect=function(){return\"[Emscripten Module object]\"}}else(c||l)&&(l?d=self.location.href:typeof document!=\"undefined\"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf(\"blob:\")!==0?d=d.substr(0,d.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1):d=\"\",h=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open(\"GET\",K,!1),ae.responseType=\"arraybuffer\",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open(\"GET\",K,!0),at.responseType=\"arraybuffer\",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);var _=t.print||console.log.bind(console),$=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!=\"object\"&&fr(\"no native wasm support detected\");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!=\"undefined\"?new TextDecoder(\"utf8\"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et=\"\";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):\"\"}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun==\"function\"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun==\"function\"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K=\"Aborted(\"+K+\")\",$(K),M=!0,L=1,K+=\". Build with -sASSERTIONS for more info.\";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va=\"data:application/octet-stream;base64,\";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith(\"file://\")}var Xt;Xt=\"tfjs-backend-wasm.wasm\",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw\"both async and sync fetching of the wasm failed\"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch==\"function\"&&!Ks(Xt))return fetch(Xt,{credentials:\"same-origin\"}).then(function(K){if(!K.ok)throw\"failed to load wasm binary file at '\"+Xt+\"'\";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo(\"wasm-instantiate\")}ro(\"wasm-instantiate\");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$(\"failed to asynchronously prepare wasm: \"+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming==\"function\"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch==\"function\"?fetch(Xt,{credentials:\"same-origin\"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $(\"wasm streaming compile failed: \"+Ut),$(\"falling back to ArrayBuffer instantiation\"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$(\"Module.instantiateWasm callback failed with error: \"+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name=\"ExitStatus\",this.message=\"Program terminated with exit(\"+K+\")\",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr(\"\")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t[\"_\"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae===\"string\"?j(yr):ae===\"boolean\"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe===\"number\"||Qe===\"boolean\"),Et=ae!==\"string\";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){t.setStatus(\"\")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit==\"function\"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners(\"uncaughtException\").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners(\"unhandledRejection\").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!=\"undefined\")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!=\"undefined\")Lp=WasmBackendModuleThreadedSimd;else throw new Error(\"Could not find wasm module in post.js\");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener(\"uncaughtException\",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener(\"unhandledRejection\",K)})}}return e.ready}})();typeof Ug==\"object\"&&typeof Kv==\"object\"?Kv.exports=Hv:typeof define==\"function\"&&define.amd?define([],function(){return Hv}):typeof Ug==\"object\"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr(\"refCount\")}incRef(e){return zr(\"incRef\")}timerAvailable(){return!0}time(e){return zr(\"time\")}read(e){return zr(\"read\")}readSync(e){return zr(\"readSync\")}readToGPU(e,t){return zr(\"readToGPU\")}numDataIds(){return zr(\"numDataIds\")}disposeData(e,t){return zr(\"disposeData\")}write(e,t,o){return zr(\"write\")}move(e,t,o,n,s){return zr(\"move\")}createTensorFromGPUData(e,t,o){return zr(\"createTensorFromGPUData\")}memory(){return zr(\"memory\")}floatPrecision(){return zr(\"floatPrecision\")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr(\"dispose\")}};function zr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>\"The input to the tensor constructor must be a non-null value.\")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function GG(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function _i(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),E(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),E(r.every(o=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function ew(r,e){return Xm(r,e)}function Xm(r,e){let t=null;if(r==null||r===\"float32\")t=new Float32Array(e);else if(r===\"int32\")t=new Int32Array(e);else if(r===\"bool\")t=new Uint8Array(e);else if(r===\"string\")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r==\"string\"||r instanceof String}function N0(r){return typeof r==\"boolean\"}function T0(r){return typeof r==\"number\"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?\"float32\":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?\"int32\":T0(r)?\"float32\":zo(r)?\"string\":N0(r)?\"bool\":\"float32\"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?\" for a complex tensor\":\"\"}.`);return _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e===\"float32\")return r instanceof Float32Array?r:new Float32Array(r);if(e===\"int32\")return r instanceof Int32Array?r:new Int32Array(r);if(e===\"bool\"||e===\"string\")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e===\"float32\")return Tu(r,new Float32Array(t));if(e===\"int32\")return Tu(r,new Int32Array(t));if(e===\"bool\")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(\":\");this.urlFlags[n]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join(\"=\"))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||\"\")}function JG(r,e){let t=e.toLowerCase();return t===\"true\"||t===\"false\"?t===\"true\":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==null){let r;if(typeof window!=\"undefined\")r=window;else if(typeof global!=\"undefined\")r=global;else if(typeof process!=\"undefined\")r=process;else if(typeof self!=\"undefined\")r=self;else throw new Error(\"Could not find a global object\");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs=\"Abs\",Vo=\"Acos\",Wo=\"Acosh\",uo=\"Add\",Uo=\"AddN\",Go=\"All\",Ho=\"Any\",Ys=\"ArgMax\",Qs=\"ArgMin\",Ko=\"Asin\",qo=\"Asinh\",jo=\"Atan\",Xo=\"Atanh\",Yo=\"Atan2\",Qo=\"AvgPool\",$i=\"AvgPoolGrad\",Zs=\"AvgPool3D\",Ri=\"AvgPool3DGrad\",Zo=\"BatchMatMul\",Js=\"BatchToSpaceND\",Jo=\"Bincount\",qa=\"BitwiseAnd\",qce=\"BroadcastTo\",ea=\"BroadcastArgs\",yo=\"Cast\",en=\"Ceil\",bo=\"ClipByValue\",Di=\"Complex\",Ai=\"ComplexAbs\",ta=\"Concat\",tn=\"Conv2D\",Fi=\"Conv2DBackpropFilter\",rn=\"Conv2DBackpropInput\",on=\"Conv3D\",ja=\"Conv3DBackpropFilterV2\",nn=\"Conv3DBackpropInputV2\",sn=\"Cos\",an=\"Cosh\",un=\"Cumprod\",pn=\"Cumsum\",cn=\"CropAndResize\",ra=\"DenseBincount\",ln=\"DepthToSpace\",mn=\"DepthwiseConv2dNative\",Pi=\"DepthwiseConv2dNativeBackpropFilter\",Oi=\"DepthwiseConv2dNativeBackpropInput\",oa=\"Diag\",dn=\"Dilation2D\",Mi=\"Dilation2DBackpropInput\",Li=\"Dilation2DBackpropFilter\",$u=\"Draw\",fn=\"RealDiv\",Bi=\"Einsum\",hn=\"Elu\",Xa=\"EluGrad\",gn=\"Erf\",xn=\"Equal\",yn=\"Exp\",na=\"ExpandDims\",bn=\"Expm1\",zi=\"FFT\",sa=\"Fill\",Cn=\"FlipLeftRight\",wn=\"Floor\",Sn=\"FloorDiv\",In=\"FusedBatchNorm\",aa=\"GatherV2\",vn=\"GatherNd\",kn=\"Greater\",Nn=\"GreaterEqual\",Co=\"Identity\",Vi=\"IFFT\",Wi=\"Imag\",Tn=\"IsFinite\",_n=\"IsInf\",En=\"IsNan\",$n=\"LeakyRelu\",Rn=\"Less\",Dn=\"LessEqual\",An=\"LinSpace\",Fn=\"Log\",Pn=\"Log1p\",On=\"LogicalAnd\",Mn=\"LogicalNot\",Ln=\"LogicalOr\",R0=\"LogicalXor\",jce=\"LogSoftmax\",Xce=\"LowerBound\",Bn=\"LRN\",Ya=\"LRNGrad\",Yce=\"MatrixBandPart\",zn=\"Max\",Vn=\"Maximum\",Wn=\"MaxPool\",Ui=\"MaxPoolGrad\",ia=\"MaxPool3D\",Gi=\"MaxPool3DGrad\",ua=\"MaxPoolWithArgmax\",Un=\"Mean\",Gn=\"Min\",Hn=\"Minimum\",Kn=\"MirrorPad\",qn=\"Mod\",jn=\"Multinomial\",Xn=\"Multiply\",pa=\"Neg\",Yn=\"NotEqual\",Qn=\"NonMaxSuppressionV3\",Qa=\"NonMaxSuppressionV4\",Zn=\"NonMaxSuppressionV5\",ca=\"OnesLike\",Jn=\"OneHot\",la=\"Pack\",es=\"PadV2\",Qce=\"Pool\",ts=\"Pow\",rs=\"Prelu\",os=\"Prod\",Hp=\"RaggedGather\",Kp=\"RaggedRange\",qp=\"RaggedTensorToTensor\",ma=\"Range\",Hi=\"Real\",ns=\"Reciprocal\",ss=\"Relu\",da=\"Reshape\",as=\"ResizeNearestNeighbor\",Za=\"ResizeNearestNeighborGrad\",is=\"ResizeBilinear\",Ja=\"ResizeBilinearGrad\",us=\"Relu6\",ps=\"Reverse\",cs=\"Round\",ls=\"Rsqrt\",ms=\"ScatterNd\",ds=\"TensorScatterUpdate\",fs=\"SearchSorted\",fa=\"Select\",hs=\"Selu\",ha=\"Slice\",gs=\"Sin\",xs=\"Sinh\",ys=\"Sign\",bs=\"Sigmoid\",Cs=\"Softplus\",ws=\"Sqrt\",Ss=\"Sum\",ga=\"SpaceToBatchND\",xa=\"SplitV\",Is=\"Softmax\",Ki=\"SparseFillEmptyRows\",ei=\"SparseReshape\",ya=\"SparseSegmentMean\",ba=\"SparseSegmentSum\",vs=\"SparseToDense\",ks=\"SquaredDifference\",qi=\"Square\",Ru=\"StaticRegexReplace\",Ns=\"StridedSlice\",Ca=\"StringNGrams\",ji=\"StringSplit\",Xi=\"StringToHashBucketFast\",Ts=\"Sub\",_s=\"Tan\",Es=\"Tanh\",po=\"Tile\",$s=\"TopK\",Rs=\"Transform\",co=\"Transpose\",Yi=\"Unique\",wa=\"Unpack\",Qi=\"UnsortedSegmentSum\",Zce=\"UpperBound\",Sa=\"ZerosLike\",wo=\"Step\",Du=\"FromPixels\",Ds=\"RotateWithOffset\",So=\"_FusedMatMul\",Io=\"FusedConv2D\",vo=\"FusedDepthwiseConv2D\";function Ia(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.warn(...r)}function t4(...r){A().getBool(\"IS_TEST\")||A().getBool(\"PROD\")||console.log(...r)}var jp=fl(\"kernelRegistry\",()=>new Map),hl=fl(\"gradRegistry\",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split(\"_\");i===r&&t.push(a)}return t}function ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool(\"DEBUG\")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl(\"c3a5c85c97cb3127\"),Pu=gl(\"b492b66fbe98f273\"),Cr=gl(\"9ae16a3b2f90404f\");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl(\"9ddfea08eb382d69\")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e===\"string\"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e===\"float32\"||r instanceof Int32Array&&e===\"int32\"||r instanceof Uint8Array&&e===\"bool\"}function Zp(r,e){if(e===\"string\")throw new Error(\"Cannot convert a string[] to a TypedArray\");if(Array.isArray(r)&&(r=Fs(r)),A().getBool(\"DEBUG\")&&tw(r,e),p4(r,e))return r;if(e==null||e===\"float32\"||e===\"complex64\")return new Float32Array(r);if(e===\"int32\")return new Int32Array(r);if(e===\"bool\"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool(\"CHECK_COMPUTATION_FOR_ERRORS\"))for(let u=0;u{l4(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():\"\")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function l4(r,e,t){if(e!==\"float32\")return!1;for(let o=0;o0?h:\"\"} `}}console.log(`%c${p}\t%c${i}\t%c${u}D ${l}\t%c${c}\t%c${m}\t%c${a}`,\"font-weight:bold\",\"color:red\",\"color:blue\",\"color: orange\",\"color: green\",\"color: steelblue\")}};function q0(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!==\"float32\")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!br(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(r,e,t,n,s),p=[\"Tensor\"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(\" values:\")),p.push(i.map(u=>\" \"+u).join(`\n`)),p.join(`\n`)}function m4(r,e,t,o){let n=ze(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t===\"complex64\"?bl(r):r;if(i>1)for(let u=0;uX0){let g=xl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-xl)*a,i*a));return t===\"complex64\"&&(x=bl(x),b=bl(b)),[\"[\"+x.map((C,S)=>yl(C,n[S],t)).join(\", \")+\", ..., \"+b.map((C,S)=>yl(C,n[i-xl+S],t)).join(\", \")+\"]\"]}return[\"[\"+(t===\"complex64\"?bl(r):Array.from(r)).map((g,x)=>yl(g,n[x],t)).join(\", \")+\"]\"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>X0){for(let h=0;h0?m[0]+d:\"\");for(let h=1;h`Length of values '${n}' 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=o||Xm(t,this.size),this.strides=js(e)}set(e,...t){t.length===0&&(t=[0]),E(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nJp(o))}catch(o){throw new Error(\"Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().\")}}return e}dataToGPU(e){return this.throwIfDisposed(),Ps().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Ps().readSync(this.dataId);if(this.dtype===\"string\")try{return e.map(t=>Jp(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 Ps().read(this.dataId);return this.dtype===\"string\"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Ps().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error(\"Tensor is disposed.\")}print(e=!1){return ec.print(this,e)}clone(){return this.throwIfDisposed(),ec.clone(this)}toString(e=!1){let t=this.dataSync();return Y0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),ec.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Ps().makeVariable(this,e,t,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function hw(){return fl(\"Tensor\",()=>mt)}hw();var ri=class extends mt{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}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(!br(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=e.dataId,Ps().incRef(this,null)}dispose(){Ps().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ri,Symbol.hasInstance,{value:r=>r instanceof mt&&r.assign!=null&&r.assign instanceof Function});var rk={};qe(rk,{assertTypesMatch:()=>ww,getTensorsInContainer:()=>Cl,isTensorInList:()=>h4,makeTypesMatch:()=>Oe});var gw;(function(r){r.R0=\"R0\",r.R1=\"R1\",r.R2=\"R2\",r.R3=\"R3\",r.R4=\"R4\",r.R5=\"R5\",r.R6=\"R6\"})(gw||(gw={}));var xw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"int32\",r.complex64=\"complex64\"})(xw||(xw={}));var yw;(function(r){r.float32=\"float32\",r.int32=\"int32\",r.bool=\"bool\",r.complex64=\"complex64\"})(yw||(yw={}));var bw;(function(r){r.float32=\"float32\",r.int32=\"float32\",r.bool=\"float32\",r.complex64=\"complex64\"})(bw||(bw={}));var Cw;(function(r){r.float32=\"complex64\",r.int32=\"complex64\",r.bool=\"complex64\",r.complex64=\"complex64\"})(Cw||(Cw={}));var f4={float32:bw,int32:xw,bool:yw,complex64:Cw};function dt(r,e){if(r===\"string\"||e===\"string\"){if(r===\"string\"&&e===\"string\")return\"string\";throw new Error(`Can not upcast ${r} with ${e}`)}return f4[r][e]}function oi(r){return dt(r,\"int32\")}function rd(r){return r!=null&&typeof r==\"object\"&&\"texture\"in r&&r.texture instanceof WebGLTexture}function od(r){return typeof GPUBuffer!=\"undefined\"&&r!=null&&typeof r==\"object\"&&\"buffer\"in r&&r.buffer instanceof GPUBuffer}function Oe(r,e){if(r.dtype===e.dtype)return[r,e];let t=dt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function ww(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function h4(r,e){return e.some(t=>t.id===r.id)}function Cl(r){let e=[];return tk(r,e,new Set),e}function tk(r,e,t){if(r==null)return;if(r instanceof mt){e.push(r);return}if(!g4(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),tk(s,e,t))}}function g4(r){return Array.isArray(r)||typeof r==\"object\"}function Sw(r){return r.kernelName!=null}var nd=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()}},wl=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new nd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Ym(e).forEach(o=>{o.disposeFunc!=null&&o.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 o=t.factory();if(o&&!(o instanceof ao)&&typeof o.then==\"function\"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error(\"Cannot return a Promise inside of tidy.\"),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=T.runKernel(Co,{x:e}),o={x:e},n=a=>({x:()=>{let i=\"float32\",p={x:a},u={dtype:i};return T.runKernel(yo,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(Xp(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool(\"IS_TEST\")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype===\"complex64\"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Sw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:\"\";if(Sw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=Xp(f,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,C);let S=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}else{let{forwardFunc:f}=e,h=g=>{n&&(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:l}=e,m=Sw(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(u,c,()=>i()),this.ENV.getBool(\"DEBUG\")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(f=>c[f]!=null?c[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=iw(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?(E(Array.isArray(t),()=>\"saveAllInputs is true, expected inputs to be an array.\"),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error(\"Values passed to engine.makeTensor() are null\");o=o||\"float32\",n=n||this.backend;let s=e;o===\"string\"&&zo(e[0])&&(s=e.map(p=>Ji(p)));let a=n.write(s,t,o),i=new mt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o===\"string\"){let p=this.state.tensorInfo.get(a),u=ow(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||\"float32\";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new mt(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ri(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype===\"string\"&&this.state.numStringTensors++;let o=0;e.dtype!==\"complex64\"&&e.dtype!==\"string\"&&(o=e.size*Wp(e.dtype)),this.state.numBytes+=o,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:o})),e instanceof ri||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 o=e.size*Wp(e.dtype);this.state.numBytes-=o}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,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=iw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Gp(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),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=Cl(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if(E(t.length>0,()=>\"gradients() received an empty list of xs.\"),o!=null&&o.dtype!==\"float32\")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy(\"forward\",e));E(s instanceof mt,()=>\"The result y returned by f() must be a tensor.\");let a=q0(this.state.activeTape,t,s);if(!n&&a.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[s.id]=o==null?x4(s.shape):o,j0(i,a,u=>this.tidy(u),y4);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return E(qs(e),()=>\"The f passed in customGrad(f) must be a function.\"),(...t)=>{E(t.every(i=>i instanceof mt),()=>\"The args passed in customGrad(f)(x1, x2,...) must all be tensors\");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),E(o.value instanceof mt,()=>\"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor\"),E(qs(o.gradFunc),()=>\"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.\"),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];E(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(...).\"),E(c.every(m=>m instanceof mt),()=>\"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 l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Mu(),o=await this.backend.time(e);return o.wallMs=Mu()-t,o}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 nd;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}};wl.nextTensorId=0;wl.nextVariableId=0;function x4(r){let e=ml(ze(r),\"float32\");return T.makeTensor(e,r,\"float32\")}function Iw(){let r=aw();if(r._tfengine==null){let e=new dl(r);r._tfengine=new wl(e)}return $0(r._tfengine.ENV),Z0(()=>r._tfengine),r._tfengine}var T=Iw();function y4(r,e){let t={a:r,b:e};return T.runKernel(uo,t)}var eu={};qe(eu,{isBrowser:()=>kw,isMobile:()=>w4,mockIsMobile:()=>C4});function b4(){return typeof navigator!=\"undefined\"&&navigator!=null}var vw;function C4(r){vw=r}function w4(r){if(vw!==void 0)return vw;if(r||b4()){if(r||(r=navigator),r.product===\"ReactNative\")return!0;let e=r.userAgent||r.vendor||(typeof window!=\"undefined\"?window.opera:\"\");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}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 kw(){return typeof window!=\"undefined\"&&window.document!=null||typeof WorkerGlobalScope!=\"undefined\"}var _r=A();_r.registerFlag(\"DEBUG\",()=>!1,r=>{r&&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.\")});_r.registerFlag(\"IS_BROWSER\",()=>kw());_r.registerFlag(\"IS_NODE\",()=>typeof process!=\"undefined\"&&typeof process.versions!=\"undefined\"&&typeof process.versions.node!=\"undefined\");_r.registerFlag(\"IS_CHROME\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));_r.registerFlag(\"IS_SAFARI\",()=>typeof navigator!=\"undefined\"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));_r.registerFlag(\"PROD\",()=>!1);_r.registerFlag(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"DEPRECATION_WARNINGS_ENABLED\",()=>!0);_r.registerFlag(\"IS_TEST\",()=>!1);_r.registerFlag(\"CHECK_COMPUTATION_FOR_ERRORS\",()=>_r.getBool(\"DEBUG\"));_r.registerFlag(\"WRAP_TO_IMAGEBITMAP\",()=>!1);_r.registerFlag(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\",()=>!1);_r.registerFlag(\"USE_SETTIMEOUTCUSTOM\",()=>!1);function sr(r,e){let t=r;if(Pt(r))return e===\"string\"?[]:[r.length];if(rd(r)){let n=r.channels||\"RGBA\";return[r.height,r.width*n.length]}else if(od(r))return[r.buffer.size/(e==null?4:Wp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Pt(t)&&e!==\"string\";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool(\"TENSORLIKE_CHECK_SHAPE_CONSISTENCY\")&&nk(r,o,[]),o}function nk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Pt(r)){E(e.length===0,()=>`Element arr[${t.join(\"][\")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}E(e.length>0,()=>`Element arr[${t.join(\"][\")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===e[0],()=>`Element arr[${t.join(\"][\")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),ok(o,n,e,t),r==null||!Pt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"string\"){let p=r==null?\"null\":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=sr(r,n);!Pt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!==\"string\"?Zp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(r,e,t,o=\"numeric\"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \\`Tensor[]\\` or \\`TensorLike[]\\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Nw=\"__op\";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith(\"_\")&&(t=t.substring(0,t.length-1)),t=t+Nw;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Eu(a)&&console.error(\"Cannot return a Promise inside of tidy.\"),T.endScope(a),a}catch(a){throw T.endScope(null),a}};return Object.defineProperty(n,\"name\",{value:t,configurable:!0}),n}function S4(r,e){let t=v(r,\"real\",\"complex\"),o=v(e,\"imag\",\"complex\");xt(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return T.runKernel(Di,n)}var Er=N({complex_:S4});function wr(r,e,t,o){if(o==null)o=Ei(r);else if(o===\"complex64\")throw new Error(\"Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).\");if(od(r)||rd(r)){if(o!==\"float32\"&&o!==\"int32\")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return T.backend.createTensorFromGPUData(r,e||t,o)}if(!Pt(r)&&!Array.isArray(r)&&typeof r!=\"number\"&&typeof r!=\"boolean\"&&typeof r!=\"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(e!=null){Ct(e);let n=ze(e),s=ze(t);E(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Pt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!==\"string\"?Zp(r,o):Fs(r,[],!0),T.makeTensor(r,e,o)}function ar(r,e,t){let o=sr(r,t);return wr(r,e,o,t)}var si={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Pt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=I4(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function I4(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function hme(){A().set(\"PROD\",!0)}function gme(){A().set(\"DEBUG\",!0)}function xme(){A().set(\"DEPRECATION_WARNINGS_ENABLED\",!1),console.warn(\"TensorFlow.js deprecation warnings have been disabled.\")}function Tw(r){A().getBool(\"DEPRECATION_WARNINGS_ENABLED\")&&console.warn(r+\" You can disable deprecation warnings with tf.disableDeprecationWarnings().\")}ek(Tw);function yme(){T.disposeVariables()}function ur(){return T}function bme(){return T.memory()}function Cme(r){return T.profile(r)}function De(r,e){return T.tidy(r,e)}function Ot(r){Cl(r).forEach(t=>t.dispose())}function $r(r){return T.keep(r)}function wme(r){return T.time(r)}function Sme(r){return T.setBackend(r)}function Ime(){return T.ready()}function sk(){return T.backendName}function vme(r){T.removeBackend(r)}function kme(r){return T.findBackend(r)}function Nme(r){return T.findBackendFactory(r)}function tu(r,e,t=1){return T.registerBackend(r,e,t)}function ak(){return T.backend}function Tme(r,e){A().setPlatform(r,e)}var ru=4;async function pk(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+ru*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=ck(s,t.slice(n,n+a)),n+=a}return o}function v4(r,e){let t=ze(r.shape),o;if(\"quantization\"in r){let n=r.quantization;o=si[n.dtype]}else if(r.dtype===\"string\"){let n=0;for(let s=0;s(n=await ik(o,n,c),n.slice(u,c)));n=await ik(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=ck(s,i);if(t[s.name]=p,sk()===\"webgpu\"){let u=ak();\"uploadToGPU\"in u&&ze(p.shape)>=A().get(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\")&&u.uploadToGPU(p.dataId)}}return t}function N4(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{if(e+=s.byteLength,t.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 o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var _w=typeof Buffer!=\"undefined\"&&(typeof Blob==\"undefined\"||typeof atob==\"undefined\"||typeof btoa==\"undefined\");function uk(r){return _w?Buffer.byteLength(r,\"utf8\"):new Blob([r]).size}function lk(r){if(_w)return Buffer.from(r).toString(\"base64\");let e=new Uint8Array(r),t=\"\";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function _4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function E4(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function $4(){let r=T4(),e=_4(),t=E4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var qt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,\"save\")}static getLoadHandlers(e,t){return r.getHandlers(e,\"load\",t)}static getHandlers(e,t,o){let n=[];return(t===\"load\"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},fk=r=>qt.registerSaveRouter(r),hk=r=>qt.registerLoadRouter(r),gk=r=>qt.getSaveHandlers(r),xk=(r,e)=>qt.getLoadHandlers(r,e);var Rw=\"tensorflowjs\",Dw=1,Lu=\"models_store\",ou=\"model_info_store\";function yk(){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"Failed to obtain IndexedDB factory because the current environmentis not a web browser.\");let r=typeof window==\"undefined\"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error(\"The current browser does not appear to support IndexedDB.\");return e}function Aw(r){let e=r.result;e.createObjectStore(Lu,{keyPath:\"modelPath\"}),e.createObjectStore(ou,{keyPath:\"modelPath\"})}var ka=class{constructor(e){if(this.indexedDB=yk(),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((o,n)=>{let s=this.indexedDB.open(Rw,Dw);s.onupgradeneeded=()=>Aw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Lu,\"readonly\"),u=i.objectStore(Lu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{t.weightData=ir.join(t.weightData);let i=va(t),p=a.transaction(ou,\"readwrite\"),u=p.objectStore(ou),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Lu,\"readwrite\");let m=l.objectStore(Lu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(ou);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};ka.URL_SCHEME=\"indexeddb://\";var bk=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?R4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(bk);qt.registerLoadRouter(bk);function R4(r){return new ka(r)}function D4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var ud=class{constructor(){this.indexedDB=yk()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Rw,Dw);o.onupgradeneeded=()=>Aw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ou,\"readonly\"),i=s.objectStore(ou).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=D4(e),new Promise((t,o)=>{let n=this.indexedDB.open(Rw,Dw);n.onupgradeneeded=()=>Aw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ou,\"readwrite\"),i=a.objectStore(ou),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(Lu,\"readwrite\");let d=u.objectStore(Lu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var ai=\"/\",rc=\"tensorflowjs_models\",Ck=\"info\",A4=\"model_topology\",F4=\"weight_specs\",P4=\"weight_data\",O4=\"model_metadata\";function wk(r){return{info:[rc,r,Ck].join(ai),topology:[rc,r,A4].join(ai),weightSpecs:[rc,r,F4].join(ai),weightData:[rc,r,P4].join(ai),modelMetadata:[rc,r,O4].join(ai)}}function Sk(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function M4(r){let e=r.split(ai);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(ai)}function L4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(e){if(!A().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=wk(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),o=JSON.stringify(e.weightSpecs),n=va(e),s=ir.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,lk(s));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw Sk(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=mk(a),t}};Na.URL_SCHEME=\"localstorage://\";var Ik=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?B4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(Ik);qt.registerLoadRouter(Ik);function B4(r){return new Na(r)}var pd=class{constructor(){E(A().getBool(\"IS_BROWSER\"),()=>\"Current environment is not a web browser\"),E(typeof window==\"undefined\"||typeof window.localStorage!=\"undefined\",()=>\"Current browser does not appear to support localStorage\"),this.LS=window.localStorage}async listModels(){let e={},t=rc+ai,o=ai+Ck;for(let n=0;n\"scheme must not be undefined or null.\"),e.endsWith(oc)&&(e=e.slice(0,e.indexOf(oc))),E(e.length>0,()=>\"scheme must not be an empty string.\");let o=r.getInstance();E(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function cd(r){if(r.indexOf(oc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(\",\")}`);return{scheme:r.split(oc)[0],path:r.split(oc)[1]}}async function vk(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=qt.getLoadHandlers(r);E(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),E(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=qt.getSaveHandlers(e);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),E(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=cd(r).scheme,p=cd(r).path,u=i===cd(r).scheme,c=await n.load();t&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function kk(){let r=Os.getSchemes(),e={};for(let t of r){let o=await Os.getManager(t).listModels();for(let n in o){let s=t+oc+n;e[s]=o[n]}}return e}async function Nk(r){let e=cd(r);return Os.getManager(e.scheme).removeModel(e.path)}async function Tk(r,e){return vk(r,e,!1)}async function _k(r,e){return vk(r,e,!0)}var Fw=class{constructor(){this.messageName=\"setTimeoutCustom\",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window==\"undefined\"||!A().getBool(\"USE_SETTIMEOUTCUSTOM\")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},\"*\")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener(\"message\",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return Qm(e)}};if(A().get(\"IS_BROWSER\")){A().setPlatform(\"browser\",new Fw);try{Os.registerManager(Na.URL_SCHEME,new pd)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new ud)}catch(r){}}var z4={importFetch:()=>Ek()},Pw;var Ow=class{constructor(){this.util=$k(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(Pw==null&&(Pw=z4.importFetch()),Pw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get(\"IS_NODE\")&&!A().get(\"IS_BROWSER\")&&A().setPlatform(\"node\",new Ow);function me(r,e=\"float32\",t){return e=e||\"float32\",Ct(r),new tt(r,e,t)}function V4(r,e){let t=v(r,\"x\",\"cast\");if(!rw(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e===\"string\"&&t.dtype!==\"string\"||e!==\"string\"&&t.dtype===\"string\")throw new Error(\"Only strings can be casted to strings\");let o={x:t},n={dtype:e};return T.runKernel(yo,o,n)}var Ue=N({cast_:V4});function W4(r){let t={x:v(r,\"x\",\"clone\",\"string_or_numeric\")};return T.runKernel(Co,t)}var Ur=N({clone_:W4});function ld(r,e=!1){console.log(r.toString(e))}Iw();var U4={buffer:me,cast:Ue,clone:Ur,print:ld};J0(U4);function G4(r,e){let t=v(r,\"a\",\"add\"),o=v(e,\"b\",\"add\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(uo,n)}var Ce=N({add_:G4});function H4(r,e){let t=v(r,\"a\",\"floorDiv\"),o=v(e,\"b\",\"floorDiv\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Sn,n)}var md=N({floorDiv_:H4});function K4(r,e){let t=v(r,\"a\",\"div\"),o=v(e,\"b\",\"div\");if([t,o]=Oe(t,o),t.dtype===\"int32\"&&o.dtype===\"int32\")return md(t,o);let n={a:t,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:K4});function q4(r,e){let t=v(r,\"a\",\"mul\"),o=v(e,\"b\",\"mul\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var se=N({mul_:q4});function j4(r){let e=v(r,\"x\",\"abs\");if(e.dtype===\"complex64\"){let t={x:e};return T.runKernel(Ai,t)}else{let t={x:e};return T.runKernel(Xs,t)}}var Qt=N({abs_:j4});function X4(r){let t={x:v(r,\"x\",\"acos\")};return T.runKernel(Vo,t)}var Rk=N({acos_:X4});function Y4(r){let t={x:v(r,\"x\",\"acosh\")};return T.runKernel(Wo,t)}var Dk=N({acosh_:Y4});function Q4(r){E(Array.isArray(r),()=>\"The argument passed to tf.addN() must be a list of tensors\"),E(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,\"addN\")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error(\"All tensors passed to tf.addN() must have the same dtype\")}),e.forEach(n=>{if(!br(n.shape,t.shape))throw new Error(\"All tensors passed to tf.addN() must have the same shape\")});let o=e;return T.runKernel(Uo,o)}var Ak=N({addN_:Q4});function Z4(r,e=null,t=!1){let n={x:v(r,\"x\",\"all\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Go,n,s)}var Fk=N({all_:Z4});function J4(r,e=null,t=!1){let n={x:v(r,\"x\",\"any\",\"bool\")},s={axis:e,keepDims:t};return T.runKernel(Ho,n,s)}var Pk=N({any_:J4});function eH(r,e=0){let o={x:v(r,\"x\",\"argMax\")},n={axis:e};return T.runKernel(Ys,o,n)}var Ok=N({argMax_:eH});function tH(r,e=0){let o={x:v(r,\"x\",\"argMin\")},n={axis:e};return T.runKernel(Qs,o,n)}var Mk=N({argMin_:tH});function rH(r){let t={x:v(r,\"x\",\"asin\")};return T.runKernel(Ko,t)}var Lk=N({asin_:rH});function oH(r){let t={x:v(r,\"x\",\"asinh\")};return T.runKernel(qo,t)}var Bk=N({asinh_:oH});function nH(r){let t={x:v(r,\"x\",\"atan\")};return T.runKernel(jo,t)}var zk=N({atan_:nH});function sH(r,e){let t=v(r,\"a\",\"atan2\"),o=v(e,\"b\",\"atan2\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Yo,n)}var Vk=N({atan2_:sH});function aH(r){let t={x:v(r,\"x\",\"atanh\")};return T.runKernel(Xo,t)}var Wk=N({atanh_:aH});function iH(r,e,t,o,n=\"NHWC\",s){let a=r[3],i=[...e,a],p=Gk(n);return zu(r,i,t,s,o,null,null,p)}function Lw(r,e,t,o,n,s,a=\"channelsLast\"){let[i,p]=Il(e),u;if(a===\"channelsLast\")u=[i,p,r[3],r[3]];else if(a===\"channelsFirst\")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return zu(r,u,t,o,n,s,!1,a)}function uH(r,e,t,o,n,s,a=\"NDHWC\"){let[i,p,u]=Mw(e),c,l;if(a===\"NDHWC\")l=\"channelsLast\",c=[i,p,u,r[4],r[4]];else if(a===\"NCDHW\")l=\"channelsFirst\",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Uk(r,c,t,o,n,!1,l,s)}function zu(r,e,t,o,n,s,a=!1,i=\"channelsLast\"){let[p,u,c,l]=[-1,-1,-1,-1];if(i===\"channelsLast\")[p,u,c,l]=r;else if(i===\"channelsFirst\")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=Il(t),[x,b]=Il(o),C=nc(m,x),S=nc(d,b),{padInfo:k,outHeight:_,outWidth:$}=lH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i===\"channelsFirst\"?D=[p,R,_,$]:i===\"channelsLast\"&&(D=[p,_,$,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function Uk(r,e,t,o,n,s=!1,a=\"channelsLast\",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a===\"channelsLast\")[p,u,c,l,m]=r;else if(a===\"channelsFirst\")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,C]=Mw(t),[S,k,_]=Mw(o),$=nc(d,S),R=nc(f,k),D=nc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=mH(n,u,c,l,x,b,C,$,R,D,i),B=s?g*m:g,z;return a===\"channelsFirst\"?z=[p,B,O,M,L]:a===\"channelsLast\"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:P,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:e}}function pH(r,e,t,o,n){o==null&&(o=Bw(r,e,t));let s=r[0],a=r[1],i=vl((s-e+2*o)/t+1,n),p=vl((a-e+2*o)/t+1,n);return[i,p]}function cH(r,e,t,o,n,s){n==null&&(n=Bw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=vl((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Bw(r,e,t,o=1){let n=nc(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function Il(r){return typeof r==\"number\"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Mw(r){return typeof r==\"number\"?[r,r,r]:r}function nc(r,e){return e<=1?r:r+(r-1)*(e-1)}function lH(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r==\"number\"){u={top:r,bottom:r,left:r,right:r,type:r===0?\"VALID\":\"NUMBER\"};let d=pH([e,t],s,o,r,i);c=d[0],l=d[1]}else if(r===\"same\"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),d=Math.max(0,(l-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:\"SAME\"}}else if(r===\"valid\")u={top:0,bottom:0,left:0,right:0,type:\"VALID\"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r==\"object\"){let m=p===\"channelsLast\"?r[1][0]:r[2][0],d=p===\"channelsLast\"?r[1][1]:r[2][1],f=p===\"channelsLast\"?r[2][0]:r[3][0],h=p===\"channelsLast\"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?\"VALID\":\"EXPLICIT\"},c=vl((e-s+m+d)/o+1,i),l=vl((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function mH(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(r===\"valid\"&&(r=0),typeof r==\"number\"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?\"VALID\":\"NUMBER\"};let g=cH([e,t,o,1],[i,p,u],1,[n,s,a],r,c);m=g[0],d=g[1],f=g[2]}else if(r===\"same\"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),C=h-b,S=Math.floor(g/2),k=g-S,_=Math.floor(x/2),$=x-_;l={top:S,bottom:k,left:_,right:$,front:b,back:C,type:\"SAME\"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function vl(r,e){if(!e)return Math.trunc(r);switch(e){case\"round\":return Math.round(r);case\"ceil\":return Math.ceil(r);case\"floor\":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function Bu(r){let[e,t,o]=Il(r);return e===1&&t===1&&o===1}function gr(r,e){return Bu(r)||Bu(e)}function Ta(r){return Il(r).every(e=>e>0)}function Gk(r){if(r===\"NHWC\")return\"channelsLast\";if(r===\"NCHW\")return\"channelsFirst\";throw new Error(`Unknown dataFormat ${r}`)}function Lt(r,e,t){if(t!=null){if(typeof e==\"string\")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e==\"number\")E(Ka(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e==\"object\")e.forEach(o=>{o.forEach(n=>{E(Ka(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function dH(r,e){let o={x:v(r,\"x\",\"reshape\",\"string_or_numeric\")},n={shape:e};return T.runKernel(da,o,n)}var W=N({reshape_:dH});function fH(r,e,t,o,n){let s=v(r,\"x\",\"avgPool\",\"float32\"),a=1;E(gr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Lt(\"avgPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=Ue(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var dd=N({avgPool_:fH});function hH(r,e,t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"avgPool3d\",\"float32\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s===\"NDHWC\",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),E(typeof t==\"number\"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),Lt(\"avgPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=Ue(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Hk=N({avgPool3d_:hH});function gH(r,e=0){E(r.length>=1,()=>\"Pass at least one tensor to concat\");let t=ni(r,\"tensors\",\"concat\",\"string_or_numeric\");if(t[0].dtype===\"complex64\"&&t.forEach(s=>{if(s.dtype!==\"complex64\")throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${s.dtype}. `)}),t.length===1)return Ur(t[0]);let o=t,n={axis:e};return T.runKernel(ta,o,n)}var yt=N({concat_:gH});function xH(r,e,t=!1,o=!1){let n=v(r,\"a\",\"matMul\"),s=v(e,\"b\",\"matMul\");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:xH});function yH(r){let t={x:v(r,\"x\",\"sigmoid\",\"float32\")};return T.runKernel(bs,t)}var Ea=N({sigmoid_:yH});function bH(r,e,t){let o=v(r,\"x\",\"slice\",\"string_or_numeric\");if(o.rank===0)throw new Error(\"Slicing scalar is not possible\");let n={x:o},s={begin:e,size:t};return T.runKernel(ha,n,s)}var Xe=N({slice_:bH});function CH(r){let t={x:v(r,\"x\",\"tanh\",\"float32\")};return T.runKernel(Es,t)}var kl=N({tanh_:CH});function wH(r,e,t,o,n,s){let a=v(r,\"forgetBias\",\"basicLSTMCell\"),i=v(e,\"lstmKernel\",\"basicLSTMCell\"),p=v(t,\"lstmBias\",\"basicLSTMCell\"),u=v(o,\"data\",\"basicLSTMCell\"),c=v(n,\"c\",\"basicLSTMCell\"),l=v(s,\"h\",\"basicLSTMCell\"),m=yt([u,l],1),d=Ze(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Xe(f,[0,0],x),C=Xe(f,[0,g],x),S=Xe(f,[0,g*2],x),k=Xe(f,[0,g*3],x),_=Ce(se(Ea(b),kl(C)),se(c,Ea(Ce(a,S)))),$=se(kl(_),Ea(k));return[_,$]}var Kk=N({basicLSTMCell_:wH});function SH(r,e,t){let o=v(r,\"x\",\"batchToSpaceND\"),n=e.reduce((i,p)=>i*p);E(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),E(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),E(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(\" * \")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return T.runKernel(Js,s,a)}var fd=N({batchToSpaceND_:SH});function qk(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function IH(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(i.rank===p.rank,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),E(c==null||i.rank===c.rank,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),E(u==null||i.rank===u.rank,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let m={x:qk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var nu=N({batchNorm_:IH});function vH(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),E(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),E(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var jk=N({batchNorm2d_:vH});function kH(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),E(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),E(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var Xk=N({batchNorm3d_:kH});function NH(r,e,t,o,n,s){let a=v(r,\"x\",\"batchNorm\"),i=v(e,\"mean\",\"batchNorm\"),p=v(t,\"variance\",\"batchNorm\"),u;n!=null&&(u=v(n,\"scale\",\"batchNorm\"));let c;return o!=null&&(c=v(o,\"offset\",\"batchNorm\")),E(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),E(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),E(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var Yk=N({batchNorm4d_:NH});function TH(r,e,t){let o=v(r,\"x\",\"bincount\"),n=v(e,\"weights\",\"bincount\");E(o.dtype===\"int32\",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return T.runKernel(Jo,s,a)}var hd=N({bincount_:TH});function _H(r,e){let t=v(r,\"x\",\"bitwiseAnd\"),o=v(e,\"y\",\"bitwiseAnd\");if(!br(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!==\"int32\"||o.dtype!==\"int32\")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return T.runKernel(qa,n)}var Qk=N({bitwiseAnd_:_H});function EH(r,e){let t=v(r,\"s0\",\"broadcastArgs\",\"int32\"),o=v(e,\"s1\",\"broadcastArgs\",\"int32\");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return T.runKernel(ea,n)}var Zk=N({broadcastArgs_:EH});function $H(r,e){let t=v(r,\"broadcastTo\",\"x\"),o=t.shape;if(Ct(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Ur(t);let i={x:t},p={reps:s};return T.runKernel(po,i,p)}var su=N({broadcastTo_:$H});function RH(r){let t={x:v(r,\"x\",\"ceil\",\"float32\")};return T.runKernel(en,t)}var Jk=N({ceil_:RH});function $a(r,e,t){Ct(r),t=t||Ei(e);let o={shape:r,value:e,dtype:t};return T.runKernel(sa,{},o)}function DH(r,e,t){let o=v(r,\"x\",\"clipByValue\");if(E(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return $a(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(bo,n,s)}var e2=N({clipByValue_:DH});function AH(r){return yt(r,0)}var t2=N({concat1d_:AH});function FH(r,e){return yt(r,e)}var r2=N({concat2d_:FH});function PH(r,e){return yt(r,e)}var o2=N({concat3d_:PH});function OH(r,e){return yt(r,e)}var n2=N({concat4d_:OH});function MH(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"conv2d\",\"float32\"),p=v(e,\"filter\",\"conv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Lt(\"conv2d\",o,a);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),E(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(Ta(s),()=>\"Error in conv2D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv2D: Strides should be larger than 0.\");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(tn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var au=N({conv2d_:MH});function LH(r,e,t,o,n=\"NWC\",s=1,a){let i=v(r,\"x\",\"conv1d\"),p=v(e,\"filter\",\"conv1d\"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),E(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),E(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Lt(\"conv1d\",o,a),E(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),E(gr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(Ta(s),()=>\"Error in conv1D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv1D: Stride should be larger than 0.\"),E(n===\"NWC\",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=au(m,l,[1,t],o,\"NHWC\",[1,s],a);return c?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var s2=N({conv1d_:LH});function BH(r,e,t,o,n,s=\"NHWC\",a){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),E(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),E(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),E(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s===\"NHWC\"?i[3]:i[1],l=s===\"NHWC\"?p.shape[3]:p.shape[1];E(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),E(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Lt(\"conv2dDerInput\",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(rn,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var gd=N({conv2DBackpropInput_:BH});function zH(r,e,t,o,n,s){let a=v(r,\"x\",\"conv2dTranspose\"),i=v(e,\"filter\",\"conv2dTranspose\");return gd(t,a,i,o,n,\"NHWC\",s)}var a2=N({conv2dTranspose_:zH});function VH(r,e,t,o,n=\"NDHWC\",s=[1,1,1]){let a=v(r,\"x\",\"conv3d\"),i=v(e,\"filter\",\"conv3d\"),p=a,u=!1;a.rank===4&&(u=!0,p=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),E(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),E(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),E(gr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(n===\"NDHWC\",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),E(Ta(s),()=>\"Error in conv3D: Dilated rates should be larger than 0.\"),E(Ta(t),()=>\"Error in conv3D: Strides should be larger than 0.\");let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(on,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var i2=N({conv3d_:VH});function WH(r,e,t,o,n){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),E(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),E(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),E(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=T.runKernel(nn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var u2=N({conv3DBackpropInput_:WH});function UH(r,e,t,o,n){let s=v(r,\"x\",\"conv3dTranspose\"),a=v(e,\"filter\",\"conv3dTranspose\");return u2(t,s,a,o,n)}var p2=N({conv3dTranspose_:UH});function GH(r){let t={x:v(r,\"x\",\"cos\",\"float32\")};return T.runKernel(sn,t)}var c2=N({cos_:GH});function HH(r){let t={x:v(r,\"x\",\"cosh\",\"float32\")};return T.runKernel(an,t)}var l2=N({cosh_:HH});function KH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumprod\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(un,s,a)}var m2=N({cumprod_:KH});function qH(r,e=0,t=!1,o=!1){let s={x:v(r,\"x\",\"cumsum\")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(pn,s,a)}var d2=N({cumsum_:qH});function jH(r,e,t,o=!1){let n=v(r,\"x\",\"denseBincount\"),s=v(e,\"weights\",\"denseBincount\");E(n.dtype===\"int32\",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),E(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return T.runKernel(ra,a,i)}var f2=N({denseBincount_:jH});function XH(r,e,t=\"NHWC\"){let o=v(r,\"x\",\"depthToSpace\",\"float32\"),n=t===\"NHWC\"?o.shape[1]:o.shape[2],s=t===\"NHWC\"?o.shape[2]:o.shape[3],a=t===\"NHWC\"?o.shape[3]:o.shape[1];E(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),E(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${n} and ${e} for depthToSpace with input shape\n ${o.shape}`),E(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${e} for depthToSpace with input shape\n ${o.shape}`),E(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return T.runKernel(ln,i,p)}var h2=N({depthToSpace_:XH});function YH(r,e,t,o,n=\"NHWC\",s=[1,1],a){let i=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),p=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),u=i,c=!1;i.rank===3&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n===\"NHWC\"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Lt(\"depthwiseConv2d\",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(mn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var sc=N({depthwiseConv2d_:YH});function QH(r){let t={x:v(r,\"x\",\"diag\")};return T.runKernel(oa,t)}var g2=N({diag_:QH});function ZH(r,e,t,o,n=[1,1],s=\"NHWC\"){let a=v(r,\"x\",\"dilation2d\"),i=v(e,\"filter\",\"dilation2d\");E(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),E(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),E(s===\"NHWC\",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),E(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(dn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var x2=N({dilation2d_:ZH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>y2,getReductionAxes:()=>xd});function y2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function xd(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if(E(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=W(t,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(t,a)}}var C2=N({dot_:oK});function nK(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,\"einsum\")),o={equation:r};return T.runKernel(Bi,t,o)}var iu=N({einsum_:nK});function sK(r){let t={x:v(r,\"x\",\"elu\",\"float32\")};return T.runKernel(hn,t)}var bd=N({elu_:sK});function aK(r,e){let t=v(r,\"x\",\"ensureShape\",\"string_or_numeric\");if(!ZC(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var w2=N({ensureShape_:aK});function iK(r){let e=v(r,\"x\",\"erf\");E(e.dtype===\"int32\"||e.dtype===\"float32\",()=>\"Input dtype must be `int32` or `float32`.\"),e.dtype===\"int32\"&&(e=Ue(e,\"float32\"));let t={x:e};return T.runKernel(gn,t)}var S2=N({erf_:iK});function zw(r,e){for(let t=0;tr[s]);return[t,n]}function ii(r,e){let t=e.map(o=>1);return I2(r,t,e)}function pK(r,e,t){E(zw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function cK(r,e){if(zw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function lK(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function mK(r,e){let t=[];for(let o=e-r;o\"Axis must be <= rank of the tensor\");let o={input:t},n={dim:e};return T.runKernel(na,o,n)}var Ms=N({expandDims_:IK});function vK(r){let t={x:v(r,\"x\",\"expm1\")};return T.runKernel(bn,t)}var N2=N({expm1_:vK});function kK(r,e){let t=v(r,\"x\",\"tile\",\"string_or_numeric\");E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return T.runKernel(po,o,n)}var uu=N({tile_:kK});function NK(r,e,t,o=\"float32\"){e==null&&(e=r);let n=me([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`),E(Ka(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=T.runKernel(Bn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var R2=N({localResponseNormalization_:LK});function BK(r){let t={x:v(r,\"x\",\"log\",\"float32\")};return T.runKernel(Fn,t)}var pi=N({log_:BK});function zK(r){let t={x:v(r,\"x\",\"log1p\")};return T.runKernel(Pn,t)}var kd=N({log1p_:zK});function VK(r){return E(qs(r),()=>\"The f passed in grad(f) must be a function\"),(e,t)=>{let o=v(e,\"x\",\"tf.grad\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grad\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&xt(s.shape,n.shape,\"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)\"),Nd(a),a[0]})}}function WK(r){return E(qs(r),()=>\"The f passed in grads(f) must be a function\"),(e,t)=>{E(Array.isArray(e),()=>\"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s\");let o=ni(e,\"args\",\"tf.grads\",\"string_or_numeric\"),n=t!=null?v(t,\"dy\",\"tf.grads\"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&xt(s.shape,n.shape,\"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(a),a})}}function UK(r){return E(qs(r),()=>\"The f passed in valueAndGrad(f) must be a function\"),(e,t)=>{E(e instanceof mt,()=>\"The x passed in valueAndGrad(f)(x) must be a tensor\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrad(f)(x, dy) must be a tensor\");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return Nd(o),{grad:o[0],value:n}}}function GK(r){return E(qs(r),()=>\"The f passed in valueAndGrads(f) must be a function\"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof mt),()=>\"The args passed in valueAndGrads(f)(args) must be array of tensors\"),E(t==null||t instanceof mt,()=>\"The dy passed in valueAndGrads(f)(args, dy) must be a tensor\");let o=T.gradients(()=>r(...e),e,t);return t!=null&&xt(o.value.shape,t.shape,\"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])\"),Nd(o.grads),o}}function Vw(r,e){E(qs(r),()=>\"The f passed in variableGrads(f) must be a function\"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof ri),()=>\"The varList passed in variableGrads(f, varList) must be an array of variables\");let t=e!=null;if(!t){e=[];for(let u in T.registeredVariables)e.push(T.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),E(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=T.gradients(r,e,null,s);E(i.some(u=>u!=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().\"),E(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Ir(r){return T.customGrad(r)}function Nd(r){if(r.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.`)}function HK(r){let t={x:v(r,\"x\",\"neg\")};return T.runKernel(pa,t)}var pr=N({neg_:HK});function KK(r){let t={x:v(r,\"x\",\"softplus\")};return T.runKernel(Cs,t)}var Td=N({softplus_:KK});function qK(r){let e=v(r,\"x\",\"logSigmoid\");return Ir(o=>({value:pr(Td(pr(o))),gradFunc:a=>se(a,Ea(pr(o)))}))(e)}var D2=N({logSigmoid_:qK});function jK(r,e){let t=v(r,\"a\",\"sub\"),o=v(e,\"b\",\"sub\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:jK});function XK(r,e=-1){let t=v(r,\"logits\",\"logSoftmax\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Ir((n,s)=>{let i=Ra(n,e,!0),p=Te(n,i),u=Te(Ue(p,\"float32\"),pi(ot(_o(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,e,f),h))}}})(t)}var A2=N({logSoftmax_:XK});function YK(r,e=null,t=!1){let o=v(r,\"x\",\"logSumExp\"),n=_i(e,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=pi(p),c=Ce(W(s,u.shape),u);if(t){let l=ii(c.shape,n);return W(c,l)}return c}var _d=N({logSumExp_:YK});function QK(r,e){let t=v(r,\"a\",\"logicalAnd\",\"bool\"),o=v(e,\"b\",\"logicalAnd\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(On,n)}var Uu=N({logicalAnd_:QK});function ZK(r){let t={x:v(r,\"x\",\"logicalNot\",\"bool\")};return T.runKernel(Mn,t)}var Ed=N({logicalNot_:ZK});function JK(r,e){let t=v(r,\"a\",\"logicalOr\",\"bool\"),o=v(e,\"b\",\"logicalOr\",\"bool\");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:JK});function eq(r,e){let t=v(r,\"a\",\"logicalXor\",\"bool\"),o=v(e,\"b\",\"logicalXor\",\"bool\");return rt(t.shape,o.shape),Uu($d(r,e),Ed(Uu(r,e)))}var F2=N({logicalXor_:eq});var Rd=2147483648;function tq(r,e,t=\"left\"){let o=v(r,\"sortedSequence\",\"searchSorted\"),n=v(e,\"values\",\"searchSorted\"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=W(o,[-1,s]),p=W(n,[-1,a]);if(i.rank<2)throw new Error(\"Sorted input argument must be at least 2-dimensional\");if(i.shape[0]!==p.shape[0])throw new Error(\"Leading dimension of 'sortedSequence' and 'values' must match.\");if(ze(p.shape)>=Rd)throw new Error(`values tensor size must less than ${Rd}`);if(i.shape[1]>=Rd)throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(fs,u,c)}var _l=N({searchSorted_:tq});function P2(r,e){return _l(r,e,\"left\")}function rq(r,e,t,o,n){let s=v(r,\"x\",\"maxPool\"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),E(gr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Lt(\"maxPool\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Wn,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Dd=N({maxPool_:rq});function oq(r,e=[1,1,1],t,o,n,s=\"NDHWC\"){let a=v(r,\"x\",\"maxPool3d\"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s===\"NDHWC\",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Lt(\"maxPool3d\",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ia,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var O2=N({maxPool3d_:oq});function nq(r,e,t,o,n=!1){let a={x:v(r,\"x\",\"maxPoolWithArgmax\")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var M2=N({maxPoolWithArgmax_:nq});function sq(r,e){let t=v(r,\"a\",\"maximum\"),o=v(e,\"b\",\"maximum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Vn,n)}var Ad=N({maximum_:sq});function aq(r,e=null,t=!1){let n={x:v(r,\"x\",\"mean\")},s={axis:e,keepDims:t};return T.runKernel(Un,n,s)}var Gu=N({mean_:aq});function Gr(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Gr(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=Gp(ze(r),e);return T.makeTensor(t,r,e)}function Da(r,e=\"float32\"){if(Ct(r),e===\"complex64\"){let o=Da(r,\"float32\"),n=Gr(r,\"float32\");return Er(o,n)}let t=ml(ze(r),e);return T.makeTensor(t,r,e)}function L2(r,e,{indexing:t=\"xy\"}={}){if(t!==\"xy\"&&t!==\"ij\")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,\"x\",\"meshgrid\",r instanceof mt?r.dtype:\"float32\");if(e===void 0)return[o];let n=v(e,\"y\",\"meshgrid\",e instanceof mt?e.dtype:\"float32\"),s=ze(o.shape),a=ze(n.shape);return t===\"xy\"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Ze(Da([a,1],o.dtype),o),Ze(n,Da([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Ze(o,Da([1,a],o.dtype)),Ze(Da([s,1],n.dtype),n)])}function iq(r,e){let t=v(r,\"a\",\"minimum\"),o=v(e,\"b\",\"minimum\");[t,o]=Oe(t,o),t.dtype===\"bool\"&&(t=Ue(t,\"int32\"),o=Ue(o,\"int32\")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Hn,n)}var Hu=N({minimum_:iq});function uq(r,e,t){E(t===\"reflect\"||t===\"symmetric\",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,\"x\",\"mirrorPad\");if(o.rank===0)throw new Error(\"mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad\");E(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t===\"reflect\"?1:0;for(let i=0;i\"Invalid number of paddings. Must be length of 2 each.\"),E(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return T.runKernel(Kn,a,s)}var B2=N({mirrorPad_:uq});function pq(r,e){let t=v(r,\"a\",\"mod\"),o=v(e,\"b\",\"mod\");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(qn,n)}var z2=N({mod_:pq});function cq(r,e=null,t=!1){r=v(r,\"x\",\"moments\");let o=_i(e,r.shape),n=Gu(r,o,t),s=n.shape;t||(s=ii(n.shape,o));let a=Zt(Te(Ue(r,\"float32\"),W(n,s))),i=Gu(a,o,t);return{mean:n,variance:i}}var V2=N({moments_:cq});function lq(r,e,t,o){let n=v(e,\"data\",\"multiRNNCell\"),s=ni(t,\"c\",\"multiRNNCell\"),a=ni(o,\"h\",\"multiRNNCell\"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var U2=N({multinomial_:mq});function dq(r,e){let t=v(r,\"a\",\"notEqual\",\"string_or_numeric\"),o=v(e,\"b\",\"notEqual\",\"string_or_numeric\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Yn,n)}var Fd=N({notEqual_:dq});function fq(r,e,t=1,o=0,n=\"int32\"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,\"indices\",\"oneHot\",\"int32\")},i={dtype:n,depth:e,onValue:t,offValue:o};return T.runKernel(Jn,a,i)}var El=N({oneHot_:fq});function hq(r){let t={x:v(r,\"x\",\"onesLike\")};return T.runKernel(ca,t)}var G2=N({onesLike_:hq});function gq(r,e){let t=v(r,\"v1\",\"outerProduct\"),o=v(e,\"v2\",\"outerProduct\");E(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=W(t,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var H2=N({outerProduct_:gq});function xq(r,e,t=0){let o=v(r,\"x\",\"pad\");if(o.rank===0)throw new Error(\"pad(scalar) is not defined. Pass non-scalar to pad\");let n={paddings:e,constantValue:t},s={x:o};return T.runKernel(es,s,n)}var Aa=N({pad_:xq});function yq(r,e,t=0){return E(e.length===2,()=>\"Invalid number of paddings. Must be length of 2.\"),Aa(r,[e],t)}var K2=N({pad1d_:yq});function bq(r,e,t=0){return E(e.length===2&&e[0].length===2&&e[1].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Aa(r,e,t)}var q2=N({pad2d_:bq});function Cq(r,e,t=0){return E(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Aa(r,e,t)}var j2=N({pad3d_:Cq});function wq(r,e,t=0){return E(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>\"Invalid number of paddings. Must be length of 2 each.\"),Aa(r,e,t)}var X2=N({pad4d_:wq});function Sq(r,e,t){let o=v(r,\"x\",\"spaceToBatchND\");E(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),E(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),E(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return T.runKernel(ga,n,s)}var Pd=N({spaceToBatchND_:Sq});function Iq(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o=\"valid\");let i=v(r,\"x\",\"maxPool\"),p=i,u=!1;i.rank===3&&(u=!0,p=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Lw(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o===\"same\"?m=kq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=vq([c.inHeight,c.inWidth],l,m),g=d?o:\"valid\",x=d?p:Pd(p,l,f),C=(t===\"avg\"?()=>dd(x,e,s,g,a):()=>Dd(x,e,s,g,a))(),S=d?C:fd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function vq(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function kq(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var Y2=N({pool_:Iq});function Nq(r,e){let t=v(r,\"x\",\"prelu\"),o=v(e,\"alpha\",\"prelu\"),n={x:t,alpha:o};return T.runKernel(rs,n)}var Od=N({prelu_:Nq});function Tq(r,e=null,t=!1){let o=v(r,\"x\",\"prod\");o.dtype===\"bool\"&&(o=Ue(o,\"int32\"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(os,n,s)}var Q2=N({prod_:Tq});function _q(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,\"raggedGather\",\"int32\")),s=v(e,\"paramsDenseValues\",\"raggedGather\"),a=v(t,\"indices\",\"raggedGather\",\"int32\"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Hp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Z2=N({raggedGather_:_q});function Eq(r,e,t){let o=v(r,\"starts\",\"raggedRange\"),n=v(e,\"limits\",\"raggedRange\",o.dtype),s=v(t,\"deltas\",\"raggedRange\",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Kp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var J2=N({raggedRange_:Eq});function $q(r,e,t,o,n){let s=v(r,\"shape\",\"raggedTensorToTensor\",\"int32\"),a=v(e,\"values\",\"raggedTensorToTensor\"),i=v(t,\"defaultValue\",\"raggedTensorToTensor\",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,\"raggedTensorToTensor\",\"int32\")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return T.runKernel(qp,u,c)}var e1=N({raggedTensorToTensor_:$q});function Rq(r,e,t){Ct(r);let o=ze(r),n=null;if(t==null||t===\"float32\")n=new Float32Array(o);else if(t===\"int32\")n=new Int32Array(o);else if(t===\"bool\")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;sy1,createVideoElement:()=>Gq,encodeStrings:()=>C1,expectArrayBuffersEqual:()=>Uq,expectArraysClose:()=>Bq,expectArraysEqual:()=>Vq,expectNumbersClose:()=>b1,expectPromiseToFail:()=>zq,expectValuesInRange:()=>Wq,play:()=>Hq,testEpsilon:()=>Ld});var Lq=.001,y1=.1;function Bq(r,e,t){return t==null&&(t=Ld()),Xw(r,e,(o,n)=>Yw(o,n,t))}function Ld(){return T.backend.floatPrecision()===32?Lq:y1}function Xw(r,e,t){let o=!0;if((Pt(r)||Pt(e))&&(o=!1),Pt(r)&&Pt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=sr(r),i=sr(e);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(e)?e:Fs(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}.\nActual: ${n}.\nExpected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!=\"undefined\"&&expect().nothing()}function Vq(r,e){let t=typeof e==\"string\"||typeof e==\"number\"||typeof e==\"boolean\"?[e]:e;return zo(r)||zo(r[0])||zo(e)||zo(e[0])?Xw(r,t,(o,n)=>o==n):Xw(r,e,(o,n)=>Yw(o,n,0))}function b1(r,e,t){if(t==null&&(t=Ld()),!Yw(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!=\"undefined\"&&expect().nothing()}function Yw(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function Wq(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function Uq(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener(\"loadeddata\",o=>t(e)),e.load()})}async function Hq(r){await r.play(),\"requestVideoFrameCallback\"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var qu=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,this.dtype=o,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=s||Math.random();this.random=Vd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;for(;!o;){let n,s,a;do n=2*this.random()-1,s=2*this.random()-1,a=n*n+s*s;while(a>=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!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}},Bd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Vd.alea(s.toString()),this.randn=new qu(0,1,o,!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,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype===\"float32\",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n==\"number\"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Vd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Kq(r,e,t=1,o=\"float32\",n){if(Ct(r),t==null&&(t=1),o==null&&(o=\"float32\"),o!==\"float32\"&&o!==\"int32\")throw new Error(`Unsupported data type ${o}`);let s=new Bd(e,t,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),mo(e,0)}var N1=N({reverse1d_:r6});function o6(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),mo(t,e)}var T1=N({reverse2d_:o6});function n6(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),mo(t,e)}var _1=N({reverse3d_:n6});function s6(r,e){let t=v(r,\"x\",\"reverse\");return E(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),mo(t,e)}var E1=N({reverse4d_:s6});function a6(r){let t={x:v(r,\"x\",\"round\")};return T.runKernel(cs,t)}var Gd=N({round_:a6});function i6(r){let t={x:v(r,\"x\",\"rsqrt\",\"float32\")};return T.runKernel(ls,t)}var $1=N({rsqrt_:i6});function u6(r){let t={x:v(r,\"x\",\"selu\")};return T.runKernel(hs,t)}var R1=N({selu_:u6});function p6(r,e,t,o,n,s=[1,1],a=\"NHWC\"){let i=v(r,\"x\",\"separableConv2d\"),p=v(e,\"depthwiseFilter\",\"separableConv2d\"),u=v(t,\"pointwiseFilter\",\"separableConv2d\"),c=i,l=!1;if(i.rank===3&&(l=!0,c=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a===\"NCHW\")throw new Error(\"separableConv2d currently does not support dataFormat NCHW; only NHWC is supported\");E(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),E(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),E(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),E(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];E(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=sc(c,p,o,n,a,s),g=au(f,u,1,\"valid\",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var D1=N({separableConv2d_:p6});async function c6(r,e){let t=v(r,\"x\",\"setdiff1d\"),o=v(e,\"y\",\"setdiff1d\");E(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),E(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),E(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Xe(o,[e],[t])}var M1=N({slice1d_:f6});function h6(r,e,t){let o=v(r,\"x\",\"slice2d\");return E(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var L1=N({slice2d_:h6});function g6(r,e,t){let o=v(r,\"x\",\"slice3d\");return E(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var B1=N({slice3d_:g6});function x6(r,e,t){let o=v(r,\"x\",\"slice4d\");return E(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var z1=N({slice4d_:x6});function y6(r,e=-1){let t=v(r,\"logits\",\"softmax\",\"float32\");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return T.runKernel(Is,o,n)}var V1=N({softmax_:y6});function b6(r){E(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(zi,e)}var uc=N({fft_:b6});function C6(r){E(r.dtype===\"complex64\",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(Vi,e)}var ju=N({ifft_:C6});function w6(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ju(n)}else{let n=[t,2*(e-1)],s=W(ci(r),[t,e]),a=W(pu(r),[t,e]),i=mo(Xe(s,[0,1],[t,e-2]),1),p=se(mo(Xe(a,[0,1],[t,e-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W(Er(u,c),[n[0],n[1]]);o=ju(l)}if(o=ci(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Hd=N({irfft_:w6});function S6(r,e,t=0){let n={x:v(r,\"x\",\"split\")},s={numOrSizeSplits:e,axis:t};return T.runKernel(xa,n,s)}var li=N({split_:S6});function I6(r,e){E(r.dtype===\"float32\",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Xe(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=yt([r,Gr(f)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=W(Er(n,s),[o,t]),i=uc(a),p=Math.floor(t/2)+1,u=ci(i),c=pu(i),l=li(u,[p,t-p],u.shape.length-1),m=li(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var pc=N({rfft_:I6});function v6(r,e){let t=v(r,\"a\",\"squaredDifference\"),o=v(e,\"b\",\"squaredDifference\");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(ks,n,s)}var Kd=N({squaredDifference_:v6});function k6(r,e){let t=v(r,\"x\",\"squeeze\",\"string_or_numeric\");return W(t,JC(t.shape,e).newShape)}var cc=N({squeeze_:k6});function N6(r,e=0){let t=ni(r,\"tensors\",\"stack\",\"string_or_numeric\");E(t.length>=1,()=>\"Pass at least one tensor to tf.stack\"),t.length>0&&E(e<=t[0].rank,()=>\"Axis must be <= rank of the tensor\");let o=t,n={axis:e};return T.runKernel(la,o,n)}var vr=N({stack_:N6});function T6(r,e=0){let o={x:v(r,\"x\",\"step\")},n={alpha:e};return T.runKernel(wo,o,n)}var qd=N({step_:T6});function _6(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,\"x\",\"stridedSlice\",\"string_or_numeric\")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ns,c,l)}var W1=N({stridedSlice_:_6});function E6(r){let t={x:v(r,\"x\",\"tan\",\"float32\")};return T.runKernel(_s,t)}var U1=N({tan_:E6});function Jt(r,e){io(r);let t=sr(r,e);if(t.length!==1)throw new Error(\"tensor1d() requires values to be a flat/TypedArray\");return wr(r,null,t,e)}function mu(r,e,t){if(io(r),e!=null&&e.length!==2)throw new Error(\"tensor2d() requires shape to have two numbers\");let o=sr(r,t);if(o.length!==2&&o.length!==1)throw new Error(\"tensor2d() requires values to be number[][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor2d() requires shape to be provided when `values` are a flat/TypedArray\");return wr(r,e,o,t)}function jd(r,e,t){if(io(r),e!=null&&e.length!==3)throw new Error(\"tensor3d() requires shape to have three numbers\");let o=sr(r,t);if(o.length!==3&&o.length!==1)throw new Error(\"tensor3d() requires values to be number[][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor3d() requires shape to be provided when `values` are a flat array\");return wr(r,e,o,t)}function G1(r,e,t){if(io(r),e!=null&&e.length!==4)throw new Error(\"tensor4d() requires shape to have four numbers\");let o=sr(r,t);if(o.length!==4&&o.length!==1)throw new Error(\"tensor4d() requires values to be number[][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor4d() requires shape to be provided when `values` are a flat array\");return wr(r,e,o,t)}function H1(r,e,t){if(io(r),e!=null&&e.length!==5)throw new Error(\"tensor5d() requires shape to have five numbers\");let o=sr(r,t);if(o.length!==5&&o.length!==1)throw new Error(\"tensor5d() requires values to be number[][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor5d() requires shape to be provided when `values` are a flat array\");return wr(r,e,o,t)}function K1(r,e,t){if(io(r),e!=null&&e.length!==6)throw new Error(\"tensor6d() requires shape to have six numbers\");let o=sr(r,t);if(o.length!==6&&o.length!==1)throw new Error(\"tensor6d() requires values to be number[][][][][][] or flat/TypedArray\");if(o.length===1&&e==null)throw new Error(\"tensor6d() requires shape to be provided when `values` are a flat array\");return e=e||o,wr(r,e,o,t)}var du={};qe(du,{calculateShapes:()=>q1,validateInput:()=>lc,validateUpdateShape:()=>Qw});function Qw(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;l= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=T.runKernel($s,s,a);return{values:i,indices:p}}var X1=N({topk_:R6});function D6(r,e=0,t=1,o,n){if(Ct(r),o!=null&&o===\"bool\")throw new Error(\"Unsupported data type $ { dtype }\");let s=new qu(e,t,o,!0,n),a=me(r,o);for(let i=0;i0,()=>\"The input tensor must be at least 1D\");let o={x:t},n={axis:e},[s,a]=T.runKernel(Yi,o,n);return{values:s,indices:a}}var Q1=N({unique_:A6});function F6(r,e,t){let o=v(r,\"x\",\"unsortedSegmentSum\"),n=v(e,\"segmentIds\",\"unsortedSegmentSum\",\"int32\");E(Ka(t),()=>\"numSegments must be of dtype int\");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Qi,s,a)}var Z1=N({unsortedSegmentSum_:F6});function P6(r,e=0){let t=v(r,\"x\",\"unstack\",\"string_or_numeric\");E(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return T.runKernel(wa,o,n)}var fo=N({unstack_:P6});function J1(r,e){return _l(r,e,\"right\")}function eN(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Xd(r,e){let t=[];for(let s=0;s0,()=>\"mask cannot be scalar\"),xt(i.slice(s,s+a),n.shape,\"mask's shape must match the first K dimensions of tensor's shape,\");let p=1;for(let h=s;hi).reverse()),E(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{E(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype===\"complex64\"?De(()=>{let a=ci(o),i=pu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),t&&(i=pr(i)),Er(a,i)}):T.runKernel(co,n,s)}var mc=N({transpose_:B6});function z6(r,e,t,o,n=!0){let s=v(r,\"v\",\"movingAverage\"),a=v(e,\"x\",\"movingAverage\"),i=v(t,\"decay\",\"movingAverage\");ww(s,a),E(br(s.shape,a.shape),()=>\"Shape mismatch in v and x\");let p=ke(1),u=Te(p,i),c=se(Te(a,s),u);if(n){E(o!=null,()=>\"When using zeroDebias: true, step is required.\");let l=v(o,\"step\",\"movingAverage\");c=je(c,Te(p,ui(i,l)))}return Ce(s,c)}var V6=N({movingAverage_:z6});function W6(r,e,t){Ct(t);let o=v(r,\"indices\",\"scatterND\",\"int32\"),n=v(e,\"updates\",\"scatterND\");lc(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(ms,s,a)}var U6=N({scatterND_:W6});function tN(r,e,t,o){if(r.dtype!==\"int32\")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error(\"sparseValues.dtype must match defaultValues.dtype\")}function H6(r,e,t,o=0){Ct(t);let n=v(r,\"sparseIndices\",\"sparseToDense\",\"int32\"),s=v(e,\"sparseValues\",\"sparseToDense\",\"string_or_numeric\"),a=v(o,\"defaultValue\",\"sparseToDense\",s.dtype);tN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(vs,i,p)}var K6=N({sparseToDense_:H6});function q6(r,e){let t=v(e,\"indices\",\"gatherND\",\"int32\"),n={params:v(r,\"x\",\"gatherND\",\"string_or_numeric\"),indices:t};return T.runKernel(vn,n)}var j6=N({gatherND_:q6});function rN(r,e){if(e==null)return r.shape.slice();if(br(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),E(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof mt?n.clone():n;let s=rN(n,t),a=1-e,i=je(wd(Ce(ic(s,0,1,\"float32\",o),a)),a);return se(n,i)}var Y6=N({dropout_:X6});function Zw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function $l(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),E(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),xt(o.shape.slice(0,o.shape.length-1),n.shape,\"predictions's shape should be align with the targets' shape, except the last dimension.\");let s=o.shape[o.shape.length-1];E(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=ew(\"bool\",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hnN,depthwiseConv2d:()=>iN,matMul:()=>uN});function J6(r,e,t,o,n,s=\"NHWC\",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]])),E(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),E(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),E(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s===\"NHWC\"?i.shape[3]:i.shape[1],c=s===\"NHWC\"?p.shape[3]:p.shape[1];E(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),E(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Lt(\"conv2dDerFilter\",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(Fi,l,m)}var oN=N({conv2DBackpropFilter_:J6});function Xu(r,e,t){if(t==null||t===\"linear\")return r;if(t===\"relu\")return se(r,qd(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function Yu(r,e){let t=e,o=xd(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function Qu(r,e,t,o){if(e===\"linear\")return r;if(e===\"relu\")return lu(r);if(e===\"elu\")return bd(r);if(e===\"relu6\")return Ud(r);if(e===\"prelu\")return Od(r,t);if(e===\"leakyrelu\")return vd(r,o);if(e===\"sigmoid\")return Ea(r);throw new Error(`Unknown fused activation ${e}.`)}var Zu=(r,e)=>!(r>0)||e===\"linear\";function ej({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||\"linear\",Zu(T.state.gradientDepth,p)===!1){E(n===\"NHWC\",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=au(r,e,t,o,n,s,a);return i!=null&&(_=Ce(_,i)),Qu(_,p,u,c)}let l=v(r,\"x\",\"conv2d\",\"float32\"),m=v(e,\"filter\",\"conv2d\",\"float32\"),d=l,f=!1;l.rank===3&&(f=!0,d=W(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Lt(\"fused conv2d\",o,a);let h=n===\"NHWC\"?d.shape[3]:d.shape[1];E(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),E(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=zu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,\"bias\",\"fused conv2d\"),[x]=Oe(x,l),n===\"NHWC\"?rt(g.outShape,x.shape):(E(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),E(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if(E(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)E(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch($){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,\"prelu weights\",\"fused conv2d\")}let C=(_,$)=>{E(n===\"NHWC\",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=$,M=Xu(_,P,p);E(Bu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=gd(D.shape,M,R,t,o),B=oN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=Yu(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir(($,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,$,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir(($,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,$,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var nN=N({fusedConv2d_:ej});function tj(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return T.runKernel(Pi,u,c)}var sN=N({depthwiseConv2dNativeBackpropFilter_:tj});function rj(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Oi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var aN=N({depthwiseConv2dNativeBackpropInput_:rj});function oj({x:r,filter:e,strides:t,pad:o,dataFormat:n=\"NHWC\",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p=\"linear\",preluActivationWeights:u,leakyreluAlpha:c}){if(Zu(T.state.gradientDepth,p)===!1){let k=sc(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),Qu(k,p,u,c)}let l=v(r,\"x\",\"depthwiseConv2d\",\"float32\"),m=v(e,\"filter\",\"depthwiseConv2d\",\"float32\"),d=l,f=!1;l.rank===3&&(f=!0,d=W(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),E(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),E(gr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Lt(\"fused depthwiseConv2d\",o,a);let h=zu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,\"bias\",\"fused conv2d\"),[g]=Oe(g,l),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,\"prelu weights\",\"fused depthwiseConv2d\"));let b=(k,_)=>{E(Bu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,R,D,P]=_,O=Xu(k,D,p),M=aN(R.shape,O,$,t,o,s,a),L=sN(R,O,$.shape,t,o,s,a);if(P!=null){let B=Yu(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,$,R)=>{let D=T.runKernel(vo,C,S);return R([$,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,$,R,D)=>{let P=T.runKernel(vo,C,S);return D([$,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var iN=N({fusedDepthwiseConv2d_:oj});function nj({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s=\"linear\",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Zu(T.state.gradientDepth,s)===!1){let O=Ze(r,e,t,o);return n!=null&&(O=Ce(O,n)),Qu(O,s,a,i)}let p=v(r,\"a\",\"fused matMul\"),u=v(e,\"b\",\"fused matMul\");[p,u]=Oe(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);E(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,c,m]):W(p,[g,m,c]),k=o?W(u,[x,d,l]):W(u,[x,l,d]),_;n!=null&&(_=v(n,\"bias\",\"fused matMul\"),[_]=Oe(_,p),rt(C,_.shape));let $;a!=null&&($=v(a,\"prelu weights\",\"fused matMul\"));let R=(O,M)=>{let[L,B,z,U]=M,j=Xu(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!t&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):t&&!o?(q=Ze(B,j,!1,!0),Y=Ze(L,j,!1,!1)):(q=Ze(B,j,!0,!0),Y=Ze(j,L,!0,!0)),n!=null){let J=Yu(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:$},P={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Ir((M,L,B)=>{let z=T.runKernel(So,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):Ir((M,L,B,z)=>{let U=T.runKernel(So,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var uN=N({fusedMatMul_:nj});function sj(r){return $l(r,.54,.46)}var pN=N({hammingWindow_:sj});function aj(r){return $l(r,.5,.5)}var Qd=N({hannWindow_:aj});function ij(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Xe(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),E(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),E(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),E(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),E(n===\"bilinear\"||n===\"nearest\",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(cn,c,l)}var lN=N({cropAndResize_:pj});function cj(r){let e=v(r,\"image\",\"flipLeftRight\",\"float32\");E(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return T.runKernel(Cn,t,{})}var mN=N({flipLeftRight_:cj});function lj(r){let e=v(r,\"image\",\"grayscaleToRGB\"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),E(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,uu(e,n)}var dN=N({grayscaleToRGB_:lj});function mj(r){let e=v(r,\"image\",\"RGBToGrayscale\"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),E(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,\"float32\"),a=Jt([.2989,.587,.114]),i;switch(e.rank){case 2:i=iu(\"ij,j->i\",s,a);break;case 3:i=iu(\"ijk,k->ij\",s,a);break;case 4:i=iu(\"ijkl,l->ijk\",s,a);break;case 5:i=iu(\"ijklm,m->ijkl\",s,a);break;case 6:i=iu(\"ijklmn,n->ijklm\",s,a);break;default:throw new Error(\"Not a valid tensor rank.\")}return i=Ms(i,-1),Ue(i,n)}var fN=N({rgbToGrayscale_:mj});function dj(r,e,t=0,o=.5){let n=v(r,\"image\",\"rotateWithOffset\",\"float32\");E(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return T.runKernel(Ds,s,a)}var hN=N({rotateWithOffset_:dj});function Eo(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),E(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),E(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),E(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),E(e.rank===1,()=>\"scores must be a 1D tensor\"),E(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function fj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppression\",\"float32\"),a=v(e,\"scores\",\"nonMaxSuppression\",\"float32\"),i=Eo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return T.runKernel(Qn,{boxes:s,scores:a},p)}var gN=N({nonMaxSuppression_:fj});function xN(r,e,t){let o=hj(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function hj(r,e,t){return xj(r,e,t||gj)}function gj(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Jd(r,e,t,o,n){return eS(r,e,t,o,n,0)}function ef(r,e,t,o,n,s){return eS(r,e,t,o,n,0,!1,s,!0)}function tf(r,e,t,o,n,s){return eS(r,e,t,o,n,s,!0)}function eS(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(yN);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:C}=g;if(x=C;--k){let _=yj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*bj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&xN(u,g,yN))}let d=l.length,f=t-d;i&&f>0&&(l.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function yj(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(l-u)*(m-c);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),x=Math.min(i,l),b=Math.min(p,m),C=Math.max(x-h,0)*Math.max(b-g,0);return C/(d+f-C)}function bj(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yN(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function Cj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),a=v(e,\"scores\",\"nonMaxSuppressionAsync\"),i=Eo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Jd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),Jt(l,\"int32\")}var bN=Cj;function wj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CN=N({nonMaxSuppressionWithScore_:wj});async function Sj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:d}=tf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(m,\"int32\"),selectedScores:Jt(d)}}var wN=Sj;function Ij(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppression\"),i=v(e,\"scores\",\"nonMaxSuppression\"),p=Eo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},f=T.runKernel(Qa,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var SN=N({nonMaxSuppressionPadded_:Ij});async function vj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,\"boxes\",\"nonMaxSuppressionAsync\"),i=v(e,\"scores\",\"nonMaxSuppressionAsync\"),p=Eo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=ef(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(f,\"int32\"),validOutputs:ke(h,\"int32\")}}var IN=vj;function kj(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeBilinear\");E(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),E(o===!1||t===!1,()=>\"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vN=N({resizeBilinear_:kj});function Nj(r,e,t=!1,o=!1){let n=v(r,\"images\",\"resizeNearestNeighbor\");E(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),E(n.dtype===\"float32\"||n.dtype===\"int32\",()=>\"`images` must have `int32` or `float32` as dtype\"),E(o===!1||t===!1,()=>\"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.\");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kN=N({resizeNearestNeighbor_:Nj});function Tj(r,e=\"binary\",t=!1,o=.5){let n=v(r,\"image\",\"threshold\"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(Jt([o]),255),c,l,m,d;if(E(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),E(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),E(n.dtype===\"int32\"||n.dtype===\"float32\",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),E(e===\"otsu\"||e===\"binary\",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=li(n,[1,1,1],-1);let g=se(c,s),x=se(l,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e===\"otsu\"){let g=hd(Ue(Gd(d),\"int32\"),ar([]),256);u=_j(g,p)}let f=t?ac(d,u):Wu(d,u);return Ue(se(f,255),\"int32\")}function _j(r,e){let t=Jt([-1]),o=Jt([0]),n=Jt([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>\"Error in transform: Input transform should be batch x 8 or 1 x 8\"),E(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Rs,p,u)}var TN=N({transform_:Ej});function $j(r,e,t){let o=v(r,\"a\",\"bandPart\");E(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof e==\"number\"?(E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,\"numLower\",\"bandPart\")):(E(e.dtype===\"int32\",()=>\"bandPart(): numLower's dtype must be an int32.\"),i=lo(Tl(e,0),s,Hu(e,s))),typeof t==\"number\"?(E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),E(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,\"numUpper\",\"bandPart\")):(E(t.dtype===\"int32\",()=>\"bandPart(): numUpper's dtype must be an int32.\"),p=lo(Tl(t,0),a,Hu(t,a)));let u=W(cu(0,s,1,\"int32\"),[-1,1]),c=cu(0,a,1,\"int32\"),l=Te(u,c),m=Uu(ac(l,i),Id(l,pr(p))),d=Gr([s,a],o.dtype);return W(vr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var _N=N({bandPart_:$j});function Rj(r){let e;if(Array.isArray(r)){e=!1,E(r!=null&&r.length>0,()=>\"Gram-Schmidt process: input must not be null, undefined, or empty\");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=li(r,r.shape[0],0).map(n=>cc(n,[0]));E(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return $N(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$N(p,e);n.push(u),s.push(c)});let a=W(vr(n,0),r.shape),i=W(vr(s,0),r.shape);return[a,i]}}function $N(r,e=!1){return T.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=Cd(t),s=Ur(r),a=mu([[1]],[1,1]),i=Ur(a),p=t>=o?o:t;for(let u=0;u{let d=Xe(s,[u,u],[t-u,1]),f=Vu(d),h=Xe(s,[u,u],[1,1]),g=lo(Wu(h,0),mu([[-1]]),mu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=yt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=pr(je(Ze(g,x),f)),S=Xe(s,[u,0],[t-u,o]),k=se(C,i),_=mc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=yt([Xe(s,[0,0],[u,o]),D],0)}let $=mc(k),R=Xe(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),$));else{let D=Te(R,Ze(Ze(R,i),$));n=yt([Xe(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!e&&t>o&&(n=Xe(n,[0,0],[t,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var RN=N({qr_:Dj});var $t;(function(r){r[r.NONE=0]=\"NONE\",r[r.MEAN=1]=\"MEAN\",r[r.SUM=2]=\"SUM\",r[r.SUM_BY_NONZERO_WEIGHTS=3]=\"SUM_BY_NONZERO_WEIGHTS\"})($t||($t={}));function Aj(r,e,t=$t.SUM_BY_NONZERO_WEIGHTS){let o=v(r,\"losses\",\"computeWeightedLoss\"),n=null;e!=null&&(n=v(e,\"weights\",\"computeWeightedLoss\"));let s=n==null?o:se(o,n);if(t===$t.NONE)return s;if(t===$t.SUM)return ot(s);if(t===$t.MEAN){if(n==null)return Gu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(t===$t.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=Ue(ot(Fd(a,ke(0))),\"float32\");return je(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var cr=N({computeWeightedLoss_:Aj});function Fj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"absoluteDifference\"),s=v(e,\"predictions\",\"absoluteDifference\"),a=null;t!=null&&(a=v(t,\"weights\",\"absoluteDifference\")),xt(n.shape,s.shape,\"Error in absoluteDifference: \");let i=Qt(Te(n,s));return cr(i,a,o)}var DN=N({absoluteDifference_:Fj});function Pj(r,e,t,o,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"cosineDistance\"),a=v(e,\"predictions\",\"cosineDistance\"),i=null;o!=null&&(i=v(o,\"weights\",\"cosineDistance\")),xt(s.shape,a.shape,\"Error in cosineDistance: \");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return cr(u,i,n)}var AN=N({cosineDistance_:Pj});function Oj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"hingeLoss\"),s=v(e,\"predictions\",\"hingeLoss\"),a=null;t!=null&&(a=v(t,\"weights\",\"hingeLoss\")),xt(n.shape,s.shape,\"Error in hingeLoss: \");let i=ke(1);n=Te(se(ke(2),n),i);let p=lu(Te(i,se(n,s)));return cr(p,a,o)}var FN=N({hingeLoss_:Oj});function Mj(r,e,t,o=1,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"huberLoss\"),a=v(e,\"predictions\",\"huberLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"huberLoss\")),xt(s.shape,a.shape,\"Error in huberLoss: \");let p=ke(o),u=Qt(Te(a,s)),c=Hu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var PN=N({huberLoss_:Mj});function Lj(r,e,t,o=1e-7,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"labels\",\"logLoss\"),a=v(e,\"predictions\",\"logLoss\"),i=null;t!=null&&(i=v(t,\"weights\",\"logLoss\")),xt(s.shape,a.shape,\"Error in logLoss: \");let p=ke(1),u=ke(o),c=pr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var ON=N({logLoss_:Lj});function Bj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,\"labels\",\"meanSquaredError\"),s=v(e,\"predictions\",\"meanSquaredError\"),a=null;t!=null&&(a=v(t,\"weights\",\"meanSquaredError\")),xt(n.shape,s.shape,\"Error in meanSquaredError: \");let i=Kd(n,s);return cr(i,a,o)}var MN=N({meanSquaredError_:Bj});function zj(r,e){let t=v(r,\"labels\",\"sigmoidCrossEntropyWithLogits\"),o=v(e,\"logits\",\"sigmoidCrossEntropyWithLogits\");xt(t.shape,o.shape,\"Error in sigmoidCrossEntropyWithLogits: \");let n=lu(o),s=se(o,t),a=kd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Vj(r,e,t,o=0,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"multiClassLabels\",\"sigmoidCrossEntropy\"),a=v(e,\"logits\",\"sigmoidCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"sigmoidCrossEntropy\")),xt(s.shape,a.shape,\"Error in sigmoidCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(.5);s=Ce(se(s,Te(c,u)),se(l,u))}let p=zj(s,a);return cr(p,i,n)}var LN=N({sigmoidCrossEntropy_:Vj});function Wj(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Ir((n,s,a)=>{let p=_d(s,[t],!0),u=Te(Ue(s,\"float32\"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[t]);return[se(W(d,x),Te(Ue(h,\"float32\"),_o(g))),se(W(d,x),Te(_o(g),Ue(h,\"float32\")))]}}})(r,e)}function Uj(r,e,t,o=0,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,\"onehotLabels\",\"softmaxCrossEntropy\"),a=v(e,\"logits\",\"softmaxCrossEntropy\"),i=null;if(t!=null&&(i=v(t,\"weights\",\"softmaxCrossEntropy\")),xt(s.shape,a.shape,\"Error in softmaxCrossEntropy: \"),o>0){let u=ke(o),c=ke(1),l=ke(s.shape[1]);s=Ce(se(s,Te(c,u)),je(u,l))}let p=Wj(s,a);return cr(p,i,n)}var BN=N({softmaxCrossEntropy_:Uj});function Gj(r,e,t,o){let n=v(r,\"indices\",\"sparseFillEmptyRows\",\"int32\"),s=v(e,\"values\",\"sparseFillEmptyRows\"),a=v(t,\"denseShape\",\"sparseFillEmptyRows\",\"int32\"),i=v(o,\"defaultValue\",\"sparseFillEmptyRows\",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(Ki,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var zN=N({sparseFillEmptyRows_:Gj});function Hj(r,e,t){let o=v(r,\"inputIndices\",\"sparseReshape\",\"int32\"),n=v(e,\"inputShape\",\"sparseReshape\",\"int32\"),s=v(t,\"newShape\",\"sparseReshape\",\"int32\");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape\n ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(ei,a);return{outputIndices:i[0],outputShape:i[1]}}var VN=N({sparseReshape_:Hj});function Kj(r,e,t){let o=v(r,\"data\",\"sparseSegmentMean\"),n=v(e,\"indices\",\"sparseSegmentMean\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentMean\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ya,a)}var WN=N({sparseSegmentMean_:Kj});function qj(r,e,t){let o=v(r,\"data\",\"sparseSegmentSum\"),n=v(e,\"indices\",\"sparseSegmentSum\",\"int32\"),s=v(t,\"segmentIds\",\"sparseSegmentSum\",\"int32\");if(o.rank<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape\n ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape\n ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ba,a)}var UN=N({sparseSegmentSum_:qj});function jj(r,e,t,o,n,s,a,i){let p=v(r,\"data\",\"stringNGrams\",\"string\");if(p.dtype!==\"string\")throw new Error(\"Data must be of datatype string\");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,\"dataSplits\",\"stringNGrams\");if(u.dtype!==\"int32\")throw new Error(\"Data splits must be of datatype int32\");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=T.runKernel(Ca,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GN=N({stringNGrams_:jj});function Xj(r,e,t=!0){let o=v(r,\"input\",\"stringSplit\",\"string\"),n=v(e,\"delimiter\",\"stringSplit\",\"string\");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=T.runKernel(ji,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HN=N({stringSplit_:Xj});function Yj(r,e){let t=v(r,\"input\",\"stringToHashBucketFast\",\"string\"),o={numBuckets:e};if(e<=0)throw new Error(\"Number of buckets must be at least 1\");let n={input:t};return T.runKernel(Xi,n,o)}var KN=N({stringToHashBucketFast_:Yj});function Qj(r,e,t,o=!0){let n=v(r,\"input\",\"staticRegexReplace\",\"string\"),s={pattern:e,rewrite:t,replaceGlobal:o};return T.runKernel(Ru,{x:n},s)}var qN=N({staticRegexReplace_:Qj});var Zj={fft:uc,ifft:ju,rfft:pc,irfft:Hd},Jj={hammingWindow:pN,hannWindow:Qd,frame:Zd,stft:cN},eX={flipLeftRight:mN,grayscaleToRGB:dN,resizeNearestNeighbor:kN,resizeBilinear:vN,rgbToGrayscale:fN,rotateWithOffset:hN,cropAndResize:lN,nonMaxSuppression:gN,nonMaxSuppressionAsync:bN,nonMaxSuppressionWithScore:CN,nonMaxSuppressionWithScoreAsync:wN,nonMaxSuppressionPadded:SN,nonMaxSuppressionPaddedAsync:IN,threshold:NN,transform:TN},tX={bandPart:_N,gramSchmidt:EN,qr:RN},rX={absoluteDifference:DN,computeWeightedLoss:cr,cosineDistance:AN,hingeLoss:FN,huberLoss:PN,logLoss:ON,meanSquaredError:MN,sigmoidCrossEntropy:LN,softmaxCrossEntropy:BN},oX={sparseFillEmptyRows:zN,sparseReshape:VN,sparseSegmentMean:WN,sparseSegmentSum:UN},nX={stringNGrams:GN,stringSplit:HN,stringToHashBucketFast:KN,staticRegexReplace:qN};var jN={};qe(jN,{Serializable:()=>Rl,SerializationMap:()=>rf,getRegisteredName:()=>aX,registerClass:()=>rS});var sX=new Map,tS=new Map,Rl=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function rS(r,e,t){E(r.className!=null,()=>\"Class being registered does not have the static className property defined.\"),E(typeof r.className==\"string\",()=>\"className is required to be a string, but got type \"+typeof r.className),E(r.className.length>0,()=>\"Class being registered has an empty-string as its className, which is disallowed.\"),typeof e==\"undefined\"&&(e=\"Custom\"),typeof t==\"undefined\"&&(t=r.className);let o=t,n=e+\">\"+o;return rf.register(r),sX.set(n,r),tS.set(r,n),r}function aX(r){return tS.has(r)?tS.get(r):r.className}var kr=class extends Rl{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Ot(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return Vw(e,t)}dispose(){this.iterations_!=null&&Ot(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:\"iter\",tensor:ke(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(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ju=class extends kr{static get className(){return\"Adadelta\"}constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;De(()=>{let c=Ce(se(p,this.rho),se(Zt(i),1-this.rho)),l=se(je(Rr(Ce(u,this.epsilon)),Rr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(Zt(l),1-this.rho));p.assign(c),u.assign(m);let d=Ce(se(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ot(this.accumulatedGrads.map(e=>e.variable)),Ot(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,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};var ep=class extends kr{static get className(){return\"Adagrad\"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>$a(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,Zt(a));i.assign(p);let u=Ce(se(je(a,Rr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ot(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(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};var tp=class extends kr{static get className(){return\"Adam\"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Gt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=Ce(se(l,this.beta2),se(Zt(u),1-this.beta2)),f=je(m,o),h=je(d,n);c.assign(m),l.assign(d);let g=Ce(se(je(f,Ce(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ot(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),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}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)}};var rp=class extends kr{static get className(){return\"Adamax\"}constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Gt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Gt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=se(l,this.beta2),f=Qt(u),h=Ad(d,f);c.assign(m),l.assign(h);let g=Ce(se(je(n,o),je(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(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)}};var mi=class extends kr{static get className(){return\"SGD\"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=T.registeredVariables[o];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=$r(ke(-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)}};var op=class extends mi{static get className(){return\"Momentum\"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ot(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(o=>({originalName:o.name,variable:o.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)}};var np=class extends kr{static get className(){return\"RMSProp\"}constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),e==null)throw new Error(\"learningRate for RMSPropOptimizer must be defined.\")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;De(()=>{let c=Ce(se(p,this.decay),se(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=Ce(se(l,this.decay),se(i,1-this.decay)),d=je(se(i,this.learningRate),Rr(Te(c,Ce(Zt(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let l=Ce(se(p,this.decay),se(Zt(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Rr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ot(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ot(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,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}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)}};var iX=[Ju,ep,tp,rp,op,np,mi];function XN(){for(let r of iX)rS(r)}var di={};qe(di,{CompositeArrayBuffer:()=>ir,browserFiles:()=>QN,browserHTTPRequest:()=>tT,concatenateArrayBuffers:()=>dk,copyModel:()=>Tk,decodeWeights:()=>sd,decodeWeightsStream:()=>ad,encodeWeights:()=>pk,fromMemory:()=>rT,fromMemorySync:()=>uS,getLoadHandlers:()=>xk,getModelArtifactsForJSON:()=>tc,getModelArtifactsForJSONSync:()=>$w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>gk,getWeightSpecs:()=>Sl,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>kk,loadWeights:()=>JN,moveModel:()=>_k,registerLoadRouter:()=>hk,registerSaveRouter:()=>fk,removeModel:()=>Nk,weightsLoaderFactory:()=>aS,withSaveHandler:()=>oT,withSaveHandlerSync:()=>nT});var uX=\"model\",pX=\".json\",cX=\".weights.bin\";function YN(r){return new Promise(e=>setTimeout(e)).then(r)}var dc=class r{constructor(e){if(!A().getBool(\"IS_BROWSER\"))throw new Error(\"browserDownloads() cannot proceed because the current environment is not a browser.\");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=uX),this.modelJsonFileName=e+pX,this.weightDataFileName=e+cX}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=ir.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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}],s=id(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:\"application/json\"})),i=this.modelJsonAnchor==null?document.createElement(\"a\"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await YN(()=>i.dispatchEvent(new MouseEvent(\"click\"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement(\"a\"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await YN(()=>p.dispatchEvent(new MouseEvent(\"click\")))}return{modelArtifactsInfo:va(e)}}}};dc.URL_SCHEME=\"downloads://\";var oS=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=tc(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,a])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Ew(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ew(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},lX=r=>A().getBool(\"IS_BROWSER\")&&!Array.isArray(r)&&r.startsWith(dc.URL_SCHEME)?mX(r.slice(dc.URL_SCHEME.length)):null;qt.registerSaveRouter(lX);function mX(r=\"model\"){return new dc(r)}function QN(r){return new oS(r)}function nS(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){E(p!=null&&Array.isArray(p)&&p.length>0,()=>\"promises must be a none empty array\")}function i(p,u){E(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),E(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function sS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await nS(o,e.onProgress,0,.5)).map(l=>l.arrayBuffer());return e.onProgress==null?await Promise.all(i):await nS(i,e.onProgress,.5,1)}function ZN(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nsS(a,{requestInit:o}))(r,e,t)}function aS(r){return async(e,t=\"\",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x=\"quantization\"in g?g.quantization.dtype:g.dtype,b=si[x]*ze(g.shape),C=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((S,k)=>{S===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(\", \")}. \nManifest JSON has weights with names: ${i.join(\", \")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith(\"/\")?\"\":\"/\")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX=\"application/octet-stream\",fX=\"application/json\",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD=\"POST\",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(E(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=A().platform.fetch,E(e!=null&&e.length>0,()=>\"URL path for http must not be null, undefined or empty.\"),Array.isArray(e)&&E(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||{},this.loadOptions=t}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 o=[{paths:[\"./model.weights.bin\"],weights:e.weightSpecs}],n=id(e,o);if(t.body.append(\"model.json\",new Blob([JSON.stringify(n)],{type:fX}),\"model.json\"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append(\"model.weights.bin\",new Blob([a],{type:dX}),\"model.weights.bin\")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(\".pb\")?a+=\" 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.\":a+=\" Please make sure the server is serving valid JSON for this request.\",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\\/\\//;function hX(r){let e=r.lastIndexOf(\"/\"),t=r.lastIndexOf(\"?\"),o=r.substring(0,e),n=t>e?r.substring(t):\"\";return[o+\"/\",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch==\"undefined\"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(r):(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 Al({modelTopology:r})):(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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(r,e,t){let o=v(r,\"labels\",\"confusionMatrix\"),n=v(e,\"predictions\",\"confusionMatrix\");E(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),E(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),E(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),E(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),E(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=El(Ue(o,\"int32\"),t),a=El(Ue(n,\"int32\"),t),i=mc(s),p=Ze(i,a);return Ue(p,\"int32\")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(r,e=3){if(e>4)throw new Error(\"Cannot construct Tensor with more than 4 channels from pixels.\");if(r==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!=\"undefined\"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!=\"undefined\"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!=\"undefined\"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!=\"undefined\"&&r instanceof ImageBitmap)i=!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 ${r.constructor.name}`);if(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,f,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext(\"2d\").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(sp==null)if(typeof document==\"undefined\")if(typeof OffscreenCanvas!=\"undefined\"&&typeof OffscreenCanvasRenderingContext2D!=\"undefined\")sp=new OffscreenCanvas(1,1).getContext(\"2d\");else throw new Error(\"Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.\");else sp=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*e);for(let h=0;h4||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!==\"float32\"&&r.dtype!==\"int32\")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,\"img\",\"toPixels\");if(!(r instanceof mt)){let u=t;t=Ue(u,\"int32\"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],a=await t.data(),i=t.dtype===\"float32\"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype===\"int32\"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(c[0]=d*i,c[1]=d*i,c[2]=d*i):c[m]=d*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){iT||Xp($u,T.backendName)!=null&&(console.warn(\"tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead.\"),iT=!0),e.width=n,e.height=o;let u=e.getContext(\"2d\"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}function vX(r,e,t){let o=v(r,\"img\",\"draw\");if(!(r instanceof mt)){let a=o;o=Ue(a,\"int32\"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!==\"int32\")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(r,e,t){let o=r.shape.length;E(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),E(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=Vp(0,a,p-1),a}function CT(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function DX(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{E(a!==-1,()=>\"slice() does not support negative begin indexing.\")});let s;return t==null?s=new Array(n).fill(-1):typeof t==\"number\"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:(E(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function FX(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&a&a-1)throw new Error(\"Multiple ellipses in slice is not allowed.\");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(S&&m.strides[C]<=0)throw Error(\"only stride 1 allowed on non-range indexing.\");h=h&&m.strides[C]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var OX=\"4.17.0\";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!=\"undefined\"?requestAnimationFrame:typeof setImmediate!=\"undefined\"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(r,e){let t=r[0].length;r.forEach((n,s)=>{E(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),E(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function BX(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r==\"number\"?r:r[0]),n=e*(typeof r==\"number\"?r:r[1]);return[o,n]}function KX(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s\",d5=/->/g,wT=\",\",ST=\"...\";function f5(r,e){r=r.replace(/\\s/g,\"\");let t=(r.length-r.replace(d5,\"\").length)/lS.length;if(t<1)throw new Error(\"Equations without an arrow are not supported.\");if(t>1)throw new Error(`Equation must contain exactly one arrow (\"${lS}\").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation (\"${ST}\") is not supported yet.`);let s=o.split(wT),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error(\"Support for more than 2 input tensors is not implemented yet.\");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function g5(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function x5(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function b5(r,e){let t=[];for(let o=0;o\"Number of splits must evenly divide the axis.\"),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);E(n<=1,()=>\"There should be only one negative value in split array.\");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}E(r.shape[t]===e.reduce((a,i)=>a+i),()=>\"The sum of sizes must match the size of the axis dimension.\"),o=e}return o}function w5(r){return`Received SparseTensor with denseShape[0] = 0 but\n indices.shape[0] = ${r}`}function S5(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function I5(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function v5(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function k5(r,e){return`size ${r} must be non-negative, not ${e}`}function N5(){return\"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero\"}function T5(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t}\n dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function _5(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function E5(){return\"segment ids must be >= 0\"}function $5(){return\"segment ids are not increasing\"}function R5(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function D5(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var mS={};qe(mS,{collectGatherOpShapeInfo:()=>P5,computeOutShape:()=>F5,segOpComputeOptimalWindowSize:()=>A5});function A5(r,e){let t=!1,o;for(r<=uf?(o=r,t=!0):o=Up(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Up(r,o+1);return o}function F5(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) (\n ${s}).`);if(tJp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function M5(r){return r.map(e=>Ji(e))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Jd,nonMaxSuppressionV4Impl:()=>ef,nonMaxSuppressionV5Impl:()=>tf,whereImpl:()=>Xd});XN();var L5=A();L5.registerFlag(\"KEEP_INTERMEDIATE_TENSORS\",()=>!1,r=>{r&&console.warn(\"Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.\")});var Dr;(function(r){r[r.DT_INVALID=0]=\"DT_INVALID\",r[r.DT_FLOAT=1]=\"DT_FLOAT\",r[r.DT_DOUBLE=2]=\"DT_DOUBLE\",r[r.DT_INT32=3]=\"DT_INT32\",r[r.DT_UINT8=4]=\"DT_UINT8\",r[r.DT_INT16=5]=\"DT_INT16\",r[r.DT_INT8=6]=\"DT_INT8\",r[r.DT_STRING=7]=\"DT_STRING\",r[r.DT_COMPLEX64=8]=\"DT_COMPLEX64\",r[r.DT_INT64=9]=\"DT_INT64\",r[r.DT_BOOL=10]=\"DT_BOOL\",r[r.DT_QINT8=11]=\"DT_QINT8\",r[r.DT_QUINT8=12]=\"DT_QUINT8\",r[r.DT_QINT32=13]=\"DT_QINT32\",r[r.DT_BFLOAT16=14]=\"DT_BFLOAT16\",r[r.DT_QINT16=15]=\"DT_QINT16\",r[r.DT_QUINT16=16]=\"DT_QUINT16\",r[r.DT_UINT16=17]=\"DT_UINT16\",r[r.DT_COMPLEX128=18]=\"DT_COMPLEX128\",r[r.DT_HALF=19]=\"DT_HALF\",r[r.DT_RESOURCE=20]=\"DT_RESOURCE\",r[r.DT_VARIANT=21]=\"DT_VARIANT\",r[r.DT_UINT32=22]=\"DT_UINT32\",r[r.DT_UINT64=23]=\"DT_UINT64\",r[r.DT_FLOAT_REF=101]=\"DT_FLOAT_REF\",r[r.DT_DOUBLE_REF=102]=\"DT_DOUBLE_REF\",r[r.DT_INT32_REF=103]=\"DT_INT32_REF\",r[r.DT_UINT8_REF=104]=\"DT_UINT8_REF\",r[r.DT_INT16_REF=105]=\"DT_INT16_REF\",r[r.DT_INT8_REF=106]=\"DT_INT8_REF\",r[r.DT_STRING_REF=107]=\"DT_STRING_REF\",r[r.DT_COMPLEX64_REF=108]=\"DT_COMPLEX64_REF\",r[r.DT_INT64_REF=109]=\"DT_INT64_REF\",r[r.DT_BOOL_REF=110]=\"DT_BOOL_REF\",r[r.DT_QINT8_REF=111]=\"DT_QINT8_REF\",r[r.DT_QUINT8_REF=112]=\"DT_QUINT8_REF\",r[r.DT_QINT32_REF=113]=\"DT_QINT32_REF\",r[r.DT_BFLOAT16_REF=114]=\"DT_BFLOAT16_REF\",r[r.DT_QINT16_REF=115]=\"DT_QINT16_REF\",r[r.DT_QUINT16_REF=116]=\"DT_QUINT16_REF\",r[r.DT_UINT16_REF=117]=\"DT_UINT16_REF\",r[r.DT_COMPLEX128_REF=118]=\"DT_COMPLEX128_REF\",r[r.DT_HALF_REF=119]=\"DT_HALF_REF\",r[r.DT_RESOURCE_REF=120]=\"DT_RESOURCE_REF\",r[r.DT_VARIANT_REF=121]=\"DT_VARIANT_REF\",r[r.DT_UINT32_REF=122]=\"DT_UINT32_REF\",r[r.DT_UINT64_REF=123]=\"DT_UINT64_REF\"})(Dr||(Dr={}));var IT;(function(r){let e;(function(t){t[t.LEGACY=0]=\"LEGACY\",t[t.V1=1]=\"V1\",t[t.V2=2]=\"V2\"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(IT||(IT={}));var fS={};function z5(r,e){let t={tfOpName:r,category:\"custom\",inputs:[],attrs:[],customExecutor:e};fS[r]=t}function pf(r){return fS[r]}function V5(r){delete fS[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd,u=i<0?e.inputNames.length+i:i;if(s.type===\"tensor\")return Bt(e.inputNames[u],t,o,n);if(s.type===\"tensors\"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!==\"NoOp\"}).map(f=>Bt(f,t,o,n))}let c=Bt(e.inputNames[u],t,o,n),l=c.dataSync();return s.type===\"number\"?l[0]:y.toNestedArray(c.shape,l)}let a=e.attrParams[r];return a&&a.value}function Bt(r,e,t,o){let[n,s]=Nr(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[cf(n,i)]);return a!==void 0?e[cf(n,a)][s]:void 0}function hS(r,e,t){return e[cf(r,t.currentContextId)]}function Ls(r,e){let[t,o,n]=Nr(r,e);return[cf(t,e&&e.currentContextId),o,n]}function cf(r,e){return e?`${r}-${e}`:r}function Nr(r,e){if(r===\"\")return[\"\",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(\":\"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Pl(r,e,t){let o=I(\"pad\",r,e,t);if(o===\"explicit\"){o=I(\"explicitPaddings\",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function Bs(r){return r.kept?r:Ur(r)}var gS={};qe(gS,{json:()=>W5});var W5=[{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}]}];var xS={};qe(xS,{json:()=>U5});var U5=[{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:\"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}]},{tfOpName:\"IsNan\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsFinite\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"IsInf\",category:\"basic_math\",inputs:[{start:0,name:\"x\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]}];var yS={};qe(yS,{json:()=>G5});var G5=[{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:\"TensorListConcatV2\",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\"}]},{tfOpName:\"TensorListLength\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"}]},{tfOpName:\"TensorListResize\",category:\"control\",inputs:[{start:0,name:\"tensorListId\",type:\"tensor\"},{start:1,name:\"size\",type:\"number\"}]}];var bS={};qe(bS,{json:()=>H5});var H5=[{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\",defaultValue:.2}]},{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\"}]}];var CS={};qe(CS,{json:()=>K5});var K5=[{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\"}]},{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:\"RandomStandardNormal\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{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:\"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:\"RandomUniformInt\",category:\"creation\",inputs:[{start:0,name:\"shape\",type:\"number[]\"}],attrs:[{tfName:\"minval\",name:\"minval\",type:\"number\"},{tfName:\"maxval\",name:\"maxval\",type:\"number\"},{tfName:\"seed\",name:\"seed\",type:\"number\",defaultValue:0},{tfName:\"seed2\",name:\"seed2\",type:\"number\",defaultValue:0,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\"}]}];var wS={};qe(wS,{json:()=>q5});var q5=[{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}]}];var SS={};qe(SS,{json:()=>j5});var j5=[{tfOpName:\"LowerBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{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:\"UpperBound\",category:\"evaluation\",inputs:[{start:0,name:\"sortedSequence\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"}]},{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\"}]}];var IS={};qe(IS,{json:()=>X5});var X5=[{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\"}]}];var vS={};qe(vS,{json:()=>Y5});var Y5=[{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}]},{tfOpName:\"LookupTableSize\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"LookupTableSizeV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"}]},{tfOpName:\"InitializeTable\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]},{tfOpName:\"InitializeTableV2\",category:\"hash_table\",inputs:[{start:0,name:\"tableHandle\",type:\"tensor\"},{start:1,name:\"keys\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var kS={};qe(kS,{json:()=>Q5});var Q5=[{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\"}]},{tfOpName:\"ImageProjectiveTransformV3\",category:\"image\",inputs:[{start:0,name:\"images\",type:\"tensor\"},{start:1,name:\"transforms\",type:\"tensor\"},{start:2,name:\"outputShape\",type:\"number[]\"},{start:3,name:\"fillValue\",type:\"number\"}],attrs:[{tfName:\"interpolation\",name:\"interpolation\",type:\"string\"},{tfName:\"fill_mode\",name:\"fillMode\",type:\"string\"}]}];var NS={};qe(NS,{json:()=>Z5});var Z5=[{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}]},{tfOpName:\"BitwiseAnd\",category:\"logical\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"y\",type:\"tensor\"}]}];var TS={};qe(TS,{json:()=>J5});var J5=[{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:\"leakyrelu_alpha\",name:\"leakyreluAlpha\",type:\"number\",defaultValue:.2},{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}]},{tfOpName:\"Einsum\",category:\"matrices\",inputs:[{start:0,end:0,name:\"tensors\",type:\"tensors\"}],attrs:[{tfName:\"equation\",name:\"equation\",type:\"string\"},{tfName:\"N\",name:\"n\",type:\"number\",defaultValue:2},{tfName:\"T\",name:\"dtype\",type:\"dtype\"}]},{tfOpName:\"MatrixBandPart\",category:\"matrices\",inputs:[{start:0,name:\"a\",type:\"tensor\"},{start:1,name:\"numLower\",type:\"tensor\"},{start:1,name:\"numUpper\",type:\"tensor\"}]}];var _S={};qe(_S,{json:()=>e8});var e8=[{tfOpName:\"EuclideanNorm\",category:\"normalization\",inputs:[{start:0,name:\"x\",type:\"tensor\"},{start:1,name:\"axis\",type:\"number[]\"}],attrs:[{tfName:\"keep_dims\",name:\"keepDims\",type:\"bool\",defaultValue:!1}]},{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\"}]}];var ES={};qe(ES,{json:()=>t8});var t8=[{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\"},{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"Cumprod\",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\"}]},{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\"}]}];var $S={};qe($S,{json:()=>r8});var r8=[{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}]},{tfOpName:\"TensorScatterUpdate\",category:\"slice_join\",inputs:[{start:0,name:\"tensor\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"values\",type:\"tensor\"}]}];var RS={};qe(RS,{json:()=>o8});var o8=[{tfOpName:\"SparseFillEmptyRows\",category:\"sparse\",inputs:[{start:0,name:\"indices\",type:\"tensor\"},{start:1,name:\"values\",type:\"tensor\"},{start:2,name:\"denseShape\",type:\"tensor\"},{start:3,name:\"defaultValue\",type:\"tensor\"}]},{tfOpName:\"SparseReshape\",category:\"sparse\",inputs:[{start:0,name:\"inputIndices\",type:\"tensor\"},{start:1,name:\"inputShape\",type:\"tensor\"},{start:2,name:\"newShape\",type:\"tensor\"}],attrs:[{tfName:\"T\",name:\"dtype\",type:\"dtype\",notSupported:!0}]},{tfOpName:\"SparseSegmentMean\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]},{tfOpName:\"SparseSegmentSum\",category:\"sparse\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"indices\",type:\"tensor\"},{start:2,name:\"segmentIds\",type:\"tensor\"}]}];var DS={};qe(DS,{json:()=>n8});var n8=[{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}]}];var AS={};qe(AS,{json:()=>s8});var s8=[{tfOpName:\"StaticRegexReplace\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"pattern\",name:\"pattern\",type:\"string\"},{tfName:\"rewrite\",name:\"rewrite\",type:\"string\"},{tfName:\"replace_global\",name:\"replaceGlobal\",type:\"bool\"}]},{tfOpName:\"StringNGrams\",category:\"string\",inputs:[{start:0,name:\"data\",type:\"tensor\"},{start:1,name:\"dataSplits\",type:\"tensor\"}],attrs:[{tfName:\"separator\",name:\"separator\",type:\"string\"},{tfName:\"ngram_widths\",name:\"nGramWidths\",type:\"number[]\"},{tfName:\"left_pad\",name:\"leftPad\",type:\"string\"},{tfName:\"right_pad\",name:\"rightPad\",type:\"string\"},{tfName:\"pad_width\",name:\"padWidth\",type:\"number\"},{tfName:\"preserve_short_sequences\",name:\"preserveShortSequences\",type:\"bool\"}],outputs:[\"ngrams\",\"ngrams_splits\"]},{tfOpName:\"StringSplit\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"},{start:1,name:\"delimiter\",type:\"tensor\"}],attrs:[{tfName:\"skip_empty\",name:\"skipEmpty\",type:\"bool\"}],outputs:[\"indices\",\"values\",\"shape\"]},{tfOpName:\"StringToHashBucketFast\",category:\"string\",inputs:[{start:0,name:\"input\",type:\"tensor\"}],attrs:[{tfName:\"num_buckets\",name:\"numBuckets\",type:\"number\"}]}];var FS={};qe(FS,{json:()=>a8});var a8=[{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:\"EnsureShape\",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:[]},{tfOpName:\"BroadcastArgs\",category:\"transformation\",inputs:[{start:0,name:\"s0\",type:\"tensor\"},{start:1,name:\"s1\",type:\"tensor\"}],attrs:[]}];var Ol=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,ES,$S,RS,DS,AS,FS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith(\"Placeholder\")?n.push(h[g.name]):g.op===\"Const\"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[C,,S]=Ls(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(S);if(_!==-1){let $=`${C}:${_}`;g.inputNames[b]=$}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=Ls(h),x=i[g];x!=null&&(x.signatureKey=l[h],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=Ls(h),x=i[g];x&&(x.signatureKey=c[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=pf(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith(\"^\")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case\"string\":i=lf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"string[]\":i=yf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number\":i=df(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"number[]\":i=xf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool\":i=mf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"bool[]\":i=Cf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape\":i=gf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"shape[]\":i=bf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype\":i=ff(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"dtype[]\":i=hf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"func\":i=vT(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vT(e.attr,s.tfDeprecatedName,s.defaultValue));break;case\"tensor\":case\"tensors\":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op===\"Const\"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:\"Placeholder\",inputs:[],inputNames:[],category:\"graph\",inputParams:{},attrParams:{dtype:{value:PS(l.type),type:\"dtype\"}},children:[]};d.signatureKey=l.name,a.push(d),s[m]=d}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((d,f)=>{let[h,,g]=Ls(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[f]=C}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,d]=Ls(u[l.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function i8(r){let e=A().global;if(typeof e.atob!=\"undefined\")return e.atob(r);if(typeof Buffer!=\"undefined\")return new Buffer(r,\"base64\").toString();throw new Error(\"Unable to decode base64 in this environment. Missing built-in atob() or Buffer()\")}function kT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):i8(r);return e?t:t.toLowerCase()}function lf(r,e,t,o=!1){let n=r[e];return n!=null?kT(n.s,o):t}function mf(r,e,t){let o=r[e];return o?o.b:t}function df(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n==\"number\"?n:parseInt(n,10)}function PS(r){switch(typeof r==\"string\"&&(r=Dr[r]),r){case Dr.DT_FLOAT:case Dr.DT_HALF:return\"float32\";case Dr.DT_INT32:case Dr.DT_INT64:case Dr.DT_INT8:case Dr.DT_UINT8:return\"int32\";case Dr.DT_BOOL:return\"bool\";case Dr.DT_DOUBLE:return\"float32\";case Dr.DT_STRING:return\"string\";case Dr.DT_COMPLEX64:case Dr.DT_COMPLEX128:return\"complex64\";default:return null}}function vT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ff(r,e,t){let o=r[e];return o&&o.type?PS(o.type):t}function hf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>PS(n)):t}function NT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size==\"number\"?e.size:parseInt(e.size,10)):[]}function gf(r,e,t){let o=r[e];return o&&o.shape?NT(o.shape):t}function xf(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n==\"number\"?n:parseInt(n,10)):t}function yf(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>kT(s,o)):t}function bf(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>NT(n)):t}function Cf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var wf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Bt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Bt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,e,t);if(o.s!=null)return lf(this.node.rawAttrs,e,t);if(o.b!=null)return mf(this.node.rawAttrs,e,t);if(o.shape!=null)return gf(this.node.rawAttrs,e,t);if(o.type!=null)return ff(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,e,t);if(o.list.s!=null)return yf(this.node.rawAttrs,e,t);if(o.list.shape!=null)return bf(this.node.rawAttrs,e,t);if(o.list.b!=null)return Cf(this.node.rawAttrs,e,t);if(o.list.type!=null)return hf(this.node.rawAttrs,e,t)}return t}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>Nw,abs:()=>Qt,acos:()=>Rk,acosh:()=>Dk,add:()=>Ce,addN:()=>Ak,all:()=>Fk,any:()=>Pk,argMax:()=>Ok,argMin:()=>Mk,asin:()=>Lk,asinh:()=>Bk,atan:()=>zk,atan2:()=>Vk,atanh:()=>Wk,avgPool:()=>dd,avgPool3d:()=>Hk,basicLSTMCell:()=>Kk,batchNorm:()=>nu,batchNorm2d:()=>jk,batchNorm3d:()=>Xk,batchNorm4d:()=>Yk,batchToSpaceND:()=>fd,bincount:()=>hd,bitwiseAnd:()=>Qk,booleanMaskAsync:()=>L6,broadcastArgs:()=>Zk,broadcastTo:()=>su,buffer:()=>me,cast:()=>Ue,ceil:()=>Jk,clipByValue:()=>e2,clone:()=>Ur,complex:()=>Er,concat:()=>yt,concat1d:()=>t2,concat2d:()=>r2,concat3d:()=>o2,concat4d:()=>n2,conv1d:()=>s2,conv2d:()=>au,conv2dTranspose:()=>a2,conv3d:()=>i2,conv3dTranspose:()=>p2,cos:()=>c2,cosh:()=>l2,cosineWindow:()=>$l,cumprod:()=>m2,cumsum:()=>d2,denseBincount:()=>f2,depthToSpace:()=>h2,depthwiseConv2d:()=>sc,diag:()=>g2,dilation2d:()=>x2,div:()=>je,divNoNan:()=>b2,dot:()=>C2,dropout:()=>Y6,einsum:()=>iu,elu:()=>bd,enclosingPowerOfTwo:()=>Zw,ensureShape:()=>w2,equal:()=>yd,erf:()=>S2,euclideanNorm:()=>k2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>N2,eye:()=>Cd,fft:()=>uc,fill:()=>$a,floor:()=>wd,floorDiv:()=>md,fused:()=>Jw,gather:()=>Sd,gatherND:()=>j6,greater:()=>Wu,greaterEqual:()=>Id,ifft:()=>ju,imag:()=>pu,image:()=>eX,inTopKAsync:()=>Z6,irfft:()=>Hd,isFinite:()=>T2,isInf:()=>_2,isNaN:()=>E2,leakyRelu:()=>vd,less:()=>Tl,lessEqual:()=>ac,linalg:()=>tX,linspace:()=>$2,localResponseNormalization:()=>R2,log:()=>pi,log1p:()=>kd,logSigmoid:()=>D2,logSoftmax:()=>A2,logSumExp:()=>_d,logicalAnd:()=>Uu,logicalNot:()=>Ed,logicalOr:()=>$d,logicalXor:()=>F2,losses:()=>rX,lowerBound:()=>P2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Dd,maxPool3d:()=>O2,maxPoolWithArgmax:()=>M2,maximum:()=>Ad,mean:()=>Gu,meshgrid:()=>L2,min:()=>Nl,minimum:()=>Hu,mirrorPad:()=>B2,mod:()=>z2,moments:()=>V2,movingAverage:()=>V6,mul:()=>se,multiRNNCell:()=>W2,multinomial:()=>U2,neg:()=>pr,norm:()=>Vu,notEqual:()=>Fd,oneHot:()=>El,ones:()=>Da,onesLike:()=>G2,op:()=>N,outerProduct:()=>H2,pad:()=>Aa,pad1d:()=>K2,pad2d:()=>q2,pad3d:()=>j2,pad4d:()=>X2,pool:()=>Y2,pow:()=>ui,prelu:()=>Od,print:()=>ld,prod:()=>Q2,raggedGather:()=>Z2,raggedRange:()=>J2,raggedTensorToTensor:()=>e1,rand:()=>t1,randomGamma:()=>S1,randomNormal:()=>Wd,randomStandardNormal:()=>I1,randomUniform:()=>ic,randomUniformInt:()=>v1,range:()=>cu,real:()=>ci,reciprocal:()=>k1,relu:()=>lu,relu6:()=>Ud,reshape:()=>W,reverse:()=>mo,reverse1d:()=>N1,reverse2d:()=>T1,reverse3d:()=>_1,reverse4d:()=>E1,rfft:()=>pc,round:()=>Gd,rsqrt:()=>$1,scalar:()=>ke,scatterND:()=>U6,searchSorted:()=>_l,selu:()=>R1,separableConv2d:()=>D1,setdiff1dAsync:()=>A1,sigmoid:()=>Ea,sign:()=>F1,signal:()=>Jj,sin:()=>P1,sinh:()=>O1,slice:()=>Xe,slice1d:()=>M1,slice2d:()=>L1,slice3d:()=>B1,slice4d:()=>z1,softmax:()=>V1,softplus:()=>Td,spaceToBatchND:()=>Pd,sparse:()=>oX,sparseToDense:()=>K6,spectral:()=>Zj,split:()=>li,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Kd,squeeze:()=>cc,stack:()=>vr,step:()=>qd,stridedSlice:()=>W1,string:()=>nX,sub:()=>Te,sum:()=>ot,tan:()=>U1,tanh:()=>kl,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>mu,tensor3d:()=>jd,tensor4d:()=>G1,tensor5d:()=>H1,tensor6d:()=>K1,tensorScatterUpdate:()=>j1,tile:()=>uu,topk:()=>X1,transpose:()=>mc,truncatedNormal:()=>Y1,unique:()=>Q1,unsortedSegmentSum:()=>Z1,unstack:()=>fo,upperBound:()=>J1,variable:()=>eN,where:()=>lo,whereAsync:()=>Yd,zeros:()=>Gr,zerosLike:()=>Gt});var TT=(r,e,t,o=Je)=>{switch(r.op){case\"BiasAdd\":case\"AddV2\":case\"Add\":return[o.add(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"AddN\":return[o.addN(I(\"tensors\",r,e,t))];case\"FloorMod\":case\"Mod\":return[o.mod(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Mul\":return[o.mul(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"RealDiv\":case\"Div\":return[o.div(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"DivNoNan\":return[o.divNoNan(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"FloorDiv\":return[o.floorDiv(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Sub\":return[o.sub(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Minimum\":return[o.minimum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Maximum\":return[o.maximum(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Pow\":return[o.pow(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"SquaredDifference\":return[o.squaredDifference(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var _T=(r,e,t,o=Je)=>{switch(r.op){case\"Abs\":case\"ComplexAbs\":return[o.abs(I(\"x\",r,e,t))];case\"Acos\":return[o.acos(I(\"x\",r,e,t))];case\"Acosh\":return[o.acosh(I(\"x\",r,e,t))];case\"Asin\":return[o.asin(I(\"x\",r,e,t))];case\"Asinh\":return[o.asinh(I(\"x\",r,e,t))];case\"Atan\":return[o.atan(I(\"x\",r,e,t))];case\"Atan2\":return[o.atan2(I(\"x\",r,e,t),I(\"y\",r,e,t))];case\"Atanh\":return[o.atanh(I(\"x\",r,e,t))];case\"Ceil\":return[o.ceil(I(\"x\",r,e,t))];case\"Complex\":return[o.complex(I(\"real\",r,e,t),I(\"imag\",r,e,t))];case\"Cos\":return[o.cos(I(\"x\",r,e,t))];case\"Cosh\":return[o.cosh(I(\"x\",r,e,t))];case\"Elu\":return[o.elu(I(\"x\",r,e,t))];case\"Erf\":return[o.erf(I(\"x\",r,e,t))];case\"Exp\":return[o.exp(I(\"x\",r,e,t))];case\"Expm1\":return[o.expm1(I(\"x\",r,e,t))];case\"Floor\":return[o.floor(I(\"x\",r,e,t))];case\"Log\":return[o.log(I(\"x\",r,e,t))];case\"Log1p\":return[o.log1p(I(\"x\",r,e,t))];case\"Imag\":return[o.imag(I(\"x\",r,e,t))];case\"Neg\":return[o.neg(I(\"x\",r,e,t))];case\"Reciprocal\":return[o.reciprocal(I(\"x\",r,e,t))];case\"Real\":return[o.real(I(\"x\",r,e,t))];case\"Relu\":return[o.relu(I(\"x\",r,e,t))];case\"Round\":return[o.round(I(\"x\",r,e,t))];case\"Selu\":return[o.selu(I(\"x\",r,e,t))];case\"Sigmoid\":return[o.sigmoid(I(\"x\",r,e,t))];case\"Sin\":return[o.sin(I(\"x\",r,e,t))];case\"Sign\":return[o.sign(I(\"x\",r,e,t))];case\"Sinh\":return[o.sinh(I(\"x\",r,e,t))];case\"Softplus\":return[o.softplus(I(\"x\",r,e,t))];case\"Sqrt\":return[o.sqrt(I(\"x\",r,e,t))];case\"Square\":return[o.square(I(\"x\",r,e,t))];case\"Tanh\":return[o.tanh(I(\"x\",r,e,t))];case\"Tan\":return[o.tan(I(\"x\",r,e,t))];case\"ClipByValue\":return[o.clipByValue(I(\"x\",r,e,t),I(\"clipValueMin\",r,e,t),I(\"clipValueMax\",r,e,t))];case\"Relu6\":return[o.relu6(I(\"x\",r,e,t))];case\"Rsqrt\":return[o.rsqrt(Bt(r.inputNames[0],e,t))];case\"LeakyRelu\":return[o.leakyRelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"Prelu\":return[o.prelu(I(\"x\",r,e,t),I(\"alpha\",r,e,t))];case\"IsNan\":return[o.isNaN(Bt(r.inputNames[0],e,t))];case\"IsInf\":return[o.isInf(Bt(r.inputNames[0],e,t))];case\"IsFinite\":return[o.isFinite(Bt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(r,e,t=\"\"){if(!(typeof r==\"number\"||typeof e==\"number\")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function ET(r){return!(typeof r==\"number\"||r.some(e=>e<0))}function fc(r,e,t){let o=Sf(r,t),n=!ET(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=Sf(s.shape,o)}),!ET(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(r,e){if(typeof r==\"number\")return e;if(typeof e==\"number\")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var If=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),$r(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 o=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n 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),Hr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,$r(t),o.written=!0,this.tensors[e]=o}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((o,n)=>this.write(o,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,fo(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 o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, 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 s=o===0?0:t.size/o,a=[];De(()=>{t=W(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Hr(t,s.shape,\"TensorList shape mismatch: \"),$r(s)}),this.idTensor=ke(0),this.maxNumElements=n,$r(this.idTensor)}copy(){return new r([...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,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Hr(e,this.elementShape,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(s,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 o=fc(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,e,\"TensorList shape mismatch: \"),W(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Hr(e.shape,this.elementShape,\"TensorList shape mismatch: \"),this.maxNumElements===this.size())throw new Error(\"Trying to push element into a full list.\");$r(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}.`);let t=new r([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.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.`);Hr(this.tensors[e].shape,t,\"TensorList shape mismatch: \");let n=fc(this.elementShape,this.tensors,t);return W(this.tensors[e],n)}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.`);Hr(this.elementShape,t.shape,\"TensorList shape mismatch: \"),$r(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Hr(this.elementShape,o,\"TensorList shape mismatch: \"),e=e.slice(0,this.size());let n=fc(this.elementShape,this.tensors,o);return e.length===0?ar([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Hr(this.elementShape,t,\"TensorList shape mismatch: \");let o=fc(this.elementShape,this.tensors,t);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function $T(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Hr(n,e,\"TensorList shape mismatch: \");let s=fo(r);return new hc(s,e,o)}function RT(r,e,t,o){return new hc([],r,e,o)}function DT(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new hc([],t,r.dtype,o),a=fo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function AT(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(r,[1,o,i]);for(let l=0;l{switch(r.op){case\"If\":case\"StatelessIf\":{let o=I(\"thenBranch\",r,e,t),n=I(\"elseBranch\",r,e,t),s=I(\"cond\",r,e,t),a=I(\"args\",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case\"While\":case\"StatelessWhile\":{let o=I(\"body\",r,e,t),n=I(\"cond\",r,e,t),s=I(\"args\",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(d=>d.id);c.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()})}return u}case\"LoopCond\":{let o=I(\"pred\",r,e,t);return[Bs(o)]}case\"Switch\":{let o=I(\"pred\",r,e,t),n=I(\"data\",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case\"Merge\":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case\"Enter\":{let o=I(\"frameName\",r,e,t),n=I(\"tensor\",r,e,t);return t.enterFrame(o),[Bs(n)]}case\"Exit\":{let o=I(\"tensor\",r,e,t);return t.exitFrame(),[Bs(o)]}case\"NextIteration\":{let o=I(\"tensor\",r,e,t);return t.nextIteration(),[Bs(o)]}case\"TensorArrayV3\":{let o=I(\"size\",r,e,t),n=I(\"dtype\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"dynamicSize\",r,e,t),i=I(\"clearAfterRead\",r,e,t),p=I(\"identicalElementShapes\",r,e,t),u=I(\"name\",r,e,t),c=new If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(1)]}case\"TensorArrayWriteV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case\"TensorArrayReadV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"index\",r,e,t);return[t.getTensorArray(o.id).read(n)]}case\"TensorArrayGatherV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"dtype\",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case\"TensorArrayScatterV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case\"TensorArrayConcatV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id),s=I(\"dtype\",r,e,t);return[n.concat(s)]}case\"TensorArraySplitV3\":{let o=I(\"tensorArrayId\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"lengths\",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case\"TensorArraySizeV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return[ke(n.size(),\"int32\")]}case\"TensorArrayCloseV3\":{let o=I(\"tensorArrayId\",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case\"TensorListSetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"tensor\",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case\"TensorListGetItem\":{let o=I(\"tensorListId\",r,e,t),n=I(\"index\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case\"TensorListScatterV2\":case\"TensorListScatter\":{let o=I(\"indices\",r,e,t),n=I(\"tensor\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"numElements\",r,e,t),i=DT(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case\"TensorListReserve\":case\"EmptyTensorList\":{let o=I(\"elementShape\",r,e,t),n=I(\"elementDType\",r,e,t),s;r.op===\"TensorListReserve\"?s=\"numElements\":s=\"maxNumElements\";let a=I(s,r,e,t),i=r.op===\"TensorListReserve\"?-1:a,p=RT(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case\"TensorListGather\":{let o=I(\"tensorListId\",r,e,t),n=I(\"indices\",r,e,t),s=I(\"elementShape\",r,e,t),a=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case\"TensorListStack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=I(\"numElements\",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case\"TensorListFromTensor\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t),a=$T(o,n,s);return t.addTensorList(a),[a.idTensor]}case\"TensorListConcat\":case\"TensorListConcatV2\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id),s=I(\"dtype\",r,e,t),a=I(\"elementShape\",r,e,t);return[n.concat(s,a)]}case\"TensorListPushBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"tensor\",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case\"TensorListPopBack\":{let o=I(\"tensorListId\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"elementDType\",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case\"TensorListSplit\":{let o=I(\"tensor\",r,e,t),n=I(\"elementShape\",r,e,t),s=I(\"lengths\",r,e,t),a=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case\"TensorListLength\":{let o=I(\"tensorListId\",r,e,t),n=t.getTensorList(o.id);return[ke(n.size(),\"int32\")]}case\"TensorListResize\":{let o=I(\"tensorListId\",r,e,t),n=I(\"size\",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PT(r,e,t){let[o,n]=I(\"fusedOps\",r,e,t),s=o===\"biasadd\",a=!s,i=n===\"prelu\",p=o===\"fusedbatchnorm\",u=I(\"numArgs\",r,e,t);if(s){if(i&&u!==2)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&s&&u!==1)throw new Error(\"FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.\")}if(p)throw new Error(\"FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported\");let c=I(\"strides\",r,e,t),l=Pl(r,e,t),m=I(\"dataFormat\",r,e,t).toUpperCase(),d=I(\"dilations\",r,e,t),[f,h]=I(\"args\",r,e,t);a&&(h=f,f=void 0);let g=I(\"leakyreluAlpha\",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var OT=(r,e,t,o=Je)=>{switch(r.op){case\"Conv1D\":{let n=I(\"stride\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilation\",r,e,t);return[o.conv1d(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,s,a,i)]}case\"Conv2D\":{let n=I(\"strides\",r,e,t),s=Pl(r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case\"_FusedConv2D\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PT(r,e,t);return[o.fused.conv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"FusedDepthwiseConv2dNative\":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PT(r,e,t);return[o.fused.depthwiseConv2d({x:I(\"x\",r,e,t),filter:I(\"filter\",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case\"Conv2DBackpropInput\":case\"Conv2dTranspose\":{let n=I(\"outputShape\",r,e,t),s=I(\"strides\",r,e,t),a=Pl(r,e,t);return[o.conv2dTranspose(I(\"x\",r,e,t),I(\"filter\",r,e,t),n,[s[1],s[2]],a)]}case\"DepthwiseConv2dNative\":case\"DepthwiseConv2d\":{let n=I(\"strides\",r,e,t),s=Pl(r,e,t),a=I(\"dilations\",r,e,t),i=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthwiseConv2d(I(\"input\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case\"Conv3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dataFormat\",r,e,t).toUpperCase(),i=I(\"dilations\",r,e,t);return[o.conv3d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case\"AvgPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPool\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case\"MaxPoolWithArgmax\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t),i=I(\"includeBatchInIndex\",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I(\"x\",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case\"AvgPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.avgPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"MaxPool3D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"kernelSize\",r,e,t);return[o.maxPool3d(I(\"x\",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case\"Dilation2D\":{let n=I(\"strides\",r,e,t),s=I(\"pad\",r,e,t),a=I(\"dilations\",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I(\"x\",r,e,t),I(\"filter\",r,e,t),[i,p],s,[u,c],\"NHWC\")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,e,t,o=Je)=>{switch(r.op){case\"Fill\":{let n=I(\"shape\",r,e,t),s=I(\"dtype\",r,e,t),a=I(\"value\",r,e,t);return[o.fill(n,a,s)]}case\"LinSpace\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"num\",r,e,t);return[o.linspace(n,s,a)]}case\"Multinomial\":{let n=I(\"logits\",r,e,t),s=I(\"numSamples\",r,e,t),a=I(\"seed\",r,e,t);return[o.multinomial(n,s,a)]}case\"OneHot\":{let n=I(\"indices\",r,e,t),s=I(\"depth\",r,e,t),a=I(\"onValue\",r,e,t),i=I(\"offValue\",r,e,t),p=I(\"dtype\",r,e,t);return[o.oneHot(n,s,a,i,p)]}case\"Ones\":return[o.ones(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"OnesLike\":return[o.onesLike(I(\"x\",r,e,t))];case\"RandomStandardNormal\":return[o.randomStandardNormal(I(\"shape\",r,e,t),I(\"dtype\",r,e,t),I(\"seed\",r,e,t))];case\"RandomUniform\":return[o.randomUniform(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"dtype\",r,e,t))];case\"RandomUniformInt\":return[o.randomUniformInt(I(\"shape\",r,e,t),I(\"minval\",r,e,t),I(\"maxval\",r,e,t),I(\"seed\",r,e,t))];case\"Range\":{let n=I(\"start\",r,e,t),s=I(\"stop\",r,e,t),a=I(\"step\",r,e,t);return[o.range(n,s,a,I(\"dtype\",r,e,t))]}case\"TruncatedNormal\":{let n=I(\"shape\",r,e,t),s=I(\"mean\",r,e,t),a=I(\"stdDev\",r,e,t),i=I(\"seed\",r,e,t);return[o.truncatedNormal(n,s,a,I(\"dtype\",r,e,t),i)]}case\"Zeros\":return[o.zeros(I(\"shape\",r,e,t),I(\"dtype\",r,e,t))];case\"ZerosLike\":return[o.zerosLike(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,e,t){let o=I(\"boxes\",r,e,t),n=I(\"scores\",r,e,t),s=I(\"maxOutputSize\",r,e,t),a=I(\"iouThreshold\",r,e,t),i=I(\"scoreThreshold\",r,e,t),p=I(\"softNmsSigma\",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var LT=async(r,e,t,o,n=Je)=>{switch(r.op){case\"NonMaxSuppressionV5\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case\"NonMaxSuppressionV4\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=OS(r,e,t),c=I(\"padToMaxOutputSize\",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case\"NonMaxSuppressionV3\":case\"NonMaxSuppressionV2\":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=OS(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case\"Where\":{let s=n.cast(I(\"condition\",r,e,t),\"bool\"),a=[await n.whereAsync(s)];return s.dispose(),a}case\"ListDiff\":return n.setdiff1dAsync(I(\"x\",r,e,t),I(\"y\",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,e,t,o=Je)=>{switch(r.op){case\"LowerBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.lowerBound(n,s)]}case\"TopKV2\":{let n=I(\"x\",r,e,t),s=I(\"k\",r,e,t),a=I(\"sorted\",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case\"UpperBound\":{let n=I(\"sortedSequence\",r,e,t),s=I(\"values\",r,e,t);return[o.upperBound(n,s)]}case\"Unique\":{let n=I(\"x\",r,e,t),s=o.unique(n);return[s.values,s.indices]}case\"UniqueV2\":{let n=I(\"x\",r,e,t),s=I(\"axis\",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,e,t,o=Je)=>{switch(r.op){case\"Const\":return e[r.name];case\"PlaceholderWithDefault\":let n=I(\"default\",r,e,t);return[Bt(r.name,e,t)||n];case\"Placeholder\":return[Bt(r.name,e,t)];case\"Identity\":case\"StopGradient\":case\"FakeQuantWithMinMaxVars\":{let c=I(\"x\",r,e,t);return[Bs(c)]}case\"IdentityN\":return I(\"x\",r,e,t).map(c=>Bs(c));case\"Snapshot\":let s=I(\"x\",r,e,t);return[Bs(s)];case\"Shape\":return[o.tensor1d(I(\"x\",r,e,t).shape,\"int32\")];case\"ShapeN\":return I(\"x\",r,e,t).map(c=>o.tensor1d(c.shape));case\"Size\":return[o.scalar(I(\"x\",r,e,t).size,\"int32\")];case\"Rank\":return[o.scalar(I(\"x\",r,e,t).rank,\"int32\")];case\"NoOp\":return[o.scalar(1)];case\"Print\":let a=I(\"x\",r,e,t),i=I(\"data\",r,e,t),p=I(\"message\",r,e,t),u=I(\"summarize\",r,e,t);console.warn(\"The graph has a tf.print() operation,usually used for debugging, which slows down performance.\"),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),\"int32\")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=fo(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case\"HashTable\":case\"HashTableV2\":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I(\"keyDType\",r,e,t),a=I(\"valueDType\",r,e,t),i=new vf(s,a);return o.addHashTable(r.name,i),[i.handle]}}case\"InitializeTable\":case\"InitializeTableV2\":case\"LookupTableImport\":case\"LookupTableImportV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"values\",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case\"LookupTableFind\":case\"LookupTableFindV2\":{let n=I(\"tableHandle\",r,e,t,o),s=I(\"keys\",r,e,t),a=I(\"defaultValue\",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case\"LookupTableSize\":case\"LookupTableSizeV2\":{let n=I(\"tableHandle\",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,e,t,o=Je)=>{switch(r.op){case\"ResizeBilinear\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case\"ResizeNearestNeighbor\":{let n=I(\"images\",r,e,t),s=I(\"size\",r,e,t),a=I(\"alignCorners\",r,e,t),i=I(\"halfPixelCenters\",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case\"CropAndResize\":{let n=I(\"image\",r,e,t),s=I(\"boxes\",r,e,t),a=I(\"boxInd\",r,e,t),i=I(\"cropSize\",r,e,t),p=I(\"method\",r,e,t),u=I(\"extrapolationValue\",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case\"ImageProjectiveTransformV3\":{let n=I(\"images\",r,e,t),s=I(\"transforms\",r,e,t),a=I(\"outputShape\",r,e,t),i=I(\"fillValue\",r,e,t),p=I(\"interpolation\",r,e,t),u=I(\"fillMode\",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,e,t,o=Je)=>{switch(r.op){case\"Equal\":return[o.equal(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"NotEqual\":return[o.notEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Greater\":return[o.greater(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"GreaterEqual\":return[o.greaterEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Less\":return[o.less(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LessEqual\":return[o.lessEqual(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalAnd\":return[o.logicalAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"LogicalNot\":return[o.logicalNot(I(\"a\",r,e,t))];case\"LogicalOr\":return[o.logicalOr(I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"Select\":case\"SelectV2\":return[o.where(I(\"condition\",r,e,t),I(\"a\",r,e,t),I(\"b\",r,e,t))];case\"BitwiseAnd\":return[o.bitwiseAnd(I(\"a\",r,e,t),I(\"b\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{switch(r.op){case\"BatchMatMul\":case\"BatchMatMulV2\":case\"MatMul\":return[o.matMul(I(\"a\",r,e,t),I(\"b\",r,e,t),I(\"transposeA\",r,e,t),I(\"transposeB\",r,e,t))];case\"Einsum\":return[o.einsum(I(\"equation\",r,e,t),...I(\"tensors\",r,e,t))];case\"Transpose\":return[o.transpose(I(\"x\",r,e,t),I(\"perm\",r,e,t))];case\"_FusedMatMul\":let[n,s]=I(\"fusedOps\",r,e,t),a=n===\"biasadd\",i=s===\"prelu\",p=I(\"numArgs\",r,e,t),u=I(\"leakyreluAlpha\",r,e,t);if(a){if(i&&p!==2)throw new Error(\"Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.\");if(!i&&p!==1)throw new Error(\"Fused MatMul with BiasAdd must have one extra argument: bias.\")}let[c,l]=I(\"args\",r,e,t);return[o.fused.matMul({a:I(\"a\",r,e,t),b:I(\"b\",r,e,t),transposeA:I(\"transposeA\",r,e,t),transposeB:I(\"transposeB\",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case\"MatrixBandPart\":return[o.linalg.bandPart(I(\"a\",r,e,t),I(\"numLower\",r,e,t),I(\"numUpper\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{switch(r.op){case\"EuclideanNorm\":return[o.euclideanNorm(I(\"x\",r,e,t),I(\"axis\",r,e,t),I(\"keepDims\",r,e,t))];case\"FusedBatchNorm\":case\"FusedBatchNormV2\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"FusedBatchNormV3\":return[o.batchNorm(I(\"x\",r,e,t),I(\"mean\",r,e,t),I(\"variance\",r,e,t),I(\"offset\",r,e,t),I(\"scale\",r,e,t),I(\"epsilon\",r,e,t))];case\"LRN\":return[o.localResponseNormalization(I(\"x\",r,e,t),I(\"radius\",r,e,t),I(\"bias\",r,e,t),I(\"alpha\",r,e,t),I(\"beta\",r,e,t))];case\"Softmax\":return[o.softmax(I(\"x\",r,e,t))];case\"LogSoftmax\":return[o.logSoftmax(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{switch(r.op){case\"RaggedGather\":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I(\"paramsNestedSplits\",r,e,t),I(\"paramsDenseValues\",r,e,t),I(\"indices\",r,e,t),I(\"outputRaggedRank\",r,e,t));return n.concat(s)}case\"RaggedRange\":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I(\"starts\",r,e,t),I(\"limits\",r,e,t),I(\"splits\",r,e,t));return[n,s]}case\"RaggedTensorToTensor\":return[o.raggedTensorToTensor(I(\"shape\",r,e,t),I(\"values\",r,e,t),I(\"defaultValue\",r,e,t),I(\"rowPartitionTensors\",r,e,t),I(\"rowPartitionTypes\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var qT=(r,e,t,o=Je)=>{switch(r.op){case\"Max\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.max(I(\"x\",r,e,t),i,p)]}case\"Mean\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.mean(I(\"x\",r,e,t),i,p)]}case\"Min\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.min(I(\"x\",r,e,t),i,p)]}case\"Sum\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.sum(I(\"x\",r,e,t),i,p)]}case\"All\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.all(I(\"x\",r,e,t),i,p)]}case\"Any\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.any(I(\"x\",r,e,t),i,p)]}case\"ArgMax\":{let i=I(\"axis\",r,e,t);return[o.argMax(I(\"x\",r,e,t),i)]}case\"ArgMin\":{let i=I(\"axis\",r,e,t);return[o.argMin(I(\"x\",r,e,t),i)]}case\"Prod\":{let i=I(\"axis\",r,e,t),p=I(\"keepDims\",r,e,t);return[o.prod(I(\"x\",r,e,t),i,p)]}case\"Cumprod\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumprod(I(\"x\",r,e,t),i,p,u)]}case\"Cumsum\":{let i=I(\"axis\",r,e,t),p=I(\"exclusive\",r,e,t),u=I(\"reverse\",r,e,t);return[o.cumsum(I(\"x\",r,e,t),i,p,u)]}case\"Bincount\":let n=I(\"x\",r,e,t),s=I(\"weights\",r,e,t),a=I(\"size\",r,e,t);return[o.bincount(n,s,a)];case\"DenseBincount\":{let i=I(\"x\",r,e,t),p=I(\"weights\",r,e,t),u=I(\"size\",r,e,t),c=I(\"binaryOutput\",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var jT=(r,e,t,o=Je)=>{switch(r.op){case\"ConcatV2\":case\"Concat\":{let n=I(\"n\",r,e,t),s=I(\"axis\",r,e,t),a=I(\"tensors\",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case\"Gather\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gather(n,o.cast(s,\"int32\"),0)]}case\"GatherV2\":{let n=I(\"axis\",r,e,t),s=I(\"batchDims\",r,e,t),a=I(\"x\",r,e,t),i=I(\"indices\",r,e,t);return[o.gather(a,o.cast(i,\"int32\"),n,s)]}case\"Reverse\":{let n=I(\"dims\",r,e,t),s=[];for(let i=0;i{let n=I(\"axis\",r,e,t),s=I(\"tensors\",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=y.arraysEqual(u.shape,a);if(!c&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error(\"the input tensors shape does not match\");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case\"Unpack\":{let n=I(\"axis\",r,e,t),s=I(\"tensor\",r,e,t);return o.unstack(s,n)}case\"Tile\":{let n=I(\"reps\",r,e,t);return[o.tile(I(\"x\",r,e,t),n)]}case\"Split\":case\"SplitV\":{let n=I(\"axis\",r,e,t),s=I(\"numOrSizeSplits\",r,e,t),a=I(\"x\",r,e,t);return o.split(a,s,n)}case\"ScatterNd\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"shape\",r,e,t);return[o.scatterND(n,s,a)]}case\"GatherNd\":{let n=I(\"x\",r,e,t),s=I(\"indices\",r,e,t);return[o.gatherND(n,s)]}case\"SparseToDense\":{let n=I(\"sparseIndices\",r,e,t),s=I(\"outputShape\",r,e,t),a=I(\"sparseValues\",r,e,t),i=I(\"defaultValue\",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case\"TensorScatterUpdate\":{let n=I(\"indices\",r,e,t),s=I(\"values\",r,e,t),a=I(\"tensor\",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{switch(r.op){case\"SparseFillEmptyRows\":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I(\"indices\",r,e,t),I(\"values\",r,e,t),I(\"denseShape\",r,e,t),I(\"defaultValue\",r,e,t));return[n,s,a,i]}case\"SparseReshape\":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I(\"inputIndices\",r,e,t),I(\"inputShape\",r,e,t),I(\"newShape\",r,e,t));return[n,s]}case\"SparseSegmentMean\":return[o.sparse.sparseSegmentMean(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];case\"SparseSegmentSum\":return[o.sparse.sparseSegmentSum(I(\"data\",r,e,t),I(\"indices\",r,e,t),I(\"segmentIds\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var YT=(r,e,t,o=Je)=>{switch(r.op){case\"FFT\":return[o.fft(I(\"x\",r,e,t))];case\"IFFT\":return[o.ifft(I(\"x\",r,e,t))];case\"RFFT\":return[o.rfft(I(\"x\",r,e,t))];case\"IRFFT\":return[o.irfft(I(\"x\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var QT=(r,e,t,o=Je)=>{switch(r.op){case\"StaticRegexReplace\":return[o.string.staticRegexReplace(I(\"input\",r,e,t),I(\"pattern\",r,e,t),I(\"rewrite\",r,e,t),I(\"replaceGlobal\",r,e,t))];case\"StringNGrams\":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I(\"data\",r,e,t),I(\"dataSplits\",r,e,t),I(\"separator\",r,e,t),I(\"nGramWidths\",r,e,t),I(\"leftPad\",r,e,t),I(\"rightPad\",r,e,t),I(\"padWidth\",r,e,t),I(\"preserveShortSequences\",r,e,t));return[n,s]}case\"StringSplit\":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I(\"input\",r,e,t),I(\"delimiter\",r,e,t),I(\"skipEmpty\",r,e,t));return[n,s,a]}case\"StringToHashBucketFast\":return[o.string.stringToHashBucketFast(I(\"input\",r,e,t),I(\"numBuckets\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ZT=(r,e,t,o=Je)=>{switch(r.op){case\"Cast\":return[o.cast(I(\"x\",r,e,t),I(\"dtype\",r,e,t))];case\"ExpandDims\":{let n=I(\"axis\",r,e,t);return[o.expandDims(I(\"x\",r,e,t),n)]}case\"Squeeze\":{let n=I(\"axis\",r,e,t);return[o.squeeze(I(\"x\",r,e,t),n)]}case\"Reshape\":return[o.reshape(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"EnsureShape\":return[o.ensureShape(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"MirrorPad\":return[o.mirrorPad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"mode\",r,e,t))];case\"PadV2\":case\"Pad\":return[o.pad(I(\"x\",r,e,t),I(\"padding\",r,e,t),I(\"constantValue\",r,e,t))];case\"SpaceToBatchND\":{let n=I(\"blockShape\",r,e,t),s=I(\"paddings\",r,e,t);return[o.spaceToBatchND(I(\"x\",r,e,t),n,s)]}case\"BatchToSpaceND\":{let n=I(\"blockShape\",r,e,t),s=I(\"crops\",r,e,t);return[o.batchToSpaceND(I(\"x\",r,e,t),n,s)]}case\"DepthToSpace\":{let n=I(\"blockSize\",r,e,t),s=I(\"dataFormat\",r,e,t).toUpperCase();return[o.depthToSpace(I(\"x\",r,e,t),n,s)]}case\"BroadcastTo\":return[o.broadcastTo(I(\"x\",r,e,t),I(\"shape\",r,e,t))];case\"BroadcastArgs\":return[o.broadcastArgs(I(\"s0\",r,e,t),I(\"s1\",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case\"arithmetic\":return n(()=>TT(a,i,p));case\"basic_math\":return n(()=>_T(a,i,p));case\"control\":return FT(a,i,p);case\"convolution\":return n(()=>OT(a,i,p));case\"creation\":return n(()=>MT(a,i,p));case\"dynamic\":return LT(a,i,p);case\"evaluation\":return n(()=>BT(a,i,p));case\"image\":return n(()=>WT(a,i,p));case\"graph\":return n(()=>zT(a,i,p));case\"logical\":return n(()=>UT(a,i,p));case\"matrices\":return n(()=>GT(a,i,p));case\"normalization\":return n(()=>HT(a,i,p));case\"ragged\":return n(()=>KT(a,i,p));case\"reduction\":return n(()=>qT(a,i,p));case\"slice_join\":return n(()=>jT(a,i,p));case\"sparse\":return n(()=>XT(a,i,p));case\"spectral\":return n(()=>YT(a,i,p));case\"string\":return n(()=>QT(a,i,p));case\"transformation\":return n(()=>ZT(a,i,p));case\"hash_table\":return VT(a,i,p,o);case\"custom\":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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;tt.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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&!u.has(m.name)&&!c.has(m.name)){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),l.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g==\"string\"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i==\"string\"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i==\"string\"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[o].map(n=>n.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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=\",\",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,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(o=>{this._functionExecutorMap[o]=new r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+\"--\"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return $r(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=A().getBool(\"KEEP_INTERMEDIATE_TENSORS\")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(e).map(m=>e[m].id),l=new Set([...u,...c,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!l.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(l),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==null&&!n&&console.warn(\"This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.\");let C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S=\"\";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m=\"\";if(l.node.op===\"Enter\"&&I(\"isConstant\",l.node,n,o)&&([m]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(l.node.name,o));let f=o.currentContext;y.isPromise(d)?c.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op===\"Merge\"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.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 o=e[t],[n]=Nr(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Nr(o);return this.graph.nodes[n]==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=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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]}};var P8=\"?tfjs-format=file\",O8=\"model.json\",Bl=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version=\"n/a\",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return y.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error(\"Model artifacts missing streamWeights function\");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e==\"string\"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof mt?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof mt)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let c=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return c!=null?s[a]=this.resourceIdToCapturedInput[c]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){if(r==null)throw new Error(\"modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model\");e==null&&(e={}),e.fromTFHub&&typeof r==\"string\"&&(r=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(r){if(r==null)throw new Error(\"modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model\");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error(\"modelJSON must be the first element of the array\");if(!n||!(n instanceof ArrayBuffer))throw new Error(\"An ArrayBuffer of weights must be the second element of the array\");if(!(\"modelTopology\"in o))throw new Error(\"Model JSON is missing 'modelTopology'\");if(!(\"weightsManifest\"in o))throw new Error(\"Model JSON is missing 'weightsManifest'\");let s=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if(\"load\"in r)e=r;else if(\"modelTopology\"in r&&\"weightSpecs\"in r&&\"weightData\"in r)e=di.fromMemorySync(r);else throw new Error(\"Unknown model format\");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith(\"/\")||(r=r+\"/\"),`${r}${O8}${P8}`}var z8=\"4.17.0\";function Q(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get(\"IS_NODE\")&&w.warn(`\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,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,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t===\"complex64\"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),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:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.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){Q([e],\"where\");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,\"abs\");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:\"cpu\",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Ht(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,\"complex64\"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,\"float32\",s),imag:t.makeTensorInfo(n.shape,\"float32\",a)},i}var r_={kernelName:Di,backendName:\"cpu\",kernelFunc:Ht};function yc(r,e,t=\"float32\"){if(t===\"complex64\"){let n=yc(r,e,\"float32\"),s=yc(r,e,\"float32\");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function lr(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var o_={kernelName:Co,backendName:\"cpu\",kernelFunc:lr};function $o(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var n_={kernelName:Hi,backendName:\"cpu\",kernelFunc:$o};function zS(r,e,t,o){if(o===\"int32\"){let n=Int32Array.from(r);return[e,\"int32\",n]}if(o===\"bool\"){let n=y.toTypedArray([0],t),[s,a]=Ve((i,p)=>i!==p?1:0)(e,[],r,n,\"bool\");return[a,\"bool\",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),m=Ht({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype===\"complex64\"){let c=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:\"cpu\",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype===\"string\"?w.fromUint8ToStringArray(u):u,m=a.dtype===\"string\"?w.fromUint8ToStringArray(c):c,d=o||a.dtype,[f,h]=e(a.shape,i.shape,l,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype===\"complex64\"||i.dtype===\"complex64\"){let u=Ro({inputs:{x:a},backend:p,attrs:{dtype:\"complex64\"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,d=p.data.get(l.dataId).values,f=p.data.get(m.dataId).values,h=Ro({inputs:{x:i},backend:p,attrs:{dtype:\"complex64\"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,\"float32\",k),D=p.makeTensorInfo($,\"float32\",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,d]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function bc(r){return(e,t,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType(\"float32\",p),m=y.getTypedArrayFromDType(\"float32\",p),d=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:\"cpu\",kernelFunc:Pa};function Cc(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:\"cpu\",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype===\"string\"){if(!Array.isArray(p))throw new Error(\"String tensor's value was not an instance of Array\");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:\"cpu\",kernelFunc:H8};function ap(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!==\"string\"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t===\"string\"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,\"bool\"),p_={kernelName:xn,backendName:\"cpu\",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,\"float32\"),c_={kernelName:yn,backendName:\"cpu\",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:\"cpu\",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:\"cpu\",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,\"int32\"),d_={kernelName:Sn,backendName:\"cpu\",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>e?1:0),X8=Ye(kn,QS,null,\"bool\"),f_={kernelName:kn,backendName:\"cpu\",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,\"bool\"),h_={kernelName:Nn,backendName:\"cpu\",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,\"bool\"),x_={kernelName:Dn,backendName:\"cpu\",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,\"float32\");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:\"cpu\",kernelFunc:J8};function $f(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:\"cpu\",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:\"cpu\",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:\"cpu\",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,\"neg\");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:\"cpu\",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,\"bool\"),I_={kernelName:Yn,backendName:\"cpu\",kernelFunc:nY};function wc(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var k_={kernelName:os,backendName:\"cpu\",kernelFunc:sY};function aY(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(\",\");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function iY(r,e){for(let t=0;tn)throw new Error(\"Ragged splits must not point past values\");for(let s=1;so[s])throw new Error(\"Ragged splits must be sorted in ascending order\")}}function uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[c];for(let x=c;xn[a]=s)}return e}function N_(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error(\"starts must be a scalar or vector\");if(n.length>1)throw new Error(\"limits must be a scalar or vector\");if(a.length>1)throw new Error(\"deltas must be a scalar or vector\");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a\"Final length of result must be equal to firstDimension.\"),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error(\"Invalid row split size.\");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error(\"Invalid row ids.\");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${Do[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error(\"No row_partition_types given.\");let t=this.rowPartitionTypes[0];switch(t){case Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error(\"Cannot handle VALUE_ROWIDS in first dimension.\");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error(\"Invalid first partition input. Tensor requires at least one element.\");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=E_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=su(h,i).dataSync()})}let l=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:\"cpu\",kernelFunc:mY};function zs(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return me(t,e.dtype);let d=p instanceof tt?p:me(c,e.dtype);typeof p==\"string\"||typeof p==\"number\"?d.values.fill(p):typeof p==\"boolean\"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:\"cpu\",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n===\"string\"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n===\"string\"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n===\"string\"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,\"slice\");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:\"cpu\",kernelFunc:Ao};function Ff(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,l],x,u,c]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:\"cpu\",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:\"cpu\",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?\"g\":\"\"),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:\"cpu\",kernelFunc:hY};function Of(r,e,t,o){let n=me(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){x(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType(\"int32\",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:\"cpu\",kernelFunc:Vl};function Mf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function B_(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),d=Math.min(o,Math.floor(e+(i-p)*c/i+l));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function Lf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType(\"int32\",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:\"cpu\",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([n],\"leakyRelu\");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType(\"float32\",a);for(let u=0;ur<0?e*r:r);function gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],\"prelu\");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,\"float32\");return t.makeTensorInfo(p,\"float32\",i)}var W_={kernelName:rs,backendName:\"cpu\",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:\"cpu\",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:\"cpu\",kernelFunc:yI};function fp(r,e,t,o,n){if(t===\"linear\")return lr({inputs:{x:e},backend:r});if(t===\"relu\")return xI({inputs:{x:e},backend:r});if(t===\"elu\")return fI({inputs:{x:e},backend:r});if(t===\"relu6\")return yI({inputs:{x:e},backend:r});if(t===\"prelu\")return gI({inputs:{x:e,alpha:o},backend:r});if(t===\"leakyrelu\")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t===\"sigmoid\")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var H_={kernelName:da,backendName:\"cpu\",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([n,s],\"matMul\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:\"cpu\",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:\"cpu\",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,\"addN\");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var J_={kernelName:Ys,backendName:\"cpu\",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,\"argMin\");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims(\"argMin\",a,p.shape.length);let[c,l]=w.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(c),d=y.makeZerosTypedArray(m,\"int32\"),f=y.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,\"int32\",d)}var eE={kernelName:Qs,backendName:\"cpu\",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:\"cpu\",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:\"cpu\",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:\"cpu\",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:\"cpu\",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:\"cpu\",kernelFunc:AY};function vc(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=me(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let S=0;Sj?j=ie:s===\"avg\"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s===\"avg\"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(o.outShape,\"int32\"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s===\"max\"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=me(n.outShape,t),S=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],$=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=gt:s===\"avg\"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s===\"avg\"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(e.outShape,\"int32\"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"avg\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:\"cpu\",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"avgPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"avg\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var uE={kernelName:Zs,backendName:\"cpu\",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"avgPool3DGrad\");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,d=c.strideWidth,f=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,\"float32\"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:\"cpu\",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,d=c.filterHeight,f=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,S=x-1-c.padInfo.top,k=me(a.shape,\"float32\"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,\"float32\",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:\"cpu\",kernelFunc:MY};function LY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||i.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(s==null||i.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\"),Q([n,i,p,s,a],\"batchNorm\");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=f.length,x=d.length,b=m.length,C=l.length,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:\"cpu\",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],\"batchToSpaceND\");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:\"cpu\",kernelFunc:BY};function zY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:\"cpu\",kernelFunc:zY};function VY(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var fE={kernelName:ea,backendName:\"cpu\",kernelFunc:VY};var WY=Ie(bo,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return lr({inputs:{x:p[0]},backend:t});if(p[0].dtype===\"complex64\"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:\"cpu\",kernelFunc:hu};function CI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;Q([n,s],\"conv2d\");let l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat===\"channelsLast\",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:\"cpu\",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:\"cpu\",kernelFunc:YY};function QY(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=me([f,h,g,d],\"float32\"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,d=c/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=ie;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:C,strideHeight:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,\"NHWC\",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,\"NHWC\",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||\"2d\";if(c!==\"2d\")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype===\"float32\"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype===\"int32\"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:\"cpu\",kernelFunc:s7};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"sum\");let i;n.dtype===\"bool\"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"int32\"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims(\"sum\",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,\"int32\"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var VE={kernelName:Bi,backendName:\"cpu\",kernelFunc:a7};function i7(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([o,n],\"eluGrad\");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,\"float32\",s)}var WE={kernelName:Xa,backendName:\"cpu\",kernelFunc:i7};var u7=w.ERF_P,p7=w.ERF_A1,c7=w.ERF_A2,l7=w.ERF_A3,m7=w.ERF_A4,d7=w.ERF_A5,f7=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+u7*t);return e*(1-((((d7*o+m7)*o+l7)*o+c7)*o+p7)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:\"cpu\",kernelFunc:f7};function kc(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:\"cpu\",kernelFunc:kc};var h7=Ve((r,e)=>r/e),Ul=Ye(fn,h7),Gl={kernelName:fn,backendName:\"cpu\",kernelFunc:Ul};function Vf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=y.sizeFromShape(u),l=y.getTypedArrayFromDType(\"float32\",c),m=y.getTypedArrayFromDType(\"float32\",c);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&C=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=y.sizeFromShape(s.shape),d=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),C=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:\"cpu\",kernelFunc:v7};function k7(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:\"cpu\",kernelFunc:k7};var N7=Ie(Tn,r=>Number.isFinite(r)?1:0,\"bool\"),JE={kernelName:Tn,backendName:\"cpu\",kernelFunc:N7};var T7=Ie(_n,r=>Math.abs(r)===1/0?1:0,\"bool\"),e$={kernelName:_n,backendName:\"cpu\",kernelFunc:T7};var _7=Ie(En,r=>Number.isNaN(r)?1:0,\"bool\"),t$={kernelName:En,backendName:\"cpu\",kernelFunc:_7};function E7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var r$={kernelName:An,backendName:\"cpu\",kernelFunc:E7};var $7=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:\"cpu\",kernelFunc:$7};var R7=Ve((r,e)=>r&&e),D7=Ye(On,R7,null,\"bool\"),n$={kernelName:On,backendName:\"cpu\",kernelFunc:D7};var A7=Ie(Mn,r=>r?0:1,\"bool\"),s$={kernelName:Mn,backendName:\"cpu\",kernelFunc:A7};var F7=Ve((r,e)=>r||e),P7=Ye(Ln,F7,null,\"bool\"),a$={kernelName:Ln,backendName:\"cpu\",kernelFunc:P7};function O7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,\"LRN\");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;x<=b;x++){let S=l[x];C+=S*S}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,\"max\");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:\"cpu\",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,\"maxPool3d\");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,\"max\");return t.makeTensorInfo(m.shape,\"float32\",m.values)}var l$={kernelName:ia,backendName:\"cpu\",kernelFunc:B7};function z7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],\"maxPool3DGrad\");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,\"float32\"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:\"cpu\",kernelFunc:z7};function V7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,\"float32\"),R=t.data.get(n.dataId).values,D=me(n.shape,\"float32\",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:\"cpu\",kernelFunc:V7};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,\"max\"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,\"MaxPoolWithArgmax\");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(u,o.shape,o.dtype,i,c),d=p.write(l,c.outShape,o.dtype),f=p.write(m,c.outShape,o.dtype);return[{dataId:d,shape:c.outShape,dtype:o.dtype},{dataId:f,shape:c.outShape,dtype:\"int32\"}]}};function W7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],\"float32\",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:\"cpu\",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,\"min\");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims(\"min\",p,c.shape.length);let[l,m]=w.computeOutAndReduceShapes(c.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let x=0;xC[0]+n.shape[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),c=a===\"reflect\"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let C=0;C=u[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:\"cpu\",kernelFunc:G7};var H7=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),K7=Ye(qn,H7),b$={kernelName:qn,backendName:\"cpu\",kernelFunc:K7};var w$=zp(jw());function vI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var C$={kernelName:Is,backendName:\"cpu\",kernelFunc:vI};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,\"multinomial\");let p=i?n:vI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),\"int32\");for(let f=0;f=0&&l[m]{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:\"cpu\",kernelFunc:kI};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(n,\"pad\");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=y.sizeFromShape(n.shape),l=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;b_+p[$]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:\"cpu\",kernelFunc:tQ};var rQ=Ve((r,e)=>Math.pow(r,e)),oQ=Ye(ts,rQ),R$={kernelName:ts,backendName:\"cpu\",kernelFunc:oQ};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,d,f]=Rf(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var D$={kernelName:Hp,backendName:\"cpu\",kernelFunc:nQ};function sQ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Df(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var A$={kernelName:Kp,backendName:\"cpu\",kernelFunc:sQ};function aQ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:\"cpu\",kernelFunc:aQ};function iQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:\"cpu\",kernelFunc:iQ};var uQ=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:\"cpu\",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(n,\"resizeBilinear\");let p=y.computeStrides(n.shape),[u,c]=i,[l,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([l,u,c,f])),x=[s&&u>1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,S=x[0]/b[0],k=x[1]/b[1];for(let _=0;_1?u-1:u,a&&d>1?c-1:c],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,S=0;for(let k=0;k1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=x[0]/b[0],S=x[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&f>1?l-1:l],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],C=x[0]/b[0],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:\"cpu\",kernelFunc:mQ};function dQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,\"reverse\");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var V$={kernelName:ps,backendName:\"cpu\",kernelFunc:dQ};var W$={kernelName:Ds,backendName:\"cpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[d,f]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:\"cpu\",kernelFunc:fQ};function hQ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:\"cpu\",kernelFunc:hQ};function gQ(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?wQ*r:CQ*(Math.exp(r)-1)),j$={kernelName:hs,backendName:\"cpu\",kernelFunc:SQ};var IQ=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:\"cpu\",kernelFunc:IQ};var vQ=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:\"cpu\",kernelFunc:vQ};var kQ=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:\"cpu\",kernelFunc:kQ};var NQ=11920928955078125e-23,Z$=Math.log(NQ)+2,TQ=Ie(Cs,r=>{let e=r>-Z$,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var tR={kernelName:Ki,backendName:\"cpu\",kernelFunc:EQ};function $Q(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:\"cpu\",kernelFunc:$Q};function RQ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:\"cpu\",kernelFunc:RQ};function DQ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error(\"segmentIds and indices should have same size.\");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Sc(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var nR={kernelName:ba,backendName:\"cpu\",kernelFunc:DQ};function AQ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case\"bool\":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"float32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"int32\":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=zs(f,g,i,m,c,u,p,l,x,d);break}case\"string\":{let g=t.bufferSync(s),x=y.decodeString(t.data.get(a.dataId).values[0]);h=zs(f,g,i,m,c,u,p,l,x,d);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var sR={kernelName:vs,backendName:\"cpu\",kernelFunc:AQ};function FQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:\"cpu\",kernelFunc:FQ};var iR={kernelName:qi,backendName:\"cpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(t,\"square\");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),uR={kernelName:wo,backendName:\"cpu\",kernelFunc:PQ};function OQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;Q(n,\"stridedSlice\");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:\"cpu\",kernelFunc:OQ};function MQ(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,d=t.data.get(l.dataId).values,[f,h]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var cR={kernelName:Ca,backendName:\"cpu\",kernelFunc:MQ};function LQ(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=lp(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var lR={kernelName:ji,backendName:\"cpu\",kernelFunc:LQ};function BQ(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.data.get(s.dataId).values,i=mp(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var mR={kernelName:Xi,backendName:\"cpu\",kernelFunc:BQ};var zQ=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:\"cpu\",kernelFunc:zQ};var VQ=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:\"cpu\",kernelFunc:VQ};function WQ(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:\"cpu\",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,\"tile\");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:\"cpu\",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,\"topk\");let i=t.data.get(n.dataId).values,[p,u]=Lf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var xR={kernelName:$s,backendName:\"cpu\",kernelFunc:GQ};function HQ(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=y.computeStrides(n.shape),b=x[0],C=x[1],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function qQ(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function jQ(r,e){return r}function XQ(r,e){return y.clamp(0,r,e-1)}function ql(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var SR={kernelName:Qi,backendName:\"cpu\",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log(\"Could not get context for WebGL version\",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(r)):(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),hp[r])}function rZ(r){if(!A().getBool(\"IS_SAFARI\")&&typeof OffscreenCanvas!=\"undefined\"&&r===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 oZ(r,e){if(r!==1&&r!==2)throw new Error(\"Cannot get WebGL rendering context, WebGL is disabled.\");let t=e==null?rZ(r):e;return t.addEventListener(\"webglcontextlost\",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool(\"SOFTWARE_WEBGL_ENABLED\")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext(\"webgl\",Uf)||t.getContext(\"experimental-webgl\",Uf):t.getContext(\"webgl2\",Uf)}var gu;(function(r){r[r.DENSE=0]=\"DENSE\",r[r.SHARED_BATCH=1]=\"SHARED_BATCH\"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]=\"RENDER\",r[r.UPLOAD=1]=\"UPLOAD\",r[r.PIXELS=2]=\"PIXELS\",r[r.DOWNLOAD=3]=\"DOWNLOAD\"})(mr||(mr={}));var er;(function(r){r[r.UNPACKED_FLOAT16=0]=\"UNPACKED_FLOAT16\",r[r.UNPACKED_FLOAT32=1]=\"UNPACKED_FLOAT32\",r[r.PACKED_4X1_UNSIGNED_BYTE=2]=\"PACKED_4X1_UNSIGNED_BYTE\",r[r.PACKED_2X2_FLOAT32=3]=\"PACKED_2X2_FLOAT32\",r[r.PACKED_2X2_FLOAT16=4]=\"PACKED_2X2_FLOAT16\"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber(\"WEBGL_VERSION\")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function ce(r,e){let t=e();return A().getBool(\"DEBUG\")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error(\"WebGL Error: \"+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")||r===0||sZr.getExtension(e),'Extension \"'+e+'\" not supported on this browser.')}function $I(r,e){let t=hi(r,()=>r.createShader(r.VERTEX_SHADER),\"Unable to create vertex WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error(\"Failed to compile vertex shader.\");return t}function RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),\"Unable to create fragment WebGLShader.\");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get(\"ENGINE_COMPILE_ONLY\"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error(\"Failed to compile fragment shader.\");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(`\n`),s=n.length.toString().length+2,a=n.map((l,m)=>y.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),\"Unable to create WebGLProgram.\")}function AI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().get(\"ENGINE_COMPILE_ONLY\")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Failed to link vertex and fragment shaders.\")}function Yl(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error(\"Shader program validation failed.\")}function FI(r,e){let t=hi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function PI(r,e){let t=hi(r,()=>r.createBuffer(),\"Unable to create WebGLBuffer\");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function uZ(){return A().getNumber(\"WEBGL_VERSION\")===2?1:4}function OI(r){return hi(r,()=>r.createTexture(),\"Unable to create WebGLTexture.\")}function MI(r,e){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error(\"Requested texture size \"+o+\" is invalid.\")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error(\"Requested texture size \"+o+\" greater than WebGL maximum on this browser / GPU \"+n+\".\")}}function LI(r){return hi(r,()=>r.createFramebuffer(),\"Unable to create WebGLFramebuffer.\")}function jf(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function NR(r,e,t){_R(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function pZ(r,e){_R(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function BI(r,e,t){return hi(r,()=>r.getUniformLocation(e,t),'uniform \"'+t+'\" not present in program.')}function zI(r,e,t){return r.getUniformLocation(e,t)}function VI(r,e,t,o){ce(r,()=>NR(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function cZ(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Ql(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Xf(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Tc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error(\"Error binding framebuffer: \"+TR(r,e))}function TR(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";case r.FRAMEBUFFER_UNSUPPORTED:return\"FRAMEBUFFER_UNSUPPORTED\";default:return`unknown error ${e}`}}function hi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function _R(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function gi(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function xi(r){if(r.length===0)throw Error(\"Cannot get rows and columns of an empty shape array.\");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function _c(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[gi(r),...xi(r)]),e}function WI(r,e=!1){let t=A().getNumber(\"WEBGL_MAX_TEXTURE_SIZE\"),o=A().getNumber(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\");o===1/0&&A().getBool(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=gi(r),p=2,u=2;r.length&&([p,u]=xi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Gf(r){return r%2===0}function xu(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r[r.length-1],o=e[e.length-1];if(t===o||Gf(t)&&Gf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Gf(r[0])&&Gf(e[0])}var Hf,Kf;function UI(r){if(Hf==null){let e=Kr(r);Hf=e.getParameter(e.MAX_TEXTURE_SIZE)}return Hf}function lZ(){Hf=null}function mZ(){Kf=null}function GI(r){if(Kf==null){let e=Kr(r);Kf=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function HI(r){if(r===0)return 0;let e,t=Kr(r);return qr(t,\"EXT_disjoint_timer_query_webgl2\")&&r===2?e=2:qr(t,\"EXT_disjoint_timer_query\")?e=1:e=0,e}function qr(r,e){return r.getExtension(e)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(e){return console.log(\"Error when getting WebGL context: \",e),!1}return!1}function KI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\"))return!1}else if(!qr(e,\"EXT_color_buffer_float\"))return!1;return _I(e)}function qI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,\"OES_texture_float\")||!qr(e,\"WEBGL_color_buffer_float\"))return!1}else{if(qr(e,\"EXT_color_buffer_float\"))return _I(e);let o=\"EXT_color_buffer_half_float\";if(qr(e,o)){let n=e.getExtension(o);return dZ(e,n)}return!1}return _I(e)}function _I(r){let e=Xl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function dZ(r,e){let t=Xl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function jI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Se=A();Se.registerFlag(\"HAS_WEBGL\",()=>Se.getNumber(\"WEBGL_VERSION\")>0);Se.registerFlag(\"WEBGL_VERSION\",()=>Yf(2)?2:Yf(1)?1:0);Se.registerFlag(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\",()=>!1);Se.registerFlag(\"WEBGL_BUFFER_SUPPORTED\",()=>Se.get(\"WEBGL_VERSION\")===2);Se.registerFlag(\"WEBGL_CPU_FORWARD\",()=>!0);Se.registerFlag(\"WEBGL_FORCE_F16_TEXTURES\",()=>!1);Se.registerFlag(\"WEBGL_PACK\",()=>Se.getBool(\"HAS_WEBGL\"));Se.registerFlag(\"WEBGL_PACK_NORMALIZATION\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CLIP\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_DEPTHWISECONV\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_BINARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_UNARY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_ARRAY_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_IMAGE_OPERATIONS\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_REDUCE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_LAZILY_UNPACK\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_CONV_IM2COL\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_PACK_CONV2DTRANSPOSE\",()=>Se.getBool(\"WEBGL_PACK\"));Se.registerFlag(\"WEBGL_MAX_TEXTURE_SIZE\",()=>UI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_MAX_TEXTURES_IN_SHADER\",()=>GI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\",()=>{let r=Se.getNumber(\"WEBGL_VERSION\");return r===0?0:HI(r)});Se.registerFlag(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\",()=>Se.getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0&&!eu.isMobile());Se.registerFlag(\"WEBGL_RENDER_FLOAT32_CAPABLE\",()=>KI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_RENDER_FLOAT32_ENABLED\",()=>Se.getBool(\"WEBGL_FORCE_F16_TEXTURES\")?!1:Se.getBool(\"WEBGL_RENDER_FLOAT32_CAPABLE\"));Se.registerFlag(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\",()=>qI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_FENCE_API_ENABLED\",()=>jI(Se.getNumber(\"WEBGL_VERSION\")));Se.registerFlag(\"WEBGL_SIZE_UPLOAD_UNIFORM\",()=>Se.getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?4:0);Se.registerFlag(\"WEBGL_DELETE_TEXTURE_THRESHOLD\",()=>-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Se.registerFlag(\"WEBGL_FLUSH_THRESHOLD\",()=>eu.isMobile()?1:-1,r=>{if(typeof r!=\"number\")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Se.registerFlag(\"CPU_HANDOFF_SIZE_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_USE_SHAPES_UNIFORMS\",()=>!1);Se.registerFlag(\"TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e5);Se.registerFlag(\"TOPK_K_CPU_HANDOFF_THRESHOLD\",()=>128);Se.registerFlag(\"WEBGL_EXP_CONV\",()=>!1);Se.registerFlag(\"SOFTWARE_WEBGL_ENABLED\",()=>Se.getBool(\"IS_TEST\"));Se.registerFlag(\"WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE\",()=>1/0);Se.registerFlag(\"WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE\",()=>!1);Se.registerFlag(\"WEBGL2_ISNAN_CUSTOM\",()=>!1);Se.registerFlag(\"ENGINE_COMPILE_ONLY\",()=>!1);function It(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber(\"WEBGL_VERSION\")===2?(r=\"#version 300 es\",e=\"in\",t=\"out\",o=\"in\",n=\"texture\",s=\"outputColor\",a=\"out vec4 outputColor;\",i=A().getBool(\"WEBGL2_ISNAN_CUSTOM\")?`\n bool isnan_custom(float val) {\n uint floatToUint = floatBitsToUint(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n `:\"\",p=\"\",u=`\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `):(r=\"\",e=\"attribute\",t=\"varying\",o=\"varying\",n=\"texture2D\",s=\"gl_FragColor\",a=\"\",i=`\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n `,p=`\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n `,u=`\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join(\"\")}function xp(r,e,t=\"index\"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join(\"\")}function fZ(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function ER(r,e,t=\"index\"){let o=r.map((s,a)=>a),n=fZ(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join(\"\")}function $c(r){let e=y.computeStrides(r).map(t=>t.toString());return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z;\n }\n`}function Rc(){return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n }\n`}var Qf=`\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n`;var{getBroadcastDims:$R}=w;function RR(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:\"\"};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=Zf(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push(\"uniform int outShape;\");break;case 2:o.push(\"uniform ivec2 outShape;\"),o.push(\"uniform int outShapeStrides;\");break;case 3:o.push(\"uniform ivec3 outShape;\"),o.push(\"uniform ivec2 outShapeStrides;\");break;case 4:o.push(\"uniform ivec4 outShape;\"),o.push(\"uniform ivec3 outShapeStrides;\");break;default:break}o.push(\"uniform ivec2 outTexShape;\")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:\"\"};`)});let n=o.join(`\n`),s=r.map(d=>hZ(d,e,t.packedInputs,t.enableShapeUniforms)).join(`\n`),a=e.texShape,i=It(),p=yZ(i),u,c,l=wZ(i);return e.isPacked?(u=gZ(e.logicalShape,a,t.enableShapeUniforms),c=CZ(i)):(u=xZ(e.logicalShape,a,t.enableShapeUniforms),c=bZ(i)),t.packedInputs&&(l+=kZ),[l,p,c,n,u,s,t.userCode].join(`\n`)}function Ac(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return MZ(r,e);case 1:return BZ(r,e);case 2:return VZ(r,e);case 3:return UZ(r,e);case 4:return HZ(r,e);case 5:return KZ(r);case 6:return qZ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function DR(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return OZ(r);case 1:return LZ(r,e);case 2:return zZ(r,e);case 3:return WZ(r,e);default:return GZ(r,e)}}function hZ(r,e,t=!1,o){let n=\"\";t?n+=DR(r,o):n+=Ac(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=jZ(r,e):n+=XZ(r,e)),n}function gZ(r,e,t){switch(r.length){case 0:return AR();case 1:return NZ(r,e,t);case 2:return FZ(r,e,t);case 3:return _Z(r,e,t);default:return $Z(r,e,t)}}function xZ(r,e,t){switch(r.length){case 0:return AR();case 1:return TZ(r,e,t);case 2:return PZ(r,e,t);case 3:return EZ(r,e,t);case 4:return RZ(r,e,t);case 5:return DZ(r,e);case 6:return AZ(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function yZ(r){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${r.texture2D}(textureSampler, uv).r;\n }\n `}function bZ(r){return`\n void setOutput(float val) {\n ${r.output} = vec4(val, 0, 0, 0);\n }\n `}function CZ(r){return`\n void setOutput(vec4 val) {\n ${r.output} = val;\n }\n `}function wZ(r){return`${r.version}\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n ${r.varyingFs} vec2 resultUV;\n ${r.defineOutput}\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n ${r.defineSpecialNaN}\n ${r.defineSpecialInf}\n ${r.defineRound}\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${SZ}\n ${IZ}\n ${vZ}\n `}var SZ=`\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n int texelIndex = index / 2;\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,IZ=`\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n int texNumC, int row, int col) {\n int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = texelIndex / texNumC;\n int texC = texelIndex - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,vZ=`\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n int texelsInBatch, int texelsInLogicalRow, int b,\n int row, int col) {\n int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n int texR = index / texNumC;\n int texC = index - texR * texNumC;\n return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n`,kZ=`\n float getChannel(vec4 frag, vec2 innerDims) {\n vec2 modCoord = mod(innerDims, 2.);\n return modCoord.x == 0. ?\n (modCoord.y == 0. ? frag.r : frag.g) :\n (modCoord.y == 0. ? frag.b : frag.a);\n }\n float getChannel(vec4 frag, int dim) {\n float modCoord = mod(float(dim), 2.);\n return modCoord == 0. ? frag.r : frag.g;\n }\n`;function AR(){return`\n int getOutputCoords() {\n return 0;\n }\n `}function NZ(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${o[1]}.0);\n }\n `:o[1]===1?t?`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n }\n `:`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${o[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n return 2 * (resTexRC.x * ${o[1]} + resTexRC.y);\n }\n `}function TZ(r,e,t){return e[0]===1?t?`\n int getOutputCoords() {\n return int(resultUV.x * float(outTexShape[1]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.x * ${e[1]}.0);\n }\n `:e[1]===1?t?`\n int getOutputCoords() {\n return int(resultUV.y * float(outTexShape[0]));\n }\n `:`\n int getOutputCoords() {\n return int(resultUV.y * ${e[0]}.0);\n }\n `:t?`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n return resTexRC.x * outTexShape[1] + resTexRC.y;\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n return resTexRC.x * ${e[1]} + resTexRC.y;\n }\n `}function _Z(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec3(b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[2]/2),s=n*Math.ceil(r[1]/2);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${o[0]}, ${o[1]}));\n int index = resTexRC.x * ${o[1]} + resTexRC.y;\n\n int b = index / ${s};\n index -= b * ${s};\n\n int r = 2 * (index / ${n});\n int c = imod(index, ${n}) * 2;\n\n return ivec3(b, r, c);\n }\n `}function EZ(r,e,t){if(t)return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(outTexShape[0], outTexShape[1]));\n int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n ${xp([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n`;let o=Ws([\"r\",\"c\",\"d\"],r);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${e[0]}, ${e[1]}));\n int index = resTexRC.x * ${e[1]} + resTexRC.y;\n ${o}\n return ivec3(r, c, d);\n }\n `}function $Z(r,e,t){if(t)return`\n ivec4 getOutputCoords() {\n ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(packedTexShape[0], packedTexShape[1]));\n int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n int texelsInBatchN = texelsInBatch * outShape[1];\n\n int b2 = index / texelsInBatchN;\n index -= b2 * texelsInBatchN;\n\n int b = index / texelsInBatch;\n index -= b * texelsInBatch;\n\n int r = 2 * (index / texelsInLogicalRow);\n int c = imod(index, texelsInLogicalRow) * 2;\n\n return ivec4(b2, b, r, c);\n }\n `;let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)],n=Math.ceil(r[r.length-1]/2),s=n*Math.ceil(r[r.length-2]/2),a=s,i=\"\",p=\"b, r, c\";for(let u=2;u=1?c=\"coords = 0;\":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(`\n`);let m=\"\";a<2&&s>0?m=\"coords\":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(\", \");let d=\"return outputValue;\",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=`\n return vec4(outputValue.xy, outputValue.xy);\n `;else if(h&&!x)a===1?d=`\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n `:d=`\n return vec4(outputValue.x);\n `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?d=\"return vec4(outputValue.x);\":i.indexOf(b)>-1?d=\"return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);\":i.indexOf(C)>-1&&(d=\"return vec4(outputValue.xx, outputValue.zz);\")}return`\n vec4 ${n}() {\n ${p} coords = getOutputCoords();\n ${c}\n vec4 outputValue = get${o}(${m});\n ${d}\n }\n `}function XZ(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n=\"get\"+o+\"AtOutCoords\",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return`\n float ${n}() {\n return sampleTexture(${t}, resultUV);\n }\n `;let u=Re(p),c=$R(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];i===0?m=\"\":p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(`\n`);let f=\"\";return p<2&&i>0?f=\"coords\":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+l]}`).join(\", \"),`\n float ${n}() {\n ${u} coords = getOutputCoords();\n ${m}\n return get${o}(${f});\n }\n `}function Re(r){if(r<=1)return\"int\";if(r===2)return\"ivec2\";if(r===3)return\"ivec3\";if(r===4)return\"ivec4\";if(r===5)return\"ivec5\";if(r===6)return\"ivec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function Zf(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(\", \")}function PR(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=RR(n,a,e),p=RI(r.gl,i),u=r.createProgram(p);return A().get(\"ENGINE_COMPILE_ONLY\")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},XI(r,e,u)))}function XI(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,\"NAN\",!1),A().getNumber(\"WEBGL_VERSION\")===1&&(p=r.getUniformLocation(t,\"INFINITY\",!1));let c=!1;for(let l of e.variableNames){let m={name:l,uniform:r.getUniformLocation(t,l,c),offset:r.getUniformLocation(t,`offset${l}`,c)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${l}Shape`,c),m.texShape=r.getUniformLocation(t,`${l}TexShape`,c)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,\"outShape\",c),i=r.getUniformLocation(t,\"outShapeStrides\",c),a=r.getUniformLocation(t,\"outTexShape\",c)),e.customUniforms)for(let l of e.customUniforms)n.push(r.getUniformLocation(t,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function FR(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function OR(r,e,t,o,n){e.program.enableShapeUniforms||(FR(e.inShapeInfos,t),FR([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),r.bindVertexArray(e.webGLProgram.vao),A().getNumber(\"WEBGL_VERSION\")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=Zf(r.packedInputs,a.shape,p),m=\"\",d=\"\",f=\"\";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)d=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=y.computeStrides(c);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=w.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||c.length>2?\"\":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:\"\"}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`}else{let p=a.isUniform?\"uniform\":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+=\"_\"+o+\"_\"+n+`${A().getNumber(\"WEBGL_VERSION\")}`,s}function ut(r){return A().getBool(\"WEBGL_USE_SHAPES_UNIFORMS\")&&r<=4}var Jf=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n ${t.output} = result;\n }\n `}};var eh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${this.enableShapeUniforms?xp([\"r\",\"c\",\"d\"],e):Ws([\"r\",\"c\",\"d\"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n ${t.output} = result;\n }\n `}};var th=class{constructor(e){this.variableNames=[\"A\"],this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}};var rh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=`\n ${Qf}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${t.output} = encode_float(x);\n }\n `}};var ZZ={R:0,G:1,B:2,A:3},Zl=class{constructor(e,t=!1,o=\"RGBA\"){this.variableNames=[\"A\"],this.customUniforms=[{name:\"texShape\",type:\"ivec2\"}];let n=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let s=\"result\";t&&(s=\"floor(result * 255. + 0.5)\");let a=\"\";for(let i=0;inv,createBufferFromOutputTexture:()=>iv,createFloat16MatrixTexture:()=>ev,createFloat16PackedMatrixTexture:()=>ov,createFloat32MatrixTexture:()=>JI,createIndexBuffer:()=>ZI,createPackedMatrixTexture:()=>rv,createUnsignedBytesMatrixTexture:()=>tv,createVertexBuffer:()=>QI,createVertexShader:()=>YI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>pv,downloadFloat32MatrixFromBuffer:()=>uv,downloadMatrixFromPackedOutputTexture:()=>lv,downloadPackedMatrixFromBuffer:()=>cv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>sv,uploadPixelDataToTexture:()=>av});function YI(r){let e=It(),t=`${e.version}\n precision highp float;\n ${e.attribute} vec3 clipSpacePos;\n ${e.attribute} vec2 uv;\n ${e.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`;return $I(r,t)}function QI(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return FI(r,e)}function ZI(r){let e=new Uint16Array([0,1,2,2,1,3]);return PI(r,e)}function Jl(r,e,t,o,n,s){MI(e,t);let a=OI(r),i=r.TEXTURE_2D;return ce(r,()=>r.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),A().getNumber(\"WEBGL_VERSION\")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function nh(r){return r.internalFormatFloat}function JI(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ev(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function tv(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function rv(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function ov(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function nv(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),jf(r,e,\"clipSpacePos\",t,3,20,0)&&jf(r,e,\"uv\",t,2,20,12)}function sv(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function av(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):A().getNumber(\"WEBGL_VERSION\")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function iv(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function uv(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function pv(r,e,t,o){let[n,s]=gp(e,t),a=4,i=new Uint8Array(IR(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function cv(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(vR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function lv(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var bp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber(\"WEBGL_VERSION\");if(e!=null?(this.gl=e,NI(t,e)):this.gl=Kr(t),e=this.gl,A().getNumber(\"WEBGL_VERSION\")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension(\"OES_vertex_array_object\");if(s==null)throw new Error(\"All WebGL1 implementations are expected to offer OES_vertex_array_object.\");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o=\"WEBGL_color_buffer_float\",n=\"EXT_color_buffer_half_float\";if(this.parallelCompilationExtension=this.gl.getExtension(\"KHR_parallel_shader_compile\"),A().getNumber(\"WEBGL_VERSION\")===1){let s=\"OES_texture_float\",a=\"OES_texture_half_float\";if(this.textureFloatExtension=Nc(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Nc(this.gl,a);else if(A().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(o),qr(this.gl,n))this.colorBufferHalfFloatExtension=Nc(this.gl,n);else if(A().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(o=\"EXT_color_buffer_float\",qr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(qr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error(\"GL context does not support color renderable floats\");this.vertexBuffer=QI(this.gl),this.indexBuffer=ZI(this.gl),this.framebuffer=LI(this.gl),this.textureConfig=Xl(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),JI(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),ev(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),tv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),av(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),sv(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),ov(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),rv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>pv(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return cv(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return uv(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=iv(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(A().getBool(\"WEBGL_FENCE_API_ENABLED\")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>lv(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=YI(t));let o=DI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),AI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),nv(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?BI(this.gl,e,t):zI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),VI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ma(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error(\"setOutputPackedMatrixWriteRegion not implemented.\")}debugValidate(){this.program!=null&&Yl(this.gl,this.program),Tc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,\"VAO changed between setProgram and executeProgram!\"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Nc(this.gl,A().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(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))),this.getQueryTime(e,A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION\"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=JZ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;\"setTimeoutCustom\"in A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Ql(this.gl,e,this.framebuffer),this.debug&&Tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Tc(this.gl)):Xf(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Ql(n,e,this.framebuffer),this.debug&&Tc(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}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 JZ(r){let e=0;for(;e`${r}.${t}`)}function Rt(r,e){return e===1?[r]:dv(r,e)}function ED(r,e){if(r===1)return\"rc\";let t=\"\";for(let o=0;o ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]}`;let t=\"\";for(let o=this.rank-2;o= ${this.enableShapeUniforms?`outShape[${o}]`:this.outputShape[o]}`,o= ${o};\n bool rEdge = rp1 >= ${n};\n `}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?\"outShape\":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),\n cEdge ? 0. : getA(${t[1]}),\n rEdge ? 0. : getA(${t[2]}),\n rEdge || cEdge ? 0. : getA(${t[3]})`}};var Mc=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"inputShape\",type:\"ivec3\"}],this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let o=\"\";for(let n=0;n<4;n++){let s=\"thisRC = rc;\";n%2===1&&(s+=\"thisRC.z += 1;\"),n>1&&(s+=\"thisRC.y += 1;\"),o+=`\n ${s}\n ${n>0?\"if(thisRC.y < rows && thisRC.z < cols){\":\"\"}\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result[${n}] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n ${n>0?\"}\":\"\"}\n `}this.userCode=`\n ${e9(t,this.enableShapeUniforms)}\n ${this.enableShapeUniforms?Rc():$c(e)}\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = ${this.enableShapeUniforms?\"outShape[1]\":e[1]};\n int cols = ${this.enableShapeUniforms?\"outShape[2]\":e[2]};\n\n ${o}\n\n setOutput(result);\n }\n `}};function e9(r,e){return`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${e?ER([\"r\",\"c\",\"d\"],\"inputShape\"):Ws([\"r\",\"c\",\"d\"],r)}\n return ivec3(r, c, d);\n }\n `}var dh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=RD(t,o),s=DD(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=$D(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].pop();return this.usedTextures[s].push(p),p}let i;return n===er.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===er.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=RD(o,n),a=DD(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=$D(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber(\"WEBGL_DELETE_TEXTURE_THRESHOLD\");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(e);if(c==null||c<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");u[c]=u[u.length-1],u.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function t9(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function $D(r,e,t,o,n){let s=r9(e,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=gp(r[0],r[1]);a=p*u}let i=t9(t,s);return a*i}function r9(r,e){switch(r){case er.PACKED_2X2_FLOAT32:return ih(e);case er.PACKED_2X2_FLOAT16:return uh(e);case er.UNPACKED_FLOAT32:return nh(e);case er.UNPACKED_FLOAT16:return sh(e);case er.PACKED_4X1_UNSIGNED_BYTE:return ah(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function o9(r){return A().getBool(\"WEBGL_RENDER_FLOAT32_ENABLED\")?r?er.PACKED_2X2_FLOAT32:er.UNPACKED_FLOAT32:r?er.PACKED_2X2_FLOAT16:er.UNPACKED_FLOAT16}function RD(r,e){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return o9(e);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function DD(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var tr=class{constructor(e,t){this.variableNames=[\"A\"],this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n float unaryOperation(float x) {\n ${t}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}},Wt=\"if (isnan(x)) return x;\",AD=\"return x;\",fv=\"return abs(x);\";var FD=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",PD=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,OD=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,La=\"return x;\",MD=\"return 1.0 / (1.0 + exp(-1.0 * x));\";var BD=\"return x;\",zD=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,VD=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,WD=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,UD=\"return 1.0 / (1.0 + exp(-1.0 * x));\",Fr=class{constructor(e,t){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${t}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}};var fh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.length,o=Rt(\"rc\",t),n=Re(t),s=ED(t,o),a=o.slice(-2),i=t<=1?\"rc\":`vec2(${a.join(\",\")})`;this.userCode=`\n void main() {\n ${n} rc = getOutputCoords();\n vec4 packedInput = getA(${s});\n\n setOutput(getChannel(packedInput, ${i}));\n }\n `}};var s9=Vt.whereImpl,a9=1e-7,i9=1e-4,hh={};function u9(r){return r in hh||(hh[r]={}),hh[r]}var p9=A().getNumber(\"CPU_HANDOFF_SIZE_THRESHOLD\"),c9=600;function l9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*c9/1024/1024}var Lc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!A().getBool(\"HAS_WEBGL\"))throw new Error(\"WebGL is not supported on this device\");let t;if(e!=null){if(e instanceof bp)t=e;else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"),e);t=new bp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber(\"WEBGL_VERSION\"));t=new bp(o),this.binaryCache=u9(A().getNumber(\"WEBGL_VERSION\")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=l9(),this.texData=new Bo(this,ur())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=_c(t),c=new Zl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((A().getBool(\"WEBGL_CHECK_NUMERICAL_PROBLEMS\")||A().getBool(\"DEBUG\"))&&this.checkNumericalProblems(e),o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:mr.UPLOAD,refCount:1}),n}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,o,n,s){if(A().getBool(\"DEBUG\")&&this.checkNumericalProblems(t),n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.texData.set(e,{shape:o,dtype:n,values:t,usage:mr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Fr(i,La):m=new tr(i,La);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n===\"string\")return o;let u=this.activeTimers!=null,c;u&&(c=y.now());let l;if(n===\"complex64\"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);l=w.mergeRealAndImagArrays(m,d)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Fr(n,La):f=new tr(n,La);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(A().getBool(\"DEBUG\")&&!A().getBool(\"WEBGL_DOWNLOAD_FLOAT_ENABLED\")&&A().getNumber(\"WEBGL_VERSION\")===2)throw new Error(\"tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.\");let u=null,c;if(a!==\"complex64\"&&A().get(\"WEBGL_BUFFER_SUPPORTED\")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(n))}this.pendingRead.set(e,[]),a!==\"complex64\"&&await this.gpgpu.createAndWaitForFence();let l;if(a===\"complex64\"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];l=w.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&ur().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i===\"complex64\")throw new Error(\"Does not support reading texture for complex64 dtype.\");if(a!=null){let d;p?d=new Fr(s,La):d=new tr(s,La);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error(\"Data is not on GPU but on CPU.\"):new Error(\"There is no data on GPU or CPU.\");let c=this.decode(e,t.customTexShape),l=ur().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype===\"string\")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.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 A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber(\"WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE\")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));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.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=p9){return A().getBool(\"WEBGL_CPU_FORWARD\")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>\"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.\")}let i=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===gu.DENSE){let x=a!=null?a:jl(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(x=>{if(x.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber(\"WEBGL_SIZE_UPLOAD_UNIFORM\"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get(\"ENGINE_COMPILE_ONLY\")||OR(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=A().getNumber(\"WEBGL_FLUSH_THRESHOLD\");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().getBool(\"WEBGL_LAZILY_UNPACK\")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool(\"IS_TEST\")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=De(()=>{if(!A().get(\"WEBGL_RENDER_FLOAT32_ENABLED\")){let e=A().getBool(\"DEBUG\");A().set(\"DEBUG\",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set(\"DEBUG\",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=t.texShape;if(l==null&&(l=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().get(\"ENGINE_COMPILE_ONLY\")?this.disposeData(_.dataId):(t.texture=$.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=m9(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await cS(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(qf(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error(\"Failed to compile fragment shader.\")):new Error(\"Failed to link vertex and fragment shaders.\");return!0}getUniformLocations(){for(let e of Object.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||\"RGBA\";let{texture:n,height:s,width:a,channels:i}=e,p=ur().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error(\"The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.\");let u=p.writeTexture(n,t,o,s,a,i);return ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(r,e){if(e===\"float32\"||e===\"complex64\")return r;if(e===\"int32\"||e===\"bool\"){let t=e===\"int32\"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Lc,2);var $at={forceHalfFloat:GD};var Bc=`\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n`;var Pr=class{constructor(e,t,o){this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=`\n float binaryOperation(float a, float b) {\n ${e}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}};var Xr=`\n result.r = isNaN.r ? NAN : result.r;\n result.g = isNaN.g ? NAN : result.g;\n result.b = isNaN.b ? NAN : result.b;\n result.a = isNaN.a ? NAN : result.a;\n`;var jr=class{constructor(e,t,o,n=!1){this.variableNames=[\"A\",\"B\"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ut(s);let a=\"\";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=`\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n `;else if(a=`\n ${Re(s)} coords = getOutputCoords();\n `,s===1)this.enableShapeUniforms?a+=`\n result.y = (coords + 1) >= outShape ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `:a+=`\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;else{let p=Rt(\"coords\",s);this.enableShapeUniforms?a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= outShape[${s} - 2];\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= outShape[${s} - 1];\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `:a+=`\n bool nextRowOutOfBounds =\n (${p[s-2]} + 1) >= ${this.outputShape[s-2]};\n bool nextColOutOfBounds =\n (${p[s-1]} + 1) >= ${this.outputShape[s-1]};\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `}this.userCode=`\n vec4 binaryOperation(vec4 a, vec4 b) {\n ${e}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${a}\n\n setOutput(result);\n }\n `}};function Dt(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var HD={kernelName:Co,backendName:\"webgl\",kernelFunc:Dt};function Or(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.texData.get(s.dataId),i=Dt({inputs:{x:o},backend:t}),p=Dt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var KD={kernelName:Di,backendName:\"webgl\",kernelFunc:Or};var hv=\"return (a < 0.) ? b * a : a;\",gv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function f9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],\"float32\",y.createScalarValue(s,\"float32\")),i=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(gv,n.shape,a.shape):new Pr(hv,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],\"float32\");return t.disposeIntermediateTensorInfo(a),p}var qD={kernelName:$n,backendName:\"webgl\",kernelFunc:f9};var xv=\"return (a < 0.) ? b * a : a;\",yv=`\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`;function h9(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(yv,o.shape,n.shape):new Pr(xv,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],\"float32\")}var jD={kernelName:rs,backendName:\"webgl\",kernelFunc:h9};var Fo=\"if (isnan(x)) return x;\";function xe({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")&&e!=null,c;return u?c=new Fr(a.shape,e):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype===\"complex64\"){let f=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[S,k]=C,_={dataId:S.dataId,dtype:S.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,$],dt(S.dtype,k.dtype))}),b=Or({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),b}let l=s||dt(p.dtype,u.dtype);if((p.dtype===\"string\"||u.dtype===\"string\"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let f=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype===\"string\"?w.fromUint8ToStringArray(f):f,x=p.dtype===\"string\"?w.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),S=c.makeTensorInfo(C,l),k=c.texData.get(S.dataId);return k.values=b,S}let m=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")&&e!=null,d;return m?d=new jr(e,p.shape,u.shape,t):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function yi(r,e=!1){if(r===\"linear\")return e?BD:AD;if(r===\"relu\")return e?VD:PD;if(r===\"elu\")return e?zD:FD;if(r===\"relu6\")return e?WD:OD;if(r===\"prelu\")return e?yv:xv;if(r===\"leakyrelu\")return e?gv:hv;if(r===\"sigmoid\")return e?UD:MD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var zc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=[\"matrixA\",\"matrixB\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=ut(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?\"i * 2, rc.y\":\"rc.y, i * 2\",d=s?\"rc.z, i * 2\":\"i * 2, rc.z\",f=n?[\"a.xxyy\",\"a.zzww\"]:[\"a.xxzz\",\"a.yyww\"],h=s?[\"b.xzxz\",\"b.ywyw\"]:[\"b.xyxy\",\"b.zwzw\"],g=\"\",x=\"\";i&&(p?g=`vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${i}\n }`:u?g=`vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${i}\n }`:g=`vec4 activation(vec4 x) {\n ${i}\n }`,x=\"result = activation(result);\");let b=a?\"result += getBiasAtOutCoords();\":\"\";a&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),u&&this.variableNames.push(\"leakyreluAlpha\");let C=\"rc.x\",S=\"rc.x\";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!xu(n.shape,p)&&!(c.texture!==null&&xu(c.shape,p))?QD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var ZD={kernelName:da,backendName:\"webgl\",kernelFunc:te};var rm=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u=\"sumValue += dot(values, ones);\";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c=\"\";s%o>0&&(c=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return 0.0;\n }\n `),this.userCode=`\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${c}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${i}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${u}\n }\n\n int inIdx = inOffset + ${i};\n if (${p===1}) {\n vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n ${u}\n } else if (${p===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1), 0.0, 0.0);\n\n ${u}\n } else if (${p===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2), 0.0);\n\n ${u}\n }\n setOutput(sumValue);\n }\n `}};var gh=class{constructor(e,t){this.variableNames=[\"x\"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=\"0.0\",p=\"\";t===\"prod\"?i=\"1.0\":t===\"min\"?(i=\"1.0 / 1e-20\",p=\"min\"):t===\"max\"&&(i=\"-1.0 / 1e-20\",p=\"max\");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"sum\"?u=\"sumValue\":t===\"prod\"?u=\"prodValue\":t===\"all\"?u=\"allValue\":t===\"any\"&&(u=\"anyValue\");let c=Math.floor(o/4)*4,l=o%4,m=`\n if (${t===\"sum\"}) {\n sumValue += dot(values, ones);\n } else if (${t===\"prod\"}) {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = ${p}(values, minMaxValue);\n if (${t===\"min\"} || ${t===\"max\"}) {\n minMaxValue = ${p}(values, minMaxValue);\n bvec4 isNaN = isnan(values);\n if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n minMaxValue = vec4(NAN);\n }\n }\n }\n `,d=\"vec4\";t===\"all\"?(i=\"1.0\",m=`\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n `,d=\"bvec4\"):t===\"any\"&&(i=\"0.0\",m=`\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n `,d=\"bvec4\");let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `),this.userCode=`\n const float initializationValue = ${i};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${f}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${o};\n\n vec4 minMaxValue = vec4(${i});\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===2}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n ${m}\n } else if (${l===3}) {\n ${d} values = ${d}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function x9(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=w.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function Yr(r,e,t,o){let n=x9(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\",\"resRC.v\"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=dv(\"rc\",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,B=p===\"leakyrelu\",z=p!=null?yi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>Cv&&U===!1){let Y=$,J=R;t&&(Y=bt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=bt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[P,O,1]}}),D.push(ee));let oe=f===1?2:1,ie=J;ne&&(ie=te({inputs:{x:J},backend:n,attrs:{shape:[P,1,O]}}),D.push(ie));let le=tm({inputs:{a:ee,b:ie},backend:n});j=wp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,e.dtype),J=new zc(k,_,[P,d,f],t,o,M,z,L,B),re=[$,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],\"float32\",y.createScalarValue(i,\"float32\"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function b9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Sp({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rA={kernelName:So,backendName:\"webgl\",kernelFunc:b9};var oA=\"return abs(x);\";function C9(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!==\"complex64\"){let s=t.texData.get(o.dataId),a=ch(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,oA):n=new tr(o.shape,oA),t.runWebGLProgram(n,[o],o.dtype)}var nA={kernelName:Xs,backendName:\"webgl\",kernelFunc:C9};var w9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n`,S9=xe({opSnippet:w9}),sA={kernelName:Vo,backendName:\"webgl\",kernelFunc:S9};var I9=Wt+`\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));`,v9=xe({opSnippet:I9}),aA={kernelName:Wo,backendName:\"webgl\",kernelFunc:v9};var iA=\"return a + b;\",k9=nt({opSnippet:iA,packedOpSnippet:iA,supportsComplex:!0,cpuKernelImpl:LR}),uA={kernelName:uo,backendName:\"webgl\",kernelFunc:k9};var bh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n float result = ${n};\n setOutput(result);\n }\n `}};var Ch=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(\" + \");this.userCode=`\n void main() {\n ${o.join(`\n `)}\n\n vec4 result = ${n};\n setOutput(result);\n }\n `}};function wh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Dt({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\")){let p=Math.floor(o.length/2),u=wh({inputs:o.slice(0,p),backend:t}),c=wh({inputs:o.slice(p),backend:t});return wh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>dt(p,u)),s=o.map(p=>p.shape),i=A().getBool(\"WEBGL_PACK\")?new Ch(o[0].shape,s):new bh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var pA={kernelName:Uo,backendName:\"webgl\",kernelFunc:wh};function N9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"all\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"all\",t),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var cA={kernelName:Go,backendName:\"webgl\",kernelFunc:N9};function T9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims(\"any\",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,\"any\",t),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var lA={kernelName:Ho,backendName:\"webgl\",kernelFunc:T9};var Sh=class{constructor(e,t,o){this.variableNames=[\"A\"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push(\"bestIndicesA\"),this.outputShape=[s,a];let i=t===\"max\"?\">\":\"<\",p=o?\"inOffset + i;\":\"round(getBestIndicesA(batch, inOffset + i));\";this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < ${n}; i++) {\n int inIdx = ${p};\n float candidate = getA(batch, inIdx);\n if (candidate ${i} bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n `}};var Ih=class{constructor(e,t,o,n){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push(\"bestIndicesA\");let i=this.outputShape,p=i.length,u=Re(p),c=Rt(\"coords\",p),l,m;if(a===1){m=p+1;let R=Re(m);l=`\n ${R} sourceLocR = ${R}(${c.join()}, 0);\n ++${c[p-1]};\n ${R} sourceLocG = ${R}(${c.join()}, 0);\n ++${c[p-2]};\n ${R} sourceLocA = ${R}(${c.join()}, 0);\n --${c[p-1]};\n ${R} sourceLocB = ${R}(${c.join()}, 0);\n --${c[p-2]};`}else m=p,l=`\n ${u} sourceLocR = coords;\n ++${c[p-1]};\n ${u} sourceLocG = coords;\n ++${c[p-2]};\n ${u} sourceLocA = coords;\n --${c[p-1]};\n ${u} sourceLocB = coords;\n --${c[p-2]};`;let d=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"].slice(0,m),f=\".\"+d[m-1],h=d.map(R=>\"int \"+R),g=Rt(\"sourceLocR\",m-1).concat(\"inIdx.r\"),x=Rt(\"sourceLocG\",m-1).concat(\"inIdx.g\"),b=Rt(\"sourceLocB\",m-1).concat(\"inIdx.b\"),C=Rt(\"sourceLocA\",m-1).concat(\"inIdx.a\"),S=o===\"max\"?\"greaterThan\":\"lessThan\",k=n?\"\":`\n inIdx = round(vec4(getBestIndicesAChannel(${g.join()}),\n getBestIndicesAChannel(${x.join()}),\n getBestIndicesAChannel(${b.join()}),\n getBestIndicesAChannel(${C.join()})));`,_=`vec4(\n getAChannel(${g.join()}),\n hasNextCol ? getAChannel(${x.join()}) : 0.,\n hasNextRow ? getAChannel(${b.join()}) : 0.,\n hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,$=n?\"\":`\n float getBestIndicesAChannel(${h.join()}) {\n return getChannel(getBestIndicesA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }`;this.userCode=`\n float getAChannel(${h.join()}) {\n return getChannel(getA(${d.join()}),\n vec2(${d.slice(-2).join()}));\n }\n ${$}\n void main() {\n ${u} coords = getOutputCoords();\n bool hasNextCol = ${c[p-1]} < ${i[p-1]-1};\n bool hasNextRow = ${c[p-2]} < ${i[p-2]-1};\n ${l}\n ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f},\n sourceLocB${f}, sourceLocA${f}) * ${t};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${t}; i++) {\n inIdx = srcIdx;\n ${k}\n vec4 candidate = ${_};\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4(${S}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n `}};function mA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=w.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new Sh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,\"int32\");if(c.shape[1]===1)return c;let l=mA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function dA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,\"int32\");if(u.shape.length===e.shape.length){let c=dA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,e,t,o){let n=[t];if(w.assertAxesAreInnerMostDims(\"arg\"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().getBool(\"WEBGL_PACK_REDUCE\")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=w.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=mA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return dA(r,e,o)}function _9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"max\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var fA={kernelName:Ys,backendName:\"webgl\",kernelFunc:_9};function E9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=vh(t,p,a[0],\"min\");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var hA={kernelName:Qs,backendName:\"webgl\",kernelFunc:E9};var $9=Wt+`\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n`,R9=xe({opSnippet:$9}),gA={kernelName:Ko,backendName:\"webgl\",kernelFunc:R9};var D9=Wt+\"return log(x + sqrt(x * x + 1.0));\",A9=xe({opSnippet:D9}),xA={kernelName:qo,backendName:\"webgl\",kernelFunc:A9};var F9=Wt+`\n return atan(x);\n`,P9=xe({opSnippet:F9}),yA={kernelName:jo,backendName:\"webgl\",kernelFunc:P9};var O9=Bc+`\n return atan(a, b);\n`,M9=`\n vec4 result = atan(a, b);\n bvec4 isNaNA = isnan(a);\n bvec4 isNaNB = isnan(b);\n bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n `+Xr+`\n return result;\n`,L9=nt({opSnippet:O9,packedOpSnippet:M9}),bA={kernelName:Yo,backendName:\"webgl\",kernelFunc:L9};var B9=Wt+`\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;`,z9=xe({opSnippet:B9}),CA={kernelName:Xo,backendName:\"webgl\",kernelFunc:z9};var Us=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t===\"avg\",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b=\"0.0\";if(h||(b=\"-1.0 / 1e-20\"),o){let R=\">=\";this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${m};\n wC += ${c}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${R} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?g:x:`wR * ${m} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let C=\"max\",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(S=\"avgValue / max(count, 1.0)\");let k=Math.floor(a/4)*4,_=a%4,$=`\n if (${h}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${C}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${p});\n const ivec2 pads = ivec2(${d}, ${f});\n const float initializationValue = ${b};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4(${b});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < ${l};\n wR += ${u}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${k}; wC += 4) {\n int xC = xCCorner + wC * ${c};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n getValue(batch, xR, xC + 3 * ${c}, d)\n );\n\n ${$}\n }\n\n int xC = xCCorner + ${k};\n if (${_===1}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${$}\n } else if (${_===2}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n initializationValue,\n initializationValue\n );\n\n ${$}\n } else if (${_===3}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${c}, d),\n getValue(batch, xR, xC + 2 * ${c}, d),\n initializationValue\n );\n\n ${$}\n }\n }\n setOutput(${S});\n }\n `}},bu=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=[\"x\"],t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t===\"avg\",S=\"0.0\";if(C||(S=\"-1.0 / 1e-20\"),o){let P=\">=\";this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < ${d};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${h};\n wC += ${m}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${P} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} +\n wR * ${h} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `;return}let k=\"max\",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t===\"avg\"&&(_=\"avgValue / max(count, 1.0)\");let $=Math.floor(a/4)*4,R=a%4,D=`\n if (${C}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = ${k}(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${p}, ${u});\n const ivec3 pads = ivec3(${g}, ${x}, ${b});\n const float initializationValue = ${S};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4(${S});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < ${d};\n wD += ${c}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${f};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${$}; wC += 4) {\n int xC = xCCorner + wC * ${m};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n getValue(batch, xD, xR, xC + 3 * ${m}, ch)\n );\n\n ${D}\n }\n\n int xC = xCCorner + ${$};\n if (${R===1}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${D}\n } else if (${R===2}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n initializationValue,\n initializationValue\n );\n\n ${D}\n } else if (${R===3}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${m}, ch),\n getValue(batch, xD, xR, xC + 2 * ${m}, ch),\n initializationValue\n );\n\n ${D}\n }\n }\n }\n setOutput(${_});\n }\n `}};function V9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Vs(n,\"avgPool\");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"avg\",!1);return t.runWebGLProgram(l,[n],\"float32\")}var wA={kernelName:Qo,backendName:\"webgl\",kernelFunc:V9};function W9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new bu(l,\"avg\",!1);return t.runWebGLProgram(m,[n],\"float32\")}var SA={kernelName:Zs,backendName:\"webgl\",kernelFunc:W9};var kh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=`\n const ivec2 pads = ivec2(${c}, ${l});\n const float avgMultiplier = float(${m});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${p};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${u};\n wC+= ${i}) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n `}},Nh=class{constructor(e){this.variableNames=[\"dy\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=`\n const ivec3 pads = ivec3(${f}, ${h}, ${g});\n const float avgMultiplier = float(${x});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${l};\n wD += ${p}) {\n float dyD = float(dyDCorner + wD) / ${s}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${m};\n wR += ${u}) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${d};\n wC += ${c}) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function U9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Nh(m);return t.runWebGLProgram(d,[n],a.dtype)}var IA={kernelName:Ri,backendName:\"webgl\",kernelFunc:U9};function G9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Vs([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new kh(c);return t.runWebGLProgram(l,[n],a.dtype)}var vA={kernelName:$i,backendName:\"webgl\",kernelFunc:G9};function H9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Sp({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var kA={kernelName:Zo,backendName:\"webgl\",kernelFunc:H9};var Th=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"0.0\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"1.0\";s!=null&&(w.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = ${i};\n float scale = ${p};\n float inv = scale * inversesqrt(variance + float(${a}));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n `}};var _h=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=[\"x\",\"mean\",\"variance\"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i=\"vec4(0.0)\";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push(\"offset\"),i=\"getOffsetAtOutCoords()\");let p=\"vec4(1.0)\";s!=null&&(w.assertAndGetBroadcastShape(e,s),this.variableNames.push(\"scale\"),p=\"getScaleAtOutCoords()\"),this.outputShape=e,this.userCode=`\n void main() {\n vec4 offset = ${i};\n vec4 scale = ${p};\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4(${a}));\n\n setOutput((x - mean) * inv + offset);\n }\n `}};var K9=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>\"Batch normalization gradient requires mean and variance to have equal ranks.\"),y.assert(a==null||n.shape.length===a.shape.length,()=>\"Batch normalization gradient requires mean and offset to have equal ranks.\"),y.assert(i==null||n.shape.length===i.shape.length,()=>\"Batch normalization gradient requires mean and scale to have equal ranks.\");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new _h(o.shape,n.shape,s.shape,c,l,p):new Th(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},NA={kernelName:In,backendName:\"webgl\",kernelFunc:K9};var Eh=class{constructor(e){this.variableNames=[\"source\"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let o=q9(this.rank),n,s=e.map((a,i)=>`sourceLoc.${wv[i]} = start[${i}] + coords.${wv[i]};`);n=`\n ${t} sourceLoc;\n ${t} coords = getOutputCoords();\n ${s.join(`\n`)}\n `,this.userCode=`\n void main() {\n ${n}\n setOutput(getSource(${o}));\n }\n `}},wv=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function q9(r){if(r===1)return\"sourceLoc\";if(r<=6)return wv.slice(0,r).map(e=>\"sourceLoc.\"+e).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=class{constructor(e){this.variableNames=[\"source\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:\"start\",arrayIndex:this.rank,type:\"int\"}];let t=Re(this.rank),o=Rt(\"coords\",this.rank),n=Rt(\"sourceLoc\",this.rank),s=this.rank===1?\"sourceLoc\":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=`\n result.x = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.y = ${a};\n --${n[this.rank-1]};\n }\n `,p=this.rank===1?\"\":`\n --${o[this.rank-1]};\n if (++${o[this.rank-2]} < ${e[this.rank-2]}) {\n ++${n[this.rank-2]};\n result.z = ${a};\n if (++${o[this.rank-1]} < ${e[this.rank-1]}) {\n ++${n[this.rank-1]};\n result.w = ${a};\n }\n }\n `,u=this.rank<=4?`sourceLoc = coords +\n ${t}(${e.map((c,l)=>`start[${l}]`).join()});`:e.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(`\n`);this.userCode=`\n void main() {\n ${t} coords = getOutputCoords();\n ${t} sourceLoc;\n ${u}\n vec4 result = vec4(0.);\n ${i}\n ${p}\n setOutput(result);\n }\n `}};function j9(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=pt.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function Gs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.texData.get(n.dataId),m=gD(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=pt.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new $h(p):new Eh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),j9(n,i,p,t)}var TA={kernelName:ha,backendName:\"webgl\",kernelFunc:Gs};var X9=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},_A={kernelName:Js,backendName:\"webgl\",kernelFunc:X9};function Y9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=ph(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var EA={kernelName:Jo,backendName:\"webgl\",kernelFunc:Y9};var Q9=`\n int r = int(a.r) & int(b.r);\n int g = int(a.g) & int(b.g);\n int rb = int(a.b) & int(b.b);\n int ra = int(a.a) & int(b.a);\n return vec4(r, g, rb, ra);\n`,Z9=`\n return float(int(a.r) & int(b.r));\n`;function J9(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\"),a=A().getNumber(\"WEBGL_VERSION\");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[c,l]=zR(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(l,o.dtype),d=t.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(Q9,o.shape,n.shape,!1):i=new Pr(Z9,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var $A={kernelName:qa,backendName:\"webgl\",kernelFunc:J9};function eJ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],\"int32\",Int32Array.from(i))}var RA={kernelName:ea,backendName:\"webgl\",kernelFunc:eJ};var tJ=\"return float(a != b);\",Sv=nt({opSnippet:tJ,cpuKernelImpl:iD,dtype:\"bool\"}),DA={kernelName:Yn,backendName:\"webgl\",kernelFunc:Sv};function bi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:t})}var AA={kernelName:Hi,backendName:\"webgl\",kernelFunc:bi};var rJ=\"return float(int(x));\";function FA(r,e){let t=new tr(r.shape,rJ),o=e.runWebGLProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Iv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return Dt({inputs:{x:n},backend:t});let a=Gr(n.shape),i=Iv({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=Or({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype===\"complex64\"){let a=bi({inputs:{input:n},backend:t}),i=Iv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=VR(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return FA(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=Sv({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var PA={kernelName:yo,backendName:\"webgl\",kernelFunc:Iv};var OA=\"return ceil(x);\",oJ=xe({opSnippet:OA,packedOpSnippet:OA,cpuKernelImpl:WR}),MA={kernelName:en,backendName:\"webgl\",kernelFunc:oJ};var Rh=class{constructor(e){this.variableNames=[\"A\"],this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n `}};var Dh=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"minVal\",type:\"float\"},{name:\"maxVal\",type:\"float\"}],this.outputShape=e,this.userCode=`\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n `}};function nJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool(\"WEBGL_PACK_CLIP\")?i=new Dh(n.shape):i=new Rh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var LA={kernelName:bo,backendName:\"webgl\",kernelFunc:nJ};var Ah=class{constructor(e){this.variableNames=[\"real\",\"imag\"],this.outputShape=e,this.userCode=`\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n `}};function BA(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function sJ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Ah(o.shape),a=[BA(o,n.complexTensorInfos.real),BA(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var zA={kernelName:Ai,backendName:\"webgl\",kernelFunc:sJ};var Fh=class{constructor(e){this.outputShape=[],this.outputShape=w.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) {\n return getChannel(\n getT${h}(${Ph(i,u,g)}),\n vec2(${Ph(c,u,g)}));\n }`}let d=p.length,f=p[p.length-1];m+=`\n return getChannel(\n getT${d}(${Ph(i,u,f)}),\n vec2(${Ph(c,u,f)}));`,this.userCode=`\n float getValue(${i.map(h=>\"int \"+h)}) {\n ${m}\n }\n\n void main() {\n ${s} coords = getOutputCoords();\n vec4 result = vec4(getValue(${a}), 0., 0., 0.);\n\n ${a[n-1]} = ${a[n-1]} + 1;\n if (${a[n-1]} < ${o[n-1]}) {\n result.g = getValue(${a});\n }\n\n ${a[n-2]} = ${a[n-2]} + 1;\n if (${a[n-2]} < ${o[n-2]}) {\n result.a = getValue(${a});\n }\n\n ${a[n-1]} = ${a[n-1]} - 1;\n if (${a[n-2]} < ${o[n-2]} &&\n ${a[n-1]} < ${o[n-1]}) {\n result.b = getValue(${a});\n }\n setOutput(result);\n }\n `}};function Ph(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ip(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var VA={kernelName:Wi,backendName:\"webgl\",kernelFunc:Ip};function Vc(r,e,t){let o=r[0].dtype;if(o===\"complex64\"){let d=r.map(b=>bi({inputs:{input:b},backend:t})),f=r.map(b=>Ip({inputs:{input:b},backend:t})),h=Vc(d,e,t),g=Vc(f,e,t),x=Or({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:_}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=UR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")&&s[0].shape.length>1;if(s.length===1){let d=a?new tr(r[0].shape,La):new Fr(r[0].shape,La);return t.runWebGLProgram(d,r,o)}let i=A().getNumber(\"WEBGL_MAX_TEXTURES_IN_SHADER\");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=aJ(s,e,t),c=new Fh(p.map(d=>d.shape)),l=t.runWebGLProgram(c,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(l),m}function aJ(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function vv(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Dt({inputs:{x:p[0]},backend:t}):Vc(p,s,t)}var WA={kernelName:ta,backendName:\"webgl\",kernelFunc:vv};var Wc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat===\"channelsLast\",x=g?1:2,b=g?2:3,C=g?3:1,S=\"\",k=\"\";o&&(n?S=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?S=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:S=`\n float activation(float x) {\n ${o}\n }\n `,k=\"result = activation(result);\");let _=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${S}\n\n const ivec2 strides = ivec2(${p}, ${u});\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[${C}];\n\n ivec2 xRCCorner =\n ivec2(coords[${x}], coords[${b}]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${c};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${l};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if (${g}) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if (${h===1}) {\n\n if (${g}) {\n dotProd +=\n getX(batch, xR, xC, ${f}) *\n getW(wR, wC, ${f}, d2);\n } else {\n dotProd +=\n getX(batch, ${f}, xR, xC) *\n getW(wR, wC, ${f}, d2);\n }\n\n } else if (${h===2}) {\n vec2 wValues = vec2(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2)\n );\n\n if (${g}) {\n vec2 xValues = vec2(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if (${h===3}) {\n vec3 wValues = vec3(\n getW(wR, wC, ${f}, d2),\n getW(wR, wC, ${f} + 1, d2),\n getW(wR, wC, ${f} + 2, d2)\n );\n\n if (${g}) {\n vec3 xValues = vec3(\n getX(batch, xR, xC, ${f}),\n getX(batch, xR, xC, ${f} + 1),\n getX(batch, xR, xC, ${f} + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, ${f}, xR, xC),\n getX(batch, ${f} + 1, xR, xC),\n getX(batch, ${f} + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n ${_}\n ${k}\n setOutput(result);\n }\n `}},Mh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${s}, ${a}, ${i});\n const ivec3 pads = ivec3(${t}, ${o}, ${n});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < ${l}; wF++) {\n int xF = xFCorner + wF * ${p};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${m}; wR++) {\n int xR = xRCorner + wR * ${u};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${d}; wC++) {\n int xC = xCCorner + wC * ${c};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${f}; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (${h===1}) {\n dotProd +=\n getX(batch, xF, xR, xC, ${f}) *\n getW(wF, wR, wC, ${f}, d2);\n } else if (${h===2}) {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (${h===3}) {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, ${f}),\n getX(batch, xF, xR, xC, ${f} + 1),\n getX(batch, xF, xR, xC, ${f} + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, ${f}, d2),\n getW(wF, wR, wC, ${f} + 1, d2),\n getW(wF, wR, wC, ${f} + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};var Uc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) {\n `;for(let g=0;g<(l+1)/2;g++){let x=g*2;if(m+=`\n xC = xCCorner + ${x*p};\n `,i===1){if(x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n `,p===1&&x>0?m+=`\n xC${x} = vec4(xTexelC${x-2}.zw, xTexelC${x}.xy);\n `:m+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${x} = vec4(previous.zw, xTexelC${x}.xy);\n } else {\n xC${x} = vec4(0.0, 0.0, xTexelC${x}.xy);\n }\n `):m+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xC${x} = xTexelC${x};\n `,x+1= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n `,p>1?m+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${x+1} = vec4(previous.zw, xTexelC${x+1}.xy);\n } else {\n xC${x+1} = vec4(0.0, 0.0, xTexelC${x+1}.xy);\n }\n `:m+=`\n xC${x+1} = vec4(xTexelC${x}.zw, xTexelC${x+1}.xy);\n `):b===1?m+=`\n xC${x+1} = xTexelC${x};\n `:m+=`\n xCOffset = xC + ${b};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x+1} = xTexelC${x+1};\n `}}else x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.0);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw);\n `,x+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${x+1} = vec4(xTexelC${x+1}.xy, final.xy);\n `)):(m+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${x}Ready == 0) {\n xTexelC${x} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${x}.zw = vec2(0.0);\n }\n xTexelC${x}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) {\n xTexelC${x+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${x+1}.zw = vec2(0.);\n }\n xTexelC${x+1}Ready = 1;\n }\n\n xC${x} = vec4(\n xTexelC${x}.xy, xTexelC${x+1}.xy);\n `,x+1= 0) {\n // Use custom imod instead mod. On Intel GPU, mod may generate\n // unexpected value.\n // https://github.com/tensorflow/tfjs/issues/5447\n offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];\n d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n inChannels);\n\n if(d1 < inputShape[${i}] && d1 >= 0) {\n\n ch = imod(pos, inChannels);\n\n if (${s}) {\n innerDims = vec2(d1, ch);\n result[${c*2+l}] = getChannel(\n getA(rc.x, d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${c*2+l}] = getChannel(\n getA(rc.x, ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;this.userCode=`\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n ${u}\n\n ${n.output} = result;\n }\n `}};function Bh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function zh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat===\"channelsLast\",f=!1,h=!1,g,x=[];if(s!=null){let S=Bh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Bh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>Cv)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(xu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let $=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push($);let R=Sp({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>\"batchMatMul result is expected to be packed\"),u.shape=_,D.shape=t.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Sp({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:$},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(_),x.push($)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Vh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:d}=t,f=d===\"channelsLast\",h=p*u*c,g=m*l,x=[t.batchSize,h,g],b=!0,C=!1,S=[];if(s!=null){let q=Bh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Bh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let _=new Lh(x,t),$=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(_,[r],\"float32\",$),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let P=n!=null,O=s!=null,M=i===\"leakyrelu\",L=i?yi(i,!0):null,B=new zc(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,P,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],\"float32\",y.createScalarValue(a,\"float32\"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,\"float32\"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function iJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type===\"SAME\"||m.padInfo.type===\"VALID\"))d=zh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let h=new Uc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],\"float32\",g)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))d=Vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new Wc(m);d=t.runWebGLProgram(h,[n,s],\"float32\")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var UA={kernelName:tn,backendName:\"webgl\",kernelFunc:iJ};var Wh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat===\"channelsLast\";this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n ${a?`float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);`:`float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);`}\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Uh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat===\"channelsLast\",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[${l}];\n\n ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n if (${a}) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Gh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yF = 0; yF < ${e.outDepth}; yF++) {\n int xF = wF + yF * ${t} - ${s};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${o} - ${a};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${i};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Hh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=`\n const ivec3 pads = ivec3(${p}, ${u}, ${c});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < ${t}; wF++) {\n float dyF = float(dyFCorner + wF) / ${s}.0;\n\n if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${t} - 1 - wF;\n\n for (int wR = 0; wR < ${o}; wR++) {\n float dyR = float(dyRCorner + wR) / ${a}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${o} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function uJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new Wh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}var GA={kernelName:Fi,backendName:\"webgl\",kernelFunc:uJ};var Kh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"strides\",type:\"vec2\"}],this.outputShape=e.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=`\n const ivec2 pads = ivec2(${n}, ${s});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n\n ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n vec4 result = vec4(0.);\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / strides[0];\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n int wCPerm = ${o} - 1 - wC;\n\n float dyC = float(dyCCorner + wC) / strides[1];\n bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0)\n && (fract(dyC) == 0.0);\n int idyC = int(dyC);\n\n float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0)\n && (fract(dyC2) == 0.0);\n int idyC2 = int(dyC2);\n\n if (idyCVal && idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n dySample : getDy(batch, idyR, idyC2, d2);\n\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n\n dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample2.xy : dySample2.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC, d2);\n vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.xy += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n } else if (idyCVal2) {\n for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n vec4 dySample = getDy(batch, idyR, idyC2, d2);\n vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n dySample.xy : dySample.zw;\n result.zw += vec2(dot(dyValue, wValue.xy),\n dot(dyValue, wValue.zw));\n }\n }\n }\n }\n setOutput(result);\n }\n `}};function pJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l);if(A().getBool(\"WEBGL_PACK_CONV2DTRANSPOSE\")&&l===\"channelsLast\"){let d=[[m.strideHeight,m.strideWidth]],f=new Kh(m);return t.runWebGLProgram(f,[n,s],\"float32\",d)}else{let d=new Uh(m);return t.runWebGLProgram(d,[n,s],\"float32\")}}var HA={kernelName:rn,backendName:\"webgl\",kernelFunc:pJ};function cJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var KA={kernelName:on,backendName:\"webgl\",kernelFunc:cJ};function lJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var qA={kernelName:ja,backendName:\"webgl\",kernelFunc:lJ};function mJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return t.runWebGLProgram(c,[n,s],\"float32\")}var jA={kernelName:nn,backendName:\"webgl\",kernelFunc:mJ};var dJ=Fo+`\n return cos(x);\n`,fJ=`\n vec4 result = cos(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,hJ=xe({opSnippet:dJ,packedOpSnippet:fJ}),XA={kernelName:sn,backendName:\"webgl\",kernelFunc:hJ};var gJ=`\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n`,xJ=xe({opSnippet:gJ}),YA={kernelName:an,backendName:\"webgl\",kernelFunc:xJ};var qh=class{constructor(e,t,o,n,s){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let d=n===\"bilinear\"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=l>1?[`${(i-1)/(l-1)}`,\"(y2-y1) * height_ratio\",`y1*${f} + float(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${f}`],[C,S,k]=m>1?[`${(p-1)/(m-1)}`,\"(x2-x1) * width_ratio\",`x1*${h} + float(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${h}`];this.userCode=`\n const float height_ratio = float(${g});\n const float width_ratio = float(${C});\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= ${a}) {\n return;\n }\n\n float height_scale = ${x};\n float width_scale = ${S};\n\n float in_y = ${b};\n if( in_y < 0.0 || in_y > ${f} ) {\n setOutput(float(${s}));\n return;\n }\n float in_x = ${k};\n if( in_x < 0.0 || in_x > ${h} ) {\n setOutput(float(${s}));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if(${d} == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n `}};var yJ=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new qh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],\"float32\")},QA={kernelName:cn,backendName:\"webgl\",kernelFunc:yJ};var vp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(vp||(vp={}));var om=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=[\"x\"],this.customUniforms=[{name:\"index\",type:\"float\"}];let s=this.outputShape.length,a=this.op===vp.Prod?\"1.0\":\"0.0\",i=o?a:`getX(${ZA(s,\"coords\",this.op)})`,p=this.outputShape[this.outputShape.length-1],u=\"\",c=\"\";o?(u=n?`end != ${p-1}`:\"end != 0\",c=n?\"end + 1\":\"end - 1\"):(u=n?`end + pow2 < ${p}`:\"end >= pow2\",c=n?\"end + pow2\":\"end - pow2\"),this.userCode=`\n void main() {\n ${Re(s)} coords = getOutputCoords();\n int end = ${JA(s,\"coords\",this.op)};\n float val = ${i};\n int pow2 = int(pow(2.0, index));\n if (${u}) {\n int idx = ${c};\n ${JA(s,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${ZA(s,\"coords\",this.op)});\n }\n setOutput(val);\n }\n `}};function ZA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function JA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function jh(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=bt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Dt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new om(r,p.shape,!1,s),f=[[m]],h=l;l=t.runWebGLProgram(d,[l],l.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new om(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Prod,n,t,s,a,i)}var eF={kernelName:un,backendName:\"webgl\",kernelFunc:bJ};function CJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Sum,n,t,s,a,i)}var tF={kernelName:pn,backendName:\"webgl\",kernelFunc:CJ};function wJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=ph(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=BR(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var rF={kernelName:ra,backendName:\"webgl\",kernelFunc:wJ};var Xh=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = ${this.getHeightCoordString()};\n int w = ${this.getWidthCoordString()};\n int d = ${this.getDepthCoordString()};\n\n int in_h = h / ${t};\n int offset_h = imod(h, ${t});\n int in_w = w / ${t};\n int offset_w = imod(w, ${t});\n int offset_d = (offset_h * ${t} + offset_w) *\n ${this.getOutputDepthSize()};\n int in_d = d + offset_d;\n\n float result = ${this.getInputSamplingString()};\n setOutput(result);\n }\n `}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 SJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=new Xh(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var oF={kernelName:ln,backendName:\"webgl\",kernelFunc:SJ};var Gc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u=\"\",c=\"\";o&&(n?u=`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${o}\n }`:s?u=`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${o}\n }`:u=`\n float activation(float x) {\n ${o}\n }\n `,c=\"result = activation(result);\");let l=t?\"result += getBiasAtOutCoords();\":\"\";t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),s&&this.variableNames.push(\"leakyreluAlpha\"),this.userCode=`\n ${u}\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / ${p};\n int q = d2 - d1 * ${p};\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < ${a}; wR++) {\n int xR = xRCorner + wR * dilations[0];\n\n if (xR < 0 || xR >= inDims[0]) {\n continue;\n }\n\n for (int wC = 0; wC < ${i}; wC++) {\n int xC = xCCorner + wC * dilations[1];\n\n if (xC < 0 || xC >= inDims[1]) {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n ${l}\n ${c}\n setOutput(result);\n }\n `}};var Hc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=[\"x\",\"W\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"pads\",type:\"ivec2\"},{name:\"strides\",type:\"ivec2\"},{name:\"dilations\",type:\"ivec2\"},{name:\"inDims\",type:\"ivec2\"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,d=`\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x=0 && xR < inDims[0]) {\n `;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(d+=`\n xC = xCCorner + ${b*u};\n `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n `,u===1&&b>0?d+=`\n xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.xy);\n `:d+=`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n previous.zw = vec2(0.0);\n }\n\n xC${b} = vec4(previous.zw, xTexelC${b}.xy);\n } else {\n xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy);\n }\n `):d+=`\n if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xC${b} = xTexelC${b};\n `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n `,u>1?d+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < inDims[1]) {\n previous = getX(batch, xR, xCOffset, d1);\n xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy);\n } else {\n xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy);\n }\n `:d+=`\n xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy);\n `):C===1?d+=`\n xC${b+1} = xTexelC${b};\n `:d+=`\n xCOffset = xC + ${C};\n\n if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b+1} = xTexelC${b+1};\n `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.0);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);\n `,b+1= 0 && xCOffset < inDims[1]) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy);\n `)):(d+=`\n if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) {\n xTexelC${b} = getX(batch, xR, xC, d1);\n if (xC + 1 >= inDims[1]) {\n xTexelC${b}.zw = vec2(0.0);\n }\n xTexelC${b}Ready = 1;\n }\n\n xCOffset = xC + strides[1];\n if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) {\n xTexelC${b+1} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= inDims[1]) {\n xTexelC${b+1}.zw = vec2(0.);\n }\n xTexelC${b+1}Ready = 1;\n }\n\n xC${b} = vec4(\n xTexelC${b}.xy, xTexelC${b+1}.xy);\n `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=w.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new Hc(l):m=new Gc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],\"float32\",d)}var nF={kernelName:mn,backendName:\"webgl\",kernelFunc:IJ};var Yh=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * ${a} + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${n};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${o} - ${s};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n `}},Qh=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=`\n const ivec2 pads = ivec2(${a}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${o}; wC++) {\n float dyC = float(dyCCorner + wC) / ${s}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${o} - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < ${p}; dm++) {\n int d2 = d1 * ${p} + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function vJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Yh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var sF={kernelName:Pi,backendName:\"webgl\",kernelFunc:vJ};function kJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Qh(l);return t.runWebGLProgram(m,[n,s],\"float32\")}var aF={kernelName:Oi,backendName:\"webgl\",kernelFunc:kJ};var Zh=class{constructor(e){this.variableNames=[\"X\"],this.outputShape=[e,e],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n `}};function NJ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Zh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var iF={kernelName:oa,backendName:\"webgl\",kernelFunc:NJ};var Jh=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=`\n const ivec2 strides = ivec2(${s}, ${a});\n const ivec2 pads = ivec2(${l}, ${m});\n const float neg_infinity = -3.4e38;\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.w;\n ivec2 outTopLeftCorner =\n coords.yz * strides - pads;\n int hBeg = outTopLeftCorner.x;\n int wBeg = outTopLeftCorner.y;\n\n float curVal = neg_infinity;\n for (int h = 0; h < ${i}; h++) {\n int hIn = hBeg + h * ${u};\n\n if (hIn >= 0 && hIn < ${t}) {\n for (int w = 0; w < ${p}; w++) {\n int wIn = wBeg + w * ${c};\n\n if (wIn >= 0 && wIn < ${o}) {\n float xVal = getX(batch, hIn, wIn, d1);\n float wVal = getW(h, w, d1);\n\n float val = xVal + wVal;\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n float result = curVal;\n setOutput(result);\n }\n `}};function TJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c,l=new Jh(u);c=t.runWebGLProgram(l,[n,s],\"float32\");let m=te({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var uF={kernelName:dn,backendName:\"webgl\",kernelFunc:TJ};function _J(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=wp({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var pF={kernelName:Bi,backendName:\"webgl\",kernelFunc:_J};var EJ=\"return (x >= 0.0) ? x : (exp(x) - 1.0);\",$J=`\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n`,RJ=xe({opSnippet:EJ,packedOpSnippet:$J}),cF={kernelName:hn,backendName:\"webgl\",kernelFunc:RJ};var DJ=\"return (b >= 0.0) ? a : a * (b + 1.0);\",AJ=`\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n`,FJ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool(\"WEBGL_PACK_BINARY_OPERATIONS\")?new jr(AJ,o.shape,n.shape):new Pr(DJ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},lF={kernelName:Xa,backendName:\"webgl\",kernelFunc:FJ};var PJ=`\n return vec4(equal(a, b));\n`,OJ=\"return float(a == b);\",MJ=nt({opSnippet:OJ,packedOpSnippet:PJ,dtype:\"bool\",cpuKernelImpl:GR}),mF={kernelName:xn,backendName:\"webgl\",kernelFunc:MJ};var LJ=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n float p = ${w.ERF_P};\n float a1 = ${w.ERF_A1};\n float a2 = ${w.ERF_A2};\n float a3 = ${w.ERF_A3};\n float a4 = ${w.ERF_A4};\n float a5 = ${w.ERF_A5};\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`,BJ=xe({opSnippet:LJ}),dF={kernelName:gn,backendName:\"webgl\",kernelFunc:BJ};var zJ=Fo+`\n return exp(x);\n`,VJ=`\n vec4 result = exp(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,kv=xe({opSnippet:zJ,packedOpSnippet:VJ,cpuKernelImpl:HR,dtype:\"float32\"}),fF={kernelName:yn,backendName:\"webgl\",kernelFunc:kv};function eg(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var hF={kernelName:na,backendName:\"webgl\",kernelFunc:eg};var gF=\"return exp(x) - 1.0;\",WJ=xe({opSnippet:gF,packedOpSnippet:gF,cpuKernelImpl:KR}),xF={kernelName:bn,backendName:\"webgl\",kernelFunc:WJ};var nm=class{constructor(e,t,o){this.variableNames=[\"real\",\"imag\"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.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=`\n const float exponentMultiplier = ${s};\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n ${i}\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float(${n});\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < ${n}; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / ${a};\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n `}};function tg(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new nm(\"real\",p,e),c=new nm(\"imag\",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,\"float32\"),d=t.runWebGLProgram(c,l,\"float32\"),f=Or({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function UJ(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!1,t)}var yF={kernelName:zi,backendName:\"webgl\",kernelFunc:UJ};var rg=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:\"value\",type:\"float\"}],this.variableNames=[\"x\"],this.outputShape=e,this.userCode=`\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n `}};function Ci(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new rg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var bF={kernelName:sa,backendName:\"webgl\",kernelFunc:Ci};var og=class{constructor(e){this.variableNames=[\"Image\"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${t} - x - 1;\n float outputValue;\n if(coordX >= 0 && coordX < ${t}) {\n outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n } else {\n outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var CF={kernelName:Cn,backendName:\"webgl\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new og(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var wF=\"return floor(x);\",GJ=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:qR}),SF={kernelName:wn,backendName:\"webgl\",kernelFunc:GJ};var HJ=`\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n`,KJ=`\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,dtype:\"int32\"}),IF={kernelName:Sn,backendName:\"webgl\",kernelFunc:qJ};var ng=class{constructor(e){this.variableNames=[\"A\"];let t=It(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${n}.0, ${o}.0);\n\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n `}};var sg=class{constructor(e){this.variableNames=[\"A\"],this.packedInputs=!1,this.packedOutput=!0;let t=It(),[o,n]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2(${n}.0, ${o}.0);\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n ${t.output} = result;\n }\n `}};var vF={kernelName:Du,backendName:\"webgl\",kernelFunc:jJ},Kc,Nv=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function jJ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(Kc==null||h!==Nv)&&(Nv=h,Kc=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:Nv})),Kc.canvas.width=p,Kc.canvas.height=u,Kc.drawImage(n,0,0,p,u),n=Kc.canvas}let m=t.makeTensorInfo(c,\"int32\");t.texData.get(m.dataId).usage=mr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool(\"WEBGL_PACK\")?new sg(l):new ng(l),f=t.runWebGLProgram(d,[m],\"int32\");return t.disposeData(m.dataId),f}function XJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,S=i!=null,k=d===\"leakyrelu\",_=()=>{let R=[n,s],D=(P,O)=>{if(O===\"NCHW\"&&P.shape.length===1&&P.shape[0]!==1){let M=te({inputs:{x:P},backend:t,attrs:{shape:[P.shape[0],1,1]}});return b.push(M),M}return P};if(C&&R.push(D(a,c)),S&&R.push(D(i,c)),k){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(f,\"float32\"));R.push(P),b.push(P)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type===\"SAME\"||g.padInfo.type===\"VALID\"))x=zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h===\"channelsLast\"&&A().getBool(\"WEBGL_EXP_CONV\")){let R=d?yi(d,!0):null,D=new Uc(g,C,R,S,k),P=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();x=t.runWebGLProgram(D,O,\"float32\",P)}else if(A().getBool(\"WEBGL_CONV_IM2COL\"))x=Vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?yi(d,!1):null,D=new Wc(g,C,R,S,k),P=_();x=t.runWebGLProgram(D,P,\"float32\")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),$}var kF={kernelName:Io,backendName:\"webgl\",kernelFunc:XJ};function YJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=[],h=c;h==null&&(h=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=w.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=A().getBool(\"WEBGL_PACK_DEPTHWISECONV\")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?yi(m,x):null,C=[n,s],S=a!=null,k=i!=null,_=m===\"leakyrelu\";if(S&&C.push(a),k&&C.push(i),_){let P=t.makeTensorInfo([],\"float32\",y.createScalarValue(d,\"float32\"));C.push(P),f.push(P)}let $;x?$=new Hc(g,S,b,k,_):$=new Gc(g,S,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram($,C,\"float32\",R);return f.forEach(P=>t.disposeIntermediateTensorInfo(P)),D}var NF={kernelName:vo,backendName:\"webgl\",kernelFunc:YJ};var ag=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=[\"x\",\"indices\"],this.outputShape=o;let s=Re(o.length),a=`\n int index;`;for(let i=0;i= ${this.paramsShape[i]};\n flattenIndex += index * ${this.strides[i]};`;this.userCode=`\n void main() {\n ${s} coords = getOutputCoords();\n int flattenIndex = 0;\n bool out_of_bounds = false;\n\n ${a}\n\n setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n }\n `}};function QJ(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=w.prepareAndValidate(o,n),m=te({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=te({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let x=t.readSync(n.dataId),b=t.bufferSync(o),C=jR(x,b,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,C.values)}let f=new ag(a,l,[u,c],o.shape),h=t.runWebGLProgram(f,[d,m],d.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:p}});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(h),g}var TF={kernelName:vn,backendName:\"webgl\",kernelFunc:QJ};var ig=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.outputShape=t,this.rank=t.length;let o=Re(this.rank),n=ZJ(e,2);this.userCode=`\n void main() {\n ${o} resRC = getOutputCoords();\n int index = int(getIndices(resRC.x, resRC.z));\n float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;\n setOutput(inBounds * getA(${n}));\n }\n `}};function ZJ(r,e){let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=y.sizeFromShape(s.shape),l=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(d);let f=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype===\"string\"){let b=t.bufferSync(d),C=t.bufferSync(m),S=XR(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var _F={kernelName:aa,backendName:\"webgl\",kernelFunc:Tv};var JJ=\"return float(a > b);\",eee=`\n return vec4(greaterThan(a, b));\n`,tee=nt({opSnippet:JJ,packedOpSnippet:eee,cpuKernelImpl:YR,dtype:\"bool\"}),EF={kernelName:kn,backendName:\"webgl\",kernelFunc:tee};var ree=\"return float(a >= b);\",oee=`\n return vec4(greaterThanEqual(a, b));\n`,nee=nt({opSnippet:ree,packedOpSnippet:oee,dtype:\"bool\",cpuKernelImpl:QR}),$F={kernelName:Nn,backendName:\"webgl\",kernelFunc:nee};function see(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!0,t)}var RF={kernelName:Vi,backendName:\"webgl\",kernelFunc:see};var aee=\"return float(!isnan(x) && !isinf(x));\",iee=xe({opSnippet:aee,dtype:\"bool\"}),DF={kernelName:Tn,backendName:\"webgl\",kernelFunc:iee};var uee=\"return float(isinf(x));\",pee=xe({opSnippet:uee,dtype:\"bool\"}),AF={kernelName:_n,backendName:\"webgl\",kernelFunc:pee};var cee=\"return float(isnan(x));\",lee=xe({opSnippet:cee,dtype:\"bool\"}),FF={kernelName:En,backendName:\"webgl\",kernelFunc:lee};var mee=\"return float(a < b);\",dee=`\n return vec4(lessThan(a, b));\n`,fee=nt({opSnippet:mee,packedOpSnippet:dee,cpuKernelImpl:ZR,dtype:\"bool\"}),PF={kernelName:Rn,backendName:\"webgl\",kernelFunc:fee};var hee=\"return float(a <= b);\",gee=`\n return vec4(lessThanEqual(a, b));\n`,xee=nt({opSnippet:hee,packedOpSnippet:gee,cpuKernelImpl:JR,dtype:\"bool\"}),OF={kernelName:Dn,backendName:\"webgl\",kernelFunc:xee};function yee(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=eD(o,n,s);return e.makeTensorInfo([a.length],\"float32\",a)}var MF={kernelName:An,backendName:\"webgl\",kernelFunc:yee};var bee=Fo+`\n return x < 0.0 ? 0./0. : log(x);\n`,Cee=`\n vec4 result = log(x);\n bvec4 isNaN = isnan(x);\n result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n return result;\n`,wee=xe({opSnippet:bee,packedOpSnippet:Cee,cpuKernelImpl:tD}),LF={kernelName:Fn,backendName:\"webgl\",kernelFunc:wee};var See=Fo+`\n return log(1.0 + x);\n`,Iee=xe({opSnippet:See}),BF={kernelName:Pn,backendName:\"webgl\",kernelFunc:Iee};var vee=\"return float(a >= 1.0 && b >= 1.0);\",kee=`\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n`,Nee=nt({opSnippet:vee,packedOpSnippet:kee,dtype:\"bool\"}),zF={kernelName:On,backendName:\"webgl\",kernelFunc:Nee};var Tee=\"return float(!(x >= 1.0));\",_ee=xe({opSnippet:Tee}),VF={kernelName:Mn,backendName:\"webgl\",kernelFunc:_ee};var Eee=\"return float(a >= 1.0 || b >= 1.0);\",$ee=`\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n`,Ree=nt({opSnippet:Eee,packedOpSnippet:$ee,dtype:\"bool\"}),WF={kernelName:Ln,backendName:\"webgl\",kernelFunc:Ree};var ug=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -${a}; j <= ${a}; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= ${i}) {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * ${p};\n setOutput(val);\n }\n `}};var pg=class{constructor(e,t,o,n,s){this.variableNames=[\"x\"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < ${this.outputShape[3]};\n bool hasNextRow = c < ${this.outputShape[2]};\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - ${a};\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - ${a}; j <= ${a}; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * ${p};\n setOutput(result);\n }\n `}};var Dee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool(\"WEBGL_PACK_NORMALIZATION\")?new pg(n.shape,s,a,i,p):new ug(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},UF={kernelName:Bn,backendName:\"webgl\",kernelFunc:Dee};var cg=class{constructor(e,t,o,n,s){this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < ${this.depth}; ++d) {\n int depthBegin = int(max(0.0, float(d - ${t})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${t} + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = ${this.depth};\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float(${n}) * norm + float(${o});\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float(${n})\n * float(${s})\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * ${s});\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n `}};var Aee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new cg(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},GF={kernelName:Ya,backendName:\"webgl\",kernelFunc:Aee};function HF(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Yr(i,r.dtype,\"max\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function _v(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,S=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,\"max\",!1);return t.runWebGLProgram(l,[n],n.dtype)}var jF={kernelName:Wn,backendName:\"webgl\",kernelFunc:Mee};function Lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new bu(l,\"max\",!1);return t.runWebGLProgram(m,[n],n.dtype)}var XF={kernelName:ia,backendName:\"webgl\",kernelFunc:Lee};var lg=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${p});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${s};\n wR += ${n}) {\n float dyR = float(dyRCorner + wR) / ${t}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${a}; wC++) {\n float dyC = float(dyCCorner + wC) / ${o}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = ${u} - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * ${a} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n `}},mg=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=c-1-e.padInfo.left,f=p*u*c-1;this.userCode=`\n const ivec3 pads = ivec3(${l}, ${m}, ${d});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${p};\n wD += ${s}) {\n float dyD = float(dyDCorner + wD) / ${t}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${u};\n wR += ${a}) {\n float dyR = float(dyRCorner + wR) / ${o}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${c};\n wC += ${i}) {\n float dyC = float(dyCCorner + wC) / ${n}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = ${f} -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * ${u} * ${c} +\n wR * ${c} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n `}};function Bee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new bu(m,\"max\",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new mg(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var YF={kernelName:Gi,backendName:\"webgl\",kernelFunc:Bee};function zee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Vs([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=!0,f=new Us(m,\"max\",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new lg(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var QF={kernelName:Ui,backendName:\"webgl\",kernelFunc:zee};function ZF(r,e,t,o){let n=new Us(t,\"max\",!1),s=o.runWebGLProgram(n,[r],\"float32\");n=new Us(t,\"max\",!0,!0,e);let a=o.runWebGLProgram(n,[r],\"float32\");return[s,a]}var JF={kernelName:ua,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(o.shape,n,s,u,a),[l,m]=ZF(o,i,c,p);return[l,m]}};function e3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Yr(i,\"float32\",\"mean\",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var t3={kernelName:Un,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,c=w.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;Rc[0]+e[l]+c[1]);let n=e.length,s=Re(n),a=t.map(c=>c[0]).join(\",\"),i=t.map((c,l)=>c[0]+e[l]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n),u=o===\"reflect\"?0:1;if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start) {\n outC = start * 2 - outC - ${u};\n } else if(outC >= end) {\n outC = (end - 1) * 2 - outC + ${u};\n }\n setOutput(getX(outC - start));\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n for (int i = 0; i < ${n}; i++) {\n if (outC[i] < start[i]) {\n outC[i] = start[i] * 2 - outC[i] - ${u};\n } else if(outC[i] >= end[i]) {\n outC[i] = (end[i] - 1) * 2 - outC[i] + ${u};\n }\n }\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n `}};var fg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=Re(n),a=t.map(f=>f[0]).join(\",\"),i=t.map((f,h)=>f[0]+e[h]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=o===\"reflect\"?0:1,d=\"\";if(n===1){let f=`\n ${s} source = rc;\n if (source < start) {\n source = start * 2 - source - ${m};\n } else if (source >= end) {\n source = (end - 1) * 2 - source + ${m};\n }\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n `}else{let f=`\n ${s} source = rc;\n ${s} lt = ${s}(lessThan(source, start));\n ${s} gte = ${s}(greaterThanEqual(source, end));\n ${s} orig = 1 - (lt + gte);\n source = orig * source +\n lt * (start * 2 - source - ${m}) +\n gte * ((end - 1) * 2 - source + ${m});\n source -= start;\n `;d=`\n ${s} rc = outputLoc;\n ${f}\n result[0] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[1] = getChannel(getX(${u.join()}), ${l});\n }\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {\n ${f}\n result[2] = getChannel(getX(${u.join()}), ${l});\n ${p[n-1]} += 1;\n if(${c}) {\n ${f}\n result[3] = getChannel(getX(${u.join()}), ${l});\n }\n }\n `}this.userCode=`\n const ${s} start = ${s}(${a});\n const ${s} end = ${s}(${i});\n\n void main() {\n ${s} outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n ${d}\n setOutput(result);\n }\n `}};var Hee=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new fg(o.shape,n,s):new dg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},n3={kernelName:Kn,backendName:\"webgl\",kernelFunc:Hee};var Kee=`if (b == 0.0) return NAN;\n return mod(a, b);`,qee=`\n vec4 result = mod(a, b);\n bvec4 isNaN = equal(b, vec4(0.0));\n `+Xr+`\n return result;\n`,jee=nt({opSnippet:Kee,packedOpSnippet:qee}),s3={kernelName:qn,backendName:\"webgl\",kernelFunc:jee};var hg=class{constructor(e,t,o){this.variableNames=[\"probs\"],this.customUniforms=[{name:\"seed\",type:\"float\"}],this.outputShape=[e,o],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < ${t-1}; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float(${t-1}));\n }\n `}};var Xee=`\nif (a == b) {\n return 1.0;\n};\nreturn a / b;`,Yee=`\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n`,Ev=nt({opSnippet:Xee,packedOpSnippet:Yee,checkOutOfBounds:!0}),a3={kernelName:fn,backendName:\"webgl\",kernelFunc:Ev};var i3=\"return a - b;\",$v=nt({opSnippet:i3,packedOpSnippet:i3,supportsComplex:!0,cpuKernelImpl:kD}),u3={kernelName:Ts,backendName:\"webgl\",kernelFunc:$v};function Rv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=_v({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:t}),l=kv({inputs:{x:c},backend:t}),m=wp({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ev({inputs:{a:l,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var p3={kernelName:Is,backendName:\"webgl\",kernelFunc:Rv};function Qee(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Rv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],\"int32\",m);return i||t.disposeIntermediateTensorInfo(p),d}var c3={kernelName:jn,backendName:\"webgl\",kernelFunc:Qee};var Zee=Wt+`\n return -x;\n`,Jee=`\n vec4 result = -x;\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`;function ete(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=aD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool(\"WEBGL_PACK_UNARY_OPERATIONS\")?n=new Fr(o.shape,Jee):n=new tr(o.shape,Zee),t.runWebGLProgram(n,[o],o.dtype)}var l3={kernelName:pa,backendName:\"webgl\",kernelFunc:ete};var tte=Vt.nonMaxSuppressionV3Impl;function rte(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=tte(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var m3={kernelName:Qn,backendName:\"webgl\",kernelFunc:rte};var ote=Vt.nonMaxSuppressionV4Impl;function nte(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=ote(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],\"int32\",new Int32Array(m)),t.makeTensorInfo([],\"int32\",new Int32Array([d]))]}var d3={kernelName:Qa,backendName:\"webgl\",kernelFunc:nte};var ste=Vt.nonMaxSuppressionV5Impl;function ate(r){w.warn(\"tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=ste(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var f3={kernelName:Zn,backendName:\"webgl\",kernelFunc:ate};var gg=class{constructor(e,t,o,n){this.variableNames=[\"indices\"],this.outputShape=[e,t],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float(${n}), float(${o}),\n float(index == coords.y)));\n }\n `}};var ite=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new gg(u,a,i,p),l=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},h3={kernelName:Jn,backendName:\"webgl\",kernelFunc:ite};function sm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=bi({inputs:{input:o},backend:t}),s=sm({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var g3={kernelName:Sa,backendName:\"webgl\",kernelFunc:sm};function x3(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=bi({inputs:{input:o},backend:t}),s=x3({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var y3={kernelName:ca,backendName:\"webgl\",kernelFunc:x3};function ute(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return eg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=eg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=vv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var b3={kernelName:la,backendName:\"webgl\",kernelFunc:ute};var xg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=Re(n),a=t.map(u=>u[0]).join(\",\"),i=t.map((u,c)=>u[0]+e[c]).join(\",\"),p=[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,n);if(n===1){this.userCode=`\n int start = ${a};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(value);\n } else {\n setOutput(getX(outC - start));\n }\n }\n `;return}this.userCode=`\n ${s} start = ${s}(${a});\n ${s} end = ${s}(${i});\n\n void main() {\n ${s} outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(value);\n } else {\n ${s} coords = outC - start;\n setOutput(getX(${p}));\n }\n }\n `}};var yg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:\"value\",type:\"float\"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=Re(n),a=t.map(h=>h[0]).join(\",\"),i=t.map((h,g)=>h[0]+e[g]).join(\",\"),p=Rt(\"rc\",n),u=Rt(\"source\",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?\"source\":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1;\n if(${c}) {\n `,n===1?\"\":`}\n rc = outputLoc;\n ${p[n-2]} += 1;\n if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?\"\":` ${p[n-1]} += 1;\n if(${c}) {`],d=n===1?\"rc < start || rc >= end\":\"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))\",f=\"\";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ci({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new yg(n.shape,s,a):new xg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},C3={kernelName:es,backendName:\"webgl\",kernelFunc:Dv};var pte=`\n if(a < 0.0 && floor(b) < b){\n return NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n return (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n`,cte=`\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n bvec4 isNaN1 = lessThan(a, vec4(0.0));\n bvec4 isNaN2 = lessThan(floor(b), b);\n bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);\n `+Xr+`\n return result;\n`,lte=nt({opSnippet:pte,packedOpSnippet:cte}),w3={kernelName:ts,backendName:\"webgl\",kernelFunc:lte};function mte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),c=u,l=w.getAxesPermutation(c,i),m=n;l!=null&&(m=bt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims(\"prod\",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=uD(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Yr(x,b,\"prod\",t);d=te({inputs:{x:C},backend:t,attrs:{shape:f}}),p.push(x),p.push(C)}if(a){p.push(d);let f=w.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var S3={kernelName:os,backendName:\"webgl\",kernelFunc:mte};function dte(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,d,f]=pD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],\"int32\",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var I3={kernelName:Hp,backendName:\"webgl\",kernelFunc:dte};function fte(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=cD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],\"int32\",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var v3={kernelName:Kp,backendName:\"webgl\",kernelFunc:fte};function hte(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=lD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var k3={kernelName:qp,backendName:\"webgl\",kernelFunc:hte};var Av=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=mD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},N3={kernelName:ma,backendName:\"webgl\",kernelFunc:Av};var gte=\"return 1.0 / x;\",xte=xe({opSnippet:gte}),T3={kernelName:ns,backendName:\"webgl\",kernelFunc:xte};var yte=Wt+`\n return (x < 0.0) ? 0.0 : x;\n`,bte=`\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Cte=xe({opSnippet:yte,packedOpSnippet:bte}),_3={kernelName:ss,backendName:\"webgl\",kernelFunc:Cte};var wte=Wt+`\n return (x < 0.0) ? 0.0 : min(6.0, x);\n`,Ste=`\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,Ite=xe({opSnippet:wte,packedOpSnippet:Ste}),E3={kernelName:us,backendName:\"webgl\",kernelFunc:Ite};var bg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)\":m=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n `}};var Cg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m=\"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)\":m=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${m};\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n `}};function vte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Cg(n.shape,p,u,s,a):new bg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],\"float32\")}var $3={kernelName:is,backendName:\"webgl\",kernelFunc:vte};var wg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), ${n-1}.0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function kte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var R3={kernelName:Ja,backendName:\"webgl\",kernelFunc:kte};var Sg=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":d=\"vec2(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${c[0]/l[0]},\n ${c[1]/l[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${p}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}};var Ig=class{constructor(e,t,o,n,s){this.variableNames=[\"A\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?\"0.5\":\"0.0\",d;s?d=\"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))\":d=\"vec3(yRC) * effectiveInputOverOutputRatioRC\",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${c[0]/l[0]},\n ${c[1]/l[1]},\n ${c[1]/l[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${p}.0,\n ${p}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${d};\n\n // Compute the coordinators of nearest neighbor point.\n ivec3 sourceNearestRC = ivec3(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${m})));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${u-1};\n bool hasNextRow = coords.z < ${o-1};\n\n vec4 newValue = vec4(\n getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n setOutput(newValue);\n }\n `}};function Nte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool(\"WEBGL_PACK_IMAGE_OPERATIONS\")?new Ig(n.shape,p,u,s,a):new Sg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var D3={kernelName:as,backendName:\"webgl\",kernelFunc:Nte};var vg=class{constructor(e,t,o){this.variableNames=[\"dy\"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${c});\n const float widthScale = float(${l});\n\n const float invHeightScale = float(${m});\n const float invWidthScale = float(${d});\n\n const int winHeight = int(${f});\n const int winWidth = int(${h});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${a}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float sourceFracRow =\n float(${p[0]}) *\n (float(dyR) / float(${u[0]}));\n\n float sourceFracCol =\n float(${p[1]}) *\n (float(dyC) / float(${u[1]}));\n\n int sourceNearestRow = int(min(\n float(int(${n}) - 1),\n ${o} ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int(${s}) - 1),\n ${o} ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}};function Tte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var A3={kernelName:Za,backendName:\"webgl\",kernelFunc:Tte};var kg=class{constructor(e,t){this.variableNames=[\"x\"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${e[0]} - coord - 1));\n }\n `;return}let n=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,s=e.map((i,p)=>n(p)).join(\",\"),a=Re(o);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${s}));\n }\n `}};var Ng=class{constructor(e,t){this.variableNames=[\"x\"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=Rt(\"rc\",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(o);o===1?this.userCode=`\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX(${e[0]} - rc - 1),\n ${e[0]} - rc - 1);\n if(${s}){\n result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),\n ${e[0]} - (rc + 1) - 1);\n }\n setOutput(result);\n }\n `:this.userCode=`\n void main() {\n ${i} rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = ${p(n.slice())};\n if(${s}){\n result.g = ${u(n.slice())};\n }\n if(${a}) {\n result.b = ${c(n.slice())};\n if(${s}) {\n result.a = ${l(n.slice())};\n }\n }\n setOutput(result);\n }\n `;function p(f){return m(f)}function u(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",m(f)}function c(f){return f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function l(f){return f[o-1]=\"(\"+f[o-1]+\" + 1)\",f[o-2]=\"(\"+f[o-2]+\" + 1)\",m(f)}function m(f){let h=e.map((b,C)=>d(C,f)),g=h.join(\",\"),x=h.slice(-2).join(\",\");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function _te(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Dt({inputs:{x:n},backend:t});let p=A().getBool(\"WEBGL_PACK_ARRAY_OPERATIONS\")?new Ng(n.shape,i):new kg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var F3={kernelName:ps,backendName:\"webgl\",kernelFunc:_te};var Tg=class{constructor(e,t){this.variableNames=[\"Image\"],this.outputShape=[],this.customUniforms=[{name:\"params\",type:\"vec4\"}];let o=e[1],n=e[2];this.outputShape=e;let s=\"\";typeof t==\"number\"?s=`float outputValue = ${t.toFixed(2)};`:s=`\n vec3 fill = vec3(${t.join(\",\")});\n float outputValue = fill[coords[3]];`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n int y = coords[1];\n float coordXFloat = (float(x) - params[0]) * params[3] -\n (float(y) - params[1]) * params[2];\n float coordYFloat = (float(x) - params[0]) * params[2] +\n (float(y) - params[1]) * params[3];\n int coordX = int(round(coordXFloat + params[0]));\n int coordY = int(round(coordYFloat + params[1]));\n ${s}\n if(coordX >= 0 && coordX < ${n} && coordY >= 0 && coordY < ${o}) {\n outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n }\n setOutput(outputValue);\n }\n `}};var P3={kernelName:Ds,backendName:\"webgl\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Tg(o.shape,s),[u,c]=w.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var Ete=`\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n`,$te=xe({opSnippet:Ete}),O3={kernelName:cs,backendName:\"webgl\",kernelFunc:$te};var Rte=\"return inversesqrt(x);\",Dte=xe({opSnippet:Rte,cpuKernelImpl:dD}),M3={kernelName:ls,backendName:\"webgl\",kernelFunc:Dte};var Cu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < ${e}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${t}; j++) {\n int index = round(${m});\n flattenedIndex += index * ${x};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(${g}, sum, float(found)));\n }\n `}};var _g=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=[\"updates\",\"indices\",\"defaultValue\"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),c=Re(a.length),l=\"\";o===1?l=\"i\":o===2&&(l=\"i, j\");let m=`getIndices(${l})`,d=\"\";n===1?d=\"i\":n===2&&(d=\"i, coords[1]\");let f=`getUpdates(${d})`,h=\"\";p&&(h=\"coords[0], coords[1]\");let g=`getDefaultValue(${h})`,x=t>1?\"strides[j]\":\"strides\",b=t>1?\"strides[j + 1]\":\"strides\";this.userCode=`\n ${u} strides = ${u}(${s});\n\n void main() {\n ${c} coords = getOutputCoords();\n vec4 sum = vec4(0.);\n vec4 found = vec4(0.);\n for (int i = 0; i < ${e}; i+=2) {\n ivec2 flattenedIndex = ivec2(0);\n for (int j = 0; j < ${t}; j+=2) {\n ivec4 index = round(${m});\n flattenedIndex += index.xz * ${x};\n if (j + 1 < ${t}) {\n flattenedIndex += index.yw * ${b};\n }\n }\n if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n vec4 updVals = ${f};\n if (flattenedIndex[0] == coords[0]) {\n sum.xy += updVals.xy;\n found.xy = vec2(1.);\n } else if (flattenedIndex[0] == coords[0] + 1) {\n sum.zw += updVals.xy;\n found.zw = vec2(1.);\n }\n if (flattenedIndex[1] == coords[0]) {\n sum.xy += updVals.zw;\n found.xy = vec2(1.);\n } else if (flattenedIndex[1] == coords[0] + 1) {\n sum.zw += updVals.zw;\n found.zw = vec2(1.);\n }\n }\n }\n setOutput(mix(${g}, sum, found));\n }\n `}};function Ate(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],\"float32\",new Float32Array([0])),g;A().getBool(\"WEBGL_PACK\")?g=new _g(p,i,d.shape.length,f.shape.length,c,m):g=new Cu(p,i,d.shape.length,f.shape.length,c,m);let x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var L3={kernelName:ms,backendName:\"webgl\",kernelFunc:Ate};var Eg=class{constructor(e,t,o,n){this.variableNames=[\"sortedSequence\",\"values\"],this.customUniforms=[{name:\"numInputs\",type:\"int\"}],this.outputShape=[e,o];let s=\"while (left < right) {\",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=A().getNumber(\"WEBGL_VERSION\")===2?s:a,p=n===\"left\"?\"<\":\"<=\";this.userCode=`\n int findBound(int batch, float value) {\n int left = 0;\n int right = numInputs;\n int mid;\n ${i}\n mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${p} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int valueIndex = coords[1];\n\n float value = getValues(batch, valueIndex);\n\n setOutput(float(findBound(batch, value)));\n }\n `}};function Fte(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Eg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],\"int32\",p)}var B3={kernelName:fs,backendName:\"webgl\",kernelFunc:Fte};var $g=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s=\"resRC\",n=\"resRC\";else{let i=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],p=[],u=[];for(let c=0;c= 1.0) {\n setOutput(getA(${s}));\n } else {\n setOutput(getB(${s}));\n }\n }\n `}};function Pte(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new $g(o.shape.length,n.shape,n.shape.length);return t.runWebGLProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var z3={kernelName:fa,backendName:\"webgl\",kernelFunc:Pte};var Ote=`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${w.SELU_SCALEALPHA};\n float scale = ${w.SELU_SCALE};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`,Mte=xe({opSnippet:Ote}),V3={kernelName:hs,backendName:\"webgl\",kernelFunc:Mte};var Lte=Fo+`\n return 1.0 / (1.0 + exp(-1.0 * x));\n`,Bte=`\n vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:hD}),W3={kernelName:bs,backendName:\"webgl\",kernelFunc:zte};var Vte=`\n if (isnan(x)) { return 0.0; }\n return sign(x);\n`,Wte=xe({opSnippet:Vte}),U3={kernelName:ys,backendName:\"webgl\",kernelFunc:Wte};var Ute=Fo+`\n return sin(x);\n`,Gte=`\n vec4 result = sin(x);\n bvec4 isNaN = isnan(x);\n ${Xr}\n return result;\n`,Hte=xe({opSnippet:Ute,packedOpSnippet:Gte}),G3={kernelName:gs,backendName:\"webgl\",kernelFunc:Hte};var Kte=`\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n`,qte=xe({opSnippet:Kte}),H3={kernelName:xs,backendName:\"webgl\",kernelFunc:qte};var jte=`\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n`,Xte=xe({opSnippet:jte}),K3={kernelName:Cs,backendName:\"webgl\",kernelFunc:Xte};var Yte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet\");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},q3={kernelName:ga,backendName:\"webgl\",kernelFunc:Yte};function Qte(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:\n ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw:\n ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw:\n ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw:\n ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,d,f,h]=xD(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],\"bool\",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var j3={kernelName:Ki,backendName:\"webgl\",kernelFunc:Qte};function Zte(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=yD(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var X3={kernelName:ei,backendName:\"webgl\",kernelFunc:Zte};function Jte(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var Y3={kernelName:ya,backendName:\"webgl\",kernelFunc:Jte};function ere(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error(\"Data should be at least 1 dimensional but received scalar\");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape\n ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape\n ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var Q3={kernelName:ba,backendName:\"webgl\",kernelFunc:ere};function tre(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let x=t.bufferSync(n),b=t.bufferSync(s),C=y.decodeString(t.readSync(a.dataId)[0]),S=fD(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Cu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var Z3={kernelName:vs,backendName:\"webgl\",kernelFunc:tre};function rre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=Gs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var J3={kernelName:xa,backendName:\"webgl\",kernelFunc:rre};var eP=\"return sqrt(x);\",ore=xe({opSnippet:eP,packedOpSnippet:eP,cpuKernelImpl:bD}),tP={kernelName:ws,backendName:\"webgl\",kernelFunc:ore};var nre=\"return x * x;\",sre=xe({opSnippet:nre}),rP={kernelName:qi,backendName:\"webgl\",kernelFunc:sre};var oP=\"return (a - b) * (a - b);\",are=nt({opSnippet:oP,packedOpSnippet:oP}),nP={kernelName:ks,backendName:\"webgl\",kernelFunc:are};function ire(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");let s=t.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=CD(a,\"string\",o);return t.makeTensorInfo(n.shape,\"string\",i)}var sP={kernelName:Ru,backendName:\"webgl\",kernelFunc:ire};function ure({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Wt+`\n return x > 0.0 ? 1.0 : float(${e.alpha});\n `,s=new tr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var aP={kernelName:wo,backendName:\"webgl\",kernelFunc:ure};var Rg=class{constructor(e,t,o){this.variableNames=[\"x\"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(o.length),i=\"\";if(n===1)i=\"coords * strides + begin\";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(\",\")}this.userCode=`\n ${s} begin = ${s}(${e});\n ${s} strides = ${s}(${t});\n\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}};function pre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let $=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=wD(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var iP={kernelName:Ns,backendName:\"webgl\",kernelFunc:pre};function cre(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=SD(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var uP={kernelName:Ca,backendName:\"webgl\",kernelFunc:cre};function lre(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=ID(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],\"int32\",u),t.makeTensorInfo([m],\"string\",c),t.makeTensorInfo([2],\"int32\",new Int32Array(l))]}var pP={kernelName:ji,backendName:\"webgl\",kernelFunc:lre};function mre(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!==\"string\")throw new Error(\"Input must be of datatype string\");if(n<=0)throw new Error(\"Number of buckets must be at least 1\");let a=t.readSync(s.dataId),i=vD(a,n);return t.makeTensorInfo(s.shape,\"int32\",i)}var cP={kernelName:Xi,backendName:\"webgl\",kernelFunc:mre};var dre=\"return tan(x);\",fre=xe({opSnippet:dre}),lP={kernelName:_s,backendName:\"webgl\",kernelFunc:fre};var hre=`\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n`,gre=xe({opSnippet:hre}),mP={kernelName:Es,backendName:\"webgl\",kernelFunc:gre};function xre(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:t,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:t,attrs:{shape:m}}),g=new Cu(p,i,d.shape.length,f.shape.length,c,m,!1,!0),x=t.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(x),b}var dP={kernelName:ds,backendName:\"webgl\",kernelFunc:xre};var Dg=class{constructor(e,t){this.variableNames=[\"A\"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\",\"resRC.u\"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=ND(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Dg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var fP={kernelName:po,backendName:\"webgl\",kernelFunc:Fv};var Ag=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"negativeInf\",type:\"float\"},{name:\"dir\",type:\"int\"},{name:\"inc\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced above,\n // Figure5(a) shows that element[1] is in the\n // second half of the group when group size is 2, but it is in the\n // first half of the group when group size is 4.\n\n bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n // Denotes which direction indices are in (ascending or descending).\n bool reverse = imod(elemIdx, 2 * dir) >= dir;\n bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) { // Elements in opposite order of direction\n int iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutput(float(i0));\n } else {\n setOutput(float(i1));\n }\n }\n `}},Fg=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.customUniforms=[{name:\"n\",type:\"int\"},{name:\"firstPass\",type:\"int\"},{name:\"k\",type:\"int\"}],this.outputShape=e,this.userCode=`\n void main() {\n // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int elemIdx = coords[1];\n\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),\n // we only need to output the indices at positions |, the indices at\n // positions _ can be thrown away, see Figure5(b) After Phase 2\n // (Merge phase) in the Bitonic Top K paper referenced above.\n // For example, the paper shows we only need to output the orange bars.\n // The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back\n // to the previous sequence to find the corresponding value,\n // we need to double the index. When we double the index,\n // we basically interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n // of each 2k positions by - elemIdx % k. E.g. for output at\n // index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n float x0 = getX(batch, i0);\n float x1 = i1 < n ? getX(batch, i1) : x0;\n\n setOutput(x0 >= x1 ? float(i0) : float(i1));\n }\n `}};function kp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function hP(r){let e=1;for(;ep){let P=t.readSync(n.dataId),[O,M]=TD(P,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,\"int32\",[])];if(c===1)return[n,Ci({attrs:{shape:u,dtype:\"int32\",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:t});m&&kp(t,d);let x=hP(s),b=hP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Ag(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=t.runWebGLProgram(B,L,\"int32\",U),kp(t,j)};for(let P=1;P=1;M/=2)k(O,M,[h,b])}for(let P=b;P>x;P/=2){let O=S(),M=new Fg([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=t.runWebGLProgram(M,O,\"int32\",B),kp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,C.shape)}let _=C;C=Gs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),kp(t,_);let $=Tv({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});kp(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:t}),kp(t,_);let D=$;return $=te({inputs:{x:$},attrs:{shape:R},backend:t}),kp(t,D),[$,C]}var gP={kernelName:$s,backendName:\"webgl\",kernelFunc:bre};var Pg=class{constructor(e,t,o,n,s,a){this.variableNames=[\"Image\",\"Transforms\"],this.outputShape=a;let i=o===\"nearest\"?1:2,p;switch(n){case\"constant\":p=1;break;case\"reflect\":p=2;break;case\"wrap\":p=3;break;case\"nearest\":p=4;break;default:p=1;break}this.userCode=`\n float mapCoord(float outCoord, float len) {\n float inCoord = outCoord;\n if(${p} == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n inCoord -= sz2 * float(int(float(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord -= len * float(int(float(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${p} == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n } else {\n return outCoord;\n }\n }\n\n float readWithFillValue(int batch, int coordY, int coordX,\n int channel) {\n float outputValue;\n if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = float(${s});\n }\n return outputValue;\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n float outputValue;\n int batch = coords[0];\n int x = coords[2];\n int y = coords[1];\n int channel = coords[3];\n float xf = float(x);\n float yf = float(y);\n float a1 = getTransforms(batch, 0);\n float a2 = getTransforms(batch, 1);\n float a3 = getTransforms(batch, 2);\n float b1 = getTransforms(batch, 3);\n float b2 = getTransforms(batch, 4);\n float b3 = getTransforms(batch, 5);\n float c1 = getTransforms(batch, 6);\n float c2 = getTransforms(batch, 7);\n float projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = float(${s});\n } else {\n float inX = (a1 * xf + a2 * yf + a3) / projection;\n float inY = (b1 * xf + b2 * yf + b3) / projection;\n float mapX = mapCoord(inX, float(${t}));\n float mapY = mapCoord(inY, float(${e}));\n\n if (${i} == 1) {\n int coordY = int(round(mapY));\n int coordX = int(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n float yFloor = floor(mapY);\n float xFloor = floor(mapX);\n float yCeil = yFloor + 1.0;\n float xCeil = xFloor + 1.0;\n float valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n float valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutput(outputValue);\n }\n `}};function Cre(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Pg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],\"float32\")}var xP={kernelName:Rs,backendName:\"webgl\",kernelFunc:Cre};function wre(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Vs(s,\"unique\"),console.warn(\"WARNING: \",\"UI might be locked temporarily as data is being downloaded\");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=_D(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],\"int32\",u)]}var yP={kernelName:Yi,backendName:\"webgl\",kernelFunc:wre};function Sre(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var bP={kernelName:wa,backendName:\"webgl\",kernelFunc:Sre};var Og=class{constructor(e,t){this.variableNames=[\"x\",\"segmentIds\"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p=\"0.0\",u=\"sumValue\",c=Math.floor(o/4)*4,l=o%4,m=`\n sumValue += dot(values, segFilter);\n `,d=\"\";s%o>0&&(d=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return initializationValue;\n }\n `);let f=\"\";s%o>0&&(f=`\n if (inIdx < 0 || inIdx >= ${s}) {\n return -1.0;\n }\n `),this.userCode=`\n const float initializationValue = ${p};\n\n float getValue(int batch, int inIdx) {\n ${d}\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n ${f}\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n ${a})) * float(${o}));\n int currentSeg = int(mod(float(outIdx), float(${a})));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${c}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n ${m}\n }\n\n int inIdx = inOffset + ${c};\n if (${l===1}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===2}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n ${m}\n } else if (${l===3}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n ${m}\n }\n setOutput(${u});\n }\n `}};function Ire(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=te({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=oi(n.dtype),g=(S,k,_,$,R)=>{let D=S.shape[0],P=S.shape[1],O=w.segment_util.segOpComputeOptimalWindowSize(P,R),M={windowSize:O,inSize:P,batchSize:D,numSegments:R},L=new Og(M,k),B=t.compileAndRun(L,[S,_],$);if(p.push(B),B.shape[1]===R)return B;let z=Av({backend:t,attrs:{start:0,stop:R,step:1,dtype:\"float32\"}}),U=Fv({inputs:{x:z},backend:t,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,$,R)},x=g(f,\"unsortedSegmentSum\",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}var CP={kernelName:Qi,backendName:\"webgl\",kernelFunc:Ire};var vre=[rA,nA,sA,aA,uA,pA,cA,lA,fA,hA,gA,xA,yA,bA,CA,wA,SA,IA,vA,kA,NA,_A,EA,$A,RA,PA,MA,LA,KD,zA,WA,UA,GA,HA,KA,qA,jA,XA,YA,QA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,cF,lF,mF,dF,fF,hF,xF,yF,bF,CF,SF,IF,vF,kF,NF,TF,_F,EF,$F,HD,RF,VA,DF,AF,FF,qD,PF,OF,MF,LF,BF,zF,VF,WF,UF,GF,KF,qF,jF,XF,YF,QF,JF,t3,r3,o3,n3,s3,c3,YD,l3,m3,d3,f3,DA,h3,y3,b3,C3,w3,jD,S3,I3,v3,k3,N3,AA,a3,T3,_3,E3,ZD,$3,R3,D3,A3,F3,P3,O3,M3,L3,B3,z3,V3,W3,U3,G3,H3,TA,p3,K3,q3,j3,X3,Y3,Q3,Z3,J3,tP,rP,nP,sP,aP,iP,uP,pP,cP,u3,eA,lP,mP,dP,fP,gP,xP,tA,yP,bP,CP,g3];for(let r of vre)ti(r);var we;(function(r){r[r.float32=0]=\"float32\",r[r.int32=1]=\"int32\",r[r.bool=2]=\"bool\",r[r.string=3]=\"string\",r[r.complex64=4]=\"complex64\"})(we||(we={}));var wu;(function(r){r[r.linear=0]=\"linear\",r[r.relu=1]=\"relu\",r[r.relu6=2]=\"relu6\",r[r.prelu=3]=\"prelu\",r[r.leakyrelu=4]=\"leakyrelu\",r[r.sigmoid=5]=\"sigmoid\",r[r.elu=6]=\"elu\"})(wu||(wu={}));var wP;function kre(r){wP=r.wasm.cwrap(So,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Nre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"_FusedMatMul for non non-float32 tensors not yet supported.\");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=wu[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return wP(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),S}var SP={kernelName:So,backendName:\"wasm\",setupFunc:kre,kernelFunc:Nre};function he(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,[\"number\",\"number\",\"number\"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,we[i.dtype],c),u}return{kernelName:r,backendName:\"wasm\",setupFunc:o,kernelFunc:n}}var IP=he(Xs);var vP=he(Vo);var kP=he(Wo);function Ge(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,d=t!=null?t:u.dtype,f=w.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return o(l,g,u.shape.length,m,x,c.shape.length,we[u.dtype],b),h}return{kernelName:r,backendName:\"wasm\",setupFunc:n,kernelFunc:s}}var Tre=!0,NP=Ge(uo,Tre);var TP;function _re(r){TP=r.wasm.cwrap(Uo,null,[\"array\",\"number\",\"number\",\"number\"])}function Ere(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return TP(s,n.length,we[o.dtype],a),o}var _P={kernelName:Uo,backendName:\"wasm\",setupFunc:_re,kernelFunc:Ere};function Np(r){let{inputs:{x:e},backend:t}=r;if(e.dtype===\"string\")return ar(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var EP={kernelName:Co,backendName:\"wasm\",kernelFunc:Np};var $P;function $re(r){$P=r.wasm.cwrap(co,null,[\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function ho(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Dre(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var RP={kernelName:co,backendName:\"wasm\",kernelFunc:ho,setupFunc:$re};function Tr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=w.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var QP={kernelName:da,backendName:\"wasm\",kernelFunc:zt};var ZP;function Hre(r){ZP=r.wasm.cwrap(Zo,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\"])}function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\")throw new Error(\"BatchMatMul for non non-float32 tensors not yet supported.\");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=zt({inputs:{x:n},backend:t,attrs:{shape:S}}),$=zt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,D=t.dataIdMap.get($.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,P,O],_.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return ZP(R,z,_.shape.length,D,U,$.shape.length,a,i,B),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var JP={kernelName:Zo,backendName:\"wasm\",setupFunc:Hre,kernelFunc:Kre};function Po(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(e,t,o),i=pt.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=y.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=pt.computeFlatOffset(s,c);return e.dtype===\"string\"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype===\"string\"){let f=pp(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)qre(p,c[0],m,s,a);else if(d===3)jre(p,c[0],c[1],m,s,a);else if(d===4)Xre(p,c[0],c[1],c[2],m,s,a);else{let f=pp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function qre(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=zt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:t,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var tO={kernelName:Js,backendName:\"wasm\",kernelFunc:Yre};var rO;function Qre(r){rO=r.wasm.cwrap(Jo,null,[\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\"])}function Zre(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function c(l){return e.dataIdMap.get(l.dataId).id}return rO(c(n),a,i,c(s),we[s.dtype],c(u)),u}var oO={kernelName:Jo,backendName:\"wasm\",setupFunc:Qre,kernelFunc:Zre};var Jre=!0,nO=Ge(qa,Jre);function eoe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],\"int32\",void 0,new Int32Array(i))}var sO={kernelName:ea,backendName:\"wasm\",kernelFunc:eoe};function Mr(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var aO={kernelName:yo,backendName:\"wasm\",kernelFunc:Mr};var iO=he(en);var uO;function toe(r){uO=r.wasm.cwrap(bo,null,[\"number\",\"number\",\"number\",\"number\"])}function roe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return uO(i,s,a,u),p}var pO={kernelName:bo,backendName:\"wasm\",setupFunc:toe,kernelFunc:roe};function Pv(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Np({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype===\"string\"){let d=a.map(C=>{let k=[-1,y.sizeFromShape(C.shape.slice(o))];return zt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=ap(f,s,e[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>t.disposeData(C.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),l=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumprod\",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;kO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var NO={kernelName:un,backendName:\"wasm\",setupFunc:hoe,kernelFunc:goe};var TO;function xoe(r){TO=r.wasm.cwrap(pn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function yoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype===\"float32\"||n.dtype===\"int32\",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims(\"cumsum\",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;TO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var _O={kernelName:pn,backendName:\"wasm\",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap(\"DenseBincount\",null,[\"number\",\"array\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"boolean\",\"number\"])}function Coe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],c=e.makeOutput(u,s.dtype);function l(m){return e.dataIdMap.get(m.dataId).id}return EO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var $O={kernelName:ra,backendName:\"wasm\",setupFunc:boe,kernelFunc:Coe};var RO;function woe(r){RO=r.wasm.cwrap(ln,null,[\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Soe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=e.makeOutput(f,\"float32\"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(f).buffer),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return RO(x,s,a===\"NHWC\"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var DO={kernelName:ln,backendName:\"wasm\",setupFunc:woe,kernelFunc:Soe};var AO;function Ioe(r){AO=r.wasm.cwrap(mn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function voe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,d=w.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,C=d.padInfo.left,S=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,R=d.inChannels,D=d.outChannels,P=d.padInfo.type===\"SAME\"?1:0;if(d.dataFormat!==\"channelsLast\")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(d.outShape,\"float32\"),M=o.dataIdMap.get(O.dataId).id;return AO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,$,R,D,M),O}var FO={kernelName:mn,backendName:\"wasm\",setupFunc:Ioe,kernelFunc:voe};var PO;function koe(r){PO=r.wasm.cwrap(\"Diag\",null,[\"number\",\"number\",\"number\",\"number\"])}function Noe(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return PO(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var OO={kernelName:oa,backendName:\"wasm\",setupFunc:koe,kernelFunc:Noe};var MO;function Toe(r){MO=r.wasm.cwrap(dn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=t.makeOutput(u.outShape,n.dtype);return MO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),c}var LO={kernelName:dn,backendName:\"wasm\",setupFunc:Toe,kernelFunc:_oe};var BO;function Eoe(r){BO=r.wasm.cwrap(Li,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(s.shape,s.dtype);return BO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var zO={kernelName:Li,backendName:\"wasm\",setupFunc:Eoe,kernelFunc:$oe};var VO;function Roe(r){VO=r.wasm.cwrap(Mi,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=t.makeOutput(n.shape,n.dtype);return VO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var WO={kernelName:Mi,backendName:\"wasm\",setupFunc:Roe,kernelFunc:Doe};var UO=he(hn);var GO;function Aoe(r){GO=r.wasm.cwrap(Xa,null,[\"number\",\"number\",\"number\"])}function Foe(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,\"float32\"),a=i=>t.dataIdMap.get(i.dataId).id;return GO(a(n),a(o),a(s)),s}var HO={kernelName:Xa,backendName:\"wasm\",setupFunc:Aoe,kernelFunc:Foe};var Poe=!1,KO=Ge(xn,Poe,\"bool\");var qO=he(gn);var jO=he(yn,\"float32\");function Lg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),zt({inputs:{x:n},backend:o,attrs:{shape:i}})}var XO={kernelName:na,backendName:\"wasm\",kernelFunc:Lg};var YO=he(bn,\"float32\");function Mv(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var QO={kernelName:sa,backendName:\"wasm\",kernelFunc:Mv};var ZO;function Ooe(r){ZO=r.wasm.cwrap(Cn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Moe(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return ZO(s,i,p,u,c,a),n}var JO={kernelName:Cn,backendName:\"wasm\",kernelFunc:Moe,setupFunc:Ooe};var eM=he(wn);var Loe=!1,tM=Ge(Sn,Loe);var rM;function Boe(r){rM=r.wasm.cwrap(In,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function zoe(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return rM(c,l,m,d,f,n,g),h}var oM={kernelName:In,backendName:\"wasm\",setupFunc:Boe,kernelFunc:zoe};var nM;function Voe(r){nM=r.wasm.cwrap(Io,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 Woe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=wu[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return nM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var sM={kernelName:Io,backendName:\"wasm\",setupFunc:Voe,kernelFunc:Woe};var aM;function Uoe(r){aM=r.wasm.cwrap(vo,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 Goe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=wu[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type===\"SAME\"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!==\"NHWC\")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,\"float32\"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return aM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var iM={kernelName:vo,backendName:\"wasm\",setupFunc:Uoe,kernelFunc:Goe};var uM;function Hoe(r){uM=r.wasm.cwrap(vn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function Koe(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=af.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return uM(d,we[o.dtype],h,a,l,i,g,x),u}var pM={kernelName:vn,backendName:\"wasm\",setupFunc:Hoe,kernelFunc:Koe};var cM;function qoe(r){cM=r.wasm.cwrap(\"Gather\",null,[\"number\",\"number\",\"array\",\"number\",\"number\",\"number\",\"array\",\"number\"])}function joe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let D=0;D=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let l=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=zt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=zt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,_=e.dataIdMap.get(g.dataId).id,$=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return cM(C,we[n.dtype],$,x,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var lM={kernelName:aa,backendName:\"wasm\",setupFunc:qoe,kernelFunc:joe};var Xoe=!1,mM=Ge(kn,Xoe,\"bool\");var Yoe=!1,dM=Ge(Nn,Yoe,\"bool\");var fM=he(Tn,\"bool\");var hM=he(_n,\"bool\");var gM=he(En,\"bool\");var xM;function Qoe(r){xM=r.wasm.cwrap($n,null,[\"number\",\"number\",\"number\",\"number\"])}function Zoe(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,\"float32\");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;xM(n,we[e.dtype],t,a)}return s}var yM={kernelName:$n,backendName:\"wasm\",setupFunc:Qoe,kernelFunc:Zoe};var Joe=!1,bM=Ge(Rn,Joe,\"bool\");var ene=!1,CM=Ge(Dn,ene,\"bool\");var wM;function tne(r){wM=r.wasm.cwrap(An,null,[\"number\",\"number\",\"number\",\"number\"])}function rne(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],\"float32\");return wM(t.dataIdMap.get(i.dataId).id,o,n,a),i}var SM={kernelName:An,backendName:\"wasm\",setupFunc:tne,kernelFunc:rne};var IM=he(Fn);var vM=he(Pn);var one=!1,kM=Ge(On,one,\"bool\");var NM=he(Mn);var nne=!1,TM=Ge(Ln,nne,\"bool\");var sne=!1,_M=Ge(R0,sne,\"bool\");var EM;function ane(r){EM=r.wasm.cwrap(Bn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function ine(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!==\"float32\")throw new Error(\"LRN error: x must have dtype float32\");let u=t.makeOutput(n.shape,n.dtype);return EM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var $M={kernelName:Bn,backendName:\"wasm\",setupFunc:ane,kernelFunc:ine};var RM;function une(r){RM=r.wasm.cwrap(Ya,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function pne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o;if(n.dtype!==\"float32\"||s.dtype!==\"float32\"||a.dtype!==\"float32\")throw new Error(\"LRNGrad error: x, y, and dy must have dtype float32\");let l=t.makeOutput(n.shape,n.dtype);return RM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var DM={kernelName:Ya,backendName:\"wasm\",setupFunc:une,kernelFunc:pne};var AM;function cne(r){AM=r.wasm.cwrap(zn,null,[\"number\",\"number\",\"number\",\"number\"])}function lne(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"max\",l,f);let[h,g]=w.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;AM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FM={kernelName:zn,backendName:\"wasm\",setupFunc:cne,kernelFunc:lne};var mne=!1,PM=Ge(Vn,mne);var OM;function dne(r){OM=r.wasm.cwrap(Wn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function fne(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype===\"float32\",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=w.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,d=c.padInfo.top,f=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,S=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!==\"channelsLast\")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let $=o.makeOutput(c.outShape,\"float32\"),R=o.dataIdMap.get($.dataId).id;return OM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),$}var MM={kernelName:Wn,backendName:\"wasm\",setupFunc:dne,kernelFunc:fne};var LM;function hne(r){LM=r.wasm.cwrap(\"MaxPool3D\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function gne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.makeOutput(c.outShape,n.dtype);return LM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var BM={kernelName:ia,backendName:\"wasm\",setupFunc:hne,kernelFunc:gne};var zM;function xne(r){zM=r.wasm.cwrap(\"MaxPool3DGrad\",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 yne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return zM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var VM={kernelName:Gi,backendName:\"wasm\",setupFunc:xne,kernelFunc:yne};var WM;function bne(r){WM=r.wasm.cwrap(\"MaxPoolGrad\",null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Cne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return WM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),l}var UM={kernelName:Ui,backendName:\"wasm\",setupFunc:bne,kernelFunc:Cne};var GM;function wne(r){GM=r.wasm.cwrap(\"MaxPoolWithArgmax\",null,[\"number\",\"number\",\"number\",\"number\",\"boolean\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,[1,1],i),l=t.makeOutput(c.outShape,n.dtype),m=t.makeOutput(c.outShape,\"int32\");return GM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),[l,m]}var HM={kernelName:ua,backendName:\"wasm\",setupFunc:wne,kernelFunc:Sne};var KM;function Ine(r){KM=r.wasm.cwrap(Un,null,[\"number, number, number\"])}function vne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let S=e.dataIdMap.get(c.dataId).id;S!==i&&(u=c,p=S,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"mean\",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!==\"float32\"&&(b=Mr({backend:e,inputs:{x:u},attrs:{dtype:\"float32\"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,\"float32\");if(y.sizeFromShape(u.shape)!==0){let S=e.dataIdMap.get(C.dataId).id;KM(p,x,S)}if(d&&e.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!==\"float32\"&&e.disposeData(b.dataId),C}var qM={kernelName:Un,backendName:\"wasm\",setupFunc:Ine,kernelFunc:vne};var jM;function kne(r){jM=r.wasm.cwrap(Gn,null,[\"number\",\"number\",\"number\",\"number\"])}function Nne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;w.assertAxesAreInnerMostDims(\"min\",l,f);let[h,g]=w.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;jM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var XM={kernelName:Gn,backendName:\"wasm\",setupFunc:kne,kernelFunc:Nne};var Tne=!1,YM=Ge(Hn,Tne);var Lv;(function(r){r[r.reflect=0]=\"reflect\",r[r.symmetric=1]=\"symmetric\"})(Lv||(Lv={}));var QM;function _ne(r){QM=r.wasm.cwrap(Kn,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Ene(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(f=>f[0]),l=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(c).buffer),d=new Uint8Array(new Int32Array(l).buffer);return QM(a,u,e.shape.length,we[e.dtype],m,d,Lv[n],p),i}var ZM={kernelName:Kn,backendName:\"wasm\",kernelFunc:Ene,setupFunc:_ne};var JM;function $ne(r){JM=r.wasm.cwrap(Is,null,[\"number\",\"number\",\"number\",\"number\"])}function Bv(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||JM(n,a,i,p),s}var eL={kernelName:Is,backendName:\"wasm\",setupFunc:$ne,kernelFunc:Bv};var tL;function Rne(r){tL=r.wasm.cwrap(jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Dne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!==\"float32\")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Bv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=t.makeOutput([u,s],\"int32\");return tL(t.dataIdMap.get(p.dataId).id,u,c,s,a,t.dataIdMap.get(l.dataId).id),i||t.disposeData(p.dataId),l}var rL={kernelName:jn,backendName:\"wasm\",setupFunc:Rne,kernelFunc:Dne};var oL=Ge(qn,!0);var Ane=!0,nL=Ge(Xn,Ane);var sL=he(pa);function qc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var aL;function Fne(r){aL=r.wasm.cwrap(Qn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Pne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=aL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=qc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],\"int32\",m)}var iL={kernelName:Qn,backendName:\"wasm\",setupFunc:Fne,kernelFunc:Pne};var uL;function One(r){uL=r.wasm.cwrap(Qa,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\"])}function Mne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=uL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(h);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([],\"int32\",g);return[x,b]}var pL={kernelName:Qa,backendName:\"wasm\",setupFunc:One,kernelFunc:Mne};var cL;function Lne(r){cL=r.wasm.cwrap(Zn,\"number\",[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function Bne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=cL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(g);let x=e.makeOutput([f],\"int32\",d),b=e.makeOutput([f],\"float32\",h);return[x,b]}var lL={kernelName:Zn,backendName:\"wasm\",setupFunc:Lne,kernelFunc:Bne};var zne=!1,mL=Ge(Yn,zne,\"bool\");var dL;function Vne(r){dL=r.wasm.cwrap(Jn,null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function Wne(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return dL(m,a,i,p,c),u}var fL={kernelName:Jn,backendName:\"wasm\",setupFunc:Vne,kernelFunc:Wne};function Une(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var hL={kernelName:ca,backendName:\"wasm\",kernelFunc:Une};function Gne(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Lg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Lg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var gL={kernelName:la,backendName:\"wasm\",kernelFunc:Gne};var xL;function Hne(r){xL=r.wasm.cwrap(es,null,[\"number\",\"array\",\"number\",\"number\",\"array\",\"array\",\"number\",\"number\"])}function Kne(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Mv({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(l).buffer),f=new Uint8Array(new Int32Array(m).buffer);return xL(a,c,e.shape.length,we[e.dtype],d,f,n,u),i}var Bg={kernelName:es,backendName:\"wasm\",kernelFunc:Kne,setupFunc:Hne};var qne=!1,yL=Ge(ts,qne);var bL;function jne(r){bL=r.wasm.cwrap(rs,null,[\"number\",\"number\",\"number\"])}function Xne(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:o},attrs:{dtype:\"float32\"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,\"float32\"),l=t.dataIdMap.get(c.dataId).id;return bL(i,a,l),p.dtype!==\"float32\"&&t.disposeData(u.dataId),c}var CL={kernelName:rs,backendName:\"wasm\",setupFunc:jne,kernelFunc:Xne};var wL;function Yne(r){wL=r.wasm.cwrap(os,null,[\"number\",\"number\",\"number\",\"number\"])}function Qne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"prod\",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;wL(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var SL={kernelName:os,backendName:\"wasm\",setupFunc:Yne,kernelFunc:Qne};var Zne=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=up(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},IL={kernelName:ma,backendName:\"wasm\",kernelFunc:Zne};var Jne=!0,vL=Ge(fn,Jne);var kL=he(ns);var NL=he(ss);var TL=he(us);var _L;function ese(r){_L=r.wasm.cwrap(is,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function tse(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!==\"float32\"&&(g=Mr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return _L(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var EL={kernelName:is,backendName:\"wasm\",setupFunc:ese,kernelFunc:tse};var $L;function rse(r){$L=r.wasm.cwrap(Ja,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ose(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),$L(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var RL={kernelName:Ja,backendName:\"wasm\",setupFunc:rse,kernelFunc:ose};var DL;function nse(r){DL=r.wasm.cwrap(as,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function sse(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.makeOutput(f,\"float32\");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!==\"float32\"&&(x=Mr({backend:e,inputs:{x:n},attrs:{dtype:\"float32\"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return DL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var AL={kernelName:as,backendName:\"wasm\",setupFunc:nse,kernelFunc:sse};var FL;function ase(r){FL=r.wasm.cwrap(Za,null,[\"number\",\"number\",\"number\",\"array\",\"array\",\"boolean\"])}function ise(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,\"float32\"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!==\"float32\"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:\"float32\"}}),p=t.dataIdMap.get(u.dataId)),FL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var PL={kernelName:Za,backendName:\"wasm\",setupFunc:ase,kernelFunc:ise};var OL;function use(r){OL=r.wasm.cwrap(ps,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function pse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Np({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);OL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var ML={kernelName:ps,backendName:\"wasm\",kernelFunc:pse,setupFunc:use};var LL;function cse(r){LL=r.wasm.cwrap(Ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function lse(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,d,f]=n.shape,[h,g]=w.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a==\"number\"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(C).buffer);return LL(u,l,m,d,f,s,h,g,S,C.length,c),p}var BL={kernelName:Ds,backendName:\"wasm\",kernelFunc:lse,setupFunc:cse};var zL=he(cs);var VL=he(ls);var WL;function mse(r){WL=r.wasm.cwrap(ms,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function dse(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return WL(f,g,we[s.dtype],p,u,c,x,m,b),i}var UL={kernelName:ms,backendName:\"wasm\",setupFunc:mse,kernelFunc:dse};var GL;function fse(r){GL=r.wasm.cwrap(fs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"bool\",\"number\"])}function hse(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,\"int32\");function p(u){return t.dataIdMap.get(u.dataId).id}return GL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a===\"left\",p(i)),i}var HL={kernelName:fs,backendName:\"wasm\",setupFunc:fse,kernelFunc:hse};var KL;function gse(r){KL=r.wasm.cwrap(\"SelectV2\",null,[\"number\",\"number\",\"number\",\"number\",\"number\"])}function xse(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,d=l===0||l>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return KL(a,i,p,d,c),u}var qL={kernelName:fa,backendName:\"wasm\",kernelFunc:xse,setupFunc:gse};var jL=he(hs);var XL;function yse(r){XL=r.wasm.cwrap(bs,null,[\"number\",\"number\"])}function bse(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||XL(o,s),n}var YL={kernelName:\"Sigmoid\",backendName:\"wasm\",setupFunc:yse,kernelFunc:bse};var QL=he(ys);var ZL=he(gs);var JL=he(xs);var eB=he(Cs);function Cse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_0?p+1:0;if(c<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],\"int32\"),b=t.dataIdMap.get(x.dataId).id;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=\"\"}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:\"wasm\",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:\"wasm\",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:\"wasm\",setupFunc:Tse,kernelFunc:_se};function Ese(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:\"wasm\",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,[\"number\",\"number\",\"number\",\"number\"])}function Dse(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:\"wasm\",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,[\"number\",\"array\",\"number\",\"array\",\"array\",\"array\",\"array\",\"array\",\"number\",\"number\"])}function Fse(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,\"float32\"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:\"wasm\",setupFunc:Ase,kernelFunc:Fse};function Pse(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=cp(m,d,a,i,p,u,c,l),g=e.makeOutput([f.length],\"string\"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,\"int32\");return e.typedArrayFromHeap(b).set(h),[g,b]}var bB={kernelName:Ca,backendName:\"wasm\",kernelFunc:Pse};function Ose(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=lp(i,p[0],a),m=c.length,d=e.makeOutput([m,2],\"int32\");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],\"string\"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let x=e.makeOutput([2],\"int32\");return e.typedArrayFromHeap(x).set(l),[d,h,x]}var CB={kernelName:ji,backendName:\"wasm\",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,\"int32\");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:\"wasm\",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,[\"number\",\"number\",\"number\",\"number\"])}function zse(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims(\"sum\",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:\"wasm\",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,[\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"number\",\"number\"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:\"wasm\",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,[\"number\",\"array\",\"number\",\"array\",\"number\",\"number\"])}function Gse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,\"int32\"),m=e.dataIdMap.get(l.dataId).id;return RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:\"wasm\",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,[\"number\",\"number\",\"bool\",\"number\",\"number\",\"number\",\"number\",\"number\",\"number\",\"array\",\"number\",\"array\",\"number\",\"number\",\"number\",\"number\",\"number\"])}function jse(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a===\"nearest\"?1:2,P;switch(i){case\"constant\":P=1;break;case\"reflect\":P=2;break;case\"wrap\":P=3;break;case\"nearest\":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:\"wasm\",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],\"int32\",void 0,p)]}var PB={kernelName:Yi,backendName:\"wasm\",kernelFunc:Xse};function Yse(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var OB={kernelName:wa,backendName:\"wasm\",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:\"wasm\",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.registerFlag(\"WASM_HAS_SIMD_SUPPORT\",async()=>{try{return 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]))}catch(r){return!1}});zv.registerFlag(\"WASM_HAS_MULTITHREAD_SUPPORT\",async()=>{if(zv.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(r){return!1}});var jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n===\"string\"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p)>>>0;this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s===\"string\")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return tae(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.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(),\"PThread\"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case\"float32\":return new Float32Array(n,s,a);case\"int32\":return new Int32Array(n,s,a);case\"bool\":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function eae(r){return(e,t)=>(y.fetch(r,{credentials:\"same-origin\"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function KB(r,e,t){if(Gg!=null)return Gg;let o=\"tfjs-backend-wasm.wasm\";return r&&e?o=\"tfjs-backend-wasm-threaded-simd.wasm\":r&&(o=\"tfjs-backend-wasm-simd.wasm\"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync(\"WASM_HAS_SIMD_SUPPORT\"),A().getAsync(\"WASM_HAS_MULTITHREAD_SUPPORT\")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(\".worker.js\")){let u=qB.wasmWorkerContents.replace(/\\n/g,\"\\\\n\"),c=new Blob([u],{type:\"application/javascript\"});return URL.createObjectURL(c)}return i.endsWith(\".wasm\")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:\"\")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!0,o({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\"})};let a;e&&r&&Gg==null?(n.mainScriptUrlOrBlob=new Blob([\"var WasmBackendModuleThreadedSimd = \"+HB.toString()],{type:\"text/javascript\"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!1;let p=null;i.tfjs={init:i.cwrap(\"init\",null,[]),initWithThreadsCount:i.cwrap(\"init_with_threads_count\",null,[\"number\"]),getThreadsCount:i.cwrap(\"get_threads_count\",\"number\",[]),registerTensor:i.cwrap(\"register_tensor\",null,[\"number\",\"number\",\"number\"]),disposeData:i.cwrap(\"dispose_data\",p,[\"number\"]),dispose:i.cwrap(\"dispose\",p,[])},t({wasm:i})}).catch(o)})}function tae(r,e){switch(e){case\"float32\":return new Float32Array(r);case\"int32\":return new Int32Array(r);case\"bool\":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var rae=[\"tfjs-backend-wasm.wasm\",\"tfjs-backend-wasm-simd.wasm\",\"tfjs-backend-wasm-threaded-simd.wasm\"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw(\"setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release.\"),um)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`\");Gg=r,Yv=e}function nae(r,e=!1){if(um)throw new Error(\"The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`\");if(typeof r==\"string\")am=r;else{im=r;let t=rae.filter(o=>im[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error(\"WASM backend not initialized.\");return qv}var iae=\"4.17.0\";var uae=2;tu(\"wasm\",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\",()=>15);go.registerFlag(\"WEBGPU_CPU_FORWARD\",()=>!0);go.registerFlag(\"WEBGPU_MATMUL_PROGRAM_TYPE\",()=>-1);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\",()=>!0);go.registerFlag(\"WEBGPU_USE_LOW_POWER_GPU\",()=>!1);go.registerFlag(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\",()=>1e3);go.registerFlag(\"WEBGPU_USE_PROFILE_TOOL\",()=>!1);go.registerFlag(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\",()=>!0);go.registerFlag(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\",()=>!1);go.registerFlag(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\",()=>-1);go.registerFlag(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\",()=>!1);go.registerFlag(\"WEBGPU_PRINT_SHADER\",()=>\"\");go.registerFlag(\"WEBGPU_ENGINE_COMPILE_ONLY\",()=>!1);var Hg=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith(\"gen\"))return Number(this.architecture.match(/\\d+/));if(this.architecture.startsWith(\"xe\"))return 12}return 0}isIntel(){return this.vendor===\"intel\"}};var Kg=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error(\"Cannot find the buffer in buffer manager\");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function YB(r,e){return`${r}_${e}`}var qg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=ZB(o),a=e*t*s,i=QB(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error(\"Cannot release a texture that was never provided by this texture manager\");i.splice(p,1);let u=ZB(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r===\"rgba8unorm\")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error(\"Cannot symbolically compute strides for rank > 6 tensor.\");let t=r.length,o=\"xyzwuv\",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t===\"int32\"?`atomicAdd(${r}, bitcast(${e}));`:`\n {\n var oldValue = 0;\n loop {\n let newValueF32 = bitcast(oldValue) + (${e});\n let newValue = bitcast(newValueF32);\n let res = atomicCompareExchangeWeak(${r}, oldValue, newValue);\n if res.exchanged {\n break;\n }\n oldValue = res.old_value;\n }\n }`;var wi;(function(r){r[r.FROM_PIXELS=0]=\"FROM_PIXELS\",r[r.DRAW=1]=\"DRAW\"})(wi||(wi={}));var oz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=cae(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get(\"WEBGPU_PRINT_SHADER\");if(p!==\"\"){p=p.toLowerCase();let u=p.split(\",\");(p===\"all\"||u.some(c=>e.shaderKey.toLowerCase().includes(c)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"}):r.createComputePipeline({compute:{module:i,entryPoint:\"_start\"},label:e.constructor.name,layout:\"auto\"})},Ae=(r,e=\"f32\")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(r){if(r<=1)return\"i32\";if(r===2)return\"vec2\";if(r===3)return\"vec3\";if(r===4)return\"vec4\";if(r===5)return\"vec5\";if(r===6)return\"vec6\";throw Error(`GPU for rank ${r} is not yet supported`)}function Oo(r){if(r===0)return\"x\";if(r===1)return\"y\";if(r===2)return\"z\";if(r===3)return\"w\";if(r===4)return\"u\";if(r===5)return\"v\";throw Error(`Index ${r} is not yet supported`)}function G(...r){let e;switch(r.length){case 0:e=`\n fn main()\n `;break;case 1:e=`\n fn main(${r[0]} : i32)\n `;break;default:throw Error(\"Unreachable\")}return e}function ez(r,e){let t;return t=`\n ${pae(e)}\n fn _start(@builtin(local_invocation_id) LocalId : vec3,\n @builtin(global_invocation_id) GlobalId : vec3,\n @builtin(local_invocation_index) LocalIndex: u32,\n @builtin(workgroup_id) WorkgroupId : vec3,\n @builtin(num_workgroups) NumWorkgroups : vec3) {\n localId = LocalId;\n localIndex = LocalIndex;\n globalId = GlobalId;\n numWorkgroups = NumWorkgroups;\n workgroupId = WorkgroupId;\n ${r?\"main(getGlobalIndex());\":\"main();\"};\n }\n `,t}function pae(r){return`\n @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]})\n`}function cae(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(`\n\n var localId: vec3;\n var localIndex: u32;\n var globalId: vec3;\n var numWorkgroups: vec3;\n var workgroupId: vec3;\n\n // Only used when the y/z dimension of workgroup size is 1.\n fn getGlobalIndex() -> i32 {\n ${sz(t)?\" return i32(globalId.x);\":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y +\n workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u +\n localIndex);\n `}\n }\n `),t.pixelsOpType!=null){let f=t.pixelsOpType===wi.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Su(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?\"vec2\":\"i32\";o.push(`\n struct Uniform {\n outShapeStrides : ${h},\n size : i32,\n numChannels : i32,\n alpha : f32,\n };\n\n ${f}\n @group(0) @binding(2) var uniforms: Uniform;\n `);let g=rz(t);return[tz,o.join(`\n`),cm(e.shape),t.getUserCode(),ez(g,t)].join(`\n`)}let s,a,i=\"struct Uniforms { NAN : f32, INFINITY : f32, \";t.variableNames.forEach((f,h)=>{let g=ft(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ft(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ft(e.shape.length);i+=`outShape : ${p}, `,s=e.shape.length-1,a=ft(s),i+=`\n outShapeStrides: ${a}, `,t.size&&(i+=\"size : i32, \"),t.uniforms&&(i+=t.uniforms),i+=\"};\",i=yae(i),o.push(i),t.atomic?o.push(`\n @group(0) @binding(0) var result: array>;\n `):o.push(`\n @group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;\n `),t.variableNames.forEach((f,h)=>{o.push(`\n @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Su(r[h].dtype,t.variableComponents[h]):Su(r[h].dtype,t.outputComponent)}>;\n `)}),i!==\"\"&&o.push(`\n @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms;\n `);let u=hae(e.shape,t.dispatchLayout),c=[tz,o.join(`\n`)+lae,cm(e.shape),u,gae(e.shape.length)];t.atomic||c.push(xae(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>fae(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(`\n`);c.push(l),c.push(t.getUserCode());let m=rz(t);return c.push(ez(m,t)),c.join(`\n`)}function nz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(c=>w.getBroadcastDims(c.shape,t.shape)),i=e.map(c=>y.arraysEqual(c.shape,t.shape)).join(\"_\"),p=a.map(c=>c.join(\"_\")).join(\";\"),u=sz(r)?\"flatDispatch\":\"\";return o+=\"_\"+(r.workgroupSize?r.workgroupSize.join(\",\"):\"\")+n.map(c=>c.length).join(\",\")+s.join(\",\")+r.variableNames.join(\",\")+p+i+u,o}var tz=`\n struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32};\n struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32};\n\n // Checks whether coordinates lie within the bounds of the shape.\n fn coordsInBounds2D(coord : vec2, shape : vec2) -> bool {\n return all(coord >= vec2(0)) && all(coord < shape);\n }\n fn coordsInBounds3D(coord : vec3, shape : vec3) -> bool {\n return all(coord >= vec3(0)) && all(coord < shape);\n }\n fn coordsInBounds4D(coord : vec4, shape : vec4) -> bool {\n return all(coord >= vec4(0)) && all(coord < shape);\n }\n\n fn getIndexFromCoords1D(coord : i32, shape : i32) -> i32 {\n return coord;\n }\n fn getIndexFromCoords2D(coords : vec2, shape : vec2) -> i32 {\n return dot(coords, vec2(shape.y, 1));\n }\n fn getIndexFromCoords3D(coords : vec3, shape : vec3) -> i32 {\n return dot(coords, vec3(shape.y * shape.z, shape.z, 1));\n }\n fn getIndexFromCoords4D(coords : vec4, shape : vec4) -> i32 {\n return dot(coords, vec4(\n shape.y * shape.z * shape.w, shape.z * shape.w, shape.w, 1));\n }\n fn getIndexFromCoords5D(coords : vec5, shape : vec5) -> i32 {\n let shapeStrides: vec5 = vec5(shape.y * shape.z * shape.w * shape.u, shape.z * shape.w * shape.u, shape.w * shape.u, shape.u, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u;\n }\n fn getIndexFromCoords6D(coords : vec6, shape : vec6) -> i32 {\n let shapeStrides: vec6 = vec6(shape.y * shape.z * shape.w * shape.u * shape.v, shape.z * shape.w * shape.u * shape.v, shape.w * shape.u * shape.v, shape.u * shape.v, shape.v, 1);\n return coords.x*shapeStrides.x + coords.y*shapeStrides.y + coords.z*shapeStrides.z + coords.w*shapeStrides.w + coords.u*shapeStrides.u + coords.v*shapeStrides.v;\n }\n\n // NaN defination in IEEE 754-1985 is :\n // - sign = either 0 or 1.\n // - biased exponent = all 1 bits.\n // - fraction = anything except all 0 bits (since all 0 bits represents infinity).\n // https://en.wikipedia.org/wiki/IEEE_754-1985#Representation_of_non-numbers\n fn isnan(val: f32) -> bool {\n let floatToUint: u32 = bitcast(val);\n return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n }\n fn isnanVec4(val : vec4) -> vec4 {\n let floatToUint: vec4 = bitcast>(val);\n return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u);\n }\n`,lae=`\n fn isinf(val: f32) -> bool {\n return abs(val) == uniforms.INFINITY;\n }\n`;function cm(r,e=\"\"){let t=r.length,o=e!==\"\"?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:\"getCoordsFromIndex\",n=e!==\"\"?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:\"outShapeStrides\";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 {\n let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n};\n return vec2(d0, d1);\n }`;let p;return p=\"var index2 = index;\"+s.map((u,c)=>{let l=`let ${i[c]} = index2 / uniforms.${n}.${Oo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`;return`${l}; ${m};`}).join(\"\"),`\n fn ${o}(index : i32) -> ${a} {\n ${p}\n return ${a}(${i.join(\",\")});\n }\n `}function mae(r,e){let t=r.name,o=r.shape.length,n=ft(o),s=\"get\"+t.charAt(0).toUpperCase()+t.slice(1),a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=a.map(c=>`${c} : i32`).join(\", \");if(o<1)return`\n fn ${s}() -> ${Ae(e)} {\n return ${Ae(e)}(${t}[0]);\n }\n `;let p=`uniforms.${t.charAt(0).toLowerCase()+t.slice(1)}Shape`,u=`${o}D`;return o===0&&(u=\"1D\"),`\n fn ${s}(${i}) -> ${Ae(e)} {\n return ${Ae(e)}(${t}[getIndexFromCoords${u}(${n}(${a.join(\",\")}),\n ${p})${e===1?\"\":` / ${e}`}]);\n }\n `}function dae(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a=\"get\"+s+\"ByOutput\",i=r.shape.length,p=e.length,u=ft(p);if(y.arraysEqual(r.shape,e)&&o)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[globalIndex]);\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)} {\n return ${Ae(t)}(${n}[${p>1?\"getOutputIndexFromCoords(coords)\":\"coords\"}${t===1?\"\":` / ${t}`}]);\n }\n `;let c=w.getBroadcastDims(r.shape,e),l=p-i,m=\"\";if(i===0)return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)}{\n return get${s}();\n }\n\n fn ${a}Coords(coords : ${u}) -> ${Ae(t)}{\n return get${s}();\n }\n `;p<2&&c.length>=1?m=\"coords = 0;\":m=c.map(g=>`coords.${Oo(g+l)} = 0;`).join(`\n`);let d=\"\";if(p<2&&i>0)d=\"coords\";else if(p>1){let g=ft(i),x=r.shape.map((b,C)=>`coords.${Oo(C+l)}`).join(\", \");d=`${g}(${x})`}else d=\"coords\";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return`\n fn ${a}Index(globalIndex : i32) -> ${Ae(t)} {\n var coords = getCoordsFromIndex(globalIndex);\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n\n fn ${a}Coords(coordsIn : ${u}) -> ${Ae(t)} {\n var coords = coordsIn;\n ${m}\n return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?\"\":` / ${t}`}]);\n }\n`}function fae(r,e,t,o){let n=mae(r,t);return r.shape.length<=e.length&&(n+=dae(r,e,t,o)),n}function hae(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return\"\";if(t.length===s)return`fn getOutputCoords() -> ${ft(s)}{\n let globalIndex = getGlobalIndex();\n return getCoordsFromIndex(globalIndex);\n }\n `;let i=\"\",p=[t,o,n];for(let m=0;m ${c} {\n ${i}\n`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(\",\")}); }`,l}function gae(r){let e=\"\";switch(r){case 0:case 1:e+=`\n fn getOutputIndexFromCoords(coords : i32) -> i32 {\n return coords;\n }\n `;break;case 2:e+=`\n fn getOutputIndexFromCoords(coords : vec2) -> i32 {\n return dot(coords, vec2(uniforms.outShapeStrides, 1));\n }\n `;break;case 3:e+=`\n fn getOutputIndexFromCoords(coords : vec3) -> i32 {\n return dot(coords, vec3(uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, 1));\n }\n `;break;case 4:e+=`\n fn getOutputIndexFromCoords(coords : vec4) -> i32 {\n return dot(coords, vec4(\n uniforms.outShapeStrides.x, uniforms.outShapeStrides.y, uniforms.outShapeStrides.z, 1));\n }\n `;break;case 5:e+=`\n fn getOutputIndexFromCoords(coords : vec5) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u;\n }\n `;break;case 6:e+=`\n fn getOutputIndexFromCoords(coords : vec6) -> i32 {\n return coords.x * uniforms.outShapeStrides.x +\n coords.y * uniforms.outShapeStrides.y +\n coords.z * uniforms.outShapeStrides.z +\n coords.w * uniforms.outShapeStrides.w +\n coords.u * uniforms.outShapeStrides.u +\n coords.v;\n }\n `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function sz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Su(r,e=1){if(r===\"float32\")return Ae(e,\"f32\");if(r===\"int32\"||r===\"bool\")return Ae(e,\"i32\");throw new Error(`type ${r} is not supported.`)}function xae(r,e,t){let o=r.length,n=Su(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) {\n result[flatIndex] = ${n}(value);\n }\n\n fn setOutputAtIndexI32(flatIndex : i32, value : ${Ae(t,\"i32\")}) {\n result[flatIndex] = ${n}(value);\n }\n `;if(o>=2){let a=[\"d0\",\"d1\",\"d2\",\"d3\",\"d4\",\"d5\"].slice(0,o),i=ft(o);s+=`\n fn setOutputAtCoords(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t)}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndex(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n fn setOutputAtCoordsI32(${a.map(p=>`${p} : i32`).join(\", \")}, value : ${Ae(t,\"i32\")}) {\n let flatIndex = getOutputIndexFromCoords(${i}(${a.join(\", \")}));\n setOutputAtIndexI32(flatIndex${t===1?\"\":` / ${t}`}, value);\n }\n `}return s}function yae(r){let e=/(\\w+)\\s*:\\s*vec(5|6)/g;r=r.replace(e,o=>\"@align(16) \"+o);let t=/vec(5|6)\\s*,\\s*(\\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function rz(r){return!(r.dispatchLayout.hasOwnProperty(\"y\")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty(\"z\")&&r.dispatchLayout.z.length!==0)}var Zv={};qe(Zv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Mo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Qv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>Cae});var Tp=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Tp(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Tp(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Tp(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function Qv(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function lm(r,e,t=!1){if(t)return[8,8,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,e,t=!1){if(t)return[4,4,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function jg(r){if(r===\"float32\"||r===\"int32\"||r===\"bool\"||r===\"string\")return 4;if(r===\"complex64\")return 8;throw new Error(`Unknown dtype ${r}`)}function dm(){return!!(typeof globalThis!=\"undefined\"&&globalThis.navigator&&globalThis.navigator.gpu)}function fm(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!==\"complex64\",()=>`${e} does not support complex64 tensors in the WebGPU backend.`)})}var Mo;(function(r){r[r.MatMulReduceProgram=0]=\"MatMulReduceProgram\",r[r.MatMulSplitKProgram=1]=\"MatMulSplitKProgram\",r[r.MatMulSmallOutputSizeProgram=2]=\"MatMulSmallOutputSizeProgram\",r[r.MatMulPackedProgram=3]=\"MatMulPackedProgram\",r[r.MatMulMax=4]=\"MatMulMax\"})(Mo||(Mo={}));var wae=A().getNumber(\"WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD\"),Sae=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>\"Dispatch size exceeds WebGPU limits in Y or Z dimension.\");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>\"Total dispatch size exceeds WebGPU maximum.\"),[s,s,s]):[s,s,1]},jc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!dm())throw new Error(\"WebGPU is not supported on this device\");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(t),this.supportTimestampQuery=this.device.features.has(\"timestamp-query\"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Kg(this.device),this.textureManager=new qg(this.device),this.tensorMap=new Bo(this,ur()),A().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(this.dummyCanvas=document.createElement(\"canvas\"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext(\"webgpu\"),this.dummyContext.configure({device:e,format:\"bgra8unorm\"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(this.releaseResource(e),this.tensorMap.delete(e),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o===\"complex64\"&&e!=null)throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. Please use tf.complex(real, imag).\");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\"))return console.warn(\"The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false\"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o),A().getBool(\"WEBGPU_USE_PROFILE_TOOL\")&&(y.assert(this.dummyContext!==void 0,()=>\"Fail to get context for profiling tool\"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype===\"string\")return o;if(t.dtype===\"complex64\"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h,g).buffer,\"float32\");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn(\"The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead.\"));let s=[\"opaque\",\"premultiplied\"],a=t.resource,i=a.size;y.assert(i%4===0,()=>\"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.\");let p=i/4,u=new ArrayBuffer(i),c=256,l=256,m=s.map(h=>new OffscreenCanvas(c,l)),d=new OffscreenCanvas(c,l);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext(\"webgpu\");return x.configure({device:this.device,format:\"bgra8unorm\",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=c*4,b=(R,D,P)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:P},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext(\"2d\",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,P,R*D*4);for(let z=0;z0&&(b(S,k,_),_+=k*(c*4)),S=$%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return o;let n;if(t.dtype===\"complex64\"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o===\"complex64\")throw new Error(\"Cannot write to a complex64 dtype. \");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error(\"Failed to decode encoded string bytes into utf-8\")}return me(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn(\"This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled.\"),this.hasTimestampQueryWarned=!0);let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(\", \"),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t===\"string\"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=jg(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState===\"unmapped\"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype===\"int32\"||t.dtype===\"bool\"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type===\"int32\"?new Int32Array(a,c,p.data.length).set(p.data):p.type===\"uint32\"?new Uint32Array(a,c,p.data.length).set(p.data):new Float32Array(a,c,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Sae(this.device,e);let a=t.map((p,u)=>{if(p.dtype===\"complex64\")throw new Error(\"GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.\");return this.uploadToGPU(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=nz(e,a,s);let i=A().getBool(\"WEBGPU_ENGINE_COMPILE_ONLY\");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=oz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error(\"Please call checkCompileCompletionAsync to ensure parallel compilation is done!\");let s=[],a=[],i=\"int32\";if(e.pixelsOpType==null){s.push({type:\"float32\",data:[NaN]},{type:\"float32\",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m=\"int32\";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),c=this.activeTimers!=null;this.ensureCommandEncoderReady();let l={};c&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:\"timestamp\",count:this.querySetCount})),l.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(c||A().get(\"WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE\")<=this.dispatchCountInPass||e.pixelsOpType===wi.DRAW)&&(this.endComputePassEncoder(),c?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=wae){return A().getBool(\"WEBGPU_CPU_FORWARD\")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get(\"WEBGPU_USE_LOW_POWER_GPU\")?\"low-power\":\"high-performance\"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has(\"timestamp-query\")&&o.push(\"timestamp-query\"),e.features.has(\"bgra8unorm-storage\")&&o.push([\"bgra8unorm-storage\"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new jc(s,a)},3);var fe;(function(r){r[r.ADD=0]=\"ADD\",r[r.ATAN2=1]=\"ATAN2\",r[r.COMPLEX_MULTIPLY_IMAG=2]=\"COMPLEX_MULTIPLY_IMAG\",r[r.COMPLEX_MULTIPLY_REAL=3]=\"COMPLEX_MULTIPLY_REAL\",r[r.DIV=4]=\"DIV\",r[r.ELU_DER=5]=\"ELU_DER\",r[r.EQUAL=6]=\"EQUAL\",r[r.FLOOR_DIV=7]=\"FLOOR_DIV\",r[r.GREATER=8]=\"GREATER\",r[r.GREATER_EQUAL=9]=\"GREATER_EQUAL\",r[r.LESS=10]=\"LESS\",r[r.LESS_EQUAL=11]=\"LESS_EQUAL\",r[r.LOGICAL_AND=12]=\"LOGICAL_AND\",r[r.LOGICAL_OR=13]=\"LOGICAL_OR\",r[r.MAX=14]=\"MAX\",r[r.MIN=15]=\"MIN\",r[r.MOD=16]=\"MOD\",r[r.MUL=17]=\"MUL\",r[r.NOT_EQUAL=18]=\"NOT_EQUAL\",r[r.POW=19]=\"POW\",r[r.PRELU=20]=\"PRELU\",r[r.SQUARED_DIFFERENCE=21]=\"SQUARED_DIFFERENCE\",r[r.SUB=22]=\"SUB\"})(fe||(fe={}));var Iae=\"let resultTemp = a + b;\",vae=\"let resultTemp = atan2(a, b);\",kae=\"let resultTemp = areal * breal - aimag * bimag;\",Nae=\"let resultTemp = areal * bimag + aimag * breal;\",Tae=\"let resultTemp = a / b;\",_ae=\"let resultTemp = select(a * (b + 1.0), a, b >= b - b);\",Eae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a == b);\n`,$ae=`\n let remainder =\n select(a % b, round(a % b), (round(a) == a) & (round(b) == b));\n let quotient = (a - remainder) / b;\n let resultTemp =\n round(select(quotient, quotient - 1, sign(remainder) == -sign(b)));\n`,Rae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a > b);\n`,Dae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a >= b);\n`,Aae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a < b);\n`,Fae=`\n let zero = sign(a) * 0 + 0;\n let one = sign(b) * 0 + 1;\n let resultTemp = select(zero, one, a <= b);\n`,Pae=\"return f32(a >= 1.0 && b >= 1.0);\",Oae=`return (vec4(a >= vec4(1.0)) *\n vec4(b >= vec4(1.0)));`,Mae=\"return f32(a >= 1.0 || b >= 1.0);\",Lae=`return min(vec4(a >= vec4(1.0)) +\n vec4(b >= vec4(1.0)), vec4(1.0));`,Bae=\"let resultTemp = max(a, b);\",zae=\"let resultTemp = min(a, b);\",Vae=`\n let isNaN = b == 0.;\n var resultTemp = a % b;\n resultTemp = select((resultTemp + b) % b, resultTemp,\n (a < 0. && b < 0.) || (a >= 0. && b > 0.));\n`,Wae=`\n let isNaN = !vec4(b);\n var resultTemp = vec4(a % b);\n if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) {\n resultTemp[0] = (resultTemp[0] + b[0]) % b[0];\n }\n if (!((a[1] < 0. && b[1] < 0.) || (a[1] >= 0. && b[1] > 0.))) {\n resultTemp[1] = (resultTemp[1] + b[1]) % b[1];\n }\n if (!((a[2] < 0. && b[2] < 0.) || (a[2] >= 0. && b[2] > 0.))) {\n resultTemp[2] = (resultTemp[2] + b[2]) % b[2];\n }\n if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) {\n resultTemp[3] = (resultTemp[3] + b[3]) % b[3];\n }\n`,Uae=\"let resultTemp = a * b;\",Gae=`\n var resultTemp = f32(a != b);\n let valueForNaN = 1.0;\n`,Hae=`\n var resultTemp = vec4(a != b);\n let valueForNaN = 1.0;\n`,Kae=`\n let isNaN = a < 0.0 && floor(b) < b;\n if (b == 0.0) {\n return 1.0;\n }\n var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b),\n round(abs(b) % 2.0) != 1.0);\n`,qae=`\n let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1);\n let isModRound1 = vec4(isModRound1Bool);\n let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n var resultTemp = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n let isExpZero = b == vec4(0.0);\n if (isExpZero.r) {\n resultTemp.r = 1.0;\n }\n if (isExpZero.g) {\n resultTemp.g = 1.0;\n }\n if (isExpZero.b) {\n resultTemp.b = 1.0;\n }\n if (isExpZero.a) {\n resultTemp.a = 1.0;\n }\n let isNaN = (a < vec4(0.0)) & (floor(b) < b);\n`,jae=\"if (a < 0.0) { return b * a; } return a;\",Xae=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,Yae=\"let resultTemp = (a - b) * (a - b);\",Qae=\"let resultTemp = a - b;\";function Xc(r,e){let t;do{switch(r){case fe.ATAN2:t=vae;break;case fe.MAX:t=Bae;break;case fe.MIN:t=zae;break;case fe.MOD:t=e?Wae:Vae;break;case fe.NOT_EQUAL:t=e?Hae:Gae;break;case fe.POW:t=e?qae:Kae;break;default:continue}let o,n,s;return e?(o=\"isnanVec4\",n=\"vec4\",s=\"vec4\"):(o=\"isnan\",n=\"f32\",s=\"bool\"),`\n let aIsNaN = ${o}(a);\n let aPostLegalization = select(a, ${n}(42), aIsNaN);\n let bIsNaN = ${o}(b);\n let bPostLegalization = select(b, ${n}(42), bIsNaN);\n let isNaN = false;\n let valueForNaN = uniforms.NAN;\n {\n let a = aPostLegalization;\n let b = bPostLegalization;\n ${t}\n return select(\n resultTemp, ${n}(valueForNaN),\n ${s}(isNaN) | aIsNaN | bIsNaN);\n }\n `}while(!1);switch(r){case fe.ADD:t=Iae;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Nae;break;case fe.COMPLEX_MULTIPLY_REAL:t=kae;break;case fe.DIV:t=Tae;break;case fe.ELU_DER:t=_ae;break;case fe.EQUAL:t=Eae;break;case fe.FLOOR_DIV:t=$ae;break;case fe.GREATER:t=Rae;break;case fe.GREATER_EQUAL:t=Dae;break;case fe.LESS:t=Aae;break;case fe.LESS_EQUAL:t=Fae;break;case fe.LOGICAL_AND:return e?Oae:Pae;case fe.LOGICAL_OR:return e?Lae:Mae;case fe.MUL:t=Uae;break;case fe.PRELU:return e?Xae:jae;case fe.SQUARED_DIFFERENCE:t=Yae;break;case fe.SUB:t=Qae;break;default:}return`\n ${t}\n return resultTemp;\n `}var Z;(function(r){r[r.ABS=0]=\"ABS\",r[r.ACOS=1]=\"ACOS\",r[r.ACOSH=2]=\"ACOSH\",r[r.ASIN=3]=\"ASIN\",r[r.ASINH=4]=\"ASINH\",r[r.ATAN=5]=\"ATAN\",r[r.ATANH=6]=\"ATANH\",r[r.CEIL=7]=\"CEIL\",r[r.COS=8]=\"COS\",r[r.COSH=9]=\"COSH\",r[r.ELU=10]=\"ELU\",r[r.ERF=11]=\"ERF\",r[r.EXP=12]=\"EXP\",r[r.EXPM1=13]=\"EXPM1\",r[r.FLOOR=14]=\"FLOOR\",r[r.IS_FINITE=15]=\"IS_FINITE\",r[r.IS_INF=16]=\"IS_INF\",r[r.IS_NAN=17]=\"IS_NAN\",r[r.LINEAR=18]=\"LINEAR\",r[r.LOG=19]=\"LOG\",r[r.LOG1P=20]=\"LOG1P\",r[r.LOGICAL_NOT=21]=\"LOGICAL_NOT\",r[r.NEG=22]=\"NEG\",r[r.RELU=23]=\"RELU\",r[r.RELU6=24]=\"RELU6\",r[r.LEAKYRELU=25]=\"LEAKYRELU\",r[r.RECIPROCAL=26]=\"RECIPROCAL\",r[r.ROUND=27]=\"ROUND\",r[r.RSQRT=28]=\"RSQRT\",r[r.SELU=29]=\"SELU\",r[r.SIGMOID=30]=\"SIGMOID\",r[r.SIGN=31]=\"SIGN\",r[r.SIN=32]=\"SIN\",r[r.SINH=33]=\"SINH\",r[r.SOFTPLUS=34]=\"SOFTPLUS\",r[r.SQRT=35]=\"SQRT\",r[r.SQUARE=36]=\"SQUARE\",r[r.STEP=37]=\"STEP\",r[r.TAN=38]=\"TAN\",r[r.TANH=39]=\"TANH\",r[r.TO_INT=40]=\"TO_INT\"})(Z||(Z={}));var Zae=\"return abs(a);\",Jae=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return acos(a);\n`,eie=`\n if (a < 1.) {\n return uniforms.NAN;\n }\n return acosh(a);\n`,tie=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n return asin(a);\n`,rie=\"return asinh(a);\",oie=`\n if (isnan(a)) {\n return uniforms.NAN;\n }\n return atan(a);\n`,nie=`\n if (abs(a) > 1.) {\n return uniforms.NAN;\n }\n if (a == 1.) {\n return uniforms.INFINITY;\n }\n if (a == -1.) {\n return -uniforms.INFINITY;\n }\n return atanh(a);\n`,sie=\"return ceil(a);\",aie=\"return cos(a);\",iie=`\n let e2x = exp(-a);\n return (e2x + 1.0 / e2x) / 2.0;\n`,uie=\"return exp(a) - 1.0;\",pie=\"if (a >= 0.0) { return a; } return (exp(a) - 1.0);\",cie=`\n var resFloat = exp(a) - vec4(1.0);\n if (a.r >= 0.0) {\n resFloat.r = a.r;\n }\n if (a.g >= 0.0) {\n resFloat.g = a.g;\n }\n if (a.b >= 0.0) {\n resFloat.b = a.b;\n }\n if (a.a >= 0.0) {\n resFloat.a = a.a;\n }\n return resFloat;\n`,lie=`\n // Error function is calculated approximately with elementary function.\n // See \"Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables\", Abramowitz and Stegun.\n let p = ${w.ERF_P};\n let a1 = ${w.ERF_A1};\n let a2 = ${w.ERF_A2};\n let a3 = ${w.ERF_A3};\n let a4 = ${w.ERF_A4};\n let a5 = ${w.ERF_A5};\n\n let sign = sign(a);\n let absA = abs(a);\n let t = 1.0 / (1.0 + p * absA);\n return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA));\n`,mie=\"return exp(a);\",die=\"return floor(a);\",fie=\"return f32(!isnan(a) && !isinf(a));\",hie=\"return f32(isinf(a));\",gie=\"return f32(isnan(a));\",xie=\"return a;\",yie=`if (a < 0.0) { return uniforms.NAN; }\n return log(a);`,bie=`\n if (isnan(a)) { return a; }\n return log(1.0 + a);\n`,Cie=\"return f32(!(a >= 1.0));\",wie=\"return -a;\",Sie=\"if (a < 0.0) { return uniforms.alpha * a; } return a;\",Iie=`\n let aLessThanZero = vec4(a < vec4(0.0));\n return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a);\n`,vie=\"return 1.0 / a;\",kie=\"return select(a, 0.0, a < 0.0);\",Nie=\"return clamp(a, 0.0, 6.0);\",Tie=\"return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));\",_ie=`\n return select(a, vec4(0.0), a < vec4(0.0));\n`,Eie=\"return round(a);\",$ie=\"return inverseSqrt(a);\",Rie=`\n if (a >= 0.0) {\n return ${w.SELU_SCALE} * a;\n } else {\n return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0);\n }\n`,Die=\"return 1.0 / (1.0 + exp(-1.0 * a));\",Aie=\"return sign(a);\",Fie=\"return sin(a);\",Pie=`\n let e2x = exp(a);\n return (e2x - 1.0 / e2x) / 2.0;\n`,Oie=`\n let epsilon = 1.1920928955078125e-7;\n let threshold = log(epsilon) + 2.0;\n\n let too_large = a > -threshold;\n let too_small = a < threshold;\n let exp_a = exp(a);\n\n if (too_large) {\n return a;\n } else if (too_small) {\n return exp_a;\n } else {\n return log(exp_a + 1.0);\n }\n`,Mie=\"return sqrt(a);\",Lie=\"return a * a;\",Bie=`\n if (isnan(a)) {\n return a;\n }\n\n return select(uniforms.stepAlpha, 1.0, a > 0.0);\n`,zie=\"return tan(a);\",Vie=`\n let e2x = exp(-2.0 * abs(a));\n return sign(a) * (1.0 - e2x) / (1.0 + e2x);\n`,Wie=\"return f32(i32((a)));\";function Si(r,e){switch(r){case Z.ABS:return Zae;case Z.ACOS:return Jae;case Z.ACOSH:return eie;case Z.ASIN:return tie;case Z.ASINH:return rie;case Z.ATAN:return oie;case Z.ATANH:return nie;case Z.COS:return aie;case Z.COSH:return iie;case Z.CEIL:return sie;case Z.ELU:return e?cie:pie;case Z.ERF:return lie;case Z.EXP:return mie;case Z.EXPM1:return uie;case Z.FLOOR:return die;case Z.IS_FINITE:return fie;case Z.IS_INF:return hie;case Z.IS_NAN:return gie;case Z.LINEAR:return xie;case Z.LOG:return yie;case Z.LOG1P:return bie;case Z.LOGICAL_NOT:return Cie;case Z.NEG:return wie;case Z.LEAKYRELU:return e?Iie:Sie;case Z.RECIPROCAL:return vie;case Z.RELU:return e?_ie:kie;case Z.RELU6:return e?Tie:Nie;case Z.ROUND:return Eie;case Z.RSQRT:return $ie;case Z.SELU:return Rie;case Z.SIGMOID:return Die;case Z.SIGN:return Aie;case Z.SIN:return Fie;case Z.SINH:return Pie;case Z.SOFTPLUS:return Oie;case Z.SQRT:return Mie;case Z.SQUARE:return Lie;case Z.STEP:return Bie;case Z.TAN:return zie;case Z.TANH:return Vie;case Z.TO_INT:return Wie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,e=!1,t=!1,o=3){if(r===null)return\"\";let n=\"\";if(r===\"linear\")n=Si(Z.LINEAR);else if(r===\"relu\")n=Si(Z.RELU,t);else if(r===\"elu\")n=Si(Z.ELU,t);else if(r===\"relu6\")n=Si(Z.RELU6,t);else if(r===\"prelu\")n=Xc(fe.PRELU,t);else if(r===\"sigmoid\")n=Si(Z.SIGMOID,t);else if(r===\"leakyrelu\")n=Si(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(t?4:1),i=\"\";return e?i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n let b = getPreluActivationWeightsByOutputCoords(coords);\n ${n}\n }`:i=`\n fn activation(a : ${a}, coords : vec${o}) -> ${a} {\n ${n}\n }`,i}function Zr(r,e){return`\n ${r?\"value = value + getBiasByOutputCoords(coords);\":\"\"}\n ${e?\"value = activation(value, coords);\":\"\"}\n `}function Jv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=`\n ${r?\"value = getA(batch, col, row);\":\"value = getA(batch, row, col);\"}\n\n `,i=e?\"value = getB(batch, col, row);\":\"value = getB(batch, row, col);\";return`\n fn mm_readA(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${t&&n?a:`\n ${r?\"if(row < uniforms.dimAOuter && col < uniforms.dimInner)\":\"if(row < uniforms.aShape[1] && col < uniforms.aShape[2])\"}\n {\n ${a}\n }\n `}\n return value;\n }\n\n fn mm_readB(batch: i32, row: i32, col: i32) -> ${Ae(s)} {\n var value = ${Ae(s)}(0.0);\n ${i}\n return value;\n }\n `}function hm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return`\n ${Jv(t,o,n,s,a,i)}\n fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) {\n ${n&&s?\"\":\"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\"}\n {\n var value = valueIn;\n let coords = vec3(batch, row, col);\n ${Zr(r,e)}\n setOutputAtCoords(coords[0], coords[1], coords[2], value);\n }\n }\n `}var Uie=(r,e)=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol * ${e});\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRow + innerRow,\n kStart + inputCol * ${e});\n `,Gie=(r,e,t,o)=>{if(r)return`\n for (var k = 0; k < ${o}; k++) {\n let BCached0 = mm_Bsub[k][tileCol];\n let ACached0 = mm_Asub[k][localRow];\n for (var i = 0; i < ${t}; i++) {\n acc[i] = fma(BCached0, vec4(ACached0[i]), acc[i]);\n }\n }`;{let n=\"\",s=\"\";for(let a=0;a(ACached[${a}]), acc[i]);`;return`\n for (var k = 0; k < ${o/e}; k++) {\n ${n}\n for (var i = 0; i < ${t}; i++) {\n let ACached = mm_Asub[tileRow + i][k];\n ${s}\n }\n }`}};function _p(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1],d=r[1],f=r[0];return y.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4.\n Otherwise, innerElementSize ${l} must be 3 or 4.\n tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`),`\n var mm_Asub : array, ${u/l}>, ${c}>;\n var mm_Bsub : array, ${p/r[0]}>, ${o}>;\n\n ${G()} {\n let localRow = i32(localId.y);\n let tileRow = localRow * ${d};\n let tileCol = i32(localId.x);\n\n let globalRow = i32(globalId.y) * ${d};\n let globalCol = i32(globalId.x) * ${f};\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!a?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!a?\"batch\":\"batch % uniforms.bShape[0]\"};\n let globalRowStart = i32(workgroupId.y) * ${i};\n\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc: array, ${d}>;\n\n // Loop over shared dimension.\n let tileRowB = localRow * ${m};\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n let inputRow = tileRow + innerRow;\n let inputCol = tileCol;\n ${Uie(t,l)}\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB, kStart + inputRow, globalCol);\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n ${Gie(t,l,d,o)}\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${d}; innerRow++) {\n mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]);\n }\n }`}var az=r=>r?`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n kStart + inputRow,\n globalRowStart + inputCol);\n `:`\n mm_Asub[inputRow][inputCol] = mm_readA(batchA,\n globalRowStart + inputRow,\n kStart + inputCol);\n `,Hie=r=>r?\"let ACached = mm_Asub[k][tileRow + innerRow];\":\"let ACached = mm_Asub[tileRow + innerRow][k];\";function Ep(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],c=t?p:o,l=t?o:p;y.assert(l%e[1]===0&&c%e[0]===0&&o%e[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=l/e[1],d=c/e[0],f=o/e[1],h=r[1],g=r[0],x=a?`\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n let globalRowStart = i32(workgroupId.y) * ${p};\n let globalColStart = i32(workgroupId.x) * ${u};\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${e[0]}) {\n ${az(t)}\n }\n }\n // Load one tile of B into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${e[1]}) {\n for (var inputCol = localCol; inputCol < ${u}; inputCol = inputCol + ${e[0]}) {\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalColStart + inputCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][localCol + inner * ${e[0]}];\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let ACached = ${t?`mm_Asub[k][localRow + innerRow * ${e[1]}];`:`mm_Asub[localRow + innerRow * ${e[1]}][k];`}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n workgroupBarrier();\n }\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n let gRow = globalRowStart + localRow + innerRow * ${e[1]};\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let gCol = globalColStart + localCol + innerCol * ${e[0]};\n mm_write(batch, gRow, gCol, acc[innerRow][innerCol]);\n }\n }\n `:`\n let tileRow = i32(localId.y) * ${h};\n let tileCol = i32(localId.x) * ${g};\n\n let globalRow = i32(globalId.y) * ${h};\n let globalCol = i32(globalId.x) * ${g};\n let globalRowStart = i32(workgroupId.y) * ${p};\n\n let tileRowA = i32(localId.y) * ${m};\n let tileColA = i32(localId.x) * ${d};\n let tileRowB = i32(localId.y) * ${f};\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n for (var innerRow = 0; innerRow < ${m}; innerRow++) {\n for (var innerCol = 0; innerCol < ${d}; innerCol++) {\n let inputRow = tileRowA + innerRow;\n let inputCol = tileColA + innerCol;\n ${az(t)}\n }\n }\n\n // Load one tile of B into local memory.\n for (var innerRow = 0; innerRow < ${f}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n let inputRow = tileRowB + innerRow;\n let inputCol = tileCol + innerCol;\n mm_Bsub[inputRow][inputCol] = mm_readB(batchB,\n kStart + inputRow,\n globalCol + innerCol);\n }\n }\n kStart = kStart + ${o};\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n var BCached : array;\n for (var k = 0; k < ${o}; k++) {\n for (var inner = 0; inner < ${g}; inner++) {\n BCached[inner] = mm_Bsub[k][tileCol + inner];\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n ${Hie(t)}\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] =\n fma(ACached, BCached[innerCol], acc[innerRow][innerCol]);\n }\n }\n }\n\n workgroupBarrier();\n }\n\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n mm_write(batch, globalRow + innerRow, globalCol + innerCol,\n acc[innerRow][innerCol]);\n }\n }\n `;return`\n var mm_Asub : array, ${l}>;\n var mm_Bsub : array, ${o}>;\n\n ${G()} {\n let batch = ${n?\"0\":\"i32(globalId.z)\"};\n let batchA = ${n||!i?\"batch\":\"batch % uniforms.aShape[0]\"};\n let batchB = ${n||!i?\"batch\":\"batch % uniforms.bShape[0]\"};\n let numTiles = ${n?`${Math.ceil(s/o)}`:`(uniforms.dimInner - 1) / ${o} + 1`};\n var kStart = ${n?`i32(globalId.z) * ${s}`:\"0\"};\n\n var acc : array, ${h}>;\n\n // Without this initialization strange values show up in acc.\n for (var innerRow = 0; innerRow < ${h}; innerRow++) {\n for (var innerCol = 0; innerCol < ${g}; innerCol++) {\n acc[innerRow][innerCol] = 0.0;\n }\n }\n ${x}\n }\n `}var Kie=r=>r?`\n mm_readA(batchA, colA, globalRow),\n mm_readA(batchA, colA + 1, globalRow),\n mm_readA(batchA, colA + 2, globalRow),\n mm_readA(batchA, colA + 3, globalRow)\n `:`\n mm_readA(batchA, globalRow, colA),\n mm_readA(batchA, globalRow, colA + 1),\n mm_readA(batchA, globalRow, colA + 2),\n mm_readA(batchA, globalRow, colA + 3)\n `;function qie(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return`\n var mm_Asub : array, ${r[0]}>;\n\n ${G()} {\n let tileCol = i32(localId.x);\n let globalCol = i32(globalId.x);\n let globalRow = i32(globalId.y);\n\n let numTiles = (uniforms.dimInner - 1) / ${t} + 1;\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n // Without this initialization strange values show up in acc.\n var acc = 0.0;\n\n // Loop over shared dimension.\n for (var t = 0; t < numTiles; t++) {\n // Load one tile of A into local memory.\n let colA = t * ${t} + tileCol * 4;\n mm_Asub[tileCol] = vec4(${Kie(e)});\n workgroupBarrier();\n\n // Compute acc values for a single thread.\n for (var k = 0; k < ${t/4}; k++) {\n let rowB = t * ${t} + k * 4;\n let BCached = vec4(mm_readB(batchB, rowB, globalCol),\n mm_readB(batchB, rowB + 1, globalCol),\n mm_readB(batchB, rowB + 2, globalCol),\n mm_readB(batchB, rowB + 3, globalCol));\n\n let ACached = mm_Asub[k];\n acc = acc + dot(ACached, BCached);\n }\n\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var Xg=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Qv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let c=s!=null,l=i!=null;c&&this.variableNames.push(\"bias\"),l&&this.variableNames.push(\"preluActivationWeights\"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=c,this.activation=a,this.hasPreluActivationWeights=l,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)}\n ${hm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)}\n ${this.isVec4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?qie(this.workgroupSize,this.transposeA):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)}\n `}};function jie(r){return`\n var sumValues : array;\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n let row = coords[1];\n let col = coords[2];\n var sum = 0.0;\n let Length = uniforms.dimInner;\n for (var k = i32(localId.x); k < Length; k = k + ${r}) {\n let dataA = mm_readA(batchA, row, k);\n let dataB = mm_readB(batchB, k, col);\n sum = sum + dataA * dataB;\n }\n sumValues[localId.x] = sum;\n workgroupBarrier();\n\n for(var currentSize = ${r/2}u; currentSize > 1u;\n currentSize = currentSize / 2u) {\n if (localId.x < currentSize)\n {\n sumValues[localId.x] = sumValues[localId.x] + sumValues[localId.x + currentSize];\n }\n workgroupBarrier();\n }\n\n if (localId.x == 0u) {\n sum = sumValues[0] + sumValues[1];\n mm_write(batch, row, col, sum);\n }\n }\n `}var Yg=class{constructor(e,t=!1,o=!1,n=null,s=null,a=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push(\"bias\"),p&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${jie(this.workgroupSize[0])}\n `}};function Xie(r){let e=r[1],t=r[0],o=e>t?e:t;return`\n var mm_Asub : array, ${e}>;\n var mm_Bsub : array, ${o}>;\n\n // If the output size is small for matrix multiplication, avoid to use vec4\n // and handle some elements per thread to optimally utilize the ALU.\n // Read data from global memory to registers firstly, then store them into\n // shared memory, so it is instruction-Level parallelism for arithmetic\n // operations and others handle IO operations between barrier api, makes ALU\n // and load/store units work simultaneously, could improves the performance.\n ${G()} {\n let tileRow = i32(localId.y);\n let tileCol = i32(localId.x);\n let globalRow = i32(globalId.y);\n let globalCol = i32(globalId.x);\n let batch = i32(globalId.z);\n let batchA = batch % uniforms.aShape[0];\n let batchB = batch % uniforms.bShape[0];\n\n // uniforms.dimInner should be greater than 0.\n let numTiles = (uniforms.dimInner - 1) / ${o} + 1;\n var acc = 0.0;\n\n var globalColA = tileCol;\n var globalRowB = 0;\n var regA = mm_readA(batchA, globalRow, globalColA);\n var regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n var regB1 = mm_readB(batchB, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var t = 0; t < numTiles; t = t + 1) {\n mm_Asub[tileRow][tileCol] = regA;\n mm_Bsub[2 * tileRow][tileCol] = regB0;\n mm_Bsub[2 * tileRow + 1][tileCol] = regB1;\n\n workgroupBarrier();\n\n regA = mm_readA(batchA, globalRow, globalColA);\n regB0 = mm_readB(batchB, globalRowB + 2 * tileRow, globalCol);\n regB1 = mm_readB(batchB, globalRowB + 2 * tileRow + 1, globalCol);\n globalColA = globalColA + ${o};\n globalRowB = globalRowB + ${o};\n\n for (var k = 0; k < ${o}; k = k + 1) {\n acc = acc + mm_Asub[tileRow][k] * mm_Bsub[k][tileCol];\n }\n workgroupBarrier();\n }\n\n mm_write(batch, globalRow, globalCol, acc);\n }\n `}var Qg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push(\"bias\");let c=p!=null;c&&this.variableNames.push(\"preluActivationWeights\"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)}\n ${Xie(this.workgroupSize)}\n `}};var Zg=class{constructor(e,t,o=!1,n=!1){this.variableNames=[\"A\",\"B\"],this.uniforms=\"dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,y.assert(e[0]===1,()=>\"MatMulSplitKProgram only supports batch = 1.\"),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return`\n ${Jv(!1,this.transposeB,!1,!1,!1,e)}\n fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n let coords = vec3(batch, row, col);\n let flatIndex = getOutputIndexFromCoords(coords);\n // The problem is that we should initialize output to zero before using.\n // Otherwise, the original value will be added to the result.\n for (var i = 0; i < ${e}; i = i + 1) {\n ${Qr(\"&result[flatIndex + i]\",`${e>1?\"value[i]\":\"value\"}`,\"float32\")}\n }\n }\n }\n ${e===4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)}\n `}},Jg=class{constructor(e,t=null,o=null,n=null){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push(\"bias\"),this.hasPreluActivationWeights&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights)}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var value = getXByOutputIndex(index);\n ${Zr(this.addBias,this.activation)}\n setOutputAtIndex(index, value);\n }\n }\n `}};var ex=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"value : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"fill\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.value);\n }\n }\n `}};function vt(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s===\"string\"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new ex(o),i=[{type:\"float32\",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var iz={kernelName:sa,backendName:\"webgpu\",kernelFunc:vt};function pe(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var uz={kernelName:da,backendName:\"webgpu\",kernelFunc:pe};function $p({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Sr.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=[$,R],M=[{type:\"int32\",data:[d]},{type:\"int32\",data:[f]},{type:\"int32\",data:[l]}],L,B,z=[P,d,f],U=A().get(\"WEBGPU_MATMUL_PROGRAM_TYPE\");if(U<0){let q=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=P*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?P*d*f<=128?U=Mo.MatMulReduceProgram:P===1&&m>=2e3?U=Mo.MatMulSplitKProgram:U=Mo.MatMulSmallOutputSizeProgram:U=Mo.MatMulPackedProgram}switch(U){case Mo.MatMulReduceProgram:L=new Yg(z,t,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Jg(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p===\"leakyrelu\"&&(J=[{type:\"float32\",data:[i]}],Y.uniforms+=\" alpha : f32,\");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=pe({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case Mo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,t,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p===\"leakyrelu\"&&(M.push({type:\"float32\",data:[i]}),L.uniforms+=\" alpha : f32,\"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=pe({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function Yie(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return $p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var pz={kernelName:So,backendName:\"webgpu\",kernelFunc:Yie};var gm=class{constructor(e,t,o){this.variableNames=[\"AReal\",\"AImag\",\"BReal\",\"BImag\"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return`\n fn binaryOpComplex(\n areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 {\n ${Xc(this.op,!1)}\n }\n\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let areal = getARealByOutputIndex(index);\n let aimag = getAImagByOutputIndex(index);\n let breal = getBRealByOutputIndex(index);\n let bimag = getBImagByOutputIndex(index);\n setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag));\n }\n }\n `}};var Ii=class{constructor(e,t,o){if(this.size=!0,this.variableNames=[\"A\",\"B\"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type=\"shared\",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type=\"nonshared\",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?\"vec4\":\"f32\",o=`\n fn binaryOperation(a : ${t}, b : ${t}) -> ${t} {\n ${Xc(this.op,this.outputComponent===4)}\n };\n `;if(this.type===\"shared\"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:\"0\",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index);\n let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}];\n let b = getBByOutputIndex(index);`;e=`\n ${o}\n var sharedBuf : array;\n ${G(\"index\")} {\n // Fill in the shared memory buffer.\n let localIndex = i32(localId.x);\n if(localIndex < ${this.lastDimensionSize}) {\n sharedBuf[localIndex] = f32(${this.useSharedMemoryWithB?\"B\":\"A\"}[localIndex]);\n }\n workgroupBarrier();\n\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n ${s}\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `}else e=`\n ${o}\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index * ${this.outputComponent});\n let a = ${t}(getAByOutputCoords(coords));\n let b = ${t}(getBByOutputCoords(coords));\n setOutputAtIndex(index, binaryOperation(a, b));\n }\n }\n `;return e}};function At(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var cz={kernelName:Co,backendName:\"webgpu\",kernelFunc:At};function xo(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,\"complex64\"),a=t.tensorMap.get(s.dataId),i=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lz={kernelName:Di,backendName:\"webgpu\",kernelFunc:xo};var Jr=class{constructor(e,t,o=\"\"){this.variableNames=[\"A\"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==\"\"&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return`\n fn unaryOperation(a : f32) -> f32 {\n ${Si(this.op,!1)}\n }\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let a = getAByOutputIndex(index);\n setOutputAtIndex(index, unaryOperation(a));\n }\n }\n `}};function ye({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Jr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype===\"complex64\"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==fe.MUL)[d,f]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,C={dataId:x.dataId,dtype:x.dtype,shape:a.shape},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new gm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new gm(fe.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{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},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,\"float32\"),f=p.runWebGPUProgram(x,b,\"float32\")}let h=xo({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||dt(a.dtype,i.dtype);if((a.dtype===\"string\"||i.dtype===\"string\"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype===\"string\"?w.fromUint8ToStringArray(l):l,f=a.dtype===\"string\"?w.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:mz,castImpl:dz,ceilImpl:fz,concatImpl:hz,equalImpl:gz,expImpl:xz,expm1Impl:yz,floorImpl:bz,floorDivImpl:Cz,gatherNdImpl:wz,gatherV2Impl:Sz,greaterEqualImpl:Iz,greaterImpl:vz,lessEqualImpl:kz,lessImpl:Nz,logImpl:Tz,maxImpl:_z,maximumImpl:Ez,minimumImpl:$z,multiplyImpl:Rz,negImpl:Dz,notEqualImpl:Az,prodImpl:Fz,rangeImpl:Pz,rsqrtImpl:Oz,scatterImpl:Mz,simpleAbsImpl:Lz,sliceImpl:Bz,stridedSliceImpl:zz,stringNGramsImpl:Vz,subImpl:Wz,tileImpl:Uz,topKImpl:Gz,transposeImpl:Hz,uniqueImpl:rOt}=Ic;var Qie=ye({opType:Z.ABS,cpuKernelImpl:Lz}),Kz={kernelName:Xs,backendName:\"webgpu\",kernelFunc:Qie};var Zie=ye({opType:Z.ACOS}),qz={kernelName:Vo,backendName:\"webgpu\",kernelFunc:Zie};var Jie=ye({opType:Z.ACOSH}),jz={kernelName:Wo,backendName:\"webgpu\",kernelFunc:Jie};var eue=et({opType:fe.ADD,cpuKernelImpl:mz,supportsComplex:!0}),Xz={kernelName:uo,backendName:\"webgpu\",kernelFunc:eue};var tx=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"addN\"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(\" + \");return`\n ${G(\"index\")} {\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let flatIndex = index * ${this.workPerThread} + i;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n ${e.join(`\n `)}\n setOutputAtIndex(flatIndex, ${t});\n }\n }\n }\n `}};function tue(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new tx(s);return t.runWebGPUProgram(a,o,n)}var Yz={kernelName:Uo,backendName:\"webgpu\",kernelFunc:tue};var rx=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return`\n var tile : array, ${this.workgroupSize[0]}>;\n ${G()} {\n var x = i32(workgroupId.x) * ${e} + i32(localId.x);\n var y = i32(workgroupId.y) * ${e} + i32(localId.y);\n let width = uniforms.outShape[0];\n let height = uniforms.outShape[1];\n if (x < width && y < height) {\n tile[localId.y][localId.x] = f32(A[y * width + x]);\n }\n workgroupBarrier();\n\n x = i32(workgroupId.y) * ${e} + i32(localId.x);\n y = i32(workgroupId.x) * ${e} + i32(localId.y);\n if (x < height && y < width) {\n setOutputAtIndex((y * height + x), tile[localId.x]\n [localId.y]);\n }\n }\n `}};var ox=class{constructor(e,t){this.variableNames=[\"A\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e=\"\",t=\"0.0\",o=this.workgroupSize[0];this.reduceType===\"min\"||this.reduceType===\"max\"?(e=`\n if (isnan(candidate)) {\n bestValue = uniforms.NAN;\n } else if (!isnan(bestValue) && candidate ${this.reduceType===\"min\"?\"<\":\">\"} bestValue)\n { bestValue = candidate; }`,t=\"f32(x[offset])\"):this.reduceType===\"sum\"||this.reduceType===\"mean\"?e=\" bestValue = bestValue + candidate; \":this.reduceType===\"prod\"?(e=\" bestValue = bestValue * candidate; \",t=\"1.0\"):this.reduceType===\"all\"?(e=\" bestValue = f32(bestValue >= 1.0 && candidate >= 1.0); \",t=\"1.0\"):this.reduceType===\"any\"&&(e=\" bestValue = f32(bestValue >= 1.0 || candidate >= 1.0); \",t=\"0.0\");let n=this.reduceType===\"mean\"?\"setOutputAtIndex(outputIndex, bestValue / f32(uniforms.reduceSize));\":\"setOutputAtIndex(outputIndex, bestValue);\";return`\n fn DIV_CEIL(a : u32, b : u32) -> u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestValues : array;\n `}\n fn getOffset(outputIndex : i32) -> i32 {\n let outputCoords = getCoordsFromIndex(outputIndex);\n let offset = ${this.outputShape.length===1?\"outputCoords\":\"outputCoords[0]\"} * uniforms.reduceSize;\n return offset;\n }\n ${G(\"index\")} {\n let outputIndex = index / ${o};\n let offset = getOffset(outputIndex);\n var bestValue = ${t};\n let Length = uniforms.reduceSize;\n let WorkPerThread = DIV_CEIL(u32(Length), ${o}u);\n for (var k = i32(localId.x); k < Length && outputIndex < uniforms.size;\n k = k + ${o}) {\n let candidate = f32(x[offset + k]);\n ${e}\n }\n xBestValues[localId.x] = bestValue;\n workgroupBarrier();\n\n var reduceSize = min(u32(Length), ${o}u);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n ${e}\n xBestValues[localId.x] = bestValue;\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n ${n}\n }\n }\n `}};var rue={mean:\"float32\",all:\"bool\",any:\"bool\"};function eo(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=w.getAxesPermutation(p,s),c=r;u!=null&&(c=xr({inputs:{x:r},attrs:{perm:u},backend:n}),p=w.getInnerMostAxes(p.length,s),a.push(c)),w.assertAxesAreInnerMostDims(o,p,s);let[l,m]=w.computeOutAndReduceShapes(c.shape,p),d=l;t&&(d=w.expandShapeToKeepDim(l,i));let f;if((o===\"max\"||o===\"prod\")&&n.shouldExecuteOnCPU([c])){let h=n.tensorMap.get(c.dataId).values;switch(o){case\"max\":let g=_z(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case\"prod\":let{outVals:x,outShape:b,outDtype:C}=Fz(c.shape,c.dtype,h,p);f=n.makeTensorInfo(b,C,x);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=y.sizeFromShape(m),x=y.sizeFromShape(c.shape)/h,b={windowSize:h,inSize:h,batchSize:x,outSize:1},C=rue[o]||oi(r.dtype),S=[{type:\"int32\",data:[h]}],k=new nx(b,o,n.device.limits.maxComputeWorkgroupSizeX),_=n.runWebGPUProgram(k,[c],C,S);a.push(_),f=pe({inputs:{x:_},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function oue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"all\",t)}var Zz={kernelName:Go,backendName:\"webgpu\",kernelFunc:oue};function nue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"any\",t)}var Jz={kernelName:Ho,backendName:\"webgpu\",kernelFunc:nue};var Yc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=[\"x\"],this.uniforms=\"infinityValue : f32,\",this.size=!0;let n=[t];this.op=o===\"min\"?\"<\":\">\";let[s,a]=w.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type=\"plain\",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type=\"shared\",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?\"uniforms.xShape\":`uniforms.xShape.${Oo(this.inputShape.length-1)}`,o=()=>{let n=\"\";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+=\"outputCoords,\");else for(let s=0;s u32 {\n return ((a - 1u) / b + 1u);\n }\n\n ${`\n var xBestIndices : array;\n var xBestValues : array;\n `}\n\n ${G(\"index\")} {\n let outputIndex = index / ${e};\n let reduceLength = ${t()};\n\n var bestIndex = i32(localId.x);\n var bestValue = uniforms.infinityValue;\n let outputCoords = getCoordsFromIndex(outputIndex);\n for (var k = i32(localId.x); k < reduceLength && outputIndex < uniforms.size;\n k = k + ${e}) {\n let candidate = getX(${o()} k);\n if (!isnan(candidate) && candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = k;\n }\n }\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = bestIndex;\n workgroupBarrier();\n\n var reduceSize = min(u32(reduceLength), ${e}u);\n for (var currentSize = reduceSize / 2u; reduceSize > 1u;\n currentSize = reduceSize / 2u) {\n let interval = DIV_CEIL(reduceSize, 2u);\n if (localId.x < currentSize) {\n let candidate = xBestValues[localId.x + interval];\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n xBestValues[localId.x] = bestValue;\n xBestIndices[localId.x] = xBestIndices[localId.x + interval];\n }\n }\n reduceSize = interval;\n workgroupBarrier();\n }\n\n if (localId.x == 0u && outputIndex < uniforms.size) {\n setOutputAtIndexI32(outputIndex, xBestIndices[localId.x]);\n }\n }\n `:`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outputCoords = getCoordsFromIndex(index);\n var bestIndex = 0;\n var bestValue = getX(${o()} 0);\n let reduceLength = ${t()};\n for (var i = 1; i < reduceLength; i++) {\n let candidate = getX(${o()} i);\n if (candidate ${this.op} bestValue) {\n bestValue = candidate;\n bestIndex = i;\n }\n }\n setOutputAtIndexI32(index, bestIndex);\n }\n }\n `}};function sue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMax\",[a[0]],p.shape.length);let c=new Yc(p.shape,a[0],\"max\"),l=[{type:\"float32\",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var eV={kernelName:Ys,backendName:\"webgpu\",kernelFunc:sue};function aue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims(\"argMin\",[a[0]],p.shape.length);let c=new Yc(p.shape,a[0],\"min\"),l=[{type:\"float32\",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],\"int32\",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var tV={kernelName:Qs,backendName:\"webgpu\",kernelFunc:aue};var iue=ye({opType:Z.ASIN}),rV={kernelName:Ko,backendName:\"webgpu\",kernelFunc:iue};var uue=ye({opType:Z.ASINH}),oV={kernelName:qo,backendName:\"webgpu\",kernelFunc:uue};var pue=ye({opType:Z.ATAN}),nV={kernelName:jo,backendName:\"webgpu\",kernelFunc:pue};var cue=et({opType:fe.ATAN2}),sV={kernelName:Yo,backendName:\"webgpu\",kernelFunc:cue};var lue=ye({opType:Z.ATANH}),aV={kernelName:Xo,backendName:\"webgpu\",kernelFunc:lue};var sx=class{constructor(e){this.variableNames=[\"x\"],this.uniforms=\"strides : vec2,\",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"poolWithFilterSizeEqualsOne\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let xRCCorner = coords.yz * uniforms.strides;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n let value = getX(batch, xRCorner, xCCorner, d);\n setOutputAtIndex(index, value);\n }\n }\n `}};var Ba=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue = resultValue + value; count = count + 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"((batch * uniforms.xShape[1] + xR) * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"(xR * uniforms.xShape[2] + xC) * uniforms.xShape[3] + d\":\"wR * uniforms.filterDims.y + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n let xRCCorner = vec2(coords.yz) * uniforms.strides - uniforms.pads;\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + uniforms.dilations.x) {\n let xR = xRCorner + wR;\n\n if (xR < 0 || xR >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + uniforms.dilations.y) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.y) {\n continue;\n }\n\n let value = getX(batch, xR, xC, d);\n ${e}\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}},Iu=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=[\"x\"],this.uniforms=\"strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,\",this.workgroupSize=[128,1,1],this.size=!0,t===\"avg\"&&o)throw new Error(\"Cannot compute positions for average pool.\");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType===\"avg\"?e=\"resultValue += value; count += 1.0;\":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound);\n if (value >= currMaxValue) {\n maxValue = value;\n maxValueFound = 1.0;\n maxPosition = ${this.flattenPositions?this.includeBatchIndex?\"(((batch * uniforms.xShape.y + xD) * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"((xD * uniforms.xShape.z + xR) * uniforms.xShape.w + xC) * uniforms.xShape.u + ch\":\"wD * uniforms.filterDims.y * uniforms.filterDims.y + wR * uniforms.filterDims.z + wC\"};\n }`:e=\"resultValue = max(value, resultValue);\";let t=\"resultValue\";return this.poolType===\"avg\"&&(t=\"resultValue / max(count, 1.0)\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let xCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xDCorner = xCorner.x;\n let xRCorner = xCorner.y;\n let xCCorner = xCorner.z;\n\n ${this.computePositions?`var maxValue = 0.0;\n var maxValueFound = 0.0;\n var maxPosition = 0;`:`var resultValue = ${this.poolType===\"avg\"?\"0.0\":\"-1.0 / pow(10.0, -20.0)\"};`}\n\n var count = 0.0;\n for (var wD = 0; wD < uniforms.filterDims.x; wD++) {\n let xD = xDCorner + wD;\n if (xD < 0 || xD >= uniforms.convDims.x) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims.y; wR++) {\n let xR = xRCorner + wR;\n if (xR < 0 || xR >= uniforms.convDims.y) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims.z; wC++) {\n let xC = xCCorner + wC;\n if (xC < 0 || xC >= uniforms.convDims.z) {\n continue;\n }\n\n let value = getX(batch, xD, xR, xC, ch);\n ${e}\n }\n }\n }\n\n ${this.computePositions?\"setOutputAtIndexI32(index, maxPosition);\":`setOutputAtIndex(index, ${t});`}\n }\n }\n `}};function t0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,\"max\",t)}var iV={kernelName:zn,backendName:\"webgpu\",kernelFunc:t0};function r0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,\"mean\",t)}var uV={kernelName:Un,backendName:\"webgpu\",kernelFunc:r0};function ax(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return At({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type===\"VALID\"){let a=r.shape.length,i=pe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t===\"avg\"?p=r0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),p=t0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:\"int32\",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new sx(e):(t===\"avg\"?n=new Ba(e,\"avg\"):(y.assert(t===\"max\",()=>`Invalid pool type ${t}`),n=new Ba(e,\"max\")),s.push({type:\"int32\",data:[e.padInfo.top,e.padInfo.left]},{type:\"int32\",data:[e.dilationHeight,e.dilationWidth]},{type:\"int32\",data:[e.inHeight,e.inWidth]},{type:\"int32\",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function mue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"avg\",t)}var pV={kernelName:Qo,backendName:\"webgpu\",kernelFunc:mue};function due(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"avg\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var cV={kernelName:Zs,backendName:\"webgpu\",kernelFunc:due};var ix=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR = wR + uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC = wC + uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n\n dotProd = dotProd + dyValue * uniforms.avgMultiplier;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},ux=class{constructor(e){this.variableNames=[\"dy\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"avgPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n dotProd += dyValue * uniforms.avgMultiplier;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function fue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ux(l),d=1/(l.filterDepth*l.filterHeight*l.filterWidth),f=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.effectiveFilterDepth-1-l.padInfo.front,l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:\"int32\",data:[l.outDepth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"float32\",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var lV={kernelName:Ri,backendName:\"webgpu\",kernelFunc:fue};function hue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;fm([n,s],\"avgPoolGrad\");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ix(c),m=1/(c.filterHeight*c.filterWidth),d=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:\"int32\",data:[c.outHeight]},{type:\"int32\",data:[c.outWidth]},{type:\"float32\",data:[m]}];return t.runWebGPUProgram(l,[n],a.dtype,d)}var mV={kernelName:$i,backendName:\"webgpu\",kernelFunc:hue};function gue(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return $p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var dV={kernelName:Zo,backendName:\"webgpu\",kernelFunc:gue};var px=class{constructor(e,t){this.variableNames=[\"source\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey=\"slice\"}getUserCode(){let e=ft(this.rank),t=xue(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>\"sourceLoc = uniforms.start + coords;\"):o=this.outputShape.map((s,a)=>`sourceLoc.${o0[a]} = uniforms.start.${Oo(a)} + coords.${o0[a]};`),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var sourceLoc : ${e};\n let coords = getCoordsFromIndex(index);\n ${o.join(`\n`)}\n setOutputAtIndex(index, getSource(${t}));\n }\n }\n `}},o0=[\"x\",\"y\",\"z\",\"w\",\"u\",\"v\"];function xue(r){if(r===1)return\"sourceLoc\";if(r<=6)return o0.slice(0,r).map(e=>`sourceLoc.${e}`).join(\",\");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype===\"string\"){let l=t.tensorMap.get(n.dataId),m=Bz(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new px(i,p),c=[{type:\"int32\",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var fV={kernelName:ha,backendName:\"webgpu\",kernelFunc:Hs};var yue=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>\"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},hV={kernelName:Js,backendName:\"webgpu\",kernelFunc:yue};var bue=`\n fn bincount_write(index: i32, value: f32) {\n ${Qr(\"&result[index]\",\"value\",\"float32\")}\n }\n`,Cue=`\n fn bincount_write(index: i32, value: f32) {\n atomicStore(&result[index], bitcast(value));\n }\n`,Qc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"binCountSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push(\"w\"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return`\n ${this.binaryOutput?Cue:bue}\n ${G(\"index\")} {\n ${this.rank===1?`if (index < uniforms.xShape) {\n let indexVal = i32(getX(index));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"getW(index)\":\"1.\"};\n bincount_write(indexVal, value);\n }\n }`:`let coord = getCoordsFromIndex(index);\n if (coordsInBounds2D(coord, uniforms.xShape)) {\n let indexVal = i32(getX(coord[0], coord[1]));\n if (indexVal < uniforms.binCountSize) {\n let value = ${this.binaryOutput?1:this.hasWeights?\"getW(coord[0], coord[1])\":\"1.\"};\n bincount_write(coord.x * uniforms.binCountSize + indexVal, value);\n }\n }`}\n }\n `}};function wue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=vt({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new Qc([i],u),f=[{type:\"int32\",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var gV={kernelName:Jo,backendName:\"webgpu\",kernelFunc:wue};var cx=class{constructor(e){this.outputShape=[],this.variableNames=[\"s0\",\"s1\"],this.uniforms=\"s0Size : i32, s1Size : i32, \",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"broadcastArgs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var s0 = 1.0;\n var s1 = 1.0;\n let indexS0 = index - uniforms.size + uniforms.s0Size;\n let indexS1 = index - uniforms.size + uniforms.s1Size;\n if (indexS0 >= 0) {\n s0 = getS0(indexS0);\n }\n if (indexS1 >= 0) {\n s1 = getS1(indexS1);\n }\n\n if (s0 == 1.0) {\n setOutputAtIndex(index, s1);\n } else if (s1 == 1.0) {\n setOutputAtIndex(index, s0);\n } else if (s0 != s1) {\n setOutputAtIndex(index, uniforms.NAN);\n } else {\n setOutputAtIndex(index, s0);\n }\n }\n }\n `}};function Sue(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let c=t.tensorMap.get(o.dataId),l=t.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],\"int32\",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new cx(i),u=[{type:\"int32\",data:[s]},{type:\"int32\",data:[a]}];return t.runWebGPUProgram(p,[o,n],\"int32\",u)}var xV={kernelName:ea,backendName:\"webgpu\",kernelFunc:Sue};var n0=et({opType:fe.NOT_EQUAL,dtype:\"bool\",cpuKernelImpl:Az}),yV={kernelName:Yn,backendName:\"webgpu\",kernelFunc:n0};function vi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var bV={kernelName:Hi,backendName:\"webgpu\",kernelFunc:vi};function CV(r,e){let t=new Jr(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],\"int32\");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function s0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s===\"complex64\"){if(n.dtype===\"complex64\")return At({inputs:{x:n},backend:t});let a=Gr(n.shape),i=s0({inputs:{x:n},backend:t,attrs:{dtype:\"float32\"}}),p=xo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype===\"complex64\"){let a=vi({inputs:{input:n},backend:t}),i=s0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=dz(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s===\"int32\")return CV(n,t);if(s===\"bool\"){let a=t.makeTensorInfo([],\"bool\",y.getTypedArrayFromDType(\"bool\",1)),p=n0({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var wV={kernelName:yo,backendName:\"webgpu\",kernelFunc:s0};var Iue=ye({opType:Z.CEIL,cpuKernelImpl:fz}),SV={kernelName:en,backendName:\"webgpu\",kernelFunc:Iue};var lx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey=\"clipVec4\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n var clampedValue = clamp(\n value, vec4(uniforms.minVal), vec4(uniforms.maxVal));\n clampedValue = select(clampedValue, value, isnanVec4(value));\n setOutputAtIndex(index, clampedValue);\n }\n }\n `}};var mx=class{constructor(e){this.variableNames=[\"A\"],this.uniforms=\"minVal : f32, maxVal : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"clip\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let value = getAByOutputIndex(index);\n if (isnan(value)) {\n setOutputAtIndex(index, value);\n return;\n }\n setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal));\n }\n }\n `}};function vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:\"float32\",data:[s]},{type:\"float32\",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new lx(n.shape):i=new mx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var IV={kernelName:bo,backendName:\"webgpu\",kernelFunc:vue};var dx=class{constructor(e){this.outputShape=[],this.variableNames=[\"real\",\"imag\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"complexAbs\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let re = abs(getRealByOutputIndex(index));\n let im = abs(getImagByOutputIndex(index));\n let mx = max(re, im);\n\n // The length function in wgsl may be not underflow-safe on some GPUs.\n // So the safe solution is to ensure underflow-safety in all cases.\n setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0));\n }\n }\n `}};function vV(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function kue(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.tensorMap.get(o.dataId),s=new dx(o.shape),a=[vV(o,n.complexTensorInfos.real),vV(o,n.complexTensorInfos.imag)];return t.runWebGPUProgram(s,a,a[0].dtype)}var kV={kernelName:Ai,backendName:\"webgpu\",kernelFunc:kue};var fx=class{constructor(e){this.uniforms=\"\",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=w.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push(\"if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }\");for(let s=1;svi({inputs:{input:C},backend:t})),h=r.map(C=>Rp({inputs:{input:C},backend:t})),g=Zc(f,e,t),x=Zc(h,e,t),b=xo({inputs:{real:g,imag:x},backend:t});return f.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o===\"string\"&&(n=!0),n){let f=r.map(k=>{let $=[-1,y.sizeFromShape(k.shape.slice(e))];return pe({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=hz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new fx(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:\"int32\",data:[l[0]]});for(let f=1;ft.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Nue(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function a0(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:t}):Zc(p,s,t)}var TV={kernelName:ta,backendName:\"webgpu\",kernelFunc:a0};function Tue(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=D=>{switch(D){case 1:return\"resData = f32(x[xIndex]);\";case 3:return\"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);\";case 4:return\"resData = vec4(x[xIndex / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},l=D=>{switch(D){case 1:return\"return f32(W[row * uniforms.wShape[3] + col]);\";case 4:return\"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);\";default:throw new Error(`innerElementSize ${D} is not supported.`)}},m=r?`\n let coord = vec4(batch, xRow, xCol, xCh);\n `:`\n let coord = vec4(batch, xCh, xRow, xCol);\n `,d=r?`\n let coords = vec4(\n batch,\n row / outWidth,\n row % outWidth,\n col);\n `:`\n let coords = vec4(\n batch,\n row,\n col / outWidth,\n col % outWidth);\n `,f=r?\"uniforms.xShape[1]\":\"uniforms.xShape[2]\",h=r?\"uniforms.xShape[2]\":\"uniforms.xShape[3]\",g=r?\"row\":\"col\",x=r?\"col\":\"row\",b=`\n let inChannels = uniforms.wShape[2];\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n let outRow = ${g} / outWidth;\n let outCol = ${g} % outWidth;\n\n let WRow = ${x} / (uniforms.filterDims[1] * inChannels);\n let WCol = ${x} / inChannels % uniforms.filterDims[1];\n let xRow = outRow * uniforms.strides[0] + uniforms.dilations[0] * WRow - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * WCol - uniforms.pads[1];\n let xCh = ${x} % inChannels;\n var resData = ${Ae(i)}(0.0);\n // The bounds checking is always needed since we use it to pad zero for\n // the 'same' padding type.\n if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) {\n ${m}\n let xIndex = getIndexFromCoords4D(coord, uniforms.xShape);\n ${c(i)}\n }\n return resData;`,C=r?e&&o?`\n ${b}`:`\n if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${b}\n }\n return ${Ae(i)}(0.0);`:o&&t?`\n ${b}`:`\n if (row < uniforms.dimInner && col < uniforms.dimBOuter) {\n ${b}\n }\n return ${Ae(i)}(0.0);`,S=`${l(p)}`,k=Ae(u),_=r?Ae(i):Ae(p),$=r?Ae(p):Ae(i);return`\n ${dr(s,a,u===4,4)}\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} {\n ${r?C:S}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${$} {\n ${r?S:C}\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)\n {\n var value = valueIn;\n let outWidth = ${r?\"uniforms.outShape[2]\":\"uniforms.outShape[3]\"};\n ${d}\n ${Zr(n,s)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }`}var hx=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push(\"bias\"),this.variableComponents.push(4)),i&&(this.variableNames.push(\"preluActivationWeights\"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push(\"bias\"),i&&this.variableNames.push(\"preluActivationWeights\")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Ep(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return`\n ${Tue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])}\n ${e}\n `}};var gx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,\",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return`\n ${dr(this.activation,this.hasPreluActivationWeights,!1,4)}\n fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{\n let coords = vec4(batch, row, col, chan);\n if (coordsInBounds4D(coords, uniforms.xShape)) {\n return getX(batch, row, col, chan);\n } else {\n return 0.0;\n }\n }\n fn readFilt(row : i32, col : i32, xChannel : i32, outChannel : i32) -> f32{\n let coords = vec4(row, col, xChannel, outChannel);\n if(coordsInBounds4D(coords, uniforms.wShape)) {\n return getW(row, col, xChannel, outChannel);\n } else {\n return 0.0;\n }\n }\n fn writeResult(batch : i32, row : i32, col : i32, chan : i32, valueIn : f32) {\n let coords = ${this.isChannelsLast?\"vec4(batch, row, col, chan);\":\"vec4(batch, chan, row, col);\"}\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = valueIn;\n ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value);\n }\n }\n ${G(\"index\")} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let outChannel = ${this.isChannelsLast?\"coords[3];\":\"coords[1];\"}\n let outRow = ${this.isChannelsLast?\"coords[1];\":\"coords[2];\"}\n let outCol = ${this.isChannelsLast?\"coords[2];\":\"coords[3];\"}\n var acc : f32 = 0.0;\n for (var row = 0; row < uniforms.filterDims[0]; row = row + 1) {\n for (var col = 0; col < uniforms.filterDims[1]; col = col + 1) {\n let xRow = outRow * uniforms.strides[0] + uniforms.dilations[0] * row - uniforms.pads[0];\n let xCol = outCol * uniforms.strides[1] + uniforms.dilations[1] * col - uniforms.pads[1];\n for (var xChannel = 0; xChannel < ${this.isChannelsLast?\"uniforms.xShape[3];\":\"uniforms.xShape[1];\"} xChannel = xChannel + 1) {\n ${this.isChannelsLast?\"let v = readInp(batch, xRow, xCol, xChannel);\":\"let v = readInp(batch, xChannel, xRow, xCol);\"}\n let f = readFilt(row, col, xChannel, outChannel);\n acc = acc + v * f;\n }\n }\n }\n writeResult(batch, outRow, outCol, outChannel, acc);\n }\n `}};var xx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32,\n inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?\"coords[1]\":\"coords[2]\",n=this.isChannelsLast?\"coords[2]\":\"coords[1]\",s=this.isChannelsLast?\"getX(batch, xRow, xCol, ch)\":\"getX(batch, ch, xRow, xCol)\";return`\n ${G(\"index\")} {\n let coords = getCoordsFromIndex(index);\n if(index < uniforms.size) {\n let batch = coords[0];\n let row = ${o};\n let col = ${n};\n let offsetY = (row / uniforms.outWidth) * uniforms.strides[0] - uniforms.pads[0];\n let xRow = offsetY + uniforms.dilations[0] * (col / uniforms.itemsPerBlockRow);\n var value = 0.0;\n if(xRow < uniforms.xShape[${e}] && xRow >= 0) {\n let offsetX = (row % uniforms.outWidth) * uniforms.strides[1] -\n uniforms.pads[1];\n let xCol = offsetX + uniforms.dilations[1] * ((col %\n uniforms.itemsPerBlockRow) / uniforms.inChannels);\n let ch = col % uniforms.inChannels;\n if(xCol < uniforms.xShape[${t}] && xCol >= 0) {\n value = ${s};\n }\n }\n setOutputAtIndex(index, value);\n }\n }\n `}};function yx(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function _ue({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat===\"channelsLast\",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=[],d,f;if(l){let x=t.inHeight*t.inWidth*t.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=yx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=yx(n.shape,p);x!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=$p({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=pe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Eue({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,strideWidth:l,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,C=b===\"channelsLast\",S=p*u*c,k=h*f,_=C?[t.batchSize,k,S]:[t.batchSize,S,k],$=new xx(_,C),R=[{type:\"int32\",data:[d.top,d.left]},{type:\"int32\",data:[m,l]},{type:\"int32\",data:[x,g]},{type:\"int32\",data:[f]},{type:\"int32\",data:[c*p]},{type:\"int32\",data:[c]}],D=o.runWebGPUProgram($,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=yx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=yx(n.shape,C);U!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:U}}),P.push(n))}let B=$p({a:C?D:O,b:C?O:D,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=pe({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat===\"channelsLast\",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type===\"VALID\",m=A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_DEBUG\");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type===\"SAME\"||t.padInfo.type===\"VALID\")))return _ue({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber(\"WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL\"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool(\"WEBGPU_CONV_SEPARATE_IM2COL_SHADER\")||h<=f)return Eue({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:\"int32\",data:[t.filterHeight,t.filterWidth]},{type:\"int32\",data:[...x]},{type:\"int32\",data:[t.strideHeight,t.strideWidth]},{type:\"int32\",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new gx(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:\"int32\",data:[_]},{type:\"int32\",data:[$]},{type:\"int32\",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(t,_,$,R,p,i,u,D)}let C=[],S=[r,e];p&&(!c&&n.shape.length===1&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),S.push(n)),u&&(!c&&s.shape.length===1&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),S.push(s)),i===\"leakyrelu\"&&(b.push({type:\"float32\",data:[a]}),g.uniforms+=\" alpha : f32,\");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function $ue(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return bx({x:n,filter:s,convInfo:m,backend:o})}var _V={kernelName:tn,backendName:\"webgpu\",kernelFunc:$ue};var Cx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,\",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat===\"channelsLast\",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=`\n ${G()} {\n let batch = i32(globalId.z) / uniforms.outShape[1];\n let r = i32(globalId.z) % uniforms.outShape[1];\n let c = i32(globalId.y) * ${this.workPerThread};\n let d1 = i32(globalId.x) * 4;\n\n let dyCorner = vec2(r, c) - uniforms.pads;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd: array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = f32(dyCorner.x + wR) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) ||\n fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = f32(dyCorner.y + wC) / f32(uniforms.strides.y);\n let dyC2 = f32(dyCorner.y + 1 + wC) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n var bDyCVal = true;\n var bDyCVal2 = true;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0) {\n bDyCVal = false;\n }\n if (dyC2 < 0.0 || dyC2 >= f32(uniforms.outBackprop[2]) ||\n fract(dyC2) > 0.0) {\n bDyCVal2 = false;\n }\n\n let idyC = i32(dyC);\n let idyC2 = i32(dyC2);\n if (bDyCVal && bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n xValue = getDy(batch, idyR, idyC2, d2);\n dotProd[1] = dotProd[1] + vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n }\n } else if (bDyCVal) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[0] = dotProd[0] + tmpval;\n }\n } else if (bDyCVal2) {\n let d2Length = uniforms.outBackprop[3];\n for (var d2 = 0; d2 < d2Length; d2 = d2 + 4) {\n let wValue0 = getW(wRPerm, wCPerm, d1, d2);\n let wValue1 = getW(wRPerm, wCPerm, d1 + 1, d2);\n let wValue2 = getW(wRPerm, wCPerm, d1 + 2, d2);\n let wValue3 = getW(wRPerm, wCPerm, d1 + 3, d2);\n var xValue = getDy(batch, idyR, idyC2, d2);\n let tmpval = vec4(dot(xValue, wValue0),\n dot(xValue, wValue1),\n dot(xValue, wValue2),\n dot(xValue, wValue3));\n dotProd[1] = dotProd[1] + tmpval;\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], dotProd[i]);\n }\n }\n }\n `;return this.isVec4?`\n ${n}\n `:`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[${o}];\n\n let dyCorner = vec2(coords[${e}], coords[${t}]) - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims.x; wR = wR + 1) {\n let dyR = (f32(dyRCorner) + f32(wR)) / f32(uniforms.strides.x);\n let wRPerm = uniforms.filterDims.x - 1 - wR;\n if (dyR < 0.0 || dyR >= f32(uniforms.outBackprop[1]) || fract(dyR) > 0.0 ||\n wRPerm < 0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims.y; wC = wC + 1) {\n let dyC = (f32(dyCCorner) + f32(wC)) / f32(uniforms.strides.y);\n let wCPerm = uniforms.filterDims.y - 1 - wC;\n if (dyC < 0.0 || dyC >= f32(uniforms.outBackprop[2]) ||\n fract(dyC) > 0.0 || wCPerm < 0) {\n continue;\n }\n let idyC = i32(dyC);\n\n for (var d2 = 0; d2 < uniforms.outBackprop[3]; d2 = d2 + 1) {\n let xValue = ${this.isChannelsLast?\"getDy(batch, idyR, idyC, d2)\":\"getDy(batch, d2, idyR, idyC)\"};\n let wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd = dotProd + xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},wx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=\"pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let d2 = coords[3];\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b = b + 1) {\n for (var yR = 0; yR < uniforms.outHeight; yR = yR + 1) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC = yC + 1) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n if (${this.isChannelsLast}) {\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd = dotProd + xValue * dyValue;\n } else {\n let dyValue = getDy(b, d2, yR, yC);\n let xValue = getX(b, d1, xR, xC);\n dotProd = dotProd + xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Sx=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32,\n outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wF = coords.x;\n let wR = coords.y;\n let wC = coords.z;\n let d1 = coords.w;\n let d2 = coords.u;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yF = 0; yF < uniforms.outDepth; yF++) {\n let xF = wF + yF * uniforms.strides[0] - uniforms.pads[0];\n if (xF < 0 || xF >= uniforms.inDepth) {\n continue;\n }\n\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[1] - uniforms.pads[1];\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[2] - uniforms.pads[2];\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yF, yR, yC, d2);\n let xValue = getX(b, xF, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Ix=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3DDerInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let d1 = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyFCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let dyF = f32(dyFCorner + wF) / f32(uniforms.strides[0]);\n if (dyF < 0.0 || dyF >= f32(uniforms.outDepth) || fract(dyF) > 0.0) {\n continue;\n }\n let idyF = i32(dyF);\n\n let wFPerm = uniforms.filterDims[0] - 1 - wF;\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n let wRPerm = uniforms.filterDims[1] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let wCPerm = uniforms.filterDims[2] - 1 - wC;\n\n for (var d2 = 0; d2 < uniforms.outChannels; d2++) {\n let xValue = getDy(batch, idyF, idyR, idyC, d2);\n let wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Rue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new wx(m),f=[{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]},{type:\"int32\",data:[m.inHeight]},{type:\"int32\",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var EV={kernelName:Fi,backendName:\"webgpu\",kernelFunc:Rue};function Due(r=4){let e=s=>{switch(s){case 1:return\"return W[getIndexFromCoords4D(coord, uniforms.wShape)];\";case 4:return`\n let coord1 = vec4(coordX, coordY, col + 1, rowInner);\n let coord2 = vec4(coordX, coordY, col + 2, rowInner);\n let coord3 = vec4(coordX, coordY, col + 3, rowInner);\n let v0 = W[getIndexFromCoords4D(coord, uniforms.wShape)];\n let v1 = W[getIndexFromCoords4D(coord1, uniforms.wShape)];\n let v2 = W[getIndexFromCoords4D(coord2, uniforms.wShape)];\n let v3 = W[getIndexFromCoords4D(coord3, uniforms.wShape)];\n return vec4(v0, v1, v2, v3);\n `;default:throw new Error(`innerElementSize ${s} is not supported.`)}},o=`if (row < uniforms.dimAOuter && col < uniforms.dimInner) {\n ${`\n let outRow = row / uniforms.outShape[2];\n let outCol = row % uniforms.outShape[2];\n\n let WRow = col / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let WCol = col / uniforms.outBackprop[3] % uniforms.filterDims[1];\n let xR = f32(outRow - uniforms.pads[0] + WRow) / f32(uniforms.strides[0]);\n let xC = f32(outCol - uniforms.pads[1] + WCol) / f32(uniforms.strides[1]);\n if (xR < 0.0 || xR >= f32(uniforms.outBackprop[1]) || fract(xR) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n if (xC < 0.0 || xC >= f32(uniforms.outBackprop[2]) || fract(xC) > 0.0) {\n return ${Ae(r)}(0.0);\n }\n let coord = vec4(\n batch,\n i32(xR),\n i32(xC),\n col % uniforms.outBackprop[3]);\n return x[getIndexFromCoords4D(coord, uniforms.xShape)/${r}];`}\n }\n return ${Ae(r)}(0.0);`;return`\n fn mm_readA(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n ${o}\n }\n\n fn mm_readB(batch: i32, row : i32, col : i32) -> ${Ae(r)} {\n let coordX = uniforms.filterDims.x - 1 -\n row / (uniforms.filterDims[1] * uniforms.outBackprop[3]);\n let coordY = uniforms.filterDims.y - 1 -\n (row / uniforms.outBackprop[3]) % uniforms.filterDims[1];\n if (row < uniforms.dimInner && col < uniforms.dimBOuter &&\n coordX >= 0 && coordY >= 0) {\n let rowInner = row % uniforms.outBackprop[3];\n let coord = vec4(coordX, coordY, col, rowInner);\n ${e(r)}\n }\n return ${Ae(r)}(0.0);\n }\n\n fn mm_write(batch: i32, row : i32, col : i32, valueInput : ${Ae(r)}) {\n if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) {\n var value = valueInput;\n let outCoord = vec4(\n batch,\n row / uniforms.outShape[2],\n row % uniforms.outShape[2],\n col);\n result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value;\n }\n }`}var vx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,\",this.outputShape=e.inShape,y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize):Ep(this.elementsPerThread,this.workgroupSize);return`\n ${Due(this.isVec4?4:1)}\n ${e}\n `}};function Aue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=[{type:\"int32\",data:[m.filterHeight,m.filterWidth]},{type:\"int32\",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(A().getBool(\"WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE\")||m.dataFormat!==\"channelsLast\")f=new Cx(m);else{f=new vx(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:\"uint32\",data:[h]},{type:\"uint32\",data:[g]},{type:\"uint32\",data:[x]})}return t.runWebGPUProgram(f,[n,s],\"float32\",d)}var $V={kernelName:rn,backendName:\"webgpu\",kernelFunc:Aue};var kx=class{constructor(e){this.variableNames=[\"x\",\"W\"],this.uniforms=\"filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"conv3dnaive\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords.x;\n let d2 = coords.u;\n\n let xFRCCorner = vec3(coords.y, coords.z, coords.w) * uniforms.strides - uniforms.pads;\n let xFCorner = xFRCCorner.x;\n let xRCorner = xFRCCorner.y;\n let xCCorner = xFRCCorner.z;\n\n let inputDepthNearestVec4 = (uniforms.xShape.u / 4) * 4;\n let inputDepthVec4Remainder = uniforms.xShape.u % 4;\n\n var dotProd = 0.0;\n for (var wF = 0; wF < uniforms.filterDims[0]; wF++) {\n let xF = xFCorner + wF * uniforms.dilations[0];\n if (xF < 0 || xF >= uniforms.xShape.y) {\n continue;\n }\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let xR = xRCorner + wR * uniforms.dilations[1];\n if (xR < 0 || xR >= uniforms.xShape.z) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let xC = xCCorner + wC * uniforms.dilations[2];\n if (xC < 0 || xC >= uniforms.xShape.w) {\n continue;\n }\n\n for (var d1 = 0; d1 < inputDepthNearestVec4; d1 += 4) {\n let xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n let wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (inputDepthVec4Remainder == 1) {\n dotProd += getX(batch, xF, xR, xC, inputDepthNearestVec4) *\n getW(wF, wR, wC, inputDepthNearestVec4, d2);\n } else if (inputDepthVec4Remainder == 2) {\n let xValues = vec2(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1)\n );\n let wValues = vec2(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (inputDepthVec4Remainder == 3) {\n let xValues = vec3(\n getX(batch, xF, xR, xC, inputDepthNearestVec4),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 1),\n getX(batch, xF, xR, xC, inputDepthNearestVec4 + 2)\n );\n let wValues = vec3(\n getW(wF, wR, wC, inputDepthNearestVec4, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 1, d2),\n getW(wF, wR, wC, inputDepthNearestVec4 + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }`}};function Fue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=[u.padInfo.front,u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new kx(u),d=dt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,l)}var RV={kernelName:on,backendName:\"webgpu\",kernelFunc:Fue};function Pue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Sx(u),l=[{type:\"int32\",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.batchSize]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.inDepth]},{type:\"int32\",data:[u.inHeight]},{type:\"int32\",data:[u.inWidth]}];return t.runWebGPUProgram(c,[n,s],s.dtype,l)}var DV={kernelName:ja,backendName:\"webgpu\",kernelFunc:Pue};function Oue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Ix(u),l=[{type:\"int32\",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:\"int32\",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:\"int32\",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.outDepth]},{type:\"int32\",data:[u.outHeight]},{type:\"int32\",data:[u.outWidth]},{type:\"int32\",data:[u.outChannels]}];return t.runWebGPUProgram(c,[n,s],n.dtype,l)}var AV={kernelName:nn,backendName:\"webgpu\",kernelFunc:Oue};var Mue=ye({opType:Z.COS}),FV={kernelName:sn,backendName:\"webgpu\",kernelFunc:Mue};var Lue=ye({opType:Z.COSH}),PV={kernelName:an,backendName:\"webgpu\",kernelFunc:Lue};var Nx=class{constructor(e,t,o,n){this.variableNames=[\"Image\",\"Boxes\",\"BoxInd\"],this.uniforms=\"extrapolationValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n===\"bilinear\"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=[\"f32(uniforms.imageShape[1] - 1)\",\"f32(uniforms.imageShape[2] - 1)\"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,\"(y2-y1) * height_ratio\",`y1*${e} + f32(y)*(height_scale)`]:[\"0.0\",\"0.0\",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,\"(x2-x1) * width_ratio\",`x1*${t} + f32(x)*(width_scale)`]:[\"0.0\",\"0.0\",`0.5 * (x1+x2) * ${t}`];return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let height_ratio = f32(${o});\n let width_ratio = f32(${a});\n let b = coords[0];\n let y = coords[1];\n let x = coords[2];\n let d = coords[3];\n // get box vals\n let y1 = getBoxes(b, 0);\n let x1 = getBoxes(b, 1);\n let y2 = getBoxes(b, 2);\n let x2 = getBoxes(b, 3);\n // get image in batch index\n let bInd = i32(round(getBoxInd(b)));\n if(bInd < 0 || bInd >= uniforms.outShape[0]) {\n return;\n }\n let height_scale = ${n};\n let width_scale = ${i};\n let in_y = ${s};\n if( in_y < 0.0 || in_y > ${e} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let in_x = ${p};\n if( in_x < 0.0 || in_x > ${t} ) {\n setOutputAtIndex(index, uniforms.extrapolationValue);\n return;\n }\n let sourceFracIndexCR = vec2(in_x,in_y);\n if(${this.methodId} == 1) {\n // Compute the four integer indices.\n let sourceFloorCR = vec2(sourceFracIndexCR);\n let sourceCeilCR = vec2(ceil(sourceFracIndexCR));\n let topLeft = getImage(bInd, sourceFloorCR.y, sourceFloorCR.x, d);\n let bottomLeft = getImage(bInd, sourceCeilCR.y, sourceFloorCR.x, d);\n let topRight = getImage(bInd, sourceFloorCR.y, sourceCeilCR.x, d);\n let bottomRight = getImage(bInd, sourceCeilCR.y, sourceCeilCR.x, d);\n let fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n let top = topLeft + (topRight - topLeft) * fracCR.x;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n let newValue = top + (bottom - top) * fracCR.y;\n setOutputAtIndex(index, newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n let sourceNearestCR = vec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n let newValue = getImage(\n bInd, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutputAtIndex(index, newValue);\n }\n }\n }\n `}};var Bue=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Nx(n.shape[3],s.shape,i,p),l=[{type:\"float32\",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],\"float32\",l)},OV={kernelName:cn,backendName:\"webgpu\",kernelFunc:Bue};var Dp;(function(r){r.Prod=\"*\",r.Sum=\"+\"})(Dp||(Dp={}));var xm=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"index : f32,\",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Dp.Prod?\"1.0\":\"0.0\",o=this.exclusive?t:`getX(${MV(e,\"coords\",this.op)})`,n=this.outputShape[this.outputShape.length-1],s=\"\",a=\"\";return this.exclusive?(s=this.reverse?`end != ${n-1}`:\"end != 0\",a=this.reverse?\"end + 1\":\"end - 1\"):(s=this.reverse?`end + pow2 < ${n}`:\"end >= pow2\",a=this.reverse?\"end + pow2\":\"end - pow2\"),`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var coords = getCoordsFromIndex(index);\n\n let end = ${LV(e,\"coords\",this.op)};\n var val = ${o};\n let pow2 = i32(pow(2.0, uniforms.index));\n if (${s}) {\n let idx = ${a};\n ${LV(e,\"coords\",this.op)} = idx;\n val ${this.op}= getX(${MV(e,\"coords\",this.op)});\n }\n setOutputAtIndex(index, val);\n }\n }\n `}};function MV(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function LV(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function Tx(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=xr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new xm(r,p.shape,!1,s),f=l,h=[{type:\"float32\",data:[m]}];l=t.runWebGPUProgram(d,[l],l.dtype,h),t.disposeData(f.dataId)}if(n){let m=new xm(r,p.shape,n,s),d=l,f=[{type:\"float32\",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function zue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Prod,n,t,s,a,i)}var BV={kernelName:un,backendName:\"webgpu\",kernelFunc:zue};function Vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Sum,n,t,s,a,i)}var zV={kernelName:pn,backendName:\"webgpu\",kernelFunc:Vue};function Wue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,c=y.sizeFromShape(s.shape)>0,l=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=vt({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new Qc(m,c,i),g=[{type:\"int32\",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var VV={kernelName:ra,backendName:\"webgpu\",kernelFunc:Wue};var _x=class{constructor(e,t){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms=\"blockSize : i32,\",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let h = ${this.getHeightCoordString()};\n let w = ${this.getWidthCoordString()};\n let d = ${this.getDepthCoordString()};\n\n let in_h = h / uniforms.blockSize;\n let offset_h = h % uniforms.blockSize;\n let in_w = w / uniforms.blockSize;\n let offset_w = w % uniforms.blockSize;\n let offset_d = (offset_h * uniforms.blockSize + offset_w) *\n ${this.getOutputDepthSize()};\n let in_d = d + offset_d;\n\n let rlt = ${this.getInputSamplingString()};\n setOutputAtIndex(index, rlt);\n }\n }`}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\"?\"uniforms.outShape[3]\":\"uniforms.outShape[1]\"}getInputSamplingString(){return this.dataFormat===\"NHWC\"?\"getX(b, in_h, in_w, in_d)\":\"getX(b, in_d, in_h, in_w)\"}};function Uue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a===\"NHWC\"?n.shape[1]:n.shape[2],u=a===\"NHWC\"?n.shape[2]:n.shape[3],c=a===\"NHWC\"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a===\"NHWC\"?[i,l,m,d]:[i,d,l,m],h=[{type:\"int32\",data:[s]}],g=new _x(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var WV={kernelName:ln,backendName:\"webgpu\",kernelFunc:Uue};var Ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=\"pads : vec2, inDims : vec2,\",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push(\"bias\"),a&&this.variableNames.push(\"preluActivationWeights\"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return`\n ${dr(this.activation,this.hasPreluActivation,!1,4)}\n\n var mm_Asub : array, ${o}>;\n var mm_Bsub : array, ${this.filterHeight}>;\n fn readX(batch : i32, channel : i32, row : i32, col : i32) -> f32 {\n var value = 0.0;\n if (row >=0 && row < uniforms.inDims[0] && col >=0 && col < uniforms.inDims[1])\n {\n value = getX(batch, channel, row, col);\n }\n return value;\n }\n\n ${G()} {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.zw) - uniforms.pads;\n let channelMul = uniforms.wShape[3];\n let d1 = coords[1] / channelMul;\n let q = coords[1] % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n\n let localRow = i32(localId.y);\n let localCol = i32(localId.x);\n\n // Load one tile of X into local memory.\n for (var inputRow = localRow; inputRow < ${o}; inputRow = inputRow + ${this.workgroupSize[1]}) {\n for (var inputCol = localCol; inputCol < ${n}; inputCol = inputCol + ${this.workgroupSize[0]}) {\n let rowOffset = inputRow - localRow;\n let colOffset = inputCol - localCol;\n mm_Asub[inputRow][inputCol] = readX(batch, d1, inputRowStart + rowOffset, inputColStart + colOffset);\n }\n }\n\n // Load one tile of W into local memory.\n var wIndex = i32(localIndex);\n ${e, inDims : vec2, virtualWidth : i32,\",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),y.assert(e.dataFormat===\"channelsLast\",()=>\"TODO: NCHW is unimplemented\"),t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return`\n ${dr(this.activation,this.hasPreluActivation,!0,4)}\n fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 {\n var value = vec4(0.0);\n if (col >=0 && col < uniforms.inDims[1]) {\n value = getX(batch, row, col, channel);\n }\n return value;\n }\n\n ${G(\"index\")} {\n let width0 = uniforms.outShape[3] / ${this.outputComponent};\n let d1 = (index % width0) * ${this.outputComponent};\n var index1 = index / width0;\n let width1 = uniforms.virtualWidth / ${this.workPerThread};\n let c = (index1 % width1) * ${this.workPerThread};\n index1 = index1 / width1;\n let r = index1 % uniforms.outShape[1];\n let batch = index1 / uniforms.outShape[1];\n\n let xRCCorner = vec2(r, c) * vec2(${t}, ${o}) - uniforms.pads;\n\n let xRCorner = xRCCorner.x;\n let xCCorner = xRCCorner.y;\n var xVals : array, ${e}>;\n var dotProd : array, ${this.workPerThread}>;\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = vec4(0.0);\n }\n\n // Use constant instead of uniform can give better performance.\n for (var wR = 0; wR < ${this.convInfo.filterHeight}; wR = wR + 1) {\n let xR = xRCorner + wR;\n if (xR >=0 && xR < uniforms.inDims[0]) {\n for (var i = 0; i < ${e}; i++) {\n xVals[i] = readX(batch, xR, xCCorner + i, d1);\n }\n for (var wC = 0; wC < ${this.convInfo.filterWidth}; wC = wC + 1) {\n let wValue = getW(wR, wC, d1, 0);\n for (var i = 0; i < ${this.workPerThread}; i++) {\n dotProd[i] = fma(xVals[i * ${o} + wC], wValue, dotProd[i]);\n }\n }\n }\n }\n\n for (var i = 0; i < ${this.workPerThread}; i = i + 1) {\n let coords = vec4(batch, r, c + i, d1);\n if (coordsInBounds4D(coords, uniforms.outShape)) {\n var value = dotProd[i];\n ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n }\n `}};var el=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=[\"x\",\"W\"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32,\n filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat===\"channelsLast\",t&&this.variableNames.push(\"bias\"),n&&this.variableNames.push(\"preluActivationWeights\"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?\"getX(batch, xR, xC, d1);\":\"getX(batch, d1, xR, xC);\";return`\n ${dr(this.activation,this.hasPreluActivation,!1,4)}\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n let xRCCorner = vec2(coords.${this.isChannelsLast?\"yz\":\"zw\"}) * uniforms.strides - uniforms.pads;\n let d2 = coords[${this.isChannelsLast?3:1}];\n let channelMul = uniforms.wShape[3];\n let d1 = d2 / channelMul;\n let q = d2 % channelMul;\n\n let inputRowStart = xRCCorner.x;\n let inputColStart = xRCCorner.y;\n let inputRowEnd = inputRowStart + uniforms.filterHeight *\n uniforms.dilations[0];\n let inputColEnd = inputColStart + uniforms.filterWidth *\n uniforms.dilations[1];\n\n // Convolve x(?, ?, d1)|x(d1, ?, ?) with w(:, :, d1, q) to get\n // y(yR, yC, d2)|y(d2, yR, yC). ? = to be determined. : = across all\n // values in that axis. x(?, ?, d1) and y(yR, yC, d2) is for NHWC.\n // x(d1, ?, ?) and y(d2, yR, yC) is for NCHW.\n var value = 0.0;\n\n // Extract if checking out of for loop for performance.\n if (inputRowStart >= 0 && inputColStart >= 0 &&\n inputRowEnd < uniforms.inDims[0] &&\n inputColEnd < uniforms.inDims[1]) {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilations[0];\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[1];\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n } else {\n for (var wR = 0; wR < uniforms.filterHeight; wR = wR + 1) {\n let xR = inputRowStart + wR * uniforms.dilations[0];\n\n if (xR < 0 || xR >= uniforms.inDims[0]) {\n continue;\n }\n\n for (var wC = 0; wC < uniforms.filterWidth; wC = wC + 1) {\n let xC = inputColStart + wC * uniforms.dilations[1];\n\n if (xC < 0 || xC >= uniforms.inDims[1]) {\n continue;\n }\n\n let xVal = ${e};\n let wVal = getW(wR, wC, d1, q);\n value = value + xVal * wVal;\n }\n }\n }\n ${Zr(this.addBias,this.activation)}\n setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value);\n }\n }\n `}};function Gue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=w.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),f=[{type:\"int32\",data:[d.padInfo.top,d.padInfo.left]},{type:\"int32\",data:[d.inHeight,d.inWidth]}],h=d.dataFormat===\"channelsLast\",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new Ex(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?(g=new Jc(d),f.push({type:\"int32\",data:[g.virtualWidth]})):(g=new el(d),f.push({type:\"int32\",data:[d.filterHeight]},{type:\"int32\",data:[d.filterWidth]},{type:\"int32\",data:[d.strideHeight,d.strideWidth]},{type:\"int32\",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var UV={kernelName:mn,backendName:\"webgpu\",kernelFunc:Gue};var $x=class{constructor(e){this.variableNames=[\"x\",\"dy\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32,\n outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_filter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let wR = coords[0];\n let wC = coords[1];\n let d1 = coords[2];\n let dm = coords[3];\n let d2 = d1 * uniforms.channelMul + dm;\n\n var dotProd = 0.0;\n for (var b = 0; b < uniforms.batchSize; b++) {\n for (var yR = 0; yR < uniforms.outHeight; yR++) {\n let xR = wR + yR * uniforms.strides[0] - uniforms.pads[0];\n\n if (xR < 0 || xR >= uniforms.inHeight) {\n continue;\n }\n\n for (var yC = 0; yC < uniforms.outWidth; yC++) {\n let xC = wC + yC * uniforms.strides[1] - uniforms.pads[1];\n\n if (xC < 0 || xC >= uniforms.inWidth) {\n continue;\n }\n\n let dyValue = getDy(b, yR, yC, d2);\n let xValue = getX(b, xR, xC, d1);\n dotProd += xValue * dyValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Rx=class{constructor(e){this.variableNames=[\"dy\",\"W\"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"depthwise_conv2d_backprop_input\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d1 = coords[3];\n let dyCorner = coords.yz - uniforms.pads;\n let dyRCorner = dyCorner.x;\n let dyCCorner = dyCorner.y;\n\n var dotProd = 0.0;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n\n let idyR = i32(dyR);\n let wRPerm = uniforms.filterDims[0] - 1 - wR;\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n\n let idyC = i32(dyC);\n let wCPerm = uniforms.filterDims[1] - 1 - wC;\n\n for (var dm = 0; dm < uniforms.channelMul; dm++) {\n let d2 = d1 * uniforms.channelMul + dm;\n let xValue = getDy(batch, idyR, idyC, d2);\n let wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Hue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new $x(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.inHeight]},{type:\"int32\",data:[l.inWidth]},{type:\"int32\",data:[l.batchSize]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],\"float32\",d)}var GV={kernelName:Pi,backendName:\"webgpu\",kernelFunc:Hue};function Kue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Rx(l),d=[{type:\"int32\",data:[l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.filterHeight-1-l.padInfo.top,l.filterWidth-1-l.padInfo.left]},{type:\"int32\",data:[l.filterHeight,l.filterWidth]},{type:\"int32\",data:[l.outHeight]},{type:\"int32\",data:[l.outWidth]},{type:\"int32\",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var HV={kernelName:Oi,backendName:\"webgpu\",kernelFunc:Kue};var Dx=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"diag\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let value = select(0.0, getX(coords[0]), coords[0] == coords[1]);\n setOutputAtIndex(index, value);\n }\n }\n `}};function que(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var KV={kernelName:oa,backendName:\"webgpu\",kernelFunc:que};var Ax=class{constructor(e){this.variableNames=[\"x\",\"w\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"dilation2d\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let neg_infinity = -3.4e38;\n let coords = getOutputCoords();\n let batch = coords.x;\n let d1 = coords.w;\n let outTopLeftCorner = coords.yz * uniforms.strides - uniforms.pads;\n let hBeg = outTopLeftCorner.x;\n let wBeg = outTopLeftCorner.y;\n\n var curVal = neg_infinity;\n for (var h = 0; h < uniforms.filterDims[0]; h = h + 1) {\n let hIn = hBeg + h * uniforms.dilations[0];\n\n if (hIn >= 0 && hIn < uniforms.xShape[1]) {\n for (var w = 0; w < uniforms.filterDims[1]; w = w + 1) {\n let wIn = wBeg + w * uniforms.dilations[1];\n\n if (wIn >= 0 && wIn < uniforms.xShape[2]) {\n let val = getX(batch, hIn, wIn, d1) + getW(h, w, d1);\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n setOutputAtIndex(index, curVal);\n }\n }\n `}};function jue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,\"NHWC\",p),c=[u.padInfo.top,u.padInfo.left],l=[{type:\"int32\",data:[u.filterHeight,u.filterWidth]},{type:\"int32\",data:[...c]},{type:\"int32\",data:[u.strideHeight,u.strideWidth]},{type:\"int32\",data:[u.dilationHeight,u.dilationWidth]}],m=new Ax(u);return t.runWebGPUProgram(m,[n,s],n.dtype,l)}var qV={kernelName:dn,backendName:\"webgpu\",kernelFunc:jue};var Fx=class{constructor(e,t){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!==\"float32\"&&t!==\"int32\")throw new Error(`Dilation2DBackpropInput only supports float32 and int32\n types, does not support ${t} type.`);this.type=t,this.shaderKey=\"dilation2DBackpropInput\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var xRMax = 0;\n var xCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n xRMax = xR;\n xCMax = xC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.xShape[3] *\n (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b));\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}},Px=class{constructor(e,t,o){if(this.variableNames=[\"x\",\"w\",\"dy\"],this.uniforms=\"filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"dilation2DBackpropFilter\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.dySize) {\n let coords = getDyCoordsFromIndex(index);\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let dyCorner = vec2(r, c) * uniforms.strides - uniforms.pads;\n var curVal = -3.4e38; // neg_infinity\n var wRMax = 0;\n var wCMax = 0;\n\n // In the case of multiple argmax branches, we only back-propagate\n // along the last branch, i.e., the one with largest value of\n // 'wR * uniforms.filterDims[1] + wC', similarly to the max-pooling\n // backward routines.\n for (var wR = 0; wR < uniforms.filterDims[0]; wR++) {\n let xR = dyCorner.x + wR * uniforms.dilations[0];\n\n if (xR >= 0 && xR < uniforms.xShape[1]) {\n for (var wC = 0; wC < uniforms.filterDims[1]; wC++) {\n let xC = dyCorner.y + wC * uniforms.dilations[1];\n\n if (xC >= 0 && xC < uniforms.xShape[2]) {\n let val = getX(b, xR, xC, d) + getW(wR, wC, d);\n if (val > curVal) {\n curVal = val;\n wRMax = wR;\n wCMax = wC;\n }\n }\n }\n }\n }\n\n let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]);\n let value = getDy(b, r, c, d);\n ${Qr(\"&result[flatIndexIn]\",\"value\",this.type)}\n }\n }\n `}};function Xue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=s.dtype,m=new Px(c,s.shape,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:s.shape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var jV={kernelName:Li,backendName:\"webgpu\",kernelFunc:Xue};function Yue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,\"NHWC\",u),l=n.dtype,m=new Fx(c,l),d=[{type:\"int32\",data:[c.filterHeight,c.filterWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:c.inShape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var XV={kernelName:Mi,backendName:\"webgpu\",kernelFunc:Yue};var Ox=class{constructor(e,t,o){this.variableNames=[\"Image\"],this.uniforms=\"alpha: f32,\",this.workgroupSize=[64,1,1],this.pixelsOpType=wi.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type===\"float32\"?\"value\":\"value / 255.0\";return e=`\n if (uniforms.numChannels == 1) {\n rgba[0] = ${t};\n rgba[1] = ${t};\n rgba[2] = ${t};\n } else {\n rgba[d] = ${t};\n }`,`\n @group(0) @binding(0) var outImage : texture_storage_2d<${this.textureFormat}, write>;\n ${G(\"index\")} {\n if (index < uniforms.size) {\n var rgba = vec4(0.0, 0.0, 0.0, uniforms.alpha);\n for (var d = 0; d < uniforms.numChannels; d = d + 1) {\n let value = f32(inBuf[index * uniforms.numChannels + d]);\n ${e}\n }\n rgba.x = rgba.x * rgba.w;\n rgba.y = rgba.y * rgba.w;\n rgba.z = rgba.z * rgba.w;\n let coords = getCoordsFromIndex(index);\n textureStore(outImage, vec2(coords.yx), rgba);\n }\n }\n `}};function Que(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=t.device.features.has(\"bgra8unorm-storage\")?\"bgra8unorm\":\"rgba8unorm\",m=[i,p],d=new Ox(m,n.dtype,l);s.width=p,s.height=i;let f=\"webgpu\",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:\"premultiplied\"});let b=\"int32\",C=t.makeTensorInfo(m,b),S=t.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:\"uint32\",data:[x]},{type:\"float32\",data:[c]}];if(t.runWebGPUProgram(d,[n],b,k,C),g){let _=s.getContext(\"2d\");if(!_)throw new Error(\"Please make sure this canvas has only been used for 2d or webgpu context!\");_.drawImage(g,0,0)}return t.disposeData(C.dataId),n}var YV={kernelName:$u,backendName:\"webgpu\",kernelFunc:Que};var i0=et({opType:fe.MUL,cpuKernelImpl:Rz,supportsComplex:!0}),QV={kernelName:Xn,backendName:\"webgpu\",kernelFunc:i0};function u0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"sum\",t)}var ZV={kernelName:Ss,backendName:\"webgpu\",kernelFunc:u0};function Zue(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=u0({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var JV={kernelName:Bi,backendName:\"webgpu\",kernelFunc:Zue};var Jue=ye({opType:Z.ELU}),eW={kernelName:hn,backendName:\"webgpu\",kernelFunc:Jue};var epe=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Ii(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},tW={kernelName:Xa,backendName:\"webgpu\",kernelFunc:epe};var tpe=et({opType:fe.EQUAL,dtype:\"bool\",cpuKernelImpl:gz}),rW={kernelName:xn,backendName:\"webgpu\",kernelFunc:tpe};var rpe=ye({opType:Z.ERF}),oW={kernelName:gn,backendName:\"webgpu\",kernelFunc:rpe};var ope=ye({opType:Z.EXP,cpuKernelImpl:xz,dtype:\"float32\"}),nW={kernelName:yn,backendName:\"webgpu\",kernelFunc:ope};function Mx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),pe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sW={kernelName:na,backendName:\"webgpu\",kernelFunc:Mx};var npe=ye({opType:Z.EXPM1,cpuKernelImpl:yz}),aW={kernelName:bn,backendName:\"webgpu\",kernelFunc:npe};var ym=class{constructor(e,t){this.variableNames=[\"real\",\"imag\"],this.outputShape=[],this.uniforms=\"exponentMultiplier : f32, denominator: f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return`\n fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 {\n ${this.component===\"real\"?\"return real * expR - imag * expI;\":\"return real * expI + imag * expR;\"}\n }\n\n fn mulMatDFT(batch: i32, index: i32) -> f32 {\n let indexRatio = f32(index) / f32(uniforms.realShape[1]);\n let exponentMultiplierTimesIndexRatio =\n uniforms.exponentMultiplier * indexRatio;\n\n var result = 0.0;\n\n for (var i = 0; i < uniforms.realShape[1]; i = i + 1) {\n // x = (-2|2 * PI / N) * index * i;\n let x = exponentMultiplierTimesIndexRatio * f32(i);\n let expR = cos(x);\n let expI = sin(x);\n let real = getReal(batch, i);\n let imag = getImag(batch, i);\n\n result = result +\n unaryOpComplex(real, expR, imag, expI) / uniforms.denominator;\n }\n\n return result;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n setOutputAtIndex(index, mulMatDFT(coords[0], coords[1]));\n }\n }\n `}};function Lx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=pe({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ym(\"real\",u),l=new ym(\"imag\",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:\"float32\",data:[d]},{type:\"float32\",data:[f]}],g=t.runWebGPUProgram(c,m,\"float32\",h);i.push(g);let x=t.runWebGPUProgram(l,m,\"float32\",h);i.push(x);let b=xo({inputs:{real:g,imag:x},backend:t});i.push(b);let C=pe({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),C}function spe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!1,t)}var iW={kernelName:zi,backendName:\"webgpu\",kernelFunc:spe};var Bx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"flipLeftRight\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordX = uniforms.xShape[2] - coords[2] - 1;\n let outputValue = getX(coords[0], coords[1], coordX, coords[3]);\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var uW={kernelName:Cn,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ape=ye({opType:Z.FLOOR,cpuKernelImpl:bz}),pW={kernelName:wn,backendName:\"webgpu\",kernelFunc:ape};var ipe=et({opType:fe.FLOOR_DIV,cpuKernelImpl:Cz,dtype:\"int32\"}),cW={kernelName:Sn,backendName:\"webgpu\",kernelFunc:ipe};var zx=class{constructor(e,t,o=!1){this.pixelsOpType=wi.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?\"textureLoad(src, vec2(coords.yx));\":\"textureLoad(src, vec2(coords.yx), 0)\";return`\n @binding(1) @group(0) var src: ${this.importVideo?\"texture_external\":\"texture_2d\"};\n ${G(\"index\")} {\n let flatIndex = index * uniforms.numChannels;\n if (flatIndex < uniforms.size) {\n let coords = getCoordsFromIndex(flatIndex);\n let values = ${e};\n for (var i = 0; i < uniforms.numChannels; i = i + 1) {\n result[flatIndex + i] = i32(floor(255.0 * values[i]));\n }\n }\n }\n `}};var lW={kernelName:Du,backendName:\"webgpu\",kernelFunc:upe},tl,p0=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");function upe(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error(\"pixels passed to tf.browser.fromPixels() can not be null\");let a=typeof HTMLVideoElement!=\"undefined\"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!=\"undefined\"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!=\"undefined\"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!=\"undefined\"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!=\"undefined\"&&n instanceof ImageBitmap,[c,l]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[l,c,s],d=A().getBool(\"WEBGPU_IMPORT_EXTERNAL_TEXTURE\")&&a,f=a||i;if(u||p||f){let b;if(d)b=t.device.importExternalTexture({source:n});else{if(f){let L=A().getBool(\"CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU\");(tl==null||L!==p0)&&(p0=L,tl=document.createElement(\"canvas\").getContext(\"2d\",{willReadFrequently:p0})),tl.canvas.width=c,tl.canvas.height=l,tl.drawImage(n,0,0,c,l),n=tl.canvas}let P=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M=t.textureManager.acquireTexture(m[1],m[0],\"rgba8unorm\",P);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let C=y.sizeFromShape(m),S=y.computeStrides(m),k=new zx(m,s,d),_=[{type:\"uint32\",data:[C]},{type:\"uint32\",data:[s]},{type:\"uint32\",data:[...S]}],$=t.makeTensorInfo([l,c],\"int32\"),R=t.tensorMap.get($.dataId);R.resource=b;let D=t.runWebGPUProgram(k,[$],\"int32\",_);return t.disposeData($.dataId),D}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,C=0;for(let S=0;S(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0)));\n }\n }\n `}};var mW={kernelName:In,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let d=new Vx(o.shape,a.shape,i.shape,l,m),f=[{type:\"float32\",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function ppe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return bx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var dW={kernelName:Io,backendName:\"webgpu\",kernelFunc:ppe};function cpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=c;f==null&&(f=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=w.computeConv2DInfo(n.shape,s.shape,p,f,u,l,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let C=[{type:\"int32\",data:[h.padInfo.top,h.padInfo.left]},{type:\"int32\",data:[h.inHeight,h.inWidth]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new Jc(h,x,m,b),C.push({type:\"int32\",data:[S.virtualWidth]})):(S=new el(h,x,m,b),C.push({type:\"int32\",data:[h.filterHeight]},{type:\"int32\",data:[h.filterWidth]},{type:\"int32\",data:[h.strideHeight,h.strideWidth]},{type:\"int32\",data:[h.dilationHeight,h.dilationWidth]})),m===\"leakyrelu\"&&(C.push({type:\"float32\",data:[d]}),S.uniforms+=\" alpha : f32,\"),t.runWebGPUProgram(S,g,\"float32\",C)}var fW={kernelName:vo,backendName:\"webgpu\",kernelFunc:cpe};var Wx=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e=\"uniforms.strides[j]\":e=\"uniforms.strides\",`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var flattenIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexTemp = i32(round(getIndices(coords[0], j)));\n let strideNum = ${e};\n flattenIndex = flattenIndex + indexTemp * strideNum;\n }\n\n setOutputAtIndex(index, getA(flattenIndex, coords[1]));\n }\n }\n `}};function lpe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=w.prepareAndValidate(o,n),m=pe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype===\"string\"){let b=t.readSync(n.dataId),C=t.bufferSync(o),S=wz(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:\"int32\",data:[a]},{type:\"int32\",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var hW={kernelName:vn,backendName:\"webgpu\",kernelFunc:lpe};var Ux=class{constructor(e,t){this.variableNames=[\"A\",\"indices\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"gather\"}getUserCode(){let e=mpe(this.aShape);return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let resRC = getCoordsFromIndex(index);\n let indexZ = i32(getIndices(resRC.x, resRC.z));\n let inBounds = select(0.0, 1.0, indexZ >= 0 && indexZ < uniforms.aShape[2]);\n setOutputAtIndex(index, inBounds * getA(${e}));\n }\n }\n `}};function mpe(r){let e=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var gW={kernelName:aa,backendName:\"webgpu\",kernelFunc:c0};var dpe=et({opType:fe.GREATER,cpuKernelImpl:vz,dtype:\"bool\"}),xW={kernelName:kn,backendName:\"webgpu\",kernelFunc:dpe};var fpe=et({opType:fe.GREATER_EQUAL,dtype:\"bool\",cpuKernelImpl:Iz}),yW={kernelName:Nn,backendName:\"webgpu\",kernelFunc:fpe};function hpe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!0,t)}var bW={kernelName:Vi,backendName:\"webgpu\",kernelFunc:hpe};var gpe=ye({opType:Z.IS_FINITE,dtype:\"bool\"}),CW={kernelName:Tn,backendName:\"webgpu\",kernelFunc:gpe};var xpe=ye({opType:Z.IS_INF,dtype:\"bool\"}),wW={kernelName:_n,backendName:\"webgpu\",kernelFunc:xpe};var ype=ye({opType:Z.IS_NAN,dtype:\"bool\"}),SW={kernelName:En,backendName:\"webgpu\",kernelFunc:ype};function bpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:\"float32\",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,\"alpha : f32,\");return t.runWebGPUProgram(i,[n],\"float32\",a)}var IW={kernelName:$n,backendName:\"webgpu\",kernelFunc:bpe};var Cpe=et({opType:fe.LESS,dtype:\"bool\",cpuKernelImpl:Nz}),vW={kernelName:Rn,backendName:\"webgpu\",kernelFunc:Cpe};var wpe=et({opType:fe.LESS_EQUAL,dtype:\"bool\",cpuKernelImpl:kz}),kW={kernelName:Dn,backendName:\"webgpu\",kernelFunc:wpe};var Gx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms=\"start : f32, step : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"linSpace\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step);\n }\n }\n `}};function Spe(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new Gx(s),p=[{type:\"float32\",data:[o]},{type:\"float32\",data:[a]}];return e.runWebGPUProgram(i,[],\"float32\",p)}var NW={kernelName:An,backendName:\"webgpu\",kernelFunc:Spe};var Ipe=ye({opType:Z.LOG,cpuKernelImpl:Tz}),TW={kernelName:Fn,backendName:\"webgpu\",kernelFunc:Ipe};var vpe=ye({opType:Z.LOG1P}),_W={kernelName:Pn,backendName:\"webgpu\",kernelFunc:vpe};var kpe=et({opType:fe.LOGICAL_AND,dtype:\"bool\"}),EW={kernelName:On,backendName:\"webgpu\",kernelFunc:kpe};var Npe=ye({opType:Z.LOGICAL_NOT}),$W={kernelName:Mn,backendName:\"webgpu\",kernelFunc:Npe};var Tpe=et({opType:fe.LOGICAL_OR}),RW={kernelName:Ln,backendName:\"webgpu\",kernelFunc:Tpe};var DW=`\n var powValue = 0.0;\n let basis = uniforms.bias + uniforms.alpha * sum;\n if (uniforms.beta == 0.5) {\n powValue = inverseSqrt(basis);\n } else if (uniforms.beta == 1.0) {\n powValue = 1.0 / basis;\n } else {\n powValue = exp(log(basis) * (-uniforms.beta));\n }\n`,Hx=class{constructor(e){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n let d = coords[3];\n\n let x = getX(b, r, c, d);\n var sum = 0.0;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let idx = d + i;\n if (idx >= 0 && idx < uniforms.xShape[3]) {\n let z = getX(b, r, c, idx);\n sum = sum + z * z;\n }\n }\n ${DW}\n\n setOutputAtIndex(index, x * powValue);\n }\n }\n `}},Kx=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.uniforms=\"radius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey=\"lrn_shared\"}getUserCode(){return`\n var lrnSub: array;\n const elementsPerWorkgroup = ${this.elementsPerWorkgroup};\n const maxAllowRadius = ${this.maxAllowRadius};\n\n ${G()} {\n let localDepth = i32(localId.x);\n let workgroupDepth = i32(workgroupId.x) * elementsPerWorkgroup;\n let xDepth = workgroupDepth + localDepth - maxAllowRadius;\n let b = i32(globalId.z) / uniforms.xShape[1];\n let r = i32(globalId.z) - b * uniforms.xShape[1];\n let c = i32(globalId.y);\n let d = workgroupDepth + localDepth;\n\n var x = 0.0;\n if (xDepth >= 0 && xDepth < uniforms.xShape[3]) {\n x = getX(b, r, c, xDepth);\n }\n lrnSub[localDepth] = x;\n workgroupBarrier();\n\n if (localDepth < elementsPerWorkgroup && d < uniforms.outShape[3]) {\n var sum = 0.0;\n let index = localDepth + maxAllowRadius;\n for (var i = -uniforms.radius; i <= uniforms.radius; i = i + 1) {\n let z = lrnSub[index + i];\n sum = sum + z * z;\n }\n ${DW}\n\n setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue);\n }\n } `}};function _pe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Hx(n.shape):u=new Kx(n.shape,s);let c=[{type:\"int32\",data:[s]},{type:\"float32\",data:[a]},{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var AW={kernelName:Bn,backendName:\"webgpu\",kernelFunc:_pe};var qx=class{constructor(e){this.outputShape=[],this.variableNames=[\"inputImage\",\"outputImage\",\"dy\"],this.uniforms=\"depthRadius : i32, bias : f32, alpha : f32, beta : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"lrn_grad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let r = coords[1];\n let c = coords[2];\n\n let MIN_DEPTH_BEGIN = 0;\n let MAX_DEPTH_END = uniforms.outShape[3];\n var result = 0.0;\n for (var d = MIN_DEPTH_BEGIN; d < MAX_DEPTH_END; d++) {\n let depthBegin = max(MIN_DEPTH_BEGIN, d - uniforms.depthRadius);\n let depthEnd = min(MAX_DEPTH_END, d + uniforms.depthRadius + 1);\n\n var norm = 0.0;\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n } else {\n break;\n }\n }\n\n norm = uniforms.alpha * norm + uniforms.bias;\n\n for (var k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; k++) {\n if (k < depthBegin) {\n continue;\n } else if (k >= depthBegin && k < depthEnd) {\n var dyi = -2.0 * uniforms.alpha * uniforms.beta\n * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d) / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * uniforms.beta);\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n } else {\n break;\n }\n }\n }\n\n setOutputAtIndex(index, result);\n }\n }\n `}};function Epe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new qx(n.shape),m=[{type:\"int32\",data:[i]},{type:\"float32\",data:[p]},{type:\"float32\",data:[u]},{type:\"float32\",data:[c]}];return t.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var FW={kernelName:Ya,backendName:\"webgpu\",kernelFunc:Epe};var $pe=et({opType:fe.MAX,cpuKernelImpl:Ez}),PW={kernelName:Vn,backendName:\"webgpu\",kernelFunc:$pe};function Rpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,\"max\",t)}var OW={kernelName:Wn,backendName:\"webgpu\",kernelFunc:Rpe};function Dpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,\"max\"),d=[{type:\"int32\",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:\"int32\",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:\"int32\",data:[l.inDepth,l.inHeight,l.inWidth]},{type:\"int32\",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var MW={kernelName:ia,backendName:\"webgpu\",kernelFunc:Dpe};var jx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2,\n outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool2DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords[0];\n let d = coords[3];\n\n let dyRCCorner = vec2(coords.yz) - uniforms.pads;\n let dyRCorner = dyRCCorner.x;\n let dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] - 1;\n for (var wR = 0; wR < uniforms.filterDims[0]; wR += uniforms.dilations[0]) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[0]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[1]; wC += uniforms.dilations[1]) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[1]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyR, idyC, d);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wR * uniforms.filterDims[1] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n setOutputAtIndex(index, dotProd);\n }\n }\n `}},Xx=class{constructor(e){this.variableNames=[\"dy\",\"maxPos\"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3,\n outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"maxPool3DBackprop\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let batch = coords.x;\n let ch = coords.u;\n\n let dyCorner = vec3(coords.y, coords.z, coords.w) - uniforms.pads;\n let dyDCorner = dyCorner.x;\n let dyRCorner = dyCorner.y;\n let dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n var dotProd = 0.0;\n let lastIndex = uniforms.filterDims[0] * uniforms.filterDims[1] * uniforms.filterDims[2] - 1;\n\n for (var wD = 0; wD < uniforms.filterDims[0]; wD++) {\n let dyD = f32(dyDCorner + wD) / f32(uniforms.strides[0]);\n\n if (dyD < 0.0 || dyD >= f32(uniforms.outDepth) || fract(dyD) > 0.0) {\n continue;\n }\n let idyD = i32(dyD);\n\n for (var wR = 0; wR < uniforms.filterDims[1]; wR++) {\n let dyR = f32(dyRCorner + wR) / f32(uniforms.strides[1]);\n\n if (dyR < 0.0 || dyR >= f32(uniforms.outHeight) || fract(dyR) > 0.0) {\n continue;\n }\n let idyR = i32(dyR);\n\n for (var wC = 0; wC < uniforms.filterDims[2]; wC++) {\n let dyC = f32(dyCCorner + wC) / f32(uniforms.strides[2]);\n\n if (dyC < 0.0 || dyC >= f32(uniforms.outWidth) || fract(dyC) > 0.0) {\n continue;\n }\n let idyC = i32(dyC);\n\n let dyValue = getDy(batch, idyD, idyR, idyC, ch);\n let maxPosValue = lastIndex - i32(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n let curPosValue = wD * uniforms.filterDims[1] * uniforms.filterDims[2] + wR * uniforms.filterDims[2] + wC;\n let mask = select(0.0, 1.0, maxPosValue == curPosValue);\n dotProd += dyValue * mask;\n }\n }\n }\n\n setOutputAtIndex(index, dotProd);\n }\n }\n `}};function Ape(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Iu(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.inDepth,m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],\"int32\",f),g=new Xx(m);f=[{type:\"int32\",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outDepth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var LW={kernelName:Gi,backendName:\"webgpu\",kernelFunc:Ape};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;fm([s,a],\"maxPoolGrad\");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=new Ba(m,\"max\",!0),f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.padInfo.top,m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.inHeight,m.inWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],\"int32\",f),g=new jx(m);f=[{type:\"int32\",data:[m.strideHeight,m.strideWidth]},{type:\"int32\",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:\"int32\",data:[m.dilationHeight,m.dilationWidth]},{type:\"int32\",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:\"int32\",data:[m.outHeight]},{type:\"int32\",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var BW={kernelName:Ui,backendName:\"webgpu\",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(p.shape,n,s,u,a),l=[{type:\"int32\",data:[c.strideHeight,c.strideWidth]},{type:\"int32\",data:[c.padInfo.top,c.padInfo.left]},{type:\"int32\",data:[c.dilationHeight,c.dilationWidth]},{type:\"int32\",data:[c.inHeight,c.inWidth]},{type:\"int32\",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]}],m=new Ba(c,\"max\",!1),d=t.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,\"max\",!0,!0,i);let f=t.runWebGPUProgram(m,[p],\"int32\",l);return[d,f]}var zW={kernelName:ua,backendName:\"webgpu\",kernelFunc:Ppe};function Ope(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"min\",t)}var VW={kernelName:Gn,backendName:\"webgpu\",kernelFunc:Ope};var Mpe=et({opType:fe.MIN,cpuKernelImpl:$z}),WW={kernelName:Hn,backendName:\"webgpu\",kernelFunc:Mpe};var Yx=class{constructor(e,t,o){this.uniforms=\"\",this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o===\"reflect\"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(\",\"),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:\"\"}`).join(\",\"),n=e===1?\"start\":\"start[i]\",s=e===1?\"end\":\"end[i]\",a=e===1?\"outC\":\"outC[i]\",i=ft(e),p=e>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,e):\"coords\";return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let start = ${i}(${t});\n let end = ${i}(${o});\n var outC = getCoordsFromIndex(index);\n for (var i = 0; i < ${e}; i = i + 1) {\n if (${a} < ${n}) {\n ${a} = ${n} * 2 - ${a} - ${this.offset};\n } else if(${a} >= ${s}) {\n ${a} = (${s} - 1) * 2 - ${a} + ${this.offset};\n }\n }\n let coords = outC - start;\n setOutputAtIndex(index, getX(${p}));\n }\n }\n `}};var UW={kernelName:Kn,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:\"int32\",data:[c[0],c[1]]})),p=new Yx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Lpe=et({opType:fe.MOD}),GW={kernelName:qn,backendName:\"webgpu\",kernelFunc:Lpe};var Qx=class{constructor(e,t){this.variableNames=[\"probs\"],this.outputShape=[],this.uniforms=\"seed : f32, numOutcomes: i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"multinomial\"}getUserCode(){return`\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n fn random (seed : f32, resultUV : vec2) -> f32 {\n let HASHSCALE1 = 443.8975;\n let p = resultUV * seed;\n var p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 = p3 + dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let batch = coords[0];\n\n let resUV = vec2(f32(coords[1]) / f32(uniforms.outShape[1]),\n f32(coords[0]) / f32(uniforms.outShape[0]));\n let r = random(uniforms.seed, resUV);\n var cdf = 0.0;\n for (var i = 0; i < uniforms.numOutcomes - 1; i = i + 1) {\n cdf = cdf + getProbs(batch, i);\n\n if (r < cdf) {\n setOutputAtIndexI32(index, i);\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutputAtIndexI32(index, uniforms.numOutcomes - 1);\n }\n }\n `}};var Zx=class{constructor(e){this.variableNames=[\"logits\"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey=\"softmax\"}getUserCode(){return`\n var buf : array;\n var rowMaxShared : f32;\n var rowSumShared : f32;\n const blockSize = ${this.workgroupSize[0]};\n ${G(\"index\")} {\n let row = index / blockSize;\n let tid = i32(localId.x);\n let cols = uniforms.outShape[1];\n\n var threadMax = -3.402823e+38f;\n for (var col = tid; col < cols; col += blockSize) {\n let value = getLogits(row, col);\n threadMax = max(threadMax, value);\n }\n if (tid < cols) {\n buf[tid] = threadMax;\n }\n workgroupBarrier();\n\n var reduceSize = min(cols, blockSize);\n for (var currSize = reduceSize >> 1; currSize > 0; currSize = reduceSize >> 1) {\n reduceSize = currSize + (reduceSize & 1);\n if (tid < currSize) {\n buf[tid] = max(buf[tid], buf[tid + reduceSize]);\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowMaxShared = buf[0];\n }\n workgroupBarrier();\n\n var threadSum = 0.0;\n for (var col = tid; col < cols; col += blockSize) {\n let subExp = exp(getLogits(row, col) - rowMaxShared);\n threadSum += subExp;\n }\n buf[tid] = threadSum;\n workgroupBarrier();\n\n for (var currSize = blockSize >> 1; currSize > 0; currSize = currSize >> 1) {\n if (tid < currSize) {\n buf[tid] = buf[tid] + buf[tid + currSize];\n }\n workgroupBarrier();\n }\n\n if (tid == 0) {\n rowSumShared = buf[0];\n }\n workgroupBarrier();\n\n for (var col = tid; col < cols; col += blockSize) {\n let value = exp(getLogits(row, col) - rowMaxShared) / rowSumShared;\n setOutputAtCoords(row, col, value);\n }\n }\n `}};function l0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=pe({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var HW={kernelName:Is,backendName:\"webgpu\",kernelFunc:l0};function Bpe(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:l0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qx(u,s),m=[{type:\"float32\",data:[a]},{type:\"int32\",data:[c]}],d=t.runWebGPUProgram(l,[p],\"int32\",m);return i||t.disposeData(p.dataId),d}var KW={kernelName:jn,backendName:\"webgpu\",kernelFunc:Bpe};function zpe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=Dz(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var qW={kernelName:pa,backendName:\"webgpu\",kernelFunc:zpe};function Vpe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],\"int32\",new Int32Array(l))}var jW={kernelName:Qn,backendName:\"webgpu\",kernelFunc:Vpe};function Wpe(r){console.warn(\"tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead\");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Vt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],\"int32\",new Int32Array(g)),t.makeTensorInfo([x.length],\"float32\",new Float32Array(x))]}var XW={kernelName:Zn,backendName:\"webgpu\",kernelFunc:Wpe};var Jx=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"onValue : f32, offValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"onehot\"}getUserCode(){return`\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, mix(uniforms.offValue, uniforms.onValue,\n f32(i32(round(getX(coords.x))) == coords.y)));\n }\n }\n `}};function Upe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Jx(u,a),l=pe({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:\"float32\",data:[i]},{type:\"float32\",data:[p]}],d=t.runWebGPUProgram(c,[l],s,m);t.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YW={kernelName:Jn,backendName:\"webgpu\",kernelFunc:Upe};function bm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"complex64\"){let n=vi({inputs:{input:o},backend:t}),s=bm({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype===\"string\"?\"\":0},backend:t})}var QW={kernelName:Sa,backendName:\"webgpu\",kernelFunc:bm};function ZW(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype===\"string\")throw new Error(\"onesLike is not supported under string dtype\");if(o.dtype===\"complex64\"){let n=vi({inputs:{input:o},backend:t}),s=ZW({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JW={kernelName:ca,backendName:\"webgpu\",kernelFunc:ZW};function Gpe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Mx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,\"All tensors passed to stack must have matching shapes\"),y.assert(a===c.dtype,()=>\"All tensors passed to stack must have matching dtypes\")});let i=[],p=e.map(c=>{let l=Mx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=a0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eU={kernelName:la,backendName:\"webgpu\",kernelFunc:Gpe};function m0(r,e=!1){let t=r.length,o=ft(t),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(\",\"),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:\"\"}`).join(\",\"),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?\"any(paddedCoords < start)\":\"paddedCoords < start\",u=t>1?\"any(paddedCoords >= end)\":\"paddedCoords >= end\",c=t>1?[\"coords[0]\",\"coords[1]\",\"coords[2]\",\"coords[3]\"].slice(0,t):\"coords\";return`\n let start = ${a};\n let end = ${i};\n if (${p} || ${u}) {\n setOutputAtIndex(index, ${e?0:\"uniforms.constantValue\"});\n } else {\n let coords = paddedCoords - start;\n setOutputAtIndex(index, getX(${c}));\n }\n `}var ey=class{constructor(e,t){this.variableNames=[\"x\"],this.uniforms=\"constantValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey=\"pad\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let paddedCoords = getCoordsFromIndex(index);\n ${m0(this.xShape)}\n }\n }\n `}};var Hpe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return At({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return vt({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:\"float32\",data:[a]}];s.map(u=>i.push({type:\"int32\",data:[u[0],u[1]]}));let p=new ey(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tU={kernelName:es,backendName:\"webgpu\",kernelFunc:Hpe};var Kpe=et({opType:fe.POW}),rU={kernelName:ts,backendName:\"webgpu\",kernelFunc:Kpe};function qpe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Ii(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],\"float32\")}var oU={kernelName:rs,backendName:\"webgpu\",kernelFunc:qpe};function jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,\"prod\",t)}var nU={kernelName:os,backendName:\"webgpu\",kernelFunc:jpe};var Xpe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Pz(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sU={kernelName:ma,backendName:\"webgpu\",kernelFunc:Xpe};var Ype=et({opType:fe.DIV}),aU={kernelName:fn,backendName:\"webgpu\",kernelFunc:Ype};var Qpe=ye({opType:Z.RECIPROCAL}),iU={kernelName:ns,backendName:\"webgpu\",kernelFunc:Qpe};var Zpe=ye({opType:Z.RELU}),uU={kernelName:ss,backendName:\"webgpu\",kernelFunc:Zpe};var Jpe=ye({opType:Z.RELU6}),pU={kernelName:us,backendName:\"webgpu\",kernelFunc:Jpe};var ty=class{constructor(e,t,o){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, halfPixelCenters : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"resizeBilinear\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC =\n (vec2(rc) + vec2(uniforms.halfPixelCenters)) *\n effectiveInputOverOutputRatioRC - vec2(uniforms.halfPixelCenters);\n\n // Compute the four integer indices.\n let sourceFloorRC = vec2(sourceFracIndexRC);\n let sourceCeilRC = vec2(\n min(vec2(uniforms.xShape.yz) - vec2(1.0), ceil(sourceFracIndexRC)));\n\n let topLeft = getX(b, sourceFloorRC.x, sourceFloorRC.y, d);\n let bottomLeft = getX(b, sourceCeilRC.x, sourceFloorRC.y, d);\n let topRight = getX(b, sourceFloorRC.x, sourceCeilRC.y, d);\n let bottomRight = getX(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n let fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n let top = topLeft + (topRight - topLeft) * fracRC.y;\n let bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n let newValue = top + (bottom - top) * fracRC.x;\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function ece(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[i?.5:0]}],f=new ty(n.shape,p,u);return t.runWebGPUProgram(f,[n],\"float32\",d)}var cU={kernelName:is,backendName:\"webgpu\",kernelFunc:ece};var ry=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32,\n invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(startRLerp - f32(uniforms.winHeight / 2));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(startCLerp - f32(uniforms.winWidth / 2));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let dxR = f32(dyR) * uniforms.heightScale;\n let topDxRIndex = i32(floor(dxR));\n let bottomDxRIndex = i32(min(ceil(dxR), f32(uniforms.outShape[1] - 1)));\n let dxRLerp = dxR - f32(topDxRIndex);\n let inverseDxRLerp = 1.0 - dxRLerp;\n\n let dxC = f32(dyC) * uniforms.widthScale;\n let leftDxCIndex = i32(floor(dxC));\n let rightDxCIndex = i32(min(ceil(dxC), f32(uniforms.outShape[2] - 1)));\n let dxCLerp = dxC - f32(leftDxCIndex);\n let inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutputAtIndex(index, accumulator);\n }\n }\n `}};function tce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ry(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[d]},{type:\"float32\",data:[f]},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var lU={kernelName:Ja,backendName:\"webgpu\",kernelFunc:tce};var oy=class{constructor(e,t,o,n){this.variableNames=[\"x\"],this.uniforms=\"adjustHeightWidth : vec2, roundBase : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e=\"max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))\":e=\"vec2(rc) * effectiveInputOverOutputRatioRC\",`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let b = coords[0];\n let d = coords[3];\n let rc = coords.yz;\n\n let effectiveInSize = vec2(\n f32(uniforms.xShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.xShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveOutSize = vec2(\n f32(uniforms.outShape.y) - uniforms.adjustHeightWidth[0],\n f32(uniforms.outShape.z) - uniforms.adjustHeightWidth[1]);\n\n let effectiveInputOverOutputRatioRC =\n effectiveInSize / effectiveOutSize;\n\n // Fractional source index\n let sourceFracIndexRC = ${e};\n\n // Compute the coordinators of nearest neighbor point.\n let inputShapeRC = vec2(f32(uniforms.xShape.y), f32(uniforms.xShape.z));\n let sourceNearestRC = vec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + uniforms.roundBase)));\n let newValue = getX(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutputAtIndex(index, newValue);\n }\n }\n `}};function rce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:\"float32\",data:[c,l]},{type:\"float32\",data:[s?.5:0]}],f=new oy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var mU={kernelName:as,backendName:\"webgpu\",kernelFunc:rce};var ny=class{constructor(e,t){this.variableNames=[\"dy\"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32,\n winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getOutputCoords();\n let b = coords[0];\n let d = coords[3];\n let r = coords[1];\n let c = coords[2];\n\n var accumulator = 0.0;\n\n // Compute bounds for where in dy we will look\n let startRLerp = floor(f32(r) * uniforms.invHeightScale);\n let startDyR = i32(floor(startRLerp - f32(uniforms.winHeight / 2)));\n\n let startCLerp = floor(f32(c) * uniforms.invWidthScale);\n let startDyC = i32(floor(startCLerp - f32(uniforms.winWidth / 2)));\n\n // Loop over dy\n for (var dyROffset = 0; dyROffset < uniforms.winHeight; dyROffset++) {\n let dyR = startDyR + dyROffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= uniforms.dyShape[1]) {\n continue;\n }\n\n for (var dyCOffset = 0; dyCOffset < uniforms.winWidth; dyCOffset++) {\n let dyC = startDyC + dyCOffset;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= uniforms.dyShape[2]) {\n continue;\n }\n\n let sourceFracRow = f32(uniforms.effectiveXSize[0]) *\n (f32(dyR) / f32(uniforms.effectiveYSize[0]));\n\n let sourceFracCol = f32(uniforms.effectiveXSize[1]) *\n (f32(dyC) / f32(uniforms.effectiveYSize[1]));\n\n let sourceNearestRow =\n i32(min(f32(uniforms.outShape[1] - 1),\n ${this.alignCorners?\"floor(sourceFracRow + 0.5)\":\"floor(sourceFracRow)\"}));\n\n let sourceNearestCol =\n i32(min(f32(uniforms.outShape[2] - 1),\n ${this.alignCorners?\"floor(sourceFracCol + 0.5)\":\"floor(sourceFracCol)\"}));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutputAtIndex(index, accumulator);\n }\n }\n `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ny(n.shape,a),S=[{type:\"int32\",data:l},{type:\"int32\",data:m},{type:\"float32\",data:[h]},{type:\"float32\",data:[g]},{type:\"int32\",data:[x]},{type:\"int32\",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var dU={kernelName:Za,backendName:\"webgpu\",kernelFunc:oce};var sy=class{constructor(e){this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\" axis : vec4,\",this.shaderKey=\"reverse\"}getUserCode(){return`\n \n // Using uniform variables as judging conditions, so the function has\n // coherent execution within all threads.\n fn getReverseCoords(coords : vec4) -> vec4 {\n var reverseCoords = coords;\n if (uniforms.axis[0] == 1) {\n reverseCoords[0] = uniforms.xShape[0] - coords[0] - 1;\n }\n if (uniforms.axis[1] == 1) {\n reverseCoords[1] = uniforms.xShape[1] - coords[1] - 1;\n }\n if (uniforms.axis[2] == 1) {\n reverseCoords[2] = uniforms.xShape[2] - coords[2] - 1;\n }\n if (uniforms.axis[3] == 1) {\n reverseCoords[3] = uniforms.xShape[3] - coords[3] - 1;\n }\n\n return reverseCoords;\n }\n \n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let reverseCoords = getReverseCoords(coords);\n setOutputAtIndex(index, getX(reverseCoords[0],\n reverseCoords[1], reverseCoords[2], reverseCoords[3]));\n }\n }\n `}};function nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return At({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),c=[0,0,0,0];u.forEach(g=>{let x=g+4-a;c[x]=1});let l=[{type:\"int32\",data:c}],m=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new sy(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var fU={kernelName:ps,backendName:\"webgpu\",kernelFunc:nce};var ay=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"x\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32,\n cosRadians : f32,`,this.shaderKey=\"rotate\",this.outputShape=e,typeof t==\"number\"?(this.uniforms+=\" fillValue : f32,\",this.fillSnippet=\"var outputValue = uniforms.fillValue;\",this.shaderKey+=\"_float\"):(this.uniforms+=\" fillValue : vec3,\",this.fillSnippet=\"var outputValue = uniforms.fillValue[coords[3]];\",this.shaderKey+=\"_vec3\")}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let coordXFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.cosRadians - (f32(coords[1]) - uniforms.centerY) *\n uniforms.sinRadians;\n let coordYFloat = (f32(coords[2]) - uniforms.centerX) *\n uniforms.sinRadians + (f32(coords[1]) - uniforms.centerY) *\n uniforms.cosRadians;\n let coordX = i32(round(coordXFloat + uniforms.centerX));\n let coordY = i32(round(coordYFloat + uniforms.centerY));\n ${this.fillSnippet}\n if(coordX >= 0 && coordX < uniforms.xShape[2] && coordY >= 0 &&\n coordY < uniforms.xShape[1]) {\n outputValue = getX(coords[0], coordY, coordX, coords[3]);\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};var hU={kernelName:Ds,backendName:\"webgpu\",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new ay(o.shape,s),[u,c]=w.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:\"float32\",data:[u]},{type:\"float32\",data:[c]},{type:\"float32\",data:[Math.sin(n)]},{type:\"float32\",data:[Math.cos(n)]}];return typeof s==\"number\"?l.push({type:\"float32\",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:\"float32\",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var sce=ye({opType:Z.ROUND}),gU={kernelName:cs,backendName:\"webgpu\",kernelFunc:sce};var ace=ye({opType:Z.RSQRT,cpuKernelImpl:Oz}),xU={kernelName:ls,backendName:\"webgpu\",kernelFunc:ace};var za=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=[\"updates\",\"indices\"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e=\"\";this.indicesRank===1?e=\"coords[0]\":this.indicesRank===2&&(e=\"coords[0], j\");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?\"uniforms.strides[j]\":\"uniforms.strides\",n=\"\",s=\"\";this.dispatchLayout.x.length===1?(n=\"flattenedIndex\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 {\n return index;\n }\n `):this.dispatchLayout.x.length===2&&(n=\"vec2(flattenedIndex, coords[1])\",s=`\n fn getUpdatesCoordsFromFlatIndex(index : i32) -> vec2 {\n // N.B. |updates| could be a scalar tensor, conceptually representing a\n // 2D tensor with all values equal to that. By design, its size must be\n // the same as |outShape[1]| in one dimension, and |indicesShape[0]|\n // gives the other.\n let sliceSize = uniforms.outShape[1];\n let d0 = index / sliceSize;\n let d1 = index - d0 * sliceSize;\n return vec2(d0, d1);\n }\n `);let i=`getUpdates(${Array.from({length:this.updatesRank},(u,c)=>`coords[${c}]`).join(\", \")})`;return`\n ${s}\n ${G(\"index\")} {\n if (index < uniforms.updatesSize) {\n let coords = getUpdatesCoordsFromFlatIndex(index);\n var flattenedIndex = 0;\n for (var j = 0; j < uniforms.sliceDim; j = j + 1) {\n let indexInside = i32(round(${t}));\n flattenedIndex = flattenedIndex + indexInside * ${o};\n }\n let updateValue =\n ${Su(this.type)}(${i});\n let flatIndex = getOutputIndexFromCoords(${n});\n\n ${this.sumDupeIndices?Qr(\"&result[flatIndex]\",\"updateValue\",this.type):\"atomicStore(&result[flatIndex], bitcast(updateValue));\"}\n }\n }`}};function ice(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({backend:t,attrs:{shape:m,value:0,dtype:h}}),x=y.sizeFromShape(f.shape),b=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[x]}],C=new za(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=t.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var yU={kernelName:ms,backendName:\"webgpu\",kernelFunc:ice};var iy=class{constructor(e,t){this.outputShape=[],this.variableNames=[\"sortedSequence\",\"values\"],this.uniforms=\"numInputs : i32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return`\n fn findBound(batch: i32, value: f32) -> i32 {\n var left = i32(0);\n var right = uniforms.numInputs;\n while (left < right) {\n var mid = (left + right) / 2;\n if (getSortedSequence(batch, mid) ${this.side===\"left\"?\"<\":\"<=\"} value) {\n left = mid + 1;\n } else {\n right = mid;\n }\n }\n return right;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let value = getValuesByOutputIndex(index);\n setOutputAtIndexI32(index, findBound(coords[0], value));\n }\n }\n `}};function uce(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new iy([s.shape[0],s.shape[1]],a),p=[{type:\"int32\",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],\"int32\",p)}var bU={kernelName:fs,backendName:\"webgpu\",kernelFunc:uce};var uy=class{constructor(e,t,o){this.variableNames=[\"c\",\"a\",\"b\"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=o,this.shaderKey=\"select\"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t=\"resRC\",e=\"resRC\";else{let n=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],s=[],a=[];for(let i=0;i= 1.0) {\n setOutputAtIndex(index, getA(${t}));\n } else {\n setOutputAtIndex(index, getB(${t}));\n }\n }\n }\n `}};function pce(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new uy(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var CU={kernelName:fa,backendName:\"webgpu\",kernelFunc:pce};var cce=ye({opType:Z.SELU}),wU={kernelName:hs,backendName:\"webgpu\",kernelFunc:cce};var lce=ye({opType:Z.SIGMOID}),SU={kernelName:bs,backendName:\"webgpu\",kernelFunc:lce};var mce=ye({opType:Z.SIGN}),IU={kernelName:ys,backendName:\"webgpu\",kernelFunc:mce};var dce=ye({opType:Z.SIN}),vU={kernelName:gs,backendName:\"webgpu\",kernelFunc:dce};var fce=ye({opType:Z.SINH}),kU={kernelName:xs,backendName:\"webgpu\",kernelFunc:fce};var hce=ye({opType:Z.SOFTPLUS}),NU={kernelName:Cs,backendName:\"webgpu\",kernelFunc:hce};var py=class{constructor(e,t,o,n,s,a){this.variableNames=[\"x\"],this.outputShape=[],this.uniforms=\"\",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let p=0;p{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=e0(this.newDim);return`\n ${cm(this.paddedXShape,\"PaddedX\")}\n ${G(\"index\")} {\n if(index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape);\n let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex);\n ${m0(this.xShape,!0)}\n }\n }\n `}};var gce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>\"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet\");let i=s.reduce((b,C)=>b*C),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[C]+b[1]),c=w.getReshaped(u,s,i,!1),l=w.getPermuted(c.length,s.length,!1),m=w.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new py(n.shape,u,p,c,l,d.length),h=[{type:\"int32\",data:c},{type:\"int32\",data:d}];p.map(b=>h.push({type:\"int32\",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},TU={kernelName:ga,backendName:\"webgpu\",kernelFunc:gce};var cy=class{constructor(e,t,o){this.variableNames=[\"input\",\"indices\",\"segmentIds\"],this.outputShape=[],this.uniforms=\"segmentSize : i32, sparseSize : i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey=\"sparseSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.sparseSize) {\n let indexInSegmentIds = index / uniforms.segmentSize;\n let indexInSegment = index % uniforms.segmentSize;\n let indexInInput = indices[indexInSegmentIds];\n let segmentId = segmentIds[indexInSegmentIds];\n\n let value = input[indexInInput * uniforms.segmentSize + indexInSegment];\n let outIndex = segmentId * uniforms.segmentSize + indexInSegment;\n ${Qr(\"&result[outIndex]\",\"value\",this.type)}\n }\n }\n `}},ly=class{constructor(e,t){this.variableNames=[\"segmentIds\"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey=\"sparseSegmentIdCountProgram\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.segmentIdsShape) {\n let segmentId = segmentIds[index];\n ${Qr(\"&result[segmentId]\",\"1\",\"int32\")}\n }\n }\n `}},my=class{constructor(e,t){this.variableNames=[\"segmentSum\",\"sameSegmentIdCount\"],this.outputShape=[],this.uniforms=\"segmentSize : i32\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey=\"sparseSegmentMean\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let segmentId = index / uniforms.segmentSize;\n let count = sameSegmentIdCount[segmentId];\n if (count != 0) {\n ${this.type===\"float32\"?\"setOutputAtIndex(index, segmentSum[index] / f32(count));\":\"setOutputAtIndexI32(index, segmentSum[index] / count);\"}\n }\n }\n }\n `}};function dy(r,e,t,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(e.shape),u=n.readSync(t.dataId),l=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new cy(d,f,i);let g=[{type:\"int32\",data:[a]},{type:\"int32\",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:\"int32\"}});m=new ly(l,t.shape);let C=n.runWebGPUProgram(m,[t],\"int32\",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new my(d,i),g=[{type:\"int32\",data:[a]}];let k=n.runWebGPUProgram(m,[x,C],i,g,S);return n.disposeData(x.dataId),n.disposeData(C.dataId),k}function xce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!1,t)}var _U={kernelName:ya,backendName:\"webgpu\",kernelFunc:xce};function yce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!0,t)}var EU={kernelName:ba,backendName:\"webgpu\",kernelFunc:yce};var fy=class{constructor(e,t){this.variableNames=[\"A\"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=[\"resRC.x\",\"resRC.y\",\"resRC.z\",\"resRC.w\"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype===\"string\"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Uz(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var $U={kernelName:po,backendName:\"webgpu\",kernelFunc:Cm};function Cce(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1;if(s.dtype===\"string\"){let R=t.bufferSync(n),D=t.bufferSync(s),P=y.decodeString(t.readSync(a.dataId)[0]),O=Mz(R,D,i,m,c,u,p,l,P,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({inputs:{x:C},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,c]),_=[{type:\"int32\",data:[p]},{type:\"int32\",data:l},{type:\"int32\",data:[k]}];switch(u){case 0:break;case 1:{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new za([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(R,[g,h],x,_,S)}}let $=pe({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),$}var RU={kernelName:vs,backendName:\"webgpu\",kernelFunc:Cce};function wce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=Hs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var DU={kernelName:xa,backendName:\"webgpu\",kernelFunc:wce};var Sce=ye({opType:Z.SQRT}),AU={kernelName:ws,backendName:\"webgpu\",kernelFunc:Sce};var FU={kernelName:qi,backendName:\"webgpu\",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Jr(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ice=et({opType:fe.SQUARED_DIFFERENCE}),PU={kernelName:ks,backendName:\"webgpu\",kernelFunc:Ice};function vce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,\"stepAlpha : f32,\"),s=[{type:\"float32\",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var OU={kernelName:wo,backendName:\"webgpu\",kernelFunc:vce};var hy=class{constructor(e){this.variableNames=[\"x\"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey=\"stridedSlice\"}getUserCode(){let e=this.outputShape.length,t=\"\";if(e===1)t=\"coords * uniforms.strides + uniforms.begin\";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(\",\")}return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n setOutputAtIndex(index, getX(${t}));\n }\n }\n `}};function kce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Hs({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=pe({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),R=me(n.shape,n.dtype,$),D=zz(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let $=new hy(d),R=[{type:\"int32\",data:b},{type:\"int32\",data:S}],D=t.runWebGPUProgram($,[n],n.dtype,R);k=pe({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var MU={kernelName:Ns,backendName:\"webgpu\",kernelFunc:kce};function Nce(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=Vz(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],\"string\",f),t.makeTensorInfo(l.shape,\"int32\",h)]}var LU={kernelName:Ca,backendName:\"webgpu\",kernelFunc:Nce};var Tce=et({opType:fe.SUB,cpuKernelImpl:Wz,supportsComplex:!0}),BU={kernelName:Ts,backendName:\"webgpu\",kernelFunc:Tce};var _ce=ye({opType:Z.TAN}),zU={kernelName:_s,backendName:\"webgpu\",kernelFunc:_ce};var Ece=ye({opType:Z.TANH}),VU={kernelName:Es,backendName:\"webgpu\",kernelFunc:Ece};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new za([p,u],i,f.shape.length,h.shape.length,c,m,n.dtype,!1),C=y.sizeFromShape([p,u]),S=[{type:\"int32\",data:[i]},{type:\"int32\",data:c},{type:\"int32\",data:[C]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach($=>t.disposeData($.dataId)),_}var WU={kernelName:ds,backendName:\"webgpu\",kernelFunc:$ce};var gy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32,\n dir : i32, inc : i32,`,this.shaderKey=\"swap\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // We compare elements pair-wise within a group of size 2 * inc.\n // The comparing rule for each group alternates between ascending\n // and descending. Within each group, we compare each pair at\n // positions i and i+inc. To decide whether an element at position i\n // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n // inc, it is in the first half of the group, we denote it as x0,\n // otherwise we denote it as x1.\n // For example, as shown in the Bitonic top K paper referenced\n // above, Figure5(a) shows that element[1] is in the second half of\n // the group when group size is 2, but it is in the first half of\n // the group when group size is 4.\n let isFirstInPair = elemIdx % (2 * uniforms.inc) < uniforms.inc;\n var i = 0;\n if (isFirstInPair) {\n i = elemIdx;\n } else {\n i = elemIdx - uniforms.inc;\n }\n\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.inc;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.inc));\n }\n\n var x0 = f32(0.0);\n var x1 = f32(0.0);\n if (i0 < uniforms.inputSize) {\n x0 = getX(batch, i0);\n } else {\n x0 = uniforms.negativeInf;\n }\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = uniforms.negativeInf;\n }\n\n let reverse = elemIdx % (2 * uniforms.dir) >= uniforms.dir;\n let isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n if (reverse == isGreater) {\n // Elements in opposite order of direction\n let iTemp = i0;\n i0 = i1;\n i1 = iTemp;\n }\n if (isFirstInPair) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}},xy=class{constructor(e){this.variableNames=[\"x\",\"indices\"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=\"inputSize : i32, firstPass : i32, k : i32,\",this.shaderKey=\"merge\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let outC = getCoordsFromIndex(index);\n let batch = outC[0];\n let elemIdx = outC[1];\n // The output size is half of the previous size.\n // If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _\n // (k=4), we only need to output the indices at positions |, the\n // indices at positions _ can be thrown away, see Figure5(b) After\n // Phase 2 (Merge phase) in the Bitonic Top K paper referenced\n // above.\n // For example, the paper shows we only need to output the orange\n // bars. The output sequence should look like this | | | | | | | |.\n // Because the sequence is halved, to map the output index back to\n // the previous sequence to find the corresponding value, we need\n // to double the index. When we double the index, we basically\n // interpolate a position, so 2i looks like\n // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k\n // position of each 2k positions by - elemIdx % k. E.g. for output\n // at index 4,5,6,7, we want to get the corresponding element at\n // original index 8,9,10,11, for output at index 8,9,10,11,\n // we want to get the corresponding element at original index\n // 16,17,18,19, so on and so forth.\n\n var i = 0;\n if (elemIdx < uniforms.k) {\n i = elemIdx;\n } else {\n i = elemIdx * 2 - elemIdx % uniforms.k;\n }\n var i0 = 0;\n if (uniforms.firstPass == 1) {\n i0 = i;\n } else {\n i0 = i32(getIndices(batch, i));\n }\n var i1 = 0;\n if (uniforms.firstPass == 1) {\n i1 = i + uniforms.k;\n } else {\n i1 = i32(getIndices(batch, i + uniforms.k));\n }\n\n let x0 = getX(batch, i0);\n var x1 = f32(0.0);\n if (i1 < uniforms.inputSize) {\n x1 = getX(batch, i1);\n } else {\n x1 = x0;\n }\n\n if (x0 >= x1) {\n setOutputAtIndex(index, f32(i0));\n } else {\n setOutputAtIndex(index, f32(i1));\n }\n }\n }\n `}};function rl(r,e){e!==null&&r.disposeData(e.dataId)}function UU(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let R=h(),D=new gy($),O=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"float32\",data:[Number.NEGATIVE_INFINITY]},{type:\"int32\",data:[k]},{type:\"int32\",data:[_]}],M=f;f=t.runWebGPUProgram(D,R,\"int32\",O),rl(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new xy([c,k/2]),D=[{type:\"int32\",data:[p]},{type:\"int32\",data:[f===null?1:0]},{type:\"int32\",data:[m]}],P=f;f=t.runWebGPUProgram($,_,\"int32\",D),rl(t,P);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=Hs({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),rl(t,x);let b=c0({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});rl(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:t}),rl(t,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:t}),rl(t,S),[b,f]}var GU={kernelName:$s,backendName:\"webgpu\",kernelFunc:Rce};var yy=class{constructor(e){this.variableNames=[\"Image\",\"Transforms\"],this.uniforms=\"interpolationModeId : i32, fillModeId : i32, fillValue : f32,\",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=\"transform\"}getUserCode(){return`\n fn mapCoord(outCoord : f32, len : f32) -> f32{\n var inCoord = outCoord;\n if(uniforms.fillModeId == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * f32(i32(f32(-inCoord / sz2))) +\n inCoord;\n }\n if (inCoord < -len) {\n inCoord = inCoord + sz2;\n } else {\n inCoord = -inCoord - 1.0;\n }\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz2 = 2.0 * len;\n inCoord = inCoord - sz2 * f32(i32(f32(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord + len * (f32(i32(f32(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n let sz = len - 1.0;\n inCoord = inCoord - len * f32(i32(f32(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (uniforms.fillModeId == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n }\n return outCoord;\n }\n fn readWithFillValue(batch : i32, coordY : i32, coordX : i32,\n channel : i32) -> f32 {\n var outputValue : f32;\n if (0 <= coordY && coordY < uniforms.imageShape[1] && 0 <= coordX && coordX < uniforms.imageShape[2]) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = uniforms.fillValue;\n }\n return outputValue;\n }\n\n ${G(\"index\")} {\n if (index < uniforms.size) {\n let coords = getCoordsFromIndex(index);\n var outputValue : f32;\n let batch = coords[0];\n let x = coords[2];\n let y = coords[1];\n let channel = coords[3];\n let xf = f32(x);\n let yf = f32(y);\n let a1 = getTransforms(batch, 0);\n let a2 = getTransforms(batch, 1);\n let a3 = getTransforms(batch, 2);\n let b1 = getTransforms(batch, 3);\n let b2 = getTransforms(batch, 4);\n let b3 = getTransforms(batch, 5);\n let c1 = getTransforms(batch, 6);\n let c2 = getTransforms(batch, 7);\n let projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = uniforms.fillValue;\n } else {\n let inX = (a1 * xf + a2 * yf + a3) / projection;\n let inY = (b1 * xf + b2 * yf + b3) / projection;\n let mapX = mapCoord(inX, f32(uniforms.imageShape[2]));\n let mapY = mapCoord(inY, f32(uniforms.imageShape[1]));\n\n if (uniforms.interpolationModeId == 1) {\n let coordY = i32(round(mapY));\n let coordX = i32(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n let yFloor = floor(mapY);\n let xFloor = floor(mapX);\n let yCeil = yFloor + 1.0;\n let xCeil = xFloor + 1.0;\n let valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, i32(yFloor), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yFloor), i32(xCeil), channel);\n let valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, i32(yCeil), i32(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, i32(yCeil), i32(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutputAtIndex(index, outputValue);\n }\n }\n `}};function Dce(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new yy(g),b=a===\"nearest\"?1:2,C;switch(i){case\"constant\":C=1;break;case\"reflect\":C=2;break;case\"wrap\":C=3;break;case\"nearest\":C=4;break;default:C=1;break}let S=[{type:\"int32\",data:[b]},{type:\"int32\",data:[C]},{type:\"float32\",data:[p]}];return t.runWebGPUProgram(x,[n,s],\"float32\",S)}var HU={kernelName:Rs,backendName:\"webgpu\",kernelFunc:Dce};function Ace(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),f}var KU={kernelName:wa,backendName:\"webgpu\",kernelFunc:Ace};var by=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=[\"x\",\"segmentIds\"],this.uniforms=\"numSegments : i32, xSize: i32,\",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!==\"float32\"&&o!==\"int32\")throw new Error(`UnsortedSegmentSum only supports float32 and int32\n types, does not support ${o} type.`);this.type=o,this.shaderKey=\"unsortedSegmentSum\"}getUserCode(){return`\n ${G(\"index\")} {\n if (index < uniforms.xSize) {\n let coords = getXCoordsFromIndex(index);\n let b = coords[0];\n let inCol = coords[1];\n\n let segmentId = i32(getSegmentIds(inCol));\n if (segmentId >= 0) {\n let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments;\n let value = getX(b, inCol);\n\n ${Qr(\"&result[flatIndex]\",\"value\",this.type)}\n }\n }\n }\n `}};function Fce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:\"int32\",data:[a]},{type:\"int32\",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:\"webgpu\",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU=\"4.17.0\",Oce=\"4.17.0\",Mce=\"4.17.0\",Lce=\"4.17.0\",Bce=\"4.17.0\",zce=\"4.17.0\",Vce={tfjs:jU,\"tfjs-core\":jU,\"tfjs-converter\":Oce,\"tfjs-backend-cpu\":Mce,\"tfjs-backend-webgl\":Lce,\"tfjs-backend-wasm\":Bce,\"tfjs-backend-webgpu\":zce};var E7t=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,E7t as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr as zeros,Gt as zerosLike};\n", "import type { Config } from '../exports';\n\n/**\n * Simple helper functions used accross codebase\n */\n\n// helper function: wrapper around console output\nexport function log(...msg): void {\n const dt = new Date();\n const ts = `${dt.getHours().toString().padStart(2, '0')}:${dt.getMinutes().toString().padStart(2, '0')}:${dt.getSeconds().toString().padStart(2, '0')}.${dt.getMilliseconds().toString().padStart(3, '0')}`;\n if (msg) console.log(ts, 'Human:', ...msg); // eslint-disable-line no-console\n}\n\n// helper function: join two paths\nexport function join(folder: string, file: string): string {\n const separator = folder.endsWith('/') ? '' : '/';\n const skipJoin = file.startsWith('.') || file.startsWith('/') || file.startsWith('http:') || file.startsWith('https:') || file.startsWith('file:');\n const path = skipJoin ? `${file}` : `${folder}${separator}${file}`;\n if (!path.toLocaleLowerCase().includes('.json')) throw new Error(`modelpath error: expecting json file: ${path}`);\n return path;\n}\n\n// helper function: gets elapsed time on both browser and nodejs\nexport const now = () => {\n if (typeof performance !== 'undefined') return performance.now();\n return parseInt((Number(process.hrtime.bigint()) / 1000 / 1000).toString());\n};\n\n// helper function: checks current config validity\nexport function validate(defaults: Partial, config: Partial, parent = 'config', msgs: { reason: string, where: string, expected?: string }[] = []) {\n for (const key of Object.keys(config)) {\n if (typeof config[key] === 'object') {\n validate(defaults[key], config[key], key, msgs);\n } else {\n const defined = defaults && (typeof defaults[key] !== 'undefined');\n if (!defined) msgs.push({ reason: 'unknown property', where: `${parent}.${key} = ${config[key]}` });\n const same = defaults && typeof defaults[key] === typeof config[key];\n if (defined && !same) msgs.push({ reason: 'property type mismatch', where: `${parent}.${key} = ${config[key]}`, expected: typeof defaults[key] });\n }\n // ok = ok && defined && same;\n }\n if (config.debug && parent === 'config' && msgs.length > 0) log('invalid configuration', msgs);\n return msgs;\n}\n\n// helper function: perform deep merge of multiple objects so it allows full inheritance with overrides\nexport function mergeDeep(...objects) {\n const isObject = (obj) => obj && typeof obj === 'object';\n return objects.reduce((prev, obj) => {\n Object.keys(obj || {}).forEach((key) => {\n const pVal = prev[key];\n const oVal = obj[key];\n if (Array.isArray(pVal) && Array.isArray(oVal)) prev[key] = pVal.concat(...oVal);\n else if (isObject(pVal) && isObject(oVal)) prev[key] = mergeDeep(pVal, oVal);\n else prev[key] = oVal;\n });\n return prev;\n }, {});\n}\n\n// helper function: return min and max from input array\nexport const minmax = (data: number[]) => data.reduce((acc: number[], val) => {\n acc[0] = (acc[0] === undefined || val < acc[0]) ? val : acc[0];\n acc[1] = (acc[1] === undefined || val > acc[1]) ? val : acc[1];\n return acc;\n}, []);\n\n// helper function: async wait\nexport async function wait(time: number) {\n const waiting = new Promise((resolve) => { setTimeout(() => resolve(true), time); });\n await waiting;\n}\n", "/* eslint-disable no-multi-spaces */\n\n/** Possible TensorFlow backends */\nexport type BackendEnum = '' | 'cpu' | 'wasm' | 'webgl' | 'humangl' | 'tensorflow' | 'webgpu';\n\n/** Possible values for `human.warmup` */\nexport type WarmupEnum = '' | 'none' | 'face' | 'full' | 'body';\n\n/** Possible segmentation model behavior */\nexport type SegmentationEnum = 'default' | 'alpha' | 'foreground' | 'state'\n\n/** Generic config type inherited by all module types */\nexport interface GenericConfig {\n /** is module enabled? */\n enabled: boolean,\n /** path to model json file (relative to `modelBasePath` */\n modelPath: string,\n /** how many max frames to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipFrames: number,\n /** how many max milliseconds to go without re-running model if cached results are acceptable\n * for two-phase models such as face and hand caching applies to bounding boxes detection only */\n skipTime: number,\n}\n\n/** Detector part of face configuration */\nexport interface FaceDetectorConfig extends GenericConfig {\n /** is face rotation correction performed after detecting face?\n * used to correctly analyze faces under high angles\n */\n rotation: boolean,\n /** maximum number of detected faces */\n maxDetected: number,\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n /** minimum size in pixels of a detected face box before resutls are discared */\n minSize: number,\n /** minimum overlap between two detected faces before one is discarded */\n iouThreshold: number,\n /** how much should face box be enlarged over the min/max facial coordinates */\n scale: number,\n /** should child models perform on masked image of a face */\n mask: boolean,\n /** should face detection return processed and cropped face tensor that can with an external model for addtional processing?\n * if enabled it must be manually deallocated to avoid memory leak */\n return: boolean,\n}\n\n/** Mesh part of face configuration */\nexport interface FaceMeshConfig extends GenericConfig {\n /** Keep detected faces that cannot be verified using facemesh */\n keepInvalid: boolean\n}\n\n/** Iris part of face configuration */\nexport interface FaceIrisConfig extends GenericConfig {\n /** how much should iris box be enlarged over the min/max iris coordinates */\n scale: number,\n}\n\n/** Attention part of face configuration */\nexport interface FaceAttentionConfig extends GenericConfig {}\n\n/** Description or face embedding part of face configuration\n * - also used by age and gender detection\n */\nexport interface FaceDescriptionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Emotion part of face configuration */\nexport interface FaceEmotionConfig extends GenericConfig {\n /** minimum confidence for a detected face before results are discarded */\n minConfidence: number,\n}\n\n/** Anti-spoofing part of face configuration */\nexport interface FaceAntiSpoofConfig extends GenericConfig {}\n\n/** Liveness part of face configuration */\nexport interface FaceLivenessConfig extends GenericConfig {}\n\n/** Gear part of face configuration */\nexport interface FaceGearConfig extends GenericConfig {\n /** minimum confidence for a detected race before results are discarded */\n minConfidence: number,\n}\n\n/** Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description */\nexport interface FaceConfig extends GenericConfig {\n detector: Partial,\n mesh: Partial,\n attention: Partial,\n iris: Partial,\n description: Partial,\n emotion: Partial,\n antispoof: Partial,\n liveness: Partial,\n gear: Partial,\n}\n\n/** Configures all body detection specific options */\nexport interface BodyConfig extends GenericConfig {\n /** maximum number of detected bodies */\n maxDetected: number,\n /** minimum confidence for a detected body before results are discarded */\n minConfidence: number,\n /* experimental\n /** experimental: detector used for body model before actual analysis\n detector?: {\n /** experimental: enable body detector before body landmarks\n enabled: boolean,\n /** experimental: path to optional body detector model json file\n modelPath: string,\n /** experimental: minimum confidence for a detected body before results are discarded\n minConfidence: number,\n /** experimental: minimum overlap between two detected bodies before one is discarded\n iouThreshold: number\n },\n */\n}\n\n/** Configures all hand detection specific options */\nexport interface HandConfig extends GenericConfig {\n /** should hand rotation correction be performed after hand detection? */\n rotation: boolean,\n /** minimum confidence for a detected hand before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected hands before one is discarded */\n iouThreshold: number,\n /** maximum number of detected hands */\n maxDetected: number,\n /** should hand landmarks be detected or just return detected hand box */\n landmarks: boolean,\n detector: {\n /** path to hand detector model json */\n modelPath?: string,\n },\n skeleton: {\n /** path to hand skeleton model json */\n modelPath?: string,\n },\n}\n\n/** Configures all object detection specific options */\nexport interface ObjectConfig extends GenericConfig {\n /** minimum confidence for a detected objects before results are discarded */\n minConfidence: number,\n /** minimum overlap between two detected objects before one is discarded */\n iouThreshold: number,\n /** maximum number of detected objects */\n maxDetected: number,\n}\n\n/** Configures all body segmentation module\n * removes background from input containing person\n * if segmentation is enabled it will run as preprocessing task before any other model\n * alternatively leave it disabled and use it on-demand using human.segmentation method which can\n * remove background or replace it with user-provided background\n*/\nexport interface SegmentationConfig extends GenericConfig {\n /** downsample ratio, adjust to reflect approximately how much of input is taken by body */\n ratio: number,\n /** possible rvm segmentation mode */\n mode: SegmentationEnum,\n}\n\n/** Run input through image filters before inference\n * - available only in Browser environments\n * - image filters run with near-zero latency as they are executed on the GPU using WebGL\n*/\nexport interface FilterConfig {\n /** are image filters enabled? */\n enabled: boolean,\n /** perform image histogram equalization\n * - equalization is performed on input as a whole and detected face before its passed for further analysis\n */\n equalization: boolean,\n /** resize input width\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n width: number,\n /** resize input height\n * - if both width and height are set to 0, there is no resizing\n * - if just one is set, second one is scaled automatically\n * - if both are set, values are used as-is\n */\n height: number,\n /** return processed canvas imagedata in result */\n return: boolean,\n /** flip input as mirror image */\n flip: boolean,\n /** apply auto-brighness */\n autoBrightness: boolean,\n /** range: -1 (darken) to 1 (lighten) */\n brightness: number,\n /** range: -1 (reduce contrast) to 1 (increase contrast) */\n contrast: number,\n /** range: 0 (no sharpening) to 1 (maximum sharpening) */\n sharpness: number,\n /** range: 0 (no blur) to N (blur radius in pixels) */\n blur: number\n /** range: -1 (reduce saturation) to 1 (increase saturation) */\n saturation: number,\n /** range: 0 (no change) to 360 (hue rotation in degrees) */\n hue: number,\n /** image negative */\n negative: boolean,\n /** image sepia colors */\n sepia: boolean,\n /** image vintage colors */\n vintage: boolean,\n /** image kodachrome colors */\n kodachrome: boolean,\n /** image technicolor colors */\n technicolor: boolean,\n /** image polaroid camera effect */\n polaroid: boolean,\n /** range: 0 (no pixelate) to N (number of pixels to pixelate) */\n pixelate: number,\n}\n\n/** Controlls gesture detection */\nexport interface GestureConfig {\n /** is gesture detection enabled? */\n enabled: boolean,\n}\n/**\n * Configuration interface definition for **Human** library\n * Contains all configurable parameters\n * Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\nexport interface Config {\n /** Backend used for TFJS operations\n * valid build-in backends are:\n * - Browser: `cpu`, `wasm`, `webgl`, `humangl`, `webgpu`\n * - NodeJS: `cpu`, `wasm`, `tensorflow`\n * default: `webgl` for browser and `tensorflow` for nodejs\n */\n backend: BackendEnum,\n\n /** Path to *.wasm files if backend is set to `wasm`\n *\n * default: auto-detects to link to CDN `jsdelivr` when running in browser\n */\n wasmPath: string,\n\n /** Force WASM loader to use platform fetch\n *\n * default: false\n */\n wasmPlatformFetch: boolean,\n\n /** Print debug statements to console\n *\n * default: `true`\n */\n debug: boolean,\n\n /** Perform model loading and inference concurrently or sequentially\n *\n * default: `true`\n */\n async: boolean,\n\n /** What to use for `human.warmup()`\n * - warmup pre-initializes all models for faster inference but can take significant time on startup\n * - used by `webgl`, `humangl` and `webgpu` backends\n *\n * default: `full`\n */\n warmup: WarmupEnum,\n\n /** Base model path (typically starting with file://, http:// or https://) for all models\n * - individual modelPath values are relative to this path\n *\n * default: `../models/` for browsers and `file://models/` for nodejs\n */\n modelBasePath: string,\n\n /** Cache models in IndexDB on first sucessfull load\n * default: true if indexdb is available (browsers), false if its not (nodejs)\n */\n cacheModels: boolean,\n\n /** Validate kernel ops used in model during model load\n * default: true\n * any errors will be printed on console but will be treated as non-fatal\n */\n validateModels: boolean,\n\n /** Cache sensitivity\n * - values 0..1 where 0.01 means reset cache if input changed more than 1%\n * - set to 0 to disable caching\n *\n * default: 0.7\n */\n cacheSensitivity: number;\n\n /** Explicit flags passed to initialize TFJS */\n flags: Record,\n\n /** Software Kernels\n * Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend\n */\n softwareKernels: boolean,\n\n /** Perform immediate garbage collection on deallocated tensors instead of caching them */\n deallocate: boolean;\n\n /** Internal Variable */\n skipAllowed: boolean;\n\n /** Filter config {@link FilterConfig} */\n filter: Partial,\n\n /** Gesture config {@link GestureConfig} */\n gesture: Partial;\n\n /** Face config {@link FaceConfig} */\n face: Partial,\n\n /** Body config {@link BodyConfig} */\n body: Partial,\n\n /** Hand config {@link HandConfig} */\n hand: Partial,\n\n /** Object config {@link ObjectConfig} */\n object: Partial,\n\n /** Segmentation config {@link SegmentationConfig} */\n segmentation: Partial,\n}\n\n/** - [See all default Config values...](https://github.com/vladmandic/human/blob/main/src/config.ts#L262) */\nconst config: Config = {\n backend: '',\n modelBasePath: '',\n cacheModels: true,\n validateModels: true,\n wasmPath: '',\n wasmPlatformFetch: false,\n debug: false,\n async: true,\n warmup: 'full',\n cacheSensitivity: 0.70,\n skipAllowed: false,\n deallocate: false,\n flags: {},\n softwareKernels: false,\n filter: {\n enabled: true,\n equalization: false,\n width: 0,\n height: 0,\n flip: false,\n return: true,\n autoBrightness: true,\n brightness: 0,\n contrast: 0,\n sharpness: 0,\n blur: 0,\n saturation: 0,\n hue: 0,\n negative: false,\n sepia: false,\n vintage: false,\n kodachrome: false,\n technicolor: false,\n polaroid: false,\n pixelate: 0,\n },\n gesture: {\n enabled: true,\n },\n face: {\n enabled: true,\n detector: {\n modelPath: 'blazeface.json',\n rotation: false,\n maxDetected: 1,\n skipFrames: 99,\n skipTime: 2500,\n minConfidence: 0.2,\n minSize: 0,\n iouThreshold: 0.1,\n scale: 1.0,\n mask: false,\n return: false,\n },\n mesh: {\n enabled: true,\n modelPath: 'facemesh.json',\n keepInvalid: false,\n },\n attention: {\n enabled: false,\n modelPath: 'facemesh-attention.json',\n },\n iris: {\n enabled: true,\n scale: 2.3,\n modelPath: 'iris.json',\n },\n emotion: {\n enabled: true,\n minConfidence: 0.1,\n skipFrames: 99,\n skipTime: 1500,\n modelPath: 'emotion.json',\n },\n description: {\n enabled: true,\n modelPath: 'faceres.json',\n skipFrames: 99,\n skipTime: 3000,\n minConfidence: 0.1,\n },\n antispoof: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'antispoof.json',\n },\n liveness: {\n enabled: false,\n skipFrames: 99,\n skipTime: 4000,\n modelPath: 'liveness.json',\n },\n },\n body: {\n enabled: true,\n modelPath: 'movenet-lightning.json',\n maxDetected: -1,\n minConfidence: 0.3,\n skipFrames: 1,\n skipTime: 200,\n },\n hand: {\n enabled: true,\n rotation: true,\n skipFrames: 99,\n skipTime: 1000,\n minConfidence: 0.50,\n iouThreshold: 0.2,\n maxDetected: -1,\n landmarks: true,\n detector: {\n modelPath: 'handtrack.json',\n },\n skeleton: {\n modelPath: 'handlandmark-lite.json',\n },\n },\n object: {\n enabled: false,\n modelPath: 'centernet.json',\n minConfidence: 0.2,\n iouThreshold: 0.4,\n maxDetected: 10,\n skipFrames: 99,\n skipTime: 2000,\n },\n segmentation: {\n enabled: false,\n modelPath: 'rvm.json',\n ratio: 0.5,\n mode: 'default',\n },\n};\n\nexport { config as defaults };\n", "export const vertexIdentity = `\n precision highp float;\n attribute vec2 pos;\n attribute vec2 uv;\n varying vec2 vUv;\n uniform float flipY;\n void main(void) {\n vUv = uv;\n gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);\n }\n`;\n\nexport const fragmentIdentity = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n void main(void) {\n gl_FragColor = texture2D(texture, vUv);\n }\n`;\n\nexport const colorMatrixWithAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];\n gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];\n }\n`;\n\nexport const colorMatrixWithoutAlpha = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform float m[20];\n void main(void) {\n vec4 c = texture2D(texture, vUv);\n gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];\n gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];\n gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];\n gl_FragColor.a = c.a;\n }\n`;\n\nexport const pixelate = `\n precision highp float;\n varying vec2 vUv;\n uniform vec2 size;\n uniform sampler2D texture;\n vec2 pixelate(vec2 coord, vec2 size) {\n return floor( coord / size ) * size;\n }\n void main(void) {\n gl_FragColor = vec4(0.0);\n vec2 coord = pixelate(vUv, size);\n gl_FragColor += texture2D(texture, coord);\n }\n`;\n\nexport const blur = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n void main(void) {\n gl_FragColor = vec4(0.0);\n gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;\n gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv )*0.159576912161;\n gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;\n gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;\n gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;\n gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;\n gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;\n gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;\n gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;\n }\n`;\n\nexport const convolution = `\n precision highp float;\n varying vec2 vUv;\n uniform sampler2D texture;\n uniform vec2 px;\n uniform float m[9];\n void main(void) {\n vec4 c11 = texture2D(texture, vUv - px); // top left\n vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y)); // top center\n vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y)); // top right\n vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) ); // mid left\n vec4 c22 = texture2D(texture, vUv); // mid center\n vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) ); // mid right\n vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) ); // bottom left\n vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) ); // bottom center\n vec4 c33 = texture2D(texture, vUv + px ); // bottom right\n gl_FragColor = \n c11 * m[0] + c12 * m[1] + c22 * m[2] +\n c21 * m[3] + c22 * m[4] + c23 * m[5] +\n c31 * m[6] + c32 * m[7] + c33 * m[8];\n gl_FragColor.a = c22.a;\n }\n`;\n", "/**\n * Image Filters in WebGL algoritm implementation\n * Based on: [WebGLImageFilter](https://github.com/phoboslab/WebGLImageFilter)\n */\n\n/* eslint-disable func-names */\n\nimport * as shaders from './imagefxshaders';\nimport { canvas } from './image';\nimport { log } from '../util/util';\n\nconst collect = (source, prefix: string, collection) => {\n const r = new RegExp('\\\\b' + prefix + ' \\\\w+ (\\\\w+)', 'ig');\n source.replace(r, (match, name) => {\n collection[name] = 0;\n return match;\n });\n};\n\nclass GLProgram {\n uniform = {};\n attribute = {};\n gl: WebGLRenderingContext;\n id: WebGLProgram;\n\n constructor(gl, vertexSource, fragmentSource) {\n this.gl = gl;\n const vertexShader = this.compile(vertexSource, this.gl.VERTEX_SHADER);\n const fragmentShader = this.compile(fragmentSource, this.gl.FRAGMENT_SHADER);\n this.id = this.gl.createProgram() as WebGLProgram;\n if (!vertexShader || !fragmentShader) return;\n if (!this.id) {\n log('filter: could not create webgl program');\n return;\n }\n this.gl.attachShader(this.id, vertexShader);\n this.gl.attachShader(this.id, fragmentShader);\n this.gl.linkProgram(this.id);\n if (!this.gl.getProgramParameter(this.id, this.gl.LINK_STATUS)) {\n log(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id) || 'unknown'}`);\n return;\n }\n this.gl.useProgram(this.id);\n collect(vertexSource, 'attribute', this.attribute); // Collect attributes\n for (const a in this.attribute) this.attribute[a] = this.gl.getAttribLocation(this.id, a);\n collect(vertexSource, 'uniform', this.uniform); // Collect uniforms\n collect(fragmentSource, 'uniform', this.uniform);\n for (const u in this.uniform) this.uniform[u] = this.gl.getUniformLocation(this.id, u);\n }\n\n compile = (source, type): WebGLShader | null => {\n const shader = this.gl.createShader(type);\n if (!shader) {\n log('filter: could not create shader');\n return null;\n }\n this.gl.shaderSource(shader, source);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n log(`filter: gl compile failed: ${this.gl.getShaderInfoLog(shader) || 'unknown'}`);\n return null;\n }\n return shader;\n };\n}\n\n// function that is instantiated as class so it has private this members\n/**\n * @class GLImageFilter\n * @property {function} reset reset current filter chain\n * @property {function} add add specified filter to filter chain\n * @property {function} apply execute filter chain and draw result\n * @property {function} draw just draw input to result\n */\n\nexport function GLImageFilter() {\n let drawCount = 0;\n let sourceTexture: WebGLTexture | null = null;\n let lastInChain = false;\n let currentFramebufferIndex = -1;\n let tempFramebuffers: [null, null] | [{ fbo: WebGLFramebuffer | null, texture: WebGLTexture | null }] = [null, null];\n let filterChain: Record[] = [];\n let vertexBuffer: WebGLBuffer | null = null;\n let currentProgram: GLProgram | null = null;\n const fxcanvas = canvas(100, 100) as HTMLCanvasElement;\n const shaderProgramCache = { }; // key is the shader program source, value is the compiled program\n const DRAW = { INTERMEDIATE: 1 };\n const gl = fxcanvas.getContext('webgl') as WebGLRenderingContext;\n if (!gl) {\n log('filter: cannot get webgl context');\n return;\n }\n // @ts-ignore used for sanity checks outside of imagefx\n this.gl = gl;\n\n function resize(width, height) {\n if (width === fxcanvas.width && height === fxcanvas.height) return; // Same width/height? Nothing to do here\n fxcanvas.width = width;\n fxcanvas.height = height;\n if (!vertexBuffer) { // Create the context if we don't have it yet\n const vertices = 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]); // Create the vertex buffer for the two triangles [x, y, u, v] * 6\n vertexBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n }\n gl.viewport(0, 0, fxcanvas.width, fxcanvas.height);\n tempFramebuffers = [null, null]; // Delete old temp framebuffers\n }\n\n function createFramebufferTexture(width, height) {\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n const renderbuffer = gl.createRenderbuffer();\n gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n return { fbo, texture };\n }\n\n function getTempFramebuffer(index): { fbo: WebGLFramebuffer | null, texture: WebGLTexture | null } {\n tempFramebuffers[index] = tempFramebuffers[index] || createFramebufferTexture(fxcanvas.width, fxcanvas.height);\n return tempFramebuffers[index] as { fbo: WebGLFramebuffer, texture: WebGLTexture };\n }\n\n function draw(flags = 0) {\n if (!currentProgram) return;\n let source: WebGLTexture | null = null;\n let target: WebGLFramebuffer | null = null;\n let flipY = false;\n if (drawCount === 0) source = sourceTexture; // First draw call - use the source texture\n else source = getTempFramebuffer(currentFramebufferIndex).texture || null; // All following draw calls use the temp buffer last drawn to\n drawCount++;\n if (lastInChain && !(flags & DRAW.INTERMEDIATE)) { // Last filter in our chain - draw directly to the WebGL Canvas. We may also have to flip the image vertically now\n target = null;\n flipY = drawCount % 2 === 0;\n } else {\n currentFramebufferIndex = (currentFramebufferIndex + 1) % 2;\n target = getTempFramebuffer(currentFramebufferIndex).fbo || null; // Intermediate draw call - get a temp buffer to draw to\n }\n gl.bindTexture(gl.TEXTURE_2D, source); // Bind the source and target and draw the two triangles\n gl.bindFramebuffer(gl.FRAMEBUFFER, target);\n gl.uniform1f(currentProgram.uniform['flipY'], (flipY ? -1 : 1));\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n function compileShader(fragmentSource): GLProgram | null {\n if (shaderProgramCache[fragmentSource]) {\n currentProgram = shaderProgramCache[fragmentSource];\n gl.useProgram((currentProgram ? currentProgram.id : null) || null);\n return currentProgram;\n }\n currentProgram = new GLProgram(gl, shaders.vertexIdentity, fragmentSource);\n if (!currentProgram) {\n log('filter: could not get webgl program');\n return null;\n }\n const floatSize = Float32Array.BYTES_PER_ELEMENT;\n const vertSize = 4 * floatSize;\n gl.enableVertexAttribArray(currentProgram.attribute['pos']);\n gl.vertexAttribPointer(currentProgram.attribute['pos'], 2, gl.FLOAT, false, vertSize, 0 * floatSize);\n gl.enableVertexAttribArray(currentProgram.attribute['uv']);\n gl.vertexAttribPointer(currentProgram.attribute['uv'], 2, gl.FLOAT, false, vertSize, 2 * floatSize);\n shaderProgramCache[fragmentSource] = currentProgram;\n return currentProgram;\n }\n\n const filter = {\n colorMatrix: (matrix: number[]) => { // general color matrix filter\n const m = new Float32Array(matrix);\n m[4] /= 255;\n m[9] /= 255;\n m[14] /= 255;\n m[19] /= 255;\n const shader = (m[18] === 1 && m[3] === 0 && m[8] === 0 && m[13] === 0 && m[15] === 0 && m[16] === 0 && m[17] === 0 && m[19] === 0) // Can we ignore the alpha value? Makes things a bit faster.\n ? shaders.colorMatrixWithoutAlpha\n : shaders.colorMatrixWithAlpha;\n const program = compileShader(shader);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n draw();\n },\n\n brightness: (brightness: number) => {\n const b = (brightness || 0) + 1;\n filter.colorMatrix([\n b, 0, 0, 0, 0,\n 0, b, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n saturation: (amount: number) => {\n const x = (amount || 0) * 2 / 3 + 1;\n const y = ((x - 1) * -0.5);\n filter.colorMatrix([\n x, y, y, 0, 0,\n y, x, y, 0, 0,\n y, y, x, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturate: () => {\n filter.saturation(-1);\n },\n\n contrast: (amount: number) => {\n const v = (amount || 0) + 1;\n const o = -128 * (v - 1);\n filter.colorMatrix([\n v, 0, 0, 0, o,\n 0, v, 0, 0, o,\n 0, 0, v, 0, o,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n negative: () => {\n filter.contrast(-2);\n },\n\n hue: (rotation: number) => {\n rotation = (rotation || 0) / 180 * Math.PI;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const lumR = 0.213;\n const lumG = 0.715;\n const lumB = 0.072;\n filter.colorMatrix([\n lumR + cos * (1 - lumR) + sin * (-lumR), lumG + cos * (-lumG) + sin * (-lumG), lumB + cos * (-lumB) + sin * (1 - lumB), 0, 0,\n lumR + cos * (-lumR) + sin * (0.143), lumG + cos * (1 - lumG) + sin * (0.140), lumB + cos * (-lumB) + sin * (-0.283), 0, 0,\n lumR + cos * (-lumR) + sin * (-(1 - lumR)), lumG + cos * (-lumG) + sin * (lumG), lumB + cos * (1 - lumB) + sin * (lumB), 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n desaturateLuminance: () => {\n filter.colorMatrix([\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0.2764723, 0.9297080, 0.0938197, 0, -37.1,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n sepia: () => {\n filter.colorMatrix([\n 0.393, 0.7689999, 0.18899999, 0, 0,\n 0.349, 0.6859999, 0.16799999, 0, 0,\n 0.272, 0.5339999, 0.13099999, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n brownie: () => {\n filter.colorMatrix([\n 0.5997023498159715, 0.34553243048391263, -0.2708298674538042, 0, 47.43192855600873,\n -0.037703249837783157, 0.8609577587992641, 0.15059552388459913, 0, -36.96841498319127,\n 0.24113635128153335, -0.07441037908422492, 0.44972182064877153, 0, -7.562075277591283,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n vintagePinhole: () => {\n filter.colorMatrix([\n 0.6279345635605994, 0.3202183420819367, -0.03965408211312453, 0, 9.651285835294123,\n 0.02578397704808868, 0.6441188644374771, 0.03259127616149294, 0, 7.462829176470591,\n 0.0466055556782719, -0.0851232987247891, 0.5241648018700465, 0, 5.159190588235296,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n kodachrome: () => {\n filter.colorMatrix([\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n technicolor: () => {\n filter.colorMatrix([\n 1.9125277891456083, -0.8545344976951645, -0.09155508482755585, 0, 11.793603434377337,\n -0.3087833385928097, 1.7658908555458428, -0.10601743074722245, 0, -70.35205161461398,\n -0.231103377548616, -0.7501899197440212, 1.847597816108189, 0, 30.950940869491138,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n polaroid: () => {\n filter.colorMatrix([\n 1.438, -0.062, -0.062, 0, 0,\n -0.122, 1.378, -0.122, 0, 0,\n -0.016, -0.016, 1.483, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n shiftToBGR: () => {\n filter.colorMatrix([\n 0, 0, 1, 0, 0,\n 0, 1, 0, 0, 0,\n 1, 0, 0, 0, 0,\n 0, 0, 0, 1, 0,\n ]);\n },\n\n convolution: (matrix: number[]) => { // general convolution Filter\n const m = new Float32Array(matrix);\n const pixelSizeX = 1 / fxcanvas.width;\n const pixelSizeY = 1 / fxcanvas.height;\n const program = compileShader(shaders.convolution);\n if (!program) return;\n gl.uniform1fv(program.uniform['m'], m);\n gl.uniform2f(program.uniform['px'], pixelSizeX, pixelSizeY);\n draw();\n },\n\n detectEdges: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, 1, 0,\n 1, -4, 1,\n 0, 1, 0,\n ]);\n },\n\n sobelX: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, 0, 1,\n -2, 0, 2,\n -1, 0, 1,\n ]);\n },\n\n sobelY: () => {\n // @ts-ignore this\n filter.convolution.call(this, [\n -1, -2, -1,\n 0, 0, 0,\n 1, 2, 1,\n ]);\n },\n\n sharpen: (amount) => {\n const a = amount || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n 0, -1 * a, 0,\n -1 * a, 1 + 4 * a, -1 * a,\n 0, -1 * a, 0,\n ]);\n },\n\n emboss: (size: number) => {\n const s = size || 1;\n // @ts-ignore this\n filter.convolution.call(this, [\n -2 * s, -1 * s, 0,\n -1 * s, 1, 1 * s,\n 0, 1 * s, 2 * s,\n ]);\n },\n\n blur: (size: number) => {\n const blurSizeX = (size / 7) / fxcanvas.width;\n const blurSizeY = (size / 7) / fxcanvas.height;\n const program = compileShader(shaders.blur);\n if (!program) return;\n // Vertical\n gl.uniform2f(program.uniform['px'], 0, blurSizeY);\n draw(DRAW.INTERMEDIATE);\n // Horizontal\n gl.uniform2f(program.uniform['px'], blurSizeX, 0);\n draw();\n },\n\n pixelate: (size: number) => {\n const blurSizeX = (size) / fxcanvas.width;\n const blurSizeY = (size) / fxcanvas.height;\n const program = compileShader(shaders.pixelate);\n if (!program) return;\n gl.uniform2f(program.uniform['size'], blurSizeX, blurSizeY);\n draw();\n },\n };\n\n // @ts-ignore this\n this.add = function (name) {\n const args = Array.prototype.slice.call(arguments, 1); // eslint-disable-line prefer-rest-params\n const func = filter[name];\n filterChain.push({ func, args });\n };\n\n // @ts-ignore this\n this.reset = function () {\n filterChain = [];\n };\n\n // @ts-ignore this\n this.get = function () {\n return filterChain;\n };\n\n // @ts-ignore this\n this.apply = function (image) {\n resize(image.width, image.height);\n drawCount = 0;\n if (!sourceTexture) sourceTexture = gl.createTexture(); // Create the texture for the input image if we haven't yet\n gl.bindTexture(gl.TEXTURE_2D, sourceTexture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);\n for (let i = 0; i < filterChain.length; i++) {\n lastInChain = (i === filterChain.length - 1);\n const f = filterChain[i];\n // @ts-ignore function assigment\n f.func.apply(this, f.args || []);\n }\n return fxcanvas;\n };\n\n // @ts-ignore this\n this.draw = function (image) {\n this.add('brightness', 0);\n return this.apply(image);\n };\n}\n", "/**\n * Image enhancements\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function histogramEqualization(inputImage: Tensor): Promise {\n const squeeze = inputImage.shape.length === 4 ? tf.squeeze(inputImage) : inputImage;\n const rgb = tf.split(squeeze, 3, 2);\n const min: Tensor[] = [tf.min(rgb[0]), tf.min(rgb[1]), tf.min(rgb[2])]; // minimum pixel value per channel T[]\n const max: Tensor[] = [tf.max(rgb[0]), tf.max(rgb[1]), tf.max(rgb[2])]; // maximum pixel value per channel T[]\n // const absMin = await Promise.all(min.map((channel) => channel.data())); // minimum pixel value per channel A[]\n // const minValue = Math.min(absMax[0][0], absMin[1][0], absMin[2][0]);\n const absMax = await Promise.all(max.map((channel) => channel.data())); // maximum pixel value per channel A[]\n const maxValue = Math.max(absMax[0][0], absMax[1][0], absMax[2][0]);\n const maxRange = maxValue > 1 ? 255 : 1;\n const factor = maxRange / maxValue;\n let final: Tensor;\n if (factor > 1) {\n const sub = [tf.sub(rgb[0], min[0]), tf.sub(rgb[1], min[1]), tf.sub(rgb[2], min[2])]; // channels offset by min values\n const range = [tf.sub(max[0], min[0]), tf.sub(max[1], min[1]), tf.sub(max[2], min[2])]; // channel ranges\n // const fact = [tf.div(maxRange, absMax[0]), tf.div(maxRange, absMax[1]), tf.div(maxRange, absMax[1])]; // factors between\n const enh = [tf.mul(sub[0], factor), tf.mul(sub[1], factor), tf.mul(sub[2], factor)];\n const stack = tf.stack([enh[0], enh[1], enh[2]], 2);\n final = tf.reshape(stack, [1, squeeze.shape[0] || 0, squeeze.shape[1] || 0, 3]);\n tf.dispose([...sub, ...range, ...enh, stack]);\n } else {\n final = tf.expandDims(squeeze, 0);\n }\n tf.dispose([...rgb, ...min, ...max, rgb, squeeze, inputImage]);\n return final;\n}\n", "/**\n * Image Processing algorithm implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as fxImage from './imagefx';\nimport type { Input, AnyCanvas, Config } from '../exports';\nimport type { Tensor, Tensor3D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport * as enhance from './enhance';\n\nconst maxSize = 3840;\n// internal temp canvases\nlet inCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet outCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\nlet tmpCanvas: AnyCanvas | null = null; // use global variable to avoid recreating canvas on each frame\n// @ts-ignore // imagefx is js module that should be converted to a class\nlet fx: fxImage.GLImageFilter | null; // eslint-disable-line @typescript-eslint/no-redundant-type-constituents\n\nconst last: { inputSum: number, cacheDiff: number, sumMethod: number, inputTensor: undefined | Tensor } = {\n inputSum: 0,\n cacheDiff: 1,\n sumMethod: 0,\n inputTensor: undefined,\n};\n\nexport function reset() {\n last.inputSum = 0;\n last.cacheDiff = 1;\n last.sumMethod = 0;\n last.inputTensor = undefined;\n}\n\nexport function canvas(width: number, height: number): AnyCanvas {\n let c: AnyCanvas;\n if (env.browser) { // browser defines canvas object\n if (env.worker) { // if runing in web worker use OffscreenCanvas\n if (typeof OffscreenCanvas === 'undefined') throw new Error('canvas error: attempted to run in web worker but OffscreenCanvas is not supported');\n c = new OffscreenCanvas(width, height);\n } else { // otherwise use DOM canvas\n if (typeof document !== 'undefined') {\n c = document.createElement('canvas');\n c.width = width;\n c.height = height;\n } else if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n else throw new Error('canvas error: attempted to use canvas in react-native without canvas support installed');\n } else {\n throw new Error('canvas error: attempted to run in browser but DOM is not defined');\n }\n }\n } else { // if not running in browser, there is no \"default\" canvas object, so we need monkey patch or fail\n // @ts-ignore // env.canvas is an external monkey-patch\n if (typeof env.Canvas !== 'undefined') c = new env.Canvas(width, height);\n else if (typeof globalThis.Canvas !== 'undefined') c = new globalThis.Canvas(width, height);\n // else throw new Error('canvas error: attempted to use canvas in nodejs without canvas support installed');\n }\n // @ts-ignore its either defined or we already threw an error\n return c;\n}\n\n// helper function to copy canvas from input to output\nexport function copy(input: AnyCanvas, output?: AnyCanvas) {\n const outputCanvas = output || canvas(input.width, input.height);\n const ctx = outputCanvas.getContext('2d') as CanvasRenderingContext2D;\n ctx.drawImage(input, 0, 0);\n return outputCanvas;\n}\n\n// process input image and return tensor\n// input can be tensor, imagedata, htmlimageelement, htmlvideoelement\n// input is resized and run through imagefx filter\nexport async function process(input: Input, config: Config, getTensor: boolean = true): Promise<{ tensor: Tensor4D | null, canvas: AnyCanvas | null }> {\n if (!input) {\n // throw new Error('input is missing');\n if (config.debug) log('input error: input is missing');\n return { tensor: null, canvas: null }; // video may become temporarily unavailable due to onresize\n }\n // sanity checks since different browsers do not implement all dom elements\n if (\n !(input instanceof tf.Tensor)\n && !(typeof Image !== 'undefined' && input instanceof Image)\n && !(typeof globalThis.Canvas !== 'undefined' && input instanceof globalThis.Canvas)\n && !(typeof ImageData !== 'undefined' && input instanceof ImageData)\n && !(typeof ImageBitmap !== 'undefined' && input instanceof ImageBitmap)\n && !(typeof HTMLImageElement !== 'undefined' && input instanceof HTMLImageElement)\n && !(typeof HTMLMediaElement !== 'undefined' && input instanceof HTMLMediaElement)\n && !(typeof HTMLVideoElement !== 'undefined' && input instanceof HTMLVideoElement)\n && !(typeof HTMLCanvasElement !== 'undefined' && input instanceof HTMLCanvasElement)\n && !(typeof OffscreenCanvas !== 'undefined' && input instanceof OffscreenCanvas)\n ) {\n throw new Error('input error: type not recognized');\n }\n if (input instanceof tf.Tensor) { // if input is tensor use as-is without filters but correct shape as needed\n let tensor: Tensor | null = null;\n if (input['isDisposedInternal']) throw new Error('input error: attempted to use tensor but it is disposed');\n if (!(input as Tensor).shape) throw new Error('input error: attempted to use tensor without a shape');\n if ((input as Tensor).shape.length === 3) { // [height, width, 3 || 4]\n if ((input as Tensor).shape[2] === 3) { // [height, width, 3] so add batch\n tensor = tf.expandDims(input, 0);\n } else if ((input as Tensor).shape[2] === 4) { // [height, width, 4] so strip alpha and add batch\n const rgb = tf.slice3d(input as Tensor3D, [0, 0, 0], [-1, -1, 3]);\n tensor = tf.expandDims(rgb, 0);\n tf.dispose(rgb);\n }\n } else if ((input as Tensor).shape.length === 4) { // [1, width, height, 3 || 4]\n if ((input as Tensor).shape[3] === 3) { // [1, width, height, 3] just clone\n tensor = tf.clone(input);\n } else if ((input as Tensor).shape[3] === 4) { // [1, width, height, 4] so strip alpha\n tensor = tf.slice4d(input as Tensor4D, [0, 0, 0, 0], [-1, -1, -1, 3]);\n }\n }\n // at the end shape must be [1, height, width, 3]\n if (tensor == null || tensor.shape.length !== 4 || tensor.shape[0] !== 1 || tensor.shape[3] !== 3) throw new Error(`input error: attempted to use tensor with unrecognized shape: ${((input as Tensor).shape).toString()}`);\n if ((tensor).dtype === 'int32') {\n const cast = tf.cast(tensor, 'float32');\n tf.dispose(tensor);\n tensor = cast;\n }\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n }\n // check if resizing will be needed\n if (typeof input['readyState'] !== 'undefined' && (input as HTMLMediaElement).readyState <= 2) {\n if (config.debug) log('input stream is not ready');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n const originalWidth: number = input['naturalWidth'] || input['videoWidth'] || input['width'] || (input['shape'] && (input['shape'][1] > 0));\n const originalHeight: number = input['naturalHeight'] || input['videoHeight'] || input['height'] || (input['shape'] && (input['shape'][2] > 0));\n if (!originalWidth || !originalHeight) {\n if (config.debug) log('cannot determine input dimensions');\n return { tensor: null, canvas: inCanvas }; // video may become temporarily unavailable due to onresize\n }\n let targetWidth: number = originalWidth;\n let targetHeight: number = originalHeight;\n if (targetWidth > maxSize) {\n targetWidth = maxSize;\n targetHeight = Math.trunc(targetWidth * originalHeight / originalWidth);\n }\n if (targetHeight > maxSize) {\n targetHeight = maxSize;\n targetWidth = Math.trunc(targetHeight * originalWidth / originalHeight);\n }\n\n // create our canvas and resize it if needed\n if ((config.filter?.width || 0) > 0) targetWidth = config.filter.width as number;\n else if ((config.filter?.height || 0) > 0) targetWidth = originalWidth * ((config.filter.height || 0) / originalHeight);\n if ((config.filter.height || 0) > 0) targetHeight = config.filter.height as number;\n else if ((config.filter.width || 0) > 0) targetHeight = originalHeight * ((config.filter.width || 0) / originalWidth);\n if (!targetWidth || !targetHeight) throw new Error('input error: cannot determine dimension');\n if (!inCanvas || (inCanvas.width !== targetWidth) || (inCanvas.height !== targetHeight)) inCanvas = canvas(targetWidth, targetHeight);\n\n // draw input to our canvas\n const inCtx = inCanvas.getContext('2d') as CanvasRenderingContext2D;\n if ((typeof ImageData !== 'undefined') && (input instanceof ImageData)) {\n inCtx.putImageData(input, 0, 0);\n } else {\n if (config.filter.flip && typeof inCtx.translate !== 'undefined') {\n inCtx.translate(originalWidth, 0);\n inCtx.scale(-1, 1);\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n inCtx.setTransform(1, 0, 0, 1, 0, 0); // resets transforms to defaults\n } else {\n inCtx.drawImage(input as AnyCanvas, 0, 0, originalWidth, originalHeight, 0, 0, inCanvas.width, inCanvas.height);\n }\n }\n\n if (!outCanvas || (inCanvas.width !== outCanvas.width) || (inCanvas.height !== outCanvas.height)) outCanvas = canvas(inCanvas.width, inCanvas.height); // init output canvas\n\n // imagefx transforms using gl from input canvas to output canvas\n if (config.filter.enabled && env.webgl.supported) {\n if (!fx) fx = env.browser ? new fxImage.GLImageFilter() : null; // && (typeof document !== 'undefined')\n env.filter = !!fx;\n if (!fx?.add) {\n if (config.debug) log('input process error: cannot initialize filters');\n env.webgl.supported = false;\n config.filter.enabled = false;\n copy(inCanvas, outCanvas); // filter failed to initialize\n // return { tensor: null, canvas: inCanvas };\n } else {\n fx.reset();\n if (config.filter.brightness !== 0) fx.add('brightness', config.filter.brightness);\n if (config.filter.contrast !== 0) fx.add('contrast', config.filter.contrast);\n if (config.filter.sharpness !== 0) fx.add('sharpen', config.filter.sharpness);\n if (config.filter.blur !== 0) fx.add('blur', config.filter.blur);\n if (config.filter.saturation !== 0) fx.add('saturation', config.filter.saturation);\n if (config.filter.hue !== 0) fx.add('hue', config.filter.hue);\n if (config.filter.negative) fx.add('negative');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.vintage) fx.add('brownie');\n if (config.filter.sepia) fx.add('sepia');\n if (config.filter.kodachrome) fx.add('kodachrome');\n if (config.filter.technicolor) fx.add('technicolor');\n if (config.filter.polaroid) fx.add('polaroid');\n if (config.filter.pixelate !== 0) fx.add('pixelate', config.filter.pixelate);\n if (fx.get()?.length > 1) outCanvas = fx.apply(inCanvas);\n else outCanvas = fx.draw(inCanvas);\n }\n } else {\n copy(inCanvas, outCanvas); // if no filters applied, output canvas is input canvas\n if (fx) fx = null;\n env.filter = !!fx;\n }\n\n if (!getTensor) return { tensor: null, canvas: outCanvas }; // just canvas was requested\n if (!outCanvas) throw new Error('canvas error: cannot create output');\n\n // create tensor from image unless input was a tensor already\n let pixels;\n let depth = 3;\n if ((typeof ImageData !== 'undefined' && input instanceof ImageData) || ((input as ImageData).data && (input as ImageData).width && (input as ImageData).height)) { // if input is imagedata, just use it\n if (env.browser && tf.browser) {\n pixels = tf.browser ? tf.browser.fromPixels(input as ImageData) : null;\n } else {\n depth = (input as ImageData).data.length / (input as ImageData).height / (input as ImageData).width;\n // const arr = Uint8Array.from(input['data']);\n const arr = new Uint8Array((input as ImageData).data.buffer);\n pixels = tf.tensor(arr, [(input as ImageData).height, (input as ImageData).width, depth], 'int32');\n }\n } else {\n if (!tmpCanvas || (outCanvas.width !== tmpCanvas.width) || (outCanvas.height !== tmpCanvas.height)) tmpCanvas = canvas(outCanvas.width, outCanvas.height); // init output canvas\n if (tf.browser && env.browser) {\n if (config.backend === 'webgl' || config.backend === 'humangl' || config.backend === 'webgpu') {\n pixels = tf.browser.fromPixels(outCanvas as HTMLCanvasElement); // safe to reuse since both backend and context are gl based\n } else {\n tmpCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n pixels = tf.browser.fromPixels(tmpCanvas as HTMLCanvasElement);\n }\n } else {\n const tempCanvas = copy(outCanvas); // cannot use output canvas as it already has gl context so we do a silly one more canvas\n const tempCtx = tempCanvas.getContext('2d') as CanvasRenderingContext2D;\n const tempData = tempCtx.getImageData(0, 0, targetWidth, targetHeight);\n depth = tempData.data.length / targetWidth / targetHeight;\n const arr = new Uint8Array(tempData.data.buffer);\n pixels = tf.tensor(arr, [targetWidth, targetHeight, depth]);\n }\n }\n if (depth === 4) { // rgba to rgb\n const rgb = tf.slice3d(pixels, [0, 0, 0], [-1, -1, 3]); // strip alpha channel\n tf.dispose(pixels);\n pixels = rgb;\n }\n if (!pixels) throw new Error('input error: cannot create tensor');\n const casted: Tensor = tf.cast(pixels, 'float32');\n const tensor: Tensor = config.filter.equalization ? await enhance.histogramEqualization(casted) : tf.expandDims(casted, 0);\n tf.dispose([pixels, casted]);\n\n if (config.filter.autoBrightness) {\n const max = tf.max(tensor);\n const maxVal = await max.data();\n config.filter.brightness = maxVal[0] > 1 ? (1 - maxVal[0] / 255) : (1 - maxVal[0]);\n tf.dispose(max);\n }\n\n return { tensor: tensor as Tensor4D, canvas: (config.filter.return ? outCanvas : null) };\n}\n\n/*\nconst checksum = async (input: Tensor): Promise => { // use tf sum or js based sum loop depending on which is faster\n const resizeFact = 48;\n const reduced: Tensor = tf.image.resizeBilinear(input, [Math.trunc((input.shape[1] || 1) / resizeFact), Math.trunc((input.shape[2] || 1) / resizeFact)]);\n const tfSum = async (): Promise => {\n const sumT = tf.sum(reduced);\n const sum0 = await sumT.data();\n tf.dispose(sumT);\n return sum0[0];\n };\n const jsSum = async (): Promise => {\n const reducedData = await reduced.data(); // raw image rgb array\n let sum0 = 0;\n for (let i = 0; i < reducedData.length / 3; i++) sum0 += reducedData[3 * i + 2]; // look only at green value of each pixel\n return sum0;\n };\n if (last.sumMethod === 0) {\n const t0 = now();\n await jsSum();\n const t1 = now();\n await tfSum();\n const t2 = now();\n last.sumMethod = t1 - t0 < t2 - t1 ? 1 : 2;\n }\n const res = last.sumMethod === 1 ? await jsSum() : await tfSum();\n tf.dispose(reduced);\n return res;\n};\n*/\n\nexport async function skip(config: Partial, input: Tensor) {\n let skipFrame = false;\n if (config.cacheSensitivity === 0 || !input.shape || input.shape.length !== 4 || input.shape[1] > 3840 || input.shape[2] > 2160) return skipFrame; // cache disabled or input is invalid or too large for cache analysis\n\n /*\n const checkSum = await checksum(input);\n const diff = 100 * (Math.max(checkSum, last.inputSum) / Math.min(checkSum, last.inputSum) - 1);\n last.inputSum = checkSum;\n // if previous frame was skipped, skip this frame if changed more than cacheSensitivity\n // if previous frame was not skipped, then look for cacheSensitivity or difference larger than one in previous frame to avoid resetting cache in subsequent frames unnecessarily\n let skipFrame = diff < Math.max(config.cacheSensitivity, last.cacheDiff);\n // if difference is above 10x threshold, don't use last value to force reset cache for significant change of scenes or images\n last.cacheDiff = diff > 10 * config.cacheSensitivity ? 0 : diff;\n skipFrame = skipFrame && (last.cacheDiff > 0); // if no cached diff value then force no skip\n */\n\n if (!last.inputTensor) {\n last.inputTensor = tf.clone(input);\n } else if (last.inputTensor.shape[1] !== input.shape[1] || last.inputTensor.shape[2] !== input.shape[2]) { // input resolution changed\n tf.dispose(last.inputTensor);\n last.inputTensor = tf.clone(input);\n } else {\n const t: Record = {};\n t.diff = tf.sub(input, last.inputTensor);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input.shape[1] || 1) / (input.shape[2] || 1) / 255 / 3; // squared difference relative to input resolution and averaged per channel\n tf.dispose([last.inputTensor, t.diff, t.squared, t.sum]);\n last.inputTensor = tf.clone(input);\n skipFrame = diffRelative <= (config.cacheSensitivity || 0);\n }\n return skipFrame;\n}\n\nexport async function compare(config: Partial, input1: Tensor, input2: Tensor): Promise {\n const t: Record = {};\n if (!input1 || !input2 || input1.shape.length !== 4 || input1.shape.length !== input2.shape.length) {\n if (!config.debug) log('invalid input tensor or tensor shapes do not match:', input1.shape, input2.shape);\n return 0;\n }\n if (input1.shape[0] !== 1 || input2.shape[0] !== 1 || input1.shape[3] !== 3 || input2.shape[3] !== 3) {\n if (!config.debug) log('input tensors must be of shape [1, height, width, 3]:', input1.shape, input2.shape);\n return 0;\n }\n t.input1 = tf.clone(input1);\n t.input2 = (input1.shape[1] !== input2.shape[1] || input1.shape[2] !== input2.shape[2]) ? tf.image.resizeBilinear(input2 as Tensor3D, [input1.shape[1], input1.shape[2]]) : tf.clone(input2);\n t.diff = tf.sub(t.input1, t.input2);\n t.squared = tf.mul(t.diff, t.diff);\n t.sum = tf.sum(t.squared);\n const diffSum = await t.sum.data();\n const diffRelative = diffSum[0] / (input1.shape[1] || 1) / (input1.shape[2] || 1) / 255 / 3;\n tf.dispose([t.input1, t.input2, t.diff, t.squared, t.sum]);\n return diffRelative;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as image from '../image/image';\n\n/** Env class that holds detected capabilities */\nexport class Env {\n /** Running in Browser */\n browser: boolean;\n /** Running in NodeJS */\n node: boolean;\n /** Running in WebWorker thread */\n worker: boolean;\n /** Detected platform */\n platform: string = '';\n /** Detected agent */\n agent: string = '';\n /** List of supported backends */\n backends: string[] = [];\n /** Has any work been performed so far */\n initial: boolean;\n /** Are image filters supported? */\n filter: boolean | undefined;\n /** TFJS instance details */\n tfjs: {\n version: undefined | string,\n };\n /** Is offscreenCanvas supported? */\n offscreen: undefined | boolean;\n /** Are performance counter instant values or additive */\n perfadd: boolean = false;\n /** If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled */\n tensorflow: {\n version: undefined | string,\n gpu: undefined | boolean,\n } = {\n version: undefined,\n gpu: undefined,\n };\n /** WASM detected capabilities */\n wasm: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n simd: undefined | boolean,\n multithread: undefined | boolean,\n } = {\n supported: undefined,\n backend: undefined,\n simd: undefined,\n multithread: undefined,\n };\n /** WebGL detected capabilities */\n webgl: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n version: undefined | string,\n renderer: undefined | string,\n shader: undefined | string,\n vendor: undefined | string,\n } = {\n supported: undefined,\n backend: undefined,\n version: undefined,\n renderer: undefined,\n shader: undefined,\n vendor: undefined,\n };\n /** WebGPU detected capabilities */\n webgpu: {\n supported: undefined | boolean,\n backend: undefined | boolean,\n adapter: undefined | GPUAdapterInfo,\n } = {\n supported: undefined,\n backend: undefined,\n adapter: undefined,\n };\n /** CPU info */\n cpu: {\n model: undefined | string,\n flags: string[],\n } = {\n model: undefined,\n flags: [],\n };\n /** List of supported kernels for current backend */\n kernels: string[] = [];\n\n /** MonkeyPatch for Canvas/Image/ImageData */\n #canvas: undefined;\n #image: undefined;\n #imageData: undefined;\n\n get Canvas() { return this.#canvas; }\n set Canvas(val) { this.#canvas = val; globalThis.Canvas = val; }\n get Image() { return this.#image; }\n // @ts-ignore monkey-patch;\n set Image(val) { this.#image = val; globalThis.Image = val; }\n get ImageData() { return this.#imageData; }\n // @ts-ignore monkey-patch;\n set ImageData(val) { this.#imageData = val; globalThis.ImageData = val; }\n\n constructor() {\n this.browser = (typeof navigator !== 'undefined') && (typeof navigator.appVersion !== 'undefined');\n this.node = (typeof process !== 'undefined') && (typeof process.versions !== 'undefined') && (typeof process.versions.node !== 'undefined');\n this.tfjs = { version: tf.version['tfjs-core'] };\n this.offscreen = typeof OffscreenCanvas !== 'undefined';\n this.initial = true;\n\n // @ts-ignore WorkerGlobalScope evaluated in browser only\n this.worker = this.browser && this.offscreen ? (typeof WorkerGlobalScope !== 'undefined') : undefined;\n if ((typeof navigator !== 'undefined') && (typeof navigator.userAgent !== 'undefined')) { // TBD replace with navigator.userAgentData once in mainline\n const agent = navigator.userAgent || '';\n const raw = agent.match(/\\(([^()]+)\\)/g);\n if (raw?.[0]) {\n const platformMatch = raw[0].match(/\\(([^()]+)\\)/g);\n this.platform = (platformMatch?.[0]) ? platformMatch[0].replace(/\\(|\\)/g, '') : '';\n this.agent = agent.replace(raw[0], '');\n if (this.platform[1]) this.agent = this.agent.replace(raw[1], '');\n this.agent = this.agent.replace(/ /g, ' ');\n }\n } else if (typeof process !== 'undefined') {\n this.platform = `${process.platform} ${process.arch}`;\n this.agent = `NodeJS ${process.version}`;\n }\n }\n\n /** update backend information */\n async updateBackend() {\n // analyze backends\n this.backends = Object.keys(tf.engine().registryFactory);\n try { // backend may not be initialized\n this.tensorflow = {\n version: (tf.backend()['binding'] ? tf.backend()['binding'].TF_Version : undefined),\n gpu: (tf.backend()['binding'] ? tf.backend()['binding'].isUsingGpuDevice() : undefined),\n };\n } catch { /**/ }\n this.wasm.supported = typeof WebAssembly !== 'undefined';\n this.wasm.backend = this.backends.includes('wasm');\n if (this.wasm.supported && this.wasm.backend) {\n this.wasm.simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n this.wasm.multithread = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n }\n const c = image.canvas(100, 100);\n const gl = c ? c.getContext('webgl2') as WebGL2RenderingContext : undefined; // causes too many gl contexts\n this.webgl.supported = typeof gl !== 'undefined';\n this.webgl.backend = this.backends.includes('webgl');\n if (this.webgl.supported && this.webgl.backend && gl) {\n this.webgl.version = gl.getParameter(gl.VERSION);\n this.webgl.vendor = gl.getParameter(gl.VENDOR);\n this.webgl.renderer = gl.getParameter(gl.RENDERER);\n this.webgl.shader = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\n }\n this.webgpu.supported = this.browser && typeof navigator !== 'undefined' && typeof navigator.gpu !== 'undefined';\n this.webgpu.backend = this.backends.includes('webgpu');\n try {\n if (this.webgpu.supported) {\n const adapter = await navigator.gpu.requestAdapter();\n this.webgpu.adapter = await adapter?.requestAdapterInfo();\n }\n } catch {\n this.webgpu.supported = false;\n }\n try {\n this.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase());\n } catch { /**/ }\n }\n\n /** update cpu information */\n updateCPU() {\n const cpu = { model: '', flags: [] };\n if (this.node && this.platform.startsWith('linux')) {\n /*\n const fs = require('fs');\n try {\n const data = fs.readFileSync('/proc/cpuinfo').toString();\n for (const line of data.split('\\n')) {\n if (line.startsWith('model name')) cpu.model = line.match(/:(.*)/g)[0].replace(':', '').trim();\n if (line.startsWith('flags')) cpu.flags = line.match(/:(.*)/g)[0].replace(':', '').trim().split(' ').sort();\n }\n } catch { }\n */\n }\n if (!this.cpu) Object.defineProperty(this, 'cpu', { value: cpu });\n else this.cpu = cpu;\n }\n}\n\nexport const env = new Env();\n", "import { log } from './util';\n\n// const log = (...msg) => console.log('webcam', ...msg); // eslint-disable-line no-console\n\n/** WebCam configuration */\nexport interface WebCamConfig {\n /**\n * element can be:\n * - string which indicates dom element id\n * - actual HTMLVideo dom element\n * - undefined in which case a new HTMLVideoElement will be created\n */\n element: string | HTMLVideoElement | undefined,\n /** print messages on console */\n debug: boolean,\n /** use front or back camera */\n mode: 'front' | 'back',\n /** camera crop mode */\n crop: boolean,\n /** desired webcam width */\n width: number,\n /** desired webcam height */\n height: number,\n /** deviceId of the video device to use */\n id?: string,\n}\n\nexport class WebCam { // eslint-disable-line @typescript-eslint/no-extraneous-class\n /** current webcam configuration */\n config: WebCamConfig;\n /** instance of dom element associated with webcam stream */\n element: HTMLVideoElement | undefined;\n /** active webcam stream */\n stream: MediaStream | undefined;\n /** enumerated video devices */\n devices: MediaDeviceInfo[] = [];\n\n constructor() {\n this.config = {\n element: undefined,\n debug: true,\n mode: 'front',\n crop: false,\n width: 0,\n height: 0,\n };\n }\n\n /** get active webcam stream track */\n public get track(): MediaStreamTrack | undefined {\n if (!this.stream) return undefined;\n return this.stream.getVideoTracks()[0];\n }\n\n /** get webcam capabilities */\n public get capabilities(): MediaTrackCapabilities | undefined {\n if (!this.track) return undefined;\n return this.track.getCapabilities ? this.track.getCapabilities() : undefined;\n }\n\n /** get webcam constraints */\n public get constraints(): MediaTrackConstraints | undefined {\n if (!this.track) return undefined;\n return this.track.getConstraints ? this.track.getConstraints() : undefined;\n }\n\n /** get webcam settings */\n public get settings(): MediaTrackSettings | undefined {\n if (!this.stream) return undefined;\n const track: MediaStreamTrack = this.stream.getVideoTracks()[0];\n return track.getSettings ? track.getSettings() : undefined;\n }\n\n /** get webcam label */\n public get label(): string {\n if (!this.track) return '';\n return this.track.label;\n }\n\n /** is webcam paused */\n public get paused(): boolean {\n return this.element?.paused || false;\n }\n\n /** webcam current width */\n public get width(): number {\n return this.element?.videoWidth || 0;\n }\n\n /** webcam current height */\n public get height(): number {\n return this.element?.videoHeight || 0;\n }\n\n public enumerate = async (): Promise => {\n try {\n const devices = await navigator.mediaDevices.enumerateDevices();\n this.devices = devices.filter((device) => device.kind === 'videoinput');\n } catch {\n this.devices = [];\n }\n return this.devices;\n };\n\n /** start method initializizes webcam stream and associates it with a dom video element */\n public start = async (webcamConfig?: Partial): Promise => {\n // set config\n if (webcamConfig?.debug) this.config.debug = webcamConfig?.debug;\n if (webcamConfig?.crop) this.config.crop = webcamConfig?.crop;\n if (webcamConfig?.mode) this.config.mode = webcamConfig?.mode;\n if (webcamConfig?.width) this.config.width = webcamConfig?.width;\n if (webcamConfig?.height) this.config.height = webcamConfig?.height;\n if (webcamConfig?.id) this.config.id = webcamConfig?.id;\n\n // use or create dom element\n if (webcamConfig?.element) {\n if (typeof webcamConfig.element === 'string') {\n const el = document.getElementById(webcamConfig.element);\n if (el && el instanceof HTMLVideoElement) {\n this.element = el;\n } else {\n if (this.config.debug) log('webcam', 'cannot get dom element', webcamConfig.element);\n return `webcam error: cannot get dom element: ${webcamConfig.element}`;\n }\n } else if (webcamConfig.element instanceof HTMLVideoElement) {\n this.element = webcamConfig.element;\n } else {\n if (this.config.debug) log('webcam', 'unknown dom element', webcamConfig.element);\n return `webcam error: unknown dom element: ${webcamConfig.element}`;\n }\n } else {\n this.element = document.createElement('video');\n }\n\n // set constraints to use\n const requestedConstraints: MediaStreamConstraints = {\n audio: false,\n video: {\n facingMode: this.config.mode === 'front' ? 'user' : 'environment',\n // @ts-ignore // resizeMode is still not defined in tslib\n resizeMode: this.config.crop ? 'crop-and-scale' : 'none',\n },\n };\n if (this.config?.width > 0) (requestedConstraints.video as MediaTrackConstraints).width = { ideal: this.config.width };\n if (this.config?.height > 0) (requestedConstraints.video as MediaTrackConstraints).height = { ideal: this.config.height };\n if (this.config.id) (requestedConstraints.video as MediaTrackConstraintSet).deviceId = this.config.id;\n\n // set default event listeners\n this.element.addEventListener('play', () => { if (this.config.debug) log('webcam', 'play'); });\n this.element.addEventListener('pause', () => { if (this.config.debug) log('webcam', 'pause'); });\n this.element.addEventListener('click', async () => { // pause when clicked on screen and resume on next click\n if (!this.element || !this.stream) return;\n if (this.element.paused) await this.element.play();\n else this.element.pause();\n });\n\n // get webcam and set it to run in dom element\n if (!navigator?.mediaDevices) {\n if (this.config.debug) log('webcam error', 'no devices');\n return 'webcam error: no devices';\n }\n try {\n this.stream = await navigator.mediaDevices.getUserMedia(requestedConstraints); // get stream that satisfies constraints\n } catch (err) {\n log('webcam', err);\n return `webcam error: ${err}`;\n }\n if (!this.stream) {\n if (this.config.debug) log('webcam error', 'no stream');\n return 'webcam error no stream';\n }\n this.element.srcObject = this.stream; // assign it to dom element\n const ready = new Promise((resolve) => { // wait until stream is ready\n if (!this.element) resolve(false);\n else this.element.onloadeddata = () => resolve(true);\n });\n await ready;\n await this.element.play(); // start playing\n\n if (this.config.debug) {\n log('webcam', {\n width: this.width,\n height: this.height,\n label: this.label,\n stream: this.stream,\n track: this.track,\n settings: this.settings,\n constraints: this.constraints,\n capabilities: this.capabilities,\n });\n }\n return `webcam: ${this.label}`;\n };\n\n /** pause webcam video method */\n public pause = (): void => {\n if (this.element) this.element.pause();\n };\n\n /** play webcam video method */\n public play = async (): Promise => {\n if (this.element) await this.element.play();\n };\n\n /** stop method stops active webcam stream track and disconnects webcam */\n public stop = (): void => {\n if (this.config.debug) log('webcam', 'stop');\n if (this.track) this.track.stop();\n };\n}\n", "{\n \"antispoof\": 853098,\n \"blazeface\": 538928,\n \"centernet\": 4030290,\n \"emotion\": 820516,\n \"facemesh\": 1477958,\n \"faceres\": 6978814,\n \"handlandmark-lite\": 2023432,\n \"handtrack\": 2964837,\n \"iris\": 2599092,\n \"liveness\": 592976,\n \"models\": 0,\n \"movenet-lightning\": 4650216,\n \"affectnet-mobilenet\": 6920630,\n \"age\": 161240,\n \"blazeface-back\": 538928,\n \"blazeface-front\": 402048,\n \"blazepose-detector\": 5928856,\n \"blazepose-full\": 6339202,\n \"blazepose-heavy\": 27502466,\n \"blazepose-lite\": 2726402,\n \"efficientpose\": 5651240,\n \"faceboxes\": 2013002,\n \"facemesh-attention-pinto\": 2387598,\n \"facemesh-attention\": 2382414,\n \"facemesh-detection-full\": 1026192,\n \"facemesh-detection-short\": 201268,\n \"faceres-deep\": 13957620,\n \"gear-e1\": 112438,\n \"gear-e2\": 112438,\n \"gear\": 1498916,\n \"gender-ssrnet-imdb\": 161236,\n \"gender\": 201808,\n \"handdetect\": 3515612,\n \"handlandmark-full\": 5431368,\n \"handlandmark-sparse\": 5286322,\n \"handskeleton\": 5502280,\n \"meet\": 372228,\n \"mobileface\": 2183192,\n \"mobilefacenet\": 5171976,\n \"movenet-multipose\": 9448838,\n \"movenet-thunder\": 12477112,\n \"nanodet\": 7574558,\n \"posenet\": 5032780,\n \"rvm\": 3739355,\n \"selfie\": 212886,\n \"anti-spoofing\": 853098,\n \"efficientpose-i-lite\": 2269064,\n \"efficientpose-ii-lite\": 5651240,\n \"efficientpose-iv\": 25643252,\n \"insightface-efficientnet-b0\": 13013224,\n \"insightface-ghostnet-strides1\": 8093408,\n \"insightface-ghostnet-strides2\": 8049584,\n \"insightface-mobilenet-emore\": 6938536,\n \"insightface-mobilenet-swish\": 12168584,\n \"nanodet-e\": 12319156,\n \"nanodet-g\": 7574558,\n \"nanodet-m\": 1887474,\n \"nanodet-t\": 5294216\n}", "import * as tf from 'dist/tfjs.esm.js';\nimport { log, join } from '../util/util';\nimport type { GraphModel } from './types';\nimport type { Config } from '../config';\nimport * as modelsDefs from '../../models/models.json';\n\nconst options = {\n cacheModels: true,\n cacheSupported: true,\n verbose: true,\n debug: false,\n modelBasePath: '',\n};\n\nexport interface ModelInfo {\n name: string,\n inCache: boolean,\n sizeDesired: number,\n sizeFromManifest: number,\n sizeLoadedWeights: number,\n url: string,\n}\n\nexport const modelStats: Record = {};\n\nasync function httpHandler(url: string, init?: RequestInit): Promise {\n if (options.debug) log('load model fetch:', url, init);\n return fetch(url, init);\n}\n\nexport function setModelLoadOptions(config: Config) {\n options.cacheModels = config.cacheModels;\n options.verbose = config.debug;\n options.modelBasePath = config.modelBasePath;\n}\n\nexport async function loadModel(modelPath: string | undefined): Promise {\n let modelUrl = join(options.modelBasePath, modelPath || '');\n if (!modelUrl.toLowerCase().endsWith('.json')) modelUrl += '.json';\n const modelPathSegments = modelUrl.includes('/') ? modelUrl.split('/') : modelUrl.split('\\\\');\n const shortModelName = modelPathSegments[modelPathSegments.length - 1].replace('.json', '');\n const cachedModelName = 'indexeddb://' + shortModelName; // generate short model name for cache\n modelStats[shortModelName] = {\n name: shortModelName,\n sizeFromManifest: 0,\n sizeLoadedWeights: 0,\n sizeDesired: modelsDefs[shortModelName],\n inCache: false,\n url: '',\n };\n options.cacheSupported = (typeof indexedDB !== 'undefined'); // check if localStorage and indexedb are available\n let cachedModels = {};\n try {\n cachedModels = (options.cacheSupported && options.cacheModels) ? await tf.io.listModels() : {}; // list all models already in cache // this fails for webview although localStorage is defined\n } catch {\n options.cacheSupported = false;\n }\n modelStats[shortModelName].inCache = (options.cacheSupported && options.cacheModels) && Object.keys(cachedModels).includes(cachedModelName); // is model found in cache\n modelStats[shortModelName].url = modelStats[shortModelName].inCache ? cachedModelName : modelUrl;\n const tfLoadOptions = typeof fetch === 'undefined' ? {} : { fetchFunc: (url: string, init?: RequestInit) => httpHandler(url, init) };\n let model: GraphModel = new tf.GraphModel(modelStats[shortModelName].url, tfLoadOptions) as unknown as GraphModel; // create model prototype and decide if load from cache or from original modelurl\n let loaded = false;\n try {\n // @ts-ignore private function\n model.findIOHandler(); // decide how to actually load a model\n if (options.debug) log('model load handler:', model['handler']);\n } catch (err) {\n log('error finding model i/o handler:', modelUrl, err);\n }\n try {\n // @ts-ignore private property\n const artifacts = await model.handler?.load() || null; // load manifest\n modelStats[shortModelName].sizeFromManifest = artifacts?.weightData?.byteLength || 0;\n if (artifacts) model.loadSync(artifacts); // load weights\n else model = await tf.loadGraphModel(modelStats[shortModelName].inCache ? cachedModelName : modelUrl, tfLoadOptions) as unknown as GraphModel;\n // @ts-ignore private property\n modelStats[shortModelName].sizeLoadedWeights = model.artifacts?.weightData?.byteLength || 0;\n if (options.verbose) log('load:', { model: shortModelName, url: model['modelUrl'], bytes: modelStats[shortModelName].sizeLoadedWeights });\n loaded = true;\n } catch (err) {\n log('error loading model:', modelUrl, err);\n }\n if (loaded && options.cacheModels && options.cacheSupported && !modelStats[shortModelName].inCache) { // save model to cache\n try {\n const saveResult = await model.save(cachedModelName);\n if (options.debug) log('model saved:', cachedModelName, saveResult);\n } catch (err) {\n log('error saving model:', modelUrl, err);\n }\n }\n return model;\n}\n", "{\n \"name\": \"@vladmandic/human\",\n \"version\": \"3.2.2\",\n \"description\": \"Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition\",\n \"sideEffects\": false,\n \"main\": \"dist/human.node.js\",\n \"module\": \"dist/human.esm.js\",\n \"browser\": \"dist/human.esm.js\",\n \"types\": \"types/human.d.ts\",\n \"exports\": {\n \"node\": {\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.node.js\",\n \"module\": \"./dist/human.node.js\"\n },\n \"require\": \"./dist/human.node.js\",\n \"import\": \"./dist/human.esm.js\",\n \"script\": \"./dist/human.js\",\n \"module\": \"./dist/human.esm.js\",\n \"types\": \"./types/human.d.ts\",\n \"dist/human\": \"./dist/human.js\",\n \"dist/human.js\": \"./dist/human.js\",\n \"dist/human.esm\": \"./dist/human.esm.js\",\n \"dist/human.esm.js\": \"./dist/human.esm.js\",\n \"dist/human.esm-nobundle\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.esm-nobundle.js\": \"./dist/human.esm-nobundle.js\",\n \"dist/human.node\": \"./dist/human.node.js\",\n \"dist/human.node.js\": \"./dist/human.node.js\",\n \"dist/human.node-wasm\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-wasm.js\": \"./dist/human.node-wasm.js\",\n \"dist/human.node-gpu\": \"./dist/human.node-gpu.js\",\n \"dist/human.node-gpu.js\": \"./dist/human.node-gpu.js\"\n },\n \"author\": \"Vladimir Mandic \",\n \"bugs\": {\n \"url\": \"https://github.com/vladmandic/human/issues\"\n },\n \"homepage\": \"https://vladmandic.github.io/human/demo/index.html\",\n \"license\": \"MIT\",\n \"engines\": {\n \"node\": \">=14.0.0\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/vladmandic/human.git\"\n },\n \"scripts\": {\n \"start\": \"node --no-warnings demo/nodejs/node.js\",\n \"dev\": \"build --profile development\",\n \"clean\": \"build --profile clean\",\n \"build\": \"rimraf test/build.log && node build.js\",\n \"test\": \"node --no-warnings --unhandled-rejections=strict --trace-uncaught test/node.js\",\n \"lint\": \"eslint *.json *.js src demo test models wiki\",\n \"scan\": \"npx auditjs@latest ossi --dev --quiet\"\n },\n \"keywords\": [\n \"human\",\n \"human-library\",\n \"face-detection\",\n \"faceid\",\n \"face-geometry\",\n \"face-embedding\",\n \"face-recognition\",\n \"face-description\",\n \"face-matching\",\n \"body-tracking\",\n \"body-segmentation\",\n \"hand-tracking\",\n \"iris-tracking\",\n \"age-estimation\",\n \"emotion-detection\",\n \"gender-prediction\",\n \"gesture-recognition\",\n \"gaze-tracking\",\n \"age-gender\",\n \"tensorflowjs\",\n \"tfjs\",\n \"tensorflow\"\n ],\n \"devDependencies\": {\n \"@html-eslint/eslint-plugin\": \"^0.24.1\",\n \"@html-eslint/parser\": \"^0.24.1\",\n \"@microsoft/api-extractor\": \"^7.43.1\",\n \"@tensorflow/tfjs-backend-cpu\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-wasm\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgl\": \"^4.17.0\",\n \"@tensorflow/tfjs-backend-webgpu\": \"4.17.0\",\n \"@tensorflow/tfjs-converter\": \"^4.17.0\",\n \"@tensorflow/tfjs-core\": \"^4.17.0\",\n \"@tensorflow/tfjs-data\": \"^4.17.0\",\n \"@tensorflow/tfjs-layers\": \"^4.17.0\",\n \"@tensorflow/tfjs-node\": \"^4.17.0\",\n \"@tensorflow/tfjs-node-gpu\": \"^4.17.0\",\n \"@types/emscripten\": \"^1.39.10\",\n \"@types/node\": \"^20.12.7\",\n \"@types/offscreencanvas\": \"^2019.7.3\",\n \"@typescript-eslint/eslint-plugin\": \"^7.7.0\",\n \"@typescript-eslint/parser\": \"^7.7.0\",\n \"@vladmandic/build\": \"^0.9.3\",\n \"@vladmandic/pilogger\": \"^0.4.9\",\n \"@vladmandic/tfjs\": \"github:vladmandic/tfjs\",\n \"canvas\": \"^2.11.2\",\n \"esbuild\": \"^0.20.2\",\n \"eslint\": \"9.0.0\",\n \"eslint-config-airbnb-base\": \"^15.0.0\",\n \"eslint-plugin-html\": \"^8.1.0\",\n \"eslint-plugin-import\": \"^2.29.1\",\n \"eslint-plugin-json\": \"^3.1.0\",\n \"eslint-plugin-markdown\": \"^4.0.1\",\n \"eslint-plugin-node\": \"^11.1.0\",\n \"eslint-plugin-promise\": \"^6.1.1\",\n \"rimraf\": \"^5.0.5\",\n \"tslib\": \"^2.6.2\",\n \"typedoc\": \"0.25.13\",\n \"typescript\": \"~5.4.5\"\n }\n}\n", "/** TFJS custom backend registration */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human } from '../human';\nimport { log } from '../util/util';\nimport * as image from '../image/image';\nimport type { AnyCanvas } from '../exports';\n\nexport const config = {\n name: 'humangl',\n priority: 999,\n canvas: null as null | AnyCanvas,\n gl: null as null | WebGL2RenderingContext,\n extensions: [] as string[] | null,\n webGLattr: { // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2\n alpha: false,\n antialias: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: false,\n stencil: false,\n failIfMajorPerformanceCaveat: false, // default=true\n desynchronized: true, // default=undefined\n },\n};\n\nfunction extensions(): void {\n /*\n https://www.khronos.org/registry/webgl/extensions/\n https://webglreport.com/?v=2\n */\n const gl = config.gl;\n if (!gl) return;\n config.extensions = gl.getSupportedExtensions();\n // gl.getExtension('KHR_parallel_shader_compile');\n}\n\n/**\n * Registers custom WebGL2 backend to be used by Human library\n *\n * @returns void\n */\nexport function register(instance: Human): void {\n // force backend reload if gl context is not valid\n if (instance.config.backend !== 'humangl') return;\n if ((config.name in tf.engine().registry) && !config?.gl?.getParameter(config.gl.VERSION)) {\n log('humangl error: backend invalid context');\n instance.models.reset();\n /*\n log('resetting humangl backend');\n await tf.removeBackend(config.name);\n await register(instance); // re-register\n */\n }\n if (!tf.findBackend(config.name)) {\n try {\n config.canvas = image.canvas(100, 100);\n } catch (err) {\n log('humangl error: cannot create canvas:', err);\n return;\n }\n try {\n config.gl = config.canvas.getContext('webgl2', config.webGLattr) as WebGL2RenderingContext;\n if (!config.gl) {\n log('humangl error: cannot get webgl context');\n return;\n }\n const glv2 = config.gl.getParameter(config.gl.VERSION).includes('2.0');\n if (!glv2) {\n log('backend override: using fallback webgl backend as webgl 2.0 is not detected');\n instance.config.backend = 'webgl';\n return;\n }\n if (config.canvas) {\n config.canvas.addEventListener('webglcontextlost', (e) => {\n log('humangl error:', e.type);\n log('possible browser memory leak using webgl or conflict with multiple backend registrations');\n instance.emit('error');\n throw new Error('backend error: webgl context lost');\n });\n config.canvas.addEventListener('webglcontextrestored', (e) => {\n log('humangl error: context restored:', e);\n });\n config.canvas.addEventListener('webglcontextcreationerror', (e) => {\n log('humangl error: context create:', e);\n });\n }\n } catch (err) {\n log('humangl error: cannot get webgl context:', err);\n return;\n }\n try {\n tf.setWebGLContext(2, config.gl);\n } catch (err) {\n log('humangl error: cannot set webgl context:', err);\n return;\n }\n try {\n const ctx = new tf.GPGPUContext(config.gl);\n // @ts-ignore uncompatible kernelMs timing info\n tf.registerBackend(config.name, () => new tf.MathBackendWebGL(ctx), config.priority);\n } catch (err) {\n log('humangl error: cannot register webgl backend:', err);\n return;\n }\n try {\n const kernels = tf.getKernelsForBackend('webgl');\n kernels.forEach((kernelConfig) => {\n const newKernelConfig = { ...kernelConfig, backendName: config.name };\n tf.registerKernel(newKernelConfig);\n });\n } catch (err) {\n log('humangl error: cannot update webgl backend registration:', err);\n return;\n }\n try {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_VERSION) tf.env().set('WEBGL_VERSION', 2);\n } catch (err) {\n log('humangl error: cannot set WebGL backend flags:', err);\n return;\n }\n extensions();\n const backend = tf.backend();\n const current = typeof backend['gpgpu'] !== 'undefined' ? backend['getGPGPUContext']().gl : null;\n if (current) {\n if (instance.config.debug) log('humangl backend registered:', { webgl: current.getParameter(current.VERSION) as string, renderer: current.getParameter(current.RENDERER) as string });\n } else {\n log('humangl error: no current gl context:', current, config.gl);\n }\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Tensor } from './types';\n\nexport const constants: Record = {\n tf255: 255.0,\n tf1: 1.0,\n tf2: 2.0,\n tf05: 0.5,\n tf127: 127.5,\n rgb: [0.2989, 0.5870, 0.1140],\n};\n\nexport function init() {\n constants.tf255 = tf.scalar(255.0, 'float32');\n constants.tf1 = tf.scalar(1.0, 'float32');\n constants.tf2 = tf.scalar(2.0, 'float32');\n constants.tf05 = tf.scalar(0.5, 'float32');\n constants.tf127 = tf.scalar(127.5, 'float32');\n constants.rgb = tf.tensor1d([0.2989, 0.5870, 0.1140], 'float32'); // factors for red/green/blue colors when converting to grayscale\n}\n", "/** TFJS backend initialization and customization */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Human, Config, BackendEnum } from '../human';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as humangl from './humangl';\nimport * as constants from './constants';\nimport type { TensorInfo } from './types';\n\nexport async function getBestBackend(): Promise {\n await env.updateBackend(); // update env on backend init\n if (env.tensorflow?.version) return 'tensorflow';\n if (env.webgpu.supported && env.webgpu.backend) return 'webgpu';\n if (env.webgl.supported && env.webgl.backend) return 'webgl';\n if (env.wasm.supported && env.wasm.backend) return 'wasm';\n return 'cpu';\n}\n\nfunction registerCustomOps(config: Config) {\n const newKernels: string[] = [];\n if (!env.kernels.includes('mod')) {\n const kernelMod = {\n kernelName: 'Mod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.sub(op.inputs.a, tf.mul(tf.div(op.inputs.a, op.inputs.b), op.inputs.b))),\n };\n tf.registerKernel(kernelMod);\n env.kernels.push('mod');\n newKernels.push('mod');\n }\n if (!env.kernels.includes('floormod')) {\n const kernelFloorMod = {\n kernelName: 'FloorMod',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => tf.add(tf.mul(tf.floorDiv(op.inputs.a, op.inputs.b), op.inputs.b), tf.mod(op.inputs.a, op.inputs.b))),\n };\n tf.registerKernel(kernelFloorMod);\n env.kernels.push('floormod');\n newKernels.push('floormod');\n }\n /*\n if (!env.kernels.includes('atan2') && config.softwareKernels) {\n const kernelAtan2 = {\n kernelName: 'Atan2',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu');\n const t = tf.atan2(op.inputs.a, op.inputs.b);\n tf.setBackend(backend);\n return t;\n }),\n };\n if (config.debug) log('registered kernel:', 'atan2');\n log('registered kernel:', 'atan2');\n tf.registerKernel(kernelAtan2);\n env.kernels.push('atan2');\n newKernels.push('atan2');\n }\n */\n if (!env.kernels.includes('rotatewithoffset') && config.softwareKernels) {\n const kernelRotateWithOffset = {\n kernelName: 'RotateWithOffset',\n backendName: tf.getBackend(),\n kernelFunc: (op) => tf.tidy(() => {\n const backend = tf.getBackend();\n tf.setBackend('cpu'); // eslint-disable-line @typescript-eslint/no-floating-promises\n const t = tf.image.rotateWithOffset(op.inputs.image, op.attrs.radians, op.attrs.fillValue, op.attrs.center);\n tf.setBackend(backend); // eslint-disable-line @typescript-eslint/no-floating-promises\n return t;\n }),\n };\n tf.registerKernel(kernelRotateWithOffset);\n env.kernels.push('rotatewithoffset');\n newKernels.push('rotatewithoffset');\n }\n if ((newKernels.length > 0) && config.debug) log('registered kernels:', newKernels);\n}\n\nlet defaultFlags: Record = {};\n\nexport async function check(instance: Human, force = false) {\n instance.state = 'backend';\n if (instance.config.backend?.length === 0) instance.config.backend = await getBestBackend();\n if (force || env.initial || (instance.config.backend && (instance.config.backend.length > 0) && (tf.getBackend() !== instance.config.backend))) {\n const timeStamp = now();\n\n if (instance.config.backend && instance.config.backend.length > 0) {\n // detect web worker\n // @ts-ignore ignore missing type for WorkerGlobalScope as that is the point\n if (typeof window === 'undefined' && typeof WorkerGlobalScope !== 'undefined' && instance.config.debug) {\n if (instance.config.debug) log('running inside web worker');\n }\n\n if (typeof navigator !== 'undefined' && navigator?.userAgent?.toLowerCase().includes('electron')) {\n if (instance.config.debug) log('running inside electron');\n }\n\n // check available backends\n let available = Object.keys(tf.engine().registryFactory as Record);\n if (instance.config.backend === 'humangl' && !available.includes('humangl')) {\n humangl.register(instance);\n available = Object.keys(tf.engine().registryFactory as Record);\n }\n if (instance.config.debug) log('available backends:', available);\n\n // force browser vs node backend\n if (env.browser && !env.node && (instance.config.backend === 'tensorflow') && available.includes('webgl')) {\n if (instance.config.debug) log('override: backend set to tensorflow while running in browser');\n instance.config.backend = 'webgl';\n }\n if (env.node && !env.browser && (instance.config.backend === 'webgl' || instance.config.backend === 'humangl') && available.includes('tensorflow')) {\n if (instance.config.debug) log(`override: backend set to ${instance.config.backend} while running in nodejs`);\n instance.config.backend = 'tensorflow';\n }\n\n // handle webgpu\n if (env.browser && instance.config.backend === 'webgpu') {\n if (typeof navigator === 'undefined' || typeof navigator.gpu === 'undefined') {\n log('override: backend set to webgpu but browser does not support webgpu');\n instance.config.backend = 'webgl';\n } else {\n const adapter = await navigator.gpu.requestAdapter();\n if (instance.config.debug) log('enumerated webgpu adapter:', adapter);\n if (!adapter) {\n log('override: backend set to webgpu but browser reports no available gpu');\n instance.config.backend = 'webgl';\n } else {\n // @ts-ignore requestAdapterInfo is not in tslib\n const adapterInfo = 'requestAdapterInfo' in adapter ? await adapter.requestAdapterInfo() : undefined;\n // if (adapter.features) adapter.features.forEach((feature) => log('webgpu features:', feature));\n log('webgpu adapter info:', adapterInfo);\n }\n }\n }\n\n if (!available.includes(instance.config.backend)) {\n log(`error: backend ${instance.config.backend} not found in registry`);\n instance.config.backend = env.node ? 'tensorflow' : 'webgl';\n if (instance.config.debug) log(`override: setting backend ${instance.config.backend}`);\n }\n\n if (instance.config.debug) log('setting backend:', [instance.config.backend]);\n\n // customize wasm\n if (instance.config.backend === 'wasm') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY) tf.env().set('CANVAS2D_WILL_READ_FREQUENTLY', true);\n if (instance.config.debug) log('wasm path:', instance.config.wasmPath);\n if (typeof tf.setWasmPaths !== 'undefined') tf.setWasmPaths(instance.config.wasmPath, instance.config.wasmPlatformFetch);\n else throw new Error('backend error: attempting to use wasm backend but wasm path is not set');\n let mt = false;\n let simd = false;\n try {\n mt = await tf.env().getAsync('WASM_HAS_MULTITHREAD_SUPPORT') as boolean;\n simd = await tf.env().getAsync('WASM_HAS_SIMD_SUPPORT') as boolean;\n if (instance.config.debug) log(`wasm execution: ${simd ? 'simd' : 'no simd'} ${mt ? 'multithreaded' : 'singlethreaded'}`);\n if (instance.config.debug && !simd) log('warning: wasm simd support is not enabled');\n } catch {\n log('wasm detection failed');\n }\n }\n\n try {\n await tf.setBackend(instance.config.backend);\n await tf.ready();\n } catch (err) {\n log('error: cannot set backend:', instance.config.backend, err);\n return false;\n }\n // @ts-ignore private property\n if (instance.config.debug) defaultFlags = JSON.parse(JSON.stringify(tf.env().flags));\n }\n\n // customize humangl\n if (tf.getBackend() === 'humangl' || tf.getBackend() === 'webgl') {\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', true); // default=false \n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_EXP_CONV) tf.env().set('WEBGL_EXP_CONV', true); // default=false \n // if (tf.env().flagRegistry['WEBGL_PACK_DEPTHWISECONV']) tf.env().set('WEBGL_PACK_DEPTHWISECONV', false); // default=true \n // if (tf.env().flagRegistry.USE_SETTIMEOUTCUSTOM) tf.env().set('USE_SETTIMEOUTCUSTOM', true); // default=false \n // if (tf.env().flagRegistry.CPU_HANDOFF_SIZE_THRESHOLD) tf.env().set('CPU_HANDOFF_SIZE_THRESHOLD', 1024); // default=1000\n // if (tf.env().flagRegistry['WEBGL_FORCE_F16_TEXTURES'] && !instance.config.object.enabled) tf.env().set('WEBGL_FORCE_F16_TEXTURES', true); // safe to use 16bit precision\n if (instance.config.debug && typeof instance.config.deallocate !== 'undefined' && instance.config.deallocate) { // hidden param\n log('changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:', true);\n tf.env().set('WEBGL_DELETE_TEXTURE_THRESHOLD', 0);\n }\n }\n\n // customize webgpu\n if (tf.getBackend() === 'webgpu') {\n // if (tf.env().flagRegistry['WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD']) tf.env().set('WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD', 512);\n // if (tf.env().flagRegistry['WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE']) tf.env().set('WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE', 0);\n // if (tf.env().flagRegistry['WEBGPU_CPU_FORWARD']) tf.env().set('WEBGPU_CPU_FORWARD', true);\n }\n\n if (instance.config.debug) {\n // @ts-ignore private property\n const newFlags = tf.env().flags;\n const updatedFlags = {};\n for (const key of Object.keys(newFlags)) {\n if (defaultFlags[key] === newFlags[key]) continue;\n updatedFlags[key] = newFlags[key];\n }\n if (instance.config.debug && Object.keys(updatedFlags).length > 0) log('backend:', tf.getBackend(), 'flags:', updatedFlags);\n }\n\n if (instance.config.flags && Object.keys(instance.config.flags).length > 0) {\n if (instance.config.debug) log('flags:', instance.config['flags']);\n for (const [key, val] of Object.entries(instance.config.flags)) {\n tf.env().set(key, val as number | boolean);\n }\n }\n\n tf.enableProdMode();\n constants.init();\n instance.performance.initBackend = Math.trunc(now() - timeStamp);\n instance.config.backend = tf.getBackend() as BackendEnum;\n await env.updateBackend(); // update env on backend init\n registerCustomOps(instance.config);\n // await env.updateBackend(); // update env on backend init\n // env.initial = false;\n }\n return true;\n}\n\n// register fake missing tfjs ops\nexport function fakeOps(kernelNames: string[], config) {\n // if (config.debug) log('registerKernel:', kernelNames);\n for (const kernelName of kernelNames) {\n const kernelConfig = {\n kernelName,\n backendName: config.backend,\n kernelFunc: (param): TensorInfo => {\n if (config.debug) log('kernelFunc', kernelName, config.backend, param);\n return param?.inputs?.info as TensorInfo;\n },\n // setupFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n // disposeFunc: () => { if (config.debug) log('kernelFunc', kernelName, config.backend); },\n };\n tf.registerKernel(kernelConfig);\n }\n env.kernels = tf.getKernelsForBackend(tf.getBackend()).map((kernel) => kernel.kernelName.toLowerCase()); // re-scan registered ops\n}\n", "/**\n * Module that implements helper draw functions, exposed as human.draw\n */\n\nimport { mergeDeep, now } from '../util/util';\nimport { env } from '../util/env';\nimport { getCanvasContext, rect } from './primitives';\nimport { options } from './options';\nimport { face } from './face';\nimport { body } from './body';\nimport { hand } from './hand';\nimport { object } from './object';\nimport { gesture } from './gesture';\nimport { defaultLabels } from './labels';\nimport type { Result, PersonResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet drawTime = 0;\n\nexport { options } from './options';\nexport { face } from './face';\nexport { body } from './body';\nexport { hand } from './hand';\nexport { object } from './object';\nexport { gesture } from './gesture';\n\n/** draw combined person results instead of individual detection result objects */\nexport function person(inCanvas: AnyCanvas, result: PersonResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n\n for (let i = 0; i < result.length; i++) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels) {\n const label = `person #${i}`;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(label, result[i].box[0] + 3, 1 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(label, result[i].box[0] + 2, 0 + result[i].box[1] + localOptions.lineHeight, result[i].box[2]);\n }\n ctx.stroke();\n }\n }\n}\n\n/** draw processed canvas */\nexport function canvas(input: AnyCanvas | HTMLImageElement | HTMLVideoElement, output: AnyCanvas) {\n if (!input || !output) return;\n const ctx = getCanvasContext(output) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.drawImage(input, 0, 0);\n}\n\n/** meta-function that performs draw for: canvas, face, body, hand */\nexport async function all(inCanvas: AnyCanvas, result: Result, drawOptions?: Partial) {\n if (!result?.performance || !inCanvas) return null;\n const timeStamp = now();\n const localOptions = mergeDeep(options, drawOptions);\n const promise = Promise.all([\n face(inCanvas, result.face, localOptions),\n body(inCanvas, result.body, localOptions),\n hand(inCanvas, result.hand, localOptions),\n object(inCanvas, result.object, localOptions),\n gesture(inCanvas, result.gesture, localOptions), // gestures do not have buffering\n // person(inCanvas, result.persons, localOptions); // already included above\n ]);\n drawTime = env.perfadd ? drawTime + Math.round(now() - timeStamp) : Math.round(now() - timeStamp);\n result.performance.draw = drawTime;\n return promise;\n}\n\n/** sets default label templates for face/body/hand/object/gestures */\nexport function init() {\n options.faceLabels = defaultLabels.face;\n options.bodyLabels = defaultLabels.body;\n options.bodyPartLabels = defaultLabels.bodyPart;\n options.handLabels = defaultLabels.hand;\n options.fingerLabels = defaultLabels.finger;\n options.objectLabels = defaultLabels.object;\n options.gestureLabels = defaultLabels.gesture;\n}\n", "import { log } from '../util/util';\nimport type { AnyCanvas } from '../exports';\nimport type { Point } from '../result';\nimport type { DrawOptions } from './options';\n\nexport const getCanvasContext = (input: AnyCanvas) => {\n if (!input) log('draw error: invalid canvas');\n else if (!input.getContext) log('draw error: canvas context not defined');\n else {\n const ctx = input.getContext('2d', { willReadFrequently: true });\n if (!ctx) log('draw error: cannot get canvas context');\n else return ctx;\n }\n return null;\n};\n\nexport const rad2deg = (theta: number) => Math.round((theta * 180) / Math.PI);\n\nexport const replace = (str: string, source: string, target: string | number) => str.replace(source, typeof target === 'number' ? target.toFixed(1) : target);\n\nexport const colorDepth = (z: number | undefined, opt: DrawOptions): string => { // performance optimization needed\n if (!opt.useDepth || typeof z === 'undefined') return opt.color;\n const rgb = Uint8ClampedArray.from([127 + (2 * z), 127 - (2 * z), 255]);\n return `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opt.alpha})`;\n};\n\nexport function labels(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, str: string, startX: number, startY: number, localOptions: DrawOptions) {\n const line: string[] = str.replace(/\\[.*\\]/g, '').split('\\n').map((l) => l.trim()); // remove unmatched templates and split into array\n const x = Math.max(0, startX);\n for (let i = line.length - 1; i >= 0; i--) {\n const y = i * localOptions.lineHeight + startY;\n if (localOptions.shadowColor && localOptions.shadowColor !== '') {\n ctx.fillStyle = localOptions.shadowColor;\n ctx.fillText(line[i], x + 5, y + 16);\n }\n ctx.fillStyle = localOptions.labelColor;\n ctx.fillText(line[i], x + 4, y + 15);\n }\n}\n\nexport function point(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, z: number | undefined, localOptions: DrawOptions) {\n ctx.fillStyle = colorDepth(z, localOptions);\n ctx.beginPath();\n ctx.arc(x, y, localOptions.pointSize, 0, 2 * Math.PI);\n ctx.fill();\n}\n\nexport function rect(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, x: number, y: number, width: number, height: number, localOptions: DrawOptions) {\n ctx.beginPath();\n ctx.lineWidth = localOptions.lineWidth;\n if (localOptions.useCurves) {\n const cx = (x + x + width) / 2;\n const cy = (y + y + height) / 2;\n ctx.ellipse(cx, cy, width / 2, height / 2, 0, 0, 2 * Math.PI);\n } else {\n ctx.moveTo(x + localOptions.roundRect, y);\n ctx.lineTo(x + width - localOptions.roundRect, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + localOptions.roundRect);\n ctx.lineTo(x + width, y + height - localOptions.roundRect);\n ctx.quadraticCurveTo(x + width, y + height, x + width - localOptions.roundRect, y + height);\n ctx.lineTo(x + localOptions.roundRect, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - localOptions.roundRect);\n ctx.lineTo(x, y + localOptions.roundRect);\n ctx.quadraticCurveTo(x, y, x + localOptions.roundRect, y);\n ctx.closePath();\n }\n ctx.stroke();\n}\n\nexport function lines(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.beginPath();\n ctx.moveTo(points[0][0], points[0][1]);\n for (const pt of points) {\n ctx.strokeStyle = colorDepth(pt[2] || 0, localOptions);\n ctx.lineTo(Math.trunc(pt[0]), Math.trunc(pt[1]));\n }\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function curves(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, points: Point[], localOptions: DrawOptions) {\n if (points.length < 2) return;\n ctx.lineWidth = localOptions.lineWidth;\n if (!localOptions.useCurves || points.length <= 2) {\n lines(ctx, points, localOptions);\n return;\n }\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 0; i < points.length - 2; i++) {\n const xc = (points[i][0] + points[i + 1][0]) / 2;\n const yc = (points[i][1] + points[i + 1][1]) / 2;\n ctx.quadraticCurveTo(points[i][0], points[i][1], xc, yc);\n }\n ctx.quadraticCurveTo(points[points.length - 2][0], points[points.length - 2][1], points[points.length - 1][0], points[points.length - 1][1]);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.closePath();\n ctx.fill();\n }\n}\n\nexport function arrow(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, from: Point, to: Point, radius = 5) {\n let angle;\n let x;\n let y;\n ctx.beginPath();\n ctx.moveTo(from[0], from[1]);\n ctx.lineTo(to[0], to[1]);\n angle = Math.atan2(to[1] - from[1], to[0] - from[0]);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.moveTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n angle += (1.0 / 3.0) * (2 * Math.PI);\n x = radius * Math.cos(angle) + to[0];\n y = radius * Math.sin(angle) + to[1];\n ctx.lineTo(x, y);\n ctx.closePath();\n ctx.stroke();\n ctx.fill();\n}\n", "/** Draw Options\n * - Accessed via `human.draw.options` or provided per each draw method as the drawOptions optional parameter\n */\n\nexport interface DrawOptions {\n /** draw line color */\n color: string,\n /** alpha value used for lines */\n alpha: number,\n /** label color */\n labelColor: string,\n /** label shadow color */\n shadowColor: string,\n /** label font */\n font: string,\n /** line spacing between labels */\n lineHeight: number,\n /** line width for drawn lines */\n lineWidth: number,\n /** size of drawn points */\n pointSize: number,\n /** draw rounded boxes by n pixels */\n roundRect: number,\n /** should points be drawn? */\n drawPoints: boolean,\n /** should labels be drawn? */\n drawLabels: boolean,\n /** should face attention keypoints be highlighted */\n drawAttention: boolean;\n /** should detected gestures be drawn? */\n drawGestures: boolean,\n /** should draw boxes around detection results? */\n drawBoxes: boolean,\n /** should draw polygons from detection points? */\n drawPolygons: boolean,\n /** should draw gaze arrows? */\n drawGaze: boolean,\n /** should fill polygons? */\n fillPolygons: boolean,\n /** use z-coordinate when available */\n useDepth: boolean,\n /** should lines be curved? */\n useCurves: boolean,\n /** string template for face labels */\n faceLabels: string,\n /** string template for body labels */\n bodyLabels: string,\n /** string template for body part labels */\n bodyPartLabels: string,\n /** string template for hand labels */\n handLabels: string,\n /** string template for hand labels */\n fingerLabels: string,\n /** string template for object labels */\n objectLabels: string,\n /** string template for gesture labels */\n gestureLabels: string,\n}\n\n/** currently set draw options {@link DrawOptions} */\nexport const options: DrawOptions = {\n color: 'rgba(173, 216, 230, 0.6)' as string, // 'lightblue' with light alpha channel\n labelColor: 'rgba(173, 216, 230, 1)' as string, // 'lightblue' with dark alpha channel\n shadowColor: 'black' as string,\n alpha: 0.5 as number,\n font: 'small-caps 16px \"Segoe UI\"' as string,\n lineHeight: 18 as number,\n lineWidth: 4 as number,\n pointSize: 2 as number,\n roundRect: 8 as number,\n drawPoints: false as boolean,\n drawLabels: true as boolean,\n drawBoxes: true as boolean,\n drawAttention: true as boolean,\n drawGestures: true as boolean,\n drawPolygons: true as boolean,\n drawGaze: true as boolean,\n fillPolygons: false as boolean,\n useDepth: true as boolean,\n useCurves: false as boolean,\n faceLabels: '' as string,\n bodyLabels: '' as string,\n bodyPartLabels: '' as string,\n objectLabels: '' as string,\n handLabels: '' as string,\n fingerLabels: '' as string,\n gestureLabels: '' as string,\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nexport const meshAnnotations: Record = {\n silhouette: [\n 10, 338, 297, 332, 284, 251, 389, 356, 454, 323, 361, 288,\n 397, 365, 379, 378, 400, 377, 152, 148, 176, 149, 150, 136,\n 172, 58, 132, 93, 234, 127, 162, 21, 54, 103, 67, 109,\n ],\n // lipsUpperOuter: [61, 185, 40, 39, 37, 0, 267, 269, 270, 409, 291], // 11\n // lipsLowerOuter: [146, 91, 181, 84, 17, 314, 405, 321, 375, 291], // 10\n // lipsUpperInner: [78, 191, 80, 81, 82, 13, 312, 311, 310, 415, 308], // 11\n // lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308], // 11\n lipsUpperOuter: [185, 40, 39, 37, 0, 267, 269, 270, 409],\n lipsLowerOuter: [61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291],\n lipsUpperInner: [191, 80, 81, 82, 13, 312, 311, 310, 415],\n lipsLowerInner: [78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308],\n lipsLowerSemiOuter: [76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306],\n lipsUpperSemiOuter: [184, 74, 73, 72, 11, 302, 303, 304, 408],\n lipsLowerSemiInner: [62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292],\n lipsUpperSemiInner: [183, 42, 41, 38, 12, 268, 271, 272, 407],\n rightEyeUpper0: [246, 161, 160, 159, 158, 157, 173], // 7\n rightEyeLower0: [33, 7, 163, 144, 145, 153, 154, 155, 133], // 9\n rightEyeUpper1: [247, 30, 29, 27, 28, 56, 190], // 7\n rightEyeLower1: [130, 25, 110, 24, 23, 22, 26, 112, 243], // 9\n rightEyeUpper2: [113, 225, 224, 223, 222, 221, 189], // 7\n rightEyeLower2: [226, 31, 228, 229, 230, 231, 232, 233, 244], // 9\n rightEyeLower3: [143, 111, 117, 118, 119, 120, 121, 128, 245], // 9\n rightEyebrowUpper: [156, 70, 63, 105, 66, 107, 55, 193], // 8\n rightEyebrowLower: [35, 124, 46, 53, 52, 65], // 6\n rightEyeIris: [473, 474, 475, 476, 477], // 5\n leftEyeUpper0: [466, 388, 387, 386, 385, 384, 398],\n leftEyeLower0: [263, 249, 390, 373, 374, 380, 381, 382, 362],\n leftEyeUpper1: [467, 260, 259, 257, 258, 286, 414],\n leftEyeLower1: [359, 255, 339, 254, 253, 252, 256, 341, 463],\n leftEyeUpper2: [342, 445, 444, 443, 442, 441, 413],\n leftEyeLower2: [446, 261, 448, 449, 450, 451, 452, 453, 464],\n leftEyeLower3: [372, 340, 346, 347, 348, 349, 350, 357, 465],\n leftEyebrowUpper: [383, 300, 293, 334, 296, 336, 285, 417],\n leftEyebrowLower: [265, 353, 276, 283, 282, 295],\n leftEyeIris: [468, 469, 470, 471, 472],\n midwayBetweenEyes: [168],\n noseTip: [1],\n noseBottom: [2],\n noseRightCorner: [98],\n noseLeftCorner: [327],\n rightCheek: [205],\n leftCheek: [425],\n};\n\nexport const meshLandmarks: Record = {\n count: 468,\n mouth: 13,\n symmetryLine: [13, meshAnnotations.midwayBetweenEyes[0]],\n};\n\nexport const blazeFaceLandmarks: Record = {\n leftEye: 0,\n rightEye: 1,\n nose: 2,\n mouth: 3,\n leftEar: 4,\n rightEar: 5,\n symmetryLine: [3, 2],\n};\n\nexport const irisIndices: { key: string, indices: number[] }[] = [ // A mapping from facemesh model keypoints to iris model keypoints.\n { key: 'EyeUpper0', indices: [9, 10, 11, 12, 13, 14, 15] }, // 7 x 3d\n { key: 'EyeUpper1', indices: [25, 26, 27, 28, 29, 30, 31] }, // 7 x 3d\n { key: 'EyeUpper2', indices: [41, 42, 43, 44, 45, 46, 47] }, // 7 x 3d\n { key: 'EyeLower0', indices: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, // 7 x 3d\n { key: 'EyeLower1', indices: [16, 17, 18, 19, 20, 21, 22, 23, 24] }, // 9 x 3d\n { key: 'EyeLower2', indices: [32, 33, 34, 35, 36, 37, 38, 39, 40] }, // 9 x 3d\n { key: 'EyeLower3', indices: [54, 55, 56, 57, 58, 59, 60, 61, 62] }, // 9 x 3d\n { key: 'EyebrowUpper', indices: [63, 64, 65, 66, 67, 68, 69, 70] }, // 8 x 3d\n { key: 'EyebrowLower', indices: [48, 49, 50, 51, 52, 53] }, // 6 x 3d\n];\n\nexport const UV468: [number, number][] = [\n [0.499976992607117, 0.652534008026123],\n [0.500025987625122, 0.547487020492554],\n [0.499974012374878, 0.602371990680695],\n [0.482113003730774, 0.471979022026062],\n [0.500150978565216, 0.527155995368958],\n [0.499909996986389, 0.498252987861633],\n [0.499523013830185, 0.40106201171875],\n [0.289712011814117, 0.380764007568359],\n [0.499954998493195, 0.312398016452789],\n [0.499987006187439, 0.269918978214264],\n [0.500023007392883, 0.107050001621246],\n [0.500023007392883, 0.666234016418457],\n [0.5000159740448, 0.679224014282227],\n [0.500023007392883, 0.692348003387451],\n [0.499976992607117, 0.695277988910675],\n [0.499976992607117, 0.70593398809433],\n [0.499976992607117, 0.719385027885437],\n [0.499976992607117, 0.737019002437592],\n [0.499967992305756, 0.781370997428894],\n [0.499816000461578, 0.562981009483337],\n [0.473773002624512, 0.573909997940063],\n [0.104906998574734, 0.254140973091125],\n [0.365929991006851, 0.409575998783112],\n [0.338757991790771, 0.41302502155304],\n [0.311120003461838, 0.409460008144379],\n [0.274657994508743, 0.389131009578705],\n [0.393361985683441, 0.403706014156342],\n [0.345234006643295, 0.344011008739471],\n [0.370094001293182, 0.346076011657715],\n [0.319321990013123, 0.347265005111694],\n [0.297903001308441, 0.353591024875641],\n [0.24779200553894, 0.410809993743896],\n [0.396889001131058, 0.842755019664764],\n [0.280097991228104, 0.375599980354309],\n [0.106310002505779, 0.399955987930298],\n [0.2099249958992, 0.391353011131287],\n [0.355807989835739, 0.534406006336212],\n [0.471751004457474, 0.65040397644043],\n [0.474155008792877, 0.680191993713379],\n [0.439785003662109, 0.657229006290436],\n [0.414617002010345, 0.66654098033905],\n [0.450374007225037, 0.680860996246338],\n [0.428770989179611, 0.682690978050232],\n [0.374971002340317, 0.727805018424988],\n [0.486716985702515, 0.547628998756409],\n [0.485300987958908, 0.527395009994507],\n [0.257764995098114, 0.314490020275116],\n [0.401223003864288, 0.455172002315521],\n [0.429818987846375, 0.548614978790283],\n [0.421351999044418, 0.533740997314453],\n [0.276895999908447, 0.532056987285614],\n [0.483370006084442, 0.499586999416351],\n [0.33721199631691, 0.282882988452911],\n [0.296391993761063, 0.293242990970612],\n [0.169294998049736, 0.193813979625702],\n [0.447580009698868, 0.302609980106354],\n [0.392390012741089, 0.353887975215912],\n [0.354490011930466, 0.696784019470215],\n [0.067304998636246, 0.730105042457581],\n [0.442739009857178, 0.572826027870178],\n [0.457098007202148, 0.584792017936707],\n [0.381974011659622, 0.694710969924927],\n [0.392388999462128, 0.694203019142151],\n [0.277076005935669, 0.271932005882263],\n [0.422551989555359, 0.563233017921448],\n [0.385919004678726, 0.281364023685455],\n [0.383103013038635, 0.255840003490448],\n [0.331431001424789, 0.119714021682739],\n [0.229923993349075, 0.232002973556519],\n [0.364500999450684, 0.189113974571228],\n [0.229622006416321, 0.299540996551514],\n [0.173287004232407, 0.278747975826263],\n [0.472878992557526, 0.666198015213013],\n [0.446828007698059, 0.668527007102966],\n [0.422762006521225, 0.673889994621277],\n [0.445307999849319, 0.580065965652466],\n [0.388103008270264, 0.693961024284363],\n [0.403039008378983, 0.706539988517761],\n [0.403629004955292, 0.693953037261963],\n [0.460041999816895, 0.557139039039612],\n [0.431158006191254, 0.692366003990173],\n [0.452181994915009, 0.692366003990173],\n [0.475387006998062, 0.692366003990173],\n [0.465828001499176, 0.779190003871918],\n [0.472328990697861, 0.736225962638855],\n [0.473087012767792, 0.717857003211975],\n [0.473122000694275, 0.704625964164734],\n [0.473033010959625, 0.695277988910675],\n [0.427942007780075, 0.695277988910675],\n [0.426479011774063, 0.703539967536926],\n [0.423162013292313, 0.711845993995667],\n [0.4183090031147, 0.720062971115112],\n [0.390094995498657, 0.639572978019714],\n [0.013953999616206, 0.560034036636353],\n [0.499913990497589, 0.58014702796936],\n [0.413199990987778, 0.69539999961853],\n [0.409626007080078, 0.701822996139526],\n [0.468080013990402, 0.601534962654114],\n [0.422728985548019, 0.585985004901886],\n [0.463079988956451, 0.593783974647522],\n [0.37211999297142, 0.47341400384903],\n [0.334562003612518, 0.496073007583618],\n [0.411671012639999, 0.546965003013611],\n [0.242175996303558, 0.14767599105835],\n [0.290776997804642, 0.201445996761322],\n [0.327338010072708, 0.256527006626129],\n [0.399509996175766, 0.748921036720276],\n [0.441727995872498, 0.261676013469696],\n [0.429764986038208, 0.187834024429321],\n [0.412198007106781, 0.108901023864746],\n [0.288955003023148, 0.398952007293701],\n [0.218936994671822, 0.435410976409912],\n [0.41278201341629, 0.398970007896423],\n [0.257135003805161, 0.355440020561218],\n [0.427684992551804, 0.437960982322693],\n [0.448339998722076, 0.536936044692993],\n [0.178560003638268, 0.45755398273468],\n [0.247308000922203, 0.457193970680237],\n [0.286267012357712, 0.467674970626831],\n [0.332827985286713, 0.460712015628815],\n [0.368755996227264, 0.447206974029541],\n [0.398963987827301, 0.432654976844788],\n [0.476410001516342, 0.405806005001068],\n [0.189241006970406, 0.523923993110657],\n [0.228962004184723, 0.348950982093811],\n [0.490725994110107, 0.562400996685028],\n [0.404670000076294, 0.485132992267609],\n [0.019469000399113, 0.401564002037048],\n [0.426243007183075, 0.420431017875671],\n [0.396993011236191, 0.548797011375427],\n [0.266469985246658, 0.376977026462555],\n [0.439121007919312, 0.51895797252655],\n [0.032313998788595, 0.644356966018677],\n [0.419054001569748, 0.387154996395111],\n [0.462783008813858, 0.505746960639954],\n [0.238978996872902, 0.779744982719421],\n [0.198220998048782, 0.831938028335571],\n [0.107550002634525, 0.540755033493042],\n [0.183610007166862, 0.740257024765015],\n [0.134409993886948, 0.333683013916016],\n [0.385764002799988, 0.883153975009918],\n [0.490967005491257, 0.579378008842468],\n [0.382384985685349, 0.508572995662689],\n [0.174399003386497, 0.397670984268188],\n [0.318785011768341, 0.39623498916626],\n [0.343364000320435, 0.400596976280212],\n [0.396100014448166, 0.710216999053955],\n [0.187885001301765, 0.588537991046906],\n [0.430987000465393, 0.944064974784851],\n [0.318993002176285, 0.898285031318665],\n [0.266247987747192, 0.869701027870178],\n [0.500023007392883, 0.190576016902924],\n [0.499976992607117, 0.954452991485596],\n [0.366169989109039, 0.398822009563446],\n [0.393207013607025, 0.39553701877594],\n [0.410373002290726, 0.391080021858215],\n [0.194993004202843, 0.342101991176605],\n [0.388664990663528, 0.362284004688263],\n [0.365961998701096, 0.355970978736877],\n [0.343364000320435, 0.355356991291046],\n [0.318785011768341, 0.35834002494812],\n [0.301414996385574, 0.363156020641327],\n [0.058132998645306, 0.319076001644135],\n [0.301414996385574, 0.387449026107788],\n [0.499987989664078, 0.618434011936188],\n [0.415838003158569, 0.624195992946625],\n [0.445681989192963, 0.566076993942261],\n [0.465844005346298, 0.620640993118286],\n [0.49992299079895, 0.351523995399475],\n [0.288718998432159, 0.819945991039276],\n [0.335278987884521, 0.852819979190826],\n [0.440512001514435, 0.902418971061707],\n [0.128294005990028, 0.791940987110138],\n [0.408771991729736, 0.373893976211548],\n [0.455606997013092, 0.451801002025604],\n [0.499877005815506, 0.908990025520325],\n [0.375436991453171, 0.924192011356354],\n [0.11421000212431, 0.615022003650665],\n [0.448662012815475, 0.695277988910675],\n [0.4480200111866, 0.704632043838501],\n [0.447111994028091, 0.715808033943176],\n [0.444831997156143, 0.730794012546539],\n [0.430011987686157, 0.766808986663818],\n [0.406787008047104, 0.685672998428345],\n [0.400738000869751, 0.681069016456604],\n [0.392399996519089, 0.677703022956848],\n [0.367855995893478, 0.663918972015381],\n [0.247923001646996, 0.601333022117615],\n [0.452769994735718, 0.420849978923798],\n [0.43639200925827, 0.359887003898621],\n [0.416164010763168, 0.368713974952698],\n [0.413385987281799, 0.692366003990173],\n [0.228018000721931, 0.683571994304657],\n [0.468268007040024, 0.352671027183533],\n [0.411361992359161, 0.804327011108398],\n [0.499989002943039, 0.469825029373169],\n [0.479153990745544, 0.442654013633728],\n [0.499974012374878, 0.439637005329132],\n [0.432112008333206, 0.493588984012604],\n [0.499886006116867, 0.866917014122009],\n [0.49991300702095, 0.821729004383087],\n [0.456548988819122, 0.819200992584229],\n [0.344549000263214, 0.745438992977142],\n [0.37890899181366, 0.574010014533997],\n [0.374292999505997, 0.780184984207153],\n [0.319687992334366, 0.570737957954407],\n [0.357154995203018, 0.604269981384277],\n [0.295284003019333, 0.621580958366394],\n [0.447750002145767, 0.862477004528046],\n [0.410986006259918, 0.508723020553589],\n [0.31395098567009, 0.775308012962341],\n [0.354128003120422, 0.812552988529205],\n [0.324548006057739, 0.703992962837219],\n [0.189096003770828, 0.646299958229065],\n [0.279776990413666, 0.71465802192688],\n [0.1338230073452, 0.682700991630554],\n [0.336768001317978, 0.644733011722565],\n [0.429883986711502, 0.466521978378296],\n [0.455527991056442, 0.548622965812683],\n [0.437114000320435, 0.558896005153656],\n [0.467287987470627, 0.529924988746643],\n [0.414712011814117, 0.335219979286194],\n [0.37704598903656, 0.322777986526489],\n [0.344107985496521, 0.320150971412659],\n [0.312875986099243, 0.32233202457428],\n [0.283526003360748, 0.333190023899078],\n [0.241245999932289, 0.382785975933075],\n [0.102986000478268, 0.468762993812561],\n [0.267612010240555, 0.424560010433197],\n [0.297879010438919, 0.433175981044769],\n [0.333433985710144, 0.433878004550934],\n [0.366427004337311, 0.426115989685059],\n [0.396012008190155, 0.416696012020111],\n [0.420121014118195, 0.41022801399231],\n [0.007561000064015, 0.480777025222778],\n [0.432949006557465, 0.569517970085144],\n [0.458638995885849, 0.479089021682739],\n [0.473466008901596, 0.545744001865387],\n [0.476087987422943, 0.563830018043518],\n [0.468472003936768, 0.555056989192963],\n [0.433990985155106, 0.582361996173859],\n [0.483518004417419, 0.562983989715576],\n [0.482482999563217, 0.57784903049469],\n [0.42645001411438, 0.389798998832703],\n [0.438998997211456, 0.39649498462677],\n [0.450067013502121, 0.400434017181396],\n [0.289712011814117, 0.368252992630005],\n [0.276670008897781, 0.363372981548309],\n [0.517862021923065, 0.471948027610779],\n [0.710287988185883, 0.380764007568359],\n [0.526226997375488, 0.573909997940063],\n [0.895093023777008, 0.254140973091125],\n [0.634069979190826, 0.409575998783112],\n [0.661242008209229, 0.41302502155304],\n [0.688880026340485, 0.409460008144379],\n [0.725341975688934, 0.389131009578705],\n [0.606630027294159, 0.40370500087738],\n [0.654766023159027, 0.344011008739471],\n [0.629905998706818, 0.346076011657715],\n [0.680678009986877, 0.347265005111694],\n [0.702096998691559, 0.353591024875641],\n [0.75221198797226, 0.410804986953735],\n [0.602918028831482, 0.842862963676453],\n [0.719901978969574, 0.375599980354309],\n [0.893692970275879, 0.399959981441498],\n [0.790081977844238, 0.391354024410248],\n [0.643998026847839, 0.534487962722778],\n [0.528249025344849, 0.65040397644043],\n [0.525849997997284, 0.680191040039062],\n [0.560214996337891, 0.657229006290436],\n [0.585384011268616, 0.66654098033905],\n [0.549625992774963, 0.680860996246338],\n [0.57122802734375, 0.682691991329193],\n [0.624852001667023, 0.72809898853302],\n [0.513050019741058, 0.547281980514526],\n [0.51509702205658, 0.527251958847046],\n [0.742246985435486, 0.314507007598877],\n [0.598631024360657, 0.454979002475739],\n [0.570338010787964, 0.548575043678284],\n [0.578631997108459, 0.533622980117798],\n [0.723087012767792, 0.532054007053375],\n [0.516445994377136, 0.499638974666595],\n [0.662801027297974, 0.282917976379395],\n [0.70362401008606, 0.293271005153656],\n [0.830704987049103, 0.193813979625702],\n [0.552385985851288, 0.302568018436432],\n [0.607609987258911, 0.353887975215912],\n [0.645429015159607, 0.696707010269165],\n [0.932694971561432, 0.730105042457581],\n [0.557260990142822, 0.572826027870178],\n [0.542901992797852, 0.584792017936707],\n [0.6180260181427, 0.694710969924927],\n [0.607590973377228, 0.694203019142151],\n [0.722943007946014, 0.271963000297546],\n [0.577413976192474, 0.563166975975037],\n [0.614082992076874, 0.281386971473694],\n [0.616907000541687, 0.255886018276215],\n [0.668509006500244, 0.119913995265961],\n [0.770092010498047, 0.232020974159241],\n [0.635536015033722, 0.189248979091644],\n [0.77039098739624, 0.299556016921997],\n [0.826722025871277, 0.278755009174347],\n [0.527121007442474, 0.666198015213013],\n [0.553171992301941, 0.668527007102966],\n [0.577238023281097, 0.673889994621277],\n [0.554691970348358, 0.580065965652466],\n [0.611896991729736, 0.693961024284363],\n [0.59696102142334, 0.706539988517761],\n [0.596370995044708, 0.693953037261963],\n [0.539958000183105, 0.557139039039612],\n [0.568841993808746, 0.692366003990173],\n [0.547818005084991, 0.692366003990173],\n [0.52461302280426, 0.692366003990173],\n [0.534089982509613, 0.779141008853912],\n [0.527670979499817, 0.736225962638855],\n [0.526912987232208, 0.717857003211975],\n [0.526877999305725, 0.704625964164734],\n [0.526966989040375, 0.695277988910675],\n [0.572058022022247, 0.695277988910675],\n [0.573521018028259, 0.703539967536926],\n [0.57683801651001, 0.711845993995667],\n [0.581691026687622, 0.720062971115112],\n [0.609944999217987, 0.639909982681274],\n [0.986046016216278, 0.560034036636353],\n [0.5867999792099, 0.69539999961853],\n [0.590372025966644, 0.701822996139526],\n [0.531915009021759, 0.601536989212036],\n [0.577268004417419, 0.585934996604919],\n [0.536915004253387, 0.593786001205444],\n [0.627542972564697, 0.473352015018463],\n [0.665585994720459, 0.495950996875763],\n [0.588353991508484, 0.546862006187439],\n [0.757824003696442, 0.14767599105835],\n [0.709249973297119, 0.201507985591888],\n [0.672684013843536, 0.256581008434296],\n [0.600408971309662, 0.74900496006012],\n [0.55826598405838, 0.261672019958496],\n [0.570303976535797, 0.187870979309082],\n [0.588165998458862, 0.109044015407562],\n [0.711045026779175, 0.398952007293701],\n [0.781069993972778, 0.435405015945435],\n [0.587247014045715, 0.398931980133057],\n [0.742869973182678, 0.355445981025696],\n [0.572156012058258, 0.437651991844177],\n [0.55186802148819, 0.536570012569427],\n [0.821442008018494, 0.457556009292603],\n [0.752701997756958, 0.457181990146637],\n [0.71375697851181, 0.467626988887787],\n [0.66711300611496, 0.460672974586487],\n [0.631101012229919, 0.447153985500336],\n [0.6008620262146, 0.432473003864288],\n [0.523481011390686, 0.405627012252808],\n [0.810747981071472, 0.523926019668579],\n [0.771045982837677, 0.348959028720856],\n [0.509127020835876, 0.562718033790588],\n [0.595292985439301, 0.485023975372314],\n [0.980530977249146, 0.401564002037048],\n [0.573499977588654, 0.420000016689301],\n [0.602994978427887, 0.548687994480133],\n [0.733529984951019, 0.376977026462555],\n [0.560611009597778, 0.519016981124878],\n [0.967685997486115, 0.644356966018677],\n [0.580985009670258, 0.387160003185272],\n [0.537728011608124, 0.505385041236877],\n [0.760966002941132, 0.779752969741821],\n [0.801778972148895, 0.831938028335571],\n [0.892440974712372, 0.54076099395752],\n [0.816350996494293, 0.740260004997253],\n [0.865594983100891, 0.333687007427216],\n [0.614073991775513, 0.883246004581451],\n [0.508952975273132, 0.579437971115112],\n [0.617941975593567, 0.508316040039062],\n [0.825608015060425, 0.397674977779388],\n [0.681214988231659, 0.39623498916626],\n [0.656635999679565, 0.400596976280212],\n [0.603900015354156, 0.710216999053955],\n [0.81208598613739, 0.588539004325867],\n [0.56801301240921, 0.944564998149872],\n [0.681007981300354, 0.898285031318665],\n [0.733752012252808, 0.869701027870178],\n [0.633830010890961, 0.398822009563446],\n [0.606792986392975, 0.39553701877594],\n [0.589659988880157, 0.391062021255493],\n [0.805015981197357, 0.342108011245728],\n [0.611334979534149, 0.362284004688263],\n [0.634037971496582, 0.355970978736877],\n [0.656635999679565, 0.355356991291046],\n [0.681214988231659, 0.35834002494812],\n [0.698584973812103, 0.363156020641327],\n [0.941866993904114, 0.319076001644135],\n [0.698584973812103, 0.387449026107788],\n [0.584177017211914, 0.624107003211975],\n [0.554318010807037, 0.566076993942261],\n [0.534153997898102, 0.62064003944397],\n [0.711217999458313, 0.819975018501282],\n [0.664629995822906, 0.852871000766754],\n [0.559099972248077, 0.902631998062134],\n [0.871706008911133, 0.791940987110138],\n [0.591234028339386, 0.373893976211548],\n [0.544341027736664, 0.451583981513977],\n [0.624562978744507, 0.924192011356354],\n [0.88577002286911, 0.615028977394104],\n [0.551338016986847, 0.695277988910675],\n [0.551980018615723, 0.704632043838501],\n [0.552887976169586, 0.715808033943176],\n [0.555167973041534, 0.730794012546539],\n [0.569944024085999, 0.767035007476807],\n [0.593203008174896, 0.685675978660583],\n [0.599261999130249, 0.681069016456604],\n [0.607599973678589, 0.677703022956848],\n [0.631937980651855, 0.663500010967255],\n [0.752032995223999, 0.601315021514893],\n [0.547226011753082, 0.420395016670227],\n [0.563543975353241, 0.359827995300293],\n [0.583841025829315, 0.368713974952698],\n [0.586614012718201, 0.692366003990173],\n [0.771915018558502, 0.683578014373779],\n [0.531597018241882, 0.352482974529266],\n [0.588370978832245, 0.804440975189209],\n [0.52079701423645, 0.442565023899078],\n [0.567984998226166, 0.493479013442993],\n [0.543282985687256, 0.819254994392395],\n [0.655317008495331, 0.745514988899231],\n [0.621008992195129, 0.574018001556396],\n [0.625559985637665, 0.78031200170517],\n [0.680198013782501, 0.570719003677368],\n [0.64276397228241, 0.604337990283966],\n [0.704662978649139, 0.621529996395111],\n [0.552012026309967, 0.862591981887817],\n [0.589071989059448, 0.508637011051178],\n [0.685944974422455, 0.775357007980347],\n [0.645735025405884, 0.812640011310577],\n [0.675342977046967, 0.703978002071381],\n [0.810858011245728, 0.646304965019226],\n [0.72012197971344, 0.714666962623596],\n [0.866151988506317, 0.682704985141754],\n [0.663187026977539, 0.644596993923187],\n [0.570082008838654, 0.466325998306274],\n [0.544561982154846, 0.548375964164734],\n [0.562758982181549, 0.558784961700439],\n [0.531987011432648, 0.530140042304993],\n [0.585271000862122, 0.335177004337311],\n [0.622952997684479, 0.32277899980545],\n [0.655896008014679, 0.320163011550903],\n [0.687132000923157, 0.322345972061157],\n [0.716481983661652, 0.333200991153717],\n [0.758756995201111, 0.382786989212036],\n [0.897013008594513, 0.468769013881683],\n [0.732392013072968, 0.424547016620636],\n [0.70211398601532, 0.433162987232208],\n [0.66652500629425, 0.433866024017334],\n [0.633504986763, 0.426087975502014],\n [0.603875994682312, 0.416586995124817],\n [0.579657971858978, 0.409945011138916],\n [0.992439985275269, 0.480777025222778],\n [0.567192018032074, 0.569419980049133],\n [0.54136598110199, 0.478899002075195],\n [0.526564002037048, 0.546118021011353],\n [0.523913025856018, 0.563830018043518],\n [0.531529009342194, 0.555056989192963],\n [0.566035985946655, 0.582329034805298],\n [0.51631098985672, 0.563053965568542],\n [0.5174720287323, 0.577877044677734],\n [0.573594987392426, 0.389806985855103],\n [0.560697972774506, 0.395331978797913],\n [0.549755990505219, 0.399751007556915],\n [0.710287988185883, 0.368252992630005],\n [0.723330020904541, 0.363372981548309],\n];\n\nexport const TRI468: number[] = [\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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,\n 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];\n\nexport const TRI68: number[] = [0, 1, 36, 0, 36, 17, 1, 2, 41, 1, 41, 36, 2, 3, 31, 2, 31, 41, 3, 4, 48, 3, 48, 31, 4, 5, 48, 5, 6, 48, 6, 7, 59, 6, 59, 48, 7, 8, 58, 7, 58, 59,\n 8, 9, 56, 8, 56, 57, 8, 57, 58, 9, 10, 55, 9, 55, 56, 10, 11, 54, 10, 54, 55, 11, 12, 54, 12, 13, 54, 13, 14, 35, 13, 35, 54, 14, 15, 46, 14, 46, 35, 15, 16,\n 45, 15, 45, 46, 16, 26, 45, 17, 36, 18, 18, 37, 19, 18, 36, 37, 19, 38, 20, 19, 37, 38, 20, 39, 21, 20, 38, 39, 21, 39, 27, 22, 42, 23, 22, 27, 42, 23, 43, 24,\n 23, 42, 43, 24, 44, 25, 24, 43, 44, 25, 45, 26, 25, 44, 45, 27, 39, 28, 27, 28, 42, 28, 39, 29, 28, 29, 42, 29, 31, 30, 29, 30, 35, 29, 40, 31, 29, 35, 47, 29,\n 39, 40, 29, 47, 42, 30, 31, 32, 30, 32, 33, 30, 33, 34, 30, 34, 35, 31, 50, 32, 31, 40, 41, 31, 48, 49, 31, 49, 50, 32, 51, 33, 32, 50, 51, 33, 51, 34, 34, 52,\n 35, 34, 51, 52, 35, 46, 47, 35, 52, 53, 35, 53, 54, 36, 41, 37, 37, 40, 38, 37, 41, 40, 38, 40, 39, 42, 47, 43, 43, 47, 44, 44, 46, 45, 44, 47, 46, 48, 60, 49,\n 48, 59, 60, 49, 61, 50, 49, 60, 61, 50, 62, 51, 50, 61, 62, 51, 62, 52, 52, 63, 53, 52, 62, 63, 53, 64, 54, 53, 63, 64, 54, 64, 55, 55, 65, 56, 55, 64, 65, 56,\n 66, 57, 56, 65, 66, 57, 66, 58, 58, 67, 59, 58, 66, 67, 59, 67, 60, 60, 67, 61, 61, 66, 62, 61, 67, 66, 62, 66, 63, 63, 65, 64, 63, 66, 65, 21, 27, 22];\n\nexport const TRI33: number[] = [\n /* eyes */ 0, 8, 7, 7, 8, 1, 2, 10, 9, 9, 10, 3,\n /* brows */ 17, 0, 18, 18, 0, 7, 18, 7, 19, 19, 7, 1, 19, 1, 11, 19, 11, 20, 21, 3, 22, 21, 9, 3, 20, 9, 21, 20, 2, 9, 20, 11, 2,\n /* 4head */ 23, 17, 18, 25, 21, 22, 24, 19, 20, 24, 18, 19, 24, 20, 21, 24, 23, 18, 24, 21, 25,\n /* nose */ 11, 12, 4, 11, 4, 13, 1, 12, 11, 11, 13, 2, 12, 14, 4, 4, 14, 13,\n /* up-lip */ 14, 5, 15, 14, 15, 6, 12, 5, 14, 14, 6, 13,\n /* cheeks */ 8, 12, 1, 2, 13, 10, 8, 26, 12, 10, 13, 27, 26, 5, 12, 13, 6, 27, 0, 26, 8, 10, 27, 3,\n /* chin */ 5, 32, 16, 16, 32, 6, 5, 30, 32, 6, 32, 31,\n /* cont */ 26, 30, 5, 27, 6, 31, 0, 28, 26, 3, 27, 29, 17, 28, 0, 3, 29, 22, 23, 28, 17, 22, 29, 25, 28, 30, 26, 27, 31, 29,\n];\n\nexport const TRI7: number[] = [0, 4, 1, 2, 4, 3, 4, 5, 6];\n\nexport const VTX68: number[] = [\n /* cont */ 127, 234, 132, 58, 172, 150, 149, 148, 152, 377, 378, 379, 397, 288, 361, 454, 356,\n /* brows */ 70, 63, 105, 66, 107, 336, 296, 334, 293, 300,\n /* nose */ 168, 6, 195, 4, 98, 97, 2, 326, 327,\n /* eyes */ 33, 160, 158, 133, 153, 144, 362, 385, 387, 263, 373, 380,\n /* lip */ 57, 40, 37, 0, 267, 270, 287, 321, 314, 17, 84, 91,\n /* mouth */ 78, 81, 13, 311, 308, 402, 14, 178,\n];\n\nexport const VTX33: number[] = [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];\n\nexport const VTX7: number[] = [33, 133, 362, 263, 1, 78, 308];\n\nexport const UV68 = VTX68.map((x) => UV468[x]);\n\nexport const UV33 = VTX33.map((x) => UV468[x]);\n\nexport const UV7 = VTX7.map((x) => UV468[x]);\n\n// https://github.com/tensorflow/tfjs-models/blob/master/face-landmarks-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const pairsLips: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nexport const pairsLeftEye: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nexport const pairsLeftEyebrow: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nexport const pairsLeftIris: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nexport const pairsRightEye: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nexport const pairsRightEyebrow: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nexport const pairsRightIris: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nexport const pairsFaceContour: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389],\n [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397],\n [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172],\n [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162],\n [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const contourKeypoints = {\n lips: connectionsToIndices(pairsLips),\n leftEye: connectionsToIndices(pairsLeftEye),\n leftEyebrow: connectionsToIndices(pairsLeftEyebrow),\n leftIris: connectionsToIndices(pairsLeftIris),\n rightEye: connectionsToIndices(pairsRightEye),\n rightEyebrow: connectionsToIndices(pairsRightEyebrow),\n rightIris: connectionsToIndices(pairsRightIris),\n faceOval: connectionsToIndices(pairsFaceContour),\n};\n\nexport const pairsFaceMesh: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11],\n [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72],\n [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175],\n [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73],\n [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74],\n [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40],\n [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76],\n [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56],\n [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21],\n [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144],\n [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91],\n [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85],\n [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193],\n [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247],\n [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117],\n [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98],\n [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209],\n [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47],\n [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67],\n [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230],\n [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46],\n [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46],\n [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236],\n [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154],\n [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57],\n [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28],\n [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113],\n [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62],\n [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64],\n [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41],\n [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170],\n [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122],\n [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89],\n [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63],\n [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14],\n [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100],\n [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88],\n [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215],\n [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43],\n [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81],\n [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229],\n [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107],\n [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129],\n [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117],\n [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3],\n [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220],\n [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71],\n [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188],\n [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164],\n [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38],\n [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206],\n [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165],\n [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214],\n [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171],\n [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84],\n [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201],\n [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57],\n [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214],\n [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44],\n [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64],\n [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2],\n [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24],\n [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26],\n [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189],\n [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29],\n [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247],\n [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147],\n [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187],\n [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114],\n [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217],\n [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110],\n [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356],\n [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357],\n [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333],\n [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9],\n [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418],\n [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450],\n [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313],\n [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335],\n [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423],\n [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307],\n [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421],\n [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426],\n [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322],\n [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456],\n [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417],\n [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355],\n [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382],\n [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443],\n [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431],\n [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446],\n [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458],\n [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372],\n [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274],\n [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269],\n [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266],\n [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265],\n [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424],\n [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366],\n [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423],\n [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432],\n [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394],\n [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352],\n [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295],\n [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323],\n [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358],\n [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374],\n [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6],\n [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344],\n [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195],\n [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283],\n [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282],\n [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338],\n [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292],\n [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442],\n [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441],\n [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300],\n [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263],\n [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436],\n [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370],\n [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293],\n [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330],\n [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440],\n [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459],\n [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354],\n [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315],\n [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366],\n [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291],\n [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264],\n [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352],\n [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433],\n [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462],\n [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255],\n [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252],\n [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441],\n [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257],\n [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459],\n [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290],\n [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341],\n [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357],\n [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420],\n [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372],\n [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133],\n [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33],\n [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263],\n [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466],\n [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72],\n [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73],\n [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152],\n [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74],\n [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184],\n [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185],\n [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77],\n [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190],\n [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54],\n [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145],\n [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181],\n [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16],\n [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245],\n [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30],\n [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111],\n [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240],\n [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198],\n [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114],\n [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109],\n [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231],\n [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124],\n [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70],\n [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3],\n [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26],\n [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43],\n [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56],\n [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124],\n [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96],\n [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235],\n [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42],\n [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140],\n [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193],\n [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179],\n [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68],\n [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15],\n [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120],\n [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89],\n [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138],\n [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57],\n [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41],\n [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118],\n [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66],\n [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142],\n [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118],\n [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196],\n [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156],\n [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122],\n [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164],\n [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12],\n [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31],\n [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98],\n [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237],\n [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179],\n [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181],\n [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184],\n [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186],\n [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218],\n [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45],\n [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235],\n [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97],\n [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230],\n [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232],\n [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222],\n [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224],\n [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213],\n [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192],\n [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188],\n [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174],\n [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25],\n [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264],\n [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350],\n [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299],\n [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151],\n [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424],\n [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449],\n [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18],\n [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434],\n [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301],\n [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280],\n [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335],\n [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396],\n [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413],\n [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168],\n [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417],\n [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381],\n [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365],\n [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395],\n [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335],\n [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250],\n [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292],\n [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354],\n [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426],\n [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371],\n [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290],\n [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422],\n [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422],\n [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358],\n [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331],\n [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395],\n [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296],\n [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285],\n [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329],\n [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331],\n [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8],\n [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351],\n [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397],\n [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248],\n [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175],\n [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295],\n [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356],\n [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308],\n [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265],\n [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285],\n [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457],\n [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394],\n [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410],\n [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268],\n [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298],\n [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420],\n [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344],\n [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274],\n [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316],\n [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323],\n [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306],\n [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372],\n [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366],\n [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435],\n [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328],\n [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359],\n [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253],\n [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286],\n [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258],\n [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309],\n [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305],\n [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453],\n [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343],\n [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360],\n [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265],\n [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n", "// @tensorflow/tfjs-models/face-landmark-detection/src/constants.ts\n// https://github.com/google/mediapipe/mediapipe/python/solutions/face_mesh_connections.py\n\ntype PairArray = [number, number][];\n\nconst LIPS_CONNECTIONS: PairArray = [\n [61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291],\n [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308],\n];\n\nconst LEFT_EYE_CONNECTIONS: PairArray = [[263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]];\n\nconst LEFT_EYEBROW_CONNECTIONS: PairArray = [[276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]];\n\nconst LEFT_IRIS_CONNECTIONS: PairArray = [[474, 475], [475, 476], [476, 477], [477, 474]];\n\nconst RIGHT_EYE_CONNECTIONS: PairArray = [[33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]];\n\nconst RIGHT_EYEBROW_CONNECTIONS: PairArray = [[46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]];\n\nconst RIGHT_IRIS_CONNECTIONS: PairArray = [[469, 470], [470, 471], [471, 472], [472, 469]];\n\nconst FACE_OVAL_CONNECTIONS: PairArray = [\n [10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389], [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397], [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152],\n [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172], [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162], [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10],\n];\n\nexport const MEDIAPIPE_FACE_MESH_CONNECTED_KEYPOINTS_PAIRS: PairArray = [\n [127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11], [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72], [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232],\n [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175], [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73], [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48],\n [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74], [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40], [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202],\n [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76], [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56], [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135],\n [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21], [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144], [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205],\n [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91], [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85], [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148],\n [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193], [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247], [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54],\n [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117], [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98], [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166],\n [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209], [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47], [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45],\n [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67], [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230], [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63],\n [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46], [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46], [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123],\n [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236], [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154], [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200],\n [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57], [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28], [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160],\n [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113], [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62], [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41],\n [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64], [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41], [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42],\n [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170], [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122], [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96],\n [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89], [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63], [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15],\n [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14], [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100], [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88],\n [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88], [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215], [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42],\n [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43], [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81], [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144],\n [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229], [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107], [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48],\n [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129], [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117], [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19],\n [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3], [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220], [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122],\n [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71], [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188], [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2],\n [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164], [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38], [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226],\n [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206], [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165], [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133],\n [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214], [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171], [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86],\n [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84], [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201], [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76],\n [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57], [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214], [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79],\n [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44], [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64], [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59],\n [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2], [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24], [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23],\n [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26], [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189], [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28],\n [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29], [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247], [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166],\n [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147], [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187], [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233],\n [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114], [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217], [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177],\n [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110], [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356], [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452],\n [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357], [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333], [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347],\n [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9], [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418], [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310],\n [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450], [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313], [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387],\n [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335], [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423], [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281],\n [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307], [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421], [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320],\n [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426], [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322], [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386],\n [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456], [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417], [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413],\n [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355], [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382], [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364],\n [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443], [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431], [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273],\n [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446], [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458], [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308],\n [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372], [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274], [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436],\n [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269], [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266], [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250],\n [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265], [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424], [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273],\n [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366], [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423], [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279],\n [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432], [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394], [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334],\n [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352], [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295], [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330],\n [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323], [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358], [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285],\n [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374], [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6], [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367],\n [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344], [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195], [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396],\n [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283], [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282], [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264],\n [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338], [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292], [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340],\n [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442], [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441], [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263],\n [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300], [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263], [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395],\n [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436], [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370], [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302],\n [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293], [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330], [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429],\n [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440], [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459], [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414],\n [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354], [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315], [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313],\n [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366], [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291], [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432],\n [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264], [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352], [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421],\n [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433], [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462], [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305],\n [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255], [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252], [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341],\n [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441], [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257], [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260],\n [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459], [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290], [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250],\n [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341], [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357], [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360],\n [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420], [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372], [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448],\n [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133], [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33], [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362],\n [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263], [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466], [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238],\n [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72], [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73], [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233],\n [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152], [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74], [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49],\n [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184], [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185], [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210],\n [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77], [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190], [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138],\n [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54], [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145], [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207],\n [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181], [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16], [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176],\n [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245], [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30], [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103],\n [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111], [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240], [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219],\n [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198], [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114], [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220],\n [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109], [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231], [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105],\n [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124], [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70], [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116],\n [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3], [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26], [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199],\n [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43], [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56], [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29],\n [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124], [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96], [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73],\n [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235], [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42], [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183],\n [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140], [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193], [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89],\n [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179], [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68], [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16],\n [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15], [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120], [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178],\n [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89], [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138], [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41],\n [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57], [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41], [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24],\n [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118], [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66], [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219],\n [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142], [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118], [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94],\n [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196], [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156], [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139],\n [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122], [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164], [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0],\n [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12], [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31], [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203],\n [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98], [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237], [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140],\n [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179], [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181], [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194],\n [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184], [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186], [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192],\n [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218], [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45], [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98],\n [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235], [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97], [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229],\n [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230], [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232], [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244],\n [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222], [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224], [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113],\n [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213], [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192], [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244],\n [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188], [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174], [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215],\n [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25], [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264], [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451],\n [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350], [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299], [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280],\n [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151], [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424], [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272],\n [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449], [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18], [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259],\n [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434], [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301], [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254],\n [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280], [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335], [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314],\n [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396], [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413], [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248],\n [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168], [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417], [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277],\n [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381], [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365], [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282],\n [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395], [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335], [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359],\n [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250], [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292], [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264],\n [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354], [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426], [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267],\n [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371], [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290], [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446],\n [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422], [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422], [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352],\n [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358], [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331], [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436],\n [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395], [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296], [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376],\n [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285], [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329], [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366],\n [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331], [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8], [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253],\n [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351], [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397], [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278],\n [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248], [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175], [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276],\n [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295], [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356], [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337],\n [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308], [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265], [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295],\n [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285], [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457], [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417],\n [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394], [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410], [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354],\n [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268], [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298], [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280],\n [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420], [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344], [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364],\n [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274], [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316], [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314],\n [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323], [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306], [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287],\n [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372], [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366], [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418],\n [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435], [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328], [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289],\n [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359], [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253], [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256],\n [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286], [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258], [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259],\n [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309], [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305], [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309],\n [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453], [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343], [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344],\n [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360], [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265], [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339],\n];\n\nfunction connectionsToIndices(connections: PairArray) {\n const indices = connections.map((connection) => connection[0]);\n indices.push(connections[connections.length - 1][1]);\n return indices;\n}\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR = {\n lips: connectionsToIndices(LIPS_CONNECTIONS),\n leftEye: connectionsToIndices(LEFT_EYE_CONNECTIONS),\n leftEyebrow: connectionsToIndices(LEFT_EYEBROW_CONNECTIONS),\n leftIris: connectionsToIndices(LEFT_IRIS_CONNECTIONS),\n rightEye: connectionsToIndices(RIGHT_EYE_CONNECTIONS),\n rightEyebrow: connectionsToIndices(RIGHT_EYEBROW_CONNECTIONS),\n rightIris: connectionsToIndices(RIGHT_IRIS_CONNECTIONS),\n faceOval: connectionsToIndices(FACE_OVAL_CONNECTIONS),\n};\n\nconst indexLabelPairs: [number, string][] = Object.entries(MEDIAPIPE_FACE_MESH_KEYPOINTS_BY_CONTOUR)\n .map(([label, indices]) => indices.map((index) => [index, label] as [number, string]))\n .flat();\n\nexport const MEDIAPIPE_FACE_MESH_KEYPOINTS = new Map(indexLabelPairs);\n\ntype AssignAverage = number[];\nexport interface LandmarksRefinementConfig {\n indexesMapping: number[]; // Maps indexes of the given set of landmarks to indexes of the resulting set of landmarks. Should be non empty and contain the same amount of indexes as landmarks in the corresponding input\n zRefinement: 'none'|'copy'|AssignAverage; // Z refinement instructions.\n}\n\nexport const LANDMARKS_REFINEMENT_LIPS_CONFIG = [\n 61, 146, 91, 181, 84, 17, 314, 405, 321, 375, 291, // Lower outer.\n 185, 40, 39, 37, 0, 267, 269, 270, 409, // Upper outer(excluding corners).\n 78, 95, 88, 178, 87, 14, 317, 402, 318, 324, 308, // Lower inner.\n 191, 80, 81, 82, 13, 312, 311, 310, 415, // Upper inner(excluding corners).\n 76, 77, 90, 180, 85, 16, 315, 404, 320, 307, 306, // Lower semi - outer.\n 184, 74, 73, 72, 11, 302, 303, 304, 408, // Upper semi - outer(excluding corners).\n 62, 96, 89, 179, 86, 15, 316, 403, 319, 325, 292, // Lower semi - inner.\n 183, 42, 41, 38, 12, 268, 271, 272, 407, // Upper semi - inner(excluding corners).\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG = [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // upper contour (excluding corners).\n 130, 25, 110, 24, 23, 22, 26, 112, 243, // Halo x2 lower contour.\n 247, 30, 29, 27, 28, 56, 190, // Halo x2 upper contour (excluding corners).\n 226, 31, 228, 229, 230, 231, 232, 233, 244, // Halo x3 lower contour.\n 113, 225, 224, 223, 222, 221, 189, // Halo x3 upper contour (excluding corners).\n 35, 124, 46, 53, 52, 65, // Halo x4 upper contour (no lower because of mesh structure) or eyebrow inner contour.\n 143, 111, 117, 118, 119, 120, 121, 128, 245, // Halo x5 lower contour.\n 156, 70, 63, 105, 66, 107, 55, 193, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG = [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n 359, 255, 339, 254, 253, 252, 256, 341, 463, // Halo x2 lower contour.\n 467, 260, 259, 257, 258, 286, 414, // Halo x2 upper contour (excluding corners).\n 446, 261, 448, 449, 450, 451, 452, 453, 464, // Halo x3 lower contour.\n 342, 445, 444, 443, 442, 441, 413, // Halo x3 upper contour (excluding corners).\n 265, 353, 276, 283, 282, 295, // Halo x4 upper contour (no lower because of mesh structure) or/ eyebrow inner contour.\n 372, 340, 346, 347, 348, 349, 350, 357, 465, // Halo x5 lower contour.\n 383, 300, 293, 334, 296, 336, 285, 417, // Halo x5 upper contour (excluding corners) or eyebrow outer contour.\n];\n\nexport const LANDMARKS_REFINEMENT_LEFT_IRIS_CONFIG = [\n 468, // Center.\n 469, // Iris right edge.\n 470, // Iris top edge.\n 471, // Iris left edge.\n 472, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 33, 7, 163, 144, 145, 153, 154, 155, 133, // Lower contour.\n 246, 161, 160, 159, 158, 157, 173, // Upper contour (excluding corners).\n];\n*/\n\nexport const LANDMARKS_REFINEMENT_RIGHT_IRIS_CONFIG = [\n 473, // Center.\n 474, // Iris right edge.\n 475, // Iris top edge.\n 476, // Iris left edge.\n 477, // Iris bottom edge.\n];\n/*\nzRefinement: [\n 263, 249, 390, 373, 374, 380, 381, 382, 362, // Lower contour.\n 466, 388, 387, 386, 385, 384, 398, // Upper contour (excluding corners).\n];\n*/\n", "import { TRI468 as triangulation } from '../face/facemeshcoords';\nimport { mergeDeep } from '../util/util';\nimport { getCanvasContext, rad2deg, rect, point, lines, arrow, labels, replace } from './primitives';\nimport { options } from './options';\nimport * as facemeshConstants from '../face/constants';\nimport type { FaceResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\nlet localOptions: DrawOptions;\n\nfunction drawLabels(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (!localOptions.drawLabels || (localOptions.faceLabels?.length === 0)) return;\n let l = localOptions.faceLabels.slice();\n l = replace(l, '[id]', f.id.toFixed(0));\n if (f.score) l = replace(l, '[score]', 100 * f.score);\n if (f.gender) l = replace(l, '[gender]', f.gender);\n if (f.genderScore) l = replace(l, '[genderScore]', 100 * f.genderScore);\n if (f.age) l = replace(l, '[age]', f.age);\n if (f.distance) l = replace(l, '[distance]', 100 * f.distance);\n if (f.real) l = replace(l, '[real]', 100 * f.real);\n if (f.live) l = replace(l, '[live]', 100 * f.live);\n if (f.emotion && f.emotion.length > 0) {\n const emotion = f.emotion.map((a) => `${Math.trunc(100 * a.score)}% ${a.emotion}`);\n if (emotion.length > 3) emotion.length = 3;\n l = replace(l, '[emotions]', emotion.join(' '));\n }\n if (f.rotation?.angle?.roll) l = replace(l, '[roll]', rad2deg(f.rotation.angle.roll));\n if (f.rotation?.angle?.yaw) l = replace(l, '[yaw]', rad2deg(f.rotation.angle.yaw));\n if (f.rotation?.angle?.pitch) l = replace(l, '[pitch]', rad2deg(f.rotation.angle.pitch));\n if (f.rotation?.gaze?.bearing) l = replace(l, '[gaze]', rad2deg(f.rotation.gaze.bearing));\n labels(ctx, l, f.box[0], f.box[1], localOptions);\n}\n\nfunction drawIrisElipse(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n // iris: array[center, left, top, right, bottom]\n if (f.annotations?.leftEyeIris && f.annotations?.leftEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.leftEyeIris[3][0] - f.annotations.leftEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.leftEyeIris[4][1] - f.annotations.leftEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n if (f.annotations?.rightEyeIris && f.annotations?.rightEyeIris[0]) {\n ctx.strokeStyle = localOptions.useDepth ? 'rgba(255, 200, 255, 0.3)' : localOptions.color;\n ctx.beginPath();\n const sizeX = Math.abs(f.annotations.rightEyeIris[3][0] - f.annotations.rightEyeIris[1][0]) / 2;\n const sizeY = Math.abs(f.annotations.rightEyeIris[4][1] - f.annotations.rightEyeIris[2][1]) / 2;\n ctx.ellipse(f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1], sizeX, sizeY, 0, 0, 2 * Math.PI);\n ctx.stroke();\n if (localOptions.fillPolygons) {\n ctx.fillStyle = localOptions.useDepth ? 'rgba(255, 255, 200, 0.3)' : localOptions.color;\n ctx.fill();\n }\n }\n}\n\nfunction drawGazeSpheres(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.angle && typeof Path2D !== 'undefined') {\n ctx.strokeStyle = 'pink';\n const valX = (f.box[0] + f.box[2] / 2) - (f.box[3] * rad2deg(f.rotation.angle.yaw) / 90);\n const valY = (f.box[1] + f.box[3] / 2) + (f.box[2] * rad2deg(f.rotation.angle.pitch) / 90);\n const pathV = new Path2D(`\n M ${f.box[0] + f.box[2] / 2} ${f.box[1]}\n C\n ${valX} ${f.box[1]},\n ${valX} ${f.box[1] + f.box[3]},\n ${f.box[0] + f.box[2] / 2} ${f.box[1] + f.box[3]}\n `);\n const pathH = new Path2D(`\n M ${f.box[0]} ${f.box[1] + f.box[3] / 2}\n C \n ${f.box[0]} ${valY},\n ${f.box[0] + f.box[2]} ${valY},\n ${f.box[0] + f.box[2]} ${f.box[1] + f.box[3] / 2}\n `);\n ctx.stroke(pathH);\n ctx.stroke(pathV);\n }\n}\n\nfunction drawGazeArrows(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawGaze && f.rotation?.gaze.strength && f.rotation.gaze.bearing && f.annotations.leftEyeIris && f.annotations.rightEyeIris && f.annotations.leftEyeIris[0] && f.annotations.rightEyeIris[0]) {\n ctx.strokeStyle = 'pink';\n ctx.fillStyle = 'pink';\n const leftGaze = [\n f.annotations.leftEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.leftEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.leftEyeIris[0][0], f.annotations.leftEyeIris[0][1]], [leftGaze[0], leftGaze[1]], 4);\n const rightGaze = [\n f.annotations.rightEyeIris[0][0] + (Math.sin(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[3]),\n f.annotations.rightEyeIris[0][1] + (Math.cos(f.rotation.gaze.bearing) * f.rotation.gaze.strength * f.box[2]),\n ];\n arrow(ctx, [f.annotations.rightEyeIris[0][0], f.annotations.rightEyeIris[0][1]], [rightGaze[0], rightGaze[1]], 4);\n }\n}\n\nfunction drawFacePolygons(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPolygons && f.mesh.length >= 468) {\n ctx.lineWidth = 1;\n for (let i = 0; i < triangulation.length / 3; i++) {\n const points = [triangulation[i * 3 + 0], triangulation[i * 3 + 1], triangulation[i * 3 + 2]].map((index) => f.mesh[index]);\n lines(ctx, points, localOptions);\n }\n drawIrisElipse(f, ctx);\n }\n /*\n if (localOptions.drawPolygons && f.contours.length > 1) {\n ctx.lineWidth = 5;\n lines(ctx, f.contours, opt);\n }\n ctx.lineWidth = 1;\n */\n}\n\nfunction drawFacePoints(f: FaceResult, ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) {\n if (localOptions.drawPoints) {\n if (f?.mesh.length >= 468) {\n for (let i = 0; i < f.mesh.length; i++) {\n point(ctx, f.mesh[i][0], f.mesh[i][1], f.mesh[i][2], localOptions);\n if (localOptions.drawAttention) {\n if (facemeshConstants.LANDMARKS_REFINEMENT_LIPS_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) + 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n if (facemeshConstants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.includes(i)) point(ctx, f.mesh[i][0], f.mesh[i][1], (f.mesh[i][2] as number) - 127, localOptions);\n }\n }\n } else {\n for (const [k, v] of Object.entries(f?.annotations || {})) {\n if (!v?.[0]) continue;\n const pt = v[0];\n point(ctx, pt[0], pt[1], 0, localOptions);\n if (localOptions.drawLabels) labels(ctx, k, pt[0], pt[1], localOptions);\n }\n }\n }\n}\n\nfunction drawFaceBoxes(f: FaceResult, ctx) {\n if (localOptions.drawBoxes) {\n rect(ctx, f.box[0], f.box[1], f.box[2], f.box[3], localOptions);\n }\n}\n\n/** draw detected faces */\nexport function face(inCanvas: AnyCanvas, result: FaceResult[], drawOptions?: Partial) {\n localOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n for (const f of result) {\n drawFaceBoxes(f, ctx);\n drawLabels(f, ctx);\n if (f.mesh && f.mesh.length > 0) {\n drawFacePoints(f, ctx);\n drawFacePolygons(f, ctx);\n drawGazeSpheres(f, ctx);\n drawGazeArrows(f, ctx);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, curves, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { BodyResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected bodies */\nexport function body(inCanvas: AnyCanvas, result: BodyResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n for (let i = 0; i < result.length; i++) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n ctx.lineWidth = localOptions.lineWidth;\n ctx.font = localOptions.font;\n if (localOptions.drawBoxes && result[i].box && result[i].box.length === 4) {\n rect(ctx, result[i].box[0], result[i].box[1], result[i].box[2], result[i].box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.bodyLabels?.length > 0)) {\n let l = localOptions.bodyLabels.slice();\n l = replace(l, '[id]', result[i].id.toFixed(0));\n l = replace(l, '[score]', 100 * result[i].score);\n labels(ctx, l, result[i].box[0], result[i].box[1], localOptions);\n }\n }\n if (localOptions.drawPoints && result[i].keypoints) {\n for (let pt = 0; pt < result[i].keypoints.length; pt++) {\n if (!result[i].keypoints[pt].score || (result[i].keypoints[pt].score === 0)) continue;\n ctx.fillStyle = colorDepth(result[i].keypoints[pt].position[2], localOptions);\n point(ctx, result[i].keypoints[pt].position[0], result[i].keypoints[pt].position[1], 0, localOptions);\n }\n }\n if (localOptions.drawLabels && (localOptions.bodyPartLabels?.length > 0) && result[i].keypoints) {\n ctx.font = localOptions.font;\n for (const pt of result[i].keypoints) {\n if (!pt.score || (pt.score === 0)) continue;\n let l = localOptions.bodyPartLabels.slice();\n l = replace(l, '[label]', pt.part);\n l = replace(l, '[score]', 100 * pt.score);\n labels(ctx, l, pt.position[0], pt.position[1], localOptions);\n }\n }\n if (localOptions.drawPolygons && result[i].keypoints && result[i].annotations) {\n for (const part of Object.values(result[i].annotations)) {\n for (const connected of part) curves(ctx, connected, localOptions);\n }\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, point, colorDepth, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { HandResult } from '../result';\nimport type { AnyCanvas, DrawOptions, Point } from '../exports';\n\n/** draw detected hands */\nexport function hand(inCanvas: AnyCanvas, result: HandResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.handLabels?.length > 0)) {\n let l = localOptions.handLabels.slice();\n l = replace(l, '[id]', h.id.toFixed(0));\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n if (localOptions.drawPoints) {\n if (h.keypoints && h.keypoints.length > 0) {\n for (const pt of h.keypoints) {\n ctx.fillStyle = colorDepth(pt[2], localOptions);\n point(ctx, pt[0], pt[1], 0, localOptions);\n }\n }\n }\n if (localOptions.drawLabels && h.annotations && (localOptions.fingerLabels?.length > 0)) {\n for (const [part, pt] of Object.entries(h.annotations)) {\n let l = localOptions.fingerLabels.slice();\n l = replace(l, '[label]', part);\n labels(ctx, l, pt[pt.length - 1][0], pt[pt.length - 1][1], localOptions);\n }\n }\n if (localOptions.drawPolygons && h.annotations) {\n const addHandLine = (part: Point[]) => {\n if (!part || part.length === 0 || !part[0]) return;\n for (let i = 0; i < part.length; i++) {\n ctx.beginPath();\n const z = part[i][2] || 0;\n ctx.strokeStyle = colorDepth(i * z, localOptions);\n ctx.moveTo(part[i > 0 ? i - 1 : 0][0], part[i > 0 ? i - 1 : 0][1]);\n ctx.lineTo(part[i][0], part[i][1]);\n ctx.stroke();\n }\n };\n ctx.lineWidth = localOptions.lineWidth;\n addHandLine(h.annotations.index);\n addHandLine(h.annotations.middle);\n addHandLine(h.annotations.ring);\n addHandLine(h.annotations.pinky);\n addHandLine(h.annotations.thumb);\n // addPart(h.annotations.palm);\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, rect, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { ObjectResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected objects */\nexport function object(inCanvas: AnyCanvas, result: ObjectResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.lineJoin = 'round';\n ctx.font = localOptions.font;\n for (const h of result) {\n if (localOptions.drawBoxes) {\n ctx.strokeStyle = localOptions.color;\n ctx.fillStyle = localOptions.color;\n rect(ctx, h.box[0], h.box[1], h.box[2], h.box[3], localOptions);\n if (localOptions.drawLabels && (localOptions.objectLabels?.length > 0)) {\n let l = localOptions.objectLabels.slice();\n l = replace(l, '[id]', h.id.toFixed(0));\n l = replace(l, '[label]', h.label);\n l = replace(l, '[score]', 100 * h.score);\n labels(ctx, l, h.box[0], h.box[1], localOptions);\n }\n ctx.stroke();\n }\n }\n}\n", "import { mergeDeep } from '../util/util';\nimport { getCanvasContext, replace, labels } from './primitives';\nimport { options } from './options';\nimport type { GestureResult } from '../result';\nimport type { AnyCanvas, DrawOptions } from '../exports';\n\n/** draw detected gestures */\nexport function gesture(inCanvas: AnyCanvas, result: GestureResult[], drawOptions?: Partial) {\n const localOptions: DrawOptions = mergeDeep(options, drawOptions);\n if (!result || !inCanvas) return;\n if (localOptions.drawGestures && (localOptions.gestureLabels?.length > 0)) {\n const ctx = getCanvasContext(inCanvas) as CanvasRenderingContext2D;\n if (!ctx) return;\n ctx.font = localOptions.font;\n ctx.fillStyle = localOptions.color;\n let i = 1;\n for (let j = 0; j < result.length; j++) {\n const [where, what] = Object.entries(result[j]);\n if ((what.length > 1) && ((what[1] as string).length > 0)) {\n const who = where[1] as number > 0 ? `#${where[1]}` : '';\n let l = localOptions.gestureLabels.slice();\n l = replace(l, '[where]', where[0]);\n l = replace(l, '[who]', who);\n l = replace(l, '[what]', what[1]);\n labels(ctx, l, 8, 2 + (i * localOptions.lineHeight), localOptions);\n i += 1;\n }\n }\n }\n}\n", "export const defaultLabels = {\n face: `face\n confidence: [score]%\n [gender] [genderScore]%\n age: [age] years\n distance: [distance]cm\n real: [real]%\n live: [live]%\n [emotions]\n roll: [roll]\u00B0 yaw:[yaw]\u00B0 pitch:[pitch]\u00B0\n gaze: [gaze]\u00B0`,\n body: 'body [score]%',\n bodyPart: '[label] [score]%',\n object: '[label] [score]%',\n hand: '[label] [score]%',\n finger: '[label]',\n gesture: '[where] [who]: [what]',\n};\n", "/* eslint-disable no-multi-spaces */\n\nexport const kpt: string[] = [\n 'nose', // 0\n 'leftEyeInside', // 1\n 'leftEye', // 2\n 'leftEyeOutside', // 3\n 'rightEyeInside', // 4\n 'rightEye', // 5\n 'rightEyeOutside', // 6\n 'leftEar', // 7\n 'rightEar', // 8\n 'leftMouth', // 9\n 'rightMouth', // 10\n 'leftShoulder', // 11\n 'rightShoulder', // 12\n 'leftElbow', // 13\n 'rightElbow', // 14\n 'leftWrist', // 15\n 'rightWrist', // 16\n 'leftPinky', // 17\n 'rightPinky', // 18\n 'leftIndex', // 19\n 'rightIndex', // 20\n 'leftThumb', // 21\n 'rightThumb', // 22\n 'leftHip', // 23\n 'rightHip', // 24\n 'leftKnee', // 25\n 'rightKnee', // 26\n 'leftAnkle', // 27\n 'rightAnkle', // 28\n 'leftHeel', // 29\n 'rightHeel', // 30\n 'leftFoot', // 31\n 'rightFoot', // 32\n 'bodyCenter', // 33\n 'bodyTop', // 34\n 'leftPalm', // 35 // z-coord not ok\n 'leftHand', // 36 // similar to wrist but z-coord not ok\n 'rightPalm', // 37 // z-coord not ok\n 'rightHand', // 38 // similar to wrist but z-coord not ok\n];\n\nexport const connected: Record = {\n shoulders: ['leftShoulder', 'rightShoulder'],\n hips: ['rightHip', 'leftHip'],\n mouth: ['leftMouth', 'rightMouth'],\n leftLegUpper: ['leftHip', 'leftKnee'],\n leftLegLower: ['leftKnee', 'leftAnkle'],\n leftFoot: ['leftAnkle', 'leftHeel', 'leftFoot'],\n leftTorso: ['leftShoulder', 'leftHip'],\n leftArmUpper: ['leftShoulder', 'leftElbow'],\n leftArmLower: ['leftElbow', 'leftWrist'],\n leftHand: ['leftWrist', 'leftPalm'],\n leftHandPinky: ['leftPalm', 'leftPinky'],\n leftHandIndex: ['leftPalm', 'leftIndex'],\n leftHandThumb: ['leftPalm', 'leftThumb'],\n leftEyeOutline: ['leftEyeInside', 'leftEyeOutside'],\n rightLegUpper: ['rightHip', 'rightKnee'],\n rightLegLower: ['rightKnee', 'rightAnkle'],\n rightFoot: ['rightAnkle', 'rightHeel', 'rightFoot'],\n rightTorso: ['rightShoulder', 'rightHip'],\n rightArmUpper: ['rightShoulder', 'rightElbow'],\n rightArmLower: ['rightElbow', 'rightWrist'],\n rightHand: ['rightWrist', 'rightPalm'],\n rightHandPinky: ['rightPalm', 'rightPinky'],\n rightHandIndex: ['rightPalm', 'rightIndex'],\n rightHandThumb: ['rightPalm', 'rightThumb'],\n rightEyeOutline: ['rightEyeInside', 'rightEyeOutside'],\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport type { Box } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D } from '../tfjs/types';\n\nexport interface DetectedBox { box: Box, boxRaw: Box, score: number }\n\nlet model: GraphModel | null;\nlet inputSize = 224;\nlet anchorTensor: { x, y };\nconst numLayers = 5;\nconst strides = [8, 16, 32, 32, 32];\n\nexport function createAnchors() {\n const anchors: { x: number, y: number }[] = [];\n let layerId = 0;\n while (layerId < numLayers) {\n let anchorCount = 0;\n let lastSameStrideLayer = layerId;\n while (lastSameStrideLayer < strides.length && strides[lastSameStrideLayer] === strides[layerId]) {\n anchorCount += 2;\n lastSameStrideLayer++;\n }\n const stride = strides[layerId];\n const featureMapHeight = Math.ceil(inputSize / stride);\n const featureMapWidth = Math.ceil(inputSize / stride);\n for (let y = 0; y < featureMapHeight; ++y) {\n for (let x = 0; x < featureMapWidth; ++x) {\n for (let anchorId = 0; anchorId < anchorCount; ++anchorId) {\n anchors.push({ x: (x + 0.5) / featureMapWidth, y: (y + 0.5) / featureMapHeight });\n }\n }\n }\n layerId = lastSameStrideLayer;\n }\n anchorTensor = { x: tf.tensor1d(anchors.map((a) => a.x)), y: tf.tensor1d(anchors.map((a) => a.y)) };\n}\n\nexport async function loadDetector(config: Config): Promise {\n if (env.initial) model = null;\n if (!model && config.body['detector'] && config.body['detector'].modelPath || '') {\n model = await loadModel(config.body['detector'].modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug && model) log('cached model:', model['modelUrl']);\n createAnchors();\n return model as GraphModel;\n}\n\nconst cropFactor = [5.0, 5.0];\nexport function decodeBoxes(boxesTensor, anchor) {\n return tf.tidy(() => {\n const split = tf.split(boxesTensor, 12, 1); // first 4 are box data [x,y,w,h] and 4 are keypoints data [x,y] for total of 12\n let xCenter = tf.squeeze(split[0]);\n let yCenter = tf.squeeze(split[1]);\n let width = tf.squeeze(split[2]);\n let height = tf.squeeze(split[3]);\n xCenter = tf.add(tf.div(xCenter, inputSize), anchor.x);\n yCenter = tf.add(tf.div(yCenter, inputSize), anchor.y);\n width = tf.mul(tf.div(width, inputSize), cropFactor[0]);\n height = tf.mul(tf.div(height, inputSize), cropFactor[1]);\n const xMin = tf.sub(xCenter, tf.div(width, 2));\n const yMin = tf.sub(yCenter, tf.div(height, 2));\n const xMax = tf.add(xMin, width);\n const yMax = tf.add(yMin, height);\n const boxes = tf.stack([xMin, yMin, xMax, yMax], 1);\n return boxes;\n });\n}\n\nasync function decodeResults(boxesTensor: Tensor, logitsTensor: Tensor, config: Config, outputSize: [number, number]): Promise {\n const detectedBoxes: DetectedBox[] = [];\n const t: Record = {};\n t.boxes = decodeBoxes(boxesTensor, anchorTensor);\n t.scores = tf.sigmoid(logitsTensor);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, 1, config.body['detector']?.minConfidence || 0.1, config.body['detector']?.iouThreshold || 0.1);\n const nms = await t.nms.data();\n const scores = await t.scores.data();\n const boxes = await t.boxes.array();\n for (const i of Array.from(nms)) {\n const score = scores[i];\n const boxRaw: Box = boxes[i];\n const box: Box = [Math.round(boxRaw[0] * outputSize[0]), Math.round(boxRaw[1] * outputSize[1]), Math.round(boxRaw[2] * outputSize[0]), Math.round(boxRaw[3] * outputSize[1])];\n const detectedBox: DetectedBox = { score, boxRaw, box };\n detectedBoxes.push(detectedBox);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return detectedBoxes;\n}\n\nexport async function detectBoxes(input: Tensor, config: Config, outputSize: [number, number]) {\n const t: Record = {};\n t.res = model?.execute(input, ['Identity']) as Tensor; //\n t.logitsRaw = tf.slice(t.res, [0, 0, 0], [1, -1, 1]);\n t.boxesRaw = tf.slice(t.res, [0, 0, 1], [1, -1, -1]);\n t.logits = tf.squeeze(t.logitsRaw);\n t.boxes = tf.squeeze(t.boxesRaw);\n const boxes = await decodeResults(t.boxes, t.logits, config, outputSize);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import type { Point, Box } from '../result';\n\nexport function calc(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const box: Box = [min[0], min[1], max[0] - min[0], max[1] - min[1]];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function square(keypoints: Point[], outputSize: [number, number] = [1, 1]) {\n const coords = [keypoints.map((pt) => pt[0]), keypoints.map((pt) => pt[1])]; // all x/y coords\n const min = [Math.min(...coords[0]), Math.min(...coords[1])];\n const max = [Math.max(...coords[0]), Math.max(...coords[1])];\n const center = [(min[0] + max[0]) / 2, (min[1] + max[1]) / 2]; // find center x and y coord of all fingers\n const dist = Math.max(center[0] - min[0], center[1] - min[1], -center[0] + max[0], -center[1] + max[1]); // largest distance from center in any direction\n const box: Box = [Math.trunc(center[0] - dist), Math.trunc(center[1] - dist), Math.trunc(2 * dist), Math.trunc(2 * dist)];\n const boxRaw: Box = [box[0] / outputSize[0], box[1] / outputSize[1], box[2] / outputSize[0], box[3] / outputSize[1]];\n return { box, boxRaw };\n}\n\nexport function scale(box: Box, scaleFact: number) {\n const dist = [box[2] * scaleFact, box[3] * scaleFact];\n const newBox: Box = [\n box[0] - (dist[0] - box[2]) / 2,\n box[1] - (dist[1] - box[3]) / 2,\n dist[0],\n dist[1],\n ];\n return newBox;\n}\n\nexport function crop(box: Box) { // [y1, x1, y2, x2] clamped to 0..1\n const yxBox: Box = [Math.max(0, box[1]), Math.max(0, box[0]), Math.min(1, box[3] + box[1]), Math.min(1, box[2] + box[0])];\n return yxBox;\n}\n", "/**\n * BlazePose model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { log, now } from '../util/util';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, Box, Point, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport * as coords from './blazeposecoords';\nimport { loadDetector, detectBoxes, DetectedBox } from './blazeposedetector';\nimport * as box from '../util/box';\nimport { env } from '../util/env';\n\n// const models: [GraphModel | null, GraphModel | null] = [null, null];\nlet model: GraphModel | null;\nlet inputSize = 256;\nlet skipped = Number.MAX_SAFE_INTEGER;\nconst outputNodes: { detector: string[], landmarks: string[] } = {\n landmarks: ['ld_3d', 'activation_segmentation', 'activation_heatmap', 'world_3d', 'output_poseflag'],\n detector: [],\n};\n\nconst cache: BodyResult[] = [];\nlet padding: [number, number][] = [[0, 0], [0, 0], [0, 0], [0, 0]];\nlet lastTime = 0;\n\nconst sigmoid = (x) => (1 - (1 / (1 + Math.exp(x))));\n\nexport const loadDetect = (config: Config): Promise => loadDetector(config);\n\nexport async function loadPose(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.body.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nfunction prepareImage(input: Tensor4D, size: number, cropBox?: Box): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n let final: Tensor;\n if (cropBox) {\n t.cropped = tf.image.cropAndResize(input, [cropBox], [0], [input.shape[1], input.shape[2]]); // if we have cached box use it to crop input\n }\n if (input.shape[1] !== input.shape[2]) { // only pad if width different than height\n const height: [number, number] = [\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0,\n ];\n const width: [number, number] = [\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0,\n ];\n padding = [\n [0, 0], // dont touch batch\n height, // height before&after\n width, // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(t.cropped || input, padding); // use cropped box if it exists\n t.resize = tf.image.resizeBilinear(t.pad as Tensor4D, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else if (input.shape[1] !== size) { // if input needs resizing\n t.resize = tf.image.resizeBilinear(t.cropped as Tensor4D || input, [size, size]);\n final = tf.div(t.resize, constants.tf255);\n } else { // if input is already in a correct resolution just normalize it\n final = tf.div(t.cropped || input, constants.tf255);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nfunction rescaleKeypoints(keypoints: BodyKeypoint[], outputSize: [number, number], cropBox?: Box): BodyKeypoint[] {\n for (const kpt of keypoints) { // first rescale due to padding\n kpt.position = [\n Math.trunc(kpt.position[0] * (outputSize[0] + padding[2][0] + padding[2][1]) / outputSize[0] - padding[2][0]),\n Math.trunc(kpt.position[1] * (outputSize[1] + padding[1][0] + padding[1][1]) / outputSize[1] - padding[1][0]),\n kpt.position[2] as number,\n ];\n kpt.positionRaw = [kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1], 2 * (kpt.position[2] as number) / (outputSize[0] + outputSize[1])];\n }\n if (cropBox) { // second rescale due to cropping\n const width = cropBox[2] - cropBox[0];\n const height = cropBox[3] - cropBox[1];\n for (const kpt of keypoints) {\n kpt.positionRaw = [\n kpt.positionRaw[0] / height + cropBox[1], // correct offset due to crop\n kpt.positionRaw[1] / width + cropBox[0], // correct offset due to crop\n kpt.positionRaw[2] as number,\n ];\n kpt.position = [\n Math.trunc(kpt.positionRaw[0] * outputSize[0]),\n Math.trunc(kpt.positionRaw[1] * outputSize[1]),\n kpt.positionRaw[2] as number,\n ];\n }\n }\n return keypoints;\n}\n\nfunction fixKeypoints(keypoints: BodyKeypoint[]) {\n // palm z-coord is incorrect around near-zero so we approximate it\n const leftPalm = keypoints.find((k) => k.part === 'leftPalm') as BodyKeypoint;\n const leftWrist = keypoints.find((k) => k.part === 'leftWrist') as BodyKeypoint;\n const leftIndex = keypoints.find((k) => k.part === 'leftIndex') as BodyKeypoint;\n leftPalm.position[2] = ((leftWrist.position[2] || 0) + (leftIndex.position[2] || 0)) / 2;\n const rightPalm = keypoints.find((k) => k.part === 'rightPalm') as BodyKeypoint;\n const rightWrist = keypoints.find((k) => k.part === 'rightWrist') as BodyKeypoint;\n const rightIndex = keypoints.find((k) => k.part === 'rightIndex') as BodyKeypoint;\n rightPalm.position[2] = ((rightWrist.position[2] || 0) + (rightIndex.position[2] || 0)) / 2;\n}\n\nasync function detectLandmarks(input: Tensor, config: Config, outputSize: [number, number]): Promise {\n /**\n * t.ld: 39 keypoints [x,y,z,score,presence] normalized to input size\n * t.segmentation:\n * t.heatmap:\n * t.world: 39 keypoints [x,y,z] normalized to -1..1\n * t.poseflag: body score\n */\n if (!model?.['executor']) return null;\n const t: Record = {};\n [t.ld/* 1,195(39*5) */, t.segmentation/* 1,256,256,1 */, t.heatmap/* 1,64,64,39 */, t.world/* 1,117(39*3) */, t.poseflag/* 1,1 */] = model?.execute(input, outputNodes.landmarks) as Tensor[]; // run model\n const poseScore = (await t.poseflag.data())[0];\n const points = await t.ld.data();\n const distances = await t.world.data();\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor])); // dont need tensors after this\n const keypointsRelative: BodyKeypoint[] = [];\n const depth = 5; // each points has x,y,z,visibility,presence\n for (let i = 0; i < points.length / depth; i++) {\n const score = sigmoid(points[depth * i + 3]);\n const presence = sigmoid(points[depth * i + 4]);\n const adjScore = Math.trunc(100 * score * presence * poseScore) / 100;\n const positionRaw: Point = [points[depth * i + 0] / inputSize, points[depth * i + 1] / inputSize, points[depth * i + 2] + 0];\n const position: Point = [Math.trunc(outputSize[0] * positionRaw[0]), Math.trunc(outputSize[1] * positionRaw[1]), positionRaw[2] as number];\n const distance: Point = [distances[depth * i + 0], distances[depth * i + 1], distances[depth * i + 2] + 0];\n keypointsRelative.push({ part: coords.kpt[i] as BodyLandmark, positionRaw, position, distance, score: adjScore });\n }\n if (poseScore < (config.body.minConfidence || 0)) return null;\n fixKeypoints(keypointsRelative);\n const keypoints: BodyKeypoint[] = rescaleKeypoints(keypointsRelative, outputSize); // keypoints were relative to input image which is padded\n const kpts = keypoints.map((k) => k.position);\n const boxes = box.calc(kpts, [outputSize[0], outputSize[1]]); // now find boxes based on rescaled keypoints\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body = { id: 0, score: Math.trunc(100 * poseScore) / 100, box: boxes.box, boxRaw: boxes.boxRaw, keypoints, annotations };\n return body;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n const outputSize: [number, number] = [input.shape[2] || 0, input.shape[1] || 0];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && cache !== null) {\n skipped++;\n } else {\n let boxes: DetectedBox[] = [];\n if (config.body?.['detector']?.['enabled']) {\n const preparedImage = prepareImage(input, 224);\n boxes = await detectBoxes(preparedImage, config, outputSize);\n tf.dispose(preparedImage);\n } else {\n boxes = [{ box: [0, 0, 0, 0] as Box, boxRaw: [0, 0, 1, 1], score: 0 }]; // running without detector\n }\n for (let i = 0; i < boxes.length; i++) {\n const preparedBox = prepareImage(input, 256, boxes[i]?.boxRaw); // padded and resized\n cache.length = 0;\n const bodyResult = await detectLandmarks(preparedBox, config, outputSize);\n tf.dispose(preparedBox);\n if (!bodyResult) continue;\n bodyResult.id = i;\n // bodyResult.score = 0; // TBD\n cache.push(bodyResult);\n }\n /*\n cropBox = [0, 0, 1, 1]; // reset crop coordinates\n if (cache?.boxRaw && config.skipAllowed) {\n const cx = (2.0 * cache.boxRaw[0] + cache.boxRaw[2]) / 2;\n const cy = (2.0 * cache.boxRaw[1] + cache.boxRaw[3]) / 2;\n let size = cache.boxRaw[2] > cache.boxRaw[3] ? cache.boxRaw[2] : cache.boxRaw[3];\n size = (size * 1.0) / 2; // enlarge and half it\n if (cx > 0.1 && cx < 0.9 && cy > 0.1 && cy < 0.9 && size > 0.1) { // only update if box is sane\n const y = 0; // cy - size;\n const x = cx - size;\n cropBox = [y, x, y + 1, x + 1]; // [y0,x0,y1,x1] used for cropping but width/height are not yet implemented so we only reposition image to center of body\n }\n }\n */\n lastTime = now();\n skipped = 0;\n }\n return cache;\n}\n", "/**\n * CoCo Labels used by object detection implementations\n */\nexport const labels = [\n { class: 1, label: 'person' },\n { class: 2, label: 'bicycle' },\n { class: 3, label: 'car' },\n { class: 4, label: 'motorcycle' },\n { class: 5, label: 'airplane' },\n { class: 6, label: 'bus' },\n { class: 7, label: 'train' },\n { class: 8, label: 'truck' },\n { class: 9, label: 'boat' },\n { class: 10, label: 'traffic light' },\n { class: 11, label: 'fire hydrant' },\n { class: 12, label: 'stop sign' },\n { class: 13, label: 'parking meter' },\n { class: 14, label: 'bench' },\n { class: 15, label: 'bird' },\n { class: 16, label: 'cat' },\n { class: 17, label: 'dog' },\n { class: 18, label: 'horse' },\n { class: 19, label: 'sheep' },\n { class: 20, label: 'cow' },\n { class: 21, label: 'elephant' },\n { class: 22, label: 'bear' },\n { class: 23, label: 'zebra' },\n { class: 24, label: 'giraffe' },\n { class: 25, label: 'backpack' },\n { class: 26, label: 'umbrella' },\n { class: 27, label: 'handbag' },\n { class: 28, label: 'tie' },\n { class: 29, label: 'suitcase' },\n { class: 30, label: 'frisbee' },\n { class: 31, label: 'skis' },\n { class: 32, label: 'snowboard' },\n { class: 33, label: 'sports ball' },\n { class: 34, label: 'kite' },\n { class: 35, label: 'baseball bat' },\n { class: 36, label: 'baseball glove' },\n { class: 37, label: 'skateboard' },\n { class: 38, label: 'surfboard' },\n { class: 39, label: 'tennis racket' },\n { class: 40, label: 'bottle' },\n { class: 41, label: 'wine glass' },\n { class: 42, label: 'cup' },\n { class: 43, label: 'fork' },\n { class: 44, label: 'knife' },\n { class: 45, label: 'spoon' },\n { class: 46, label: 'bowl' },\n { class: 47, label: 'banana' },\n { class: 48, label: 'apple' },\n { class: 49, label: 'sandwich' },\n { class: 50, label: 'orange' },\n { class: 51, label: 'broccoli' },\n { class: 52, label: 'carrot' },\n { class: 53, label: 'hot dog' },\n { class: 54, label: 'pizza' },\n { class: 55, label: 'donut' },\n { class: 56, label: 'cake' },\n { class: 57, label: 'chair' },\n { class: 58, label: 'couch' },\n { class: 59, label: 'potted plant' },\n { class: 60, label: 'bed' },\n { class: 61, label: 'dining table' },\n { class: 62, label: 'toilet' },\n { class: 63, label: 'tv' },\n { class: 64, label: 'laptop' },\n { class: 65, label: 'mouse' },\n { class: 66, label: 'remote' },\n { class: 67, label: 'keyboard' },\n { class: 68, label: 'cell phone' },\n { class: 69, label: 'microwave' },\n { class: 70, label: 'oven' },\n { class: 71, label: 'toaster' },\n { class: 72, label: 'sink' },\n { class: 73, label: 'refrigerator' },\n { class: 74, label: 'book' },\n { class: 75, label: 'clock' },\n { class: 76, label: 'vase' },\n { class: 77, label: 'scissors' },\n { class: 78, label: 'teddy bear' },\n { class: 79, label: 'hair drier' },\n { class: 80, label: 'toothbrush' },\n];\n", "/**\n * CenterNet object detection model implementation\n *\n * Based on: [**MB3-CenterNet**](https://github.com/610265158/mobilenetv3_centernet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n // fakeOps(['floormod'], config);\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor | null, outputShape: [number, number], config: Config) {\n if (!res) return [];\n const t: Record = {};\n const results: ObjectResult[] = [];\n const detections = await res.array() as number[][][];\n t.squeeze = tf.squeeze(res);\n const arr = tf.split(t.squeeze, 6, 1); // x1, y1, x2, y2, score, class\n t.stack = tf.stack([arr[1], arr[0], arr[3], arr[2]], 1); // reorder dims as tf.nms expects y, x\n t.boxes = tf.squeeze(t.stack);\n t.scores = tf.squeeze(arr[4]);\n t.classes = tf.squeeze(arr[5]);\n tf.dispose([res, ...arr]);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, config.object.maxDetected || 0, config.object.iouThreshold, (config.object.minConfidence || 0));\n const nms = await t.nms.data();\n let i = 0;\n for (const id of Array.from(nms)) {\n const score = Math.trunc(100 * detections[0][id][4]) / 100;\n const classVal = detections[0][id][5];\n if (Number.isNaN(classVal)) continue;\n const label = labels[classVal].label as ObjectType;\n const [x, y] = [\n detections[0][id][0] / inputSize,\n detections[0][id][1] / inputSize,\n ];\n const boxRaw: Box = [\n x,\n y,\n detections[0][id][2] / inputSize - x,\n detections[0][id][3] / inputSize - y,\n ];\n const box: Box = [\n Math.trunc(boxRaw[0] * outputShape[0]),\n Math.trunc(boxRaw[1] * outputShape[1]),\n Math.trunc(boxRaw[2] * outputShape[0]),\n Math.trunc(boxRaw[3] * outputShape[1]),\n ];\n results.push({ id: i++, score, class: classVal, label, box, boxRaw });\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return results;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const outputSize = [input.shape[2] || 0, input.shape[1] || 0] as [number, number];\n const resize = tf.image.resizeBilinear(input, [inputSize, inputSize]);\n const objectT = config.object.enabled ? model?.execute(resize, ['tower_0/detections']) as Tensor : null;\n lastTime = now();\n tf.dispose(resize);\n\n const obj = await process(objectT, outputSize, config);\n last = obj;\n\n resolve(obj);\n });\n}\n", "export const kpt: string[] = [\n 'head',\n 'neck',\n 'rightShoulder',\n 'rightElbow',\n 'rightWrist',\n 'chest',\n 'leftShoulder',\n 'leftElbow',\n 'leftWrist',\n 'bodyCenter',\n 'rightHip',\n 'rightKnee',\n 'rightAnkle',\n 'leftHip',\n 'leftKnee',\n 'leftAnkle',\n];\n\nexport const connected: Record = {\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * EfficientPose model implementation\n *\n * Based on: [**EfficientPose**](https://github.com/daniegr/EfficientPose)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as coords from './efficientposecoords';\nimport { constants } from '../tfjs/constants';\nimport type { BodyResult, Point, BodyLandmark, BodyAnnotation } from '../result';\nimport type { GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet lastTime = 0;\nconst cache: BodyResult = { id: 0, keypoints: [], box: [0, 0, 0, 0], boxRaw: [0, 0, 0, 0], score: 0, annotations: {} as Record };\n\n// const keypoints: Array = [];\n// let box: Box = [0, 0, 0, 0];\n// let boxRaw: Box = [0, 0, 0, 0];\n// let score = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n// performs argmax and max functions on a 2d tensor\nasync function max2d(inputs, minScore): Promise<[number, number, number]> {\n const [width, height] = inputs.shape;\n const reshaped = tf.reshape(inputs, [height * width]); // combine all data\n const max = tf.max(reshaped, 0);\n const newScore: number = (await max.data())[0]; // get highest score\n if (newScore > minScore) { // skip coordinate calculation is score is too low\n const coordinates = tf.argMax(reshaped, 0);\n const mod = tf.mod(coordinates, width);\n const x = (await mod.data())[0];\n const div = tf.div(coordinates, width);\n const y: number = (await div.data())[0];\n tf.dispose([reshaped, max, coordinates, mod, div]);\n return [x, y, newScore];\n }\n tf.dispose([reshaped, max]);\n return [0, 0, newScore];\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs[0].shape) return [];\n const skipTime = (config.body.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && Object.keys(cache.keypoints).length > 0) {\n skipped++;\n return [cache];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const tensor = tf.tidy(() => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape?.[2] || 0, model?.inputs[0].shape?.[1] || 0], false);\n const enhance = tf.mul(resize, constants.tf2);\n const norm = tf.sub(enhance, constants.tf1);\n return norm;\n });\n let resT;\n if (config.body.enabled) resT = model?.execute(tensor);\n lastTime = now();\n tf.dispose(tensor);\n\n if (resT) {\n cache.keypoints.length = 0;\n const squeeze = tf.squeeze(resT);\n tf.dispose(resT);\n // body parts are basically just a stack of 2d tensors\n const stack = tf.unstack(squeeze, 2);\n tf.dispose(squeeze);\n\n // process each unstacked tensor as a separate body part\n for (let id = 0; id < stack.length; id++) {\n // actual processing to get coordinates and score\n const [x, y, partScore] = await max2d(stack[id], config.body.minConfidence);\n if (partScore > (config.body.minConfidence || 0)) {\n cache.keypoints.push({\n score: Math.round(100 * partScore) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw: [ // normalized to 0..1\n // @ts-ignore model is not undefined here\n x / model.inputs[0].shape[2], y / model.inputs[0].shape[1],\n ],\n position: [ // normalized to input image size\n // @ts-ignore model is not undefined here\n Math.round(image.shape[2] * x / model.inputs[0].shape[2]), Math.round(image.shape[1] * y / model.inputs[0].shape[1]),\n ],\n });\n }\n }\n stack.forEach((s) => tf.dispose(s));\n }\n cache.score = cache.keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const x = cache.keypoints.map((a) => a.position[0]);\n const y = cache.keypoints.map((a) => a.position[1]);\n cache.box = [\n Math.min(...x),\n Math.min(...y),\n Math.max(...x) - Math.min(...x),\n Math.max(...y) - Math.min(...y),\n ];\n const xRaw = cache.keypoints.map((a) => a.positionRaw[0]);\n const yRaw = cache.keypoints.map((a) => a.positionRaw[1]);\n cache.boxRaw = [\n Math.min(...xRaw),\n Math.min(...yRaw),\n Math.max(...xRaw) - Math.min(...xRaw),\n Math.max(...yRaw) - Math.min(...yRaw),\n ];\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = cache.keypoints.find((kpt) => kpt.part === indexes[i]);\n const pt1 = cache.keypoints.find((kpt) => kpt.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n cache.annotations[name] = pt;\n }\n resolve([cache]);\n });\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport { constants } from '../tfjs/constants';\nimport type { Box, Point } from '../result';\nimport { env } from '../util/env';\n\nexport const createBox = (startEndTensor) => ({ startPoint: tf.slice(startEndTensor, [0, 0], [-1, 2]), endPoint: tf.slice(startEndTensor, [0, 2], [-1, 2]) });\n\nexport const disposeBox = (t) => tf.dispose([t.startPoint, t.endPoint]);\n\nexport const getBoxSize = (box): [number, number] => [Math.abs(box.endPoint[0] - box.startPoint[0]), Math.abs(box.endPoint[1] - box.startPoint[1])];\n\nexport const getBoxCenter = (box): [number, number, number] => [box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2, box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2, 1];\n\nexport const clampBox = (box, input): Box => (box ? [\n Math.trunc(Math.max(0, box.startPoint[0])),\n Math.trunc(Math.max(0, box.startPoint[1])),\n Math.trunc(Math.min((input.shape[2] || 0), box.endPoint[0]) - Math.max(0, box.startPoint[0])),\n Math.trunc(Math.min((input.shape[1] || 0), box.endPoint[1]) - Math.max(0, box.startPoint[1])),\n] : [0, 0, 0, 0]);\n\nexport const getRawBox = (box, input): Box => (box ? [\n box.startPoint[0] / (input.shape[2] || 0),\n box.startPoint[1] / (input.shape[1] || 0),\n (box.endPoint[0] - box.startPoint[0]) / (input.shape[2] || 0),\n (box.endPoint[1] - box.startPoint[1]) / (input.shape[1] || 0),\n] : [0, 0, 0, 0]);\n\nexport const scaleBoxCoordinates = (box, factor, anchor) => {\n const startPoint: Point = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]];\n const endPoint: Point = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]];\n // const centerPoint = [(startPoint[0] + endPoint[0]) / 2, (startPoint[1] + endPoint[1]) / 2];\n const landmarks = box.landmarks.map((pt) => [(pt[0] + anchor[0]) * factor[0], (pt[1] + anchor[1]) * factor[1]]);\n /**\n face.mesh = box.landmarks.map((pt) => [\n ((box.startPoint[0] + box.endPoint[0]) / 2) + (pt[0] * input.shape[2] / blazeface.size()),\n ((box.startPoint[1] + box.endPoint[1]) / 2) + (pt[1] * input.shape[1] / blazeface.size()),\n ]);\n */\n\n return { startPoint, endPoint, landmarks, confidence: box.confidence };\n};\n\nexport const cutAndResize = (box, image, cropSize) => {\n const h = image.shape[1];\n const w = image.shape[2];\n const cutBox = [box.startPoint[1] / h, box.startPoint[0] / w, box.endPoint[1] / h, box.endPoint[0] / w];\n const crop = tf.image.cropAndResize(image, [cutBox], [0], cropSize);\n const norm = tf.div(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n};\n\nexport const enlargeBox = (box, factor) => {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize: [number, number] = [factor * size[0] / 2, factor * size[1] / 2];\n return {\n startPoint: [center[0] - halfSize[0], center[1] - halfSize[1]] as Point,\n endPoint: [center[0] + halfSize[0], center[1] + halfSize[1]] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size,\n };\n};\n\nexport const squarifyBox = (box) => {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const halfSize = Math.max(...size) / 2;\n return {\n startPoint: [Math.round(centers[0] - halfSize), Math.round(centers[1] - halfSize)] as Point,\n endPoint: [Math.round(centers[0] + halfSize), Math.round(centers[1] + halfSize)] as Point,\n landmarks: box.landmarks,\n confidence: box.confidence,\n size: [Math.round(size[0]), Math.round(size[1])] as [number, number],\n };\n};\n\nexport const calculateLandmarksBoundingBox = (landmarks) => {\n const x = landmarks.map((d) => d[0]);\n const y = landmarks.map((d) => d[1]);\n return {\n startPoint: [Math.min(...x), Math.min(...y)] as Point,\n endPoint: [Math.max(...x), Math.max(...y)] as Point,\n landmarks,\n };\n};\n\nexport const fixedRotationMatrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];\n\nexport const normalizeRadians = (angle: number) => angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n\nexport const computeRotation = (point1, point2) => normalizeRadians(Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]));\n\nexport const radToDegrees = (rad) => rad * 180 / Math.PI;\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport const dot = (v1: number[], v2: number[]) => {\n let product = 0;\n for (let i = 0; i < v1.length; i++) product += v1[i] * v2[i];\n return product;\n};\n\nexport const getColumnFrom2DArr = (arr, columnIndex) => {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) column.push(arr[i][columnIndex]);\n return column;\n};\n\nexport const multiplyTransformMatrices = (mat1, mat2) => {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n return product;\n};\n\nexport const buildRotationMatrix = (rotation, center) => {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n};\n\nexport const invertTransformMatrix = (matrix) => {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [-dot(rotationComponent[0], translationComponent), -dot(rotationComponent[1], translationComponent)];\n return [rotationComponent[0].concat(invertedTranslation[0]), rotationComponent[1].concat(invertedTranslation[1]), [0, 0, 1]];\n};\n\nexport const rotatePoint = (homogeneousCoordinate, rotationMatrix) => [dot(homogeneousCoordinate, rotationMatrix[0]), dot(homogeneousCoordinate, rotationMatrix[1])];\n\nexport const xyDistanceBetweenPoints = (a, b) => Math.sqrt(((a[0] - b[0]) ** 2) + ((a[1] - b[1]) ** 2));\n\nexport function generateAnchors(inputSize: number) {\n const spec = inputSize === 192\n ? { strides: [4], anchors: [1] } // facemesh-detector\n : { strides: [inputSize / 16, inputSize / 8], anchors: [2, 6] }; // blazeface\n const anchors: [number, number][] = [];\n for (let i = 0; i < spec.strides.length; i++) {\n const stride = spec.strides[i];\n const gridRows = Math.floor((inputSize + stride - 1) / stride);\n const gridCols = Math.floor((inputSize + stride - 1) / stride);\n const anchorsNum = spec.anchors[i];\n for (let gridY = 0; gridY < gridRows; gridY++) {\n const anchorY = stride * (gridY + 0.5);\n for (let gridX = 0; gridX < gridCols; gridX++) {\n const anchorX = stride * (gridX + 0.5);\n for (let n = 0; n < anchorsNum; n++) anchors.push([anchorX, anchorY]);\n }\n }\n }\n return anchors;\n}\n\nexport function transformRawCoords(coordsRaw, box, angle, rotationMatrix, inputSize) {\n const boxSize = getBoxSize(box);\n const coordsScaled = coordsRaw.map((coord) => ([ // scaled around zero-point\n (boxSize[0] / inputSize) * (coord[0] - (inputSize / 2)),\n (boxSize[1] / inputSize) * (coord[1] - (inputSize / 2)),\n (coord[2] || 0),\n ]));\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n const coordsRotationMatrix = largeAngle ? buildRotationMatrix(angle, [0, 0]) : fixedRotationMatrix;\n const coordsRotated = largeAngle ? coordsScaled.map((coord) => ([...rotatePoint(coord, coordsRotationMatrix), coord[2]])) : coordsScaled;\n const inverseRotationMatrix = largeAngle ? invertTransformMatrix(rotationMatrix) : fixedRotationMatrix;\n const boxCenter = getBoxCenter(box);\n const offsets = [dot(boxCenter, inverseRotationMatrix[0]), dot(boxCenter, inverseRotationMatrix[1])];\n return coordsRotated.map((coord) => ([\n Math.trunc(coord[0] + offsets[0]),\n Math.trunc(coord[1] + offsets[1]),\n Math.trunc(coord[2] || 0),\n ]));\n}\n\nexport function correctFaceRotation(rotate, box, input, inputSize) {\n const symmetryLine = (box.landmarks.length >= coords.meshLandmarks.count)\n ? coords.meshLandmarks.symmetryLine\n : coords.blazeFaceLandmarks.symmetryLine;\n let angle = 0; // default\n let rotationMatrix = fixedRotationMatrix; // default\n let face; // default\n\n if (rotate && env.kernels.includes('rotatewithoffset')) {\n angle = computeRotation(box.landmarks[symmetryLine[0]], box.landmarks[symmetryLine[1]]);\n const largeAngle = angle && (angle !== 0) && (Math.abs(angle) > 0.2);\n if (largeAngle) { // perform rotation only if angle is sufficiently high\n const center: Point = getBoxCenter(box);\n const centerRaw: Point = [center[0] / input.shape[2], center[1] / input.shape[1]];\n const rotated = tf.image.rotateWithOffset(input, angle, 0, [centerRaw[0], centerRaw[1]]);\n rotationMatrix = buildRotationMatrix(-angle, center);\n face = cutAndResize(box, rotated, [inputSize, inputSize]);\n tf.dispose(rotated);\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n } else {\n face = cutAndResize(box, input, [inputSize, inputSize]);\n }\n return [angle, rotationMatrix, face];\n}\n\nexport const findFaceCenter = (mesh) => {\n const x = mesh.map((m) => m[0]);\n const y = mesh.map((m) => m[1]);\n // weighted center\n /*\n const sum = (arr: number[]) => arr.reduce((prev, curr) => prev + curr, 0);\n return [sum(x) / mesh.length, sum(y) / mesh.length];\n */\n // absolute center\n return [Math.min(...x) + (Math.max(...x) - Math.min(...x)) / 2, Math.min(...y) + (Math.max(...y) - Math.min(...y)) / 2];\n};\n\nexport const calculateFaceBox = (mesh, previousBox) => {\n const center = findFaceCenter(mesh);\n const boxSize = getBoxSize(previousBox);\n const calculatedBox = {\n startPoint: [center[0] - boxSize[0] / 2, center[1] - boxSize[1] / 2] as Point,\n endPoint: [center[0] + boxSize[0] / 2, center[1] + boxSize[1] / 2] as Point,\n };\n return calculatedBox;\n};\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n * See `facemesh.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport * as util from './facemeshutil';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { Tensor, GraphModel, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\nimport type { Point } from '../result';\n\nconst keypointsCount = 6;\nlet model: GraphModel | null;\nlet anchors: Tensor | null = null;\nlet inputSize = 0;\nlet inputSizeT: Tensor | null = null;\n\nexport interface DetectBox { startPoint: Point, endPoint: Point, landmarks: Point[], confidence: number, size: [number, number] }\n\nexport const size = () => inputSize;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.detector?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model['executor'] && model.inputs[0].shape) ? model.inputs[0].shape[2] : 256;\n inputSizeT = tf.scalar(inputSize, 'int32') as Tensor;\n anchors = tf.tensor2d(util.generateAnchors(inputSize)) as Tensor;\n return model;\n}\n\nfunction decodeBoxes(boxOutputs: Tensor) {\n if (!anchors || !inputSizeT) return tf.zeros([0, 0]);\n const t: Record = {};\n t.boxStarts = tf.slice(boxOutputs, [0, 1], [-1, 2]);\n t.centers = tf.add(t.boxStarts, anchors);\n t.boxSizes = tf.slice(boxOutputs, [0, 3], [-1, 2]);\n t.boxSizesNormalized = tf.div(t.boxSizes, inputSizeT);\n t.centersNormalized = tf.div(t.centers, inputSizeT);\n t.halfBoxSize = tf.div(t.boxSizesNormalized, constants.tf2);\n t.starts = tf.sub(t.centersNormalized, t.halfBoxSize);\n t.ends = tf.add(t.centersNormalized, t.halfBoxSize);\n t.startNormalized = tf.mul(t.starts, inputSizeT);\n t.endNormalized = tf.mul(t.ends, inputSizeT);\n const boxes = tf.concat2d([t.startNormalized as Tensor2D, t.endNormalized as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n\nexport async function getBoxes(inputImage: Tensor4D, config: Config): Promise {\n // sanity check on input\n if ((!inputImage) || (inputImage['isDisposedInternal']) || (inputImage.shape.length !== 4) || (inputImage.shape[1] < 1) || (inputImage.shape[2] < 1)) return [];\n const t: Record = {};\n t.resized = tf.image.resizeBilinear(inputImage, [inputSize, inputSize]);\n t.div = tf.div(t.resized, constants.tf127);\n t.normalized = tf.sub(t.div, constants.tf1);\n const res = model?.execute(t.normalized) as Tensor[];\n if (Array.isArray(res) && res.length > 2) { // pinto converted model?\n const sorted = res.sort((a, b) => a.size - b.size);\n t.concat384 = tf.concat([sorted[0], sorted[2]], 2); // dim: 384, 1 + 16\n t.concat512 = tf.concat([sorted[1], sorted[3]], 2); // dim: 512, 1 + 16\n t.concat = tf.concat([t.concat512, t.concat384], 1);\n t.batch = tf.squeeze(t.concat, [0]);\n } else if (Array.isArray(res)) { // new facemesh-detection tfhub model\n t.batch = tf.squeeze(res[0]);\n } else { // original blazeface tfhub model\n t.batch = tf.squeeze(res);\n }\n tf.dispose(res);\n t.boxes = decodeBoxes(t.batch);\n t.logits = tf.slice(t.batch, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.logits);\n t.scores = tf.squeeze(t.sigmoid);\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.scores as Tensor1D, (config.face.detector?.maxDetected || 0), (config.face.detector?.iouThreshold || 0), (config.face.detector?.minConfidence || 0));\n const nms = await t.nms.array() as number[];\n const boxes: DetectBox[] = [];\n const scores = await t.scores.data();\n for (let i = 0; i < nms.length; i++) {\n const confidence = scores[nms[i]];\n\n if (confidence > (config.face.detector?.minConfidence || 0)) {\n const b: Record = {};\n b.bbox = tf.slice(t.boxes, [nms[i], 0], [1, -1]);\n b.slice = tf.slice(t.batch, [nms[i], keypointsCount - 1], [1, -1]);\n b.squeeze = tf.squeeze(b.slice);\n b.landmarks = tf.reshape(b.squeeze, [keypointsCount, -1]);\n const points = await b.bbox.data();\n const rawBox = {\n startPoint: [points[0], points[1]] as Point,\n endPoint: [points[2], points[3]] as Point,\n landmarks: (await b.landmarks.array()) as Point[],\n confidence,\n };\n b.anchor = tf.slice(anchors as Tensor, [nms[i], 0], [1, 2]);\n const anchor = await b.anchor.data();\n const scaledBox = util.scaleBoxCoordinates(rawBox, [(inputImage.shape[2] || 0) / inputSize, (inputImage.shape[1] || 0) / inputSize], anchor);\n const enlargedBox = util.enlargeBox(scaledBox, config.face.detector?.scale || 1.4);\n const squaredBox = util.squarifyBox(enlargedBox);\n if (squaredBox.size[0] > (config.face.detector?.['minSize'] || 0) && squaredBox.size[1] > (config.face.detector?.['minSize'] || 0)) boxes.push(squaredBox);\n Object.keys(b).forEach((tensor) => tf.dispose(b[tensor]));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return boxes;\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport * as coords from './facemeshcoords';\nimport * as util from './facemeshutil';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { Point } from '../result';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\n\nconst leftOutline = coords.meshAnnotations.leftEyeLower0;\nconst rightOutline = coords.meshAnnotations.rightEyeLower0;\n\nconst eyeLandmarks = {\n leftBounds: [leftOutline[0], leftOutline[leftOutline.length - 1]],\n rightBounds: [rightOutline[0], rightOutline[rightOutline.length - 1]],\n};\n\nconst irisLandmarks = {\n upperCenter: 3,\n lowerCenter: 4,\n index: 71,\n numCoordinates: 76,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.iris?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize === -1) inputSize = 64;\n return model;\n}\n\n// Replace the raw coordinates returned by facemesh with refined iris model coordinates and update the z coordinate to be an average of the original and the new.\nexport function replaceIrisCoords(rawCoords, newCoords, prefix, keys) {\n for (let i = 0; i < coords.irisIndices.length; i++) {\n const { key, indices } = coords.irisIndices[i];\n const originalIndices = coords.meshAnnotations[`${prefix}${key}`];\n if (!keys || keys.includes(key)) {\n for (let j = 0; j < indices.length; j++) {\n const index = indices[j];\n rawCoords[originalIndices[j]] = [\n newCoords[index][0],\n newCoords[index][1],\n (newCoords[index][2] + rawCoords[originalIndices[j]][2]) / 2,\n ];\n }\n }\n }\n}\n\nexport const getLeftToRightEyeDepthDifference = (rawCoords) => {\n const leftEyeZ = rawCoords[eyeLandmarks.leftBounds[0]][2];\n const rightEyeZ = rawCoords[eyeLandmarks.rightBounds[0]][2];\n return leftEyeZ - rightEyeZ;\n};\n\n// Returns a box describing a cropped region around the eye fit for passing to the iris model.\nexport const getEyeBox = (rawCoords, face, eyeInnerCornerIndex, eyeOuterCornerIndex, meshSize, flip = false, scale = 2.3) => {\n const box = util.squarifyBox(util.enlargeBox(util.calculateLandmarksBoundingBox([rawCoords[eyeInnerCornerIndex], rawCoords[eyeOuterCornerIndex]]), scale));\n const boxSize = util.getBoxSize(box);\n let crop = tf.image.cropAndResize(face, [[\n box.startPoint[1] / meshSize,\n box.startPoint[0] / meshSize, box.endPoint[1] / meshSize,\n box.endPoint[0] / meshSize,\n ]], [0], [inputSize, inputSize]);\n if (flip && env.kernels.includes('flipleftright')) {\n const flipped = tf.image.flipLeftRight(crop); // flipLeftRight is not defined for tfjs-node\n tf.dispose(crop);\n crop = flipped;\n }\n return { box, boxSize, crop };\n};\n\n// Given a cropped image of an eye, returns the coordinates of the contours surrounding the eye and the iris.\nexport const getEyeCoords = (eyeData, eyeBox, eyeBoxSize, flip = false) => {\n const eyeRawCoords: Point[] = [];\n for (let i = 0; i < irisLandmarks.numCoordinates; i++) {\n const x = eyeData[i * 3];\n const y = eyeData[i * 3 + 1];\n const z = eyeData[i * 3 + 2];\n eyeRawCoords.push([\n (flip ? (1 - (x / inputSize)) : (x / inputSize)) * eyeBoxSize[0] + eyeBox.startPoint[0],\n (y / inputSize) * eyeBoxSize[1] + eyeBox.startPoint[1], z,\n ]);\n }\n return { rawCoords: eyeRawCoords, iris: eyeRawCoords.slice(irisLandmarks.index) };\n};\n\n// The z-coordinates returned for the iris are unreliable, so we take the z values from the surrounding keypoints.\nexport const getAdjustedIrisCoords = (rawCoords, irisCoords, direction) => {\n const upperCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeUpper0`][irisLandmarks.upperCenter]][2];\n const lowerCenterZ = rawCoords[coords.meshAnnotations[`${direction}EyeLower0`][irisLandmarks.lowerCenter]][2];\n const averageZ = (upperCenterZ + lowerCenterZ) / 2;\n // Iris indices: 0: center | 1: right | 2: above | 3: left | 4: below\n return irisCoords.map((coord, i) => {\n let z = averageZ;\n if (i === 2) {\n z = upperCenterZ;\n } else if (i === 4) {\n z = lowerCenterZ;\n }\n return [coord[0], coord[1], z];\n });\n};\n\nexport async function augmentIris(rawCoords, face, meshSize, config: Config) {\n if (!model?.['executor']) return rawCoords;\n const { box: leftEyeBox, boxSize: leftEyeBoxSize, crop: leftEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.leftBounds[0], eyeLandmarks.leftBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\n const { box: rightEyeBox, boxSize: rightEyeBoxSize, crop: rightEyeCrop } = getEyeBox(rawCoords, face, eyeLandmarks.rightBounds[0], eyeLandmarks.rightBounds[1], meshSize, true, config.face.iris?.scale || 2.3);\n const combined = tf.concat([leftEyeCrop, rightEyeCrop]);\n tf.dispose(leftEyeCrop);\n tf.dispose(rightEyeCrop);\n const eyePredictions = model.execute(combined) as Tensor;\n tf.dispose(combined);\n const eyePredictionsData = await eyePredictions.data();\n tf.dispose(eyePredictions);\n const leftEyeData = eyePredictionsData.slice(0, irisLandmarks.numCoordinates * 3);\n const { rawCoords: leftEyeRawCoords, iris: leftIrisRawCoords } = getEyeCoords(leftEyeData, leftEyeBox, leftEyeBoxSize, true);\n const rightEyeData = eyePredictionsData.slice(irisLandmarks.numCoordinates * 3);\n const { rawCoords: rightEyeRawCoords, iris: rightIrisRawCoords } = getEyeCoords(rightEyeData, rightEyeBox, rightEyeBoxSize, false);\n const leftToRightEyeDepthDifference = getLeftToRightEyeDepthDifference(rawCoords);\n if (Math.abs(leftToRightEyeDepthDifference) < 30) { // User is looking straight ahead.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', null);\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', null);\n // If the user is looking to the left or to the right, the iris coordinates tend to diverge too much from the mesh coordinates for them to be merged so we only update a single contour line above and below the eye.\n } else if (leftToRightEyeDepthDifference < 1) { // User is looking towards the right.\n replaceIrisCoords(rawCoords, leftEyeRawCoords, 'left', ['EyeUpper0', 'EyeLower0']);\n } else { // User is looking towards the left.\n replaceIrisCoords(rawCoords, rightEyeRawCoords, 'right', ['EyeUpper0', 'EyeLower0']);\n }\n const adjustedLeftIrisCoords = getAdjustedIrisCoords(rawCoords, leftIrisRawCoords, 'left');\n const adjustedRightIrisCoords = getAdjustedIrisCoords(rawCoords, rightIrisRawCoords, 'right');\n const newCoords = rawCoords.concat(adjustedLeftIrisCoords).concat(adjustedRightIrisCoords);\n return newCoords;\n}\n", "import * as constants from './constants';\nimport type { Tensor } from '../tfjs/types';\n\nexport async function augment(rawCoords, results: Tensor[]) {\n const t: Record = { // all attention models produce 2d results so it needs to be later augmented with correct z-coords\n // mesh: results[0], // already have it in rawCoords // output_mesh_identity\n // flag: results[1], // already processed in parent // conv_faceflag\n lips: await results.filter((r) => r.size === 160)?.[0]?.data() as Float32Array, // 80 x 2d = 160 // output_lips\n irisL: await results.filter((r) => r.size === 10)?.[0]?.data() as Float32Array, // 5 x 2d = 10 // output_right_iris\n eyeL: await results.filter((r) => r.size === 142)?.[0]?.data() as Float32Array, // 71 x 2d = 142 // output_right_eye\n irisR: await results.filter((r) => r.size === 10)?.[1]?.data() as Float32Array, // 5 x 2d = 10 // output_left_iris\n eyeR: await results.filter((r) => r.size === 142)?.[1]?.data() as Float32Array, // 71 x 2d = 142// output_left_eye\n };\n for (const val of Object.values(t)) {\n if (!val) return rawCoords; // could not find tensor\n }\n\n // augment iris: adds additional 5 keypoints per eye\n const irisLDepth = constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisL.length / 2; i++) rawCoords.push([t.irisL[2 * i + 0], t.irisL[2 * i + 1], irisLDepth]);\n const irisRDepth = constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.reduce((prev, curr) => prev += rawCoords[curr][2], 0) / constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG.length; // get average z-coord for iris\n for (let i = 0; i < t.irisR.length / 2; i++) rawCoords.push([t.irisR[2 * i + 0], t.irisR[2 * i + 1], irisRDepth]);\n\n // augment eyes: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.eyeL.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]] = [t.eyeL[2 * i + 0], t.eyeL[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LEFT_EYE_CONFIG[i]][2]];\n for (let i = 0; i < t.eyeR.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]] = [t.eyeR[2 * i + 0], t.eyeR[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_RIGHT_EYE_CONFIG[i]][2]];\n\n // augment lips: replaces eye keypoints based on heuristic mapping\n for (let i = 0; i < t.lips.length / 2; i++) rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]] = [t.lips[2 * i + 0], t.lips[2 * i + 1], rawCoords[constants.LANDMARKS_REFINEMENT_LIPS_CONFIG[i]][2]];\n\n return rawCoords;\n}\n", "/**\n * BlazeFace, FaceMesh & Iris model implementation\n *\n * Based on:\n * - [**MediaPipe BlazeFace**](https://drive.google.com/file/d/1f39lSzU5Oq-j_OXgS67KfN5wNsoeAZ4V/view)\n * - Facial Spacial Geometry: [**MediaPipe FaceMesh**](https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view)\n * - Eye Iris Details: [**MediaPipe Iris**](https://drive.google.com/file/d/1bsWbokp9AklH2ANjCfmjqEzzxO1CNbMu/view)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport * as blazeface from './blazeface';\nimport * as util from './facemeshutil';\nimport * as coords from './facemeshcoords';\nimport * as iris from './iris';\nimport * as attention from './attention';\nimport { histogramEqualization } from '../image/enhance';\nimport { env } from '../util/env';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { FaceResult, FaceLandmark, Point } from '../result';\nimport type { Config } from '../config';\nimport type { DetectBox } from './blazeface';\n\nconst cache = {\n boxes: [] as DetectBox[],\n skipped: Number.MAX_SAFE_INTEGER,\n timestamp: 0,\n};\n\nlet model: GraphModel | null = null;\nlet inputSize = 0;\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n // reset cached boxes\n const skipTime = (config.face.detector?.skipTime || 0) > (now() - cache.timestamp);\n const skipFrame = cache.skipped < (config.face.detector?.skipFrames || 0);\n if (!config.skipAllowed || !skipTime || !skipFrame || cache.boxes.length === 0) {\n cache.boxes = await blazeface.getBoxes(input, config); // get results from blazeface detector\n cache.timestamp = now();\n cache.skipped = 0;\n } else {\n cache.skipped++;\n }\n const faces: FaceResult[] = [];\n const newCache: DetectBox[] = [];\n let id = 0;\n const size = inputSize;\n for (let i = 0; i < cache.boxes.length; i++) {\n const box = cache.boxes[i];\n let angle = 0;\n let rotationMatrix;\n const face: FaceResult = { // init face result\n id: id++,\n mesh: [],\n meshRaw: [],\n box: [0, 0, 0, 0],\n boxRaw: [0, 0, 0, 0],\n score: 0,\n boxScore: 0,\n faceScore: 0,\n size: [0, 0],\n // contoursRaw: [],\n // contours: [],\n annotations: {} as Record,\n };\n\n // optional rotation correction based on detector data only if mesh is disabled otherwise perform it later when we have more accurate mesh data. if no rotation correction this function performs crop\n [angle, rotationMatrix, face.tensor] = util.correctFaceRotation(config.face.detector?.rotation, box, input, config.face.mesh?.enabled ? inputSize : blazeface.size());\n if (config.filter.equalization) {\n const equilized = face.tensor ? await histogramEqualization(face.tensor) : undefined;\n tf.dispose(face.tensor);\n if (equilized) face.tensor = equilized;\n }\n face.boxScore = Math.round(100 * box.confidence) / 100;\n if (!config.face.mesh?.enabled || !model?.['executor']) { // mesh not enabled or not loaded, return resuts from detector only\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.score = face.boxScore;\n face.size = box.size;\n face.mesh = box.landmarks;\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n } else if (!model) { // mesh enabled, but not loaded\n if (config.debug) log('face mesh detection requested, but model is not loaded');\n } else { // mesh enabled\n if (config.face.attention?.enabled && !env.kernels.includes('atan2')) {\n config.face.attention.enabled = false;\n tf.dispose(face.tensor);\n return faces;\n }\n const results = model.execute(face.tensor as Tensor) as Tensor[];\n const confidenceT = results.find((t) => t.shape[t.shape.length - 1] === 1) as Tensor;\n const faceConfidence = await confidenceT.data();\n face.faceScore = Math.round(100 * faceConfidence[0]) / 100;\n if (face.faceScore < (config.face.detector?.minConfidence || 1)) { // low confidence in detected mesh\n box.confidence = face.faceScore; // reset confidence of cached box\n if (config.face.mesh['keepInvalid']) {\n face.box = util.clampBox(box, input);\n face.boxRaw = util.getRawBox(box, input);\n face.size = box.size;\n face.score = face.boxScore;\n face.mesh = box.landmarks;\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 1), pt[1] / (input.shape[1] || 1), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.blazeFaceLandmarks)) {\n face.annotations[key] = [face.mesh[coords.blazeFaceLandmarks[key] as number]]; // add annotations\n }\n }\n } else {\n const meshT = results.find((t) => t.shape[t.shape.length - 1] === 1404) as Tensor;\n const coordsReshaped = tf.reshape(meshT, [-1, 3]);\n let rawCoords = await coordsReshaped.array();\n tf.dispose(coordsReshaped);\n if (config.face.attention?.enabled) {\n rawCoords = await attention.augment(rawCoords, results); // augment iris results using attention model results\n } else if (config.face.iris?.enabled) {\n rawCoords = await iris.augmentIris(rawCoords, face.tensor, inputSize, config); // run iris model and augment results\n }\n face.mesh = util.transformRawCoords(rawCoords, box, angle, rotationMatrix, inputSize); // get processed mesh\n face.meshRaw = face.mesh.map((pt) => [pt[0] / (input.shape[2] || 0), pt[1] / (input.shape[1] || 0), (pt[2] || 0) / size]);\n for (const key of Object.keys(coords.meshAnnotations)) face.annotations[key] = coords.meshAnnotations[key].map((index) => face.mesh[index]); // add annotations\n face.score = face.faceScore;\n const calculatedBox = {\n ...util.calculateFaceBox(face.mesh, box),\n confidence: box.confidence,\n landmarks: box.landmarks,\n size: box.size,\n };\n face.box = util.clampBox(calculatedBox, input);\n face.boxRaw = util.getRawBox(calculatedBox, input);\n face.size = calculatedBox.size;\n /*\n const contoursT = results.find((t) => t.shape[t.shape.length - 1] === 266) as Tensor;\n const contoursData = contoursT && await contoursT.data(); // 133 x 2d points\n face.contoursRaw = [];\n for (let j = 0; j < contoursData.length / 2; j++) face.contoursRaw.push([contoursData[2 * j + 0] / inputSize, contoursData[2 * j + 1] / inputSize]);\n face.contours = face.contoursRaw.map((c) => [Math.trunc((input.shape[2] || 1) * c[0]), Math.trunc((input.shape[1] || 1) * c[1])]);\n */\n newCache.push(calculatedBox);\n }\n tf.dispose(results);\n }\n if (face.score > (config.face.detector?.minConfidence || 1)) faces.push(face);\n else tf.dispose(face.tensor);\n }\n cache.boxes = newCache; // reset cache\n return faces;\n}\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (config.face.attention?.enabled && model?.['signature']) {\n if (Object.keys(model?.['signature']?.outputs || {}).length < 6) model = null;\n }\n if (!model) {\n if (config.face.attention?.enabled) model = await loadModel(config.face.attention.modelPath);\n else model = await loadModel(config.face.mesh?.modelPath);\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n inputSize = (model['executor'] && model?.inputs?.[0].shape) ? model?.inputs?.[0].shape[2] : 256;\n return model;\n}\n\nexport const triangulation = coords.TRI468;\nexport const uvmap = coords.UV468;\n", "/**\n * Emotion model implementation\n *\n * [**Oarriaga**](https://github.com/oarriaga/face_classification)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport type { Emotion } from '../result';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\n\nlet annotations: string[] = [];\nlet model: GraphModel | null;\nconst last: { score: number, emotion: Emotion }[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet rgb = false;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n model = await loadModel(config.face.emotion?.modelPath);\n rgb = model?.inputs?.[0].shape?.[3] === 3;\n if (!rgb) annotations = ['angry', 'disgust', 'fear', 'happy', 'sad', 'surprise', 'neutral']; // oarriaga and gear\n else annotations = ['angry', 'disgust', 'fear', 'happy', 'neutral', 'sad', 'surprise']; // affectnet\n } else if (config.debug) {\n log('cached model:', model['modelUrl']);\n }\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ score: number, emotion: Emotion }[]> {\n if (!model) return [];\n const skipFrame = skipped < (config.face.emotion?.skipFrames || 0);\n const skipTime = (config.face.emotion?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx] && (last[idx].length > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const obj: { score: number, emotion: Emotion }[] = [];\n if (config.face.emotion?.enabled) {\n const t: Record = {};\n const inputSize = model?.inputs[0].shape ? model.inputs[0].shape[2] : 0;\n if (config.face.emotion?.['crop'] > 0) { // optional crop\n const crop = config.face.emotion?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [inputSize, inputSize]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n }\n if (rgb) {\n t.mul = tf.mul(t.resize, 255);\n t.normalize = tf.sub(t.mul, [103.939, 116.779, 123.68]); // affectnet uses specific norm values\n t.emotion = model?.execute(t.normalize) as Tensor; // result is already in range 0..1, no need for additional activation\n } else {\n // [t.red, t.green, t.blue] = tf.split(t.resize, 3, 3);\n // weighted rgb to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n // t.redNorm = tf.mul(t.red, rgb[0]);\n // t.greenNorm = tf.mul(t.green, rgb[1]);\n // t.blueNorm = tf.mul(t.blue, rgb[2]);\n // t.grayscale = tf.addN([t.redNorm, t.greenNorm, t.blueNorm]);\n t.channels = tf.mul(t.resize, constants.rgb);\n t.grayscale = tf.sum(t.channels, 3, true);\n t.grayscaleSub = tf.sub(t.grayscale, constants.tf05);\n t.grayscaleMul = tf.mul(t.grayscaleSub, constants.tf2);\n t.emotion = model?.execute(t.grayscaleMul) as Tensor; // result is already in range 0..1, no need for additional activation\n }\n lastTime = now();\n const data = await t.emotion.data();\n for (let i = 0; i < data.length; i++) {\n if (data[i] > (config.face.emotion.minConfidence || 0)) obj.push({ score: Math.min(0.99, Math.trunc(100 * data[i]) / 100), emotion: annotations[i] as Emotion });\n }\n obj.sort((a, b) => b.score - a.score);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "/**\n * FaceRes model implementation\n *\n * Returns Age, Gender, Descriptor\n * Implements Face similarity function\n *\n * Based on: [**HSE-FaceRes**](https://github.com/HSE-asavchenko/HSE_FaceRec_tf)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel, Tensor4D, Tensor1D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport type { Gender, Race } from '../result';\n\nexport interface FaceRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nlet model: GraphModel | null;\nconst last: FaceRes[] = [];\n\nlet lastTime = 0;\nlet lastCount = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.description?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport function enhance(input, config: Config): Tensor {\n const tensor = (input.image || input.tensor || input) as Tensor4D; // input received from detector is already normalized to 0..1, input is also assumed to be straightened\n if (!model?.inputs[0].shape) return tensor; // model has no shape so no point continuing\n let crop: Tensor;\n if (config.face.description?.['crop'] > 0) { // optional crop\n const cropval = config.face.description?.['crop'];\n const box = [[cropval, cropval, 1 - cropval, 1 - cropval]];\n crop = tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n crop = tf.image.resizeBilinear(tensor, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n const norm: Tensor = tf.mul(crop, constants.tf255);\n tf.dispose(crop);\n return norm;\n /*\n // do a tight crop of image and resize it to fit the model\n const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n const crop = (tensor.shape.length === 3)\n ? tf.image.cropAndResize(tf.expandDims(tensor, 0), box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]) // add batch dimension if missing\n : tf.image.cropAndResize(tensor, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n */\n /*\n // convert to black&white to avoid colorization impact\n const rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\n const [red, green, blue] = tf.split(crop, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n const merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n */\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n const obj: FaceRes = {\n age: 0 as number,\n gender: 'unknown' as Gender,\n genderScore: 0 as number,\n descriptor: [] as number[],\n };\n if (!model?.['executor']) return obj;\n const skipFrame = skipped < (config.face.description?.skipFrames || 0);\n const skipTime = (config.face.description?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && (last?.[idx]?.age > 0) && (last?.[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (config.face.description?.enabled) {\n const enhanced = enhance(image, config);\n const resT = model?.execute(enhanced) as Tensor[];\n lastTime = now();\n tf.dispose(enhanced);\n const genderT = resT.find((t) => t.shape[1] === 1) as Tensor;\n const gender = await genderT.data();\n const confidence = Math.trunc(200 * Math.abs((gender[0] - 0.5))) / 100;\n if (confidence > (config.face.description.minConfidence || 0)) {\n obj.gender = gender[0] <= 0.5 ? 'female' : 'male';\n obj.genderScore = Math.min(0.99, confidence);\n }\n const argmax = tf.argMax(resT.find((t) => t.shape[1] === 100) as Tensor1D, 1);\n const ageIdx: number = (await argmax.data())[0];\n tf.dispose(argmax);\n const ageT = resT.find((t) => t.shape[1] === 100) as Tensor;\n const all = await ageT.data();\n obj.age = Math.round(all[ageIdx - 1] > all[ageIdx + 1] ? 10 * ageIdx - 100 * all[ageIdx - 1] : 10 * ageIdx + 100 * all[ageIdx + 1]) / 10;\n\n if (Number.isNaN(gender[0]) || Number.isNaN(all[0])) log('faceres error:', { model, result: resT });\n\n const desc = resT.find((t) => t.shape[1] === 1024);\n // const reshape = desc.reshape([128, 8]); // reshape large 1024-element descriptor to 128 x 8\n // const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it which leaves us with 128-element descriptor\n const descriptor = desc ? await desc.data() : [] as number[];\n obj.descriptor = Array.from(descriptor);\n resT.forEach((t) => tf.dispose(t));\n }\n last[idx] = obj;\n lastCount = count;\n resolve(obj);\n });\n}\n", "import type { Tensor } from '../tfjs/types';\nimport type { FaceResult } from '../result';\n// import * as tf from 'dist/tfjs.esm.js';\nimport { meshAnnotations } from './facemeshcoords';\n\nconst expandFact = 0.1;\nconst alpha = 0.5;\n\n// point inclusion in polygon based on https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\nfunction insidePoly(x: number, y: number, polygon: { x: number, y: number }[]): boolean {\n let inside = false;\n let j = polygon.length - 1;\n for (let i = 0; i < polygon.length; j = i++) {\n if (((polygon[i].y > y) !== (polygon[j].y > y)) && (x < (polygon[j].x - polygon[i].x) * (y - polygon[i].y) / (polygon[j].y - polygon[i].y) + polygon[i].x)) inside = !inside;\n }\n return inside;\n}\n\nexport async function mask(face: FaceResult): Promise {\n if (!face.tensor) return face.tensor;\n if (!face.mesh || face.mesh.length < 100) return face.tensor;\n const width = face.tensor.shape[2] || 0;\n const height = face.tensor.shape[1] || 0;\n const buffer = await face.tensor.buffer();\n let silhouette: { x: number, y: number }[] = [];\n for (const pt of meshAnnotations.silhouette) silhouette.push({ x: (face.mesh[pt][0] - face.box[0]) / face.box[2], y: (face.mesh[pt][1] - face.box[1]) / face.box[3] }); // add all silhouette points scaled to local box\n if (expandFact && expandFact > 0) silhouette = silhouette.map((pt) => ({ x: pt.x > 0.5 ? pt.x + expandFact : pt.x - expandFact, y: pt.y > 0.5 ? pt.y + expandFact : pt.y - expandFact })); // expand silhouette\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const inside = insidePoly(x / width, y / width, silhouette);\n if (!inside) {\n buffer.set(alpha * buffer.get(0, y, x, 0), 0, y, x, 0);\n buffer.set(alpha * buffer.get(0, y, x, 1), 0, y, x, 1);\n buffer.set(alpha * buffer.get(0, y, x, 2), 0, y, x, 2);\n }\n }\n }\n const output = buffer.toTensor();\n // tf.dispose(buffer);\n return output;\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.antispoof?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.antispoof?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.antispoof?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * Anti-spoofing model implementation\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst cached: number[] = [];\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastCount = 0;\nlet lastTime = 0;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.liveness?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model?.['executor']) return 0;\n const skipTime = (config.face.liveness?.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.face.liveness?.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && cached[idx]) {\n skipped++;\n return cached[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n const resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape ? model.inputs[0].shape[2] : 0, model?.inputs[0].shape ? model.inputs[0].shape[1] : 0], false);\n const res = model?.execute(resize) as Tensor;\n const num = (await res.data())[0];\n cached[idx] = Math.round(100 * num) / 100;\n lastCount = count;\n lastTime = now();\n tf.dispose([resize, res]);\n resolve(cached[idx]);\n });\n}\n", "/**\n * GEAR [gender/emotion/age/race] model implementation\n *\n * Based on: [**GEAR Predictor**](https://github.com/Udolf15/GEAR-Predictor)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Gender, Race } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nexport interface GearType { age: number, gender: Gender, genderScore: number, race: { score: number, race: Race }[] }\nlet model: GraphModel | null;\nconst last: GearType[] = [];\nconst raceNames = ['white', 'black', 'asian', 'indian', 'other'];\nconst ageWeights = [15, 23, 28, 35.5, 45.5, 55.5, 65];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face.gear?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise {\n if (!model) return { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n const skipFrame = skipped < (config.face.gear?.skipFrames || 0);\n const skipTime = (config.face.gear?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n // t.resize = tf.image.resizeBilinear(image, [model?.inputs[0].shape[2], model?.inputs[0].shape[1]], false);\n let box = [[0.0, 0.10, 0.90, 0.90]]; // empyrical values for top, left, bottom, right\n if (config.face.gear?.['crop'] > 0) { // optional crop config value\n const crop = config.face.gear?.['crop'];\n box = [[crop, crop, 1 - crop, 1 - crop]];\n }\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const obj: GearType = { age: 0, gender: 'unknown', genderScore: 0, race: [] };\n if (config.face.gear?.enabled) [t.age, t.gender, t.race] = model.execute(t.resize, ['age_output', 'gender_output', 'race_output']) as Tensor[];\n const gender = await t.gender.data();\n obj.gender = gender[0] > gender[1] ? 'male' : 'female';\n obj.genderScore = Math.round(100 * (gender[0] > gender[1] ? gender[0] : gender[1])) / 100;\n const race = await t.race.data();\n for (let i = 0; i < race.length; i++) {\n if (race[i] > (config.face.gear?.minConfidence || 0.2)) obj.race.push({ score: Math.round(100 * race[i]) / 100, race: raceNames[i] as Race });\n }\n obj.race.sort((a, b) => b.score - a.score);\n // {0: 'Below20', 1: '21-25', 2: '26-30', 3: '31-40',4: '41-50', 5: '51-60', 6: 'Above60'}\n const ageDistribution = Array.from(await t.age.data());\n const ageSorted = ageDistribution.map((a, i) => [ageWeights[i], a]).sort((a, b) => b[1] - a[1]);\n let age = ageSorted[0][0]; // pick best starting point\n for (let i = 1; i < ageSorted.length; i++) age += ageSorted[i][1] * (ageSorted[i][0] - age); // adjust with each other choice by weight\n obj.age = Math.round(10 * age) / 10;\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Age model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { env } from '../util/env';\nimport { constants } from '../tfjs/constants';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\n\nlet model: GraphModel | null;\nconst last: { age: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet'].modelPathAge);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx: number, count: number): Promise<{ age: number }> {\n if (!model) return { age: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.age && (last[idx]?.age > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs || !model.inputs[0] || !model.inputs[0].shape) return;\n const t: Record = {};\n if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.mul(t.resize, constants.tf255);\n const obj = { age: 0 };\n if (config.face['ssrnet']?.enabled) t.age = model.execute(t.enhance) as Tensor;\n if (t.age) {\n const data = await t.age.data();\n obj.age = Math.trunc(10 * data[0]) / 10;\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * Gender model implementation\n *\n * Based on: [**SSR-Net**](https://github.com/shamangary/SSR-Net)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { Gender } from '../result';\nimport type { Config } from '../config';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: { gender: Gender, genderScore: number }[] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\n// tuning values\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale\n\nexport async function load(config: Config) {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['ssrnet']?.modelPathGender);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(image: Tensor4D, config: Config, idx, count): Promise<{ gender: Gender, genderScore: number }> {\n if (!model) return { gender: 'unknown', genderScore: 0 };\n const skipFrame = skipped < (config.face['ssrnet']?.skipFrames || 0);\n const skipTime = (config.face['ssrnet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipFrame && skipTime && (lastCount === count) && last[idx]?.gender && (last[idx]?.genderScore > 0)) {\n skipped++;\n return last[idx];\n }\n skipped = 0;\n return new Promise(async (resolve) => {\n if (!model?.inputs[0].shape) return;\n const t: Record = {};\n if (config.face['ssrnet']?.['crop'] > 0) { // optional crop\n const crop = config.face['ssrnet']?.['crop'];\n const box = [[crop, crop, 1 - crop, 1 - crop]];\n t.resize = tf.image.cropAndResize(image, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n } else {\n t.resize = tf.image.resizeBilinear(image, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false);\n }\n t.enhance = tf.tidy(() => {\n let normalize: Tensor;\n if (model?.inputs?.[0].shape?.[3] === 1) {\n const [red, green, blue] = tf.split(t.resize, 3, 3);\n const redNorm = tf.mul(red, rgb[0]);\n const greenNorm = tf.mul(green, rgb[1]);\n const blueNorm = tf.mul(blue, rgb[2]);\n const grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\n normalize = tf.mul(tf.sub(grayscale, constants.tf05), 2); // range grayscale:-1..1\n } else {\n normalize = tf.mul(tf.sub(t.resize, constants.tf05), 2); // range rgb:-1..1\n }\n return normalize;\n });\n const obj: { gender: Gender, genderScore: number } = { gender: 'unknown', genderScore: 0 };\n if (config.face['ssrnet']?.enabled) t.gender = model.execute(t.enhance) as Tensor;\n const data = await t.gender.data();\n obj.gender = data[0] > data[1] ? 'female' : 'male'; // returns two values 0..1, bigger one is prediction\n obj.genderScore = data[0] > data[1] ? (Math.trunc(100 * data[0]) / 100) : (Math.trunc(100 * data[1]) / 100);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n last[idx] = obj;\n lastCount = count;\n lastTime = now();\n resolve(obj);\n });\n}\n", "/**\n * MobileFaceNet model implementation\n *\n * Based on: [**BecauseofAI MobileFace**](https://github.com/becauseofAI/MobileFace)\n *\n * Obsolete and replaced by `faceres` that performs age/gender/descriptor analysis\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['mobilefacenet']?.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\n/*\n// convert to black&white to avoid colorization impact\nconst rgb = [0.2989, 0.5870, 0.1140]; // factors for red/green/blue colors when converting to grayscale: https://www.mathworks.com/help/matlab/ref/rgb2gray.html\nconst [red, green, blue] = tf.split(crop, 3, 3);\nconst redNorm = tf.mul(red, rgb[0]);\nconst greenNorm = tf.mul(green, rgb[1]);\nconst blueNorm = tf.mul(blue, rgb[2]);\nconst grayscale = tf.addN([redNorm, greenNorm, blueNorm]);\nconst merge = tf.stack([grayscale, grayscale, grayscale], 3).squeeze(4);\n\n// optional increase image contrast\n// or do it per-channel so mean is done on each channel\n// or do it based on histogram\nconst mean = merge.mean();\nconst factor = 5;\nconst contrast = merge.sub(mean).mul(factor).add(mean);\n*/\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['mobilefacenet']?.skipFrames || 0);\n const skipTime = (config.face['mobilefacenet']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['mobilefacenet']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n /*\n // optional normalize outputs with l2 normalization\n const scaled = tf.tidy(() => {\n const l2 = res.norm('euclidean');\n const scale = res.div(l2);\n return scale;\n });\n\n // optional reduce feature vector complexity\n const reshape = tf.reshape(res, [128, 2]); // split 256 vectors into 128 x 2\n const reduce = reshape.logSumExp(1); // reduce 2nd dimension by calculating logSumExp on it\n */\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "/**\n * InsightFace model implementation\n *\n * Based on: [**DeepInsight InsightFace**](https://github.com/deepinsight/insightface)\n *\n * Alternative face embedding detection\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { Tensor, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nconst last: number[][] = [];\nlet lastCount = 0;\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) model = await loadModel(config.face['insightface'].modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config, idx, count): Promise {\n if (!model?.['executor']) return [];\n const skipFrame = skipped < (config.face['insightface']?.skipFrames || 0);\n const skipTime = (config.face['insightface']?.skipTime || 0) > (now() - lastTime);\n if (config.skipAllowed && skipTime && skipFrame && (lastCount === count) && last[idx]) {\n skipped++;\n return last[idx];\n }\n return new Promise(async (resolve) => {\n let data: number[] = [];\n if (config.face['insightface']?.enabled && model?.inputs[0].shape) {\n const t: Record = {};\n t.crop = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]], false); // just resize to fit the embedding model\n // do a tight crop of image and resize it to fit the model\n // const box = [[0.05, 0.15, 0.85, 0.85]]; // empyrical values for top, left, bottom, right\n // t.crop = tf.image.cropAndResize(input, box, [0], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n t.data = model.execute(t.crop) as Tensor;\n const output = await t.data.data();\n data = Array.from(output); // convert typed array to simple array\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n last[idx] = data;\n lastCount = count;\n lastTime = now();\n resolve(data);\n });\n}\n", "import type { Point, FaceResult } from '../result';\n\ntype Vector = [number, number, number];\n\nconst calculateGaze = (face: FaceResult): { bearing: number, strength: number } => {\n const radians = (pt1: Point, pt2: Point) => Math.atan2(pt1[1] - pt2[1], pt1[0] - pt2[0]); // function to calculate angle between any two points\n if (!face.annotations.rightEyeIris || !face.annotations.leftEyeIris) return { bearing: 0, strength: 0 };\n\n const offsetIris = [0, -0.1]; // iris center may not align with average of eye extremes\n const eyeRatio = 1; // factor to normalize changes x vs y\n\n const left = (face.mesh[33][2] || 0) > (face.mesh[263][2] || 0); // pick left or right eye depending which one is closer bazed on outsize point z axis\n const irisCenter = left ? face.mesh[473] : face.mesh[468];\n const eyeCenter = left // eye center is average of extreme points on x axis for both x and y, ignoring y extreme points as eyelids naturally open/close more when gazing up/down so relative point is less precise\n ? [(face.mesh[133][0] + face.mesh[33][0]) / 2, (face.mesh[133][1] + face.mesh[33][1]) / 2]\n : [(face.mesh[263][0] + face.mesh[362][0]) / 2, (face.mesh[263][1] + face.mesh[362][1]) / 2];\n const eyeSize = left // eye size is difference between extreme points for both x and y, used to normalize & squarify eye dimensions\n ? [face.mesh[133][0] - face.mesh[33][0], face.mesh[23][1] - face.mesh[27][1]]\n : [face.mesh[263][0] - face.mesh[362][0], face.mesh[253][1] - face.mesh[257][1]];\n const eyeDiff: Point = [ // x distance between extreme point and center point normalized with eye size\n (eyeCenter[0] - irisCenter[0]) / eyeSize[0] - offsetIris[0],\n eyeRatio * (irisCenter[1] - eyeCenter[1]) / eyeSize[1] - offsetIris[1],\n ];\n let strength = Math.sqrt((eyeDiff[0] * eyeDiff[0]) + (eyeDiff[1] * eyeDiff[1])); // vector length is a diagonal between two differences\n strength = Math.min(strength, face.boxRaw[2] / 2, face.boxRaw[3] / 2); // limit strength to half of box size to avoid clipping due to low precision\n const bearing = (radians([0, 0], eyeDiff) + (Math.PI / 2)) % Math.PI; // using eyeDiff instead eyeCenter/irisCenter combo due to manual adjustments and rotate clockwise 90degrees\n return { bearing, strength };\n};\n\nexport const calculateFaceAngle = (face: FaceResult, imageSize: [number, number]): {\n angle: { pitch: number, yaw: number, roll: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n} => {\n // const degrees = (theta) => Math.abs(((theta * 180) / Math.PI) % 360);\n const normalize = (v: Vector): Vector => { // normalize vector\n const length = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);\n v[0] /= length;\n v[1] /= length;\n v[2] /= length;\n return v;\n };\n const subVectors = (a: Vector, b: Vector): Vector => { // vector subtraction (a - b)\n const x = a[0] - b[0];\n const y = a[1] - b[1];\n const z = a[2] - b[2];\n return [x, y, z];\n };\n const crossVectors = (a: Vector, b: Vector): Vector => { // vector cross product (a x b)\n const x = a[1] * b[2] - a[2] * b[1];\n const y = a[2] * b[0] - a[0] * b[2];\n const z = a[0] * b[1] - a[1] * b[0];\n return [x, y, z];\n };\n // 3x3 rotation matrix to Euler angles based on https://www.geometrictools.com/Documentation/EulerAngles.pdf\n const rotationMatrixToEulerAngle = (r: number[]): { pitch: number, yaw: number, roll: number } => {\n const [r00, _r01, _r02, r10, r11, r12, r20, r21, r22] = r; // eslint-disable-line @typescript-eslint/no-unused-vars\n let thetaX: number;\n let thetaY: number;\n let thetaZ: number;\n if (r10 < 1) { // YZX calculation\n if (r10 > -1) {\n thetaZ = Math.asin(r10);\n thetaY = Math.atan2(-r20, r00);\n thetaX = Math.atan2(-r12, r11);\n } else {\n thetaZ = -Math.PI / 2;\n thetaY = -Math.atan2(r21, r22);\n thetaX = 0;\n }\n } else {\n thetaZ = Math.PI / 2;\n thetaY = Math.atan2(r21, r22);\n thetaX = 0;\n }\n if (Number.isNaN(thetaX)) thetaX = 0;\n if (Number.isNaN(thetaY)) thetaY = 0;\n if (Number.isNaN(thetaZ)) thetaZ = 0;\n return { pitch: 2 * -thetaX, yaw: 2 * -thetaY, roll: 2 * -thetaZ };\n };\n\n /*\n const meshToEulerAngle = (mesh) => { // simple Euler angle calculation based existing 3D mesh\n const radians = (a1, a2, b1, b2) => Math.atan2(b2 - a2, b1 - a1);\n return { // values are in radians in range of -pi/2 to pi/2 which is -90 to +90 degrees, value of 0 means center\n pitch: radians(mesh[10][1], mesh[10][2], mesh[152][1], mesh[152][2]), // looking at y,z of top and bottom points of the face // pitch is face move up/down\n yaw: radians(mesh[33][0], mesh[33][2], mesh[263][0], mesh[263][2]), // looking at x,z of outside corners of leftEye and rightEye // yaw is face turn left/right\n roll: radians(mesh[33][0], mesh[33][1], mesh[263][0], mesh[263][1]), // looking at x,y of outside corners of leftEye and rightEye // roll is face lean left/right\n };\n };\n */\n\n // initialize gaze and mesh\n const mesh = face.meshRaw;\n if (!mesh || mesh.length < 300) return { angle: { pitch: 0, yaw: 0, roll: 0 }, matrix: [1, 0, 0, 0, 1, 0, 0, 0, 1], gaze: { bearing: 0, strength: 0 } };\n\n const size = Math.max(face.boxRaw[2] * imageSize[0], face.boxRaw[3] * imageSize[1]) / 1.5;\n // top, bottom, left, right\n const pts: Point[] = [mesh[10], mesh[152], mesh[234], mesh[454]].map((pt) => [pt[0] * imageSize[0] / size, pt[1] * imageSize[1] / size, pt[2]] as Point); // make the xyz coordinates proportional, independent of the image/box size\n\n const yAxis = normalize(subVectors(pts[1] as Vector, pts[0] as Vector));\n let xAxis = normalize(subVectors(pts[3] as Vector, pts[2] as Vector));\n const zAxis = normalize(crossVectors(xAxis, yAxis));\n // adjust xAxis to make sure that all axes are perpendicular to each other\n xAxis = crossVectors(yAxis, zAxis);\n\n // Rotation Matrix from Axis Vectors - http://renderdan.blogspot.com/2006/05/rotation-matrix-from-axis-vectors.html\n // 3x3 rotation matrix is flatten to array in row-major order. Note that the rotation represented by this matrix is inverted.\n const matrix: [number, number, number, number, number, number, number, number, number] = [\n xAxis[0], xAxis[1], xAxis[2],\n yAxis[0], yAxis[1], yAxis[2],\n zAxis[0], zAxis[1], zAxis[2],\n ];\n const angle = rotationMatrixToEulerAngle(matrix);\n // const angle = meshToEulerAngle(mesh);\n\n // we have iris keypoints so we can calculate gaze direction\n const gaze = mesh.length === 478 ? calculateGaze(face) : { bearing: 0, strength: 0 };\n\n return { angle, matrix, gaze };\n};\n", "import type { FaceResult } from '../result';\n\nexport function calculateCameraDistance(face: FaceResult, width: number): number {\n // iris points are [center, left, top, right, bottom]\n // average size of human iris is 11.7mm - fairly constant for all ages/genders/races\n const f = face?.annotations;\n if (!f?.leftEyeIris || !f?.rightEyeIris) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // distance of eye from camera in meters\n const cameraDistance = Math.round(1.17 / irisSize) / 100;\n return cameraDistance;\n}\n\nexport function calculateEyesDistance(face: FaceResult, width: number): number {\n // average distance between eyes is 65mm - fairly constant for typical adult male, but varies otherwise\n const f = face?.annotations;\n if (!f?.leftEyeIris || !f?.rightEyeIris) return 0;\n // get size of left and right iris in pixels, pick larger one as its likely to be more accurate and normalize to 0..1 range instead of pixels\n const irisSize = Math.max(Math.abs(f.leftEyeIris[3][0] - f.leftEyeIris[1][0]), Math.abs(f.rightEyeIris[3][0] - f.rightEyeIris[1][0])) / width;\n // pixel x and y distance of centers of left and right iris, you can use edges instead\n const irisDistanceXY = [f.leftEyeIris[0][0] - f.rightEyeIris[0][0], f.leftEyeIris[0][1] - f.rightEyeIris[0][1]];\n // absolute distance bewtween eyes in 0..1 range to account for head pitch (we can ignore yaw)\n const irisDistance = Math.sqrt((irisDistanceXY[0] * irisDistanceXY[0]) + (irisDistanceXY[1] * irisDistanceXY[1])) / width;\n // distance between eyes in meters\n const eyesDistance = Math.round(1.17 * irisDistance / irisSize) / 100;\n return eyesDistance;\n}\n", "/**\n * Face algorithm implementation\n * Uses FaceMesh, Emotion and FaceRes models to create a unified pipeline\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { env } from '../util/env';\nimport * as facemesh from './facemesh';\nimport * as emotion from '../gear/emotion';\nimport * as faceres from './faceres';\nimport * as mask from './mask';\nimport * as antispoof from './antispoof';\nimport * as liveness from './liveness';\nimport * as gear from '../gear/gear';\nimport * as ssrnetAge from '../gear/ssrnet-age';\nimport * as ssrnetGender from '../gear/ssrnet-gender';\nimport * as mobilefacenet from './mobilefacenet';\nimport * as insightface from './insightface';\nimport type { FaceResult, Emotion, Gender, Race } from '../result';\nimport type { Tensor4D } from '../tfjs/types';\nimport type { Human } from '../human';\nimport { calculateFaceAngle } from './angles';\nimport { calculateCameraDistance } from './anthropometry';\n\ninterface DescRes { age: number, gender: Gender, genderScore: number, descriptor: number[], race?: { score: number, race: Race }[] }\n\nexport const detectFace = async (instance: Human /* instance of human */, input: Tensor4D): Promise => {\n // run facemesh, includes blazeface and iris\n let timeStamp: number = now();\n let ageRes: { age: number } | Promise<{ age: number }> | null;\n let gearRes: gear.GearType | Promise | null;\n let genderRes: { gender: string, genderScore: number } | Promise<{ gender: string, genderScore: number }> | null;\n let emotionRes: { score: number, emotion: Emotion }[] | Promise<{ score: number, emotion: Emotion }[]>;\n let mobilefacenetRes: number[] | Promise | null;\n let insightfaceRes: number[] | Promise | null;\n let antispoofRes: number | Promise | null;\n let livenessRes: number | Promise | null;\n let descRes: DescRes | Promise | null;\n\n const faceRes: FaceResult[] = [];\n instance.state = 'run:face';\n const faces: FaceResult[] = await facemesh.predict(input, instance.config);\n instance.performance.face = env.perfadd ? (instance.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n if (!input.shape || input.shape.length !== 4) return [];\n if (!faces) return [];\n // for (const face of faces) {\n for (let i = 0; i < faces.length; i++) {\n instance.analyze('Get Face');\n\n // is something went wrong, skip the face\n // @ts-ignore possibly undefied\n if (!faces[i].tensor || faces[i].tensor.isDisposedInternal) {\n log('Face object is disposed:', faces[i].tensor);\n continue;\n }\n\n // optional face mask\n if (instance.config.face.detector?.mask) {\n const masked = await mask.mask(faces[i]);\n tf.dispose(faces[i].tensor);\n if (masked) faces[i].tensor = masked;\n }\n\n // calculate face angles\n const rotation = faces[i].mesh && (faces[i].mesh.length > 200) ? calculateFaceAngle(faces[i], [input.shape[2], input.shape[1]]) : null;\n\n // run emotion, inherits face from blazeface\n instance.analyze('Start Emotion:');\n if (instance.config.async) {\n emotionRes = instance.config.face.emotion?.enabled ? emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n } else {\n instance.state = 'run:emotion';\n timeStamp = now();\n emotionRes = instance.config.face.emotion?.enabled ? await emotion.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : [];\n instance.performance.emotion = env.perfadd ? (instance.performance.emotion || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Emotion:');\n\n // run antispoof, inherits face from blazeface\n instance.analyze('Start AntiSpoof:');\n if (instance.config.async) {\n antispoofRes = instance.config.face.antispoof?.enabled ? antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:antispoof';\n timeStamp = now();\n antispoofRes = instance.config.face.antispoof?.enabled ? await antispoof.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.antispoof = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End AntiSpoof:');\n\n // run liveness, inherits face from blazeface\n instance.analyze('Start Liveness:');\n if (instance.config.async) {\n livenessRes = instance.config.face.liveness?.enabled ? liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n } else {\n instance.state = 'run:liveness';\n timeStamp = now();\n livenessRes = instance.config.face.liveness?.enabled ? await liveness.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : 0;\n instance.performance.liveness = env.perfadd ? (instance.performance.antispoof || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Liveness:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start GEAR:');\n if (instance.config.async) {\n gearRes = instance.config.face.gear?.enabled ? gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:gear';\n timeStamp = now();\n gearRes = instance.config.face.gear?.enabled ? await gear.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.gear = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End GEAR:');\n\n // run gear, inherits face from blazeface\n instance.analyze('Start SSRNet:');\n if (instance.config.async) {\n ageRes = instance.config.face['ssrnet']?.enabled ? ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:ssrnet';\n timeStamp = now();\n ageRes = instance.config.face['ssrnet']?.enabled ? await ssrnetAge.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n genderRes = instance.config.face['ssrnet']?.enabled ? await ssrnetGender.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.ssrnet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End SSRNet:');\n\n // run mobilefacenet alternative, inherits face from blazeface\n instance.analyze('Start MobileFaceNet:');\n if (instance.config.async) {\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n mobilefacenetRes = instance.config.face['mobilefacenet']?.enabled ? await mobilefacenet.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End MobileFaceNet:');\n\n // run insightface alternative, inherits face from blazeface\n instance.analyze('Start InsightFace:');\n if (instance.config.async) {\n insightfaceRes = instance.config.face['insightface']?.enabled ? insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n } else {\n instance.state = 'run:mobilefacenet';\n timeStamp = now();\n insightfaceRes = instance.config.face['insightface']?.enabled ? await insightface.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length) : null;\n instance.performance.mobilefacenet = Math.trunc(now() - timeStamp);\n }\n instance.analyze('End InsightFace:');\n\n // run faceres, inherits face from blazeface\n instance.analyze('Start Description:');\n if (instance.config.async) {\n descRes = faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n } else {\n instance.state = 'run:description';\n timeStamp = now();\n descRes = await faceres.predict(faces[i].tensor as Tensor4D || tf.tensor([]), instance.config, i, faces.length);\n instance.performance.description = env.perfadd ? (instance.performance.description || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n instance.analyze('End Description:');\n\n // if async wait for results\n if (instance.config.async) {\n [ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes] = await Promise.all([ageRes, genderRes, emotionRes, mobilefacenetRes, insightfaceRes, descRes, gearRes, antispoofRes, livenessRes]);\n }\n instance.analyze('Finish Face:');\n\n if (instance.config.face['ssrnet']?.enabled && ageRes && genderRes) { // override age/gender if ssrnet model is used\n descRes = {\n ...(descRes as DescRes),\n age: (ageRes as { age: number}).age,\n gender: (genderRes as { gender: Gender, genderScore: number }).gender,\n genderScore: (genderRes as { gender: Gender, genderScore: number }).genderScore,\n };\n }\n if (instance.config.face.gear?.enabled && gearRes) { // override age/gender/race if gear model is used\n descRes = {\n ...(descRes as DescRes),\n age: (gearRes as gear.GearType).age,\n gender: (gearRes as gear.GearType).gender,\n genderScore: (gearRes as gear.GearType).genderScore,\n race: (gearRes as gear.GearType).race,\n };\n }\n if (instance.config.face['mobilefacenet']?.enabled && mobilefacenetRes) { // override descriptor if mobilefacenet model is used\n (descRes as DescRes).descriptor = mobilefacenetRes as number[];\n }\n\n if (instance.config.face['insightface']?.enabled && insightfaceRes) { // override descriptor if insightface model is used\n (descRes as DescRes).descriptor = insightfaceRes as number[];\n }\n\n const irisSize = instance.config.face.iris?.enabled ? calculateCameraDistance(faces[i], input.shape[2]) : 0;\n\n // optionally return tensor\n const tensor = instance.config.face.detector?.return ? tf.squeeze(faces[i].tensor as Tensor4D) : null;\n // dispose original face tensor\n tf.dispose(faces[i].tensor);\n // delete temp face image\n if (faces[i].tensor) delete faces[i].tensor;\n // combine results\n const res: FaceResult = {\n ...faces[i],\n id: i,\n };\n if ((descRes as DescRes).age) res.age = (descRes as DescRes).age;\n if ((descRes as DescRes).gender) res.gender = (descRes as DescRes).gender;\n if ((descRes as DescRes).genderScore) res.genderScore = (descRes as DescRes).genderScore;\n if ((descRes as DescRes).descriptor) res.embedding = (descRes as DescRes).descriptor;\n if ((descRes as DescRes).race) res.race = (descRes as DescRes).race as { score: number, race: Race }[];\n if (emotionRes) res.emotion = emotionRes as { score: number, emotion: Emotion }[];\n if (antispoofRes) res.real = antispoofRes as number;\n if (livenessRes) res.live = livenessRes as number;\n if (irisSize > 0) res.distance = irisSize;\n if (rotation) res.rotation = rotation;\n if (tensor) res.tensor = tensor;\n faceRes.push(res);\n instance.analyze('End Face');\n }\n instance.analyze('End FaceMesh:');\n if (instance.config.async) {\n if (instance.performance.face) delete instance.performance.face;\n if (instance.performance.age) delete instance.performance.age;\n if (instance.performance.gender) delete instance.performance.gender;\n if (instance.performance.emotion) delete instance.performance.emotion;\n }\n return faceRes;\n};\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nexport const Finger = {\n thumb: 0,\n index: 1,\n middle: 2,\n ring: 3,\n pinky: 4,\n all: [0, 1, 2, 3, 4], // just for convenience\n nameMapping: { 0: 'thumb', 1: 'index', 2: 'middle', 3: 'ring', 4: 'pinky' },\n // Describes mapping of joints based on the 21 points returned by handpose.\n // [0] Palm\n // [1-4] Thumb\n // [5-8] Index\n // [9-12] Middle\n // [13-16] Ring\n // [17-20] Pinky\n pointsMapping: {\n 0: [[0, 1], [1, 2], [2, 3], [3, 4]],\n 1: [[0, 5], [5, 6], [6, 7], [7, 8]],\n 2: [[0, 9], [9, 10], [10, 11], [11, 12]],\n 3: [[0, 13], [13, 14], [14, 15], [15, 16]],\n 4: [[0, 17], [17, 18], [18, 19], [19, 20]],\n },\n getName: (value) => Finger.nameMapping[value],\n getPoints: (value) => Finger.pointsMapping[value],\n};\n\nexport const FingerCurl = {\n none: 0,\n half: 1,\n full: 2,\n nameMapping: { 0: 'none', 1: 'half', 2: 'full' },\n getName: (value) => FingerCurl.nameMapping[value],\n};\n\nexport const FingerDirection = {\n verticalUp: 0,\n verticalDown: 1,\n horizontalLeft: 2,\n horizontalRight: 3,\n diagonalUpRight: 4,\n diagonalUpLeft: 5,\n diagonalDownRight: 6,\n diagonalDownLeft: 7,\n nameMapping: { 0: 'verticalUp', 1: 'verticalDown', 2: 'horizontalLeft', 3: 'horizontalRight', 4: 'diagonalUpRight', 5: 'diagonalUpLeft', 6: 'diagonalDownRight', 7: 'diagonalDownLeft' },\n getName: (value) => FingerDirection.nameMapping[value],\n};\n\nexport class FingerGesture {\n name;\n curls;\n directions;\n weights;\n weightsRelative;\n\n constructor(name) {\n // name (should be unique)\n this.name = name;\n this.curls = {};\n this.directions = {};\n this.weights = [1.0, 1.0, 1.0, 1.0, 1.0];\n this.weightsRelative = [1.0, 1.0, 1.0, 1.0, 1.0];\n }\n\n curl(finger, curl, confidence) {\n if (typeof this.curls[finger] === 'undefined') this.curls[finger] = [];\n this.curls[finger].push([curl, confidence]);\n }\n\n direction(finger, position, confidence) {\n if (!this.directions[finger]) this.directions[finger] = [];\n this.directions[finger].push([position, confidence]);\n }\n\n weight(finger, weight) {\n this.weights[finger] = weight;\n // recalculate relative weights\n const total = this.weights.reduce((a, b) => a + b, 0);\n this.weightsRelative = this.weights.map((el) => el * 5 / total);\n }\n\n matchAgainst(detectedCurls, detectedDirections) {\n let confidence = 0.0;\n // look at the detected curl of each finger and compare with\n // the expected curl of this finger inside current gesture\n for (const fingerIdx in detectedCurls) {\n const detectedCurl = detectedCurls[fingerIdx];\n const expectedCurls = this.curls[fingerIdx];\n if (typeof expectedCurls === 'undefined') {\n // no curl description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible curl of this specific finger\n for (const [expectedCurl, score] of expectedCurls) {\n if (detectedCurl === expectedCurl) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n // same for detected direction of each finger\n for (const fingerIdx in detectedDirections) {\n const detectedDirection = detectedDirections[fingerIdx];\n const expectedDirections = this.directions[fingerIdx];\n if (typeof expectedDirections === 'undefined') {\n // no direction description available for this finger\n // add default confidence of \"1\"\n confidence += this.weightsRelative[fingerIdx];\n continue;\n }\n // compare to each possible direction of this specific finger\n for (const [expectedDirection, score] of expectedDirections) {\n if (detectedDirection === expectedDirection) {\n confidence += score * this.weightsRelative[fingerIdx];\n break;\n }\n }\n }\n return confidence / 10;\n }\n}\n", "/**\n * FingerPose algorithm implementation\n * See `fingerpose.ts` for entry point\n */\n\nimport { Finger, FingerCurl, FingerDirection, FingerGesture } from './fingerdef';\n\nexport const { thumb, index, middle, ring, pinky } = Finger;\nexport const { none, half, full } = FingerCurl;\nexport const { verticalUp, verticalDown, horizontalLeft, horizontalRight, diagonalUpRight, diagonalUpLeft, diagonalDownRight, diagonalDownLeft } = FingerDirection;\n\n// describe thumbs up gesture \uD83D\uDC4D\nconst ThumbsUp = new FingerGesture('thumbs up');\nThumbsUp.curl(thumb, none, 1.0);\nThumbsUp.direction(thumb, verticalUp, 1.0);\nThumbsUp.direction(thumb, diagonalUpLeft, 0.25);\nThumbsUp.direction(thumb, diagonalUpRight, 0.25);\nfor (const finger of [Finger.index, Finger.middle, Finger.ring, Finger.pinky]) {\n ThumbsUp.curl(finger, full, 1.0);\n ThumbsUp.direction(finger, horizontalLeft, 1.0);\n ThumbsUp.direction(finger, horizontalRight, 1.0);\n}\n\n// describe Victory gesture \u270C\uFE0F\nconst Victory = new FingerGesture('victory');\nVictory.curl(thumb, half, 0.5);\nVictory.curl(thumb, none, 0.5);\nVictory.direction(thumb, verticalUp, 1.0);\nVictory.direction(thumb, diagonalUpLeft, 1.0);\nVictory.curl(index, none, 1.0);\nVictory.direction(index, verticalUp, 0.75);\nVictory.direction(index, diagonalUpLeft, 1.0);\nVictory.curl(middle, none, 1.0);\nVictory.direction(middle, verticalUp, 1.0);\nVictory.direction(middle, diagonalUpLeft, 0.75);\nVictory.curl(ring, full, 1.0);\nVictory.direction(ring, verticalUp, 0.2);\nVictory.direction(ring, diagonalUpLeft, 1.0);\nVictory.direction(ring, horizontalLeft, 0.2);\nVictory.curl(pinky, full, 1.0);\nVictory.direction(pinky, verticalUp, 0.2);\nVictory.direction(pinky, diagonalUpLeft, 1.0);\nVictory.direction(pinky, horizontalLeft, 0.2);\nVictory.weight(index, 2);\nVictory.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst Point = new FingerGesture('point');\nPoint.curl(thumb, full, 1.0);\nPoint.curl(index, none, 0.5);\nPoint.curl(middle, full, 0.5);\nPoint.curl(ring, full, 0.5);\nPoint.curl(pinky, full, 0.5);\nPoint.weight(index, 2);\nPoint.weight(middle, 2);\n\n// describe Point gesture \u270C\uFE0F\nconst MiddleFinger = new FingerGesture('middle finger');\nMiddleFinger.curl(thumb, none, 1.0);\nMiddleFinger.curl(index, full, 0.5);\nMiddleFinger.curl(middle, full, 0.5);\nMiddleFinger.curl(ring, full, 0.5);\nMiddleFinger.curl(pinky, full, 0.5);\nMiddleFinger.weight(index, 2);\nMiddleFinger.weight(middle, 2);\n\n// describe Open Palm gesture \u270C\uFE0F\nconst OpenPalm = new FingerGesture('open palm');\nOpenPalm.curl(thumb, none, 0.75);\nOpenPalm.curl(index, none, 0.75);\nOpenPalm.curl(middle, none, 0.75);\nOpenPalm.curl(ring, none, 0.75);\nOpenPalm.curl(pinky, none, 0.75);\n\nexport default [ThumbsUp, Victory, Point, MiddleFinger, OpenPalm];\n", "/**\n * FingerPose algorithm implementation constants\n *\n * Based on: [**FingerPose***](https://github.com/andypotato/fingerpose)\n */\n\n/* eslint-disable camelcase */\n\nimport { Finger, FingerCurl, FingerDirection } from './fingerdef';\nimport Gestures from '../hand/fingergesture';\n\nconst minConfidence = 0.7;\nconst options = {\n // curl estimation\n HALF_CURL_START_LIMIT: 60.0,\n NO_CURL_START_LIMIT: 130.0,\n // direction estimation\n DISTANCE_VOTE_POWER: 1.1,\n SINGLE_ANGLE_VOTE_POWER: 0.9,\n TOTAL_ANGLE_VOTE_POWER: 1.6,\n};\n\nfunction calculateSlope(point1x, point1y, point2x, point2y) {\n const value = (point1y - point2y) / (point1x - point2x);\n let slope = Math.atan(value) * 180 / Math.PI;\n if (slope <= 0) slope = -slope;\n else if (slope > 0) slope = 180 - slope;\n return slope;\n}\n\n// point1, point2 are 2d or 3d point arrays (xy[z])\n// returns either a single scalar (2d) or array of two slopes (3d)\nfunction getSlopes(point1, point2) {\n if (!point1 || !point2) return [0, 0];\n const slopeXY = calculateSlope(point1[0], point1[1], point2[0], point2[1]);\n if (point1.length === 2) return slopeXY;\n const slopeYZ = calculateSlope(point1[1], point1[2], point2[1], point2[2]);\n return [slopeXY, slopeYZ];\n}\n\nfunction angleOrientationAt(angle, weightageAt = 1.0) {\n let isVertical = 0;\n let isDiagonal = 0;\n let isHorizontal = 0;\n if (angle >= 75.0 && angle <= 105.0) isVertical = 1 * weightageAt;\n else if (angle >= 25.0 && angle <= 155.0) isDiagonal = 1 * weightageAt;\n else isHorizontal = 1 * weightageAt;\n return [isVertical, isDiagonal, isHorizontal];\n}\n\nfunction estimateFingerCurl(startPoint, midPoint, endPoint) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const start_mid_z_dist = startPoint[2] - midPoint[2];\n const start_end_z_dist = startPoint[2] - endPoint[2];\n const mid_end_z_dist = midPoint[2] - endPoint[2];\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist + start_mid_z_dist * start_mid_z_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist + start_end_z_dist * start_end_z_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist + mid_end_z_dist * mid_end_z_dist);\n let cos_in = (mid_end_dist * mid_end_dist + start_mid_dist * start_mid_dist - start_end_dist * start_end_dist) / (2 * mid_end_dist * start_mid_dist);\n if (cos_in > 1.0) cos_in = 1.0;\n else if (cos_in < -1.0) cos_in = -1.0;\n let angleOfCurve = Math.acos(cos_in);\n angleOfCurve = (57.2958 * angleOfCurve) % 180;\n let fingerCurl;\n if (angleOfCurve > options.NO_CURL_START_LIMIT) fingerCurl = FingerCurl.none;\n else if (angleOfCurve > options.HALF_CURL_START_LIMIT) fingerCurl = FingerCurl.half;\n else fingerCurl = FingerCurl.full;\n return fingerCurl;\n}\n\nfunction estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n if (max_dist_x === Math.abs(start_end_x_dist)) {\n if (start_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else if (max_dist_x === Math.abs(start_mid_x_dist)) {\n if (start_mid_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n } else {\n if (mid_end_x_dist > 0) estimatedDirection = FingerDirection.horizontalLeft;\n else estimatedDirection = FingerDirection.horizontalRight;\n }\n return estimatedDirection;\n}\n\nfunction estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y) {\n let estimatedDirection;\n if (max_dist_y === Math.abs(start_end_y_dist)) {\n if (start_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else if (max_dist_y === Math.abs(start_mid_y_dist)) {\n if (start_mid_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n } else {\n if (mid_end_y_dist < 0) estimatedDirection = FingerDirection.verticalDown;\n else estimatedDirection = FingerDirection.verticalUp;\n }\n return estimatedDirection;\n}\n\nfunction estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x) {\n let estimatedDirection;\n const reqd_vertical_direction = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n const reqd_horizontal_direction = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n if (reqd_vertical_direction === FingerDirection.verticalUp) {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalUpLeft;\n else estimatedDirection = FingerDirection.diagonalUpRight;\n } else {\n if (reqd_horizontal_direction === FingerDirection.horizontalLeft) estimatedDirection = FingerDirection.diagonalDownLeft;\n else estimatedDirection = FingerDirection.diagonalDownRight;\n }\n return estimatedDirection;\n}\n\nfunction calculateFingerDirection(startPoint, midPoint, endPoint, fingerSlopes) {\n const start_mid_x_dist = startPoint[0] - midPoint[0];\n const start_end_x_dist = startPoint[0] - endPoint[0];\n const mid_end_x_dist = midPoint[0] - endPoint[0];\n const start_mid_y_dist = startPoint[1] - midPoint[1];\n const start_end_y_dist = startPoint[1] - endPoint[1];\n const mid_end_y_dist = midPoint[1] - endPoint[1];\n const max_dist_x = Math.max(Math.abs(start_mid_x_dist), Math.abs(start_end_x_dist), Math.abs(mid_end_x_dist));\n const max_dist_y = Math.max(Math.abs(start_mid_y_dist), Math.abs(start_end_y_dist), Math.abs(mid_end_y_dist));\n let voteVertical = 0.0;\n let voteDiagonal = 0.0;\n let voteHorizontal = 0.0;\n const start_end_x_y_dist_ratio = max_dist_y / (max_dist_x + 0.00001);\n if (start_end_x_y_dist_ratio > 1.5) voteVertical += options.DISTANCE_VOTE_POWER;\n else if (start_end_x_y_dist_ratio > 0.66) voteDiagonal += options.DISTANCE_VOTE_POWER;\n else voteHorizontal += options.DISTANCE_VOTE_POWER;\n const start_mid_dist = Math.sqrt(start_mid_x_dist * start_mid_x_dist + start_mid_y_dist * start_mid_y_dist);\n const start_end_dist = Math.sqrt(start_end_x_dist * start_end_x_dist + start_end_y_dist * start_end_y_dist);\n const mid_end_dist = Math.sqrt(mid_end_x_dist * mid_end_x_dist + mid_end_y_dist * mid_end_y_dist);\n const max_dist = Math.max(start_mid_dist, start_end_dist, mid_end_dist);\n let calc_start_point_x = startPoint[0];\n let calc_start_point_y = startPoint[1];\n let calc_end_point_x = endPoint[0];\n let calc_end_point_y = endPoint[1];\n if (max_dist === start_mid_dist) {\n calc_end_point_x = endPoint[0];\n calc_end_point_y = endPoint[1];\n } else if (max_dist === mid_end_dist) {\n calc_start_point_x = midPoint[0];\n calc_start_point_y = midPoint[1];\n }\n const calcStartPoint = [calc_start_point_x, calc_start_point_y];\n const calcEndPoint = [calc_end_point_x, calc_end_point_y];\n const totalAngle = getSlopes(calcStartPoint, calcEndPoint);\n const votes = angleOrientationAt(totalAngle, options.TOTAL_ANGLE_VOTE_POWER);\n voteVertical += votes[0];\n voteDiagonal += votes[1];\n voteHorizontal += votes[2];\n for (const fingerSlope of fingerSlopes) {\n const fingerVotes = angleOrientationAt(fingerSlope, options.SINGLE_ANGLE_VOTE_POWER);\n voteVertical += fingerVotes[0];\n voteDiagonal += fingerVotes[1];\n voteHorizontal += fingerVotes[2];\n }\n // in case of tie, highest preference goes to Vertical,\n // followed by horizontal and then diagonal\n let estimatedDirection;\n if (voteVertical === Math.max(voteVertical, voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateVerticalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y);\n } else if (voteHorizontal === Math.max(voteDiagonal, voteHorizontal)) {\n estimatedDirection = estimateHorizontalDirection(start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n } else {\n estimatedDirection = estimateDiagonalDirection(start_end_y_dist, start_mid_y_dist, mid_end_y_dist, max_dist_y, start_end_x_dist, start_mid_x_dist, mid_end_x_dist, max_dist_x);\n }\n return estimatedDirection;\n}\n\nfunction estimate(landmarks) {\n // step 1: calculate slopes\n const slopesXY: number[][] = [];\n const slopesYZ: number[][] = [];\n const fingerCurls: number[] = [];\n const fingerDirections: number[] = [];\n if (!landmarks) return { curls: fingerCurls, directions: fingerDirections };\n\n // step 1: calculate slopes\n for (const finger of Finger.all) {\n const points = Finger.getPoints(finger);\n const slopeAtXY: number[] = [];\n const slopeAtYZ: number[] = [];\n for (const point of points) {\n const point1 = landmarks[point[0]];\n const point2 = landmarks[point[1]];\n // calculate single slope\n const slopes = getSlopes(point1, point2);\n const slopeXY = slopes[0];\n const slopeYZ = slopes[1];\n slopeAtXY.push(slopeXY);\n slopeAtYZ.push(slopeYZ);\n }\n slopesXY.push(slopeAtXY);\n slopesYZ.push(slopeAtYZ);\n }\n\n // step 2: calculate orientations\n for (const finger of Finger.all) {\n // start finger predictions from palm - except for thumb\n const pointIndexAt = (finger === Finger.thumb) ? 1 : 0;\n const fingerPointsAt = Finger.getPoints(finger);\n const startPoint = landmarks[fingerPointsAt[pointIndexAt][0]];\n const midPoint = landmarks[fingerPointsAt[pointIndexAt + 1][1]];\n const endPoint = landmarks[fingerPointsAt[3][1]];\n // check if finger is curled\n const fingerCurled = estimateFingerCurl(startPoint, midPoint, endPoint);\n const fingerPosition = calculateFingerDirection(startPoint, midPoint, endPoint, slopesXY[finger].slice(pointIndexAt));\n fingerCurls[finger] = fingerCurled;\n fingerDirections[finger] = fingerPosition;\n }\n return { curls: fingerCurls, directions: fingerDirections };\n}\n\nexport function analyze(keypoints) { // get estimations of curl / direction for each finger\n if (!keypoints || keypoints.length === 0) return null;\n const estimatorRes = estimate(keypoints);\n const landmarks = {};\n for (const fingerIdx of Finger.all) {\n landmarks[Finger.getName(fingerIdx)] = {\n curl: FingerCurl.getName(estimatorRes.curls[fingerIdx]),\n direction: FingerDirection.getName(estimatorRes.directions[fingerIdx]),\n };\n }\n return landmarks;\n}\n\nexport function match(keypoints) { // compare gesture description to each known gesture\n const poses: { name: string, confidence: number }[] = [];\n if (!keypoints || keypoints.length === 0) return poses;\n const estimatorRes = estimate(keypoints);\n for (const gesture of Gestures) {\n const confidence = gesture.matchAgainst(estimatorRes.curls, estimatorRes.directions);\n if (confidence >= minConfidence) poses.push({ name: gesture.name, confidence });\n }\n return poses;\n}\n", "/**\n * Gesture detection algorithm\n */\n\nimport type { GestureResult, BodyResult, FaceResult, HandResult, Point } from '../result';\nimport * as fingerPose from '../hand/fingerpose';\n\n/** face gesture type */\nexport type FaceGesture =\n `facing ${'left' | 'center' | 'right'}`\n | `blink ${'left' | 'right'} eye`\n | `mouth ${number}% open`\n | `head ${'up' | 'down'}`;\n\n/** iris gesture type */\nexport type IrisGesture =\n 'facing center'\n | `looking ${'left' | 'right' | 'up' | 'down'}`\n | 'looking center';\n\n/** body gesture type */\nexport type BodyGesture =\n `leaning ${'left' | 'right'}`\n | `raise ${'left' | 'right'} hand`\n | 'i give up';\n\n/** hand gesture type */\nexport type HandGesture =\n `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} forward`\n | `${'thumb' | 'index' | 'middle' | 'ring' | 'pinky'} up`\n | 'victory'\n | 'thumbs up';\n\nexport const body = (res: BodyResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { body: number, gesture: BodyGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n // raising hands\n const leftWrist = res[i].keypoints.find((a) => (a.part === 'leftWrist'));\n const rightWrist = res[i].keypoints.find((a) => (a.part === 'rightWrist'));\n const nose = res[i].keypoints.find((a) => (a.part === 'nose'));\n if (nose && leftWrist && rightWrist && (leftWrist.position[1] < nose.position[1]) && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'i give up' });\n else if (nose && leftWrist && (leftWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise left hand' });\n else if (nose && rightWrist && (rightWrist.position[1] < nose.position[1])) gestures.push({ body: i, gesture: 'raise right hand' });\n\n // leaning\n const leftShoulder = res[i].keypoints.find((a) => (a.part === 'leftShoulder'));\n const rightShoulder = res[i].keypoints.find((a) => (a.part === 'rightShoulder'));\n if (leftShoulder && rightShoulder && Math.abs(leftShoulder.positionRaw[1] - rightShoulder.positionRaw[1]) > 0.1) {\n gestures.push({ body: i, gesture: `leaning ${(leftShoulder.position[1] > rightShoulder.position[1]) ? 'left' : 'right'}` });\n }\n }\n return gestures;\n};\n\nexport const face = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { face: number, gesture: FaceGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (res[i].mesh && res[i].mesh.length > 450) {\n const zDiff = (res[i].mesh[33][2] || 0) - (res[i].mesh[263][2] || 0);\n const xDiff = res[i].mesh[33][0] - res[i].mesh[263][0];\n if (Math.abs(zDiff / xDiff) <= 0.15) gestures.push({ face: i, gesture: 'facing center' });\n else gestures.push({ face: i, gesture: `facing ${zDiff < 0 ? 'left' : 'right'}` });\n const openLeft = Math.abs(res[i].mesh[374][1] - res[i].mesh[386][1]) / Math.abs(res[i].mesh[443][1] - res[i].mesh[450][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openLeft < 0.2) gestures.push({ face: i, gesture: 'blink left eye' });\n const openRight = Math.abs(res[i].mesh[145][1] - res[i].mesh[159][1]) / Math.abs(res[i].mesh[223][1] - res[i].mesh[230][1]); // center of eye inner lid y coord div center of wider eye border y coord\n if (openRight < 0.2) gestures.push({ face: i, gesture: 'blink right eye' });\n const mouthOpen = Math.min(100, 500 * Math.abs(res[i].mesh[13][1] - res[i].mesh[14][1]) / Math.abs(res[i].mesh[10][1] - res[i].mesh[152][1]));\n if (mouthOpen > 10) gestures.push({ face: i, gesture: `mouth ${Math.trunc(mouthOpen)}% open` });\n const chinDepth = res[i].mesh[152][2] || 0;\n if (Math.abs(chinDepth) > 10) gestures.push({ face: i, gesture: `head ${chinDepth < 0 ? 'up' : 'down'}` });\n }\n }\n return gestures;\n};\n\nexport const iris = (res: FaceResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { iris: number, gesture: IrisGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n if (!res[i].annotations?.leftEyeIris?.[0] || !res[i].annotations?.rightEyeIris?.[0]) continue;\n const sizeXLeft = res[i].annotations.leftEyeIris[3][0] - res[i].annotations.leftEyeIris[1][0];\n const sizeYLeft = res[i].annotations.leftEyeIris[4][1] - res[i].annotations.leftEyeIris[2][1];\n const areaLeft = Math.abs(sizeXLeft * sizeYLeft);\n\n const sizeXRight = res[i].annotations.rightEyeIris[3][0] - res[i].annotations.rightEyeIris[1][0];\n const sizeYRight = res[i].annotations.rightEyeIris[4][1] - res[i].annotations.rightEyeIris[2][1];\n const areaRight = Math.abs(sizeXRight * sizeYRight);\n\n let center = false;\n const difference = Math.abs(areaLeft - areaRight) / Math.max(areaLeft, areaRight);\n if (difference < 0.25) {\n center = true;\n gestures.push({ iris: i, gesture: 'facing center' });\n }\n\n const leftIrisCenterX = Math.abs(res[i].mesh[263][0] - res[i].annotations.leftEyeIris[0][0]) / res[i].box[2];\n const rightIrisCenterX = Math.abs(res[i].mesh[33][0] - res[i].annotations.rightEyeIris[0][0]) / res[i].box[2];\n if (leftIrisCenterX > 0.06 || rightIrisCenterX > 0.06) center = false;\n if (leftIrisCenterX > rightIrisCenterX) { // check eye with bigger offset\n if (rightIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking right' });\n } else {\n if (leftIrisCenterX > 0.04) gestures.push({ iris: i, gesture: 'looking left' });\n }\n\n const rightIrisCenterY = Math.abs(res[i].mesh[145][1] - res[i].annotations.rightEyeIris[0][1]) / res[i].box[3];\n const leftIrisCenterY = Math.abs(res[i].mesh[374][1] - res[i].annotations.leftEyeIris[0][1]) / res[i].box[3];\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01 || leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) center = false;\n if (leftIrisCenterY < 0.01 || rightIrisCenterY < 0.01) gestures.push({ iris: i, gesture: 'looking down' });\n if (leftIrisCenterY > 0.022 || rightIrisCenterY > 0.022) gestures.push({ iris: i, gesture: 'looking up' });\n\n // still center;\n if (center) gestures.push({ iris: i, gesture: 'looking center' });\n }\n return gestures;\n};\n\nexport const hand = (res: HandResult[]): GestureResult[] => {\n if (!res) return [];\n const gestures: { hand: number, gesture: HandGesture }[] = [];\n for (let i = 0; i < res.length; i++) {\n const fingers: { name: string, position: Point }[] = [];\n if (res[i].annotations) {\n for (const [finger, pos] of Object.entries(res[i].annotations)) {\n if (finger !== 'palmBase' && Array.isArray(pos) && pos[0]) fingers.push({ name: finger.toLowerCase(), position: pos[0] }); // get tip of each finger\n }\n }\n if (fingers && fingers.length > 0) {\n const closest = fingers.reduce((best, a) => ((best.position[2] || 0) < (a.position[2] || 0) ? best : a));\n gestures.push({ hand: i, gesture: `${closest.name} forward` as HandGesture });\n const highest = fingers.reduce((best, a) => (best.position[1] < a.position[1] ? best : a));\n gestures.push({ hand: i, gesture: `${highest.name} up` as HandGesture });\n }\n if (res[i].keypoints) {\n const poses = fingerPose.match(res[i].keypoints);\n for (const pose of poses) gestures.push({ hand: i, gesture: pose.name as HandGesture });\n }\n }\n return gestures;\n};\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { Point } from '../result';\n\nexport function getBoxSize(box) {\n return [\n Math.abs(box.endPoint[0] - box.startPoint[0]),\n Math.abs(box.endPoint[1] - box.startPoint[1]),\n ];\n}\n\nexport function getBoxCenter(box) {\n return [\n box.startPoint[0] + (box.endPoint[0] - box.startPoint[0]) / 2,\n box.startPoint[1] + (box.endPoint[1] - box.startPoint[1]) / 2,\n ];\n}\n\nexport function cutBoxFromImageAndResize(box, image, cropSize) {\n const h = image.shape[1];\n const w = image.shape[2];\n const boxes = [[\n box.startPoint[1] / h,\n box.startPoint[0] / w,\n box.endPoint[1] / h,\n box.endPoint[0] / w,\n ]];\n return tf.image.cropAndResize(image, boxes, [0], cropSize);\n}\n\nexport function scaleBoxCoordinates(box, factor) {\n const startPoint = [box.startPoint[0] * factor[0], box.startPoint[1] * factor[1]] as Point;\n const endPoint = [box.endPoint[0] * factor[0], box.endPoint[1] * factor[1]] as Point;\n const palmLandmarks = box.palmLandmarks.map((coord) => {\n const scaledCoord = [coord[0] * factor[0], coord[1] * factor[1]];\n return scaledCoord;\n });\n return { startPoint, endPoint, palmLandmarks, confidence: box.confidence };\n}\n\nexport function enlargeBox(box, factor = 1.5) {\n const center = getBoxCenter(box);\n const size = getBoxSize(box);\n const newHalfSize = [factor * size[0] / 2, factor * size[1] / 2];\n const startPoint = [center[0] - newHalfSize[0], center[1] - newHalfSize[1]] as Point;\n const endPoint = [center[0] + newHalfSize[0], center[1] + newHalfSize[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function squarifyBox(box) {\n const centers = getBoxCenter(box);\n const size = getBoxSize(box);\n const maxEdge = Math.max(...size);\n const halfSize = maxEdge / 2;\n const startPoint = [centers[0] - halfSize, centers[1] - halfSize] as Point;\n const endPoint = [centers[0] + halfSize, centers[1] + halfSize] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function shiftBox(box, shiftFactor) {\n const boxSize = [\n box.endPoint[0] - box.startPoint[0],\n box.endPoint[1] - box.startPoint[1],\n ];\n const shiftVector = [boxSize[0] * shiftFactor[0], boxSize[1] * shiftFactor[1]];\n const startPoint = [box.startPoint[0] + shiftVector[0], box.startPoint[1] + shiftVector[1]] as Point;\n const endPoint = [box.endPoint[0] + shiftVector[0], box.endPoint[1] + shiftVector[1]] as Point;\n return { startPoint, endPoint, palmLandmarks: box.palmLandmarks };\n}\n\nexport function normalizeRadians(angle) {\n return angle - 2 * Math.PI * Math.floor((angle + Math.PI) / (2 * Math.PI));\n}\n\nexport function computeRotation(point1, point2) {\n const radians = Math.PI / 2 - Math.atan2(-(point2[1] - point1[1]), point2[0] - point1[0]);\n return normalizeRadians(radians);\n}\n\nexport const buildTranslationMatrix = (x, y) => [[1, 0, x], [0, 1, y], [0, 0, 1]];\n\nexport function dot(v1, v2) {\n let product = 0;\n for (let i = 0; i < v1.length; i++) {\n product += v1[i] * v2[i];\n }\n return product;\n}\n\nexport function getColumnFrom2DArr(arr, columnIndex) {\n const column: number[] = [];\n for (let i = 0; i < arr.length; i++) {\n column.push(arr[i][columnIndex]);\n }\n return column;\n}\n\nexport function multiplyTransformMatrices(mat1, mat2) {\n const product: number[][] = [];\n const size = mat1.length;\n for (let row = 0; row < size; row++) {\n product.push([]);\n for (let col = 0; col < size; col++) {\n product[row].push(dot(mat1[row], getColumnFrom2DArr(mat2, col)));\n }\n }\n return product;\n}\n\nexport function buildRotationMatrix(rotation, center) {\n const cosA = Math.cos(rotation);\n const sinA = Math.sin(rotation);\n const rotationMatrix = [[cosA, -sinA, 0], [sinA, cosA, 0], [0, 0, 1]];\n const translationMatrix = buildTranslationMatrix(center[0], center[1]);\n const translationTimesRotation = multiplyTransformMatrices(translationMatrix, rotationMatrix);\n const negativeTranslationMatrix = buildTranslationMatrix(-center[0], -center[1]);\n return multiplyTransformMatrices(translationTimesRotation, negativeTranslationMatrix);\n}\n\nexport function invertTransformMatrix(matrix) {\n const rotationComponent = [[matrix[0][0], matrix[1][0]], [matrix[0][1], matrix[1][1]]];\n const translationComponent = [matrix[0][2], matrix[1][2]];\n const invertedTranslation = [\n -dot(rotationComponent[0], translationComponent),\n -dot(rotationComponent[1], translationComponent),\n ];\n return [\n rotationComponent[0].concat(invertedTranslation[0]),\n rotationComponent[1].concat(invertedTranslation[1]),\n [0, 0, 1],\n ];\n}\n\nexport function rotatePoint(homogeneousCoordinate, rotationMatrix) {\n return [\n dot(homogeneousCoordinate, rotationMatrix[0]),\n dot(homogeneousCoordinate, rotationMatrix[1]),\n ];\n}\n", "/**\n * HandPose model implementation constants\n * See `handpose.ts` for entry point\n */\n\nexport const anchors = [\n { x: 0.015625, y: 0.015625 },\n { x: 0.015625, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.046875, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.078125, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.109375, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.140625, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.171875, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.203125, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.234375, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.265625, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.296875, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.328125, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.359375, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.390625, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.421875, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.453125, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.484375, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.515625, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.546875, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.578125, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.609375, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.640625, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.671875, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.703125, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.734375, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.765625, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.796875, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.828125, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.859375, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.890625, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.921875, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.953125, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.984375, y: 0.015625 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.015625, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.046875, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.078125, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.109375, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.140625, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.171875, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.203125, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.234375, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.265625, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.296875, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.328125, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.359375, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.390625, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.421875, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.453125, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.484375, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.515625, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.546875, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.578125, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.609375, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.640625, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.671875, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.703125, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.734375, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.765625, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.796875, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.828125, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.859375, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.890625, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.921875, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.953125, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.984375, y: 0.046875 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.015625, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.046875, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.078125, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.109375, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.140625, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.171875, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.203125, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.234375, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.265625, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.296875, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.328125, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.359375, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.390625, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.421875, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.453125, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.484375, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.515625, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.546875, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.578125, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.609375, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.640625, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.671875, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.703125, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.734375, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.765625, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.796875, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.828125, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.859375, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.890625, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.921875, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.953125, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.984375, y: 0.078125 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.015625, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.046875, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.078125, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.109375, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.140625, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.171875, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.203125, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.234375, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.265625, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.296875, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.328125, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.359375, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.390625, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.421875, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.453125, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.484375, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.515625, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.546875, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.578125, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.609375, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.640625, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.671875, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.703125, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.734375, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.765625, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.796875, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.828125, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.859375, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.890625, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.921875, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.953125, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.984375, y: 0.109375 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.015625, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.046875, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.078125, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.109375, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.140625, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.171875, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.203125, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.234375, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.265625, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.296875, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.328125, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.359375, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.390625, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.421875, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.453125, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.484375, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.515625, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.546875, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.578125, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.609375, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.640625, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.671875, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.703125, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.734375, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.765625, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.796875, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.828125, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.859375, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.890625, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.921875, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.953125, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.984375, y: 0.140625 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.015625, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.046875, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.078125, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.109375, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.140625, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.171875, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.203125, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.234375, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.265625, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.296875, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.328125, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.359375, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.390625, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.421875, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.453125, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.484375, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.515625, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.546875, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.578125, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.609375, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.640625, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.671875, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.703125, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.734375, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.765625, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.796875, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.828125, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.859375, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.890625, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.921875, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.953125, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.984375, y: 0.171875 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.015625, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.046875, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.078125, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.109375, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.140625, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.171875, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.203125, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.234375, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.265625, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.296875, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.328125, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.359375, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.390625, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.421875, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.453125, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.484375, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.515625, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.546875, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.578125, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.609375, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.640625, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.671875, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.703125, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.734375, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.765625, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.796875, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.828125, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.859375, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.890625, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.921875, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.953125, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.984375, y: 0.203125 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.015625, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.046875, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.078125, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.109375, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.140625, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.171875, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.203125, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.234375, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.265625, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.296875, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.328125, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.359375, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.390625, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.421875, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.453125, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.484375, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.515625, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.546875, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.578125, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.609375, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.640625, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.671875, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.703125, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.734375, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.765625, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.796875, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.828125, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.859375, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.890625, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.921875, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.953125, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.984375, y: 0.234375 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.015625, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.046875, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.078125, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.109375, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.140625, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.171875, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.203125, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.234375, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.265625, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.296875, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.328125, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.359375, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.390625, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.421875, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.453125, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.484375, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.515625, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.546875, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.578125, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.609375, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.640625, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.671875, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.703125, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.734375, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.765625, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.796875, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.828125, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.859375, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.890625, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.921875, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.953125, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.984375, y: 0.265625 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.015625, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.046875, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.078125, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.109375, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.140625, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.171875, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.203125, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.234375, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.265625, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.296875, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.328125, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.359375, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.390625, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.421875, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.453125, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.484375, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.515625, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.546875, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.578125, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.609375, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.640625, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.671875, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.703125, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.734375, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.765625, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.796875, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.828125, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.859375, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.890625, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.921875, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.953125, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.984375, y: 0.296875 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.015625, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.046875, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.078125, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.109375, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.140625, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.171875, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.203125, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.234375, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.265625, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.296875, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.328125, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.359375, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.390625, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.421875, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.453125, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.484375, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.515625, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.546875, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.578125, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.609375, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.640625, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.671875, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.703125, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.734375, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.765625, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.796875, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.828125, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.859375, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.890625, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.921875, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.953125, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.984375, y: 0.328125 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.015625, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.046875, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.078125, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.109375, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.140625, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.171875, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.203125, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.234375, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.265625, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.296875, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.328125, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.359375, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.390625, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.421875, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.453125, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.484375, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.515625, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.546875, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.578125, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.609375, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.640625, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.671875, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.703125, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.734375, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.765625, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.796875, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.828125, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.859375, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.890625, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.921875, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.953125, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.984375, y: 0.359375 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.015625, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.046875, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.078125, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.109375, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.140625, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.171875, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.203125, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.234375, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.265625, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.296875, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.328125, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.359375, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.390625, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.421875, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.453125, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.484375, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.515625, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.546875, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.578125, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.609375, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.640625, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.671875, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.703125, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.734375, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.765625, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.796875, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.828125, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.859375, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.890625, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.921875, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.953125, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.984375, y: 0.390625 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.015625, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.046875, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.078125, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.109375, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.140625, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.171875, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.203125, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.234375, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.265625, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.296875, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.328125, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.359375, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.390625, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.421875, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.453125, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.484375, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.515625, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.546875, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.578125, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.609375, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.640625, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.671875, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.703125, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.734375, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.765625, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.796875, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.828125, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.859375, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.890625, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.921875, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.953125, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.984375, y: 0.421875 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.015625, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.046875, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.078125, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.109375, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.140625, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.171875, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.203125, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.234375, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.265625, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.296875, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.328125, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.359375, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.390625, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.421875, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.453125, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.484375, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.515625, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.546875, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.578125, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.609375, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.640625, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.671875, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.703125, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.734375, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.765625, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.796875, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.828125, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.859375, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.890625, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.921875, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.953125, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.984375, y: 0.453125 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.015625, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.046875, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.078125, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.109375, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.140625, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.171875, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.203125, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.234375, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.265625, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.296875, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.328125, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.359375, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.390625, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.421875, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.453125, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.484375, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.515625, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.546875, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.578125, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.609375, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.640625, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.671875, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.703125, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.734375, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.765625, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.796875, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.828125, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.859375, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.890625, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.921875, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.953125, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.984375, y: 0.484375 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.015625, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.046875, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.078125, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.109375, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.140625, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.171875, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.203125, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.234375, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.265625, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.296875, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.328125, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.359375, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.390625, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.421875, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.453125, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.484375, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.515625, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.546875, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.578125, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.609375, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.640625, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.671875, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.703125, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.734375, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.765625, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.796875, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.828125, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.859375, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.890625, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.921875, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.953125, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.984375, y: 0.515625 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.015625, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.046875, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.078125, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.109375, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.140625, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.171875, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.203125, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.234375, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.265625, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.296875, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.328125, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.359375, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.390625, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.421875, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.453125, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.484375, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.515625, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.546875, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.578125, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.609375, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.640625, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.671875, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.703125, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.734375, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.765625, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.796875, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.828125, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.859375, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.890625, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.921875, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.953125, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.984375, y: 0.546875 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.015625, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.046875, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.078125, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.109375, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.140625, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.171875, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.203125, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.234375, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.265625, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.296875, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.328125, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.359375, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.390625, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.421875, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.453125, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.484375, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.515625, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.546875, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.578125, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.609375, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.640625, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.671875, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.703125, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.734375, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.765625, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.796875, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.828125, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.859375, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.890625, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.921875, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.953125, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.984375, y: 0.578125 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.015625, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.046875, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.078125, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.109375, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.140625, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.171875, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.203125, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.234375, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.265625, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.296875, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.328125, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.359375, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.390625, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.421875, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.453125, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.484375, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.515625, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.546875, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.578125, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.609375, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.640625, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.671875, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.703125, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.734375, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.765625, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.796875, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.828125, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.859375, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.890625, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.921875, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.953125, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.984375, y: 0.609375 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.015625, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.046875, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.078125, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.109375, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.140625, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.171875, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.203125, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.234375, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.265625, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.296875, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.328125, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.359375, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.390625, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.421875, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.453125, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.484375, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.515625, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.546875, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.578125, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.609375, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.640625, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.671875, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.703125, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.734375, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.765625, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.796875, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.828125, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.859375, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.890625, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.921875, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.953125, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.984375, y: 0.640625 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.015625, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.046875, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.078125, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.109375, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.140625, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.171875, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.203125, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.234375, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.265625, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.296875, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.328125, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.359375, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.390625, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.421875, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.453125, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.484375, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.515625, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.546875, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.578125, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.609375, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.640625, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.671875, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.703125, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.734375, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.765625, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.796875, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.828125, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.859375, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.890625, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.921875, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.953125, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.984375, y: 0.671875 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.015625, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.046875, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.078125, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.109375, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.140625, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.171875, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.203125, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.234375, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.265625, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.296875, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.328125, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.359375, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.390625, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.421875, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.453125, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.484375, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.515625, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.546875, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.578125, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.609375, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.640625, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.671875, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.703125, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.734375, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.765625, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.796875, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.828125, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.859375, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.890625, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.921875, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.953125, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.984375, y: 0.703125 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.015625, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.046875, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.078125, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.109375, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.140625, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.171875, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.203125, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.234375, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.265625, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.296875, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.328125, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.359375, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.390625, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.421875, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.453125, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.484375, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.515625, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.546875, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.578125, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.609375, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.640625, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.671875, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.703125, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.734375, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.765625, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.796875, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.828125, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.859375, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.890625, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.921875, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.953125, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.984375, y: 0.734375 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.015625, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.046875, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.078125, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.109375, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.140625, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.171875, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.203125, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.234375, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.265625, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.296875, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.328125, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.359375, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.390625, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.421875, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.453125, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.484375, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.515625, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.546875, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.578125, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.609375, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.640625, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.671875, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.703125, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.734375, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.765625, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.796875, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.828125, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.859375, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.890625, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.921875, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.953125, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.984375, y: 0.765625 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.015625, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.046875, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.078125, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.109375, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.140625, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.171875, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.203125, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.234375, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.265625, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.296875, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.328125, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.359375, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.390625, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.421875, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.453125, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.484375, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.515625, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.546875, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.578125, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.609375, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.640625, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.671875, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.703125, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.734375, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.765625, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.796875, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.828125, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.859375, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.890625, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.921875, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.953125, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.984375, y: 0.796875 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.015625, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.046875, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.078125, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.109375, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.140625, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.171875, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.203125, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.234375, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.265625, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.296875, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.328125, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.359375, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.390625, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.421875, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.453125, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.484375, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.515625, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.546875, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.578125, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.609375, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.640625, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.671875, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.703125, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.734375, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.765625, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.796875, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.828125, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.859375, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.890625, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.921875, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.953125, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.984375, y: 0.828125 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.015625, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.046875, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.078125, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.109375, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.140625, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.171875, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.203125, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.234375, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.265625, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.296875, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.328125, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.359375, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.390625, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.421875, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.453125, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.484375, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.515625, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.546875, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.578125, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.609375, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.640625, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.671875, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.703125, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.734375, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.765625, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.796875, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.828125, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.859375, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.890625, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.921875, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.953125, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.984375, y: 0.859375 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.015625, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.046875, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.078125, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.109375, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.140625, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.171875, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.203125, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.234375, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.265625, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.296875, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.328125, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.359375, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.390625, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.421875, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.453125, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.484375, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.515625, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.546875, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.578125, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.609375, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.640625, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.671875, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.703125, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.734375, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.765625, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.796875, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.828125, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.859375, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.890625, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.921875, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.953125, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.984375, y: 0.890625 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.015625, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.046875, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.078125, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.109375, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.140625, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.171875, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.203125, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.234375, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.265625, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.296875, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.328125, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.359375, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.390625, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.421875, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.453125, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.484375, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.515625, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.546875, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.578125, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.609375, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.640625, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.671875, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.703125, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.734375, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.765625, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.796875, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.828125, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.859375, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.890625, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.921875, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.953125, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.984375, y: 0.921875 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.015625, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.046875, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.078125, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.109375, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.140625, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.171875, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.203125, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.234375, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.265625, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.296875, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.328125, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.359375, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.390625, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.421875, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.453125, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.484375, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.515625, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.546875, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.578125, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.609375, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.640625, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.671875, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.703125, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.734375, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.765625, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.796875, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.828125, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.859375, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.890625, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.921875, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.953125, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.984375, y: 0.953125 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.015625, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.046875, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.078125, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.109375, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.140625, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.171875, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.203125, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.234375, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.265625, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.296875, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.328125, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.359375, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.390625, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.421875, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.453125, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.484375, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.515625, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.546875, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.578125, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.609375, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.640625, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.671875, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.703125, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.734375, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.765625, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.796875, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.828125, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.859375, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.890625, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.921875, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.953125, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.984375, y: 0.984375 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.03125, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.09375, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.15625, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.21875, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.28125, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.34375, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.40625, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.46875, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.53125, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.59375, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.65625, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.71875, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.78125, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.84375, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.90625, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.96875, y: 0.03125 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.03125, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.09375, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.15625, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.21875, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.28125, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.34375, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.40625, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.46875, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.53125, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.59375, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.65625, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.71875, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.78125, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.84375, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.90625, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.96875, y: 0.09375 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.03125, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.09375, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.15625, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.21875, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.28125, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.34375, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.40625, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.46875, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.53125, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.59375, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.65625, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.71875, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.78125, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.84375, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.90625, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.96875, y: 0.15625 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.03125, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.09375, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.15625, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.21875, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.28125, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.34375, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.40625, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.46875, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.53125, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.59375, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.65625, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.71875, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.78125, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.84375, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.90625, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.96875, y: 0.21875 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.03125, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.09375, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.15625, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.21875, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.28125, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.34375, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.40625, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.46875, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.53125, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.59375, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.65625, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.71875, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.78125, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.84375, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.90625, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.96875, y: 0.28125 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.03125, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.09375, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.15625, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.21875, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.28125, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.34375, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.40625, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.46875, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.53125, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.59375, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.65625, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.71875, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.78125, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.84375, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.90625, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.96875, y: 0.34375 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.03125, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.09375, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.15625, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.21875, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.28125, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.34375, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.40625, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.46875, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.53125, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.59375, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.65625, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.71875, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.78125, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.84375, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.90625, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.96875, y: 0.40625 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.03125, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.09375, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.15625, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.21875, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.28125, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.34375, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.40625, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.46875, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.53125, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.59375, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.65625, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.71875, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.78125, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.84375, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.90625, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.96875, y: 0.46875 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.03125, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.09375, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.15625, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.21875, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.28125, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.34375, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.40625, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.46875, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.53125, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.59375, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.65625, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.71875, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.78125, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.84375, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.90625, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.96875, y: 0.53125 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.03125, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.09375, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.15625, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.21875, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.28125, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.34375, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.40625, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.46875, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.53125, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.59375, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.65625, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.71875, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.78125, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.84375, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.90625, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.96875, y: 0.59375 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.03125, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.09375, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.15625, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.21875, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.28125, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.34375, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.40625, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.46875, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.53125, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.59375, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.65625, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.71875, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.78125, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.84375, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.90625, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.96875, y: 0.65625 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.03125, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.09375, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.15625, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.21875, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.28125, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.34375, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.40625, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.46875, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.53125, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.59375, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.65625, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.71875, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.78125, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.84375, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.90625, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.96875, y: 0.71875 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.03125, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.09375, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.15625, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.21875, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.28125, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.34375, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.40625, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.46875, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.53125, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.59375, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.65625, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.71875, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.78125, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.84375, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.90625, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.96875, y: 0.78125 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.03125, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.09375, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.15625, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.21875, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.28125, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.34375, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.40625, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.46875, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.53125, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.59375, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.65625, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.71875, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.78125, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.84375, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.90625, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.96875, y: 0.84375 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.03125, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.09375, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.15625, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.21875, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.28125, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.34375, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.40625, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.46875, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.53125, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.59375, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.65625, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.71875, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.78125, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.84375, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.90625, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.96875, y: 0.90625 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.03125, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.09375, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.15625, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.21875, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.28125, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.34375, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.40625, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.46875, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.53125, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.59375, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.65625, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.71875, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.78125, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.84375, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.90625, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.96875, y: 0.96875 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.0625, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.1875, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.3125, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.4375, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.5625, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.6875, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.8125, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.9375, y: 0.0625 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.0625, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.1875, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.3125, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.4375, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.5625, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.6875, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.8125, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.9375, y: 0.1875 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.0625, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.1875, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.3125, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.4375, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.5625, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.6875, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.8125, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.9375, y: 0.3125 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.0625, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.1875, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.3125, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.4375, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.5625, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.6875, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.8125, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.9375, y: 0.4375 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.0625, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.1875, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.3125, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.4375, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.5625, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.6875, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.8125, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.9375, y: 0.5625 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.0625, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.1875, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.3125, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.4375, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.5625, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.6875, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.8125, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.9375, y: 0.6875 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.0625, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.1875, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.3125, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.4375, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.5625, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.6875, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.8125, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.9375, y: 0.8125 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.0625, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.1875, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.3125, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.4375, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.5625, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.6875, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.8125, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n { x: 0.9375, y: 0.9375 },\n];\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport * as anchors from './handposeanchors';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, Tensor1D, Tensor2D, Tensor4D, GraphModel } from '../tfjs/types';\nimport type { Point } from '../result';\nimport type { Config } from '../config';\n\nexport class HandDetector {\n model: GraphModel;\n anchors: number[][];\n anchorsTensor: Tensor;\n inputSize: number;\n inputSizeTensor: Tensor;\n doubleInputSizeTensor: Tensor;\n\n constructor(model: GraphModel) {\n this.model = model;\n this.anchors = anchors.anchors.map((anchor) => [anchor.x, anchor.y]);\n this.anchorsTensor = tf.tensor2d(this.anchors);\n this.inputSize = this?.model?.inputs?.[0]?.shape?.[2] || 0;\n this.inputSizeTensor = tf.tensor1d([this.inputSize, this.inputSize]);\n this.doubleInputSizeTensor = tf.tensor1d([this.inputSize * 2, this.inputSize * 2]);\n }\n\n normalizeBoxes(boxes) {\n const t: Record = {};\n t.boxOffsets = tf.slice(boxes, [0, 0], [-1, 2]);\n t.boxSizes = tf.slice(boxes, [0, 2], [-1, 2]);\n t.div = tf.div(t.boxOffsets, this.inputSizeTensor);\n t.boxCenterPoints = tf.add(t.div, this.anchorsTensor);\n t.halfBoxSizes = tf.div(t.boxSizes, this.doubleInputSizeTensor);\n t.sub = tf.sub(t.boxCenterPoints, t.halfBoxSizes);\n t.startPoints = tf.mul(t.sub, this.inputSizeTensor);\n t.add = tf.add(t.boxCenterPoints, t.halfBoxSizes);\n t.endPoints = tf.mul(t.add, this.inputSizeTensor);\n const res = tf.concat2d([t.startPoints as Tensor2D, t.endPoints as Tensor2D], 1);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res as Tensor;\n }\n\n normalizeLandmarks(rawPalmLandmarks, index: number): Tensor {\n const t: Record = {};\n t.reshape = tf.reshape(rawPalmLandmarks, [-1, 7, 2]);\n t.div = tf.div(t.reshape, this.inputSizeTensor);\n t.landmarks = tf.add(t.div, this.anchors[index] ? this.anchors[index] : 0);\n const res = tf.mul(t.landmarks, this.inputSizeTensor);\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return res;\n }\n\n async predict(input: Tensor4D, config: Config): Promise<{ startPoint: Point; endPoint: Point, palmLandmarks: Point[]; confidence: number }[]> {\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [this.inputSize, this.inputSize]);\n t.div = tf.div(t.resize, constants.tf127);\n t.image = tf.sub(t.div, constants.tf1);\n t.batched = this.model.execute(t.image) as Tensor;\n t.predictions = tf.squeeze(t.batched);\n t.slice = tf.slice(t.predictions, [0, 0], [-1, 1]);\n t.sigmoid = tf.sigmoid(t.slice);\n t.scores = tf.squeeze(t.sigmoid);\n const scores = await t.scores.data();\n t.boxes = tf.slice(t.predictions, [0, 1], [-1, 4]);\n t.norm = this.normalizeBoxes(t.boxes);\n // box detection is flaky so we look for 3x boxes than we need results\n t.nms = await tf.image.nonMaxSuppressionAsync(t.norm as Tensor2D, t.scores as Tensor1D, 3 * (config.hand?.maxDetected || 1), config.hand.iouThreshold, config.hand.minConfidence);\n const nms = await t.nms.array() as number[];\n const hands: { startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number }[] = [];\n for (const index of nms) {\n const p: Record = {};\n p.box = tf.slice(t.norm, [index, 0], [1, -1]);\n p.slice = tf.slice(t.predictions, [index, 5], [1, 14]);\n p.norm = this.normalizeLandmarks(p.slice, index);\n p.palmLandmarks = tf.reshape(p.norm, [-1, 2]);\n const box = await p.box.data();\n const startPoint = box.slice(0, 2) as unknown as Point;\n const endPoint = box.slice(2, 4) as unknown as Point;\n const palmLandmarks = await p.palmLandmarks.array();\n const hand = { startPoint, endPoint, palmLandmarks, confidence: scores[index] };\n const scaled = util.scaleBoxCoordinates(hand, [(input.shape[2] || 1) / this.inputSize, (input.shape[1] || 0) / this.inputSize]);\n hands.push(scaled);\n Object.keys(p).forEach((tensor) => tf.dispose(p[tensor]));\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n * See `handpose.ts` for entry point\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport * as util from './handposeutil';\nimport type * as detector from './handposedetector';\nimport { constants } from '../tfjs/constants';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport { env } from '../util/env';\nimport { now } from '../util/util';\nimport type { Point } from '../result';\n\nconst palmBoxEnlargeFactor = 5; // default 3\nconst handBoxEnlargeFactor = 1.65; // default 1.65\nconst palmLandmarkIds = [0, 5, 9, 13, 17, 1, 2];\nconst palmLandmarksPalmBase = 0;\nconst palmLandmarksMiddleFingerBase = 2;\nlet lastTime = 0;\n\nexport class HandPipeline {\n handDetector: detector.HandDetector;\n handPoseModel: GraphModel;\n inputSize: number;\n storedBoxes: ({ startPoint: Point; endPoint: Point; palmLandmarks: Point[]; confidence: number } | null)[];\n skipped: number;\n detectedHands: number;\n\n constructor(handDetector, handPoseModel) {\n this.handDetector = handDetector;\n this.handPoseModel = handPoseModel;\n this.inputSize = this.handPoseModel?.inputs?.[0].shape?.[2] || 0;\n this.storedBoxes = [];\n this.skipped = Number.MAX_SAFE_INTEGER;\n this.detectedHands = 0;\n }\n\n calculateLandmarksBoundingBox(landmarks) { // eslint-disable-line class-methods-use-this\n const xs = landmarks.map((d) => d[0]);\n const ys = landmarks.map((d) => d[1]);\n const startPoint = [Math.min(...xs), Math.min(...ys)];\n const endPoint = [Math.max(...xs), Math.max(...ys)];\n return { startPoint, endPoint };\n }\n\n getBoxForPalmLandmarks(palmLandmarks, rotationMatrix) {\n const rotatedPalmLandmarks = palmLandmarks.map((coord) => util.rotatePoint([...coord, 1], rotationMatrix));\n const boxAroundPalm = this.calculateLandmarksBoundingBox(rotatedPalmLandmarks);\n return util.enlargeBox(util.squarifyBox(boxAroundPalm), palmBoxEnlargeFactor);\n }\n\n getBoxForHandLandmarks(landmarks) {\n const boundingBox = this.calculateLandmarksBoundingBox(landmarks);\n const boxAroundHand = util.enlargeBox(util.squarifyBox(boundingBox), handBoxEnlargeFactor);\n boxAroundHand.palmLandmarks = [];\n for (let i = 0; i < palmLandmarkIds.length; i++) {\n boxAroundHand.palmLandmarks.push(landmarks[palmLandmarkIds[i]].slice(0, 2));\n }\n return boxAroundHand;\n }\n\n transformRawCoords(rawCoords, box2, angle, rotationMatrix) {\n const boxSize = util.getBoxSize(box2);\n const scaleFactor = [boxSize[0] / this.inputSize, boxSize[1] / this.inputSize, (boxSize[0] + boxSize[1]) / this.inputSize / 2];\n const coordsScaled = rawCoords.map((coord) => [\n scaleFactor[0] * (coord[0] - this.inputSize / 2),\n scaleFactor[1] * (coord[1] - this.inputSize / 2),\n scaleFactor[2] * coord[2],\n ]);\n const coordsRotationMatrix = util.buildRotationMatrix(angle, [0, 0]);\n const coordsRotated = coordsScaled.map((coord) => {\n const rotated = util.rotatePoint(coord, coordsRotationMatrix);\n return [...rotated, coord[2]];\n });\n const inverseRotationMatrix = util.invertTransformMatrix(rotationMatrix);\n const boxCenter = [...util.getBoxCenter(box2), 1];\n const originalBoxCenter = [\n util.dot(boxCenter, inverseRotationMatrix[0]),\n util.dot(boxCenter, inverseRotationMatrix[1]),\n ];\n return coordsRotated.map((coord) => [\n Math.trunc(coord[0] + originalBoxCenter[0]),\n Math.trunc(coord[1] + originalBoxCenter[1]),\n Math.trunc(coord[2]),\n ]);\n }\n\n async estimateHands(image, config) {\n let useFreshBox = false;\n\n // run new detector every skipFrames\n let boxes;\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = this.skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n this.skipped++;\n } else {\n boxes = await this.handDetector.predict(image, config);\n this.skipped = 0;\n }\n\n // if detector result count doesn't match current working set, use it to reset current working set\n if (boxes && (boxes.length > 0) && ((boxes.length !== this.detectedHands) && (this.detectedHands !== config.hand.maxDetected) || !config.hand.landmarks)) {\n this.detectedHands = 0;\n this.storedBoxes = [...boxes];\n // for (const possible of boxes) this.storedBoxes.push(possible);\n if (this.storedBoxes.length > 0) useFreshBox = true;\n }\n const hands: { landmarks: Point[], confidence: number, boxConfidence: number, fingerConfidence: number, box: { topLeft: Point, bottomRight: Point } }[] = [];\n\n // go through working set of boxes\n for (let i = 0; i < this.storedBoxes.length; i++) {\n const currentBox = this.storedBoxes[i];\n if (!currentBox) continue;\n if (config.hand.landmarks) {\n const angle = config.hand.rotation ? util.computeRotation(currentBox.palmLandmarks[palmLandmarksPalmBase], currentBox.palmLandmarks[palmLandmarksMiddleFingerBase]) : 0;\n const palmCenter = util.getBoxCenter(currentBox);\n const palmCenterNormalized: [number, number] = [palmCenter[0] / image.shape[2], palmCenter[1] / image.shape[1]];\n const rotatedImage = config.hand.rotation && env.kernels.includes('rotatewithoffset') ? tf.image.rotateWithOffset(image, angle, 0, palmCenterNormalized) : image.clone();\n const rotationMatrix = util.buildRotationMatrix(-angle, palmCenter);\n const newBox = useFreshBox ? this.getBoxForPalmLandmarks(currentBox.palmLandmarks, rotationMatrix) : currentBox;\n const croppedInput = util.cutBoxFromImageAndResize(newBox, rotatedImage, [this.inputSize, this.inputSize]);\n const handImage = tf.div(croppedInput, constants.tf255);\n tf.dispose(croppedInput);\n tf.dispose(rotatedImage);\n const [confidenceT, keypoints] = this.handPoseModel.execute(handImage) as Tensor[];\n lastTime = now();\n tf.dispose(handImage);\n const confidence = (await confidenceT.data())[0];\n tf.dispose(confidenceT);\n if (confidence >= config.hand.minConfidence / 4) {\n const keypointsReshaped = tf.reshape(keypoints, [-1, 3]);\n const rawCoords = await keypointsReshaped.array();\n tf.dispose(keypoints);\n tf.dispose(keypointsReshaped);\n const coords = this.transformRawCoords(rawCoords, newBox, angle, rotationMatrix);\n const nextBoundingBox = this.getBoxForHandLandmarks(coords);\n this.storedBoxes[i] = { ...nextBoundingBox, confidence };\n const result = {\n landmarks: coords,\n confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: confidence,\n box: { topLeft: nextBoundingBox.startPoint, bottomRight: nextBoundingBox.endPoint },\n };\n hands.push(result);\n } else {\n this.storedBoxes[i] = null;\n }\n tf.dispose(keypoints);\n } else {\n // const enlarged = box.enlargeBox(box.squarifyBox(box.shiftBox(currentBox, HAND_BOX_SHIFT_VECTOR)), handBoxEnlargeFactor);\n const enlarged = util.enlargeBox(util.squarifyBox(currentBox), handBoxEnlargeFactor);\n const result = {\n confidence: currentBox.confidence,\n boxConfidence: currentBox.confidence,\n fingerConfidence: 0,\n box: { topLeft: enlarged.startPoint, bottomRight: enlarged.endPoint },\n landmarks: [],\n };\n hands.push(result);\n }\n }\n this.storedBoxes = this.storedBoxes.filter((a) => a !== null);\n this.detectedHands = hands.length;\n if (hands.length > config.hand.maxDetected) hands.length = config.hand.maxDetected;\n return hands;\n }\n}\n", "/**\n * HandPose model implementation\n *\n * Based on: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n */\n\nimport { log } from '../util/util';\nimport * as handdetector from './handposedetector';\nimport * as handpipeline from './handposepipeline';\nimport * as fingerPose from './fingerpose';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, Box, Point } from '../result';\nimport type { Tensor, GraphModel } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nconst meshAnnotations = {\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n palm: [0],\n};\n\nlet handDetectorModel: GraphModel | null;\nlet handPoseModel: GraphModel | null;\nlet handPipeline: handpipeline.HandPipeline;\n\nexport function initPipeline() {\n const handDetector = handDetectorModel ? new handdetector.HandDetector(handDetectorModel) : undefined;\n if (handDetector && handPoseModel) handPipeline = new handpipeline.HandPipeline(handDetector, handPoseModel);\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!handPipeline) initPipeline();\n const predictions = await handPipeline.estimateHands(input, config);\n if (!predictions) return [];\n const hands: HandResult[] = [];\n for (let i = 0; i < predictions.length; i++) {\n const annotations = {};\n if (predictions[i].landmarks) {\n for (const key of Object.keys(meshAnnotations)) {\n annotations[key] = meshAnnotations[key].map((index) => predictions[i].landmarks[index]);\n }\n }\n const keypoints = predictions[i].landmarks as unknown as Point[];\n let box: Box = [Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER, 0, 0]; // maximums so conditionals work\n let boxRaw: Box = [0, 0, 0, 0];\n if (keypoints && keypoints.length > 0) { // if we have landmarks, calculate box based on landmarks\n for (const pt of keypoints) {\n if (pt[0] < box[0]) box[0] = pt[0];\n if (pt[1] < box[1]) box[1] = pt[1];\n if (pt[0] > box[2]) box[2] = pt[0];\n if (pt[1] > box[3]) box[3] = pt[1];\n }\n box[2] -= box[0];\n box[3] -= box[1];\n boxRaw = [box[0] / (input.shape[2] || 0), box[1] / (input.shape[1] || 0), box[2] / (input.shape[2] || 0), box[3] / (input.shape[1] || 0)];\n } else { // otherwise use box from prediction\n box = predictions[i].box ? [\n Math.trunc(Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.max(0, predictions[i].box.topLeft[1])),\n Math.trunc(Math.min((input.shape[2] || 0), predictions[i].box.bottomRight[0]) - Math.max(0, predictions[i].box.topLeft[0])),\n Math.trunc(Math.min((input.shape[1] || 0), predictions[i].box.bottomRight[1]) - Math.max(0, predictions[i].box.topLeft[1])),\n ] : [0, 0, 0, 0];\n boxRaw = [\n (predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n (predictions[i].box.bottomRight[0] - predictions[i].box.topLeft[0]) / (input.shape[2] || 0),\n (predictions[i].box.bottomRight[1] - predictions[i].box.topLeft[1]) / (input.shape[1] || 0),\n ];\n }\n const landmarks = fingerPose.analyze(keypoints);\n hands.push({\n id: i,\n score: Math.round(100 * predictions[i].confidence) / 100,\n boxScore: Math.round(100 * predictions[i].boxConfidence) / 100,\n fingerScore: Math.round(100 * predictions[i].fingerConfidence) / 100,\n label: 'hand',\n box,\n boxRaw,\n keypoints,\n annotations: annotations as HandResult['annotations'],\n landmarks: landmarks as HandResult['landmarks'],\n });\n }\n return hands;\n}\n\nexport async function loadDetect(config: Config): Promise {\n if (env.initial) handDetectorModel = null;\n if (!handDetectorModel) handDetectorModel = await loadModel(config.hand.detector?.modelPath);\n else if (config.debug) log('cached model:', handDetectorModel['modelUrl']);\n return handDetectorModel;\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) handPoseModel = null;\n if (!handPoseModel) handPoseModel = await loadModel(config.hand.skeleton?.modelPath);\n else if (config.debug) log('cached model:', handPoseModel['modelUrl']);\n return handPoseModel;\n}\n", "/**\n * HandTrack model implementation\n *\n * Based on:\n * - Hand Detection & Skeleton: [**MediaPipe HandPose**](https://drive.google.com/file/d/1sv4sSb9BSNVZhLzxXJ0jBv9DqD-4jnAz/view)\n * - Hand Tracking: [**HandTracking**](https://github.com/victordibia/handtracking)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport { loadModel } from '../tfjs/load';\nimport type { HandResult, HandType, Box, Point } from '../result';\nimport type { GraphModel, Tensor, Tensor1D, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as fingerPose from './fingerpose';\nimport { fakeOps } from '../tfjs/backend';\nimport { constants } from '../tfjs/constants';\n\nconst models: [GraphModel | null, GraphModel | null] = [null, null];\nconst modelOutputNodes = ['StatefulPartitionedCall/Postprocessor/Slice', 'StatefulPartitionedCall/Postprocessor/ExpandDims_1'];\n\nconst inputSize = [[0, 0], [0, 0]];\n\nconst classes = ['hand', 'fist', 'pinch', 'point', 'face', 'tip', 'pinchtip'];\nconst faceIndex = 4;\n\nconst boxExpandFact = 1.6;\nconst maxDetectorResolution = 512;\nconst detectorExpandFact = 1.4;\n\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet lastTime = 0;\nlet outputSize: [number, number] = [0, 0];\n\ninterface HandDetectResult {\n id: number,\n score: number,\n box: Box,\n boxRaw: Box,\n label: HandType,\n}\n\nconst cache: {\n boxes: HandDetectResult[],\n hands: HandResult[];\n} = {\n boxes: [],\n hands: [],\n};\n\nconst fingerMap = {\n /*\n thumb: [0, 1, 2, 3, 4],\n index: [0, 5, 6, 7, 8],\n middle: [0, 9, 10, 11, 12],\n ring: [0, 13, 14, 15, 16],\n pinky: [0, 17, 18, 19, 20],\n palm: [0],\n */\n thumb: [1, 2, 3, 4],\n index: [5, 6, 7, 8],\n middle: [9, 10, 11, 12],\n ring: [13, 14, 15, 16],\n pinky: [17, 18, 19, 20],\n base: [0],\n palm: [0, 17, 13, 9, 5, 1, 0],\n};\n\nexport async function loadDetect(config: Config): Promise {\n // HandTrack Model: Original: TFJS Port: \n if (env.initial) models[0] = null;\n if (!models[0]) {\n // handtrack model has some kernel ops defined in model but those are never referenced and non-existent in tfjs\n // ideally need to prune the model itself\n fakeOps(['tensorlistreserve', 'enter', 'tensorlistfromtensor', 'merge', 'loopcond', 'switch', 'exit', 'tensorliststack', 'nextiteration', 'tensorlistsetitem', 'tensorlistgetitem', 'reciprocal', 'shape', 'split', 'where'], config);\n models[0] = await loadModel(config.hand.detector?.modelPath);\n const inputs = models[0]['executor'] ? Object.values(models[0].modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[0][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[0]['modelUrl']);\n return models[0];\n}\n\nexport async function loadSkeleton(config: Config): Promise {\n if (env.initial) models[1] = null;\n if (!models[1]) {\n models[1] = await loadModel(config.hand.skeleton?.modelPath);\n const inputs = models[1]['executor'] ? Object.values(models[1].modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][0] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[1].size) : 0;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize[1][1] = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 0;\n } else if (config.debug) log('cached model:', models[1]['modelUrl']);\n return models[1];\n}\n\nexport async function load(config: Config): Promise<[GraphModel | null, GraphModel | null]> {\n if (!models[0]) await loadDetect(config);\n if (!models[1]) await loadSkeleton(config);\n return models;\n}\n\nasync function detectHands(input: Tensor4D, config: Config): Promise {\n const hands: HandDetectResult[] = [];\n if (!input || !models[0]) return hands;\n const t: Record = {};\n const ratio = (input.shape[2] || 1) / (input.shape[1] || 1);\n const height = Math.min(Math.round((input.shape[1] || 0) / 8) * 8, maxDetectorResolution); // use dynamic input size but cap at 512\n const width = Math.round(height * ratio / 8) * 8;\n t.resize = tf.image.resizeBilinear(input, [height, width]); // todo: resize with padding\n t.cast = tf.cast(t.resize, 'int32');\n [t.rawScores, t.rawBoxes] = await models[0].executeAsync(t.cast, modelOutputNodes) as Tensor[];\n t.boxes = tf.squeeze(t.rawBoxes, [0, 2]);\n t.scores = tf.squeeze(t.rawScores, [0]);\n const classScores: Tensor[] = tf.unstack(t.scores, 1); // unstack scores based on classes\n tf.dispose(classScores[faceIndex]);\n classScores.splice(faceIndex, 1); // remove faces\n t.filtered = tf.stack(classScores, 1); // restack\n tf.dispose(classScores);\n // t.filtered = t.scores;\n t.max = tf.max(t.filtered, 1); // max overall score\n t.argmax = tf.argMax(t.filtered, 1); // class index of max overall score\n let id = 0;\n t.nms = await tf.image.nonMaxSuppressionAsync(t.boxes as Tensor2D, t.max as Tensor1D, (config.hand.maxDetected || 0) + 1, config.hand.iouThreshold || 0, config.hand.minConfidence || 1);\n const nms = await t.nms.data();\n const scores = await t.max.data();\n const classNum = await t.argmax.data();\n for (const nmsIndex of Array.from(nms)) { // generates results for each class\n const boxSlice = tf.slice(t.boxes, nmsIndex, 1);\n const boxYX = await boxSlice.data();\n tf.dispose(boxSlice);\n const boxData: Box = [boxYX[1], boxYX[0], boxYX[3] - boxYX[1], boxYX[2] - boxYX[0]]; // yx box reshaped to standard box\n const boxRaw: Box = box.scale(boxData, detectorExpandFact);\n const boxFull: Box = [Math.trunc(boxData[0] * outputSize[0]), Math.trunc(boxData[1] * outputSize[1]), Math.trunc(boxData[2] * outputSize[0]), Math.trunc(boxData[3] * outputSize[1])];\n const score = scores[nmsIndex];\n const label = classes[classNum[nmsIndex]] as HandType;\n const hand: HandDetectResult = { id: id++, score, box: boxFull, boxRaw, label };\n hands.push(hand);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n hands.sort((a, b) => b.score - a.score);\n if (hands.length > (config.hand.maxDetected || 1)) hands.length = (config.hand.maxDetected || 1);\n return hands;\n}\n\nasync function detectFingers(input: Tensor4D, h: HandDetectResult, config: Config): Promise {\n const hand: HandResult = { // initial values inherited from hand detect\n id: h.id,\n score: Math.round(100 * h.score) / 100,\n boxScore: Math.round(100 * h.score) / 100,\n fingerScore: 0,\n box: h.box,\n boxRaw: h.boxRaw,\n label: h.label,\n keypoints: [],\n landmarks: {} as HandResult['landmarks'],\n annotations: {} as HandResult['annotations'],\n };\n if (input && models[1] && config.hand.landmarks && h.score > (config.hand.minConfidence || 0)) {\n const t: Record = {};\n const boxCrop = [h.boxRaw[1], h.boxRaw[0], h.boxRaw[3] + h.boxRaw[1], h.boxRaw[2] + h.boxRaw[0]] as Box;\n t.crop = tf.image.cropAndResize(input, [boxCrop], [0], [inputSize[1][0], inputSize[1][1]], 'bilinear');\n t.div = tf.div(t.crop, constants.tf255);\n [t.score, t.keypoints] = models[1].execute(t.div, ['Identity_1', 'Identity']) as Tensor[];\n const rawScore = (await t.score.data())[0];\n const score = (100 - Math.trunc(100 / (1 + Math.exp(rawScore)))) / 100; // reverse sigmoid value\n if (score >= (config.hand.minConfidence || 0)) {\n hand.fingerScore = score;\n t.reshaped = tf.reshape(t.keypoints, [-1, 3]);\n const coordsData: Point[] = await t.reshaped.array() as Point[];\n const coordsRaw: Point[] = coordsData.map((kpt) => [kpt[0] / inputSize[1][1], kpt[1] / inputSize[1][0], (kpt[2] || 0)]);\n const coordsNorm: Point[] = coordsRaw.map((kpt) => [kpt[0] * h.boxRaw[2], kpt[1] * h.boxRaw[3], (kpt[2] || 0)]);\n hand.keypoints = (coordsNorm).map((kpt) => [outputSize[0] * (kpt[0] + h.boxRaw[0]), outputSize[1] * (kpt[1] + h.boxRaw[1]), (kpt[2] || 0)]);\n hand.landmarks = fingerPose.analyze(hand.keypoints) as HandResult['landmarks']; // calculate finger gestures\n for (const key of Object.keys(fingerMap)) { // map keypoints to per-finger annotations\n hand.annotations[key] = fingerMap[key].map((index: number) => (hand.landmarks && hand.keypoints[index] ? hand.keypoints[index] : null));\n }\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n }\n return hand;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!models[0]?.['executor'] || !models[1]?.['executor'] || !models[0].inputs[0].shape || !models[1].inputs[0].shape) return []; // something is wrong with the model\n outputSize = [input.shape[2] || 0, input.shape[1] || 0];\n skipped++; // increment skip frames\n const skipTime = (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.hand.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.hands; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const skipTimeExtended = 3 * (config.hand.skipTime || 0) > (now() - lastTime);\n const skipFrameExtended = skipped < 3 * (config.hand.skipFrames || 0);\n if (config.skipAllowed && cache.hands.length === config.hand.maxDetected) { // we have all detected hands so we're definitely skipping\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else if (config.skipAllowed && skipTimeExtended && skipFrameExtended && cache.hands.length > 0) { // we have some cached results: maybe not enough but anyhow continue for bit longer\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n } else { // finally rerun detector\n cache.boxes = await detectHands(input, config);\n lastTime = now();\n cache.hands = await Promise.all(cache.boxes.map((handBox) => detectFingers(input, handBox, config)));\n skipped = 0;\n }\n\n const oldCache = [...cache.boxes];\n cache.boxes.length = 0; // reset cache\n if (config.cacheSensitivity > 0) {\n for (let i = 0; i < cache.hands.length; i++) {\n const boxKpt = box.square(cache.hands[i].keypoints, outputSize);\n if (boxKpt.box[2] / (input.shape[2] || 1) > 0.05 && boxKpt.box[3] / (input.shape[1] || 1) > 0.05 && cache.hands[i].fingerScore && cache.hands[i].fingerScore > (config.hand.minConfidence || 0)) {\n const boxScale = box.scale(boxKpt.box, boxExpandFact);\n const boxScaleRaw = box.scale(boxKpt.boxRaw, boxExpandFact);\n // const boxCrop = box.crop(boxScaleRaw);\n cache.boxes.push({ ...oldCache[i], box: boxScale, boxRaw: boxScaleRaw });\n }\n }\n }\n for (let i = 0; i < cache.hands.length; i++) { // replace detected boxes with calculated boxes in final output\n const bbox = box.calc(cache.hands[i].keypoints, outputSize);\n cache.hands[i].box = bbox.box;\n cache.hands[i].boxRaw = bbox.boxRaw;\n }\n resolve(cache.hands);\n });\n}\n", "/**\n * Type definitions for Human result object\n */\n\nimport type { Tensor } from './tfjs/types';\nimport type { FaceGesture, BodyGesture, HandGesture, IrisGesture } from './gesture/gesture';\nimport type { AnyCanvas } from './exports';\n\n/** generic box as [x, y, width, height] */\nexport type Box = [number, number, number, number];\n/** generic point as [x, y, z?] */\nexport type Point = [number, number, number?];\n\nexport type Emotion = 'angry' | 'disgust' | 'fear' | 'happy' | 'sad' | 'surprise' | 'neutral';\nexport type Gender = 'male' | 'female' | 'unknown';\nexport type Race = 'white' | 'black' | 'asian' | 'indian' | 'other';\nexport type FaceLandmark = 'leftEye' | 'rightEye' | 'nose' | 'mouth' | 'leftEar' | 'rightEar' | 'symmetryLine' | 'silhouette'\n | 'lipsUpperOuter' | 'lipsLowerOuter' | 'lipsUpperInner' | 'lipsLowerInner'\n | 'rightEyeUpper0' | 'rightEyeLower0' | 'rightEyeUpper1' | 'rightEyeLower1' | 'rightEyeUpper2' | 'rightEyeLower2' | 'rightEyeLower3' | 'rightEyebrowUpper' | 'rightEyebrowLower' | 'rightEyeIris'\n | 'leftEyeUpper0' | 'leftEyeLower0' | 'leftEyeUpper1' | 'leftEyeLower1' | 'leftEyeUpper2' | 'leftEyeLower2' | 'leftEyeLower3' | 'leftEyebrowUpper' | 'leftEyebrowLower' | 'leftEyeIris'\n | 'midwayBetweenEyes' | 'noseTip' | 'noseBottom' | 'noseRightCorner' | 'noseLeftCorner' | 'rightCheek' | 'leftCheek';\n\n/** Face results\n * - Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models\n * - Some values may be null if specific model is not enabled\n */\nexport interface FaceResult {\n /** face id */\n id: number\n /** overall face score */\n score: number,\n /** detection score */\n boxScore: number,\n /** mesh score */\n faceScore: number,\n /** detected face box */\n box: Box,\n /** detected face box normalized to 0..1 */\n boxRaw: Box,\n /** detected face box size */\n size: [number, number],\n /** detected face mesh */\n mesh: Point[]\n /** detected face mesh normalized to 0..1 */\n meshRaw: Point[],\n /** face contours as array of 2d points normalized to 0..1 */\n // contoursRaw: Array<[number, number]>,\n /** face contours as array of 2d points */\n // contours: Array<[number, number]>,\n /** mesh keypoints combined into annotated results */\n annotations: Record,\n /** detected age */\n age?: number,\n /** detected gender */\n gender?: Gender,\n /** gender detection score */\n genderScore?: number,\n /** detected emotions */\n emotion?: { score: number, emotion: Emotion }[],\n /** detected race */\n race?: { score: number, race: Race }[],\n /** face descriptor */\n embedding?: number[],\n /** face distance from camera */\n distance?: number,\n /** face anti-spoofing result confidence */\n real?: number,\n /** face liveness result confidence */\n live?: number,\n /** face rotation details */\n rotation?: {\n angle: { roll: number, yaw: number, pitch: number },\n matrix: [number, number, number, number, number, number, number, number, number],\n gaze: { bearing: number, strength: number },\n } | null,\n /** detected face as tensor that can be used in further pipelines */\n tensor?: Tensor,\n}\n\nexport type BodyLandmarkPoseNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkMoveNet = 'nose' | 'leftEye' | 'rightEye' | 'leftEar' | 'rightEar' | 'leftShoulder' | 'rightShoulder' | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle';\nexport type BodyLandmarkEfficientNet = 'head' | 'neck' | 'rightShoulder' | 'rightElbow' | 'rightWrist' | 'chest' | 'leftShoulder' | 'leftElbow' | 'leftWrist' | 'bodyCenter' | 'rightHip' | 'rightKnee' | 'rightAnkle' | 'leftHip' | 'leftKnee' | 'leftAnkle';\nexport type BodyLandmarkBlazePose = 'nose' | 'leftEyeInside' | 'leftEye' | 'leftEyeOutside' | 'rightEyeInside' | 'rightEye' | 'rightEyeOutside' | 'leftEar' | 'rightEar' | 'leftMouth' | 'rightMouth' | 'leftShoulder' | 'rightShoulder'\n | 'leftElbow' | 'rightElbow' | 'leftWrist' | 'rightWrist' | 'leftPinky' | 'rightPinky' | 'leftIndex' | 'rightIndex' | 'leftThumb' | 'rightThumb' | 'leftHip' | 'rightHip' | 'leftKnee' | 'rightKnee' | 'leftAnkle' | 'rightAnkle'\n | 'leftHeel' | 'rightHeel' | 'leftFoot' | 'rightFoot' | 'bodyCenter' | 'bodyTop' | 'leftPalm' | 'leftHand' | 'rightPalm' | 'rightHand';\nexport type BodyLandmark = BodyLandmarkPoseNet | BodyLandmarkMoveNet | BodyLandmarkEfficientNet | BodyLandmarkBlazePose;\nexport type BodyAnnotationBlazePose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'leftEye' | 'rightEye' | 'mouth';\nexport type BodyAnnotationEfficientPose = 'leftLeg' | 'rightLeg' | 'torso' | 'leftArm' | 'rightArm' | 'head';\nexport type BodyAnnotation = BodyAnnotationBlazePose | BodyAnnotationEfficientPose;\n\n/** Body Result keypoints */\nexport interface BodyKeypoint {\n /** body part name */\n part: BodyLandmark,\n /** body part position */\n position: Point,\n /** body part position normalized to 0..1 */\n positionRaw: Point,\n /** body part position relative to body center in meters */\n distance?: Point,\n /** body part detection score */\n score: number,\n}\n\n/** Body results */\nexport interface BodyResult {\n /** body id */\n id: number,\n /** body detection score */\n score: number,\n /** detected body box */\n box: Box,\n /** detected body box normalized to 0..1 */\n boxRaw: Box,\n /** detected body keypoints */\n keypoints: BodyKeypoint[]\n /** detected body keypoints combined into annotated parts */\n annotations: Record,\n}\n\nexport type HandType = 'hand' | 'fist' | 'pinch' | 'point' | 'face' | 'tip' | 'pinchtip';\nexport type Finger = 'index' | 'middle' | 'pinky' | 'ring' | 'thumb' | 'palm';\nexport type FingerCurl = 'none' | 'half' | 'full';\nexport type FingerDirection = 'verticalUp' | 'verticalDown' | 'horizontalLeft' | 'horizontalRight' | 'diagonalUpRight' | 'diagonalUpLeft' | 'diagonalDownRight' | 'diagonalDownLeft';\n\n/** Hand results */\nexport interface HandResult {\n /** hand id */\n id: number,\n /** hand overal score */\n score: number,\n /** hand detection score */\n boxScore: number,\n /** hand skelton score */\n fingerScore: number,\n /** detected hand box */\n box: Box,\n /** detected hand box normalized to 0..1 */\n boxRaw: Box,\n /** detected hand keypoints */\n keypoints: Point[],\n /** detected hand class */\n label: HandType,\n /** detected hand keypoints combined into annotated parts */\n annotations: Record,\n /** detected hand parts annotated with part gestures */\n landmarks: Record,\n}\n\nexport type ObjectType = 'person' | 'bicycle' | 'car' | 'motorcycle' | 'airplane' | 'bus' | 'train' | 'truck' | 'boat' | 'traffic light' | 'fire hydrant' | 'stop sign' | 'parking meter'\n | 'bench' | 'bird' | 'cat' | 'dog' | 'horse' | 'sheep' | 'cow' | 'elephant' | 'bear' | 'zebra' | 'giraffe' | 'backpack' | 'umbrella' | 'handbag' | 'tie' | 'suitcase' | 'frisbee'\n | 'skis' | 'snowboard' | 'sports ball' | 'kite' | 'baseball bat' | 'baseball glove' | 'skateboard' | 'surfboard' | 'tennis racket' | 'bottle' | 'wine glass' | 'cup' | 'fork'\n | 'knife' | 'spoon' | 'bowl' | 'banana' | 'apple' | 'sandwich' | 'orange' | 'broccoli' | 'carrot' | 'hot dog' | 'pizza' | 'donut' | 'cake' | 'chair' | 'couch' | 'potted plant'\n | 'bed' | 'dining table' | 'toilet' | 'tv' | 'laptop' | 'mouse' | 'remote' | 'keyboard' | 'cell phone' | 'microwave' | 'oven' | 'toaster' | 'sink' | 'refrigerator' | 'book'\n | 'clock' | 'vase' | 'scissors' | 'teddy bear' | 'hair drier' | 'toothbrush';\n\n/** Object results */\nexport interface ObjectResult {\n /** object id */\n id: number,\n /** object detection score */\n score: number,\n /** detected object class id */\n class: number,\n /** detected object class name */\n label: ObjectType,\n /** detected object box */\n box: Box,\n /** detected object box normalized to 0..1 */\n boxRaw: Box,\n}\n\n/** Gesture combined results\n * Each result has:\n * - part: part name and number where gesture was detected: `face`, `iris`, `body`, `hand`\n * - gesture: gesture detected\n */\nexport type GestureResult =\n { 'face': number, gesture: FaceGesture }\n | { 'iris': number, gesture: IrisGesture }\n | { 'body': number, gesture: BodyGesture }\n | { 'hand': number, gesture: HandGesture }\n\n/** Person getter\n* - Triggers combining all individual results into a virtual person object\n*/\nexport interface PersonResult {\n /** person id */\n id: number,\n /** face result that belongs to this person */\n face: FaceResult,\n /** body result that belongs to this person */\n body: BodyResult | null,\n /** left and right hand results that belong to this person */\n hands: { left: HandResult | null, right: HandResult | null },\n /** detected gestures specific to this person */\n gestures: GestureResult[],\n /** box that defines the person */\n box: Box,\n /** box that defines the person normalized to 0..1 */\n boxRaw?: Box,\n}\n\n/**\n * Result interface definition for **Human** library\n *\n * Contains all possible detection results\n */\nexport interface Result {\n /** {@link FaceResult}: detection & analysis results */\n face: FaceResult[],\n /** {@link BodyResult}: detection & analysis results */\n body: BodyResult[],\n /** {@link HandResult}: detection & analysis results */\n hand: HandResult[],\n /** {@link GestureResult}: detection & analysis results */\n gesture: GestureResult[],\n /** {@link ObjectResult}: detection & analysis results */\n object: ObjectResult[]\n /** global performance object with timing values for each operation */\n performance: Record,\n /** optional processed canvas that can be used to draw input on screen */\n canvas?: AnyCanvas | null,\n /** timestamp of detection representing the milliseconds elapsed since the UNIX epoch */\n readonly timestamp: number,\n /** getter property that returns unified persons object */\n persons: PersonResult[],\n /** Last known error message */\n error: string | null;\n /** Resolution width */\n width: number,\n /** Resolution height */\n height: number,\n}\n\nexport const empty = (error: string | null = null): Result => ({ face: [], body: [], hand: [], gesture: [], object: [], persons: [], performance: {}, timestamp: 0, width: 0, height: 0, error });\n", "export const kpt: string[] = [ // used to create part labels\n 'nose',\n 'leftEye',\n 'rightEye',\n 'leftEar',\n 'rightEar',\n 'leftShoulder',\n 'rightShoulder',\n 'leftElbow',\n 'rightElbow',\n 'leftWrist',\n 'rightWrist',\n 'leftHip',\n 'rightHip',\n 'leftKnee',\n 'rightKnee',\n 'leftAnkle',\n 'rightAnkle',\n];\n\nexport const horizontal: string[][] = [ // used to fix left vs right\n ['leftEye', 'rightEye'],\n ['leftEar', 'rightEar'],\n ['leftShoulder', 'rightShoulder'],\n ['leftElbow', 'rightElbow'],\n ['leftWrist', 'rightWrist'],\n ['leftHip', 'rightHip'],\n ['leftKnee', 'rightKnee'],\n ['leftAnkle', 'rightAnkle'],\n];\n\nexport const vertical: string[][] = [ // used to remove unlikely keypoint positions\n ['leftKnee', 'leftShoulder'],\n ['rightKnee', 'rightShoulder'],\n ['leftAnkle', 'leftKnee'],\n ['rightAnkle', 'rightKnee'],\n];\n\nexport const relative: string[][][] = [ // used to match relative body parts\n [['leftHip', 'rightHip'], ['leftShoulder', 'rightShoulder']],\n [['leftElbow', 'rightElbow'], ['leftShoulder', 'rightShoulder']],\n];\n\nexport const connected: Record = { // used to create body outline in annotations\n leftLeg: ['leftHip', 'leftKnee', 'leftAnkle'],\n rightLeg: ['rightHip', 'rightKnee', 'rightAnkle'],\n torso: ['leftShoulder', 'rightShoulder', 'rightHip', 'leftHip', 'leftShoulder'],\n leftArm: ['leftShoulder', 'leftElbow', 'leftWrist'],\n rightArm: ['rightShoulder', 'rightElbow', 'rightWrist'],\n head: [],\n};\n", "/**\n * Results interpolation for smoothening of video detection results inbetween detected frames\n */\n\nimport { Result, FaceResult, BodyResult, HandResult, ObjectResult, PersonResult, Box, Point, BodyLandmark, BodyAnnotation, empty, FaceLandmark } from '../result';\nimport type { Config } from '../config';\n\nimport * as moveNetCoords from '../body/movenetcoords';\nimport * as blazePoseCoords from '../body/blazeposecoords';\nimport * as efficientPoseCoords from '../body/efficientposecoords';\nimport { now } from './util';\nimport { env } from './env';\n\nconst bufferedResult: Result = empty();\nlet interpolateTime = 0;\n\nexport function calc(newResult: Result, config: Config): Result {\n const t0 = now();\n if (!newResult) return empty();\n // each record is only updated using deep clone when number of detected record changes, otherwise it will converge by itself\n // otherwise bufferedResult is a shallow clone of result plus updated local calculated values\n // thus mixing by-reference and by-value assignments to minimize memory operations\n\n const elapsed = Date.now() - newResult.timestamp;\n\n /* curve fitted: buffer = 8 - ln(delay)\n interpolation formula: current = ((buffer - 1) * previous + live) / buffer\n - at 50ms delay buffer = ~4.1 => 28% towards live data\n - at 250ms delay buffer = ~2.5 => 40% towards live data\n - at 500ms delay buffer = ~1.8 => 55% towards live data\n - at 750ms delay buffer = ~1.4 => 71% towards live data\n - at 1sec delay buffer = 1 which means live data is used\n */\n const bufferedFactor = elapsed < 1000 ? 8 - Math.log(elapsed + 1) : 1;\n\n if (newResult.canvas) bufferedResult.canvas = newResult.canvas;\n if (newResult.error) bufferedResult.error = newResult.error;\n\n // interpolate body results\n if (!bufferedResult.body || (newResult.body.length !== bufferedResult.body.length)) {\n bufferedResult.body = JSON.parse(JSON.stringify(newResult.body)) as BodyResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.body.length; i++) {\n const box = newResult.body[i].box // update box\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].box[j] + newBoxCoord) / bufferedFactor) as Box;\n const boxRaw = newResult.body[i].boxRaw // update boxRaw\n .map((newBoxCoord, j) => ((bufferedFactor - 1) * bufferedResult.body[i].boxRaw[j] + newBoxCoord) / bufferedFactor) as Box;\n const keypoints = (newResult.body[i].keypoints // update keypoints\n .map((newKpt, j) => ({\n score: newKpt.score,\n part: newKpt.part,\n position: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[0] || 0) + (newKpt.position[0] || 0)) / bufferedFactor : newKpt.position[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[1] || 0) + (newKpt.position[1] || 0)) / bufferedFactor : newKpt.position[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].position[2] || 0) + (newKpt.position[2] || 0)) / bufferedFactor : newKpt.position[2],\n ],\n positionRaw: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[0] || 0) + (newKpt.positionRaw[0] || 0)) / bufferedFactor : newKpt.positionRaw[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[1] || 0) + (newKpt.positionRaw[1] || 0)) / bufferedFactor : newKpt.positionRaw[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].positionRaw[2] || 0) + (newKpt.positionRaw[2] || 0)) / bufferedFactor : newKpt.positionRaw[2],\n ],\n distance: [\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[0] || 0) + (newKpt.distance?.[0] || 0)) / bufferedFactor : newKpt.distance?.[0],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[1] || 0) + (newKpt.distance?.[1] || 0)) / bufferedFactor : newKpt.distance?.[1],\n bufferedResult.body[i].keypoints[j] ? ((bufferedFactor - 1) * (bufferedResult.body[i].keypoints[j].distance?.[2] || 0) + (newKpt.distance?.[2] || 0)) / bufferedFactor : newKpt.distance?.[2],\n ],\n }))) as { score: number, part: BodyLandmark, position: [number, number, number?], positionRaw: [number, number, number?] }[];\n\n const annotations: Record = {} as Record; // recreate annotations\n let coords = { connected: {} };\n if (config.body.modelPath?.includes('efficientpose')) coords = efficientPoseCoords;\n else if (config.body.modelPath?.includes('blazepose')) coords = blazePoseCoords;\n else if (config.body.modelPath?.includes('movenet')) coords = moveNetCoords;\n for (const [name, indexes] of Object.entries(coords.connected as Record)) {\n const pt: Point[][] = [];\n for (let j = 0; j < indexes.length - 1; j++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[j]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[j + 1]);\n // if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n if (pt0 && pt1) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n bufferedResult.body[i] = { ...newResult.body[i], box, boxRaw, keypoints, annotations }; // shallow clone plus updated values\n }\n }\n\n // interpolate hand results\n if (!bufferedResult.hand || (newResult.hand.length !== bufferedResult.hand.length)) {\n bufferedResult.hand = JSON.parse(JSON.stringify(newResult.hand)); // deep clone once\n } else {\n for (let i = 0; i < newResult.hand.length; i++) {\n const box = (newResult.hand[i].box// update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.hand[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.hand[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n if (bufferedResult.hand[i].keypoints.length !== newResult.hand[i].keypoints.length) bufferedResult.hand[i].keypoints = newResult.hand[i].keypoints; // reset keypoints as previous frame did not have them\n const keypoints = newResult.hand[i].keypoints && newResult.hand[i].keypoints.length > 0 ? newResult.hand[i].keypoints // update landmarks\n .map((landmark, j) => landmark\n .map((coord, k) => (((bufferedFactor - 1) * (bufferedResult.hand[i].keypoints[j][k] || 1) + (coord || 0)) / bufferedFactor)) as Point)\n : [];\n let annotations = {};\n if (Object.keys(bufferedResult.hand[i].annotations).length !== Object.keys(newResult.hand[i].annotations).length) {\n bufferedResult.hand[i].annotations = newResult.hand[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.hand[i].annotations;\n } else if (newResult.hand[i].annotations) {\n for (const key of Object.keys(newResult.hand[i].annotations)) { // update annotations\n annotations[key] = newResult.hand[i]?.annotations?.[key]?.[0]\n ? newResult.hand[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.hand[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n bufferedResult.hand[i] = { ...newResult.hand[i], box, boxRaw, keypoints, annotations: annotations as HandResult['annotations'] }; // shallow clone plus updated values\n }\n }\n\n // interpolate face results\n if (!bufferedResult.face || (newResult.face.length !== bufferedResult.face.length)) {\n bufferedResult.face = JSON.parse(JSON.stringify(newResult.face)) as FaceResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.face.length; i++) {\n const box = (newResult.face[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.face[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.face[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n let annotations: Record = newResult.face[i].annotations;\n if (Object.keys(bufferedResult.face[i].annotations).length !== Object.keys(newResult.face[i].annotations).length) {\n bufferedResult.face[i].annotations = newResult.face[i].annotations; // reset annotations as previous frame did not have them\n annotations = bufferedResult.face[i].annotations;\n } else if (newResult.face[i].annotations) {\n for (const key of Object.keys(newResult.face[i].annotations)) { // update annotations\n annotations[key] = newResult.face[i]?.annotations?.[key]?.[0]\n ? newResult.face[i].annotations[key]\n .map((val, j: number) => val\n .map((coord: number, k: number) => ((bufferedFactor - 1) * bufferedResult.face[i].annotations[key][j][k] + coord) / bufferedFactor))\n : null;\n }\n }\n if (newResult.face[i].rotation) {\n const rotation: {\n matrix: [number, number, number, number, number, number, number, number, number],\n angle: { roll: number, yaw: number, pitch: number },\n gaze: { bearing: number, strength: number }\n } = { matrix: [0, 0, 0, 0, 0, 0, 0, 0, 0], angle: { roll: 0, yaw: 0, pitch: 0 }, gaze: { bearing: 0, strength: 0 } };\n rotation.matrix = newResult.face[i].rotation?.matrix as [number, number, number, number, number, number, number, number, number];\n rotation.angle = {\n roll: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.roll || 0) + (newResult.face[i].rotation?.angle?.roll || 0)) / bufferedFactor,\n yaw: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.yaw || 0) + (newResult.face[i].rotation?.angle?.yaw || 0)) / bufferedFactor,\n pitch: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.angle?.pitch || 0) + (newResult.face[i].rotation?.angle?.pitch || 0)) / bufferedFactor,\n };\n rotation.gaze = {\n // not fully correct due projection on circle, also causes wrap-around draw on jump from negative to positive\n bearing: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.bearing || 0) + (newResult.face[i].rotation?.gaze.bearing || 0)) / bufferedFactor,\n strength: ((bufferedFactor - 1) * (bufferedResult.face[i].rotation?.gaze.strength || 0) + (newResult.face[i].rotation?.gaze.strength || 0)) / bufferedFactor,\n };\n bufferedResult.face[i] = { ...newResult.face[i], rotation, box, boxRaw, annotations }; // shallow clone plus updated values\n } else {\n bufferedResult.face[i] = { ...newResult.face[i], box, boxRaw, annotations }; // shallow clone plus updated values\n }\n }\n }\n\n // interpolate object detection results\n if (!bufferedResult.object || (newResult.object.length !== bufferedResult.object.length)) {\n bufferedResult.object = JSON.parse(JSON.stringify(newResult.object)) as ObjectResult[]; // deep clone once\n } else {\n for (let i = 0; i < newResult.object.length; i++) {\n const box = (newResult.object[i].box // update box\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].box[j] + b) / bufferedFactor)) as Box;\n const boxRaw = (newResult.object[i].boxRaw // update boxRaw\n .map((b, j) => ((bufferedFactor - 1) * bufferedResult.object[i].boxRaw[j] + b) / bufferedFactor)) as Box;\n bufferedResult.object[i] = { ...newResult.object[i], box, boxRaw }; // shallow clone plus updated values\n }\n }\n\n // interpolate person results\n if (newResult.persons) {\n const newPersons = newResult.persons; // trigger getter function\n if (!bufferedResult.persons || (newPersons.length !== bufferedResult.persons.length)) {\n bufferedResult.persons = JSON.parse(JSON.stringify(newPersons)) as PersonResult[];\n } else {\n for (let i = 0; i < newPersons.length; i++) { // update person box, we don't update the rest as it's updated as reference anyhow\n bufferedResult.persons[i].box = (newPersons[i].box\n .map((box, j) => ((bufferedFactor - 1) * bufferedResult.persons[i].box[j] + box) / bufferedFactor)) as Box;\n }\n }\n }\n\n // copy latest gestures without interpolation\n if (newResult.gesture) bufferedResult.gesture = newResult.gesture;\n\n // copy resolution info\n bufferedResult.width = newResult.width;\n bufferedResult.height = newResult.height;\n\n // append interpolation performance data\n const t1 = now();\n interpolateTime = env.perfadd ? interpolateTime + Math.round(t1 - t0) : Math.round(t1 - t0);\n if (newResult.performance) bufferedResult.performance = { ...newResult.performance, interpolate: interpolateTime };\n\n return bufferedResult;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Meet**](https://drive.google.com/file/d/1lnP1bRi9CSqQQXUHa13159vLELYDgDu0/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]);\n // t.softmax = tf.softmax(t.squeeze); // model meet has two channels for fg and bg\n [t.bgRaw, t.fgRaw] = tf.unstack(t.squeeze, 2);\n // t.bg = tf.softmax(t.bgRaw); // we can ignore bg channel\n t.fg = tf.softmax(t.fgRaw);\n t.mul = tf.mul(t.fg, constants.tf255);\n t.expand = tf.expandDims(t.mul, 2);\n t.output = tf.image.resizeBilinear(t.expand as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.output], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.output, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/** Face descriptor type as number array */\nexport type Descriptor = number[]\nexport type MatchOptions = { order?: number, threshold?: number, multiplier?: number, min?: number, max?: number } | undefined;\n\n/** Calculates distance between two descriptors\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n */\nexport function distance(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25 }) {\n // general minkowski distance, euclidean distance is limited case where order is 2\n if (!descriptor1 || !descriptor1) return Number.MAX_SAFE_INTEGER;\n let sum = 0;\n for (let i = 0; i < descriptor1.length; i++) {\n const diff = (!options.order || options.order === 2) ? (descriptor1[i] - descriptor2[i]) : (Math.abs(descriptor1[i] - descriptor2[i]));\n sum += (!options.order || options.order === 2) ? (diff * diff) : (diff ** options.order);\n }\n return (options.multiplier || 20) * sum;\n}\n\n// invert distance to similarity, normalize to given range and clamp\nconst normalizeDistance = (dist, order, min, max) => {\n if (dist === 0) return 1; // short circuit for identical inputs\n const root = order === 2 ? Math.sqrt(dist) : dist ** (1 / order); // take root of distance\n const norm = (1 - (root / 100) - min) / (max - min); // normalize to range\n const clamp = Math.max(Math.min(norm, 1), 0); // clamp to 0..1\n return clamp;\n};\n\n/** Calculates normalized similarity between two face descriptors based on their `distance`\n * @param options - calculation options\n * - order - algorithm to use\n * Euclidean distance if `order` is 2 (default), Minkowski distance algorithm of nth order if `order` is higher than 2\n * - multiplier - by how much to enhance difference analysis in range of 1..100\n * default is 20 which normalizes results to similarity above 0.5 can be considered a match\n * - min - normalize similarity result to a given range\n * - max - normalzie similarity resutl to a given range\n * default is 0.2...0.8\n * Returns similarity between two face descriptors normalized to 0..1 range where 0 is no similarity and 1 is perfect similarity\n */\nexport function similarity(descriptor1: Descriptor, descriptor2: Descriptor, options: MatchOptions = { order: 2, multiplier: 25, min: 0.2, max: 0.8 }) {\n const dist = distance(descriptor1, descriptor2, options);\n return normalizeDistance(dist, options.order || 2, options.min || 0, options.max || 1);\n}\n\n/** Matches given descriptor to a closest entry in array of descriptors\n * @param descriptor - face descriptor\n * @param descriptors - array of face descriptors to commpare given descriptor to\n * @param options - see `similarity` method for options description\n * Returns\n * - `index` index array index where best match was found or -1 if no matches\n * - `distance` calculated `distance` of given descriptor to the best match\n * - `similarity` calculated normalized `similarity` of given descriptor to the best match\n*/\nexport function find(descriptor: Descriptor, descriptors: Descriptor[], options: MatchOptions = { order: 2, multiplier: 25, threshold: 0, min: 0.2, max: 0.8 }) {\n if (!Array.isArray(descriptor) || !Array.isArray(descriptors) || descriptor.length < 64 || descriptors.length === 0) { // validate input\n return { index: -1, distance: Number.POSITIVE_INFINITY, similarity: 0 };\n }\n let lowestDistance = Number.MAX_SAFE_INTEGER;\n let index = -1;\n for (let i = 0; i < descriptors.length; i++) {\n const res = descriptors[i].length === descriptor.length ? distance(descriptor, descriptors[i], options) : Number.MAX_SAFE_INTEGER;\n if (res < lowestDistance) {\n lowestDistance = res;\n index = i;\n }\n if (lowestDistance < (options.threshold || 0)) break;\n }\n const normalizedSimilarity = normalizeDistance(lowestDistance, options.order || 2, options.min || 0, options.max || 1);\n return { index, distance: lowestDistance, similarity: normalizedSimilarity };\n}\n", "/**\n * Loader and Validator for all models used by Human\n */\n\nimport { env } from './util/env';\nimport { log } from './util/util';\nimport * as antispoof from './face/antispoof';\nimport * as blazeface from './face/blazeface';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as emotion from './gear/emotion';\nimport * as facemesh from './face/facemesh';\nimport * as faceres from './face/faceres';\nimport * as gear from './gear/gear';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as insightface from './face/insightface';\nimport * as iris from './face/iris';\nimport * as liveness from './face/liveness';\nimport * as meet from './segmentation/meet';\nimport * as mobilefacenet from './face/mobilefacenet';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as ssrnetAge from './gear/ssrnet-age';\nimport * as ssrnetGender from './gear/ssrnet-gender';\nimport { modelStats, ModelInfo } from './tfjs/load';\nimport type { GraphModel } from './tfjs/types';\nimport type { Human } from './human';\n\nexport interface KernelOps { name: string, url: string, missing: string[], ops: string[] }\n\nexport function validateModel(instance: Human | null, model: GraphModel | null, name: string): KernelOps | null {\n if (!model) return null;\n if (!instance?.config?.validateModels) return null;\n const simpleOps = ['const', 'placeholder', 'noop', 'pad', 'squeeze', 'add', 'sub', 'mul', 'div'];\n const ignoreOps = ['biasadd', 'fusedbatchnormv3', 'matmul', 'switch', 'shape', 'merge', 'split', 'broadcastto'];\n const ops: string[] = [];\n const missing: string[] = [];\n interface Op { name: string, category: string, op: string }\n const url = model['modelUrl'] as string;\n const executor = model['executor'];\n if (executor?.graph?.nodes) {\n for (const kernel of Object.values(executor.graph.nodes)) {\n const op = (kernel as Op).op.toLowerCase();\n if (!ops.includes(op)) ops.push(op);\n }\n } else {\n if (!executor && instance.config.debug) {\n log('model not loaded', name);\n }\n }\n for (const op of ops) {\n if (!simpleOps.includes(op) // exclude simple ops\n && !ignoreOps.includes(op) // exclude specific ops\n && !instance.env.kernels.includes(op) // check actual kernel ops\n && !instance.env.kernels.includes(op.replace('_', '')) // check variation without _\n && !instance.env.kernels.includes(op.replace('native', '')) // check standard variation\n && !instance.env.kernels.includes(op.replace('v2', ''))) { // check non-versioned variation\n missing.push(op);\n }\n }\n if (instance.config.debug && missing.length > 0) log('model validation failed:', name, missing);\n return missing.length > 0 ? { name, missing, ops, url } : null;\n}\n\n/** structure that holds global stats for currently loaded models */\nexport interface ModelStats {\n numLoadedModels: number,\n numDefinedModels: number,\n percentageLoaded: number,\n totalSizeFromManifest: number,\n totalSizeWeights: number,\n totalSizeLoading: number,\n modelStats: ModelInfo[],\n}\n\n/** Models class used by Human\n * - models: record of all GraphModels\n * - list: returns list of configured models with their stats\n * - loaded: returns array of loaded models\n * - reset: unloads all models\n * - validate: checks loaded models for valid kernel ops vs current backend\n * - stats: live detailed model stats that can be checked during model load phase\n */\nexport class Models {\n private instance: Human;\n models: Record = {};\n\n constructor(currentInstance: Human) {\n this.models = {};\n this.instance = currentInstance;\n }\n\n stats(): ModelStats {\n let totalSizeFromManifest = 0;\n let totalSizeWeights = 0;\n let totalSizeLoading = 0;\n for (const m of Object.values(modelStats)) {\n totalSizeFromManifest += m.sizeFromManifest;\n totalSizeWeights += m.sizeLoadedWeights;\n totalSizeLoading += m.sizeDesired;\n }\n const percentageLoaded = totalSizeLoading > 0 ? totalSizeWeights / totalSizeLoading : 0;\n return {\n numLoadedModels: Object.values(modelStats).length,\n numDefinedModels: Object.keys(this.models).length,\n percentageLoaded,\n totalSizeFromManifest,\n totalSizeWeights,\n totalSizeLoading,\n modelStats: Object.values(modelStats),\n };\n }\n\n reset(): void {\n for (const model of Object.keys(this.models)) this.models[model] = null;\n }\n\n async load(instance?: Human): Promise {\n if (env.initial) this.reset();\n if (instance) this.instance = instance;\n const m: Record> = {};\n // face main models\n m.blazeface = (this.instance.config.face.enabled && !this.models.blazeface) ? blazeface.load(this.instance.config) : null;\n m.antispoof = (this.instance.config.face.enabled && this.instance.config.face.antispoof?.enabled && !this.models.antispoof) ? antispoof.load(this.instance.config) : null;\n m.liveness = (this.instance.config.face.enabled && this.instance.config.face.liveness?.enabled && !this.models.liveness) ? liveness.load(this.instance.config) : null;\n m.faceres = (this.instance.config.face.enabled && this.instance.config.face.description?.enabled && !this.models.faceres) ? faceres.load(this.instance.config) : null;\n m.emotion = (this.instance.config.face.enabled && this.instance.config.face.emotion?.enabled && !this.models.emotion) ? emotion.load(this.instance.config) : null;\n m.iris = (this.instance.config.face.enabled && this.instance.config.face.iris?.enabled && !this.instance.config.face.attention?.enabled && !this.models.iris) ? iris.load(this.instance.config) : null;\n m.facemesh = (this.instance.config.face.enabled && this.instance.config.face.mesh?.enabled && (!this.models.facemesh)) ? facemesh.load(this.instance.config) : null;\n // face alternatives\n m.gear = (this.instance.config.face.enabled && this.instance.config.face['gear']?.enabled && !this.models.gear) ? gear.load(this.instance.config) : null;\n m.ssrnetage = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetage) ? ssrnetAge.load(this.instance.config) : null;\n m.ssrnetgender = (this.instance.config.face.enabled && this.instance.config.face['ssrnet']?.enabled && !this.models.ssrnetgender) ? ssrnetGender.load(this.instance.config) : null;\n m.mobilefacenet = (this.instance.config.face.enabled && this.instance.config.face['mobilefacenet']?.enabled && !this.models.mobilefacenet) ? mobilefacenet.load(this.instance.config) : null;\n m.insightface = (this.instance.config.face.enabled && this.instance.config.face['insightface']?.enabled && !this.models.insightface) ? insightface.load(this.instance.config) : null;\n // body alterinatives\n m.blazepose = (this.instance.config.body.enabled && !this.models.blazepose && this.instance.config.body.modelPath?.includes('blazepose')) ? blazepose.loadPose(this.instance.config) : null;\n m.blazeposedetect = (this.instance.config.body.enabled && !this.models.blazeposedetect && this.instance.config.body['detector'] && this.instance.config.body['detector'].modelPath) ? blazepose.loadDetect(this.instance.config) : null;\n m.efficientpose = (this.instance.config.body.enabled && !this.models.efficientpose && this.instance.config.body.modelPath?.includes('efficientpose')) ? efficientpose.load(this.instance.config) : null;\n m.movenet = (this.instance.config.body.enabled && !this.models.movenet && this.instance.config.body.modelPath?.includes('movenet')) ? movenet.load(this.instance.config) : null;\n m.posenet = (this.instance.config.body.enabled && !this.models.posenet && this.instance.config.body.modelPath?.includes('posenet')) ? posenet.load(this.instance.config) : null;\n // hand alternatives\n m.handtrack = (this.instance.config.hand.enabled && !this.models.handtrack && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadDetect(this.instance.config) : null;\n m.handskeleton = (this.instance.config.hand.enabled && this.instance.config.hand.landmarks && !this.models.handskeleton && this.instance.config.hand.detector?.modelPath?.includes('handtrack')) ? handtrack.loadSkeleton(this.instance.config) : null;\n // if (this.instance.config.hand.detector?.modelPath?.includes('handdetect')) [m.handpose, m.handskeleton] = (!this.models.handpose) ? await handpose.load(this.instance.config) : [null, null];\n if (this.instance.config.hand.enabled && !this.models.handdetect && this.instance.config.hand.detector?.modelPath?.includes('handdetect')) {\n m.handdetect = handpose.loadDetect(this.instance.config);\n m.handskeleton = handpose.loadSkeleton(this.instance.config);\n }\n // object detection alternatives\n m.centernet = (this.instance.config.object.enabled && !this.models.centernet && this.instance.config.object.modelPath?.includes('centernet')) ? centernet.load(this.instance.config) : null;\n m.nanodet = (this.instance.config.object.enabled && !this.models.nanodet && this.instance.config.object.modelPath?.includes('nanodet')) ? nanodet.load(this.instance.config) : null;\n // segmentation alternatives\n m.selfie = (this.instance.config.segmentation.enabled && !this.models.selfie && this.instance.config.segmentation.modelPath?.includes('selfie')) ? selfie.load(this.instance.config) : null;\n m.meet = (this.instance.config.segmentation.enabled && !this.models.meet && this.instance.config.segmentation.modelPath?.includes('meet')) ? meet.load(this.instance.config) : null;\n m.rvm = (this.instance.config.segmentation.enabled && !this.models.rvm && this.instance.config.segmentation.modelPath?.includes('rvm')) ? rvm.load(this.instance.config) : null;\n\n // models are loaded in parallel asynchronously so lets wait until they are actually loaded\n for (const [model, promise] of Object.entries(m)) {\n if (promise?.['then']) promise['then']((val) => this.models[model] = val);\n }\n await Promise.all(Object.values(m)); // wait so this function does not resolve prematurely\n }\n\n list() {\n const models = Object.keys(this.models).map((model) => ({ name: model, loaded: (this.models[model] !== null), size: 0, url: this.models[model] ? this.models[model]?.['modelUrl'] : null }));\n for (const m of models) {\n const stats = Object.keys(modelStats).find((s) => s.startsWith(m.name));\n if (!stats) continue;\n m.size = modelStats[stats].sizeLoadedWeights;\n m.url = modelStats[stats].url;\n }\n return models;\n }\n\n loaded() {\n const list = this.list();\n const loaded = list.filter((model) => model.loaded).map((model) => model.name);\n return loaded;\n }\n\n validate(): { name: string, missing: string[] }[] {\n const missing: KernelOps[] = [];\n for (const defined of Object.keys(this.models)) {\n const model: GraphModel | null = this.models[defined as keyof Models];\n if (!model) continue;\n const res = validateModel(this.instance, model, defined);\n if (res) missing.push(res);\n }\n return missing;\n }\n}\n", "import * as tf from 'dist/tfjs.esm.js';\nimport type { BodyKeypoint, BodyResult } from '../result';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport type { Tensor, Tensor3D } from '../tfjs/types';\n\nconst maxJitter = 0.005; // default allowed jitter is within 0.5%\n\nconst cache: {\n keypoints: BodyKeypoint[],\n padding: [number, number][];\n} = {\n keypoints: [],\n padding: [[0, 0], [0, 0], [0, 0], [0, 0]],\n};\n\nexport function bodyParts(body: BodyResult) { // model sometimes mixes up left vs right keypoints so we fix them\n for (const pair of coords.horizontal) { // fix body parts left vs right\n const left = body.keypoints.findIndex((kp) => kp.part === pair[0]);\n const right = body.keypoints.findIndex((kp) => kp.part === pair[1]);\n if (body.keypoints[left] && body.keypoints[right]) {\n if (body.keypoints[left].position[0] < body.keypoints[right].position[0]) {\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n }\n for (const pair of coords.vertical) { // remove body parts with improbable vertical position\n const lower = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const higher = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n if (body.keypoints[lower] && body.keypoints[higher]) {\n if (body.keypoints[lower].position[1] < body.keypoints[higher].position[1]) {\n body.keypoints.splice(lower, 1);\n }\n }\n }\n for (const [pair, compare] of coords.relative) { // rearrange body parts according to their relative position\n const left = body.keypoints.findIndex((kp) => (kp && kp.part === pair[0]));\n const right = body.keypoints.findIndex((kp) => (kp && kp.part === pair[1]));\n const leftTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[0]));\n const rightTo = body.keypoints.findIndex((kp) => (kp && kp.part === compare[1]));\n if (!body.keypoints[leftTo] || !body.keypoints[rightTo]) continue; // only if we have both compare points\n const distanceLeft = body.keypoints[left] ? [\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[left].position[0]),\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[left].position[0]),\n ] : [0, 0];\n const distanceRight = body.keypoints[right] ? [\n Math.abs(body.keypoints[rightTo].position[0] - body.keypoints[right].position[0]),\n Math.abs(body.keypoints[leftTo].position[0] - body.keypoints[right].position[0]),\n ] : [0, 0];\n if (distanceLeft[0] > distanceLeft[1] || distanceRight[0] > distanceRight[1]) { // should flip keypoints\n const tmp = body.keypoints[left];\n body.keypoints[left] = body.keypoints[right];\n body.keypoints[right] = tmp;\n }\n }\n}\n\nexport function jitter(keypoints: BodyKeypoint[]): BodyKeypoint[] {\n for (let i = 0; i < keypoints.length; i++) {\n if (keypoints[i] && cache.keypoints[i]) {\n const diff = [Math.abs(keypoints[i].positionRaw[0] - cache.keypoints[i].positionRaw[0]), Math.abs(keypoints[i].positionRaw[1] - cache.keypoints[i].positionRaw[1])];\n if (diff[0] < maxJitter && diff[1] < maxJitter) {\n keypoints[i] = cache.keypoints[i]; // below jitter so replace keypoint\n } else {\n cache.keypoints[i] = keypoints[i]; // above jitter so update cache\n }\n } else {\n cache.keypoints[i] = keypoints[i]; // cache for keypoint doesnt exist so create it here\n }\n }\n return keypoints;\n}\n\nexport function padInput(input: Tensor, inputSize: number): Tensor {\n const t: Record = {};\n if (!input?.shape?.[1] || !input?.shape?.[2]) return input;\n cache.padding = [\n [0, 0], // dont touch batch\n [input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0, input.shape[2] > input.shape[1] ? Math.trunc((input.shape[2] - input.shape[1]) / 2) : 0], // height before&after\n [input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0, input.shape[1] > input.shape[2] ? Math.trunc((input.shape[1] - input.shape[2]) / 2) : 0], // width before&after\n [0, 0], // dont touch rbg\n ];\n t.pad = tf.pad(input, cache.padding);\n t.resize = tf.image.resizeBilinear(t.pad as Tensor3D, [inputSize, inputSize]);\n const final = tf.cast(t.resize, 'int32');\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return final;\n}\n\nexport function rescaleBody(body: BodyResult, outputSize: [number, number]): BodyResult {\n body.keypoints = body.keypoints.filter((kpt) => kpt?.position); // filter invalid keypoints\n for (const kpt of body.keypoints) {\n kpt.position = [\n kpt.position[0] * (outputSize[0] + cache.padding[2][0] + cache.padding[2][1]) / outputSize[0] - cache.padding[2][0],\n kpt.position[1] * (outputSize[1] + cache.padding[1][0] + cache.padding[1][1]) / outputSize[1] - cache.padding[1][0],\n ];\n kpt.positionRaw = [\n kpt.position[0] / outputSize[0], kpt.position[1] / outputSize[1],\n ];\n }\n const rescaledBoxes = box.calc(body.keypoints.map((pt) => pt.position), outputSize);\n body.box = rescaledBoxes.box;\n body.boxRaw = rescaledBoxes.boxRaw;\n return body;\n}\n", "/**\n * MoveNet model implementation\n *\n * Based on: [**MoveNet**](https://blog.tensorflow.org/2021/05/next-generation-pose-detection-with-movenet-and-tensorflowjs.html)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport * as box from '../util/box';\nimport * as coords from './movenetcoords';\nimport * as fix from './movenetfix';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyKeypoint, BodyResult, BodyLandmark, BodyAnnotation, Box, Point } from '../result';\nimport type { GraphModel, Tensor } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { fakeOps } from '../tfjs/backend';\nimport { env } from '../util/env';\n\nlet model: GraphModel | null;\nlet inputSize = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\n// const boxExpandFact = 1.5; // increase to 150%\n\nconst cache: {\n boxes: Box[], // unused\n bodies: BodyResult[];\n last: number,\n} = {\n boxes: [],\n bodies: [],\n last: 0,\n};\n\nexport async function load(config: Config): Promise {\n if (env.initial) model = null;\n if (!model) {\n fakeOps(['size'], config);\n model = await loadModel(config.body.modelPath);\n } else if (config.debug) log('cached model:', model['modelUrl']);\n inputSize = (model?.['executor'] && model?.inputs?.[0].shape) ? model.inputs[0].shape[2] : 0;\n if (inputSize < 64) inputSize = 256;\n // @ts-ignore private property\n if (tf.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS) tf.env().set('WEBGL_USE_SHAPES_UNIFORMS', false); // default=false \n return model;\n}\n\nfunction parseSinglePose(res, config, image) {\n const kpt = res[0][0];\n const keypoints: BodyKeypoint[] = [];\n let score = 0;\n for (let id = 0; id < kpt.length; id++) {\n score = kpt[id][2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[id][1], kpt[id][0]];\n keypoints.push({\n score: Math.round(100 * score) / 100,\n part: coords.kpt[id] as BodyLandmark,\n positionRaw,\n position: [ // normalized to input image size\n Math.round((image.shape[2] || 0) * positionRaw[0]),\n Math.round((image.shape[1] || 0) * positionRaw[1]),\n ],\n });\n }\n }\n score = keypoints.reduce((prev, curr) => (curr.score > prev ? curr.score : prev), 0);\n const bodies: BodyResult[] = [];\n const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n const annotations: Record = {};\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n const body: BodyResult = { id: 0, score, box: newBox.box, boxRaw: newBox.boxRaw, keypoints, annotations };\n fix.bodyParts(body);\n bodies.push(body);\n return bodies;\n}\n\nfunction parseMultiPose(res, config, image) {\n const bodies: BodyResult[] = [];\n for (let id = 0; id < res[0].length; id++) {\n const kpt = res[0][id];\n const boxScore = Math.round(100 * kpt[51 + 4]) / 100;\n if (boxScore > config.body.minConfidence) {\n const keypoints: BodyKeypoint[] = [];\n for (let i = 0; i < 17; i++) {\n const score = kpt[3 * i + 2];\n if (score > config.body.minConfidence) {\n const positionRaw: Point = [kpt[3 * i + 1], kpt[3 * i + 0]];\n keypoints.push({\n part: coords.kpt[i] as BodyLandmark,\n score: Math.round(100 * score) / 100,\n positionRaw,\n position: [Math.round((image.shape[2] || 0) * positionRaw[0]), Math.round((image.shape[1] || 0) * positionRaw[1])],\n });\n }\n }\n // const newBox = box.calc(keypoints.map((pt) => pt.position), [image.shape[2], image.shape[1]]);\n // movenet-multipose has built-in box details\n const boxRaw: Box = [kpt[51 + 1], kpt[51 + 0], kpt[51 + 3] - kpt[51 + 1], kpt[51 + 2] - kpt[51 + 0]];\n const boxNorm: Box = [Math.trunc(boxRaw[0] * (image.shape[2] || 0)), Math.trunc(boxRaw[1] * (image.shape[1] || 0)), Math.trunc(boxRaw[2] * (image.shape[2] || 0)), Math.trunc(boxRaw[3] * (image.shape[1] || 0))];\n const annotations: Record = {} as Record;\n for (const [name, indexes] of Object.entries(coords.connected)) {\n const pt: Point[][] = [];\n for (let i = 0; i < indexes.length - 1; i++) {\n const pt0 = keypoints.find((kp) => kp.part === indexes[i]);\n const pt1 = keypoints.find((kp) => kp.part === indexes[i + 1]);\n if (pt0 && pt1 && pt0.score > (config.body.minConfidence || 0) && pt1.score > (config.body.minConfidence || 0)) pt.push([pt0.position, pt1.position]);\n }\n annotations[name] = pt;\n }\n // const body: BodyResult = { id, score: totalScore, box: newBox.box, boxRaw: newBox.boxRaw, keypoints: [...keypoints], annotations };\n const body: BodyResult = { id, score: boxScore, box: boxNorm, boxRaw, keypoints: [...keypoints], annotations };\n fix.bodyParts(body);\n bodies.push(body);\n }\n }\n bodies.sort((a, b) => b.score - a.score);\n if (bodies.length > config.body.maxDetected) bodies.length = config.body.maxDetected;\n return bodies;\n}\n\nexport async function predict(input: Tensor, config: Config): Promise {\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return []; // something is wrong with the model\n if (!config.skipAllowed) cache.boxes.length = 0; // allowed to use cache or not\n skipped++; // increment skip frames\n const skipTime = (config.body.skipTime || 0) > (now() - cache.last);\n const skipFrame = skipped < (config.body.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame) {\n return cache.bodies; // return cached results without running anything\n }\n return new Promise(async (resolve) => {\n const t: Record = {};\n skipped = 0;\n // run detection on squared input and no cached boxes\n t.input = fix.padInput(input, inputSize);\n t.res = model?.execute(t.input) as Tensor;\n cache.last = now();\n const res = await t.res.array();\n cache.bodies = (t.res.shape[2] === 17)\n ? parseSinglePose(res, config, input)\n : parseMultiPose(res, config, input);\n for (const body of cache.bodies) {\n fix.rescaleBody(body, [input.shape[2] || 1, input.shape[1] || 1]);\n fix.jitter(body.keypoints);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n\n resolve(cache.bodies);\n });\n}\n", "/**\n * NanoDet object detection model implementation\n *\n * Based on: [**NanoDet**](https://github.com/RangiLyu/nanodet)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport { labels } from './labels';\nimport type { ObjectResult, ObjectType, Box } from '../result';\nimport type { GraphModel, Tensor, Tensor2D, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\nlet last: ObjectResult[] = [];\nlet lastTime = 0;\nlet skipped = Number.MAX_SAFE_INTEGER;\nlet inputSize = 0;\n\nconst scaleBox = 2.5; // increase box size\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) {\n model = await loadModel(config.object.modelPath);\n const inputs = model?.['executor'] ? Object.values(model.modelSignature['inputs']) : undefined;\n // @ts-ignore model signature properties are not typed and inputs are unreliable for this model\n inputSize = Array.isArray(inputs) ? parseInt(inputs[0].tensorShape.dim[2].size) : 416;\n } else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nasync function process(res: Tensor[], outputShape: [number, number], config: Config) {\n let id = 0;\n let results: ObjectResult[] = [];\n const size = inputSize;\n for (const strideSize of [1, 2, 4]) { // try each stride size as it detects large/medium/small objects\n // find scores, boxes, classes\n const baseSize = strideSize * 13; // 13x13=169, 26x26=676, 52x52=2704\n // find boxes and scores output depending on stride\n const scoresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) === labels.length)) as Tensor2D);\n const scores = await scoresT.array(); // optionally use exponential scores or just as-is\n const featuresT = tf.squeeze(res.find((a) => (a.shape[1] === (baseSize ** 2) && (a.shape[2] || 0) < labels.length)) as Tensor2D);\n const boxesMaxT = tf.reshape(featuresT, [-1, 4, (featuresT.shape?.[1] || 0) / 4]); // reshape [output] to [4, output / 4] where number is number of different features inside each stride\n const boxIdxT = tf.argMax(boxesMaxT, 2); // what we need is indexes of features with highest scores, not values itself\n const boxIdx = await boxIdxT.array(); // what we need is indexes of features with highest scores, not values itself\n for (let i = 0; i < scoresT.shape[0]; i++) { // total strides (x * y matrix)\n for (let j = 0; j < (scoresT.shape?.[1] || 0); j++) { // one score for each class\n const score = scores[i][j]; // get score for current position\n if (score > (config.object.minConfidence || 0) && j !== 61) {\n const cx = (0.5 + Math.trunc(i % baseSize)) / baseSize; // center.x normalized to range 0..1\n const cy = (0.5 + Math.trunc(i / baseSize)) / baseSize; // center.y normalized to range 0..1\n const boxOffset = boxIdx[i].map((a: number) => a * (baseSize / strideSize / (size))); // just grab indexes of features with highest scores\n const [x, y] = [\n cx - (scaleBox / strideSize * boxOffset[0]),\n cy - (scaleBox / strideSize * boxOffset[1]),\n ];\n const [w, h] = [\n cx + (scaleBox / strideSize * boxOffset[2]) - x,\n cy + (scaleBox / strideSize * boxOffset[3]) - y,\n ];\n let boxRaw: Box = [x, y, w, h]; // results normalized to range 0..1\n boxRaw = boxRaw.map((a) => Math.max(0, Math.min(a, 1))) as Box; // fix out-of-bounds coords\n const box = [ // results normalized to input image pixels\n boxRaw[0] * outputShape[0],\n boxRaw[1] * outputShape[1],\n boxRaw[2] * outputShape[0],\n boxRaw[3] * outputShape[1],\n ];\n const result = {\n id: id++,\n // strideSize,\n score: Math.round(100 * score) / 100,\n class: j + 1,\n label: labels[j].label as ObjectType,\n // center: [Math.trunc(outputShape[0] * cx), Math.trunc(outputShape[1] * cy)],\n // centerRaw: [cx, cy],\n box: box.map((a) => Math.trunc(a)) as Box,\n boxRaw,\n };\n results.push(result);\n }\n }\n }\n tf.dispose([scoresT, featuresT, boxesMaxT, boxIdxT]);\n }\n\n // normally nms is run on raw results, but since boxes need to be calculated this way we skip calulcation of\n // unnecessary boxes and run nms only on good candidates (basically it just does IOU analysis as scores are already filtered)\n const nmsBoxes = results.map((a) => [a.boxRaw[1], a.boxRaw[0], a.boxRaw[3], a.boxRaw[2]]); // switches coordinates from x,y to y,x as expected by tf.nms\n const nmsScores = results.map((a) => a.score);\n let nmsIdx: number[] = [];\n if (nmsBoxes && nmsBoxes.length > 0) {\n const nms = await tf.image.nonMaxSuppressionAsync(nmsBoxes, nmsScores, config.object.maxDetected || 0, config.object.iouThreshold, config.object.minConfidence);\n nmsIdx = Array.from(await nms.data());\n tf.dispose(nms);\n }\n\n // filter & sort results\n results = results\n .filter((_val, idx) => nmsIdx.includes(idx))\n .sort((a, b) => (b.score - a.score));\n\n return results;\n}\n\nexport async function predict(image: Tensor4D, config: Config): Promise {\n if (!model?.['executor']) return [];\n const skipTime = (config.object.skipTime || 0) > (now() - lastTime);\n const skipFrame = skipped < (config.object.skipFrames || 0);\n if (config.skipAllowed && skipTime && skipFrame && (last.length > 0)) {\n skipped++;\n return last;\n }\n skipped = 0;\n if (!env.kernels.includes('mod') || !env.kernels.includes('sparsetodense')) return last;\n return new Promise(async (resolve) => {\n const outputSize = [image.shape[2] || 0, image.shape[1] || 0];\n const resizeT = tf.image.resizeBilinear(image, [inputSize, inputSize], false);\n const normT = tf.div(resizeT, constants.tf255);\n const transposeT = tf.transpose(normT, [0, 3, 1, 2]);\n\n let objectT;\n if (config.object.enabled) objectT = model.execute(transposeT);\n lastTime = now();\n\n const obj = await process(objectT as Tensor[], outputSize as [number, number], config);\n last = obj;\n tf.dispose([resizeT, normT, transposeT, ...objectT]);\n resolve(obj);\n });\n}\n", "/**\n * PoseNet body detection model implementation constants\n * See `posenet.ts` for entry point\n */\n\nimport type { Point, BodyResult, BodyAnnotation, BodyLandmark } from '../result';\n\nexport const partNames = [\n 'nose', 'leftEye', 'rightEye', 'leftEar', 'rightEar', 'leftShoulder',\n 'rightShoulder', 'leftElbow', 'rightElbow', 'leftWrist', 'rightWrist',\n 'leftHip', 'rightHip', 'leftKnee', 'rightKnee', 'leftAnkle', 'rightAnkle',\n];\n\nexport const count = partNames.length; // 17 keypoints\n\nexport const partIds = partNames.reduce((result, jointName, i) => {\n result[jointName] = i;\n return result;\n}, {});\n\nconst connectedPartNames = [\n ['leftHip', 'leftShoulder'], ['leftElbow', 'leftShoulder'],\n ['leftElbow', 'leftWrist'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['rightHip', 'rightShoulder'],\n ['rightElbow', 'rightShoulder'], ['rightElbow', 'rightWrist'],\n ['rightHip', 'rightKnee'], ['rightKnee', 'rightAnkle'],\n ['leftShoulder', 'rightShoulder'], ['leftHip', 'rightHip'],\n];\nexport const connectedPartIndices = connectedPartNames.map(([jointNameA, jointNameB]) => ([partIds[jointNameA], partIds[jointNameB]]));\n\nexport const poseChain = [\n ['nose', 'leftEye'], ['leftEye', 'leftEar'], ['nose', 'rightEye'],\n ['rightEye', 'rightEar'], ['nose', 'leftShoulder'],\n ['leftShoulder', 'leftElbow'], ['leftElbow', 'leftWrist'],\n ['leftShoulder', 'leftHip'], ['leftHip', 'leftKnee'],\n ['leftKnee', 'leftAnkle'], ['nose', 'rightShoulder'],\n ['rightShoulder', 'rightElbow'], ['rightElbow', 'rightWrist'],\n ['rightShoulder', 'rightHip'], ['rightHip', 'rightKnee'],\n ['rightKnee', 'rightAnkle'],\n];\n\nexport function eitherPointDoesntMeetConfidence(a: number, b: number, minConfidence: number) {\n return (a < minConfidence || b < minConfidence);\n}\n\nexport function getAdjacentKeyPoints(keypoints, minConfidence: number) {\n return connectedPartIndices.reduce((result, [leftJoint, rightJoint]) => {\n if (eitherPointDoesntMeetConfidence(keypoints[leftJoint].score, keypoints[rightJoint].score, minConfidence)) {\n return result;\n }\n result.push([keypoints[leftJoint], keypoints[rightJoint]]);\n return result;\n }, []);\n}\n\nexport function getBoundingBox(keypoints): [number, number, number, number] {\n const coord = keypoints.reduce(({ maxX, maxY, minX, minY }, { position: { x, y } }) => ({\n maxX: Math.max(maxX, x),\n maxY: Math.max(maxY, y),\n minX: Math.min(minX, x),\n minY: Math.min(minY, y),\n }), {\n maxX: Number.NEGATIVE_INFINITY,\n maxY: Number.NEGATIVE_INFINITY,\n minX: Number.POSITIVE_INFINITY,\n minY: Number.POSITIVE_INFINITY,\n });\n return [coord.minX, coord.minY, coord.maxX - coord.minX, coord.maxY - coord.minY];\n}\n\nexport function scalePoses(poses, [height, width], [inputResolutionHeight, inputResolutionWidth]): BodyResult[] {\n const scaleY = height / inputResolutionHeight;\n const scaleX = width / inputResolutionWidth;\n const scalePose = (pose, i): BodyResult => ({\n id: i,\n score: pose.score,\n boxRaw: [pose.box[0] / inputResolutionWidth, pose.box[1] / inputResolutionHeight, pose.box[2] / inputResolutionWidth, pose.box[3] / inputResolutionHeight],\n box: [Math.trunc(pose.box[0] * scaleX), Math.trunc(pose.box[1] * scaleY), Math.trunc(pose.box[2] * scaleX), Math.trunc(pose.box[3] * scaleY)],\n keypoints: pose.keypoints.map(({ score, part, position }) => ({\n score: score as number,\n part: part as BodyLandmark,\n position: [Math.trunc(position.x * scaleX), Math.trunc(position.y * scaleY)] as Point,\n positionRaw: [position.x / inputResolutionHeight, position.y / inputResolutionHeight] as Point,\n })),\n annotations: {} as Record,\n });\n const scaledPoses = poses.map((pose, i) => scalePose(pose, i));\n return scaledPoses;\n}\n\n// algorithm based on Coursera Lecture from Algorithms, Part 1: https://www.coursera.org/learn/algorithms-part1/lecture/ZjoSM/heapsort\nexport class MaxHeap {\n priorityQueue: unknown[]; // don't touch\n numberOfElements: number;\n getElementValue: unknown; // function call\n\n constructor(maxSize, getElementValue) {\n this.priorityQueue = new Array(maxSize);\n this.numberOfElements = -1;\n this.getElementValue = getElementValue;\n }\n\n enqueue(x) {\n this.priorityQueue[++this.numberOfElements] = x;\n this.swim(this.numberOfElements);\n }\n\n dequeue() {\n const max = this.priorityQueue[0];\n this.exchange(0, this.numberOfElements--);\n this.sink(0);\n this.priorityQueue[this.numberOfElements + 1] = null;\n return max;\n }\n\n empty() { return this.numberOfElements === -1; }\n\n size() { return this.numberOfElements + 1; }\n\n all() { return this.priorityQueue.slice(0, this.numberOfElements + 1); }\n\n max() { return this.priorityQueue[0]; }\n\n swim(k) {\n while (k > 0 && this.less(Math.floor(k / 2), k)) {\n this.exchange(k, Math.floor(k / 2));\n k = Math.floor(k / 2);\n }\n }\n\n sink(k) {\n while (2 * k <= this.numberOfElements) {\n let j = 2 * k;\n if (j < this.numberOfElements && this.less(j, j + 1)) j++;\n if (!this.less(k, j)) break;\n this.exchange(k, j);\n k = j;\n }\n }\n\n getValueAt(i) {\n // @ts-ignore getter is of unknown type\n return this.getElementValue(this.priorityQueue[i]);\n }\n\n less(i, j) {\n return this.getValueAt(i) < this.getValueAt(j);\n }\n\n exchange(i, j) {\n const t = this.priorityQueue[i];\n this.priorityQueue[i] = this.priorityQueue[j];\n this.priorityQueue[j] = t;\n }\n}\n\nexport function getOffsetPoint(y, x, keypoint: number, offsets) {\n return {\n y: offsets.get(y, x, keypoint),\n x: offsets.get(y, x, keypoint + count),\n };\n}\n\nexport function getImageCoords(part, outputStride: number, offsets) {\n const { heatmapY, heatmapX, id: keypoint } = part;\n const { y, x } = getOffsetPoint(heatmapY, heatmapX, keypoint, offsets);\n return {\n x: part.heatmapX * outputStride + x,\n y: part.heatmapY * outputStride + y,\n };\n}\n\nexport function fillArray(element, size) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = element;\n }\n return result;\n}\n\nexport function clamp(a, min, max) {\n if (a < min) return min;\n if (a > max) return max;\n return a;\n}\n\nexport function squaredDistance(y1, x1, y2, x2) {\n const dy = y2 - y1;\n const dx = x2 - x1;\n return dy * dy + dx * dx;\n}\n\nexport function addVectors(a: { x: number, y: number }, b: { x: number, y: number }) {\n return { x: a.x + b.x, y: a.y + b.y };\n}\n\nexport function clampVector(a, min, max) {\n return { y: clamp(a.y, min, max), x: clamp(a.x, min, max) };\n}\n", "/**\n * PoseNet body detection model implementation\n *\n * Based on: [**PoseNet**](https://medium.com/tensorflow/real-time-human-pose-estimation-in-the-browser-with-tensorflow-js-7dd0bc881cd5)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport type { BodyResult, BodyLandmark, Box } from '../result';\nimport type { Tensor, GraphModel, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\nimport * as utils from './posenetutils';\n\nlet model: GraphModel;\nconst poseNetOutputs = ['MobilenetV1/offset_2/BiasAdd'/* offsets */, 'MobilenetV1/heatmap_2/BiasAdd'/* heatmapScores */, 'MobilenetV1/displacement_fwd_2/BiasAdd'/* displacementFwd */, 'MobilenetV1/displacement_bwd_2/BiasAdd'/* displacementBwd */];\nconst localMaximumRadius = 1;\nconst outputStride = 16;\nconst squaredNmsRadius = 50 ** 2;\n\nfunction traverse(edgeId: number, sourceKeypoint, targetId, scores, offsets, displacements, offsetRefineStep = 2) {\n const getDisplacement = (point) => ({\n y: displacements.get(point.y, point.x, edgeId),\n x: displacements.get(point.y, point.x, (displacements.shape[2] / 2) + edgeId),\n });\n const getStridedIndexNearPoint = (point, height, width) => ({\n y: utils.clamp(Math.round(point.y / outputStride), 0, height - 1),\n x: utils.clamp(Math.round(point.x / outputStride), 0, width - 1),\n });\n\n const [height, width] = scores.shape;\n // Nearest neighbor interpolation for the source->target displacements.\n const sourceKeypointIndices = getStridedIndexNearPoint(sourceKeypoint.position, height, width);\n const displacement = getDisplacement(sourceKeypointIndices);\n const displacedPoint = utils.addVectors(sourceKeypoint.position, displacement);\n let targetKeypoint = displacedPoint;\n for (let i = 0; i < offsetRefineStep; i++) {\n const targetKeypointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const offsetPoint = utils.getOffsetPoint(targetKeypointIndices.y, targetKeypointIndices.x, targetId, offsets);\n targetKeypoint = utils.addVectors(\n { x: targetKeypointIndices.x * outputStride, y: targetKeypointIndices.y * outputStride },\n { x: offsetPoint.x, y: offsetPoint.y },\n );\n }\n const targetKeyPointIndices = getStridedIndexNearPoint(targetKeypoint, height, width);\n const score = scores.get(targetKeyPointIndices.y, targetKeyPointIndices.x, targetId);\n return { position: targetKeypoint, part: utils.partNames[targetId], score };\n}\n\nexport function decodePose(root, scores, offsets, displacementsFwd, displacementsBwd) {\n const tuples = utils.poseChain.map(([parentJoinName, childJoinName]) => ([utils.partIds[parentJoinName], utils.partIds[childJoinName]]));\n const edgesFwd = tuples.map(([, childJointId]) => childJointId);\n const edgesBwd = tuples.map(([parentJointId]) => parentJointId);\n const numParts = scores.shape[2]; // [21,21,17]\n const numEdges = edgesFwd.length;\n const keypoints = new Array(numParts);\n // Start a new detection instance at the position of the root.\n const rootPoint = utils.getImageCoords(root.part, outputStride, offsets);\n keypoints[root.part.id] = {\n score: root.score,\n part: utils.partNames[root.part.id] as BodyLandmark,\n position: rootPoint,\n };\n // Decode the part positions upwards in the tree, following the backward displacements.\n for (let edge = numEdges - 1; edge >= 0; --edge) {\n const sourceId = edgesFwd[edge];\n const targetId = edgesBwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsBwd);\n }\n }\n // Decode the part positions downwards in the tree, following the forward displacements.\n for (let edge = 0; edge < numEdges; ++edge) {\n const sourceId = edgesBwd[edge];\n const targetId = edgesFwd[edge];\n if (keypoints[sourceId] && !keypoints[targetId]) {\n keypoints[targetId] = traverse(edge, keypoints[sourceId], targetId, scores, offsets, displacementsFwd);\n }\n }\n return keypoints;\n}\n\nfunction scoreIsMaximumInLocalWindow(keypointId, score: number, heatmapY: number, heatmapX: number, scores) {\n const [height, width]: [number, number] = scores.shape;\n let localMaximum = true;\n const yStart = Math.max(heatmapY - localMaximumRadius, 0);\n const yEnd = Math.min(heatmapY + localMaximumRadius + 1, height);\n for (let yCurrent = yStart; yCurrent < yEnd; ++yCurrent) {\n const xStart = Math.max(heatmapX - localMaximumRadius, 0);\n const xEnd = Math.min(heatmapX + localMaximumRadius + 1, width);\n for (let xCurrent = xStart; xCurrent < xEnd; ++xCurrent) {\n if (scores.get(yCurrent, xCurrent, keypointId) > score) {\n localMaximum = false;\n break;\n }\n }\n if (!localMaximum) break;\n }\n return localMaximum;\n}\n\nexport function buildPartWithScoreQueue(minConfidence, scores) {\n const [height, width, numKeypoints] = scores.shape;\n const queue = new utils.MaxHeap(height * width * numKeypoints, ({ score }) => score);\n for (let heatmapY = 0; heatmapY < height; ++heatmapY) {\n for (let heatmapX = 0; heatmapX < width; ++heatmapX) {\n for (let keypointId = 0; keypointId < numKeypoints; ++keypointId) {\n const score = scores.get(heatmapY, heatmapX, keypointId);\n // Only consider parts with score greater or equal to threshold as root candidates.\n if (score < minConfidence) continue;\n // Only consider keypoints whose score is maximum in a local window.\n if (scoreIsMaximumInLocalWindow(keypointId, score, heatmapY, heatmapX, scores)) queue.enqueue({ score, part: { heatmapY, heatmapX, id: keypointId } });\n }\n }\n }\n return queue;\n}\n\nfunction withinRadius(poses, { x, y }, keypointId) {\n return poses.some(({ keypoints }) => {\n const correspondingKeypoint = keypoints[keypointId]?.position;\n if (!correspondingKeypoint) return false;\n return utils.squaredDistance(y, x, correspondingKeypoint.y, correspondingKeypoint.x) <= squaredNmsRadius;\n });\n}\n\nfunction getInstanceScore(existingPoses, keypoints) {\n const notOverlappedKeypointScores = keypoints.reduce((result, { position, score }, keypointId) => {\n if (!withinRadius(existingPoses, position, keypointId)) result += score;\n return result;\n }, 0.0);\n return notOverlappedKeypointScores / keypoints.length;\n}\n\nexport function decode(offsets, scores, displacementsFwd, displacementsBwd, maxDetected, minConfidence) {\n const poses: { keypoints, box: Box, score: number }[] = [];\n const queue = buildPartWithScoreQueue(minConfidence, scores);\n // Generate at most maxDetected object instances per image in decreasing root part score order.\n while (poses.length < maxDetected && !queue.empty()) {\n // The top element in the queue is the next root candidate.\n const root = queue.dequeue();\n // Part-based non-maximum suppression: We reject a root candidate if it is within a disk of `nmsRadius` pixels from the corresponding part of a previously detected instance.\n // @ts-ignore this one is tree walk\n const rootImageCoords = utils.getImageCoords(root.part, outputStride, offsets);\n // @ts-ignore this one is tree walk\n if (withinRadius(poses, rootImageCoords, root.part.id)) continue;\n // Else start a new detection instance at the position of the root.\n let keypoints = decodePose(root, scores, offsets, displacementsFwd, displacementsBwd);\n keypoints = keypoints.filter((a) => a.score > minConfidence);\n const score = getInstanceScore(poses, keypoints);\n const box = utils.getBoundingBox(keypoints);\n if (score > minConfidence) poses.push({ keypoints, box, score: Math.round(100 * score) / 100 });\n }\n return poses;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n /** posenet is mostly obsolete\n * caching is not implemented\n */\n if (!model?.['executor']) return [];\n const res = tf.tidy(() => {\n if (!model.inputs[0].shape) return [];\n const resized = tf.image.resizeBilinear(input, [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n const normalized = tf.sub(tf.div(tf.cast(resized, 'float32'), 127.5), 1.0);\n const results: Tensor[] = model.execute(normalized, poseNetOutputs) as Tensor[];\n const results3d = results.map((y) => tf.squeeze(y, [0]));\n results3d[1] = tf.sigmoid(results3d[1]); // apply sigmoid on scores\n return results3d;\n });\n\n const buffers = await Promise.all(res.map((tensor: Tensor) => tensor.buffer()));\n for (const t of res) tf.dispose(t);\n\n const decoded = decode(buffers[0], buffers[1], buffers[2], buffers[3], config.body.maxDetected, config.body.minConfidence);\n if (!model.inputs[0].shape) return [];\n const scaled = utils.scalePoses(decoded, [input.shape[1], input.shape[2]], [model.inputs[0].shape[2], model.inputs[0].shape[1]]);\n return scaled;\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.body.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**Robust Video Matting**](https://github.com/PeterL1n/RobustVideoMatting)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\n// internal state varaibles\nconst outputNodes = ['fgr', 'pha', 'r1o', 'r2o', 'r3o', 'r4o'];\nconst t: Record = {}; // contains input tensor and recurrent states\nlet ratio = 0;\n\nfunction init(config: Config) {\n tf.dispose([t.r1i, t.r2i, t.r3i, t.r4i, t.downsample_ratio]);\n t.r1i = tf.tensor(0.0);\n t.r2i = tf.tensor(0.0);\n t.r3i = tf.tensor(0.0);\n t.r4i = tf.tensor(0.0);\n ratio = config.segmentation.ratio || 0.5;\n t.downsample_ratio = tf.tensor(ratio); // initialize downsample ratio\n}\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n init(config);\n return model;\n}\n\nconst normalize = (r: Tensor): Tensor => tf.tidy(() => {\n const squeeze = tf.squeeze(r, ([0]));\n const mul = tf.mul(squeeze, constants.tf255);\n const cast = tf.cast(mul, 'int32');\n return cast;\n});\n\nfunction getRGBA(fgr: Tensor | null, pha: Tensor | null): Tensor { // gets rgba // either fgr or pha must be present\n const rgb = fgr\n ? normalize(fgr) // normalize and use value\n : tf.fill([pha!.shape[1] || 0, pha!.shape[2] || 0, 3], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const a = pha\n ? normalize(pha) // normalize and use value\n : tf.fill([fgr!.shape[1] || 0, fgr!.shape[2] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n const rgba = tf.concat([rgb, a], -1);\n tf.dispose([rgb, a]);\n return rgba;\n}\n\nfunction getState(state: Tensor): Tensor { // gets internal recurrent states\n return tf.tidy(() => {\n const r: Record = {};\n r.unstack = tf.unstack(state, -1);\n r.concat = tf.concat(r.unstack, 1);\n r.split = tf.split(r.concat, 4, 1);\n r.stack = tf.concat(r.split, 2);\n r.squeeze = tf.squeeze(r.stack, [0]);\n r.expand = tf.expandDims(r.squeeze, -1);\n r.add = tf.add(r.expand, 1);\n r.mul = tf.mul(r.add, 127.5);\n r.cast = tf.cast(r.mul, 'int32');\n r.tile = tf.tile(r.cast, [1, 1, 3]);\n r.alpha = tf.fill([(r.tile as Tensor).shape[0] || 0, (r.tile as Tensor).shape[1] || 0, 1], 255, 'int32'); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\n return tf.concat([r.tile, r.alpha], -1);\n });\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor']) return null;\n // const expand = tf.expandDims(input, 0);\n t.src = tf.div(input, 255);\n if (ratio !== config.segmentation.ratio) init(config); // reinitialize recurrent states if requested downsample ratio changed\n const [fgr, pha, r1o, r2o, r3o, r4o] = await model.executeAsync(t, outputNodes) as Tensor[]; // execute model\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n rgba = getRGBA(fgr, pha);\n break;\n case 'alpha':\n rgba = getRGBA(null, pha);\n break;\n case 'foreground':\n rgba = getRGBA(fgr, null);\n break;\n case 'state':\n rgba = getState(r1o); // can view any internal recurrent state r10, r20, r3o, r4o\n break;\n default:\n rgba = tf.tensor(0);\n }\n tf.dispose([t.src, fgr, pha, t.r1i, t.r2i, t.r3i, t.r4i]);\n [t.r1i, t.r2i, t.r3i, t.r4i] = [r1o, r2o, r3o, r4o]; // update recurrent states\n return rgba;\n}\n", "/**\n * Image segmentation for body detection model\n *\n * Based on:\n * - [**MediaPipe Selfie**](https://drive.google.com/file/d/1dCfozqknMa068vVsO2j_1FgZkW_e3VWv/preview)\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log } from '../util/util';\nimport { loadModel } from '../tfjs/load';\nimport { constants } from '../tfjs/constants';\nimport type { GraphModel, Tensor, Tensor4D } from '../tfjs/types';\nimport type { Config } from '../config';\nimport { env } from '../util/env';\n\nlet model: GraphModel;\n\nexport async function load(config: Config): Promise {\n if (!model || env.initial) model = await loadModel(config.segmentation.modelPath);\n else if (config.debug) log('cached model:', model['modelUrl']);\n return model;\n}\n\nexport async function predict(input: Tensor4D, config: Config): Promise {\n if (!model) model = await load(config);\n if (!model?.['executor'] || !model?.inputs?.[0].shape) return null; // something is wrong with the model\n const t: Record = {};\n t.resize = tf.image.resizeBilinear(input, [model.inputs[0].shape ? model.inputs[0].shape[1] : 0, model.inputs[0].shape ? model.inputs[0].shape[2] : 0], false);\n t.norm = tf.div(t.resize, constants.tf255);\n t.res = model.execute(t.norm) as Tensor;\n t.squeeze = tf.squeeze(t.res, [0]); // meet.shape:[1,256,256,1], selfie.shape:[1,144,256,2]\n t.alpha = tf.image.resizeBilinear(t.squeeze as Tensor4D, [input.shape[1] || 0, input.shape[2] || 0]); // model selfie has a single channel that we can use directly\n t.mul = tf.mul(t.alpha, constants.tf255);\n let rgba: Tensor;\n switch (config.segmentation.mode || 'default') {\n case 'default':\n t.input = tf.squeeze(input);\n t.concat = tf.concat([t.input, t.mul], -1);\n rgba = tf.cast(t.concat, 'int32'); // combined original with alpha\n break;\n case 'alpha':\n rgba = tf.cast(t.mul, 'int32'); // just get alpha value from model\n break;\n default:\n rgba = tf.tensor(0);\n }\n Object.keys(t).forEach((tensor) => tf.dispose(t[tensor]));\n return rgba;\n}\n", "/**\n * Analyze detection Results and sort&combine them into per-person view\n */\n\nimport type { FaceResult, BodyResult, HandResult, GestureResult, PersonResult, Box } from '../result';\n\nexport function join(faces: FaceResult[], bodies: BodyResult[], hands: HandResult[], gestures: GestureResult[], shape: number[] | undefined): PersonResult[] {\n let id = 0;\n const persons: PersonResult[] = [];\n for (const face of faces) { // person is defined primarily by face and then we append other objects as found\n const person: PersonResult = { id: id++, face, body: null, hands: { left: null, right: null }, gestures: [], box: [0, 0, 0, 0] };\n for (const body of bodies) {\n if (face.box[0] > body.box[0] // x within body\n && face.box[0] < body.box[0] + body.box[2]\n && face.box[1] + face.box[3] > body.box[1] // y within body\n && face.box[1] + face.box[3] < body.box[1] + body.box[3]) {\n person.body = body;\n }\n }\n if (person.body) { // only try to join hands if body is found\n for (const hand of hands) {\n if (hand.box[0] + hand.box[2] > person.body.box[0] // x within body for left hand\n && hand.box[0] + hand.box[2] < person.body.box[0] + person.body.box[2]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for left hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.left = hand;\n }\n if (hand.box[0] < person.body.box[0] + person.body.box[2] // x within body for right hand\n && hand.box[0] > person.body.box[0]\n && hand.box[1] + hand.box[3] > person.body.box[1] // x within body for right hand\n && hand.box[1] + hand.box[3] < person.body.box[1] + person.body.box[3]) {\n if (person.hands) person.hands.right = hand;\n }\n }\n }\n for (const gesture of gestures) { // append all gestures according to ids\n if (gesture['face'] !== undefined && gesture['face'] === face.id) person.gestures.push(gesture);\n else if (gesture['iris'] !== undefined && gesture['iris'] === face.id) person.gestures.push(gesture);\n else if (gesture['body'] !== undefined && gesture['body'] === person.body?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.left?.id) person.gestures.push(gesture);\n else if (gesture['hand'] !== undefined && gesture['hand'] === person.hands.right?.id) person.gestures.push(gesture);\n }\n\n // create new overarching box from all boxes belonging to person\n const x: number[] = [];\n const y: number[] = [];\n const extractXY = (box: Box | undefined) => { // extract all [x, y] coordinates from boxes [x, y, width, height]\n if (box && box.length === 4) {\n x.push(box[0], box[0] + box[2]);\n y.push(box[1], box[1] + box[3]);\n }\n };\n extractXY(person.face.box);\n extractXY(person.body?.box);\n extractXY(person.hands.left?.box);\n extractXY(person.hands.right?.box);\n const minX = Math.min(...x);\n const minY = Math.min(...y);\n person.box = [minX, minY, Math.max(...x) - minX, Math.max(...y) - minY]; // create new overarching box\n\n // shape is known so we calculate boxRaw as well\n if (shape?.[1] && shape?.[2]) person.boxRaw = [person.box[0] / shape[2], person.box[1] / shape[1], person.box[2] / shape[2], person.box[3] / shape[1]];\n\n persons.push(person);\n }\n return persons;\n}\n", "/**\n * Embedded sample images used during warmup in dataURL format\n */\n\n// data:image/jpeg;base64,\nexport const face = `\n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`;\n\n// data:image/jpeg;base64,\nexport const body = `\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N\nmtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm\n9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N\nIpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W\nMYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2\n+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql\no+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37\nO99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE\nTE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1\nL7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4\nizsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt\n1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb\nV5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum\nL37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12\nCvLhho3rN9RWs9Z23n5y6O21YhrVYbdGOCfrrLPJRpv863zVS6FS09SvZj3lVZZRdPSqmnSWdrIE\nebOkK4ldTsgW1WKqd1oMZhEVZyRAImOjGI6rJ7IiATNd46qL02bHkiaxaoNGY2n4ImPgtyV2n0Vo\nGvlx7x2beiyTk08RPevSVUxux00+Fn2n7N+n5rRFb4AAAAAAAAAAAAAAACLVres1tETWekxKQHlu\nL8InR2nPp43wz3j8P/s5dLveWrFqzW0bxPeJeV4xwmdFec+CJnDM9Y/CrY1xv8qvTZ+WYdbDk5oh\n5zHk283U0eo3jaZZ2N5XYjrCnLSJhOK+8d1kxvCqzSwZvousrb7k9LfJ3nB1OLeJdLhufx9LEWn3\n6e7LXN9Ofy5/W4AuxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAETaKxMzO0Qi9646Ta07RDmZ9VbPbaOlI7Qi3i+c3TPUaqcu9adKfy0722ZXvFa9\nXO1OrjrESxt66ZJmcjPUanlidmhkzTZVfLN5VWvsC2b7R3U3yqrZZtO1esz2h2+F+zWTUcuXXTNM\nfeKR3n5+iZLVbqRzNJo9TxHLyaekz62ntD1fDOA6fQbZL7Zc/wCKY6R8odLBgxabFGPDSKUjyiFj\nSZkYa3aALKAAAAAAAAAAAAAADQ4pl2pTFH3p3n5Q33E12Tn1eSfKscsLZ+orS00eJqbW+Lfnu1tF\nXaJnZsz3WpCfsyp00fWSvmPdVYOmSUDd8kR3InoQosy7JmUX7MdwZ17ro7KKT1XRPRAsrO0rYndr\n79V1ZBaQiJ6JgCSIJASwrO07MpV2nqBlrv1a1o2bf2qtfLXaQUTO0sb05o3jv3ZXhjS20xEphW5h\nyeJjjf7UdJWNKLziyRePsz0lux1SgAQAAAAAAAAAAAAAADG9K5KTS8Rato2mJZAPIcU4ZbQZuekT\nOC3afT4NXFkmlntc2GmoxWx5K71tG0vHa/RX0GpmlutJ61t6wrY2xr8dXS5uesN+tt4ef0eaa223\n2dnHk3juyreM81OaFGiy/RtZET9jJ7s/2bdutd2jqKeic3iNTsd8a2h1H0jTVtP2o6W+bZbOO+gA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABje9cdJt\nadohGTLXFTmvO0fy52bJfU23t0pHaqLeL5xdK9Rnvqb+cUjtCi94xxvK3JetKuHrdZvaa1ljb10y\ncnIs1Wt3naJc++TmVWvMz1YWybfMGdsm3eWek0mo4jm8PT0mfW3lDf4V7P5tdMZdRviwfvZ6/TaX\nDpMMYsFIpWPTzXmf+steT8jn8L4Dp+HxF77Zc/4pjpHydYGjC3oAAAAAAAAAAAAAAAAADG9opS1p\n7RG7zszN6WtPe0zLua+3Joss/wBOzhzG2OsL5+IrY09dsSyYRijbHEMvOChb7KjF0yS2LQ169Mso\nS24noyrPVXWejNVKbTuw3T3REdQWU6LYlVvsyiUDPfqupPRr79VuOQX1lZEqoZxIMksd0gT2VT0l\nbPZVbuCaW8i8bwr32WxbcGnkjaZa9p2ndv5qbw5+aNugLItF6TEtvTX5sMb969HMpfazc0d9stqe\nvVZDdAQAAAAAAAAAAAAAAAADV1+iprtPOO/2u9bektoB4TJTJpNRbHkja1Z6uto8viVht+0HDvpG\nH6Tjj6zHHvbecONw7Ltfkmeqmo6Ma69DXbbZTkr1mGWO3RneOaGbZRoM30fVzSelMnT83aef1FZ7\nx3h1tBqfpGnjmn369LNc3sc3kzy9bQCzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAa+q1dNNXr7157VhGp1Xh70x+9f9ocy283m1p5rz3mVbrjXHjt91lz\n5c9+fJ1nyjyhdM8lZlOOIiqrUXikd+kMreunnI5XEdX4dZiZcG+XmtNl/F83PeeWWHDOGanieSKY\nq+5H2rz2hMzWd1Iqx1yajJXHhrNrW6REeb1nCPZumn2z62Ivl7xTyr/6uhwzhGn4Zj2xxzZJ+1kn\nvLoNJnjHW7TbbsAszAAAAAAAAAAAAAAAAAAAAaPFrbaSK/itEOXt0rDf4xb/ACa/GZacRvaF58Q2\nIjasQnzPIhCU92tMbZGzHmotG10C6nZkwpPRmipIllEbMIZIE7solgmJBnCyk9VMM6z1BtVllEqK\nz0WRILYlluriWcSDJVbusV27gwInaSWM9ECyZ3hqamnSWxFmOSOaqRx725bNnSZNs9J+OynVY+WZ\nYYr7TE+nVaIr0Ais81Yn1hKAAAAAAAAAAAAAAAAAABExvG09peU4nov9n66L0j6q/WPg9Y1OJaON\nZpL0+9HWs/EWzeVz9PbmrEtnyc3h9reHy26TWdnSr2YX6657ijLXpLX0+onSamL/AHJ6W+Tbv2aW\nekTv16JzeI1Ox6KJiYiY7Slz+E6jxdN4dp3vj6fl5Og2clnKACAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeQRMxEbzO0Q08uqtkma4ulfO3r8lefUePMxWf\ncjy9WvlzVxV6T1Z61/x0Y8f7Wc7Ur1lqVy+LqOWJ2hp6rXddon5rOF1tfmz5OkT0qzb8dWbxjp1c\nbiuuilJ5Z6r+IcQrixzEy8zl1E6rNt1tMztFY81sztU1eRucN4ffi2p5esRM72n0h7rS6XFo8FcO\nCkVpX082nwXh3+z9FWLxHi36328vg6TZyW9ABAAAAAAAAAAAAAAAAAAAAAADj8Unm1tK/hqppHvw\ny1k8/EMk+m0GOPeafiFpCZYwolnXspvHvLa9mF46gmnZmwozRUiUCBKYYsoBLOFbKAX0llEqqyzi\nQXRLOJVRLOOwLIljZMEgrlhKyYYTAK5nZPN0RZjugUanHzVlz6xtLq361c+9eXItPpXX0dubTU+E\nbL2lw2++O1fSW6m/VYAISAAAAAAAAAAAAAAAAAp1GbwcfTreelYEydcuMcRrM/L9nnlsV6wqpi2r\ntv133mfWVkRyRtEdGFva7MzkYZNoamWN4bV4mYa9qztKIujhVppxGI8r1mJegeZpknBqKZY+7L0t\nLRekWrO8TG8Ns/HJ5ZypAWZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAADS12fp4VJ6z9qVuq1HgUiI+3bpDl589cOKZmevqprXPTbx477rDJlrhr1nq4+s182tMRP\nRqaziXiZJrWekNG17ZbxWJ336M5LXRbI3dLTJrs07RMY6fan1dHLrowY+X7MVjt6N3R6Kul0EbWm\ns7bz8Z+LnabQX43r7Y53php/mXj+Dnv0f1JO1x/8ZxbUzj02O15mfLtD13AvZqnDds+pmMmo26el\nXX0Wh0/D8EYtNjilY7+s/NstpOOTW7QBKgAAAAAAAAAAAAAAAAAAAAAADG88tLW9I3BwJtz6nNf1\nvK/DHVqYJ3pzT5y3MPZeojOWMQylEKpTVjZnDCwkqzYQyRRICATCITAJZQxhMAshnEq4ZQC2srKq\nqrIBZCWNZZgwswmFloVyCu0dFcx1WyrtCBhv5NTPHXds2U5o3hIz4ffbPt+KHUcTSW5c9Jme0u2v\nVYAKpAAAAAAAAAAAAAAAAYZctcVOa35R6tLrltN795/YvknNqrfhpPLH92V5isd9mWq6fHjk6rn0\nZxG8KK5Jm/wbVZiYZtqrmkqL023bkxvCiY3lJHNyRG81mHS4Rn5sNsNp64+3yaWaNrzOzHBl+i6q\nmT7s9J+S+ay8mex6EIneN47SNXKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAImYiJme0JafEs3h6fkidrZOn5eaLeJk7eOdm1Hi2vmtPTry/CHmOJcUvmvOPF1n09Pm\n6HF9ZGm01qxO3R5vSY7XwzmzTy47zzTEd7en5Mfvt2/PURWdo3tvPrPlKymbktFqTtMTvHzbOLDG\nf63JXbFX7FdnoODcDprZpq9TjiMMTvSn4vj8l5fxnrk91saPSa7i2hpOfbTVt5x1m0fLydzR6PDo\ndPGHBXasd585n1lsRERG0dIF5OOe6tAEqgAAAAAAAAAAAAAAAAAAAAAAADX11+TRZrf0y2Gjxe22\ngtH4piP3TPpXKwxtjhuYo9xq442iIblI2pC1RET2ILd9kxCqRjZmwlCSEohIJAQAAJZISDKGUd2M\nMoBnVbVVCyAWVWeSuqyOwIlXZZKue4MJV2WWYT2QKbKL9YlfdRdIo35b7/Hd3KTzUrPrDh27uxpb\nc2mpPwX/ABX9XAKpAAAAAAAAAAAAAACekTIp1eTwtJmv+GkyJn1oafeazbfpMzLR4jq/o8b823zX\n6XNF8ERCvTcNpxLV5LauvPhx9Irv3lhztdtv8TtaWLicXrt03jzjzb2k1nid56ty3s/w+a7Uwzjn\n1raejlarhmbhl/FpbxMO/fzj5p/ixSeXOvTtRfeI280ZI26tfDm3pWe63LaZx7qtGvniJ6tPLvOK\nfOa9WzbJvTbza02jl3n5SSljscK1MajSxWZ96nSW88xw/VfQ9XMT9nfa3yemid43jtLeXsce88qQ\nEqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADia3UTm1l4j7OP3Y/u\n7Vp2rM+kPJW1PhYcmS0+9MzKm/jbwz31weMzbV8UppazPL9q0/BF4rk1GLDSNqxPWPhCnHmnNrtT\nqPKteWPm6U6OdHaZvO+SaRNvhv12Ub/q3FhtrNVj0uKOt56z6R5y9zix1w4qY6RtWsREOJ7L6OKa\nS2rvX6zNM7T6Vh3mmZyOfya7eACzIAAAAAAAAAAAAAAAAAAAAAAAAAAczjVvqMVfW/8AZ03I41bf\nLp6/OVs/UVrY47NyOzUxd4bUJpEbb3Z7IiOrKIVSjZhMLJYyhKIgmGUQSDESIEbJEgQmCITEAmGU\nIiGUAyhZVhDOoM4Wx2VQtqBKuyyWEgqlhKyyuyBVaGtkbNmvk7A15l1eH2300R6TMORPSXT4ZO+O\n8fFefEX63gEAAAAAAAAAAAAAAAq1WPxdLlp+Kkx+y1Fvsz8gjhaDauGK8sx07y3OE3m1tT6RaP4c\nvU6yMNKUx73zT0ilY3l2eF6a+m0kRl/zbzz3+Ez5M8z26fJruW6wzYq5sV8d43raNpZjRzPPaTmx\n5b6bJ9rHO3zb2WJ8GWPEscY9bgzxH2t62n19GWW0eHOzHU5XbjXZ1x8WTnz2iZ7S2M1IjH2+LX0V\nKTqs8zO9ot0j8nUthi1J3UaOFMTfLFo6xMbS9BwHWTqdHOO8+/hnln5eTjYMFo1WTH5VnePzXcIm\n2k4zlpPSmXy/hfF5eMfJns69OA2cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAADG/2LfJ874rW845mubliY7bPoto5qzHrDz0+yePNF41OotaJ7RWNtpV1OtfHqZ715fhu\nj8adNpcVfeyzE2/vLuanhOu1nEctIxTTFa/+ZPbZ3eHcF0vDbTfFE2yzG03t32+DokynXl9+leDB\nTTYKYccbUpWIhYCzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAcXjE/4zDH9M/wAu04XF5/3jj/0f3Wz9\nRUYmzDWxS2I7FSyjuzY1ZKpRKEygEwiWUIkGIk2QJNhKQhMIhkCYZQxhlAMoZwwZwgWQshVCyATL\nCWc9ldpBhZXLOVdpQK7NfJPRdaWvknoDVvPvOnwuel4+TlXn3nS4VPvXj4QtEV0wAAAAAAAAAAAA\nAAAAAVV02CmTxK4qRf8AFFeq0AAAanEsfPpZmO9Ji0NDLfkwdOsulrumiyzHlVzJrz4Ovoy26vB8\ncTBa9NffLtMY77Rv8Yegx5ImkKdJoY1HC81Y+3OSbVn0mGGkmbY45u6tnrrTOu2xGO0RxCd+nNVj\nqKxTV1vH2pjaGtnyzXXYdo96ZmGXEMk15b7/AGZiVerWPTYckZcNbx5wzc7hGbnxXxzPWk7x8pdF\n0S9jh1OXgAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAcPjEf4/FP9H93ccXjMf4vDP9Mx+62fqKrx+S+GvibEFSsqyYwlVK\nZYsmIMoRKYJQIPIEiQ2ATCUQygCGUIhMAyhnDCGUIFkLIV1ZxIMpVWWSrsCuyqyyyq09ECq8tfJK\n66jJ2Bp5J6upwn7dv9Lk5J951uE/av8AJaIrqAAAAAAAAAAAAAAAAAAAAAAq1Mc2myxPnWf4cmtu\nXT9fR0tffk0WSe28bfq5Wbamm3326MtunwfK6PCv/AxPraZ/dz9PO97/AOqf5dHhdZrw7Dv3mOb9\nXOxRFM+avpe38mvkPHf/AFWlrKba7Tzt99ZxKkfR7euyNXMTrtPHfa0z+zPiM/UR8Zj+Wbdu8HpN\nM2bfzrV13M4dO2pyR61dNvj44/J/oAWZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj8bj63BPzdhyeNx0wz8ZWz9RWri7Nmv\nVrYu0NmqaRZHZlDGGSiwxZSgCEkCBCQSCQBMJRCYgEsoYx3Z17AlMIhlCBnDOGEM4AlhZZKq4KrK\n7LLKrIFN2vdfZReAaObu6/CO9vk5OePR1uEd7fJeIrqAIAAAAAAAAAAAAAAAAAAAAGtxCk5NFliI\n3mI32+XVyNTyZOHTee946PQKPoeDffw4777eW/yVs60xv+ZxOnr4Okx1t05KRv8Ao41Z5q3yed5m\nXY1szXRZ5jvFJ/hxItP0aOSN9q7yrtr4f2tHFM5+KT16Yq/vK/iGSbXw4vO14UcPx5MGfNbPG18m\n1oj4THRsTw7VanPXVYpi3gzMcnrvCnG11JOupwuN8+a3pEQ6jT4divjxWnJExa09pbjbM5HHu90A\nJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAHM41H1GOf6nTc/jEf4Ws+lls/UX45uGekNujTwdm5RNIthKIZKLDFlsiQIShIC\nEgCUJ7AmGTGO7IDzZQhMSDJMMYZQgZwzhhDOATuqssmVdgVWVWWyqtCBTeVF19lF+wNLNG7q8I+9\n8nLyupwnt+S8RXUAQAAAAAAAAAAAAAAAAAAAAAAItWL1mto3iY2lyrcLyUxzix2ia2nvPeK+jrCL\nOrTVnxpanhuPPemSs8l6RtE7dJj0ldpNP9GwRSZ3neZmV4cR/Vs4AJQAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHi1d9H\nM+kt5ra+vPoskfDdOfqK4mn7Q3aNHBPZu0W0RdDOGFWcKLCJZeTGQQlCQSgASBsCYZQxhlAJTAmA\nTsmAgGcM4YQyjsgRLC3VnaVcgwsrt3Z2V2QK7tbJ1bN5a9waeWO7p8Knt8nNyebpcK8vkvlFdQBA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9RXmwZI+ErEWjesx6wQeZwejeo0cccuW8\nelpblJaaRGxVnCuss4ZrMvJEgCAASISCQIBlCYYpieoM0wx8k7gzIRueYM4Z79FcSy3QEsLJmWFp\nBjaVVpZWlXMoGNmvkXXlr3kGtknu6XCf7OXkl1OEdl8orqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAHmskcmtzV/rls0U62OXiWX4zErcc9GmkRfWVkSqqziWayxCPIANwBIhIJSxS\nCRG6dwZwlhEs4BluMdzfqgZxLLdXuy3AmVdpZTKuZBjaVVpWWV2QlhZRdfZRcGpl7urwfrzfJy8r\nrcH61vPyWitdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHA4nHLxKZ9awnH2ZcY\njbW459aq8fZpfiI2IZwrqzhmsz3Ebm4JN0AMhCQSIASndiAziWUSriWcAyRujc80DM3RCfIETLCW\nUsZEsJYSslXZAwlTddPZTkBp5e7r8Gj6rJPxhx8k9Xa4PG2C8/FaK10QAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAcfjcbZMFvnDWx9m5x2PqcNvS+zSxT7sNPxH62YZQwqzhRZO6UCB\nKUAJTux3SDIRuAncQAmJZRLBMSgZ7iIAZRKd2DICUSlAljLCYWMLIFVukNfI2bNbIDTyT7zu8Ijb\nSz/qcG/2nf4T/wCE/wD2WnxWt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHL9oL\n+Hw2cm28VvEuPptfgyVj6yIn0no7/FtJfW8NzYMe3PaPd39d3iMug1WktNc2C9dvPbeP1aZ9xF+v\nT471tHu2iflK2HkqWmvaZj5Surqc9Ps5bx+alTHqYHm68S1Vf/NmfnC2vGNTXvyT84Ql6A3cSvHM\nsfaxVn5Ssrxyv3sM/lKB1xza8bwT3pePyWV4tpZ+/MfOEjfGrXiGlt2zV/PotrqcN/s5aT/+wLRj\nFontMSlAlKEgndO6IAZQljDIEgeQljLCzOVdkCu/SGrkbF56NPNeKxMzMRHxENe0+89DwuNtHHzl\n5PJr8NcnLW3Pbf7r1nCZm2gpae8zMrz4i/W6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAETETG0xukB4HVaeMHEtRi26RedvkyjBSfX9W77QYvC4xz7dMlYlrU7M929dWJLFc6aPK0q\n7YLxPS0S22FlP6q38Zac0yR92s/KVc3tHfFf8tpbcsLRvB/dR/8ALLVnU0r9uL1+dZI1mnmdvGpv\n6TOy6ym+Oto2tWJ+cJ/tW+KLK5KW+zes/KU7tG+h01p64qx8Y6NXNo6Y+uPJlp8rLf0rfG7MXtHa\n0x8pZxqs9e2a8f8A7Oj7HaTHn0+f6RWM23LETfr6vRW4PoL99NT8ui7F4+vEdXXtnt+fVbXjGsr/\nAOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM\nd8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5\n6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP\nbFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu\nLJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy\nwt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX\n0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK\n3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn\nKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0\nvobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t\nzya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps\nuOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi\nFdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA\n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\nNO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h\n2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te\npSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7\ncvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7\nmZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA\nAAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA\nhGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J\nqx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI\nXRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy\nRHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX\nqNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX\nkaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P\nya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC\nExKJgBnEpiyvdlEgsizKLKollFgWxLKJVRLKJBbEp3VxLKJBnuMWQJEbpBIAAAJAAAABIAAAAAAA\nlAJAAAAAAAAAAAAAASAAAAAAAAAAAAAJAAAABAJABAlAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA\nAAABAJQAAAAgAABAAI2EoBGyJhkgGPKxmqxAKpownHC+YRMdN5BrTj67R3bOn01o7p01Iv71u89o\n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\n2Q==`;\n", "/**\n * Warmup algorithm that uses embedded images to exercise loaded models for faster future inference\n */\n\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep } from './util/util';\nimport * as sample from './sample';\nimport * as image from './image/image';\nimport * as backend from './tfjs/backend';\nimport { env } from './util/env';\nimport { empty, Result } from './result';\nimport type { Config } from './config';\nimport type { Human } from './human';\nimport type { Tensor, DataType } from './tfjs/types';\n\nasync function warmupBitmap(instance: Human): Promise {\n const b64toBlob = (base64: string, type = 'application/octet-stream') => fetch(`data:${type};base64,${base64}`).then((res) => res.blob());\n let blob: Blob | null;\n let res: Result | undefined;\n switch (instance.config.warmup) {\n case 'face': blob = await b64toBlob(sample.face); break;\n case 'body':\n case 'full': blob = await b64toBlob(sample.body); break;\n default: blob = null;\n }\n if (blob) {\n const bitmap = await createImageBitmap(blob);\n res = await instance.detect(bitmap, instance.config);\n bitmap.close();\n }\n return res;\n}\n\nasync function warmupCanvas(instance: Human): Promise {\n return new Promise((resolve) => {\n let src: string;\n // let size = 0;\n switch (instance.config.warmup) {\n case 'face':\n // size = 256;\n src = 'data:image/jpeg;base64,' + sample.face;\n break;\n case 'full':\n case 'body':\n // size = 1200;\n src = 'data:image/jpeg;base64,' + sample.body;\n break;\n default:\n src = '';\n }\n // src = encodeURI('../assets/human-sample-upper.jpg');\n let img: HTMLImageElement;\n if (typeof Image !== 'undefined') img = new Image();\n // @ts-ignore env.image is an external monkey-patch\n else if (env.Image) img = new env.Image();\n else {\n resolve(undefined);\n return;\n }\n img.onload = async () => {\n const canvas = image.canvas(img.naturalWidth, img.naturalHeight);\n if (!canvas) {\n log('Warmup: Canvas not found');\n resolve(undefined);\n } else {\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (ctx) ctx.drawImage(img, 0, 0);\n // const data = ctx?.getImageData(0, 0, canvas.height, canvas.width);\n const tensor = await instance.image(canvas, true);\n const res = tensor.tensor ? await instance.detect(tensor.tensor, instance.config) : undefined;\n resolve(res);\n }\n };\n if (src) img.src = src;\n else resolve(undefined);\n });\n}\n\nasync function warmupNode(instance: Human): Promise {\n const atob = (str: string) => Buffer.from(str, 'base64');\n let img;\n if (instance.config.warmup === 'face') img = atob(sample.face);\n else img = atob(sample.body);\n let res: Result;\n if (('node' in tf) && (tf.getBackend() === 'tensorflow')) {\n // @ts-ignore\n const data: Tensor = tf['node'].decodeJpeg(img); // eslint-disable-line import/namespace\n const expanded: Tensor = tf.expandDims(data, 0);\n instance.tf.dispose(data);\n // log('Input:', expanded);\n res = await instance.detect(expanded, instance.config);\n instance.tf.dispose(expanded);\n } else {\n if (instance.config.debug) log('Warmup tfjs-node not loaded');\n /*\n const input = await canvasJS.loadImage(img);\n const canvas = canvasJS.createCanvas(input.width, input.height);\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, input.width, input.height);\n res = await instance.detect(input, instance.config);\n */\n }\n // @ts-ignore\n return res;\n}\n\nasync function runInference(instance: Human) {\n let res: Result | undefined;\n if (typeof createImageBitmap === 'function') res = await warmupBitmap(instance);\n else if ((typeof Image !== 'undefined') || (env.Canvas !== undefined)) res = await warmupCanvas(instance);\n else res = await warmupNode(instance);\n return res;\n}\n\n/** Runs pre-compile on all loaded models */\nexport async function runCompile(instance: Human) {\n // @ts-ignore private property\n if (!tf.env().flagRegistry.ENGINE_COMPILE_ONLY) return; // tfjs does not support compile-only inference\n const backendType = tf.getBackend();\n const webGLBackend = tf.backend();\n if ((backendType !== 'webgl' && backendType !== 'humangl') || !webGLBackend?.['checkCompileCompletion']) {\n // log('compile pass: skip');\n return;\n }\n tf.env().set('ENGINE_COMPILE_ONLY', true);\n const numTensorsStart = tf.engine().state.numTensors;\n const compiledModels: string[] = [];\n for (const [modelName, model] of Object.entries(instance.models.models)) {\n if (!model) continue;\n const shape = (model?.modelSignature && model?.inputs?.[0]?.shape) ? [...model.inputs[0].shape] : [1, 64, 64, 3];\n const dtype: DataType = (model?.modelSignature && model?.inputs?.[0]?.dtype) ? model.inputs[0].dtype : 'float32';\n for (let dim = 0; dim < shape.length; dim++) {\n if (shape[dim] === -1) shape[dim] = dim === 0 ? 1 : 64; // override batch number and any dynamic dimensions\n }\n const tensor = tf.zeros(shape, dtype);\n try {\n const res = model.execute(tensor);\n compiledModels.push(modelName);\n if (Array.isArray(res)) res.forEach((t) => tf.dispose(t));\n else tf.dispose(res);\n } catch {\n if (instance.config.debug) log('compile fail model:', modelName);\n }\n tf.dispose(tensor);\n }\n const kernels = await webGLBackend['checkCompileCompletionAsync']();\n webGLBackend['getUniformLocations']();\n if (instance.config.debug) log('compile pass:', { models: compiledModels, kernels: kernels.length });\n tf.env().set('ENGINE_COMPILE_ONLY', false);\n const numTensorsEnd = tf.engine().state.numTensors;\n if ((numTensorsEnd - numTensorsStart) > 0) log('tensor leak:', numTensorsEnd - numTensorsStart);\n}\n\n/** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used in browser environments for `webgl` and `humangl` backends\n * @param userConfig?: Config\n*/\nexport async function warmup(instance: Human, userConfig?: Partial): Promise {\n await backend.check(instance, false);\n const t0 = now();\n instance.state = 'warmup';\n if (userConfig) instance.config = mergeDeep(instance.config, userConfig) as Config;\n if (!instance.config.warmup || instance.config.warmup.length === 0 || instance.config.warmup === 'none') {\n return empty();\n }\n return new Promise(async (resolve) => {\n await instance.models.load();\n await runCompile(instance);\n const res = await runInference(instance);\n const t1 = now();\n if (instance.config.debug) log('warmup', instance.config.warmup, Math.round(t1 - t0), 'ms');\n instance.emit('warmup');\n resolve(res);\n });\n}\n", "/**\n * Human main module\n * @default Human Library\n * @summary \n * @author \n * @copyright \n * @license MIT\n */\n\n// module imports\nimport * as tf from 'dist/tfjs.esm.js';\nimport { log, now, mergeDeep, validate } from './util/util';\nimport { defaults } from './config';\nimport { env, Env } from './util/env';\nimport { WebCam } from './util/webcam';\nimport { setModelLoadOptions } from './tfjs/load';\nimport * as app from '../package.json';\nimport * as backend from './tfjs/backend';\nimport * as draw from './draw/draw';\nimport * as blazepose from './body/blazepose';\nimport * as centernet from './object/centernet';\nimport * as efficientpose from './body/efficientpose';\nimport * as face from './face/face';\nimport * as facemesh from './face/facemesh';\nimport * as gesture from './gesture/gesture';\nimport * as handpose from './hand/handpose';\nimport * as handtrack from './hand/handtrack';\nimport * as image from './image/image';\nimport * as interpolate from './util/interpolate';\nimport * as meet from './segmentation/meet';\nimport * as match from './face/match';\nimport * as models from './models';\nimport * as movenet from './body/movenet';\nimport * as nanodet from './object/nanodet';\nimport * as persons from './util/persons';\nimport * as posenet from './body/posenet';\nimport * as rvm from './segmentation/rvm';\nimport * as selfie from './segmentation/selfie';\nimport * as warmups from './warmup';\n\n// type definitions\nimport { Input, Config, Result, FaceResult, HandResult, BodyResult, ObjectResult, GestureResult, AnyCanvas, empty } from './exports';\nimport type { Tensor, Tensor4D } from './tfjs/types';\n// type exports\nexport * from './exports';\n\n/** **Human** library main class\n *\n * All methods and properties are available only as members of Human class\n *\n * - Configuration object definition: {@link Config}\n * - Results object definition: {@link Result}\n * - Possible inputs: {@link Input}\n *\n * @param userConfig - {@link Config}\n * @returns instance of {@link Human}\n */\nexport class Human {\n /** Current version of Human library in *semver* format */\n version: string;\n\n /** Current configuration\n * - Defaults: [config](https://github.com/vladmandic/human/blob/main/src/config.ts#L262)\n */\n config: Config;\n\n /** Last known result of detect run\n * - Can be accessed anytime after initial detection\n */\n result: Result;\n\n /** Current state of Human library\n * - Can be polled to determine operations that are currently executed\n * - Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'\n */\n state: string;\n\n /** currenty processed image tensor and canvas */\n process: { tensor: Tensor | null, canvas: AnyCanvas | null };\n\n /** Instance of TensorFlow/JS used by Human\n * - Can be embedded or externally provided\n * [TFJS API](https://js.tensorflow.org/api/latest/)\n */\n tf;\n\n /** Object containing environment information used for diagnostics */\n env: Env = env;\n\n /** Draw helper classes that can draw detected objects on canvas using specified draw\n * - canvas: draws input to canvas\n * - options: are global settings for all draw operations, can be overriden for each draw method {@link DrawOptions}\n * - face, body, hand, gesture, object, person: draws detected results as overlays on canvas\n */\n // draw: { canvas: typeof draw.canvas, face: typeof draw.face, body: typeof draw.body, hand: typeof draw.hand, gesture: typeof draw.gesture, object: typeof draw.object, person: typeof draw.person, all: typeof draw.all, options: DrawOptions };\n draw: typeof draw = draw;\n\n /** Face Matching\n * - similarity: compare two face descriptors and return similarity index\n * - distance: compare two face descriptors and return raw calculated differences\n * - find: compare face descriptor to array of face descriptors and return best match\n */\n match: typeof match = match;\n\n /** Currently loaded models\n * @internal\n * {@link models#Models}\n */\n models: models.Models;\n\n /** Container for events dispatched by Human\n * Possible events:\n * - `create`: triggered when Human object is instantiated\n * - `load`: triggered when models are loaded (explicitly or on-demand)\n * - `image`: triggered when input image is processed\n * - `result`: triggered when detection is complete\n * - `warmup`: triggered when warmup is complete\n * - `error`: triggered on some errors\n */\n events: EventTarget | undefined;\n /** Reference face triangualtion array of 468 points, used for triangle references between points */\n faceTriangulation: number[];\n /** Refernce UV map of 468 values, used for 3D mapping of the face mesh */\n faceUVMap: [number, number][];\n /** Performance object that contains values for all recently performed operations */\n performance: Record; // perf members are dynamically defined as needed\n #numTensors: number;\n #analyzeMemoryLeaks: boolean;\n #checkSanity: boolean;\n // definition end\n\n /** Constructor for **Human** library that is futher used for all operations\n * @param userConfig - user configuration object {@link Config}\n */\n constructor(userConfig?: Partial) {\n /*\n defaults.wasmPath = tf.version['tfjs-core'].includes('-') // custom build or official build\n ? 'https://vladmandic.github.io/tfjs/dist/'\n : `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tf.version_core}/dist/`;\n */\n const tfVersion = (tf.version.tfjs || tf.version_core).replace(/-(.*)/, '');\n defaults.wasmPath = `https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${tfVersion}/dist/`;\n defaults.modelBasePath = env.browser ? '../models/' : 'file://models/';\n this.version = app.version; // expose version property on instance of class\n Object.defineProperty(this, 'version', { value: app.version }); // expose version property directly on class itself\n this.config = JSON.parse(JSON.stringify(defaults));\n Object.seal(this.config);\n this.config.cacheModels = typeof indexedDB !== 'undefined';\n if (userConfig) this.config = mergeDeep(this.config, userConfig);\n setModelLoadOptions(this.config);\n this.tf = tf;\n this.state = 'idle';\n this.#numTensors = 0;\n this.#analyzeMemoryLeaks = false;\n this.#checkSanity = false;\n this.performance = {};\n this.events = (typeof EventTarget !== 'undefined') ? new EventTarget() : undefined;\n // object that contains all initialized models\n this.models = new models.Models(this);\n // reexport draw methods\n draw.init();\n this.result = empty();\n // export access to image processing\n this.process = { tensor: null, canvas: null };\n // export raw access to underlying models\n this.faceTriangulation = facemesh.triangulation;\n this.faceUVMap = facemesh.uvmap;\n // init model validation\n models.validateModel(this, null, '');\n // include platform info\n this.emit('create');\n if (this.config.debug || this.env.browser) log(`version: ${this.version}`);\n if (this.config.debug) log(`tfjs version: ${this.tf.version['tfjs-core']}`);\n const envTemp = JSON.parse(JSON.stringify(this.env));\n delete envTemp.kernels;\n delete envTemp.initial;\n delete envTemp.perfadd;\n if (this.config.debug) log('environment:', envTemp);\n }\n\n /** internal function to measure tensor leaks */\n analyze = (...msg: string[]) => {\n if (!this.#analyzeMemoryLeaks) return;\n const currentTensors = this.tf.engine().state.numTensors;\n const previousTensors = this.#numTensors;\n this.#numTensors = currentTensors;\n const leaked = currentTensors - previousTensors;\n if (leaked !== 0) log(...msg, leaked);\n };\n\n /** internal function for quick sanity check on inputs @hidden */\n #sanity = (input: Input): null | string => {\n if (!this.#checkSanity) return null;\n if (!input) return 'input is not defined';\n if (this.env.node && !(input instanceof tf.Tensor)) return 'input must be a tensor';\n try {\n this.tf.getBackend();\n } catch {\n return 'backend not loaded';\n }\n return null;\n };\n\n /** Reset configuration to default values */\n reset(): void {\n const currentBackend = this.config.backend; // save backend;\n this.config = JSON.parse(JSON.stringify(defaults));\n this.config.backend = currentBackend;\n image.reset();\n env.initial = true;\n }\n\n /** Validate current configuration schema */\n validate(userConfig?: Partial) {\n const msgs = validate(defaults, userConfig || this.config);\n if (msgs.length === 0) this.config = mergeDeep(this.config, userConfig) as Config;\n return msgs;\n }\n\n /** Utility wrapper for performance.now() */\n now(): number { // eslint-disable-line class-methods-use-this\n return now();\n }\n\n /** Process input as return canvas and tensor\n *\n * @param input - any input {@link Input}\n * @param getTensor - should image processing also return tensor or just canvas\n * Returns object with `tensor` and `canvas`\n */\n image(input: Input, getTensor: boolean = false) {\n return image.process(input, this.config, getTensor);\n }\n\n /** Segmentation method takes any input and returns RGBA tensor\n * Note: Segmentation is not triggered as part of detect process\n *\n * @param input - {@link Input}\n * Returns tensor which contains image data in RGBA format\n */\n async segmentation(input: Input, userConfig?: Partial): Promise {\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (!this.config.segmentation.enabled) return null;\n const processed = await image.process(input, this.config);\n if (!processed.tensor) return null;\n let tensor: Tensor | null = null;\n if (this.config.segmentation.modelPath?.includes('rvm')) tensor = await rvm.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('meet')) tensor = await meet.predict(processed.tensor, this.config);\n if (this.config.segmentation.modelPath?.includes('selfie')) tensor = await selfie.predict(processed.tensor, this.config);\n tf.dispose(processed.tensor);\n return tensor;\n }\n\n /** Compare two input tensors for pixel similarity\n * - use `human.image` to process any valid input and get a tensor that can be used for compare\n * - when passing manually generated tensors:\n * - both input tensors must be in format [1, height, width, 3]\n * - if resolution of tensors does not match, second tensor will be resized to match resolution of the first tensor\n * - return value is pixel similarity score normalized by input resolution and rgb channels\n */\n compare(firstImageTensor: Tensor, secondImageTensor: Tensor): Promise {\n return image.compare(this.config, firstImageTensor, secondImageTensor);\n }\n\n /** Explicit backend initialization\n * - Normally done implicitly during initial load phase\n * - Call to explictly register and initialize TFJS backend without any other operations\n * - Use when changing backend during runtime\n */\n async init(): Promise {\n await backend.check(this, true);\n await this.tf.ready();\n image.reset();\n }\n\n /** WebCam helper methods\n *\n */\n public webcam = new WebCam();\n\n /** Load method preloads all configured models on-demand\n * - Not explicitly required as any required model is load implicitly on it's first run\n *\n * @param userConfig - {@link Config}\n */\n async load(userConfig?: Partial): Promise {\n this.state = 'load';\n const timeStamp = now();\n const count = Object.values(this.models.models).filter((model) => model).length;\n if (userConfig) this.config = mergeDeep(this.config, userConfig) as Config;\n if (this.env.initial) { // print version info on first run and check for correct backend setup\n if (!await backend.check(this, false)) log('error: backend check failed');\n await tf.ready();\n if (this.env.browser) {\n if (this.config.debug) log('configuration:', this.config);\n if (this.config.debug) log('tf flags:', this.tf.ENV.flags);\n }\n }\n\n await this.models.load(this); // actually loads models\n if (this.env.initial && this.config.debug) log('tf engine state:', this.tf.engine().state.numBytes, 'bytes', this.tf.engine().state.numTensors, 'tensors'); // print memory stats on first run\n this.env.initial = false;\n\n const loaded = Object.values(this.models.models).filter((model) => model).length;\n if (loaded !== count) { // number of loaded models changed\n this.models.validate(); // validate kernel ops used by model against current backend\n this.emit('load');\n }\n\n const current = Math.trunc(now() - timeStamp);\n if (current > (this.performance.loadModels || 0)) this.performance.loadModels = this.env.perfadd ? (this.performance.loadModels || 0) + current : current;\n }\n\n /** emit event */\n emit = (event: string) => {\n if (this.events?.dispatchEvent) this.events.dispatchEvent(new Event(event));\n };\n\n /** Runs interpolation using last known result and returns smoothened result\n * Interpolation is based on time since last known result so can be called independently\n *\n * @param result - {@link Result} optional use specific result set to run interpolation on\n * @returns result - {@link Result}\n */\n next(result: Result = this.result): Result {\n return interpolate.calc(result, this.config);\n }\n\n /** Warmup method pre-initializes all configured models for faster inference\n * - can take significant time on startup\n * - only used for `webgl` and `humangl` backends\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async warmup(userConfig?: Partial) {\n const t0 = now();\n const res = await warmups.warmup(this, userConfig);\n const t1 = now();\n this.performance.warmup = Math.trunc(t1 - t0);\n return res;\n }\n\n /** Run detect with tensorflow profiling\n * - result object will contain total exeuction time information for top-20 kernels\n * - actual detection object can be accessed via `human.result`\n */\n async profile(input: Input, userConfig?: Partial): Promise<{ kernel: string, time: number, perc: number }[]> {\n // @ts-ignore profile wraps method return values\n const profile = await this.tf.profile(() => this.detect(input, userConfig));\n const kernels: Record = {};\n let total = 0;\n for (const kernel of profile.kernels) { // sum kernel time values per kernel\n const ms = Number(kernel.kernelTimeMs) || 0;\n if (kernels[kernel.name]) kernels[kernel.name] += ms;\n else kernels[kernel.name] = ms;\n total += ms;\n }\n const kernelArr: { kernel: string, time: number, perc: number }[] = [];\n Object.entries(kernels).forEach((key) => kernelArr.push({ kernel: key[0], time: key[1] as unknown as number, perc: 0 })); // convert to array\n for (const kernel of kernelArr) {\n kernel.perc = Math.round(1000 * kernel.time / total) / 1000;\n kernel.time = Math.round(1000 * kernel.time) / 1000;\n }\n kernelArr.sort((a, b) => b.time - a.time); // sort\n kernelArr.length = 20; // crop\n return kernelArr;\n }\n\n /** Main detection method\n * - Analyze configuration: {@link Config}\n * - Pre-process input: {@link Input}\n * - Run inference for all configured models\n * - Process and return result: {@link Result}\n *\n * @param input - {@link Input}\n * @param userConfig - {@link Config}\n * @returns result - {@link Result}\n */\n async detect(input: Input, userConfig?: Partial): Promise {\n // detection happens inside a promise\n this.state = 'detect';\n return new Promise(async (resolve) => {\n this.state = 'config';\n let timeStamp;\n\n // update configuration\n this.config = mergeDeep(this.config, userConfig) as Config;\n\n // sanity checks\n this.state = 'check';\n const error = this.#sanity(input);\n if (error) {\n log(error, input);\n this.emit('error');\n resolve(empty(error));\n }\n\n const timeStart = now();\n\n // load models if enabled\n await this.load();\n\n timeStamp = now();\n this.state = 'image';\n const img = await image.process(input, this.config) as { canvas: AnyCanvas, tensor: Tensor4D };\n this.process = img;\n this.performance.inputProcess = this.env.perfadd ? (this.performance.inputProcess || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Get Image:');\n\n if (!img.tensor) {\n if (this.config.debug) log('could not convert input to tensor');\n this.emit('error');\n resolve(empty('could not convert input to tensor'));\n return;\n }\n this.emit('image');\n\n timeStamp = now();\n this.config.skipAllowed = await image.skip(this.config, img.tensor);\n this.config.filter.autoBrightness = (this.config.filter.autoBrightness || false) && this.config.skipAllowed; // disable autoBrightness on scene change\n if (!this.performance.totalFrames) this.performance.totalFrames = 0;\n if (!this.performance.cachedFrames) this.performance.cachedFrames = 0;\n (this.performance.totalFrames)++;\n if (this.config.skipAllowed) this.performance.cachedFrames++;\n this.performance.cacheCheck = this.env.perfadd ? (this.performance.cacheCheck || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n this.analyze('Check Changed:');\n\n // prepare where to store model results\n // keep them with weak typing as it can be promise or not\n let faceRes: FaceResult[] | Promise | never[] = [];\n let bodyRes: BodyResult[] | Promise | never[] = [];\n let handRes: HandResult[] | Promise | never[] = [];\n let objectRes: ObjectResult[] | Promise | never[] = [];\n\n // run face detection followed by all models that rely on face bounding box: face mesh, age, gender, emotion\n this.state = 'detect:face';\n if (this.config.async) {\n faceRes = this.config.face.enabled ? face.detectFace(this, img.tensor) : [];\n if (this.performance.face) delete this.performance.face;\n } else {\n timeStamp = now();\n faceRes = this.config.face.enabled ? await face.detectFace(this, img.tensor) : [];\n this.performance.face = this.env.perfadd ? (this.performance.face || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n\n if (this.config.async && (this.config.body.maxDetected === -1 || this.config.hand.maxDetected === -1)) faceRes = await faceRes; // need face result for auto-detect number of hands or bodies\n\n // run body: can be posenet, blazepose, efficientpose, movenet\n this.analyze('Start Body:');\n this.state = 'detect:body';\n const bodyConfig = this.config.body.maxDetected === -1 ? mergeDeep(this.config, { body: { maxDetected: this.config.face.enabled ? 1 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of bodies\n if (this.config.async) {\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? movenet.predict(img.tensor, bodyConfig) : [];\n if (this.performance.body) delete this.performance.body;\n } else {\n timeStamp = now();\n if (this.config.body.modelPath?.includes('posenet')) bodyRes = this.config.body.enabled ? await posenet.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('blazepose')) bodyRes = this.config.body.enabled ? await blazepose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('efficientpose')) bodyRes = this.config.body.enabled ? await efficientpose.predict(img.tensor, bodyConfig) : [];\n else if (this.config.body.modelPath?.includes('movenet')) bodyRes = this.config.body.enabled ? await movenet.predict(img.tensor, bodyConfig) : [];\n this.performance.body = this.env.perfadd ? (this.performance.body || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Body:');\n\n // run handpose\n this.analyze('Start Hand:');\n this.state = 'detect:hand';\n const handConfig = this.config.hand.maxDetected === -1 ? mergeDeep(this.config, { hand: { maxDetected: this.config.face.enabled ? 2 * (faceRes as FaceResult[]).length : 1 } }) : this.config; // autodetect number of hands\n if (this.config.async) {\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? handtrack.predict(img.tensor, handConfig) : [];\n if (this.performance.hand) delete this.performance.hand;\n } else {\n timeStamp = now();\n if (this.config.hand.detector?.modelPath?.includes('handdetect')) handRes = this.config.hand.enabled ? await handpose.predict(img.tensor, handConfig) : [];\n else if (this.config.hand.detector?.modelPath?.includes('handtrack')) handRes = this.config.hand.enabled ? await handtrack.predict(img.tensor, handConfig) : [];\n this.performance.hand = this.env.perfadd ? (this.performance.hand || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Hand:');\n\n // run object detection\n this.analyze('Start Object:');\n this.state = 'detect:object';\n if (this.config.async) {\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? centernet.predict(img.tensor, this.config) : [];\n if (this.performance.object) delete this.performance.object;\n } else {\n timeStamp = now();\n if (this.config.object.modelPath?.includes('nanodet')) objectRes = this.config.object.enabled ? await nanodet.predict(img.tensor, this.config) : [];\n else if (this.config.object.modelPath?.includes('centernet')) objectRes = this.config.object.enabled ? await centernet.predict(img.tensor, this.config) : [];\n this.performance.object = this.env.perfadd ? (this.performance.object || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n }\n this.analyze('End Object:');\n\n // if async wait for results\n this.state = 'detect:await';\n if (this.config.async) [faceRes, bodyRes, handRes, objectRes] = await Promise.all([faceRes, bodyRes, handRes, objectRes]);\n\n // run gesture analysis last\n this.state = 'detect:gesture';\n let gestureRes: GestureResult[] = [];\n if (this.config.gesture.enabled) {\n timeStamp = now();\n gestureRes = [...gesture.face(faceRes as FaceResult[]), ...gesture.body(bodyRes as BodyResult[]), ...gesture.hand(handRes as HandResult[]), ...gesture.iris(faceRes as FaceResult[])];\n if (!this.config.async) this.performance.gesture = this.env.perfadd ? (this.performance.gesture || 0) + Math.trunc(now() - timeStamp) : Math.trunc(now() - timeStamp);\n else if (this.performance.gesture) delete this.performance.gesture;\n }\n\n this.performance.total = this.env.perfadd ? (this.performance.total || 0) + Math.trunc(now() - timeStart) : Math.trunc(now() - timeStart);\n const shape = this.process.tensor?.shape || [0, 0, 0, 0];\n this.result = {\n face: faceRes as FaceResult[],\n body: bodyRes as BodyResult[],\n hand: handRes as HandResult[],\n gesture: gestureRes,\n object: objectRes as ObjectResult[],\n performance: this.performance,\n canvas: this.process.canvas,\n timestamp: Date.now(),\n error: null,\n width: shape[2],\n height: shape[1],\n get persons() { return persons.join(faceRes as FaceResult[], bodyRes as BodyResult[], handRes as HandResult[], gestureRes, shape); },\n };\n\n // finally dispose input tensor\n tf.dispose(img.tensor);\n\n // log('Result:', result);\n this.emit('detect');\n this.state = 'idle';\n resolve(this.result);\n });\n }\n\n /** Helper function\n * @param ms - sleep time in miliseconds\n */\n async sleep(ms: number): Promise { // eslint-disable-line class-methods-use-this\n return new Promise((resolve) => { setTimeout(resolve, ms); });\n }\n\n /** internal structure that keeps track of processed videos @hidden */\n #loops: Record = {};\n /** Continously detect video frames\n * @param element - HTMLVideoElement input\n * @param run - boolean run continously or stop if already running, default true\n * @param delay - number delay detection between frames for number of miliseconds, default 0\n */\n async video(element: HTMLVideoElement, run: boolean = true, delay: number = 0) {\n if (run) {\n if (!this.#loops[element.id]) {\n if (this.config.debug) log('video start', element.id);\n this.#loops[element.id] = true;\n }\n if (!element.paused && this.#loops[element.id] && (element.readyState >= 2)) await this.detect(element);\n if (delay > 0) await this.sleep(delay);\n if (this.#loops[element.id]) requestAnimationFrame(() => this.video(element, run, delay));\n } else {\n if (this.config.debug) log('video stop', element.id);\n this.#loops[element.id] = false;\n }\n }\n}\n\n/** Class Human as default export */\n/* eslint no-restricted-exports: [\"off\", { \"restrictedNamedExports\": [\"default\"] }] */\nexport { Human as default, match, draw, models };\n"], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,IAAI,KAAG,OAAO;AAAO,IAAI,KAAG,OAAO;AAAe,IAAI,KAAG,OAAO;AAAyB,IAAI,KAAG,OAAO;AAAoB,IAAI,KAAG,OAAO;AAAd,IAA6B,KAAG,OAAO,UAAU;AAAe,IAAI,KAAG,CAACC,KAAE,MAAI,OAAK,KAAGA,KAAG,IAAE,EAAC,SAAQ,CAAC,EAAC,GAAG,SAAQ,CAAC,GAAE,EAAE;AAAtD,IAA+D,KAAG,CAACA,KAAE,MAAI;AAAC,WAAQC,OAAK;AAAE,OAAGD,KAAEC,KAAE,EAAC,KAAI,EAAEA,GAAC,GAAE,YAAW,KAAE,CAAC;AAAC;AAAzH,IAA2H,KAAG,CAACD,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAG,KAAG,OAAO,KAAG,YAAU,OAAO,KAAG;AAAW,aAAQ,KAAK,GAAG,CAAC;AAAE,OAAC,GAAG,KAAKD,KAAE,CAAC,KAAG,MAAIC,OAAG,GAAGD,KAAE,GAAE,EAAC,KAAI,MAAI,EAAE,CAAC,GAAE,YAAW,EAAE,IAAE,GAAG,GAAE,CAAC,MAAI,EAAE,WAAU,CAAC;AAAE,SAAOA;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,SAAKA,MAAED,OAAG,OAAK,GAAG,GAAGA,GAAC,CAAC,IAAE,CAAC,GAAE,GAAG,KAAG,CAACA,OAAG,CAACA,IAAE,aAAW,GAAGC,KAAE,WAAU,EAAC,OAAMD,KAAE,YAAW,KAAE,CAAC,IAAEC,KAAED,GAAC;AAAG,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,KAAG,UAAQ;AAAG,MAAI,KAAG;AAAK,MAAG;AAAC,SAAG,IAAI,YAAY,SAAS,IAAI,YAAY,OAAO,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,KAAI,KAAI,KAAI,GAAE,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,KAAI,GAAE,IAAG,GAAE,IAAG,GAAE,IAAG,GAAE,GAAE,KAAI,KAAI,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,GAAE,GAAE,GAAE,KAAI,KAAI,KAAI,IAAG,KAAI,KAAI,KAAI,KAAI,GAAE,GAAE,IAAG,KAAI,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,GAAE,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,KAAI,IAAG,GAAE,KAAI,IAAG,IAAG,KAAI,KAAI,KAAI,IAAG,GAAE,IAAG,IAAG,KAAI,KAAI,IAAG,GAAE,IAAG,GAAE,KAAI,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC,EAAE;AAAA,EAAO,SAAOA,KAAE;AAAA,EAAC;AAAC,WAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAK,MAAID,MAAE,GAAE,KAAK,OAAK,IAAE,GAAE,KAAK,WAAS,CAAC,CAACC;AAAA,EAAC;AAAC,KAAG,UAAU;AAAW,SAAO,eAAe,GAAG,WAAU,cAAa,EAAC,OAAM,KAAE,CAAC;AAAE,WAAS,GAAGD,KAAE;AAAC,YAAOA,OAAGA,IAAE,gBAAc;AAAA,EAAE;AAAC,KAAG,SAAO;AAAG,MAAI,KAAG,CAAC,GAAE,KAAG,CAAC;AAAE,WAAS,GAAGA,KAAE,GAAE;AAAC,QAAIC,KAAE,GAAE;AAAE,WAAO,KAAGD,SAAK,IAAG,IAAE,KAAGA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAGC,MAAE,GAAGD,MAAGA,MAAE,KAAG,IAAE,KAAG,GAAE,IAAE,GAAE,MAAI,GAAGA,GAAC,IAAEC,MAAGA,SAAKD,OAAG,IAAG,IAAE,QAAMA,OAAGA,MAAE,SAAO,IAAE,GAAGA,GAAC,GAAE,KAAG,KAAGC,MAAE,GAAGD,KAAEA,MAAE,IAAE,KAAG,GAAE,KAAE,GAAE,MAAI,GAAGA,GAAC,IAAEC,MAAGA;AAAA,EAAG;AAAC,KAAG,UAAQ;AAAG,WAAS,GAAGD,KAAE,GAAE;AAAC,QAAG,MAAMA,GAAC;AAAE,aAAO,IAAE,KAAG;AAAG,QAAG,GAAE;AAAC,UAAGA,MAAE;AAAE,eAAO;AAAG,UAAGA,OAAG;AAAG,eAAO;AAAA,IAAE,OAAK;AAAC,UAAGA,OAAG,CAAC;AAAG,eAAO;AAAG,UAAGA,MAAE,KAAG;AAAG,eAAO;AAAA,IAAE;AAAC,WAAOA,MAAE,IAAE,GAAG,CAACA,KAAE,CAAC,EAAE,IAAI,IAAE,GAAGA,MAAE,KAAG,GAAEA,MAAE,KAAG,GAAE,CAAC;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,WAAO,IAAI,GAAGD,KAAE,GAAEC,GAAC;AAAA,EAAC;AAAC,KAAG,WAAS;AAAG,MAAI,KAAG,KAAK;AAAI,WAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,QAAGD,IAAE,WAAS;AAAE,YAAM,MAAM,cAAc;AAAE,QAAGA,QAAI,SAAOA,QAAI,cAAYA,QAAI,eAAaA,QAAI;AAAY,aAAO;AAAG,QAAG,OAAO,KAAG,YAAUC,MAAE,GAAE,IAAE,SAAI,IAAE,CAAC,CAAC,GAAEA,MAAEA,OAAG,IAAGA,MAAE,KAAG,KAAGA;AAAE,YAAM,WAAW,OAAO;AAAE,QAAI;AAAE,SAAI,IAAED,IAAE,QAAQ,GAAG,KAAG;AAAE,YAAM,MAAM,iBAAiB;AAAE,QAAG,MAAI;AAAE,aAAO,GAAGA,IAAE,UAAU,CAAC,GAAE,GAAEC,GAAC,EAAE,IAAI;AAAE,aAAQ,IAAE,GAAG,GAAGA,KAAE,CAAC,CAAC,GAAE,IAAE,IAAG,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAEA,IAAE,SAAO,CAAC,GAAE,IAAE,SAASA,IAAE,UAAU,GAAE,IAAE,CAAC,GAAEC,GAAC;AAAE,UAAG,IAAE,GAAE;AAAC,YAAI,IAAE,GAAG,GAAGA,KAAE,CAAC,CAAC;AAAE,YAAE,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,MAAC;AAAM,YAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,GAAG,CAAC,CAAC;AAAA,IAAC;AAAC,WAAO,EAAE,WAAS,GAAE;AAAA,EAAC;AAAC,KAAG,aAAW;AAAG,WAAS,GAAGD,KAAE,GAAE;AAAC,WAAO,OAAOA,OAAG,WAAS,GAAGA,KAAE,CAAC,IAAE,OAAOA,OAAG,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,IAAE,KAAIA,IAAE,MAAK,OAAO,KAAG,YAAU,IAAEA,IAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,YAAU;AAAG,MAAI,KAAG,OAAME,MAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,KAAG,GAAE,KAAG,GAAGA,GAAE,GAAE,KAAG,GAAG,CAAC;AAAE,KAAG,OAAK;AAAG,MAAI,KAAG,GAAG,GAAE,IAAE;AAAE,KAAG,QAAM;AAAG,MAAI,KAAG,GAAG,CAAC;AAAE,KAAG,MAAI;AAAG,MAAI,KAAG,GAAG,GAAE,IAAE;AAAE,KAAG,OAAK;AAAG,MAAI,KAAG,GAAG,EAAE;AAAE,KAAG,UAAQ;AAAG,MAAI,KAAG,GAAG,IAAG,YAAW,KAAE;AAAE,KAAG,YAAU;AAAG,MAAI,KAAG,GAAG,IAAG,IAAG,IAAE;AAAE,KAAG,qBAAmB;AAAG,MAAI,KAAG,GAAG,GAAE,aAAY,KAAE;AAAE,KAAG,YAAU;AAAG,MAAI,KAAG,GAAG;AAAU,KAAG,QAAM,WAAU;AAAC,WAAO,KAAK,WAAS,KAAK,QAAM,IAAE,KAAK;AAAA,EAAG;AAAE,KAAG,WAAS,WAAU;AAAC,WAAO,KAAK,YAAU,KAAK,SAAO,KAAG,MAAI,KAAK,QAAM,KAAG,KAAK,OAAK,MAAI,KAAK,QAAM;AAAA,EAAE;AAAE,KAAG,WAAS,SAAS,GAAE;AAAC,QAAG,IAAE,KAAG,IAAG,IAAE,KAAG,KAAG;AAAE,YAAM,WAAW,OAAO;AAAE,QAAG,KAAK,OAAO;AAAE,aAAM;AAAI,QAAG,KAAK,WAAW;AAAE,UAAG,KAAK,GAAG,EAAE,GAAE;AAAC,YAAID,MAAE,GAAG,CAAC,GAAE,IAAE,KAAK,IAAIA,GAAC,GAAE,IAAE,EAAE,IAAIA,GAAC,EAAE,IAAI,IAAI;AAAE,eAAO,EAAE,SAAS,CAAC,IAAE,EAAE,MAAM,EAAE,SAAS,CAAC;AAAA,MAAC;AAAM,eAAM,MAAI,KAAK,IAAI,EAAE,SAAS,CAAC;AAAE,aAAQ,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,KAAK,QAAQ,GAAE,IAAE,MAAK,IAAE,QAAK;AAAC,UAAI,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,MAAI,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,UAAG,IAAE,GAAE,EAAE,OAAO;AAAE,eAAO,IAAE;AAAE,aAAK,EAAE,SAAO;AAAG,YAAE,MAAI;AAAE,UAAE,KAAG,IAAE;AAAA,IAAC;AAAA,EAAC;AAAE,KAAG,cAAY,WAAU;AAAC,WAAO,KAAK;AAAA,EAAI;AAAE,KAAG,sBAAoB,WAAU;AAAC,WAAO,KAAK,SAAO;AAAA,EAAC;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK;AAAA,EAAG;AAAE,KAAG,qBAAmB,WAAU;AAAC,WAAO,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,gBAAc,WAAU;AAAC,QAAG,KAAK,WAAW;AAAE,aAAO,KAAK,GAAG,EAAE,IAAE,KAAG,KAAK,IAAI,EAAE,cAAc;AAAE,aAAQ,IAAE,KAAK,QAAM,IAAE,KAAK,OAAK,KAAK,KAAIA,MAAE,IAAGA,MAAE,KAAG,EAAE,IAAE,KAAGA,MAAGA;AAAI;AAAC,WAAO,KAAK,QAAM,IAAEA,MAAE,KAAGA,MAAE;AAAA,EAAC;AAAE,KAAG,SAAO,WAAU;AAAC,WAAO,KAAK,SAAO,KAAG,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,aAAW,WAAU;AAAC,WAAM,CAAC,KAAK,YAAU,KAAK,OAAK;AAAA,EAAC;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK,YAAU,KAAK,QAAM;AAAA,EAAC;AAAE,KAAG,QAAM,WAAU;AAAC,YAAO,KAAK,MAAI,OAAK;AAAA,EAAC;AAAE,KAAG,SAAO,WAAU;AAAC,YAAO,KAAK,MAAI,OAAK;AAAA,EAAC;AAAE,KAAG,SAAO,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,aAAW,EAAE,YAAU,KAAK,SAAO,OAAK,KAAG,EAAE,SAAO,OAAK,IAAE,QAAG,KAAK,SAAO,EAAE,QAAM,KAAK,QAAM,EAAE;AAAA,EAAG;AAAE,KAAG,KAAG,GAAG;AAAO,KAAG,YAAU,SAAS,GAAE;AAAC,WAAM,CAAC,KAAK,GAAG,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,KAAG,GAAG;AAAU,KAAG,WAAS,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAS,KAAG,kBAAgB,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAgB,KAAG,KAAG,GAAG;AAAgB,KAAG,cAAY,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,IAAE;AAAA,EAAC;AAAE,KAAG,KAAG,GAAG;AAAY,KAAG,qBAAmB,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,CAAC,KAAG;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAmB,KAAG,KAAG,GAAG;AAAmB,KAAG,UAAQ,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,GAAG,CAAC;AAAE,aAAO;AAAE,QAAIA,MAAE,KAAK,WAAW,GAAE,IAAE,EAAE,WAAW;AAAE,WAAOA,OAAG,CAAC,IAAE,KAAG,CAACA,OAAG,IAAE,IAAE,KAAK,WAAS,EAAE,SAAO,IAAE,KAAK,SAAO,KAAG,EAAE,SAAO,KAAK,QAAM,EAAE,QAAM,IAAE,KAAK,QAAM,IAAE,KAAG,IAAE,KAAK,IAAI,CAAC,EAAE,WAAW,IAAE,KAAG;AAAA,EAAC;AAAE,KAAG,OAAK,GAAG;AAAQ,KAAG,SAAO,WAAU;AAAC,WAAM,CAAC,KAAK,YAAU,KAAK,GAAG,EAAE,IAAE,KAAG,KAAK,IAAI,EAAE,IAAI,EAAE;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,SAAS,GAAE;AAAC,OAAG,CAAC,MAAI,IAAE,GAAG,CAAC;AAAG,QAAIA,MAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAE,EAAE,SAAO,IAAG,IAAE,EAAE,OAAK,OAAM,IAAE,EAAE,QAAM,IAAG,IAAE,EAAE,MAAI,OAAM,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAO,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAGA,MAAE,GAAE,KAAG,OAAM,GAAG,KAAG,KAAG,GAAE,KAAG,KAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,WAAS,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAS,KAAG,WAAS,SAAS,GAAE;AAAC,QAAG,KAAK,OAAO;AAAE,aAAO;AAAG,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,IAAG;AAAC,UAAIA,MAAE,GAAG,IAAI,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAG,EAAE,OAAO;AAAE,aAAO;AAAG,QAAG,KAAK,GAAG,EAAE;AAAE,aAAO,EAAE,MAAM,IAAE,KAAG;AAAG,QAAG,EAAE,GAAG,EAAE;AAAE,aAAO,KAAK,MAAM,IAAE,KAAG;AAAG,QAAG,KAAK,WAAW;AAAE,aAAO,EAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,QAAG,EAAE,WAAW;AAAE,aAAO,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,QAAG,KAAK,GAAG,EAAE,KAAG,EAAE,GAAG,EAAE;AAAE,aAAO,GAAG,KAAK,SAAS,IAAE,EAAE,SAAS,GAAE,KAAK,QAAQ;AAAE,QAAI,IAAE,KAAK,SAAO,IAAG,IAAE,KAAK,OAAK,OAAM,IAAE,KAAK,QAAM,IAAG,IAAE,KAAK,MAAI,OAAM,IAAE,EAAE,SAAO,IAAG,IAAE,EAAE,OAAK,OAAM,IAAE,EAAE,QAAM,IAAG,IAAE,EAAE,MAAI,OAAM,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAO,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,GAAE,KAAG,MAAI,IAAG,KAAG,OAAM,KAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,OAAM,GAAG,KAAG,KAAG,GAAE,KAAG,KAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAS,KAAG,SAAO,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,EAAE,OAAO;AAAE,YAAM,MAAM,kBAAkB;AAAE,QAAG,IAAG;AAAC,UAAG,CAAC,KAAK,YAAU,KAAK,SAAO,eAAa,EAAE,QAAM,MAAI,EAAE,SAAO;AAAG,eAAO;AAAK,UAAIA,OAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,QAAG,KAAK,OAAO;AAAE,aAAO,KAAK,WAAS,KAAG;AAAG,QAAI,GAAE,GAAE;AAAE,QAAG,KAAK,UAAS;AAAC,UAAG,EAAE,aAAW,IAAE,EAAE,WAAW,IAAG,EAAE,GAAG,IAAI;AAAE,eAAO;AAAG,UAAG,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;AAAE,eAAO;AAAG,UAAE;AAAA,IAAE,OAAK;AAAC,UAAG,KAAK,GAAG,EAAE,GAAE;AAAC,YAAG,EAAE,GAAG,EAAE,KAAG,EAAE,GAAG,EAAE;AAAE,iBAAO;AAAG,YAAG,EAAE,GAAG,EAAE;AAAE,iBAAO;AAAG,YAAI,IAAE,KAAK,IAAI,CAAC;AAAE,eAAO,IAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,GAAG,EAAE,IAAE,EAAE,WAAW,IAAE,KAAG,MAAI,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,GAAE;AAAA,MAAE,WAAS,EAAE,GAAG,EAAE;AAAE,eAAO,KAAK,WAAS,KAAG;AAAG,UAAG,KAAK,WAAW;AAAE,eAAO,EAAE,WAAW,IAAE,KAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAE,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,UAAG,EAAE,WAAW;AAAE,eAAO,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI;AAAE,UAAE;AAAA,IAAE;AAAC,SAAI,IAAE,MAAK,EAAE,IAAI,CAAC,KAAG;AAAC,UAAE,KAAK,IAAI,GAAE,KAAK,MAAM,EAAE,SAAS,IAAE,EAAE,SAAS,CAAC,CAAC;AAAE,eAAQ,IAAE,KAAK,KAAK,KAAK,IAAI,CAAC,IAAE,KAAK,GAAG,GAAE,IAAE,KAAG,KAAG,IAAE,GAAG,GAAE,IAAE,EAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,EAAE,WAAW,KAAG,EAAE,GAAG,CAAC;AAAG,aAAG,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,EAAE,IAAI,CAAC;AAAE,QAAE,OAAO,MAAI,IAAE,KAAI,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,SAAO,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,IAAG;AAAC,UAAIA,OAAG,KAAK,WAAS,GAAG,QAAM,GAAG,OAAO,KAAK,KAAI,KAAK,MAAK,EAAE,KAAI,EAAE,IAAI;AAAE,aAAO,GAAGA,KAAE,GAAG,SAAS,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAC,WAAO,KAAK,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,GAAG;AAAO,KAAG,MAAI,WAAU;AAAC,WAAO,GAAG,CAAC,KAAK,KAAI,CAAC,KAAK,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,KAAG,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,GAAG,CAAC,IAAG,GAAG,KAAK,MAAI,EAAE,KAAI,KAAK,OAAK,EAAE,MAAK,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,YAAU,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,KAAI,KAAG,QAAM,IAAE,OAAK,IAAE,KAAG,GAAG,KAAK,OAAK,GAAE,KAAK,QAAM,IAAE,KAAK,QAAM,KAAG,GAAE,KAAK,QAAQ,IAAE,GAAG,GAAE,KAAK,OAAK,IAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAU,KAAG,aAAW,SAAS,GAAE;AAAC,WAAO,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,KAAI,KAAG,QAAM,IAAE,OAAK,IAAE,KAAG,GAAG,KAAK,QAAM,IAAE,KAAK,QAAM,KAAG,GAAE,KAAK,QAAM,GAAE,KAAK,QAAQ,IAAE,GAAG,KAAK,QAAM,IAAE,IAAG,KAAK,QAAM,IAAE,IAAE,IAAG,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,MAAI,GAAG;AAAW,KAAG,qBAAmB,SAAS,GAAE;AAAC,QAAG,GAAG,CAAC,MAAI,IAAE,EAAE,MAAM,IAAG,KAAG,IAAG,MAAI;AAAE,aAAO;AAAK,QAAIA,MAAE,KAAK;AAAK,QAAG,IAAE,IAAG;AAAC,UAAI,IAAE,KAAK;AAAI,aAAO,GAAG,MAAI,IAAEA,OAAG,KAAG,GAAEA,QAAI,GAAE,KAAK,QAAQ;AAAA,IAAC;AAAM,aAAO,MAAI,KAAG,GAAGA,KAAE,GAAE,KAAK,QAAQ,IAAE,GAAGA,QAAI,IAAE,IAAG,GAAE,KAAK,QAAQ;AAAA,EAAC;AAAE,KAAG,OAAK,GAAG;AAAmB,KAAG,QAAM,GAAG;AAAmB,KAAG,WAAS,WAAU;AAAC,WAAO,KAAK,WAAS,GAAG,KAAK,KAAI,KAAK,MAAK,KAAE,IAAE;AAAA,EAAI;AAAE,KAAG,aAAW,WAAU;AAAC,WAAO,KAAK,WAAS,OAAK,GAAG,KAAK,KAAI,KAAK,MAAK,IAAE;AAAA,EAAC;AAAE,KAAG,UAAQ,SAAS,GAAE;AAAC,WAAO,IAAE,KAAK,UAAU,IAAE,KAAK,UAAU;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAI,IAAE,KAAK,MAAKA,MAAE,KAAK;AAAI,WAAM,CAACA,MAAE,KAAIA,QAAI,IAAE,KAAIA,QAAI,KAAG,KAAIA,QAAI,IAAG,IAAE,KAAI,MAAI,IAAE,KAAI,MAAI,KAAG,KAAI,MAAI,EAAE;AAAA,EAAC;AAAE,KAAG,YAAU,WAAU;AAAC,QAAI,IAAE,KAAK,MAAKA,MAAE,KAAK;AAAI,WAAM,CAAC,MAAI,IAAG,MAAI,KAAG,KAAI,MAAI,IAAE,KAAI,IAAE,KAAIA,QAAI,IAAGA,QAAI,KAAG,KAAIA,QAAI,IAAE,KAAIA,MAAE,GAAG;AAAA,EAAC;AAAE,KAAG,YAAU,SAAS,GAAEA,KAAE,GAAE;AAAC,WAAO,IAAE,GAAG,YAAY,GAAEA,GAAC,IAAE,GAAG,YAAY,GAAEA,GAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAAS,GAAEA,KAAE;AAAC,WAAO,IAAI,GAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAGA,GAAC;AAAA,EAAC;AAAE,KAAG,cAAY,SAAS,GAAEA,KAAE;AAAC,WAAO,IAAI,GAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,IAAE,EAAE,CAAC,GAAEA,GAAC;AAAA,EAAC;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE,EAAE;AAAE,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,UAAQ,EAAE,KAAG,EAAE,IAAE;AAAsB,eAAO,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,KAAG,EAAE,IAAE,IAAE;AAAA,MAAE,GAAE,EAAE,IAAE,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,KAAG,EAAE,GAAG,GAAE,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,EAAE,MAAI,EAAE,CAAC,GAAE,EAAE,KAAG,MAAI,EAAE,MAAI,IAAG,IAAE;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG,EAAE,KAAG,EAAE,IAAG;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,EAAE;AAAK,aAAO,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,KAAK,IAAE,aAAW;AAAA,MAAC,GAAE,EAAE,SAAO,WAAU;AAAC,eAAO,EAAE,KAAG,EAAE,IAAE,UAAQ,KAAG;AAAA,MAAqB,GAAE,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,aAAS,IAAG;AAAC,UAAI,IAAE,YAAW,IAAE,SAAS,GAAE;AAAC,YAAE,OAAO,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,eAAG,EAAE,WAAW,CAAC;AAAE,cAAI,IAAE,sBAAmB;AAAE,cAAE,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE,IAAE,MAAI,GAAE,KAAG,GAAE,KAAG,IAAE;AAAA,QAAU;AAAC,gBAAO,MAAI,KAAG;AAAA,MAAqB;AAAE,aAAO;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,OAAK;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,IAAE,EAAE,KAAG;AAAG,eAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,KAAG,EAAE,MAAI,KAAG,IAAE,MAAI;AAAA,MAAC,GAAE,OAAK,IAAE,KAAG,EAAE,IAAE,IAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG;AAAI,UAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,IAAE,EAAE,MAAI;AAAE,eAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,IAAG,EAAE,IAAE,EAAE,IAAE,SAAO,MAAI,EAAE,IAAE,EAAE,IAAE,EAAE,KAAG,KAAG,IAAE,KAAG,MAAI;AAAA,MAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,OAAK,IAAE,KAAG,EAAE,IAAE,IAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG;AAAI,UAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,KAAG,EAAE,WAAS,EAAE,IAAE,EAAE,KAAG,KAAG,EAAE,MAAI,IAAG,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE;AAAK,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,GAAE,GAAE;AAAE,eAAO,IAAE,EAAE,CAAC,GAAE,KAAG,MAAI,GAAE,IAAE,IAAE,KAAG,IAAG,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,MAAI,IAAG,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,MAAI,GAAE,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,KAAG,IAAE,KAAG,GAAE,IAAE,EAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,KAAG,IAAG,KAAG,IAAE,KAAG,GAAE,EAAE,CAAC,IAAE,GAAE,EAAE,IAAE,IAAE,IAAE,GAAE;AAAA,MAAC;AAAE,eAAS,EAAE,GAAE,GAAE;AAAC,YAAI,GAAE,GAAE,IAAE,CAAC;AAAE,YAAG,OAAK,IAAE;AAAG,cAAE,EAAE,CAAC,IAAE;AAAA;AAAO,eAAI,IAAE,KAAG,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,cAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,KAAG,KAAG,EAAE,WAAW,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC,KAAG;AAAG,eAAK,EAAE,SAAO;AAAG,YAAE,KAAK,CAAC;AAAE,aAAI,IAAE,GAAE,IAAE,KAAG,EAAE,CAAC,MAAI,GAAE,EAAE;AAAE;AAAC,aAAI,KAAG,IAAE,IAAE,EAAE,CAAC,IAAE,KAAG,IAAE,EAAE,CAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,IAAE,KAAI,IAAE,GAAE,EAAE;AAAE,YAAE,KAAK;AAAA,MAAC;AAAC,QAAE,GAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,WAAG,SAAO,IAAE,CAAC,oBAAI;AAAM,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,YAAU;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE;AAAK,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,GAAE;AAAE,eAAO,EAAE,IAAE,IAAE,IAAE,aAAW,GAAE,IAAE,EAAE,IAAE,KAAG,GAAG,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAG,GAAE,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,IAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,IAAE,GAAE,KAAG,IAAE,MAAI,MAAI;AAAA,MAAC;AAAE,eAAS,EAAE,GAAE,GAAE;AAAC,YAAI,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAI,aAAI,OAAK,IAAE,MAAI,IAAE,GAAE,IAAE,SAAO,IAAE,IAAE,MAAK,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,EAAE,MAAM,IAAG,IAAE,GAAE,IAAE,KAAI,IAAE,GAAE,EAAE;AAAE,gBAAI,KAAG,EAAE,YAAY,IAAE,MAAI,EAAE,MAAM,IAAG,MAAI,MAAI,IAAE,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,KAAG,GAAE,KAAG,MAAI,IAAG,KAAG,MAAI,IAAE,IAAE,aAAW,GAAE,IAAE,EAAE,IAAE,GAAG,KAAG,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE;AAAG,aAAI,KAAG,QAAM,GAAG,KAAG,EAAE,UAAQ,KAAG,GAAG,IAAE,KAAI,IAAE,KAAI,IAAE,IAAE,KAAI,IAAE,GAAE,EAAE;AAAE,cAAE,EAAE,IAAE,KAAG,GAAG,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAG,GAAE,KAAG,KAAG,IAAG,KAAG,KAAG,IAAG,KAAG,MAAI,IAAG,KAAG,MAAI,IAAG,EAAE,CAAC,IAAE,IAAE;AAAE,UAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE;AAAA,MAAC;AAAC,QAAE,GAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,WAAG,SAAO,IAAE,CAAC,oBAAI;AAAM,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,UAAQ;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,MAAK,IAAE;AAAG,QAAE,OAAK,WAAU;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE;AAAE,eAAO,IAAE,KAAG,KAAG,MAAI,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,KAAG,MAAI,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,EAAE,IAAE,IAAE,KAAG,KAAG,MAAI,KAAG,GAAE,EAAE,IAAE,IAAE,IAAE,IAAE,GAAE,EAAE,IAAE,KAAG,KAAG,MAAI,KAAG,GAAE,EAAE,IAAE,IAAE,IAAE;AAAA,MAAC,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE,EAAE,IAAE,aAAY,EAAE,IAAE,YAAW,MAAI,KAAK,MAAM,CAAC,KAAG,EAAE,IAAE,IAAE,aAAW,GAAE,EAAE,IAAE,IAAE,KAAG,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,IAAG;AAAI,UAAE,KAAG,EAAE,WAAW,CAAC,IAAE,GAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,KAAG,EAAE,OAAM,IAAE,WAAU;AAAC,gBAAO,EAAE,KAAK,MAAI,KAAG;AAAA,MAAU;AAAE,aAAO,EAAE,SAAO,WAAU;AAAC;AAAG,cAAI,IAAE,EAAE,KAAK,MAAI,IAAG,KAAG,EAAE,KAAK,MAAI,KAAG,YAAW,KAAG,IAAE,MAAI,KAAG;AAAA,eAAU,MAAI;AAAG,eAAO;AAAA,MAAC,GAAE,EAAE,QAAM,EAAE,MAAK,EAAE,QAAM,GAAE,MAAI,OAAO,KAAG,YAAU,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,GAAE,CAAC,CAAC;AAAA,MAAC,IAAG;AAAA,IAAC;AAAC,SAAG,EAAE,UAAQ,EAAE,UAAQ,IAAEA,OAAGA,IAAE,MAAIA,IAAE,WAAU;AAAC,aAAO;AAAA,IAAC,CAAC,IAAE,KAAK,SAAO;AAAA,EAAC,GAAG,IAAG,OAAO,MAAI,YAAU,IAAG,OAAO,UAAQ,cAAY,MAAM;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,GAAC,SAASD,KAAE,GAAEC,KAAE;AAAC,QAAI,IAAE,KAAI,IAAE,GAAE,IAAE,IAAG,IAAE,UAAS,IAAEA,IAAE,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,GAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE;AAAE,aAAS,EAAE,GAAE,GAAE,GAAE;AAAC,UAAI,IAAE,CAAC;AAAE,UAAE,KAAG,OAAG,EAAC,SAAQ,KAAE,IAAE,KAAG,CAAC;AAAE,UAAI,IAAE,EAAE,EAAE,EAAE,UAAQ,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,KAAG,OAAK,EAAE,IAAE,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,IAAI,EAAE,CAAC,GAAE,IAAE,WAAU;AAAC,iBAAQ,IAAE,EAAE,EAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAG,eAAG,IAAE,KAAG,GAAE,KAAG,GAAE,IAAE,EAAE,EAAE,CAAC;AAAE,eAAK,KAAG;AAAG,eAAG,GAAE,KAAG,GAAE,OAAK;AAAE,gBAAO,IAAE,KAAG;AAAA,MAAC;AAAE,aAAO,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,EAAE,CAAC,IAAE;AAAA,MAAC,GAAE,EAAE,QAAM,WAAU;AAAC,eAAO,EAAE,EAAE,CAAC,IAAE;AAAA,MAAU,GAAE,EAAE,SAAO,GAAE,EAAE,EAAE,EAAE,CAAC,GAAE,CAAC,IAAG,EAAE,QAAM,KAAG,SAAS,GAAE,GAAE,GAAE,GAAE;AAAC,eAAO,MAAI,EAAE,KAAG,EAAE,GAAE,CAAC,GAAE,EAAE,QAAM,WAAU;AAAC,iBAAO,EAAE,GAAE,CAAC,CAAC;AAAA,QAAC,IAAG,KAAGA,IAAE,CAAC,IAAE,GAAE,KAAG;AAAA,MAAC,GAAG,GAAE,GAAE,YAAW,IAAE,EAAE,SAAO,QAAMA,KAAE,EAAE,KAAK;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,GAAE,IAAE,EAAE,IAAE,EAAE,IAAE,GAAE,IAAE,EAAE,IAAE,CAAC;AAAE,WAAI,MAAI,IAAE,CAAC,GAAG,IAAG,IAAE;AAAG,UAAE,CAAC,IAAE;AAAI,WAAI,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,CAAC,IAAE,EAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,KAAG,IAAE,EAAE,CAAC,EAAE,GAAE,EAAE,CAAC,IAAE;AAAE,OAAC,EAAE,IAAE,SAAS,GAAE;AAAC,iBAAQ,GAAE,IAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE,IAAE,EAAE,GAAE;AAAK,cAAE,EAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,KAAG,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,IAAE,CAAC,MAAI,EAAE,CAAC,IAAE,EAAE;AAAE,eAAO,EAAE,IAAE,GAAE,EAAE,IAAE,GAAE;AAAA,MAAC,GAAG,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAO,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,GAAE,EAAE,IAAE,EAAE,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,UAAI,IAAE,CAAC,GAAE,IAAE,OAAO,GAAE;AAAE,UAAG,KAAG,KAAG;AAAS,aAAI,KAAK;AAAE,cAAG;AAAC,cAAE,KAAK,EAAE,EAAE,CAAC,GAAE,IAAE,CAAC,CAAC;AAAA,UAAC,SAAO,GAAE;AAAA,UAAC;AAAC,aAAO,EAAE,SAAO,IAAE,KAAG,WAAS,IAAE,IAAE;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,eAAQ,IAAE,IAAE,IAAG,GAAE,IAAE,GAAE,IAAE,EAAE;AAAQ,UAAE,IAAE,CAAC,IAAE,KAAG,KAAG,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,WAAW,GAAG;AAAE,aAAO,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,IAAG;AAAC,UAAG;AAAC,YAAI;AAAE,eAAO,MAAI,IAAE,EAAE,eAAa,IAAE,EAAE,CAAC,KAAG,IAAE,IAAI,WAAW,CAAC,IAAGD,IAAE,UAAQA,IAAE,UAAU,gBAAgB,CAAC,IAAG,EAAE,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,YAAI,IAAEA,IAAE,WAAU,IAAE,KAAG,EAAE;AAAQ,eAAM,CAAC,CAAC,oBAAI,QAAKA,KAAE,GAAEA,IAAE,QAAO,EAAE,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,OAAO,aAAa,MAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAEC,IAAE,OAAO,GAAE,CAAC,GAAE,OAAO,MAAI,YAAU,GAAG,SAAQ;AAAC,SAAG,UAAQ;AAAE,UAAG;AAAC,YAAE,GAAG;AAAA,MAAC,SAAO,GAAE;AAAA,MAAC;AAAA,IAAC;AAAM,aAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,WAAU;AAAC,eAAO;AAAA,MAAC,CAAC,IAAEA,IAAE,SAAO,CAAC,IAAE;AAAA,EAAC,GAAG,OAAO,QAAM,cAAY,OAAK,IAAG,CAAC,GAAE,IAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,MAAI,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG,GAAE,KAAG,GAAG;AAAE,KAAG,OAAK;AAAG,KAAG,SAAO;AAAG,KAAG,SAAO;AAAG,KAAG,YAAU;AAAG,KAAG,UAAQ;AAAG,KAAG,SAAO;AAAG,KAAG,UAAQ;AAAE,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,MAAI;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAAS,GAAE;AAAC,UAAE,KAAG,CAAC;AAAE,eAASC,MAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,eAAS,IAAG;AAAC,eAAO,GAAG,UAAQ,MAAI,GAAG,GAAG,MAAM,GAAE;AAAA,MAAE;AAAC,UAAI,IAAE,OAAO,KAAG,cAAY,IAAE,CAAC,GAAE,GAAE;AAAE,QAAE,QAAM,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,YAAE,GAAE,IAAE;AAAA,MAAC,CAAC;AAAE,UAAI;AAAE,aAAO,WAAS,eAAa,QAAQ,cAAY,IAAE,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAC;AAAG,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,kBAAiB,IAAE,CAAC,GAAE,MAAI;AAAC,cAAM;AAAA,MAAC,GAAE,IAAE,OAAO,UAAQ,UAAS,IAAE,OAAO,iBAAe,YAAW,IAAE,OAAO,WAAS,YAAU,OAAO,QAAQ,YAAU,YAAU,OAAO,QAAQ,SAAS,QAAM,UAAS,IAAE,EAAE,0BAAwB,OAAG,IAAE;AAAG,eAAS,EAAE,GAAE;AAAC,eAAO,EAAE,aAAW,EAAE,WAAW,GAAE,CAAC,IAAE,IAAE;AAAA,MAAC;AAAC,UAAI,GAAE,GAAE,GAAE;AAAE,eAAS,EAAE,GAAE;AAAC,YAAG,aAAa;AAAG;AAAO,UAAE,+BAA6B,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,GAAG;AAAE,YAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,MAAI,IAAE,YAAU,KAAI,IAAE,CAAC,GAAE,QAAM,IAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,aAAa,GAAE,KAAG,SAAO,MAAM,IAAG,IAAE,OAAG;AAAC,cAAI,KAAG,EAAE,GAAE,IAAE;AAAE,iBAAO,GAAG,WAAS,KAAG,IAAI,WAAW,EAAE,IAAG;AAAA,QAAE,GAAE,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,SAAS,GAAE,SAAS,IAAG,IAAG;AAAC,iBAAG,GAAG,EAAE,IAAE,GAAG,GAAG,MAAM;AAAA,UAAC,CAAC;AAAA,QAAC,GAAE,QAAQ,KAAK,SAAO,MAAI,IAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAM,GAAG,IAAG,IAAE,QAAQ,KAAK,MAAM,CAAC,GAAE,QAAQ,GAAG,qBAAoB,SAAS,GAAE;AAAC,cAAG,EAAE,aAAa;AAAI,kBAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG;AAAE,kBAAM,QAAQ,WAAS,GAAE;AAAG,YAAE,EAAE,GAAE,QAAQ,KAAK,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,WAAU;AAAC,iBAAM;AAAA,QAA4B;AAAE,YAAI;AAAE,YAAG;AAAC,cAAE,GAAG;AAAA,QAAC,SAAO,GAAE;AAAC,gBAAM,QAAQ,MAAM,yGAAyG,GAAE;AAAA,QAAC;AAAC,eAAO,SAAO,EAAE;AAAA,MAAM;AAAK,SAAC,KAAG,OAAK,IAAE,IAAE,KAAK,SAAS,OAAK,OAAO,YAAU,eAAa,SAAS,kBAAgB,IAAE,SAAS,cAAc,MAAK,OAAOD,OAAG,eAAaA,QAAI,IAAEA,MAAG,EAAE,QAAQ,OAAO,MAAI,IAAE,IAAE,EAAE,OAAO,GAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE,IAAG,MAAI,IAAE,OAAG;AAAC,cAAI,IAAE,IAAI;AAAe,iBAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,KAAK,IAAI,GAAE,EAAE;AAAA,QAAY,GAAE,MAAI,IAAE,OAAG;AAAC,cAAI,IAAE,IAAI;AAAe,iBAAO,EAAE,KAAK,OAAM,GAAE,KAAE,GAAE,EAAE,eAAa,eAAc,EAAE,KAAK,IAAI,GAAE,IAAI,WAAW,EAAE,QAAQ;AAAA,QAAC,IAAG,IAAE,CAAC,GAAE,GAAE,OAAK;AAAC,cAAI,KAAG,IAAI;AAAe,aAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,gBAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,gBAAE,GAAG,QAAQ;AAAE;AAAA,YAAM;AAAC,eAAG;AAAA,UAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,QAAC,IAAG,IAAE,OAAG,SAAS,QAAM;AAAG,WAAG,OAAO,eAAa,gBAAc,OAAO,cAAY,GAAG,EAAE;AAAa,UAAI,IAAE,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAE,QAAQ,KAAK,KAAK,OAAO;AAAE,YAAI,IAAE,OAAG,EAAE,UAAU,GAAE,IAAE;AAAA,CAC1loB,GAAE,IAAE,OAAG,EAAE,UAAU,GAAE,IAAE;AAAA,CACvB;AAAG,UAAI,IAAE,EAAE,SAAO,GAAE,IAAE,EAAE,YAAU;AAAE,aAAO,OAAO,GAAE,CAAC,GAAE,IAAE,MAAK,EAAE,cAAY,IAAE,EAAE,YAAW,EAAE,gBAAc,IAAE,EAAE,cAAa,EAAE,SAAO,IAAE,EAAE;AAAM,UAAI,IAAE,GAAE,IAAE,QAAQ,MAAK,IAAE,QAAQ,OAAM,KAAG,QAAQ,iBAAgB;AAAG,QAAE,eAAa,KAAG,EAAE;AAAY,UAAI,KAAG,EAAE,iBAAe;AAAG,aAAO,eAAa,YAAU,GAAG,iCAAiC;AAAE,UAAI,IAAG,IAAG,KAAG,OAAG;AAAG,eAAS,GAAG,GAAE,GAAE;AAAC,aAAG,GAAG,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,OAAO,eAAa,cAAY,IAAI,YAAY,MAAM,IAAE;AAAO,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAK;AAAE,iBAAQ,KAAG,IAAE,IAAG,KAAG,GAAE,EAAE,EAAE,KAAG,EAAE,MAAI;AAAK,YAAE;AAAG,YAAG,KAAG,IAAE,MAAI,EAAE,UAAQ;AAAG,iBAAO,GAAG,OAAO,EAAE,kBAAkB,oBAAkB,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,SAAS,GAAE,EAAE,CAAC;AAAE,iBAAQ,KAAG,IAAG,IAAE,MAAI;AAAC,cAAI,KAAG,EAAE,GAAG;AAAE,cAAG,EAAE,KAAG,MAAK;AAAC,kBAAI,OAAO,aAAa,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,GAAG,IAAE;AAAG,eAAI,KAAG,QAAM,KAAI;AAAC,kBAAI,OAAO,cAAc,KAAG,OAAK,IAAE,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,GAAG,IAAE;AAAG,eAAI,KAAG,QAAM,MAAI,MAAI,KAAG,OAAK,KAAG,MAAI,IAAE,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,EAAE,GAAG,IAAE,IAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,EAAE;AAAA,eAAM;AAAC,gBAAI,KAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,QAAM,MAAI,IAAG,QAAM,KAAG,IAAI;AAAA,UAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,eAAO,OAAK,GAAE,IAAE,GAAG,EAAE,GAAE,GAAE,CAAC,IAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,QAAM,GAAE,EAAE,KAAG;AAAG,iBAAO;AAAE,iBAAQ,KAAG,IAAG,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,EAAE,QAAO,EAAE,IAAG;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE;AAAE,cAAG,MAAI,SAAO,MAAI,OAAM;AAAC,gBAAI,KAAG,EAAE,WAAW,EAAE,EAAE;AAAE,iBAAG,UAAQ,KAAG,SAAO,MAAI,KAAG;AAAA,UAAI;AAAC,cAAG,MAAI,KAAI;AAAC,gBAAG,MAAI;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,OAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,cAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,KAAG,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,EAAE,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAC,eAAO,EAAE,OAAK,CAAC,IAAE,GAAE,KAAG;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAO,GAAG,GAAE,EAAE,GAAE,GAAE,EAAE;AAAA,MAAC;AAAC,UAAI,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG;AAAG,YAAI,KAAG,EAAE;AAAQ,eAAS,GAAG,GAAE;AAAC,aAAG,GAAE,EAAE,QAAM,KAAG,IAAI,UAAU,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC,GAAE,EAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAE,kBAAgB;AAAS,UAAG;AAAE,aAAG,EAAE,YAAW,KAAG,EAAE;AAAA,eAAe,EAAE;AAAW,aAAG,EAAE;AAAA,eAAmB,KAAG,IAAI,YAAY,OAAO,EAAC,SAAQ,KAAG,OAAM,SAAQ,OAAM,QAAO,KAAE,CAAC,GAAE,EAAE,GAAG,kBAAkB;AAAmB,cAAM,EAAE,6NAA6N,GAAE,KAAG,EAAE,2GAA2G,GAAE,MAAM,YAAY;AAAE,aAAK,KAAG,GAAG,SAAQ,KAAG,GAAG,YAAW,GAAG,EAAE;AAAE,UAAI,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,YAAG,EAAE;AAAO,eAAI,OAAO,EAAE,UAAQ,eAAa,EAAE,SAAO,CAAC,EAAE,MAAM,IAAG,EAAE,OAAO;AAAQ,eAAG,EAAE,OAAO,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,aAAG,MAAG,CAAC,KAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,GAAE;AAAC,cAAG,EAAE;AAAQ,iBAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ;AAAQ,iBAAG,EAAE,QAAQ,MAAM,CAAC;AAAE,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,GAAE,KAAG,MAAK,KAAG;AAAK,eAAS,GAAG,GAAE;AAAC,cAAK,EAAE,0BAAwB,EAAE,uBAAuB,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG,MAAK,EAAE,0BAAwB,EAAE,uBAAuB,EAAE,GAAE,MAAI,MAAI,OAAK,SAAO,cAAc,EAAE,GAAE,KAAG,OAAM,KAAI;AAAC,cAAI,IAAE;AAAG,eAAG,MAAK,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,UAAE,WAAS,EAAE,QAAQ,CAAC,GAAE,IAAE,aAAW,IAAE,KAAI,EAAE,CAAC,GAAE,KAAG,MAAG,KAAG,GAAE,KAAG;AAA2C,YAAI,IAAE,IAAI,YAAY,aAAa,CAAC;AAAE,cAAM,EAAE,CAAC,GAAE;AAAA,MAAC;AAAC,UAAI,KAAG;AAAwC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,SAAS;AAAA,MAAC;AAAC,UAAI;AAAG,WAAG,wCAAuC,GAAG,EAAE,MAAI,KAAG,EAAE,EAAE;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,cAAG,KAAG,MAAI;AAAG,mBAAO,IAAI,WAAW,EAAE;AAAE,cAAG;AAAE,mBAAO,EAAE,CAAC;AAAE,gBAAK;AAAA,QAAiD,SAAO,GAAE;AAAC,aAAG,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,OAAK,KAAG,IAAG;AAAC,cAAG,OAAO,SAAO,cAAY,CAAC,GAAG,EAAE;AAAE,mBAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,kBAAG,CAAC,EAAE;AAAG,sBAAK,yCAAuC,KAAG;AAAI,qBAAO,EAAE,YAAY;AAAA,YAAC,CAAC,EAAE,MAAM,WAAU;AAAC,qBAAO,GAAG,EAAE;AAAA,YAAC,CAAC;AAAE,cAAG;AAAE,mBAAO,IAAI,QAAQ,SAAS,GAAE,GAAE;AAAC,gBAAE,IAAG,SAAS,IAAG;AAAC,kBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,cAAC,GAAE,CAAC;AAAA,YAAC,CAAC;AAAA,QAAC;AAAC,eAAO,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,iBAAO,GAAG,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,EAAC,KAAI,IAAG,wBAAuB,GAAE;AAAE,iBAAS,EAAE,IAAG,IAAG;AAAC,cAAI,KAAG,GAAG;AAAQ,cAAG,EAAE,MAAI,IAAG,GAAG,EAAE,IAAI,oBAAoB,GAAE,KAAG,EAAE,IAAI,2BAA0B,GAAG,EAAE,IAAI,iBAAiB,GAAE,KAAG,IAAG,CAAC,GAAE;AAAC,gBAAI,KAAG,GAAG,cAAc;AAAO,eAAG,cAAc,QAAQ,SAAS,IAAG;AAAC,iBAAG,uBAAuB,IAAG,WAAU;AAAC,kBAAE,MAAI,GAAG,kBAAkB;AAAA,cAAC,CAAC;AAAA,YAAC,CAAC;AAAA,UAAC;AAAA,QAAC;AAAC,aAAG,GAAG,kBAAkB;AAAE,iBAAS,GAAG,IAAG;AAAC,YAAE,GAAG,UAAS,GAAG,MAAM;AAAA,QAAC;AAAC,iBAAS,GAAG,IAAG;AAAC,iBAAO,GAAG,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO,YAAY,YAAY,IAAG,CAAC;AAAA,UAAC,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO;AAAA,UAAE,CAAC,EAAE,KAAK,IAAG,SAAS,IAAG;AAAC,cAAE,4CAA0C,EAAE,GAAE,GAAG,EAAE;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,iBAAS,KAAI;AAAC,iBAAM,CAAC,MAAI,OAAO,YAAY,wBAAsB,cAAY,CAAC,GAAG,EAAE,KAAG,CAAC,GAAG,EAAE,KAAG,CAAC,KAAG,OAAO,SAAO,aAAW,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,gBAAI,KAAG,YAAY,qBAAqB,IAAG,CAAC;AAAE,mBAAO,GAAG,KAAK,IAAG,SAAS,IAAG;AAAC,qBAAO,EAAE,oCAAkC,EAAE,GAAE,EAAE,2CAA2C,GAAE,GAAG,EAAE;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAG,EAAE;AAAgB,cAAG;AAAC,gBAAI,KAAG,EAAE,gBAAgB,GAAE,CAAC;AAAE,mBAAO;AAAA,UAAE,SAAO,IAAG;AAAC,cAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,UAAC;AAAC,eAAO,GAAG,EAAE,MAAM,CAAC,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,IAAG,IAAG,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE;AAAC,aAAK,OAAK,cAAa,KAAK,UAAQ,kCAAgC,IAAE,KAAI,KAAK,SAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,eAAO,GAAG,SAAS,CAAC,GAAE,EAAE,UAAU,GAAE,GAAG,CAAC,GAAE,GAAG,eAAe,OAAO,GAAG,eAAe,QAAQ,CAAC,GAAE,CAAC,GAAE,EAAE,cAAY;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,UAAE,YAAY,EAAC,KAAI,SAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,SAAS,CAAC;AAAE,WAAG,CAAC,GAAE,GAAG,mBAAmB,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,aAAa;AAAE,YAAG,CAAC;AAAE,iBAAO;AAAE,WAAG,eAAe,KAAK,CAAC,GAAE,GAAG,SAAS,EAAE,WAAW,IAAE,GAAE,EAAE,cAAY,EAAE;AAAY,YAAI,KAAG,EAAC,KAAI,OAAM,eAAc,EAAE,cAAa,KAAI,EAAE,KAAI,aAAY,EAAE,YAAW;AAAE,eAAO,EAAE,aAAW,MAAI;AAAC,eAAG,EAAE,IAAI,GAAE,EAAE,YAAY,IAAG,EAAE,YAAY,GAAE,OAAO,EAAE;AAAA,QAAU,GAAE,EAAE,UAAQ,EAAE,WAAW,GAAE;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,SAAQ,QAAO,KAAI,WAAU;AAAC,WAAG,WAAS;AAAE,YAAI,IAAE,EAAE,EAAE,GAAG,UAAQ,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC,GAAE,QAAO,SAAS,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,eAAO;AAAA,MAAC,EAAC;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG;AAAE,iBAAO,GAAG,GAAE,GAAE,CAAC;AAAE,aAAG,GAAE,GAAG,MAAI,GAAG,oBAAoB,GAAE,EAAE,UAAQ,EAAE,OAAO,CAAC,GAAE,KAAG,OAAI,EAAE,GAAE,IAAI,GAAG,CAAC,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAG,KAAG,GAAE,CAAC,KAAG;AAAE,gBAAM,GAAG,CAAC,GAAE;AAAS,WAAG,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG,aAAa,MAAI,KAAG;AAAS,iBAAO;AAAG,UAAE,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,eAAc,CAAC,GAAE,gBAAe,CAAC,GAAE,kBAAiB,CAAC,GAAE,UAAS,CAAC,GAAE,MAAK,WAAU;AAAC,YAAE,GAAG,WAAW,IAAE,GAAG,eAAe;AAAA,MAAC,GAAE,gBAAe,WAAU;AAAC,iBAAQ,IAAE,GAAE;AAAK,aAAG,qBAAqB;AAAA,MAAC,GAAE,YAAW,WAAU;AAAC,aAAG;AAAA,MAAE,GAAE,eAAc,SAAS,GAAE;AAAC,aAAG;AAAA,MAAC,GAAE,qBAAoB,WAAU;AAAC,iBAAQ,KAAK,OAAO,OAAO,GAAG,QAAQ;AAAE,aAAG,mBAAmB,CAAC;AAAE,iBAAQ,KAAK,GAAG;AAAc,YAAE,UAAU;AAAE,WAAG,gBAAc,CAAC;AAAA,MAAC,GAAE,oBAAmB,SAAS,GAAE;AAAC,YAAI,IAAE,EAAE;AAAY,eAAO,GAAG,SAAS,CAAC,GAAE,GAAG,cAAc,KAAK,CAAC,GAAE,GAAG,eAAe,OAAO,GAAG,eAAe,QAAQ,CAAC,GAAE,CAAC,GAAE,EAAE,cAAY,GAAE,KAAG,EAAE,MAAM,GAAE,GAAG,CAAC;AAAA,MAAC,GAAE,uBAAsB,SAAS,GAAE;AAAA,MAAC,GAAE,eAAc,WAAU;AAAC,WAAG,iBAAiB,QAAQ,OAAG,EAAE,CAAC;AAAA,MAAC,GAAE,wBAAuB,SAAS,GAAE,GAAE;AAAC,UAAE,YAAU,QAAI;AAAC,cAAI,KAAG,GAAG,MAAK,KAAG,GAAG;AAAI,cAAG,EAAE,gBAAc,GAAG,sCAAoC,EAAE,cAAa,GAAG,gBAAc,GAAG,gBAAc,GAAG,GAAE;AAAC,gBAAI,KAAG,GAAG,SAAS,GAAG,YAAY;AAAE,iBAAG,GAAG,YAAY,IAAG,GAAG,YAAY,IAAE,EAAE,4CAA0C,KAAG,yBAAuB,GAAG,eAAa,qCAAqC,GAAE,GAAG,sCAAoC;AAAO;AAAA,UAAM;AAAC,iBAAK,yBAAuB,GAAG,GAAG,KAAK,IAAE,OAAK,gBAAc,GAAG,EAAE,IAAE,OAAK,kBAAgB,GAAG,GAAG,MAAM,IAAE,OAAK,eAAa,GAAG,GAAG,MAAM,IAAE,OAAK,iBAAe,GAAG,GAAG,MAAM,IAAE,OAAK,YAAU,EAAE,SAAO,MAAG,KAAG,EAAE,MAAM,GAAE,KAAG,EAAE,CAAC,GAAE,EAAE,cAAY,EAAE,WAAW,KAAG,OAAK,UAAQ,EAAE,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,OAAK,aAAW,EAAE,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,OAAK,UAAQ,MAAM,YAAU,GAAG,WAAS,OAAK,GAAG,IAAI,IAAE,GAAG,WAAS,iBAAe,EAAE,YAAY,EAAE,IAAE,OAAK,gBAAc,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,IAAI,IAAE,MAAI,EAAE,oCAAkC,EAAE,GAAE,GAAG,sCAAoC;AAAA,QAAM,GAAE,EAAE,UAAQ,QAAI;AAAC,cAAI,KAAG;AAAwB,gBAAM,EAAE,KAAG,MAAI,GAAG,WAAS,MAAI,GAAG,SAAO,OAAK,GAAG,OAAO,GAAE;AAAA,QAAE,GAAE,MAAI,EAAE,GAAG,WAAU,SAAS,IAAG;AAAC,YAAE,UAAU,EAAC,MAAK,GAAE,CAAC;AAAA,QAAC,CAAC,GAAE,EAAE,GAAG,SAAQ,SAAS,IAAG;AAAC,YAAE,QAAQ,EAAE;AAAA,QAAC,CAAC,GAAE,EAAE,GAAG,gBAAe,WAAU;AAAA,QAAC,CAAC;AAAG,YAAI,KAAG,CAAC,GAAE,KAAG,CAAC,UAAS,WAAU,SAAQ,UAAU;AAAE,iBAAQ,MAAM;AAAG,YAAE,eAAe,EAAE,KAAG,GAAG,KAAK,EAAE;AAAE,UAAE,YAAY,EAAC,KAAI,QAAO,UAAS,IAAG,WAAU,EAAE,uBAAqBA,KAAE,YAAW,IAAG,YAAW,GAAE,CAAC;AAAA,MAAC,GAAE,sBAAqB,WAAU;AAAC,YAAI,GAAE,IAAE,EAAE,2CAA2C;AAAE,YAAE,IAAI,OAAO,CAAC,GAAE,GAAG,cAAc,KAAK,CAAC;AAAA,MAAC,GAAE,cAAa,WAAU;AAAC,eAAO,GAAG,cAAc,UAAQ,MAAI,GAAG,qBAAqB,GAAE,GAAG,uBAAuB,GAAG,cAAc,CAAC,CAAC,IAAG,GAAG,cAAc,IAAI;AAAA,MAAC,EAAC;AAAE,QAAE,UAAQ;AAAG,eAAS,GAAG,GAAE;AAAC,eAAK,EAAE,SAAO;AAAG,YAAE,MAAM,EAAE,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,EAAE,EAAE,IAAE,OAAK,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,OAAK,CAAC,GAAE,KAAG,IAAE;AAAG,WAAG,GAAE,EAAE,GAAE,GAAG,CAAC;AAAA,MAAC;AAAC,QAAE,sBAAoB;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG;AAAE,iBAAO,GAAG,GAAE,GAAE,CAAC;AAAE,YAAG;AAAC,aAAG,CAAC;AAAA,QAAC,SAAO,GAAE;AAAC,aAAG,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,eAAO,MAAI,KAAG,GAAG,WAAS,GAAG,SAAO,IAAE,IAAG,GAAG,CAAC,IAAE,IAAE,GAAG,IAAI,CAAC,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,GAAG,CAAC,EAAE,CAAC;AAAE,WAAG,IAAE,GAAG,cAAc,EAAE,IAAE,GAAG,EAAE;AAAA,MAAC;AAAC,QAAE,mBAAiB;AAAG,eAAS,GAAG,GAAE;AAAC,WAAG,iBAAiB,KAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAG,cAAc;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAE,YAAY,EAAC,KAAI,iBAAgB,QAAO,EAAC,CAAC,IAAE,GAAG,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE,IAAE,GAAG,GAAE,GAAE,IAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,OAAO,qBAAmB;AAAY,iBAAO,EAAE,qFAAqF,GAAE;AAAE,YAAI,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG,MAAI,GAAG,WAAS,KAAG;AAAI,iBAAO,GAAG,GAAE,GAAE,IAAG,EAAE;AAAE,YAAG;AAAG,iBAAO;AAAG,YAAI,KAAG,EAAC,cAAa,IAAG,aAAY,GAAE,KAAI,IAAG,cAAa,GAAE;AAAE,eAAO,KAAG,GAAG,MAAI,eAAc,YAAY,IAAG,EAAE,GAAE,KAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAK;AAAC,UAAI,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE;AAAC,gBAAQ,MAAM,EAAE,GAAE,KAAG,GAAE,CAAC,GAAE,GAAG,KAAG,GAAG,CAAC,GAAE,QAAQ,gBAAgB,EAAE,GAAE,KAAG,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,QAAE,+BAA6B;AAAG,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG,KAAG;AAAE,qBAAW,MAAI,GAAG,EAAE,CAAC;AAAA,iBAAU;AAAE,sBAAY,EAAC,cAAa,GAAE,KAAI,wBAAuB,OAAM,GAAE,CAAC;AAAA,aAAM;AAAC,cAAI,KAAG,GAAG,SAAS,CAAC;AAAE,cAAG,CAAC;AAAG;AAAO,aAAG,YAAY,EAAC,KAAI,wBAAuB,OAAM,GAAE,CAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,eAAM;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,UAAQ,GAAG,QAAM,CAAC,IAAG,GAAG,MAAM,CAAC,MAAI,GAAG,MAAM,CAAC,IAAE,GAAE,MAAI,IAAE,cAAY,IAAG,EAAE,CAAC;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,aAAG,KAAG,GAAG,0IAA0I;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO,KAAK,IAAI;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAU;AAAC,eAAS,KAAI;AAAC,eAAO,GAAG;AAAA,MAAC;AAAC,UAAI;AAAG,UAAE,KAAG,MAAI;AAAC,YAAI,IAAE,QAAQ,OAAO;AAAE,eAAO,EAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAA,MAAG,IAAE,KAAG,MAAI,YAAY,aAAW,YAAY,IAAI;AAAE,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,UAAE,EAAE,WAAW,MAAI,GAAE,MAAI,GAAE,IAAE,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO,IAAE,GAAG,EAAE,KAAK,EAAE,SAAO,UAAU;AAAA,MAAmB;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,KAAG,EAAE;AAAE,eAAO,GAAG,CAAC,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,UAAU,SAAO,GAAE,KAAG;AAAU,eAAO,GAAG,MAAI;AAAC,mBAAQ,KAAG,IAAG,KAAG,GAAG,KAAG,CAAC,GAAE,KAAG,MAAI,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,gBAAI,KAAG,GAAG,IAAE,EAAE;AAAE,cAAE,EAAE,KAAG,OAAK,CAAC,IAAE;AAAA,UAAE;AAAC,iBAAO,GAAG,GAAE,IAAG,IAAG,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,CAAC;AAAE,eAAS,GAAG,GAAE,GAAE,IAAG;AAAC,WAAG,SAAO;AAAE,iBAAQ,KAAG,MAAI,GAAE,KAAG,GAAE,KAAG,GAAE;AAAK,aAAG,EAAE,IAAE,EAAE,EAAE,KAAG,OAAK,CAAC;AAAE,YAAI,KAAG,IAAE,GAAE,KAAG,KAAG,GAAG,CAAC,IAAE,CAAC,IAAE,GAAG,CAAC;AAAE,eAAO,GAAG,MAAM,MAAK,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,iBAAO,GAAG,KAAK,IAAE,GAAG,aAAW,UAAQ,EAAE,GAAE,GAAG,GAAG,MAAM,GAAE;AAAA,QAAC,SAAO,GAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE;AAAO,YAAG,IAAE,MAAI,GAAE,KAAG;AAAE,iBAAM;AAAG,YAAI,KAAG,GAAG;AAAE,YAAG,IAAE;AAAG,iBAAM;AAAG,YAAI,KAAG,CAAC,IAAG,OAAK,MAAI,KAAG,KAAG,MAAI;AAAG,iBAAQ,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE;AAAC,cAAI,KAAG,KAAG,IAAE,MAAG;AAAI,eAAG,KAAK,IAAI,IAAG,IAAE,SAAS;AAAE,cAAI,KAAG,KAAK,IAAI,IAAG,GAAG,KAAK,IAAI,GAAE,EAAE,GAAE,KAAK,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,cAAG;AAAG,mBAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,eAAS,KAAI;AAAC,cAAK;AAAA,MAAQ;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,CAAC,IAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG,IAAG;AAAC,eAAO,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,EAAE,IAAE;AAAA,MAAE;AAAC,UAAI,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,eAAS,GAAG,GAAE,GAAE;AAAC,YAAI,KAAG,GAAG,CAAC;AAAE,cAAI,KAAG,MAAI,OAAK,MAAI,IAAE,IAAE,GAAG,GAAG,IAAG,CAAC,CAAC,GAAE,GAAG,SAAO,KAAG,GAAG,KAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,YAAG;AAAE,iBAAO,GAAG,GAAE,GAAE,GAAE,GAAE,IAAG,EAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,cAAI,KAAG,EAAE,EAAE,MAAI,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,MAAI,CAAC;AAAE,eAAG;AAAE,mBAAQ,KAAG,GAAE,KAAG,IAAG;AAAK,eAAG,GAAE,EAAE,EAAE,KAAG,OAAK,CAAC,CAAC;AAAE,gBAAI;AAAA,QAAE;AAAC,eAAO,EAAE,EAAE,OAAK,CAAC,IAAE,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,IAAE,EAAE,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE;AAAC,QAAAC,IAAE,EAAE,IAAI,GAAE,MAAI,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG,IAAG;AAAC,YAAI,KAAG,EAAC,QAAO,QAAI;AAAC,cAAI,KAAG;AAAE,cAAG,MAAI,QAAM,OAAK,GAAE;AAAC,gBAAI,MAAI,GAAG,UAAQ,KAAG;AAAE,iBAAG,GAAG,EAAE,GAAE,GAAG,IAAG,IAAG,EAAE;AAAA,UAAC;AAAC,iBAAO;AAAA,QAAE,GAAE,OAAM,QAAI;AAAC,cAAI,KAAG,GAAG,GAAG,MAAM;AAAE,iBAAO,GAAG,IAAG,EAAE,GAAE;AAAA,QAAE,EAAC;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,MAAI,WAAS,GAAG,EAAE,IAAE,MAAI,YAAU,CAAC,CAAC,KAAG;AAAA,QAAE;AAAC,YAAI,KAAG,GAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,gBAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,kBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,UAAC;AAAC,YAAI,KAAG,GAAG,MAAM,MAAK,EAAE;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,KAAG,GAAG,EAAE,GAAE,GAAG,EAAE;AAAA,QAAC;AAAC,eAAO,KAAG,GAAG,EAAE,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,GAAE,IAAG,IAAG;AAAC,aAAG,MAAI,CAAC;AAAE,YAAI,KAAG,GAAG,MAAM,QAAI,OAAK,YAAU,OAAK,SAAS,GAAE,KAAG,MAAI;AAAS,eAAO,MAAI,MAAI,CAAC,KAAG,GAAG,CAAC,IAAE,WAAU;AAAC,iBAAO,GAAG,GAAE,GAAE,IAAG,WAAU,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,SAAG,KAAK;AAAE,UAAI,KAAG,CAAC,MAAK,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE,KAAG,EAAC,kCAAiC,IAAG,6BAA4B,IAAG,qBAAoB,IAAG,wCAAuC,IAAG,kCAAiC,IAAG,+BAA8B,IAAG,sCAAqC,IAAG,OAAM,IAAG,mCAAkC,IAAG,qBAAoB,IAAG,yBAAwB,IAAG,oBAAmB,IAAG,uBAAsB,IAAG,8BAA6B,IAAG,sCAAqC,IAAG,wBAAuB,IAAG,oCAAmC,IAAG,MAAK,IAAG,UAAS,IAAG,SAAQ,IAAG,UAAS,IAAG,QAAO,MAAI,EAAE,WAAU,GAAE,KAAG,GAAG,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAG,EAAE,mBAAiB,EAAE,IAAI,iBAAiB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAG,EAAE,0BAAwB,EAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,4BAA0B,WAAU;AAAC,gBAAO,KAAG,EAAE,4BAA0B,EAAE,IAAI,0BAA0B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAG,EAAE,kBAAgB,EAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAG,EAAE,wBAAsB,EAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,cAAY,WAAU;AAAC,gBAAO,KAAG,EAAE,cAAY,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,IAAE,EAAE,SAAO,WAAU;AAAC,gBAAO,IAAE,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAG,EAAE,kBAAgB,EAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,sBAAoB,WAAU;AAAC,gBAAO,KAAG,EAAE,sBAAoB,EAAE,IAAI,oBAAoB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAG,EAAE,yBAAuB,EAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,6BAA2B,WAAU;AAAC,gBAAO,KAAG,EAAE,6BAA2B,EAAE,IAAI,2BAA2B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAG,EAAE,oBAAkB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,SAAO,WAAU;AAAC,gBAAO,KAAG,EAAE,SAAO,EAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,WAAS,WAAU;AAAC,gBAAO,KAAG,EAAE,WAAS,EAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAG,EAAE,0BAAwB,EAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,iBAAe,WAAU;AAAC,gBAAO,KAAG,EAAE,iBAAe,EAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAG,EAAE,qBAAmB,EAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,OAAK,WAAU;AAAC,gBAAO,KAAG,EAAE,OAAK,EAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAG,EAAE,uBAAqB,EAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,UAAQ,WAAU;AAAC,gBAAO,KAAG,EAAE,UAAQ,EAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,QAAM,WAAU;AAAC,gBAAO,KAAG,EAAE,QAAM,EAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAG,EAAE,wBAAsB,EAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gBAAc,WAAU;AAAC,gBAAO,KAAG,EAAE,gBAAc,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAG,EAAE,oBAAkB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,8BAA4B,WAAU;AAAC,gBAAO,KAAG,EAAE,8BAA4B,EAAE,IAAI,4BAA4B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,+CAA6C,WAAU;AAAC,gBAAO,KAAG,EAAE,+CAA6C,EAAE,IAAI,6CAA6C,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,qCAAmC,WAAU;AAAC,gBAAO,KAAG,EAAE,qCAAmC,EAAE,IAAI,mCAAmC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,4CAA0C,WAAU;AAAC,gBAAO,KAAG,EAAE,4CAA0C,EAAE,IAAI,0CAA0C,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,kCAAgC,WAAU;AAAC,gBAAO,KAAG,EAAE,kCAAgC,EAAE,IAAI,gCAAgC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,wCAAsC,WAAU;AAAC,gBAAO,KAAG,EAAE,wCAAsC,EAAE,IAAI,sCAAsC,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,gCAA8B,WAAU;AAAC,gBAAO,KAAG,EAAE,gCAA8B,EAAE,IAAI,8BAA8B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAG,EAAE,2BAAyB,EAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,+BAA6B,WAAU;AAAC,gBAAO,KAAG,EAAE,+BAA6B,EAAE,IAAI,6BAA6B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,YAAU,WAAU;AAAC,gBAAO,KAAG,EAAE,YAAU,EAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,aAAW,WAAU;AAAC,gBAAO,KAAG,EAAE,aAAW,EAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAG,EAAE,mBAAiB,EAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAG,EAAE,eAAa,WAAU;AAAC,gBAAO,KAAG,EAAE,eAAa,EAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC;AAAE,QAAE,mBAAiB,IAAG,EAAE,aAAW,IAAG,EAAE,QAAM,IAAG,EAAE,aAAW,IAAG,EAAE,UAAQ;AAAG,UAAI;AAAG,WAAG,SAAS,IAAG;AAAC,cAAI,GAAG,GAAE,OAAK,KAAG;AAAA,MAAE;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG,IAAE,KAAG,GAAE,KAAG;AAAE;AAAO,YAAG,GAAE;AAAC,YAAE,CAAC,GAAE,GAAG,GAAE,YAAY,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,GAAG,GAAE,KAAG;AAAE;AAAO,iBAAS,IAAG;AAAC,iBAAK,KAAG,MAAG,EAAE,YAAU,MAAG,CAAC,OAAK,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,wBAAsB,EAAE,qBAAqB,GAAE,GAAG;AAAA,QAAG;AAAC,UAAE,aAAW,EAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,cAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC,GAAE,EAAE;AAAA,QAAC,GAAE,CAAC,KAAG,EAAE;AAAA,MAAC;AAAC,UAAG,EAAE;AAAQ,aAAI,OAAO,EAAE,WAAS,eAAa,EAAE,UAAQ,CAAC,EAAE,OAAO,IAAG,EAAE,QAAQ,SAAO;AAAG,YAAE,QAAQ,IAAI,EAAE;AAAE,SAAG;AAAE,UAAI;AAAG,YAAI,KAAG,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,kBAAkB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,mBAAmB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,EAAC;AAAG,UAAI;AAAG,UAAG,OAAO,qBAAmB;AAAY,aAAG;AAAA,eAA0B,OAAO,KAAG;AAAY,aAAG;AAAA;AAAO,cAAM,IAAI,MAAM,uCAAuC;AAAE,UAAG,IAAG;AAAC,YAAI,KAAG,GAAG;AAAS,WAAG,WAAS,WAAU;AAAC,aAAG,GAAE,GAAG,kBAAkB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,qBAAoB,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,mBAAmB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,sBAAqB,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAK;AAAA,EAAC,GAAG;AAAE,SAAO,MAAI,YAAU,OAAO,MAAI,WAAS,GAAG,UAAQ,KAAG,OAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,WAAU;AAAC,WAAO;AAAA,EAAE,CAAC,IAAE,OAAO,MAAI,aAAW,GAAG,gCAA8B;AAAG,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,KAAI,OAAK;AAAC,KAAG,QAAQ,qBAAmB;AAAA;AACvi3B,CAAC;AAAE,IAAI,KAAG,GAAG,CAAC,IAAG,OAAK;AAAC,MAAI,MAAI,MAAI;AAAC,QAAID,MAAE,OAAO,YAAU,eAAa,SAAS,gBAAc,SAAS,cAAc,MAAI;AAAO,WAAO,OAAO,cAAY,gBAAcA,MAAEA,OAAG,aAAY,SAAS,GAAE;AAAC,UAAE,KAAG,CAAC;AAAE,UAAIC,MAAE,OAAO,KAAG,cAAY,IAAE,CAAC,GAAE,GAAE;AAAE,MAAAA,IAAE,QAAM,IAAI,QAAQ,SAAS,GAAE,IAAG;AAAC,YAAE,GAAE,IAAE;AAAA,MAAE,CAAC;AAAE,UAAI;AAAE,aAAO,WAAS,eAAa,QAAQ,cAAY,IAAE,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAC;AAAG,UAAI,IAAE,OAAO,OAAO,CAAC,GAAEA,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,kBAAiB,IAAE,CAAC,GAAE,OAAK;AAAC,cAAM;AAAA,MAAE,GAAE,IAAE,OAAO,UAAQ,UAAS,IAAE,OAAO,iBAAe,YAAW,IAAE,OAAO,WAAS,YAAU,OAAO,QAAQ,YAAU,YAAU,OAAO,QAAQ,SAAS,QAAM,UAAS,IAAE;AAAG,eAAS,EAAE,GAAE;AAAC,eAAOA,IAAE,aAAWA,IAAE,WAAW,GAAE,CAAC,IAAE,IAAE;AAAA,MAAC;AAAC,UAAI,GAAE,GAAE,GAAE;AAAE,eAAS,EAAE,GAAE;AAAC,YAAG,aAAa;AAAG;AAAO,UAAE,+BAA6B,CAAC;AAAA,MAAC;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,IAAE,GAAG;AAAE,YAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,MAAI,IAAE,YAAU,KAAI,IAAE,CAAC,GAAE,QAAM,IAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,aAAa,GAAE,KAAG,SAAO,MAAM,IAAG,IAAE,OAAG;AAAC,cAAI,KAAG,EAAE,GAAE,IAAE;AAAE,iBAAO,GAAG,WAAS,KAAG,IAAI,WAAW,EAAE,IAAG;AAAA,QAAE,GAAE,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAE,GAAG,CAAC,IAAE,IAAI,IAAI,CAAC,IAAE,EAAE,UAAU,CAAC,GAAE,EAAE,SAAS,GAAE,SAAS,IAAG,IAAG;AAAC,iBAAG,GAAG,EAAE,IAAE,GAAG,GAAG,MAAM;AAAA,UAAC,CAAC;AAAA,QAAC,GAAE,QAAQ,KAAK,SAAO,MAAI,IAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,OAAM,GAAG,IAAG,IAAE,QAAQ,KAAK,MAAM,CAAC,GAAE,QAAQ,GAAG,qBAAoB,SAAS,GAAE;AAAC,cAAG,EAAE,aAAa;AAAI,kBAAM;AAAA,QAAC,CAAC,GAAE,QAAQ,GAAG,sBAAqB,SAAS,GAAE;AAAC,gBAAM;AAAA,QAAC,CAAC,GAAE,IAAE,CAAC,GAAE,OAAK;AAAC,cAAG,GAAG;AAAE,kBAAM,QAAQ,WAAS,GAAE;AAAG,YAAE,EAAE,GAAE,QAAQ,KAAK,CAAC;AAAA,QAAC,GAAEA,IAAE,UAAQ,WAAU;AAAC,iBAAM;AAAA,QAA4B;AAAA,MAAC;AAAK,SAAC,KAAG,OAAK,IAAE,IAAE,KAAK,SAAS,OAAK,OAAO,YAAU,eAAa,SAAS,kBAAgB,IAAE,SAAS,cAAc,MAAKD,QAAI,IAAEA,MAAG,EAAE,QAAQ,OAAO,MAAI,IAAE,IAAE,EAAE,OAAO,GAAE,EAAE,QAAQ,UAAS,EAAE,EAAE,YAAY,GAAG,IAAE,CAAC,IAAE,IAAE,IAAG,IAAE,OAAG;AAAC,cAAI,KAAG,IAAI;AAAe,iBAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,KAAK,IAAI,GAAE,GAAG;AAAA,QAAY,GAAE,MAAI,IAAE,OAAG;AAAC,cAAI,KAAG,IAAI;AAAe,iBAAO,GAAG,KAAK,OAAM,GAAE,KAAE,GAAE,GAAG,eAAa,eAAc,GAAG,KAAK,IAAI,GAAE,IAAI,WAAW,GAAG,QAAQ;AAAA,QAAC,IAAG,IAAE,CAAC,GAAE,IAAG,OAAK;AAAC,cAAI,KAAG,IAAI;AAAe,aAAG,KAAK,OAAM,GAAE,IAAE,GAAE,GAAG,eAAa,eAAc,GAAG,SAAO,MAAI;AAAC,gBAAG,GAAG,UAAQ,OAAK,GAAG,UAAQ,KAAG,GAAG,UAAS;AAAC,iBAAG,GAAG,QAAQ;AAAE;AAAA,YAAM;AAAC,eAAG;AAAA,UAAC,GAAE,GAAG,UAAQ,IAAG,GAAG,KAAK,IAAI;AAAA,QAAC,GAAE,IAAE,OAAG,SAAS,QAAM;AAAG,UAAI,IAAEC,IAAE,SAAO,QAAQ,IAAI,KAAK,OAAO,GAAE,IAAEA,IAAE,YAAU,QAAQ,KAAK,KAAK,OAAO;AAAE,aAAO,OAAOA,KAAE,CAAC,GAAE,IAAE,MAAKA,IAAE,cAAY,IAAEA,IAAE,YAAWA,IAAE,gBAAc,IAAEA,IAAE,cAAaA,IAAE,SAAO,IAAEA,IAAE;AAAM,UAAI,IAAE,GAAE;AAAE,MAAAA,IAAE,eAAa,IAAEA,IAAE;AAAY,UAAI,IAAEA,IAAE,iBAAe;AAAG,aAAO,eAAa,YAAU,GAAG,iCAAiC;AAAE,UAAI,GAAE,IAAE,OAAG;AAAE,eAAS,EAAE,GAAE,IAAG;AAAC,aAAG,GAAG,EAAE;AAAA,MAAC;AAAC,UAAI,IAAE,OAAO,eAAa,cAAY,IAAI,YAAY,MAAM,IAAE;AAAO,eAAS,EAAE,GAAE,IAAG,IAAG;AAAC,gBAAM;AAAE,iBAAQ,KAAG,KAAG,IAAG,KAAG,IAAG,EAAE,EAAE,KAAG,EAAE,MAAI;AAAK,YAAE;AAAG,YAAG,KAAG,KAAG,MAAI,EAAE,UAAQ;AAAE,iBAAO,EAAE,OAAO,EAAE,SAAS,IAAG,EAAE,CAAC;AAAE,iBAAQ,KAAG,IAAG,KAAG,MAAI;AAAC,cAAI,KAAG,EAAE,IAAI;AAAE,cAAG,EAAE,KAAG,MAAK;AAAC,kBAAI,OAAO,aAAa,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,IAAI,IAAE;AAAG,eAAI,KAAG,QAAM,KAAI;AAAC,kBAAI,OAAO,cAAc,KAAG,OAAK,IAAE,EAAE;AAAE;AAAA,UAAQ;AAAC,cAAI,KAAG,EAAE,IAAI,IAAE;AAAG,eAAI,KAAG,QAAM,MAAI,MAAI,KAAG,OAAK,KAAG,MAAI,IAAE,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,EAAE,IAAI,IAAE,IAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,EAAE;AAAA,eAAM;AAAC,gBAAI,KAAG,KAAG;AAAM,kBAAI,OAAO,aAAa,QAAM,MAAI,IAAG,QAAM,KAAG,IAAI;AAAA,UAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG;AAAC,eAAO,OAAK,GAAE,IAAE,EAAE,IAAG,GAAE,EAAE,IAAE;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG,IAAG,IAAG;AAAC,YAAG,QAAM,GAAE,EAAE,KAAG;AAAG,iBAAO;AAAE,iBAAQ,KAAG,IAAG,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,EAAE,QAAO,EAAE,IAAG;AAAC,cAAI,KAAG,EAAE,WAAW,EAAE;AAAE,cAAG,MAAI,SAAO,MAAI,OAAM;AAAC,gBAAI,KAAG,EAAE,WAAW,EAAE,EAAE;AAAE,iBAAG,UAAQ,KAAG,SAAO,MAAI,KAAG;AAAA,UAAI;AAAC,cAAG,MAAI,KAAI;AAAC,gBAAG,MAAI;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE;AAAA,UAAE,WAAS,MAAI,MAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,GAAE,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,WAAS,MAAI,OAAM;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE,OAAK;AAAC,gBAAG,KAAG,KAAG;AAAG;AAAM,eAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,KAAG,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,MAAI,IAAE,IAAG,GAAG,SAAO,CAAC,IAAE,MAAI,KAAG;AAAA,UAAE;AAAA,QAAC;AAAC,eAAO,GAAG,OAAK,CAAC,IAAE,GAAE,KAAG;AAAA,MAAE;AAAC,eAAS,EAAE,GAAE,IAAG,IAAG;AAAC,eAAO,EAAE,GAAE,IAAG,IAAG,EAAE;AAAA,MAAC;AAAC,UAAI,GAAE,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG;AAAG,eAAS,GAAG,GAAE;AAAC,YAAE,GAAEA,IAAE,QAAM,KAAG,IAAI,UAAU,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,SAAO,KAAG,IAAI,WAAW,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,YAAY,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,aAAa,CAAC,GAAEA,IAAE,UAAQ,KAAG,IAAI,aAAa,CAAC;AAAA,MAAC;AAAC,UAAI,KAAGA,IAAE,kBAAgB,UAAS,IAAG,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAG,eAAS,KAAI;AAAC,eAAO;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAGA,IAAE;AAAO,eAAI,OAAOA,IAAE,UAAQ,eAAaA,IAAE,SAAO,CAACA,IAAE,MAAM,IAAGA,IAAE,OAAO;AAAQ,eAAGA,IAAE,OAAO,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,aAAG,MAAG,GAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAGA,IAAE;AAAQ,eAAI,OAAOA,IAAE,WAAS,eAAaA,IAAE,UAAQ,CAACA,IAAE,OAAO,IAAGA,IAAE,QAAQ;AAAQ,eAAGA,IAAE,QAAQ,MAAM,CAAC;AAAE,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,WAAG,QAAQ,CAAC;AAAA,MAAC;AAAC,UAAI,KAAG,GAAE,KAAG,MAAK,KAAG;AAAK,eAAS,GAAG,GAAE;AAAC,cAAKA,IAAE,0BAAwBA,IAAE,uBAAuB,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG,MAAKA,IAAE,0BAAwBA,IAAE,uBAAuB,EAAE,GAAE,MAAI,MAAI,OAAK,SAAO,cAAc,EAAE,GAAE,KAAG,OAAM,KAAI;AAAC,cAAI,KAAG;AAAG,eAAG,MAAK,GAAG;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,QAAAA,IAAE,WAASA,IAAE,QAAQ,CAAC,GAAE,IAAE,aAAW,IAAE,KAAI,EAAE,CAAC,GAAE,IAAE,MAAG,IAAE,GAAE,KAAG;AAA2C,YAAI,KAAG,IAAI,YAAY,aAAa,CAAC;AAAE,cAAM,EAAE,EAAE,GAAE;AAAA,MAAE;AAAC,UAAI,KAAG;AAAwC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAO,EAAE,WAAW,SAAS;AAAA,MAAC;AAAC,UAAI;AAAG,WAAG,0BAAyB,GAAG,EAAE,MAAI,KAAG,EAAE,EAAE;AAAG,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,cAAG,KAAG,MAAI;AAAE,mBAAO,IAAI,WAAW,CAAC;AAAE,cAAG;AAAE,mBAAO,EAAE,CAAC;AAAE,gBAAK;AAAA,QAAiD,SAAO,IAAG;AAAC,aAAG,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAG,CAAC,MAAI,KAAG,IAAG;AAAC,cAAG,OAAO,SAAO,cAAY,CAAC,GAAG,EAAE;AAAE,mBAAO,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,GAAE;AAAC,kBAAG,CAAC,EAAE;AAAG,sBAAK,yCAAuC,KAAG;AAAI,qBAAO,EAAE,YAAY;AAAA,YAAC,CAAC,EAAE,MAAM,WAAU;AAAC,qBAAO,GAAG,EAAE;AAAA,YAAC,CAAC;AAAE,cAAG;AAAE,mBAAO,IAAI,QAAQ,SAAS,GAAE,IAAG;AAAC,gBAAE,IAAG,SAAS,IAAG;AAAC,kBAAE,IAAI,WAAW,EAAE,CAAC;AAAA,cAAC,GAAE,EAAE;AAAA,YAAC,CAAC;AAAA,QAAC;AAAC,eAAO,QAAQ,QAAQ,EAAE,KAAK,WAAU;AAAC,iBAAO,GAAG,EAAE;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,YAAI,IAAE,EAAC,KAAI,IAAG,wBAAuB,GAAE;AAAE,iBAAS,GAAG,IAAG,IAAG;AAAC,cAAI,KAAG,GAAG;AAAQ,UAAAA,IAAE,MAAI,IAAG,IAAEA,IAAE,IAAI,QAAO,GAAG,EAAE,MAAM,GAAE,KAAGA,IAAE,IAAI,2BAA0B,GAAGA,IAAE,IAAI,iBAAiB,GAAE,GAAG,kBAAkB;AAAA,QAAC;AAAC,WAAG,kBAAkB;AAAE,iBAAS,GAAG,IAAG;AAAC,aAAG,GAAG,QAAQ;AAAA,QAAC;AAAC,iBAAS,GAAG,IAAG;AAAC,iBAAO,GAAG,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO,YAAY,YAAY,IAAG,CAAC;AAAA,UAAC,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,mBAAO;AAAA,UAAE,CAAC,EAAE,KAAK,IAAG,SAAS,IAAG;AAAC,cAAE,4CAA0C,EAAE,GAAE,GAAG,EAAE;AAAA,UAAC,CAAC;AAAA,QAAC;AAAC,iBAAS,KAAI;AAAC,iBAAM,CAAC,KAAG,OAAO,YAAY,wBAAsB,cAAY,CAAC,GAAG,EAAE,KAAG,CAAC,GAAG,EAAE,KAAG,CAAC,KAAG,OAAO,SAAO,aAAW,MAAM,IAAG,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,SAAS,IAAG;AAAC,gBAAI,KAAG,YAAY,qBAAqB,IAAG,CAAC;AAAE,mBAAO,GAAG,KAAK,IAAG,SAAS,IAAG;AAAC,qBAAO,EAAE,oCAAkC,EAAE,GAAE,EAAE,2CAA2C,GAAE,GAAG,EAAE;AAAA,YAAC,CAAC;AAAA,UAAC,CAAC,IAAE,GAAG,EAAE;AAAA,QAAC;AAAC,YAAGA,IAAE;AAAgB,cAAG;AAAC,gBAAI,KAAGA,IAAE,gBAAgB,GAAE,EAAE;AAAE,mBAAO;AAAA,UAAE,SAAO,IAAG;AAAC,cAAE,wDAAsD,EAAE,GAAE,EAAE,EAAE;AAAA,UAAC;AAAC,eAAO,GAAG,EAAE,MAAM,CAAC,GAAE,CAAC;AAAA,MAAC;AAAC,UAAI,IAAG;AAAG,eAAS,GAAG,GAAE;AAAC,aAAK,OAAK,cAAa,KAAK,UAAQ,kCAAgC,IAAE,KAAI,KAAK,SAAO;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,eAAK,EAAE,SAAO;AAAG,YAAE,MAAM,EAAEA,GAAC;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,WAAG,EAAE;AAAA,MAAC;AAAC,eAAS,KAAI;AAAC,eAAO;AAAA,MAAU;AAAC,eAAS,KAAI;AAAC,eAAO,GAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG;AAAC,WAAG,WAAW,MAAI,GAAE,OAAK,GAAE,KAAG,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAG;AAAC,iBAAO,EAAE,KAAK,IAAE,EAAE,aAAW,UAAQ,EAAE,GAAE,GAAG,EAAE,MAAM,GAAE;AAAA,QAAC,SAAO,IAAG;AAAA,QAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAG,GAAG;AAAO,YAAE,MAAI;AAAE,YAAI,KAAG,GAAG;AAAE,YAAG,IAAE;AAAG,iBAAM;AAAG,YAAI,KAAG,CAAC,IAAG,OAAK,MAAI,KAAG,KAAG,MAAI;AAAG,iBAAQ,KAAG,GAAE,MAAI,GAAE,MAAI,GAAE;AAAC,cAAI,KAAG,MAAI,IAAE,MAAG;AAAI,eAAG,KAAK,IAAI,IAAG,IAAE,SAAS;AAAE,cAAI,KAAG,KAAK,IAAI,IAAG,GAAG,KAAK,IAAI,GAAE,EAAE,GAAE,KAAK,CAAC,GAAE,KAAG,GAAG,EAAE;AAAE,cAAG;AAAG,mBAAM;AAAA,QAAE;AAAC,eAAM;AAAA,MAAE;AAAC,UAAI,KAAG,EAAC,SAAQ,QAAO,KAAI,WAAU;AAAC,WAAG,WAAS;AAAE,YAAI,IAAE,GAAG,GAAG,UAAQ,MAAI,CAAC;AAAE,eAAO;AAAA,MAAC,GAAE,QAAO,SAAS,GAAE;AAAC,YAAI,KAAG,EAAE,CAAC;AAAE,eAAO;AAAA,MAAE,EAAC;AAAE,eAAS,GAAG,GAAE;AAAC,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG,IAAG;AAAC,eAAO;AAAA,MAAE;AAAC,UAAI,KAAG,CAAC,MAAK,CAAC,GAAE,CAAC,CAAC;AAAE,eAAS,GAAG,GAAE,IAAG;AAAC,YAAI,KAAG,GAAG,CAAC;AAAE,eAAK,KAAG,OAAK,OAAK,MAAI,IAAE,IAAE,GAAG,EAAE,IAAG,CAAC,CAAC,GAAE,GAAG,SAAO,KAAG,GAAG,KAAK,EAAE;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG;AAAC,iBAAQ,KAAG,GAAE,KAAG,GAAE,KAAG,IAAG,MAAK;AAAC,cAAI,KAAG,GAAG,OAAK,CAAC,GAAE,KAAG,GAAG,KAAG,MAAI,CAAC;AAAE,gBAAI;AAAE,mBAAQ,KAAG,GAAE,KAAG,IAAG;AAAK,eAAG,GAAE,GAAG,KAAG,OAAK,CAAC,CAAC;AAAE,gBAAI;AAAA,QAAE;AAAC,eAAO,GAAG,OAAK,CAAC,IAAE,IAAG;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE;AAAC,YAAI,KAAGA,IAAE,MAAI,CAAC;AAAE,eAAO;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG;AAAC,WAAG,IAAI,GAAE,OAAK,CAAC;AAAA,MAAC;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG,IAAG;AAAC,YAAI,KAAG,EAAC,QAAO,QAAI;AAAC,cAAI,KAAG;AAAE,cAAG,MAAI,QAAM,OAAK,GAAE;AAAC,gBAAI,MAAI,GAAG,UAAQ,KAAG;AAAE,iBAAG,GAAG,EAAE,GAAE,EAAE,IAAG,IAAG,EAAE;AAAA,UAAC;AAAC,iBAAO;AAAA,QAAE,GAAE,OAAM,QAAI;AAAC,cAAI,KAAG,GAAG,GAAG,MAAM;AAAE,iBAAO,GAAG,IAAG,EAAE,GAAE;AAAA,QAAE,EAAC;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,WAAS,EAAE,EAAE,IAAE,OAAK,YAAU,CAAC,CAAC,KAAG;AAAA,QAAE;AAAC,YAAI,KAAG,GAAG,CAAC,GAAE,KAAG,CAAC,GAAE,KAAG;AAAE,YAAG;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAG,QAAO,MAAK;AAAC,gBAAI,KAAG,GAAG,GAAG,EAAE,CAAC;AAAE,kBAAI,OAAK,MAAI,KAAG,GAAG,IAAG,GAAG,EAAE,IAAE,GAAG,GAAG,EAAE,CAAC,KAAG,GAAG,EAAE,IAAE,GAAG,EAAE;AAAA,UAAC;AAAC,YAAI,KAAG,GAAG,MAAM,MAAK,EAAE;AAAE,iBAAS,GAAG,IAAG;AAAC,iBAAO,OAAK,KAAG,GAAG,EAAE,GAAE,GAAG,EAAE;AAAA,QAAC;AAAC,eAAO,KAAG,GAAG,EAAE,GAAE;AAAA,MAAE;AAAC,eAAS,GAAG,GAAE,IAAG,IAAG,IAAG;AAAC,aAAG,MAAI,CAAC;AAAE,YAAI,KAAG,GAAG,MAAM,QAAI,OAAK,YAAU,OAAK,SAAS,GAAE,KAAG,OAAK;AAAS,eAAO,MAAI,MAAI,CAAC,KAAG,GAAG,CAAC,IAAE,WAAU;AAAC,iBAAO,GAAG,GAAE,IAAG,IAAG,WAAU,EAAE;AAAA,QAAC;AAAA,MAAC;AAAC,UAAI,KAAG,EAAC,OAAM,IAAG,yBAAwB,IAAG,uBAAsB,IAAG,wBAAuB,IAAG,UAAS,IAAG,SAAQ,IAAG,UAAS,GAAE,GAAE,KAAG,GAAG,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAGA,IAAE,2BAAyBA,IAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAGA,IAAE,mBAAiBA,IAAE,IAAI,iBAAiB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAGA,IAAE,0BAAwBA,IAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,4BAA0B,WAAU;AAAC,gBAAO,KAAGA,IAAE,4BAA0BA,IAAE,IAAI,0BAA0B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,2BAAyB,WAAU;AAAC,gBAAO,KAAGA,IAAE,2BAAyBA,IAAE,IAAI,yBAAyB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAGA,IAAE,kBAAgBA,IAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,wBAAsB,WAAU;AAAC,gBAAO,KAAGA,IAAE,wBAAsBA,IAAE,IAAI,sBAAsB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,aAAa,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,cAAY,WAAU;AAAC,gBAAO,KAAGA,IAAE,cAAYA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,kBAAgB,WAAU;AAAC,gBAAO,KAAGA,IAAE,kBAAgBA,IAAE,IAAI,gBAAgB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,sBAAoB,WAAU;AAAC,gBAAO,KAAGA,IAAE,sBAAoBA,IAAE,IAAI,oBAAoB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,yBAAuB,WAAU;AAAC,gBAAO,KAAGA,IAAE,yBAAuBA,IAAE,IAAI,uBAAuB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,6BAA2B,WAAU;AAAC,gBAAO,KAAGA,IAAE,6BAA2BA,IAAE,IAAI,2BAA2B,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAGA,IAAE,oBAAkBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,SAAO,WAAU;AAAC,gBAAO,KAAGA,IAAE,SAAOA,IAAE,IAAI,OAAO,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,WAAS,WAAU;AAAC,gBAAO,KAAGA,IAAE,WAASA,IAAE,IAAI,SAAS,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,UAAU,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,0BAAwB,WAAU;AAAC,gBAAO,KAAGA,IAAE,0BAAwBA,IAAE,IAAI,wBAAwB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,iBAAe,WAAU;AAAC,gBAAO,KAAGA,IAAE,iBAAeA,IAAE,IAAI,eAAe,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,qBAAmB,WAAU;AAAC,gBAAO,KAAGA,IAAE,qBAAmBA,IAAE,IAAI,mBAAmB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,OAAK,WAAU;AAAC,gBAAO,KAAGA,IAAE,OAAKA,IAAE,IAAI,KAAK,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,uBAAqB,WAAU;AAAC,gBAAO,KAAGA,IAAE,uBAAqBA,IAAE,IAAI,qBAAqB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,gBAAc,WAAU;AAAC,gBAAO,KAAGA,IAAE,gBAAcA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,UAAQ,WAAU;AAAC,gBAAO,KAAGA,IAAE,UAAQA,IAAE,IAAI,QAAQ,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,QAAM,WAAU;AAAC,gBAAO,KAAGA,IAAE,QAAMA,IAAE,IAAI,MAAM,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,oBAAkB,WAAU;AAAC,gBAAO,KAAGA,IAAE,oBAAkBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,YAAU,WAAU;AAAC,gBAAO,KAAGA,IAAE,YAAUA,IAAE,IAAI,WAAW,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,aAAW,WAAU;AAAC,gBAAO,KAAGA,IAAE,aAAWA,IAAE,IAAI,YAAY,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,mBAAiB,WAAU;AAAC,gBAAO,KAAGA,IAAE,mBAAiBA,IAAE,IAAI,kBAAkB,MAAM,MAAK,SAAS;AAAA,MAAC,GAAE,KAAGA,IAAE,eAAa,WAAU;AAAC,gBAAO,KAAGA,IAAE,eAAaA,IAAE,IAAI,cAAc,MAAM,MAAK,SAAS;AAAA,MAAC;AAAE,MAAAA,IAAE,QAAM;AAAG,UAAI;AAAG,WAAG,SAAS,IAAG;AAAC,cAAI,GAAG,GAAE,OAAK,KAAG;AAAA,MAAE;AAAE,eAAS,GAAG,GAAE;AAAC,YAAG,IAAE,KAAG,GAAE,KAAG,MAAI,GAAG,GAAE,KAAG;AAAG;AAAO,iBAAS,KAAI;AAAC,iBAAK,KAAG,MAAGA,IAAE,YAAU,MAAG,CAAC,MAAI,GAAG,GAAE,EAAEA,GAAC,GAAEA,IAAE,wBAAsBA,IAAE,qBAAqB,GAAE,GAAG;AAAA,QAAG;AAAC,QAAAA,IAAE,aAAWA,IAAE,UAAU,YAAY,GAAE,WAAW,WAAU;AAAC,qBAAW,WAAU;AAAC,YAAAA,IAAE,UAAU,EAAE;AAAA,UAAC,GAAE,CAAC,GAAE,GAAG;AAAA,QAAC,GAAE,CAAC,KAAG,GAAG;AAAA,MAAC;AAAC,UAAGA,IAAE;AAAQ,aAAI,OAAOA,IAAE,WAAS,eAAaA,IAAE,UAAQ,CAACA,IAAE,OAAO,IAAGA,IAAE,QAAQ,SAAO;AAAG,UAAAA,IAAE,QAAQ,IAAI,EAAE;AAAE,SAAG;AAAE,UAAI;AAAG,YAAI,KAAG,EAAC,mBAAkB,QAAQ,UAAU,mBAAmB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,kBAAkB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,GAAE,oBAAmB,QAAQ,UAAU,oBAAoB,EAAE,OAAO,SAAS,GAAE;AAAC,eAAM,CAAC,EAAE,mBAAmB,QAAQ,CAAC,IAAE;AAAA,MAAE,CAAC,EAAC;AAAG,UAAI;AAAG,UAAG,OAAO,KAAG;AAAY,aAAG;AAAA,eAAU,OAAO,iCAA+B;AAAY,aAAG;AAAA;AAAmC,cAAM,IAAI,MAAM,uCAAuC;AAAE,UAAG,IAAG;AAAC,YAAI,KAAG,GAAG;AAAS,WAAG,WAAS,WAAU;AAAC,aAAG,GAAE,GAAG,kBAAkB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,qBAAoB,CAAC;AAAA,UAAC,CAAC,GAAE,GAAG,mBAAmB,QAAQ,SAAS,GAAE;AAAC,oBAAQ,eAAe,sBAAqB,CAAC;AAAA,UAAC,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,aAAO,EAAE;AAAA,IAAK;AAAA,EAAC,GAAG;AAAE,SAAO,MAAI,YAAU,OAAO,MAAI,WAAS,GAAG,UAAQ,KAAG,OAAO,UAAQ,cAAY,OAAO,MAAI,OAAO,CAAC,GAAE,WAAU;AAAC,WAAO;AAAA,EAAE,CAAC,IAAE,OAAO,MAAI,aAAW,GAAG,oBAAkB;AAAG,CAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,UAAQ,GAAE,KAAK,YAAUA,KAAE,KAAK,OAAK,oBAAI,WAAQ,KAAK,eAAa;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC,KAAG,KAAK,UAAU,SAAS,KAAK,SAAQ,CAAC,GAAE,KAAK,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAEA,KAAE;AAAC,SAAK,gBAAe,KAAK,KAAK,IAAI,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,WAAO,KAAK,gBAAe,KAAK,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK;AAAA,EAAY;AAAC;AAA/W,IAAiX,KAAG,MAAK;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,WAAO,GAAG,QAAQ;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,UAAU;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,WAAO,GAAG,WAAW;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,YAAY;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,WAAO,GAAG,aAAa;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,OAAO;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,MAAM;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,yBAAyB;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAO,GAAG,QAAQ;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO,GAAG,gBAAgB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,eAAe,MAAI,KAAG,OAAK;AAAA,EAAI;AAAA,EAAC,UAAS;AAAC,WAAO,GAAG,SAAS;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,QAAM,IAAI,MAAM,IAAIA,GAAC,0HAA0H;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,QAAOC,MAAE;AAAE,SAAK,IAAE;AAAG,IAAAA,MAAE,KAAK,OAAO,IAAE,IAAE,GAAE,KAAI,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,yEAAyEA,IAAE,MAAM,2BAA2B,EAAE,MAAM,EAAE;AAAE,MAAIC,MAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE;AAAG,QAAE,KAAK,OAAO,IAAEA,MAAE,GAAEA,OAAI,GAAGD,KAAEC,KAAE,CAAC,GAAE,GAAG,GAAEA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,KAAK,IAAID,KAAE,KAAK,IAAI,GAAEC,GAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI,IAAEA,MAAEA,MAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,EAAAA,IAAE,CAAC,IAAEA,IAAEC,GAAC,GAAED,IAAEC,GAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC;AAAI,SAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,OAAO;AAAE,SAAO,IAAEA,OAAG,IAAEA,OAAGD;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAE,OAAOA,IAAE,CAAC,CAAC,IAAE,OAAO,EAAE,CAAC,CAAC;AAAE,IAAAC,OAAG,IAAE;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,EAAED,KAAE,GAAE;AAAC,MAAG,CAACA;AAAE,UAAM,IAAI,MAAM,OAAO,KAAG,WAAS,IAAE,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,IAAG;AAAC,IAAE,GAAGD,KAAE,CAAC,GAAE,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,IAAEA,OAAG,MAAK,MAAI,+DAA+D;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,WAAS;AAAE,WAAO;AAAE,MAAI,IAAEA,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC;AAAI,SAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAGA,OAAG,QAAM,KAAG,QAAMA,IAAE,WAAS,EAAE;AAAO,WAAM;AAAG,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC;AAAI,QAAGD,IAAEC,GAAC,MAAI,QAAM,EAAEA,GAAC,MAAI,QAAMD,IAAEC,GAAC,MAAI,EAAEA,GAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAGA,OAAG,QAAM,KAAG,QAAMA,IAAE,WAAS,EAAE;AAAO,WAAM;AAAG,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC;AAAI,QAAGD,IAAEC,GAAC,MAAI,EAAEA,GAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,KAAK,QAAM;AAAK,WAAO,KAAK,KAAKA,GAAC;AAAE,MAAGA,QAAI,IAAE;AAAE,WAAO;AAAE,MAAGA,QAAI,KAAG;AAAE,WAAM;AAAG;AAAC,QAAI,IAAE,KAAK,IAAI,IAAEA,GAAC;AAAE,YAAO,IAAE,MAAI,IAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,KAAK,KAAK,KAAK,KAAKA,GAAC,CAAC;AAAE,SAAM,CAAC,GAAE,KAAK,KAAKA,MAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,IAAI,YAAYA,GAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,KAAE,EAAEC;AAAE,MAAEA,GAAC,IAAEA;AAAE,SAAO,GAAG,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,KAAGA,IAAE,SAAOA,MAAEA,MAAE,IAAI,OAAO,IAAEA,IAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG,GAAEC,KAAE,GAAE;AAAC,SAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAE,IAAE,MAAI;AAAC,UAAGD,IAAE,GAAE;AAAC,UAAE;AAAE;AAAA,MAAM;AAAC;AAAI,UAAI,IAAE,EAAE,CAAC;AAAE,UAAGC,OAAG,QAAM,KAAGA,KAAE;AAAC,UAAE;AAAE;AAAA,MAAM;AAAC,WAAG,OAAK,EAAE,GAAE,CAAC,IAAE,WAAW,GAAE,CAAC;AAAA,IAAC;AAAE,MAAE;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,QAAGA,IAAE,CAAC,KAAG;AAAE,MAAAC,OAAGD,IAAE,CAAC;AAAA,aAAUA,IAAE,CAAC,MAAI,IAAG;AAAC,UAAG,MAAI;AAAG,cAAM,MAAM,yDAAyD,CAAC,YAAY,CAAC,EAAE;AAAE,UAAE;AAAA,IAAC,WAASA,IAAE,CAAC,IAAE;AAAE,YAAM,MAAM,gCAAgCA,IAAE,CAAC,CAAC,WAAW,CAAC,EAAE;AAAE,MAAG,MAAI,IAAG;AAAC,QAAG,IAAE,KAAG,MAAIC;AAAE,YAAM,MAAM,QAAQ,CAAC,qCAAqCD,GAAC,EAAE;AAAE,WAAOA;AAAA,EAAC;AAAC,MAAGC,QAAI;AAAE,UAAM,MAAM,qCAAqCD,GAAC,6BAA6B;AAAE,MAAG,IAAEC,QAAI;AAAE,UAAM,MAAM,wDAAwD,CAAC,MAAMA,GAAC,EAAE;AAAE,MAAI,IAAED,IAAE,MAAM;AAAE,SAAO,EAAE,CAAC,IAAE,IAAEC,KAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE;AAAO,SAAOD,MAAEA,OAAG,OAAK,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,IAAE,CAAC,EAAE,OAAOA,GAAC,GAAE,EAAEA,IAAE,MAAM,OAAG,KAAG,CAACC,OAAG,IAAEA,GAAC,GAAE,MAAI,+CAA+CA,GAAC,KAAKA,GAAC,kBAAkBD,GAAC,EAAE,GAAE,EAAEA,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,GAAE,MAAI,0DAA0DA,GAAC,EAAE,GAAEA,IAAE,IAAI,OAAG,IAAE,IAAEC,MAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,WAAS,GAAE,IAAE,KAAG,QAAM,IAAE,OAAK,GAAG,GAAED,GAAC,EAAE,KAAK,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAG,KAAG,MAAK;AAAC,UAAG,EAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI;AAAE,cAAM,IAAI,MAAM,sBAAsB,CAAC,mBAAmBA,IAAE,CAAC,CAAC,YAAY;AAAE,OAAC,EAAE,CAAC,KAAG,QAAM,EAAE,CAAC,IAAE,MAAIA,IAAE,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,CAAC,KAAG,KAAG;AAAA,IAAG;AAAC,IAAAA,IAAE,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,UAASC,KAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE;AAAK,MAAGD,OAAG,QAAMA,QAAI;AAAU,IAAAC,MAAE,IAAI,aAAa,CAAC;AAAA,WAAUD,QAAI;AAAQ,IAAAC,MAAE,IAAI,WAAW,CAAC;AAAA,WAAUD,QAAI;AAAO,IAAAC,MAAE,IAAI,WAAW,CAAC;AAAA,WAAUD,QAAI;AAAS,IAAAC,MAAE,IAAI,MAAM,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,qBAAqBD,GAAC,EAAE;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,OAAI;AAAC,QAAI,IAAED,IAAEC,GAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC;AAAE,YAAM,MAAM,oBAAoB,CAAC,4BAA4B,CAAC,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,QAAI,UAAQA,QAAI,eAAaA,QAAI,aAAWA,QAAI,WAASA,QAAI;AAAQ;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,EAAE,MAAI,eAAa,MAAI,aAAWA,QAAI,eAAa,MAAI,WAASA,QAAI,aAAWA,QAAI,eAAa,MAAI,UAAQA,QAAI;AAAO;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI;AAAQ,WAAO;AAAE,MAAGA,QAAI;AAAY,WAAO;AAAE,MAAGA,QAAI;AAAO,WAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG;AAAK,WAAO;AAAE,MAAI,IAAE;AAAE,SAAOA,IAAE,QAAQ,CAAAC,QAAG,KAAGA,IAAE,MAAM,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAOA,OAAG,YAAUA,eAAa;AAAM;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG;AAAS;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG;AAAQ;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,MAAM,QAAQA,GAAC,IAAE,GAAGA,IAAE,CAAC,CAAC,IAAEA,eAAa,eAAa,YAAUA,eAAa,cAAYA,eAAa,cAAYA,eAAa,oBAAkB,UAAQ,GAAGA,GAAC,IAAE,YAAU,GAAGA,GAAC,IAAE,WAAS,GAAGA,GAAC,IAAE,SAAO;AAAS;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,EAAEA,OAAGA,IAAE,eAAaA,IAAE,QAAMA,IAAE;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,KAAE,EAAEC;AAAE,QAAGD,MAAEC,QAAI;AAAE,aAAOA;AAAE,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE;AAAE,WAAM,CAAC;AAAE,MAAIC,MAAE,IAAI,MAAM,IAAE,CAAC;AAAE,EAAAA,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,IAAAC,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,IAAI;AAAM,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAEA,IAAED,MAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAG,IAAE,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,GAAGA,MAAE,IAAE,GAAE,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGD,IAAE,WAAS;AAAE,WAAO,EAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,KAAGC,MAAE,IAAE;AAAG,MAAG,MAAI;AAAE,WAAM,CAAC;AAAE,MAAG,MAAI,EAAE;AAAO,UAAM,IAAI,MAAM,IAAID,GAAC,mCAAmC,EAAE,MAAM,GAAGC,MAAE,0BAAwB,EAAE,GAAG;AAAE,SAAO,GAAG,GAAED,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,MAAM,QAAQA,GAAC;AAAE,WAAOA;AAAE,MAAG,MAAI;AAAU,WAAOA,eAAa,eAAaA,MAAE,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI;AAAQ,WAAOA,eAAa,aAAWA,MAAE,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI,UAAQ,MAAI;AAAS,WAAO,WAAW,KAAK,IAAI,WAAWA,GAAC,CAAC;AAAE,QAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO;AAAI,IAAAA,IAAE,CAAC,IAAE;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,KAAG,QAAM,MAAI,aAAW,MAAI;AAAY,WAAO,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI;AAAO,WAAO,IAAI,WAAWA,GAAC;AAAE,QAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC;AAAE,MAAG,KAAG,QAAM,MAAI;AAAU,WAAO,GAAGA,KAAE,IAAI,aAAaC,GAAC,CAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,GAAGD,KAAE,IAAI,WAAWC,GAAC,CAAC;AAAE,MAAG,MAAI;AAAO,WAAO,GAAGD,KAAE,IAAI,WAAWC,GAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,EAAAA,IAAE,QAAQ,OAAG;AAAC,MAAE,OAAO,UAAU,CAAC,KAAG,KAAG,GAAE,MAAI,0EAA0EA,GAAC,IAAI;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI;AAAE,WAAO;AAAE,MAAG,MAAI;AAAE,WAAOD,IAAE,CAAC;AAAE,MAAI,IAAEA,IAAEA,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,EAAE;AAAE,SAAGC,IAAE,CAAC,IAAED,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI;AAAE,WAAM,CAAC;AAAE,MAAG,MAAI;AAAE,WAAM,CAACD,GAAC;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,KAAK,MAAMA,MAAEC,IAAE,CAAC,CAAC,GAAED,OAAG,EAAE,CAAC,IAAEC,IAAE,CAAC;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAED,KAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAGA,IAAE,QAAM,OAAOA,IAAE,QAAM;AAAU;AAAC,IAAI,KAAG;AAAP,IAAmB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,iBAAe,IAAG,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,YAAU,SAAO,EAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,YAAY,KAAK,YAAY,wDAAwD,CAAC,GAAG,IAAG,KAAK,eAAa,GAAE,KAAK,WAASA;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,aAAa,CAAC,IAAE,EAAC,cAAaA,KAAE,SAAQ,EAAC,GAAE,KAAK,SAAS,CAAC,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,SAAS,CAAC;AAAE,QAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,qCAAqC,CAAC,KAAK,CAAC,GAAG,GAAE,KAAK,IAAI,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,QAAM,KAAK,MAAM,CAAC,KAAG,KAAK,MAAM,CAAC,IAAE,MAAM,KAAK,aAAa,CAAC,GAAE,KAAK,MAAM,CAAC;AAAA,EAAE;AAAA,EAAC,IAAI,GAAE;AAAC,QAAG,KAAK,KAAK;AAAM,aAAO,KAAK,MAAM,CAAC;AAAE,QAAIA,MAAE,KAAK,aAAa,CAAC;AAAE,QAAG,GAAGA,GAAC;AAAE,YAAM,IAAI,MAAM,QAAQ,CAAC,oEAAoE;AAAE,WAAO,KAAK,MAAM,CAAC,IAAEA,KAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,IAAI,GAAEA,KAAE;AAAC,QAAG,KAAK,aAAa,CAAC,KAAG;AAAK,YAAM,IAAI,MAAM,mBAAmB,CAAC,iCAAiC;AAAE,SAAK,MAAM,CAAC,IAAEA,KAAE,KAAK,aAAa,CAAC,EAAE,WAAS,QAAM,KAAK,aAAa,CAAC,EAAE,QAAQA,GAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAG,KAAK,aAAa,CAAC,KAAG;AAAK,YAAM,IAAI,MAAM,yBAAyB,CAAC,kCAAkC;AAAE,WAAO,KAAK,aAAa,CAAC,EAAE,aAAa;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,SAAK,QAAM,OAAO,OAAO,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAO;AAAC,SAAK,QAAM,CAAC,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,QAAG,OAAO,KAAK,UAAQ,eAAa,OAAO,KAAK,OAAO,YAAU,eAAa,OAAO,KAAK,OAAO,SAAS,UAAQ;AAAY;AAAO,QAAI,IAAE,KAAK,eAAe,KAAK,OAAO,SAAS,MAAM;AAAE,UAAM,KAAG,EAAE,EAAE,EAAE,MAAM,GAAG,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,GAAG;AAAE,WAAK,SAAS,CAAC,IAAE,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAOA,IAAE,QAAQ,+BAA8B,CAACC,QAAK,OAAK,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAG,EAAE,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,mBAAmB,CAAC,CAAC,IAAE,mBAAmBC,OAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,YAAY;AAAE,SAAOA,QAAI,UAAQA,QAAI,UAAQA,QAAI,SAAO,GAAG,CAACA,GAAC,OAAKA,MAAE,CAACA,MAAE;AAAC;AAAC,SAAS,IAAG;AAAC,SAAO;AAAE;AAAC,IAAI,KAAG;AAAK,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,IAAI;AAAG,SAAS,KAAI;AAAC,MAAG,MAAI,MAAK;AAAC,QAAIA;AAAE,QAAG,OAAO,UAAQ;AAAY,MAAAA,MAAE;AAAA,aAAe,OAAO,UAAQ;AAAY,MAAAA,MAAE;AAAA,aAAe,OAAO,WAAS;AAAY,MAAAA,MAAE;AAAA,aAAgB,OAAO,QAAM;AAAY,MAAAA,MAAE;AAAA;AAAU,YAAM,IAAI,MAAM,gCAAgC;AAAE,SAAGA;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG;AAAE,SAAOA,IAAE,cAAY,SAAOA,IAAE,aAAW,oBAAI,QAAKA,IAAE;AAAU;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG;AAAE,MAAGA,IAAE,IAAID,GAAC;AAAE,WAAOC,IAAE,IAAID,GAAC;AAAE;AAAC,QAAI,IAAE,EAAE;AAAE,WAAOC,IAAE,IAAID,KAAE,CAAC,GAAEC,IAAE,IAAID,GAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAa,KAAG;AAAhB,IAAuB,KAAG;AAA1B,IAAkC,KAAG;AAArC,IAA2C,KAAG;AAA9C,IAAqD,KAAG;AAAxD,IAA8D,KAAG;AAAjE,IAAuE,KAAG;AAA1E,IAAmF,KAAG;AAAtF,IAA+F,KAAG;AAAlG,IAAyG,KAAG;AAA5G,IAAoH,KAAG;AAAvH,IAA8H,KAAG;AAAjI,IAAyI,KAAG;AAA5I,IAAoJ,KAAG;AAAvJ,IAAiK,KAAG;AAApK,IAAkL,KAAG;AAArL,IAAiM,KAAG;AAApM,IAAoN,KAAG;AAAvN,IAAqO,KAAG;AAAxO,IAAyP,KAAG;AAA5P,IAAuQ,KAAG;AAA1Q,IAAuR,MAAI;AAA3R,IAAyS,KAAG;AAA5S,IAA4T,KAAG;AAA/T,IAAsU,KAAG;AAAzU,IAAgV,KAAG;AAAnV,IAAiW,KAAG;AAApW,IAA8W,KAAG;AAAjX,IAA8X,KAAG;AAAjY,IAA0Y,KAAG;AAA7Y,IAAsZ,KAAG;AAAzZ,IAAgb,KAAG;AAAnb,IAAyc,KAAG;AAA5c,IAAqd,KAAG;AAAxd,IAAif,KAAG;AAApf,IAA4gB,KAAG;AAA/gB,IAAqhB,KAAG;AAAxhB,IAA+hB,KAAG;AAAliB,IAA4iB,KAAG;AAA/iB,IAAwjB,KAAG;AAA3jB,IAA2kB,KAAG;AAA9kB,IAA8lB,KAAG;AAAjmB,IAAgnB,KAAG;AAAnnB,IAA2oB,KAAG;AAA9oB,IAAorB,KAAG;AAAvrB,IAA4tB,KAAG;AAA/tB,IAAsuB,KAAG;AAAzuB,IAAsvB,KAAG;AAAzvB,IAAmxB,KAAG;AAAtxB,IAAizB,KAAG;AAApzB,IAA2zB,KAAG;AAA9zB,IAAw0B,KAAG;AAA30B,IAAo1B,KAAG;AAAv1B,IAA61B,KAAG;AAAh2B,IAA02B,KAAG;AAA72B,IAAm3B,KAAG;AAAt3B,IAA83B,KAAG;AAAj4B,IAAu4B,KAAG;AAA14B,IAAu5B,KAAG;AAA15B,IAAk6B,KAAG;AAAr6B,IAA26B,KAAG;AAA96B,IAAq7B,KAAG;AAAx7B,IAAw8B,KAAG;AAA38B,IAAm9B,KAAG;AAAt9B,IAAi+B,KAAG;AAAp+B,IAAq/B,KAAG;AAAx/B,IAAmgC,KAAG;AAAtgC,IAAihC,KAAG;AAAphC,IAA8hC,KAAG;AAAjiC,IAAgjC,KAAG;AAAnjC,IAA8jC,KAAG;AAAjkC,IAAwkC,KAAG;AAA3kC,IAAklC,KAAG;AAArlC,IAAgmC,KAAG;AAAnmC,IAA2mC,KAAG;AAA9mC,IAAsnC,KAAG;AAAznC,IAAqoC,KAAG;AAAxoC,IAA+oC,KAAG;AAAlpC,IAA8pC,KAAG;AAAjqC,IAA4qC,KAAG;AAA/qC,IAAqrC,KAAG;AAAxrC,IAAgsC,KAAG;AAAnsC,IAAgtC,KAAG;AAAntC,IAAguC,KAAG;AAAnuC,IAA+uC,KAAG;AAAlvC,IAA+vC,MAAI;AAAnwC,IAAgxC,MAAI;AAApxC,IAAiyC,KAAG;AAApyC,IAA0yC,KAAG;AAA7yC,IAAuzC,MAAI;AAA3zC,IAA40C,KAAG;AAA/0C,IAAq1C,KAAG;AAAx1C,IAAk2C,KAAG;AAAr2C,IAA+2C,KAAG;AAAl3C,IAAg4C,KAAG;AAAn4C,IAA+4C,KAAG;AAAl5C,IAAk6C,KAAG;AAAr6C,IAAy7C,KAAG;AAA57C,IAAm8C,KAAG;AAAt8C,IAA48C,KAAG;AAA/8C,IAAy9C,KAAG;AAA59C,IAAw+C,KAAG;AAA3+C,IAAi/C,KAAG;AAAp/C,IAAkgD,KAAG;AAArgD,IAAghD,KAAG;AAAnhD,IAAyhD,KAAG;AAA5hD,IAAuiD,KAAG;AAA1iD,IAAgkD,KAAG;AAAnkD,IAAylD,KAAG;AAA5lD,IAAknD,KAAG;AAArnD,IAAgoD,KAAG;AAAnoD,IAA4oD,KAAG;AAA/oD,IAAspD,KAAG;AAAzpD,IAAiqD,MAAI;AAArqD,IAA4qD,KAAG;AAA/qD,IAAqrD,KAAG;AAAxrD,IAAgsD,KAAG;AAAnsD,IAA0sD,KAAG;AAA7sD,IAA4tD,KAAG;AAA/tD,IAA6uD,KAAG;AAAhvD,IAAuwD,KAAG;AAA1wD,IAAkxD,KAAG;AAArxD,IAA4xD,KAAG;AAA/xD,IAA4yD,KAAG;AAA/yD,IAAszD,KAAG;AAAzzD,IAAm0D,KAAG;AAAt0D,IAA81D,KAAG;AAAj2D,IAA63D,KAAG;AAAh4D,IAAi5D,KAAG;AAAp5D,IAAy6D,KAAG;AAA56D,IAAo7D,KAAG;AAAv7D,IAAi8D,KAAG;AAAp8D,IAA48D,KAAG;AAA/8D,IAAu9D,KAAG;AAA19D,IAAs+D,KAAG;AAAz+D,IAA+/D,KAAG;AAAlgE,IAAihE,KAAG;AAAphE,IAA6hE,KAAG;AAAhiE,IAAuiE,KAAG;AAA1iE,IAAkjE,KAAG;AAArjE,IAA2jE,KAAG;AAA9jE,IAAqkE,KAAG;AAAxkE,IAA+kE,KAAG;AAAllE,IAA4lE,KAAG;AAA/lE,IAA0mE,KAAG;AAA7mE,IAAonE,KAAG;AAAvnE,IAA6nE,KAAG;AAAhoE,IAAipE,KAAG;AAAppE,IAA6pE,KAAG;AAAhqE,IAA0qE,KAAG;AAA7qE,IAAmsE,KAAG;AAAtsE,IAAstE,KAAG;AAAztE,IAA6uE,KAAG;AAAhvE,IAAmwE,KAAG;AAAtwE,IAAsxE,KAAG;AAAzxE,IAA6yE,KAAG;AAAhzE,IAAyzE,KAAG;AAA5zE,IAAi1E,KAAG;AAAp1E,IAAm2E,KAAG;AAAt2E,IAAq3E,KAAG;AAAx3E,IAAs4E,KAAG;AAAz4E,IAAk6E,KAAG;AAAr6E,IAA26E,KAAG;AAA96E,IAAo7E,KAAG;AAAv7E,IAA87E,KAAG;AAAj8E,IAAw8E,KAAG;AAA38E,IAAk9E,KAAG;AAAr9E,IAAi+E,KAAG;AAAp+E,IAAg/E,KAAG;AAAn/E,IAA4/E,KAAG;AAA//E,IAAwgF,KAAG;AAA3gF,IAAgiF,MAAI;AAApiF,IAAijF,KAAG;AAApjF,IAAgkF,KAAG;AAAnkF,IAA0kF,KAAG;AAA7kF,IAA0lF,KAAG;AAA7lF,IAAgnF,KAAG;AAAnnF,IAAkoF,KAAG;AAAroF,IAAmpF,KAAG;AAAuB,SAAS,MAAMA,KAAE;AAAC,IAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,KAAK,GAAGA,GAAC;AAAC;AAAC,SAAS,MAAMA,KAAE;AAAC,IAAE,EAAE,QAAQ,SAAS,KAAG,EAAE,EAAE,QAAQ,MAAM,KAAG,QAAQ,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,GAAG,kBAAiB,MAAI,oBAAI,KAAG;AAAtC,IAAwC,KAAG,GAAG,gBAAe,MAAI,oBAAI,KAAG;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,SAAO,GAAG,IAAIC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,IAAIA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,GAAG,QAAQ,GAAEC,MAAE,CAAC;AAAE,aAAO;AAAC,QAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,KAAK;AAAE,QAAG;AAAE;AAAM,QAAG,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,CAAC,IAAE,EAAE,MAAM,GAAG;AAAE,UAAID,OAAGC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,YAAW,GAAE,aAAYC,IAAC,IAAED,KAAE,IAAE,GAAG,GAAEC,GAAC;AAAE,KAAG,IAAI,CAAC,KAAG,GAAG,eAAe,CAAC,kBAAkBA,GAAC,yBAAyB,GAAE,GAAG,IAAI,GAAED,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,YAAW,EAAC,IAAEA;AAAE,KAAG,IAAI,CAAC,KAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAG,gCAAgC,CAAC,GAAG,GAAE,GAAG,IAAI,GAAEA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,MAAG,CAAC,GAAG,IAAIC,GAAC;AAAE,UAAM,IAAI,MAAM,eAAeD,GAAC,kBAAkB,CAAC,qBAAqB;AAAE,KAAG,OAAOC,GAAC;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,CAAC,GAAG,IAAIA,GAAC;AAAE,UAAM,IAAI,MAAM,iBAAiBA,GAAC,iCAAiC;AAAE,KAAG,OAAOA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAE;AAAC,KAAGA,GAAC,EAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,OAAO,OAAO,CAAC,GAAE,GAAE,EAAC,aAAY,EAAC,CAAC;AAAE,OAAG,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,GAAG,CAAC,IAAIA,GAAC;AAAE;AAAC,IAAI,IAAE,CAAC;AAAE,GAAG,GAAE,EAAC,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,QAAO,MAAI,GAAE,oCAAmC,MAAI,IAAG,eAAc,MAAI,IAAG,mBAAkB,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,OAAM,MAAI,IAAG,gBAAe,MAAI,IAAG,oCAAmC,MAAI,IAAG,mBAAkB,MAAI,IAAG,uBAAsB,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,OAAM,MAAI,IAAG,eAAc,MAAI,IAAG,SAAQ,MAAI,IAAG,mBAAkB,MAAI,IAAG,wBAAuB,MAAI,IAAG,iBAAgB,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,wBAAuB,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,oBAAmB,MAAI,IAAG,2BAA0B,MAAI,IAAG,qBAAoB,MAAI,IAAG,gBAAe,MAAI,IAAG,mBAAkB,MAAI,IAAG,KAAI,MAAI,IAAG,gBAAe,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,UAAS,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,cAAa,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,eAAc,MAAI,IAAG,cAAa,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAOA,eAAa,gBAAcA,eAAa,cAAYA,eAAa,cAAYA,eAAa;AAAiB;AAAC,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,GAAG,WAAS;AAAG,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,WAAWA,KAAE,MAAG,EAAE;AAAC;AAAC,IAAI,KAAG,GAAG,kBAAkB;AAA5B,IAA8B,KAAG,GAAG,kBAAkB;AAAtD,IAAwD,KAAG,GAAG,kBAAkB;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,IAAIA,IAAE,KAAK,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAE,IAAEC,GAAC;AAAE,SAAO,GAAG,UAAU,MAAM,KAAK,CAAC,GAAE,MAAG,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,MAAI,IAAEA,MAAEA,IAAE,KAAK,CAAC,EAAE,GAAGA,IAAE,IAAI,KAAG,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAG,kBAAkB,GAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,EAAE,IAAIC,GAAC;AAAE,MAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,EAAE,IAAIA,GAAC;AAAE,SAAO,IAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAIA,GAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAE,EAAE,IAAID,GAAC,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAIC,GAAC,GAAE,IAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,GAAG,GAAGD,KAAE,CAAC,GAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,GAAGA,KAAE,IAAE,EAAE,GAAE,GAAGA,KAAE,IAAE,EAAE,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAG,KAAG,GAAE;AAAC,QAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAIC,GAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,EAAE,IAAI,CAAC,EAAE,IAAIA,GAAC;AAAE,WAAO,GAAG,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAC,MAAG,KAAG,GAAE;AAAC,QAAIA,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAO,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,GAAE,GAAGA,KAAE,IAAE,CAAC,GAAEC,GAAC;AAAA,EAAC;AAAC,MAAG,IAAE,GAAE;AAAC,QAAIA,MAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,KAAG,CAAC,GAAE,IAAEA,IAAE,IAAE,CAAC,GAAE,IAAEC,OAAG,KAAG,IAAG,IAAE,KAAG,KAAG;AAAG,WAAO,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,IAAE,EAAE,EAAE,IAAI,EAAE;AAAE,SAAO,GAAG,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,IAAI,IAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,IAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,EAAE,EAAE,IAAIC,GAAC,GAAE,IAAE,GAAGD,KAAE,EAAE,GAAE,IAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,EAAE,IAAIC,GAAC,GAAE,IAAE,EAAE,IAAI,GAAGD,KAAE,IAAE,EAAE,CAAC,EAAE,IAAIC,GAAC;AAAE,SAAO,GAAG,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,IAAI,GAAG,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAEA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAEA,IAAE,QAAO;AAAC,MAAIC,MAAE,GAAG,WAAW,IAAG,IAAE;AAAE,MAAG,KAAG;AAAG,WAAO,KAAG,KAAG,GAAGD,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAG,KAAG;AAAG,WAAO,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAEC,KAAE,IAAEA,IAAE,IAAI,EAAE,EAAE,IAAI,GAAG,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,GAAE,IAAE,CAAC,GAAG,OAAM,GAAG,KAAK,GAAE,IAAE,CAAC,GAAG,OAAM,GAAG,KAAK;AAAE,MAAE,EAAE,IAAI,EAAE,EAAE,IAAI,GAAGD,KAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAE,KAAG,IAAE,KAAG,KAAG,IAAG,IAAE,KAAG,IAAE,IAAE,MAAI;AAAG;AAAG,QAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,EAAE,GAAE,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,IAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,KAAG;AAAA,SAAS,MAAI;AAAG,MAAI,IAAE,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;AAAE,SAAO,IAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,IAAE,IAAE,EAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,IAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,GAAGA,KAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,GAAG,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,GAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,MAAI,WAAS,GAAGA,GAAC,IAAE,GAAG,CAACA,GAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,eAAa,gBAAc,MAAI,aAAWA,eAAa,cAAY,MAAI,WAASA,eAAa,cAAY,MAAI;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,MAAI;AAAS,UAAM,IAAI,MAAM,2CAA2C;AAAE,MAAG,MAAM,QAAQA,GAAC,MAAIA,MAAE,GAAGA,GAAC,IAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGA,KAAE,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,WAAOA;AAAE,MAAG,KAAG,QAAM,MAAI,aAAW,MAAI;AAAY,WAAO,IAAI,aAAaA,GAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,IAAI,WAAWA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAIC,MAAE,IAAI,WAAWD,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE;AAAE,WAAK,MAAMD,IAAE,CAAC,CAAC,MAAI,MAAIC,IAAE,CAAC,IAAE;AAAG,WAAOA;AAAA,EAAC;AAAM,UAAM,IAAI,MAAM,qBAAqB,CAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,SAAS,IAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,EAAE,EAAE,SAAS,MAAMA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,SAAQ;AAAC,SAAO,IAAE,KAAG,SAAQ,EAAE,EAAE,SAAS,OAAOA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,SAAQ;AAAC,SAAO,IAAE,KAAG,SAAQ,EAAE,EAAE,SAAS,OAAOA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,SAAS,gBAAc,OAAK,EAAE,EAAE,SAAS,aAAaA,GAAC,IAAE,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,CAAC,GAAEC,MAAE,OAAG;AAAC,MAAG,KAAG,SAAO,IAAE,CAAC,IAAG,OAAOD,OAAG,aAAW,OAAOA,OAAG,YAAU,OAAOA,OAAG,YAAU,GAAGA,GAAC,KAAGA,OAAG,QAAM,GAAGA,GAAC,KAAGC;AAAE,MAAE,KAAKD,GAAC;AAAA,WAAU,MAAM,QAAQA,GAAC,KAAG,GAAGA,GAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,SAAGA,IAAE,CAAC,GAAE,GAAEC,GAAC;AAAA,OAAM;AAAC,QAAI,IAAE;AAAG,aAAQ,KAAK,OAAO,KAAKD,GAAC;AAAE,2BAAqB,KAAK,CAAC,MAAI,IAAE,KAAK,IAAI,GAAE,OAAO,CAAC,CAAC;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,SAAGA,IAAE,CAAC,GAAE,GAAEC,GAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,eAAa,GAAE,KAAK,SAAOA,KAAEA,OAAG,SAAO,KAAK,SAAO,IAAI;AAAA,EAAG;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE;AAAC,QAAI,GAAE,IAAE,MAAI;AAAC,UAAE,EAAE;AAAA,IAAC,GAAE,GAAE,IAAE,GAAG;AAAE,QAAG,KAAK,aAAa,eAAe;AAAE,UAAE,KAAK,aAAa,KAAK,CAAC;AAAA,SAAM;AAAC,QAAE;AAAE,eAAQ,KAAK;AAAE,UAAE,SAAS;AAAE,UAAE,QAAQ,QAAQ,EAAC,UAAS,GAAG,IAAE,EAAC,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,8BAA8B;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,KAAK,EAAE,KAAK,OAAG;AAAC,aAAG,GAAE,EAAE,OAAM,CAAC;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,WAAM,EAAC,YAAW,GAAE,SAAQ,GAAE,QAAOA,KAAE,QAAO,EAAE,KAAK,OAAG,EAAE,QAAQ,GAAE,WAAU,EAAE,KAAK,OAAG,EAAE,uBAAqB,OAAK,EAAE,oBAAoB,IAAE,EAAE,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,EAAC,YAAWA,KAAE,SAAQ,GAAE,QAAO,GAAE,QAAO,GAAE,WAAU,EAAC,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,cAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC,EAAE,KAAK,OAAG;AAAC,aAAK,OAAO,iBAAiBA,KAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI;AAAU,WAAM;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAM,CAAC,KAAG,CAAC,SAAS,CAAC;AAAE,aAAO,QAAQ,KAAK,SAAS,CAAC,sBAAsBC,GAAC,GAAG,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,iBAAiB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAG,WAAS,GAAG,GAAG,CAAC,MAAK,CAAC,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,EAAE,GAAE,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAE,GAAGA,IAAE,MAAM,SAAS,GAAE,EAAE,GAAE,IAAE;AAAG,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,KAAG,MAAK;AAAC,YAAI,IAAE,EAAE,SAAOA,IAAE,OAAM,IAAE,EAAE;AAAO,aAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAE,IAAE,IAAE,EAAE;AAAA,MAAG;AAAA,IAAC;AAAC,YAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAG,oBAAmB,aAAY,cAAa,iBAAgB,gBAAe,kBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,EAAE,CAAC,EAAE,EAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE;AAAO,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,YAAG,EAAE,EAAE,EAAE,GAAE;AAAC,YAAE,QAAQ,QAAQ,OAAG,EAAE,EAAE,EAAE,IAAE,IAAE,GAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,QAAK;AAAC,UAAG;AAAE;AAAA,IAAK;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,IAAEC,IAAE,EAAE,IAAE;AAAG,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAED,IAAE,SAAO,GAAE,KAAG,GAAE,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE;AAAO,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAQ,QAAO;AAAI,UAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAE;AAAC,iBAAQ,KAAK;AAAE,YAAE,EAAE,CAAC,EAAE,EAAE,IAAE,MAAG,EAAE,EAAE,EAAE,IAAE;AAAG;AAAA,MAAK;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,EAAE,EAAE,EAAE,KAAG,EAAE,EAAE,EAAE,GAAE;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,KAAK,EAAE,QAAO;AAAC,YAAI,IAAE,EAAE,OAAO,CAAC;AAAE,UAAE,EAAE,EAAE,MAAI,EAAE,CAAC,IAAE;AAAA,MAAE;AAAC,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,CAAC;AAAE,QAAE,SAAO,GAAE,EAAE,UAAQ,EAAE,SAAQ,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,WAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQ,QAAQ,OAAG;AAAC,UAAI,IAAED,IAAE,EAAE,EAAE;AAAE,WAAG,OAAK,EAAE,KAAK,CAAC,IAAE,EAAE,KAAK,IAAI;AAAA,IAAC,CAAC,GAAE,EAAE,YAAU;AAAK,YAAM,IAAI,MAAM,4DAA4D,EAAE,UAAU,GAAG;AAAE,QAAI,IAAE,EAAE,SAAS,CAAC;AAAE,aAAQ,KAAK,EAAE,QAAO;AAAC,UAAG,EAAE,KAAK;AAAG,cAAM,IAAI,MAAM,iCAAiC,CAAC,gCAAgC,OAAO,KAAK,CAAC,CAAC,GAAG;AAAE,UAAI,IAAEC,IAAE,MAAI,EAAE,CAAC,EAAE,CAAC;AAAE,UAAG,EAAE,UAAQ;AAAU,cAAM,IAAI,MAAM,4BAA4B,EAAE,UAAU,2BAA2B,CAAC,wCAAwC,EAAE,KAAK,GAAG;AAAE,UAAI,IAAE,EAAE,OAAO,CAAC;AAAE,UAAG,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,cAAM,IAAI,MAAM,4BAA4B,EAAE,UAAU,4BAA4B,CAAC,gBAAgB,EAAE,KAAK,mDAAmD,EAAE,KAAK,GAAG;AAAE,UAAGD,IAAE,EAAE,EAAE,KAAG;AAAK,QAAAA,IAAE,EAAE,EAAE,IAAE;AAAA,WAAM;AAAC,YAAI,IAAEA,IAAE,EAAE,EAAE;AAAE,QAAAA,IAAE,EAAE,EAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,QAAQ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAU,KAAG;AAAb,IAAe,KAAG;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,CAAC,GAAE,IAAE,CAAC,QAAQ;AAAE,SAAO,MAAI,EAAE,KAAK,YAAYA,GAAC,EAAE,GAAE,EAAE,KAAK,WAAW,CAAC,EAAE,GAAE,EAAE,KAAK,aAAa,CAAC,GAAG,GAAE,EAAE,KAAK,WAAW,IAAG,EAAE,KAAK,EAAE,IAAI,OAAG,SAAO,CAAC,EAAE,KAAK;AAAA,CACjs+C,CAAC,GAAE,EAAE,KAAK;AAAA,CACV;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,QAAO,IAAEA,QAAI,cAAY,GAAGD,GAAC,IAAEA;AAAE,MAAG,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,CAAC,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,GAAG,EAAE,IAAE,CAAC,GAAE,GAAEC,GAAC,EAAE,MAAM;AAAA,IAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI;AAAE,SAAO,MAAM,QAAQD,GAAC,IAAE,IAAE,GAAG,WAAWA,IAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,WAAWA,IAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAI,GAAGA,GAAC,IAAE,IAAE,IAAIA,GAAC,MAAIC,QAAI,SAAO,IAAE,GAAGD,GAAC,IAAE,IAAE,WAAWA,IAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,QAAI,IAAE,UAAQ;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAEA,QAAI,cAAY,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE;AAAO,MAAG,MAAI,GAAE;AAAC,QAAGA,QAAI,aAAY;AAAC,UAAI,IAAE,GAAGD,GAAC;AAAE,aAAM,CAAC,GAAG,EAAE,CAAC,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,WAAOA,QAAI,SAAO,CAAC,GAAGD,IAAE,CAAC,CAAC,CAAC,IAAE,CAACA,IAAE,CAAC,EAAE,SAAS,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,GAAE;AAAC,QAAG,IAAE,IAAG;AAAC,UAAI,IAAE,KAAG,GAAE,IAAE,MAAM,KAAKA,IAAE,MAAM,GAAE,CAAC,CAAC,GAAE,IAAE,MAAM,KAAKA,IAAE,OAAO,IAAE,MAAI,GAAE,IAAE,CAAC,CAAC;AAAE,aAAOC,QAAI,gBAAc,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,IAAG,CAAC,MAAI,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAEA,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,YAAU,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,IAAE,KAAG,CAAC,GAAEA,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,IAAC;AAAC,WAAM,CAAC,OAAKA,QAAI,cAAY,GAAGD,GAAC,IAAE,MAAM,KAAKA,GAAC,GAAG,IAAI,CAAC,GAAE,MAAI,GAAG,GAAE,EAAE,CAAC,GAAEC,GAAC,CAAC,EAAE,KAAK,IAAI,IAAE,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,CAAC;AAAE,MAAG,IAAE,IAAG;AAAC,aAAQ,IAAE,GAAE,IAAE,IAAG,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,KAAE,CAAC;AAAA,IAAC;AAAC,MAAE,KAAK,KAAK;AAAE,aAAQ,IAAE,IAAE,IAAG,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,IAAC;AAAA,EAAC;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,QAAE,KAAK,GAAG,GAAGD,IAAE,MAAM,GAAE,CAAC,GAAE,GAAEC,KAAE,GAAE,GAAE,MAAI,IAAE,CAAC,CAAC;AAAA,IAAC;AAAC,MAAI,IAAE,MAAI,IAAE,MAAI;AAAG,IAAE,CAAC,IAAE,OAAK,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE;AAAI,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE;AAAI,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAE,MAAI,IAAE;AAAA;AACz2C,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,SAAG;AAAA;AACvB,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,MAAI,EAAE,EAAE,SAAO,CAAC,IAAE,OAAK,IAAE,KAAG,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC,OAAG;AAAE,MAAE,KAAK,CAACD,IAAEC,GAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,QAAMA,KAAE,KAAK,QAAM,EAAE,MAAM,GAAE,KAAK,OAAK,GAAG,CAAC,GAAE,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE;AAAO,QAAE,MAAI,KAAK,MAAK,MAAI,qBAAqB,CAAC,oDAAoD,KAAK,IAAI,IAAI;AAAA,IAAC;AAAC,QAAGA,QAAI;AAAY,YAAM,IAAI,MAAM,4JAA4J;AAAE,SAAK,SAAO,KAAG,GAAGA,KAAE,KAAK,IAAI,GAAE,KAAK,UAAQ,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,MAAKA,KAAE;AAAC,IAAAA,IAAE,WAAS,MAAIA,MAAE,CAAC,CAAC,IAAG,EAAEA,IAAE,WAAS,KAAK,MAAK,MAAI,uCAAuCA,IAAE,MAAM,0BAA0B,KAAK,IAAI,GAAG;AAAE,QAAI,IAAE,KAAK,WAAWA,GAAC;AAAE,SAAK,OAAO,CAAC,IAAE;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,MAAE,WAAS,MAAI,IAAE,CAAC,CAAC;AAAG,QAAIA,MAAE;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAG,IAAE,KAAG,KAAG,KAAK,MAAMA,GAAC,GAAE;AAAC,YAAI,IAAE,qCAAqC,CAAC,oBAAoB,KAAK,KAAK;AAAG,cAAM,IAAI,MAAM,CAAC;AAAA,MAAC;AAAC,MAAAA;AAAA,IAAG;AAAC,QAAI,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,WAAG,KAAK,QAAQ,CAAC,IAAE,EAAE,CAAC;AAAE,WAAO,KAAK,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAO;AAAE,QAAG,KAAK,SAAO;AAAE,aAAO,EAAE,CAAC;AAAE,QAAIA,MAAE,EAAE,EAAE,SAAO,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,MAAAA,OAAG,KAAK,QAAQ,CAAC,IAAE,EAAE,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM,CAAC;AAAE,QAAG,KAAK,SAAO;AAAE,aAAM,CAAC,CAAC;AAAE,QAAIA,MAAE,IAAI,MAAM,KAAK,MAAM,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE,EAAE;AAAE,MAAAA,IAAE,CAAC,IAAE,KAAK,MAAM,IAAE,KAAK,QAAQ,CAAC,CAAC,GAAE,KAAGA,IAAE,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAOA,IAAEA,IAAE,SAAO,CAAC,IAAE,GAAEA;AAAA,EAAC;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,MAAM;AAAA,EAAM;AAAA,EAAC,WAAU;AAAC,WAAO,GAAG,EAAE,WAAW,KAAK,QAAO,KAAK,OAAM,KAAK,KAAK;AAAA,EAAC;AAAC;AAAv3C,IAAy3C,KAAG;AAA53C,IAAi4C,KAAG;AAAp4C,IAAy4C,KAAG;AAAK,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,OAAGA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,OAAK,OAAG,KAAK,qBAAmB,OAAG,KAAK,QAAM,EAAE,MAAM,GAAE,KAAK,QAAMA,OAAG,WAAU,KAAK,OAAK,GAAG,CAAC,GAAE,KAAK,UAAQ,GAAG,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,KAAG,GAAE,KAAK,WAAS,KAAK,OAAK,IAAE,KAAK,KAAK,SAAS,IAAE;AAAA,EAAQ;AAAA,EAAC,IAAI,OAAM;AAAC,WAAO,KAAK,MAAM;AAAA,EAAM;AAAA,EAAC,MAAM,SAAQ;AAAC,QAAI,IAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,OAAO,KAAK,OAAM,KAAK,OAAM,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,QAAI,IAAE,MAAM,KAAK,KAAK;AAAE,WAAO,GAAG,KAAK,OAAM,GAAE,KAAK,UAAQ,WAAW;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAO,GAAG,KAAK,OAAM,KAAK,SAAS,GAAE,KAAK,UAAQ,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ,UAAS;AAAC,UAAIA,MAAE,MAAM;AAAE,UAAG;AAAC,eAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,+FAA+F;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,UAAU,KAAK,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,GAAG,EAAE,SAAS,KAAK,MAAM;AAAE,QAAG,KAAK,UAAQ;AAAS,UAAG;AAAC,eAAO,EAAE,IAAI,CAAAA,QAAG,GAAGA,GAAC,CAAC;AAAA,MAAC,SAAOA,KAAE;AAAC,cAAM,IAAI,MAAM,+FAA+F;AAAA,MAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,MAAM,QAAO;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,MAAM,GAAG,EAAE,KAAK,KAAK,MAAM;AAAE,WAAO,KAAK,UAAQ,WAAS,IAAE,IAAI,WAAW,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,eAAa,KAAK,aAAW,KAAK,UAAU,QAAQ,GAAE,GAAG,EAAE,cAAc,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAG;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,kBAAiB;AAAC,QAAG,KAAK;AAAW,YAAM,IAAI,MAAM,qBAAqB;AAAA,EAAC;AAAA,EAAC,MAAM,IAAE,OAAG;AAAC,WAAO,GAAG,MAAM,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,QAAO;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,MAAM,IAAI;AAAA,EAAC;AAAA,EAAC,SAAS,IAAE,OAAG;AAAC,QAAIA,MAAE,KAAK,SAAS;AAAE,WAAO,GAAGA,KAAE,KAAK,OAAM,KAAK,OAAM,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,IAAE,MAAGA,KAAE,GAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,EAAE,aAAa,MAAK,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAG,CAAC,CAACA,OAAGA,IAAE,QAAM,QAAMA,IAAE,YAAU,QAAMA,IAAE,mBAAiB,KAAI,CAAC;AAAE,SAAS,KAAI;AAAC,SAAO,GAAG,UAAS,MAAI,EAAE;AAAC;AAAC,GAAG;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,UAAM,EAAE,OAAM,EAAE,OAAM,EAAE,QAAO,CAAC,GAAE,KAAK,YAAUA,KAAE,KAAK,OAAK;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,2BAA2B,EAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,QAAG,CAAC,GAAG,EAAE,OAAM,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,2BAA2B,EAAE,KAAK,yBAAyB,KAAK,KAAK,cAAc;AAAE,OAAG,EAAE,cAAc,IAAI,GAAE,KAAK,SAAO,EAAE,QAAO,GAAG,EAAE,OAAO,MAAK,IAAI;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,OAAG,EAAE,gBAAgB,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAE;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAGA,eAAa,MAAIA,IAAE,UAAQ,QAAMA,IAAE,kBAAkB,SAAQ,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,kBAAiB,MAAI,IAAG,uBAAsB,MAAI,IAAG,gBAAe,MAAI,IAAG,gBAAe,MAAI,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG,MAAKA,IAAE,KAAG;AAAI,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,SAAQA,IAAE,OAAK,SAAQA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,SAAQA,IAAE,OAAK,QAAOA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,WAAUA,IAAE,QAAM,WAAUA,IAAE,OAAK,WAAUA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAE,UAAQ,aAAYA,IAAE,QAAM,aAAYA,IAAE,OAAK,aAAYA,IAAE,YAAU;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,EAAC,SAAQ,IAAG,OAAM,IAAG,MAAK,IAAG,WAAU,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,YAAU,MAAI,UAAS;AAAC,QAAGA,QAAI,YAAU,MAAI;AAAS,aAAM;AAAS,UAAM,IAAI,MAAM,kBAAkBA,GAAC,SAAS,CAAC,EAAE;AAAA,EAAC;AAAC,SAAO,GAAGA,GAAC,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAM,OAAOA,OAAG,YAAU,aAAYA,OAAGA,IAAE,mBAAmB;AAAY;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAO,aAAW,eAAaA,OAAG,QAAM,OAAOA,OAAG,YAAU,YAAWA,OAAGA,IAAE,kBAAkB;AAAS;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,IAAE,UAAQ,EAAE;AAAM,WAAM,CAACA,KAAE,CAAC;AAAE,MAAIC,MAAE,GAAGD,IAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAACA,IAAE,KAAKC,GAAC,GAAE,EAAE,KAAKA,GAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,EAAE,OAAM,MAAI,2BAA2BA,IAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,KAAK,CAAAC,QAAGA,IAAE,OAAKD,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAE,oBAAI,KAAG,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,OAAG;AAAK;AAAO,MAAGA,eAAa,IAAG;AAAC,MAAE,KAAKA,GAAC;AAAE;AAAA,EAAM;AAAC,MAAG,CAAC,GAAGA,GAAC;AAAE;AAAO,MAAI,IAAEA;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,IAAAC,IAAE,IAAI,CAAC,MAAIA,IAAE,IAAI,CAAC,GAAE,GAAG,GAAE,GAAEA,GAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG;AAAQ;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,cAAY;AAAI;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,sBAAoB,CAAC,GAAE,KAAK,iBAAe,GAAE,KAAK,WAAS,GAAE,KAAK,aAAW,GAAE,KAAK,mBAAiB,GAAE,KAAK,iBAAe,GAAE,KAAK,gBAAc,GAAE,KAAK,cAAY,GAAE,KAAK,aAAW,CAAC,GAAE,KAAK,oBAAkB,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,aAAW,oBAAI,WAAQ,KAAK,YAAU,OAAG,KAAK,gBAAc,EAAC,UAAS,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,CAAC,GAAE,QAAO,MAAK,IAAI,cAAa;AAAC,aAAO,MAAM,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,OAAG,EAAE,IAAI,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQ,KAAK,KAAK;AAAoB,WAAK,oBAAoB,CAAC,EAAE,QAAQ;AAAA,EAAC;AAAC;AAApiB,IAAsiB,KAAG,MAAM,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,MAAI,GAAE,KAAK,WAAS,CAAC,GAAE,KAAK,kBAAgB,CAAC,GAAE,KAAK,uBAAqB,GAAE,KAAK,QAAM,IAAI;AAAA,EAAE;AAAA,EAAC,MAAM,QAAO;AAAC,QAAG,KAAK,sBAAoB;AAAK,aAAO,KAAK,mBAAmB,KAAK,MAAI;AAAA,MAAC,CAAC;AAAE,QAAG,KAAK,mBAAiB;AAAK;AAAO,QAAI,IAAE,KAAK,kBAAkB;AAAE,aAAQC,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,UAAI,IAAE,EAAEA,GAAC;AAAE,UAAG,MAAM,KAAK,kBAAkB,CAAC,EAAE,SAAQ;AAAC,cAAM,KAAK,WAAW,CAAC;AAAE;AAAA,MAAM;AAAA,IAAC;AAAC,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,QAAG,KAAK,sBAAoB;AAAK,YAAM,IAAI,MAAM,YAAY,KAAK,WAAW,qHAAqH;AAAE,QAAG,KAAK,mBAAiB,MAAK;AAAC,UAAG,EAAC,MAAK,GAAE,WAAUA,IAAC,IAAE,KAAK,gCAAgC;AAAE,UAAGA;AAAE,cAAM,IAAI,MAAM,iCAAiC,CAAC,qHAAqH;AAAE,WAAK,WAAW,CAAC;AAAA,IAAC;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,eAAc;AAAC,WAAO,OAAO,KAAK,KAAK,eAAe;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,EAAE,KAAK,KAAK;AAAU,UAAG,KAAK,KAAK,iBAAgB;AAAC,YAAG,EAAC,WAAUA,IAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,YAAGA;AAAE,iBAAO;AAAA,MAAI;AAAM,eAAO;AAAK,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,WAAO,KAAK,KAAK,kBAAgB,KAAK,gBAAgB,CAAC,EAAE,UAAQ;AAAA,EAAI;AAAA,EAAC,gBAAgB,GAAEA,KAAE,IAAE,GAAE;AAAC,WAAO,KAAK,KAAK,mBAAiB,GAAG,GAAG,CAAC,oEAAoE,GAAE,UAAK,KAAK,gBAAgB,CAAC,IAAE,EAAC,SAAQA,KAAE,UAAS,EAAC,GAAE;AAAA,EAAG;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAG,KAAK,gBAAgB,CAAC,KAAG;AAAK,YAAM,IAAI,MAAM,iBAAiB,CAAC,yBAAyB;AAAE,QAAG,KAAK,cAAY,GAAE,KAAK,SAAS,CAAC,KAAG,MAAK;AAAC,WAAK,kBAAgB;AAAK,UAAG,EAAC,SAAQA,KAAE,WAAU,EAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAG,EAAE,IAAE,MAAMA,MAAEA;AAAG,eAAM;AAAA,IAAE;AAAC,WAAO,KAAK,kBAAgB,KAAK,SAAS,CAAC,GAAE,KAAK,uBAAuB,GAAE,KAAK,WAAS,IAAI,GAAG,KAAK,eAAe,GAAE;AAAA,EAAE;AAAA,EAAC,yBAAwB;AAAC,OAAG,KAAK,WAAW,EAAE,QAAQ,CAAAA,QAAG;AAAC,MAAAA,IAAE,aAAW,QAAMA,IAAE,UAAU,KAAK,eAAe;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,OAAG,CAAC,EAAE,QAAQ,OAAG;AAAC,QAAE,eAAa,QAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAE;AAAC,QAAIA,MAAE,KAAK,gBAAgB,CAAC;AAAE,QAAGA,OAAG;AAAK,YAAM,IAAI,MAAM,6BAA6B,CAAC,0BAA0B;AAAE,QAAG;AAAC,UAAI,IAAEA,IAAE,QAAQ;AAAE,UAAG,KAAG,EAAE,aAAa,OAAK,OAAO,EAAE,QAAM,YAAW;AAAC,YAAI,IAAE,EAAE,KAAK,sBAAqB,IAAE,EAAE,KAAK,OAAG,IAAE,KAAK,uBAAqB,SAAI,KAAK,SAAS,CAAC,IAAE,GAAE,KAAK,qBAAmB,MAAK,KAAG,EAAE,MAAM,QAAI,IAAE,KAAK,yBAAuB,KAAK,qBAAmB,MAAK,GAAG,6BAA6B,CAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,IAAG,MAAG;AAAE,eAAO,KAAK,qBAAmB,GAAE,EAAC,SAAQ,GAAE,WAAU,KAAE;AAAA,MAAC;AAAM,eAAO,KAAK,SAAS,CAAC,IAAE,GAAE,EAAC,SAAQ,MAAG,WAAU,MAAE;AAAA,IAAC,SAAO,GAAE;AAAC,aAAO,GAAG,6BAA6B,CAAC,SAAS,GAAE,GAAG,EAAE,SAAO,EAAE,OAAO,GAAE,EAAC,SAAQ,OAAG,WAAU,MAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,QAAG,EAAE,KAAK,KAAK;AAAiB,YAAM,IAAI,MAAM,GAAG,CAAC,gCAAgC;AAAE,SAAK,gBAAc,KAAG,KAAK,sBAAoB,QAAM,KAAK,wBAAuB,KAAK,KAAK,aAAW,KAAK,yBAAyB,CAAC,GAAE,KAAK,SAAS,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAAS,CAAC,IAAG,OAAO,KAAK,gBAAgB,CAAC,GAAE,KAAK,gBAAc,MAAI,KAAK,qBAAmB,MAAK,KAAK,cAAY,MAAK,KAAK,kBAAgB;AAAA,EAAK;AAAA,EAAC,oBAAmB;AAAC,QAAG,OAAO,KAAK,KAAK,eAAe,EAAE,WAAS;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,WAAO,OAAO,KAAK,KAAK,eAAe,EAAE,KAAK,CAAC,GAAEA,QAAI,KAAK,gBAAgBA,GAAC,EAAE,WAAS,KAAK,gBAAgB,CAAC,EAAE,QAAQ;AAAA,EAAC;AAAA,EAAC,kCAAiC;AAAC,QAAI,IAAE,KAAK,kBAAkB;AAAE,aAAQA,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,UAAI,IAAE,EAAEA,GAAC,GAAE,EAAC,SAAQ,GAAE,WAAU,EAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,UAAG,KAAG;AAAE,eAAM,EAAC,MAAK,GAAE,WAAU,EAAC;AAAA,IAAC;AAAC,UAAM,IAAI,MAAM,wEAAwE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,MAAM,WAAW,IAAIA,GAAC,GAAE,IAAE,EAAE,SAAQ,IAAE,KAAK,SAASA,GAAC,GAAE,IAAE,EAAE,SAASA,GAAC;AAAE,MAAE,YAAYA,KAAE,IAAE,GAAE,EAAE,UAAQ,GAAE,EAAE,KAAKA,KAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,KAAK,uBAAuB,KAAG,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAO,CAAC;AAAA,EAAG;AAAA,EAAC,KAAK,GAAEA,KAAE;AAAC,QAAI,IAAE;AAAK,QAAGA,OAAG,MAAK;AAAC,UAAG,OAAO,KAAG;AAAW,cAAM,IAAI,MAAM,qCAAqC;AAAE,MAAAA,MAAE;AAAA,IAAC,OAAK;AAAC,UAAG,OAAO,KAAG,YAAU,EAAE,aAAa;AAAQ,cAAM,IAAI,MAAM,gFAAgF;AAAE,UAAG,OAAOA,OAAG;AAAW,cAAM,IAAI,MAAM,gFAAgF;AAAE,UAAE;AAAA,IAAC;AAAC,QAAI;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,WAAW,CAAC,GAAE,MAAI,KAAK,SAAS,CAAC,GAAE,OAAK,IAAEA,IAAE,GAAE,aAAa,WAAS,QAAQ,MAAM,yCAAyC,GAAE,EAAE;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE;AAAC,MAAE;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE;AAAE,aAAOA,IAAE,GAAE;AAAA,IAAC,SAAO,GAAE;AAAC,YAAMA,IAAE,GAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,eAAc;AAAC,WAAO,EAAE;AAAA,EAAc;AAAA,EAAC,iBAAgB;AAAC,WAAO,EAAE;AAAA,EAAgB;AAAA,EAAC,MAAM,GAAE;AAAC,QAAIA,MAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,CAAC,GAAE,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,QAAI,EAAC,GAAE,MAAI;AAAC,UAAI,IAAE,WAAU,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,aAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAA,IAAC,EAAC,IAAG,IAAE,CAAC;AAAE,WAAO,KAAK,YAAY,KAAK,MAAM,YAAY,MAAK,GAAE,CAACA,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,eAAa,QAAM,KAAK,SAAQ,EAAE,GAAG,GAAE,KAAK,WAAW,KAAG;AAAM,YAAM,IAAI,MAAM,WAAW,CAAC,iCAAiC,KAAK,WAAW,GAAG;AAAE,WAAO,KAAK,cAAc,EAAC,YAAW,GAAE,QAAOA,KAAE,OAAM,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,IAAI,QAAQ,SAAS;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,WAAW,GAAE,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,WAAG,EAAE,UAAQ,cAAY,IAAE;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,kBAAkB,KAAK,MAAM,kBAAkB,SAAO,CAAC,GAAE,IAAE,IAAEA,MAAE,IAAE;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,YAAY,KAAK,WAAW,kCAAkC,CAAC,6BAA6B,CAAC,GAAG;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,QAAIA,KAAE,IAAE,CAAC,GAAE,IAAE,KAAK,SAAS,GAAE,IAAE,KAAK,MAAM,UAAS,IAAE,KAAK,MAAM;AAAW,SAAK,uBAAuB,KAAG,KAAK,MAAM,kBAAkB,KAAK,CAAC;AAAE,QAAI;AAAE,SAAK,eAAa,QAAM,KAAK;AAAQ,QAAI,GAAE,IAAE,GAAG,CAAC,IAAE,EAAE,aAAW,KAAK,MAAM,eAAa,OAAK,KAAK,MAAM,YAAY,OAAK;AAAG,QAAG,GAAG,CAAC,GAAE;AAAC,UAAG,EAAC,YAAW,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE;AAAE,WAAK,eAAa,QAAM,KAAK;AAAQ,UAAI,IAAE,GAAG,GAAE,KAAK,WAAW;AAAE,QAAE,KAAG,MAAK,MAAI,kCAAkC,CAAC,kBAAkB,KAAK,WAAW,GAAG,GAAE,IAAE,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ,WAAW;AAAE,YAAE,EAAE,WAAW,EAAC,QAAO,GAAE,OAAM,GAAE,SAAQ,KAAK,QAAO,CAAC;AAAE,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,aAAK,uBAAuB,KAAG,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAE,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,QAAM,OAAK,IAAE,KAAK,yBAAyB,CAAC,CAAC;AAAE,YAAG,GAAE;AAAC,cAAI,IAAE,KAAK,sBAAsB,GAAE,GAAE,CAAC;AAAE,cAAE,KAAK,2BAA2B,CAAC;AAAA,QAAC;AAAC,eAAO;AAAA,MAAC;AAAA,IAAC,OAAK;AAAC,UAAG,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,OAAG;AAAC,cAAI,IAAE,EAAE,IAAI,OAAG,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,MAAE;AAAE,UAAE,MAAI;AAAC,YAAI,IAAE,KAAK,QAAQ,WAAW;AAAE,YAAE,KAAK,KAAK,MAAI,EAAE,KAAK,SAAQ,CAAC,CAAC;AAAE,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,eAAO,KAAK,uBAAuB,KAAG,KAAK,sBAAsB,GAAE,GAAE,CAAC,GAAE;AAAA,MAAC;AAAA,IAAC;AAAC,QAAG,EAAC,QAAO,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAG,CAAC,IAAE,OAAK,EAAE,eAAc;AAAE,WAAO,KAAK,UAAU,MAAI,KAAK,MAAM,eAAc,MAAI,KAAK,MAAM,eAAc,MAAI;AAAC,OAAC,KAAK,IAAI,QAAQ,OAAO,KAAG,CAAC,KAAK,MAAM,YAAUA,MAAE,EAAE,KAAG,IAAE,KAAK,SAAS,cAAc,GAAE,GAAE,MAAI,EAAE,CAAC,GAAE,KAAK,IAAI,QAAQ,OAAO,KAAG,KAAK,SAAS,iBAAiB,CAAC,GAAEA,MAAE,EAAE;AAAA,IAAQ,CAAC,GAAE,KAAG,KAAK,YAAY,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC,GAAE,KAAK,MAAM,aAAW,KAAK,MAAM,cAAc,QAAQ,KAAK,EAAC,MAAK,GAAE,YAAW,KAAK,MAAM,WAAS,GAAE,oBAAmB,KAAK,MAAM,UAAS,cAAa,KAAK,MAAM,aAAW,GAAE,sBAAqB,KAAK,MAAM,YAAW,aAAY,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,KAAG,OAAK,EAAE,CAAC,EAAE,QAAM,IAAI,GAAE,cAAaA,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,cAAa,EAAE,QAAO,WAAU,EAAE,UAAS,CAAC,GAAE,MAAM,QAAQ,CAAC,IAAEA,MAAEA,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAE;AAAC,WAAO,EAAE,IAAI,OAAG,KAAK,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,gBAAc,CAAC,GAAE,IAAE,EAAE,iBAAe,CAAC,GAAE;AAAE,QAAE,iBAAe,EAAE,MAAM,QAAQA,GAAC,GAAE,MAAI,wDAAwD,GAAE,IAAE,OAAO,KAAKA,GAAC,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC,KAAG,IAAE,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC;AAAE,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,EAAE,CAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,+CAA+C;AAAE,QAAE,KAAG,WAAU,IAAE,KAAG,KAAK;AAAQ,QAAI,IAAE;AAAE,UAAI,YAAU,GAAG,EAAE,CAAC,CAAC,MAAI,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAG,QAAI,IAAE,EAAE,MAAM,GAAEA,KAAE,CAAC,GAAE,IAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,QAAG,KAAK,YAAY,GAAE,CAAC,GAAE,MAAI,UAAS;AAAC,UAAI,IAAE,KAAK,MAAM,WAAW,IAAI,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAK,MAAM,YAAU,IAAE,EAAE,OAAM,EAAE,QAAM;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAE,KAAG;AAAU,QAAI,IAAE,EAAC,QAAO,GAAE,OAAMA,KAAE,OAAM,EAAC;AAAE,WAAO,KAAK,yBAAyB,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAEA,KAAE;AAAC,QAAG,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,KAAK,aAAa,CAAC;AAAE,WAAO,KAAK,YAAY,GAAEA,GAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,MAAE,MAAG,GAAE,GAAE;AAAC,QAAE,KAAG,KAAK,eAAe,EAAE,SAAS,GAAE,KAAG,QAAM,MAAI,EAAE,UAAQ,IAAE,EAAE,KAAK,CAAC;AAAG,QAAI,IAAE,IAAI,GAAG,GAAEA,KAAE,GAAE,KAAK,aAAa,CAAC;AAAE,QAAG,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAG;AAAK,YAAM,IAAI,MAAM,sBAAsB,EAAE,IAAI,yBAAyB;AAAE,WAAO,KAAK,MAAM,oBAAoB,EAAE,IAAI,IAAE,GAAE,KAAK,OAAO,GAAE,KAAK,OAAO,GAAE;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,MAAM,cAAa,EAAE,UAAQ,YAAU,KAAK,MAAM;AAAmB,QAAI,IAAE;AAAE,MAAE,UAAQ,eAAa,EAAE,UAAQ,aAAW,IAAE,EAAE,OAAK,GAAG,EAAE,KAAK,IAAG,KAAK,MAAM,YAAU,GAAE,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM,MAAI,KAAK,MAAM,kBAAiB,KAAK,MAAM,WAAW,IAAI,EAAE,QAAO,EAAC,SAAQA,OAAG,KAAK,SAAQ,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,CAAC,IAAG,aAAa,MAAI,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,SAAK,YAAY,GAAEA,GAAC,GAAE,KAAK,QAAQ,OAAO,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,SAAK,MAAM,WAAW,IAAI,CAAC,KAAG,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,YAAUA,QAAI,KAAK,MAAM,WAAW,OAAO,CAAC,GAAE,KAAK,MAAM;AAAA,EAAiB;AAAA,EAAC,cAAc,GAAE;AAAC,QAAG,CAAC,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM;AAAE;AAAO,QAAIA,MAAE,KAAK,MAAM,WAAW,IAAI,EAAE,MAAM;AAAE,QAAG,KAAK,MAAM,cAAa,EAAE,UAAQ,aAAW,KAAK,MAAM,oBAAmB,KAAK,MAAM,YAAUA,IAAE,QAAO,EAAE,UAAQ,eAAa,EAAE,UAAQ,UAAS;AAAC,UAAI,IAAE,EAAE,OAAK,GAAG,EAAE,KAAK;AAAE,WAAK,MAAM,YAAU;AAAA,IAAC;AAAC,IAAAA,IAAE,QAAQ,YAAY,EAAE,MAAM,KAAG,KAAK,aAAa,EAAE,QAAOA,IAAE,OAAO;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,aAAQ,KAAK,KAAK,MAAM,qBAAoB;AAAC,UAAIA,MAAE,KAAK,MAAM,oBAAoB,CAAC;AAAE,WAAK,gBAAgBA,GAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,SAAK,cAAc,CAAC,GAAE,KAAK,MAAM,oBAAoB,EAAE,IAAI,KAAG,QAAM,OAAO,KAAK,MAAM,oBAAoB,EAAE,IAAI;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,QAAI,IAAE,KAAK,QAAQ,OAAO;AAAE,WAAO,EAAE,aAAW,KAAK,MAAM,YAAW,EAAE,iBAAe,KAAK,MAAM,gBAAe,EAAE,WAAS,KAAK,MAAM,UAAS,KAAK,MAAM,mBAAiB,MAAI,EAAE,aAAW,MAAG,EAAE,WAAS,SAAO,EAAE,UAAQ,CAAC,IAAG,EAAE,QAAQ,KAAK,uEAAuE,IAAG;AAAA,EAAC;AAAA,EAAC,MAAM,QAAQ,GAAE;AAAC,SAAK,MAAM,YAAU;AAAG,QAAIA,MAAE,KAAK,MAAM,UAAS,IAAE,KAAK,MAAM;AAAW,SAAK,MAAM,cAAc,UAAQ,CAAC,GAAE,KAAK,MAAM,cAAc,SAAO,MAAM,EAAE,GAAE,KAAK,MAAM,YAAU,OAAG,KAAK,MAAM,cAAc,YAAU,KAAK,IAAI,GAAG,KAAK,MAAM,cAAc,QAAQ,IAAI,OAAG,EAAE,kBAAkB,CAAC,GAAE,KAAK,MAAM,cAAc,WAAS,KAAK,MAAM,WAASA,KAAE,KAAK,MAAM,cAAc,aAAW,KAAK,MAAM,aAAW;AAAE,aAAQ,KAAK,KAAK,MAAM,cAAc;AAAQ,QAAE,eAAa,MAAM,EAAE,cAAa,EAAE,YAAU,MAAM,EAAE;AAAU,WAAO,KAAK,MAAM;AAAA,EAAa;AAAA,EAAC,WAAU;AAAC,WAAO,KAAK,MAAM,gBAAc,KAAG,KAAK,MAAM,gBAAc;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,MAAM,kBAAiB,YAAW,GAAE,QAAOA,KAAE,SAAQ,GAAE,OAAM,EAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAG,SAAO,IAAE,EAAE,WAAU,KAAG,SAAO,EAAE,WAAS,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAG,KAAG,MAAK;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,EAAE,MAAK,EAAE,KAAK;AAAE,eAAO,KAAK,WAAW,GAAE,EAAE,OAAM,EAAE,KAAK;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,CAAC,GAAE,EAAE,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC,GAAE,GAAE,CAAC,KAAI,KAAK,MAAM,WAAW,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,EAAE,OAAK,MAAG;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,SAAK,MAAM,kBAAgB,MAAI,KAAK,MAAM,aAAW,CAAC,IAAG,KAAK,MAAM;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,SAAK,MAAM;AAAA,EAAe;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,EAAC,OAAM,CAAC,GAAE,MAAK,iBAAgB,IAAG,KAAK,MAAM,cAAa;AAAE,UAAIA,IAAE,OAAK,IAAG,KAAK,MAAM,WAAW,KAAKA,GAAC,GAAE,KAAK,MAAM,cAAYA;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,GAAG,CAAC,GAAE,IAAE,IAAI,IAAIA,IAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,MAAM,YAAY,MAAM,QAAO,KAAI;AAAC,UAAI,IAAE,KAAK,MAAM,YAAY,MAAM,CAAC;AAAE,OAAC,EAAE,QAAM,CAAC,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,MAAM,WAAW,IAAI;AAAE,SAAK,MAAM,cAAY,KAAK,MAAM,WAAW,WAAS,IAAE,OAAK,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW,SAAO,CAAC,GAAEA,IAAE,QAAQ,OAAG;AAAC,OAAC,EAAE,QAAM,EAAE,YAAU,EAAE,MAAI,KAAK,MAAM,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE,IAAE,OAAG;AAAC,QAAG,EAAEA,IAAE,SAAO,GAAE,MAAI,2CAA2C,GAAE,KAAG,QAAM,EAAE,UAAQ;AAAU,YAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,GAAG;AAAE,QAAI,IAAE,KAAK,UAAU,MAAI,KAAK,UAAU,GAAE,MAAI,KAAK,QAAQ,GAAE,MAAI,KAAK,KAAK,WAAU,CAAC,CAAC;AAAE,MAAE,aAAa,IAAG,MAAI,gDAAgD;AAAE,QAAI,IAAE,GAAG,KAAK,MAAM,YAAWA,KAAE,CAAC;AAAE,QAAG,CAAC,KAAG,EAAE,WAAS,KAAGA,IAAE,SAAO;AAAE,YAAM,IAAI,MAAM,qIAAqI;AAAE,WAAO,KAAK,KAAK,YAAW,MAAI;AAAC,UAAI,IAAE,CAAC;AAAE,QAAE,EAAE,EAAE,IAAE,KAAG,OAAK,GAAG,EAAE,KAAK,IAAE,GAAE,GAAG,GAAE,GAAE,OAAG,KAAK,KAAK,CAAC,GAAE,EAAE;AAAE,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,EAAE,EAAE,CAAC;AAAE,aAAO,KAAK,MAAM,kBAAgB,MAAI,KAAK,MAAM,WAAW,QAAQ,OAAG;AAAC,iBAAQ,KAAK,EAAE;AAAM,YAAE,QAAQ;AAAA,MAAC,CAAC,GAAE,KAAK,MAAM,aAAW,OAAM,EAAC,OAAM,GAAE,OAAM,EAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,EAAE,GAAG,CAAC,GAAE,MAAI,mDAAmD,GAAE,IAAIA,QAAI;AAAC,QAAEA,IAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,kEAAkE;AAAE,UAAI,GAAE,IAAE,CAAC;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAE,CAAC,IAAE;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE,CAAC,GAAE,OAAK,IAAE,EAAE,GAAGA,KAAE,CAAC,GAAE,EAAE,EAAE,iBAAiB,IAAG,MAAI,4FAA4F,GAAE,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAI,kGAAkG,GAAE,EAAE,QAAO,IAAE,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,SAAS,GAAE,CAAC,GAAE,IAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,UAAE,EAAE,WAASA,IAAE,QAAO,MAAI,qKAAqK,GAAE,EAAE,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,sIAAsI;AAAE,YAAI,IAAE,CAAC;AAAE,eAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAE,CAAC,IAAE,MAAI;AAAA,QAAC,CAAC,GAAE;AAAA,MAAC;AAAE,aAAO,KAAK,cAAc,EAAC,aAAY,GAAE,eAAc,GAAE,QAAO,EAAC,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,WAAO,KAAK,MAAM,WAAW,IAAI,CAAC,EAAE,QAAQ,UAAU,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,GAAG,GAAE,IAAE,MAAM,KAAK,QAAQ,KAAK,CAAC;AAAE,WAAO,EAAE,SAAO,GAAG,IAAEA,KAAE;AAAA,EAAC;AAAA,EAAC,MAAM,GAAE;AAAC,WAAO,KAAK,MAAM,eAAa,SAAO,EAAE,UAAQ,KAAK,MAAM,YAAY,IAAG,KAAK,MAAM,YAAY,MAAM,KAAK,CAAC,IAAG;AAAA,EAAC;AAAA,EAAC,IAAI,sBAAqB;AAAC,WAAO,KAAK,MAAM;AAAA,EAAmB;AAAA,EAAC,QAAO;AAAC,SAAK,wBAAuB,KAAK,MAAM,QAAQ,GAAE,KAAK,IAAI,MAAM,GAAE,KAAK,QAAM,IAAI;AAAG,aAAQ,KAAK,KAAK;AAAS,WAAK,yBAAyB,CAAC,GAAE,KAAK,SAAS,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,SAAS,CAAC;AAAE,SAAK,cAAY,MAAK,KAAK,kBAAgB,MAAK,KAAK,qBAAmB;AAAA,EAAI;AAAC;AAAE,GAAG,eAAa;AAAE,GAAG,iBAAe;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAG,GAAGA,GAAC,GAAE,SAAS;AAAE,SAAO,EAAE,WAAW,GAAEA,KAAE,SAAS;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG;AAAE,MAAGA,IAAE,aAAW,MAAK;AAAC,QAAI,IAAE,IAAI,GAAGA,GAAC;AAAE,IAAAA,IAAE,YAAU,IAAI,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO,GAAGA,IAAE,UAAU,GAAG,GAAE,GAAG,MAAIA,IAAE,SAAS,GAAEA,IAAE;AAAS;AAAC,IAAI,IAAE,GAAG;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,GAAED,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,WAAU,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,GAAE,CAAC;AAAE,SAAS,KAAI;AAAC,SAAO,OAAO,aAAW,eAAa,aAAW;AAAI;AAAC,IAAI;AAAG,SAAS,GAAGD,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,OAAK;AAAO,WAAO;AAAG,MAAGA,OAAG,GAAG,GAAE;AAAC,QAAGA,QAAIA,MAAE,YAAWA,IAAE,YAAU;AAAc,aAAM;AAAG,QAAI,IAAEA,IAAE,aAAWA,IAAE,WAAS,OAAO,UAAQ,cAAY,OAAO,QAAM;AAAI,QAAG,CAAC,GAAE;AAAC,UAAIC,MAAED;AAAE,aAAOC,IAAE,iBAAeA,IAAE,cAAc;AAAA,IAAM;AAAC,WAAM,2TAA2T,KAAK,CAAC,KAAG,0kDAA0kD,KAAK,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAM;AAAE;AAAC,SAAS,KAAI;AAAC,SAAO,OAAO,UAAQ,eAAa,OAAO,YAAU,QAAM,OAAO,qBAAmB;AAAW;AAAC,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,SAAQ,MAAI,OAAG,CAAAD,QAAG;AAAC,EAAAA,OAAG,QAAQ,KAAK,6IAA6I;AAAC,CAAC;AAAE,GAAG,aAAa,cAAa,MAAI,GAAG,CAAC;AAAE,GAAG,aAAa,WAAU,MAAI,OAAO,WAAS,eAAa,OAAO,QAAQ,YAAU,eAAa,OAAO,QAAQ,SAAS,QAAM,WAAW;AAAE,GAAG,aAAa,aAAY,MAAI,OAAO,aAAW,eAAa,aAAW,QAAM,UAAU,aAAW,QAAM,SAAS,KAAK,UAAU,SAAS,KAAG,aAAa,KAAK,UAAU,MAAM,CAAC;AAAE,GAAG,aAAa,aAAY,MAAI,OAAO,aAAW,eAAa,aAAW,QAAM,UAAU,aAAW,QAAM,SAAS,KAAK,UAAU,SAAS,KAAG,QAAQ,KAAK,UAAU,MAAM,CAAC;AAAE,GAAG,aAAa,QAAO,MAAI,KAAE;AAAE,GAAG,aAAa,sCAAqC,MAAI,GAAG,QAAQ,OAAO,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,IAAE;AAAE,GAAG,aAAa,WAAU,MAAI,KAAE;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,OAAO,CAAC;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,GAAG,aAAa,yCAAwC,MAAI,KAAE;AAAE,GAAG,aAAa,wBAAuB,MAAI,KAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAG,GAAGA,GAAC;AAAE,WAAO,MAAI,WAAS,CAAC,IAAE,CAACA,IAAE,MAAM;AAAE,MAAG,GAAGA,GAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,YAAU;AAAO,WAAM,CAACA,IAAE,QAAOA,IAAE,QAAM,EAAE,MAAM;AAAA,EAAC,WAAS,GAAGA,GAAC;AAAE,WAAM,CAACA,IAAE,OAAO,QAAM,KAAG,OAAK,IAAE,GAAG,CAAC,EAAE;AAAE,MAAG,CAAC,MAAM,QAAQA,GAAC;AAAE,WAAM,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,SAAK,MAAM,QAAQC,GAAC,KAAG,GAAGA,GAAC,KAAG,MAAI;AAAU,MAAE,KAAKA,IAAE,MAAM,GAAEA,MAAEA,IAAE,CAAC;AAAE,SAAO,MAAM,QAAQD,GAAC,KAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,MAAEA,OAAG,CAAC,GAAE,CAAC,MAAM,QAAQD,GAAC,KAAG,CAAC,GAAGA,GAAC,GAAE;AAAC,MAAE,EAAE,WAAS,GAAE,MAAI,eAAeC,IAAE,KAAK,IAAI,CAAC,0DAA0D,EAAE,CAAC,CAAC,WAAW;AAAE;AAAA,EAAM;AAAC,IAAE,EAAE,SAAO,GAAE,MAAI,eAAeA,IAAE,KAAK,IAAI,CAAC,+CAA+CD,IAAE,MAAM,WAAW,GAAE,EAAEA,IAAE,WAAS,EAAE,CAAC,GAAE,MAAI,eAAeC,IAAE,KAAK,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,sBAAsBD,IAAE,MAAM,WAAW;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,OAAGA,IAAE,CAAC,GAAE,GAAEC,IAAE,OAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAGD,QAAI,qBAAoB;AAAC,QAAGA,OAAG;AAAK,YAAM,IAAI,MAAM,gCAAgC;AAAE,QAAGA,QAAI,aAAWA,QAAI,KAAGA,QAAI,aAAW,MAAI;AAAS,YAAM,IAAI,MAAM,aAAaC,GAAC,gBAAgB,CAAC,aAAaD,GAAC,oBAAoB,CAAC,SAAS;AAAA,EAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,MAAGD,eAAa,GAAG;AAAE,WAAO,GAAG,GAAEA,IAAE,OAAM,GAAEC,GAAC,GAAED;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAG,MAAI,YAAU,CAAC,QAAO,SAAQ,SAAS,EAAE,QAAQ,CAAC,KAAG,MAAI,IAAE,IAAG,GAAG,GAAE,GAAE,GAAEC,GAAC,GAAED,OAAG,QAAM,CAAC,GAAGA,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG,YAAU,OAAOA,OAAG,aAAW,OAAOA,OAAG,UAAS;AAAC,QAAI,IAAEA,OAAG,OAAK,SAAOA,IAAE,YAAY;AAAK,UAAM,IAAI,MAAM,aAAa,CAAC,gBAAgBC,GAAC,8CAA8C,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGD,KAAE,CAAC;AAAE,GAAC,GAAGA,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC;AAAG,MAAI,IAAE,MAAI,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE;AAAE,SAAO,EAAE,WAAW,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,MAAG,CAAC,MAAM,QAAQD,GAAC;AAAE,UAAM,IAAI,MAAM,YAAY,CAAC,cAAcC,GAAC,6CAA6C;AAAE,SAAOD,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,GAAG,CAAC,IAAI,CAAC,KAAIC,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAO,SAAS,EAAED,KAAE;AAAC,MAAI,IAAE,OAAO,KAAKA,GAAC;AAAE,MAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,yGAAyG,EAAE,MAAM,QAAQ;AAAE,MAAIC,MAAE,EAAE,CAAC,GAAE,IAAED,IAAEC,GAAC;AAAE,EAAAA,IAAE,SAAS,GAAG,MAAIA,MAAEA,IAAE,UAAU,GAAEA,IAAE,SAAO,CAAC,IAAGA,MAAEA,MAAE;AAAG,MAAI,IAAE,IAAI,MAAI;AAAC,MAAE,WAAWA,GAAC;AAAE,QAAG;AAAC,UAAI,IAAE,EAAE,GAAG,CAAC;AAAE,aAAO,GAAG,CAAC,KAAG,QAAQ,MAAM,yCAAyC,GAAE,EAAE,SAAS,CAAC,GAAE;AAAA,IAAC,SAAO,GAAE;AAAC,YAAM,EAAE,SAAS,IAAI,GAAE;AAAA,IAAC;AAAA,EAAC;AAAE,SAAO,OAAO,eAAe,GAAE,QAAO,EAAC,OAAMA,KAAE,cAAa,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,QAAO,SAAS,GAAE,IAAE,EAAE,GAAE,QAAO,SAAS;AAAE,KAAGC,IAAE,OAAM,EAAE,OAAM,yBAAyBA,IAAE,KAAK,QAAQ,EAAE,KAAK,uCAAuC;AAAE,MAAI,IAAE,EAAC,MAAKA,KAAE,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,KAAG;AAAK,QAAE,GAAGD,GAAC;AAAA,WAAU,MAAI;AAAY,UAAM,IAAI,MAAM,kFAAkF;AAAE,MAAG,GAAGA,GAAC,KAAG,GAAGA,GAAC,GAAE;AAAC,QAAG,MAAI,aAAW,MAAI;AAAQ,YAAM,IAAI,MAAM,2FAA2F,CAAC,GAAG;AAAE,WAAO,EAAE,QAAQ,wBAAwBA,KAAE,KAAGC,KAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAG,OAAOA,OAAG,YAAU,OAAOA,OAAG,aAAW,OAAOA,OAAG;AAAS,UAAM,IAAI,MAAM,0HAA0H;AAAE,MAAG,KAAG,MAAK;AAAC,OAAG,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGC,GAAC;AAAE,MAAE,MAAI,GAAE,MAAI,iCAAiC,CAAC,6BAA6B,CAAC,mBAAmB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,MAAIA,IAAE,SAAO,IAAE,MAAI,GAAG,EAAE,MAAM,CAAC,CAAC,IAAE;AAAG,QAAEA,IAAE,CAAC,MAAI,EAAE,CAAC,KAAG,CAAC,GAAE,MAAI,gDAAgDA,GAAC,wCAAwC,CAAC,KAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,CAAC,GAAGD,GAAC,KAAG,CAAC,MAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAG,IAAE,KAAGC,KAAED,MAAE,MAAI,WAAS,GAAGA,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAE,EAAE,WAAWA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,SAAQ,GAAE,SAAQ,GAAE,OAAM,GAAE,QAAO,GAAE,OAAM,GAAE,MAAK,GAAE,WAAU,EAAC;AAAE,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,OAAO,KAAK,GAAE;AAAC,WAAO,IAAIA,GAAE,CAAC,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,SAAO,CAAC,GAAE,KAAK,qBAAmB,GAAE,KAAG,SAAO,aAAa,UAAQ,IAAE,CAAC,CAAC,IAAG,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,IAAE,EAAE,SAAO,CAAC,GAAE,EAAE,WAAS;AAAG;AAAO,SAAK,oBAAkB,EAAE,CAAC,EAAE;AAAW,QAAIC,MAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,YAAI,EAAE,SAAO,KAAG,EAAE,eAAa,KAAK,sBAAoB,KAAK,oBAAkB;AAAQ,UAAI,IAAEA,MAAE,EAAE;AAAW,WAAK,OAAO,KAAK,EAAC,QAAO,GAAE,OAAMA,KAAE,KAAI,EAAC,CAAC,GAAEA,MAAE;AAAA,IAAC;AAAC,SAAK,OAAO,WAAS,MAAI,KAAK,aAAW,IAAG,KAAK,aAAW,KAAK,OAAO,KAAK,OAAO,SAAO,CAAC,EAAE;AAAA,EAAG;AAAA,EAAC,MAAM,IAAE,GAAEA,MAAE,KAAK,YAAW;AAAC,QAAG,KAAK,OAAO,WAAS;AAAE,aAAO,IAAI,YAAY,CAAC;AAAE,QAAG,IAAE,MAAM,OAAO,CAAC,CAAC,IAAE,IAAE,GAAEA,MAAE,MAAM,OAAOA,GAAC,CAAC,IAAE,IAAEA,KAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAEA,MAAE,KAAK,IAAI,KAAK,YAAWA,GAAC,GAAEA,OAAG;AAAE,aAAO,IAAI,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,iBAAiB,CAAC;AAAE,QAAG,MAAI;AAAG,YAAM,IAAI,MAAM,uCAAuC,CAAC,EAAE;AAAE,QAAI,IAAEA,MAAE,GAAE,IAAE,IAAI,YAAY,CAAC,GAAE,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,OAAO,QAAO,KAAI;AAAC,UAAI,IAAE,KAAK,OAAO,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,OAAM,IAAE,GAAE,IAAE,KAAK,IAAIA,KAAE,EAAE,GAAG,IAAE,EAAE,OAAM,IAAE,IAAI,WAAW,EAAE,QAAO,GAAE,IAAE,CAAC;AAAE,UAAG,EAAE,IAAI,GAAE,CAAC,GAAE,KAAG,EAAE,QAAOA,MAAE,EAAE;AAAI;AAAA,IAAK;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,KAAK,OAAO,WAAS,KAAG,IAAE,KAAG,KAAG,KAAK;AAAW,aAAM;AAAG,QAAG,KAAK,qBAAmB;AAAK,aAAO,KAAK,qBAAmB,KAAK,MAAM,IAAE,KAAK,iBAAiB,GAAE,KAAK;AAAmB,aAASA,IAAE,GAAE;AAAC,aAAO,IAAE,EAAE,QAAM,KAAG,KAAG,EAAE,MAAI,IAAE;AAAA,IAAC;AAAC,QAAGA,IAAE,KAAK,OAAO,KAAK,kBAAkB,CAAC,MAAI;AAAE,aAAO,KAAK;AAAmB,QAAI,IAAE,GAAG,KAAK,QAAOA,GAAC;AAAE,WAAO,MAAI,KAAG,MAAI,KAAK,qBAAmB,GAAE,KAAK;AAAA,EAAmB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE;AAAO,SAAKC,OAAG,KAAG;AAAC,QAAI,IAAE,KAAK,OAAO,IAAEA,OAAG,CAAC,IAAEA,KAAE,IAAE,EAAED,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI;AAAE,aAAO;AAAE,QAAE,IAAE,IAAE,IAAEC,MAAE,IAAE;AAAA,EAAC;AAAC,SAAM;AAAE;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,QAAO,IAAE;AAAC;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,SAAQ,IAAE;AAAC;AAAC,SAAS,MAAK;AAAC,IAAE,EAAE,IAAI,gCAA+B,KAAE,GAAE,QAAQ,KAAK,wDAAwD;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,IAAE,EAAE,QAAQ,8BAA8B,KAAG,QAAQ,KAAKA,MAAE,6EAA6E;AAAC;AAAC,GAAG,EAAE;AAAE,SAAS,MAAK;AAAC,IAAE,iBAAiB;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO;AAAC;AAAC,SAAS,MAAK;AAAC,SAAO,EAAE,OAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,QAAQA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,KAAKA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,KAAGA,GAAC,EAAE,QAAQ,CAAAC,QAAGA,IAAE,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,KAAKA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,KAAKA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,WAAWA,GAAC;AAAC;AAAC,SAAS,MAAK;AAAC,SAAO,EAAE,MAAM;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE;AAAW;AAAC,SAAS,IAAIA,KAAE;AAAC,IAAE,cAAcA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,YAAYA,GAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,SAAO,EAAE,mBAAmBA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,gBAAgBD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE;AAAO;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,IAAE,EAAE,YAAYA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG;AAAE,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,MAAM,QAAQD,GAAC,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAKA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,MAAM,QAAQA,GAAC,IAAEA,IAAE,CAAC,EAAE,SAAOA,IAAE,CAAC;AAAE,QAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAQ,EAAE,UAAQ,YAAU,EAAE,UAAQ;AAAY,YAAM,IAAI,MAAM,gCAAgC,CAAC,MAAM,EAAE,KAAK,EAAE;AAAE,QAAI,IAAE,EAAC,MAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAE,QAAG,EAAE,UAAQ,UAAS;AAAC,UAAI,IAAE,IAAI,QAAQ,OAAM,MAAG;AAAC,YAAI,IAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,EAAE,QAAO,CAAC,IAAE,KAAG,EAAE,QAAO,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,cAAI,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM;AAAE,YAAE,IAAI,GAAE,CAAC,GAAE,KAAG,IAAG,EAAE,IAAI,GAAE,CAAC,GAAE,KAAG,EAAE;AAAA,QAAM;AAAC,UAAE,CAAC;AAAA,MAAC,CAAC;AAAE,QAAE,KAAK,CAAC;AAAA,IAAC;AAAM,QAAE,KAAK,EAAE,KAAK,CAAC;AAAE,SAAG,SAAO,EAAE,QAAM,IAAGC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,SAAM,EAAC,MAAK,GAAG,CAAC,GAAE,OAAMA,IAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,MAAIC,IAAE,MAAM,IAAE,GAAE,IAAE,CAAC,CAAC;AAAE,MAAE,EAAE,IAAI,IAAE,GAAG,GAAEA,IAAE,MAAM,GAAE,IAAE,CAAC,CAAC,GAAE,KAAG;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,IAAE,KAAK,GAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAE,GAAG,EAAE,KAAK;AAAA,EAAC,WAASA,IAAE,UAAQ,UAAS;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,KAAE;AAAI,WAAG,KAAG,IAAI,YAAY,EAAE,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAM,QAAE,GAAGD,IAAE,KAAK;AAAE,SAAOC,MAAE;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,IAAE,KAAK,GAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAE,GAAG,EAAE,KAAK;AAAA,EAAC,WAASA,IAAE,UAAQ,UAAS;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,KAAE;AAAI,WAAG,KAAG,IAAI,YAAY,MAAM,EAAE,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAM,QAAE,GAAGD,IAAE,KAAK;AAAE,SAAOC,MAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEA,IAAE,OAAM,IAAEA,IAAE,OAAM,IAAE,GAAG,CAAC,GAAE,GAAE,IAAE;AAAE,MAAG,kBAAiBA,KAAE;AAAC,QAAI,IAAEA,IAAE;AAAa,QAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,UAAG,EAAE,SAAQ,KAAG,WAAU;AAAG,cAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,sBAAsB,EAAE,KAAK,qDAAqD;AAAA,IAAC,WAAS,EAAE,UAAQ,WAAU;AAAC,UAAG,MAAI;AAAU,cAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,sBAAsB,EAAE,KAAK,oDAAoD,CAAC,GAAG;AAAA,IAAC;AAAM,YAAM,IAAI,MAAM,UAAUA,IAAE,IAAI,mCAAmC,EAAE,KAAK,wEAAwE;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,UAAQ,UAAQ,IAAI,WAAW,CAAC,IAAE,IAAI,YAAY,CAAC;AAAE,QAAG,MAAI;AAAU,UAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ,UAAS;AAAC,YAAE,IAAI,aAAa,EAAE,MAAM;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,cAAI,IAAE,EAAE,CAAC;AAAE,YAAE,CAAC,IAAE,IAAE,EAAE,QAAM,EAAE;AAAA,QAAG;AAAA,MAAC,WAAS,EAAE,UAAQ;AAAU,YAAE,GAAG,EAAE,CAAC;AAAA;AAAO,cAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,2BAA2B;AAAA,aAAU,MAAI,SAAQ;AAAC,UAAG,EAAE,UAAQ,WAAS,EAAE,UAAQ;AAAS,cAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,yBAAyB;AAAE,UAAE,IAAI,WAAW,EAAE,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC;AAAE,UAAE,CAAC,IAAE,KAAK,MAAM,IAAE,EAAE,QAAM,EAAE,GAAG;AAAA,MAAC;AAAA,IAAC;AAAM,YAAM,IAAI,MAAM,gCAAgCC,GAAC,MAAM,CAAC,EAAE;AAAE,SAAG,IAAE;AAAA,EAAC,WAAS,MAAI,UAAS;AAAC,QAAI,IAAE,GAAGD,IAAE,KAAK;AAAE,QAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAI,YAAY,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,WAAG;AAAG,UAAI,IAAE,IAAI,WAAW,EAAE,MAAM,GAAE,IAAE,CAAC,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAG;AAAA,IAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,QAAG,MAAI;AAAU,UAAE,IAAI,aAAa,CAAC;AAAA,aAAU,MAAI;AAAQ,UAAE,IAAI,WAAW,CAAC;AAAA,aAAU,MAAI;AAAO,UAAE,IAAI,WAAW,CAAC;AAAA,aAAU,MAAI,aAAY;AAAC,UAAE,IAAI,aAAa,CAAC;AAAE,UAAI,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC,GAAE,IAAE,IAAI,aAAa,EAAE,SAAO,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,aAAO,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE;AAAA,IAAC;AAAM,YAAM,IAAI,MAAM,gCAAgCC,GAAC,MAAM,CAAC,EAAE;AAAE,SAAG,IAAE;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,WAAW,CAAC;AAAE,SAAK,EAAE,aAAWA,OAAG;AAAC,QAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,MAAMD,IAAE,KAAK;AAAE,QAAG,KAAG,KAAG,MAAK;AAAC,UAAI,IAAEC,MAAE,EAAE;AAAW,YAAM,IAAI,MAAM,sBAAsB,CAAC,2BAA2B;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,WAAW,EAAE,SAAO,EAAE,UAAU;AAAE,MAAE,IAAI,GAAE,CAAC,GAAE,EAAE,IAAI,IAAI,WAAW,CAAC,GAAE,EAAE,MAAM,GAAE,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE;AAAM;AAAC,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAED,IAAE,UAAU,GAAE,IAAE,IAAI,YAAY,CAAC;AAAE,WAAQ,KAAK,GAAE;AAAC,QAAI,IAAE,MAAM,GAAG,GAAE,OAAM,GAAE,OAAK,IAAE,MAAM,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,MAAM,GAAE,CAAC,EAAE;AAAE,QAAE,MAAM,GAAG,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,MAAM,GAAE,CAAC;AAAE,QAAE,EAAE,MAAM,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAGC,IAAE,EAAE,IAAI,IAAE,GAAE,GAAG,MAAI,UAAS;AAAC,UAAI,IAAE,GAAG;AAAE,uBAAgB,KAAG,GAAG,EAAE,KAAK,KAAG,EAAE,EAAE,IAAI,mCAAmC,KAAG,EAAE,YAAY,EAAE,MAAM;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAK,UAAM,IAAI,MAAM,wBAAwB,KAAK,UAAUA,GAAC,CAAC,EAAE;AAAE,MAAI,IAAE,GAAEC,MAAE,CAAC;AAAE,EAAAD,IAAE,QAAQ,OAAG;AAAC,QAAG,KAAG,EAAE,YAAWC,IAAE,KAAK,EAAE,eAAa,EAAE,OAAO,aAAW,IAAE,IAAI,EAAE,YAAY,CAAC,CAAC,GAAE,EAAE,aAAa,gBAAc,aAAa,cAAY,aAAa;AAAY,YAAM,IAAI,MAAM,mCAAmC,EAAE,YAAY,IAAI,EAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,IAAI,WAAW,CAAC,GAAE,IAAE;AAAE,SAAOA,IAAE,QAAQ,OAAG;AAAC,MAAE,IAAI,IAAI,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,EAAE;AAAA,EAAU,CAAC,GAAE,EAAE;AAAM;AAAC,IAAI,KAAG,OAAO,UAAQ,gBAAc,OAAO,QAAM,eAAa,OAAO,QAAM,eAAa,OAAO,QAAM;AAAa,SAAS,GAAGD,KAAE;AAAC,SAAO,KAAG,OAAO,WAAWA,KAAE,MAAM,IAAE,IAAI,KAAK,CAACA,GAAC,CAAC,EAAE;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG;AAAG,WAAO,OAAO,KAAKA,GAAC,EAAE,SAAS,QAAQ;AAAE,MAAI,IAAE,IAAI,WAAWA,GAAC,GAAEC,MAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,IAAE,GAAE;AAAI,IAAAA,OAAG,OAAO,aAAa,EAAE,CAAC,CAAC;AAAE,SAAO,KAAKA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,IAAG;AAAC,QAAI,IAAE,OAAO,KAAKA,KAAE,QAAQ;AAAE,WAAO,EAAE,OAAO,MAAM,EAAE,YAAW,EAAE,aAAW,EAAE,UAAU;AAAA,EAAC;AAAC,MAAI,IAAE,KAAKA,GAAC,GAAEC,MAAE,IAAI,WAAW,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,IAAAA,IAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE;AAAM;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAG,KAAKA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAI,OAAIA,MAAEA,IAAE,KAAK,GAAEA,IAAE,SAAS,CAAC;AAAG,IAAAA,MAAEA,IAAE,MAAM,GAAEA,IAAE,SAAO,CAAC;AAAE,MAAIC,MAAED,IAAE,MAAM,CAAC;AAAE,SAAOC,IAAEA,IAAE,SAAO,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,eAAcD,IAAE,eAAc,QAAOA,IAAE,QAAO,aAAYA,IAAE,aAAY,aAAYA,IAAE,aAAY,iBAAgB,EAAC;AAAE,SAAOA,IAAE,aAAW,SAAOC,IAAE,YAAUD,IAAE,YAAWA,IAAE,uBAAqB,SAAOC,IAAE,sBAAoBD,IAAE,sBAAqBA,IAAE,oBAAkB,SAAOC,IAAE,mBAAiBD,IAAE,mBAAkBA,IAAE,wBAAsB,SAAOC,IAAE,uBAAqBD,IAAE,uBAAsBA,IAAE,kBAAgB,SAAOC,IAAE,iBAAeD,IAAE,iBAAgBC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAC,eAAcD,IAAE,eAAc,QAAOA,IAAE,QAAO,aAAYA,IAAE,aAAY,aAAYA,IAAE,YAAW;AAAE,MAAGA,IAAE,kBAAgB,SAAO,EAAE,iBAAeA,IAAE,iBAAgBA,IAAE,mBAAiB,MAAK;AAAC,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,uDAAuD;AAAE,QAAG,CAACC;AAAE,YAAM,IAAI,MAAM,sDAAsD;AAAE,MAAE,cAAY,GAAE,EAAE,aAAWA;AAAA,EAAC;AAAC,SAAOD,IAAE,aAAW,SAAO,EAAE,YAAUA,IAAE,YAAWA,IAAE,uBAAqB,SAAO,EAAE,sBAAoBA,IAAE,sBAAqBA,IAAE,oBAAkB,SAAO,EAAE,mBAAiBA,IAAE,mBAAkBA,IAAE,wBAAsB,SAAO,EAAE,uBAAqBA,IAAE,uBAAsB;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,KAAE;AAAE,SAAOD,IAAE,mBAAiB,SAAO,CAACC,KAAE,CAAC,IAAE,MAAM,EAAED,IAAE,eAAe,IAAG,GAAGA,KAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,yBAAyB;AAAY,UAAM,IAAI,MAAM,qDAAqD;AAAE,SAAM,EAAC,WAAU,oBAAI,QAAK,mBAAkB,QAAO,oBAAmBA,IAAE,iBAAe,OAAK,IAAE,GAAG,KAAK,UAAUA,IAAE,aAAa,CAAC,GAAE,kBAAiBA,IAAE,eAAa,OAAK,IAAE,GAAG,KAAK,UAAUA,IAAE,WAAW,CAAC,GAAE,iBAAgBA,IAAE,cAAY,OAAK,IAAE,IAAI,GAAGA,IAAE,UAAU,EAAE,WAAU;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,OAAKD;AAAE,MAAE,KAAK,GAAGC,IAAE,OAAO;AAAE,SAAO;AAAC;AAAC,SAAS,KAAI;AAAC,MAAID,MAAE,CAAAC,QAAG;AAAC,QAAI,IAAEA,OAAG,IAAG,IAAE;AAAE,WAAK,EAAE,IAAE;AAAU,WAAG,SAAQ,MAAI;AAAE,WAAO,KAAG,UAAS,KAAG,WAAU,IAAE;AAAA,EAAC,GAAE,IAAE,IAAI,YAAY,IAAI;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQA,MAAE,GAAEA,MAAE,MAAKA;AAAI,MAAEA,GAAC,IAAED,IAAEC,GAAC;AAAE,WAAQA,MAAE,MAAKA,MAAE,MAAKA;AAAI,MAAEA,GAAC,IAAE,aAAWA,MAAE,QAAM;AAAI,SAAO;AAAC;AAAC,SAAS,KAAI;AAAC,MAAID,MAAE,IAAI,YAAY,EAAE;AAAE,EAAAA,IAAE,CAAC,IAAE,GAAEA,IAAE,EAAE,IAAE,YAAWA,IAAE,EAAE,IAAE,YAAWA,IAAE,EAAE,IAAE;AAAW,WAAQ,IAAE,GAAE,IAAE,IAAG;AAAI,IAAAA,IAAE,CAAC,IAAE,KAAG;AAAG,WAAQ,IAAE,IAAG,IAAE,IAAG;AAAI,IAAAA,IAAE,CAAC,IAAE,cAAY,IAAE,MAAI;AAAI,SAAOA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,IAAI,YAAY,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAG;AAAI,IAAAA,IAAE,CAAC,IAAE;AAAK,SAAOA,IAAE,CAAC,IAAEA,IAAE,EAAE,IAAE,GAAEA;AAAC;AAAC,SAAS,KAAI;AAAC,MAAIA,MAAE,GAAG,GAAE,IAAE,GAAG,GAAEC,MAAE,GAAG;AAAE,SAAO,OAAG;AAAC,QAAI,IAAE,IAAI,YAAY,IAAE,EAAE,MAAM,GAAE,IAAE,IAAI,YAAY,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAED,IAAEC,IAAE,KAAG,EAAE,KAAG,IAAE,KAAK,IAAE,EAAE,KAAG,EAAE;AAAE,QAAE,CAAC,IAAE;AAAA,IAAC;AAAC,WAAO,IAAI,aAAa,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,cAAa;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,mBAAmB,GAAE;AAAC,IAAAA,GAAE,YAAY,EAAE,YAAY,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,mBAAmB,GAAE;AAAC,IAAAA,GAAE,YAAY,EAAE,YAAY,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgB,GAAE;AAAC,WAAOA,GAAE,YAAY,GAAE,MAAM;AAAA,EAAC;AAAA,EAAC,OAAO,gBAAgB,GAAEC,KAAE;AAAC,WAAOD,GAAE,YAAY,GAAE,QAAOC,GAAC;AAAA,EAAC;AAAA,EAAC,OAAO,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,YAAOA,QAAI,SAAOD,GAAE,YAAY,EAAE,cAAYA,GAAE,YAAY,EAAE,aAAa,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,YAAI,QAAM,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC;AAAxiB,IAA0iB,KAAG,CAAAA,QAAG,GAAG,mBAAmBA,GAAC;AAAvkB,IAAykB,KAAG,CAAAA,QAAG,GAAG,mBAAmBA,GAAC;AAAtmB,IAAwmB,KAAG,CAAAA,QAAG,GAAG,gBAAgBA,GAAC;AAAloB,IAAooB,KAAG,CAACA,KAAE,MAAI,GAAG,gBAAgBA,KAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAsB,KAAG;AAAzB,IAA2B,KAAG;AAA9B,IAA6C,KAAG;AAAmB,SAAS,KAAI;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,YAAY;AAAE,UAAM,IAAI,MAAM,yFAAyF;AAAE,MAAIA,MAAE,OAAO,UAAQ,cAAY,OAAK,QAAO,IAAEA,IAAE,aAAWA,IAAE,gBAAcA,IAAE,mBAAiBA,IAAE,eAAaA,IAAE;AAAc,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,2DAA2D;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,IAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC,GAAE,EAAE,kBAAkB,IAAG,EAAC,SAAQ,YAAW,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,YAAU,GAAG,GAAE,KAAG,QAAM,CAAC;AAAE,YAAM,IAAI,MAAM,gEAAgE;AAAE,SAAK,YAAU;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,0FAA0F;AAAE,WAAO,KAAK,eAAe,KAAK,WAAU,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,KAAK,eAAe,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEC,KAAE;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE;AAAO,YAAGA,OAAG,MAAK;AAAC,cAAI,IAAE,EAAE,YAAY,IAAG,UAAU,GAAE,IAAE,EAAE,YAAY,EAAE,EAAE,IAAI,KAAK,SAAS;AAAE,YAAE,YAAU,MAAI;AAAC,gBAAG,EAAE,UAAQ;AAAK,qBAAO,EAAE,MAAM,GAAE,EAAE,IAAI,MAAM,gCAAgC,KAAK,SAAS,iBAAiB,CAAC;AAAE,cAAE,EAAE,OAAO,cAAc;AAAA,UAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,QAAC,OAAK;AAAC,UAAAA,IAAE,aAAW,GAAG,KAAKA,IAAE,UAAU;AAAE,cAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,EAAE,YAAY,IAAG,WAAW,GAAE,IAAE,EAAE,YAAY,EAAE,GAAE;AAAE,cAAG;AAAC,gBAAE,EAAE,IAAI,EAAC,WAAU,KAAK,WAAU,oBAAmB,EAAC,CAAC;AAAA,UAAC,SAAO,GAAE;AAAC,mBAAO,EAAE,CAAC;AAAA,UAAC;AAAC,cAAI;AAAE,YAAE,YAAU,MAAI;AAAC,gBAAE,EAAE,YAAY,IAAG,WAAW;AAAE,gBAAI,IAAE,EAAE,YAAY,EAAE,GAAE;AAAE,gBAAG;AAAC,kBAAE,EAAE,IAAI,EAAC,WAAU,KAAK,WAAU,gBAAeA,KAAE,oBAAmB,EAAC,CAAC;AAAA,YAAC,SAAO,GAAE;AAAC,qBAAO,EAAE,CAAC;AAAA,YAAC;AAAC,cAAE,YAAU,MAAI,EAAE,EAAC,oBAAmB,EAAC,CAAC,GAAE,EAAE,UAAQ,OAAG;AAAC,kBAAE,EAAE,YAAY,EAAE;AAAE,kBAAI,IAAE,EAAE,OAAO,KAAK,SAAS;AAAE,gBAAE,YAAU,OAAK,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK;AAAA,YAAE;AAAA,UAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI;AAAC,iBAAG,OAAK,EAAE,MAAM,IAAE,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAe,IAAI,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,WAAW,GAAG,UAAU,IAAEA,IAAE,MAAM,GAAG,WAAW,MAAM,IAAEA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,YAAU,GAAG;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAEC,QAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE,QAAO,IAAE,EAAE,YAAY,IAAG,UAAU,GAAE,IAAE,EAAE,YAAY,EAAE,EAAE,OAAO;AAAE,UAAE,YAAU,MAAI;AAAC,cAAI,IAAE,CAAC;AAAE,mBAAQ,KAAK,EAAE;AAAO,cAAE,EAAE,SAAS,IAAE,EAAE;AAAmB,YAAE,CAAC;AAAA,QAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAEA,IAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAGA,IAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,WAAO,IAAE,GAAG,CAAC,GAAE,IAAI,QAAQ,CAACA,KAAE,MAAI;AAAC,UAAI,IAAE,KAAK,UAAU,KAAK,IAAG,EAAE;AAAE,QAAE,kBAAgB,MAAI,GAAG,CAAC,GAAE,EAAE,YAAU,MAAI;AAAC,YAAI,IAAE,EAAE,QAAO,IAAE,EAAE,YAAY,IAAG,WAAW,GAAE,IAAE,EAAE,YAAY,EAAE,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE;AAAE,UAAE,YAAU,MAAI;AAAC,cAAG,EAAE,UAAQ;AAAK,mBAAO,EAAE,MAAM,GAAE,EAAE,IAAI,MAAM,gCAAgC,CAAC,iBAAiB,CAAC;AAAE;AAAC,gBAAI,IAAE,EAAE,OAAO,CAAC,GAAE,IAAE,MAAI;AAAC,kBAAE,EAAE,YAAY,IAAG,WAAW;AAAE,kBAAI,IAAE,EAAE,YAAY,EAAE,EAAE,OAAO,CAAC;AAAE,gBAAE,YAAU,MAAIA,IAAE,EAAE,OAAO,kBAAkB,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,YAAC;AAAE,cAAE,YAAU,GAAE,EAAE,UAAQ,QAAI,EAAE,GAAE,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK;AAAA,UAAE;AAAA,QAAC,GAAE,EAAE,UAAQ,QAAI,EAAE,MAAM,GAAE,EAAE,EAAE,KAAK,IAAG,EAAE,aAAW,MAAI;AAAC,eAAG,OAAK,EAAE,MAAM,IAAE,EAAE,aAAW,MAAI,EAAE,MAAM;AAAA,QAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,EAAE,KAAK;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAAW,KAAG;AAAd,IAAoC,KAAG;AAAvC,IAA8C,KAAG;AAAjD,IAAkE,KAAG;AAArE,IAAoF,KAAG;AAAvF,IAAqG,KAAG;AAAiB,SAAS,GAAGD,KAAE;AAAC,SAAM,EAAC,MAAK,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,UAAS,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,aAAY,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,YAAW,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,GAAE,eAAc,CAAC,IAAGA,KAAE,EAAE,EAAE,KAAK,EAAE,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,WAAQ,KAAK,OAAO,OAAOA,GAAC;AAAE,WAAO,aAAa,WAAW,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAM,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,uBAAuBA,GAAC,EAAE;AAAE,SAAO,EAAE,MAAM,GAAE,EAAE,SAAO,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,WAAW,GAAG,UAAU,IAAEA,IAAE,MAAM,GAAG,WAAW,MAAM,IAAEA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY,KAAG,OAAO,UAAQ,eAAa,OAAO,OAAO,gBAAc;AAAY,YAAM,IAAI,MAAM,yDAAyD;AAAE,QAAG,KAAK,KAAG,OAAO,cAAa,KAAG,QAAM,CAAC;AAAE,YAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,YAAU,GAAE,KAAK,OAAK,GAAG,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,0FAA0F;AAAE;AAAC,UAAIC,MAAE,KAAK,UAAU,EAAE,aAAa,GAAE,IAAE,KAAK,UAAU,EAAE,WAAW,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,KAAK,EAAE,UAAU;AAAE,UAAG;AAAC,aAAK,GAAG,QAAQ,KAAK,KAAK,MAAK,KAAK,UAAU,CAAC,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAASA,GAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAY,CAAC,GAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,YAAW,GAAG,CAAC,CAAC;AAAE,YAAI,IAAE,EAAC,QAAO,EAAE,QAAO,aAAY,EAAE,aAAY,aAAY,EAAE,aAAY,WAAU,EAAE,aAAW,OAAK,EAAE,YAAU,QAAO,qBAAoB,EAAE,uBAAqB,OAAK,EAAE,sBAAoB,QAAO,kBAAiB,EAAE,oBAAkB,OAAK,EAAE,mBAAiB,QAAO,sBAAqB,EAAE,wBAAsB,OAAK,EAAE,uBAAqB,QAAO,gBAAe,EAAE,kBAAgB,OAAK,EAAE,iBAAe,OAAM;AAAE,eAAO,KAAK,GAAG,QAAQ,KAAK,KAAK,eAAc,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,oBAAmB,EAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,GAAG,KAAK,IAAI,GAAE,IAAI,MAAM,yBAAyB,KAAK,SAAS,yGAAyG,EAAE,kBAAkB,sBAAsB,EAAE,gBAAgB,qBAAqB,EAAE,eAAe,GAAG;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,IAAI,CAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,kDAAkD,KAAK,SAAS,GAAG;AAAE,QAAG,EAAE,sBAAoB;AAAO,YAAM,IAAI,MAAM,2EAA2E;AAAE,QAAIA,MAAE,CAAC,GAAE,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,QAAQ,CAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,4CAA4C,KAAK,SAAS,eAAe;AAAE,IAAAA,IAAE,gBAAc;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,KAAK,KAAK,WAAW,CAAC;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,gDAAgD,KAAK,SAAS,gBAAgB;AAAE,IAAAA,IAAE,cAAY;AAAE,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,aAAa;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,MAAM,CAAC;AAAE,MAAAA,IAAE,SAAO,EAAE,QAAOA,IAAE,cAAY,EAAE,aAAYA,IAAE,cAAY,EAAE,aAAY,EAAE,aAAW,SAAOA,IAAE,YAAU,EAAE,YAAW,EAAE,uBAAqB,SAAOA,IAAE,sBAAoB,EAAE,sBAAqB,EAAE,oBAAkB,SAAOA,IAAE,mBAAiB,EAAE,mBAAkB,EAAE,wBAAsB,SAAOA,IAAE,uBAAqB,EAAE,uBAAsB,EAAE,kBAAgB,SAAOA,IAAE,iBAAe,EAAE;AAAA,IAAe;AAAC,QAAI,IAAE,KAAK,GAAG,QAAQ,KAAK,KAAK,UAAU;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,wDAAwD,KAAK,SAAS,gBAAgB;AAAE,WAAOA,IAAE,aAAW,GAAG,CAAC,GAAEA;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAkB,IAAI,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,MAAE,EAAE,EAAE,QAAQ,YAAY,GAAE,MAAI,0CAA0C,GAAE,EAAE,OAAO,UAAQ,eAAa,OAAO,OAAO,gBAAc,aAAY,MAAI,yDAAyD,GAAE,KAAK,KAAG,OAAO;AAAA,EAAY;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAEC,MAAE,KAAG,IAAG,IAAE,KAAG;AAAG,aAAQ,IAAE,GAAE,IAAE,KAAK,GAAG,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,GAAG,IAAI,CAAC;AAAE,UAAG,EAAE,WAAWA,GAAC,KAAG,EAAE,SAAS,CAAC,GAAE;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,UAAE,CAAC,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,QAAE,GAAG,CAAC;AAAE,QAAIA,MAAE,GAAG,CAAC;AAAE,QAAG,KAAK,GAAG,QAAQA,IAAE,IAAI,KAAG;AAAK,YAAM,IAAI,MAAM,8BAA8B,CAAC,GAAG;AAAE,QAAI,IAAE,KAAK,MAAM,KAAK,GAAG,QAAQA,IAAE,IAAI,CAAC;AAAE,WAAO,GAAGA,GAAC,GAAE;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAAa,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,WAAS,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,cAAa;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,gBAAgB,GAAEC,KAAE;AAAC,MAAE,KAAG,MAAK,MAAI,uCAAuC,GAAE,EAAE,SAAS,EAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE,QAAQ,EAAE,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC;AAAE,QAAI,IAAED,GAAE,YAAY;AAAE,MAAE,EAAE,SAAS,CAAC,KAAG,MAAK,MAAI,2DAA2D,CAAC,IAAI,GAAE,EAAE,SAAS,CAAC,IAAEC;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAE;AAAC,QAAIA,MAAED,GAAE,YAAY,EAAE,SAAS,CAAC;AAAE,QAAGC,OAAG;AAAK,YAAM,IAAI,MAAM,yCAAyC,CAAC,GAAG;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,OAAO,aAAY;AAAC,WAAO,OAAO,KAAKD,GAAE,YAAY,EAAE,QAAQ;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,QAAQ,EAAE,MAAI;AAAG,UAAM,IAAI,MAAM,6EAA6E,GAAG,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE;AAAE,SAAM,EAAC,QAAOA,IAAE,MAAM,EAAE,EAAE,CAAC,GAAE,MAAKA,IAAE,MAAM,EAAE,EAAE,CAAC,EAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAEC,MAAE,OAAG;AAAC,IAAED,QAAI,GAAE,MAAI,wCAAwCA,GAAC,GAAG;AAAE,MAAI,IAAE,GAAG,gBAAgBA,GAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,kEAAkEA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,yCAAyC,EAAE,MAAM,kCAAkCA,GAAC,GAAG;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,gBAAgB,CAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,uEAAuE,CAAC,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,yCAAyC,EAAE,MAAM,uCAAuC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,GAAGA,GAAC,EAAE,QAAO,IAAE,GAAGA,GAAC,EAAE,MAAK,IAAE,MAAI,GAAGA,GAAC,EAAE,QAAO,IAAE,MAAM,EAAE,KAAK;AAAE,EAAAC,OAAG,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,CAAC;AAAE,SAAOA,OAAG,CAAC,KAAG,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,CAAC,GAAE,EAAE;AAAkB;AAAC,eAAe,KAAI;AAAC,MAAID,MAAE,GAAG,WAAW,GAAE,IAAE,CAAC;AAAE,WAAQC,OAAKD,KAAE;AAAC,QAAI,IAAE,MAAM,GAAG,WAAWC,GAAC,EAAE,WAAW;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAI,IAAEA,MAAE,KAAG;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,GAAG,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,KAAE;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,IAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,cAAY,oBAAmB,KAAK,eAAa,CAAC,GAAE,KAAK,sBAAoB,GAAE,KAAK,mBAAiB;AAAA,EAAE;AAAA,EAAC,MAAM,GAAEC,KAAE;AAAC,WAAO,MAAM,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAK;AAAC,WAAO,YAAY,IAAI;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,QAAI,WAASA,QAAI;AAAO,YAAM,IAAI,MAAM,kDAAkDA,GAAC,EAAE;AAAE,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAI,gBAAa,KAAK,YAAY,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,WAAO,IAAI,YAAYA,GAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,QAAG,OAAO,UAAQ,eAAa,CAAC,EAAE,EAAE,QAAQ,sBAAsB,GAAE;AAAC,iBAAW,GAAEA,GAAC;AAAE;AAAA,IAAM;AAAC,SAAK,aAAa,KAAK,CAAC,GAAE,WAAW,MAAI;AAAC,aAAO,YAAY,EAAC,MAAK,KAAK,aAAY,OAAM,KAAK,aAAa,SAAO,EAAC,GAAE,GAAG;AAAA,IAAC,GAAEA,GAAC,GAAE,KAAK,qBAAmB,KAAK,mBAAiB,MAAG,OAAO,iBAAiB,WAAU,OAAG;AAAC,UAAG,EAAE,WAAS,UAAQ,EAAE,KAAK,SAAO,KAAK,aAAY;AAAC,UAAE,gBAAgB;AAAE,YAAI,IAAE,KAAK,aAAa,EAAE,KAAK,KAAK;AAAE,UAAE,GAAE,KAAK,uBAAsB,KAAK,wBAAsB,KAAK,aAAa,WAAS,KAAK,eAAa,CAAC,GAAE,KAAK,sBAAoB;AAAA,MAAE;AAAA,IAAC,GAAE,IAAE;AAAA,EAAE;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,GAAG,CAAC;AAAA,EAAC;AAAC;AAAE,IAAG,EAAE,EAAE,IAAI,YAAY,GAAE;AAAC,IAAE,EAAE,YAAY,WAAU,IAAI,IAAE;AAAE,MAAG;AAAC,OAAG,gBAAgB,GAAG,YAAW,IAAI,IAAE;AAAA,EAAC,SAAOD,KAAE;AAAA,EAAC;AAAC,MAAG;AAAC,OAAG,gBAAgB,GAAG,YAAW,IAAI,IAAE;AAAA,EAAC,SAAOA,KAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,aAAY,MAAI,GAAG,EAAC;AAA5B,IAA8B;AAAG,IAAI,KAAG,MAAK;AAAA,EAAC,cAAa;AAAC,SAAK,OAAK,GAAG,GAAE,KAAK,cAAY,IAAI,KAAK,KAAK;AAAA,EAAW;AAAA,EAAC,MAAM,GAAEC,KAAE;AAAC,WAAO,EAAE,EAAE,OAAO,SAAO,OAAK,EAAE,EAAE,OAAO,MAAM,GAAEA,GAAC,KAAG,MAAI,SAAO,KAAG,GAAG,YAAY,IAAG,GAAG,GAAEA,GAAC;AAAA,EAAE;AAAA,EAAC,MAAK;AAAC,QAAI,IAAE,QAAQ,OAAO;AAAE,WAAO,EAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAA,EAAG;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,QAAI,WAASA,QAAI;AAAO,YAAM,IAAI,MAAM,sDAAsDA,GAAC,EAAE;AAAE,WAAO,KAAK,YAAY,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,WAAO,EAAE,WAAS,IAAE,KAAG,IAAI,KAAK,KAAK,YAAYA,GAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,KAAK,MAAM,eAAe,CAAC,KAAG,KAAK,KAAK,MAAM,aAAa,CAAC,KAAG,KAAK,KAAK,MAAM,aAAa,CAAC,KAAG,KAAK,KAAK,MAAM,oBAAoB,CAAC;AAAA,EAAC;AAAC;AAAE,EAAE,EAAE,IAAI,SAAS,KAAG,CAAC,EAAE,EAAE,IAAI,YAAY,KAAG,EAAE,EAAE,YAAY,QAAO,IAAI,IAAE;AAAE,SAAS,GAAGD,KAAE,IAAE,WAAUC,KAAE;AAAC,SAAO,IAAE,KAAG,WAAU,GAAGD,GAAC,GAAE,IAAI,GAAGA,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,CAAC,GAAG,CAAC;AAAE,UAAM,IAAI,MAAM,mCAAmC,CAAC,EAAE;AAAE,MAAG,MAAI,YAAUC,IAAE,UAAQ,YAAU,MAAI,YAAUA,IAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,UAAQ,IAAIA,IAAE,SAAS,CAAC,CAAC;AAAC;AAAC,GAAG;AAAE,IAAI,KAAG,EAAC,QAAO,IAAG,MAAK,IAAG,OAAM,IAAG,OAAM,GAAE;AAAE,GAAG,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAE,GAAE,KAAI,UAAU;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,MAAG,CAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAAS,EAAE,UAAQ;AAAQ,WAAO,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,KAAK;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAIC,MAAE,EAAC,GAAE,EAAC;AAAE,WAAO,EAAE,UAAU,IAAGA,GAAC;AAAA,EAAC,OAAK;AAAC,QAAIA,MAAE,EAAC,GAAE,EAAC;AAAE,WAAO,EAAE,UAAU,IAAGA,GAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,IAAE,MAAM,QAAQA,GAAC,GAAE,MAAI,4DAA4D,GAAE,EAAEA,IAAE,UAAQ,GAAE,MAAI,uDAAuDA,IAAE,MAAM,EAAE;AAAE,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,MAAM,CAAC,GAAEC,MAAE,EAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQA,IAAE;AAAM,YAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC,GAAE,EAAE,QAAQ,OAAG;AAAC,QAAG,CAAC,GAAG,EAAE,OAAMA,IAAE,KAAK;AAAE,YAAM,IAAI,MAAM,0DAA0D;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAE,GAAE,KAAI,OAAO;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,GAAE;AAAC,MAAI,IAAED,IAAE,CAAC,GAAE,IAAE,CAAC,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,MAAK,MAAK,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE;AAAE,MAAG,MAAI;AAAe,QAAE,CAAC,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI;AAAgB,QAAE,CAAC,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE;AAAE,MAAG,MAAI;AAAQ,QAAE,gBAAe,IAAE,CAAC,GAAE,GAAE,GAAED,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA,WAAU,MAAI;AAAQ,QAAE,iBAAgB,IAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,SAAO,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,OAAG,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,gBAAe;AAAC,MAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,EAAE;AAAE,MAAG,MAAI;AAAe,KAAC,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI;AAAgB,KAAC,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,EAAC,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAGC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE;AAAE,SAAO,MAAI,kBAAgB,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,mBAAiB,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAG,EAAC,WAAU,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,aAAY,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,uBAAsB,GAAE,sBAAqB,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQD,KAAE,UAAS,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,gBAAe,GAAE;AAAC,MAAG,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,MAAG,MAAI;AAAe,KAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAED;AAAA,WAAU,MAAI;AAAgB,KAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAEA;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB,CAAC,EAAE;AAAE,MAAG,CAAC,GAAE,GAAE,GAAE,EAAC,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAGC,GAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE;AAAE,SAAO,MAAI,kBAAgB,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,mBAAiB,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAG,EAAC,WAAU,GAAE,YAAW,GAAE,SAAQ,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,GAAE,aAAY,GAAE,SAAQ,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,sBAAqB,GAAE,uBAAsB,GAAE,sBAAqB,GAAE,eAAc,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQD,KAAE,UAAS,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAG,MAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAGC,MAAE,GAAE,CAAC,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAGA,MAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,GAAGD,KAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,GAAE,GAAEC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,IAAAD,IAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,IAAE,IAAIA,IAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,GAAE,CAAC;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,KAAK,OAAOD,IAAE,CAAC,KAAGC,MAAE,KAAGA,MAAE,KAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAOA,OAAG,WAAS,CAACA,KAAEA,KAAEA,GAAC,IAAEA,IAAE,WAAS,IAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC,IAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,OAAOA,OAAG,WAAS,CAACA,KAAEA,KAAEA,GAAC,IAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,KAAG,IAAEA,MAAEA,OAAGA,MAAE,MAAI,IAAE;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,GAAE,GAAE;AAAE,MAAG,OAAOD,OAAG,UAAS;AAAC,QAAE,EAAC,KAAIA,KAAE,QAAOA,KAAE,MAAKA,KAAE,OAAMA,KAAE,MAAKA,QAAI,IAAE,UAAQ,SAAQ;AAAE,QAAI,IAAE,GAAG,CAAC,GAAEC,GAAC,GAAE,GAAE,GAAED,KAAE,CAAC;AAAE,QAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC,WAASA,QAAI,QAAO;AAAC,QAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,MAAE,CAAC;AAAE,QAAI,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,IAAG,IAAE,KAAG,IAAE,IAAEA,GAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,OAAM;AAAA,EAAC,WAASD,QAAI;AAAQ,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,QAAO,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,KAAG,CAAC,GAAE,IAAE,KAAK,MAAMC,MAAE,IAAE,KAAG,CAAC;AAAA,WAAU,OAAOD,OAAG,UAAS;AAAC,QAAI,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAI,iBAAeA,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,CAAC,EAAE,CAAC;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,MAAI,KAAG,MAAI,KAAG,MAAI,KAAG,MAAI,IAAE,UAAQ,WAAU,GAAE,IAAE,IAAI,IAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC,GAAE,IAAE,IAAIC,MAAE,IAAE,IAAE,KAAG,IAAE,GAAE,CAAC;AAAA,EAAC;AAAM,UAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,GAAE,GAAE,GAAE;AAAE,MAAGD,QAAI,YAAUA,MAAE,IAAG,OAAOA,OAAG,UAAS;AAAC,QAAE,EAAC,KAAIA,KAAE,QAAOA,KAAE,MAAKA,KAAE,OAAMA,KAAE,OAAMA,KAAE,MAAKA,KAAE,MAAKA,QAAI,IAAE,UAAQ,SAAQ;AAAE,QAAI,IAAE,GAAG,CAAC,GAAEC,KAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAED,KAAE,CAAC;AAAE,QAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC,WAASA,QAAI,QAAO;AAAC,QAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,MAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,QAAI,KAAG,IAAE,KAAG,IAAE,IAAE,GAAE,KAAG,IAAE,KAAG,IAAE,IAAEA,KAAE,KAAG,IAAE,KAAG,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,QAAE,EAAC,KAAI,GAAE,QAAO,GAAE,MAAK,GAAE,OAAM,GAAE,OAAM,GAAE,MAAK,GAAE,MAAK,OAAM;AAAA,EAAC;AAAM,UAAM,MAAM,8BAA8BD,GAAC,EAAE;AAAE,SAAM,EAAC,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,CAAC;AAAE,WAAO,KAAK,MAAMA,GAAC;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAQ,aAAO,KAAK,MAAMA,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,KAAK,KAAKA,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,KAAK,MAAMA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,wBAAwB,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,CAAC,GAAEC,KAAE,CAAC,IAAE,GAAGD,GAAC;AAAE,SAAO,MAAI,KAAGC,QAAI,KAAG,MAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,GAAC,KAAG,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC,EAAE,MAAM,OAAG,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAO,WAAM;AAAe,MAAGA,QAAI;AAAO,WAAM;AAAgB,QAAM,IAAI,MAAM,sBAAsBA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,MAAK;AAAC,QAAG,OAAO,KAAG;AAAS,YAAM,MAAM,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAE,QAAG,OAAO,KAAG;AAAS,QAAE,GAAG,CAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAA,aAAU,OAAO,KAAG;AAAS,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ,OAAG;AAAC,YAAE,GAAG,CAAC,GAAE,MAAI,YAAYD,GAAC,uDAAuDC,GAAC,gBAAgB,CAAC,GAAG;AAAA,QAAC,CAAC;AAAA,MAAC,CAAC;AAAA;AAAO,YAAM,MAAM,YAAYD,GAAC,gCAAgC,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAU,mBAAmB,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,IAAE,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAU,SAAS,GAAE,IAAE;AAAE,IAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,wEAAwEA,GAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,GAAG,GAAE,GAAG,WAAU,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAY,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,gFAAgF,CAAC,EAAE,GAAE,EAAE,OAAOC,OAAG,YAAUA,MAAE,KAAG,MAAM,QAAQA,GAAC,KAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAE,GAAE,MAAI,oDAAoDA,GAAC,GAAG,GAAE,GAAG,aAAY,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,GAAE,MAAI,oCAAoC;AAAE,MAAIC,MAAE,GAAGD,KAAE,WAAU,UAAS,mBAAmB;AAAE,MAAGC,IAAE,CAAC,EAAE,UAAQ,eAAaA,IAAE,QAAQ,OAAG;AAAC,QAAG,EAAE,UAAQ;AAAY,YAAM,IAAI,MAAM;AAAA,uBACju3D,EAAE,KAAK,IAAI;AAAA,EAAC,CAAC,GAAEA,IAAE,WAAS;AAAE,WAAO,GAAGA,IAAE,CAAC,CAAC;AAAE,MAAI,IAAEA,KAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,KAAI,QAAQ;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,IAAE,EAAC,YAAWC,KAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAU,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gCAAgC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,cAAa,eAAe,GAAE,IAAE,EAAE,GAAE,cAAa,eAAe,GAAE,IAAE,EAAEC,KAAE,YAAW,eAAe,GAAE,IAAE,EAAE,GAAE,QAAO,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC;AAAE,IAAE,EAAE,QAAM,IAAE,EAAE,QAAO,MAAI,iBAAiB,EAAE,IAAI,2CAA2C,EAAE,MAAM,EAAE,GAAE,EAAEC,IAAE,WAAS,EAAE,QAAO,MAAI,mBAAmBA,IAAE,MAAM,8CAA8C,EAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,CAAC,IAAE,MAAI,GAAE,MAAI,yBAAyB,EAAE,MAAM,CAAC,CAAC,sEAAsE,EAAE,KAAK,KAAK,CAAC,QAAQ,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,SAAOA,IAAE,SAAO,KAAGA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,GAAEA,IAAE,IAAI,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAE,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC,IAAE,IAAEA,KAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE;AAAM,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,EAAE,MAAK,MAAI,8EAA8E,GAAE,EAAE,KAAG,QAAM,EAAE,SAAO,EAAE,MAAK,MAAI,4EAA4E,GAAE,EAAE,KAAG,QAAM,EAAE,SAAO,EAAE,MAAK,MAAI,2EAA2E;AAAE,MAAI,IAAE,EAAC,GAAE,GAAG,CAAC,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,GAAE,IAAE,EAAC,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,EAAE,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,QAAO,WAAW,GAAE,IAAE,EAAEC,KAAE,YAAW,WAAW,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,SAAQ,WAAW;AAAG,MAAI;AAAE,SAAO,KAAG,SAAO,IAAE,EAAE,GAAE,UAAS,WAAW,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,oEAAoE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,wEAAwE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,qEAAqE,EAAE,IAAI,GAAG,GAAE,KAAG,QAAM,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU,GAAE,IAAE,EAAE,GAAE,WAAU,UAAU;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,yDAAyD,EAAE,KAAK,EAAE,GAAE,EAAEC,OAAG,GAAE,MAAI,sCAAsCA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,EAAE,QAAM,EAAE,SAAO,GAAE,MAAI,gGAAgG,EAAE,KAAK,oBAAoB,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAE,GAAE,KAAI,YAAY;AAAE,MAAG,CAAC,GAAGC,IAAE,OAAM,EAAE,KAAK;AAAE,UAAM,IAAI,MAAM,oDAAoDA,IAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAGA,IAAE,UAAQ,WAAS,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,wEAAwEA,IAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,MAAK,iBAAgB,OAAO;AAAE,MAAGC,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oEAAoEA,IAAE,IAAI,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qEAAqE,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAC,IAAGA,KAAE,IAAG,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,eAAc,GAAG,GAAE,IAAEC,IAAE;AAAM,MAAG,GAAG,CAAC,GAAE,EAAE,SAAOA,IAAE;AAAK,UAAM,IAAI,MAAM,+BAA+B,EAAE,MAAM,iBAAiBA,IAAE,IAAI,GAAG;AAAE,MAAG,EAAE,SAAOA,IAAE,MAAK;AAAC,QAAI,IAAEA,IAAE,MAAM,MAAM;AAAE,WAAK,EAAE,SAAO,EAAE;AAAQ,QAAE,QAAQ,CAAC;AAAE,IAAAA,MAAE,EAAEA,KAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,OAAM,IAAE,MAAM,KAAK,CAAC;AAAE,WAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE;AAAI,QAAG,EAAE,CAAC,MAAI,EAAE,CAAC;AAAE,QAAE,CAAC,IAAE;AAAA,aAAUA,IAAE,MAAM,CAAC,MAAI;AAAE,YAAM,IAAI,MAAM,mBAAmB,CAAC,6BAA6B,CAAC,IAAI;AAAE,MAAG,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,EAAE,EAAE,OAAO,OAAG,KAAG,CAAC,EAAE,WAAS;AAAE,WAAO,GAAGA,GAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGD,GAAC,GAAEC,MAAEA,OAAG,GAAG,CAAC;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,OAAM,GAAE,OAAMC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,aAAa;AAAE,MAAG,EAAE,KAAGC,KAAE,MAAI,uBAAuB,CAAC,wCAAwCA,GAAC,IAAI,GAAE,MAAIA;AAAE,WAAO,GAAG,EAAE,OAAM,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,cAAa,GAAE,cAAaA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAID,MAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGC,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,UAAS,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,GAAG,UAAS,GAAE,CAAC;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAM,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,UAAS,QAAQ,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,GAAG,UAAS,GAAE,CAAC,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,EAAE,MAAM,CAAC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,oEAAoEA,GAAC,kBAAkB,CAAC,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,kDAAkD,GAAE,EAAE,MAAI,OAAM,MAAI,sCAAsC,CAAC,uCAAuC;AAAE,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAEA,GAAC,GAAE,GAAE,QAAO,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,IAAED,IAAE,WAAS,EAAE,MAAK,MAAI,sBAAsBA,IAAE,MAAM,qBAAqB,EAAE,IAAI,cAAc;AAAE,MAAI,IAAEA,KAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAG,EAAE,EAAE,WAAS,GAAE,MAAI,qEAAqE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,EAAE,GAAE,EAAEC,IAAE,SAAO,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,GAAG,kBAAiB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,UAAS,iBAAiB;AAAE,SAAO,GAAGC,KAAE,GAAE,GAAE,GAAE,GAAE,QAAO,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,SAAQ,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,UAAS,QAAQ,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,wDAAwD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoC,EAAE,MAAM,CAAC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,sCAAsC,CAAC,yCAAyC,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,yDAAyD,GAAE,EAAE,GAAGA,GAAC,GAAE,MAAI,mDAAmD;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,IAAED,IAAE,WAAS,EAAE,MAAK,MAAI,sBAAsBA,IAAE,MAAM,qBAAqB,EAAE,IAAI,cAAc;AAAE,MAAI,IAAEA,KAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,WAAS,GAAE,MAAI,qEAAqE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,EAAE,GAAE,EAAEC,IAAE,SAAO,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,MAAM,CAAC,GAAE,MAAI,6CAA6C,CAAC,wCAAwCA,IAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,UAAS,iBAAiB;AAAE,SAAO,GAAGC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,WAAUC,KAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAQ,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,WAAUC,KAAE,SAAQ,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,WAAU,eAAe;AAAE,IAAE,EAAE,UAAQ,SAAQ,MAAI,8DAA8D,EAAE,KAAK,EAAE,GAAE,EAAE,EAAE,QAAM,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,EAAEC,OAAG,GAAE,MAAI,sCAAsCA,GAAC,GAAG,GAAE,EAAE,EAAE,SAAO,EAAE,QAAM,EAAE,SAAO,GAAE,MAAI,+FAA+F,EAAE,KAAK,oBAAoB,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKA,KAAE,cAAa,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAe,SAAS,GAAE,IAAEC,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,QAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,IAAE,GAAE,MAAI,sDAAsD,CAAC,EAAE,GAAE,EAAE,IAAE,KAAG,GAAE,MAAI;AAAA,MACltb,CAAC,QAAQ,CAAC;AAAA,MACV,EAAE,KAAK,EAAE,GAAE,EAAE,IAAE,KAAG,GAAE,MAAI;AAAA,MACxB,CAAC,QAAQ,CAAC;AAAA,UACN,EAAE,KAAK,EAAE,GAAE,EAAE,KAAG,IAAE,OAAK,GAAE,MAAI,8CAA8C,IAAE,CAAC,WAAW,CAAC,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,WAAU,GAAE,YAAWA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAkB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAkB,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,iEAAiE,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,uDAAuD,CAAC,mDAAmD,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQC,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,YAAY,GAAE,IAAE,EAAE,GAAE,UAAS,YAAY;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4DAA4D,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,QAAO,MAAI,gFAAgF,CAAC,EAAE;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,OAAI,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,oEAAoE,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,SAAQC,KAAE,KAAI,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,4BAA2B,MAAI,IAAG,kBAAiB,MAAI,IAAG,kBAAiB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,KAAI;AAAC,QAAI,IAAEA,MAAE,IAAE,GAAE,IAAED,IAAE,CAAC,KAAG;AAAE,KAAC,EAAE,EAAE,SAAO,IAAE,CAAC,KAAG,KAAG,KAAG,MAAI,KAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,KAAC,KAAG,QAAM,MAAI,KAAG,IAAE,MAAIC,IAAE,QAAQ,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,IAAID,IAAE,QAAO,EAAE,MAAM,GAAE,IAAE,IAAI,MAAMC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,KAAI;AAAC,QAAI,IAAED,IAAEA,IAAE,SAAO,IAAE,CAAC;AAAE,SAAG,SAAO,IAAE;AAAG,QAAI,IAAE,EAAE,EAAE,SAAO,IAAE,CAAC;AAAE,QAAG,KAAG,SAAO,IAAE,IAAG,MAAI;AAAE,QAAEC,MAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI;AAAE,QAAEA,MAAE,IAAE,CAAC,IAAE;AAAA,aAAU,MAAI,GAAE;AAAC,UAAI,IAAE,wDAAwDD,GAAC,QAAQ,CAAC;AAAI,YAAM,MAAM,CAAC;AAAA,IAAC;AAAM,QAAEC,MAAE,IAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,SAAQ,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,GAAE,KAAI,OAAO,GAAE,IAAE,EAAEA,KAAE,KAAI,OAAO,GAAE,IAAE,EAAED,KAAE,aAAY,SAAQ,MAAM,GAAE,IAAE,GAAG,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,WAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,KAAK,GAAE,IAAE,EAAE,GAAE,MAAK,KAAK;AAAE,KAAGC,IAAE,SAAO,KAAGA,IAAE,SAAO,OAAK,EAAE,SAAO,KAAG,EAAE,SAAO,IAAG,MAAI,+DAA+DA,IAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAEA,IAAE,SAAO,IAAEA,IAAE,OAAKA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAO,IAAE,EAAE,OAAK,EAAE,MAAM,CAAC;AAAE,MAAG,EAAE,MAAI,GAAE,MAAI,gEAAgE,CAAC,QAAQ,CAAC,GAAG,GAAEA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,CAAC;AAAA,EAAC,WAASA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC;AAAA,EAAC,WAASA,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAE,WAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,QAAK,GAAE;AAAC,MAAIC,MAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,QAAQ,CAAC,GAAE,IAAE,EAAC,UAASD,IAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,eAAc,mBAAmB;AAAE,MAAG,CAAC,GAAGC,IAAE,OAAM,CAAC;AAAE,UAAM,IAAI,MAAM,gCAAgCA,IAAE,KAAK,0CAA0C,CAAC,EAAE;AAAE,SAAOD;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,KAAK;AAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,UAAQ,WAAU,MAAI,2CAA2C,GAAE,EAAE,UAAQ,YAAU,IAAE,GAAG,GAAE,SAAS;AAAG,MAAIC,MAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC;AAAE,QAAGD,IAAEA,IAAE,SAAOC,MAAE,CAAC,MAAI,IAAE,IAAEA;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,SAAO,EAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,IAAAC,IAAE,QAAQ,CAAC,MAAI,KAAG,EAAE,KAAKD,IAAE,GAAG,CAAC,IAAE,EAAE,KAAK,EAAE,GAAG,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,QAAQ,CAAC,MAAI,MAAIC,IAAE,KAAKD,IAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGA,IAAE,CAAC,CAAC;AAAE,SAAM,CAACC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,IAAI,OAAG,CAAC;AAAE,SAAO,GAAGD,KAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,IAAE,GAAG,GAAEA,GAAC,GAAE,MAAI,GAAGD,GAAC,oDAAoD,CAAC,aAAaC,GAAC,SAAS;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,CAAC;AAAE,WAAO;AAAK,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,IAAAD,IAAE,QAAQ,CAAC,MAAI,MAAIC,IAAE,KAAK,CAAC;AAAE,SAAOD,IAAE,QAAQ,OAAGC,IAAE,KAAK,CAAC,CAAC,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,IAAI,CAAC,GAAEC,QAAI,CAACA,KAAE,CAAC,CAAC,EAAE,KAAK,CAAC,GAAEA,QAAI,EAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,IAAED,KAAE,IAAE,GAAE,EAAE;AAAE,IAAAC,IAAE,KAAK,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,kBAAiB,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,QAAO,KAAK,GAAE,IAAE,EAAE,GAAE,OAAM,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,OAAI,GAAGA,GAAC,KAAG,MAAI,YAAU,MAAM,QAAQA,GAAC,MAAI,MAAI;AAAY,UAAM,IAAI,MAAM,gFAAgF;AAAE,MAAG,MAAI,YAAU,GAAGA,GAAC,KAAG,EAAEA,eAAa;AAAY,UAAM,IAAI,MAAM,2EAA2E;AAAE,SAAO,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,QAAO,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,QAAQ,GAAEC,MAAE,CAAC;AAAE,SAAO,EAAE,UAAU,UAAS,EAAC,GAAE,EAAC,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK;AAAE,IAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,aAAYC,MAAE,MAAK,IAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE;AAAM,MAAG,GAAE;AAAC,QAAI,IAAE,GAAGA,KAAED,IAAE,KAAK;AAAE,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,MAAK;AAAC,MAAGD,IAAE,SAAO;AAAE,WAAO,GAAGA,GAAC;AAAE,MAAGA,IAAE,SAAO,KAAGC,QAAI;AAAK,WAAO,GAAG,EAAED,KAAE,CAAC,EAAE,CAAC,GAAE,GAAEC,GAAC;AAAE,MAAGD,IAAE,SAAO,KAAG,OAAOC,OAAG,YAAU,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,MAAI;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,IAAE;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,KAAG;AAAE,aAAO,GAAG,GAAGD,GAAC,GAAEC,GAAC;AAAE,QAAG,MAAI,eAAa,MAAI;AAAE,aAAO,GAAG,GAAG,GAAG,GAAGD,GAAC,GAAE,GAAG,GAAE,OAAO,CAAC,GAAEC,GAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqC,CAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,MAAI;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,IAAE,CAAC;AAAE,QAAG,MAAI,IAAE;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI,KAAG;AAAE,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,IAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,MAAI,SAAO,MAAI;AAAY,aAAO,GAAG,GAAG,GAAGD,GAAC,GAAEC,GAAC,CAAC;AAAE,UAAM,IAAI,MAAM,qCAAqC,CAAC,EAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,gCAAgCA,GAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,SAAO,GAAGD,KAAE,aAAY,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,mBAAmB;AAAE,IAAE,KAAGC,IAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC,GAAE,IAAE,EAAC,KAAI,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB;AAAE,IAAEC,IAAE,SAAO,EAAE,QAAO,MAAI,qCAAqCA,IAAE,IAAI,8BAA8B,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,WAAU;AAAC,OAAG,SAAO,IAAED;AAAG,MAAI,IAAE,GAAG,CAACA,KAAE,CAAC,GAAE,CAAC,GAAE,IAAEA,OAAG,IAAEA,MAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,IAAI,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,SAAS,GAAE,CAACA,KAAE,CAAC,CAAC;AAAE,MAAGC,OAAG;AAAK,WAAO;AAAE,MAAGA,IAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,WAAS;AAAE,WAAO,GAAG,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,qEAAqEA,IAAE,MAAM,IAAI;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,QAAQ,GAAE,IAAE,EAAE,GAAE,WAAU,UAAS,OAAO,GAAE,IAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,MAAKC,KAAE,WAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,WAAU,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,gBAAe,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,gBAAe,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,OAAM,EAAED,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,WAAW,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,QAAO,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,QAAO,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,aAAY,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,aAAY,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG;AAAE,UAAM,IAAI,MAAM,0CAA0C;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAK,GAAE,KAAIC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,IAAE,GAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,4BAA4B;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI;AAAA,sBACjlU,EAAE,IAAI,GAAG,GAAE,EAAE,GAAG,CAAC,GAAE,MAAI,2FAA2F,CAAC,GAAG;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,aAAY,GAAE,MAAKC,KAAE,OAAM,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,6BAA4B,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,4CAA4C,GAAE,CAAC,GAAEC,QAAI;AAAC,QAAI,IAAE,EAAE,GAAE,KAAI,WAAU,mBAAmB,GAAE,IAAEA,OAAG,OAAK,EAAEA,KAAE,MAAK,SAAS,IAAE;AAAK,WAAO,EAAE,KAAK,MAAI;AAAC,UAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,aAAO,KAAG,QAAM,GAAG,EAAE,OAAM,EAAE,OAAM,gFAAgF,GAAE,GAAG,CAAC,GAAE,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,6CAA6C,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,MAAM,QAAQ,CAAC,GAAE,MAAI,kFAAkF;AAAE,QAAI,IAAE,GAAG,GAAE,QAAO,YAAW,mBAAmB,GAAE,IAAEA,OAAG,OAAK,EAAEA,KAAE,MAAK,UAAU,IAAE;AAAK,WAAO,EAAE,KAAK,MAAI;AAAC,UAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,GAAG,CAAC,GAAE,GAAE,CAAC;AAAE,aAAO,KAAG,QAAM,GAAG,EAAE,OAAM,EAAE,OAAM,+FAA+F,GAAE,GAAG,CAAC,GAAE;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,oDAAoD,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,aAAa,IAAG,MAAI,qDAAqD,GAAE,EAAEA,OAAG,QAAMA,eAAa,IAAG,MAAI,0DAA0D;AAAE,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAU,MAAID,IAAE,CAAC,GAAE,CAAC,CAAC,GAAEC,GAAC;AAAE,WAAO,GAAG,CAAC,GAAE,EAAC,MAAK,EAAE,CAAC,GAAE,OAAM,EAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,EAAE,GAAGA,GAAC,GAAE,MAAI,qDAAqD,GAAE,CAAC,GAAEC,QAAI;AAAC,MAAE,MAAM,QAAQ,CAAC,KAAG,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,oEAAoE,GAAE,EAAEA,OAAG,QAAMA,eAAa,IAAG,MAAI,8DAA8D;AAAE,QAAI,IAAE,EAAE,UAAU,MAAID,IAAE,GAAG,CAAC,GAAE,GAAEC,GAAC;AAAE,WAAOA,OAAG,QAAM,GAAG,EAAE,MAAM,OAAMA,IAAE,OAAM,uGAAuG,GAAE,GAAG,EAAE,KAAK,GAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAE,GAAGA,GAAC,GAAE,MAAI,qDAAqD,GAAE,EAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,MAAM,OAAG,aAAa,EAAE,GAAE,MAAI,+EAA+E;AAAE,MAAIC,MAAE,KAAG;AAAK,MAAG,CAACA,KAAE;AAAC,QAAE,CAAC;AAAE,aAAQ,KAAK,EAAE;AAAoB,QAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,MAAE,EAAE,OAAO,OAAG,CAAC,EAAE,SAAS,IAAE,MAAK,IAAE,EAAE;AAAO,MAAE,EAAE,OAAO,OAAG,EAAE,SAAS,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,gGAAgG,CAAC,0BAA0B;AAAE,MAAI,IAAE,MAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,EAAE,UAAUD,KAAE,GAAE,MAAK,CAAC;AAAE,IAAE,EAAE,KAAK,OAAG,KAAG,IAAI,GAAE,MAAI,8LAA8L,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,iFAAiF,EAAE,IAAI,SAAS;AAAE,MAAI,IAAE,CAAC;AAAE,SAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,CAAC,KAAG,SAAO,EAAE,EAAE,IAAI,IAAE,EAAE,CAAC;AAAA,EAAE,CAAC,GAAE,KAAG,QAAM,EAAE,QAAQ,OAAG,EAAE,EAAE,IAAI,IAAE,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,WAAWA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,OAAO,CAAAC,QAAGA,OAAG,IAAI,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,oEACryG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,KAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,YAAY;AAAE,SAAO,GAAG,QAAI,EAAC,OAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,UAAS,OAAG,GAAG,GAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,EAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,YAAY;AAAE,MAAG,MAAI,OAAK,IAAEC,IAAE,OAAK,IAAG,MAAIA,IAAE,OAAK;AAAE,UAAM,MAAM,gFAAgFA,IAAE,IAAI,iBAAiB,CAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,SAAS,GAAE,GAAG,GAAG,GAAG,CAAC,GAAE,GAAE,IAAE,CAAC,CAAC;AAAE,WAAO,EAAE,CAAC,CAAC,CAAC,GAAE,EAAC,OAAM,GAAE,UAAS,CAAC,GAAE,MAAI;AAAC,UAAG,CAAC,CAAC,IAAE,GAAE,IAAE,MAAG,IAAE,GAAG,CAAC;AAAE,aAAO,GAAG,GAAE,GAAG,GAAG,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC,CAAC,EAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,GAAG,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,GAAE,EAAE,KAAK,GAAE,CAAC;AAAE,MAAGC,KAAE;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,cAAa,MAAM;AAAE,KAAGC,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,cAAa,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,aAAY,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,aAAY,MAAM;AAAE,KAAGC,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,cAAa,MAAM,GAAE,IAAE,EAAE,GAAE,KAAI,cAAa,MAAM;AAAE,SAAO,GAAGC,IAAE,OAAM,EAAE,KAAK,GAAE,GAAG,GAAGD,KAAE,CAAC,GAAE,GAAG,GAAGA,KAAE,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG;AAAW,SAAS,GAAGA,KAAE,GAAEC,MAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,kBAAiB,cAAc,GAAE,IAAE,EAAE,GAAE,UAAS,cAAc,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC;AAAE,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,sDAAsD;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,GAAG,EAAE,KAAK,KAAG;AAAG,UAAM,IAAI,MAAM,qCAAqC,EAAE,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,KAAG;AAAG,UAAM,IAAI,MAAM,oCAAoC,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,uDAAuD,EAAE,IAAI,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,wEAAwEA,GAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,WAAU,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQA,KAAE,KAAI,GAAE,iBAAgB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAEC,KAAE,GAAE,GAAE,IAAE,SAAQ;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,SAAQ,MAAI,gFAAgF,CAAC,EAAE,GAAE,GAAG,aAAY,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQC,KAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,mBAAmB,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,SAAQC,KAAE,KAAI,GAAE,qBAAoB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,CAAC,GAAE,SAAQ,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAE,GAAE,KAAI,SAAS;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAASA,MAAE,GAAGA,KAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,WAAU;AAAC,MAAG,GAAGA,GAAC,GAAE,MAAI,aAAY;AAAC,QAAI,IAAE,GAAGA,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAIC,MAAE,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,SAAO,EAAE,WAAWC,KAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,WAAU;AAAC,MAAG,GAAGA,GAAC,GAAE,MAAI,aAAY;AAAC,QAAI,IAAE,GAAGA,KAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,SAAS;AAAE,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAIC,MAAE,GAAG,GAAGD,GAAC,GAAE,CAAC;AAAE,SAAO,EAAE,WAAWC,KAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE,EAAC,UAASC,MAAE,KAAI,IAAE,CAAC,GAAE;AAAC,MAAGA,QAAI,QAAMA,QAAI;AAAK,UAAM,IAAI,UAAU,GAAGA,GAAC,4CAA4C;AAAE,MAAGD,QAAI;AAAO,WAAM,CAAC;AAAE,MAAI,IAAE,EAAEA,KAAE,KAAI,YAAWA,eAAa,KAAGA,IAAE,QAAM,SAAS;AAAE,MAAG,MAAI;AAAO,WAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,GAAE,KAAI,YAAW,aAAa,KAAG,EAAE,QAAM,SAAS,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAE,KAAK;AAAE,SAAOC,QAAI,QAAM,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,CAAC,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,CAAC,MAAI,IAAE,EAAE,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAG,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,CAAC,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,EAAE,GAAE,KAAI,SAAS;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAEA,IAAE,UAAQ,WAASA,MAAE,GAAGA,KAAE,OAAO,GAAE,IAAE,GAAG,GAAE,OAAO,IAAG,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,IAAEA,QAAI,aAAWA,QAAI,aAAY,MAAI,+DAA+DA,GAAC,GAAG;AAAE,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,IAAE,EAAE,WAAS,EAAE,MAAK,MAAI,wCAAwC,EAAE,IAAI,SAAS,EAAE,MAAM,GAAG;AAAE,MAAI,IAAEC,QAAI,YAAU,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK;AAAI,MAAE,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,EAAE,MAAM,CAAC,IAAE,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,EAAE,CAAC,KAAG,EAAE,MAAM,CAAC,IAAE,GAAE,MAAI,wBAAwB,CAAC,uCAAuC,EAAE,MAAM,CAAC,IAAE,CAAC,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,UAAS,GAAE,MAAKA,IAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,KAAK,GAAE,IAAE,EAAE,GAAE,KAAI,KAAK;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,EAAAD,MAAE,EAAEA,KAAE,KAAI,SAAS;AAAE,MAAI,IAAE,GAAG,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE;AAAM,EAAAA,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAG,MAAI,IAAE,GAAG,GAAG,GAAGD,KAAE,SAAS,GAAE,EAAE,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,MAAK,GAAE,UAAS,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,IAAE,GAAGA,KAAE,KAAI,cAAc,GAAE,IAAE,GAAG,GAAE,KAAI,cAAc,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC,EAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,MAAE,KAAK,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG;AAAE,MAAE,KAAK,EAAE,CAAC,CAAC,GAAE,EAAE,KAAK,EAAE,IAAE,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE;AAAK,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,+DAA+D,CAAC,GAAG;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,gDAAgD,CAAC,EAAE;AAAE,EAAAC,MAAEA,OAAG,KAAK,OAAO;AAAE,MAAI,IAAE,EAAC,QAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,MAAKA,KAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,IAAI,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,YAAW,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,GAAE,IAAE,SAAQ;AAAC,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,iDAAiD,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,SAAQ,EAAED,KAAE,WAAU,UAAS,OAAO,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQC,KAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,UAAU,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,MAAK,cAAc,GAAE,IAAE,EAAE,GAAE,MAAK,cAAc;AAAE,IAAEC,IAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,+DAA+DA,IAAE,IAAI,QAAQ,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAEA,KAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,KAAK;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAC,UAAS,GAAE,eAAcC,IAAC,GAAE,IAAE,EAAC,GAAE,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,GAAE,MAAI,kDAAkD,GAAE,GAAGD,KAAE,CAAC,CAAC,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,SAAO,EAAE,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,KAAG,EAAE,CAAC,EAAE,WAAS,GAAE,MAAI,uDAAuD,GAAE,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,gBAAgB;AAAE,IAAE,EAAE,QAAM,IAAE,EAAE,QAAO,MAAI,cAAc,EAAE,IAAI,kCAAkC,EAAE,MAAM,EAAE,GAAE,EAAEC,IAAE,WAAS,EAAE,QAAO,MAAI,qBAAqBA,IAAE,MAAM,kCAAkC,EAAE,MAAM,EAAE,GAAE,EAAE,EAAE,MAAM,OAAO,CAAC,GAAE,GAAE,MAAI,IAAE,KAAG,KAAG,EAAE,SAAO,MAAI,IAAEA,IAAE,IAAE,CAAC,EAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,EAAE,CAAC,KAAG,EAAE,IAAE,CAAC,MAAI,IAAE,GAAE,IAAE,GAAE,MAAI,4BAA4B,EAAE,MAAM,MAAM,CAAC,CAAC,kBAAkBA,IAAE,SAAS,CAAC,qCAAqC,EAAE,SAAS,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,YAAW,GAAE,UAASA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,KAAG,SAAO,IAAE,IAAG,MAAI,MAAI,IAAE;AAAS,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,GAAG,GAAE,CAAC,GAAE,MAAI,qEAAqE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE;AAAE,QAAI,SAAO,IAAE,GAAG,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,IAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,EAAE,UAAS,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,IAAE,SAAQ,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,KAAGC,QAAI,QAAM,MAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,MAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAED,IAAE,OAAO,GAAE,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,OAAK,IAAE,EAAE,CAAC,IAAE,KAAG,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,KAAG,IAAE,MAAI,EAAE,CAAC,IAAE,EAAE,EAAE,IAAI,OAAG,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,OAAO,GAAE,IAAE,EAAE,GAAE,SAAQ,OAAO,GAAE,IAAE,EAAC,GAAEC,KAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,MAAKC,MAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,IAAE,UAAQ,WAAS,IAAE,GAAG,GAAE,OAAO;AAAG,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,UAASC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,gBAAe,OAAO,CAAC,GAAE,IAAE,EAAE,GAAE,qBAAoB,cAAc,GAAE,IAAE,EAAEC,KAAE,WAAU,gBAAe,OAAO,GAAE,IAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,kBAAiB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,oBAAmB,EAAE,MAAM,GAAE,EAAE,SAAO,CAAC,GAAE,mBAAkB,EAAE,EAAE,SAAO,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,aAAa,GAAE,IAAE,EAAE,GAAE,UAAS,eAAc,EAAE,KAAK,GAAE,IAAE,EAAEC,KAAE,UAAS,eAAc,EAAE,KAAK,GAAE,IAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,gBAAe,EAAE,CAAC,GAAE,eAAc,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAuB,OAAO,GAAE,IAAE,EAAE,GAAE,UAAS,sBAAsB,GAAE,IAAE,EAAEC,KAAE,gBAAe,wBAAuB,EAAE,KAAK,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,UAAU,CAAC,IAAG,wBAAuB,OAAO,CAAC,GAAE,IAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,GAAE,IAAE,EAAC,mBAAkB,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,GAAC,GAAE,IAAE;AAAK,MAAGC,OAAG,QAAMA,QAAI;AAAU,QAAE,IAAI,aAAa,CAAC;AAAA,WAAUA,QAAI;AAAQ,QAAE,IAAI,WAAW,CAAC;AAAA,WAAUA,QAAI;AAAO,QAAE,IAAI,WAAW,CAAC;AAAA;AAAO,UAAM,IAAI,MAAM,qBAAqBA,GAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,CAAC,IAAE,EAAE;AAAE,SAAO,EAAE,WAAW,GAAED,KAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,sBAAqB,MAAI,IAAG,oBAAmB,MAAI,IAAG,eAAc,MAAI,IAAG,yBAAwB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,oBAAmB,MAAI,IAAG,qBAAoB,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAY,KAAG;AAAG,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOA,OAAG,SAAOA,MAAE,GAAG,IAAG,GAAGD,KAAE,GAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,QAAQ,eAAe,MAAI,KAAG,KAAG;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE;AAAG,OAAI,GAAGD,GAAC,KAAG,GAAG,CAAC,OAAK,IAAE,QAAI,GAAGA,GAAC,KAAG,GAAG,CAAC,MAAI,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,YAAY,MAAK,IAAE,EAAE,YAAY;AAAK,QAAG,MAAI;AAAE,YAAM,IAAI,MAAM,yCAAyC,CAAC,eAAe,CAAC,EAAE;AAAA,EAAC;AAAC,MAAG,MAAM,QAAQA,GAAC,KAAG,MAAM,QAAQ,CAAC,GAAE;AAAC,QAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,QAAG,CAAC,GAAG,GAAE,CAAC;AAAE,YAAM,IAAI,MAAM,0CAA0C,CAAC,iBAAiB,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGA,GAAC,IAAEA,MAAE,GAAGA,GAAC,GAAE,IAAE,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC;AAAE,MAAG,EAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,yCAAyC,EAAE,MAAM,iBAAiB,EAAE,MAAM;AAAA,YACn8Y,CAAC;AAAA,YACD,CAAC,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,CAACC,IAAE,GAAE,CAAC;AAAE,YAAM,IAAI,MAAM,yBAAyB,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC;AAAA,YACxI,CAAC;AAAA,YACD,CAAC,GAAG;AAAA,EAAC;AAAC,SAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,EAAAA,IAAE,EAAE,KAAK,MAAI,EAAE,KAAK,GAAE,MAAI,EAAE,CAAC,GAAE,OAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,OAAO,KAAG,YAAU,OAAO,KAAG,YAAU,OAAO,KAAG,YAAU,CAAC,CAAC,IAAE;AAAE,SAAO,GAAGD,GAAC,KAAG,GAAGA,IAAE,CAAC,CAAC,KAAG,GAAG,CAAC,KAAG,GAAG,EAAE,CAAC,CAAC,IAAE,GAAGA,KAAEC,KAAE,CAAC,GAAE,MAAI,KAAG,CAAC,IAAE,GAAGD,KAAE,GAAE,CAAC,GAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,SAAOA,MAAE,GAAG,IAAG,CAAC,GAAGD,KAAE,GAAEC,GAAC;AAAE,UAAM,IAAI,MAAM,8BAA8BD,GAAC,kBAAkB,CAAC,EAAE;AAAE,SAAO,UAAQ,eAAa,OAAO,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,CAAC,SAASD,GAAC,KAAG,CAAC,SAAS,CAAC,IAAE,OAAG,EAAE,MAAMA,GAAC,KAAG,MAAM,CAAC,KAAG,KAAK,IAAIA,MAAE,CAAC,IAAEC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,IAAEC;AAAE,YAAM,IAAI,MAAM,sBAAsBD,IAAE,CAAC,CAAC,SAAS,CAAC,WAAWC,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,aAAaD,GAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,MAAGC,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,wCAAwC,EAAE,MAAM,gBAAgBA,IAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,MAAI,EAAE,CAAC;AAAE,YAAM,IAAI,MAAM,iCAAiC,CAAC,UAAU,EAAE,CAAC,CAAC,YAAYA,IAAE,CAAC,CAAC,UAAU;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,QAAIC,MAAED,IAAE,CAAC;AAAE,UAAM,QAAQC,GAAC,IAAE,GAAGA,GAAC,IAAED,IAAE,CAAC,IAAE,GAAGC,GAAC;AAAA,EAAC;AAAC,SAAOD;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,SAAS,cAAc,OAAO;AAAE,SAAM,iBAAgB,MAAI,EAAE,cAAY,OAAI,EAAE,QAAM,MAAG,EAAE,OAAK,MAAG,EAAE,MAAM,WAAS,SAAQ,EAAE,MAAM,OAAK,OAAM,EAAE,MAAM,MAAI,OAAM,EAAE,UAAQ,QAAO,EAAE,YAAYA,GAAC,GAAE,IAAI,QAAQ,CAAAC,QAAG;AAAC,MAAE,iBAAiB,cAAa,OAAGA,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC,CAAC;AAAC;AAAC,eAAe,GAAGD,KAAE;AAAC,QAAMA,IAAE,KAAK,GAAE,+BAA8BA,OAAG,MAAM,IAAI,QAAQ,OAAG;AAAC,IAAAA,IAAE,0BAA0B,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,SAAOA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,KAAI,KAAK,YAAU,GAAE,KAAK,cAAY,KAAK,QAAM,KAAK,OAAK,KAAK,SAAO,GAAE,KAAK,QAAM,KAAK,OAAK,KAAK,SAAO;AAAG,QAAI,IAAE,KAAG,KAAK,OAAO;AAAE,SAAK,SAAO,GAAG,KAAK,EAAE,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAG,CAAC,MAAM,KAAK,OAAO,GAAE;AAAC,UAAI,IAAE,KAAK;AAAQ,aAAO,KAAK,UAAQ,KAAI;AAAA,IAAC;AAAC,QAAI,GAAEA,KAAE,IAAE;AAAG,WAAK,CAAC,KAAG;AAAC,UAAI,GAAE,GAAE;AAAE;AAAG,YAAE,IAAE,KAAK,OAAO,IAAE,GAAE,IAAE,IAAE,KAAK,OAAO,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAA,aAAQ,KAAG,KAAG,MAAI;AAAG,UAAI,IAAE,KAAK,KAAK,KAAG,KAAK,IAAI,CAAC,IAAE,CAAC;AAAE,UAAE,KAAK,OAAK,KAAK,SAAO,IAAE,GAAEA,MAAE,KAAK,OAAK,KAAK,SAAO,IAAE,IAAG,CAAC,KAAK,aAAW,KAAK,iBAAiB,CAAC,OAAK,IAAE;AAAA,IAAG;AAAC,YAAO,CAAC,KAAK,aAAW,KAAK,iBAAiBA,GAAC,OAAK,KAAK,UAAQ,KAAK,aAAaA,GAAC,IAAG,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,SAAO,QAAM,KAAK,UAAQ,YAAU,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,KAAG,KAAK,SAAO,KAAG,KAAK;AAAA,EAAK;AAAC;AAA3zB,IAA6zB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,OAAK,IAAEA,KAAE,KAAK,QAAM;AAAE,QAAI,IAAE,KAAG,KAAK,OAAO;AAAE,SAAK,QAAM,GAAG,KAAK,EAAE,SAAS,CAAC,GAAE,KAAK,QAAM,IAAI,GAAG,GAAE,GAAE,GAAE,OAAG,KAAK,MAAM,CAAC,GAAE,IAAE,IAAE,KAAK,IAAE,IAAE,IAAE,IAAE,KAAK,IAAE,IAAE,IAAE,GAAE,KAAK,IAAE,IAAE,KAAK,KAAK,IAAE,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAI,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAE,eAAO;AAAC;AAAG,YAAE,KAAK,MAAM,UAAU,GAAE,IAAE,IAAE,KAAK,IAAE;AAAA,aAAQ,KAAG;AAAG,UAAG,KAAG,IAAE,GAAE,IAAE,IAAE,GAAEA,MAAE,IAAE,QAAK,IAAE,GAAE,IAAE,MAAG,IAAE,KAAK,KAAG,IAAE,IAAE,KAAK,IAAI,CAAC,IAAG,IAAE,KAAK,MAAM,GAAE,IAAEA,OAAG,KAAK,IAAI,CAAC,IAAE;AAAE;AAAA,IAAK;AAAC,WAAO,IAAE,IAAE,KAAK,OAAK,KAAK,IAAE,GAAE,KAAK,QAAM,MAAI,KAAG,KAAK,IAAI,KAAK,MAAM,GAAE,IAAE,KAAK,KAAK,IAAG,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,UAAQ,YAAU,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAC;AAAr4C,IAAu4C,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,GAAEA,MAAE,GAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,MAAI,KAAK,SAAO,QAAM,KAAK,UAAQ,WAAU,KAAK,MAAI,GAAE,KAAK,QAAMA,MAAE,GAAE,KAAK,QAAM,GAAE,KAAG,SAAO,IAAE,KAAK,OAAO,IAAG,OAAO,KAAG,aAAW,IAAE,EAAE,SAAS,IAAG,CAAC,KAAK,eAAe,KAAG,KAAK,SAAO;AAAE,YAAM,IAAI,MAAM,0BAA0B,CAAC,MAAMA,GAAC,8BAA8B;AAAE,SAAK,SAAO,GAAG,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,WAAO,KAAK,eAAe,IAAE,IAAE,KAAK,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAO,KAAK,aAAa,KAAK,MAAI,KAAK,QAAM,KAAK,OAAO,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,WAAU,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAEC,OAAG,SAAOA,MAAE,IAAG,KAAG,SAAO,IAAE,YAAW,MAAI,aAAW,MAAI;AAAQ,UAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEA,KAAE,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAEC,MAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI;AAAO,UAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,OAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,KAAG,QAAM,MAAI;AAAO,UAAM,IAAI,MAAM,yBAAyB,CAAC,EAAE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,IAAE,WAAU,GAAE;AAAC,KAAGD,GAAC;AAAE,MAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAEC,KAAE,MAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,WAAU;AAAC,MAAGA,QAAI;AAAE,UAAM,IAAI,MAAM,4BAA4B;AAAE,MAAI,IAAE,EAAC,OAAMD,KAAE,MAAK,GAAE,MAAKC,KAAE,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,OAAM,EAAED,KAAE,SAAQ,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,YAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,SAAS,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,GAAG,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAEC,IAAE,SAAO,GAAE,MAAI,qDAAqDA,IAAE,IAAI,GAAG,GAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,SAAQ,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,QAAO;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,iBAAiB,GAAE,IAAE,EAAE,GAAE,mBAAkB,iBAAiB,GAAE,IAAE,EAAEC,KAAE,mBAAkB,iBAAiB,GAAE,IAAE,GAAE,IAAE;AAAG,MAAG,EAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,MAAI;AAAO,UAAM,IAAI,MAAM,oFAAoF;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,2EAA2E,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,2EAA2E,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,yFAAyF,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,yFAAyF,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,MAAM,CAAC,MAAI,IAAE,GAAE,MAAI,6EAA6E,IAAE,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,SAAQ,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAW,GAAE,IAAE,EAAE,GAAE,KAAI,WAAW;AAAE,IAAEC,IAAE,UAAQ,EAAE,OAAM,MAAI,kDAAkDA,IAAE,KAAK,YAAY,EAAE,KAAK,IAAI,GAAE,EAAEA,IAAE,SAAO,GAAE,MAAI,qCAAqCA,IAAE,KAAK,IAAI,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qCAAqC,EAAE,KAAK,IAAI;AAAE,MAAI,IAAE,MAAMA,IAAE,KAAK,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,IAAI,EAAE,CAAC,CAAC,KAAG;AAAI,MAAI,IAAE,IAAI,GAAG,CAAC,CAAC,GAAEA,IAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,IAAI,EAAE,CAAC,CAAC,MAAI,EAAE,OAAO,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,OAAO,CAAC,IAAE,GAAE;AAAK,SAAM,CAAC,EAAE,SAAS,GAAE,EAAE,SAAS,CAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,MAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,CAACC,GAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,SAAO,EAAE,EAAE,SAAO,GAAE,MAAI,mDAAmD,EAAE,IAAI,SAAS,GAAE,GAAG,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,WAAU,SAAS;AAAE,MAAG,MAAI,OAAK,IAAEC,IAAE,OAAK,IAAG,MAAIA,IAAE,OAAK;AAAE,UAAM,MAAM,4EAA4EA,IAAE,IAAI,gBAAgB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,QAAOA,IAAC,GAAE,IAAE,EAAC,KAAI,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,IAAEA,IAAE,UAAQ,aAAY,MAAI,6DAA6DA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,IAAEA,IAAE,UAAQ,aAAY,MAAI,8DAA8DA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAEC,MAAED,IAAE,OAAK,GAAE;AAAE,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,EAAEA,KAAE,CAACC,KAAE,CAAC,CAAC;AAAE,QAAE,GAAG,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAACA,KAAE,KAAG,IAAE,EAAE,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAACC,KAAE,CAAC,CAAC,GAAE,IAAE,EAAE,GAAGD,GAAC,GAAE,CAACC,KAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,QAAE,GAAG,CAAC;AAAA,EAAC;AAAC,MAAG,IAAE,GAAG,CAAC,GAAED,IAAE,SAAO,KAAGA,IAAE,MAAM,CAAC,MAAI,GAAE;AAAC,QAAI,IAAE,GAAE,IAAEA,IAAE,MAAM,CAAC;AAAE,QAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAO,EAAC,GAAE,IAAE,EAAC,iBAAgB,GAAE,MAAKC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,IAAEA,IAAE,UAAQ,WAAU,MAAI,mDAAmDA,IAAE,KAAK,EAAE;AAAE,MAAIC,MAAED,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAEA,IAAE,OAAKC,KAAE;AAAE,MAAG,KAAG,QAAM,IAAEA,KAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC,GAAE,IAAEA,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAE,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAEC,MAAE;AAAA,EAAC,WAAS,KAAG,QAAM,IAAEA,KAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAI,OAAG,CAAC;AAAE,MAAEA,IAAE,MAAM,SAAO,CAAC,IAAE,IAAEC,KAAE,IAAE,GAAG,CAACD,KAAE,GAAG,CAAC,CAAC,GAAEA,IAAE,MAAM,SAAO,CAAC,GAAEC,MAAE;AAAA,EAAC;AAAM,QAAED;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAEC,GAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,KAAK,MAAMA,MAAE,CAAC,IAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,EAAE,MAAM,SAAO,CAAC,IAAE,GAAE,EAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,mBAAmB,GAAE,IAAE,EAAE,GAAE,KAAI,mBAAmB;AAAE,GAACC,KAAE,CAAC,IAAE,GAAGA,KAAE,CAAC,GAAE,GAAGA,IAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,EAAC,GAAEA,KAAE,GAAE,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,SAAO,EAAEC,KAAE,GAAGA,IAAE,OAAM,CAAC,EAAE,QAAQ;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,WAAU,SAAQ,mBAAmB;AAAE,IAAEC,IAAE,UAAQ,GAAE,MAAI,sCAAsC,GAAEA,IAAE,SAAO,KAAG,EAAE,KAAGA,IAAE,CAAC,EAAE,MAAK,MAAI,oCAAoC;AAAE,MAAI,IAAEA,KAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAEA,KAAE,KAAI,MAAM,EAAC,GAAE,IAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,EAAC,GAAE,EAAED,KAAE,KAAI,gBAAe,mBAAmB,EAAC,GAAE,IAAE,EAAC,OAAM,GAAE,KAAIC,KAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAIC,MAAE,EAAC,GAAE,EAAED,KAAE,KAAI,OAAM,SAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,MAAK,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,KAAGA,GAAC;AAAE,MAAIC,MAAE,GAAGD,KAAE,CAAC;AAAE,MAAGC,IAAE,WAAS;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,SAAO,GAAGD,KAAE,MAAKC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG;AAAK,UAAM,IAAI,MAAM,8EAA8E;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,iDAAiD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,kEAAkE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,oEAAoE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,gDAAgD;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,sEAAsE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAE,GAAGA,KAAEC,GAAC;AAAE,MAAG,EAAE,WAAS,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,wEAAwE;AAAE,MAAG,EAAE,WAAS,KAAG,KAAG;AAAK,UAAM,IAAI,MAAM,yEAAyE;AAAE,SAAO,IAAE,KAAG,GAAE,GAAGD,KAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,OAAK,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,GAAE,IAAE,EAAE,OAAK,IAAE,EAAE,OAAK,IAAE,GAAE,IAAE,6FAA6FA,IAAE,KAAK,oBAAoB,EAAE,KAAK,YAAYD,GAAC,eAAe,CAAC,mBAAmB,CAAC;AAAI,MAAGC,IAAE,OAAK;AAAE,UAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,IAAI;AAAE,MAAGD,IAAE,SAAO,KAAGC,IAAE,OAAK;AAAG,UAAM,IAAI,MAAM,IAAE,0BAA0B,KAAGA,IAAE,OAAK,EAAE,EAAE;AAAE,MAAGA,IAAE,SAAO,IAAED,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,IAAE,mBAAmB,IAAEA,IAAE,SAAO,CAAC,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAGC,IAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,IAAE,kBAAkB,CAAC,MAAMA,IAAE,MAAM,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,OAAK,GAAE,EAAE;AAAE,QAAGA,IAAE,MAAM,IAAE,CAAC,MAAID,IAAE,IAAE,CAAC;AAAE,YAAM,IAAI,MAAM,IAAE,kBAAkB,IAAE,CAAC,MAAMC,IAAE,MAAM,IAAE,CAAC,CAAC,cAAc,IAAE,CAAC,MAAMD,IAAE,IAAE,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,+EAA+E,EAAE,IAAI,GAAG;AAAE,MAAGD,IAAE,OAAK;AAAE,UAAM,IAAI,MAAM,+EAA+EA,IAAE,IAAI,GAAG;AAAE,MAAG,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,0DAA0D,EAAE,KAAK,EAAE;AAAE,MAAGC,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,6DAA6DA,GAAC,EAAE;AAAE,MAAGA,IAAE,WAAS,GAAE;AAAC,QAAG,EAAE,SAAO;AAAE,YAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,QAAGD,IAAE,SAAO;AAAE,YAAM,IAAI,MAAM,sDAAsDA,IAAE,KAAK,EAAE;AAAA,EAAC;AAAC,KAAGC,KAAE,GAAED,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,QAAO,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,SAAGA,IAAE,CAAC;AAAE,MAAI,IAAE,IAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAE,KAAK,IAAE,GAAE,IAAE,CAAC,GAAG,GAAGA,IAAE,MAAM,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAGA,GAAC;AAAE,SAAM,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE,EAAE,GAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAEC,KAAE,WAAU,qBAAqB;AAAE,MAAG,GAAG,GAAE,GAAE,EAAE,KAAK,GAAE,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,iEAAiE,EAAE,KAAK,QAAQ,EAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,GAAE,IAAE,CAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,MAAM;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoD;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,6CAA6C,CAAC,EAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,uDAAuD,CAAC,aAAa,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAOC,IAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAEC,MAAE,GAAE,GAAE,GAAE;AAAC,MAAG,GAAGD,GAAC,GAAE,KAAG,QAAM,MAAI;AAAO,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,MAAG,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO;AAAI,MAAE,OAAO,CAAC,IAAE,EAAE,UAAU;AAAE,SAAO,EAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,UAAS,mBAAmB;AAAE,IAAEC,IAAE,OAAK,GAAE,MAAI,sCAAsC;AAAE,MAAI,IAAE,EAAC,GAAEA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,SAAQ,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,oBAAoB,GAAE,IAAE,EAAE,GAAE,cAAa,sBAAqB,OAAO;AAAE,IAAE,GAAGC,GAAC,GAAE,MAAI,kCAAkC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,YAAW,EAAC,GAAE,IAAE,EAAC,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,KAAI,WAAU,mBAAmB;AAAE,IAAE,KAAG,CAACC,IAAE,MAAM,UAAQ,IAAEA,IAAE,MAAM,QAAO,MAAI,UAAU,CAAC,gBAAgBA,IAAE,MAAM,MAAM,KAAKA,IAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,EAAC,OAAMA,IAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,MAAGC,KAAE,GAAE;AAAC,SAAO,EAAE,aAAaD,KAAE,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,KAAGA,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAGD,KAAE,OAAO,GAAE,IAAE,GAAG,CAACC,IAAE,QAAOD,IAAE,MAAM,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,WAAWA,IAAE,CAAC,CAAC,GAAE,IAAE,IAAED,IAAE;AAAO,MAAE,OAAO,IAAI,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,SAAS;AAAC;AAAC,eAAe,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,aAAY,cAAa,MAAM,GAAEC,MAAE,MAAM,EAAE,KAAK,GAAE,IAAE,GAAG,EAAE,OAAMA,GAAC;AAAE,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,eAAe,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,UAAU,GAAE,IAAE,EAAE,GAAE,QAAO,YAAW,MAAM,GAAE,IAAEC,OAAG,OAAK,IAAEA,KAAE,IAAE,EAAE,MAAK,IAAE,EAAE;AAAM,IAAE,IAAE,GAAE,MAAI,uBAAuB,GAAE,GAAG,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,EAAE,OAAM,mEAAmE;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE;AAAI,SAAG,EAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAE,EAAE,MAAM,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,GAAE,IAAE,EAAE,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,MAAM,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE,EAAE,QAAQ,GAAE;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,WAAW;AAAE,MAAG,KAAG,SAAO,IAAE,EAAE,MAAM,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,QAAQ,IAAG,EAAE,EAAE,SAAO,EAAE,QAAO,MAAI,qCAAqC,EAAE,IAAI,8BAA8B,CAAC,GAAG,GAAE,EAAE,QAAQ,OAAG;AAAC,MAAE,KAAG,KAAG,IAAE,EAAE,MAAK,MAAI,+CAA+C,EAAE,OAAK,CAAC,YAAY,CAAC,EAAE;AAAA,EAAC,CAAC,GAAE,EAAE,QAAM;AAAE,WAAO,EAAE,MAAM;AAAE,MAAI,IAAE,EAAC,GAAE,EAAC,GAAE,IAAE,EAAC,MAAK,EAAC;AAAE,SAAO,EAAE,UAAQ,cAAY,GAAG,MAAI;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAO,IAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC,GAAEC,QAAI,IAAE,GAAG,CAAC,IAAG,GAAG,GAAE,CAAC;AAAA,EAAC,CAAC,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,eAAe,GAAE,IAAE,EAAE,GAAE,KAAI,eAAe,GAAE,IAAE,EAAEC,KAAE,SAAQ,eAAe;AAAE,KAAG,GAAE,CAAC,GAAE,EAAE,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,MAAI,2BAA2B;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,MAAE,KAAG,MAAK,MAAI,gDAAgD;AAAE,QAAI,IAAE,EAAE,GAAE,QAAO,eAAe;AAAE,QAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,KAAGA,GAAC;AAAE,MAAI,IAAE,EAAED,KAAE,WAAU,aAAY,OAAO,GAAE,IAAE,EAAE,GAAE,WAAU,WAAW;AAAE,KAAG,GAAE,GAAEC,GAAC;AAAE,MAAI,IAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,GAAE,IAAE,EAAC,OAAMA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAGD,IAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,8EAA8EA,IAAE,KAAK,GAAG;AAAE,MAAGA,IAAE,OAAK;AAAE,UAAM,IAAI,MAAM,sEAAsEA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAEA,IAAE,OAAK,IAAEA,IAAE,MAAM,CAAC,IAAE,GAAE,IAAEA,IAAE,OAAK,IAAEA,IAAE,MAAM,CAAC,IAAE;AAAE,MAAGC,IAAE,WAAS;AAAE,UAAM,IAAI,MAAM,kDAAkDA,IAAE,MAAM,gBAAgB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE;AAAK,MAAG,EAAE,EAAE,SAAO,KAAG,EAAE,SAAO,KAAG,MAAI;AAAG,UAAM,IAAI,MAAM,oCAAoC,EAAE,KAAK,sBAAsB,CAAC,GAAG;AAAE,MAAG,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,mDAAmD;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE;AAAC,KAAGA,GAAC;AAAE,MAAI,IAAE,EAAED,KAAE,iBAAgB,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,gBAAe,iBAAgB,mBAAmB,GAAE,IAAE,EAAE,GAAE,gBAAe,iBAAgB,EAAE,KAAK;AAAE,KAAG,GAAE,GAAEC,KAAE,CAAC;AAAE,MAAI,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,IAAE,EAAC,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,GAAE,WAAU,YAAW,OAAO,GAAE,IAAE,EAAC,QAAO,EAAED,KAAE,KAAI,YAAW,mBAAmB,GAAE,SAAQC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,KAAG;AAAK,WAAOA,IAAE,MAAM,MAAM;AAAE,MAAG,GAAGA,IAAE,OAAM,CAAC;AAAE,WAAO;AAAE,MAAGA,IAAE,MAAM,WAAS,EAAE,QAAO;AAAC,QAAIC,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAED,IAAE,MAAM,QAAO;AAAI,QAAE,CAAC,KAAG,QAAMA,IAAE,MAAM,CAAC,KAAG,OAAKC,IAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,IAAEC,IAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,SAAS;AAAE,MAAG,EAAE,EAAE,UAAQ,WAAU,MAAI,gFAAgF,EAAE,KAAK,kBAAkB,GAAE,EAAE,KAAG,KAAG,IAAE,GAAE,MAAI,qDAAqD,CAAC,GAAG,GAAE,MAAI;AAAE,WAAOA,eAAa,KAAG,EAAE,MAAM,IAAE;AAAE,MAAI,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,GAAE,GAAE,GAAE,WAAU,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,KAAK,MAAM,KAAK,IAAI,GAAE,KAAK,KAAK,KAAK,IAAIA,GAAC,IAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAED,MAAE,GAAE,IAAE,IAAI,aAAaA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,KAAK,KAAG,KAAGA,MAAE,IAAE;AAAG,MAAE,CAAC,IAAE,IAAEC,MAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,SAAS;AAAC;AAAC,eAAe,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,eAAc,QAAQ,GAAE,IAAE,EAAE,GAAE,WAAU,QAAQ;AAAE,IAAE,EAAE,OAAK,GAAE,MAAI,uEAAuE,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,OAAK,MAAI,EAAE,MAAK,MAAI,mFAAmF,EAAE,IAAI,qBAAqB,EAAE,IAAI,EAAE,GAAE,GAAG,EAAE,MAAM,MAAM,GAAE,EAAE,MAAM,SAAO,CAAC,GAAE,EAAE,OAAM,yFAAyF;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC;AAAE,IAAEC,MAAE,KAAGA,OAAG,GAAE,MAAI,4EAA4E,CAAC,cAAcA,GAAC,EAAE;AAAE,MAAI,IAAE,MAAM,EAAE,KAAK,GAAE,IAAE,MAAM,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,EAAE,SAAO,GAAE,CAAC,GAAE,IAAE,GAAG,QAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,KAAK,EAAC,OAAM,EAAE,CAAC,GAAE,OAAM,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,MAAI,EAAE,QAAM,EAAE,KAAK,GAAE,EAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE;AAAI,UAAG,EAAE,CAAC,EAAE,UAAQ,EAAE,CAAC,GAAE;AAAC,UAAE,CAAC,IAAE;AAAE;AAAA,MAAK;AAAA,EAAC;AAAC,SAAOD,QAAI,KAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,GAAG,GAAE,EAAE,OAAM,MAAM;AAAC;AAAC,IAAI,KAAG;AAAG,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,QAAO,GAAE;AAAC,MAAI,IAAED;AAAE,EAAAA,IAAE,SAAO,MAAI,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE;AAAE,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,iEAAiE,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,8DAA8D,EAAE,KAAK,GAAG,GAAE,EAAEC,IAAE,WAAS,GAAE,MAAI,mEAAmEA,GAAC,GAAG;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,MAAIA,IAAE,CAAC,GAAE,MAAI,4CAA4C,CAAC,uCAAuCA,IAAE,CAAC,CAAC,GAAG,GAAE,EAAE,MAAIA,IAAE,CAAC,GAAE,MAAI,0CAA0C,CAAC,yCAAyCA,IAAE,CAAC,CAAC,IAAI,GAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAC,GAAE,GAAE,IAAG,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAYA,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA,OAAG,QAAMA,QAAI;AAAS,WAAOD;AAAE,MAAGC,QAAI;AAAO,WAAO,GAAGD,KAAE,GAAG,CAAC,CAAC;AAAE,QAAM,IAAI,MAAM,gDAAgDC,GAAC,GAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAE,GAAGD,IAAE,OAAM,EAAE,KAAK;AAAE,SAAO,EAAE,SAAO,MAAIC,MAAE,GAAGA,KAAE,CAAC,IAAG,EAAEA,KAAED,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,MAAI;AAAS,WAAOD;AAAE,MAAG,MAAI;AAAO,WAAO,GAAGA,GAAC;AAAE,MAAG,MAAI;AAAM,WAAO,GAAGA,GAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,GAAGA,GAAC;AAAE,MAAG,MAAI;AAAQ,WAAO,GAAGA,KAAEC,GAAC;AAAE,MAAG,MAAI;AAAY,WAAO,GAAGD,KAAE,CAAC;AAAE,MAAG,MAAI;AAAU,WAAO,GAAGA,GAAC;AAAE,QAAM,IAAI,MAAM,4BAA4B,CAAC,GAAG;AAAC;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI,EAAEA,MAAE,MAAI,MAAI;AAAS,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,SAAQC,KAAE,KAAI,GAAE,YAAW,IAAE,QAAO,WAAU,IAAE,CAAC,GAAE,CAAC,GAAE,iBAAgB,GAAE,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,EAAC,GAAE;AAAC,MAAG,IAAE,KAAG,UAAS,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,MAAE,MAAI,QAAO,MAAI,4CAA4C,CAAC,6GAA6G;AAAE,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,UAAS,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,8DAA8D,EAAE,IAAI,GAAG,GAAE,GAAG,gBAAe,GAAE,CAAC;AAAE,MAAI,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oCAAoC,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,uEAAuEA,GAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAMA,KAAE,GAAE,GAAE,CAAC,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,MAAI,SAAO,GAAG,EAAE,UAAS,EAAE,KAAK,KAAG,EAAE,EAAE,MAAM,UAAQ,GAAE,MAAI,2GAA2G,EAAE,MAAM,MAAM,GAAG,GAAE,EAAE,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,EAAE,eAAa,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,sCAAsC,EAAE,KAAK,2DAA2D,EAAE,WAAW,GAAG;AAAI,MAAI;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE;AAAM,QAAG,EAAE,EAAE,UAAQ,KAAG,EAAE,WAAS,GAAE,MAAI,2HAA2H,EAAE,MAAM,GAAG,GAAE,EAAE,WAAS;AAAE,QAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,aAAY,MAAI,oDAAoD,CAAC,2DAA2D,EAAE,WAAW,IAAI;AAAA,aAAU,EAAE,WAAS;AAAE,UAAG;AAAC,WAAG,GAAE,EAAE,QAAQ;AAAA,MAAC,SAAO,GAAE;AAAC,YAAI,IAAE,oDAAoD,CAAC,4DAA4D,EAAE,QAAQ;AAAK,cAAM,MAAM,CAAC;AAAA,MAAC;AAAC,QAAE,EAAE,GAAE,iBAAgB,cAAc;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,MAAE,MAAI,QAAO,MAAI,wDAAwD,CAAC,wCAAwC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAE,GAAG,CAAC,GAAE,MAAI,uHAAuH,CAAC,GAAG;AAAE,QAAI,IAAE,GAAG,EAAE,OAAM,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAMA,KAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAED;AAAE,EAAAA,IAAE,SAAO,MAAI,IAAE,EAAEA,KAAE,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE;AAAE,IAAE,SAAO,MAAI,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,GAAE,GAAE,IAAG,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,WAAU,GAAE,aAAYC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sCAAqC,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,IAAG,GAAE,QAAOA,IAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,WAAU,GAAE,YAAWD,IAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qCAAoC,GAAE,CAAC;AAAE,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,SAAQC,KAAE,KAAI,GAAE,YAAW,IAAE,QAAO,WAAU,IAAE,CAAC,GAAE,CAAC,GAAE,iBAAgB,GAAE,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,EAAC,GAAE;AAAC,MAAG,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,mBAAkB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAkB,SAAS,GAAE,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAE,EAAE,SAAO,GAAE,MAAI,sEAAsE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,uEAAuE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,6DAA6D,EAAE,MAAM,CAAC,CAAC,mDAAmD,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,KAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,GAAGC,KAAE,CAAC,GAAE,MAAI,sFAAsFA,GAAC,mBAAmB,CAAC,GAAG,GAAE,GAAG,yBAAwB,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,EAAE,OAAMA,KAAE,GAAE,GAAE,GAAE,IAAE,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,EAAE,UAAS,EAAE,KAAK;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,iBAAgB,uBAAuB;AAAG,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,MAAE,GAAG,CAAC,GAAE,MAAI,mHAAmH,CAAC,GAAG;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAE,OAAM,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAMA,KAAE,GAAE,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,SAAQA,KAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,MAAI,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAG,EAAC,OAAM,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,uBAAsB,GAAE,CAAC;AAAE,SAAS,GAAG,EAAC,GAAED,KAAE,GAAE,GAAE,YAAWC,MAAE,OAAG,YAAW,IAAE,OAAG,MAAK,GAAE,YAAW,IAAE,UAAS,wBAAuB,GAAE,gBAAe,IAAE,IAAE,GAAE;AAAC,MAAG,GAAG,EAAE,MAAM,eAAc,CAAC,MAAI,OAAG;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAEC,KAAE,CAAC;AAAE,WAAO,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,IAAG,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,cAAc,GAAE,IAAE,EAAE,GAAE,KAAI,cAAc;AAAE,GAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,MAAI,IAAEC,MAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAEA,MAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,IAAE,EAAE,MAAM,EAAE,OAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,IAAE,MAAI,GAAE,MAAI,wCAAwC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBA,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,GAAG,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC,GAAE,IAAEA,MAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,IAAE,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,QAAO,cAAc,GAAE,CAAC,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,EAAE,KAAK;AAAG,MAAI;AAAE,OAAG,SAAO,IAAE,EAAE,GAAE,iBAAgB,cAAc;AAAG,MAAI,IAAE,CAAC,GAAE,MAAI;AAAC,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,GAAE,EAAE,KAAK,GAAE,GAAE,CAAC,GAAE,GAAE;AAAE,QAAG,CAACA,OAAG,CAAC,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAG,CAACA,OAAG,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,KAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,KAAE,KAAGA,OAAG,CAAC,KAAG,IAAE,GAAG,GAAE,GAAE,OAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,OAAG,KAAE,MAAI,IAAE,GAAG,GAAE,GAAE,MAAG,IAAE,GAAE,IAAE,GAAG,GAAE,GAAE,MAAG,IAAE,IAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAM,aAAM,CAAC,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,YAAWA,KAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC;AAAE,SAAO,KAAG,OAAK,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,EAAC,OAAM,EAAE,GAAE,CAAC,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,WAAO,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,GAAE,EAAC,OAAM,EAAE,GAAE,CAAC,GAAE,UAAS,EAAC;AAAA,EAAC,CAAC,EAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAI,IAAG;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,KAAG,GAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,CAAC;AAAE,SAAK,IAAE,KAAGD,IAAE;AAAM,MAAE,KAAK,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE,KAAGC;AAAE,MAAG;AAAE,WAAK,IAAED,IAAE,QAAM;AAAC,UAAI,IAAE,IAAE,IAAEA,IAAE,MAAK,IAAE,GAAG,CAAC,GAAGA,KAAE,GAAE,IAAE,CAAC,GAAE,GAAG,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAGC;AAAA,IAAC;AAAC,SAAO,EAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,IAAE,EAAE,GAAG,CAAC,GAAE,CAAC,EAAE,QAAO,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,QAAO,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,OAAG,SAAO,IAAE,GAAG,CAAC;AAAG,MAAI,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,EAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,OAAM,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,YAAW,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAe,GAAE,IAAE,EAAE,GAAE,SAAQ,iBAAgB,SAAS,GAAE,IAAE,EAAEC,KAAE,UAAS,iBAAgB,OAAO,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oDAAoD,CAAC,qBAAqB,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,SAAO,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,qDAAqD,CAAC,mBAAmB,EAAE,KAAK,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,wEAAwE,EAAE,MAAM,GAAG,GAAE,EAAE,EAAE,CAAC,KAAG,KAAG,EAAE,CAAC,KAAG,GAAE,MAAI,2CAA2C,CAAC,EAAE,GAAE,EAAE,MAAI,cAAY,MAAI,WAAU,MAAI,+CAA+C,CAAC,EAAE;AAAE,MAAI,IAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,QAAO,GAAE,oBAAmB,GAAE,UAAS,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,iBAAgB,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,6DAA6D,EAAE,IAAI,GAAG;AAAE,MAAIC,MAAE,EAAC,OAAM,EAAC;AAAE,SAAO,EAAE,UAAU,IAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,gBAAgB,GAAEC,MAAE,EAAE,OAAK,GAAE,IAAE,EAAE,MAAMA,GAAC;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,yEAAyE,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,+FAA+F,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,MAAM,EAAE,IAAI;AAAE,SAAO,EAAE,KAAK,GAAE,GAAEA,GAAC,GAAE,EAAEA,GAAC,IAAE,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAEA,KAAE,SAAQ,gBAAgB,GAAEC,MAAE,EAAE,OAAK,GAAE,IAAE,EAAE,MAAMA,GAAC;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,yEAAyE,EAAE,IAAI,GAAG,GAAE,EAAE,MAAI,GAAE,MAAI,0FAA0F,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,SAAS,GAAE,IAAE,GAAG,CAAC,QAAM,OAAK,KAAI,CAAC,GAAE;AAAE,UAAO,EAAE,MAAK;AAAA,IAAC,KAAK;AAAE,UAAE,GAAG,WAAU,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,aAAY,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,eAAc,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,iBAAgB,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,GAAG,mBAAkB,GAAE,CAAC;AAAE;AAAA,IAAM;AAAQ,YAAM,IAAI,MAAM,0BAA0B;AAAA,EAAC;AAAC,SAAO,IAAE,GAAG,GAAE,EAAE,GAAE,GAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,oBAAmB,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,SAAQ,GAAE,WAAUC,KAAE,QAAO,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,OAAG,SAAO,IAAE,MAAI,KAAG,SAAO,IAAE,OAAO,oBAAmB,KAAG,SAAO,IAAE;AAAG,MAAI,IAAED,IAAE,MAAM,CAAC;AAAE,SAAOC,MAAE,KAAK,IAAIA,KAAE,CAAC,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAED,IAAE,SAAO,GAAE,MAAI,+CAA+CA,IAAE,IAAI,GAAG,GAAE,EAAEA,IAAE,MAAM,CAAC,MAAI,GAAE,MAAI,oDAAoDA,IAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,4BAA4B,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,sDAAsD,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,EAAE,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,4CAA4C,CAAC,GAAG,GAAE,EAAC,eAAcC,KAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,qBAAoB,SAAS,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAoB,SAAS,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE;AAAe,MAAI,IAAE,EAAC,eAAcA,KAAE,cAAa,GAAE,gBAAe,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,KAAG;AAAE,EAAAD,IAAE,OAAO,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,OAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA,MAAE,IAAE,IAAEA,MAAE,IAAE,KAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,QAAO,IAAE,GAAE,IAAE;AAAG,SAAK,IAAE,KAAG;AAAC,QAAE,KAAG,IAAE,MAAI;AAAG,QAAI,IAAEC,IAAE,GAAED,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE,IAAE,IAAE,KAAG,IAAE,GAAE,IAAE,CAAC;AAAA,EAAE;AAAC,SAAO,IAAE,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,OAAG,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,KAAG,EAAE,KAAK,EAAC,OAAM,EAAE,CAAC,GAAE,UAAS,GAAE,oBAAmB,EAAC,CAAC;AAAE,IAAE,KAAK,EAAE;AAAE,MAAI,IAAE,IAAE,IAAE,OAAI,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,SAAK,EAAE,SAAOA,OAAG,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,EAAC,OAAM,GAAE,UAAS,GAAE,oBAAmB,EAAC,IAAE;AAAE,QAAG,IAAE;AAAE;AAAM,QAAI,IAAE;AAAG,aAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,GAAGD,KAAE,GAAE,EAAE,CAAC,CAAC;AAAE,UAAG,KAAG,GAAE;AAAC,YAAE;AAAG;AAAA,MAAK;AAAC,UAAG,EAAE,QAAM,EAAE,QAAM,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,SAAO;AAAE;AAAA,IAAK;AAAC,MAAE,qBAAmB,EAAE,QAAO,MAAI,EAAE,UAAQ,KAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,EAAE,KAAK,KAAG,EAAE,QAAM,KAAG,GAAG,GAAE,GAAE,EAAE;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAEC,MAAE;AAAE,OAAG,IAAE,MAAI,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,GAAE,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;AAAG,MAAI,IAAE,EAAC,iBAAgB,EAAC;AAAE,SAAO,MAAI,EAAE,iBAAe,IAAG,MAAI,EAAE,eAAa,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,SAAS,IAAE,GAAE,IAAE,IAAE,CAAC,GAAE,IAAEA,IAAE,SAASC,MAAE,GAAEA,MAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAG,IAAE,MAAI,IAAE,IAAG,KAAG,IAAE,MAAI,IAAE;AAAG,MAAG,KAAG,KAAG,KAAG;AAAE,WAAO;AAAE,MAAI,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC;AAAE,SAAO,KAAG,IAAE,IAAE;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,KAAK,IAAI,IAAEA,MAAEA,GAAC;AAAE,SAAOA,OAAGD,MAAE,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,IAAE,QAAM,EAAE,SAAOA,IAAE,UAAQ,EAAE,SAAO,EAAE,WAASA,IAAE;AAAQ;AAAC,eAAe,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE;AAAe,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAC,iBAAgB,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAa,MAAI,IAAE,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,eAAcA,KAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,iBAAgB,EAAE,CAAC,GAAE,gBAAe,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,6BAA4B,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAE,EAAAA,MAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAa,MAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,gBAAe,GAAG,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,mBAAmB,GAAE,IAAE,EAAE,GAAE,UAAS,mBAAmB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,IAAI,GAAE,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,IAAE,EAAC,OAAM,GAAE,QAAO,EAAC,GAAE,IAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,iBAAgB,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,0BAAyB,GAAE,CAAC;AAAE,eAAe,GAAGD,KAAE,GAAEC,KAAE,IAAE,KAAG,IAAE,OAAO,mBAAkB,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,wBAAwB,GAAE,IAAE,EAAE,GAAE,UAAS,wBAAwB,GAAE,IAAE,GAAG,GAAE,GAAEC,KAAE,GAAE,GAAE,IAAI,GAAE,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,gBAAe,CAAC,GAAE,CAAC,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC,GAAE,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,EAAE,QAAQ,GAAE,MAAI,KAAG,EAAE,QAAQ,GAAE,EAAC,iBAAgB,GAAG,GAAE,OAAO,GAAE,cAAa,GAAG,GAAE,OAAO,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,gEAAgE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,6DAA6D,CAAC,GAAG,GAAE,EAAE,MAAI,SAAIC,QAAI,OAAG,MAAI,mFAAmF;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAG,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAaA,KAAE,kBAAiB,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,uBAAuB;AAAE,IAAE,EAAE,SAAO,KAAG,EAAE,SAAO,GAAE,MAAI,uEAAuE,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,WAAS,GAAE,MAAI,oEAAoE,CAAC,GAAG,GAAE,EAAE,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,kDAAkD,GAAE,EAAE,MAAI,SAAIC,QAAI,OAAG,MAAI,0FAA0F;AAAE,MAAI,IAAE,GAAE,IAAE;AAAG,IAAE,SAAO,MAAI,IAAE,MAAG,IAAE,EAAE,GAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAAG,MAAG,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAC,GAAE,IAAE,EAAC,cAAaA,KAAE,kBAAiB,GAAE,MAAK,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAO,IAAE,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,wBAAuB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,UAASC,MAAE,OAAG,IAAE,KAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,WAAW,GAAE,IAAE,QAAM,IAAE,OAAK,IAAE,OAAK,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAE,GAAG,GAAE,GAAE,GAAE,GAAE;AAAE,MAAG,EAAE,EAAE,SAAO,GAAE,MAAI,yDAAyD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,0EAA0E,EAAE,MAAM,CAAC,CAAC,GAAG,GAAE,EAAE,EAAE,UAAQ,WAAS,EAAE,UAAQ,WAAU,MAAI,sEAAsE,EAAE,KAAK,GAAG,GAAE,EAAE,MAAI,UAAQ,MAAI,UAAS,MAAI,0CAA0C,CAAC,EAAE,GAAE,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,KAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAM,QAAEA;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,GAAG,GAAG,GAAG,CAAC,GAAE,OAAO,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG;AAAE,QAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEC,MAAE,GAAG,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,GAAG,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,OAAK,GAAE,KAAI;AAAC,QAAE,GAAGA,KAAE,GAAE,IAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,IAAE,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAG,GAAE,GAAG,GAAE,EAAE,IAAI,CAAC,CAAC;AAAE,QAAE,GAAG,GAAE,GAAG,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE,GAAG,GAAG,GAAE,EAAE,IAAI,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,GAAG,GAAE,GAAE,CAAC,GAAEC,MAAE,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAEA,GAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,WAAU,IAAE,YAAW,IAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,aAAY,SAAS,GAAE,IAAE,EAAE,GAAE,cAAa,aAAY,SAAS;AAAE,IAAE,EAAE,SAAO,GAAE,MAAI,yDAAyD,EAAE,IAAI,GAAG,GAAE,EAAE,EAAE,SAAO,MAAI,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,KAAG,EAAE,MAAM,CAAC,MAAI,MAAI,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,kEAAkE,GAAE,EAAE,KAAG,QAAM,EAAE,WAAS,GAAE,MAAI,4EAA4E,CAAC,GAAG;AAAE,MAAI,IAAE,EAAC,OAAM,GAAE,YAAW,EAAC,GAAE,IAAE,EAAC,eAAcC,KAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,KAAI,UAAU;AAAE,IAAE,EAAE,QAAM,GAAE,MAAI,4CAA4C,EAAE,IAAI,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,EAAE,GAAE,GAAE;AAAE,SAAO,KAAG,YAAU,EAAE,IAAE,MAAI,GAAE,MAAI,gDAAgD,CAAC,GAAG,GAAE,EAAE,KAAG,GAAE,MAAI,yBAAyB,CAAC,kDAAkD,CAAC,IAAI,GAAE,IAAE,EAAE,IAAE,IAAE,IAAE,GAAE,YAAW,UAAU,MAAI,EAAE,EAAE,UAAQ,SAAQ,MAAI,gDAAgD,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAE,GAAG,GAAE,CAAC,CAAC,IAAG,OAAOC,OAAG,YAAU,EAAEA,MAAE,MAAI,GAAE,MAAI,gDAAgDA,GAAC,GAAG,GAAE,EAAEA,OAAG,GAAE,MAAI,yBAAyBA,GAAC,qDAAqD,CAAC,IAAI,GAAE,IAAE,EAAEA,MAAE,IAAE,IAAEA,KAAE,YAAW,UAAU,MAAI,EAAEA,IAAE,UAAQ,SAAQ,MAAI,gDAAgD,GAAE,IAAE,GAAG,GAAGA,KAAE,CAAC,GAAE,GAAE,GAAGA,KAAE,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,GAAG,GAAE,GAAE,GAAE,OAAO,GAAE,CAAC,IAAG,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,OAAO,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAO,EAAE,GAAG,GAAG,EAAE,GAAE,CAAC,IAAG,GAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,WAAU,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,MAAG,MAAM,QAAQA,GAAC,GAAE;AAAC,QAAE,OAAG,EAAEA,OAAG,QAAMA,IAAE,SAAO,GAAE,MAAI,mEAAmE;AAAE,QAAI,IAAEA,IAAE,CAAC,EAAE,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,QAAEA,IAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,MAAI,iEAAiEA,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG;AAAA,EAAC;AAAM,QAAE,MAAGA,MAAE,GAAGA,KAAEA,IAAE,MAAM,CAAC,GAAE,CAAC,EAAE,IAAI,OAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC;AAAE,IAAEA,IAAE,UAAQA,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,MAAI,oCAAoCA,IAAE,MAAM,mCAAmCA,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI;AAAE,MAAIC,MAAE,CAAC,GAAE,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,IAAAC,IAAE,KAAK,EAAE,KAAK,MAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,GAAG,GAAG,GAAGA,IAAE,CAAC,GAAE,CAAC,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,cAAE,GAAG,GAAE,CAAC;AAAA,QAAC;AAAC,aAAO,GAAG,GAAE,GAAG,GAAE,WAAW,CAAC;AAAA,IAAC,CAAC,CAAC;AAAE,SAAO,IAAE,GAAGA,KAAE,CAAC,IAAEA;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAG,EAAEA,IAAE,QAAM,GAAE,MAAI,gEAAgEA,IAAE,IAAI,EAAE,GAAEA,IAAE,SAAO;AAAE,WAAO,GAAGA,KAAE,CAAC;AAAE;AAAC,QAAIC,MAAED,IAAE,MAAM,MAAM,GAAEA,IAAE,MAAM,SAAO,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAEA,KAAE,CAACC,KAAED,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,KAAK,GAAE,IAAE,EAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,KAAK;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,SAAO,EAAE,KAAK,MAAI;AAAC,MAAEA,IAAE,MAAM,WAAS,GAAE,MAAI,0CAA0CA,IAAE,MAAM,MAAM,WAAW;AAAE,QAAIC,MAAED,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAGC,GAAC,GAAE,IAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAEC,OAAG,IAAE,IAAEA;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,OAAC,GAAE,GAAE,CAAC,IAAE,EAAE,KAAK,MAAI;AAAC,YAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,MAAE,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,MAAM,CAAC,MAAI,IAAE,IAAE,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC,GAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAE,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,MAAE,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,YAAG,MAAI;AAAE,cAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,GAAG,GAAE,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,cAAE,GAAG,CAAC,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,QAAC;AAAC,YAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,EAAE,MAAM,CAAC,IAAE,CAAC,CAAC;AAAE,YAAG,MAAI;AAAE,cAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,cAAE,GAAG,CAAC,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,QAAC;AAAC,eAAM,CAAC,GAAE,GAAE,CAAC;AAAA,MAAC,CAAC,GAAE,GAAG,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,KAAGA,MAAE,MAAI,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAACA,KAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC,IAAG,CAAC,GAAE,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,KAAI,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,yBAAuB,CAAC,IAAE;AAAwB,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,WAAU,qBAAqB;AAAG,MAAI,IAAE,KAAG,OAAK,IAAE,GAAG,GAAE,CAAC;AAAE,MAAGC,QAAI,GAAG;AAAK,WAAO;AAAE,MAAGA,QAAI,GAAG;AAAI,WAAO,GAAG,CAAC;AAAE,MAAGA,QAAI,GAAG,MAAK;AAAC,QAAG,KAAG;AAAK,aAAO,GAAG,CAAC;AAAE;AAAC,UAAI,IAAE,EAAE,OAAK,EAAE,MAAK,IAAE,GAAG,GAAG,CAAC,GAAE,GAAG,CAAC,CAAC;AAAE,aAAO,IAAE,IAAE,GAAG,GAAE,GAAG,CAAC,CAAC,IAAE;AAAA,IAAC;AAAA,EAAC;AAAC,MAAGA,QAAI,GAAG,wBAAuB;AAAC,QAAG,KAAG;AAAK,aAAO,GAAG,GAAG,CAAC,GAAE,GAAG,EAAE,IAAI,CAAC;AAAE;AAAC,UAAI,IAAE,GAAG,GAAE,GAAG,EAAE,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,SAAS;AAAE,aAAO,GAAG,GAAG,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,QAAM,MAAM,sBAAsBA,GAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,oBAAoB,GAAE,IAAE,EAAE,GAAE,eAAc,oBAAoB,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,oBAAoB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,+BAA+B;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,gBAAgB,GAAE,IAAE,EAAE,GAAE,eAAc,gBAAgB,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,GAAE,WAAU,gBAAgB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,2BAA2B;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,GAAEC,KAAE,IAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,iBAAgB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAE,GAAE,eAAc,WAAW,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,WAAW,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,sBAAsB;AAAE,MAAI,IAAE,GAAG,CAAC;AAAE,MAAE,GAAG,GAAG,GAAG,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,WAAW,GAAE,IAAE,EAAE,GAAE,eAAc,WAAW,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,WAAW,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,sBAAsB;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAE,GAAE,GAAG,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,YAAW,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAK,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,SAAS,GAAE,IAAE,EAAE,GAAE,eAAc,SAAS,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,SAAS,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,oBAAoB;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,GAAG,GAAG,GAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,UAAS,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,kBAAkB,GAAE,IAAE,EAAE,GAAE,eAAc,kBAAkB,GAAE,IAAE;AAAK,EAAAC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,kBAAkB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,6BAA6B;AAAE,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,UAAS,+BAA+B,GAAE,IAAE,EAAE,GAAE,UAAS,+BAA+B;AAAE,KAAGC,IAAE,OAAM,EAAE,OAAM,0CAA0C;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAAE,SAAO,GAAG,GAAG,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,oBAAmB,qBAAqB,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAGC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,qBAAqB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,gCAAgC,GAAE,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE;AAAE,QAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,IAAG;AAAC,MAAGA,QAAI,OAAKA,MAAE,EAAE,OAAK,IAAGA,QAAI,EAAE,OAAK;AAAE,UAAM,MAAM,mGAAmG,EAAE,IAAI,gBAAgBA,GAAC,EAAE;AAAE,SAAO,GAAG,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,GAAG,GAAE,CAACA,GAAC,GAAE,IAAE,GAAE,IAAE,GAAG,GAAG,GAAE,SAAS,GAAE,CAAC;AAAE,MAAE,CAAC,GAAE,CAAC,CAAC;AAAE,QAAI,IAAE,GAAG,GAAG,GAAE,CAAC,CAAC;AAAE,WAAM,EAAC,OAAM,GAAG,GAAE,CAACA,GAAC,CAAC,GAAE,UAAS,CAAC,GAAE,MAAI;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,CAACA,GAAC,CAAC;AAAE,aAAM,CAAC,GAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAG,GAAE,SAAS,GAAE,GAAG,CAAC,CAAC,CAAC,GAAE,GAAG,EAAE,GAAE,CAAC,GAAE,GAAG,GAAG,CAAC,GAAE,GAAG,GAAE,SAAS,CAAC,CAAC,CAAC;AAAA,IAAC,EAAC;AAAA,EAAC,CAAC,EAAED,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,GAAE,IAAE,GAAG,wBAAuB;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,qBAAqB,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE;AAAK,MAAGC,OAAG,SAAO,IAAE,EAAEA,KAAE,WAAU,qBAAqB,IAAG,GAAG,EAAE,OAAM,EAAE,OAAM,gCAAgC,GAAE,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAAE,QAAE,GAAG,GAAG,GAAE,GAAG,GAAE,CAAC,CAAC,GAAE,GAAG,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,WAAU,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,UAAS,qBAAqB,GAAE,IAAE,EAAEC,KAAE,cAAa,uBAAsB,OAAO,GAAE,IAAE,EAAE,GAAE,gBAAe,uBAAsB,EAAE,KAAK;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,UACnl/C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,gDAAgD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,uDAAuD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,eAAc,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,GAAE,mBAAkB,EAAE,CAAC,GAAE,iBAAgB,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,sBAAqB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,gBAAe,iBAAgB,OAAO,GAAE,IAAE,EAAE,GAAE,cAAa,iBAAgB,OAAO,GAAE,IAAE,EAAEC,KAAE,YAAW,iBAAgB,OAAO;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,UACnqB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mDAAmD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,CAAC;AAAE,SAAM,EAAC,eAAc,EAAE,CAAC,GAAE,aAAY,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,gBAAe,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,mBAAmB,GAAE,IAAE,EAAE,GAAE,WAAU,qBAAoB,OAAO,GAAE,IAAE,EAAEC,KAAE,cAAa,qBAAoB,OAAO;AAAE,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,YAC7lB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,YACzC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,oBAAmB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,kBAAkB,GAAE,IAAE,EAAE,GAAE,WAAU,oBAAmB,OAAO,GAAE,IAAE,EAAEC,KAAE,cAAa,oBAAmB,OAAO;AAAE,MAAG,EAAE,OAAK;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,WACvX,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM;AAAA,WACzC,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,mBAAkB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAED,KAAE,QAAO,gBAAe,QAAQ;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,iCAAiC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,+BAA+B,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,GAAE,cAAa,cAAc;AAAE,MAAG,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,uCAAuC;AAAE,MAAI,IAAE,EAAC,WAAUC,KAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,GAAE,IAAE,EAAC,MAAK,GAAE,YAAW,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,CAAC,GAAE,cAAa,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,eAAc,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,eAAc,QAAQ,GAAE,IAAE,EAAE,GAAE,aAAY,eAAc,QAAQ;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,+CAA+C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mDAAmD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAC,WAAUC,IAAC,GAAE,IAAE,EAAC,OAAM,GAAE,WAAU,EAAC,GAAE,IAAE,EAAE,UAAU,IAAG,GAAE,CAAC;AAAE,SAAM,EAAC,SAAQ,EAAE,CAAC,GAAE,QAAO,EAAE,CAAC,GAAE,OAAM,EAAE,CAAC,EAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,cAAa,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,SAAQ,0BAAyB,QAAQ,GAAE,IAAE,EAAC,YAAW,EAAC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAE,EAAC,OAAMC,IAAC;AAAE,SAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,yBAAwB,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,EAAED,KAAE,SAAQ,sBAAqB,QAAQ,GAAE,IAAE,EAAC,SAAQ,GAAE,SAAQC,KAAE,eAAc,EAAC;AAAE,SAAO,EAAE,UAAU,IAAG,EAAC,GAAE,EAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,qBAAoB,GAAE,CAAC;AAAE,IAAI,KAAG,EAAC,KAAI,IAAG,MAAK,IAAG,MAAK,IAAG,OAAM,GAAE;AAAvC,IAAyC,KAAG,EAAC,eAAc,IAAG,YAAW,IAAG,OAAM,IAAG,MAAK,GAAE;AAA5F,IAA8F,KAAG,EAAC,eAAc,IAAG,gBAAe,IAAG,uBAAsB,IAAG,gBAAe,IAAG,gBAAe,IAAG,kBAAiB,IAAG,eAAc,IAAG,mBAAkB,IAAG,wBAAuB,IAAG,4BAA2B,IAAG,iCAAgC,IAAG,yBAAwB,IAAG,8BAA6B,IAAG,WAAU,IAAG,WAAU,GAAE;AAA3a,IAA6a,KAAG,EAAC,UAAS,IAAG,aAAY,IAAG,IAAG,GAAE;AAAjd,IAAmd,KAAG,EAAC,oBAAmB,IAAG,qBAAoB,IAAG,gBAAe,IAAG,WAAU,IAAG,WAAU,IAAG,SAAQ,IAAG,kBAAiB,IAAG,qBAAoB,IAAG,qBAAoB,GAAE;AAA5nB,IAA8nB,KAAG,EAAC,qBAAoB,IAAG,eAAc,IAAG,mBAAkB,IAAG,kBAAiB,GAAE;AAAltB,IAAotB,KAAG,EAAC,cAAa,IAAG,aAAY,IAAG,wBAAuB,IAAG,oBAAmB,GAAE;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,mBAAkB,MAAI,IAAG,eAAc,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,oBAAI;AAAX,IAAe,KAAG,oBAAI;AAAtB,IAA0B,KAAG,MAAK;AAAA,EAAC,eAAc;AAAC,WAAO,KAAK,YAAY;AAAA,EAAS;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,GAAC;AAAA,EAAC;AAAC;AAA3H,IAA6H,KAAG,MAAMD,GAAC;AAAA,EAAC,cAAa;AAAC,SAAK,eAAa,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAQ;AAAC,WAAOA,GAAE,YAAU,SAAOA,GAAE,WAAS,IAAIA,OAAGA,GAAE;AAAA,EAAQ;AAAA,EAAC,OAAO,SAAS,GAAE;AAAC,IAAAA,GAAE,OAAO,EAAE,aAAa,EAAE,SAAS,IAAE,CAAC,GAAE,EAAE,UAAU;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,IAAED,IAAE,aAAW,MAAK,MAAI,6EAA6E,GAAE,EAAE,OAAOA,IAAE,aAAW,UAAS,MAAI,wDAAsD,OAAOA,IAAE,SAAS,GAAE,EAAEA,IAAE,UAAU,SAAO,GAAE,MAAI,mFAAmF,GAAE,OAAO,KAAG,gBAAc,IAAE,WAAU,OAAOC,OAAG,gBAAcA,MAAED,IAAE;AAAW,MAAI,IAAEC,KAAE,IAAE,IAAE,MAAI;AAAE,SAAO,GAAG,SAASD,GAAC,GAAE,GAAG,IAAI,GAAEA,GAAC,GAAE,GAAG,IAAIA,KAAE,CAAC,GAAEA;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,GAAC,IAAE,GAAG,IAAIA,GAAC,IAAEA,IAAE;AAAS;AAAC,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,SAAS,GAAEC,MAAE,OAAG,GAAE;AAAC,QAAG,EAAC,OAAM,GAAE,OAAM,EAAC,IAAE,KAAK,iBAAiB,GAAE,CAAC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,QAAO,EAAE,EAAE,IAAI,EAAC,EAAE;AAAE,WAAK,eAAe,CAAC;AAAA,IAAC;AAAM,WAAK,eAAe,CAAC;AAAE,WAAO,GAAG,CAAC,GAAEA,MAAE,KAAG,EAAE,QAAQ,GAAE;AAAA,EAAK;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAG,KAAK;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,SAAK,cAAY,KAAK,aAAW;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,WAAO,GAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,eAAa,QAAM,GAAG,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,iBAAgB;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,cAAY,IAAG,EAAC,MAAK,QAAO,QAAO,GAAG,KAAK,aAAY,OAAO,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,UAAM,IAAI,MAAM,4DAA4D,KAAK,aAAa,CAAC,EAAE;AAAA,EAAC;AAAA,EAAC,MAAM,kBAAkB,GAAE;AAAC,WAAO,KAAK,eAAa,MAAM,EAAE,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC,GAAE,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC;AAAE,OAAO,eAAe,IAAG,OAAO,aAAY,EAAC,OAAM,CAAAD,QAAGA,IAAE,YAAU,QAAMA,IAAE,oBAAkB,QAAMA,IAAE,kBAAgB,KAAI,CAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAU;AAAA,EAAC,YAAY,GAAEC,KAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,MAAIA,KAAE,KAAK,UAAQ,GAAE,KAAK,mBAAiB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,WAAK,iBAAiB,CAAC,KAAG,SAAO,KAAK,iBAAiB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,eAAc,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,mBAAmB,CAAC,KAAG,SAAO,KAAK,mBAAmB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,cAAa,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG;AAAK;AAAO,UAAI,IAAE,KAAK,iBAAiB,CAAC,EAAE,UAAS,IAAE,KAAK,mBAAmB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,GAAE,KAAK,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,GAAG,CAAC,GAAE,IAAE,GAAG,GAAG,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,GAAE,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,GAAG,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,sBAAoB,SAAO,GAAG,KAAK,iBAAiB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,GAAG,KAAK,mBAAmB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,kBAAiB,GAAG,KAAK,kBAAkB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,mBAAiB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,KAAI,KAAK,KAAI,SAAQ,KAAK,QAAO;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,KAAIA,IAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAY,GAAEA,MAAE,KAAG;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,0BAAwBA,KAAE,KAAK,mBAAiB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,WAAK,iBAAiB,CAAC,KAAG,SAAO,KAAK,iBAAiB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,gBAAe,UAAS,GAAG,MAAI,GAAG,EAAE,OAAM,KAAK,uBAAuB,EAAE,SAAS,KAAE,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG;AAAK;AAAO,UAAI,IAAE,KAAK,iBAAiB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAE,GAAG,CAAC,CAAC;AAAE,UAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,GAAG,GAAE,EAAE,QAAQ,QAAQ,CAAC,CAAC,CAAC,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,oBAAkB,QAAM,GAAG,KAAK,iBAAiB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,iBAAiB,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE;AAAG,SAAK,mBAAiB,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAASA,GAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,yBAAwB,KAAK,wBAAuB;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,uBAAuB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAM;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,MAAK;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,0BAAwB,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,WAAS,GAAGA,GAAC,EAAE,SAAS,GAAE,KAAK,WAAS,GAAG,CAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC;AAAE,OAAG,MAAI;AAAC,UAAI,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,GAAG,GAAE,KAAK,QAAQ;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,aAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,wBAAwB,CAAC,KAAG,SAAO,KAAK,wBAAwB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,YAAG,KAAG;AAAK;AAAO,YAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,wBAAwB,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,KAAK,OAAO,CAAC,GAAE,CAAC,KAAK,YAAY,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,SAAS,QAAQ,GAAE,KAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,2BAAyB,QAAM,GAAG,KAAK,wBAAwB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,uBAAuB;AAAE,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,SAAS,OAAO,GAAG,KAAK,OAAM,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,OAAM,KAAK,cAAY,CAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAIA,MAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,0BAAwB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,OAAM,KAAK,OAAM,SAAQ,KAAK,QAAO;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,OAAMA,IAAE,OAAO;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAQ;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,MAAK,IAAE,GAAE;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,QAAM,GAAE,KAAK,UAAQ,GAAE,KAAK,QAAM,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,6BAA2B,CAAC,GAAE,GAAG,MAAI;AAAC,WAAK,YAAU,GAAG,CAAC,EAAE,SAAS,GAAE,KAAK,WAAS,GAAGA,GAAC,EAAE,SAAS;AAAA,IAAC,CAAC,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC;AAAE,OAAG,MAAI;AAAC,UAAI,IAAE,GAAG,GAAE,KAAK,QAAQ,GAAE,IAAE,GAAG,CAAC,KAAK,cAAa,GAAG,GAAG,KAAK,WAAU,KAAK,KAAK,GAAE,CAAC,CAAC;AAAE,MAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,aAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,CAAC,EAAE,SAAS,CAAC,EAAC,IAAG,KAAK,2BAA2B,CAAC,KAAG,SAAO,KAAK,2BAA2B,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,MAAK,UAAS,GAAG,CAAC,EAAE,SAAS,CAAC,EAAC;AAAG,YAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,YAAG,KAAG;AAAK;AAAO,YAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,2BAA2B,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAE,KAAK,KAAK,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,YAAI,IAAE,GAAG,GAAG,GAAG,GAAE,CAAC,GAAE,GAAG,GAAE,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,UAAU,OAAO,GAAG,KAAK,WAAU,CAAC,CAAC,GAAE,KAAK,SAAS,OAAO,GAAG,KAAK,UAAS,KAAK,KAAK,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,UAAU,QAAQ,GAAE,KAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,8BAA4B,QAAM,GAAG,KAAK,2BAA2B,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,UAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,OAAM,KAAK,OAAM,SAAQ,KAAK,SAAQ,OAAM,KAAK,MAAK;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,OAAMA,IAAE,SAAQA,IAAE,KAAK;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,GAAE,KAAK,eAAa,GAAE,KAAK,gBAAgB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG;AAAK;AAAO,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC;AAAE,UAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,SAAK,eAAa,GAAE,KAAK,KAAG,QAAM,KAAK,EAAE,QAAQ,GAAE,KAAK,IAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,EAAE,QAAQ;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAG,IAAE,MAAM,KAAK,kBAAkB,CAAC,GAAE,EAAE,WAAS;AAAE,YAAM,IAAI,MAAM,+CAA+C;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,aAAY;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,YAAY;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAU;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,UAAM,CAAC,GAAE,KAAK,eAAa,GAAE,KAAK,WAASA,KAAE,KAAK,cAAY,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,IAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC;AAAE,WAAK,cAAc,CAAC,KAAG,SAAO,KAAK,cAAc,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,aAAY,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,KAAE,CAAC,EAAC;AAAG,UAAI,IAAE,KAAK,cAAc,CAAC,EAAE,UAAS,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,WAAG,QAAM,GAAG,MAAI;AAAC,YAAI,GAAE,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC;AAAE,aAAK,cAAY,IAAE,GAAG,GAAG,KAAK,GAAE,GAAG,GAAE,GAAG,GAAE,KAAK,CAAC,CAAC,CAAC,GAAE,CAAC,IAAE,IAAE,GAAG,GAAG,KAAK,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,EAAE,QAAQ,GAAE,KAAK,iBAAe,QAAM,GAAG,KAAK,cAAc,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,WAAS;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,WAAM,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,KAAK,cAAc,IAAI,QAAI,EAAC,MAAK,EAAE,cAAa,QAAO,EAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE;AAAG,SAAK,gBAAc,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAASA,GAAC,EAAC,EAAE;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,UAAS,KAAK,UAAS,aAAY,KAAK,YAAW;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,UAASA,IAAE,WAAW;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,cAAc,GAAE;AAAA,EAAC,WAAW,YAAW;AAAC,WAAM;AAAA,EAAS;AAAA,EAAC,YAAY,GAAEA,MAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,QAAG,MAAM,GAAE,KAAK,eAAa,GAAE,KAAK,QAAMA,KAAE,KAAK,WAAS,GAAE,KAAK,UAAQ,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,qBAAmB,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE,KAAK,WAAS,GAAE,KAAG,SAAO,KAAK,UAAQ,EAAE,QAAQ,QAAQ,IAAG,KAAG;AAAK,YAAM,IAAI,MAAM,oDAAoD;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,KAAC,MAAM,QAAQ,CAAC,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,IAAE,OAAO,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE;AAAG,WAAK,uBAAuB,CAAC,KAAG,SAAO,KAAK,uBAAuB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,QAAO,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,mBAAmB,CAAC,KAAG,SAAO,KAAK,mBAAmB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,aAAY,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC,IAAG,KAAK,qBAAqB,CAAC,KAAG,QAAM,KAAK,aAAW,KAAK,qBAAqB,CAAC,IAAE,EAAC,cAAa,GAAG,CAAC,OAAM,UAAS,GAAG,MAAI,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,EAAC;AAAG,UAAI,IAAE,MAAM,QAAQ,CAAC,IAAE,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC;AAAE,UAAG,KAAG;AAAK;AAAO,UAAI,IAAE,KAAK,uBAAuB,CAAC,EAAE,UAAS,IAAE,KAAK,mBAAmB,CAAC,EAAE;AAAS,SAAG,MAAI;AAAC,YAAI,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC;AAAE,YAAG,KAAK,UAAS;AAAC,cAAI,IAAE,KAAK,qBAAqB,CAAC,EAAE,UAAS,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,YAAY,GAAE,GAAG,GAAG,GAAE,GAAG,GAAG,CAAC,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,QAAQ,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,cAAI,IAAE,GAAG,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC;AAAA,QAAC,OAAK;AAAC,cAAI,IAAE,GAAG,GAAG,GAAE,KAAK,KAAK,GAAE,GAAG,GAAG,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,GAAG,GAAG,GAAE,KAAK,QAAQ,GAAE,GAAG,GAAG,GAAE,KAAK,YAAY,GAAE,GAAG,GAAG,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC;AAAE,YAAE,OAAO,CAAC,GAAE,EAAE,OAAO,CAAC;AAAE,cAAI,IAAE,GAAG,GAAE,CAAC;AAAE,YAAE,OAAO,CAAC;AAAA,QAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,oBAAoB;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,0BAAwB,QAAM,GAAG,KAAK,uBAAuB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,wBAAsB,QAAM,KAAK,YAAU,GAAG,KAAK,qBAAqB,IAAI,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,sBAAoB,QAAM,GAAG,KAAK,mBAAmB,IAAI,OAAG,EAAE,QAAQ,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,CAAC,GAAG,KAAK,wBAAuB,GAAG,KAAK,kBAAkB;AAAE,WAAO,KAAK,YAAU,EAAE,KAAK,GAAG,KAAK,oBAAoB,GAAE,CAAC,MAAM,KAAK,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAAA,SAAI,EAAC,MAAKA,IAAE,cAAa,QAAOA,IAAE,SAAQ,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,WAAW,GAAE;AAAC,QAAE,MAAM,KAAK,kBAAkB,CAAC;AAAE,QAAIA,MAAE,KAAK,WAAS,EAAE,SAAO,IAAE,EAAE,SAAO,GAAE,IAAE;AAAG,SAAK,yBAAuB,EAAE,MAAM,GAAEA,GAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,qBAAmB,EAAE,MAAMA,KAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE,GAAE,KAAK,aAAW,KAAK,uBAAqB,EAAE,MAAMA,MAAE,GAAEA,MAAE,CAAC,EAAE,IAAI,QAAI,EAAC,cAAa,EAAE,MAAK,UAAS,EAAE,OAAO,SAAS,CAAC,EAAC,EAAE;AAAA,EAAE;AAAA,EAAC,YAAW;AAAC,WAAM,EAAC,cAAa,KAAK,cAAa,OAAM,KAAK,OAAM,UAAS,KAAK,UAAS,SAAQ,KAAK,SAAQ,UAAS,KAAK,SAAQ;AAAA,EAAC;AAAA,EAAC,OAAO,WAAW,GAAEA,KAAE;AAAC,WAAO,IAAI,EAAEA,IAAE,cAAaA,IAAE,OAAMA,IAAE,UAASA,IAAE,SAAQA,IAAE,QAAQ;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAS,KAAI;AAAC,WAAQD,OAAK;AAAG,OAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,sBAAqB,MAAI,IAAG,cAAa,MAAI,IAAG,oBAAmB,MAAI,IAAG,yBAAwB,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,eAAc,MAAI,IAAG,YAAW,MAAI,IAAG,gBAAe,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,8BAA6B,MAAI,IAAG,8BAA6B,MAAI,IAAG,iBAAgB,MAAI,IAAG,gBAAe,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,aAAY,MAAI,IAAG,WAAU,MAAI,IAAG,oBAAmB,MAAI,IAAG,oBAAmB,MAAI,IAAG,aAAY,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAe,KAAG;AAAlB,IAA0B,KAAG;AAAe,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,QAAQ,OAAG,WAAW,CAAC,CAAC,EAAE,KAAKA,GAAC;AAAC;AAAC,IAAI,KAAG,MAAMA,GAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,YAAY;AAAE,YAAM,IAAI,MAAM,qFAAqF;AAAE,MAAE,WAAWA,GAAE,UAAU,MAAI,IAAE,EAAE,MAAMA,GAAE,WAAW,MAAM,KAAI,KAAG,QAAM,EAAE,WAAS,OAAK,IAAE,KAAI,KAAK,oBAAkB,IAAE,IAAG,KAAK,qBAAmB,IAAE;AAAA,EAAE;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,OAAO,YAAU;AAAY,YAAM,IAAI,MAAM,yFAAyF;AAAE,QAAIC,MAAE,GAAG,KAAK,EAAE,UAAU,GAAE,IAAE,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAACA,GAAC,GAAE,EAAC,MAAK,2BAA0B,CAAC,CAAC;AAAE,QAAG,EAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,uFAAuF;AAAE;AAAC,UAAI,IAAE,CAAC,EAAC,OAAM,CAAC,OAAK,KAAK,kBAAkB,GAAE,SAAQ,EAAE,YAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,MAAK,mBAAkB,CAAC,CAAC,GAAE,IAAE,KAAK,mBAAiB,OAAK,SAAS,cAAc,GAAG,IAAE,KAAK;AAAgB,UAAG,EAAE,WAAS,KAAK,mBAAkB,EAAE,OAAK,GAAE,MAAM,GAAG,MAAI,EAAE,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC,GAAE,EAAE,cAAY,MAAK;AAAC,YAAI,IAAE,KAAK,oBAAkB,OAAK,SAAS,cAAc,GAAG,IAAE,KAAK;AAAiB,UAAE,WAAS,KAAK,oBAAmB,EAAE,OAAK,GAAE,MAAM,GAAG,MAAI,EAAE,cAAc,IAAI,WAAW,OAAO,CAAC,CAAC;AAAA,MAAC;AAAC,aAAM,EAAC,oBAAmB,GAAG,CAAC,EAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAe,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAG,QAAM,EAAE,SAAO;AAAE,YAAM,IAAI,MAAM,wEAAwE,CAAC,EAAE;AAAE,SAAK,WAAS,EAAE,CAAC,GAAE,KAAK,eAAa,EAAE,MAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAEA,QAAI;AAAC,UAAI,IAAE,IAAI;AAAW,QAAE,SAAO,OAAG;AAAC,YAAI,IAAE,KAAK,MAAM,EAAE,OAAO,MAAM,GAAE,IAAE,EAAE;AAAc,YAAG,KAAG,MAAK;AAAC,UAAAA,IAAE,IAAI,MAAM,4CAA4C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,EAAE,mBAAiB,MAAK;AAAC,UAAAA,IAAE,IAAI,MAAM,6CAA6C,KAAK,SAAS,IAAI,EAAE,CAAC;AAAE;AAAA,QAAM;AAAC,YAAG,KAAK,aAAa,WAAS,GAAE;AAAC,YAAE,EAAC,eAAc,EAAC,CAAC;AAAE;AAAA,QAAM;AAAC,YAAI,IAAE,GAAG,GAAE,OAAG,KAAK,YAAY,CAAC,CAAC;AAAE,UAAE,CAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAGA,IAAE,sEAAsE,KAAK,SAAS,IAAI,uEAAuE,GAAE,EAAE,WAAW,KAAK,QAAQ;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,MAAAA,IAAE,KAAK,GAAG,EAAE,OAAO,GAAE,EAAE,KAAK,GAAG,EAAE,KAAK;AAAE,QAAI,IAAE,KAAK,4BAA4B,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,gBAAgB,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,WAAO,QAAQ,IAAI,CAAC,EAAE,KAAK,OAAG,CAACA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE;AAAC,WAAO,IAAI,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,IAAI;AAAW,QAAE,SAAO,OAAG;AAAC,YAAI,IAAE,EAAE,OAAO;AAAO,UAAE,CAAC;AAAA,MAAC,GAAE,EAAE,UAAQ,OAAG,EAAE,6CAA6C,CAAC,IAAI,GAAE,EAAE,kBAAkBA,GAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,4BAA4B,GAAE;AAAC,QAAIA,MAAE,CAAC,GAAE,IAAE,KAAK,aAAa,IAAI,OAAG,GAAG,EAAE,IAAI,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,QAAE,MAAM,QAAQ,OAAG;AAAC,YAAI,IAAE,GAAG,CAAC;AAAE,YAAGA,IAAE,QAAQ,CAAC,MAAI;AAAG,gBAAM,IAAI,MAAM,uDAAuD,CAAC,GAAG;AAAE,YAAGA,IAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,CAAC,MAAI;AAAG,gBAAM,IAAI,MAAM,8BAA8B,CAAC,oBAAoB;AAAE,UAAE,CAAC,IAAE,KAAK,aAAa,EAAE,QAAQ,CAAC,CAAC;AAAA,MAAC,CAAC;AAAE,QAAGA,IAAE,WAAS,KAAK,aAAa;AAAO,YAAM,IAAI,MAAM,wDAAwDA,IAAE,MAAM,8CAA8C,KAAK,aAAa,MAAM,IAAI;AAAE,WAAO;AAAA,EAAC;AAAC;AAAzxD,IAA2xD,KAAG,CAAAD,QAAG,EAAE,EAAE,QAAQ,YAAY,KAAG,CAAC,MAAM,QAAQA,GAAC,KAAGA,IAAE,WAAW,GAAG,UAAU,IAAE,GAAGA,IAAE,MAAM,GAAG,WAAW,MAAM,CAAC,IAAE;AAAK,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,MAAE,SAAQ;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,IAAED,GAAC,GAAEC,MAAEA,OAAG,OAAK,IAAEA,KAAE,IAAE,KAAG,OAAK,IAAE,GAAE,EAAEA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,QAAI,EAAE,KAAK,OAAG;AAAC,QAAI,IAAEA,MAAG,EAAE,IAAED,IAAE,UAAQ,IAAEC;AAAG,WAAO,EAAE,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE;AAAG,WAAS,EAAE,GAAE;AAAC,MAAE,KAAG,QAAM,MAAM,QAAQ,CAAC,KAAG,EAAE,SAAO,GAAE,MAAI,qCAAqC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE,GAAE;AAAC,MAAE,KAAG,KAAG,KAAG,GAAE,MAAI,oEAAoE,CAAC,EAAE,GAAE,EAAE,KAAG,KAAG,KAAG,GAAE,MAAI,kEAAkE,CAAC,EAAE,GAAE,EAAE,KAAG,GAAE,MAAI,yEAAyE,CAAC,oBAAoB,CAAC,EAAE;AAAA,EAAC;AAAC,SAAO,QAAQ,IAAID,IAAE,IAAI,CAAC,CAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,OAAG,SAAO,IAAE,CAAC;AAAG,MAAIC,MAAE,EAAE,aAAW,OAAK,EAAE,EAAE,SAAS,QAAM,EAAE,WAAU,IAAED,IAAE,IAAI,OAAGC,IAAE,GAAE,EAAE,aAAY,EAAC,UAAS,KAAE,CAAC,CAAC,GAAE,KAAG,EAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAE,EAAE,YAAW,GAAE,GAAE,GAAG,IAAI,OAAG,EAAE,YAAY,CAAC;AAAE,SAAO,EAAE,cAAY,OAAK,MAAM,QAAQ,IAAI,CAAC,IAAE,MAAM,GAAG,GAAE,EAAE,YAAW,KAAG,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC;AAAE,MAAI,IAAE,EAAE,aAAW,OAAK,EAAE,EAAE,SAAS,QAAM,EAAE,WAAU,IAAE,GAAE;AAAE,UAAOA,MAAE,EAAE,gBAAc,QAAMA,QAAI,UAAQA,IAAE,KAAK,GAAE,CAAC,GAAE,IAAI,eAAe,EAAC,MAAK,OAAM,MAAG;AAAC,aAAQ,GAAE,IAAED,IAAE,UAAQ;AAAC,YAAI,KAAG,MAAM,EAAEA,IAAE,CAAC,GAAE,EAAE,aAAY,EAAC,UAAS,KAAE,CAAC,GAAG,KAAK,UAAU;AAAG,UAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,MAAM,EAAE,KAAK;AAAE,UAAG,GAAE;AAAC,aAAI,IAAE,SAAQ,IAAE,EAAE,gBAAc,QAAM,MAAI,UAAQ,EAAE,KAAK,GAAE,IAAEA,IAAE,MAAM;AAAE;AAAA,MAAQ;AAAC,QAAE,QAAQ,CAAC;AAAE;AAAA,IAAM;AAAC,MAAE,MAAM;AAAA,EAAC,EAAC,CAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,IAAE,IAAGC,KAAE,GAAE;AAAC,SAAO,GAAG,OAAG,GAAG,GAAE,EAAC,aAAY,EAAC,CAAC,CAAC,EAAED,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,OAAM,GAAEC,MAAE,IAAG,MAAI;AAAC,QAAI,IAAE,EAAE,IAAI,MAAI,KAAE,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,OAAK,EAAE,IAAI,MAAI,KAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,QAAG,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE;AAAE,QAAE,QAAQ,QAAQ,OAAG;AAAC,YAAI,IAAE,kBAAiB,IAAE,EAAE,aAAa,QAAM,EAAE,OAAM,IAAE,GAAG,CAAC,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,MAAI;AAAC,YAAE,CAAC,IAAE,MAAG,EAAE,CAAC,KAAG,SAAO,EAAE,CAAC,IAAE,CAAC,IAAG,EAAE,CAAC,EAAE,KAAK,EAAC,eAAc,GAAE,aAAY,GAAE,WAAU,EAAC,CAAC;AAAA,QAAC;AAAE,aAAG,OAAK,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,gBAAI,EAAE,SAAO,EAAE,GAAE,EAAE,CAAC,IAAE;AAAA,QAAG,CAAC,IAAE,EAAE,GAAE,EAAE,KAAK,EAAE,IAAI,GAAE,KAAG;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,CAAC,EAAE,MAAM,OAAG,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,CAAC,EAAE,CAAC,CAAC;AAAE,YAAM,IAAI,MAAM,kDAAkD,EAAE,KAAK,IAAI,CAAC;AAAA,wCAClzrB,EAAE,KAAK,IAAI,CAAC,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,GAAE,OAAK,KAAG,EAAE,KAAK,CAAC,GAAE,IAAG,CAAC,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,QAAE,CAAC,EAAE,MAAM,QAAQ,OAAG;AAAC,YAAI,IAAEA,OAAGA,IAAE,SAAS,GAAG,IAAE,KAAG,OAAK;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,MAAMD,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAO,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC,EAAE,MAAM,QAAO,IAAE,IAAI,GAAG,EAAE,MAAM,GAAE,IAAE,CAAC,CAAC;AAAE,QAAE,CAAC,EAAE,QAAQ,OAAG;AAAC,YAAI,IAAE,EAAE,MAAM,EAAE,aAAY,EAAE,cAAY,EAAE,SAAS,GAAE,IAAE,GAAG,GAAE,CAAC,EAAE,aAAa,CAAC;AAAE,iBAAQ,KAAK;AAAE,YAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC,CAAC,GAAE,KAAG;AAAA,IAAC,CAAC,GAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAkC,KAAG;AAArC,IAAwD,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,QAAG,KAAK,iBAAe,QAAOA,OAAG,SAAOA,MAAE,CAAC,IAAG,KAAK,mBAAiBA,IAAE,kBAAiB,KAAK,qBAAmBA,IAAE,oBAAmBA,IAAE,aAAW,QAAM,EAAE,OAAOA,IAAE,aAAW,YAAW,MAAI,6HAA6H,GAAE,KAAK,QAAMA,IAAE,aAAW,KAAK,QAAM,EAAE,EAAE,SAAS,OAAM,EAAE,KAAG,QAAM,EAAE,SAAO,GAAE,MAAI,yDAAyD,GAAE,MAAM,QAAQ,CAAC,KAAG,EAAE,EAAE,WAAS,GAAE,MAAI,iEAAiE,EAAE,MAAM,IAAI,GAAE,KAAK,OAAK,GAAEA,IAAE,eAAa,QAAMA,IAAE,YAAY,QAAM;AAAK,YAAM,IAAI,MAAM,oEAAoE;AAAE,SAAK,cAAYA,IAAE,eAAa,CAAC,GAAE,KAAK,cAAYA;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,EAAE,yBAAyB;AAAY,YAAM,IAAI,MAAM,yFAAyF;AAAE,QAAIA,MAAE,OAAO,OAAO,EAAC,QAAO,KAAK,eAAc,GAAE,KAAK,WAAW;AAAE,IAAAA,IAAE,OAAK,IAAI;AAAS,QAAI,IAAE,CAAC,EAAC,OAAM,CAAC,qBAAqB,GAAE,SAAQ,EAAE,YAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,QAAGA,IAAE,KAAK,OAAO,cAAa,IAAI,KAAK,CAAC,KAAK,UAAU,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,YAAY,GAAE,EAAE,cAAY,MAAK;AAAC,UAAI,IAAE,GAAG,KAAK,EAAE,UAAU;AAAE,MAAAA,IAAE,KAAK,OAAO,qBAAoB,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,GAAE,CAAC,GAAE,mBAAmB;AAAA,IAAC;AAAC,QAAI,IAAE,MAAM,KAAK,MAAM,KAAK,MAAKA,GAAC;AAAE,QAAG,EAAE;AAAG,aAAM,EAAC,oBAAmB,GAAG,CAAC,GAAE,WAAU,CAAC,CAAC,EAAC;AAAE,UAAM,IAAI,MAAM,gEAAgE,EAAE,MAAM,GAAG;AAAA,EAAC;AAAA,EAAC,MAAM,gBAAe;AAAC,QAAI,IAAE,MAAM,KAAK,MAAM,KAAK,MAAK,KAAK,WAAW;AAAE,QAAG,CAAC,EAAE;AAAG,YAAM,IAAI,MAAM,cAAc,KAAK,IAAI,4BAA4B,EAAE,MAAM,yEAAyE;AAAE,QAAIA;AAAE,QAAG;AAAC,MAAAA,MAAE,MAAM,EAAE,KAAK;AAAA,IAAC,SAAO,GAAE;AAAC,UAAI,IAAE,+CAA+C,KAAK,IAAI;AAAI,YAAM,KAAK,KAAK,SAAS,KAAK,IAAE,KAAG,iVAA+U,KAAG,wEAAuE,IAAI,MAAM,CAAC;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,eAAc,IAAEA,IAAE;AAAgB,QAAG,KAAG,QAAM,KAAG;AAAK,YAAM,IAAI,MAAM,2BAA2B,KAAK,IAAI,2DAA2D;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,MAAM,OAAM;AAAC,QAAG,KAAK,YAAY;AAAc,aAAO,KAAK,WAAW;AAAE,QAAI,IAAE,MAAM,KAAK,cAAc;AAAE,WAAO,GAAG,GAAE,CAAAA,QAAG,KAAK,YAAYA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAY;AAAC,QAAI,IAAE,MAAM,KAAK,cAAc,GAAEA,MAAE,MAAM,KAAK,cAAc,EAAE,eAAe,GAAE,IAAE,GAAG,EAAE,eAAe,GAAE,IAAE,MAAI,GAAGA,KAAE,KAAK,WAAW;AAAE,WAAO,OAAO,OAAO,OAAO,OAAO,CAAC,GAAE,CAAC,GAAE,EAAC,aAAY,GAAE,iBAAgB,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAIA,MAAE,MAAM,QAAQ,KAAK,IAAI,IAAE,KAAK,KAAK,CAAC,IAAE,KAAK,MAAK,CAAC,GAAE,CAAC,IAAE,GAAGA,GAAC,GAAE,IAAE,KAAK,oBAAkB,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,eAAQ,KAAK,EAAE;AAAM,aAAK,sBAAoB,OAAK,EAAE,KAAK,KAAK,mBAAmB,CAAC,CAAC,IAAE,EAAE,KAAK,IAAE,IAAE,CAAC;AAAE,WAAO,KAAK,sBAAoB,EAAE,KAAK,GAAG,MAAM,QAAQ,IAAI,CAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,YAAY,GAAE;AAAC,QAAIA,MAAE,MAAM,KAAK,cAAc,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAM,GAAGA,KAAE,KAAK,WAAW;AAAE,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,mBAAiB;AAAe,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,YAAY,GAAG,GAAEC,MAAED,IAAE,YAAY,GAAG,GAAE,IAAEA,IAAE,UAAU,GAAE,CAAC,GAAE,IAAEC,MAAE,IAAED,IAAE,UAAUC,GAAC,IAAE;AAAG,SAAM,CAAC,IAAE,KAAI,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,MAAM,GAAG,gBAAgB,KAAG;AAAI;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI;AAAC,MAAG,OAAO,SAAO,gBAAc,KAAG,QAAM,EAAE,aAAW;AAAM,WAAO;AAAK;AAAC,QAAIC,MAAE;AAAG,QAAG,MAAM,QAAQD,GAAC,IAAEC,MAAED,IAAE,MAAM,OAAG,GAAG,CAAC,CAAC,IAAEC,MAAE,GAAGD,GAAC,GAAEC;AAAE,aAAO,GAAGD,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAI;AAAE,GAAG,mBAAmB,EAAE;AAAE,GAAG,mBAAmB,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,IAAI,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,iBAAe;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK;AAAA,EAAc;AAAC;AAApF,IAAsF,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,WAAO,KAAK,YAAY,CAAC;AAAA,EAAC;AAAC;AAApK,IAAsK,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,MAAE,SAAO,KAAK,OAAK,MAAI,QAAQ,QAAQ,EAAE,KAAK,CAAC,IAAG,EAAE,SAAO,KAAK,OAAK,CAAAC,QAAG,QAAQ,QAAQ,EAAE,KAAKA,GAAC,CAAC;AAAA,EAAE;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE;AAAU,SAAO,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,UAAU,WAAS,IAAED,IAAE,iBAAe,QAAMA,IAAE,eAAa,OAAK,IAAI,GAAGA,GAAC,KAAG,QAAQ,KAAK,uNAAuN,GAAE,IAAI,GAAG,EAAC,eAAcA,IAAC,CAAC,MAAI,QAAQ,KAAK,uNAAuN,GAAE,IAAI,GAAG,EAAC,eAAcA,KAAE,aAAY,GAAE,YAAWC,KAAE,gBAAe,EAAC,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,IAAI,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,UAAS,iBAAiB,GAAE,IAAE,EAAE,GAAE,eAAc,iBAAiB;AAAE,IAAEC,OAAG,QAAMA,MAAE,KAAG,OAAO,UAAUA,GAAC,GAAE,MAAI,+DAA+DA,GAAC,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,gDAAgD,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,SAAO,GAAE,MAAI,qDAAqD,EAAE,IAAI,EAAE,GAAE,EAAE,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC,GAAE,MAAI,uCAAuC,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,mEAAmE,GAAE,EAAEA,MAAE,KAAG,OAAO,UAAUA,GAAC,GAAE,MAAI,4DAA4DA,GAAC,EAAE;AAAE,MAAI,IAAE,GAAG,GAAG,GAAE,OAAO,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAG,GAAE,OAAO,GAAEA,GAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,OAAO;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,kBAAiB,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,iBAAgB,MAAI,IAAG,UAAS,MAAI,GAAE,CAAC;AAAE,IAAI;AAAJ,IAAO,KAAG;AAAG,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,gEAAgE;AAAE,MAAGA,OAAG;AAAK,UAAM,IAAI,MAAM,0DAA0D;AAAE,MAAIC,MAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE;AAAG,MAAGD,IAAE,gBAAgB;AAAW,IAAAC,MAAE;AAAA,WAAW,OAAO,aAAW,eAAaD,eAAa;AAAU,QAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa;AAAiB,QAAE;AAAA,WAAW,OAAO,oBAAkB,eAAaA,eAAa;AAAiB,QAAE;AAAA,WAAWA,IAAE,cAAY;AAAK,QAAE;AAAA,WAAW,OAAO,eAAa,eAAaA,eAAa;AAAY,QAAE;AAAA;AAAQ,UAAM,IAAI,MAAM,qPAAqPA,IAAE,YAAY,IAAI,EAAE;AAAE,MAAG,GAAG,IAAG,EAAE,WAAW,KAAG,MAAK;AAAC,QAAI,IAAE,EAAC,QAAOA,IAAC,GAAE,IAAE,EAAC,aAAY,EAAC;AAAE,WAAO,EAAE,UAAU,IAAG,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,IAAE,CAACA,IAAE,YAAWA,IAAE,WAAW,IAAE,CAACA,IAAE,OAAMA,IAAE,MAAM,GAAE;AAAE,MAAG;AAAE,QAAEA,IAAE,WAAW,IAAI,EAAE,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE;AAAA,WAAa,KAAGC;AAAE,QAAED,IAAE;AAAA,WAAa,KAAG,KAAG,GAAE;AAAC,QAAG,MAAI;AAAK,UAAG,OAAO,YAAU;AAAY,YAAG,OAAO,mBAAiB,eAAa,OAAO,qCAAmC;AAAY,eAAG,IAAI,gBAAgB,GAAE,CAAC,EAAE,WAAW,IAAI;AAAA;AAAO,gBAAM,IAAI,MAAM,sGAAsG;AAAA;AAAO,aAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,KAAE,CAAC;AAAE,OAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAUA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE;AAAA,EAAI;AAAC,MAAI;AAAE,MAAG,MAAI;AAAE,QAAE,IAAI,WAAW,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE;AAAE,QAAE,IAAI,WAAW,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO,GAAG,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,OAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAMA,IAAE,gBAAgB;AAAU;AAAC,SAAS,KAAI;AAAC,SAAO,OAAO,UAAQ,eAAa,OAAO,eAAa,eAAa,OAAO,eAAe,mBAAmB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,QAAMA,IAAE,UAAQ,KAAGA,IAAE,WAAS;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,KAAG,EAAEA,eAAa,gBAAc,GAAGA,GAAC,KAAG,CAAC,GAAGA,GAAC;AAAC;AAAC,eAAe,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAIC,MAAE;AAAK,MAAG,EAAE,EAAE,QAAQ,qBAAqB,KAAG,GAAGD,GAAC,GAAE;AAAC,QAAI;AAAE,QAAG;AAAC,UAAE,MAAM,kBAAkBA,KAAE,EAAC,kBAAiB,OAAM,CAAC;AAAA,IAAC,SAAO,GAAE;AAAC,UAAE;AAAA,IAAI;AAAC,SAAG,QAAM,EAAE,UAAQA,IAAE,SAAO,EAAE,WAASA,IAAE,SAAOC,MAAE,IAAEA,MAAED;AAAA,EAAC;AAAM,IAAAC,MAAED;AAAE,SAAO,GAAGC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,IAAE,SAAO,KAAGA,IAAE,SAAO;AAAE,UAAM,IAAI,MAAM,wDAAwDA,IAAE,IAAI,GAAG;AAAE,MAAI,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAG,IAAE,KAAG,MAAI;AAAE,UAAM,IAAI,MAAM,0DAA0D,CAAC,EAAE;AAAE,MAAGA,IAAE,UAAQ,aAAWA,IAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,kCAAkCA,IAAE,KAAK,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,KAAGA,OAAG,OAAK,SAAOA,IAAE,UAAQ;AAAE,MAAG,IAAE,KAAG,IAAE;AAAE,UAAM,IAAI,MAAM,eAAe,CAAC,qCAAqC;AAAC;AAAC,eAAe,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAED,KAAE,OAAM,UAAU;AAAE,MAAG,EAAEA,eAAa,KAAI;AAAC,QAAI,IAAEC;AAAE,IAAAA,MAAE,GAAG,GAAE,OAAO,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,KAAGA,GAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAEA,IAAE,MAAM,MAAM,GAAE,CAAC,GAAE,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,MAAMA,IAAE,KAAK,GAAE,IAAEA,IAAE,UAAQ,YAAU,MAAI,GAAE,IAAE,IAAI,kBAAkB,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,GAAE,GAAE,GAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAGA,IAAE,UAAQ,WAAU;AAAC,YAAG,IAAE,KAAG,IAAE;AAAE,gBAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAASA,IAAE,UAAQ,YAAU,IAAE,KAAG,IAAE;AAAK,cAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAE,YAAI,KAAG,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE;AAAE,MAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,UAAI,GAAG,IAAG,EAAE,WAAW,KAAG,SAAO,QAAQ,KAAK,oGAAoG,GAAE,KAAG,OAAI,EAAE,QAAM,GAAE,EAAE,SAAO;AAAE,QAAI,IAAE,EAAE,WAAW,IAAI,GAAE,IAAE,IAAI,UAAU,GAAE,GAAE,CAAC;AAAE,MAAE,aAAa,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,QAAID,OAAGC,IAAE,QAAQ,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAED,KAAE,OAAM,MAAM;AAAE,MAAG,EAAEA,eAAa,KAAI;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,GAAE,OAAO,GAAE,EAAE,QAAQ;AAAA,EAAC;AAAC,KAAG,CAAC,GAAE,GAAGC,OAAG,OAAK,SAAOA,IAAE,YAAY;AAAE,MAAI,IAAE,EAAC,OAAM,EAAC,GAAE,IAAE,EAAC,QAAO,GAAE,SAAQA,IAAC;AAAE,IAAE,UAAU,IAAG,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAC,aAAY,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,oBAAmB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM;AAAO,MAAGC,MAAE;AAAE,UAAM,IAAI,MAAM,4EAA4EA,GAAC,GAAG;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,8EAA8E,CAAC,GAAG;AAAE,MAAG,EAAE,UAAQ;AAAQ,UAAM,IAAI,MAAM,yEAAyE,EAAE,KAAK,GAAG;AAAE,MAAG,EAAE,MAAM,IAAE,CAAC,IAAEA;AAAE,UAAM,IAAI,MAAM,iEAAiE,EAAE,MAAM,IAAE,CAAC,CAAC,QAAQA,GAAC,EAAE;AAAE,MAAG,GAAGD,IAAE,KAAK,MAAI;AAAE,UAAM,IAAI,MAAM,mEAAmEA,IAAE,KAAK,GAAG;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE;AAAE,SAAG,EAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,OAAM,IAAE,EAAE,MAAM;AAAE,IAAE,IAAI;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,EAAE;AAAE,SAAG,EAAE,CAAC,GAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,GAAGD,IAAE,KAAK,EAAE,IAAI,OAAG,IAAE,CAAC,GAAE,CAAC,EAAE,MAAM,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,iBAAgB,MAAI,IAAG,mBAAkB,MAAI,IAAG,kBAAiB,MAAI,IAAG,YAAW,MAAI,IAAG,kBAAiB,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,4BAA2B,MAAI,IAAG,aAAY,MAAI,IAAG,2BAA0B,MAAI,IAAG,gBAAe,MAAI,IAAG,uBAAsB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG;AAAP,IAAU,KAAG;AAAG,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM;AAAO,IAAE,MAAI,EAAE,QAAO,MAAI,iBAAiB,CAAC,sBAAsB,CAAC,sCAAsC,CAAC,IAAI,GAAE,EAAE,MAAIC,IAAE,QAAO,MAAI,iBAAiB,CAAC,qBAAqBA,GAAC,sCAAsC,CAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,EAAE,CAAC,IAAEA,IAAE,CAAC,KAAGD,IAAE,MAAM,CAAC,GAAE,MAAI,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAEC,IAAE,CAAC,CAAC,gCAAgC,CAAC,MAAMD,IAAE,MAAM,CAAC,CAAC,GAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC,GAAEC,MAAE;AAAE,SAAKD,MAAE;AAAG,IAAAA,MAAE,KAAG,EAAE,KAAKC,GAAC,GAAED,OAAG,GAAEC;AAAI,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,IAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAGD,GAAC;AAAE,WAAQ,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO;AAAI,MAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE;AAAI,UAAI,IAAE,EAAE,CAAC,IAAE,KAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,EAAE,IAAI;AAAG,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOA,OAAGD,MAAEC,MAAEA,OAAG,IAAE;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE;AAAI,IAAAC,IAAE,KAAK,IAAE,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,MAAG,EAAE,UAAQC,MAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,MAAE;AAAE,QAAE,GAAG,GAAE,GAAE,GAAE,GAAED,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAM,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAM,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,QAAQ,CAAC,IAAE;AAAG,QAAE,CAAC,IAAE;AAAA,SAAM;AAAC,UAAI,IAAE,GAAG,GAAEA,KAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAAD,MAAE,KAAG,MAAI,IAAE,IAAG,EAAE,CAAC,IAAE;AAAA,IAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAG,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAG,EAAE,QAAQ,CAAC,IAAE;AAAG,QAAE,CAAC,IAAE,OAAO;AAAA,SAAqB;AAAC,UAAI,IAAE,GAAG,GAAEA,KAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAAD,MAAE,KAAG,MAAI,IAAE,OAAO,mBAAkB,EAAE,CAAC,IAAE;AAAA,IAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,KAAG,IAAG,EAAE,CAAC,IAAE,GAAG,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,UAAOC,MAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,KAAG;AAAE,GAACD,MAAE,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAE,IAAE,OAAO,mBAAiB,IAAE,OAAO;AAAkB,MAAI,IAAE,EAAE,CAAC;AAAE,SAAO,IAAE,MAAI,KAAG,IAAG,IAAE,GAAG,GAAE,GAAE,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,KAAG;AAAE,GAACD,MAAE,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,UAAQ,IAAE,IAAE,IAAE,OAAO,mBAAiB,IAAE,OAAO;AAAkB,MAAI,IAAE,EAAE,CAAC;AAAE,SAAO,IAAE,MAAI,KAAG,IAAG,IAAE,IAAE,IAAE,GAAG,GAAE,GAAE,CAAC,IAAE,IAAE,GAAG,IAAG,GAAE,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,QAAGA,IAAE,CAAC,IAAE,GAAE;AAAC,UAAE;AAAE;AAAA,IAAK;AAAC,WAAQ,IAAE,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,QAAG,EAAE,CAAC,IAAE,KAAGA,IAAE,CAAC,MAAID,IAAE,CAAC;AAAE,aAAM;AAAG,SAAM;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,SAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE;AAAI,IAAAC,OAAGD,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,GAAE,IAAED,IAAE,MAAM;AAAO,SAAO,KAAG,WAAS,IAAE,CAAC,GAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,CAAC,CAAC,IAAE,EAAE,SAAO,IAAE,IAAE,EAAE,OAAO,IAAI,MAAM,IAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,IAAE,IAAE,EAAE,MAAM,GAAE,EAAE,QAAQ,OAAG;AAAC,MAAE,MAAI,IAAG,MAAI,mDAAmD;AAAA,EAAC,CAAC;AAAE,MAAI;AAAE,SAAOC,OAAG,OAAK,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAE,OAAOA,OAAG,WAAS,IAAE,CAACA,KAAE,GAAG,IAAI,MAAM,IAAE,CAAC,EAAE,KAAK,EAAE,CAAC,IAAEA,IAAE,SAAO,IAAE,IAAEA,IAAE,OAAO,IAAI,MAAM,IAAEA,IAAE,MAAM,EAAE,KAAK,EAAE,CAAC,IAAE,IAAEA,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,KAAG,IAAE,KAAG,EAAE,MAAI,IAAG,MAAI,qDAAqD,CAAC,kCAAkC,CAAC,GAAG,GAAED,IAAE,MAAM,CAAC,IAAE,EAAE,CAAC,EAAE,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI;AAAE,MAAG,KAAG,QAAM,IAAE,IAAI,MAAM,EAAE,MAAM,GAAE,EAAE,KAAK,CAAC,KAAG,IAAE,GAAE,KAAG,QAAM,IAAE,IAAE;AAAE,UAAM,IAAI,MAAM,4CAA4C;AAAE,MAAI,IAAE,OAAG,IAAE,EAAC,MAAK,EAAE,QAAO,yBAAwB,GAAE,OAAM,EAAE,MAAM,GAAE,KAAIA,IAAE,MAAM,GAAE,SAAQ,EAAE,MAAM,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK;AAAI,SAAG,KAAG,IAAE,KAAG,EAAE,2BAA0B,KAAG,IAAE,MAAI,IAAE;AAAI,QAAI,EAAE,gBAAc,KAAG,EAAE,MAAK,EAAE;AAAQ,MAAI,IAAE,EAAC,MAAKD,IAAE,QAAO,WAAU,GAAE,SAAQ,GAAE,YAAW,OAAG,UAAS,MAAE;AAAE,KAAG,GAAE,CAAC;AAAE,MAAI,IAAE,MAAG,IAAE,MAAG,IAAE,MAAG,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAG,EAAE,QAAQ,CAAC,MAAI;AAAE,YAAM,MAAM,WAAW,CAAC,oBAAoB;AAAE,QAAI,IAAE,CAAC,EAAE,EAAE,iBAAe,KAAG,IAAG,IAAEA,IAAE,CAAC;AAAE,QAAG,MAAI,IAAG;AAAC,QAAE,KAAK,IAAE,IAAE,EAAE;AAAE;AAAA,IAAQ;AAAC,QAAI,IAAE,CAAC,EAAE,YAAU,KAAG,GAAE,EAAE,UAAQ,KAAG,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAG,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,CAAC;AAAE,QAAG,KAAG,EAAE,QAAQ,CAAC,KAAG;AAAE,YAAM,MAAM,8CAA8C;AAAE,QAAE,KAAG,EAAE,QAAQ,CAAC,MAAI;AAAE,QAAI,IAAE,CAAC,EAAE,EAAE,YAAU,KAAG,KAAG,EAAE,UAAQ,KAAG;AAAG,QAAG,EAAE,cAAY,EAAE,UAAS;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,EAAE,MAAM,CAAC,IAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC;AAAE,YAAG,EAAE,MAAM,CAAC,IAAE,GAAE,EAAE,IAAI,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,KAAG,KAAG;AAAE,gBAAM,MAAM,eAAe,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC,iBAAiB;AAAA,MAAC;AAAM,UAAE,MAAM,CAAC,IAAE,GAAG,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,IAAI,CAAC,IAAE,GAAG,EAAE,IAAI,CAAC,GAAE,GAAE,EAAE,QAAQ,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,UAAI,IAAE,EAAE,QAAQ,CAAC,MAAI,KAAG,EAAE,MAAM,CAAC,MAAI,KAAG,EAAE,IAAI,CAAC,MAAI;AAAE,UAAE,KAAG,GAAE,IAAE,MAAI,MAAI,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG;AAAA,IAAE;AAAM,UAAE,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG,GAAE,IAAE,MAAI,MAAI,KAAG,EAAE,QAAQ,CAAC,MAAI,KAAG;AAAG,QAAI,GAAE,IAAE;AAAG,QAAG,EAAE,cAAY,EAAE,YAAU,IAAE,EAAE,IAAI,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAI,KAAG,IAAE,GAAE,IAAE,QAAI,KAAG,KAAG,MAAI,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,CAAC,IAAE,IAAE,GAAE,IAAE,OAAI,GAAE;AAAC,UAAI;AAAE,YAAI,KAAG,IAAE,KAAG,EAAE,QAAQ,CAAC,IAAE,IAAE,IAAE,IAAE,IAAE,KAAK,MAAM,IAAE,EAAE,QAAQ,CAAC,CAAC,KAAG,IAAE,EAAE,QAAQ,CAAC,MAAI,IAAE,IAAE,IAAG,EAAE,KAAK,CAAC;AAAA,IAAC;AAAM,QAAE,KAAK,EAAE;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,wBAAwB,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,wBAAwB,CAAC;AAAE,SAAG,IAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAE,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,kBAAiB,EAAE,OAAO,CAAC,GAAE,MAAI,EAAE,wBAAwB,CAAC,MAAI,EAAE,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,EAAE,OAAM,KAAI,EAAE,KAAI,SAAQ,EAAE,QAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,IAAE,YAAU,GAAE,EAAE,UAAQ,GAAE,EAAE,iBAAe;AAAE,MAAIC,MAAE;AAAE,IAAE,aAAWD,IAAE,SAAO,MAAK,EAAE,WAASA,IAAE,OAAK,MAAK,EAAE,QAAM,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,MAAI,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,UAAQ,IAAI,MAAM,EAAE,IAAI,GAAE,EAAE,0BAAwB,CAAC,GAAE,EAAE,gCAA8B,CAAC,GAAE,EAAE,gCAA8B,IAAI,MAAM,EAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,MAAK;AAAI,QAAG,KAAG,IAAEA,IAAE,cAAa;AAAC,UAAI,IAAE,KAAK,IAAI,EAAE,QAAMA,IAAE,OAAK,KAAG,IAAEA,IAAE,yBAAwB,EAAE,IAAI;AAAE,aAAKC,MAAE,GAAEA;AAAI,UAAE,MAAMA,GAAC,IAAE,GAAE,EAAE,IAAIA,GAAC,IAAE,GAAE,EAAE,QAAQA,GAAC,IAAE,GAAE,EAAE,aAAW,KAAGA,KAAE,EAAE,WAAS,KAAGA,KAAE,EAAE,wBAAwB,KAAKA,GAAC,GAAE,EAAE,8BAA8B,KAAK,EAAE,GAAE,EAAE,8BAA8BA,GAAC,IAAE;AAAA,IAAC,WAAS,KAAG,IAAED,IAAE;AAAY,QAAE,wBAAwB,KAAK,EAAE,GAAE,EAAE,8BAA8B,KAAK,EAAE;AAAA,SAAM;AAAC,UAAGC,QAAI,EAAE,MAAM;AAAO,cAAM,MAAM,sCAAsCA,GAAC,oBAAoB,EAAE,IAAI,UAAU,EAAE,MAAM,MAAM,GAAG;AAAE,MAAAD,IAAE,SAAO,SAAO,EAAE,MAAMC,GAAC,IAAED,IAAE,MAAM,CAAC,IAAGA,IAAE,OAAK,SAAO,EAAE,IAAIC,GAAC,IAAED,IAAE,IAAI,CAAC,IAAG,EAAE,QAAQC,GAAC,IAAED,IAAE,QAAQ,CAAC,GAAEA,IAAE,YAAU,KAAG,MAAI,EAAE,aAAW,KAAGC,MAAGD,IAAE,UAAQ,KAAG,MAAI,EAAE,WAAS,KAAGC,MAAGD,IAAE,iBAAe,KAAG,KAAG,EAAE,wBAAwB,KAAK,EAAE,GAAE,EAAE,8BAA8B,KAAK,EAAE,GAAE,EAAE,kBAAgB,KAAGC,QAAI,EAAE,wBAAwB,KAAKA,GAAC,GAAE,EAAE,8BAA8B,KAAK,CAAC,IAAG,EAAE,8BAA8BA,GAAC,IAAE,GAAEA;AAAA,IAAG;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAG,EAAE,CAAC;AAAE,WAAOA,MAAE,IAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE;AAAC,QAAI,IAAED,MAAE,IAAE,IAAEA,MAAEA;AAAE,WAAO,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAS,IAAI,KAAG,MAAK;AAAA,EAAC,OAAO,IAAI,GAAE;AAAC,WAAO,IAAI,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAS,GAAEC,KAAE,IAAE,OAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQ,GAAEA,MAAE,KAAG,IAAE,GAAE,IAAE,MAAK,IAAE,OAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,KAAK,IAAE,MAAKA,MAAE,KAAG,IAAE,OAAK,IAAE,MAAK;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,SAAS,IAAE,MAAKA,MAAE,MAAI,IAAE,MAAK;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,OAAO,IAAE,MAAKA,MAAE,KAAG,IAAE,OAAK,IAAE,MAAK,IAAE,GAAE;AAAC,WAAO,IAAI,GAAG,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,QAAQ,GAAEA,MAAE,KAAG;AAAC,WAAO,IAAI,GAAG,GAAEA,GAAC;AAAA,EAAC;AAAC;AAAE,IAAI,MAAI;AAAG,IAAI,KAAG,OAAO,yBAAuB,cAAY,wBAAsB,OAAO,gBAAc,cAAY,eAAa,CAAAD,QAAGA,IAAE;AAAE,SAAS,KAAI;AAAC,SAAO,IAAI,QAAQ,CAAAA,QAAG,GAAG,MAAIA,IAAE,CAAC,CAAC;AAAC;AAAC,IAAI,IAAE,CAAC;AAAE,GAAG,GAAE,EAAC,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAIG,KAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,OAAM,MAAI,IAAG,uBAAsB,MAAI,IAAG,kBAAiB,MAAI,IAAG,YAAW,MAAI,IAAG,iBAAgB,MAAI,IAAG,iBAAgB,MAAI,IAAG,4BAA2B,MAAI,IAAG,4BAA2B,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,sBAAqB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,IAAG,2BAA0B,MAAI,IAAG,kBAAiB,MAAI,IAAG,mCAAkC,MAAI,IAAG,sBAAqB,MAAI,IAAG,qBAAoB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,uBAAsB,MAAI,IAAG,0BAAyB,MAAI,IAAG,2BAA0B,MAAI,IAAG,iBAAgB,MAAI,IAAG,mBAAkB,MAAI,IAAG,mBAAkB,MAAI,IAAG,yBAAwB,MAAI,IAAG,sBAAqB,MAAI,IAAG,gCAA+B,MAAI,IAAG,sBAAqB,MAAI,IAAG,UAAS,MAAI,IAAG,WAAU,MAAI,IAAG,wBAAuB,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,kBAAiB,MAAI,IAAG,qBAAoB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,sBAAqB,MAAI,IAAG,gBAAe,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,4BAA2B,MAAI,IAAG,qBAAoB,MAAI,IAAG,cAAa,MAAI,IAAG,iDAAgD,MAAI,IAAG,iDAAgD,MAAI,IAAG,mDAAkD,MAAI,IAAG,sDAAqD,MAAI,IAAG,iDAAgD,MAAI,IAAG,iDAAgD,MAAI,IAAG,0DAAyD,MAAI,IAAG,+CAA8C,MAAI,IAAG,wDAAuD,MAAI,IAAG,yDAAwD,MAAI,IAAG,8DAA6D,MAAI,IAAG,0DAAyD,MAAI,IAAG,wBAAuB,MAAI,IAAG,uBAAsB,MAAI,IAAG,KAAI,MAAI,IAAG,wBAAuB,MAAI,IAAG,oBAAmB,MAAI,IAAG,kBAAiB,MAAI,IAAG,cAAa,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,wBAAuB,MAAI,IAAG,+BAA8B,MAAI,IAAG,mBAAkB,MAAI,IAAG,YAAW,MAAI,IAAG,2BAA0B,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGH,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,CAAC,EAAE;AAAO,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,EAAE,WAASC,KAAE,MAAI,kBAAkBA,GAAC,sBAAsB,CAAC,+CAA+CA,GAAC,GAAG;AAAA,EAAC,CAAC,GAAE,EAAE,KAAG,KAAG,IAAEA,KAAE,MAAI,kBAAkBA,GAAC,iCAAiCA,MAAE,CAAC,GAAG;AAAE,MAAI,IAAED,IAAE,CAAC;AAAE,EAAAA,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,aAAQ,IAAE,GAAE,IAAEC,KAAE;AAAI,QAAE,MAAI,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,kBAAkBA,GAAC,uBAAuB,CAAC,MAAM,CAAC,2CAA2C,CAAC,qCAAqC,CAAC,GAAG;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,CAAC,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,IAAAC,IAAE,CAAC,KAAGD,IAAE,CAAC,EAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,iBAAe,CAAC,IAAE,kBAAiBA,IAAEA,IAAE,eAAa,CAAC,IAAE,gBAAeA,IAAEA,IAAE,cAAY,CAAC,IAAE,eAAcA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,aAAW,CAAC,IAAE;AAAY,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI;AAAM,MAAGA,OAAG,QAAM,KAAG;AAAK,WAAO;AAAE,MAAG,KAAG;AAAK,WAAK,EAAE,SAAOD,MAAEC,IAAE;AAAQ,QAAE,KAAK,EAAE;AAAA;AAAO,QAAE,EAAE,MAAM;AAAE,MAAGA,OAAG;AAAK,WAAO;AAAE,MAAGD,MAAEC,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,4BAA4B,CAAC,sCAAsCD,MAAEC,IAAE,MAAM,sBAAsB,EAAE,MAAM,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,EAAE,SAAOA,IAAE,SAAO,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG;AAAE,UAAG,KAAG,GAAE;AAAC,YAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,4BAA4B,CAAC,qCAAqC,IAAED,GAAC,OAAO,CAAC,cAAc,IAAEA,GAAC,OAAO,CAAC,EAAE;AAAA,MAAC;AAAM,UAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAC,gBAAe,GAAG,gBAAe,cAAa,GAAG,cAAa,aAAY,GAAG,aAAY,YAAW,GAAG,YAAW,YAAW,GAAG,YAAW,YAAW,GAAG,WAAU,GAAEC,MAAE,CAAC;AAAE,WAAQ,KAAKD;AAAE,QAAG,KAAK;AAAE,MAAAC,IAAE,KAAK,EAAE,CAAC,CAAC;AAAA;AAAO;AAAM,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,WAAS,IAAE,IAAEA,IAAE,CAAC,MAAI,GAAG,iBAAeA,IAAE,SAAO,IAAEA,IAAE;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,OAAG,QAAM,KAAG;AAAK;AAAO,MAAIC,MAAED,IAAE,QAAO,IAAE,EAAE;AAAO,MAAGC,OAAG;AAAE,UAAM,IAAI,MAAM,sBAAsBD,GAAC,uCAAuC,CAAC,2CAA2CC,GAAC,4DAA4D,CAAC,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,IAAIA,KAAE,IAAE,CAAC,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,sBAAsBA,GAAC,8CAA8C,CAAC,yCAAyC,IAAEA,IAAE,MAAM,OAAO,CAAC,6CAA6C,IAAEA,IAAE,MAAM,OAAO,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG;AAAG,SAAS,GAAGA,KAAE;AAAC,SAAOA,OAAG,KAAGA,MAAE,GAAGA,KAAE,KAAK,MAAM,KAAK,KAAKA,GAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,OAAG,OAAOD,OAAG,WAASA,MAAEA,IAAE,CAAC,IAAG,IAAE,KAAG,OAAOA,OAAG,WAASA,MAAEA,IAAE,CAAC;AAAG,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG;AAAE,QAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,GAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC,GAAE,IAAE,EAAE,OAAOD,IAAE,MAAM,CAAC,CAAC;AAAA,OAAM;AAAC,QAAE,EAAE,OAAOA,IAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAO,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,EAAE,OAAO,CAACA,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,QAAE,EAAE,OAAOA,IAAE,MAAM,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAGA,KAAE;AAAC,MAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,IAAE,GAAE,IAAED,KAAE,EAAE;AAAE,WAAG,IAAE,KAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,KAAG,IAAE,EAAE,KAAG,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE;AAAE,WAAG,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,EAAE,KAAK,CAAC,IAAE,EAAE,KAAK,CAAC;AAAE,MAAE,KAAK,GAAG,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAG;AAAC,MAAI,IAAE,CAAC;AAAE,MAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC,IAAE,EAAE,KAAKD,IAAE,CAAC,IAAEC,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,SAAG,EAAE,SAAO,IAAE,EAAE,KAAK,EAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKA,IAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,IAAAA,IAAE,KAAKD,IAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,MAAM,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE,EAAE;AAAE,MAAE,KAAKD,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG;AAAP,IAA0B,KAAG;AAAmB,IAAI,KAAG;AAAP,IAAgB,KAAG;AAAnB,IAA8B,KAAG;AAAjC,IAA6CG,MAAG;AAAhD,IAA4D,KAAG;AAA/D,IAA4E,KAAG;AAAY,SAAS,GAAGH,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,gEAAgEA,IAAE,MAAM,WAAW,EAAE,MAAM,GAAG;AAAE,MAAIC,MAAE,IAAI,aAAaD,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,KAAG;AAAE,IAAAA,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC,GAAEC,IAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAaD,IAAE,SAAO,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAG;AAAE,MAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEC,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAKC,IAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,KAAK,KAAKA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAa,CAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG;AAAE,IAAAC,IAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAED,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,KAAK,MAAMA,IAAE,SAAO,CAAC,GAAEC,MAAE,IAAI,aAAa,CAAC,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAG;AAAE,IAAAC,IAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAED,IAAE,CAAC,GAAE,EAAE,KAAK,MAAM,IAAE,CAAC,CAAC,IAAEA,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,IAAE,CAAC,GAAE,IAAEA,IAAE,IAAE,IAAE,CAAC;AAAE,SAAM,EAAC,MAAKC,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,EAAAD,IAAE,IAAE,CAAC,IAAE,GAAEA,IAAE,IAAE,IAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,aAAaD,MAAE,CAAC,GAAE,IAAE,IAAI,aAAaA,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,KAAK,KAAKA,MAAE,CAAC,GAAE,KAAI;AAAC,QAAI,KAAG,IAAE,IAAE,MAAI,KAAK,MAAI,IAAEA;AAAG,IAAAC,IAAE,CAAC,IAAE,KAAK,IAAI,CAAC,GAAE,EAAE,CAAC,IAAE,KAAK,IAAI,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,MAAKA,KAAE,MAAK,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,KAAGA,MAAE,IAAE,MAAI,KAAK,MAAID,MAAE,IAAG,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,KAAK,IAAI,CAAC;AAAE,SAAM,EAAC,MAAK,GAAE,MAAK,EAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAY,KAAG;AAAf,IAAqB,KAAG;AAAxB,IAA4B,KAAG;AAAM,SAAS,GAAGA,KAAE,GAAE;AAAC,EAAAA,MAAEA,IAAE,QAAQ,OAAM,EAAE;AAAE,MAAIC,OAAGD,IAAE,SAAOA,IAAE,QAAQ,IAAG,EAAE,EAAE,UAAQ,GAAG;AAAO,MAAGC,MAAE;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAGA,MAAE;AAAE,UAAM,IAAI,MAAM,6CAA6C,EAAE,KAAK;AAAE,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,MAAM,EAAE;AAAE,IAAE,EAAE,QAAQ,EAAE,MAAI,IAAG,MAAI,2BAA2B,EAAE,0BAA0B;AAAE,MAAI,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,EAAE;AAAO,MAAG,MAAI;AAAE,UAAM,IAAI,MAAM,YAAY,CAAC,4BAA4B,CAAC,EAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,+DAA+D;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,CAAC,EAAE,KAAK,OAAG,EAAE,QAAQ,CAAC,MAAI,EAAE;AAAE,YAAM,IAAI,MAAM,uCAAuC,CAAC,uCAAuC;AAAE,MAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,QAAQ,CAAC,MAAI,MAAI,MAAI,MAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAG,IAAI,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAO,EAAE,CAAC,EAAE;AAAO,YAAM,IAAI,MAAM,2CAA2C,EAAE,CAAC,CAAC,+DAA+D;AAAE,MAAE,CAAC,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAK,CAAC;AAAE,SAAM,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,GAAC;AAAE,EAAAC,IAAE,KAAK,EAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,IAAAA,IAAE,EAAE,CAAC,CAAC,IAAE;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE,EAAE;AAAE,IAAAC,IAAE,CAAC,MAAI,MAAI,EAAE,KAAK,CAAC;AAAE,SAAOA,MAAEA,IAAE,OAAO,OAAG,MAAI,EAAE,GAAE,EAAC,oBAAmBA,KAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,MAAMD,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,EAAE;AAAM,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,QAAO,EAAE;AAAE,QAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAI,SAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAI,EAAE,CAAC,GAAE,MAAI,sBAAsB,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,oBAAoB,KAAK,UAAU,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,KAAE,IAAE,CAAC,GAAE,IAAE;AAAE,EAAAA,IAAE,WAAS,KAAGC,IAAE,KAAK,EAAE,GAAE,IAAED,IAAE,SAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAK,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,aAAQ,KAAK;AAAE,QAAE,QAAQ,CAAC,MAAI,OAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,SAAM,EAAC,MAAKA,KAAE,OAAM,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,MAAM,CAAC,GAAEC,QAAI,MAAIA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,KAACA,IAAE,CAAC,EAAE,WAAS,KAAGA,IAAE,CAAC,EAAE,QAAQ,CAAC,MAAI,MAAI,MAAI,OAAKC,IAAE,KAAK,CAAC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,OAAO,KAAG;AAAS,MAAED,IAAE,MAAMC,GAAC,IAAE,MAAI,GAAE,MAAI,+CAA+C,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAKD,IAAE,MAAMC,GAAC,IAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,OAAK,MAAI,OAAK,KAAG,IAAG,IAAG,CAAC;AAAE,MAAE,KAAG,GAAE,MAAI,yDAAyD;AAAE,QAAI,IAAE,EAAE,QAAQ,EAAE;AAAE,QAAG,MAAI,IAAG;AAAC,UAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAED,IAAE,MAAMC,GAAC,IAAE;AAAA,IAAC;AAAC,MAAED,IAAE,MAAMC,GAAC,MAAI,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,MAAI,6DAA6D,GAAE,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM;AAAA,uBACr12BA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,WAAWA,GAAC,oBAAoB,CAAC;AAAM;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,WAAWD,GAAC,oBAAoB,CAAC,OAAOC,GAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,iDAAiDA,GAAC,QAAQ,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,QAAQA,GAAC,8BAA8B,CAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA+G;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAM,2CAA2CC,GAAC;AAAA,iEAChd,CAAC,gBAAgBD,GAAC,iBAAiB,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,GAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAM,qCAAqCC,GAAC,8CAA8C,CAAC,gBAAgBD,GAAC,gBAAgB,CAAC;AAAE;AAAC,SAAS,KAAI;AAAC,SAAM;AAA0B;AAAC,SAAS,KAAI;AAAC,SAAM;AAAgC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,cAAcA,GAAC,qBAAqB,CAAC;AAAqD;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,gBAAgBD,GAAC,QAAQ,CAAC,qBAAqBC,GAAC;AAAG;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,0BAAyB,MAAI,IAAG,iBAAgB,MAAI,IAAG,+BAA8B,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,OAAG;AAAE,OAAID,OAAG,MAAI,IAAEA,KAAEC,MAAE,QAAI,IAAE,GAAGD,KAAE,KAAK,MAAM,KAAK,KAAKA,GAAC,CAAC,CAAC,GAAE,CAACC;AAAG,QAAE,KAAG,MAAID,MAAEC,MAAE,OAAG,IAAE,GAAGD,KAAE,IAAE,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAED,IAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,IAAE,EAAE,KAAKA,IAAE,CAAC,CAAC,IAAE,EAAE,KAAKC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAED,IAAE,MAAM;AAAO,MAAG,MAAI,MAAI,IAAE,CAAC,KAAG,IAAE;AAAG,UAAM,IAAI,MAAM,sCAAsC,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;AAAE,MAAG,IAAE,MAAI,KAAG,IAAG,IAAE;AAAE,UAAM,IAAI,MAAM,cAAc,CAAC;AAAA,MACxkC,CAAC,IAAI;AAAE,MAAGC,MAAE;AAAE,UAAM,IAAI,MAAM,cAAc,CAAC,yCAAyCA,GAAC,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAGD,IAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,WAAW,CAAC,MAAMA,IAAE,MAAM,CAAC,CAAC,qCAAqC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG;AAAE,MAAI,IAAEA,IAAE,MAAMC,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEC,KAAE;AAAI,MAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAAE,WAAQ,IAAEC,MAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAKD,IAAE,MAAM,CAAC,CAAC,GAAE,KAAGA,IAAE,MAAM,CAAC;AAAE,SAAM,EAAC,WAAU,GAAE,WAAU,GAAE,WAAU,GAAE,SAAQ,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG;AAAC,WAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,EAAC,SAAO,GAAE;AAAC,UAAM,IAAI,MAAM,4DAA4D,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,yBAAwB,MAAI,IAAG,yBAAwB,MAAI,IAAG,yBAAwB,MAAI,IAAG,WAAU,MAAI,GAAE,CAAC;AAAE,GAAG;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,6BAA4B,MAAI,OAAG,CAAAA,QAAG;AAAC,EAAAA,OAAG,QAAQ,KAAK,+OAA+O;AAAC,CAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,aAAW,CAAC,IAAE,cAAaA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,eAAa,CAAC,IAAE,gBAAeA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,WAAS,EAAE,IAAE,YAAWA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,gBAAc,EAAE,IAAE,iBAAgBA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,mBAAiB,GAAG,IAAE,oBAAmBA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,eAAa,GAAG,IAAE,gBAAeA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,kBAAgB,GAAG,IAAE,mBAAkBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,iBAAe,GAAG,IAAE,kBAAiBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,oBAAkB,GAAG,IAAE,qBAAoBA,IAAEA,IAAE,cAAY,GAAG,IAAE,eAAcA,IAAEA,IAAE,kBAAgB,GAAG,IAAE,mBAAkBA,IAAEA,IAAE,iBAAe,GAAG,IAAE,kBAAiBA,IAAEA,IAAE,gBAAc,GAAG,IAAE,iBAAgBA,IAAEA,IAAE,gBAAc,GAAG,IAAE;AAAe,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,MAAI;AAAE,GAAC,SAASC,KAAE;AAAC,IAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,KAAG,CAAC,IAAE,MAAKA,IAAEA,IAAE,KAAG,CAAC,IAAE;AAAA,EAAI,GAAG,IAAED,IAAE,4BAA0BA,IAAE,0BAAwB,CAAC,EAAE;AAAC,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,CAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAC,UAASD,KAAE,UAAS,UAAS,QAAO,CAAC,GAAE,OAAM,CAAC,GAAE,gBAAe,EAAC;AAAE,KAAGA,GAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,GAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,YAAYD,GAAC;AAAE,MAAG,KAAG,EAAE,oBAAkB,QAAO;AAAC,QAAI,IAAE,EAAE,iBAAgB,IAAE,EAAE,kBAAgB,IAAE,SAAO,EAAE,kBAAgB,SAAO,IAAE,IAAE,EAAE,eAAc,IAAE,IAAE,IAAE,EAAE,WAAW,SAAO,IAAE;AAAE,QAAG,EAAE,SAAO;AAAS,aAAO,GAAG,EAAE,WAAW,CAAC,GAAEC,KAAE,GAAE,CAAC;AAAE,QAAG,EAAE,SAAO,WAAU;AAAC,UAAI,IAAE,EAAE,OAAO,MAAM,GAAE,CAAC;AAAE,aAAO,EAAE,WAAW,MAAM,GAAE,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI;AAAC,YAAI;AAAE,iBAAQ,IAAE,EAAE,CAAC,OAAK,QAAM,MAAI,SAAO,SAAO,EAAE,QAAM;AAAA,MAAM,CAAC,EAAE,IAAI,OAAG,GAAG,GAAEA,KAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,EAAE,WAAW,CAAC,GAAEA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS;AAAE,WAAO,EAAE,SAAO,WAAS,EAAE,CAAC,IAAE,EAAE,cAAc,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,WAAWD,GAAC;AAAE,SAAO,KAAG,EAAE;AAAK;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAGD,KAAEC,GAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,yBAAyB,CAAC;AAAE,QAAG,KAAG;AAAK,aAAO;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,kBAAkB,KAAK,OAAG,CAAC,CAAC,EAAE,GAAG,GAAE,CAAC,CAAC,CAAC;AAAE,SAAO,MAAI,SAAO,EAAE,GAAG,GAAE,CAAC,CAAC,EAAE,CAAC,IAAE;AAAM;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,GAAGD,KAAEC,IAAE,gBAAgB,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,CAACC,KAAE,GAAE,CAAC,IAAE,GAAGD,KAAE,CAAC;AAAE,SAAM,CAAC,GAAGC,KAAE,KAAG,EAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,IAAE,GAAGA,GAAC,IAAI,CAAC,KAAGA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI;AAAG,WAAM,CAAC,IAAG,GAAE,MAAM;AAAE,MAAIC,MAAE,KAAG,QAAM,EAAE,sBAAoB;AAAK,MAAGA,KAAE;AAAC,QAAI,IAAE,EAAE,mBAAmB,IAAID,GAAC;AAAE,QAAG,KAAG;AAAK,aAAO;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,MAAM,GAAG,GAAE;AAAE,MAAG,EAAE,WAAS;AAAE,QAAE,CAACA,KAAE,GAAE,MAAM;AAAA,OAAM;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,WAAS,IAAE,EAAE,CAAC,IAAE,QAAO,IAAE,OAAO,EAAE,EAAE,SAAO,CAAC,CAAC;AAAE,QAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOC,OAAG,EAAE,mBAAmB,IAAID,KAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC;AAAE,MAAG,MAAI,YAAW;AAAC,QAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,QAAI,IAAE,CAAC,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,CAAC,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,OAAKA,MAAE,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,cAAa,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,cAAa,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,IAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,OAAM,GAAE,EAAC,QAAO,oBAAmB,MAAK,kBAAiB,MAAK,OAAM,GAAE,EAAC,QAAO,4BAA2B,MAAK,0BAAyB,MAAK,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,yBAAwB,MAAK,uBAAsB,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,MAAK,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,sBAAqB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,WAAU,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,0BAAyB,MAAK,uBAAsB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,MAAK,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,YAAW,MAAK,YAAW,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,iBAAgB,MAAK,iBAAgB,MAAK,OAAM,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,oBAAmB,MAAK,iBAAgB,MAAK,QAAO,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,mBAAkB,MAAK,kBAAiB,MAAK,UAAS,cAAa,IAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,yBAAwB,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,8BAA6B,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,YAAW,cAAa,CAAC,GAAE,GAAE,GAAE,CAAC,EAAC,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,qBAAoB,MAAK,oBAAmB,MAAK,YAAW,cAAa,CAAC,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,eAAc,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,QAAO,SAAQ,MAAK,aAAY,MAAK,WAAU,GAAE,EAAC,QAAO,WAAU,MAAK,OAAM,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,OAAM,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,wBAAuB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,gBAAe,MAAK,gBAAe,MAAK,QAAO,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,eAAc,MAAK,aAAY,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,0BAAyB,MAAK,sBAAqB,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,kBAAiB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,0BAAyB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,SAAQ,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,QAAO,GAAE,EAAC,UAAS,YAAW,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,KAAI,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,KAAI,MAAK,UAAS,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,UAAS,MAAK,UAAS,cAAa,KAAE,GAAE,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,SAAQ,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,2BAA0B,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,GAAE,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,QAAO,yBAAwB,MAAK,sBAAqB,MAAK,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,cAAa,QAAO,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,QAAO,yBAAwB,MAAK,sBAAqB,MAAK,OAAM,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,mBAAkB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,kBAAiB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,GAAE,EAAC,QAAO,sBAAqB,MAAK,oBAAmB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,yBAAwB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,GAAE,EAAC,QAAO,sBAAqB,MAAK,oBAAmB,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,UAAS,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,QAAO,uBAAsB,MAAK,sBAAqB,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,8BAA6B,UAAS,SAAQ,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,SAAQ,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,WAAU,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,gBAAe,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,QAAO,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,YAAW,cAAa,CAAC,EAAC,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,mBAAkB,MAAK,kBAAiB,MAAK,UAAS,cAAa,IAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,SAAQ,MAAK,cAAa,MAAK,QAAO,cAAa,MAAE,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,YAAW,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,iBAAgB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,QAAO,cAAa,MAAE,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,UAAS,cAAa,KAAI,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,gBAAe,MAAK,UAAS,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,SAAQ,MAAK,SAAQ,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,IAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,iBAAgB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,YAAW,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,OAAM,GAAE,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,OAAM,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,aAAY,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,OAAM,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,OAAM,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,IAAG,MAAK,WAAU,MAAK,UAAS,GAAE,EAAC,OAAM,IAAG,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,KAAI,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,oBAAmB,MAAK,mBAAkB,MAAK,QAAO,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,OAAM,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,iBAAgB,MAAK,eAAc,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,iBAAgB,MAAK,gBAAe,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,oBAAmB,MAAK,kBAAiB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,KAAI,GAAE,MAAK,WAAU,MAAK,UAAS,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,QAAO,OAAM,MAAK,OAAM,MAAK,UAAS,cAAa,GAAE,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,GAAE,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,mBAAkB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,UAAS,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,mBAAkB,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,YAAW,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,oBAAmB,MAAK,mBAAkB,MAAK,QAAO,cAAa,OAAG,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,uBAAsB,UAAS,cAAa,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,uBAAsB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,UAAS,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,gBAAe,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,KAAI,MAAK,SAAQ,MAAK,SAAQ,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,qBAAoB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,oBAAmB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,OAAM,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,QAAO,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,YAAW,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,UAAS,cAAa,KAAE,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,sBAAqB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,WAAU,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,kBAAiB,MAAK,iBAAgB,MAAK,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,aAAY,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,gBAAe,MAAK,eAAc,MAAK,WAAU,GAAE,EAAC,QAAO,YAAW,MAAK,WAAU,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,aAAY,MAAK,YAAW,MAAK,SAAQ,GAAE,EAAC,QAAO,4BAA2B,MAAK,0BAAyB,MAAK,OAAM,CAAC,GAAE,SAAQ,CAAC,UAAS,eAAe,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,aAAY,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,OAAM,CAAC,GAAE,SAAQ,CAAC,WAAU,UAAS,OAAO,EAAC,GAAE,EAAC,UAAS,0BAAyB,UAAS,UAAS,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,MAAK,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC,EAAC,UAAS,QAAO,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,UAAS,MAAK,SAAQ,cAAa,KAAE,GAAE,EAAC,QAAO,QAAO,MAAK,SAAQ,MAAK,QAAO,CAAC,EAAC,GAAE,EAAC,UAAS,cAAa,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,aAAY,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,MAAK,QAAO,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,OAAM,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,kBAAiB,MAAK,iBAAgB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,SAAQ,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,WAAU,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,iBAAgB,MAAK,UAAS,cAAa,EAAC,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,WAAU,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,QAAO,kBAAiB,gBAAe,MAAK,QAAO,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,YAAW,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,kBAAiB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,cAAa,MAAK,WAAU,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,EAAC,GAAE,EAAC,UAAS,gBAAe,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,QAAO,cAAa,MAAK,aAAY,MAAK,SAAQ,GAAE,EAAC,QAAO,eAAc,MAAK,cAAa,MAAK,SAAQ,CAAC,EAAC,GAAE,EAAC,UAAS,eAAc,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,KAAI,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,SAAQ,MAAK,WAAU,CAAC,GAAE,OAAM,CAAC,EAAC,GAAE,EAAC,UAAS,iBAAgB,UAAS,kBAAiB,QAAO,CAAC,EAAC,OAAM,GAAE,MAAK,MAAK,MAAK,SAAQ,GAAE,EAAC,OAAM,GAAE,MAAK,MAAK,MAAK,SAAQ,CAAC,GAAE,OAAM,CAAC,EAAC,CAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,WAAW,WAAU;AAAC,WAAO,KAAK,cAAY,KAAK,YAAU,IAAI;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE,GAAEC,MAAE,CAAC,EAAE,OAAO,GAAG,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC;AAAE,SAAK,YAAUA,IAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,QAAQ,IAAE,GAAE,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,MAAE,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,MAAK,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,QAAQ,CAAC,GAAE,EAAE,GAAG,WAAW,aAAa,IAAE,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,IAAE,EAAE,OAAK,UAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,KAAG,EAAE,SAAO,QAAM,EAAE,MAAM,WAAS,MAAI,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,GAAE,IAAG,CAAC,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAAA,OAAG,SAAO,IAAE,KAAK,oBAAoBA,IAAE,MAAM,GAAE,IAAE,KAAK,oBAAoBA,IAAE,OAAO;AAAG,QAAI,IAAE,OAAO,KAAK,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,WAAW,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAG,CAAC,GAAE,EAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAG,EAAE,WAAS,MAAK;AAAC,cAAI,IAAE,EAAE,QAAQ,QAAQ,CAAC;AAAE,cAAG,MAAI,IAAG;AAAC,gBAAI,IAAE,GAAG,CAAC,IAAI,CAAC;AAAG,cAAE,WAAW,CAAC,IAAE;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,OAAO,KAAK,CAAC,GAAE,EAAE,SAAS,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,WAAS,IAAE,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,SAAS,WAAS,KAAG,EAAE,KAAK,CAAC;AAAA,IAAC,CAAC,IAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,SAAO,EAAE,eAAa,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,SAAO,IAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAI,EAAE,eAAa,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC,IAAE,IAAE;AAAE,QAAI,IAAE,CAAC;AAAE,MAAE,WAAS,QAAM,EAAE,QAAQ,YAAU,SAAO,IAAE,EAAE,QAAQ,SAAS,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,UAAU,IAAI,IAAE,KAAK,YAAY,CAAC,GAAE,IAAG,CAAC,CAAC;AAAG,QAAI,IAAE,EAAC,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,WAAUA,KAAE,WAAU,EAAC;AAAE,WAAO,EAAE,SAAO,MAAI,EAAE,YAAU,IAAG;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,WAAO,OAAO,KAAK,KAAG,CAAC,CAAC,EAAE,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,CAAC,EAAE,IAAI,IAAE,GAAEA,MAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,QAAIA,MAAE,GAAG,EAAE,EAAE,KAAG,KAAK,UAAU,EAAE,EAAE,KAAG,CAAC;AAAE,MAAE,QAAM,SAAO,EAAE,OAAK,CAAC;AAAG,QAAI,IAAE,EAAC,MAAK,EAAE,MAAK,IAAG,EAAE,IAAG,UAASA,IAAE,UAAS,aAAY,EAAE,SAAO,CAAC,GAAG,IAAI,OAAG,EAAE,WAAW,GAAG,IAAE,EAAE,MAAM,CAAC,IAAE,CAAC,GAAE,QAAO,CAAC,GAAE,UAAS,CAAC,GAAE,aAAY,CAAC,GAAE,YAAW,CAAC,GAAE,UAAS,EAAE,MAAK,SAAQA,IAAE,QAAO;AAAE,WAAOA,IAAE,UAAQ,SAAO,EAAE,cAAYA,IAAE,OAAO,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,EAAC,MAAK,EAAE,MAAK,iBAAgB,EAAE,OAAM,eAAc,EAAE,IAAG,GAAE,IAAG,CAAC,CAAC,IAAGA,IAAE,SAAO,SAAO,EAAE,aAAWA,IAAE,MAAM,OAAO,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,MAAK;AAAE,cAAO,EAAE,MAAK;AAAA,QAAC,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,gBAAc,CAAC,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAW,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAS,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAQ,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAU,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAO,cAAE,GAAG,EAAE,MAAK,EAAE,QAAO,EAAE,YAAY,GAAE,MAAI,UAAQ,EAAE,qBAAmB,IAAE,GAAG,EAAE,MAAK,EAAE,kBAAiB,EAAE,YAAY;AAAG;AAAA,QAAM,KAAI;AAAA,QAAS,KAAI;AAAU;AAAA,QAAM;AAAQ,gBAAM,IAAI,MAAM,2BAA2B,EAAE,IAAI,YAAY,EAAE,EAAE,EAAE;AAAA,MAAC;AAAC,aAAO,EAAE,EAAE,IAAI,IAAE,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC,IAAG;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAAA,OAAG,SAAO,IAAEA,IAAE,OAAO,CAAC,GAAE,OAAK,EAAE,EAAE,IAAI,IAAE,KAAK,QAAQ,CAAC,GAAE,EAAE,OAAK,WAAS,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,GAAE,IAAG,CAAC,CAAC;AAAG,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,MAAE,UAAU,SAAS,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,EAAE,IAAI,GAAE,IAAE,EAAC,MAAK,GAAE,IAAG,eAAc,QAAO,CAAC,GAAE,YAAW,CAAC,GAAE,UAAS,SAAQ,aAAY,CAAC,GAAE,YAAW,EAAC,OAAM,EAAC,OAAM,GAAG,EAAE,IAAI,GAAE,MAAK,QAAO,EAAC,GAAE,UAAS,CAAC,EAAC;AAAE,QAAE,eAAa,EAAE,MAAK,EAAE,KAAK,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,WAAW,QAAQ,CAAC,GAAE,MAAI;AAAC,YAAG,CAAC,GAAE,EAAC,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,YAAG,EAAE,WAAS,MAAK;AAAC,cAAI,IAAE,EAAE,QAAQ,QAAQ,CAAC;AAAE,cAAG,MAAI,IAAG;AAAC,gBAAI,IAAE,GAAG,CAAC,IAAI,CAAC;AAAG,cAAE,WAAW,CAAC,IAAE;AAAA,UAAC;AAAA,QAAC;AAAC,UAAE,OAAO,KAAK,CAAC,GAAE,EAAE,SAAS,KAAK,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE;AAAI,MAAE,UAAU,UAAU,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,EAAE,IAAI,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,SAAO,EAAE,gBAAc,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE,CAAC;AAAE,QAAI,IAAE,KAAK,mBAAmB,CAAC;AAAE,WAAM,EAAC,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,WAAU,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,WAAM,EAAC,YAAW,EAAE,UAAU,MAAK,QAAO,EAAE,UAAU,SAAS,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,CAAC,GAAEA,MAAG,CAAC,CAAC,GAAE,SAAQ,EAAE,UAAU,UAAU,OAAO,CAACA,KAAE,OAAKA,IAAE,EAAE,IAAI,IAAE,KAAK,mBAAmB,GAAE,EAAE,GAAG,GAAEA,MAAG,CAAC,CAAC,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,KAAE;AAAC,QAAI,IAAE,EAAE;AAAK,WAAOA,OAAG,SAAO,IAAEA,IAAE,CAAC,IAAG,EAAC,MAAK,GAAE,OAAM,EAAE,KAAI;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,EAAE,EAAE;AAAO,MAAG,OAAO,EAAE,QAAM;AAAY,WAAO,EAAE,KAAKA,GAAC;AAAE,MAAG,OAAO,UAAQ;AAAY,WAAO,IAAI,OAAOA,KAAE,QAAQ,EAAE,SAAS;AAAE,QAAM,IAAI,MAAM,kFAAkF;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,MAAM,QAAQD,GAAC,IAAE,OAAO,aAAa,MAAM,MAAKA,GAAC,IAAE,GAAGA,GAAC;AAAE,SAAO,IAAEC,MAAEA,IAAE,YAAY;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,OAAK,GAAG,EAAE,GAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,IAAE,EAAE,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,KAAG,CAAC,GAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAE,EAAE,KAAG,OAAK,EAAE,IAAEC;AAAE,SAAO,OAAO,KAAG,WAAS,IAAE,SAAS,GAAE,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,UAAO,OAAOA,OAAG,aAAWA,MAAE,GAAGA,GAAC,IAAGA,KAAE;AAAA,IAAC,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAQ,aAAM;AAAA,IAAU,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAA,IAAS,KAAK,GAAG;AAAA,IAAQ,KAAK,GAAG;AAAS,aAAM;AAAA,IAAQ,KAAK,GAAG;AAAQ,aAAM;AAAA,IAAO,KAAK,GAAG;AAAU,aAAM;AAAA,IAAU,KAAK,GAAG;AAAU,aAAM;AAAA,IAAS,KAAK,GAAG;AAAA,IAAa,KAAK,GAAG;AAAc,aAAM;AAAA,IAAY;AAAQ,aAAO;AAAA,EAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,OAAK,EAAE,KAAK,OAAKC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,OAAK,GAAG,EAAE,IAAI,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,OAAK,EAAE,KAAK,KAAK,IAAI,OAAG,GAAG,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,CAACA,IAAE;AAAY,WAAOA,IAAE,OAAK,OAAKA,IAAE,IAAI,IAAI,OAAG,OAAO,EAAE,QAAM,WAAS,EAAE,OAAK,SAAS,EAAE,MAAK,EAAE,CAAC,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,GAAG,EAAE,KAAK,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,MAAI,EAAE,KAAK,KAAG,EAAE,KAAK,EAAE,SAAO,EAAE,KAAK,IAAE,EAAE,KAAK,MAAI,CAAC,GAAG,IAAI,OAAG,OAAO,KAAG,WAAS,IAAE,SAAS,GAAE,EAAE,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,EAAE,IAAI,OAAG,GAAG,GAAE,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,QAAM,EAAE,KAAK,MAAM,IAAI,OAAG,GAAG,CAAC,CAAC,IAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC;AAAE,SAAO,KAAG,EAAE,QAAM,EAAE,KAAK,IAAE,EAAE,KAAK,IAAEC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,YAAUA,KAAE,KAAK,UAAQ,GAAE,KAAK,SAAO,CAAC,GAAE,KAAK,QAAM,CAAC,GAAE,KAAK,SAAO,EAAE,WAAW,IAAI,OAAG,KAAK,SAAS,CAAC,CAAC,GAAE,EAAE,YAAU,SAAO,KAAK,QAAM,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAE,OAAK,EAAE,CAAC,IAAE,KAAK,QAAQ,CAAC,GAAE,IAAG,CAAC,CAAC;AAAA,EAAE;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,GAAG,GAAE,KAAK,WAAU,KAAK,OAAO;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,KAAK,SAAS,CAAC;AAAE,QAAG,EAAE,UAAQ;AAAK,aAAO,GAAG,GAAE,KAAK,WAAU,KAAK,OAAO;AAAE,QAAG,EAAE,KAAG,QAAM,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,KAAG;AAAK,aAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,SAAO;AAAK,aAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,QAAM;AAAK,aAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,QAAG,EAAE,QAAM,MAAK;AAAC,UAAG,EAAE,KAAK,KAAG,QAAM,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,SAAO;AAAK,eAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,KAAG;AAAK,eAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAE,UAAG,EAAE,KAAK,QAAM;AAAK,eAAO,GAAG,KAAK,KAAK,UAAS,GAAEA,GAAC;AAAA,IAAC;AAAC,WAAOA;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,iBAAgB,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,eAAc,MAAI,IAAG,WAAU,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,gBAAe,MAAI,IAAG,UAAS,MAAI,IAAG,YAAW,MAAI,IAAG,kBAAiB,MAAI,IAAG,eAAc,MAAI,IAAG,aAAY,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAIF,KAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,QAAO,MAAI,IAAG,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,IAAG,iBAAgB,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,eAAc,MAAI,IAAG,cAAa,MAAI,IAAG,iBAAgB,MAAI,IAAG,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,KAAI,MAAI,IAAG,UAAS,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,qBAAoB,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,eAAc,MAAI,IAAG,KAAI,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,aAAY,MAAI,IAAG,OAAM,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,WAAU,MAAI,IAAG,MAAK,MAAI,IAAG,WAAU,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,4BAA2B,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,YAAW,MAAI,IAAG,QAAO,MAAI,IAAG,YAAW,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,mBAAkB,MAAI,IAAG,SAAQ,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,KAAI,MAAI,IAAG,SAAQ,MAAI,IAAG,eAAc,MAAI,IAAG,KAAI,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,QAAO,MAAI,IAAG,MAAK,MAAI,IAAG,UAAS,MAAI,IAAG,IAAG,MAAI,GAAE,cAAa,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,KAAI,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,aAAY,MAAI,IAAG,sBAAqB,MAAI,IAAG,MAAK,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,sBAAqB,MAAI,IAAG,eAAc,MAAI,IAAG,kBAAiB,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,YAAW,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,GAAE,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,OAAM,MAAI,IAAG,QAAO,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,MAAK,MAAI,IAAG,iBAAgB,MAAI,IAAG,gBAAe,MAAI,IAAG,SAAQ,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,OAAM,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,UAAS,MAAI,IAAG,gBAAe,MAAI,IAAG,QAAO,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,mBAAkB,MAAI,IAAG,SAAQ,MAAI,IAAG,OAAM,MAAI,IAAG,MAAK,MAAI,IAAG,cAAa,MAAI,IAAG,QAAO,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,KAAI,MAAI,IAAG,MAAK,MAAI,IAAG,QAAO,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,qBAAoB,MAAI,IAAG,MAAK,MAAI,IAAG,MAAK,MAAI,IAAG,WAAU,MAAI,IAAG,iBAAgB,MAAI,IAAG,QAAO,MAAI,IAAG,oBAAmB,MAAI,IAAG,SAAQ,MAAI,IAAG,YAAW,MAAI,IAAG,UAAS,MAAI,IAAG,OAAM,MAAI,IAAG,YAAW,MAAI,IAAG,OAAM,MAAI,IAAG,WAAU,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAACC,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAU,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAU,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAoB,aAAM,CAAC,EAAE,kBAAkB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAM,KAAI;AAAa,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,GAAGD,IAAE,WAAW,CAAC,GAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,MAAE,IAAG;AAAC,MAAG,EAAE,OAAOD,OAAG,YAAU,OAAO,KAAG,WAAU;AAAC,MAAE,OAAOA,IAAE,WAAS,EAAE,QAAO,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAE,OAAO,IAAE,KAAG,IAAE,KAAG,MAAI,GAAE,MAAIC,MAAE,WAAWD,GAAC,QAAQ,CAAC,aAAa;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,EAAE,OAAOA,OAAG,YAAUA,IAAE,KAAK,OAAG,IAAE,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAEC,GAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,MAAG,KAAG,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,qFAAqF,CAAC,EAAE;AAAE,MAAG,KAAG,EAAE,QAAQ,OAAG;AAAC,QAAE,GAAG,EAAE,OAAM,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC,GAAG,CAAC;AAAE,UAAM,IAAI,MAAM,mCAAmC,CAAC,EAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,OAAOA,OAAG;AAAS,WAAO;AAAE,MAAG,OAAO,KAAG;AAAS,WAAOA;AAAE,MAAGA,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,oCAAoCA,GAAC,QAAQ,CAAC,EAAE;AAAE,MAAIC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG,KAAG,KAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,oCAAoCA,GAAC,QAAQ,CAAC,EAAE;AAAE,IAAAC,IAAE,CAAC,IAAE,KAAG,IAAE,IAAE;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,OAAK,GAAE,KAAK,QAAMA,KAAE,KAAK,UAAQ,GAAE,KAAK,eAAa,GAAE,KAAK,yBAAuB,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,UAAQ,OAAG,KAAK,WAAS,GAAG,CAAC,GAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,SAAS;AAAA,EAAE;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK;AAAA,EAAO;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,QAAQ,QAAQ,CAAAA,QAAG;AAAC,OAAC,KAAG,QAAM,CAAC,EAAE,IAAIA,IAAE,OAAO,EAAE,MAAIA,IAAE,OAAO,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,UAAQ,CAAC,GAAE,KAAK,UAAQ,MAAG,KAAK,SAAS,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,QAAQ;AAAA,EAAM;AAAA,EAAC,KAAK,GAAE;AAAC,QAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAG,IAAE,KAAG,KAAG,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,4BAA4B,CAAC,wBAAwB,KAAK,KAAK,CAAC,EAAE;AAAE,QAAIA,MAAE,KAAK,QAAQ,CAAC;AAAE,QAAGA,IAAE;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0BAA0B,CAAC,sGAAsG;AAAE,WAAO,KAAK,mBAAiBA,IAAE,UAAQ,OAAIA,IAAE,OAAK,MAAGA,IAAE;AAAA,EAAM;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,EAAE,IAAI,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE;AAAC,QAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,2BAA2B;AAAE,QAAG,IAAE,KAAG,CAAC,KAAK,eAAa,KAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,2BAA2B,CAAC,8CAA8C,KAAK,OAAO,EAAE;AAAE,QAAI,IAAE,KAAK,QAAQ,CAAC,KAAG,CAAC;AAAE,QAAGA,IAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC;AAAA,uCACnpuEA,IAAE,KAAK,8BAA8B,KAAK,KAAK,GAAG;AAAE,QAAG,KAAK,KAAK,MAAI,MAAI,KAAK,gBAAc,QAAM,KAAK,aAAa,WAAS,OAAK,KAAK,eAAaA,IAAE,QAAO,GAAG,KAAK,cAAaA,IAAE,OAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,GAAG,GAAE,EAAE;AAAK,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,qCAAqC;AAAE,QAAG,EAAE;AAAQ,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,0CAA0C,CAAC,wCAAwC;AAAE,MAAE,SAAOA,KAAE,GAAGA,GAAC,GAAE,EAAE,UAAQ,MAAG,KAAK,QAAQ,CAAC,IAAE;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE;AAAC,QAAG,EAAE,WAASA,IAAE;AAAO,YAAM,IAAI,MAAM,eAAe,KAAK,IAAI,8DAA8D,EAAE,MAAM,qCAAqCA,IAAE,MAAM,GAAG;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI,KAAK,MAAM,GAAEA,IAAE,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAGA,OAAGA,QAAI,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+BA,GAAC,EAAE;AAAE,QAAG;AAAE,UAAE,EAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAA,SAAM;AAAC,UAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE;AAAI,UAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,WAAS;AAAE,aAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAI,IAAE,KAAK,SAAS,CAAC;AAAE,WAAO,GAAG,KAAK,cAAa,EAAE,CAAC,EAAE,OAAM,8BAA8B,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAG,MAAI,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,+BAA+B,CAAC,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI;AAAE,aAAO,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC;AAAE,QAAIA,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,KAAK,GAAE;AAAI,MAAAA,IAAE,KAAK,CAAC;AAAE,QAAI,IAAE,KAAK,SAASA,GAAC;AAAE,WAAO,GAAG,KAAK,cAAa,EAAE,CAAC,EAAE,OAAM,mDAAmD,KAAK,YAAY,4BAA4B,EAAE,CAAC,EAAE,KAAK,GAAG,GAAE,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyBA,IAAE,KAAK,EAAE;AAAE,QAAG,EAAE,WAASA,IAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM,sDAAsD,EAAE,MAAM,QAAQA,IAAE,MAAM,CAAC,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,IAAI,GAAG,CAAC;AAAE,QAAG,CAAC,KAAK,eAAa,KAAG,KAAK;AAAQ,YAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,KAAK,OAAO,GAAG;AAAE,SAAK,UAAU,GAAE,GAAGA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK;AAAM,YAAM,IAAI,MAAM,wBAAwB,KAAK,KAAK,yBAAyBA,IAAE,KAAK,EAAE;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,QAAG,MAAIA,IAAE,MAAM,CAAC;AAAE,YAAM,IAAI,MAAM;AAAA;AAAA,UAE3pE,CAAC,4BAA4BA,IAAE,KAAK,EAAE;AAAE,QAAG,CAAC,KAAK,eAAa,EAAE,WAAS,KAAK;AAAQ,YAAM,IAAI,MAAM,2DAA2D,KAAK,OAAO,QAAQ,EAAE,MAAM,gEAAgE;AAAE,QAAI,IAAE,MAAI,IAAE,IAAEA,IAAE,OAAK,GAAE,IAAE,CAAC;AAAE,OAAG,MAAI;AAAC,MAAAA,MAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,KAAK,YAAY;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE;AAAE,SAAK,UAAU,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAMD,GAAC;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,SAAS;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,SAAK,UAAQ,GAAE,KAAK,eAAaA,KAAE,KAAK,eAAa,GAAE,KAAG,QAAM,EAAE,QAAQ,OAAG;AAAC,UAAG,MAAI,EAAE;AAAM,cAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,EAAE,KAAK,EAAE;AAAE,SAAGA,KAAE,EAAE,OAAM,6BAA6B,GAAE,GAAG,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,WAAS,GAAG,CAAC,GAAE,KAAK,iBAAe,GAAE,GAAG,KAAK,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,IAAID,GAAE,CAAC,GAAG,KAAK,OAAO,GAAE,KAAK,cAAa,KAAK,YAAY;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,QAAQ,QAAQ,CAAAC,QAAG;AAAC,OAAC,KAAG,QAAM,CAAC,EAAE,IAAIA,IAAE,EAAE,MAAIA,IAAE,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,QAAQ,SAAO,GAAE,KAAK,SAAS,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,QAAQ;AAAA,EAAM;AAAA,EAAC,MAAM,GAAEA,KAAE,IAAE,IAAG;AAAC,QAAGA,QAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,MAAI,MAAI,KAAK,QAAQ,WAAS;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,iCAAiC,KAAK,QAAQ,MAAM,YAAY;AAAE,OAAG,GAAE,KAAK,cAAa,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,KAAK,QAAQ,IAAI,OAAG,EAAE,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,QAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,KAAK,KAAK,MAAI;AAAE,YAAM,IAAI,MAAM,mCAAmC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI;AAAE,WAAO,EAAE,OAAK,OAAG,GAAG,EAAE,OAAM,GAAE,6BAA6B,GAAE,EAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,EAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,GAAG,EAAE,OAAM,KAAK,cAAa,6BAA6B,GAAE,KAAK,mBAAiB,KAAK,KAAK;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,OAAG,CAAC,GAAE,KAAK,QAAQ,KAAK,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,0DAA0D,CAAC,EAAE;AAAE,QAAG,KAAK,mBAAiB,MAAI,IAAE,KAAK;AAAe,YAAM,IAAI,MAAM,+BAA+B,CAAC,6BAA6B,KAAK,cAAc,GAAG;AAAE,QAAIA,MAAE,IAAID,GAAE,CAAC,GAAE,KAAK,cAAa,KAAK,cAAa,KAAK,cAAc;AAAE,IAAAC,IAAE,QAAQ,SAAO;AAAE,aAAQ,IAAE,GAAE,IAAE,KAAK,IAAI,KAAK,QAAQ,QAAO,CAAC,GAAE,EAAE;AAAE,MAAAA,IAAE,QAAQ,CAAC,IAAE,KAAK,QAAQ,CAAC;AAAE,WAAOA;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE,GAAE;AAAC,QAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmC,CAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,IAAE,KAAG,IAAE,KAAK,QAAQ;AAAO,YAAM,IAAI,MAAM,4BAA4B,CAAC,mBAAmB,KAAK,QAAQ,MAAM,YAAY;AAAE,QAAG,KAAK,QAAQ,CAAC,KAAG;AAAK,YAAM,IAAI,MAAM,oBAAoB,CAAC,WAAW;AAAE,OAAG,KAAK,QAAQ,CAAC,EAAE,OAAMA,KAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,GAAC;AAAE,WAAO,EAAE,KAAK,QAAQ,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAGA,IAAE,UAAQ,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmCA,IAAE,KAAK,uBAAuB,KAAK,YAAY,EAAE;AAAE,QAAG,IAAE,KAAG,KAAK,mBAAiB,MAAI,KAAG,KAAK;AAAe,YAAM,IAAI,MAAM,yBAAyB,CAAC,uBAAuB,KAAK,cAAc,YAAY;AAAE,OAAG,KAAK,cAAaA,IAAE,OAAM,6BAA6B,GAAE,GAAGA,GAAC,GAAE,KAAK,QAAQ,CAAC,KAAG,SAAO,KAAK,QAAQ,CAAC,EAAE,OAAK,QAAI,KAAK,QAAQ,CAAC,IAAEA;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE,GAAE;AAAC,QAAGA,QAAI,KAAK;AAAa,YAAM,IAAI,MAAM,mCAAmCA,GAAC,uBAAuB,KAAK,YAAY,EAAE;AAAE,OAAG,KAAK,cAAa,GAAE,6BAA6B,GAAE,IAAE,EAAE,MAAM,GAAE,KAAK,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQ,CAAC;AAAE,WAAO,EAAE,WAAS,IAAE,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,GAAG,MAAI;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,QAAQ,CAAC,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAG,KAAG,MAAI,KAAK;AAAa,YAAM,IAAI,MAAM,uBAAuB,KAAK,YAAY,+BAA+B,CAAC,EAAE;AAAE,OAAG,KAAK,cAAaA,KAAE,6BAA6B;AAAE,QAAI,IAAE,GAAG,KAAK,cAAa,KAAK,SAAQA,GAAC;AAAE,WAAO,KAAK,KAAK,MAAI,IAAE,GAAG,CAAC,GAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,GAAG,MAAI;AAAC,UAAI,IAAE,KAAK,QAAQ,IAAI,OAAG,EAAE,GAAE,CAAC,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE;AAAM,MAAGA,IAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoDA,IAAE,KAAK,EAAE;AAAE,MAAGA,IAAE,UAAQC;AAAE,UAAM,IAAI,MAAM,mCAAmCD,IAAE,KAAK,uBAAuBC,GAAC,EAAE;AAAE,MAAI,IAAED,IAAE,MAAM,MAAM,CAAC;AAAE,KAAG,GAAE,GAAE,6BAA6B;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,IAAI,GAAG,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAO,IAAI,GAAG,CAAC,GAAED,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,EAAE,WAASD,IAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,MAAM,QAAQA,IAAE,MAAM,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,KAAK,IAAI,GAAG,CAAC;AAAE,MAAG,KAAG,QAAM,MAAI,MAAI,KAAG;AAAE,UAAM,IAAI,MAAM,mCAAmC,CAAC,SAAS,CAAC,GAAG;AAAE,MAAI,IAAE,IAAI,GAAG,CAAC,GAAEC,KAAED,IAAE,OAAM,CAAC,GAAE,IAAE,GAAGA,KAAE,CAAC;AAAE,SAAO,EAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAA,EAAC,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,IAAI,QAAI,KAAG,GAAE,EAAE;AAAE,MAAG,MAAID,IAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM;AAAA;AAAA,UAEj6J,CAAC,4BAA4BA,IAAE,KAAK,EAAE;AAAE,MAAI,IAAEA,IAAE,MAAM,MAAM,CAAC,GAAE,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,MAAI,IAAE,IAAED,IAAE,OAAK,GAAE,IAAE,GAAG,MAAI;AAAC,QAAI,IAAE,CAAC;AAAE,IAAAA,MAAE,EAAEA,KAAE,CAAC,GAAE,GAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,WAAOA,IAAE,QAAQ,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAEC,KAAED,IAAE,OAAM,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,QAAQ,GAAE,EAAE,CAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,OAAMA,KAAE,GAAEC,QAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAK,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,cAAaA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,cAAO,MAAM,EAAE,KAAK,GAAG,CAAC,IAAEA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa,IAAEA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,GAAE,IAAE,MAAM,EAAE,CAAC,EAAE,KAAK;AAAE,QAAE,QAAQ,OAAG;AAAC,SAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,MAAC,CAAC;AAAE,UAAI,IAAE;AAAE,aAAK,EAAE,CAAC,KAAG;AAAC,YAAI,IAAE;AAAE,YAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAE,YAAI,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE;AAAE,UAAE,QAAQ,OAAG;AAAC,WAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,QAAC,CAAC;AAAE,YAAI,IAAE,MAAMA,IAAE,YAAY,CAAC,EAAE,qBAAqB,GAAEA,IAAE,gBAAeA,IAAE,aAAa;AAAE,YAAE,MAAM,EAAE,CAAC,EAAE,KAAK,GAAE,EAAE,QAAQ,OAAG;AAAC,WAAC,EAAE,QAAM,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ,EAAE,EAAE,MAAI,MAAI,EAAE,QAAQ;AAAA,QAAC,CAAC;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,SAAO,IAAE,GAAG,CAAC,KAAI,MAAM,EAAE,KAAK,GAAG,CAAC,IAAE,CAAC,QAAO,CAAC,IAAE,CAAC,GAAE,MAAM;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAED,IAAE,WAAW,KAAK,OAAG,GAAG,GAAE,GAAEC,GAAC,MAAI,MAAM;AAAE,UAAG,GAAE;AAAC,YAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,eAAM,CAAC,GAAG,CAAC,CAAC;AAAA,MAAC;AAAC;AAAA,IAAM;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,WAAW,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,UAAU,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAOA,IAAE,cAAc,GAAE,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,0BAAyBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,eAAe,CAAC,GAAE,CAAC,EAAE,UAAS,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,eAAe,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,eAAe,EAAE,EAAE;AAAE,aAAO,EAAE,cAAc,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAoB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE;AAAE,MAAAD,IAAE,OAAK,sBAAoB,IAAE,gBAAc,IAAE;AAAiB,UAAI,IAAE,EAAE,GAAEA,KAAE,GAAEC,GAAC,GAAE,IAAED,IAAE,OAAK,sBAAoB,KAAG,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,aAAOC,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,OAAO,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,wBAAuB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAmB,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,sBAAqB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAO,EAAE,SAAS,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAACA,IAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE;AAAE,aAAM,CAAC,GAAG,EAAE,KAAK,GAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,oBAAmB;AAAC,UAAI,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAEA,IAAE,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC;AAAE,aAAOA,IAAE,cAAc,CAAC,GAAE,CAAC,EAAE,QAAQ;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAI,WAAU,IAAE,CAAC,GAAE,IAAE,MAAI,SAAQ,IAAE,MAAI,kBAAiB,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,MAAG,GAAE;AAAC,QAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,uGAAuG;AAAE,QAAG,CAAC,KAAG,KAAG,MAAI;AAAE,YAAM,IAAI,MAAM,kFAAkF;AAAA,EAAC;AAAC,MAAG;AAAE,UAAM,IAAI,MAAM,sEAAsE;AAAE,MAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,QAAI,IAAE,GAAE,IAAE;AAAQ,MAAI,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC;AAAC;AAAC,IAAI,KAAG,CAACD,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,UAASA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAG,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,QAAO,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,SAAQ,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,8BAA6B;AAAC,UAAG,EAAC,QAAO,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,UAAS,GAAE,gBAAe,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,gBAAgB,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,QAAO,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,SAAQ,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAwB,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,gBAAgB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,uBAAsBD,KAAE,GAAEC,GAAC,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,EAAE,kBAAkB,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,MAAM,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,SAAQA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,YAAY,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,iBAAiB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,mBAAkB;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,gBAAgB,GAAE,GAAE,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,SAAM,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC;AAAC;AAAC,IAAI,KAAG,OAAMD,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAGA,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAM,EAAE,MAAM,gCAAgC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAgB,EAAE,cAAc;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAM,EAAE,MAAM,6BAA6B,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAgB,EAAE,YAAY;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAsB,KAAI,uBAAsB;AAAC,UAAG,EAAC,OAAM,GAAE,QAAO,GAAE,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAGD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,MAAM,uBAAuB,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,KAAK,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,MAAM,GAAE,IAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAAE,aAAO,EAAE,QAAQ,GAAE;AAAA,IAAC;AAAA,IAAC,KAAI;AAAW,aAAO,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,kBAAiBA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAK,GAAE,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAO,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAO,GAAE,CAAC;AAAE,aAAM,CAAC,EAAE,QAAO,EAAE,OAAO;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAO,EAAEA,IAAE,IAAI;AAAA,IAAE,KAAI;AAAyB,UAAI,IAAE,EAAE,WAAUA,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAGD,IAAE,MAAK,GAAEC,GAAC,KAAG,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,GAAGD,IAAE,MAAK,GAAEC,GAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW,KAAI;AAAA,IAAe,KAAI,2BAA0B;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAY,aAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,IAAI,OAAG,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,OAAM,OAAO,CAAC;AAAA,IAAE,KAAI;AAAS,aAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,IAAI,OAAG,EAAE,SAAS,EAAE,KAAK,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,EAAE,MAAK,OAAO,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC;AAAE,cAAQ,KAAK,gGAAgG,GAAE,QAAQ,IAAI,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,gBAAQ,IAAI,MAAM,UAAU,MAAM,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAE,CAAC,CAAC;AAAE,aAAM,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,IAAI,KAAI;AAAC,WAAO,KAAK,OAAO;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,WAAS,GAAE,KAAK,aAAWA,KAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,YAAU,oBAAI,OAAI,GAAG,KAAK,MAAM;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,SAAK,UAAU,QAAQ,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,UAAU,MAAM,GAAE,KAAK,OAAO,QAAQ;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,WAAO,KAAK,UAAU;AAAA,EAAI;AAAA,EAAC,aAAY;AAAC,WAAO,GAAG,KAAK,KAAK,GAAE,OAAO;AAAA,EAAC;AAAA,EAAC,MAAM,OAAO,GAAEA,KAAE;AAAC,SAAK,uBAAuB,GAAEA,GAAC;AAAE,QAAI,IAAE,MAAM,EAAE,KAAK;AAAE,WAAO,KAAK,UAAU,QAAQ,OAAG,EAAE,QAAQ,CAAC,GAAE,KAAK,UAAU,MAAM,GAAE,GAAG,MAAI;AAAC,UAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE;AAAO,QAAE,OAAO,MAAI,GAAE,MAAI,kDAAkD,CAAC,6BAA6B,CAAC,YAAY;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAG,CAAC,GAAE,KAAK,UAAU,IAAI,GAAE,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK;AAAA,IAAM,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAEA,KAAE;AAAC,SAAK,uBAAuB,GAAEA,GAAC;AAAE,QAAI,IAAE,MAAM,EAAE,KAAK;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAEA,GAAC;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,GAAG,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAO,KAAG,OAAK,IAAEA;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE;AAAC,QAAG,EAAE,UAAQ,KAAK;AAAS,YAAM,IAAI,MAAM,oBAAoB,KAAK,QAAQ,aAAa,EAAE,KAAK,EAAE;AAAE,QAAGA,IAAE,UAAQ,KAAK;AAAW,YAAM,IAAI,MAAM,sBAAsB,KAAK,UAAU,aAAaA,IAAE,KAAK,EAAE;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,OAAMD,KAAE,GAAEC,KAAE,MAAI;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAY,KAAI,eAAc;AAAC,UAAI,IAAE,EAAE,yBAAyBA,IAAE,IAAI;AAAE,UAAG,KAAG;AAAK,eAAM,CAAC,CAAC;AAAE;AAAC,YAAI,IAAE,EAAE,YAAWA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,eAAO,EAAE,aAAaD,IAAE,MAAK,CAAC,GAAE,CAAC,EAAE,MAAM;AAAA,MAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI;AAAA,IAAoB,KAAI;AAAA,IAAoB,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,eAAcA,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,KAAE,CAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,EAAE,KAAK,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAkB,KAAI,qBAAoB;AAAC,UAAI,IAAE,EAAE,eAAcD,KAAE,GAAEC,KAAE,CAAC;AAAE,aAAM,CAAC,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,UAASA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,eAAe,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,yBAAwB;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,sBAAsB,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,sBAAqBD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,cAAc,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,8BAA6B;AAAC,UAAI,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,UAAU,GAAE,GAAE,EAAE,YAAY,GAAE,EAAE,YAAY,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAW,aAAM,CAAC,EAAE,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAS,KAAI;AAAW,aAAM,CAAC,EAAE,MAAM,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAc,KAAI;AAAA,IAAgB,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAS,aAAM,CAAC,EAAE,OAAO,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,GAAG,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAe,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,IAAE,MAAI,WAAU,IAAE,MAAI,SAAQ,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC;AAAE,UAAG,GAAE;AAAC,YAAG,KAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,oFAAoF;AAAE,YAAG,CAAC,KAAG,MAAI;AAAE,gBAAM,IAAI,MAAM,+DAA+D;AAAA,MAAC;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,OAAO,EAAC,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,YAAW,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,YAAW,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAiB,aAAM,CAAC,EAAE,OAAO,SAAS,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAiB,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAM,aAAM,CAAC,EAAE,2BAA2B,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAa,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAG,EAAC,oBAAmB,GAAE,mBAAkB,EAAC,IAAE,EAAE,aAAa,EAAE,sBAAqBA,KAAE,GAAEC,GAAC,GAAE,EAAE,qBAAoBD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,oBAAmBD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAO,EAAE,OAAO,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAG,EAAC,gBAAe,GAAE,eAAc,EAAC,IAAE,EAAE,YAAY,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAuB,aAAM,CAAC,EAAE,qBAAqB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,uBAAsBD,KAAE,GAAEC,GAAC,GAAE,EAAE,qBAAoBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,OAAM;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAW,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,GAAE,CAAC,CAAC;AAAA,IAAE,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,cAAc,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAA,IAAW,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAO,IAAE,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,EAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,EAAE,KAAK,GAAE,OAAO,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,OAAO,GAAE,EAAE,KAAK,GAAE,OAAO,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,CAAC,KAAG,EAAE,KAAK,CAAC;AAAE,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,OAAMD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,kBAAiBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAO,aAAO,GAAG,MAAI;AAAC,YAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAM,IAAE,EAAE,IAAI,OAAG;AAAC,cAAI,IAAE,EAAE,YAAY,EAAE,OAAM,CAAC;AAAE,cAAG,CAAC,KAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,OAAM,CAAC;AAAE,kBAAM,IAAI,MAAM,wCAAwC;AAAE,iBAAO,IAAE,IAAE,EAAE,QAAQ,GAAE,CAAC;AAAA,QAAC,CAAC;AAAE,eAAM,CAAC,EAAE,MAAM,GAAE,CAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAE,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,QAAQ,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAA,IAAQ,KAAI,UAAS;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,mBAAkBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC;AAAE,aAAO,EAAE,MAAM,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,aAAY;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,UAAU,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,YAAW;AAAC,UAAI,IAAE,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,SAAS,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAI,IAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,cAAc,GAAE,GAAE,GAAE,EAAE,UAAQ,EAAE,QAAM,IAAE,EAAE,KAAK,GAAE,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAI,IAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,UAASD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,oBAAoB,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI,uBAAsB;AAAC,UAAG,EAAC,eAAc,GAAE,cAAa,GAAE,mBAAkB,GAAE,iBAAgB,EAAC,IAAE,EAAE,OAAO,oBAAoB,EAAE,WAAUA,KAAE,GAAEC,GAAC,GAAE,EAAE,UAASD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,gBAAeD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,iBAAgB;AAAC,UAAG,EAAC,eAAc,GAAE,aAAY,EAAC,IAAE,EAAE,OAAO,cAAc,EAAE,gBAAeD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAoB,aAAM,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAmB,aAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAIA,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAQ,aAAM,CAAC,EAAE,MAAM,EAAE,KAAID,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAqB,aAAM,CAAC,EAAE,OAAO,mBAAmB,EAAE,SAAQA,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,gBAAe;AAAC,UAAG,EAAC,QAAO,GAAE,cAAa,EAAC,IAAE,EAAE,OAAO,aAAa,EAAE,QAAOD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,eAAcD,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC,GAAE,EAAE,0BAAyBD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,eAAc;AAAC,UAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE,EAAE,OAAO,YAAY,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,CAAC;AAAE,aAAM,CAAC,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAyB,aAAM,CAAC,EAAE,OAAO,uBAAuB,EAAE,SAAQD,KAAE,GAAEC,GAAC,GAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,IAAE,OAAK;AAAC,UAAOD,IAAE,IAAG;AAAA,IAAC,KAAI;AAAO,aAAM,CAAC,EAAE,KAAK,EAAE,KAAIA,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,cAAa;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,WAAW,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAU,aAAM,CAAC,EAAE,QAAQ,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAY,aAAM,CAAC,EAAE,UAAU,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,QAAOD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAA,IAAQ,KAAI;AAAM,aAAM,CAAC,EAAE,IAAI,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,WAAUD,KAAE,GAAEC,GAAC,GAAE,EAAE,iBAAgBD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,YAAWD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,kBAAiB;AAAC,UAAI,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC;AAAE,aAAM,CAAC,EAAE,eAAe,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI,gBAAe;AAAC,UAAI,IAAE,EAAE,aAAYD,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,cAAaD,KAAE,GAAEC,GAAC,EAAE,YAAY;AAAE,aAAM,CAAC,EAAE,aAAa,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC;AAAA,IAAC,KAAI;AAAc,aAAM,CAAC,EAAE,YAAY,EAAE,KAAID,KAAE,GAAEC,GAAC,GAAE,EAAE,SAAQD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE,KAAI;AAAgB,aAAM,CAAC,EAAE,cAAc,EAAE,MAAKD,KAAE,GAAEC,GAAC,GAAE,EAAE,MAAKD,KAAE,GAAEC,GAAC,CAAC,CAAC;AAAA,IAAE;AAAQ,YAAM,UAAU,aAAaD,IAAE,EAAE,qBAAqB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,IAAG;AAAC,MAAI,KAAG,CAAC,GAAE,GAAE,MAAI;AAAC,YAAO,EAAE,UAAS;AAAA,MAAC,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,GAAG,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAc,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,GAAG,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAU,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAgB,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAY,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAW,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAS,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAiB,eAAO,EAAE,MAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,MAAE,KAAI;AAAa,eAAO,GAAG,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAS,YAAI,IAAE,GAAG,EAAE,EAAE;AAAE,YAAG,KAAG,EAAE;AAAe,iBAAO,EAAE,eAAe,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAE,cAAM,UAAU,aAAa,EAAE,EAAE,qBAAqB;AAAA,MAAE;AAAQ,cAAM,UAAU,eAAe,EAAE,EAAE,qIAAqI;AAAA,IAAC;AAAA,EAAC,GAAGD,KAAE,GAAEC,GAAC;AAAE,SAAO,EAAE,UAAU,CAAC,IAAE,EAAE,KAAK,OAAG,CAAC,EAAE,OAAO,CAAC,CAAC,IAAE,CAAC,EAAE,OAAO,CAAC;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,CAAC,GAAEA,MAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE;AAAC,SAAK,YAAU,GAAE,KAAK,iBAAeA,KAAE,KAAK,gBAAc,GAAE,KAAK,cAAY,GAAE,KAAK,qBAAmB,GAAE,KAAK,cAAY,EAAC,IAAG,GAAE,WAAU,IAAG,aAAY,EAAC,GAAE,KAAK,WAAS,CAAC,KAAK,WAAW,GAAE,KAAK,SAAO,GAAE,KAAK,0BAA0B;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE;AAAC,WAAM,EAAC,IAAG,GAAE,WAAUA,KAAE,aAAY,EAAC;AAAA,EAAC;AAAA,EAAC,IAAI,eAAe,GAAE;AAAC,SAAK,aAAW,MAAI,KAAK,WAAS,GAAE,KAAK,0BAA0B;AAAA,EAAE;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK;AAAA,EAAQ;AAAA,EAAC,IAAI,mBAAkB;AAAC,WAAO,KAAK,mBAAmB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,4BAA2B;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQA,MAAE,GAAEA,MAAE,KAAK,SAAS,SAAO,GAAEA,OAAI;AAAC,UAAI,IAAE,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,SAAOA,GAAC;AAAE,QAAE,KAAK,KAAK,qBAAqB,CAAC,CAAC;AAAA,IAAC;AAAC,MAAE,KAAK,EAAE,GAAE,KAAK,qBAAmB;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAE;AAAC,WAAO,IAAE,EAAE,IAAI,CAAAA,QAAGA,IAAE,OAAK,KAAGA,IAAE,gBAAc,IAAE,KAAG,GAAGA,IAAE,SAAS,IAAIA,IAAE,WAAW,EAAE,EAAE,KAAK,GAAG,IAAE;AAAA,EAAE;AAAA,EAAC,WAAW,GAAE;AAAC,SAAK,aAAW,KAAK,UAAS,KAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,QAAO,CAAC,CAAC,GAAE,KAAK,mBAAmB,QAAQ,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,EAAE;AAAA,EAAC,YAAW;AAAC,QAAG,KAAK,YAAU,KAAK,SAAS,SAAO;AAAE,WAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK,SAAS,OAAO,EAAE,GAAE,KAAK,kBAAkB,MAAM;AAAA;AAAO,YAAM,IAAI,MAAM,yCAAyC;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,QAAG,KAAK,YAAU,KAAK,SAAS,SAAO,GAAE;AAAC,WAAK,WAAS,KAAK,SAAS,MAAM,GAAE,KAAK;AAAS,UAAI,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS,KAAK,SAAS,SAAO,CAAC,CAAC;AAAE,QAAE,eAAa,GAAE,EAAE,KAAG,KAAK,QAAO,KAAK,SAAS,OAAO,IAAG,GAAE,CAAC,GAAE,KAAK,mBAAmB,OAAO,GAAE,GAAE,KAAK,qBAAqB,KAAK,QAAQ,CAAC;AAAA,IAAC;AAAM,YAAM,IAAI,MAAM,uDAAuD;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,KAAK,UAAU,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,SAAK,eAAe,EAAE,EAAE,IAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,WAAO,KAAK,eAAe,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,cAAc,EAAE,EAAE,IAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,WAAO,KAAK,cAAc,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAE;AAAC,aAAQA,OAAK,KAAK;AAAe,WAAK,eAAeA,GAAC,EAAE,cAAc,CAAC;AAAE,aAAQA,OAAK,KAAK;AAAc,WAAK,cAAcA,GAAC,EAAE,cAAc,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,oBAAI,OAAI,IAAE,CAAC,GAAE,IAAE,MAAK,IAAE,MAAK,IAAE,oBAAI,OAAI,IAAE,IAAI,IAAI,OAAO,KAAKD,GAAC,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,MAAE,KAAG,CAAC;AAAE,MAAI,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI;AAAE,SAAI,GAAG,CAAC,KAAG,GAAG,CAAC,KAAG,GAAG,CAAC,MAAI,KAAG,SAAO,IAAE,GAAE,IAAE,EAAE,SAAS,IAAI,OAAG,EAAE,IAAI,EAAE,OAAO,OAAG,EAAE,IAAI,CAAC,CAAC,IAAG,EAAE,IAAI,EAAE,IAAI,GAAEC,IAAE,EAAE,IAAI,KAAG,QAAM,CAAC,EAAE,IAAI,EAAE,IAAI,KAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAE;AAAC,UAAG,EAAE,OAAO,WAAS,GAAE;AAAC,UAAE,KAAK,EAAE,IAAI;AAAE;AAAA,MAAQ;AAAC,QAAE,OAAO,QAAQ,OAAG;AAAC,UAAE,IAAI,EAAE,IAAI,MAAI,EAAE,IAAI,EAAE,IAAI,GAAE,EAAE,KAAK,CAAC;AAAA,MAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOD,KAAE,SAAQ,GAAE,WAAU,GAAE,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAC,WAAUC,KAAE,QAAO,EAAC,IAAE,GAAE,IAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAGD,IAAE,MAAM,CAAC,CAAC,GAAE,IAAEA,IAAE,aAAW,CAAC,GAAE,IAAE,OAAGC,IAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI;AAAE,WAAS,EAAE,GAAE;AAAC,WAAM,CAAC,GAAG,IAAI,IAAI,EAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,CAAC,GAAG,GAAE,GAAGD,IAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAE,IAAE,EAAE,CAAC,GAAG,GAAE,GAAG,OAAO,OAAOA,IAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAE,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,KAAK,GAAE;AAAC,MAAE,EAAE,IAAI,IAAE,EAAE,EAAE,IAAI,KAAG;AAAE,aAAQ,KAAK,EAAE;AAAS,QAAE,CAAC,MAAI,EAAE,EAAE,IAAI,IAAE,OAAO,oBAAmB,EAAE,EAAE,IAAI,KAAG,EAAE,EAAE,IAAI,KAAG,KAAG;AAAA,EAAC;AAAC,MAAI,IAAE,OAAO,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,EAAC,CAAC,MAAI,MAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAI,CAAC,GAAE,IAAE,CAAC,GAAG,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,IAAE,EAAE,IAAI,CAAC;AAAE,aAAQ,KAAK,EAAE,SAAS,OAAO,CAAC;AAAE,QAAE,EAAE,EAAE,IAAI,MAAI,MAAI,EAAE,KAAK,EAAE,IAAI,GAAE,EAAE,KAAK,EAAE,IAAI;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,IAAID,IAAE,IAAI,OAAG,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,IAAI,IAAI,CAAC;AAAE,SAAK,EAAE,SAAO,KAAG;AAAC,QAAI,IAAE,EAAE,IAAI,GAAE,IAAEC,IAAE,IAAI,CAAC;AAAE,aAAQ,KAAK,EAAE;AAAS,OAACA,IAAE,IAAI,EAAE,IAAI,KAAG,EAAE,IAAI,EAAE,IAAI,MAAI,EAAE,IAAI,EAAE,IAAI,GAAE,EAAE,KAAK,EAAE,IAAI;AAAA,EAAE;AAAC,SAAOD,IAAE,OAAO,OAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AAAC;AAAC,IAAI,KAAG,cAAc,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,6BAA6B,CAAC,EAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,IAAID,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,EAAE,IAAI,OAAG,EAAE,IAAI,CAAC,GAAE,IAAE,OAAG,EAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI,GAAE,IAAE,IAAI,IAAIA,IAAE,IAAI,OAAG,EAAE,IAAI,CAAC,GAAE,IAAE,OAAG,EAAE,IAAI,OAAO,KAAG,WAAS,IAAE,EAAE,IAAI;AAAE,WAAQ,KAAKA,KAAE;AAAC,aAAQ,KAAK,EAAE,SAAS,OAAO,CAAC,GAAE;AAAC,UAAG,CAACC,IAAE,IAAI,EAAE,IAAI;AAAE,cAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,UAAGA,IAAE,IAAI,EAAE,IAAI,IAAEA,IAAE,IAAI,EAAE,IAAI;AAAE,cAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,wCAAwC,EAAE,IAAI,GAAG;AAAA,IAAC;AAAC,QAAG,CAAC,EAAE,CAAC;AAAE,eAAQ,KAAK,EAAE,QAAO;AAAC,YAAG,CAACA,IAAE,IAAI,EAAE,IAAI;AAAE,gBAAM,IAAI,GAAG,SAAS,EAAE,IAAI,YAAY,EAAE,IAAI,kBAAkB;AAAE,YAAGA,IAAE,IAAI,EAAE,IAAI,IAAEA,IAAE,IAAI,EAAE,IAAI;AAAE,gBAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,yCAAyC,EAAE,IAAI,GAAG;AAAA,MAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,IAAIA,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,EAAE,MAAK,CAAC,CAAC,CAAC,GAAEC,MAAE,OAAO,kBAAiB,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,GAAG,CAAC,IAAEC,MAAE,CAAC,GAAE,IAAE,OAAG;AAAC,QAAI,IAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAAE,WAAO,KAAG,OAAK,KAAG;AAAA,EAAC,GAAE,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,SAAS,IAAI,CAAC,EAAE,OAAO,CAAC,GAAE,MAAI,KAAK,IAAI,GAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,oBAAI;AAAI,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,MAAIC;AAAE;AAAS,QAAI,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,KAAG,EAAE,IAAI,EAAE,MAAK,CAAC,CAAC,GAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,oBAAI,IAAI,CAAC,UAAS,SAAQ,SAAQ,QAAO,iBAAgB,eAAc,kBAAiB,MAAK,OAAO,CAAC;AAA5G,IAA8G,KAAG,oBAAI,IAAI,CAAC,uBAAsB,uBAAsB,uBAAsB,OAAO,CAAC;AAApM,IAAsM,KAAG,oBAAI,IAAI,CAAC,aAAY,eAAc,qBAAoB,uBAAsB,mBAAkB,qBAAoB,mBAAkB,mBAAmB,CAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAG,IAAIA,IAAE,EAAE;AAAC;AAAC,IAAI,KAAG,MAAMA,IAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,YAAU,KAAK;AAAA,EAAU;AAAA,EAAC,IAAI,sBAAqB;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,sBAAoB,KAAK;AAAA,EAAoB;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,KAAK,SAAO,KAAK,OAAO,YAAU,KAAK;AAAA,EAAU;AAAA,EAAC,IAAI,UAAU,GAAE;AAAC,QAAIC,MAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC;AAAE,SAAK,aAAW,CAAC,EAAE,OAAO,GAAGA,GAAC,GAAE,KAAK,aAAW;AAAA,EAAC;AAAA,EAAC,IAAI,gBAAgB,GAAE;AAAC,SAAK,mBAAiB;AAAA,EAAC;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK,QAAQ,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,QAAO,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS,IAAI,QAAI,EAAC,MAAK,EAAE,MAAK,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,QAAO,OAAM,EAAE,WAAW,QAAM,EAAE,WAAW,MAAM,QAAM,OAAM,EAAE;AAAA,EAAC;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,QAAQ,IAAI,OAAG,EAAE,gBAAc,EAAE,IAAI;AAAA,EAAC;AAAA,EAAC,IAAI,cAAa;AAAC,WAAO,KAAK,SAAS,IAAI,OAAG;AAAC,UAAIA,MAAE,EAAE,gBAAc,EAAE;AAAK,aAAO,EAAE,gBAAc,GAAGA,GAAC,IAAI,EAAE,aAAa,KAAGA;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,YAAW;AAAC,WAAO,OAAO,KAAK,KAAK,UAAU,EAAE,OAAO,CAAC,GAAEA,SAAK,EAAEA,GAAC,IAAE,KAAK,WAAWA,GAAC,EAAE,WAAU,IAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,QAAM,GAAE,KAAK,SAAOA,KAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,qBAAmB,oBAAI,OAAI,KAAK,aAAW,CAAC,GAAE,KAAK,YAAU,KAAI,KAAK,aAAW,CAAC,GAAE,KAAK,uBAAqB,CAAC,GAAE,KAAK,0BAAwB,OAAG,KAAK,WAAS,EAAE,SAAQ,KAAK,UAAQ,EAAE,QAAO,KAAK,aAAW,EAAE,WAAU,KAAK,aAAW,EAAE,WAAU,KAAK,aAAW,EAAE,WAAU,EAAE,aAAW,QAAM,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,OAAG;AAAC,WAAK,qBAAqB,CAAC,IAAE,IAAID,IAAE,EAAE,UAAU,CAAC,GAAE,IAAI;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEC,KAAE;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,EAAE,KAAK;AAAE,WAAO,EAAE,KAAK,KAAK,SAAS,IAAE,OAAK,EAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,GAAG,GAAEA,KAAE,KAAK,WAAU,KAAK,UAAU,GAAE,EAAC,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC,IAAE;AAAE,QAAG,KAAG;AAAK,YAAM,IAAI,MAAM,qCAAqC,EAAE,IAAI,gCAAgC,EAAE,EAAE,4GAA4G,CAAC,GAAG;AAAE,QAAG,EAAE,SAAO,GAAE;AAAC,UAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,IAAI,GAAE,IAAE,OAAO,KAAK,CAAC;AAAE,YAAM,IAAI,MAAM,+BAA+B,CAAC,+BAA+B,CAAC,qCAAqC,CAAC,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,KAAK,OAAM,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,WAAM,EAAC,cAAa,GAAE,kBAAiB,EAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAG,KAAG;AAAK,aAAO;AAAK,QAAIA,MAAE,EAAE,MAAM;AAAE,WAAO,GAAGA,GAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,WAAO,IAAE,EAAE,IAAI,OAAG,KAAK,mBAAmB,CAAC,CAAC,IAAE;AAAA,EAAI;AAAA,EAAC,eAAe,GAAE;AAAC,WAAO,OAAO,YAAY,OAAO,QAAQ,CAAC,EAAE,IAAI,CAAC,CAACA,KAAE,CAAC,MAAI,CAACA,KAAE,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,SAAK,2BAA2B,GAAE,IAAE,KAAK,UAAU,CAAC;AAAE,QAAI,IAAE,OAAO,KAAK,CAAC,EAAE,KAAK;AAAE,SAAK,YAAY,CAAC,GAAE,KAAK,uBAAuB,CAAC,GAAEA,MAAE,KAAK,WAAWA,GAAC,GAAE,KAAK,aAAaA,GAAC;AAAE,QAAI,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAAE,MAAE,WAAS,MAAI,IAAE,KAAK;AAAU,QAAI,IAAE,KAAK,kBAAkB,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,SAAG,SAAO,IAAE,KAAK,QAAQ,GAAE,CAAC,GAAE,KAAK,YAAY,IAAI,GAAE,CAAC;AAAG,QAAG;AAAC,WAAK,0BAAwB,EAAE,EAAE,QAAQ,2BAA2B;AAAA,IAAC,SAAO,GAAE;AAAC,WAAK,0BAAwB,OAAG,QAAQ,KAAK,EAAE,OAAO;AAAA,IAAC;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAO,GAAG,MAAI;AAAC,UAAI,IAAE,IAAI,GAAG,KAAK,WAAU,GAAE,GAAE,KAAK,qBAAoB,KAAK,kBAAkB,GAAE,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS;AAAE,WAAK,4BAA0B,KAAK,mBAAiB,KAAK,eAAe,KAAK,SAAS,IAAG,OAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC;AAAA,MAAE,CAAC;AAAE,UAAI,IAAE,KAAK,mBAAmB,CAAC,GAAE,EAAC,cAAa,GAAE,kBAAiB,EAAC,IAAE;AAAE,eAAQ,KAAK,GAAE;AAAC,YAAG,EAAE,EAAE,IAAI;AAAE;AAAS,YAAI,IAAE,GAAG,GAAE,GAAE,GAAE,KAAK,gBAAgB;AAAE,YAAG,EAAE,UAAU,CAAC;AAAE,gBAAM,IAAI,MAAM,4BAA4B,EAAE,EAAE,gEAAgE;AAAE,UAAE,EAAE,IAAI,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,EAAE,IAAI,IAAE,KAAK,gBAAgB,CAAC,IAAG,KAAK,4CAA4C,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,MAAC;AAAC,aAAO,KAAK,UAAQ,QAAM,EAAE,QAAQ,CAAC,GAAEA,IAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAIA,MAAE,CAAC,EAAE,OAAO,MAAM,CAAC,GAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,IAAI,OAAG,EAAE,IAAI,OAAG,EAAE,EAAE,CAAC,CAAC;AAAE,WAAO,IAAI,IAAIA,GAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,GAAGA,GAAC,KAAG,EAAE,IAAI,CAAC,IAAG;AAAC,eAAQ,KAAK,EAAE,CAAC;AAAE,aAAG,SAAO,EAAE,EAAE,EAAE,KAAG,EAAE,EAAE,EAAE,KAAG,KAAGA,IAAE,SAAS;AAAQ,eAAQ,KAAKA,IAAE,QAAO;AAAC,YAAG,GAAG,CAAC;AAAE;AAAS,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,CAAC;AAAE,YAAG,KAAG;AAAK,mBAAQ,KAAK,GAAE;AAAC,gBAAG,CAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE;AAAE;AAAS,gBAAI,IAAE,EAAE,EAAE,EAAE;AAAE,kBAAI,KAAG,EAAE,QAAQ,GAAE,OAAO,EAAE,EAAE,EAAE,KAAG,KAAG,QAAM,EAAE,EAAE,EAAE;AAAA,UAAG;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,4CAA4C,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,GAAG,CAAC,KAAG,EAAE,IAAI,EAAE,IAAI;AAAA,IAAC;AAAC,QAAG,EAAE,GAAG,CAAC,KAAG,KAAG;AAAM,eAAQ,KAAK,GAAE;AAAC,YAAG,EAAE,CAAC;AAAE;AAAS,YAAI,IAAE,GAAG,EAAE,MAAKA,KAAE,CAAC;AAAE,iBAAQ,KAAK;AAAE,WAAC,KAAG,EAAE,QAAM,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,MAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,WAAO,KAAK,cAAc,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,qBAAmB,OAAO,OAAO,KAAK,gBAAgB,EAAE,QAAQ,OAAG;AAAC,eAAQA,OAAK;AAAE,QAAAA,OAAG,CAACA,IAAE,cAAYA,IAAE,QAAQ;AAAA,IAAC,CAAC,GAAE,KAAK,mBAAiB;AAAA,EAAK;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK;AAAA,EAAgB;AAAA,EAAC,MAAM,cAAc,GAAEA,KAAE,IAAE,OAAG,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE;AAAC,SAAK,2BAA2B,GAAE,MAAI,IAAE,KAAK,UAAU,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,uBAAuB,CAAC,GAAEA,MAAE,KAAK,WAAWA,GAAC,GAAE,KAAK,aAAaA,GAAC;AAAG,QAAG;AAAC,WAAK,0BAAwB,EAAE,EAAE,QAAQ,2BAA2B;AAAA,IAAC,SAAO,GAAE;AAAC,WAAK,0BAAwB,OAAG,QAAQ,KAAK,EAAE,OAAO;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAG,KAAK,WAAU,GAAE,GAAE,KAAK,qBAAoB,KAAK,kBAAkB;AAAE,SAAK,4BAA0B,KAAK,mBAAiB,KAAK,eAAe,KAAK,SAAS;AAAG,QAAI,IAAE,MAAM,KAAK,uBAAuB,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,GAAG,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,EAAE,GAAE,IAAE,OAAO,KAAK,CAAC,EAAE,IAAI,OAAG,EAAE,CAAC,EAAE,EAAE,GAAE,IAAE,oBAAI,IAAI,CAAC,GAAG,GAAE,GAAG,GAAE,GAAG,KAAK,SAAS,CAAC;AAAE,WAAO,OAAO,OAAO,CAAC,EAAE,QAAQ,OAAG;AAAC,QAAE,QAAQ,OAAG;AAAC,aAAG,CAAC,EAAE,cAAY,CAAC,EAAE,IAAI,EAAE,EAAE,KAAG,EAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,UAAQ,QAAM,EAAE,QAAQ,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,qBAAqB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,EAAE,OAAO,CAAC,GAAE,GAAE,OAAK,EAAE,KAAK,OAAO,CAAC,EAAE,IAAI,IAAE,GAAE,IAAG,CAAC,CAAC;AAAE,WAAO,KAAK,cAAc,GAAE,KAAK,aAAY,MAAGA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,OAAO,KAAK,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,IAAI,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAAE,MAAE,WAAS,MAAI,IAAE,KAAK;AAAU,QAAG,EAAC,WAAU,GAAE,eAAc,GAAE,aAAY,GAAE,YAAW,EAAC,IAAE,GAAG,GAAE,GAAE,KAAK,WAAU,KAAK,UAAU,GAAE,IAAE,CAAC,GAAG,GAAE,GAAG,KAAK,MAAM,SAAQ,GAAG,KAAK,cAAY,CAAC,CAAC,EAAE,IAAI,QAAI,EAAC,MAAK,GAAE,UAASA,IAAE,eAAc,EAAE,GAAE,IAAE,OAAO,OAAO,CAAC,GAAE,KAAK,SAAS;AAAE,WAAO,KAAK,CAAC,EAAE,QAAQ,OAAG;AAAC,UAAG,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,KAAK,mBAAmB,CAAC,GAAE,IAAE,CAAC;AAAE,WAAK,EAAE,SAAO,KAAG;AAAC,UAAI,IAAE,KAAK,aAAa,GAAE,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,YAAM,QAAQ,IAAI,CAAC;AAAA,IAAC;AAAC,SAAG,QAAM,CAAC,KAAG,QAAQ,KAAK,iIAAiI;AAAE,QAAI,IAAE,EAAE,OAAO,OAAG,CAAC,GAAG,CAAC,KAAG,CAAC,GAAG,EAAE,MAAK,GAAEA,GAAC,CAAC,EAAE,IAAI,OAAG,EAAE,IAAI;AAAE,QAAG,EAAE,SAAO,GAAE;AAAC,UAAI,IAAE;AAAG,YAAM,KAAG,SAAO,IAAE,wFAAwF,CAAC,MAAK,IAAI,MAAM,+BAA+B,CAAC,+BAA+B,CAAC,gDAAgD,CAAC,MAAM,CAAC,EAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,WAAKA,IAAE,SAAO,KAAG;AAAC,UAAI,IAAEA,IAAE,IAAI;AAAE,QAAE,iBAAe,EAAE;AAAS,UAAI,IAAE;AAAG,UAAG,EAAE,KAAK,OAAK,WAAS,EAAE,cAAa,EAAE,MAAK,GAAE,CAAC,MAAI,CAAC,CAAC,IAAE,GAAG,EAAE,KAAK,MAAK,CAAC,IAAG,EAAE,EAAE,KAAK,IAAI,KAAG,MAAK;AAAC,YAAI,IAAE,GAAG,EAAE,MAAK,GAAE,GAAE,KAAK,gBAAgB;AAAE,cAAI,CAAC,CAAC,IAAE,GAAG,EAAE,KAAK,MAAK,CAAC;AAAG,YAAI,IAAE,EAAE;AAAe,UAAE,UAAU,CAAC,IAAE,EAAE,KAAK,EAAE,KAAK,QAAI,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC,IAAG,EAAE,iBAAe,GAAE,KAAK,uBAAuB,GAAE,EAAE,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,GAAE,KAAK,4BAA0B,KAAK,iBAAiB,CAAC,IAAE,KAAK,gBAAgB,CAAC,IAAG,KAAK,uBAAuB,GAAE,EAAE,MAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAE;AAAM,aAAK,kBAAkB,EAAE,MAAKA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAE,SAAS,QAAQ,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,EAAE,MAAK,CAAC;AAAE,QAAE,CAAC,KAAG,CAAC,EAAE,IAAI,EAAE,IAAI,MAAI,EAAE,OAAK,UAAQ,EAAE,WAAW,KAAK,OAAG,CAAC,CAAC,GAAG,GAAE,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAE,MAAGA,IAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC,KAAG,EAAE,WAAW,MAAM,OAAG,CAAC,CAAC,GAAG,GAAE,GAAE,CAAC,CAAC,MAAI,EAAE,CAAC,IAAE,MAAGA,IAAE,KAAK,EAAC,UAAS,EAAE,gBAAe,MAAK,EAAC,CAAC;AAAA,IAAG,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,KAAK,SAAS,EAAE,QAAQ,OAAG,KAAK,UAAU,CAAC,EAAE,QAAQ,CAAAA,QAAGA,IAAE,QAAQ,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAE;AAAC,WAAO,KAAK,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,UAAI,IAAE,EAAEA,GAAC,GAAE,CAAC,CAAC,IAAE,GAAGA,GAAC,GAAE,IAAE,KAAK,MAAM,MAAM,CAAC;AAAE,UAAG,EAAE,WAAW,SAAO,EAAE,WAAW,MAAM,OAAM;AAAC,YAAI,IAAE,EAAE,WAAW,MAAM,OAAM,IAAE,EAAE,WAAS,EAAE,MAAM,UAAQ,EAAE,MAAM,MAAM,CAAC,GAAE,MAAI,EAAE,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,CAAC;AAAE,UAAE,OAAO,GAAE,MAAI,sBAAsB,EAAE,IAAI,+CAA+C,CAAC,eAAe,EAAE,KAAK,GAAG;AAAA,MAAC;AAAC,QAAE,WAAW,SAAO,EAAE,WAAW,MAAM,SAAO,EAAE,OAAO,EAAE,UAAQ,EAAE,WAAW,MAAM,OAAM,MAAI,sBAAsB,EAAE,IAAI,8CAA8C,EAAE,WAAW,MAAM,KAAK,aAAa,EAAE,KAAK,EAAE;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,KAAE;AAAE,QAAI,IAAE,CAAC;AAAE,aAAQ,KAAK,GAAE;AAAC,UAAI,KAAG,KAAGA,MAAE,KAAK,gBAAc,QAAMA,QAAI,SAAO,SAAOA,IAAE,YAAU,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC;AAAE,WAAG,OAAK,EAAE,EAAE,IAAI,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,OAAO,KAAK,CAAC,EAAE,OAAO,OAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAG,CAAC;AAAE,aAAO,KAAK,MAAM,MAAM,CAAC,KAAG;AAAA,IAAI,CAAC;AAAE,QAAGA,IAAE,SAAO;AAAE,YAAM,IAAI,MAAM,uDAAuDA,GAAC,8BAA8B;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,EAAE,IAAI,CAAAA,QAAG;AAAC,UAAI,GAAE;AAAE,UAAI,KAAG,KAAG,IAAE,KAAK,gBAAc,QAAM,MAAI,SAAO,SAAO,EAAE,aAAW,QAAM,MAAI,SAAO,SAAO,EAAEA,GAAC;AAAE,aAAO,KAAG,OAAK,EAAE,OAAKA;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,MAAE,QAAQ,CAAAA,QAAG;AAAC,UAAG,CAAC,CAAC,IAAE,GAAGA,GAAC;AAAE,UAAG,CAAC,KAAK,MAAM,MAAM,CAAC;AAAE,cAAM,IAAI,MAAM,eAAeA,GAAC,6BAA6B;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,IAAE,CAAC,GAAEA,MAAE,CAAC,GAAE;AAAC,SAAK,wBAAsB,GAAE,KAAK,eAAaA;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,SAAK,sBAAsB,CAAC,IAAEA,IAAE,QAAO,KAAK,aAAaA,IAAE,EAAE,IAAEA;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,WAAO,KAAK,sBAAsB,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,aAAQ,KAAK,KAAK;AAAa,WAAK,aAAa,CAAC,EAAE,cAAc,GAAE,OAAO,KAAK,aAAa,CAAC;AAAE,aAAQ,KAAK,KAAK;AAAsB,WAAK,sBAAsB,CAAC,EAAE,QAAQ,GAAE,OAAO,KAAK,sBAAsB,CAAC;AAAA,EAAC;AAAC;AAAE,IAAI,KAAG;AAAP,IAA2B,KAAG;AAA9B,IAA2C,KAAG,MAAK;AAAA,EAAC,IAAI,eAAc;AAAC,WAAO,KAAK;AAAA,EAAO;AAAA,EAAC,IAAI,aAAY;AAAC,WAAO,KAAK,SAAS;AAAA,EAAU;AAAA,EAAC,IAAI,cAAa;AAAC,WAAO,KAAK,SAAS;AAAA,EAAW;AAAA,EAAC,IAAI,SAAQ;AAAC,WAAO,KAAK,SAAS;AAAA,EAAM;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS;AAAA,EAAO;AAAA,EAAC,IAAI,UAAS;AAAC,WAAO,KAAK,SAAS;AAAA,EAAS;AAAA,EAAC,IAAI,WAAU;AAAC,WAAO,KAAK,UAAU;AAAA,EAAmB;AAAA,EAAC,IAAI,iBAAgB;AAAC,WAAO,KAAK;AAAA,EAAS;AAAA,EAAC,IAAI,4BAA2B;AAAC,WAAO,KAAK;AAAA,EAAoB;AAAA,EAAC,YAAY,GAAEA,MAAE,CAAC,GAAE,IAAE,IAAG;AAAC,SAAK,WAAS,GAAE,KAAK,cAAYA,KAAE,KAAK,UAAQ,OAAM,KAAK,KAAG,GAAEA,OAAG,SAAO,KAAK,cAAY,CAAC,IAAG,KAAK,kBAAgB,IAAI;AAAA,EAAE;AAAA,EAAC,gBAAe;AAAC,QAAI,IAAE,KAAK;AAAS,QAAG,EAAE,QAAM;AAAK,WAAK,UAAQ;AAAA,aAAU,KAAK,YAAY,eAAa;AAAK,WAAK,UAAQ,KAAK,GAAG,mBAAmB,GAAE,KAAK,WAAW;AAAA,SAAM;AAAC,UAAIA,MAAE,KAAK,GAAG,gBAAgB,GAAE,KAAK,WAAW;AAAE,UAAGA,IAAE,WAAS;AAAE,QAAAA,IAAE,KAAK,KAAK,GAAG,mBAAmB,GAAE,KAAK,WAAW,CAAC;AAAA,eAAUA,IAAE,SAAO;AAAE,cAAM,IAAI,MAAM,wBAAwBA,IAAE,MAAM,4BAA4B,CAAC,CAAC,CAAC,GAAG;AAAE,WAAK,UAAQA,IAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAM;AAAC,QAAG,KAAK,cAAc,GAAE,KAAK,QAAQ,QAAM;AAAK,YAAM,IAAI,MAAM,+GAA+G;AAAE,QAAI,IAAE,KAAK,QAAQ,KAAK;AAAE,WAAO,EAAE,UAAU,CAAC,IAAE,EAAE,KAAK,CAAAA,QAAGA,IAAE,mBAAiB,OAAK,KAAK,SAASA,GAAC,IAAE,KAAK,cAAcA,GAAC,CAAC,IAAE,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,GAAG,cAAc,EAAE,YAAW,EAAE,WAAW;AAAE,WAAO,KAAK,kBAAkB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAG,EAAE,mBAAiB;AAAK,YAAM,IAAI,MAAM,gDAAgD;AAAE,QAAIA,MAAE,MAAM,GAAG,EAAE,gBAAgB,GAAE,EAAE,WAAW;AAAE,WAAO,KAAK,kBAAkB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,kBAAkB,GAAEA,KAAE;AAAC,SAAK,YAAU;AAAE,QAAI,IAAE,KAAK,UAAU,eAAc,IAAE,KAAK,UAAU;AAAU,QAAG,KAAK,UAAU,uBAAqB,MAAK;AAAC,UAAI,IAAE,KAAK,UAAU;AAAoB,QAAE,aAAW,SAAO,IAAE,EAAE,YAAW,EAAE,wBAAsB,SAAO,KAAK,uBAAqB,EAAE;AAAA,IAAqB;AAAC,QAAG,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAG,EAAE,SAAS,QAAQ,IAAI,EAAE,SAAS,WAAW,IAAG,KAAK,WAAS,IAAI,GAAG,GAAG,SAAS,eAAe,GAAE,KAAK,SAAS,CAAC,GAAE,KAAK,SAAS,YAAU,KAAK,6BAA6BA,GAAC,GAAE,KAAK,SAAS,kBAAgB,KAAK,iBAAgB,EAAE,oBAAkB,QAAM,EAAE,iBAAiB,QAAM,MAAK;AAAC,UAAI,IAAE,GAAG,SAAS,eAAe,EAAE,gBAAgB;AAAE,WAAK,cAAY,IAAI,GAAG,CAAC,GAAE,KAAK,YAAY,YAAU,KAAK,SAAS,WAAU,KAAK,YAAY,kBAAgB,KAAK,iBAAgB,KAAK,uBAAqB,EAAE;AAAA,IAAoB;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,MAAM,KAAK,GAAEA,KAAE;AAAC,QAAG,OAAO,KAAG,UAAS;AAAC,UAAI,IAAE,KAAK,GAAG,gBAAgB,CAAC;AAAE,UAAG,EAAE,WAAS;AAAE,cAAM,IAAI,MAAM,0CAA0C,CAAC,GAAG;AAAE,UAAG,EAAE,SAAO;AAAE,cAAM,IAAI,MAAM,wBAAwB,EAAE,MAAM,4BAA4B,CAAC,GAAG;AAAE,UAAE,EAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,QAAM;AAAK,YAAM,IAAI,MAAM,6GAA6G;AAAE,WAAO,EAAE,KAAK,KAAK,SAAS;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,QAAG,KAAK,sBAAqB;AAAC,UAAIA,MAAE,aAAa,KAAG,CAAC,CAAC,IAAE,GAAE,IAAE,CAAC;AAAE,aAAOA,IAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,KAAK,qBAAqB,CAAC,CAAC,IAAE,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,GAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,QAAI,IAAE,MAAM,KAAK,aAAa,GAAE,KAAK,WAAW;AAAE,WAAO,KAAK,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAIA;AAAE,QAAG,EAAE,aAAa,OAAK,CAAC,MAAM,QAAQ,CAAC,GAAE;AAAC,UAAI,KAAGA,MAAE,KAAK,eAAa,QAAMA,QAAI,SAAO,SAAOA,IAAE;AAAO,UAAG,KAAG;AAAK,iBAAQ,KAAK,GAAE;AAAC,cAAI,IAAE,EAAE,CAAC;AAAE,YAAE,cAAY,SAAO,EAAE,CAAC,IAAE,KAAK,0BAA0B,EAAE,UAAU;AAAA,QAAE;AAAC,aAAO;AAAA,IAAC;AAAC,QAAE,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAE,QAAI,IAAE,OAAO,KAAK,KAAK,yBAAyB,EAAE;AAAO,QAAG,EAAE,SAAO,MAAI,KAAK,WAAW;AAAO,YAAM,IAAI,MAAM,oDAAoD,KAAK,WAAW,SAAO,CAAC,+CAA+C,EAAE,MAAM,0BAA0B;AAAE,QAAI,IAAE;AAAE,WAAO,KAAK,WAAW,OAAO,CAAC,GAAE,MAAI;AAAC,UAAI,GAAE,GAAE;AAAE,UAAI,KAAG,KAAG,KAAG,IAAE,KAAK,eAAa,QAAM,MAAI,SAAO,SAAO,EAAE,YAAU,QAAM,MAAI,SAAO,SAAO,EAAE,CAAC,OAAK,QAAM,MAAI,SAAO,SAAO,EAAE;AAAW,aAAO,KAAG,OAAK,EAAE,CAAC,IAAE,KAAK,0BAA0B,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,GAAG,GAAE;AAAA,IAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAE;AAAC,WAAO,IAAE,KAAG,KAAK,aAAY,MAAM,QAAQ,CAAC,IAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,0BAAyB;AAAC,WAAO,KAAK,eAAa,OAAK,CAAC,IAAE,KAAK,wBAAsB,OAAK,KAAK,YAAY,QAAQ,CAAC,GAAE,CAAC,CAAC,IAAE,KAAK,YAAY,QAAQ,CAAC,GAAE,OAAO,KAAK,KAAK,qBAAqB,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,+BAA8B;AAAC,WAAO,KAAK,eAAa,OAAK,CAAC,IAAE,KAAK,wBAAsB,OAAK,KAAK,YAAY,aAAa,CAAC,GAAE,CAAC,CAAC,IAAE,KAAK,YAAY,aAAa,CAAC,GAAE,OAAO,KAAK,KAAK,qBAAqB,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAE;AAAC,QAAG,KAAK,4BAA0B,CAAC,GAAE,KAAK,sBAAqB;AAAC,UAAIA,MAAE,KAAK,qBAAqB,SAAQ,IAAE,OAAO,KAAKA,GAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,aAAK,0BAA0B,EAAE,UAAU,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,KAAK,wBAAwB,CAAC,GAAE,IAAE,KAAK,gBAAgB,CAAC,GAAEA,MAAE,KAAK,iBAAiBA,GAAC;AAAE,QAAI,IAAE,KAAK,SAAS,QAAQ,GAAEA,GAAC;AAAE,WAAO,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,aAAa,GAAEA,KAAE;AAAC,SAAK,6BAA2B,QAAM,KAAK,6BAA6B,MAAM,KAAK,6BAA6B,CAAC,GAAE,IAAE,KAAK,gBAAgB,CAAC,GAAEA,MAAE,KAAK,iBAAiBA,GAAC;AAAE,QAAI,IAAE,MAAM,KAAK,SAAS,aAAa,GAAEA,GAAC;AAAE,WAAO,EAAE,SAAO,IAAE,IAAE,EAAE,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,SAAS,uBAAuB;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,SAAS,2BAA2B;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAE;AAAC,WAAO,OAAO,KAAK,CAAC,EAAE,OAAO,CAACA,KAAE,OAAKA,IAAE,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC,GAAEA,MAAG,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,SAAK,SAAS,QAAQ,GAAE,KAAK,gBAAc,KAAK,YAAY,QAAQ,GAAE,KAAK,6BAA2B,GAAG,KAAK,yBAAyB,IAAG,KAAK,gBAAgB,QAAQ;AAAA,EAAC;AAAC;AAAE,eAAe,GAAGD,KAAE,IAAE,CAAC,GAAEC,MAAE,IAAG;AAAC,MAAGD,OAAG;AAAK,UAAM,IAAI,MAAM,wGAAwG;AAAE,OAAG,SAAO,IAAE,CAAC,IAAG,EAAE,aAAW,OAAOA,OAAG,aAAWA,MAAE,GAAGA,GAAC;AAAG,MAAI,IAAE,IAAI,GAAGA,KAAE,GAAEC,GAAC;AAAE,SAAO,MAAM,EAAE,KAAK,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,OAAG;AAAK,UAAM,IAAI,MAAM,sHAAsH;AAAE,MAAI;AAAE,MAAGA,eAAa,OAAM;AAAC,QAAG,CAAC,GAAE,CAAC,IAAEA;AAAE,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,kDAAkD;AAAE,QAAG,CAAC,KAAG,EAAE,aAAa;AAAa,YAAM,IAAI,MAAM,mEAAmE;AAAE,QAAG,EAAE,mBAAkB;AAAG,YAAM,IAAI,MAAM,uCAAuC;AAAE,QAAG,EAAE,qBAAoB;AAAG,YAAM,IAAI,MAAM,yCAAyC;AAAE,QAAI,IAAE,GAAG,eAAe,EAAE,eAAe,GAAE,IAAE,GAAG,6BAA6B,GAAE,GAAE,CAAC;AAAE,QAAE,GAAG,eAAe,CAAC;AAAA,EAAC,WAAS,UAASA;AAAE,QAAEA;AAAA,WAAU,mBAAkBA,OAAG,iBAAgBA,OAAG,gBAAeA;AAAE,QAAE,GAAG,eAAeA,GAAC;AAAA;AAAO,UAAM,IAAI,MAAM,sBAAsB;AAAE,MAAIC,MAAE,IAAI,GAAG,CAAC;AAAE,SAAOA,IAAE,KAAK,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE,SAAS,GAAG,MAAIA,MAAEA,MAAE,MAAK,GAAGA,GAAC,GAAG,EAAE,GAAG,EAAE;AAAE;AAAC,IAAI,KAAG;AAAS,SAAS,EAAEA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,yDAAyD;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,GAAG;AAAV,IAAoB,KAAG,MAAMD,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,UAAM,GAAE,KAAK,YAAU,IAAG,KAAK,WAAS,MAAG,KAAK,OAAK,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEC,KAAE,GAAE;AAAC,SAAK,aAAW,KAAK,WAAS,OAAG,EAAE,EAAE,IAAI,SAAS,KAAG,EAAE,KAAK;AAAA;AAAA;AAAA,6BAGthgD;AAAG,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,KAAK,IAAI,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,QAAI;AAAE,QAAGA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAA,IAAC;AAAM,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAE,WAAM,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,KAAK,IAAI,CAAC,IAAE,KAAK,KAAK,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,KAAK,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,KAAK,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,KAAK,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,KAAK,IAAI,GAAE,EAAC,QAAOA,KAAE,OAAM,GAAE,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,EAAC,OAAMA,KAAE,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAI,CAAC;AAAE,QAAGA,QAAI,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM;AAAE,aAAO,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC;AAAC,WAAO,EAAE,mCAAmC,KAAK,KAAK,IAAI,CAAC,EAAE,QAAOA,GAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAeA,KAAE,GAAE,CAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,KAAK,IAAI,CAAC,GAAE;AAAC,UAAG,KAAK,KAAK,IAAI,CAAC,EAAE,YAAW,CAACA,OAAG,KAAK,KAAK,IAAI,CAAC,EAAE,WAAS;AAAE,eAAM;AAAG,UAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,KAAK,IAAI,CAAC;AAAE,WAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,GAAE,KAAK,YAAY,EAAE,KAAK,QAAO,IAAE,IAAG,KAAK,KAAK,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,8BAA8B,GAAE;AAAC,SAAK,YAAY,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,EAAE,IAAI;AAAE,WAAO,EAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAEA,IAAC;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,MAAG,SAAQ,CAAC,oHAAoH,EAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAE;AAAC,MAAE,CAAC,CAAC,GAAE,OAAO;AAAE,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,WAAO,GAAG,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,UAAS;AAAC,WAAO,MAAM,QAAQ;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,oBAAmB,MAAI,IAAG,gBAAe,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,YAAW,MAAI,IAAG,WAAU,MAAI,IAAG,SAAQ,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,WAAU,MAAI,IAAG,cAAa,MAAI,IAAG,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,UAAS,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,SAAQ,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,SAAQ,MAAI,IAAG,cAAa,MAAI,IAAG,UAAS,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,IAAG,0BAAyB,MAAI,IAAG,WAAU,MAAI,IAAG,WAAU,MAAI,IAAG,aAAY,MAAI,IAAG,aAAY,MAAI,IAAG,eAAc,MAAI,IAAG,WAAU,MAAI,IAAG,yBAAwB,MAAI,IAAG,mBAAkB,MAAI,IAAG,4BAA2B,MAAI,IAAG,UAAS,MAAI,IAAG,uBAAsB,MAAI,IAAG,wBAAuB,MAAI,IAAG,kBAAiB,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,IAAG,4BAA2B,MAAI,IAAG,SAAQ,MAAI,IAAG,UAAS,MAAI,IAAG,UAAS,MAAI,IAAG,eAAc,MAAI,IAAG,YAAW,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAaA,IAAE,MAAM;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC;AAAE,MAAEA,GAAC,IAAE,KAAK,IAAID,IAAEC,GAAC,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,GAAE,EAAC,IAAEA,IAAE,QAAOC,MAAED,IAAE;AAAQ,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAO,IAAE,GAAG,CAAC,GAAEA,IAAE,WAAW,GAAE,EAAE,OAAM,EAAE,KAAK;AAAC;AAAjL,IAAmL,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAEA,IAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,eAAeA,GAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiBA,KAAE,CAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,CAAC,IAAED,IAAE,EAAE,IAAE,EAAE,MAAM,GAAE,EAAE,IAAE,EAAE,MAAM,CAAC;AAAA;AAAO,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,UAAE,CAAC,IAAEA,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAA,MAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAKA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC,GAAE,MAAKA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,WAAU;AAAC,MAAGA,QAAI,aAAY;AAAC,QAAI,IAAE,GAAGD,KAAE,GAAE,SAAS,GAAE,IAAE,GAAGA,KAAE,GAAE,SAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAEC,GAAC;AAAE,SAAOD,IAAE,eAAe,GAAEC,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,SAAOC,IAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,MAAI,SAAQ;AAAC,QAAI,IAAE,WAAW,KAAKD,GAAC;AAAE,WAAM,CAAC,GAAE,SAAQ,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI,QAAO;AAAC,QAAI,IAAE,EAAE,aAAa,CAAC,CAAC,GAAEC,GAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,CAAC,GAAE,MAAI,MAAI,IAAE,IAAE,CAAC,EAAE,GAAE,CAAC,GAAED,KAAE,GAAE,MAAM;AAAE,WAAM,CAAC,GAAE,QAAO,CAAC;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiCC,GAAC,OAAO,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAOA,OAAG,OAAK,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,MAAE,CAAC,GAAE,CAAC,GAAED,GAAC;AAAE,QAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,KAAG,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,IAAE,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAG,EAAE,UAAQ,eAAa,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,YAAW,EAAC,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,YAAW,EAAC,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAEC,IAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,KAAG,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiBA,KAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAEA,IAAE,QAAO,IAAE,EAAE,eAAeA,GAAC;AAAE,QAAG,EAAE,SAAO,EAAE,WAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,IAAE,EAAE,QAAO,IAAE,IAAE,EAAE,QAAO,IAAED,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,MAAI;AAAA;AAAM,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,CAAC;AAAE,UAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,CAAC;AAAE,YAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAEA,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,UAAE,CAAC,IAAE,EAAE,MAAK,EAAE,CAAC,IAAE,EAAE;AAAA,MAAI;AAAC,WAAM,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,KAAE,MAAK,IAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAEA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,KAAI;AAAC,QAAI,IAAEA,IAAE,CAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,SAAG,MAAI,IAAE,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG,CAAC,GAAEC,GAAC,GAAE,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAED,IAAE,IAAI,GAAE,CAAC;AAAE,UAAG,IAAE;AAAE,cAAM,IAAI,MAAM,+BAA+B;AAAE,WAAGC,QAAI,IAAE,EAAE,IAAI,GAAE,GAAE,CAAC,IAAE,EAAE,OAAK,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAE,EAAE,IAAI,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,IAAI,EAAE,IAAI,GAAE,CAAC,IAAE,GAAE,GAAE,CAAC;AAAA,IAAE;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,GAAEC,KAAE,MAAI;AAAC,QAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,IAAED,IAAE,EAAE,CAAC,GAAE,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE;AAAE,MAAE,GAAED,GAAC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO;AAAE,QAAG,EAAE,UAAQ,UAAS;AAAC,UAAG,CAAC,MAAM,QAAQ,CAAC;AAAE,cAAM,IAAI,MAAM,oDAAoD;AAAE,UAAE,EAAE,uBAAuB,CAAC;AAAA,IAAC;AAAM,UAAE;AAAE,QAAI,IAAEC,OAAG,EAAE,OAAM,IAAE,EAAE,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,EAAE;AAAtC,IAAwC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,cAAc,CAAC,CAAC;AAAE,MAAG,KAAGA,QAAI,UAAS;AAAC,QAAI,IAAE;AAAE,IAAAD,IAAE,QAAQ,OAAG;AAAC,UAAI,IAAE,EAAE,cAAc,EAAE,KAAK;AAAE,QAAE,IAAI,EAAE,MAAK,CAAC,GAAE,KAAG;AAAA,IAAC,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE;AAAE,IAAAA,IAAE,QAAQ,OAAG;AAAC,UAAI,IAAEC,QAAI,WAAS,EAAE,uBAAuB,EAAE,IAAI,IAAE,EAAE,MAAK,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,EAAE,CAAC,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE;AAAE,YAAE,IAAE,CAAC,IAAE,EAAE,GAAG;AAAA,MAAC;AAAC,WAAG,EAAE,MAAM,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,QAAI,IAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,SAAS;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,EAAE;AAAvC,IAAyC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,EAAE;AAAvC,IAAyC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,MAAMA,MAAE,CAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,IAAG,MAAK,OAAO;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,CAAC,GAAE,CAAC,GAAEA,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAED,IAAE,IAAE,IAAE,CAAC;AAAE,WAAG,IAAE,EAAE,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG,IAAE;AAAE,YAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwB,CAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,OAAO,IAAE,IAAE,CAAC,IAAE,EAAE,IAAI,GAAG,EAAE,WAAW,IAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGA,KAAED,IAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,OAAO,CAAC;AAAE,QAAI,IAAEA,IAAE,WAAW,CAAC;AAAE,SAAG,KAAG,IAAEA,IAAE,OAAO,WAAS,EAAE,OAAO,CAAC,IAAEA,IAAE,OAAO,CAAC;AAAA,EAAE;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,IAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,IAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,IAAE,IAAE,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAjD,IAAmD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,IAAE,IAAE,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAlD,IAAoD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,KAAG,IAAED,QAAIC,MAAE,IAAG,IAAE,EAAE,oBAAoBA,KAAE,SAAS;AAAE,IAAE,CAAC,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAAxB,IAA0B,KAAG,GAAG,IAAG,EAAE;AAArC,IAAuC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,uBAAuB,GAAE,EAAE,cAAcA,GAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAED,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,IAAE,CAAC;AAAE,OAAC,OAAO,MAAM,CAAC,KAAG,IAAE,OAAK,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,MAAE,IAAE,GAAE,MAAKD,MAAE,IAAE,IAAEC,IAAC,EAAE;AAApE,IAAsE,KAAG,GAAG,IAAG,IAAG,EAAE;AAApF,IAAsF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,IAAGA,GAAC;AAAE,SAAO,GAAG,CAAC,GAAE,GAAE,GAAED,KAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,QAAI,IAAE,IAAE,CAAC;AAA1B,IAA4B,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuBA,KAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAED,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAEC;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0BD,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,OAAO,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,WAAGC,IAAE,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAM,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAG,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE;AAAE,SAAO,MAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,IAAG,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAG,IAAE,KAAG,KAAGC,KAAE;AAAC,UAAI,IAAE,EAAE,WAAW,GAAE,EAAE,QAAO,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,GAAG;AAAE,YAAM,IAAI,MAAM,WAAW,CAAC,OAAO,CAAC,kBAAkBA,GAAC,GAAG;AAAA,IAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,KAAE;AAAC,QAAI,IAAED,IAAEC,GAAC,GAAE,IAAEA,QAAID,IAAE,SAAO,IAAE,IAAEA,IAAEC,MAAE,CAAC,EAAE;AAAO,QAAG,EAAE,WAAS;AAAE,YAAM,IAAI,MAAM,gCAAgC;AAAE,QAAG,EAAE,CAAC,IAAE;AAAE,YAAM,IAAI,MAAM,oCAAoC;AAAE,QAAG,EAAE,EAAE,SAAO,CAAC,IAAE;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAG,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,cAAM,IAAI,MAAM,iDAAiD;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,SAAO,IAAEA,IAAE,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,IAAI,MAAI,CAAC,CAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,SAAO,GAAE,EAAE,GAAE;AAAC,SAAG,EAAE,CAAC;AAAE,QAAI,IAAE,EAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,QAAE,CAAC,EAAE,KAAK,IAAE,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,SAAO;AAAE,UAAG,KAAG,GAAE;AAAC,YAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,YAAE,CAAC,EAAE,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,MAAC;AAAC,UAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,UAAI,MAAI,EAAE,KAAK,CAAC,GAAE,CAAC,CAAC,GAAE,KAAG,IAAE;AAAA,EAAE;AAAC,SAAM,EAAC,WAAU,GAAE,aAAY,GAAE,WAAU,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAO,EAAEC,KAAE;AAAC,QAAI,IAAED,IAAEC,GAAC,EAAE,QAAO,IAAE,EAAE,kBAAkB,SAAQ,CAAC;AAAE,MAAE,KAAK,CAAC,GAAED,IAAEC,GAAC,EAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAM,GAAE,CAAC;AAAE,SAAKC,IAAE,SAAO;AAAG,IAAAA,IAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,IAAAC,IAAE,IAAE,CAAC,KAAGD,IAAE,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,KAAKA;AAAE,aAAQ,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE,GAAE;AAAC,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,IAAE,IAAE,CAAC,IAAED,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE;AAAA,IAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,kBAAkBA,KAAE,EAAE,cAAc,CAAC,CAAC,GAAE,IAAED,IAAE,QAAO,IAAE,MAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,SAAO,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAGD,IAAE,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAG,EAAE,CAAC,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,CAAC,IAAE;AAAE,MAAG,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,WAAS;AAAE,UAAM,IAAI,MAAM,6BAA6B;AAAE,MAAI,IAAE,EAAE,CAAC,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,WAAU,EAAC,IAAE,GAAG,GAAE,GAAEA,KAAE,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAW,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAG,EAAE,SAAO;AAAE,UAAM,IAAI,MAAM,mCAAmC;AAAE,MAAI,IAAE,EAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,EAAE,WAAS,GAAE,IAAE,CAAC;AAAE,OAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAG,EAAE,CAAC,MAAI,EAAE,IAAE,CAAC;AAAE,YAAM,IAAI,MAAM,qDAAqD;AAAE,MAAI,IAAE,EAAE,WAAS,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,SAAQ,IAAE,CAAC;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAED,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,QAAG,MAAI;AAAE,YAAM,IAAI,MAAM,qBAAqB;AAAE,QAAI;AAAE,QAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE;AAAE,UAAE;AAAA,aAAU,IAAE,KAAK,KAAK,KAAK,KAAK,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE;AAAG,YAAM,IAAI,MAAM,yCAAyC,EAAE,EAAE;AAAE,MAAE,IAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAED,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,GAAG,IAAE,GAAE,KAAG;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE;AAAT,IAA0B,KAAG,MAAMA,IAAC;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,aAAWA,KAAE,KAAK,SAAO,GAAE,KAAK,cAAY,GAAE,KAAK,cAAY,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB,GAAE,KAAK,qBAAmB,GAAE,KAAK,2BAAyB,GAAE,KAAK,oBAAkB,EAAE,2BAA2B,CAAC,GAAE,KAAK,aAAW,EAAE,cAAc,KAAK,iBAAiB;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,kBAAkB,IAAE,CAAC,IAAE,KAAK,kBAAkB,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAE;AAAC,WAAO,KAAK,kBAAkB,CAAC,MAAI,GAAG,iBAAe,KAAK,mBAAmB,IAAE,CAAC,IAAE,KAAK,mBAAmB,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,sBAAsB,IAAE,CAAC;AAAE,YAAO,KAAK,+BAA+B,IAAE,CAAC,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAOD,IAAE,sBAAsBC,GAAC;AAAA,MAAE,KAAK,GAAG;AAAW,eAAOD,IAAE,oBAAoBC,GAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,gCAAgC,GAAG,KAAK,+BAA+B,IAAE,CAAC,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,OAAO,oBAAoB,GAAE;AAAC,QAAIA,MAAE,EAAE;AAAO,QAAGA,QAAI,KAAGA,QAAI;AAAE,aAAO;AAAE,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,MAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,UAAE,MAAI,IAAE;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,OAAO,sBAAsB,GAAE;AAAC,QAAIA,MAAE,EAAE;AAAO,QAAGA,QAAI;AAAE,aAAO;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,YAAI,MAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,GAAE,IAAE;AAAA,IAAE;AAAC,WAAO,KAAK,IAAIA,MAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,IAAE,MAAG;AAAC,QAAGA,IAAE,WAAS,GAAE;AAAC,UAAG,EAAE,CAAC,MAAI;AAAG,eAAM,CAAC;AAAE,YAAM,IAAI,MAAM,gFAAgF;AAAA,IAAC;AAAC,WAAO,GAAG,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,QAAIA,MAAE,KAAK,aAAY,IAAE,KAAK;AAAkB,MAAE,0BAA0B,GAAEA,GAAC;AAAE,QAAI,IAAE,KAAK,sBAAsB,KAAK,OAAM,KAAK,UAAU,GAAE,IAAE,EAAE,kCAAkC,KAAK,YAAW,GAAEA,GAAC;AAAE,MAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE;AAAG,aAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE;AAAE,QAAE,CAAC,IAAE,MAAI,EAAE,CAAC,IAAE,KAAK,YAAY,CAAC;AAAG,WAAO;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE,KAAGA;AAAE,QAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,KAAK,EAAE;AAAE,WAAO,EAAE,OAAO,EAAE,WAAS,GAAE,MAAI,yDAAyD,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,YAAI,OAAK,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,KAAK,CAAC,GAAE,KAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,UAAE,KAAK,EAAE;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,EAAE,WAAS,EAAE,IAAE,CAAC;AAAE,YAAM,IAAI,MAAM,yBAAyB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,QAAG,MAAI;AAAE,aAAM,CAAC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAGA,IAAE;AAAO,YAAM,IAAI,MAAM,yBAAyB,CAAC,4BAA4BA,IAAE,MAAM,EAAE;AAAE,QAAI,IAAEA,IAAE,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,MAAI;AAAE,aAAG,MAAI,EAAE,GAAE,IAAE,IAAE,KAAG,IAAE,IAAE;AAAA,WAAQ;AAAC,YAAG,IAAE,GAAE,IAAE,GAAE,KAAGA,IAAE;AAAO,gBAAM,IAAI,MAAM,sBAAsB,CAAC,2BAA2BA,IAAE,MAAM,EAAE;AAAE,YAAEA,IAAE,CAAC;AAAA,MAAC;AAAC,QAAE,KAAK,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,WAAS,EAAE;AAAO,YAAM,IAAI,MAAM,kBAAkB;AAAE,WAAO;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,sBAAsB,CAAC,GAAE,IAAE,KAAK,+BAA+B,CAAC;AAAE,YAAO,GAAE;AAAA,MAAC,KAAK,GAAG;AAAa,eAAO,KAAK,+BAA+B,GAAEA,KAAE,GAAE,CAAC;AAAA,MAAE,KAAK,GAAG;AAAW,YAAG,EAAE,SAAO,IAAEA,IAAE;AAAO,gBAAM,IAAI,MAAM,mDAAmD,EAAE,SAAO,CAAC,MAAMA,IAAE,MAAM,EAAE;AAAE,eAAO,KAAK,6BAA6B,GAAEA,KAAE,GAAE,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,+BAA+B,GAAG,CAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAI,IAAE,KAAK,mBAAmB,CAAC;AAAE,QAAG,KAAK,kBAAkB,WAAS;AAAE,YAAM,IAAI,MAAM,+BAA+B;AAAE,QAAIA,MAAE,KAAK,kBAAkB,CAAC;AAAE,YAAOA,KAAE;AAAA,MAAC,KAAK,GAAG;AAAe,eAAO,EAAE,CAAC;AAAA,MAAE,KAAK,GAAG;AAAa,cAAM,IAAI,MAAM,gDAAgD;AAAA,MAAE,KAAK,GAAG;AAAW,eAAO,KAAK,yBAAyB,CAAC,EAAE,CAAC,IAAE;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,sBAAsB,GAAGA,GAAC,CAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,mBAAmB,CAAC,EAAE,UAAQ;AAAE,YAAM,IAAI,MAAM,sEAAsE;AAAE,QAAIA,MAAE,KAAK,sBAAsB,GAAE,IAAE,KAAK,oBAAoBA,GAAC,GAAE,IAAE,IAAI,MAAM,KAAK,aAAW,CAAC;AAAE,MAAE,EAAE,SAAO,CAAC,IAAE;AAAE,aAAQ,IAAE,EAAE,SAAO,GAAE,KAAG,GAAE,EAAE;AAAE,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,QAAI,IAAE,GAAG,GAAE,KAAE,GAAE,IAAE,EAAE,kBAAkB,KAAK,aAAY,EAAE,cAAc,CAAC,CAAC;AAAE,QAAG,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,GAAE;AAAC,UAAI,IAAE,KAAK,gCAAgCA,KAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,KAAG,KAAK,YAAW,EAAE;AAAE,YAAE,KAAK,qBAAqB,IAAE,GAAE,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,WAAK,UAAU,KAAK,YAAW,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,EAAE,WAAS;AAAE;AAAO,QAAI,IAAE,KAAK,QAAO,IAAE,GAAE,IAAE,EAAE,MAAM;AAAE,QAAE,EAAE,MAAM,IAAE,CAAC;AAAE,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,QAAO,IAAE,KAAK;AAAa,QAAG,EAAE,WAAS,KAAG,EAAE,WAAS,GAAE;AAAC,UAAI,IAAE,KAAK;AAAkB,SAAG,MAAI;AAAC,YAAI,IAAE,EAAE,GAAE,CAAC;AAAE,YAAE,GAAG,GAAE,CAAC,EAAE,SAAS;AAAA,MAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAEA,IAAE,CAAC,IAAE;AAAG,UAAG,MAAI,GAAE;AAAC,UAAE;AAAE;AAAA,MAAQ;AAAC,UAAG,IAAE,GAAE;AAAC,YAAI,IAAE,EAAE,SAAS,IAAE,CAAC,GAAE,IAAE,EAAE,SAAS,IAAE,CAAC,GAAE,KAAG,IAAE,KAAG;AAAE,WAAG,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC,UAAG,KAAG,GAAE;AAAC,YAAI,IAAE,EAAE;AAAO,YAAE,KAAK,MAAM,IAAE,CAAC;AAAA,MAAC;AAAC,UAAG,IAAE;AAAE,YAAG,KAAK,aAAa,WAAS;AAAE,YAAE,SAAS,IAAE,GAAE,IAAE,CAAC,EAAE,KAAK,KAAK,aAAa,CAAC,CAAC,GAAE,IAAE;AAAA;AAAO,iBAAK,IAAE,KAAG;AAAC,gBAAI,IAAE,EAAE,MAAM,IAAE,CAAC;AAAE,eAAG,GAAE,GAAE,CAAC,GAAE,EAAE;AAAA,UAAC;AAAC,UAAE,KAAG,IAAE,IAAE,GAAE,IAAE,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,IAAE;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,WAAQ,IAAE,GAAE,IAAEA,KAAE;AAAI,IAAAD,IAAE,CAAC,IAAE,EAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC;AAAE,WAAQ,KAAKD,KAAE;AAAC,QAAG,IAAE,GAAE;AAAC,UAAG,CAAC;AAAE,cAAM,IAAI,MAAM,aAAa,CAAC,eAAe;AAAE,UAAG,IAAE;AAAG,cAAM,IAAI,MAAM,aAAa,CAAC,gBAAgB;AAAE,UAAE;AAAA,IAAE;AAAC,IAAAC,IAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQ;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,QAAI,GAAE,IAAEA,MAAE,KAAGC,MAAE,GAAE,IAAE,IAAED,OAAGC,MAAE;AAAE,MAAG,KAAG,KAAG;AAAE,WAAO,EAAE,oBAAoB,GAAE,CAAC;AAAE,MAAI,IAAE,KAAK,IAAI,KAAK,MAAM,IAAED,OAAGC,GAAC,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,MAAED,OAAGC,QAAI,MAAIA,MAAE,KAAI,EAAE,CAAC,IAAED;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAEC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,IAAE,KAAK,KAAKA,GAAC,CAAC;AAA3B,IAA6B,KAAG,GAAG,IAAG,EAAE;AAAxC,IAA0C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAED,IAAE,QAAO,IAAE,EAAE;AAAO,MAAG,MAAI;AAAE,WAAO,GAAGC,KAAE,EAAE,KAAK;AAAE,MAAI,IAAE,aAAa,KAAG,IAAE,GAAG,GAAE,EAAE,KAAK;AAAE,SAAO,KAAG,YAAU,OAAO,KAAG,WAAS,EAAE,OAAO,KAAK,CAAC,IAAE,OAAO,KAAG,aAAW,EAAE,OAAO,KAAK,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG,IAAE;AAAE,YAAM,IAAI,MAAM,oBAAoB,CAAC,wBAAwBA,GAAC,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,EAAE,OAAO,IAAE,IAAE,CAAC,KAAG,EAAE,IAAE,IAAE,CAAC,IAAE,EAAE,OAAO,IAAE,IAAE,CAAC,IAAE,EAAE,SAAO,IAAE,EAAE,CAAC,IAAE,EAAE,IAAE,IAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAD,QAAG,KAAG,IAAE,KAAK,IAAI,CAACA,GAAC,EAAE;AAA/B,IAAiC,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAG,IAAE,KAAK,IAAI,CAACA,GAAC,EAAE;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAG,iBAAiB,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,cAAcA,GAAC,GAAE,IAAE,EAAE,eAAe,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkB,GAAE,CAAC;AAAE,WAAO,MAAI,WAASD,IAAE,MAAM,GAAE,IAAE,CAAC,IAAEA,IAAE,SAAS,GAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAI,WAAS,EAAE,uBAAuBA,GAAC,IAAEA,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAGC,KAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO,MAAI,WAAS,EAAE,uBAAuB,EAAE,MAAM,IAAE,EAAE;AAAM;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,OAAO;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,KAAG,kBAAkB,GAAE,GAAE,CAAC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,GAAE;AAAC,QAAG,MAAI;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,kBAAkBA,KAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC;AAAE,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,MAAG,IAAE,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,IAAE,CAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,QAAG,KAAG;AAAE,YAAM,IAAI,MAAM,EAAE,kDAAkD,GAAE,GAAE,CAAC,CAAC;AAAE,MAAE,EAAE,CAAC,GAAE,IAAE,KAAG,KAAG,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,MAAI;AAAE,MAAE,CAAC,IAAE,GAAE,IAAE,KAAG,CAAC,GAAE,EAAE,CAAC,IAAE,KAAK,IAAI,EAAE,CAAC,GAAE,CAAC,GAAE,IAAE,MAAI,EAAE,CAAC,KAAG,EAAE,IAAE,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,GAAE;AAAC,QAAI,IAAEA,KAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,CAAC,IAAE;AAAE,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,IAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAED,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,KAAG,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC,KAAG;AAAE,QAAE,CAAC;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,IAAE,IAAE,CAAC,IAAEA,IAAE,IAAE,IAAE,CAAC;AAAE,QAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE,CAAC,IAAE;AAAA,IAAC;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAG,EAAE,CAAC,MAAI,GAAE;AAAC,YAAI,IAAE,MAAI,IAAE,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,IAAE,IAAE,CAAC,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,YAAE,IAAE,IAAE,CAAC,IAAE;AAAE,UAAE,CAAC,IAAE;AAAA,MAAC;AAAC,WAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,MAAI,IAAG;AAAC,UAAG,MAAI;AAAG,cAAM,IAAI,MAAM,EAAE,yDAAyD,GAAE,CAAC,CAAC;AAAE,UAAE,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC,OAAK;AAAC,UAAG,IAAE;AAAE,cAAM,IAAI,MAAM,EAAE,8CAA8C,GAAE,CAAC,CAAC;AAAE,WAAG,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAG,MAAI,IAAG;AAAC,QAAG,KAAG;AAAE,YAAM,IAAI,MAAM,EAAE,qDAAqD,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC;AAAE,QAAG,IAAE,MAAI;AAAE,YAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,UAAM,IAAI,MAAM,EAAE,gDAAgD,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,MAAG,IAAE,GAAE;AAAC,MAAE,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,MAAG,IAAE,GAAE;AAAC,MAAE,IAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkBA,KAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,WAAGD,IAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE,KAAK,MAAM,IAAE,EAAE,CAAC,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAO,IAAE,CAAC,EAAE,CAAC,GAAED,IAAE,SAAO,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,IAAE,IAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkBC,KAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAO,IAAE,KAAG,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAO;AAAC,QAAI,IAAE;AAAE,QAAG,IAAE,GAAE;AAAC,UAAG,IAAE,EAAE,CAAC,GAAE,MAAI,GAAE;AAAC,UAAE;AAAE;AAAA,MAAQ;AAAC,UAAG,KAAG;AAAE,cAAM,IAAI,MAAM,EAAE,6DAA6D,CAAC;AAAA,IAAC;AAAC,QAAG,IAAE,KAAG,KAAG;AAAE,YAAM,IAAI,MAAM,EAAE,yDAAyD,GAAE,CAAC,CAAC;AAAE,QAAE,KAAG,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,UAAG,IAAE,KAAG,KAAG,EAAE,CAAC;AAAE,cAAM,IAAI,MAAM,EAAE,uDAAuD,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,IAAE,IAAE,CAAC,KAAGD,IAAE,IAAE,IAAE,CAAC;AAAA,IAAC;AAAC,QAAG;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,IAAE,IAAE,CAAC,KAAG,IAAE;AAAE,QAAG,IAAE,GAAE,EAAE,GAAE,IAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE;AAAA,EAAK;AAAC,SAAO,IAAE,KAAG,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,GAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAzB,IAA2B,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAAnD,IAAqD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAED,MAAE;AAAE,SAAOC,MAAEA;AAAC,CAAC;AAAvC,IAAyC,KAAG,GAAG,IAAG,EAAE;AAApD,IAAsD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAI;AAAC,MAAG,EAAC,SAAQC,KAAE,eAAc,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAOD,IAAE,QAAQ,IAAI,OAAOC,KAAE,IAAE,MAAI,EAAE,GAAE,CAAC;AAAC,CAAC;AAAxG,IAA0G,KAAG,GAAG,IAAG,EAAE;AAArH,IAAuH,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAEC,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,YAAU,EAAE,aAAa,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,UAAQ,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,EAAE,aAAa,CAAC,GAAE,KAAK,WAAS,GAAE,KAAK,gBAAc;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,WAAO,KAAK,IAAI,KAAK,WAAS,IAAE,IAAE,IAAE,KAAK,UAAS,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,YAAYA,GAAC;AAAE,WAAO,KAAK,IAAI,GAAE,IAAE,IAAE,IAAEA,MAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,YAAY,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,KAAG,KAAG,IAAE,GAAG,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEA,OAAG,IAAE,IAAE,IAAE,IAAE,IAAG,IAAE;AAAE,WAAG,IAAE,KAAK,QAAQ;AAAO,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAG,EAAE,IAAE,CAAC,EAAE;AAAO,WAAG,IAAE,KAAK,SAAS;AAAO,UAAI,IAAE,IAAE,IAAE,IAAE;AAAE,WAAG,IAAE,KAAK,UAAU,QAAO,EAAE,IAAE,CAAC,IAAE,IAAI,WAAW,CAAC;AAAE,UAAI,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,OAAG,EAAE,QAAQ,OAAG,EAAE,GAAG,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,UAAE,KAAK,OAAO,GAAE,EAAE,KAAK,SAAS;AAAE,eAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,UAAE,EAAE,IAAE,CAAC,CAAC,GAAE,EAAE,KAAK,SAAS;AAAE,UAAG,IAAE,GAAE;AAAC,UAAE,EAAE,IAAE,IAAE,CAAC,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,YAAE,KAAK,SAAS,GAAE,EAAE,KAAK,QAAQ;AAAA,MAAC,OAAK;AAAC,iBAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE;AAAE,YAAE,KAAK,QAAQ,GAAE,EAAE,KAAK,SAAS;AAAE,UAAE,KAAK,QAAQ;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,QAAQ,GAAEA,KAAE;AAAC,QAAI,IAAE,EAAE,QAAO,IAAEA,IAAE;AAAO,QAAG,IAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC;AAAE,UAAG,MAAI;AAAE,cAAM,IAAI,MAAM,oCAAoC,CAAC,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAEA,IAAE,CAAC,KAAG;AAAE,YAAG,IAAE,KAAGA,IAAE,CAAC,KAAG,GAAE,CAAC;AAAE,gBAAM,IAAI,MAAM,uBAAuBA,IAAE,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG;AAAE,YAAEA,IAAE,CAAC;AAAA,MAAC;AAAC,UAAG,MAAI;AAAE,cAAM,IAAI,MAAM,gDAAgD,CAAC,SAAS,CAAC,EAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,kBAAkB,SAAQ,CAAC;AAAE,QAAG,MAAI,KAAG,MAAI,GAAE;AAAC,UAAI,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,KAAG,GAAE,EAAE;AAAE,UAAE,CAAC,IAAE;AAAE,aAAM,CAAC,GAAE,CAAC;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAK,YAAY,QAAQ,OAAG;AAAC,aAAG,KAAK,aAAa,GAAE,CAAC;AAAA,MAAC,CAAC,GAAE,KAAK,iBAAe,IAAE,KAAG,MAAI,MAAI,IAAE,IAAG,EAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,MAAM,EAAE,CAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAG,KAAK,YAAY,QAAQ,OAAG;AAAC,YAAI,IAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAE,KAAK,aAAa,GAAE,CAAC;AAAE,aAAK,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG;AAAA,MAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,EAAE,CAAC,GAAE;AAAC,YAAI,IAAEA,IAAE,IAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,YAAG,MAAI;AAAE;AAAS,YAAI,IAAE,IAAE,IAAE,KAAK;AAAS,aAAK,aAAa,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,WAAM,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAO,IAAI,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,EAAE,QAAQD,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAACD,IAAE;AAAO;AAAO,MAAG,EAAE,WAAS,GAAE;AAAC,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,QAAE,KAAKA,IAAE,SAAS,GAAE,IAAE,CAAC,CAAC;AAAE;AAAA,EAAM;AAAC,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,CAAC;AAAE,WAAK,MAAI,MAAI;AAAC,UAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,OAAC,CAACC,OAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAED,MAAEA,IAAE,SAAS,IAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,CAAC;AAAA,IAAC;AAAC,KAAC,CAACC,OAAGD,IAAE,WAAS,MAAI,EAAE,KAAKA,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE;AAAI,QAAG,MAAIA,IAAE,UAAQ,EAAE,QAAQA,IAAE,CAAC,CAAC,MAAI,IAAG;AAAC,UAAI,IAAEA,IAAE,SAAS,GAAE,CAAC;AAAE,OAAC,CAACC,OAAG,EAAE,WAAS,MAAI,EAAE,KAAK,CAAC,GAAE,IAAE,IAAE;AAAA,IAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,OAAGA,IAAE,CAAC,GAAE,GAAEC,KAAE,CAAC;AAAE,QAAI,IAAE,EAAE,SAAO;AAAE,MAAE,CAAC,IAAE,GAAE,KAAG,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQ,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,EAAE;AAAE,QAAE,IAAE,CAAC,IAAE,GAAE,EAAE,IAAE,IAAE,CAAC,IAAE,GAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAE;AAAE,SAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,kBAAkB,SAAQD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,EAAE;AAAE,IAAAC,IAAE,CAAC,IAAE,EAAE,cAAcD,IAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB;AAAE,SAAOC;AAAC;AAAC,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,CAACA,KAAE,GAAEC,KAAE,OAAK,EAAC,MAAKD,MAAEC,KAAE,MAAK,IAAE,EAAC,EAAE;AAA5D,IAA8D,KAAG,GAAG,IAAG,IAAG,EAAE;AAA5E,IAA8E,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,IAAE,IAAI;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO;AAAI,IAAAA,IAAE,CAAC,IAAED,IAAE,MAAM,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,GAAGC,KAAED,IAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,OAAO,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,MAAMA,IAAE,IAAI;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,MAAM,CAAC;AAAE,QAAI,IAAEA,IAAE,WAAW,CAAC;AAAE,MAAE,OAAO,CAAC,IAAEA,IAAE,OAAO,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAE,EAAE,QAAMD,IAAE;AAAM,SAAOC,QAAI,IAAED,IAAE,QAAM,EAAE,QAAMC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,GAAE,IAAED,IAAE,SAAO,GAAE;AAAC,SAAK,IAAEC,OAAG;AAAC,QAAG,IAAEA,MAAE,KAAI;AAAC,UAAI,IAAE,IAAEA,MAAE,GAAE,IAAE,IAAEA,MAAE,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,MAAG,KAAK,IAAI,IAAE,IAAE,CAAC,GAAE,IAAE,MAAG,KAAK,KAAK,IAAE,KAAG,IAAE,KAAG,CAAC,IAAE,KAAK,KAAK,IAAE,IAAE,CAAC,GAAE,IAAE,KAAK,IAAIA,KAAE,KAAK,MAAM,IAAE,IAAE,IAAE,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,KAAG,IAAE,KAAG,IAAE,IAAE,CAAC,CAAC;AAAE,SAAGD,KAAE,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,IAAEC,KAAE,IAAE;AAAE,SAAI,EAAE,KAAKD,KAAEC,KAAE,CAAC,GAAE,GAAGD,IAAE,CAAC,GAAE,CAAC,IAAE,KAAG,EAAE,KAAKA,KAAEC,KAAE,CAAC,GAAE,IAAE,KAAG;AAAC,WAAI,EAAE,KAAKD,KAAE,GAAE,CAAC,GAAE,KAAI,KAAI,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAG,YAAE,IAAE;AAAE,aAAK,GAAGA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAG,YAAE,IAAE;AAAA,IAAC;AAAC,OAAGA,IAAEC,GAAC,GAAE,CAAC,MAAI,IAAE,EAAE,KAAKD,KAAEC,KAAE,CAAC,KAAG,IAAE,IAAE,GAAE,EAAE,KAAKD,KAAE,GAAE,CAAC,IAAG,KAAG,MAAIC,MAAE,IAAE,IAAG,KAAG,MAAI,IAAE,IAAE;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,CAACD,IAAE,SAAO,GAAE,CAAC,GAAE,IAAE,EAAE,uBAAuBC,KAAE,IAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,SAAQ,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAED,IAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAC,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,IAAE,EAAE,WAAS,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,GAAE,CAAC,IAAG,KAAG,EAAE,KAAK,EAAE;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,SAAS,GAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,IAAE,EAAE,CAAC,EAAE;AAAA,EAAK;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,SAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAAC,GAAG,GAAEC,KAAE,CAAC,GAAE,GAAG,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAe,GAAEA,GAAC,EAAE,CAAC,GAAE,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,CAAC,KAAGA,IAAE,CAAC;AAAE,IAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,WAAQ,IAAE,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,MAAE,CAAC,KAAGA,IAAE,CAAC;AAAE,MAAI,IAAE,oBAAI,OAAI,IAAE,IAAI,WAAWA,IAAE,CAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAED,GAAC,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,CAAC,GAAE,KAAI;AAAC,QAAI;AAAE,QAAG;AAAE,UAAED,IAAE,CAAC,EAAE,SAAS;AAAA,SAAM;AAAC,UAAI,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,iBAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,YAAE,KAAK,EAAE,IAAI,GAAE,GAAE,CAAC,CAAC;AAAE,UAAE,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC;AAAE,QAAG,KAAG;AAAK,QAAE,CAAC,IAAE;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE;AAAK,QAAE,IAAI,GAAE,CAAC,GAAE,EAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAE,IAAE,CAAC,IAAE,EAAE;AAAK,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,aAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE;AAAI,UAAE,IAAI,EAAE,IAAI,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEC,IAAE,MAAM;AAAE,SAAO,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,EAAC,cAAa,EAAE,QAAO,aAAY,GAAE,SAAQ,EAAC;AAAC;AAAC,IAAI,KAAG;AAAS,GAAG,OAAM,MAAI,IAAI,MAAG,CAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAGA,OAAG,IAAEA,MAAE,KAAK,IAAIA,GAAC,IAAE,CAAC;AAApC,IAAsC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,uBAAuB,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,IAAE,IAAEA,MAAEA,GAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,SAAS;AAAE,SAAOA,IAAE,eAAe,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAI,GAAEA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAI,KAAK,IAAI,GAAEA,GAAC,GAAE,CAAC,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAGA,QAAI;AAAS,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI;AAAO,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI;AAAM,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI;AAAQ,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI;AAAQ,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,OAAM,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,MAAGC,QAAI;AAAY,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAGC,QAAI;AAAU,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQD,IAAC,CAAC;AAAE,QAAM,IAAI,MAAM,cAAcC,GAAC,gDAAgD;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E,GAAEC,IAAE,OAAO,EAAE,MAAM;AAAE,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM;AAAE,MAAG,EAAE,sBAAoB,MAAK;AAAC,QAAI,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB;AAAK,MAAE,QAAM,GAAE,EAAE,QAAM;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,IAAE,IAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,CAAC,EAAE,CAAC,GAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAG,IAAE,GAAE,KAAG,GAAG,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,KAAG,GAAG,QAAO,KAAGA,IAAE;AAAU,WAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,QAAI,KAAG,KAAG,GAAE,KAAG,KAAG;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,UAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,YAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,IAAG;AAAC,cAAI,KAAG,KAAK,IAAI,KAAG,IAAG,CAAC;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG;AAAK,qBAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,kBAAI,KAAG;AAAE,uBAAQ,KAAG,IAAG,KAAG,IAAG,MAAK;AAAC,oBAAI,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,CAAC,GAAE,KAAG,EAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAC,iBAAG,KAAG,MAAI,KAAG,IAAE,GAAG,KAAG;AAAA,YAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,GAAE,GAAG,OAAM,GAAG,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,GAAE,GAAE,GAAE,IAAE,CAAC;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,OAAM,EAAC,YAAW,GAAE,YAAW,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,IAAG,MAAI,IAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE;AAAG,WAAQ,KAAK;AAAE,IAAAA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,EAAE,KAAK,GAAE,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,KAAG;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,KAAG;AAAA,IAAC;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,IAAE,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,2BAA2B,UAAS,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,OAAO,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,IAAE,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,2BAA2B,UAAS,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,OAAO,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,UAAE,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAI,KAAK,MAAMA,KAAE,CAAC,CAAC;AAAhC,IAAkC,KAAG,GAAG,IAAG,EAAE;AAA7C,IAA+C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,QAAM,OAAO,oBAAkB,OAAO,mBAAkB,IAAE,GAAG,EAAE,UAASA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,oBAAI,SAAO,KAAG,IAAE,IAAE,KAAG,MAAI,UAAQ,KAAG,IAAG;AAAA,YAAI;AAAC,gBAAG,MAAM,CAAC;AAAE;AAAA,UAAK;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,CAAC,IAAE,MAAI,QAAM,IAAE,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAE,GAAG,EAAE,UAAS,OAAO,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,GAAG,GAAEA,KAAED,GAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,IAAE,IAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,IAAE,IAAE,GAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,kBAAE,MAAI,IAAE,GAAE,IAAE,IAAE,MAAI,IAAE,EAAE,WAAS,KAAG,EAAE,UAAQ,KAAG,EAAE,aAAW,KAAG,IAAE,EAAE,UAAQ,KAAG,EAAE,aAAW,IAAE,IAAE,IAAE,IAAE;AAAA,YAAE;AAAA,UAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,QAAM,OAAO,oBAAkB,OAAO,mBAAkB,IAAE,GAAG,EAAE,UAASA,GAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC,IAAE,EAAE,SAAS,CAAC,GAAE,IAAE,EAAE,SAAS,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,KAAG,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC,GAAE,KAAG,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE,GAAE,KAAG;AAAG,mBAAK,KAAG;AAAG,oBAAI;AAAE,gBAAI,KAAG,KAAK,IAAI,EAAE,SAAQ,IAAE,EAAE,GAAE,KAAG,KAAG,KAAG,GAAE,KAAG,GAAE,KAAG,GAAE,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,uBAAQ,KAAG,GAAE,KAAG,IAAG,MAAI,GAAE;AAAC,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC;AAAE,yBAAQ,KAAG,IAAG,KAAG,IAAG,MAAI,GAAE;AAAC,sBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAGD,IAAE,KAAG,CAAC;AAAE,sBAAG,MAAI,SAAO,KAAG,KAAG,KAAG,KAAG,MAAI,UAAQ,MAAI,IAAG,OAAM,MAAM,EAAE;AAAE;AAAA,gBAAK;AAAC,oBAAG,MAAM,EAAE;AAAE;AAAA,cAAK;AAAC,kBAAG,MAAM,EAAE;AAAE;AAAA,YAAK;AAAC,gBAAI,KAAG,KAAG;AAAE,cAAE,EAAE,IAAE,MAAI,QAAM,KAAG,KAAK,IAAI,IAAG,CAAC,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,EAAE,UAAS,OAAO,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,eAAK,IAAE;AAAG,eAAG;AAAE,YAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAK,IAAE;AAAG,iBAAG;AAAE,cAAI,IAAE,KAAK,IAAI,EAAE,UAAS,IAAE,CAAC;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAK,IAAE;AAAG,mBAAG;AAAE,gBAAI,IAAE,KAAK,IAAI,EAAE,SAAQ,IAAE,CAAC,GAAE,IAAE,OAAO,mBAAkB,IAAE;AAAG,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,IAAE,IAAE;AAAE,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,IAAE,IAAE;AAAE,yBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,sBAAI,IAAE,IAAE,GAAE,KAAGD,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,wBAAI,MAAI,IAAE,IAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAA,gBAAE;AAAA,cAAC;AAAA,YAAC;AAAC,YAAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,EAAE,UAAS,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,eAAe;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAE,KAAG,IAAE,IAAE,IAAG,IAAEC,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,kBAAI,MAAI,IAAE,MAAI;AAAE,kBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAI,yBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,sBAAI,MAAI,IAAE,MAAI;AAAE,sBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI;AAAI,6BAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,0BAAI,MAAI,IAAE,MAAI;AAAE,0BAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAG;AAAS,0BAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,4BAAI;AAAA,oBAAE;AAAA,gBAAC;AAAA,YAAC;AAAC,cAAE,IAAI,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI;AAAG,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI;AAAE;AAAS,oBAAI,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,qBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,IAAI,IAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,8EAA8E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,4EAA4E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,2EAA2E,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,WAAW;AAAE,MAAG,EAAC,iBAAgB,EAAC,IAAE;AAAE,OAAG,SAAO,IAAE;AAAM,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,SAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAE,IAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,SAAO,IAAI,aAAa,CAAC,CAAC,CAAC,GAAE,IAAE,IAAI,aAAa,EAAE,MAAM,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,MAAE,CAAC,IAAE,EAAE,GAAG,KAAG,EAAE,CAAC,IAAE,EAAE,GAAG,KAAG,EAAE,GAAG,IAAE,KAAK,KAAK,EAAE,GAAG,IAAE,CAAC,GAAE,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE,IAAG,KAAG,MAAI,IAAE;AAAG,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAE;AAAE,SAAOD,MAAEC,IAAE,eAAaA,IAAE,eAAaD,MAAEC,IAAE,eAAaA,IAAE,eAAaD;AAAC,CAAC;AAAtG,IAAwG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAA,QAAG;AAAC,MAAG,EAAC,GAAE,EAAC,IAAEA,IAAE,QAAOC,MAAED,IAAE,SAAQ,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,KAAK,MAAM,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,WAAW,GAAE,EAAE,OAAM,SAAS;AAAC;AAA5U,IAA8U,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,mBAAmB,MAAK,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,OAAM,EAAE,MAAK,EAAE;AAAE,MAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,KAAG,GAAE,KAAG,EAAE,WAAU,EAAE,IAAG;AAAC,UAAI,KAAG,IAAE,KAAG,GAAE,KAAG,KAAG,EAAE,eAAa;AAAE,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,KAAG;AAAE,YAAG,KAAG,KAAG,MAAI,EAAE;AAAS;AAAS,YAAI,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG;AAAE,iBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,KAAG,GAAE,KAAG,KAAG,EAAE,cAAY;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE;AAAQ;AAAS,gBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,KAAG,GAAE,KAAG;AAAG,qBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,kBAAI,KAAG,EAAE,KAAG,KAAG,CAAC;AAAE,uBAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE;AAAG,kBAAE,KAAG,KAAG,CAAC,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,EAAE;AAAA,YAAW;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,sBAAsB;AAAE,MAAI,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,KAAG,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,KAAG,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,aAAY,EAAE,GAAE;AAAC,cAAI,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,kBAAI,IAAE,IAAE,IAAE,IAAE;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,oBAAE,KAAG,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,KAAG,EAAE,IAAI,GAAE,GAAE,GAAE,EAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,EAAE;AAAA,cAAC;AAAA,YAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,qBAAqB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE;AAAE,MAAE,EAAE;AAAW,MAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,MAAI,gBAAe,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,QAAQ,CAAC,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,QAAQ,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC,GAAE,KAAG;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE;AAAG,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,IAAE,IAAG,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,EAAE,KAAG,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC;AAAC,cAAI,KAAG,IAAE,KAAG,KAAG,KAAG,KAAG,KAAG,KAAG;AAAG,YAAE,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,EAAC,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,eAAc,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,MAAK,IAAE,EAAE,KAAI,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,cAAY;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE;AAAQ;AAAS,YAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,eAAa;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE;AAAS;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,EAAE,CAAC;AAAE,qBAAQ,KAAG,GAAE,KAAG,EAAE,UAAS,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,aAAY,KAAG,KAAG,EAAE,cAAY;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG;AAAE,oBAAG,KAAG,KAAG,MAAI,EAAE;AAAQ;AAAS,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,KAAG,EAAE,YAAW,KAAG;AAAG,yBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,sBAAI,KAAG,EAAE,KAAG,EAAE;AAAE,2BAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE;AAAG,sBAAE,KAAG,EAAE,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,wBAAI,EAAE;AAAA,gBAAW;AAAA,cAAC;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,wBAAwB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ;AAAI,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,QAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG;AAAE,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,UAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG,IAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,MAAI,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,MAAI,CAAC,GAAE,KAAG,KAAG,IAAE;AAAG,iBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAE;AAAG,mBAAQ,KAAG,GAAE,KAAG,EAAE,aAAY,EAAE,IAAG;AAAC,gBAAI,KAAG;AAAE,qBAAQ,KAAG,GAAE,KAAG,EAAE,WAAU,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,GAAE,KAAG,KAAG;AAAE,uBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,yBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,sBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,2BAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,wBAAI,MAAI,KAAG,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE;AAAG,0BAAI,EAAE,KAAG,EAAE,IAAE,EAAE,KAAG,EAAE;AAAA,kBAAC;AAAA,gBAAC;AAAA,cAAC;AAAA,YAAC;AAAC,cAAE,KAAG,EAAE,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,SAAQ,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,UAAS,IAAG,WAAU,IAAG,UAAS,IAAG,aAAY,IAAG,cAAa,IAAG,aAAY,GAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,OAAM,KAAG,IAAE,IAAE,EAAE,QAAQ,KAAI,KAAG,IAAE,IAAE,EAAE,QAAQ;AAAK,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,KAAI,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG;AAAG,uBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG;AAAG,yBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,sBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,2BAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,wBAAI,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,0BAAI,KAAG;AAAA,kBAAE;AAAA,gBAAC;AAAA,cAAC;AAAA,YAAC;AAAC,cAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,UAAE;AAAA,QAAC;AAAA,MAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,SAAS,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,QAAG,KAAG;AAAE;AAAS,QAAI,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,KAAG,GAAE,IAAE,IAAE,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,KAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,UAAG,IAAE,KAAG,IAAE,IAAE,GAAE;AAAC,iBAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,gBAAI,IAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,cAAE,OAAO,CAAC,IAAE;AAAA,UAAC;AAAC;AAAA,MAAQ;AAAC,UAAG,MAAI,YAAW;AAAC,YAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,KAAK,CAAC,GAAE,IAAE,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,IAAE,IAAE,KAAG,IAAE,KAAG,KAAG,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,cAAG,KAAG,KAAG,KAAG,IAAE,GAAE;AAAC,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,kBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAE,OAAO,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAQ;AAAC,cAAI,KAAG,KAAK,MAAM,EAAE,GAAE,KAAG,KAAK,KAAK,EAAE,GAAE,KAAG,KAAG;AAAG,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE;AAAE,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAI,KAAG,EAAE,EAAE,GAAE,KAAG,MAAI,KAAG,MAAI,IAAG,KAAG,MAAI,KAAG,MAAI;AAAG,iBAAG,KAAG,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,EAAE,OAAO,EAAE,IAAE,MAAI,KAAG,MAAI;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAM,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE,OAAI,IAAE,MAAI,IAAE;AAAG,cAAG,IAAE,KAAG,IAAE,IAAE,GAAE;AAAC,qBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,kBAAI,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,gBAAE,OAAO,EAAE,IAAE;AAAA,YAAC;AAAC;AAAA,UAAQ;AAAC,cAAI,IAAE,KAAK,MAAM,CAAC,GAAE,KAAG,KAAK,MAAM,CAAC;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,KAAG,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,cAAE,OAAO,EAAE,IAAE,EAAE,EAAE;AAAA,UAAC;AAAA,QAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,OAAO,GAAE,IAAE,EAAE,mBAAmB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,UAAG,MAAI;AAAE,UAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,EAAE,MAAM,MAAM,EAAE,CAAC;AAAE,MAAG,MAAI,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,oDAAoD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,EAAE,OAAM,OAAO,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,MAAI,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,GAAE,CAAC;AAAE,UAAG,MAAI;AAAE,UAAE,CAAC,IAAE,IAAE,IAAE,EAAE,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,EAAE,GAAE,IAAE,CAAC;AAAE,UAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,qEAAqE,EAAE,MAAM,MAAM,GAAG;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,OAAO,MAAI,QAAO,MAAI,+DAA+D,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,KAAG;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,IAAE,KAAG,IAAE,KAAG,IAAE,IAAE;AAAI,YAAE,GAAG,IAAE,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,KAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,IAAE,IAAE,EAAE,eAAa;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,YAAG,IAAE,KAAG,KAAG,EAAE;AAAS;AAAS,YAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE,GAAE;AAAC,cAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,CAAC,GAAE,KAAG,IAAE,EAAE,cAAY;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI,EAAE;AAAQ;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,EAAE,YAAW,KAAG,IAAG,KAAG;AAAG,qBAAQ,KAAG,GAAE,KAAG,EAAE,YAAW,EAAE,IAAG;AAAC,kBAAI,KAAG,EAAE,KAAG,EAAE;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,kBAAE,KAAG,EAAE,KAAG,KAAG,EAAE,KAAG,EAAE;AAAE,oBAAI,GAAE,MAAI;AAAA,YAAC;AAAA,UAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAASG,IAAGJ,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,qCAAqC;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,aAAY,SAAS,GAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,YAAW,EAAE,WAAS,IAAE,KAAG,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,IAAE,KAAG,CAAC,CAAC,GAAE,IAAE,KAAK,IAAI,EAAE,WAAU,EAAE,UAAQ,IAAE,KAAG,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,aAAY,EAAE,GAAE;AAAC,YAAI,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,IAAE,IAAE;AAAE,qBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,kBAAI,KAAG,IAAE,KAAG,IAAE;AAAE,mBAAG,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC,IAAE,EAAE,IAAI,GAAE,GAAE,IAAG,CAAC;AAAA,YAAC;AAAA,UAAC;AAAC,UAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAWG,IAAE;AAAE,SAAS,GAAGJ,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,oCAAoC;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,SAAQ,SAAS,GAAE,IAAE,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,SAAQ,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,GAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,QAAQ,KAAI,KAAG,IAAE,IAAE,EAAE,QAAQ,MAAK,KAAG,IAAE;AAAE,WAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,aAAQ,KAAG,GAAE,KAAG,GAAE,EAAE;AAAG,eAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,YAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,CAAC,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,cAAI,KAAG,KAAG,IAAG,KAAG,KAAK,IAAI,GAAE,KAAK,KAAK,KAAG,EAAE,CAAC,GAAE,KAAG,KAAK,IAAI,IAAG,IAAE,MAAI,EAAE,GAAE,KAAG;AAAE,mBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,gBAAI,KAAG,KAAG,IAAE;AAAG,qBAAQ,KAAG,IAAG,KAAG,IAAG,EAAE,IAAG;AAAC,kBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,IAAE,KAAG,IAAE,KAAG,IAAE,IAAG,KAAG,KAAG,IAAE,IAAE,MAAI,KAAG,IAAE,IAAE,MAAI,IAAE;AAAG,uBAAQ,KAAG,GAAE,KAAG,IAAG,EAAE,IAAG;AAAC,oBAAI,KAAG,KAAG,KAAG,IAAG,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE;AAAE,sBAAI,KAAG;AAAA,cAAE;AAAA,YAAC;AAAA,UAAC;AAAC,YAAE,IAAE,KAAG,IAAE,KAAG,IAAE,KAAG,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,kBAAkB,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,KAAG,OAAO;AAAiB,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,KAAG,EAAE,WAAW,CAAC,GAAE,IAAG,IAAG,CAAC,GAAE,GAAE,EAAE,eAAe,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,WAAW,CAAC,IAAG,IAAG,CAAC,GAAE,GAAE,EAAE,eAAe,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,EAAE,IAAE,EAAE,EAAE;AAAE,uBAAG,OAAK,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,cAAI,KAAG,EAAE,WAAW,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE,EAAE,eAAe,CAAC,CAAC;AAAE,YAAE,EAAE,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC;AAAE,IAAE,OAAO,EAAE,SAAO,EAAE,QAAO,MAAI,YAAY,EAAE,0CAA0C,EAAE,MAAM,aAAa,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAE,cAAc,GAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,OAAO,kBAAiB,IAAE,GAAE,KAAG;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,uBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAEC,KAAE,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,EAAE,OAAM,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,EAAC,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,YAAW,GAAE,WAAU,GAAE,UAAS,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,GAAE,UAAS,EAAC,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC;AAAE,IAAE,OAAO,EAAE,SAAO,EAAE,QAAO,MAAI,YAAY,EAAE,0CAA0C,EAAE,MAAM,aAAa,EAAE,IAAI,EAAE;AAAE,MAAI,IAAE,EAAE,cAAc,GAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,EAAE,KAAK;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE;AAAK,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,IAAE,OAAO,kBAAiB,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,MAAI,KAAG,KAAG;AAAE,uBAAQ,KAAG,GAAE,KAAG,GAAE,EAAE,IAAG;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,MAAI,KAAG,KAAG,GAAE;AAAC,sBAAI,KAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAAE,uBAAG,MAAI,IAAE,IAAG,IAAE,IAAG,KAAG;AAAA,gBAAG;AAAA,cAAC;AAAA,UAAC;AAAC,YAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,EAAE,aAAa,GAAE,EAAE,KAAK,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,gBAAe,GAAE,cAAa,EAAC,IAAE,KAAG,CAAC,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,UAAQ,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,gBAAc;AAAK,MAAG,MAAI;AAAK,UAAM,IAAI,MAAM,gBAAgB,EAAE,WAAW,uCAAuC;AAAE,MAAI,IAAE,EAAE,WAAW,IAAG,KAAG,OAAK,SAAO,EAAE,sBAAoB,CAAC,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,kCAAkC,CAAC,QAAQ;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,YAAU,MAAI,GAAE,IAAE,IAAI,kBAAkB,IAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,GAAE,GAAE,MAAI,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,IAAE,CAAC;AAAE,UAAG,EAAE,UAAQ,WAAU;AAAC,YAAG,IAAE,KAAG,IAAE;AAAE,gBAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAA,MAAC,WAAS,EAAE,UAAQ,YAAU,IAAE,KAAG,IAAE;AAAK,cAAM,IAAI,MAAM,mFAAmF,CAAC,GAAG;AAAE,YAAI,KAAG,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,GAAE,EAAE,CAAC,IAAE,IAAE,KAAG,EAAE,CAAC,IAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,IAAE;AAAE,MAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,KAAK,MAAM,EAAE,CAAC,CAAC;AAAA,EAAC;AAAC,IAAE,QAAM,GAAE,EAAE,SAAO;AAAE,MAAI,IAAE,IAAI,UAAU,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,aAAa,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI;AAAE,IAAE,UAAQ,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,QAAO,EAAC,CAAC,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,WAAG,EAAE,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAGA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,IAAI,aAAa,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,SAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,IAAE;AAAA,EAAE;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAE;AAAT,IAAe,KAAG,EAAE;AAApB,IAA2B,KAAG,EAAE;AAAhC,IAAuC,KAAG,EAAE;AAA5C,IAAmD,KAAG,EAAE;AAAxD,IAA+D,KAAG,EAAE;AAApE,IAA2E,KAAG,GAAG,IAAG,CAAAD,QAAG;AAAC,MAAI,IAAE,KAAK,KAAKA,GAAC,GAAEC,MAAE,KAAK,IAAID,GAAC,GAAE,IAAE,KAAG,IAAE,KAAGC;AAAG,SAAO,KAAG,QAAM,KAAG,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,MAAI,IAAE,KAAK,IAAI,CAACA,MAAEA,GAAC;AAAE,CAAC;AAAnM,IAAqM,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAIA,MAAE,CAAC;AAApB,IAAsB,KAAG,GAAG,IAAG,EAAE;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,mBAAmB,MAAK,IAAE,EAAE,mBAAmB,MAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC,GAAE,IAAE,EAAE,uBAAuB,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,oBAAoB,GAAE,CAAC;AAAE,QAAE,IAAE,IAAE,CAAC,IAAE,EAAE,MAAK,EAAE,IAAE,IAAE,CAAC,IAAE,EAAE;AAAA,IAAI;AAAC,IAAAA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,GAAE,IAAEC,IAAE,KAAK,IAAID,IAAE,MAAM,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,mBAAmB,KAAK,MAAM,EAAE;AAAO,MAAG,GAAG,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,CAACD,IAAE,MAAM,CAAC,GAAEA,IAAE,MAAM,CAAC,CAAC;AAAE,QAAG,GAAE;AAAC,UAAI,IAAEC,IAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAEA,IAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,aAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,EAAC,MAAK,GAAE,MAAK,EAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,uBAAuB,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,UAAOA,MAAEA,MAAE,OAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAGA,QAAI;AAAE,WAAM,EAAC,MAAKD,KAAE,MAAK,EAAC;AAAE,MAAI,IAAE,EAAE,uBAAuBA,KAAE,CAAC,GAAE,IAAEC,MAAE,GAAE,IAAE,EAAE,qBAAqB,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,oBAAoB,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,MAAK,IAAE,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,UAAUA,KAAE,CAAC,GAAE,IAAE,CAAC,EAAE,KAAK,MAAM,GAAE,KAAG,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,KAAG,EAAE,eAAe,GAAE,WAAU,EAAE,IAAI,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,MAAK,IAAG,MAAK,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,IAAG,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,EAAC,OAAM,GAAE,GAAE,SAAQ,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,CAAC,IAAG,EAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,KAAG,GAAG,EAAC,QAAO,CAAC,IAAG,EAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,KAAG,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE,QAAO,KAAG,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE;AAAO,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAE,8BAA8B,EAAE,GAAE,EAAC,MAAK,IAAG,MAAK,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,SAAS,IAAE,GAAE,GAAEA,GAAC,GAAE,IAAE,EAAE,oBAAoBD,KAAE,CAAC;AAAE,WAAG,EAAE,OAAK,EAAE,OAAK,EAAE,OAAK,EAAE,MAAK,KAAG,EAAE,OAAK,EAAE,OAAK,EAAE,OAAK,EAAE;AAAA,IAAI;AAAC,IAAAC,QAAI,KAAG,GAAE,KAAG,IAAG,EAAE,mBAAmB,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,OAAGA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,EAAAD,IAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOA,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,IAAEC,KAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,cAAG,KAAG,KAAG,IAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAE,gBAAE,EAAE,CAAC;AAAA,UAAC;AAAC,YAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,EAAC,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAG,MAAI,UAAQ,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,IAAC;AAAM,UAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAAA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAG,MAAI,UAAQ,MAAI,WAAS,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,UAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,IAAC;AAAM,UAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,IAAAA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,EAAC,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE;AAAE,QAAE,GAAGA,KAAE,GAAE,GAAE,GAAE,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,UAAU;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,OAAG,SAAO,IAAE;AAAG,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,MAAGA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,OAAO,SAASA,GAAC,IAAE,IAAE,GAAE,MAAM;AAA7C,IAA+C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,MAAI,IAAE,IAAE,IAAE,GAAE,MAAM;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,OAAO,MAAMA,GAAC,IAAE,IAAE,GAAE,MAAM;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,MAAMA,GAAC,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,CAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAGA,MAAE,IAAE,GAAE,MAAM;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACA,KAAE,MAAIA,OAAG,CAAC;AAArB,IAAuB,KAAG,GAAG,IAAG,IAAG,MAAK,MAAM;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,aAAa,CAAC;AAAE,WAAS,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,IAAE,GAAE,CAAC,GAAE,IAAE;AAAE,WAAK,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,WAAG,IAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,KAAK,IAAI,IAAE,IAAE,GAAE,CAAC,CAAC;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,IAAI,GAAE,IAAE,IAAE,CAAC,GAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG,KAAK,IAAI,EAAE,CAAC,GAAE,CAAC;AAAE,QAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE;AAAE,YAAI,MAAI,KAAG,KAAK,IAAI,GAAE,CAAC,CAAC,IAAG,KAAG,EAAE,CAAC,GAAE,EAAE,CAAC,KAAG;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,IAAI,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,IAAE;AAAA,EAAC;AAAC,IAAE,GAAE,KAAK,GAAE,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE;AAAE,SAAO,MAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,IAAG,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,EAAE,UAAS,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,EAAE,eAAe,EAAE,KAAK,GAAE,GAAE,KAAK;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,WAAU,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,eAAe;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,gBAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,qBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,kBAAI,MAAI,IAAE,KAAG;AAAE,kBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAI,yBAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,sBAAI,MAAI,IAAE,MAAI;AAAE,sBAAG,EAAE,KAAG,KAAG,MAAI,EAAE,aAAW,KAAK,MAAM,EAAE,MAAI;AAAI,6BAAQ,KAAG,GAAE,KAAG,GAAE,MAAI,GAAE;AAAC,0BAAI,MAAI,IAAE,MAAI;AAAE,0BAAG,KAAG,KAAG,MAAI,EAAE,YAAU,KAAK,MAAM,EAAE,MAAI;AAAG;AAAS,0BAAI,KAAG,IAAE,IAAE,IAAE,IAAE,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC,GAAE,KAAG,IAAE,IAAE,IAAE,KAAG,IAAE,IAAG,KAAG,OAAK,KAAG,IAAE;AAAE,0BAAG,OAAK;AAAE;AAAS,0BAAI,KAAG,EAAE,IAAI,GAAE,IAAG,IAAG,IAAG,CAAC;AAAE,2BAAG,KAAG;AAAA,oBAAE;AAAA,gBAAC;AAAA,YAAC;AAAC,cAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,UAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,UAAS,EAAE,OAAM,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,GAAG,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,WAAU,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,WAAU,EAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,YAAW,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,UAAS,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,SAAQ,EAAE,GAAE;AAAC,cAAI,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,mBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,gBAAI,KAAG,IAAE,KAAG;AAAE,gBAAG,EAAE,IAAE,KAAG,KAAG,EAAE,aAAW,KAAK,MAAM,CAAC,MAAI;AAAG,uBAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,oBAAI,KAAG,IAAE,KAAG;AAAE,oBAAG,IAAE,KAAG,KAAG,EAAE,YAAU,KAAK,MAAM,CAAC,MAAI;AAAE;AAAS,oBAAI,KAAG,IAAE,IAAE,IAAE,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,IAAE,GAAE,KAAG,OAAK,KAAG,IAAE;AAAE,oBAAG,OAAK;AAAE;AAAS,oBAAI,KAAG,EAAE,IAAI,GAAE,GAAE,GAAE,CAAC;AAAE,qBAAG,KAAG;AAAA,cAAE;AAAA,UAAC;AAAC,YAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,QAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,KAAK,GAAE,IAAE,GAAGD,KAAE,GAAEC,KAAE,GAAE,MAAG,CAAC;AAAE,SAAM,CAAC,EAAE,QAAO,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,IAAEC;AAAE,IAAE,GAAE,mBAAmB;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,GAAE,EAAE,UAAS,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,GAAE,EAAE,UAAS,EAAE,KAAK;AAAE,SAAM,CAAC,EAAC,QAAO,GAAE,OAAM,EAAE,UAAS,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,GAAE,OAAM,EAAE,UAAS,OAAM,QAAO,CAAC;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,EAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,OAAC,OAAO,MAAM,CAAC,KAAG,IAAE,OAAK,IAAE;AAAA,IAAE;AAAC,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,OAAG,QAAMA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,WAAW;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,MAAI,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,KAAG,IAAE,EAAE,CAAC,IAAE;AAAG,QAAE,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOA,IAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAED,MAAE;AAAE,SAAOA,MAAE,KAAG,IAAE,KAAGA,OAAG,KAAG,KAAG,IAAEC,OAAGA,MAAE,KAAG;AAAC,CAAC;AAAlE,IAAoE,KAAG,GAAG,IAAG,EAAE;AAA/E,IAAiF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE;AAAE,MAAG,MAAI,OAAK,IAAE,IAAE,IAAG,MAAI,IAAE;AAAE,UAAM,MAAM,4EAA4E,CAAC,gBAAgB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,IAAE,GAAE,aAAa;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,GAAE,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,CAAC,GAAE,OAAO;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,EAAE,SAAS,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE;AAAE,QAAE,IAAE,CAAC,IAAE,EAAE;AAAO,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,YAAG,IAAE,EAAE,CAAC,GAAE;AAAC,YAAE,IAAE,CAAC,IAAE;AAAE;AAAA,QAAK;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE;AAAE,IAAE,GAAE,mBAAmB;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE;AAAE,IAAE,GAAE,yBAAyB;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG;AAAwB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE;AAAE,IAAE,GAAE,4BAA4B;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,aAAa,IAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,MAAE,CAAC,KAAG,KAAG,EAAE,CAAC,IAAE,MAAI,EAAE,IAAE,IAAE,EAAE,CAAC,CAAC,IAAE;AAAG,SAAOA,IAAE,eAAe,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,IAAE,GAAE,KAAK;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,CAAC;AAAE,QAAI,KAAG,EAAE,KAAK,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC,EAAE,IAAI,CAAC,GAAE,MAAI,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,GAAE,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAOA,IAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,CAACD,KAAE,MAAI,KAAK,IAAIA,KAAE,CAAC,CAAC;AAA9B,IAAgC,KAAG,GAAG,IAAG,EAAE;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAGC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,IAAI,OAAGA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,IAAEA,GAAC;AAAnB,IAAqB,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,EAAE,cAAc,CAAC,GAAE,GAAE,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI;AAAE,UAAE,IAAE,KAAG,IAAE,OAAI,MAAG,IAAE,IAAE;AAAE,UAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,KAAK,KAAK,CAAC,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI;AAAE,YAAE,IAAE,KAAG,IAAE,OAAI,MAAG,IAAE,IAAE;AAAE,YAAI,IAAE,KAAK,IAAI,GAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,KAAK,KAAK,CAAC,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,EAAE,IAAE,EAAE,GAAE,KAAG,EAAE,IAAE,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,EAAE,KAAG,EAAE,GAAE,KAAG,MAAI,KAAG,MAAI,GAAE,KAAG,MAAI,KAAG,MAAI,GAAE,KAAG,MAAI,KAAG,MAAI;AAAE,YAAE,GAAG,IAAE;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,oBAAoB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,KAAK,KAAK,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,KAAK,KAAK,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE,GAAE,KAAG,IAAE;AAAE,iBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,cAAI,KAAG,EAAE,GAAG;AAAE,YAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG,IAAG,EAAE,KAAG,EAAE,KAAG,KAAG;AAAA,QAAE;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,uBAAuB;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,KAAG,IAAE,OAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,IAAE,KAAK,MAAM,CAAC,CAAC;AAAE,YAAI,IAAE,KAAK,IAAI,GAAE,CAAC;AAAG,UAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,KAAG,IAAE,OAAI,IAAE,GAAE,IAAE,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,IAAE,KAAK,MAAM,CAAC,CAAC;AAAE,cAAI,IAAE,KAAK,IAAI,GAAE,CAAC;AAAG,YAAI,IAAE,IAAE,IAAE,EAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,EAAE,IAAE,CAAC;AAAE,YAAE,GAAG,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,CAAC,GAAE,2BAA2B;AAAE,MAAI,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,IAAI,aAAa,IAAE,IAAE,IAAE,CAAC,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE;AAAE,mBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,gBAAI,KAAG,KAAG;AAAE,gBAAG,KAAG,KAAG,MAAI;AAAE;AAAS,gBAAI,KAAG,IAAE,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,EAAE,IAAE,KAAK,MAAM,EAAE,CAAC;AAAE,gBAAG,MAAI;AAAG,uBAAQ,KAAG,GAAE,KAAG,GAAE,MAAK;AAAC,oBAAI,KAAG,KAAG;AAAE,oBAAG,KAAG,KAAG,MAAI;AAAE;AAAS,oBAAI,KAAG,KAAG,KAAG,EAAE,CAAC,GAAE,KAAG,KAAG,GAAE,KAAG,KAAK,IAAI,IAAE,GAAE,IAAE,KAAK,MAAM,EAAE,IAAE,KAAK,MAAM,EAAE,CAAC;AAAE,sBAAI,OAAK,KAAG,EAAE,KAAG,CAAC;AAAA,cAAE;AAAA,UAAC;AAAC,YAAE,IAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,SAAS;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,WAAW,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,MAAK,KAAI;AAAC,QAAI,IAAE,EAAE,WAAW,CAAC,GAAE,IAAE,EAAE,MAAM;AAAE,MAAE,QAAQ,OAAG,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,IAAE,EAAE,CAAC,CAAC,GAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAE,GAAG,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,EAAE,KAAK,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC,GAAE,IAAE,KAAI,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,KAAK,IAAI,CAAC,GAAE,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,KAAG,IAAE;AAAG,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,cAAI,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,KAAG,KAAG,IAAE,KAAG,GAAE,KAAG,IAAE,KAAG,KAAG,IAAE,KAAG;AAAE,cAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,KAAK,MAAM,IAAE,CAAC;AAAE,cAAI,IAAE;AAAE,cAAG,OAAO,KAAG,aAAW,MAAI,IAAE,IAAE,IAAE,IAAE,EAAE,CAAC,IAAG,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,IAAE,GAAE;AAAC,gBAAI,IAAE,KAAG,IAAE,IAAG,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,IAAE;AAAE,gBAAE,EAAE,CAAC;AAAA,UAAC;AAAC,cAAI,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,CAAC,IAAE;AAAA,QAAC;AAAA,MAAC;AAAA,IAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG;AAAC,MAAI,IAAE,KAAK,MAAMA,GAAC;AAAE,SAAOA,MAAE,IAAE,MAAG,KAAK,MAAMA,GAAC,IAAEA,MAAE,IAAE,MAAG,KAAK,KAAKA,GAAC,IAAE,IAAE,MAAI,IAAE,IAAE,IAAE;AAAC,CAAC;AAAnG,IAAqG,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,MAAG,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE;AAAG,QAAE,KAAK,OAAOA,MAAE,KAAG,CAAC,GAAED,IAAE,CAAC,IAAE,IAAEC,MAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAE,IAAED,IAAE,QAAO,IAAE;AAAE,SAAKC,MAAE;AAAG,QAAE,KAAK,OAAOA,MAAE,KAAG,CAAC,GAAED,IAAE,CAAC,KAAG,IAAEC,MAAE,IAAE,IAAE,IAAE;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,kBAAkB,SAAQA,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE,EAAE,GAAE;AAAC,QAAI,IAAED,IAAE,MAAM,IAAE,IAAG,IAAE,KAAG,CAAC,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,QAAE,IAAE,CAAC,IAAE,MAAI,SAAO,GAAG,GAAE,EAAE,IAAE,CAAC,CAAC,IAAE,GAAG,GAAE,EAAE,IAAE,CAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE;AAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,MAAI,KAAG,IAAE,KAAG,EAAE,MAAM,WAAS,IAAE,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,QAAE,CAAC,MAAI,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC,IAAE,EAAE,GAAG,IAAE,EAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAE;AAAT,IAAyB,KAAG,EAAE;AAA9B,IAAyC,KAAG,GAAG,IAAG,CAAAD,QAAGA,OAAG,IAAE,KAAGA,MAAE,MAAI,KAAK,IAAIA,GAAC,IAAE,EAAE;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAGA,MAAE,IAAE,KAAGA,MAAE,IAAE,IAAE,CAAC;AAA9B,IAAgC,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA6B,KAAG,KAAK,IAAI,EAAE,IAAE;AAA7C,IAA+C,KAAG,GAAG,IAAG,CAAAA,QAAG;AAAC,MAAI,IAAEA,MAAE,CAAC,IAAGC,MAAED,MAAE,IAAG,IAAE,KAAK,IAAIA,GAAC,GAAE;AAAE,SAAOC,MAAE,IAAE,IAAE,IAAE,IAAED,MAAE,IAAE,KAAK,IAAI,IAAE,CAAC,GAAE;AAAC,CAAC;AAApI,IAAsI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,CAAC,CAAC,GAAE,gBAAgB;AAAE,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UAC5ixG,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACnjB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAKC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,MAAM,KAAKA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,YAC9mB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,YACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACvhB,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI,EAAE,MAAM,CAAC;AAAE,UAAM,IAAI,MAAM,+CAA+C;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,OAAG,IAAEC,IAAE,WAAW,CAAC,GAAE;AAAE,UAAO,EAAE,OAAM;AAAA,IAAC,KAAI,QAAO;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,CAAC,CAACA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,WAAU;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,SAAQ;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAI,UAAS;AAAC,UAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAAE,UAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC;AAAQ,YAAM,IAAI,MAAM,oBAAoB,EAAE,KAAK,EAAE;AAAA,EAAC;AAAC,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAEC,IAAC,IAAED,KAAE,IAAE;AAAE,IAAEC,KAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,KAAK,IAAIA,IAAE,MAAM,EAAE,QAAO,IAAE,IAAI,aAAa,EAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,CAAC,IAAE,IAAE;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAEA,IAAE,OAAMA,IAAE,KAAK,GAAE,OAAMA,IAAE,OAAM,OAAMA,IAAE,MAAK;AAAC,EAAC;AAAE,IAAI,KAAG,GAAG,IAAG,CAACD,KAAE,MAAI;AAAC,MAAIC,MAAE;AAAE,SAAO,MAAMD,GAAC,IAAE,MAAIA,MAAE,IAAE,IAAEC,IAAE;AAAK,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE;AAAE,IAAE,GAAE,cAAc;AAAE,MAAG,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAACA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAD,QAAG,KAAK,IAAIA,GAAC,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,CAAAA,QAAG,KAAK,KAAKA,GAAC,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,OAAG,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAE,GAAGC,IAAE,WAAW,CAAC,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE;AAAE,IAAE,GAAE,MAAM;AAAE,MAAI,IAAEC,IAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAEC,KAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,uBAAuB,EAAE,OAAM,EAAE,cAAc,CAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE;AAAO,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,MAAM,CAAC,MAAI,IAAE,IAAE,EAAE,SAAS,IAAE,GAAE,IAAE,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE,EAAE;AAAE,iBAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,cAAI,GAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE;AAAE,cAAG,MAAI;AAAE;AAAS,cAAI,KAAG,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,GAAE,MAAI,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,GAAE,KAAG,GAAG,GAAE,GAAE,CAAC,GAAE,KAAG,GAAG,IAAG,GAAE,CAAC;AAAE,kBAAO,GAAE;AAAA,YAAC,KAAI;AAAU,kBAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,YAAM,KAAI;AAAW,kBAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,CAAC;AAAE;AAAA,YAAM;AAAQ,oBAAM,IAAI,MAAM,+DAA+D,CAAC,EAAE;AAAA,UAAC;AAAC,cAAI,KAAG,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,YAAE,EAAE,IAAE;AAAA,QAAC;AAAC,WAAO,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAM,EAAC,QAAO,EAAE,MAAM,GAAE,GAAE,EAAE,KAAK,GAAE,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAI;AAAU,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAI;AAAO,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAI;AAAU,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAI;AAAA,IAAW;AAAQ,aAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAGC,MAAE;AAAE,QAAG,KAAG;AAAE,MAAAA,MAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAE;AAAE,MAAAA,MAAE,MAAIA,MAAE,IAAE,KAAK,MAAM,CAACA,MAAE,CAAC,IAAEA,MAAGA,MAAEA,MAAE,CAAC,IAAEA,MAAE,IAAE,CAACA,MAAE;AAAA,IAAC;AAAA,WAASA,MAAE,IAAE;AAAE,QAAG,KAAG;AAAE,MAAAA,MAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAE;AAAE,MAAAA,OAAG,IAAE,KAAK,MAAMA,MAAE,CAAC,GAAEA,OAAG,MAAIA,MAAE,IAAEA,MAAE;AAAA,IAAE;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAGC,MAAE;AAAE,QAAG,KAAG;AAAE,MAAAA,MAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAE;AAAE,MAAAA,OAAG,KAAG,KAAK,MAAM,CAACA,MAAE,CAAC,IAAE;AAAA,IAAE;AAAA,WAASA,MAAE,IAAE;AAAE,QAAG,KAAG;AAAE,MAAAA,MAAE;AAAA,SAAM;AAAC,UAAI,IAAE,IAAE;AAAE,MAAAA,OAAG,IAAE,KAAK,MAAMA,MAAE,CAAC;AAAA,IAAC;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,EAAE,MAAM,GAAEA,KAAE,IAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,SAAO,KAAG,KAAG,IAAE,KAAG,KAAG,KAAG,IAAEA,MAAED,IAAE,CAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,MAAM,CAAC;AAAE,SAAO,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,KAAG,IAAE,KAAG,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,UAAO,IAAE,KAAG,KAAG,IAAE,KAAG;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,GAAE,QAAQ;AAAE,MAAI,IAAE,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE;AAAE,IAAE,GAAE,oBAAoB;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,IAAE,EAAC,EAAC,CAAC;AAAE,QAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,OAAO,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,OAAM,YAAW,GAAE;AAAE,IAAI,KAAG,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK;AAAG,KAAGA,GAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,kBAAiB,MAAI,IAAG,yBAAwB,MAAI,IAAG,+BAA8B,MAAI,IAAG,oCAAmC,MAAI,IAAG,iBAAgB,MAAI,IAAG,oCAAmC,MAAI,IAAG,cAAa,MAAI,IAAG,kBAAiB,MAAI,IAAG,sBAAqB,MAAI,IAAG,mBAAkB,MAAI,IAAG,eAAc,MAAI,IAAG,yBAAwB,MAAI,IAAG,0BAAyB,MAAI,IAAG,eAAc,MAAI,IAAG,oBAAmB,MAAI,IAAG,aAAY,MAAI,IAAG,qBAAoB,MAAI,IAAG,4BAA2B,MAAI,IAAG,wBAAuB,MAAI,IAAG,gBAAe,MAAI,IAAG,2BAA0B,MAAI,IAAG,kCAAiC,MAAI,IAAG,aAAY,MAAI,IAAG,cAAa,MAAI,IAAG,iCAAgC,MAAI,IAAG,mCAAkC,MAAI,IAAG,sBAAqB,MAAI,IAAG,wBAAuB,MAAI,IAAG,cAAa,MAAI,IAAG,oCAAmC,MAAI,IAAG,+BAA8B,MAAI,IAAG,eAAc,MAAI,IAAG,qBAAoB,MAAI,IAAG,uBAAsB,MAAI,IAAG,aAAY,MAAI,IAAG,2BAA0B,MAAI,IAAG,qBAAoB,MAAI,IAAG,0BAAyB,MAAI,IAAG,mCAAkC,MAAI,IAAG,mBAAkB,MAAI,IAAG,qBAAoB,MAAI,IAAG,iBAAgB,MAAI,IAAG,qBAAoB,MAAI,GAAE,CAAC;AAAE,IAAI,KAAG,CAAC;AAAR,IAAU,KAAG,EAAC,OAAM,OAAG,WAAU,OAAG,oBAAmB,OAAG,uBAAsB,OAAG,OAAM,OAAG,SAAQ,OAAG,8BAA6B,KAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,GAAC,IAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAEA,OAAK,OAAK,KAAG,MAAK;AAAC,QAAI,IAAE,GAAGA,KAAE,CAAC;AAAE,QAAG,MAAI;AAAK,SAAGA,GAAC,IAAE;AAAA;AAAO,aAAO,QAAQ,IAAI,2CAA0CA,GAAC,GAAE;AAAA,EAAI;AAAC,MAAIC,MAAE,GAAGD,GAAC;AAAE,SAAOC,OAAG,QAAMA,IAAE,cAAc,KAAG,OAAO,GAAGD,GAAC,GAAE,GAAGA,GAAC,MAAIC,IAAE,QAAQA,IAAE,UAAU,GAAEA,IAAE,QAAQA,IAAE,YAAY,GAAEA,IAAE,QAAQA,IAAE,KAAK,GAAEA,IAAE,QAAQA,IAAE,MAAM,GAAEA,IAAE,QAAQA,IAAE,mBAAmB,GAAEA,IAAE,QAAQA,IAAE,eAAe,GAAEA,IAAE,OAAOA,IAAE,YAAY,GAAEA,IAAE,OAAOA,IAAE,SAAS,GAAEA,IAAE,SAASA,IAAE,IAAI,GAAE,GAAGD,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,CAAC,EAAE,EAAE,QAAQ,WAAW,KAAG,OAAO,mBAAiB,eAAaA,QAAI;AAAE,WAAO,IAAI,gBAAgB,KAAI,GAAG;AAAE,MAAG,OAAO,YAAU;AAAY,WAAO,SAAS,cAAc,QAAQ;AAAE,QAAM,IAAI,MAAM,wCAAwC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,KAAGA,QAAI;AAAE,UAAM,IAAI,MAAM,wDAAwD;AAAE,MAAIC,MAAE,KAAG,OAAK,GAAGD,GAAC,IAAE;AAAE,SAAOC,IAAE,iBAAiB,oBAAmB,OAAG;AAAC,MAAE,eAAe,GAAE,OAAO,GAAGD,GAAC;AAAA,EAAC,GAAE,KAAE,GAAE,EAAE,EAAE,QAAQ,wBAAwB,MAAI,GAAG,+BAA6B,QAAIA,QAAI,IAAEC,IAAE,WAAW,SAAQ,EAAE,KAAGA,IAAE,WAAW,sBAAqB,EAAE,IAAEA,IAAE,WAAW,UAAS,EAAE;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,eAAa,CAAC,IAAE;AAAc,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,WAAS,CAAC,IAAE;AAAU,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,mBAAiB,CAAC,IAAE,oBAAmBA,IAAEA,IAAE,mBAAiB,CAAC,IAAE,oBAAmBA,IAAEA,IAAE,2BAAyB,CAAC,IAAE,4BAA2BA,IAAEA,IAAE,qBAAmB,CAAC,IAAE,sBAAqBA,IAAEA,IAAE,qBAAmB,CAAC,IAAE;AAAoB,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,CAAC,GAAEA,GAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAOA,MAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAE,cAAcA,GAAC,GAAEC,MAAE,KAAK,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,oBAAoBA,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,CAAC,KAAK,IAAI,GAAE,KAAK,KAAK,IAAE,CAAC,CAAC,GAAE,KAAK,IAAI,GAAE,KAAK,KAAKA,MAAE,CAAC,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,CAACC,KAAE,CAAC,IAAE,GAAGD,KAAE,CAAC;AAAE,SAAOC,MAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAG,IAAEC,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEA,IAAE,SAAQ,IAAEA,IAAE,SAAQ,IAAEA,IAAE,KAAI,IAAE,GAAE,IAAE,GAAE,IAAEA,IAAE,YAAW,IAAEA,IAAE,OAAM,IAAEA,IAAE,UAAQ,IAAED,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEA,IAAE,MAAK,IAAEC,IAAE,MAAK,IAAED,IAAE,MAAK,IAAE,GAAE,IAAE,GAAE,IAAE,KAAG,OAAK,EAAE,iBAAe,MAAK,IAAEA,IAAE,OAAM,IAAEA,IAAE,OAAM,EAAC,qBAAoB,GAAE,yBAAwB,GAAE,+BAA8B,GAAE,2BAA0B,GAAE,oBAAmB,GAAE,uBAAsB,GAAE,2BAA0B,GAAE,oBAAmB,GAAE,sBAAqB,GAAE,kBAAiB,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE;AAAE,SAAO,EAAE,EAAE,QAAQ,OAAO,KAAG,GAAGD,GAAC,GAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,SAAS;AAAE,MAAG,MAAIA,IAAE;AAAS,UAAM,IAAI,MAAM,kBAAgB,GAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG;AAAP,IAAe,KAAG;AAAM,SAAS,GAAGA,KAAE;AAAC,SAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,8BAA8B,KAAGA,QAAI,KAAG,KAAG,KAAK,IAAIA,GAAC,KAAG,KAAK,IAAIA,GAAC,IAAE;AAAG;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAKA,IAAE;AAAS,aAAM;AAAA,IAAW,KAAKA,IAAE;AAAa,aAAM;AAAA,IAAe,KAAKA,IAAE;AAAc,aAAM;AAAA,IAAgB,KAAKA,IAAE;AAAkB,aAAM;AAAA,IAAoB,KAAKA,IAAE;AAA8B,aAAM;AAAA,IAAgC,KAAKA,IAAE;AAAc,aAAM;AAAA,IAAgB,KAAKA,IAAE;AAAmB,aAAM;AAAA,IAAqB;AAAQ,aAAM,sBAAsB,CAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,aAAa,CAAC,GAAE,gBAAc,IAAE,kCAAkC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,aAAa,GAAE,sCAAsC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAaC,KAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcC,GAAC,CAAC,GAAED,IAAE,mBAAmBC,KAAED,IAAE,cAAc,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,iBAAiBC,GAAC,CAAC,GAAE,IAAI,MAAM,kCAAkC;AAAE,SAAOA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAaA,IAAE,eAAe,GAAE,wCAAwC;AAAE,MAAG,GAAGA,KAAE,MAAIA,IAAE,aAAaC,KAAE,CAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcC,GAAC,CAAC,GAAE,EAAE,EAAE,IAAI,qBAAqB;AAAE,WAAOA;AAAE,MAAGD,IAAE,mBAAmBC,KAAED,IAAE,cAAc,MAAI;AAAG,UAAM,GAAG,GAAEA,IAAE,iBAAiBC,GAAC,CAAC,GAAE,IAAI,MAAM,oCAAoC;AAAE,SAAOA;AAAC;AAAC,IAAI,KAAG;AAA2B,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,KAAK,CAAC;AAAE,MAAGA,OAAG,MAAK;AAAC,YAAQ,IAAI,wCAAwC,CAAC,EAAE,GAAE,QAAQ,IAAID,GAAC;AAAE;AAAA,EAAM;AAAC,MAAI,IAAE,CAACC,IAAE,CAAC,GAAE,IAAED,IAAE,MAAM;AAAA,CACp5c,GAAE,IAAE,EAAE,OAAO,SAAS,EAAE,SAAO,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,UAAU,IAAE,GAAG,SAAS,GAAE,CAAC,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,KAAK,IAAI,EAAE,CAAC,EAAE,QAAO,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,UAAQ,IAAI,EAAE,KAAK;AAAA,CACjN,CAAC,GAAE,QAAQ,IAAI,EAAE,MAAM;AAAA,CACvB,EAAE,CAAC,CAAC,GAAE,QAAQ,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC,GAAE,CAAC,CAAC,IAAG,+DAA+D,GAAE,QAAQ,IAAI,EAAE,KAAK;AAAA,CACjI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,MAAIA,IAAE,YAAY,CAAC,CAAC,GAAE,CAAC,EAAE,EAAE,IAAI,qBAAqB,KAAGA,IAAE,oBAAoB,GAAEA,IAAE,WAAW,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,kBAAkB,CAAC,CAAC,GAAE,IAAI,MAAM,6CAA6C;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,GAAGA,KAAE,MAAIA,IAAE,gBAAgB,CAAC,CAAC,GAAEA,IAAE,oBAAoB,GAAEA,IAAE,eAAe,MAAI;AAAG,UAAM,QAAQ,IAAIA,IAAE,kBAAkB,CAAC,CAAC,GAAE,IAAI,MAAM,mCAAmC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAaC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,GAAEA,IAAE,WAAW,CAAC,GAAEC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,8BAA8B;AAAE,SAAO,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqBC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqB,GAAEA,IAAE,WAAW,CAAC,GAAEC;AAAC;AAAC,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,IAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAE,gCAAgC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,EAAE,EAAE,UAAU,wBAAwB;AAAE,MAAGD,OAAG,KAAG,KAAG,GAAE;AAAC,QAAI,IAAE,IAAIA,GAAC,IAAI,CAAC;AAAI,UAAM,IAAI,MAAM,4BAA0B,IAAE,cAAc;AAAA,EAAC;AAAC,MAAGA,MAAEC,OAAG,IAAEA,KAAE;AAAC,QAAI,IAAE,IAAID,GAAC,IAAI,CAAC,KAAI,IAAE,IAAIC,GAAC,IAAIA,GAAC;AAAI,UAAM,IAAI,MAAM,4BAA0B,IAAE,uDAAqD,IAAE,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAO,GAAGA,KAAE,MAAIA,IAAE,kBAAkB,GAAE,oCAAoC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,kBAAkB,GAAEC,GAAC;AAAE,SAAO,MAAI,KAAG,SAAI,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAa,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,oBAAoB,GAAE,GAAEA,IAAE,OAAM,OAAG,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,wBAAwB,CAAC,CAAC,GAAE;AAAG;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAEC,GAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAASC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,KAAE,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,WAAS,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,mBAAmB,GAAEC,GAAC,GAAE,cAAYA,MAAE,2BAA2B;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAOD,IAAE,mBAAmB,GAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,KAAGD,KAAE,MAAI,GAAGA,KAAE,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,UAAUC,KAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,KAAGA,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,SAAS,GAAE,GAAEA,IAAE,OAAO,OAAMA,IAAE,OAAO,MAAM,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,QAAQ,GAAE,GAAEA,IAAE,OAAO,OAAMA,IAAE,OAAO,MAAM,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAYC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,GAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,KAAGA,KAAE,MAAIA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,MAAK,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,uBAAuBA,IAAE,WAAW;AAAE,MAAG,MAAIA,IAAE;AAAqB,UAAM,IAAI,MAAM,gCAA8B,GAAGA,KAAE,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAKA,IAAE;AAAkC,aAAM;AAAA,IAAoC,KAAKA,IAAE;AAA0C,aAAM;AAAA,IAA4C,KAAKA,IAAE;AAAkC,aAAM;AAAA,IAAoC,KAAKA,IAAE;AAAwB,aAAM;AAAA,IAA0B;AAAQ,aAAM,iBAAiB,CAAC;AAAA,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,GAAGD,KAAE,MAAI,EAAE,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAMC,GAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,mCAAiC,GAAE,IAAE,IAAEA,IAAE;AAAS,MAAG,IAAEA,IAAE,YAAU,IAAEC,KAAE;AAAC,QAAI,IAAE,2BAA2BA,GAAC;AAAI,UAAM,IAAI,MAAM,0BAA0B,CAAC,GAAG;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,GAAE;AAAC,SAAO,EAAE,cAAcA,IAAE,MAAM,GAAEA,IAAE,SAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,IAAE,WAAS;AAAE,UAAM,MAAM,sDAAsD;AAAE,SAAM,CAACA,IAAE,SAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC,IAAE,GAAEA,IAAEA,IAAE,SAAO,CAAC,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,WAAS,KAAGA,IAAE,WAAS,KAAGA,IAAE,CAAC,MAAI,MAAI,IAAE,CAAC,GAAGA,GAAC,GAAE,GAAG,GAAGA,GAAC,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAE,EAAE,EAAE,UAAU,wBAAwB,GAAE,IAAE,EAAE,EAAE,UAAU,mCAAmC;AAAE,QAAI,IAAE,KAAG,EAAE,EAAE,QAAQ,0CAA0C,MAAI,IAAEA,MAAE,IAAG,MAAIA,MAAEA,MAAE,GAAE,IAAE,IAAE,GAAED,MAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,KAAGA,IAAE,SAAO,IAAE,EAAE,kBAAkBA,IAAE,CAAC,CAAC,IAAEA,IAAE,CAAC,CAAC,GAAEA,IAAE,WAAS,MAAIA,MAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,KAAIA,IAAE,WAAS,MAAIA,MAAE,EAAE,aAAaA,GAAC,EAAE;AAAU,MAAI,IAAE,EAAE,cAAcA,GAAC,GAAE,IAAE;AAAK,EAAAA,IAAE,UAAQ,KAAG,KAAGC,MAAE,IAAE,CAAC,GAAE,CAAC,IAAED,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAED,MAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,KAAGC,MAAE,IAAE,CAACD,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,IAAEA,IAAE,WAAS,KAAGA,IAAE,CAAC,KAAGC,OAAGD,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,KAAGC,QAAI,IAAE,CAACD,IAAE,CAAC,GAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC;AAAG,MAAI,IAAE,KAAG,QAAM,KAAK,IAAI,GAAG,CAAC,IAAE,KAAG,KAAK,IAAI,GAAG,CAAC,MAAI,IAAE,IAAE,MAAI,KAAK,IAAI,GAAG,CAAC,IAAE;AAAE,MAAG,KAAG,QAAM;AAAE,QAAG,GAAE;AAAC,UAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAE,IAAE;AAAE,MAAAA,IAAE,WAAS,CAAC,GAAE,CAAC,IAAE,GAAGA,GAAC,IAAG,IAAE,KAAG,IAAE,MAAI,IAAE,IAAG,IAAE,EAAE,oBAAoB,CAAC,EAAE,IAAI,OAAG,IAAE,CAAC;AAAA,IAAC;AAAM,UAAE,EAAE,oBAAoB,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,MAAE,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,MAAEA,IAAE,MAAM,EAAE,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,EAAE,YAAYA,KAAE,CAAC,KAAG,CAACA,IAAE,UAAQ,CAAC,EAAE,UAAQA,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI;AAAE,WAAM;AAAG,MAAGA,IAAE,WAAS,EAAE,QAAO;AAAC,QAAIC,MAAED,IAAEA,IAAE,SAAO,CAAC,GAAE,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,QAAGC,QAAI,KAAG,GAAGA,GAAC,KAAG,GAAG,CAAC,MAAID,IAAE,CAAC,MAAI,KAAG,EAAE,CAAC,MAAI;AAAG,aAAM;AAAA,EAAE;AAAC,SAAOA,IAAE,CAAC,MAAI,EAAE,CAAC,KAAG,GAAGA,IAAE,CAAC,CAAC,KAAG,GAAG,EAAE,CAAC,CAAC;AAAC;AAAC,IAAI;AAAJ,IAAO;AAAG,SAAS,GAAGA,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,GAAGA,GAAC;AAAE,SAAG,EAAE,aAAa,EAAE,gBAAgB;AAAA,EAAC;AAAC,SAAO;AAAE;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,KAAI;AAAC,OAAG;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,GAAGA,GAAC;AAAE,SAAG,EAAE,aAAa,EAAE,uBAAuB;AAAA,EAAC;AAAC,SAAO,KAAK,IAAI,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAO;AAAE,MAAI,GAAEC,MAAE,GAAGD,GAAC;AAAE,SAAO,GAAGC,KAAE,iCAAiC,KAAGD,QAAI,IAAE,IAAE,IAAE,GAAGC,KAAE,0BAA0B,IAAE,IAAE,IAAE,IAAE,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAOA,IAAE,aAAa,CAAC,KAAG;AAAI;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG;AAAC,QAAG,GAAGA,GAAC,KAAG;AAAK,aAAM;AAAA,EAAE,SAAO,GAAE;AAAC,WAAO,QAAQ,IAAI,sCAAqC,CAAC,GAAE;AAAA,EAAE;AAAC,SAAM;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAG,GAAE,mBAAmB;AAAE,aAAM;AAAA,EAAE,WAAS,CAAC,GAAG,GAAE,wBAAwB;AAAE,WAAM;AAAG,SAAO,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAG,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAGA,QAAI,GAAE;AAAC,QAAG,CAAC,GAAG,GAAE,mBAAmB,KAAG,CAAC,GAAG,GAAE,0BAA0B;AAAE,aAAM;AAAA,EAAE,OAAK;AAAC,QAAG,GAAG,GAAE,wBAAwB;AAAE,aAAO,GAAG,CAAC;AAAE,QAAI,IAAE;AAA8B,QAAG,GAAG,GAAE,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,aAAa,CAAC;AAAE,aAAO,GAAG,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAC,SAAO,GAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,GAAGA,GAAC,GAAEC,MAAED,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAWC,GAAC,GAAED,IAAE,WAAWA,IAAE,YAAW,GAAE,EAAE,qBAAoB,GAAE,GAAE,GAAE,EAAE,oBAAmB,EAAE,kBAAiB,IAAI;AAAE,MAAI,IAAEA,IAAE,kBAAkB;AAAE,EAAAA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,GAAEA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAWC,KAAE,CAAC;AAAE,MAAI,IAAED,IAAE,uBAAuBA,IAAE,WAAW,MAAIA,IAAE;AAAqB,SAAOA,IAAE,YAAYA,IAAE,YAAW,IAAI,GAAEA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,GAAEA,IAAE,cAAcC,GAAC,GAAED,IAAE,kBAAkB,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAGD,KAAE,CAAC,GAAE,IAAEA,IAAE,cAAc;AAAE,EAAAA,IAAE,YAAYA,IAAE,YAAW,CAAC,GAAEA,IAAE,WAAWA,IAAE,YAAW,GAAEC,IAAE,yBAAwB,GAAE,GAAE,GAAEA,IAAE,oBAAmBA,IAAE,sBAAqB,IAAI;AAAE,MAAI,IAAED,IAAE,kBAAkB;AAAE,EAAAA,IAAE,gBAAgBA,IAAE,aAAY,CAAC,GAAEA,IAAE,qBAAqBA,IAAE,aAAYA,IAAE,mBAAkBA,IAAE,YAAW,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,uBAAuBA,IAAE,WAAW,MAAIA,IAAE;AAAqB,SAAOA,IAAE,YAAYA,IAAE,YAAW,IAAI,GAAEA,IAAE,gBAAgBA,IAAE,aAAY,IAAI,GAAEA,IAAE,cAAc,CAAC,GAAEA,IAAE,kBAAkB,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,QAAI,IAAE,QAAG,GAAGA,GAAC,EAAE,aAAW;AAAI;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,2DAA2D;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,aAAY,MAAI,GAAG,UAAU,eAAe,IAAE,CAAC;AAAE,GAAG,aAAa,iBAAgB,MAAI,GAAG,CAAC,IAAE,IAAE,GAAG,CAAC,IAAE,IAAE,CAAC;AAAE,GAAG,aAAa,kCAAiC,MAAI,KAAE;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,IAAI,eAAe,MAAI,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,IAAE;AAAE,GAAG,aAAa,4BAA2B,MAAI,KAAE;AAAE,GAAG,aAAa,cAAa,MAAI,GAAG,QAAQ,WAAW,CAAC;AAAE,GAAG,aAAa,4BAA2B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,mBAAkB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,4BAA2B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,+BAA8B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,uBAAsB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,qBAAoB,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,8BAA6B,MAAI,GAAG,QAAQ,YAAY,CAAC;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gDAA+C,MAAI;AAAC,MAAID,MAAE,GAAG,UAAU,eAAe;AAAE,SAAOA,QAAI,IAAE,IAAE,GAAGA,GAAC;AAAC,CAAC;AAAE,GAAG,aAAa,iDAAgD,MAAI,GAAG,UAAU,8CAA8C,IAAE,KAAG,CAAC,GAAG,SAAS,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,QAAQ,0BAA0B,IAAE,QAAG,GAAG,QAAQ,8BAA8B,CAAC;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,2BAA0B,MAAI,GAAG,GAAG,UAAU,eAAe,CAAC,CAAC;AAAE,GAAG,aAAa,6BAA4B,MAAI,GAAG,QAAQ,8BAA8B,IAAE,IAAE,CAAC;AAAE,GAAG,aAAa,kCAAiC,MAAI,IAAG,CAAAA,QAAG;AAAC,MAAG,OAAOA,OAAG;AAAS,UAAM,IAAI,MAAM,2DAA2DA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI;AAAG,UAAM,IAAI,MAAM,8FAA8FA,GAAC,GAAG;AAAC,CAAC;AAAE,GAAG,aAAa,yBAAwB,MAAI,GAAG,SAAS,IAAE,IAAE,IAAG,CAAAA,QAAG;AAAC,MAAG,OAAOA,OAAG;AAAS,UAAM,IAAI,MAAM,kDAAkDA,GAAC,GAAG;AAAE,MAAGA,MAAE,KAAGA,QAAI;AAAG,UAAM,IAAI,MAAM,2FAA2FA,GAAC,GAAG;AAAC,CAAC;AAAE,GAAG,aAAa,8BAA6B,MAAI,GAAG;AAAE,GAAG,aAAa,6BAA4B,MAAI,KAAE;AAAE,GAAG,aAAa,4CAA2C,MAAI,GAAG;AAAE,GAAG,aAAa,gCAA+B,MAAI,GAAG;AAAE,GAAG,aAAa,kBAAiB,MAAI,KAAE;AAAE,GAAG,aAAa,0BAAyB,MAAI,GAAG,QAAQ,SAAS,CAAC;AAAE,GAAG,aAAa,qCAAoC,MAAI,IAAE,CAAC;AAAE,GAAG,aAAa,4CAA2C,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,KAAE;AAAE,SAAS,KAAI;AAAC,MAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAE,SAAO,EAAE,EAAE,UAAU,eAAe,MAAI,KAAGD,MAAE,mBAAkB,IAAE,MAAKC,MAAE,OAAM,IAAE,MAAK,IAAE,WAAU,IAAE,eAAc,IAAE,yBAAwB,IAAE,EAAE,EAAE,QAAQ,qBAAqB,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYh6U,IAAG,IAAE,IAAG,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASRD,MAAE,IAAG,IAAE,aAAYC,MAAE,WAAU,IAAE,WAAU,IAAE,aAAY,IAAE,gBAAe,IAAE,IAAG,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQnF,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OASF,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQD,EAAC,SAAQD,KAAE,WAAU,GAAE,WAAUC,KAAE,WAAU,GAAE,WAAU,GAAE,QAAO,GAAE,cAAa,GAAE,kBAAiB,GAAE,kBAAiB,GAAE,aAAY,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAM,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,MAAM,CAAC,KAAG,YAAYA,IAAE,CAAC,CAAC,MAAM,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAE,EAAE,eAAe,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOD,IAAE,CAAC,CAAC,MAAMC,GAAC,sBAAsB,CAAC,KAAI,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,sBAAsB,CAAC,MAAI,YAAYA,IAAE,CAAC,CAAC,sBAAsB,CAAC;AAAI,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAE,IAAE,IAAI,MAAMC,MAAE,CAAC;AAAE,IAAEA,MAAE,CAAC,IAAE,EAAEA,MAAE,CAAC;AAAE,WAAQ,IAAEA,MAAE,GAAE,KAAG,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,SAAQ;AAAC,MAAI,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAOA,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAM,EAAE,CAAC,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAOD,IAAE,IAAE,CAAC,CAAC,MAAMC,GAAC,MAAMD,IAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAG,YAAYA,IAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,EAAE,eAAeA,GAAC,EAAE,IAAI,CAAAC,QAAGA,IAAE,SAAS,CAAC;AAAE,SAAM;AAAA;AAAA,wBAE9iC,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAAA;AAAA;AAEhD;AAAC,SAAS,KAAI;AAAC,SAAM;AAAA;AAAA;AAAA;AAAA;AAIrB;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCP,IAAG,EAAC,kBAAiB,GAAE,IAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,MAAGD,IAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,EAAE,cAAc,EAAE,UAAU,YAAY;AAAE,QAAG,EAAE,UAAU,YAAU,EAAE,KAAK,iBAAiB,EAAE,IAAI,GAAG,IAAE,IAAE,IAAI,CAAC,MAAI,EAAE,GAAG,KAAG,EAAE,KAAK,qBAAqB,EAAE,IAAI,GAAG,GAAE,EAAE,KAAK,qBAAqB,EAAE,IAAI,GAAG,IAAGC,IAAE,qBAAoB;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAGA,IAAE,cAAa,EAAE,UAAU,cAAa,EAAE,UAAU,QAAQ;AAAE,cAAO,EAAE,QAAO;AAAA,QAAC,KAAK;AAAE,YAAE,KAAK,eAAe,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM,KAAK;AAAE,YAAE,KAAK,iBAAiB,EAAE,IAAI,QAAQ;AAAE;AAAA,QAAM;AAAQ;AAAA,MAAK;AAAC,QAAE,KAAK,iBAAiB,EAAE,IAAI,WAAW;AAAA,IAAC;AAAA,EAAC,CAAC,GAAEA,IAAE,qBAAoB;AAAC,YAAO,EAAE,aAAa,QAAO;AAAA,MAAC,KAAK;AAAE,UAAE,KAAK,uBAAuB;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,8BAA8B;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,gCAAgC;AAAE;AAAA,MAAM,KAAK;AAAE,UAAE,KAAK,yBAAyB,GAAE,EAAE,KAAK,gCAAgC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAC,MAAE,KAAK,4BAA4B;AAAA,EAAC;AAAC,EAAAA,IAAE,kBAAgBA,IAAE,eAAe,QAAQ,OAAG;AAAC,MAAE,KAAK,WAAW,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE,aAAW,IAAI,EAAE,UAAU,MAAI,EAAE,GAAG;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,KAAK;AAAA,CACxsC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,GAAE,GAAEC,IAAE,cAAaA,IAAE,mBAAmB,CAAC,EAAE,KAAK;AAAA,CAChE,GAAE,IAAE,EAAE,UAAS,IAAE,GAAG,GAAE,IAAE,GAAG,CAAC,GAAE,GAAE,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,EAAE,YAAU,IAAE,GAAG,EAAE,cAAa,GAAEA,IAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,MAAI,IAAE,GAAG,EAAE,cAAa,GAAEA,IAAE,mBAAmB,GAAE,IAAE,GAAG,CAAC,IAAGA,IAAE,iBAAe,KAAG,KAAI,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAEA,IAAE,QAAQ,EAAE,KAAK;AAAA,CAChO;AAAC;AAAC,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAED,IAAE,UAAU;AAAa,UAAOC,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAGC,IAAE,MAAM,wCAAwC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,UAAOA,IAAE,UAAU,aAAa,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAGA,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE;AAAQ,aAAO,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,GAAE;AAAC,MAAI,IAAE;AAAG,EAAAA,MAAE,KAAG,GAAGD,KAAE,CAAC,IAAE,KAAG,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAU,cAAa,IAAE,EAAE;AAAa,SAAO,EAAE,UAAQ,EAAE,WAASC,MAAE,KAAG,GAAGD,KAAE,CAAC,IAAE,KAAG,GAAGA,KAAE,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE;AAAQ,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,UAAOD,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,aAAO,GAAG;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,GAAEC,GAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGD,KAAE,CAAC;AAAA,IAAE,KAAK;AAAE,aAAO,GAAGA,KAAE,CAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,GAAGA,IAAE,MAAM,yCAAyC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,eAEniCA,IAAE,SAAS;AAAA;AAAA;AAEvB;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,QAEjBA,IAAE,MAAM;AAAA;AAAA;AAEb;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM;AAAA;AAAA,QAEjBA,IAAE,MAAM;AAAA;AAAA;AAEb;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,GAAGA,IAAE,OAAO;AAAA;AAAA;AAAA;AAAA,MAI/BA,IAAE,SAAS;AAAA,MACXA,IAAE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBdA,IAAE,gBAAgB;AAAA,MAClBA,IAAE,gBAAgB;AAAA,MAClBA,IAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBb,EAAE;AAAA,MACF,EAAE;AAAA,MACF,EAAE;AAAA;AACL;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAYF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAZD,IAoBF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBD,IA6BF,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWH,SAAS,KAAI;AAAC,SAAM;AAAA;AAAA;AAAA;AAAA;AAInB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAO,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAI/E;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpC,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,sCAEgC,EAAE,CAAC,CAAC;AAAA;AAAA,QAEpCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAElC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAInC;AAAA;AAAA,kCAE4B,EAAE,CAAC,CAAC;AAAA;AAAA,QAEhC,EAAE,CAAC,MAAI,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA,QAIX;AAAA;AAAA,kCAE4B,EAAE,CAAC,CAAC;AAAA;AAAA,QAEhCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAMJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,4BACrB,EAAE,CAAC,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGA;AAAE,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB9B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKD,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA;AAAA;AAAA,oCAG5D,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA,wBAEb,CAAC;AAAA,qBACJ,CAAC;AAAA;AAAA,6BAEO,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAI1B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA;AAAE,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA,MAK5B,GAAG,CAAC,KAAI,KAAI,GAAG,GAAED,GAAC,CAAC;AAAA;AAAA;AAAA;AAGvB,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,oCAGE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA;AAAE,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB9B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKD,IAAEA,IAAE,SAAO,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAEA,IAAE,SAAO,CAAC,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,IAAG,IAAE;AAAU,WAAQ,IAAE,GAAE,IAAEA,IAAE,SAAO,GAAE;AAAI,SAAGA,IAAEA,IAAE,SAAO,IAAE,CAAC,GAAE,IAAE;AAAA,aACtK,CAAC,cAAc,CAAC;AAAA,kBACX,CAAC,MAAM,CAAC;AAAA,QACpB,GAAE,IAAE,IAAI,CAAC,OAAK;AAAE,SAAM;AAAA,UAClBA,IAAE,MAAM;AAAA;AAAA,oCAEkB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7B,CAAC;AAAA;AAAA,wBAEe,CAAC;AAAA,qBACJ,CAAC;AAAA;AAAA,6BAEO,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA,mBAEVA,IAAE,MAAM,IAAI,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGA;AAAE,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA,QAK1B,GAAG,CAAC,KAAI,KAAI,KAAI,IAAI,GAAED,GAAC,CAAC;AAAA;AAAA;AAAA;AAG5B,MAAI,IAAE,GAAG,CAAC,KAAI,KAAI,KAAI,IAAI,GAAEA,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,eAG1B,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCACK,EAAE,CAAC,CAAC;AAAA,QAC7B,CAAC;AAAA;AAAA;AAAA;AAGN;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA,kDAEb,EAAE,CAAC,CAAC;AAAA,+BACvB,EAAE,CAAC,CAAC;AAAA;AAAA,iCAEF,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7BC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,GAAG,CAAC,KAAI,KAAI,KAAI,MAAK,MAAK,IAAI,GAAED,GAAC;AAAE,SAAM;AAAA;AAAA;AAAA,eAGrD,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCACK,EAAE,CAAC,CAAC;AAAA;AAAA,QAE7BC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKN;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,MAAG,EAAE,YAAYD,KAAE,CAAC;AAAE,WAAOC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA,QAK5F;AAAA;AAAA,8CAEwC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAErD,MAAI,IAAE,KAAK,KAAKD,IAAE,CAAC,IAAE,CAAC;AAAE,SAAOC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAanC;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA,iCAEhB,EAAE,CAAC,CAAC;AAAA,6BACR,CAAC;AAAA,4BACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAI1B;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,SAAO,EAAE,YAAYD,KAAE,CAAC,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA,QAI7C;AAAA;AAAA,0CAEoC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA,QAEjDD,IAAE,CAAC,MAAI,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,mCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjCD,IAAE,CAAC,MAAI,IAAEC,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOX;AAAA;AAAA;AAAA,sCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,mCAChB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,QAGjCA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASJ;AAAA;AAAA;AAAA,oCAGgC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,iCAChB,EAAE,CAAC,CAAC;AAAA,wBACbD,IAAE,CAAC,CAAC;AAAA,4BACAA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAG7B;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,SAASA,GAAC;AAAE;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAKC,MAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,SAAM;AAAA,WACjHA,GAAC;AAAA,eACG,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAGD,IAAE,UAAU;AAAU,WAAM,SAAS,CAAC,cAAcC,GAAC;AAAK,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,UAAU;AAAS,MAAG,MAAI,KAAG,MAAI;AAAE,WAAM;AAAA,cAClL,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,MAAG;AAAE,WAAM;AAAA,YACjB,CAAC;AAAA,6BACgBA,GAAC,gBAAgBA,GAAC,gBAAgB,CAAC;AAAA,6BACnCA,GAAC;AAAA;AAAA;AAE1B,MAAG,CAAC,GAAE,CAAC,IAAED,IAAE,UAAU;AAAS,SAAM;AAAA,YAC5B,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,6BACbC,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAED,IAAE,UAAU,UAAS,IAAE,GAAG;AAAE,MAAG;AAAE,WAAM;AAAA,WAC7G,CAAC;AAAA,gDACoCC,GAAC,mCAAmCA,GAAC;AAAA;AAAA;AAAA,eAGtE,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAM;AAAA,WAC3C,CAAC;AAAA;AAAA,UAEF,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,eACR,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC;AAAE,MAAGD,IAAE,UAAU;AAAU,WAAM;AAAA,cAChG,CAAC;AAAA,UACL,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,MAAI;AAAE,WAAM;AAAA,cACvD,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,MAAI,IAAE,IAAE;AAAA,cACnB,CAAC;AAAA,6CAC8B,CAAC,oBAAoBA,GAAC;AAAA,+BACpCA,GAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,6CAC8B,CAAC,cAAc,CAAC;AAAA,+BAC9BA,GAAC;AAAA;AAAA,QAE1B,MAAI,IAAE,IAAE;AAAA,cACA,CAAC;AAAA,wCACyB,CAAC,oBAAoBA,GAAC;AAAA,+BAC/BA,GAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA,wCACyB,CAAC,cAAc,CAAC;AAAA,+BACzBA,GAAC;AAAA;AAAA,QAE1B,IAAE;AAAA,YACI,CAAC;AAAA,6BACgBA,GAAC,gBAAgBA,GAAC,wBAAwB,CAAC;AAAA,6BAC3CA,GAAC;AAAA;AAAA,MAE1B;AAAA,YACQ,CAAC;AAAA,6BACgB,CAAC,KAAK,CAAC,aAAa,CAAC;AAAA,6BACrBA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG;AAAE,MAAG,KAAG,QAAM,EAAE,YAAYC,KAAE,CAAC;AAAE,WAAO,IAAE;AAAA,aACjL,CAAC;AAAA,qDACuC,CAAC,gBAAgB,CAAC;AAAA;AAAA,iBAEtD,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA,QAE3B;AAAA,aACO,CAAC;AAAA,qDACuC,CAAC,OAAO,CAAC;AAAA;AAAA,iBAE7C,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAG;AAAE,WAAM;AAAA,WACN,CAAC;AAAA,gDACoC,CAAC,mCAAmC,CAAC;AAAA,0CAC3C,CAAC;AAAA;AAAA,eAE5B,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA,WAC/D,CAAC;AAAA,iCACqB,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA,eACrC,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU;AAAS,MAAG,KAAG,QAAM,EAAE,YAAYC,KAAE,CAAC,GAAE;AAAC,QAAG;AAAE,aAAM;AAAA,cAC9J,CAAC;AAAA,qDACsC,CAAC,gBAAgB,CAAC;AAAA,+BACxC,CAAC;AAAA;AAAA;AAE1B,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAM;AAAA,YAClB,CAAC;AAAA,mDACsC,CAAC,OAAO,CAAC;AAAA,6BAC/B,CAAC;AAAA;AAAA;AAAA,EAE3B;AAAC,MAAG,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,KAAK;AAAE,WAAM;AAAA,QACvG,GAAG,GAAE,CAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU;AAAU,WAAM;AAAA,cACvB,CAAC;AAAA,qDACsCC,IAAE,CAAC,CAAC;AAAA,UAC/C,GAAGD,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAO,MAAI,IAAE,IAAE;AAAA,cACjC,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,oDACJ,CAAC;AAAA,+BACtB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAWC,IAAE,CAAC,CAAC;AAAA,4CACb,CAAC;AAAA,6BAChB,CAAC;AAAA;AAAA,MAE1B,MAAI,IAAE,IAAE;AAAA,cACE,CAAC;AAAA,2CAC4B,CAAC,WAAW,CAAC;AAAA,+CACT,CAAC;AAAA,+BACjB,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,yCAC4B,CAAC,WAAWA,IAAE,CAAC,CAAC;AAAA,uCAClB,CAAC;AAAA,6BACX,CAAC;AAAA;AAAA,MAE1B,IAAE;AAAA,cACQ,CAAC;AAAA;AAAA,4BAEa,CAAC,oBAAoB,CAAC;AAAA,+BACnB,CAAC,gBAAgB,CAAC;AAAA,+BAClB,CAAC;AAAA;AAAA,QAE1B;AAAA,UACI,CAAC;AAAA;AAAA,wBAEaA,IAAE,CAAC,CAAC,YAAY,CAAC;AAAA,2BACd,CAAC,KAAK,CAAC;AAAA,2BACP,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,UAAS,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,MAAGC,IAAE,CAAC,MAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,KAAI,OAAM,KAAK;AAAE,WAAM;AAAA,UACvO,GAAG,GAAE,CAAC,CAAC;AAAA,eACF,CAAC;AAAA,mBACG,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAI,IAAE,GAAG;AAAE,MAAG;AAAE,WAAM;AAAA,WACnB,CAAC;AAAA,gDACoC,CAAC,mCAAmC,CAAC;AAAA,0CAC3C,CAAC;AAAA,0DACe,CAAC;AAAA;AAAA;AAAA,eAG5C,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE3B,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAKC,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAKA,IAAE,CAAC,IAAE,CAAC;AAAE,SAAM;AAAA,WAC3D,CAAC;AAAA;AAAA,UAEF,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,eACd,EAAE,SAAS,IAAI,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC,GAAE,IAAE;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,OAAO;AAAE,WAAM;AAAA,UACnO,GAAG,GAAE,CAAC,CAAC;AAAA,gBACD,CAAC;AAAA,mBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU;AAAU,WAAM;AAAA,cACzB,CAAC;AAAA;AAAA,iCAEkB,CAAC,KAAK,CAAC;AAAA,UAC9B,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,UAAU;AAAW,MAAG,MAAI,KAAG,KAAG;AAAK,WAAO,IAAE;AAAA,cACrF,CAAC;AAAA,wBACS,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIC,CAAC,gBAAgB,CAAC;AAAA,+BACb,CAAC;AAAA;AAAA,QAE1B;AAAA,gBACU,CAAC;AAAA;AAAA,oDAEmC,CAAC;AAAA;AAAA,4BAEzB,CAAC,OAAO,CAAC;AAAA,iCACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAO,IAAE;AAAA,cACrB,CAAC;AAAA,gDACiC,CAAC;AAAA;AAAA,uDAEM,CAAC,gBAAgB,CAAC;AAAA,+BAC1C,CAAC;AAAA;AAAA,QAE1B;AAAA,YACM,CAAC;AAAA,8CACiCC,IAAE,CAAC,CAAC;AAAA;AAAA,qDAEG,CAAC,OAAO,CAAC;AAAA,6BACjC,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,IAAE;AAAA,YACb,CAAC;AAAA;AAAA,sBAES,CAAC,cAAc,CAAC;AAAA,sBAChB,CAAC;AAAA,4DACqC,CAAC;AAAA,6BAChC,CAAC,gBAAgB,CAAC;AAAA,6BAClB,CAAC;AAAA;AAAA,QAExB;AAAA,cACQ,CAAC;AAAA;AAAA,4BAEa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,+BAC1B,CAAC,KAAK,CAAC;AAAA,+BACP,CAAC;AAAA;AAAA;AAE7B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,GAAG;AAAE,MAAG;AAAE,WAAM;AAAA,WACtF,CAAC;AAAA,0CAC8BA,GAAC;AAAA,0DACeA,GAAC;AAAA;AAAA,yBAElCA,GAAC;AAAA;AAAA,gDAEsBA,GAAC,mCAAmCA,GAAC;AAAA;AAAA;AAAA,mGAGc,EAAE,SAAS,IAAIA,GAAC;AAAA;AAAA;AAE/G,MAAI,IAAED,IAAE,UAAU,cAAa,IAAE,EAAE,QAAO,IAAEA,IAAE,UAAU,UAAS,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,IAAE,KAAK,KAAK,EAAE,IAAE,CAAC,IAAE,CAAC,GAAE,IAAE,2BAA0B,IAAE,OAAO,CAAC,kBAAkB,CAAC;AAAe,WAAQ,IAAE,GAAE,IAAE,IAAE,GAAE;AAAI,QAAE,QAAQ,CAAC,OAAK,GAAE,KAAG,EAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAI,CAAC,MAAM,CAAC,QAAM;AAAE,SAAM;AAAA,WACtT,CAAC,IAAI,CAAC;AAAA,oBACG,CAAC;AAAA,2BACM,CAAC;AAAA,kCACM,CAAC;AAAA,qDACkB,CAAC,KAAK,CAAC;AAAA,eAC7C,EAAE,SAAS,IAAIC,GAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,UAAU,cAAa,IAAEA,IAAE,MAAK,IAAE,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE,GAAE,IAAEA,IAAE,CAAC,IAAE,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAaA,GAAC;AAAE,MAAG,EAAE,SAAOA,IAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,QAAQ;AAAE,WAAM;AAAA,QAChP,GAAG,GAAE,CAAC,CAAC;AAAA,cACD,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU;AAAU,WAAM;AAAA,cACvB,CAAC;AAAA;AAAA,iCAEkB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,UACpC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,iBAAiB,CAAC,aAAY,IAAE,iBAAiB,CAAC,uBAAsB,IAAE,iBAAiB,CAAC;AAAsB,MAAG,MAAI,KAAG,KAAG;AAAK,WAAO,IAAE;AAAA,cACzM,CAAC;AAAA,UACL,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMe,CAAC,gBAAgB,CAAC;AAAA,+BACb,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIQ,CAAC,KAAK,CAAC;AAAA;AAAA,0BAEJ,CAAC,OAAO,CAAC;AAAA,+BACJ,CAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAO,IAAE;AAAA,cACnB,CAAC;AAAA;AAAA,gCAEiB,CAAC,cAAc,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA,yBAGrC,CAAC,gBAAgB,CAAC;AAAA,+BACZ,CAAC;AAAA;AAAA,QAE1B;AAAA,cACQ,CAAC;AAAA;AAAA,gCAEiBC,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,KAAKA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGzB,CAAC,OAAO,CAAC;AAAA,+BACH,CAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC;AAAE,SAAO,IAAE;AAAA,YACf,CAAC;AAAA;AAAA,QAEL,CAAC;AAAA,QACD,CAAC;AAAA,QACD,CAAC;AAAA;AAAA;AAAA,6BAGoB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC;AAAA,6BAC3C,CAAC;AAAA;AAAA,MAE1B;AAAA,YACQ,CAAC;AAAA;AAAA,0BAEa,CAAC,YAAY,CAAC;AAAA,oBACpB,CAAC;AAAA,6BACQ,CAAC,KAAK,CAAC,aAAa,CAAC;AAAA,6BACrB,CAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,cAAaC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,UAAS,QAAQ;AAAE,WAAM;AAAA,QAChQ,GAAG,CAAC,CAAC;AAAA,cACC,CAAC;AAAA,iBACE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAGA,IAAE,UAAU;AAAU,WAAM;AAAA,cACvB,CAAC;AAAA;AAAA;AAAA,iBAGE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA,UAE1B,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA,gCAGiB,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA,0BAEnB,CAAC,OAAO,CAAC;AAAA,+BACJC,GAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACd,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGV,CAAC,OAAO,CAAC;AAAA,+BACHA,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAM;AAAA,YACZ,CAAC;AAAA;AAAA,0BAEa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,qBAClC,CAAC,eAAe,CAAC;AAAA,6BACT,CAAC,KAAK,CAAC;AAAA,6BACPA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,cAAaC,MAAED,IAAE,MAAK,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,QAAO;AAAC,QAAI,IAAE,GAAGD,KAAE,CAAC,GAAE,IAAE,CAAC,OAAM,OAAM,SAAQ,UAAS,UAAS,QAAQ;AAAE,WAAM;AAAA,QACvO,GAAG,CAAC,CAAC;AAAA,cACC,CAAC;AAAA;AAAA,iBAEE,CAAC,IAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC,MAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,EAAE,CAAC,IAAE;AAAE,MAAGA,IAAE,UAAU;AAAU,WAAM;AAAA,cACtE,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA,mBAGjB,CAAC;AAAA,UACV,GAAGA,GAAC,CAAC;AAAA;AAAA;AAET,MAAI,IAAEA,IAAE,UAAU,YAAW,IAAEA,IAAE,UAAU,UAAS,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAClF,CAAC;AAAA;AAAA;AAAA;AAAA,iBAIE,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA,0BAGV,CAAC,OAAO,CAAC;AAAA,+BACJC,GAAC;AAAA;AAAA;AAE1B,MAAG,MAAI,KAAG,KAAG;AAAK,WAAM;AAAA,cAChB,CAAC;AAAA;AAAA;AAAA,iBAGE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACnB,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACd,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,iBACT,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,yBAGI,CAAC,OAAO,CAAC;AAAA,+BACHA,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAM;AAAA,YACZ,CAAC;AAAA;AAAA;AAAA,0BAGa,CAAC,YAAY,CAAC,cAAc,CAAC;AAAA,qBAClC,CAAC,eAAe,CAAC,eAAe,CAAC;AAAA,6BACzB,CAAC,KAAK,CAAC;AAAA,6BACPA,GAAC;AAAA;AAAA;AAE3B;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE,MAAKC,MAAE,EAAE,cAAcD,IAAE,UAAU,YAAY;AAAE,SAAOC,MAAE,IAAE,UAAU,CAAC,MAAI;AAAA,0BAC5EA,GAAC;AAAA;AAAA,iBAEV,CAAC;AAAA;AAAA;AAAA;AAGf;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAED,IAAE,UAAU,aAAa,QAAO,IAAE,EAAE,aAAa,QAAO,IAAE,GAAGA,IAAE,UAAU,cAAa,EAAE,YAAY,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,QAAI,IAAE,IAAE,KAAG,IAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,EAAE,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CACzU;AAAE,MAAI,IAAE;AAAG,MAAE,KAAG,IAAE,IAAE,IAAE,WAAS,IAAEA,IAAE,UAAU,aAAa,IAAI,CAAC,GAAE,MAAI,UAAU,EAAE,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI;AAAE,MAAI,IAAE,uBAAsB,IAAE,EAAE,cAAcA,IAAE,UAAU,YAAY,MAAI,GAAE,IAAE,EAAE,cAAc,EAAE,YAAY,MAAI;AAAE,MAAG,MAAI,KAAG,CAAC,KAAG,CAAC;AAAE,QAAE;AAAA;AAAA;AAAA,WAE5N,KAAG,CAAC;AAAE,UAAI,IAAE,IAAE;AAAA;AAAA,UAEpB,IAAE;AAAA;AAAA;AAAA,WAEM,EAAE,QAAO;AAAC,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,MAAE,QAAQ,CAAC,IAAE,MAAI,EAAE,QAAQ,CAAC,IAAE,KAAG,IAAE,gCAA8B,EAAE,QAAQ,CAAC,IAAE,KAAG,IAAE,6EAA2E,EAAE,QAAQ,CAAC,IAAE,OAAK,IAAE;AAAA,EAA+C;AAAC,SAAM;AAAA,WACvQ,CAAC;AAAA,QACJ,CAAC;AAAA,QACD,CAAC;AAAA,8BACqB,CAAC,IAAI,CAAC;AAAA,QAC5B,CAAC;AAAA;AAAA;AAEN;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,eAAc,IAAE,EAAE,UAAS,IAAED,IAAE,UAAU,UAAS,IAAEA,IAAE,UAAU,aAAa,QAAO,IAAE,EAAE,aAAa;AAAO,MAAG,CAACA,IAAE,UAAU,aAAW,MAAI,KAAGA,IAAE,UAAU,cAAY,QAAM,EAAE,YAAY,GAAE,CAAC;AAAE,WAAM;AAAA,cAC1Q,CAAC;AAAA,+BACgBC,GAAC;AAAA;AAAA;AAE1B,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAGD,IAAE,UAAU,cAAa,EAAE,YAAY,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,QAAI,IAAE,IAAE,KAAG,IAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,EAAE,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CACxL;AAAE,MAAI,IAAE;AAAG,SAAO,IAAE,KAAG,IAAE,IAAE,IAAE,WAAS,IAAEA,IAAE,UAAU,aAAa,IAAI,CAAC,GAAE,MAAI,UAAU,EAAE,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,GAAE;AAAA,YAChG,CAAC;AAAA,QACL,CAAC;AAAA,QACD,CAAC;AAAA,kBACS,CAAC,IAAI,CAAC;AAAA;AAAA;AAErB;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG;AAAE,WAAM;AAAM,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,MAAGA,QAAI;AAAE,WAAM;AAAQ,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAG,EAAC,UAAS,GAAE,UAAS,EAAC,IAAE,EAAE,aAAa,CAAC,GAAE,IAAE,EAAE,QAAO,IAAED,OAAG,MAAI,KAAG,EAAE,CAAC,MAAI,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,GAAE,IAAE,CAACA,OAAG,IAAE,KAAG,CAAC,EAAE,YAAY,GAAEC,GAAC,KAAG,EAAE,SAAO,KAAG;AAAE,SAAM,EAAC,iBAAgB,GAAE,cAAa,IAAE,IAAE,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,KAAK,MAAM,KAAK,UAAUD,GAAC,CAAC;AAAE,SAAOC,IAAE,UAAU,eAAa,GAAEA;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,EAAE,IAAI,CAAAC,QAAGD,IAAEC,GAAC,CAAC,EAAE,KAAK,IAAI;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,EAAC,cAAa,EAAE,OAAM,UAAS,EAAE,YAAU,OAAK,EAAE,QAAQ,UAAS,WAAU,EAAE,WAAU,UAAS,EAAE,YAAU,QAAG,EAAE,QAAQ,UAAS,YAAW,KAAI;AAAE,WAAO,EAAE,WAAS,QAAM,EAAE,QAAQ,SAAO,QAAM,EAAE,QAAQ,MAAM,aAAW,MAAI,EAAE,aAAW,EAAE,QAAQ,MAAM,aAAY,EAAC,MAAK,EAAE,cAAc,CAAC,GAAE,WAAU,EAAC;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,SAAS,GAAE,IAAE,EAAC,cAAa,EAAE,OAAM,UAAS,EAAE,QAAQ,UAAS,WAAU,OAAG,UAAS,EAAE,QAAQ,UAAS,YAAW,KAAI,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,GAAGD,IAAE,IAAG,CAAC,GAAE,IAAEA,IAAE,cAAc,CAAC;AAAE,SAAO,EAAE,EAAE,IAAI,qBAAqB,IAAE,EAAC,SAAQ,GAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,GAAE,oBAAmB,MAAK,wBAAuB,MAAK,QAAO,MAAK,QAAO,MAAK,kBAAiB,MAAK,yBAAwB,MAAK,qBAAoB,KAAI,KAAGA,IAAE,SAAS,CAAC,GAAE,OAAO,OAAO,EAAC,SAAQ,GAAE,gBAAe,GAAE,QAAO,GAAE,cAAa,GAAE,cAAa,GAAE,cAAa,EAAC,GAAE,GAAGA,KAAE,GAAE,CAAC,CAAC;AAAE;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,IAAE,MAAK,IAAE;AAAK,MAAED,IAAE,mBAAmBC,KAAE,OAAM,KAAE,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,MAAI,IAAED,IAAE,mBAAmBC,KAAE,YAAW,KAAE;AAAG,MAAI,IAAE;AAAG,WAAQ,KAAK,EAAE,eAAc;AAAC,QAAI,IAAE,EAAC,MAAK,GAAE,SAAQD,IAAE,mBAAmBC,KAAE,GAAE,CAAC,GAAE,QAAOD,IAAE,mBAAmBC,KAAE,SAAS,CAAC,IAAG,CAAC,EAAC;AAAE,MAAE,wBAAsB,EAAE,QAAMD,IAAE,mBAAmBC,KAAE,GAAG,CAAC,SAAQ,CAAC,GAAE,EAAE,WAASD,IAAE,mBAAmBC,KAAE,GAAG,CAAC,YAAW,CAAC,IAAG,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,wBAAsB,IAAED,IAAE,mBAAmBC,KAAE,YAAW,CAAC,GAAE,IAAED,IAAE,mBAAmBC,KAAE,mBAAkB,CAAC,GAAE,IAAED,IAAE,mBAAmBC,KAAE,eAAc,CAAC,IAAG,EAAE;AAAe,aAAQ,KAAK,EAAE;AAAe,QAAE,KAAKD,IAAE,mBAAmBC,KAAE,EAAE,MAAK,CAAC,CAAC;AAAE,SAAM,EAAC,oBAAmB,GAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE;AAAO,UAAM,MAAM,4BAA4BA,IAAE,MAAM,kCAAkC,EAAE,MAAM,SAAS;AAAE,EAAAA,IAAE,QAAQ,CAACC,KAAE,MAAI;AAAC,QAAI,IAAEA,IAAE,cAAa,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE;AAAM,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC;AAAE,YAAM,MAAM,2EAA2E,CAAC,QAAQ,CAAC,aAAa;AAAE,QAAGA,IAAE,aAAW,EAAE;AAAU;AAAO,QAAI,IAAEA,IAAE,UAAS,IAAE,EAAE,YAAU,OAAK,EAAE,QAAQ;AAAS,QAAG,CAAC,EAAE,YAAY,GAAE,CAAC;AAAE,YAAM,MAAM,kFAAkF,CAAC,QAAQ,CAAC,aAAa;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,IAAE,QAAQ,wBAAsB,GAAG,EAAE,cAAaA,GAAC,GAAE,GAAG,CAAC,EAAE,YAAY,GAAE,CAAC,CAAC,CAAC;AAAG,MAAI,IAAE,EAAE,QAAQ,SAAQ,IAAE,EAAE,QAAQ;AAAS,IAAE,QAAQ,WAASD,IAAE,6BAA6B,EAAE,SAAQ,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAEA,IAAE,uBAAuB,EAAE,SAAQ,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAEA,IAAE,WAAW,EAAE,YAAY,GAAEA,IAAE,gBAAgB,EAAE,aAAa,GAAG,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,KAAG,EAAE,WAAS,QAAMA,IAAE,GAAG,UAAU,EAAE,QAAO,IAAE,CAAC,GAAE,EAAE,WAAS,QAAMA,IAAE,GAAG,UAAU,EAAE,QAAO,GAAG;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,CAAC,GAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE,EAAE,mBAAmB,CAAC;AAAE,QAAG,GAAE;AAAC,UAAG,EAAC,cAAa,EAAC,IAAE,GAAG,EAAE,QAAQ,cAAa,EAAE,OAAM,EAAE,QAAQ,QAAQ;AAAE,cAAO,EAAE,QAAO;AAAA,QAAC,KAAK;AAAE,UAAAD,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM,KAAK;AAAE,UAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,QAAM;AAAQ;AAAA,MAAK;AAAA,IAAC;AAAC,QAAG,KAAGA,IAAE,GAAG,UAAU,GAAE,EAAE,QAAQ,SAAS,CAAC,GAAE,EAAE,QAAQ,SAAS,CAAC,CAAC,GAAE,KAAG,MAAK;AAAC,UAAG,EAAE,WAAU;AAAC,YAAG,EAAE,cAAc,EAAE,KAAK,IAAE;AAAE,UAAAA,IAAE,GAAG,UAAU,GAAE,EAAE,cAAc,CAAC,CAAC;AAAA,aAAM;AAAC,cAAI,IAAE,EAAE;AAAc,uBAAa,iBAAe,IAAE,IAAI,aAAa,CAAC,IAAGA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,QAAC;AAAC;AAAA,MAAQ;AAAC,QAAE,QAAQ,SAAO,QAAM,KAAG,QAAMA,IAAE,GAAG,UAAU,GAAE,EAAE,QAAQ,MAAM,UAAU,GAAEA,IAAE,sBAAsB,EAAE,QAAQ,QAAQ,SAAQ,GAAE,CAAC;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE;AAAiB,MAAG;AAAE,YAAO,EAAE,MAAM,QAAO;AAAA,MAAC,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,GAAE,IAAI,WAAW,EAAE,KAAK,CAAC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAC,MAAG,EAAE,yBAAwB;AAAC,QAAI,IAAE,EAAE,eAAe,EAAE,KAAK;AAAE,YAAO,EAAE,MAAM,QAAO;AAAA,MAAC,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM,KAAK;AAAE,QAAAA,IAAE,GAAG,WAAW,EAAE,yBAAwB,IAAI,WAAW,CAAC,CAAC;AAAE;AAAA,MAAM;AAAQ;AAAA,IAAK;AAAA,EAAC;AAAC,MAAG,EAAE,uBAAqBA,IAAE,GAAG,UAAU,EAAE,qBAAoB,EAAE,QAAQ,SAAS,CAAC,GAAE,EAAE,QAAQ,SAAS,CAAC,CAAC,GAAE,EAAE,QAAQ,kBAAgB;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAQ,eAAe,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,QAAQ,eAAe,CAAC,GAAE,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAG,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAO,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAM,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA,eAAU,EAAE,SAAO;AAAQ,QAAAA,IAAE,GAAG,WAAW,GAAE,CAAC;AAAA;AAAO,cAAM,MAAM,gBAAgB,EAAE,IAAI,wBAAwB;AAAA,IAAC;AAAC,EAAAA,IAAE,eAAe;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE;AAAG,IAAE,OAAOA,GAAC,EAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,EAAE,WAAS,QAAM,EAAE,QAAQ,SAAO,QAAM,EAAE,QAAQ,MAAM,aAAW;AAAE,QAAGD,IAAE,uBAAqB,CAAC,EAAE,WAAU;AAAC,UAAI,IAAE,EAAE,QAAQ,UAAS,EAAC,iBAAgB,GAAE,cAAa,GAAE,UAAS,EAAC,IAAE,GAAGA,IAAE,cAAa,EAAE,OAAM,CAAC,GAAE,IAAE,IAAG,IAAE,IAAG,IAAE;AAAG,UAAG,EAAE,WAAS,KAAGA,IAAE,cAAa;AAAC,YAAI,IAAE,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,CAAC,CAAC;AAAE,YAAE,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAA,MAAE,WAAS,EAAE,WAAS,KAAG,CAACA,IAAE;AAAa,YAAE,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAA,eAAW,EAAE,SAAO,KAAG,CAACA,IAAE,cAAa;AAAC,YAAI,IAAE,EAAE,eAAe,CAAC;AAAE,YAAE,GAAG,EAAE,CAAC,MAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,SAAO,CAAC,MAAI,EAAE,CAAC,CAAC;AAAA,MAAE;AAAC,UAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,WAAS,KAAG,EAAE,YAAY,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE,IAAE,EAAE,iBAAiB,EAAE,OAAMC,IAAE,KAAK,GAAE,IAAE,CAACD,IAAE,gBAAc,MAAIC,IAAE,MAAM,UAAQ,EAAE,YAAY,GAAEA,IAAE,QAAQ,QAAQ,GAAE,IAAED,IAAE,gBAAc,EAAE,SAAO,IAAE,KAAG,GAAG,EAAE,CAAC,IAAE,CAAC,IAAI,EAAE,CAAC,IAAE,CAAC;AAAG,WAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAE,IAAE,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,EAAE,YAAU,YAAU,EAAE,QAAQ;AAAS,WAAG,GAAG,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAS,IAAEA,IAAE,YAAY;AAAK,SAAO,KAAG,MAAI,IAAE,MAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC,IAAG;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,QAAQ,2BAA2B,KAAGA,OAAG;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,mBAAiB,GAAG,OAAM,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAIC,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEntN,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhEA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,mBAAiB,GAAG,OAAM,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAElR,KAAK,sBAAoB,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgBhEA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAG;AAAS,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA,QAC9H,EAAE;AAAA;AAAA;AAAA;AAAA,UAIAA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAG;AAAS,QAAIA,MAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA,QACxK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,UAKAA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,EAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAC;AAAvB,IAAyB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,QAAO;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE;AAAS,IAAAA,QAAI,IAAE;AAA8B,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,WAAG;AAAA,yBACrT,CAAC;AAAA,8BACI,GAAG,CAAC,CAAC;AAAA;AAAA,IACvB;AAAC,SAAK,WAAS;AAAA,QACnB,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uCAMJ,EAAE,MAAM;AAAA;AAAA,sCAET,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMpB,EAAE,SAAS;AAAA,YACzB,CAAC;AAAA;AAAA,UAEH,EAAE,MAAM,WAAW,CAAC;AAAA;AAAA;AAAA,EAEzB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,YAAW,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,GAAG;AAAE,SAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,IAAG,IAAE;AAAS,IAAAA,QAAI,IAAE;AAA8B,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,IAAE;AAAE,aAAG;AAAA;AAAA,gCAEtU,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAG,EAAE,CAAC,CAAC,EAAE;AAAA,8BACzD,CAAC;AAAA,iCACE,CAAC,MAAM,KAAK,sBAAoB,gBAAc,GAAG,EAAE,CAAC,CAAC,EAAE;AAAA,gCACxD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAUV,EAAE,SAAS;AAAA;AAAA;AAAA,uBAGX,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA,uBAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAIf;AAAC,SAAK,WAAS;AAAA,UACd,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWjC,CAAC;AAAA;AAAA,YAED,EAAE,MAAM,MAAM,CAAC;AAAA;AAAA;AAAA,EAEtB;AAAC;AAAE,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,mCAAkC,MAAI,IAAG,+BAA8B,MAAI,IAAG,4BAA2B,MAAI,IAAG,kCAAiC,MAAI,IAAG,4BAA2B,MAAI,IAAG,mBAAkB,MAAI,IAAG,2BAA0B,MAAI,IAAG,kCAAiC,MAAI,IAAG,oBAAmB,MAAI,IAAG,oBAAmB,MAAI,IAAG,iDAAgD,MAAI,IAAG,iCAAgC,MAAI,IAAG,uCAAsC,MAAI,IAAG,gCAA+B,MAAI,IAAG,0CAAyC,MAAI,IAAG,gDAA+C,MAAI,IAAG,0CAAyC,MAAI,IAAG,yCAAwC,MAAI,IAAG,gDAA+C,MAAI,IAAG,4BAA2B,MAAI,IAAG,0BAAyB,MAAI,GAAE,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,GAAG,GAAEC,MAAE,GAAG,EAAE,OAAO;AAAA;AAAA,MAE33B,EAAE,SAAS;AAAA,MACX,EAAE,SAAS;AAAA,MACX,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAKV,SAAO,GAAGD,KAAEC,GAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,CAAC,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,CAAC,CAAC;AAAE,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE,IAAI,YAAY,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAE,SAAO,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,KAAG,GAAEA,GAAC;AAAE,MAAI,IAAE,GAAGD,GAAC,GAAE,IAAEA,IAAE;AAAW,SAAO,GAAGA,KAAE,MAAIA,IAAE,YAAY,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,gBAAeA,IAAE,aAAa,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,gBAAeA,IAAE,aAAa,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,oBAAmBA,IAAE,OAAO,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,cAAc,GAAEA,IAAE,oBAAmBA,IAAE,OAAO,CAAC,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,IAAI,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,aAAa,GAAE,GAAE,GAAE,GAAEC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC,GAAE,EAAC,SAAQ,GAAE,UAAS,CAACC,KAAE,CAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,SAAOA,IAAE;AAAmB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAE,EAAE,oBAAmBA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAuB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAE,EAAE,oBAAmB,EAAE,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAqB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAKA,IAAE,aAAa;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAAyB;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAKA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE;AAA6B;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC;AAAE,SAAO,GAAGD,KAAE,GAAE,GAAE,GAAG,CAAC,GAAEA,IAAE,MAAK,EAAE,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,cAAaC,GAAC,CAAC,GAAE,GAAGD,KAAE,GAAE,gBAAeC,KAAE,GAAE,IAAG,CAAC,KAAG,GAAGD,KAAE,GAAE,MAAKC,KAAE,GAAE,IAAG,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC;AAAE,MAAI,GAAE,GAAE;AAAE,eAAa,cAAY,IAAE,IAAI,WAAWC,MAAE,IAAE,CAAC,GAAE,IAAED,IAAE,eAAc,IAAEA,IAAE,SAAO,IAAE,IAAI,aAAaC,MAAE,IAAE,CAAC,GAAE,IAAED,IAAE,OAAM,IAAE,EAAE,4BAA2B,EAAE,IAAI,CAAC,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGA,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAK,GAAE,CAAC,CAAC,IAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAE,GAAEC,KAAE,GAAE,GAAED,IAAE,MAAK,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,KAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,CAAC,CAAC,GAAEC,IAAE,gBAAgB,aAAW,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEC,IAAE,OAAMA,IAAE,QAAOD,IAAE,MAAKA,IAAE,eAAcC,IAAE,IAAI,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAKC,IAAE,OAAMA,IAAE,QAAO,GAAED,IAAE,MAAKA,IAAE,eAAcC,IAAE,IAAI,CAAC,IAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,GAAGD,KAAE,MAAIA,IAAE,cAAcA,IAAE,YAAW,GAAE,GAAE,GAAEA,IAAE,MAAKA,IAAE,eAAcC,GAAC,CAAC,IAAE,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,YAAW,GAAEA,IAAE,MAAKA,IAAE,MAAKA,IAAE,eAAcC,GAAC,CAAC,GAAE,GAAGD,KAAE,MAAIA,IAAE,YAAYA,IAAE,YAAW,IAAI,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,aAAa;AAAE,KAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,CAAC,CAAC;AAAE,MAAI,IAAE,IAAE,IAAE,IAAEC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,GAAEA,IAAE,WAAW,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,mBAAkB,IAAI,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAaC,GAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkB,CAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,CAAC,GAAE,CAAC,IAAE,GAAG,GAAEA,GAAC,GAAE,IAAE,GAAE,IAAE,IAAI,WAAW,GAAG,IAAEA,KAAE,CAAC,CAAC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAE,GAAE,GAAE,EAAE,uBAAsBA,IAAE,eAAc,CAAC,CAAC,GAAE,IAAI,aAAa,EAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAED,KAAE,IAAE,IAAI,aAAa,GAAG,GAAE,CAAC,CAAC;AAAE,SAAO,EAAE,WAAW,EAAE,mBAAkB,CAAC,GAAE,EAAE,iBAAiB,EAAE,mBAAkB,GAAE,CAAC,GAAE,EAAE,WAAW,EAAE,mBAAkB,IAAI,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,IAAI,aAAa,IAAEA,MAAE,CAAC;AAAE,SAAO,GAAGD,KAAE,MAAIA,IAAE,WAAW,GAAE,GAAEC,KAAE,GAAED,IAAE,MAAKA,IAAE,OAAM,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,MAAK,KAAK,UAAQ,MAAK,KAAK,WAAS,OAAG,KAAK,cAAY,CAAC;AAAE,QAAIC,MAAE,EAAE,EAAE,UAAU,eAAe;AAAE,QAAG,KAAG,QAAM,KAAK,KAAG,GAAE,GAAGA,KAAE,CAAC,KAAG,KAAK,KAAG,GAAGA,GAAC,GAAE,IAAE,KAAK,IAAG,EAAE,EAAE,UAAU,eAAe,MAAI,GAAE;AAAC,UAAI,IAAE;AAAE,WAAK,oBAAkB,MAAI,GAAG,GAAE,MAAI,EAAE,kBAAkB,CAAC,GAAE,KAAK,kBAAgB,OAAG,GAAG,GAAE,MAAI,EAAE,gBAAgB,CAAC,CAAC,GAAE,KAAK,oBAAkB,OAAG,GAAG,GAAE,MAAI,EAAE,kBAAkB,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,GAAG,GAAE,MAAI,EAAE,aAAa,EAAE,oBAAoB,CAAC;AAAA,IAAC,WAAS,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,aAAa,yBAAyB;AAAE,UAAG,KAAG;AAAK,cAAM,IAAI,MAAM,2EAA2E;AAAE,WAAK,oBAAkB,MAAI,GAAG,GAAE,MAAI,EAAE,qBAAqB,CAAC,GAAE,KAAK,kBAAgB,OAAG,GAAG,GAAE,MAAI,EAAE,mBAAmB,CAAC,CAAC,GAAE,KAAK,oBAAkB,OAAG,GAAG,GAAE,MAAI,EAAE,qBAAqB,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAI,GAAG,GAAE,MAAI,EAAE,aAAa,EAAE,wBAAwB,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,4BAA2B,IAAE;AAA8B,QAAG,KAAK,+BAA6B,KAAK,GAAG,aAAa,6BAA6B,GAAE,EAAE,EAAE,UAAU,eAAe,MAAI,GAAE;AAAC,UAAI,IAAE,qBAAoB,IAAE;AAAyB,UAAG,KAAK,wBAAsB,GAAG,KAAK,IAAG,CAAC,GAAE,GAAG,KAAK,IAAG,CAAC;AAAE,aAAK,4BAA0B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B;AAAE,cAAM,IAAI,MAAM,oHAAoH;AAAE,UAAG,KAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC,GAAE,GAAG,KAAK,IAAG,CAAC;AAAE,aAAK,gCAA8B,GAAG,KAAK,IAAG,CAAC;AAAA,eAAU,EAAE,EAAE,IAAI,0BAA0B;AAAE,cAAM,IAAI,MAAM,6HAA6H;AAAA,IAAC,WAAS,IAAE,0BAAyB,GAAG,KAAK,IAAG,CAAC;AAAE,WAAK,4BAA0B,KAAK,GAAG,aAAa,CAAC;AAAA,aAAU,GAAG,KAAK,IAAG,CAAC;AAAE,WAAK,gCAA8B,KAAK,GAAG,aAAa,CAAC;AAAA;AAAO,YAAM,IAAI,MAAM,qDAAqD;AAAE,SAAK,eAAa,GAAG,KAAK,EAAE,GAAE,KAAK,cAAY,GAAG,KAAK,EAAE,GAAE,KAAK,cAAY,GAAG,KAAK,EAAE,GAAE,KAAK,gBAAc,GAAG,KAAK,IAAG,KAAK,yBAAyB;AAAA,EAAC;AAAA,EAAC,IAAI,QAAO;AAAC,WAAO,EAAE,EAAE,QAAQ,OAAO;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK;AAAS;AAAO,SAAK,WAAS,QAAM,QAAQ,KAAK,sKAAsK,GAAE,KAAK,iBAAe,QAAM,QAAQ,KAAK,oMAAoM;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAE,MAAI,EAAE,OAAO,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,gBAAgB,EAAE,aAAY,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,kBAAkB,KAAK,WAAW,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,WAAW,EAAE,cAAa,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,WAAW,EAAE,sBAAqB,IAAI,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,aAAa,KAAK,WAAW,CAAC,GAAE,KAAK,WAAS;AAAA,EAAE;AAAA,EAAC,2BAA2B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAEA,KAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,0BAA0B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,oBAAoB,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,kBAAgB,MAAI,GAAG,KAAK,IAAG,KAAK,WAAW,GAAE,KAAK,gBAAc,OAAM,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAc,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,gDAAgD,GAAEA,KAAE,GAAE;AAAC,WAAO,KAAK,qBAAqB,GAAE,MAAI,GAAG,KAAK,IAAGA,KAAE,GAAE,KAAK,aAAa,CAAC;AAAA,EAAC;AAAA,EAAC,+BAA+B,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,WAAO,GAAG,KAAK,IAAG,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,KAAK,aAAa;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE;AAAC,WAAO,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,SAAK,yBAAyB,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAGA,KAAE,GAAE,KAAK,aAAa;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAuB;AAAC,QAAI,IAAE,KAAK,YAAY,KAAK,EAAE;AAAE,WAAO,KAAK,UAAU,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,KAAE;AAAE,QAAG,EAAE,EAAE,QAAQ,yBAAyB,GAAE;AAAC,UAAI,IAAE,GAAE,IAAE,EAAE,UAAU,EAAE,4BAA2B,CAAC;AAAE,QAAE,MAAM,GAAE,IAAE,MAAI;AAAC,YAAI,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE,eAAO,MAAI,EAAE,oBAAkB,MAAI,EAAE;AAAA,MAAmB,GAAEA,MAAE;AAAA,IAAC;AAAM,QAAE,EAAE,UAAU,8CAA8C,IAAE,KAAGA,MAAE,KAAK,WAAW,GAAE,KAAK,SAAS,GAAE,IAAE,MAAI,KAAK,iBAAiBA,KAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,KAAG,IAAE,MAAI;AAAG,WAAM,EAAC,OAAMA,KAAE,eAAc,EAAC;AAAA,EAAC;AAAA,EAAC,gCAAgC,GAAEA,KAAE,GAAE;AAAC,WAAO,KAAK,qBAAqB,GAAE,MAAI,GAAG,KAAK,IAAGA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAIA,MAAE,KAAK;AAAG,SAAK,gBAAc,SAAO,KAAK,eAAa,GAAGA,GAAC;AAAG,QAAI,IAAE,GAAGA,GAAC;AAAE,OAAGA,KAAE,MAAIA,IAAE,aAAa,GAAE,KAAK,YAAY,CAAC,GAAE,GAAGA,KAAE,MAAIA,IAAE,aAAa,GAAE,CAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,OAAO,OAAO,GAAE,EAAC,KAAI,KAAK,kBAAkB,EAAC,CAAC;AAAE,WAAO,KAAK,SAAO,GAAGA,KAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,SAAK,WAAW,CAAC,GAAE,KAAK,gBAAgB,EAAE,GAAG;AAAE,QAAIA,MAAE,KAAK;AAAG,OAAGA,KAAE,MAAIA,IAAE,WAAWA,IAAE,sBAAqB,KAAK,WAAW,CAAC,GAAE,GAAGA,KAAE,GAAE,KAAK,YAAY;AAAA,EAAC;AAAA,EAAC,cAAc,GAAE;AAAC,SAAK,gBAAgB,GAAE,MAAI,KAAK,YAAU,KAAK,UAAQ,OAAM,KAAG,SAAO,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,cAAc,CAAC,CAAC,GAAE,KAAK,kBAAkB,EAAE,GAAG;AAAA,EAAE;AAAA,EAAC,WAAW,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,UAAQ,GAAE,KAAK,WAAS,QAAM,KAAK,SAAO,GAAG,KAAK,IAAG,KAAK,OAAO,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,WAAW,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,KAAE,IAAE,MAAG;AAAC,WAAO,KAAK,gBAAgB,GAAE,IAAE,GAAG,KAAK,IAAG,GAAEA,GAAC,IAAE,GAAG,KAAK,IAAG,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,kBAAkB,GAAEA,GAAC,CAAC;AAAA,EAAC;AAAA,EAAC,0BAA0B,GAAEA,KAAE;AAAC,WAAO,KAAK,gBAAgB,GAAE,KAAK,GAAG,mBAAmB,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,sBAAsB,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,KAAK,iBAAiB,GAAE,GAAG,KAAK,IAAG,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAEA,KAAE,GAAE;AAAC,SAAK,6BAA6B,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,KAAE,CAAC;AAAE,SAAK,6BAA6B,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,2BAA2B,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,iCAAiC,GAAE,GAAE,GAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE,GAAE,GAAE;AAAC,UAAM,IAAI,MAAM,mDAAmD;AAAA,EAAC;AAAA,EAAC,gBAAe;AAAC,SAAK,WAAS,QAAM,GAAG,KAAK,IAAG,KAAK,OAAO,GAAE,GAAG,KAAK,EAAE;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,SAAK,gBAAgB,GAAE,KAAK,iBAAiB;AAAE,QAAI,IAAE,KAAK;AAAG,QAAG,KAAK,OAAM;AAAC,UAAIA,MAAE,KAAK,eAAe;AAAE,cAAQ,OAAOA,QAAI,KAAK,QAAQ,KAAI,oDAAoD,GAAE,KAAK,cAAc;AAAA,IAAC;AAAC,OAAG,GAAE,MAAI,EAAE,aAAa,EAAE,WAAU,GAAE,EAAE,gBAAe,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAgC;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,OAAO,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,+BAA6B,SAAO,KAAK,8BAA4B,GAAG,KAAK,IAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,IAAE,oCAAkC,0BAA0B,IAAG,KAAK;AAAA,EAA2B;AAAA,EAAC,+BAA8B;AAAC,WAAO,KAAK,uBAAuB;AAAA,EAAC;AAAA,EAAC,+BAA8B;AAAC,WAAO,KAAK,uBAAuB;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,QAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,YAAY;AAAE,aAAO,EAAE,WAAW,EAAE,kBAAiB,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,6BAA6B,GAAEA,MAAE,EAAE,eAAe;AAAE,WAAO,EAAE,cAAc,EAAE,kBAAiBA,GAAC,GAAEA;AAAA,EAAC;AAAA,EAAC,WAAU;AAAC,QAAG,EAAE,EAAE,UAAU,8CAA8C,MAAI,GAAE;AAAC,UAAIA,MAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B;AAAE,MAAAA,IAAE,SAAS,EAAE,gBAAgB;AAAE;AAAA,IAAM;AAAC,QAAI,IAAE,KAAK,6BAA6B;AAAE,MAAE,YAAY,EAAE,gBAAgB;AAAA,EAAC;AAAA,EAAC,MAAM,uBAAuB,GAAE;AAAC,WAAO,MAAM,EAAE,YAAY,MAAI,KAAK,YAAU,KAAK,iBAAiB,GAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC,CAAC,GAAE,KAAK,aAAa,GAAE,EAAE,EAAE,UAAU,8CAA8C,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,QAAGA,QAAI;AAAE,aAAO;AAAK,QAAGA,QAAI,GAAE;AAAC,UAAI,IAAE,KAAK;AAAG,aAAO,EAAE,kBAAkB,GAAE,EAAE,YAAY,IAAE;AAAA,IAAG,OAAK;AAAC,UAAI,IAAE,KAAK,6BAA6B;AAAE,aAAO,EAAE,kBAAkB,GAAE,EAAE,gBAAgB,IAAE;AAAA,IAAG;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,QAAGA,QAAI;AAAE,aAAM;AAAG,QAAGA,QAAI,GAAE;AAAC,UAAI,IAAE,KAAK,IAAG,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,sBAAsB;AAAE,aAAO,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,GAAG,aAAa,EAAE,gBAAgB,IAAG,KAAG,CAAC,KAAK;AAAA,IAAQ,OAAK;AAAC,UAAI,IAAE,KAAK,6BAA6B,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,0BAA0B;AAAE,aAAO,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,GAAG,aAAa,EAAE,gBAAgB,IAAG,KAAG,CAAC,KAAK;AAAA,IAAQ;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,WAAO,IAAI,QAAQ,CAAAA,QAAG;AAAC,WAAK,cAAc,MAAI,EAAE,cAAc,GAAE,MAAIA,IAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,YAAW;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,IAAI,CAAAA,QAAGA,IAAE,QAAQ,CAAC;AAAE,aAAQA,MAAE,GAAEA,OAAG,GAAE,EAAEA,KAAE;AAAC,UAAG,EAAC,WAAU,EAAC,IAAE,KAAK,YAAYA,GAAC;AAAE,QAAE;AAAA,IAAC;AAAC,SAAK,cAAY,KAAK,YAAY,MAAM,IAAE,CAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE;AAAC,QAAG,KAAK,YAAY,KAAK,EAAC,UAAS,GAAE,WAAUA,IAAC,CAAC,GAAE,KAAK,YAAY,SAAO;AAAE;AAAO,QAAI;AAAE,0BAAqB,EAAE,EAAE,aAAW,IAAE,EAAE,EAAE,SAAS,iBAAiB,KAAK,EAAE,EAAE,QAAQ,IAAG,EAAE,YAAY,OAAK,KAAK,UAAU,GAAE,KAAK,YAAY,WAAS,IAAG,MAAI,GAAE,MAAK,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAyB,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,GAAE,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,KAAK,EAAE;AAAA,EAAC;AAAA,EAAC,6BAA4B;AAAC,SAAK,iBAAe,QAAM,GAAG,KAAK,IAAG,KAAK,eAAc,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,KAAK,EAAE,KAAG,GAAG,KAAK,IAAG,KAAK,WAAW;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,SAAK,yBAAyB,CAAC;AAAE,QAAI,IAAEA,IAAE;AAAE,WAAO,KAAK,2BAA2B,GAAE;AAAA,EAAC;AAAA,EAAC,6BAA6B,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAgB;AAAE,QAAI,IAAE,KAAK;AAAG,OAAG,GAAE,GAAE,KAAK,WAAW,GAAE,KAAK,SAAO,GAAG,CAAC,GAAE,KAAK,gBAAc,GAAE,GAAG,GAAE,MAAI,EAAE,SAAS,GAAE,GAAEA,KAAE,CAAC,CAAC,GAAE,GAAG,GAAE,MAAI,EAAE,QAAQ,GAAE,GAAEA,KAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,iCAAiC,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAgB,GAAE,GAAG,KAAK,IAAG,MAAI,KAAK,GAAG,QAAQ,GAAEA,KAAE,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,QAAG,KAAK;AAAS,YAAM,IAAI,MAAM,yCAAyC;AAAA,EAAC;AAAA,EAAC,mBAAkB;AAAC,QAAG,KAAK,WAAS;AAAK,YAAM,IAAI,MAAM,kCAAkC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA,IAAE,UAAQA,IAAE,CAAC,EAAE,GAAE,EAAE;AAAE;AAAC,SAAO,IAAE;AAAC;AAAC,IAAG,EAAC,SAAQ,IAAG,cAAa,IAAG,oBAAmB,IAAG,gBAAe,IAAG,UAAS,IAAG,UAAS,IAAG,YAAW,IAAG,WAAU,IAAG,SAAQ,IAAG,WAAU,IAAG,WAAU,IAAG,cAAa,IAAG,cAAa,IAAG,aAAY,IAAG,kBAAiB,IAAG,UAAS,IAAG,eAAc,IAAG,cAAa,IAAG,SAAQ,IAAG,SAAQ,IAAG,aAAY,IAAG,aAAY,IAAG,cAAa,IAAG,SAAQ,IAAG,cAAa,IAAG,UAAS,IAAG,kBAAiB,IAAG,iBAAgB,IAAG,0BAAyB,IAAG,WAAU,IAAG,WAAU,IAAG,aAAY,IAAG,aAAY,IAAG,eAAc,IAAG,WAAU,IAAG,yBAAwB,IAAG,mBAAkB,IAAG,4BAA2B,IAAG,UAAS,IAAG,wBAAuB,IAAG,kBAAiB,IAAG,kBAAiB,IAAG,iBAAgB,IAAG,4BAA2B,IAAG,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,eAAc,IAAG,YAAW,GAAE,IAAE;AAAG,SAAS,GAAGA,KAAE,GAAE;AAAC,SAAM,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC,EAAE,IAAI,CAAAC,QAAG,GAAGD,GAAC,IAAIC,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAO,MAAI,IAAE,CAACA,GAAC,IAAE,GAAGA,KAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAK,MAAIC,MAAE;AAAG,WAAQ,IAAE,GAAE,IAAED,KAAE;AAAI,IAAAC,OAAG,EAAE,CAAC,GAAE,IAAED,MAAE,MAAIC,OAAG;AAAK,SAAOA;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,SAAO;AAAE,WAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,SAI7+c;AAAC,UAAIA,MAAE,GAAG,MAAK,KAAK,IAAI,GAAE,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,KAAK,wBAAwBA,GAAC,GAAE,IAAE,KAAK,SAASA,GAAC,GAAE,IAAE,KAAK,UAAUA,GAAC;AAAE,WAAK,WAAS;AAAA;AAAA,YAEjI,CAAC;AAAA;AAAA,eAEE,CAAC;AAAA;AAAA;AAAA,cAGF,CAAC;AAAA;AAAA,6BAEc,CAAC;AAAA;AAAA;AAAA;AAAA,IAGvB;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAE;AAAC,QAAIA,MAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE,KAAI;AAAC,YAAI,IAAE,GAAG,MAAI,IAAE,MAAI,KAAK,KAAK,MAAI,IAAE,MAAI,KAAK;AAAG,iBAAQ,IAAE,GAAE,IAAE,KAAK,MAAK;AAAI,cAAE,GAAG,EAAE,EAAE,SAAO,IAAE,CAAC,CAAC,MAAI;AAAE,QAAAA,IAAE,KAAK,CAAC;AAAA,MAAC;AAAC,WAAOA;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM,QAAQ,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC;AAAG,QAAIA,MAAE;AAAG,aAAQ,IAAE,KAAK,OAAK,GAAE,IAAE,KAAK,MAAK;AAAI,MAAAA,OAAG,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,sBAAoB,YAAY,CAAC,MAAI,KAAK,YAAY,CAAC,CAAC,IAAG,IAAE,KAAK,OAAK,MAAIA,OAAG;AAAM,WAAOA;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAG,KAAK,SAAO;AAAE,aAAM;AAAG,QAAIA,MAAE,EAAE,MAAM,EAAE,GAAE,IAAE,KAAK,sBAAoB,YAAY,KAAK,IAAI,UAAQ,KAAK,YAAY,KAAK,OAAK,CAAC,GAAE,IAAE,KAAK,sBAAoB,YAAY,KAAK,IAAI,UAAQ,KAAK,YAAY,KAAK,OAAK,CAAC;AAAE,WAAM;AAAA,gBAC3rBA,IAAE,CAAC,CAAC;AAAA,gBACJA,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4BAIQ,CAAC;AAAA,4BACD,CAAC;AAAA;AAAA,EACxB;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,MAAE,KAAK,mBAAmB,CAAC;AAAE,WAAO,KAAK,SAAO,IAAE,wBAAwB,KAAK,sBAAoB,aAAW,KAAK,YAAY,CAAC,CAAC,gCAA8B,QAAQA,IAAE,CAAC,CAAC;AAAA,gCAClKA,IAAE,CAAC,CAAC;AAAA,gCACJA,IAAE,CAAC,CAAC;AAAA,yCACKA,IAAE,CAAC,CAAC;AAAA,EAAG;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,cAAa,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE;AAAe,UAAE,MAAI,MAAI,KAAG,mBAAkB,IAAE,MAAI,KAAG,mBAAkB,KAAG;AAAA,UACzX,CAAC;AAAA,UACD,IAAE,IAAE,4CAA0C,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAMvC,CAAC;AAAA;AAAA,UAEV,IAAE,IAAE,MAAI,EAAE;AAAA;AAAA,IACb;AAAC,SAAK,WAAS;AAAA,QACd,GAAGA,KAAE,KAAK,mBAAmB,CAAC;AAAA,QAC9B,KAAK,sBAAoB,GAAG,IAAE,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAQtB,KAAK,sBAAoB,gBAAc,EAAE,CAAC,CAAC;AAAA,qBAC3C,KAAK,sBAAoB,gBAAc,EAAE,CAAC,CAAC;AAAA;AAAA,UAEtD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM;AAAA;AAAA,QAEvB,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAE,YAAY,IAAE,GAAG,CAAC,KAAI,KAAI,GAAG,GAAEA,GAAC,CAAC;AAAA;AAAA;AAAA;AAGzD;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,QAAM,GAAE,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,GAAE,KAAK,gBAAc,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,eAAa,CAAC,GAAE,KAAK,aAAW;AAAA,EAAE;AAAA,EAAC,eAAe,GAAEC,KAAE,GAAE;AAAC,QAAI,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC,IAAG,KAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAG,GAAE,GAAE,KAAK,MAAM,IAAG,KAAK,MAAM,eAAc,CAAC;AAAE,QAAG,KAAK,aAAa,CAAC,EAAE,SAAO,GAAE;AAAC,WAAK,mBAAkB,KAAK,mBAAkB,KAAK,iBAAe,GAAE,KAAK,IAAI;AAAE,UAAI,IAAE,KAAK,aAAa,CAAC,EAAE,IAAI;AAAE,aAAO,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI;AAAE,WAAO,MAAI,GAAG,qBAAmB,IAAE,KAAK,MAAM,0BAA0B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,qBAAmB,IAAE,KAAK,MAAM,iCAAiC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,mBAAiB,IAAE,KAAK,MAAM,2BAA2B,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAE,MAAI,GAAG,6BAA2B,IAAE,KAAK,MAAM,iCAAiC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAG,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK,sBAAoB,GAAE,KAAK,IAAI,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAK,gBAAc;AAAK;AAAO,QAAI,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,GAAGA,KAAE,GAAE,CAAC;AAAE,SAAK,KAAK,iBAAe,KAAK,aAAa,CAAC,IAAE,CAAC;AAAG,QAAI,IAAE,GAAGA,KAAE,GAAE,KAAK,MAAM,IAAG,KAAK,MAAM,eAAc,CAAC,GAAE,IAAE,EAAE,EAAE,UAAU,gCAAgC;AAAE,UAAI,MAAI,KAAK,qBAAmB,KAAG,KAAK,MAAM,oBAAoB,EAAE,OAAO,GAAE,KAAK,sBAAoB,MAAI,KAAK,aAAa,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK,iBAAe,IAAG,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,CAAC,GAAE,IAAE,KAAG,EAAE,QAAQ,CAAC;AAAE,QAAG,KAAG,QAAM,IAAE;AAAE,YAAM,IAAI,MAAM,0EAA0E;AAAE,MAAE,CAAC,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,EAAE,IAAI,GAAE,KAAK,IAAI;AAAA,EAAC;AAAA,EAAC,MAAK;AAAC,QAAG,CAAC,KAAK;AAAW;AAAO,QAAI,IAAE,KAAK,kBAAgB,KAAK;AAAgB,YAAQ,IAAI,aAAY,GAAG,KAAK,eAAe,MAAM,KAAK,eAAe,IAAG,IAAI,CAAC,GAAG;AAAE,QAAIA,MAAE,KAAK,gBAAc,KAAK;AAAmB,YAAQ,IAAI,oBAAoB,KAAK,kBAAkB,EAAE,GAAE,QAAQ,IAAI,iBAAiB,KAAK,aAAa,KAAK,KAAK,MAAM,MAAIA,GAAC,CAAC,IAAI;AAAA,EAAC;AAAA,EAAC,IAAI,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAkB;AAAA,EAAC,IAAI,eAAc;AAAC,WAAO,KAAK;AAAA,EAAa;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,QAAG,KAAK,gBAAc,MAAK;AAAC,eAAQ,KAAK,KAAK;AAAa,aAAK,aAAa,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,eAAK,MAAM,oBAAoBA,IAAE,OAAO;AAAA,QAAC,CAAC;AAAE,eAAQ,KAAK,KAAK;AAAa,aAAK,aAAa,CAAC,EAAE,QAAQ,CAAAA,QAAG;AAAC,eAAK,MAAM,oBAAoBA,IAAE,OAAO;AAAA,QAAC,CAAC;AAAE,WAAK,eAAa,MAAK,KAAK,eAAa,MAAK,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,GAAE,KAAK,gBAAc;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED;AAAE,MAAG,MAAIC,IAAE;AAAK,WAAO;AAAE,MAAG,MAAIA,IAAE;AAAK,WAAO;AAAE,MAAG,MAAIA,IAAE;AAAQ,WAAO;AAAG,MAAG,MAAID,IAAE;AAAK,WAAO;AAAG,MAAG,MAAIC,IAAE;AAAQ,WAAO;AAAE,MAAG,MAAIA,IAAE;AAAM,WAAO;AAAE,QAAM,IAAI,MAAM,2BAA2B,CAAC,EAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAEI,IAAG,GAAE,CAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGL,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE;AAAA,EAAC,OAAK;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,GAAGA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC;AAAE,QAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,GAAGC,KAAE,CAAC;AAAE,SAAO,IAAE;AAAC;AAAC,SAASI,IAAGL,KAAE,GAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK,GAAG;AAAmB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAmB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAiB,aAAO,GAAG,CAAC;AAAA,IAAE,KAAK,GAAG;AAAyB,aAAO,GAAG,CAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iCAAiCA,GAAC,EAAE;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAO,EAAE,EAAE,QAAQ,8BAA8B,IAAEA,MAAE,GAAG,qBAAmB,GAAG,mBAAiBA,MAAE,GAAG,qBAAmB,GAAG;AAAgB;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAGA,QAAI,GAAG;AAAO,WAAO,GAAG;AAAmB,MAAGA,QAAI,GAAG,UAAQA,OAAG;AAAK,WAAO,GAAG,CAAC;AAAE,MAAGA,QAAI,GAAG,YAAUA,QAAI,GAAG;AAAO,WAAO,GAAG;AAAyB,QAAM,IAAI,MAAM,gCAAgCA,GAAC,EAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,SAAM,GAAGD,IAAE,CAAC,CAAC,IAAIA,IAAE,CAAC,CAAC,IAAI,CAAC,IAAIC,GAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEryHA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN;AAAC;AAX4pH,IAW1pH,KAAG;AAXupH,IAW7nH,KAAG;AAX0nH,IAW9mH,KAAG;AAAiB,IAAI,KAAG;AAAP,IAAiD,KAAG,KAAG;AAAA;AAAA;AAAvD,IAEtE,KAAG,KAAG;AAAA;AAAA;AAFgE,IAItE,KAAG;AAJmE,IAIvD,KAAG;AAAsC,IAAI,KAAG;AAAP,IAAmB,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAtB,IASxD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATqD,IAmBxD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAnBqD,IA6BxD,KAAG;AA7BqD,IA6Bf,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAEpNA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAIA,MAAE,EAAE,QAAO,IAAE,GAAG,MAAKA,GAAC,GAAE,IAAE,GAAGA,GAAC,GAAE,IAAE,GAAGA,KAAE,CAAC,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,IAAEA,OAAG,IAAE,OAAK,QAAQ,EAAE,KAAK,GAAG,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,UAElR,CAAC;AAAA,kCACuB,CAAC;AAAA;AAAA,4CAES,CAAC;AAAA;AAAA;AAAA,EAExC;AAAC;AAAE,IAAI,KAAG,GAAG;AAAV,IAAoB,KAAG;AAAvB,IAA4B,KAAG;AAA/B,IAAoC,KAAG,CAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,SAAOA,OAAK,OAAK,GAAGA,GAAC,IAAE,CAAC,IAAG,GAAGA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAE,EAAE,UAAU,4BAA4B;AAAjD,IAAmD,KAAG;AAAI,SAAS,KAAI;AAAC,SAAO,EAAE,EAAE,OAAO,UAAQ,OAAK,OAAK,EAAE,EAAE,OAAO,OAAO,SAAO,EAAE,EAAE,OAAO,OAAO,QAAM,OAAO,mBAAiB,KAAG,OAAK;AAAI;AAAC,IAAI,KAAG,MAAMA,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,YAAY,GAAE;AAAC,QAAG,MAAM,GAAE,KAAK,cAAY,oBAAI,WAAQ,KAAK,kBAAgB,oBAAI,WAAQ,KAAK,eAAa,oBAAI,WAAQ,KAAK,gBAAc,GAAE,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE,KAAK,kBAAgB,GAAE,KAAK,oBAAkB,OAAG,KAAK,iBAAe,GAAE,KAAK,WAAS,OAAG,CAAC,EAAE,EAAE,QAAQ,WAAW;AAAE,YAAM,IAAI,MAAM,uCAAuC;AAAE,QAAIC;AAAE,QAAG,KAAG,MAAK;AAAC,UAAG,aAAa;AAAG,QAAAA,MAAE;AAAA,WAAM;AAAC,YAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,GAAE,CAAC;AAAE,QAAAA,MAAE,IAAI,GAAG,CAAC;AAAA,MAAC;AAAC,WAAK,cAAY,CAAC,GAAE,KAAK,sBAAoB;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC;AAAE,MAAAA,MAAE,IAAI,GAAG,CAAC,GAAE,KAAK,cAAY,GAAG,EAAE,EAAE,UAAU,eAAe,CAAC,GAAE,KAAK,sBAAoB;AAAA,IAAE;AAAC,SAAK,QAAMA,KAAE,KAAK,SAAO,KAAK,MAAM,GAAG,QAAO,KAAK,iBAAe,IAAI,GAAG,KAAK,KAAK,GAAE,KAAK,qBAAmB,GAAG,GAAE,KAAK,UAAQ,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,QAAQ,WAAW,IAAE,KAAK;AAAA,EAAc;AAAA,EAAC,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK,eAAeA,KAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS,OAAG,EAAE,UAAQ,EAAC,SAAQ,GAAE,UAAS,CAAC,GAAE,CAAC,EAAC,GAAE,EAAE,WAAS,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,GAAGA,GAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAG,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,WAAO,EAAE,QAAMA,KAAE,EAAE,UAAQ,MAAK,KAAK,8BAA8B,CAAC,GAAE,EAAE;AAAA,EAAM;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,SAAI,EAAE,EAAE,QAAQ,gCAAgC,KAAG,EAAE,EAAE,QAAQ,OAAO,MAAI,KAAK,uBAAuB,CAAC,GAAE,MAAI,eAAa,KAAG;AAAK,YAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,GAAE,EAAC,OAAMA,KAAE,OAAM,GAAE,QAAO,GAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,QAAQ,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,KAAK,uBAAuBA,GAAC,GAAE,MAAI;AAAY,YAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,QAAQ,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,KAAE,OAAM,GAAG,QAAO,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,8BAA8B,GAAE;AAAC,SAAK,YAAY,EAAE,MAAM;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,oBAAmB,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,SAAS,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,aAAO,KAAK,qBAAqB,CAAC;AAAE,QAAG,MAAI;AAAS,aAAO;AAAE,QAAI,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,EAAE,IAAI;AAAG,QAAI;AAAE,QAAG,MAAI,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC;AAAM,UAAE,KAAK,qBAAqB,CAAC;AAAE,WAAO,MAAI,KAAK,kBAAgB,EAAE,IAAI,IAAE,IAAG,KAAK,qBAAqB,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,KAAK,YAAY,IAAI,CAAC,GAAE;AAAC,UAAI,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,aAAO,IAAI,QAAQ,OAAG,EAAE,KAAK,CAAC,CAAC;AAAA,IAAC;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,KAAK,EAAE,MAAM;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,aAAO,KAAK,qBAAqB,CAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,OAAO,KAAG,CAAC,EAAE,EAAE,QAAQ,8BAA8B,KAAG,EAAE,EAAE,UAAU,eAAe,MAAI;AAAE,YAAM,IAAI,MAAM,8FAA8F;AAAE,QAAI,IAAE,MAAK;AAAE,QAAG,MAAI,eAAa,EAAE,EAAE,IAAI,wBAAwB,GAAE;AAAC,UAAE,KAAK,OAAO,CAAC;AAAE,UAAI,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAE,KAAK,MAAM,wBAAwB,EAAE,QAAQ,SAAQ,GAAG,GAAG,CAAC,CAAC;AAAA,IAAC;AAAC,SAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,MAAI,eAAa,MAAM,KAAK,MAAM,sBAAsB;AAAE,QAAI;AAAE,QAAG,MAAI,aAAY;AAAC,UAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE,KAAK,MAAM,GAAE,KAAK,KAAK,EAAE,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC,WAAS,KAAG;AAAK,UAAE,KAAK,qBAAqB,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,EAAE,cAAc,CAAC;AAAE,UAAE,KAAK,MAAM,gCAAgC,GAAE,CAAC;AAAA,IAAC;AAAC,QAAG,KAAG,QAAM,KAAK,8BAA8B,CAAC,GAAE,KAAG,MAAK;AAAC,UAAI,IAAE,KAAK,MAAM;AAAG,SAAG,GAAE,MAAI,EAAE,aAAa,CAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,KAAK,qBAAqB,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC;AAAE,WAAO,KAAK,YAAY,OAAO,CAAC,GAAE,EAAE,QAAQ,OAAG,EAAE,CAAC,CAAC,GAAE,KAAK,gBAAgB,IAAI,CAAC,MAAI,KAAK,gBAAgB,OAAO,CAAC,GAAE,KAAK,YAAY,CAAC,KAAG,GAAG,EAAE,aAAa,GAAE,IAAI,GAAE,KAAK,mBAAkB;AAAA,EAAC;AAAA,EAAC,UAAU,GAAEA,MAAE,CAAC,GAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,GAAE,SAAQ,EAAC,IAAE;AAAE,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,uDAAuD;AAAE,QAAG,KAAG,MAAK;AAAC,UAAI;AAAE,UAAE,IAAE,IAAI,GAAG,GAAE,EAAE,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE;AAAE,UAAI,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,UAAU,GAAEA,GAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAG,KAAG;AAAK,YAAM,KAAG,OAAK,IAAI,MAAM,gCAAgC,IAAE,IAAI,MAAM,iCAAiC;AAAE,QAAI,IAAE,KAAK,OAAO,GAAEA,IAAE,cAAc,GAAE,IAAE,GAAG,EAAE,yBAAyB,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,OAAO,OAAO,EAAC,WAAU,EAAC,GAAE,EAAE,OAAO;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,uBAAuB,GAAE;AAAC,QAAG,KAAG;AAAK,eAAQA,MAAE,GAAEA,MAAE,EAAE,QAAOA,OAAI;AAAC,YAAI,IAAE,EAAEA,GAAC;AAAE,YAAG,CAAC,GAAG,CAAC;AAAE,gBAAM,EAAE,EAAE,QAAQ,8BAA8B,IAAE,MAAM,aAAa,CAAC,+IAA+I,IAAE,MAAM,aAAa,CAAC,wCAAwC;AAAA,MAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAE;AAAC,QAAG,EAAC,OAAMA,KAAE,OAAM,GAAE,UAAS,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,IAAE,EAAE,cAAcA,GAAC;AAAE,QAAG,EAAE,EAAE,QAAQ,8BAA8B,GAAE;AAAC,UAAI,IAAE,KAAK,OAAO,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,KAAK,MAAM,gCAAgC,EAAE,QAAQ,SAAQ,GAAG,GAAGA,GAAC,CAAC,EAAE,SAAS,GAAE,CAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,YAAY,KAAG,MAAI,MAAG,IAAE,IAAE,GAAGA,GAAC,IAAEA,KAAE,IAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,SAAS,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,KAAK,MAAM,gDAAgD,EAAE,QAAQ,SAAQ,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,GAAE,CAAC;AAAE,WAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,iBAAgB;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE;AAAA,EAAC;AAAA,EAAC,KAAK,GAAE;AAAC,QAAIA,MAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAE,EAAE;AAAE,QAAI,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,KAAK,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI,GAAE,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,IAAI,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI;AAAE,SAAK,eAAaA,KAAE,MAAI,KAAK,qBAAmB;AAAM,QAAI,IAAE,EAAC,cAAa,KAAK,cAAa,gBAAe,KAAK,gBAAe,UAAS,MAAK,QAAO,KAAI;AAAE,YAAO,YAAS;AAAC,UAAG,EAAE,EAAE,UAAU,+CAA+C,IAAE,GAAE;AAAC,YAAI,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,UAAE,WAAS,EAAE,IAAI,CAAC,GAAE,EAAE,sBAAoB,MAAI,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,MAAK,EAAE,CAAC,GAAE,IAAG,EAAC,EAAE,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI;AAAA,MAAC;AAAM,UAAE,WAAS,EAAC,OAAM,4DAA2D;AAAE,aAAO,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE;AAAA,IAAC,GAAG;AAAA,EAAC;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,OAAG,eAAc,KAAK,eAAc,wBAAuB,KAAK,eAAe,mBAAkB,mBAAkB,KAAK,eAAe,aAAY;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE,IAAE,KAAK,MAAM,WAAW,IAAE,EAAC,SAAQ,EAAE,IAAI,GAAE,OAAM,KAAI;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,EAAE,EAAE,UAAU,+CAA+C,IAAE,KAAG,KAAK,MAAM,SAAS,GAAE,MAAI,EAAE,QAAM,EAAE,IAAI,GAAE;AAAA,EAAE;AAAA,EAAC,MAAM,aAAa,GAAE;AAAC,QAAG,EAAE,EAAE,UAAU,+CAA+C,IAAE;AAAE,aAAO,KAAK,MAAM,uBAAuB,CAAC;AAAE,QAAIA,MAAE;AAAE,WAAOA,IAAE,QAAMA,IAAE;AAAA,EAAO;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,gBAAgB,IAAI,CAAC;AAAE,aAAM;AAAG,QAAG,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAE,aAAM;AAAG,QAAGA,MAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS,IAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,YAAW,CAACA,OAAG,KAAK,QAAQ,IAAI,CAAC,EAAE,WAAS;AAAE,aAAM;AAAG,QAAG,KAAK,YAAY,IAAI,CAAC;AAAE,aAAO,KAAK,gBAAgB,IAAI,CAAC,GAAE,KAAK,kBAAiB;AAAG,SAAK,eAAe,CAAC;AAAE,QAAG,EAAC,oBAAmB,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,WAAO,KAAG,SAAO,KAAK,YAAY,EAAE,KAAK,QAAOA,GAAC,GAAE,KAAK,YAAY,EAAE,KAAK,QAAOA,GAAC,IAAG,KAAK,QAAQ,OAAO,CAAC,GAAE;AAAA,EAAE;AAAA,EAAC,eAAe,GAAE;AAAC,QAAG,EAAC,SAAQA,KAAE,OAAM,GAAE,UAAS,GAAE,OAAM,GAAE,UAAS,GAAE,OAAM,EAAC,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,IAAE,KAAG,EAAE,cAAY,GAAE,IAAE,KAAK,aAAa,IAAI,CAAC;AAAE,QAAE,IAAE,KAAK,aAAa,IAAI,GAAE,IAAE,CAAC,KAAG,KAAK,aAAa,OAAO,CAAC,GAAEA,OAAG,SAAO,KAAK,iBAAe,KAAK,aAAa,GAAE,CAAC,GAAE,KAAK,eAAe,eAAeA,KAAE,GAAE,GAAE,CAAC;AAAI,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC;AAAE,MAAE,UAAQ,MAAK,EAAE,WAAS,MAAK,EAAE,WAAS,OAAG,EAAE,QAAM;AAAA,EAAI;AAAA,EAAC,WAAW,GAAE;AAAC,WAAO,KAAK,YAAY,CAAC,GAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EAAO;AAAA,EAAC,YAAY,GAAE;AAAC,WAAO,KAAK,QAAQ,IAAI,CAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,MAAE,IAAG;AAAC,WAAO,EAAE,EAAE,QAAQ,mBAAmB,KAAG,EAAE,MAAM,OAAG,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,WAAS,QAAM,EAAE,cAAc,EAAE,KAAK,IAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,kBAAiB;AAAC,WAAO,KAAK;AAAA,EAAK;AAAA,EAAC,MAAM,GAAE;AAAC,MAAE,KAAK,uEAAuE;AAAE,QAAIA,MAAE,EAAE,SAAS;AAAE,WAAO,GAAG,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAMA,GAAC,GAAE,IAAE,KAAK,cAAc,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,IAAI,GAAE;AAAC,QAAG,KAAK,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,GAAG,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,MAAM;AAAE,aAAO,KAAK,WAAW,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,EAAE,QAAQ,6BAA6B;AAAE,aAAO,KAAK,cAAc,GAAE,IAAG,EAAE,KAAK;AAAE,QAAIA,MAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAE,IAAE,KAAK,cAAcA,KAAE,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAE,yBAAyB,CAAC;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,QAAI;AAAE,QAAGA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAA,IAAC;AAAM,UAAE,KAAK,MAAM,GAAE,GAAEA,GAAC;AAAE,WAAO,KAAK,QAAQ,IAAI,CAAC,EAAE,QAAM,MAAK,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE;AAAC,WAAO,GAAG,EAAE,yBAAyB,KAAK,eAAe,GAAEA,KAAE,CAAC,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAIA,MAAE,IAAI,GAAG,EAAE,KAAK;AAAE,WAAO,KAAK,gBAAgBA,KAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,IAAI,GAAG,EAAE,KAAK;AAAE,WAAO,KAAK,gBAAgBA,KAAE,CAAC,CAAC,GAAE,EAAE,OAAM,MAAK,IAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE;AAAC,QAAI,IAAE,CAAC,GAAG,EAAE,KAAK,GAAE,GAAG,GAAG,EAAE,KAAK,CAAC,GAAE,IAAE,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,QAAO,EAAE,OAAM,GAAE,IAAE,CAAC,GAAGA,GAAC,GAAE,GAAG,GAAGA,GAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAMA,KAAE,OAAM,EAAE,MAAK;AAAA,EAAC;AAAA,EAAC,OAAO,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,UAAS,GAAE,OAAM,GAAE,OAAM,EAAC,IAAE;AAAE,QAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAEA,IAAE,CAAC,IAAE;AAAE,QAAE,OAAO,KAAG,GAAE,MAAI,2GAA2G;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE;AAAE,QAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAE,IAAI,GAAG,CAAC;AAAE,QAAI,IAAE,MAAG,IAAE,CAACA,OAAG,OAAKA,MAAE,GAAG,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,GAAE,GAAE,GAAEA,GAAC;AAAE,WAAM,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAE,OAAM;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE,GAAE,GAAE,IAAE,OAAG,GAAE;AAAC,QAAI,IAAE,KAAK,eAAe,EAAE,aAAY,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAG,EAAE,iBAAe,EAAE,WAAS,OAAI,EAAE,qBAAmB,GAAG,OAAM;AAAC,UAAI,IAAE,KAAG,OAAK,IAAE,GAAG,EAAE,WAAW;AAAE,QAAE,WAAS,EAAE,IAAI,OAAG,IAAE,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,eAAa,SAAO,EAAE,QAAM,EAAE,cAAa,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,aAAO,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,QAAI,IAAE,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAG,EAAE,UAAQ;AAAY,cAAM,IAAI,MAAM,iIAAiI;AAAE,UAAI,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAG,EAAE,WAAS,MAAK;AAAC,YAAG,CAAC,EAAE,gBAAc,EAAE,cAAc,EAAE,KAAK,KAAG,EAAE,EAAE,UAAU,2BAA2B;AAAE,iBAAM,EAAC,OAAM,EAAE,OAAM,SAAQ,MAAK,WAAU,MAAG,eAAc,EAAE,OAAM;AAAE,UAAE,iBAAe,EAAE,WAAS,MAAG,EAAE,QAAM,EAAE;AAAA,MAAM;AAAC,UAAG,KAAK,YAAY,EAAE,MAAM,GAAE,CAAC,CAAC,EAAE,YAAU,CAAC,CAAC,EAAE;AAAa,YAAE,EAAE,WAAS,KAAK,aAAa,CAAC,IAAE,KAAK,WAAW,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAA,eAAU,EAAE,YAAU,CAAC,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE;AAAC,YAAI,IAAE,GAAE,IAAE,EAAE;AAAM,UAAE,QAAM,EAAE,OAAM,IAAE,KAAK,cAAc,GAAE,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM,GAAE,EAAE,QAAM;AAAA,MAAC;AAAC,aAAM,EAAC,OAAM,EAAE,OAAM,SAAQ,GAAE,WAAU,MAAE;AAAA,IAAC,CAAC;AAAE,SAAK,YAAY,EAAE,MAAM;AAAE,QAAI,IAAE,EAAC,OAAM,EAAE,OAAM,SAAQ,GAAE,WAAU,MAAE,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,KAAK,iBAAiB,GAAE,MAAI,GAAG,KAAK,OAAM,GAAE,GAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,KAAK,WAAW,IAAG,EAAE,EAAE,IAAI,qBAAqB,KAAG,GAAG,KAAK,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,QAAQ,OAAG,KAAK,8BAA8B,CAAC,CAAC,GAAE,MAAI,IAAE,KAAK,SAAS,CAAC,GAAE,KAAK,aAAa,KAAK,EAAC,MAAK,EAAE,YAAY,MAAK,OAAM,KAAK,aAAa,CAAC,EAAC,CAAC;AAAG,QAAI,IAAE,EAAE,EAAE,UAAU,uBAAuB;AAAE,QAAG,IAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI;AAAE,UAAE,KAAK,kBAAgB,MAAI,KAAK,MAAM,GAAG,MAAM,GAAE,KAAK,kBAAgB;AAAA,IAAE;AAAC,QAAG,CAAC,EAAE,EAAE,QAAQ,qBAAqB,KAAG,EAAE,YAAU,MAAI,OAAG;AAAC,UAAI,IAAE,KAAK,aAAa,CAAC;AAAE,aAAO,KAAK,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,KAAE,GAAE,GAAE,IAAE,OAAG;AAAC,WAAO,IAAE,KAAGA,IAAE,CAAC,EAAE,OAAM,KAAK,gBAAgB,GAAEA,KAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE;AAAC,WAAO,KAAK,KAAK,gBAAc,KAAK,YAAY,CAAC,IAAEA,IAAE,IAAG,KAAK,YAAY,CAAC;AAAA,EAAC;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,UAAS;AAAC,SAAK,aAAW,EAAE,EAAE,QAAQ,SAAS,KAAG,OAAO,KAAK,KAAK,WAAW,EAAE,QAAQ,CAAAA,QAAG;AAAC,WAAK,MAAM,cAAc,KAAK,YAAYA,GAAC,EAAE,YAAY,GAAE,OAAO,KAAK,YAAYA,GAAC;AAAA,IAAC,CAAC,GAAE,KAAK,eAAe,QAAQ,GAAE,KAAK,UAAQ,QAAM,OAAO,qBAAmB,eAAa,KAAK,kBAAkB,oBAAkB,KAAK,OAAO,OAAO,IAAE,KAAK,SAAO,MAAK,KAAK,wBAAsB,KAAK,MAAM,UAAQ,MAAK,KAAK,MAAM,QAAQ,IAAG,KAAK,WAAS;AAAA,EAAG;AAAA,EAAC,iBAAgB;AAAC,WAAO,KAAK,uBAAqB,SAAO,KAAK,sBAAoB,GAAG,MAAI;AAAC,UAAG,CAAC,EAAE,EAAE,IAAI,8BAA8B,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE,QAAQ,OAAO;AAAE,UAAE,EAAE,IAAI,SAAQ,KAAE;AAAE,YAAIA,MAAE,KAAK,IAAI,GAAG,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;AAAE,YAAG,EAAE,EAAE,IAAI,SAAQ,CAAC,GAAEA,MAAE;AAAE,iBAAO;AAAA,MAAE;AAAC,aAAO;AAAA,IAAE,CAAC,IAAG,KAAK;AAAA,EAAmB;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,eAAe,MAAI,KAAG,KAAG;AAAA,EAAE;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,GAAE,SAAQ,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,KAAG;AAAK;AAAO,QAAI,IAAE,KAAK,gBAAc,MAAK;AAAE,UAAI,IAAE,EAAE,IAAI;AAAG,QAAI,IAAEA,IAAE;AAAS,QAAG,KAAG,SAAO,IAAE,GAAG,GAAE,CAAC,GAAEA,IAAE,WAAS,IAAG,KAAG,MAAK;AAAC,UAAI,IAAE,GAAG,CAAC,GAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,aAAa,cAAY,aAAa;AAAkB,OAAC,KAAG,CAAC,OAAK,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,IAAG,IAAE,IAAE,IAAI,GAAG,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,UAAI,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAK,eAAe,GAAE,CAAC,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,UAAE,EAAE,QAAM,GAAG,SAAO,EAAE,QAAM,GAAG,QAAO,EAAE,WAAS,GAAE,KAAK,MAAM,2BAA2B,KAAK,WAAW,EAAE,MAAM,GAAE,GAAE,GAAE,CAAC;AAAE,UAAI,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,KAAK,gBAAgB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,KAAK,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAAA,IAAE,WAAS,EAAE,UAASA,IAAE,WAAS,EAAE,UAASA,IAAE,QAAM,EAAE,OAAM,EAAE,EAAE,IAAI,qBAAqB,IAAE,KAAK,YAAY,EAAE,MAAM,KAAGA,IAAE,UAAQ,EAAE,SAAQA,IAAE,SAAO,MAAK,KAAK,QAAQ,OAAO,EAAE,MAAM,IAAG,KAAK,8BAA8B,CAAC,GAAE,MAAI,KAAK,gBAAc,EAAE,IAAI,IAAE;AAAA,IAAE,OAAK;AAAC,UAAI,IAAE,KAAK,eAAe,GAAE,GAAE,GAAE,CAAC;AAAE,MAAAA,IAAE,UAAQ;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,QAAQ,IAAI,CAAC,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,WAAOA,OAAG,SAAO,EAAE,SAAO,GAAGA,KAAE,CAAC,IAAG,EAAE;AAAA,EAAM;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,KAAK,iBAAe,KAAK,aAAa,GAAE,CAAC,GAAE,CAAC,KAAK,qBAAmB,KAAK,gBAAc,KAAK,qBAAmB,OAAK,MAAK;AAAC,UAAI,KAAG,KAAK,gBAAc,OAAK,MAAM,QAAQ,CAAC;AAAE,WAAK,oBAAkB,MAAG,QAAQ,KAAK,6BAA6B,CAAC,uCAAuC;AAAA,IAAC;AAAC,WAAO,KAAK,eAAe,eAAe,GAAEA,KAAE,CAAC;AAAA,EAAC;AAAA,EAAC,aAAa,GAAEA,KAAE;AAAC,WAAO,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,gBAAgBA,GAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,aAAO,CAAC,EAAC,CAAC,KAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,WAAK,iBAAiB,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,8BAA6B;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,KAAK,MAAM,8BAA6B;AAAC,eAAO,CAAC,EAACA,GAAC,KAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,UAAE,KAAK,KAAK,sBAAsBA,GAAC,CAAC;AAAE,aAAO,QAAQ,IAAI,CAAC;AAAA,IAAC,OAAK;AAAC,eAAO,CAAC,EAACA,GAAC,KAAI,OAAO,QAAQ,KAAK,WAAW,GAAE;AAAC,YAAI,IAAE,IAAI,QAAQ,OAAG;AAAC,cAAG;AAAC,iBAAK,iBAAiBA,GAAC,GAAE,EAAE,IAAE;AAAA,UAAC,SAAO,GAAE;AAAC,kBAAM;AAAA,UAAC;AAAA,QAAC,CAAC;AAAE,UAAE,KAAK,CAAC;AAAA,MAAC;AAAC,aAAO,QAAQ,IAAI,CAAC;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,MAAM,sBAAsB,GAAE;AAAC,WAAO,KAAK,MAAM,GAAG,oBAAoB,EAAE,cAAa,KAAK,MAAM,6BAA6B,qBAAqB,IAAE,KAAK,iBAAiB,CAAC,KAAG,MAAM,GAAG,GAAE,KAAK,sBAAsB,CAAC;AAAA,EAAE;AAAA,EAAC,iBAAiB,GAAE;AAAC,QAAG,KAAK,MAAM,GAAG,oBAAoB,EAAE,cAAa,KAAK,MAAM,GAAG,WAAW,MAAI;AAAG,YAAM,QAAQ,IAAI,KAAK,MAAM,GAAG,kBAAkB,EAAE,YAAY,CAAC,GAAE,KAAK,MAAM,GAAG,mBAAmB,EAAE,gBAAe,KAAK,MAAM,GAAG,cAAc,MAAI,SAAI,GAAG,EAAE,QAAO,KAAK,MAAM,GAAG,iBAAiB,EAAE,cAAc,CAAC,GAAE,IAAI,MAAM,oCAAoC,KAAG,IAAI,MAAM,6CAA6C;AAAE,WAAM;AAAA,EAAE;AAAA,EAAC,sBAAqB;AAAC,aAAQ,KAAK,OAAO,OAAO,KAAK,WAAW,GAAE;AAAC,WAAK,MAAM,SAAS,EAAE,YAAY;AAAE,UAAG,EAAC,oBAAmBA,KAAE,wBAAuB,GAAE,QAAO,GAAE,QAAO,GAAE,kBAAiB,GAAE,yBAAwB,GAAE,qBAAoB,EAAC,IAAE,GAAG,KAAK,OAAM,EAAE,SAAQ,EAAE,YAAY;AAAE,QAAE,qBAAmBA,KAAE,EAAE,yBAAuB,GAAE,EAAE,SAAO,GAAE,EAAE,SAAO,GAAE,EAAE,mBAAiB,GAAE,EAAE,0BAAwB,GAAE,EAAE,sBAAoB;AAAA,IAAC;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,MAAE,WAAS,EAAE,YAAU;AAAO,QAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,GAAG,EAAE;AAAQ,QAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;AAAE,YAAM,IAAI,MAAM,+RAA+R;AAAE,QAAI,IAAE,EAAE,aAAa,GAAEA,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAO,GAAG,EAAE,qBAAqB,GAAEA,KAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAE,GAAG,aAAW;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAG,MAAI,aAAW,MAAI;AAAY,WAAOA;AAAE,MAAG,MAAI,WAAS,MAAI,QAAO;AAAC,QAAIC,MAAE,MAAI,UAAQ,IAAI,WAAWD,IAAE,MAAM,IAAE,IAAI,WAAWA,IAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO,EAAE;AAAE,MAAAA,IAAE,CAAC,IAAE,KAAK,MAAMD,IAAE,CAAC,CAAC;AAAE,WAAOC;AAAA,EAAC;AAAM,UAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG;AAAS,SAAS,KAAI;AAAC,IAAE,EAAE,IAAI,4BAA2B,IAAE;AAAC;AAAC,GAAG,UAAU,KAAG,GAAG,SAAQ,MAAI,IAAI,MAAG,CAAC;AAAE,IAAI,MAAI,EAAC,gBAAe,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAGlviB,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM,GAAE,KAAK,WAAS;AAAA;AAAA,UAE3K,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQN;AAAC;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAKb,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,uBAAqB,MAAG,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC;AAAE,QAAI,IAAE,KAAK,YAAY;AAAO,SAAK,sBAAoB,GAAG,CAAC;AAAE,QAAI,IAAE;AAAG,QAAG;AAAE,UAAG,MAAI,KAAG,EAAE,cAAc,KAAK,WAAW,MAAI;AAAE,YAAE;AAAA;AAAA;AAAA;AAAA;AAAA,eAIzS,IAAE;AAAA,YACR,GAAG,CAAC,CAAC;AAAA,WACP,MAAI;AAAE,aAAK,sBAAoB,KAAG;AAAA;AAAA;AAAA;AAAA,cAIhC,KAAG;AAAA,yCAC0B,KAAK,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,WAG5C;AAAC,YAAI,IAAE,GAAG,UAAS,CAAC;AAAE,aAAK,sBAAoB,KAAG;AAAA;AAAA,iBAEjD,EAAE,IAAE,CAAC,CAAC,qBAAqB,CAAC;AAAA;AAAA,iBAE5B,EAAE,IAAE,CAAC,CAAC,qBAAqB,CAAC;AAAA;AAAA;AAAA;AAAA,cAIjC,KAAG;AAAA;AAAA,iBAEE,EAAE,IAAE,CAAC,CAAC,YAAY,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA;AAAA,iBAEvC,EAAE,IAAE,CAAC,CAAC,YAAY,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAI7C;AAAC,SAAK,WAAS;AAAA;AAAA,UAEhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAQD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,SAAOC,IAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAsC,KAAG;AAAA;AAAA;AAAA;AAGngB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAsC,KAAG;AAAA;AAAA;AAAA;AAGha,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAA0B,SAAS,GAAG,EAAC,WAAUD,KAAE,iBAAgB,GAAE,eAAcC,KAAE,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,KAAG,EAAE;AAAM,QAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,EAAE,QAAO,CAAC;AAAE,aAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,KAAG,KAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,IAAE,IAAE,IAAI,GAAG,EAAE,OAAMD,GAAC,GAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAG,EAAC,WAAUA,KAAE,iBAAgB,GAAE,kBAAiBC,MAAE,OAAG,iBAAgB,IAAE,OAAG,eAAc,GAAE,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAG,KAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,GAAE,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,OAAG;AAAC,YAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,eAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAA,MAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAI,EAAE,UAAQ,YAAU,EAAE,UAAQ,YAAU,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,MAAI,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,aAAO,EAAE,SAAO,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,8BAA8B,KAAG,KAAG,MAAK;AAAE,WAAO,IAAE,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,EAAE,OAAMC,GAAC,IAAE,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,EAAE,KAAK,GAAE,EAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAG;AAAC,MAAGA,QAAI;AAAS,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAO,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAM,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAQ,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAQ,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAY,WAAO,IAAE,KAAG;AAAG,MAAGA,QAAI;AAAU,WAAO,IAAE,KAAG;AAAG,QAAM,IAAI,MAAM,cAAcA,GAAC,kDAAkD;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,SAAS,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,KAAK,KAAK,IAAE,CAAC,GAAE,IAAE,IAAE,gBAAc,eAAc,IAAE,IAAE,gBAAc,eAAc,IAAE,IAAE,CAAC,UAAS,QAAQ,IAAE,CAAC,UAAS,QAAQ,GAAE,IAAE,IAAE,CAAC,UAAS,QAAQ,IAAE,CAAC,UAAS,QAAQ,GAAE,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAE1kF,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA,YACD,CAAC;AAAA,YACF,IAAE;AAAgC,QAAI,IAAE,IAAE,oCAAkC;AAAG,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB;AAAE,QAAI,IAAE,QAAO,IAAE;AAAO,MAAE,CAAC,IAAEA,IAAE,CAAC,IAAE,IAAE,cAAc,EAAE,CAAC,CAAC,MAAIA,IAAE,CAAC,IAAE,EAAE,CAAC,MAAI,IAAE,cAAcA,IAAE,CAAC,CAAC,MAAK,KAAK,WAAS;AAAA,QAClU,CAAC;AAAA;AAAA,sCAE6B,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIhB,CAAC;AAAA,uBACD,CAAC;AAAA,8BACM,CAAC;AAAA,wCACS,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA,uBAIlB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,uBACd,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAS3B,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,IAAI,KAAG,EAAC,MAAK,yCAAwC,MAAK,wCAAuC;AAAjG,IAAmG,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA,UAGnP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUN;AAAC;AAAE,IAAI,KAAG;AAAgB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,GAAG,MAAK,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAG,MAAK,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,QAAO,EAAE,QAAO,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,CAAC,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,SAAO,GAAE;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAGD,IAAE,KAAK,GAAE,GAAG,GAAGA,IAAE,KAAK,CAAC,GAAE,IAAE,EAAC,OAAMA,IAAE,OAAM,OAAM,GAAE,QAAOA,IAAE,OAAM,GAAE,IAAE,CAAC,GAAG,CAAC,GAAE,GAAG,GAAG,CAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E;AAAE,MAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,EAAE,YAAU,CAAC,GAAG,EAAE,OAAM,CAAC,KAAG,EAAE,EAAE,YAAU,QAAM,GAAG,EAAE,OAAM,CAAC,KAAG,GAAG,GAAE,GAAE,CAAC,KAAG,EAAE,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAE;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAiC,QAAGA,OAAG,MAAK;AAAC,UAAI,IAAE,IAAEA;AAAE,UAAE,4BAA4B,EAAE,MAAM,CAAC,IAAE,EAAE,YAAY,CAAC,IAAE,CAAC;AAAA,IAAU;AAAC,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACtvE,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,UAIb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAQuB,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIL,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASnB,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA;AAAA;AAAA,YAGP,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKd,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAMd,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIR;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,QAAO,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,OAAM,IAAE;AAAG,IAAAA,QAAI,SAAO,IAAE,QAAMA,QAAI,SAAO,IAAE,eAAc,IAAE,SAAOA,QAAI,UAAQ,IAAE,gBAAe,IAAE;AAAO,QAAI,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,QAAM,IAAE,aAAWA,QAAI,SAAO,IAAE,cAAYA,QAAI,QAAM,IAAE,aAAWA,QAAI,UAAQ,IAAE;AAAY,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YACrcA,QAAI,KAAK;AAAA;AAAA,mBAEFA,QAAI,MAAM;AAAA;AAAA;AAAA;AAAA,wBAIL,CAAC;AAAA,cACXA,QAAI,KAAK,OAAOA,QAAI,KAAK;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAOrB,IAAE;AAAO,IAAAA,QAAI,SAAO,IAAE,OAAM,IAAE;AAAA;AAAA;AAAA;AAAA,SAI5B,IAAE,WAASA,QAAI,UAAQ,IAAE,OAAM,IAAE;AAAA;AAAA;AAAA;AAAA,SAIjC,IAAE;AAAS,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACF,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA,0CACmB,CAAC;AAAA;AAAA;AAAA;AAAA,UAIjC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAQuB,CAAC;AAAA;AAAA,kCAED,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAML,CAAC;AAAA;AAAA,YAEnB,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA,YACP,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA,YACd,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA,YACd,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAOf,CAAC;AAAA;AAAA,oBAEO,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAE,CAAC;AAAE,SAAK,EAAE,WAAS,KAAG,EAAE,EAAE,SAAO,CAAC,EAAE,YAAU,KAAG;AAAC,QAAIC,MAAE,EAAE,SAAO,EAAE,EAAE,SAAO,CAAC,EAAE,UAAQD,IAAE,CAAC,GAAE,IAAE,EAAE,yBAAyBC,GAAC;AAAE,MAAE,KAAK,EAAC,QAAOA,KAAE,YAAW,GAAE,SAAQ,KAAK,KAAKA,MAAE,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAGD,IAAE,KAAK,GAAE,IAAEA;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAG,EAAC,QAAO,GAAE,YAAW,GAAE,SAAQ,EAAC,IAAE,EAAE,CAAC,GAAE,GAAE;AAAE,IAAAC,QAAI,SAAO,IAAE,MAAI,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUD,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,GAAE,CAAC,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUA,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,CAAC,IAAE,IAAE,IAAI,GAAG,EAAC,YAAW,GAAE,QAAO,GAAE,WAAUA,IAAE,MAAM,CAAC,GAAE,SAAQ,EAAC,GAAEC,GAAC,GAAE,IAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC,GAAE,EAAE,WAASD,IAAE,UAAQ,EAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAGA,GAAC;AAAE,SAAK,WAAS;AAAA;AAAA,QAEv0B,CAAC;AAAA,uBACc,CAAC;AAAA;AAAA;AAAA,EAEnB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE;AAAE,UAAM,MAAM,sBAAsB,CAAC,uBAAuB;AAAE,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAEA,IAAE,CAAC,CAAC,IAAEC,IAAE,CAAC;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,QAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,OAAK;AAAE,YAAM,MAAM,6BAA6B,KAAK,IAAI,wBAAwB;AAAE,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,MAAK,KAAK,IAAI,GAAE,IAAE,IAAI,MAAM,KAAK,IAAI;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,QAAEA,IAAE,CAAC,CAAC,IAAE,EAAE,CAAC;AAAE,QAAI,IAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,KAAK,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC,IAAG,IAAE,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,QAE9vB,CAAC;AAAA;AAAA,oBAEW,CAAC;AAAA,WACV,CAAC;AAAA,sBACU,CAAC;AAAA;AAAA,UAEb,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,aACX,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,sBACzB,CAAC;AAAA,aACV,CAAC;AAAA,wBACU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAGD,IAAE,OAAM,CAAC,IAAE,IAAI,GAAGA,IAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAACD,GAAC,GAAEA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAEA;AAAE,QAAI,IAAE,GAAGA,KAAE,GAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,EAAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE,KAAG,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAEC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAI;AAAE,MAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,QAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,QAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,SAAO;AAAA,EAAC;AAAM,QAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAI,SAAS,GAAG,EAAC,GAAED,KAAE,GAAE,GAAE,YAAWC,KAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BA,IAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBC,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAEA,MAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEC,MAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,KAAG,OAAK,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,KAAG,KAAG,KAAG,KAAG,MAAK;AAAE,OAAI,MAAI,KAAG,MAAI,MAAI,IAAE,MAAI,MAAI,OAAG;AAAC,QAAI,IAAE,GAAE,IAAE;AAAE,IAAAA,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,QAAI,KAAG,MAAI,GAAE,KAAG,MAAI,GAAE,KAAG;AAAE,WAAK,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAG,QAAI,KAAG,MAAI,IAAE,IAAE,GAAE,KAAG;AAAE,WAAK,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAG,QAAI,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,IAAG,GAAE,GAAE,GAAE,SAAQ,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,IAAG,UAAS,KAAE,EAAC,CAAC,GAAE,EAAE,KAAK,EAAE;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,GAAGD,IAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,GAAE,CAAC,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,CAAC,GAAE,CAAC;AAAE,QAAG,KAAG,QAAM,GAAG,KAAK,CAAC,GAAE,KAAG,GAAG,KAAK,CAAC,GAAE,GAAE;AAAC,UAAI,KAAG,EAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,SAAG,KAAK,EAAE,GAAE,EAAE,KAAK,EAAE;AAAA,IAAC;AAAC,QAAE,EAAE,gBAAgB,GAAE,IAAG,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAiB,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV,IAK1tH,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AALssH,IAKpsH,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAEzC,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAFqB,IAEnB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAuB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,iBAAgB,MAAG,eAAc,GAAE,CAAC;AAAlG,IAAoG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,gBAAcA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,UAAU,CAAC,SAAS,CAAC,gBAAgB;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,SAAK,WAAS;AAAA;AAAA,UAEvgB,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA,yBAEe,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,gBAAcA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,SAAS,CAAC,SAAS,CAAC,gBAAgB;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,SAAK,WAAS;AAAA;AAAA,UAEhT,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA,wBAEc,CAAC;AAAA;AAAA;AAAA;AAAA,EAGpB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAG,EAAE,SAAO,EAAE,EAAE,UAAU,8BAA8B,GAAE;AAAC,QAAI,IAAE,KAAK,MAAM,EAAE,SAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAE,MAAM,GAAE,CAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAE,MAAM,CAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,CAAC,GAAE,CAAC,GAAE,SAAQA,IAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAE,MAAI,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,EAAE,EAAE,QAAQ,YAAY,IAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAM,CAAC,IAAE,IAAI,GAAG,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAG,EAAC,YAAW,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAG,KAAK,cAAc,KAAK,cAAc,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAEA,QAAI,QAAM,MAAI,KAAI,IAAE,IAAE,kBAAgB;AAA+C,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAK5uE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKL,CAAC;AAAA,wBACP,CAAC;AAAA;AAAA,0BAEC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,EAAE,OAAO,EAAE,SAAO,GAAE,MAAI,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,0CAA0C;AAAE,QAAI,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,KAAK,KAAK,IAAEA,GAAC;AAAE,SAAK,cAAY,EAAE,MAAM,GAAE,EAAE,GAAE,IAAE,KAAG,KAAK,YAAY,KAAK,CAAC,GAAE,KAAG,KAAK,cAAc,KAAK,cAAc;AAAE,QAAI,IAAE,KAAK,aAAY,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,GAAE;AAAE,QAAG,MAAI,GAAE;AAAC,UAAE,IAAE;AAAE,UAAI,IAAE,GAAG,CAAC;AAAE,UAAE;AAAA,UAClc,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,YAC7B,EAAE,IAAE,CAAC,CAAC;AAAA,IAAG;AAAM,UAAE,GAAE,IAAE;AAAA,UACvB,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAA,UACR,CAAC;AAAA,YACC,EAAE,IAAE,CAAC,CAAC;AAAI,QAAI,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,MAAI,EAAE,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,SAAO,CAAC,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,GAAG,cAAa,IAAE,CAAC,EAAE,OAAO,SAAS,GAAE,IAAE,MAAI,QAAM,gBAAc,YAAW,IAAE,IAAE,KAAG;AAAA,sDAC7P,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC;AAAA,sDACR,EAAE,KAAK,CAAC,QAAO,IAAE;AAAA,0BAC7C,EAAE,KAAK,CAAC;AAAA,uCACK,EAAE,KAAK,CAAC;AAAA,uCACR,EAAE,KAAK,CAAC;AAAA,qDACM,EAAE,KAAK,CAAC,WAAU,IAAE,IAAE,KAAG;AAAA,qCACzC,EAAE,KAAK,CAAC;AAAA,4CACD,EAAE,KAAK,CAAC;AAAA,iDACH,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC;AAAA;AAC1D,SAAK,WAAS;AAAA,0BACG,EAAE,KAAK,CAAC;AAAA,iCACD,EAAE,KAAK,CAAC;AAAA,sCACH,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC;AAAA;AAAA,QAEhD,CAAC;AAAA;AAAA,UAEC,CAAC;AAAA,4BACiB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,4BACpB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,IAAE,CAAC;AAAA,UACtC,CAAC;AAAA,yCAC8B,CAAC,eAAe,CAAC;AAAA,sBACpC,CAAC,eAAe,CAAC,OAAOA,GAAC;AAAA;AAAA;AAAA,2BAGpB,CAAC;AAAA;AAAA,8BAEEA,GAAC;AAAA;AAAA,YAEnB,CAAC;AAAA,6BACgB,CAAC;AAAA;AAAA;AAAA,mBAGX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWf;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,MAAK;AAAC,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,OAAG,SAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,EAAE,yBAAyB,CAAC,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,SAAQ,KAAK,KAAK,IAAE,CAAC,EAAC,GAAE,IAAE,IAAI,GAAG,GAAEA,KAAE,KAAG,IAAI,GAAE,IAAE,CAAC,CAAC;AAAE,OAAG,QAAM,EAAE,KAAK,CAAC;AAAE,MAAI,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,CAAC,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAEC,KAAE,CAAC;AAAE,SAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,IAAE,MAAK;AAAC,MAAI,IAAE,KAAG,OAAK,EAAE,QAAM,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,yBAAyB,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAEA,KAAE,KAAG,IAAI,GAAE,IAAE,KAAG,OAAK,CAAC,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAED,IAAE,gBAAgB,GAAE,GAAE,OAAO;AAAE,MAAG,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO;AAAC,QAAI,IAAE,GAAGA,KAAE,GAAEC,KAAE,CAAC;AAAE,WAAOD,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,CAACA,GAAC;AAAE,MAAG,EAAE,2BAA2B,QAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,GAAE,EAAE,MAAM,MAAM,GAAE,CAAC,EAAE,EAAE,QAAQ,mBAAmB,KAAG,EAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAE,CAAC,GAAE,IAAED,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAE;AAAE,UAAI,IAAEA,IAAE,aAAa,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAGA,KAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO,GAAGA,KAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,GAAGA,KAAE,GAAE,EAAE,CAAC,GAAE,KAAK;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAV,IAK3lE,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AALukE,IAKrkE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAV,IAA+C,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAAnE,IAAqE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAErM,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAFiL,IAE/K,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAE3E,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA,MAKD,KAAG;AAAA;AAAA;AAPsE,IAS3E,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAToC,IASlC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAEnD,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAF+B,IAE7B,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAEA,QAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,cAAY,EAAE;AAAS,QAAI,IAAEA,QAAI,OAAM,IAAE,cAAc,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,QAAO,IAAE,SAAS,EAAE,OAAO,YAAY,EAAE,UAAU,QAAO,IAAE;AAAM,QAAG,MAAI,IAAE,iBAAgB,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAS;AAAA,sCAC3nB,CAAC,KAAK,CAAC;AAAA,mCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBR,CAAC;AAAA,sBACb,CAAC;AAAA;AAAA;AAAA,kCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAUnB,CAAC;AAAA;AAAA;AAAA,mCAGQ,IAAE,IAAE,IAAE,IAAE,QAAQ,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMnD;AAAA,IAAM;AAAC,QAAI,IAAE,OAAM,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,UAAQ,IAAE;AAA8B,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YAChL,CAAC;AAAA;AAAA;AAAA,wBAGW,CAAC;AAAA;AAAA;AAEnB,SAAK,WAAS;AAAA,oCACgB,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA,0CACE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMb,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBL,CAAC;AAAA;AAAA;AAAA;AAAA,gCAIH,CAAC;AAAA,oBACb,CAAC;AAAA;AAAA;AAAA,gCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,kCAIR,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA;AAAA;AAAA,yCAIC,CAAC;AAAA,6CACG,CAAC;AAAA,6CACD,CAAC;AAAA;AAAA;AAAA,cAGhC,CAAC;AAAA;AAAA;AAAA,gCAGiB,CAAC;AAAA,gBACjB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQP,CAAC;AAAA,uBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,yCAGa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,cAK5B,CAAC;AAAA,uBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,yCAGa,CAAC;AAAA,6CACG,CAAC;AAAA;AAAA;AAAA;AAAA,cAIhC,CAAC;AAAA;AAAA;AAAA,oBAGK,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AA7IkH,IA6IhH,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAEA,QAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,QAAI,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,cAAY,EAAE;AAAS,QAAI,IAAEA,QAAI,OAAM,IAAE;AAAM,QAAG,MAAI,IAAE,iBAAgB,GAAE;AAAC,UAAI,IAAE;AAAK,WAAK,WAAS;AAAA;AAAA,oBAEre,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,mCACE,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAkBd,CAAC;AAAA,sBACb,CAAC;AAAA;AAAA;AAAA,kCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,CAAC;AAAA,wBACb,CAAC;AAAA;AAAA;AAAA,oCAGW,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIR,CAAC;AAAA,0BACb,CAAC;AAAA;AAAA;AAAA,sCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAUnB,CAAC;AAAA;AAAA;AAAA,qCAGQ,IAAE,IAAE,cAAc,EAAE,OAAO,YAAY,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,UAAQ,UAAU,EAAE,QAAQ,YAAY,EAAE,OAAO,YAAY,EAAE,UAAU,UAAQ,QAAQ,CAAC,MAAM,CAAC;AAAA,6BACvM,CAAC,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAO7B;AAAA,IAAM;AAAC,QAAI,IAAE,OAAM,IAAE,GAAGA,GAAC,IAAIA,GAAC,IAAIA,GAAC;AAAqE,IAAAA,QAAI,UAAQ,IAAE;AAA8B,QAAI,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA,YAChL,CAAC;AAAA;AAAA;AAAA,wBAGW,CAAC;AAAA;AAAA;AAEnB,SAAK,WAAS;AAAA;AAAA,gBAEJ,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,iCACI,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,0CACJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMb,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAmBL,CAAC;AAAA;AAAA;AAAA;AAAA,gCAIH,CAAC;AAAA,oBACb,CAAC;AAAA;AAAA;AAAA,gCAGW,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,oBACf,CAAC;AAAA;AAAA;AAAA,kCAGa,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,yCACI,CAAC;AAAA;AAAA;AAAA;AAAA,+CAIK,CAAC;AAAA,mDACG,CAAC;AAAA,mDACD,CAAC;AAAA;AAAA;AAAA,gBAGpC,CAAC;AAAA;AAAA;AAAA,kCAGiB,CAAC;AAAA,kBACjB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAQP,CAAC;AAAA,yBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,+CAGiB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gBAKhC,CAAC;AAAA,yBACQ,MAAI,CAAC;AAAA;AAAA;AAAA,+CAGiB,CAAC;AAAA,mDACG,CAAC;AAAA;AAAA;AAAA;AAAA,gBAIpC,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIG,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,KAAGA,MAAE;AAAG,SAAK,WAAS;AAAA,iCAChnC,CAAC,KAAK,CAAC;AAAA,0CACE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcX,CAAC;AAAA,oBACb,CAAC;AAAA,gDAC2B,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,mBAChB,CAAC;AAAA,kDAC8B,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa3C;AAAC;AA1C21B,IA0Cz1B,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,KAAGA,MAAE,IAAE;AAAG,SAAK,WAAS;AAAA,iCACtX,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,0CACJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAiBX,CAAC;AAAA,oBACb,CAAC;AAAA,gDAC2B,CAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc7C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC;AAAE,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAM,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK/pC,CAAC;AAAA,wBACF,CAAC;AAAA,2DACkC,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvD;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC;AAAE,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,GAAE,IAAE;AAA0B,QAAI,IAAE;AAAY,SAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,GAAE,IAAE,0BAAyB,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA,wBAEtc,CAAC;AAAA,uBACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAMiC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrD;AAAC;AAAE,IAAI,KAAG,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,MAAK,GAAE,UAAS,GAAE,QAAO,GAAE,OAAM,EAAC,IAAED;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,8EAA8E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,4EAA4E,GAAE,EAAE,OAAO,KAAG,QAAM,EAAE,MAAM,WAAS,EAAE,MAAM,QAAO,MAAI,2EAA2E;AAAE,MAAG,EAAC,iBAAgB,EAAC,IAAEC;AAAE,OAAG,SAAO,IAAE;AAAM,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE,EAAE,EAAE,QAAQ,0BAA0B,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAArwB,IAAuwB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAIA,MAAE,GAAG,KAAK,IAAI;AAAE,SAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,GAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG;AAAE,QAAE;AAAA,UACjlCA,GAAC;AAAA,UACDA,GAAC;AAAA,UACD,EAAE,KAAK;AAAA,CAChB,CAAC;AAAA,SACM,KAAK,WAAS;AAAA;AAAA,UAEZ,CAAC;AAAA,8BACmB,CAAC;AAAA;AAAA;AAAA,EAE1B;AAAC;AAV8zB,IAU5zB,KAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,OAAG;AAAE,WAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,OAAG,eAAa,CAAC,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBA,GAAC,uBAAuB;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,YAAW,KAAK,MAAK,MAAK,MAAK,CAAC;AAAE,QAAIC,MAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,UAAS,KAAK,IAAI,GAAE,IAAE,GAAG,aAAY,KAAK,IAAI,GAAE,IAAE,KAAK,SAAO,IAAE,cAAY,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,wBAAwB,EAAE,KAAK,CAAC,MAAM,CAAC,KAAI,IAAE;AAAA,mBACrjB,CAAC;AAAA,cACN,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,YACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,qBACL,CAAC;AAAA,YACV,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA;AAAA,OAEpB,IAAE,KAAK,SAAO,IAAE,KAAG;AAAA,UACf,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,cACV,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,YACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,qBACL,CAAC;AAAA,gBACN,EAAE,KAAK,OAAK,CAAC,CAAC,MAAM,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,cACpC,EAAE,KAAK,OAAK,CAAC,CAAC;AAAA,uBACL,CAAC;AAAA;AAAA;AAAA,OAGlB,IAAE,KAAK,QAAM,IAAE;AAAA,cACPA,GAAC,IAAI,EAAE,IAAI,CAAC,GAAE,MAAI,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,OAAK,EAAE,IAAI,CAAC,GAAE,MAAI,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK;AAAA,CAC/G;AAAE,SAAK,WAAS;AAAA;AAAA,UAEPA,GAAC;AAAA,UACDA,GAAC;AAAA,UACD,CAAC;AAAA;AAAA,UAED,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,QAAQ,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,eAAeC,KAAED,IAAE,KAAK,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,OAAO,GAAE,CAAC,GAAE,EAAE,WAAS,GAAE,EAAE,QAAMC,KAAE,EAAE,QAAMD,IAAE;AAAM,MAAI,IAAE,GAAG,kBAAkB,GAAE,EAAE,eAAeA,IAAE,KAAK,CAAC;AAAE,IAAE,UAAQ,KAAG,EAAE,MAAM,aAAY,EAAE,QAAM,EAAC,YAAW,GAAE,YAAW,EAAE,SAAO,EAAE,MAAM,cAAYA,IAAE,OAAM;AAAE,MAAI,IAAE,EAAE,aAAa,IAAI,EAAE,MAAM,UAAU,KAAG;AAAE,SAAO,EAAE,aAAa,IAAI,EAAE,MAAM,YAAW,IAAE,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,MAAG,GAAG,kBAAkB,GAAE,GAAE,CAAC,GAAE,EAAE,cAAc,CAAC,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,UAAS,EAAC,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,iBAAiB,EAAE,OAAM,GAAE,CAAC;AAAE,MAAG,KAAG,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,sEAAsE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAtpB,IAAwpB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAMpgE,KAAG;AAAA;AAAA;AAEH,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,GAAE,IAAE,EAAE,EAAE,UAAU,eAAe;AAAE,MAAGC,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,MAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,SAAO,GAAE;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,OAAM,KAAE,IAAE,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,GAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA+B,KAAG,GAAG,EAAC,WAAU,IAAG,eAAc,IAAG,OAAM,OAAM,CAAC;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAwB,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,GAAE,IAAE,EAAE,gBAAgBC,KAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAQ,WAAO,GAAG,GAAEA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,OAAO,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAyB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAjF,IAAmF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW1kF;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWnN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE;AAAE,IAAE,EAAE,QAAQ,iBAAiB,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK;AAAE,MAAI,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAatX;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAG,GAAE,EAAE,mBAAmB,IAAI,GAAE,GAAG,GAAE,EAAE,mBAAmB,IAAI,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgB,GAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAIA,MAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,IAAAA,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,MAAAA,IAAE,CAAC,IAAEA,IAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC;AAAE,QAAI,IAAE,CAAC,YAAYA,IAAE,CAAC,CAAC,6BAA6B;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAI;AAAC,UAAI,IAAEA,IAAE,IAAE,CAAC;AAAE,QAAE,KAAK,iBAAiBA,IAAE,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK;AAAA,IAAC;AAAC,QAAI,IAAEA,IAAE,QAAO,IAAEA,IAAEA,IAAE,SAAO,CAAC;AAAE,MAAE,KAAK,sBAAsB,CAAC,WAAW,CAAC,KAAK,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAM/xB,EAAE,KAAK;AAAA,SACR,CAAC;AAAA;AAAA;AAAA,EAEL;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,EAAE,gBAAgB,GAAEA,GAAC;AAAE,QAAI,IAAE,KAAK,aAAY,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG,EAAE,MAAM,GAAE,CAAC;AAAE,SAAK,gBAAc,EAAE,IAAI,CAAC,GAAE,MAAI,IAAI,CAAC,EAAE;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,MAAE,CAAC,IAAE,EAAE,CAAC,EAAEA,GAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAEA,GAAC;AAAE,QAAI,IAAE,EAAEA,GAAC,GAAE,IAAE,EAAE,MAAM,EAAE,GAAE,IAAE,EAAE,KAAK,GAAE,IAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA;AAAA,oBAEnZ,CAAC,WAAW,EAAE,KAAK,CAAC;AAAA;AAC7B,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,IAAE,CAAC;AAAE,WAAG;AAAA,cACzC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAE,CAAC,CAAC;AAAA;AAAA,kBAE7B,CAAC,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,mBACb,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA;AAAA,IAClB;AAAC,QAAI,IAAE,EAAE,QAAO,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,SAAG;AAAA;AAAA,gBAE7B,CAAC,IAAI,GAAG,GAAE,GAAE,CAAC,CAAC;AAAA,iBACb,GAAG,GAAE,GAAE,CAAC,CAAC,OAAM,KAAK,WAAS;AAAA,uBACvB,EAAE,IAAI,OAAG,SAAO,CAAC,CAAC;AAAA,UAC/B,CAAC;AAAA;AAAA;AAAA;AAAA,UAID,CAAC;AAAA,sCAC2B,CAAC;AAAA;AAAA,UAE7B,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA,UAGvB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA,UAGvB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cACd,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,cAClB,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAA,gCACA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAI5B;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAQ,CAAC;AAAE,SAAOA,IAAE,IAAI,CAAC,GAAE,MAAI,MAAI,IAAE,GAAG,CAAC,MAAMC,GAAC,KAAG,CAAC,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAED,IAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,KAAG,EAAE,CAAC,EAAE,MAAM,SAAO;AAAE,MAAG,EAAE,WAAS,GAAE;AAAC,QAAI,IAAE,IAAE,IAAI,GAAGA,IAAE,CAAC,EAAE,OAAM,EAAE,IAAE,IAAI,GAAGA,IAAE,CAAC,EAAE,OAAM,EAAE;AAAE,WAAOC,IAAE,gBAAgB,GAAED,KAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,EAAE,UAAU,8BAA8B;AAAE,MAAG,EAAE,SAAO,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAE,EAAE,MAAM,GAAE,IAAE,CAAC;AAAE,QAAE,KAAK,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,aAAQ,KAAK;AAAE,MAAAA,IAAE,8BAA8B,CAAC;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,IAAI,GAAG,EAAE,IAAI,OAAG,EAAE,KAAK,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,SAAM,EAAC,WAAUA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAI,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,KAAK,MAAM,EAAE,aAAW,CAAC,IAAE,GAAE,IAAE,EAAE,aAAW,GAAE,IAAE,EAAE,eAAa,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAElwF,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA;AAAA,cAEC,CAAC;AAAA;AAAA,WAEL,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACpO,CAAC;AAAA;AAAA,oCAE2B,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKd,CAAC;AAAA;AAAA;AAAA,2BAGA,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOV,CAAC;AAAA,qCACI,CAAC;AAAA;AAAA,gCAEN,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,kCAIR,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAmBH,MAAI,CAAC;AAAA;AAAA,oBAEH,CAAC;AAAA;AAAA,0CAEqB,CAAC;AAAA,mCACR,CAAC;AAAA;AAAA;AAAA,kCAGF,CAAC;AAAA,mCACA,CAAC;AAAA;AAAA;AAAA,yBAGX,MAAI,CAAC;AAAA;AAAA,+BAEC,CAAC;AAAA,+BACD,CAAC;AAAA;AAAA;AAAA,oBAGZ,CAAC;AAAA;AAAA,wCAEmB,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKT,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKR,MAAI,CAAC;AAAA;AAAA,+BAEC,CAAC;AAAA,+BACD,CAAC;AAAA,+BACD,CAAC;AAAA;AAAA;AAAA,oBAGZ,CAAC;AAAA;AAAA,wCAEmB,CAAC;AAAA,wCACD,CAAC;AAAA,wCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKT,CAAC;AAAA,gCACD,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUvB,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAtIu5E,IAsIr5E,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAIA,MAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,KAAK,MAAM,EAAE,aAAW,CAAC,IAAE,GAAE,IAAE,EAAE,aAAW;AAAE,SAAK,WAAS;AAAA,oCACnU,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA,iCAChBA,GAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAgBd,CAAC;AAAA,qCACI,CAAC;AAAA;AAAA,gCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,kCAIP,CAAC;AAAA,uCACI,CAAC;AAAA;AAAA,kCAEN,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,CAAC;AAAA,yCACI,CAAC;AAAA;AAAA,oCAEN,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,sCAIP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAiBnB,MAAI,CAAC;AAAA;AAAA,4CAEmB,CAAC;AAAA,qCACR,CAAC;AAAA,2BACX,MAAI,CAAC;AAAA;AAAA,4CAEY,CAAC;AAAA,4CACD,CAAC;AAAA;AAAA;AAAA,qCAGR,CAAC;AAAA,qCACD,CAAC;AAAA;AAAA;AAAA,2BAGX,MAAI,CAAC;AAAA;AAAA,4CAEY,CAAC;AAAA,4CACD,CAAC;AAAA,4CACD,CAAC;AAAA;AAAA;AAAA,qCAGR,CAAC;AAAA,qCACD,CAAC;AAAA,qCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE5Y,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;AAAA,yBAC9C,IAAE,CAAC;AAAA,wBACJ,IAAE,CAAC;AAAA,yBACF,IAAE,IAAE,CAAC;AAAA,wBACN,IAAE,IAAE,CAAC;AAAA,oBACT,CAAC;AAAI,SAAG;AAAA,2BACD,CAAC;AAAA,8BACE,EAAE,UAAU;AAAA;AACjC,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;AAAA,oBACZ,IAAE,CAAC;AAAA,oBACH,IAAE,CAAC;AAAA,oBACH,IAAE,IAAE,CAAC;AAAA,oBACL,IAAE,IAAE,CAAC;AAAA,eACV,CAAC;AAAgB,SAAG;AAAA;AAAA;AAAA;AAG1B,aAAQ,IAAE,GAAE,KAAG,IAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,UAAG,KAAG;AAAA,6BACvB,IAAE,CAAC;AAAA,cACnB,MAAI,GAAE;AAAC,YAAG,IAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,uEAE8B,CAAC;AAAA,4BAC5C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA,kBAEZ,MAAI,KAAG,IAAE,IAAE,KAAG;AAAA,qBACV,CAAC,kBAAkB,IAAE,CAAC,eAAe,CAAC;AAAA,qBACxC,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAYG,CAAC,+BAA+B,CAAC;AAAA;AAAA,yBAEjC,CAAC,4BAA4B,CAAC;AAAA;AAAA,wBAEjC,KAAG;AAAA,2DACkC,CAAC;AAAA,4BAChC,CAAC;AAAA;AAAA,8BAEC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA,qBAGR,CAAC,aAAa,CAAC;AAAA,oBACjB,IAAE,IAAE,IAAG;AAAC,cAAI,IAAE,IAAE,MAAI,IAAE,EAAE,kBAAkB,CAAC,IAAE;AAAE,cAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,KAAG;AAAA,wDACjD,CAAC;AAAA;AAAA,yEAEgB,IAAE,CAAC;AAAA,8BAC9C,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKD,IAAE,CAAC;AAAA;AAAA,8BAEL,IAAE,CAAC;AAAA;AAAA,sBAEZ,IAAE,IAAE,KAAG;AAAA;AAAA;AAAA;AAAA,0BAIF,IAAE,CAAC,+BAA+B,IAAE,CAAC;AAAA;AAAA,0BAErC,IAAE,CAAC,4BAA4B,IAAE,CAAC;AAAA;AAAA,yBAErC,KAAG;AAAA,yBACD,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,0BACzC,MAAI,IAAE,KAAG;AAAA,yBACR,IAAE,CAAC,aAAa,CAAC;AAAA,yBACnB,KAAG;AAAA,uCACa,CAAC;AAAA;AAAA,2EAEmC,IAAE,CAAC;AAAA,gCAC9C,IAAE,CAAC;AAAA;AAAA,kCAED,IAAE,CAAC;AAAA;AAAA,gCAEL,IAAE,CAAC;AAAA;AAAA;AAAA,yBAGV,IAAE,CAAC,aAAa,IAAE,CAAC;AAAA;AAAA,QACtB;AAAA,MAAC;AAAM,YAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,sEAEuB,CAAC;AAAA,4BAC3C,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA,kEAGqC,IAAE,CAAC;AAAA,4BACzC,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,8BAID,IAAE,CAAC;AAAA;AAAA,4BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,qBAGV,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,kBAC1C,IAAE,IAAE,MAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAML,IAAE,CAAC,kBAAkB,IAAE,CAAC;AAAA,wBACzB,KAAG;AAAA,0DACiC,CAAC;AAAA,4BAC/B,CAAC;AAAA;AAAA,8BAEC,CAAC;AAAA;AAAA,4BAEH,CAAC;AAAA;AAAA;AAAA;AAAA,sEAIyC,IAAE,CAAC;AAAA,4BAC7C,IAAE,CAAC;AAAA;AAAA,8BAED,IAAE,CAAC;AAAA;AAAA,4BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,qBAGV,CAAC;AAAA,4BACM,CAAC,eAAe,IAAE,CAAC;AAAA,kBAC9B,IAAE,IAAE,MAAI,KAAG;AAAA,uBACL,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA;AACzC,UAAE,MAAI,KAAG;AAAA,gCACC,CAAC;AAAA,4BACL,CAAC;AAAA,2BACF,EAAE,UAAU;AAAA,8BACT,CAAC;AAAA;AAAA,cAElB,IAAE,IAAE,MAAI,KAAG;AAAA,kCACU,IAAE,CAAC;AAAA,8BACP,IAAE,CAAC;AAAA,6BACJ,EAAE,UAAU;AAAA,gCACT,IAAE,CAAC;AAAA;AAAA;AAAA,IAEnB;AAAC,SAAG;AAAA;AAAA,MAEf,KAAG;AAAA;AAAA,MAEH,KAAG;AAAA;AAAA;AAEH,QAAI,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,aAEd,CAAC;AAAA,cACF,IAAE,IAAE;AAAA;AAAA,aAEH,CAAC;AAAA,cACF,IAAE;AAAA,aACD,CAAC;AAAA,aACF,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,SACrO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAaC,CAAC;AAAA;AAAA;AAAA,WAGD,CAAC;AAAA,WACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,cAAa,MAAK,QAAO,GAAE,EAAC,MAAK,OAAM,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,GAAE,EAAC,MAAK,YAAW,MAAK,QAAO,GAAE,EAAC,MAAK,cAAa,MAAK,MAAK,GAAE,EAAC,MAAK,oBAAmB,MAAK,MAAK,GAAE,EAAC,MAAK,YAAW,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAG,EAAC,YAAW,EAAC,IAAEA,KAAE,IAAE,GAAG,GAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,KAAK,sBAAoB,wDAAsD,mBAAmB,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,OAAM,IAAE;AAAG,aAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,eAAQ,IAAE,GAAE,KAAG,GAAE;AAAI,aAAG;AAAA,gCACjnB,CAAC;AAAA,yBACR,CAAC;AAAA;AAAA,YAEd,CAAC;AAAA;AAAA;AAAA;AAAA,iCAIoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAQC,CAAC;AAAA;AAAA;AAAA;AAAA,sBAId,CAAC;AAAA;AAAA,2BAEI,IAAE,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,2BAKL,IAAE,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOtB,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASd,CAAC;AAAA;AAAA,UAED,EAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE;AAAO,SAAOC,OAAG,IAAE,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,KAAGA,QAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,GAAG,EAAC,GAAEA,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAE,EAAE,QAAQ,IAAIA,IAAE,MAAM,GAAE,IAAEC,IAAE,YAAW,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,aAAY,IAAEA,IAAE,eAAa,gBAAe,IAAE,OAAG,IAAE,OAAG,GAAE,IAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,GAAG,MAAI,KAAG,MAAI,MAAI,IAAE,OAAK,EAAE,YAAU,KAAG,EAAE,WAAS,QAAM,EAAE,CAAC,IAAE,MAAI,KAAG,EAAE,YAAY,EAAE,MAAM,MAAM,EAAE,GAAE,EAAE,MAAM,EAAE,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,KAAG,EAAE,CAAC,IAAE,IAAG,IAAE,EAAC,QAAOD,IAAE,QAAO,OAAM,CAAC,GAAE,GAAEC,IAAE,UAAU,GAAE,OAAMD,IAAE,MAAK,GAAE,IAAE,EAAE;AAAM,MAAE,QAAM,EAAE,MAAM,MAAM,GAAE,EAAE,MAAM,EAAE,MAAM,SAAO,CAAC,KAAI,EAAE,OAAO,GAAG,EAAE,OAAM,EAAE,KAAK,GAAE,MAAI,kBAAkB,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEC,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAE,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,SAAQ,GAAE,YAAW,GAAE,YAAW,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,OAAO,EAAE,UAAS,MAAI,6CAA6C,GAAE,EAAE,QAAM,GAAE,EAAE,QAAMA,IAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,QAAMA,IAAE,UAAS,EAAE,KAAK,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAEA,IAAE,YAAUA,IAAE,UAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAACC,IAAE,WAAU,GAAEA,IAAE,UAAU,IAAE,CAACA,IAAE,WAAUA,IAAE,YAAW,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEA,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,CAAC,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAG,EAAC,aAAY,GAAE,cAAa,GAAE,YAAW,GAAE,UAAS,GAAE,WAAU,GAAE,YAAW,EAAC,IAAEA,KAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,OAAG,IAAE,CAAC;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAEA,GAAC,GAAE,IAAE,CAACD,IAAE,OAAM,CAACC,IAAE,QAAQ,KAAIA,IAAE,QAAQ,IAAI,GAAE,CAACA,IAAE,cAAaA,IAAE,WAAW,GAAE,CAACA,IAAE,gBAAeA,IAAE,aAAa,GAAE,CAACA,IAAE,UAAU,GAAE,CAACA,IAAE,cAAYA,IAAE,UAAU,GAAE,CAACA,IAAE,QAAQ,CAAC,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,WAAU,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,IAAE,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,IAAI,GAAG,IAAE,EAAE,QAAM,EAAE,OAAM,IAAE,EAAE,QAAM,EAAE,OAAM,IAAE,CAACC,IAAE,WAAU,GAAEA,IAAE,WAAW,IAAE,CAACA,IAAE,WAAUA,IAAE,aAAY,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC;AAAE,MAAG,KAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE;AAAE,MAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,MAAI,EAAE,QAAQ,SAAO,UAAQ,EAAE,QAAQ,SAAO;AAAS,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQC,IAAC,CAAC;AAAA,WAAU,EAAE,eAAa,KAAG,MAAI,kBAAgB,EAAE,EAAE,QAAQ,gBAAgB,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB;AAAE,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,IAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,eAAa;AAAe,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAYvxI,EAAE,SAAS;AAAA,kCACP,EAAE,SAAS;AAAA,iCACZA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,EAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,gBAI7B,IAAE;AAAA;AAAA,gDAE4B;AAAA;AAAA,6CAED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMxC;AAAC;AArCkmI,IAqChmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAa,gBAAe,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCAC7O,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKd,CAAC;AAAA;AAAA,wCAEa,CAAC,aAAa,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOvBA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMrB,CAAC;AAAA;AAAA,oCAEQ,EAAE,WAAW;AAAA;AAAA,oBAE7B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAehB;AAAC;AA1FkmI,IA0FhmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAWrL,EAAE,SAAS;AAAA,kCACP,EAAE,QAAQ;AAAA,iCACXA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA,oCAIP,EAAE,SAAS;AAAA,mCACZ,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,sCAIR,EAAE,QAAQ;AAAA,qCACX,CAAC,MAAM,CAAC;AAAA;AAAA,sCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa1C;AAAC;AApIkmI,IAoIhmI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA,iCAC3O,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcdA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKrBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMtB,CAAC;AAAA;AAAA,oCAEQ,CAAC;AAAA,oDACe,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMrB,CAAC;AAAA;AAAA,sCAEQ,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAU9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,WAAU,MAAK,OAAM,CAAC,GAAE,KAAK,cAAY,EAAE,SAAQ,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ;AAAK,SAAK,WAAS;AAAA,iCACvmB,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYRA,GAAC;AAAA;AAAA,oCAEG,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA,yBAItBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,2BACR,CAAC;AAAA;AAAA;AAAA,oDAGwB,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,uDAKP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,sCAK3B,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAiBb,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCASb,EAAE,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa9C;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,MAAG,EAAE,EAAE,QAAQ,4BAA4B,KAAG,MAAI,gBAAe;AAAC,QAAI,IAAE,CAAC,CAAC,EAAE,cAAa,EAAE,WAAW,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,WAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC;AAAE,WAAOA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAExuC,KAAG;AAAA;AAAA;AAAA,IAGD,EAAE;AAAA;AAAA;AALouC,IAOxuC,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAPisC,IAO/rC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAP,IAG9F,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAH0E,IAGxE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,QAAQ,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAE,CAAC,CAAC,IAAEA,KAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,MAAI,aAAW,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAG,IAAE,CAAC,MAAK,GAAG,IAAE,CAAC,IAAI,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,IAAE,CAAC,IAAI,IAAE,MAAI,IAAE,EAAE,IAAG,0BAAyB,MAAM,CAAC,4BAA4B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,IAAE,IAAE,CAAC,IAAI,IAAE,MAAI,IAAE,EAAE,IAAG,yBAAwB,MAAM,CAAC,2BAA2B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE;AAAE,SAAK,WAAS;AAAA,yCACvgB,CAAC;AAAA,wCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAgBR,CAAC;AAAA;AAAA;AAAA;AAAA,+BAIH,CAAC;AAAA,8BACF,CAAC;AAAA;AAAA,uBAER,CAAC;AAAA,mCACW,CAAC;AAAA,4BACR,CAAC;AAAA;AAAA;AAAA,uBAGN,CAAC;AAAA,mCACW,CAAC;AAAA,4BACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAKhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBT;AAAC;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,SAAS;AAAC;AAApM,IAAsM,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAE,OAAK,KAAIA,IAAE,MAAI;AAAG,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,KAAG,GAAE,KAAK,cAAYA,KAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC;AAAE,QAAI,IAAE,KAAK,YAAY,QAAO,IAAE,KAAK,OAAK,GAAG,OAAK,QAAM,OAAM,IAAE,IAAE,IAAE,QAAQ,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC,KAAI,IAAE,KAAK,YAAY,KAAK,YAAY,SAAO,CAAC,GAAE,IAAE,IAAG,IAAE;AAAG,SAAG,IAAE,IAAE,UAAU,IAAE,CAAC,KAAG,YAAW,IAAE,IAAE,YAAU,cAAY,IAAE,IAAE,gBAAgB,CAAC,KAAG,eAAc,IAAE,IAAE,eAAa,eAAc,KAAK,WAAS;AAAA;AAAA,UAExuB,GAAG,CAAC,CAAC;AAAA,oBACK,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,sBACpB,CAAC;AAAA;AAAA,cAET,CAAC;AAAA,sBACO,CAAC;AAAA,YACX,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,gBAClB,KAAK,EAAE,UAAU,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAG,CAAC;AAAG,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,QAAM,IAAI,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAG,CAAC;AAAG,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,QAAM,IAAI,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE;AAAE,UAAM,IAAI,MAAM,mDAAmD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,KAAG,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,OAAG,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE;AAAE,QAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC,WAAS,EAAE,MAAM,WAAS,GAAE;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,qEAAqE,EAAE,MAAM,MAAM,GAAG;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,YAAUA,KAAE,KAAK,aAAW,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,gBAIjqE,KAAK,qBAAqB,CAAC;AAAA,gBAC3B,KAAK,oBAAoB,CAAC;AAAA,gBAC1B,KAAK,oBAAoB,CAAC;AAAA;AAAA,uBAEnBA,GAAC;AAAA,+BACOA,GAAC;AAAA,uBACTA,GAAC;AAAA,+BACOA,GAAC;AAAA,mCACGA,GAAC;AAAA,UAC1B,KAAK,mBAAmB,CAAC;AAAA;AAAA;AAAA,uBAGZ,KAAK,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGjD;AAAA,EAAC,uBAAsB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK,eAAa,SAAO,KAAK,YAAY,CAAC,IAAE,KAAK,YAAY,CAAC;AAAA,EAAC;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,eAAa,SAAO,8BAA4B;AAAA,EAA2B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAEvqC,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA;AAAA,cAEC,CAAC;AAAA;AAAA,WAEL,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACpO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOe,CAAC;AAAA,4BACG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCASG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAOC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAczB,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,GAAE,EAAC,MAAK,WAAU,MAAK,QAAO,GAAE,EAAC,MAAK,aAAY,MAAK,QAAO,GAAE,EAAC,MAAK,UAAS,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,sBAAoB,GAAG,KAAK,YAAY,MAAM;AAAE,QAAI,IAAE,EAAE,cAAY,EAAE,YAAW,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,GAAE,IAAE;AAAA;AAAA;AAE1a,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;AAAA,wBAC9C,IAAE,CAAC;AAAA,uBACJ,IAAE,CAAC;AAAA,wBACF,IAAE,IAAE,CAAC;AAAA,uBACN,IAAE,IAAE,CAAC;AAAA,mBACT,CAAC;AAAI,SAAG;AAAA,0BACD,CAAC;AAAA;AACnB,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;AAAA,mBACZ,IAAE,CAAC;AAAA,mBACH,IAAE,CAAC;AAAA,mBACH,IAAE,IAAE,CAAC;AAAA,mBACL,IAAE,IAAE,CAAC;AAAA,cACV,CAAC;AAAgB,SAAG;AAAA;AAAA;AAAA;AAG1B,aAAQ,IAAE,GAAE,KAAG,IAAE,KAAG,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE;AAAE,UAAG,KAAG;AAAA,4BACvB,IAAE,CAAC;AAAA,aACnB,MAAI,GAAE;AAAC,YAAG,IAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,sEAE8B,CAAC;AAAA,2BAC5C,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6BAKC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA,iBAEZ,MAAI,KAAG,IAAE,IAAE,KAAG;AAAA,oBACV,CAAC,kBAAkB,IAAE,CAAC,eAAe,CAAC;AAAA,oBACxC,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAYG,CAAC,+BAA+B,CAAC;AAAA;AAAA,wBAEjC,CAAC,4BAA4B,CAAC;AAAA;AAAA,uBAEjC,KAAG;AAAA,0DACkC,CAAC;AAAA,2BAChC,CAAC;AAAA;AAAA,6BAEC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA,oBAGR,CAAC,aAAa,CAAC;AAAA,mBACjB,IAAE,IAAE,IAAG;AAAC,cAAI,IAAE,IAAE,MAAI,IAAE,EAAE,kBAAkB,CAAC,IAAE;AAAE,cAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,IAAE,MAAI,KAAG,KAAG;AAAA,uDACjD,CAAC;AAAA;AAAA,wEAEgB,IAAE,CAAC;AAAA,6BAC9C,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKD,IAAE,CAAC;AAAA;AAAA,6BAEL,IAAE,CAAC;AAAA;AAAA,qBAEZ,IAAE,IAAE,KAAG;AAAA;AAAA;AAAA;AAAA,yBAIF,IAAE,CAAC,+BAA+B,IAAE,CAAC;AAAA;AAAA,yBAErC,IAAE,CAAC,4BAA4B,IAAE,CAAC;AAAA;AAAA,wBAErC,KAAG;AAAA,wBACD,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,yBACzC,MAAI,IAAE,KAAG;AAAA,wBACR,IAAE,CAAC,aAAa,CAAC;AAAA,wBACnB,KAAG;AAAA,sCACa,CAAC;AAAA;AAAA,0EAEmC,IAAE,CAAC;AAAA,+BAC9C,IAAE,CAAC;AAAA;AAAA,iCAED,IAAE,CAAC;AAAA;AAAA,+BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,wBAGV,IAAE,CAAC,aAAa,IAAE,CAAC;AAAA;AAAA,QACtB;AAAA,MAAC;AAAM,YAAE,MAAI,IAAE,MAAI,KAAG,KAAG;AAAA;AAAA,qEAEuB,CAAC;AAAA,2BAC3C,CAAC;AAAA;AAAA;AAAA;AAAA,6BAIC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA,iEAGqC,IAAE,CAAC;AAAA,2BACzC,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,6BAID,IAAE,CAAC;AAAA;AAAA,2BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,oBAGV,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA,iBAC1C,IAAE,IAAE,MAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAML,IAAE,CAAC,kBAAkB,IAAE,CAAC;AAAA,uBACzB,KAAG;AAAA,yDACiC,CAAC;AAAA,2BAC/B,CAAC;AAAA;AAAA,6BAEC,CAAC;AAAA;AAAA,2BAEH,CAAC;AAAA;AAAA;AAAA;AAAA,qEAIyC,IAAE,CAAC;AAAA,2BAC7C,IAAE,CAAC;AAAA;AAAA,6BAED,IAAE,CAAC;AAAA;AAAA,2BAEL,IAAE,CAAC;AAAA;AAAA;AAAA,oBAGV,CAAC;AAAA,2BACM,CAAC,eAAe,IAAE,CAAC;AAAA,iBAC9B,IAAE,IAAE,MAAI,KAAG;AAAA,sBACL,IAAE,CAAC,kBAAkB,CAAC,eAAe,IAAE,CAAC;AAAA;AACzC,UAAE,MAAI,KAAG;AAAA,+BACC,CAAC;AAAA,2BACL,CAAC;AAAA,aAChB,IAAE,IAAE,MAAI,KAAG;AAAA,iCACU,IAAE,CAAC;AAAA,6BACP,IAAE,CAAC;AAAA;AAAA,IACjB;AAAC,SAAG;AAAA;AAAA,KAEf,KAAG;AAAA;AAAA;AAED,QAAI,IAAE,IAAG,IAAE;AAAG,UAAI,IAAE,IAAE;AAAA;AAAA,YAEhB,CAAC;AAAA,aACF,IAAE,IAAE;AAAA;AAAA,YAEH,CAAC;AAAA,aACF,IAAE;AAAA,YACD,CAAC;AAAA,YACF,IAAE;AAAgC,QAAI,IAAEA,MAAE,oCAAkC;AAAG,IAAAA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAG,KAAK,cAAc,KAAK,gBAAgB,GAAE,KAAK,WAAS;AAAA,QACrO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOe,CAAC;AAAA,4BACG,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAOnB,CAAC;AAAA;AAAA;AAAA,UAGD,CAAC;AAAA,UACD,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE;AAAE,IAAE,EAAE,QAAQ,0BAA0B,KAAG,EAAE,eAAa,KAAG,EAAE,cAAY,EAAE,eAAa,IAAE,IAAE,IAAI,GAAG,CAAC,IAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAI,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,cAAY,EAAE;AAAY,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAY,EAAE;AAAW,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOn3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,8BAKK,EAAE,SAAS;AAAA,kCACP,EAAE,SAAS;AAAA,iCACZA,GAAC,MAAM,CAAC;AAAA;AAAA,kCAEP,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA,oCAIR,EAAE,QAAQ;AAAA,mCACX,CAAC,MAAM,CAAC;AAAA;AAAA,oCAEP,EAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYxC;AAAC;AAnC2rB,IAmCzrB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAEA,MAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAY,EAAE;AAAW,SAAK,WAAS;AAAA,iCAClN,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAYRA,GAAC;AAAA,gDACe,CAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKtBA,GAAC;AAAA;AAAA,kCAEQ,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMrB,CAAC;AAAA;AAAA;AAAA,oCAGQ,CAAC;AAAA,8BACP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS1B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvpB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE;AAAS,QAAG,EAAC,UAASA,KAAE,SAAQ,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,GAAE,eAAc,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,MAAK,EAAC,IAAE;AAAE,SAAK,WAAS;AAAA,oCACtlB,CAAC,KAAK,CAAC;AAAA,iCACV,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAaV,CAAC;AAAA,iCACE,CAAC;AAAA;AAAA,kCAEAA,GAAC;AAAA,kCACD,CAAC;AAAA,qCACE,CAAC;AAAA;AAAA,sCAEA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBlC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAEC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAGA,IAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAiD,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAApD,IAShwC,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AATytC,IASvtC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAgD,KAAG;AAAA;AAAA;AAAA;AAAnD,IAG9F,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,8BAA8B,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK,IAAE,IAAI,GAAG,IAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAH7F,IAG+F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAP,IAElP,KAAG;AAF+O,IAEvN,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,OAAM,QAAO,eAAc,GAAE,CAAC;AAFkJ,IAEhJ,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA,cAIlJ,EAAE,KAAK;AAAA,eACN,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA,eACR,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AATkI,IAevJ,KAAG,GAAG,EAAC,WAAU,GAAE,CAAC;AAfmI,IAejI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,KAAG;AAAA;AAAA;AAAV,IAE3E,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFwE,IAW3E,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,IAAG,OAAM,UAAS,CAAC;AAXG,IAWD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA8B,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAtF,IAAwF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM;AAAE,QAAI,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAYA;AAAE,QAAI,IAAE,IAAE,SAAS,KAAK,EAAE,KAAG,UAAU,KAAK,EAAE,IAAG,IAAE,IAAE,GAAG,CAAC,OAAK,OAAM;AAAE,QAAG,MAAI;AAAO,UAAE;AAAA,aAA4C,MAAI;AAAO,UAAE;AAAA;AAAyC,YAAM,IAAI,MAAM,sDAAsD,CAAC,GAAG;AAAE,SAAK,WAAS;AAAA,yCACz5B,CAAC;AAAA;AAAA;AAAA,UAGhC,CAAC;AAAA;AAAA;AAAA;AAAA,kDAIuC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMrB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDAS0B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUrD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,QAAQ,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,QAAO,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,QAAO,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,EAAAA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAOC,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKv+B;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAEA;AAAE,MAAG,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,MAAI,UAAS;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC;AAAE,WAAO,EAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC;AAAE,QAAIA,MAAE,EAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,yBAK3aA,GAAC;AAAA;AAAA,uCAEaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAMC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,KAAK;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,KAAG;AAAP,IAA0B,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAlF,IAAoF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAU5S,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAVyS,IA+B5S,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,OAAM,QAAO,CAAC;AA/BuP,IA+BrP,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAIA,MAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDAMhK,CAAC,OAAO,CAAC;AAAA;AAAA,wBAExCA,IAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc9B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,OAAG,KAAK,eAAa;AAAG,QAAIA,MAAE,GAAG,GAAE,CAAC,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAe7H,CAAC,OAAO,CAAC;AAAA,4BACXA,IAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAgB7BA,IAAE,MAAM;AAAA;AAAA;AAAA,EAEb;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAvD,IAAyD;AAAzD,IAA4D,KAAG,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,CAAC,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,YAAW,EAAE,WAAW,IAAE,CAAC,EAAE,OAAM,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,QAAQ,uCAAuC;AAAE,KAAC,MAAI,QAAM,MAAI,QAAM,KAAG,GAAE,KAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,GAAE,CAAC,IAAG,GAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAU,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG;AAAA,EAAM;AAAC,MAAI,IAAEC,IAAE,eAAe,GAAE,OAAO;AAAE,EAAAA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAM,GAAG,QAAOA,IAAE,MAAM,yBAAyBA,IAAE,WAAW,EAAE,MAAM,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,YAAY,IAAE,IAAI,GAAG,CAAC,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,OAAO;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,GAAE,IAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI,aAAY,IAAE,MAAI;AAAC,QAAI,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,MAAI;AAAC,UAAG,MAAI,UAAQ,EAAE,MAAM,WAAS,KAAG,EAAE,MAAM,CAAC,MAAI,GAAE;AAAC,YAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,eAAO,EAAE,KAAK,CAAC,GAAE;AAAA,MAAC;AAAC,aAAO;AAAA,IAAC;AAAE,QAAG,KAAG,EAAE,KAAK,EAAE,GAAE,CAAC,CAAC,GAAE,KAAG,EAAE,KAAK,EAAE,GAAE,CAAC,CAAC,GAAE,GAAE;AAAC,UAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,QAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAC;AAAC,WAAO;AAAA,EAAC;AAAE,MAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,iBAAe,KAAG,EAAE,gBAAc,MAAI,EAAE,QAAQ,SAAO,UAAQ,EAAE,QAAQ,SAAO;AAAS,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,KAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAA,WAAU,EAAE,eAAa,KAAG,MAAI,kBAAgB,EAAE,EAAE,QAAQ,gBAAgB,GAAE;AAAC,QAAI,IAAE,IAAE,GAAG,GAAE,IAAE,IAAE,MAAK,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC,GAAE,IAAE,EAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAA,EAAC,WAAS,EAAE,EAAE,QAAQ,mBAAmB;AAAE,QAAE,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQA,KAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAE,GAAG,GAAE,KAAE,IAAE,MAAK,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAS;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,0BAA0B,KAAG,EAAE,eAAa,KAAG,EAAE,cAAY,EAAE,eAAa,GAAE,IAAE,IAAE,GAAG,GAAE,CAAC,IAAE,MAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAE,MAAI;AAAY,MAAG,KAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,GAAE;AAAC,QAAI,IAAEC,IAAE,eAAe,CAAC,GAAE,WAAU,EAAE,kBAAkB,GAAE,SAAS,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,MAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,CAAC,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,EAAE,cAAa,EAAE,WAAW,GAAE,CAAC,EAAE,gBAAe,EAAE,aAAa,GAAE,CAAC,EAAE,UAAS,EAAE,OAAO,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,GAAE,WAAU,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,cAAY,GAAE,KAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAA;AACnnH,aAAQ,IAAE,GAAE,IAAE,KAAK,UAAS;AAAI,WAAG;AAAA,gDACH,CAAC;AAAA;AAAA,sDAEK,KAAK,YAAY,CAAC,CAAC;AAAA,oCACrC,KAAK,QAAQ,CAAC,CAAC;AAAI,SAAK,WAAS;AAAA;AAAA,YAEzD,CAAC;AAAA;AAAA;AAAA;AAAA,YAID,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIN;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,cAAYA,KAAE,KAAK,OAAKA,IAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE33B,CAAC;AAAA;AAAA,oDAEyC,EAAE,CAAC,CAAC;AAAA,oCACpB,CAAC;AAAA;AAAA;AAAA,EAEhC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,UAAI,IAAE,EAAE,KAAK,OAAO,IAAE,EAAE,KAAK,GAAGC,IAAE,CAAC,CAAC,EAAE;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC;AAAE,MAAG,EAAE,EAAE,IAAI,OAAO,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,IAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAA8B,MAAI;AAAA;AAAA;AAAlC,IAEtuC,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAF+pC,IAE7pC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgC,MAAI;AAAA;AAAA;AAApC,IAE/H,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,QAAO,eAAc,GAAE,CAAC;AAFuD,IAErD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgD,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAAnF,IAAqF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAArE,IAAuE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI,GAAG,EAAC,WAAU,KAAI,OAAM,OAAM,CAAC;AAArE,IAAuE,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA+B,MAAI;AAAA;AAAA;AAAnC,IAEvoB,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAF+jB,IAE7jB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAgC,MAAI;AAAA;AAAA;AAApC,IAEhI,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,IAAG,OAAM,OAAM,CAAC;AAFwD,IAEtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAExT,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFoT,IAUxT,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AAV6P,IAU3P,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEnH,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAF6F,IAE3F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA8C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAlD,IAI9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,OAAM,CAAC;AAJuB,IAIrB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAqC,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA3D,IAA6D,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAA8C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAlD,IAKlO,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,OAAM,OAAM,CAAC;AAL2K,IAKzK,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAI,IAAEA,KAAE,IAAE,EAAE,CAAC,IAAE;AAAE,SAAK,cAAY;AAAE,QAAI,GAAE,IAAE,SAAS,CAAC,aAAa,CAAC;AAAU,UAAI,MAAG,IAAE,eAAe,CAAC,MAAI,MAAI,IAAE,IAAE,QAAQ,CAAC,MAAI,IAAE,WAAW,CAAC,cAAc,CAAC,OAAM,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAS3V,CAAC,UAAU,CAAC;AAAA;AAAA,oCAEA,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0BAKX,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAEA,KAAE,IAAE,EAAE,CAAC,IAAE;AAAE,SAAK,cAAY;AAAE,QAAI,GAAE,IAAE,SAAS,CAAC,aAAa,CAAC;AAAU,UAAI,MAAG,IAAE,eAAe,CAAC,MAAI,MAAI,IAAE,IAAE,QAAQ,CAAC,MAAI,IAAE,WAAW,CAAC,cAAc,CAAC,OAAM,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQpR,KAAK,YAAY,CAAC,CAAC;AAAA,gCACnB,KAAK,YAAY,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAelB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAWT,CAAC,UAAU,CAAC;AAAA;AAAA;AAAA,6DAGwB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAqBpB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,0BAA0B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAA/N,IAAiO,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,cAAa,eAAc,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,QAAM,EAAE,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,OAAK,GAAE,KAAK,QAAM,GAAE,KAAK,OAAK,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQvd,KAAK,KAAK;AAAA,oDACYA,GAAC;AAAA,yCACZ,KAAK,KAAK;AAAA,0BACzBA,GAAC;AAAA;AAAA;AAAA,sCAGW,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAevB,CAAC,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAON,CAAC;AAAA,0BAChB,CAAC;AAAA;AAAA;AAAA;AAAA,0CAIe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EActC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAA5K,IAA8K,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAEA,IAAE,OAAM,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAEC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAG,GAAE;AAAC,UAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,UAAEA,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,UAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAE,SAAO;AAAA,IAAC;AAAM,UAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,QAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,cAAc,CAAC,GAAE,GAAE,EAAE,KAAK;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,MAAE,SAAO;AAAA,EAAC;AAAM,QAAE,GAAG,GAAE,GAAE,GAAEA,GAAC;AAAE,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEh3C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA,MAKF,KAAG;AAAA;AAAA;AAP22C,IASh3C,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AATqzC,IASnzC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,SAAS;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,gBAAe,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCACjrC,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAcR,CAAC;AAAA,kBACf,CAAC;AAAA,gDAC6BA,GAAC;AAAA;AAAA,oCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKb,CAAC;AAAA,kDACe,CAAC;AAAA;AAAA,sCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOhB,CAAC;AAAA;AAAA;AAAA;AAAA,qCAII,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQjC;AAAC;AA9Cw8B,IA8Ct8B,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,cAAY,EAAE;AAAQ,QAAIA,MAAE,EAAE,aAAY,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,eAAc,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,sBAAqB,IAAE,EAAE,uBAAsB,IAAE,EAAE,sBAAqB,IAAE,IAAE,IAAE,EAAE,QAAQ,OAAM,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,IAAE,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA,iCAC5U,CAAC,KAAK,CAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAiBd,CAAC;AAAA,mBACd,CAAC;AAAA,gDAC4BA,GAAC;AAAA;AAAA,oCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,kCAKZ,CAAC;AAAA,sBACb,CAAC;AAAA,kDAC2B,CAAC;AAAA;AAAA,sCAEb,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAMb,CAAC;AAAA,wBACb,CAAC;AAAA,oDAC2B,CAAC;AAAA;AAAA,wCAEb,EAAE,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAOhB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMV,CAAC,MAAM,CAAC;AAAA,yBACR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,MAAG,IAAE,IAAI,GAAG,GAAE,OAAM,CAAC,GAAE,IAAEC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,IAAI,GAAGA,KAAE,OAAM,KAAE,GAAE,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,SAAS;AAAE,MAAE,IAAI,GAAGC,KAAE,OAAM,MAAG,MAAG,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,GAAE,CAACD,GAAC,GAAE,SAAS;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOA,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,IAAEC;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC,EAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,WAAU,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,SAAO,EAAE,8BAA8B,CAAC,GAAE,EAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAG,GAAE;AAAC,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,UAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,UAAI,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,UAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,UAAI,IAAE,EAAE,QAAQ,IAAI,EAAE,MAAM;AAAE,QAAE,SAAO;AAAA,IAAC;AAAM,UAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC;AAAA,EAAC;AAAC,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,8BAA8B,CAAC;AAAE,SAAO;AAAC,EAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,GAAE,EAAE,OAAM,OAAMA,GAAC,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE,KAAG,QAAMA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAIK,MAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEpqG,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA,MAKF,KAAG;AAAA;AAAA;AAP+pG,IASpqG,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AATymG,IASvmG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEL,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE;AAAE,QAAG,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA,sBACvY,CAAC;AAAA,oBACH,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wCAKmB,CAAC;AAAA;AAAA,4CAEG,CAAC;AAAA;AAAA;AAAA;AAAA;AAIrC;AAAA,IAAM;AAAC,SAAK,WAAS;AAAA,QACrB,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGf,CAAC;AAAA,8BACmB,CAAC;AAAA;AAAA,iDAEkB,CAAC;AAAA;AAAA,qDAEG,CAAC;AAAA;AAAA;AAAA,UAG5C,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,MAAI,IAAE,WAAS,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,MAAI,YAAU,IAAE,GAAE,IAAE;AAAG,QAAG,MAAI,GAAE;AAAC,UAAI,IAAE;AAAA,UACpY,CAAC;AAAA;AAAA,0CAE+B,CAAC;AAAA;AAAA,8CAEG,CAAC;AAAA;AAAA;AAAA;AAGvC,UAAE;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,sCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,UAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,CAAC;AAAA,YACF,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,IAEhD,OAAK;AAAC,UAAI,IAAE;AAAA,UACT,CAAC;AAAA,UACD,CAAC,SAAS,CAAC;AAAA,UACX,CAAC,UAAU,CAAC;AAAA,UACZ,CAAC;AAAA;AAAA,6CAEkC,CAAC;AAAA,kDACI,CAAC;AAAA;AAAA;AAE3C,UAAE;AAAA,UACA,CAAC;AAAA,UACD,CAAC;AAAA,sCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,UAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,CAAC;AAAA,YACF,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,UAG7C,EAAE,IAAE,CAAC,CAAC;AAAA,aACH,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC;AAAA,YAClC,CAAC;AAAA,wCAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA,YAC3C,EAAE,IAAE,CAAC,CAAC;AAAA,eACH,CAAC;AAAA,cACF,CAAC;AAAA,0CAC2B,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,IAGlD;AAAC,SAAK,WAAS;AAAA,cACR,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,cACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGrB,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,MAAI,CAAC,EAAC,QAAOD,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAtM,IAAwM,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAR,IACjP,MAAI;AAAA;AAAA;AAAA,MAGrB,KAAG;AAAA;AAAA;AAJ+P,IAMpQ,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAN0N,IAMxN,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,QAAO,MAAK,QAAO,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQzNA,MAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAUPA,MAAE,CAAC;AAAA;AAAA;AAAA,EAExB;AAAC;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAR,IAIO,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJX,IAsBN,KAAG,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,kBAAiB,KAAE,CAAC;AAtBvD,IAsByD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG;AAAP,IAAuB,KAAG,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,iBAAgB,MAAG,eAAc,GAAE,CAAC;AAAlG,IAAoG,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAGA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEz1C,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUJ,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI;AAAE,SAAO,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAG,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAG,GAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,GAAE,cAAa,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG;AAAwB,SAAS,IAAID,KAAE;AAAC,IAAE,KAAK,+FAA+F;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,IAAI,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAS,GAAE,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,8BAIl/D,CAAC,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvC;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAE,EAAAA,IAAE,8BAA8B,CAAC;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAlX,IAAoX,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC;AAAE,QAAG,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA,sBAC58E,CAAC;AAAA,oBACH,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUb;AAAA,IAAM;AAAC,SAAK,WAAS;AAAA,QACrB,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGf,CAAC;AAAA;AAAA;AAAA;AAAA,YAIC,CAAC;AAAA,2BACc,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,iBAAe,CAAC,EAAC,MAAK,SAAQ,MAAK,QAAO,CAAC,GAAE,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC,GAAE,IAAEA,IAAE,IAAI,OAAG,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,UAAS,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,MAAI,IAAE,WAAS,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,KAAI,IAAE,CAAC,GAAG,CAAC,oBAAmB,GAAG,EAAE,IAAE,CAAC,CAAC;AAAA,YAC9a,CAAC;AAAA,SACL,MAAI,IAAE,KAAG;AAAA;AAAA,SAER,EAAE,IAAE,CAAC,CAAC;AAAA,YACH,EAAE,IAAE,CAAC,CAAC,MAAM,KAAK,YAAY,IAAE,CAAC,CAAC,OAAM,MAAI,IAAE,KAAG,KAAK,EAAE,IAAE,CAAC,CAAC;AAAA,cACzD,CAAC,KAAK,GAAE,IAAE,MAAI,IAAE,4BAA0B,8DAA6D,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,MAAI,IAAE,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG;AAAA,UACnJ,EAAE,CAAC,CAAC;AAAA,cACA,CAAC;AAAA,mBACI,CAAC;AAAA;AAAA,YAER,CAAC;AAAA,mBACM,CAAC,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC;AAAA;AAAA;AAElD,SAAG,MAAI,IAAE,OAAK,MAAK,KAAK,WAAS;AAAA,cAC3B,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,cACnB,CAAC,UAAU,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,UAGrB,CAAC;AAAA;AAAA,UAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGN;AAAC;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAArW,IAAuW,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IASla,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgBF,KAAG;AAAA;AAAA;AAzB6Z,IA2Bla,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AA3BwX,IA2BtX,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,2BAA2B,QAAO,GAAE,CAAC;AAAE,MAAI;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,EAAE,QAAO,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,GAAE,GAAE,QAAOA,GAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,oBAAmB,GAAE,mBAAkB,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,kBAAiB,EAAC,IAAE,GAAE,IAAE,EAAE,IAAI,OAAGC,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,QAAO,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,GAAE,cAAa,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,mBAAkB,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAA3H,IAA6H,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,MAAI;AAAR,IAA0B,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAAhD,IAAkD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAEv6E,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAFm6E,IAYv6E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAZ63E,IAY33E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAElG,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAF8F,IAYlG,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAZwD,IAYtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE;AAAE,QAAE,IAAE,0EAAwE,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE/Z,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCASb,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoB/B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE;AAAE,QAAE,IAAE,0EAAwE,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE7W,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA,uCACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAcL,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQJ,IAAE,CAAC;AAAA,uCACI,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgDrC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAEA,KAAE,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAU7hB,CAAC;AAAA,yCACF,CAAC;AAAA;AAAA,6CAEG,CAAC;AAAA,4CACF,CAAC;AAAA;AAAA,oCAET,CAAC;AAAA,mCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAcF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAQC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sDAMiB,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qDAMJ,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BnD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,QAAM,OAAM;AAAE,QAAE,IAAE,8EAA4E,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAE5iB,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCASb,CAAC;AAAA;AAAA;AAAA;AAAA,8DAI0B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK1D;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY,CAAC;AAAE,QAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE;AAAE,SAAK,cAAY,CAAC,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAI,IAAE,CAAC,KAAGA,MAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAGA,MAAE,IAAEA,MAAE,IAAEA,KAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,IAAE,QAAM,OAAM;AAAE,QAAE,IAAE,8EAA4E,IAAE,+CAA8C,KAAK,WAAS;AAAA;AAAA,YAEjY,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,YACT,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC;AAAA,uCACkB,CAAC,OAAO,CAAC;AAAA,uCACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAcL,CAAC;AAAA;AAAA;AAAA;AAAA,8DAI0B,CAAC;AAAA;AAAA;AAAA,gCAG/B,IAAE,CAAC;AAAA,uCACI,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAarC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,cAAYA;AAAE,QAAG,CAAC,EAAC,GAAE,CAAC,IAAEA,KAAE,CAAC,EAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE;AAAE,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAU3hB,CAAC;AAAA,yCACF,CAAC;AAAA;AAAA,6CAEG,CAAC;AAAA,4CACF,CAAC;AAAA;AAAA,oCAET,CAAC;AAAA,mCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAcF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAQC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,sBAKf,EAAE,CAAC,CAAC;AAAA,sCACY,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGlB,EAAE,CAAC,CAAC;AAAA,wCACY,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA,4BAGhB,CAAC;AAAA,kBACX,CAAC;AAAA;AAAA;AAAA;AAAA,4BAIS,CAAC;AAAA,kBACX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYd;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,EAAE;AAAO,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,QAAG,KAAK,cAAY,GAAE,MAAI,GAAE;AAAC,WAAK,WAAS;AAAA;AAAA;AAAA,2BAG7Y,EAAE,CAAC,CAAC;AAAA;AAAA;AAEvB;AAAA,IAAM;AAAC,QAAI,IAAE,OAAGA,IAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAE,CAAC,CAAC,aAAa,CAAC,UAAQ,UAAU,CAAC,KAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAG,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE3I,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa;AAAG,QAAI,IAAE,EAAE;AAAO,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,kCAAkC,CAAC,8BAA8B;AAAE,SAAK,cAAY;AAAE,QAAI,IAAE,GAAG,MAAK,CAAC,GAAE,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,UAAU,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,GAAG,EAAE,IAAE,CAAC,CAAC,UAAU,KAAK,YAAY,IAAE,CAAC,CAAC,IAAG,IAAE,GAAG,CAAC;AAAE,UAAI,IAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA,uCAIrU,EAAE,CAAC,CAAC;AAAA,cAC7B,EAAE,CAAC,CAAC;AAAA,eACH,CAAC;AAAA,2CAC2B,EAAE,CAAC,CAAC;AAAA,kBAC7B,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UAId,KAAK,WAAS;AAAA;AAAA,YAEV,CAAC;AAAA;AAAA,uBAEU,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,eACpB,CAAC;AAAA,yBACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA;AAAA,eAEtB,CAAC;AAAA,yBACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA,iBACpB,CAAC;AAAA,2BACS,EAAE,EAAE,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKjC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,aAAO,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,IAAE,CAAC,IAAE,MAAI,EAAE,IAAE,CAAC,IAAE,SAAQ,EAAE,CAAC;AAAA,IAAC;AAAC,aAAS,EAAE,GAAE;AAAC,UAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,MAAM,EAAE,EAAE,KAAK,GAAG;AAAE,aAAM,mBAAmB,CAAC,WAAW,CAAC;AAAA,IAAI;AAAC,aAAS,EAAE,GAAE,GAAE;AAAC,aAAOA,IAAE,QAAQ,CAAC,MAAI,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,SAAO,GAAG,EAAE,CAAC,CAAC;AAAA,IAAE;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,QAAQ,6BAA6B,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,UAAS,MAAK,OAAM,CAAC;AAAE,QAAI,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,SAAK,cAAY;AAAE,QAAI,IAAE;AAAG,WAAOA,OAAG,WAAS,IAAE,uBAAuBA,IAAE,QAAQ,CAAC,CAAC,MAAI,IAAE;AAAA,2BACl9BA,IAAE,KAAK,GAAG,CAAC;AAAA,+CACQ,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWhD,CAAC;AAAA,uCAC0B,CAAC,+BAA+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnE;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,GAAE,KAAK,IAAI,CAAC,GAAE,KAAK,IAAI,CAAC,CAAC,CAAC;AAAE,SAAO,EAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IAepS,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAf8Q,IAe5Q,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAiC,MAAI,GAAG,EAAC,WAAU,KAAI,eAAc,GAAE,CAAC;AAAxE,IAA0E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,WAAU,cAAc,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAQ,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAgB,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE;AAAwB,QAAI,IAAE,mBAAmB,CAAC,KAAI,IAAEA,MAAE,IAAE,eAAa;AAAU,SAAK,WAAS;AAAA,UAC/kB,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmB,CAAC;AAAA;AAAA,kCAECA,GAAC;AAAA,kCACD,CAAC;AAAA,0CACO,CAAC;AAAA;AAAA;AAAA,uBAGpB,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIE,CAAC;AAAA;AAAA;AAAA,EAEpB;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,WAAU,cAAc,GAAE,KAAK,eAAa,MAAG,KAAK,eAAa,MAAG,KAAK,cAAY;AAAE,QAAI,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAQ,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE,IAAE,MAAI,MAAI,MAAI,IAAE;AAAgB,QAAI,IAAE,cAAc,CAAC,KAAI,IAAE;AAAG,UAAI,IAAE;AAAwB,QAAI,IAAE,mBAAmB,CAAC,KAAI,IAAEA,MAAE,IAAE,eAAa,WAAU,IAAEA,MAAE,IAAE,mBAAiB;AAAU,SAAK,WAAS;AAAA,UACpd,CAAC,cAAc,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,YAGnB,CAAC;AAAA;AAAA;AAAA,gCAGmB,CAAC;AAAA;AAAA,kCAECA,GAAC;AAAA,oCACC,CAAC;AAAA,6CACQ,CAAC;AAAA,4BAClBA,GAAC;AAAA,+CACkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,+BAKjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAiBN,CAAC;AAAA;AAAA;AAAA,EAEpB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,GAAE;AAAE,IAAE,EAAE,QAAQ,YAAY,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC,IAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,kBAAiB,QAAQ,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,aAAY,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,0BAAyB,IAAE,uBAAuB,KAAK,KAAK,KAAK,KAAKA,MAAE,CAAC,CAAC,CAAC,sCAAqC,IAAE,EAAE,EAAE,UAAU,eAAe,MAAI,IAAE,IAAE,GAAE,IAAE,MAAI,SAAO,MAAI;AAAK,SAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,WAKroC,CAAC;AAAA;AAAA,+CAEmC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkB1C;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,GAAG,GAAE,KAAK,cAAYA;AAAE,QAAI,GAAE;AAAE,QAAG,IAAE;AAAE,YAAM,MAAM,kBAAkB,CAAC,uBAAuB;AAAE,QAAG,MAAI;AAAE,UAAE,SAAQ,IAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO;AAAI,UAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,KAAG,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,UAAE,EAAE,KAAK,GAAE,IAAE,EAAE,KAAK;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAEzmB,CAAC;AAAA,4BACiB,CAAC;AAAA;AAAA,2BAEF,CAAC;AAAA;AAAA,2BAED,CAAC;AAAA;AAAA;AAAA;AAAA,EAGvB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA,uBAG7N,EAAE,eAAe;AAAA,kBACtB,EAAE,UAAU;AAAA;AAAA;AAJ8M,IAM1O,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AANoN,IAMlN,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAE9E,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAF0E,IAY9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,KAAI,eAAc,GAAE,CAAC;AAZmB,IAYjB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAGnH,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAH6F,IAG3F,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,KAAG;AAAA;AAAA;AAAX,IAE9E,MAAI;AAAA;AAAA;AAAA,IAGF,EAAE;AAAA;AAAA;AAL0E,IAO9E,MAAI,GAAG,EAAC,WAAU,KAAI,iBAAgB,IAAG,CAAC;AAPoC,IAOlC,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAGlG,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAH4E,IAG1E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAR,IAoB9E,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AApBwD,IAoBtD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,sEAAsE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAA/rB,IAAisB,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WAC/7B,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,WACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UAClD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,QAAO,IAAI,WAAW,EAAE,IAAI,OAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,uDAAuD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,qDAAqD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,MAAM,KAAKC,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,MAAM,KAAKA,IAAE,SAAS,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,EAAE,OAAM,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,gBACjxC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,gBACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,IAAE;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,SAAO;AAAE,UAAM,IAAI,MAAM,2DAA2D;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,eAC1a,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,eACjD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE;AAAG,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG;AAAP,IAAyB,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,IAAG,eAAc,GAAE,CAAC;AAAlF,IAAoF,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAwB,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA9C,IAAgD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG;AAAP,IAAmC,MAAI,GAAG,EAAC,WAAU,IAAG,iBAAgB,GAAE,CAAC;AAA3E,IAA6E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,GAAE,UAAS,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,UAAS,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAI,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,KAAG;AAAA,mCACp5D,EAAE,KAAK;AAAA,KACtC,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,MAAM,GAAE,IAAE;AAAG,QAAG,MAAI;AAAE,UAAE;AAAA,SAA+B;AAAC,UAAI,IAAE;AAAE,UAAE,EAAE,IAAI,CAAC,GAAE,OAAK,KAAI,EAAE,WAAS,IAAE,oBAAoB,CAAC,aAAa,CAAC,MAAI,UAAU,IAAE,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,SAAK,WAAS;AAAA,QACpb,CAAC,YAAY,CAAC,IAAI,CAAC;AAAA,QACnB,CAAC,cAAc,CAAC,IAAIA,GAAC;AAAA;AAAA;AAAA,UAGnB,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,8BAA8B,CAAC;AAAA,EAAC,WAASA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sCAAsC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE;AAAO,SAAM,CAACA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,CAAC,CAAC,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,kCAAkC;AAAE,MAAG,KAAG;AAAE,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAyB,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA;AAAA;AAAR,IAG72E,MAAI,GAAG,EAAC,WAAU,IAAG,CAAC;AAHu1E,IAGr1E,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAOC,IAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,OAAG,IAAE,GAAE,IAAEA,IAAE,gBAAgB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAEA,IAAE,8BAA8B,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,OAAK,EAAE;AAAO,QAAI,IAAE,GAAG,KAAK,IAAI,GAAE,IAAE,IAAI,CAAC;AAAE,SAAK,WAAS;AAAA;AAAA,UAE3/B,CAAC;AAAA,yBACc,CAAC;AAAA;AAAA;AAAA,EAErB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE;AAAE,UAAM,MAAM,iBAAiB,CAAC,uBAAuB;AAAE,MAAG,MAAI;AAAE,WAAM,eAAeA,IAAE,CAAC,CAAC;AAAI,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,MAAE,KAAK,QAAQC,IAAE,CAAC,CAAC,KAAKD,IAAE,CAAC,CAAC,GAAG;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,SAAO,GAAE;AAAC,QAAI,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,gBAAgB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,KAAI,MAAK,MAAK,GAAE,EAAC,MAAK,aAAY,MAAK,MAAK,GAAE,EAAC,MAAK,eAAc,MAAK,QAAO,GAAE,EAAC,MAAK,OAAM,MAAK,MAAK,GAAE,EAAC,MAAK,OAAM,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCp5B;AAAC;AAxCupB,IAwCrpB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,iBAAe,CAAC,EAAC,MAAK,KAAI,MAAK,MAAK,GAAE,EAAC,MAAK,aAAY,MAAK,MAAK,GAAE,EAAC,MAAK,KAAI,MAAK,MAAK,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkC/L;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,QAAI,QAAMA,IAAE,8BAA8B,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA;AAAG,SAAG;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,EAAE,UAAU,0CAA0C,GAAE,IAAE,EAAE,EAAE,UAAU,8BAA8B,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,IAAE,KAAG,IAAE,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAE,WAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI;AAAE,WAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,QAAQ,IAAI,EAAE,MAAM,GAAE,IAAE,MAAI,QAAM,EAAE,UAAS,IAAE,IAAEA,IAAE,aAAa,CAAC,IAAE,GAAE,IAAE,EAAE,cAAc,CAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,OAAG,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAK,IAAE,MAAI,MAAI,OAAK,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,MAAI,OAAK,IAAE,CAAC,GAAE,CAAC,OAAO,iBAAiB,GAAE,CAAC,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,CAAC,CAAC,CAAC,GAAE,CAAC,MAAI,OAAK,IAAE,CAAC,GAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,gBAAgB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE;AAAE,IAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,YAAY,GAAE,KAAK,cAAY;AAAE,QAAI,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,YAAO,GAAE;AAAA,MAAC,KAAI;AAAW,YAAE;AAAE;AAAA,MAAM,KAAI;AAAU,YAAE;AAAE;AAAA,MAAM,KAAI;AAAO,YAAE;AAAE;AAAA,MAAM,KAAI;AAAU,YAAE;AAAE;AAAA,MAAM;AAAQ,YAAE;AAAE;AAAA,IAAK;AAAC,SAAK,WAAS;AAAA;AAAA;AAAA,mBAG92D,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAwBO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAiBD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4CAUgB,CAAC,+BAA+BA,GAAC;AAAA;AAAA;AAAA,sCAGvC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAwBD,CAAC;AAAA;AAAA;AAAA;AAAA,mDAIYA,GAAC;AAAA,mDACD,CAAC;AAAA;AAAA,sBAE9B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBd;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,gBAAgB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,KAAG,GAAE,QAAQ,GAAE,QAAQ,KAAK,aAAY,4DAA4D;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,eAAe,GAAE,EAAE,OAAM,CAAC,GAAE,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,YAAY;AAAE,QAAI,IAAE,EAAE,YAAW,IAAE,EAAE,WAAU,IAAE,EAAE,QAAO,IAAE,EAAE,aAAY,IAAE,IAAE,KAAK,KAAK,IAAE,CAAC;AAAE,SAAK,cAAY,CAAC,GAAE,CAAC;AAAE,QAAI,IAAE,OAAM,IAAE,YAAW,IAAE,KAAK,MAAM,IAAE,CAAC,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE;AAAA;AAAA,OAEh9C,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACe,CAAC;AAAA;AAAA;AAAA;AAG5B,QAAI,IAAE;AAAG,QAAE,IAAE,MAAI,IAAE;AAAA,oCACQ,CAAC;AAAA;AAAA;AAAA,UAG5B,KAAK,WAAS;AAAA,0CACmB,CAAC;AAAA;AAAA;AAAA,UAGjC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,UAKD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASC,CAAC,cAAc,CAAC;AAAA,wDAC4B,CAAC;AAAA;AAAA;AAAA;AAAA,8BAI3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAgBnB,CAAC;AAAA;AAAA;AAAA,iCAGoB,CAAC;AAAA,cACpB,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAiBP,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAed,CAAC;AAAA,qBACQ,MAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAed,CAAC;AAAA;AAAA,oBAEO,CAAC;AAAA;AAAA;AAAA,EAEhB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAG,MAAI,IAAE,EAAE,aAAa,gBAAgB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,aAAa,8BAA8B,GAAE,CAAC,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,aAAY,EAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAEA,IAAE,cAAc,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAE,QAAG,EAAE,KAAK,CAAC,GAAE,EAAE,MAAM,CAAC,MAAI;AAAE,aAAO;AAAE,QAAI,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,CAAC,IAAE,CAAC,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC,GAAE,IAAE,EAAE,GAAE,sBAAqB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,8BAA8B,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,SAAQ,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAGK,KAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQN,OAAK;AAAI,KAAGA,GAAC;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,SAAO,CAAC,IAAE,UAASA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,MAAI,CAAC,IAAE;AAAK,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,6DAA6D;AAAE,MAAG,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,EAAE,MAAM,WAAS;AAAE,YAAM,IAAI,MAAM,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,QAAE,EAAE;AAAA,EAAE;AAAC,MAAI,IAAE,KAAG,OAAK,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,GAAG,CAAC,oEAAoE;AAAE,MAAI,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,KAAG,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC;AAAE,WAAS,EAAE,GAAE;AAAC,IAAAA,MAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,KAAG,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,WAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAGC,IAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWD,KAAE,aAAY,QAAO,WAAU,GAAE,YAAW,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAI;AAAE,WAAS,EAAE,GAAE;AAAC,QAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEC,OAAG,OAAKA,MAAE,EAAE,OAAM,IAAE,EAAE,2BAA2B,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,QAAG,EAAE,cAAc,CAAC,MAAI;AAAE,aAAO;AAAE,QAAI,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,WAAO,EAAE,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWD,KAAE,aAAY,QAAO,WAAU,GAAE,YAAW,EAAC;AAAC;AAAC,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,CAAC,EAAE,OAAM,EAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,IAAI,OAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED;AAAE,MAAG,EAAE,UAAQ;AAAS,WAAO,GAAGC,IAAE,SAAS,EAAE,MAAM,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,mBAAmB,CAAC;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,IAAI,EAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE;AAAG,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,MAAI,MAAI,IAAE;AAAI,MAAI,IAAE,IAAI,EAAE,EAAE,OAAM,EAAE,IAAI,GAAE,IAAE,EAAC,QAAO,EAAE,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,EAAE,MAAK;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,CAAC;AAAE,WAAO,EAAE,QAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,MAAMD,IAAE,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAEC,IAAE,QAAO;AAAI,IAAAA,IAAE,CAAC,IAAED,IAAE,EAAE,CAAC,CAAC;AAAE,SAAOC;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO,EAAE;AAAE,IAAAA,IAAE,CAAC,MAAI,KAAGC,IAAE,KAAKD,IAAE,CAAC,CAAC,GAAEA,IAAE,EAAE,CAAC,CAAC,MAAI,KAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,QAAE,CAAC,KAAG,MAAI,MAAI,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,OAAK,IAAE;AAAG,MAAE,CAAC,IAAE;AAAA,EAAC;AAAC,SAAM,CAACC,KAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG,WAAU,IAAG;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,OAAM,IAAEA,IAAE,MAAM,QAAO,IAAE,EAAE,eAAe,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,MAAK,IAAE;AAAG,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,IAAI,MAAM,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,QAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAEA,IAAE,UAAU,IAAID,IAAE,MAAM,EAAE;AAAG,IAAAC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,OAAK,MAAI,IAAE;AAAA,EAAG;AAAC,SAAM,EAAC,YAAW,GAAE,cAAa,GAAE,MAAK,GAAE,oBAAmB,EAAC;AAAC;AAAC,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI;AAAE,WAASC,IAAE,GAAE;AAAC,QAAE,EAAE,KAAK,MAAMD,KAAE,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAA,EAAC;AAAC,WAAS,EAAE,GAAE;AAAC,QAAG,EAAC,SAAQ,GAAE,QAAO,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,QAAG,GAAE;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,YAAI,MAAI,IAAE,GAAE,IAAE;AAAA,IAAE;AAAC,QAAI,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,WAAW,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,WAAO,EAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,CAAC,GAAE,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,SAAM,EAAC,YAAWA,KAAE,aAAY,QAAO,WAAUC,KAAE,YAAW,EAAC;AAAC;AAAC,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,IAAG,KAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE;AAAW,MAAG,EAAE,eAAa;AAAe,UAAM,IAAI,MAAM,6CAA6C,EAAE,UAAU,+BAA+B;AAAE,MAAG,EAAE,kBAAgB,KAAG,EAAE,mBAAiB;AAAE,UAAM,IAAI,MAAM,0EAA0E,EAAE,cAAc,KAAK,EAAE,aAAa,IAAI;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,aAAY,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,MAAK,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,eAAc,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,MAAK,EAAE,cAAa,EAAE,WAAW,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC;AAAE,SAAO,EAAE,OAAO,MAAI,EAAE,cAAc,CAAC,GAAE,MAAI,cAAc,CAAC,gBAAgB,EAAE,KAAK,kEAAkE,GAAED,IAAE,QAAQ,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,4DAA4D;AAAE,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2B,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,CAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE,EAAE,QAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,KAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAEC,KAAE,CAAC,GAAE,IAAE,GAAG,iBAAiB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,GAAG,kBAAkB,GAAE,CAAC;AAAE,WAAO,EAAE,UAAQ,WAAS,EAAE,cAAY,EAAE,MAAM,GAAE,IAAE,EAAE,cAAc,CAAC,CAAC,IAAE,EAAE,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,GAAE,IAAE,EAAE,cAAc,CAAC,CAAC,CAAC,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,cAAY,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,MAAM;AAAO,MAAG,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,WAAU,MAAI;AAAE,QAAI,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,GAAG,GAAE,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,MAAE,IAAI,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,IAAAA,IAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,UAAI,IAAE,IAAE,IAAE,IAAEA,MAAE;AAAE,QAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,IAAC;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,eAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,YAAI,IAAE,IAAE,IAAE,IAAEA,MAAE,IAAE,IAAE;AAAE,UAAE,IAAID,IAAE,SAAS,GAAE,IAAE,EAAE,CAAC,CAAC,GAAE,CAAC,GAAE,KAAG,EAAE,CAAC;AAAA,MAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,WAAU,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,MAAI,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAO,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,GAAE,GAAE,EAAE,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE,GAAE,IAAEC,IAAE,mBAAmB,CAAC,GAAE,IAAEA,IAAE,mBAAmB,CAAC,GAAE,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,SAAOA,IAAE,WAAW,CAAC,EAAE,MAAM,GAAE,SAAQ,QAAO,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,WAAW,EAAE,OAAMC,GAAC,GAAE,IAAE,EAAE,mBAAmB,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE,EAAE,eAAeA,IAAE,MAAM,MAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,GAAE,EAAE,CAAC,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;AAAE,MAAG,EAAE,CAAC,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAE,EAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE;AAAE,QAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAE,QAAM;AAAE,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,cAAY,EAAE,uBAAuB,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,MAAM,GAAE,CAAC,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,WAAO,KAAG,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAGA,IAAE,mBAAmB,CAAC,CAAC,GAAE,IAAEA,IAAE,mBAAmB,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,UAAI,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,EAAE,CAAC,EAAE,SAAS,GAAE,IAAE,CAAC;AAAE,QAAE,IAAI,GAAE,CAAC,GAAE,KAAG;AAAA,IAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAEC,KAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE;AAAE,MAAG,EAAE,eAAa;AAAe,UAAM,IAAI,MAAM,oDAAoD,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAEC,KAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,EAAC,WAAU,GAAE,cAAa,GAAE,aAAY,GAAE,YAAW,GAAE,UAAS,GAAE,SAAQ,GAAE,aAAY,GAAE,WAAU,GAAE,UAAS,GAAE,cAAa,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,QAAQ,KAAI,IAAE,IAAE,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,eAAa,gBAAe,IAAE,EAAE,eAAe,EAAE,OAAO,GAAE,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,EAAE,eAAe,EAAE,KAAK,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,KAAG,IAAE,EAAE,CAAC,IAAE,GAAE,KAAG,IAAE,IAAE,EAAE,CAAC,GAAE,KAAG,EAAE,WAAW,EAAE,SAAQ,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,GAAG,MAAM,EAAE,IAAG,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,IAAG,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,IAAG,IAAG,EAAE,GAAE;AAAE;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,yCAAyC,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,aAAY,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,0CAA0C,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,SAAQ,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,YAAW,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,WAAS,CAAC,IAAE,YAAWA,IAAEA,IAAE,UAAQ,CAAC,IAAE;AAAS,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,oBAAmB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAG,CAAC,GAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,IAAE,OAAO,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,4BAA4B,EAAE,KAAK,8BAA8B;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,QAAI,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,WAAU,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,IAAE,OAAO,EAAE,UAAQ,aAAW,EAAE,UAAQ,SAAQ,MAAI,2BAA2B,EAAE,KAAK,8BAA8B;AAAE,MAAI,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,QAAI,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,IAAE,2BAA2B,UAAS,CAAC,CAAC,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,GAAE,GAAE,GAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,MAAI,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,WAAU,UAAS,UAAS,WAAU,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,OAAO,CAAC,GAAE,MAAI,IAAE,GAAE,CAAC,MAAI,GAAE,IAAE,EAAE,MAAM,WAAS,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,WAAS,EAAE,GAAE;AAAC,WAAO,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,MAAI,SAAO,IAAE,GAAE,GAAE,EAAE,MAAM,SAAO,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,KAAG,OAAK,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE;AAAE,MAAG,EAAE,eAAa;AAAe,UAAM,IAAI,MAAM,mEAAmE,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,QAAO,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,GAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,+DAA+D,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,oFAAoF,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE,SAAO,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,mFAAmF,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,cAAa,EAAE,aAAY,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAE,OAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,IAAG,SAAS;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI,KAAG,GAAG,IAAG,SAAS;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,OAAM,EAAC,EAAC,IAAEA;AAAE,MAAE,KAAG,EAAE,WAAWC,GAAC;AAAE,MAAI,IAAE,EAAE,WAAW,GAAE,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,KAAKA,GAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE;AAAM,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,MAAK,GAAE,UAAS,GAAE,QAAO,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,KAAG,OAAK,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAE,KAAG,OAAK,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,KAAG,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,GAAG,CAAC,oEAAoE;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,aAAY,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,GAAG,MAAM,WAAS;AAAE,YAAM,IAAI,MAAM,sDAAsD,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI;AAAE,YAAM,IAAI,MAAM,2BAA2B,GAAG,KAAK,mDAAmD,CAAC,GAAG;AAAE,QAAE,GAAG;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE,GAAE,IAAE,EAAE,WAAU,IAAE,EAAE,UAAS,IAAE,EAAE;AAAQ,MAAG,MAAI;AAAO,UAAM,IAAI,MAAM,yDAAyD,CAAC,uBAAuB;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,KAAG,OAAK,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,KAAG,GAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,YAAW,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,GAAG,CAAC;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,GAAG,CAAC,6EAA6E;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,aAAY,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,QAAI,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,QAAG,GAAG,MAAM,WAAS;AAAE,YAAM,IAAI,MAAM,+DAA+D,GAAG,MAAM,MAAM,GAAG;AAAE,QAAG,GAAG,MAAM,CAAC,MAAI;AAAE,YAAM,IAAI,MAAM,oCAAoC,GAAG,KAAK,mDAAmD,CAAC,GAAG;AAAE,QAAE,GAAG;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE,QAAQ,SAAO,SAAO,IAAE,GAAE,IAAE,EAAE,WAAU,IAAE,EAAE,UAAS,IAAE,EAAE;AAAQ,MAAG,MAAI;AAAO,UAAM,IAAI,MAAM,kEAAkE,CAAC,uBAAuB;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,KAAG,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,KAAG,KAAG,OAAK,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,KAAG,GAAE,EAAE,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAEC,KAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,GAAG,mBAAmB,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,UAAS,MAAK,CAAC,UAAS,UAAS,SAAQ,UAAS,UAAS,UAAS,SAAQ,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE,GAAE;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,MAAE,OAAO,KAAG,IAAE,KAAG,KAAG,GAAE,MAAI,6BAA6B,CAAC,kBAAkB,IAAE,CAAC,GAAG;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,MAAM,SAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,EAAE,WAAU,GAAE,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,QAAM,EAAE,aAAY;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI,KAAG,GAAG,IAAG,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAMC,IAAC,GAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAEC,KAAE,CAAC;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,OAAM,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,KAAK,MAAM,CAAC,GAAE,IAAEC,IAAE,WAAW,CAAC,CAAC,GAAE,SAAS;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,sCAAsC;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAW,EAAE,UAAQ,aAAW,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,qDAAqD;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,QAAE,GAAE,IAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,IAAE,EAAE,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,IAAE,OAAO,EAAE,UAAQ,WAAU,MAAI,0DAA0D,EAAE,KAAK,GAAG;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,QAAQ,KAAI,IAAE,EAAE,QAAQ,OAAM,IAAE,EAAE,QAAQ,QAAO,IAAE,EAAE,QAAQ,MAAK,IAAE,EAAE,gBAAe,IAAE,EAAE,eAAc,IAAE,EAAE,cAAa,IAAE,EAAE,aAAY,IAAE,EAAE,YAAW,IAAE,EAAE;AAAY,MAAG,EAAE,eAAa;AAAe,UAAM,IAAI,MAAM,6CAA6C,EAAE,UAAU,+BAA+B;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,UAAS,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,aAAY,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,iBAAgB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,SAAQ,EAAE,UAAS,EAAE,SAAQ,EAAE,UAAS,EAAE,WAAU,EAAE,UAAS,EAAE,aAAY,EAAE,cAAa,EAAE,aAAY,EAAE,eAAc,EAAE,gBAAe,EAAE,eAAc,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,eAAc,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,qBAAoB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,WAAU,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC,GAAE,IAAEC,IAAE,WAAW,EAAE,UAAS,EAAE,KAAK,GAAE,IAAEA,IAAE,WAAW,EAAE,UAAS,OAAO;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAG,EAAE,KAAK,GAAE,GAAE,EAAE,WAAU,EAAE,YAAW,EAAE,UAAS,EAAE,SAAQ,EAAE,WAAU,EAAE,UAAS,EAAE,cAAa,EAAE,aAAY,EAAE,gBAAe,EAAE,eAAc,EAAE,uBAAsB,EAAE,sBAAqB,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,wBAAwB,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,QAAO,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAI,MAAI,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO,EAAE,UAAQ,aAAW,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE;AAAA,EAAE;AAAC,MAAI,IAAE,EAAE,MAAM;AAAO,IAAE,2BAA2B,OAAM,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,MAAK,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAG,CAAC,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,QAAOC,IAAC,GAAE,OAAM,EAAC,KAAI,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAIC,IAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAWA,IAAE,OAAMA,IAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,IAAE;AAAE,SAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAG,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,GAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAU,UAAM,IAAI,MAAM,8CAA8C,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAEA,IAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,SAAO,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,GAAE,GAAE,GAAE,GAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,EAAE,GAAE,KAAGA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,IAAG,IAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,WAAWD,IAAE,KAAK,OAAO,QAAO,GAAE,CAAC,GAAE,IAAEC,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,SAAOD,IAAE,KAAK,MAAM,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC;AAAC;AAAC,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,SAAO,EAAE,KAAK,MAAM,CAAC,GAAE,EAAE,KAAK,MAAM,CAAC,GAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,MAAM,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,oBAAmB,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,IAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,cAAa,GAAE,eAAc,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,EAAC,kBAAiB,GAAE,cAAa,GAAE,iBAAgB,GAAE,eAAc,EAAC,IAAE,GAAG,GAAE,CAAC;AAAE,IAAE,KAAK,MAAM,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,WAAU,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,KAAI,MAAM;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,IAAED,KAAE,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAI,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,CAAC,GAAE,EAAE,UAAQ,aAAWA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,QAAO,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,CAAC;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAzJ,IAA2J,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,KAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,SAAQ,SAAS,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,IAAG,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,QAAMA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAEC,KAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,SAAS;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,IAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAG,MAAI,IAAE,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,CAAC,GAAE,KAAG,QAAM,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,SAAQ,SAAQ,SAAS,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,SAAS,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE;AAAE,SAAO,EAAE,UAAQ,cAAY,IAAE,GAAG,EAAC,SAAQA,KAAE,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,IAAG,GAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAGA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,CAAC,GAAE,KAAG,QAAMA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM;AAAE,KAAG,GAAE,GAAE,EAAE,QAAO,GAAE,EAAE,MAAM,QAAO,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAE,MAAK,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,GAAE,CAAC,GAAE,IAAE,MAAI,GAAE,IAAE,KAAI,IAAE,OAAO,KAAG,WAAS,CAAC,GAAE,GAAE,GAAE,IAAE,IAAE,CAAC,IAAE,CAAC,GAAG,GAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAO,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,EAAE;AAAM,UAAM,IAAI,MAAM,+EAA+E,EAAE,KAAK,QAAQ,EAAE,KAAK,EAAE;AAAE,MAAI,IAAEC,IAAE,WAAW,EAAE,OAAM,OAAO;AAAE,WAAS,EAAE,GAAE;AAAC,WAAOA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAA,EAAE;AAAC,SAAO,GAAG,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,GAAE,GAAG,EAAE,KAAK,GAAE,MAAI,QAAO,EAAE,CAAC,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,YAAW,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAE,MAAI,KAAG,IAAE,KAAG,MAAI,IAAE,IAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,KAAI,WAAU,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAO,EAAC,GAAEC,IAAC,EAAC,IAAED,KAAE,IAAE,EAAE,UAAU,IAAIC,IAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAWA,IAAE,OAAMA,IAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,EAAE,cAAc,EAAE,KAAK,MAAI,KAAG,GAAG,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,WAAU,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,GAAG,WAAW,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,UAAS,GAAE,eAAc,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,GAAE,KAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,uBAAsB,UAAS,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,QAAO,GAAE,YAAW,GAAE,cAAa,EAAC,IAAEC,KAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,MAAM,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,gDAAgD,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,gDAAgD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,kDAAkD,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAM,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,MAAI,IAAE,GAAE,IAAE;AAAE,SAAO,MAAI,EAAE,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,IAAG,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,IAAC,IAAED,KAAE,EAAC,cAAa,GAAE,YAAW,GAAE,UAAS,EAAC,IAAEC;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACrr9D,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM;AAAA,UACjD,EAAE,KAAK,EAAE;AAAE,MAAG,EAAE,MAAM,WAAS;AAAE,UAAM,IAAI,MAAM,sDAAsD,EAAE,KAAK,EAAE;AAAE,MAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,yDAAyD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,8CAA8C,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,qDAAqD;AAAE;AAAA,IAAM,KAAK,GAAE;AAAC,UAAI,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAI,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,GAAE,IAAE,MAAM,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC;AAAE,UAAE,EAAE,gDAAgD,GAAE,CAAC;AAAE;AAAA,IAAK;AAAA,IAAC;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAG,EAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAM,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,GAAGD,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,0BAAyB,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,EAAC,SAAQC,KAAE,QAAO,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAEC,IAAE,SAAS,EAAE,QAAO,IAAE,GAAE,CAAC,EAAE,CAAC,GAAE,IAAE,IAAE,IAAE,IAAE,IAAE;AAAE,MAAG,IAAE;AAAE,UAAM,IAAI,MAAM,EAAE,wDAAwD,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAEA,IAAE,WAAW,CAAC,CAAC,GAAE,OAAO,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,KAAG,GAAE,GAAG,EAAE,KAAK,GAAE,EAAE,MAAM,CAAC,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,MAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE;AAAE,UAAO,EAAE,CAAC,GAAE;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,wDAAwD;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK,GAAE;AAAC,UAAE,EAAE,6DAA6D;AAAE;AAAA,IAAK;AAAA,IAAC,KAAK;AAAE,UAAE,EAAE,yDAAyD,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM,KAAK;AAAE,UAAE,EAAE,uDAAuD,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAA,EAAE;AAAC,MAAGA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAE,UAAMA,IAAE,YAAY,EAAE,MAAM,GAAE,IAAI,MAAM,CAAC;AAAE,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,SAAO,GAAGA,KAAE,IAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,IAAG,YAAW,IAAG;AAAE,SAAS,IAAIA,KAAE;AAAC,SAAO,GAAGA,KAAE,KAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,IAAG,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAIA,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAEC,KAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAEC,KAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,SAAQ,SAAQ,SAAQ,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,WAAW,GAAE,SAAS,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,QAAO,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAEC,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,QAAQ,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,WAAU,EAAC,IAAEC,KAAE,EAAC,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,WAAW,CAAC,GAAE,CAAC,GAAE,OAAO;AAAE,IAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,QAAQ,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,cAAY;AAAE,MAAI,IAAE,EAAE,WAAW,CAAC,CAAC,GAAE,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,EAAC,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,OAAO;AAAE,SAAO,EAAE,mBAAmB,CAAC,EAAE,IAAI,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI;AAAR,IAAW,KAAG,GAAG,IAAG,GAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,cAAa,GAAE,oBAAmB,EAAC,IAAE,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,UAAI,MAAI,IAAE,GAAE,IAAE,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM;AAAA,EAAE;AAAC,IAAE,2BAA2B,OAAM,GAAE,EAAE,MAAM,MAAM;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,OAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,KAAG,EAAE,YAAY,EAAE,MAAM,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,qBAAqB,EAAE,OAAM,CAAC;AAAE,MAAE,QAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI,KAAG,GAAG,EAAE;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAEC,KAAE,CAAC,IAAE,GAAE,IAAE,EAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,WAAO;AAAE,MAAG,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,GAAG,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,SAAQ,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,MAAM,EAAE,MAAM,MAAM;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC;AAAE,MAAI,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,CAAC,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAE,EAAE,QAAO,GAAG,EAAE,KAAK,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,SAAQ,UAAS,UAAS,UAAS,QAAO,UAAS,QAAQ,CAAC;AAAC;AAAC,IAAI,MAAI,CAAC,EAAC,QAAOA,KAAE,SAAQ,GAAE,OAAMC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAEC,KAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,KAAK,EAAE,MAAM,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,EAAE,SAAO,CAAC,IAAE;AAAE,MAAI,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,WAAW,GAAE,OAAO,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAG,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,QAAO,GAAG,EAAE,KAAK,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAApW,IAAsW,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,IAAI;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA,IAAE,KAAK,MAAM,IAAG,MAAK,CAAC,UAAS,UAAS,QAAO,UAAS,UAAS,UAAS,UAAS,UAAS,UAAS,SAAQ,UAAS,SAAQ,UAAS,UAAS,UAAS,UAAS,QAAQ,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,QAAOC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAEC,KAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,MAAM,GAAE,IAAE,IAAI,WAAW,IAAI,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,MAAM,GAAE,IAAE,EAAE,WAAW,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,IAAG,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAW,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM,KAAI;AAAO,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAE;AAAA,EAAK;AAAC,SAAO,GAAG,GAAE,GAAE,EAAE,MAAM,CAAC,IAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,EAAE,MAAM,SAAO,GAAE,GAAE,EAAE,SAAO,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,WAAU,KAAI,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAEC,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,aAAY,GAAE,SAAQ,EAAC,IAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,SAAM,CAAC,EAAE,WAAW,GAAE,EAAE,OAAM,QAAO,CAAC,GAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAE,SAAQ,QAAO,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,IAAI,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,GAAE,EAAE,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,SAAO,EAAE,IAAI,CAAC,EAAC,QAAO,GAAE,OAAM,EAAC,OAAK,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,EAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAEC,IAAE,WAAW,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOA,IAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,QAAO,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK;AAAI,KAAGA,GAAC;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,yBAAwB,YAAS;AAAC,MAAG;AAAC,WAAO,YAAY,SAAS,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,IAAG,EAAE,CAAC,CAAC;AAAA,EAAC,SAAOA,KAAE;AAAC,WAAM;AAAA,EAAE;AAAC,CAAC;AAAE,GAAG,aAAa,gCAA+B,YAAS;AAAC,MAAG,GAAG,IAAI,SAAS;AAAE,WAAM;AAAG,MAAG;AAAC,WAAO,IAAI,eAAe,EAAE,MAAM,YAAY,IAAI,kBAAkB,CAAC,CAAC,GAAE,YAAY,SAAS,IAAI,WAAW,CAAC,GAAE,IAAG,KAAI,KAAI,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAG,IAAG,GAAE,GAAE,GAAE,IAAG,GAAE,KAAI,IAAG,GAAE,GAAE,IAAG,EAAE,CAAC,CAAC;AAAA,EAAC,SAAOA,KAAE;AAAC,WAAM;AAAA,EAAE;AAAC,CAAC;AAAE,IAAI,KAAG,GAAG,GAAG,CAAC;AAAd,IAAgB,KAAG,GAAG,GAAG,CAAC;AAA1B,IAA4B,KAAG,GAAG,GAAG,CAAC;AAAE,IAAI,KAAG,GAAG,WAAS;AAAnB,IAAsB,MAAI,GAAG,WAAS;AAAtC,IAAyC,KAAG,cAAc,GAAE;AAAA,EAAC,YAAY,GAAE;AAAC,UAAM,GAAE,KAAK,OAAK,GAAE,KAAK,mBAAiB,GAAE,KAAK,KAAK,KAAK,qBAAqB,EAAE,GAAE,KAAG,KAAK,KAAK,KAAK,gBAAgB,GAAE,KAAK,YAAU,IAAI,GAAG,MAAK,GAAG,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEC,KAAE,GAAE;AAAC,QAAI,IAAE,EAAC,IAAG,KAAK,mBAAkB;AAAE,WAAO,KAAK,KAAK,GAAE,GAAEA,KAAE,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,UAAU,WAAW;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAIA,MAAE,EAAE,IAAI;AAAE,WAAO,EAAE,GAAE,EAAC,UAAS,EAAE,IAAI,IAAEA,IAAC;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAI,IAAE,KAAK;AAAmB,QAAG,MAAI,UAAS;AAAC,UAAI,IAAEA;AAAE,WAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,aAAY,GAAE,OAAM,GAAE,OAAM,GAAE,cAAa,MAAK,UAAS,EAAC,CAAC;AAAE;AAAA,IAAM;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,IAAE,EAAE,gBAAgB,CAAC,GAAE,IAAE,KAAK,KAAK,QAAQ,CAAC,MAAI;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,CAAC,GAAE,KAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC,GAAEA,OAAG,QAAM,KAAK,KAAK,OAAO,IAAI,IAAI,WAAWA,IAAE,QAAOA,IAAE,YAAW,CAAC,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,WAAO,KAAK,SAAS,CAAC;AAAA,EAAC;AAAA,EAAC,SAAS,GAAEA,KAAE,GAAE;AAAC,QAAG,EAAC,cAAa,GAAE,OAAM,GAAE,OAAM,GAAE,aAAY,EAAC,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAG,MAAI;AAAS,cAAOA,OAAG,QAAMA,QAAI,OAAK,KAAG,QAAM,KAAG,EAAE,UAAQ,IAAE,EAAE,MAAMA,KAAE,CAAC;AAAE,IAAAA,MAAEA,OAAG,GAAE,IAAE,KAAG,EAAE,cAAc,CAAC;AAAE,QAAI,IAAE,EAAE,gBAAgB,CAAC,GAAE,IAAE,KAAK,KAAK,OAAO,MAAM,IAAEA,MAAE,GAAE,IAAE,IAAE,CAAC;AAAE,WAAO,IAAI,EAAE,QAAO,CAAC;AAAA,EAAC;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,KAAK,UAAU,IAAI,CAAC,GAAE;AAAC,UAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,UAAG,EAAE,YAAW,CAACA,OAAG,EAAE,WAAS;AAAE,eAAM;AAAG,WAAK,KAAK,MAAM,EAAE,YAAY,GAAE,KAAK,KAAK,KAAK,YAAY,EAAE,EAAE,GAAE,KAAK,UAAU,OAAO,CAAC;AAAA,IAAC;AAAC,WAAM;AAAA,EAAE;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,IAAE,KAAK,UAAU,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,IAAAA,OAAG,QAAMA,IAAE;AAAA,EAAU;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,gBAAgB,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,EAAY;AAAA,EAAC,UAAS;AAAC,SAAK,KAAK,KAAK,QAAQ,GAAE,aAAY,KAAK,QAAM,KAAK,KAAK,QAAQ,oBAAoB,GAAE,KAAK,OAAK;AAAA,EAAI;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,YAAW,MAAE;AAAA,EAAC;AAAA,EAAC,WAAW,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAI;AAAE,QAAG,KAAG;AAAK,UAAE,KAAK,MAAM,KAAG,OAAK,IAAE,MAAK,GAAEA,GAAC;AAAA,SAAM;AAAC,UAAI,IAAE,KAAK;AAAmB,UAAE,EAAC,IAAG,EAAC,GAAE,KAAK,UAAU,IAAI,GAAE,EAAC,IAAG,GAAE,cAAa,GAAE,OAAM,GAAE,OAAMA,KAAE,UAAS,EAAC,CAAC;AAAE,UAAI,IAAE,EAAE,cAAc,CAAC;AAAE,WAAK,KAAK,KAAK,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,WAAM,EAAC,QAAO,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,mBAAmB,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,EAAC,GAAE;AAAC,QAAI,IAAE,KAAK,KAAK,OAAO,QAAO,EAAC,cAAa,EAAC,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,YAAOA,KAAE;AAAA,MAAC,KAAI;AAAU,eAAO,IAAI,aAAa,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAQ,eAAO,IAAI,WAAW,GAAE,GAAE,CAAC;AAAA,MAAE,KAAI;AAAO,eAAO,IAAI,WAAW,GAAE,GAAE,CAAC;AAAA,MAAE;AAAQ,cAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAA,IAAC;AAAA,EAAC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,SAAM,CAAC,GAAEC,SAAK,EAAE,MAAMD,KAAE,EAAC,aAAY,cAAa,CAAC,EAAE,KAAK,OAAG;AAAC,MAAE,MAAI,EAAE,IAAI,EAAE,uCAAuCA,GAAC,GAAG,GAAE,EAAE,YAAY,EAAE,KAAK,OAAG;AAAC,kBAAY,YAAY,GAAE,CAAC,EAAE,KAAK,OAAG;AAAC,QAAAC,IAAE,EAAE,UAAS,EAAE,MAAM;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC,CAAC,GAAE,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAG,MAAI;AAAK,WAAO;AAAG,MAAI,IAAE;AAAyB,SAAOD,OAAG,IAAE,IAAE,yCAAuCA,QAAI,IAAE,gCAA+B,MAAI,QAAM,GAAG,CAAC,KAAG,OAAK,GAAG,CAAC,IAAEC,MAAE;AAAC;AAAC,eAAe,KAAI;AAAC,MAAG,CAACD,KAAE,CAAC,IAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,EAAE,SAAS,uBAAuB,GAAE,EAAE,EAAE,SAAS,8BAA8B,CAAC,CAAC;AAAE,SAAO,IAAI,QAAQ,CAACC,KAAE,MAAI;AAAC,QAAI,IAAE,CAAC;AAAE,MAAE,aAAW,CAAC,GAAE,MAAI;AAAC,UAAG,EAAE,SAAS,YAAY,GAAE;AAAC,YAAI,IAAE,GAAG,mBAAmB,QAAQ,OAAM,KAAK,GAAE,IAAE,IAAI,KAAK,CAAC,CAAC,GAAE,EAAC,MAAK,yBAAwB,CAAC;AAAE,eAAO,IAAI,gBAAgB,CAAC;AAAA,MAAC;AAAC,aAAO,EAAE,SAAS,OAAO,IAAE,GAAGD,KAAE,GAAE,MAAI,OAAK,KAAG,CAAC,IAAE,IAAE;AAAA,IAAC,GAAE,OAAK,EAAE,kBAAgB,IAAI,GAAGA,KAAE,GAAE,MAAI,OAAK,KAAG,EAAE,CAAC;AAAG,QAAI,IAAE;AAAG,MAAE,UAAQ,MAAI;AAAC,UAAG,KAAG;AAAG;AAAO,WAAG,MAAG,EAAE,EAAC,SAAQ,kMAAiM,CAAC;AAAA,IAAC;AAAE,QAAI;AAAE,SAAGA,OAAG,MAAI,QAAM,EAAE,sBAAoB,IAAI,KAAK,CAAC,yCAAuC,GAAG,SAAS,CAAC,GAAE,EAAC,MAAK,kBAAiB,CAAC,GAAE,IAAE,GAAG,CAAC,KAAG,IAAE,IAAI,CAAC,GAAE,EAAE,KAAK,OAAG;AAAC,UAAE,MAAG,KAAG;AAAG,UAAI,IAAE;AAAK,QAAE,OAAK,EAAC,MAAK,EAAE,MAAM,QAAO,MAAK,CAAC,CAAC,GAAE,sBAAqB,EAAE,MAAM,2BAA0B,MAAK,CAAC,QAAQ,CAAC,GAAE,iBAAgB,EAAE,MAAM,qBAAoB,UAAS,CAAC,CAAC,GAAE,gBAAe,EAAE,MAAM,mBAAkB,MAAK,CAAC,UAAS,UAAS,QAAQ,CAAC,GAAE,aAAY,EAAE,MAAM,gBAAe,GAAE,CAAC,QAAQ,CAAC,GAAE,SAAQ,EAAE,MAAM,WAAU,GAAE,CAAC,CAAC,EAAC,GAAEC,IAAE,EAAC,MAAK,EAAC,CAAC;AAAA,IAAC,CAAC,EAAE,MAAM,CAAC;AAAA,EAAC,CAAC;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,UAAO,GAAE;AAAA,IAAC,KAAI;AAAU,aAAO,IAAI,aAAaA,GAAC;AAAA,IAAE,KAAI;AAAQ,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE,KAAI;AAAO,aAAO,IAAI,WAAWA,GAAC;AAAA,IAAE;AAAQ,YAAM,IAAI,MAAM,iBAAiB,CAAC,EAAE;AAAA,EAAC;AAAC;AAAC,IAAI,MAAI,CAAC,0BAAyB,+BAA8B,sCAAsC;AAAtG,IAAwG,KAAG;AAA3G,IAAgH,KAAG;AAAnH,IAAwH,KAAG,CAAC;AAA5H,IAA8H,KAAG;AAAjI,IAAoI,KAAG;AAAG,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,MAAG,GAAG,mGAAmG,GAAE;AAAG,UAAM,IAAI,MAAM,gIAAgI;AAAE,OAAGA,KAAE,KAAG;AAAC;AAAC,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,MAAG;AAAG,UAAM,IAAI,MAAM,iIAAiI;AAAE,MAAG,OAAOA,OAAG;AAAS,SAAGA;AAAA,OAAM;AAAC,SAAGA;AAAE,QAAIC,MAAE,IAAI,OAAO,OAAG,GAAG,CAAC,KAAG,IAAI;AAAE,QAAGA,IAAE,SAAO;AAAE,YAAM,IAAI,MAAM,2DAA2DA,IAAE,KAAK,GAAG,CAAC,+JAA+J;AAAA,EAAC;AAAC,OAAG;AAAC;AAAC,IAAI,KAAG;AAAP,IAAU,KAAG;AAAG,SAAS,IAAID,KAAE;AAAC,OAAGA;AAAC;AAAC,SAAS,MAAK;AAAC,MAAG,OAAK;AAAG,UAAM,IAAI,MAAM,+BAA+B;AAAE,SAAO;AAAE;AAAC,IAAI,MAAI;AAAS,IAAI,MAAI;AAAE,GAAG,QAAO,YAAS;AAAC,MAAG,EAAC,MAAKA,IAAC,IAAE,MAAM,GAAG;AAAE,SAAO,IAAI,GAAGA,GAAC;AAAC,GAAE,GAAG;AAAE,IAAI,KAAG,EAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,EAAE;AAAE,GAAG,aAAa,sBAAqB,MAAI,IAAE;AAAE,GAAG,aAAa,8BAA6B,MAAI,EAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,IAAE;AAAE,GAAG,aAAa,4BAA2B,MAAI,KAAE;AAAE,GAAG,aAAa,qCAAoC,MAAI,GAAG;AAAE,GAAG,aAAa,2BAA0B,MAAI,KAAE;AAAE,GAAG,aAAa,kCAAiC,MAAI,IAAE;AAAE,GAAG,aAAa,iCAAgC,MAAI,KAAE;AAAE,GAAG,aAAa,sDAAqD,MAAI,EAAE;AAAE,GAAG,aAAa,sCAAqC,MAAI,KAAE;AAAE,GAAG,aAAa,uBAAsB,MAAI,EAAE;AAAE,GAAG,aAAa,8BAA6B,MAAI,KAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,UAAI,KAAK,SAAO,EAAE,QAAO,KAAK,eAAa,EAAE,cAAa,KAAK,qBAAmB,KAAK,sBAAsB;AAAA,EAAE;AAAA,EAAC,wBAAuB;AAAC,QAAG,KAAK,QAAQ,GAAE;AAAC,UAAG,KAAK,aAAa,WAAW,KAAK;AAAE,eAAO,OAAO,KAAK,aAAa,MAAM,KAAK,CAAC;AAAE,UAAG,KAAK,aAAa,WAAW,IAAI;AAAE,eAAO;AAAA,IAAE;AAAC,WAAO;AAAA,EAAC;AAAA,EAAC,UAAS;AAAC,WAAO,KAAK,WAAS;AAAA,EAAO;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,iBAAe,GAAE,KAAK,iBAAe,GAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,cAAY,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEC,KAAE,IAAE,OAAG,IAAE,MAAG;AAAC,QAAI,GAAE,IAAE,GAAG,GAAEA,GAAC;AAAE,WAAO,KAAG,KAAK,YAAY,IAAI,CAAC,KAAG,KAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,YAAY,IAAI,CAAC,EAAE,SAAO,KAAG,IAAE,KAAK,YAAY,IAAI,CAAC,EAAE,IAAI,GAAE,KAAK,qBAAmB,IAAE,KAAK,OAAO,aAAa,EAAC,MAAK,GAAE,OAAMA,KAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmB,OAAK,IAAE,KAAK,OAAO,aAAa,EAAC,MAAK,GAAE,OAAMA,KAAE,kBAAiB,EAAC,CAAC,GAAE,KAAK,qBAAmB,IAAG,KAAK,YAAY,IAAI,CAAC,KAAG,KAAK,YAAY,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,kBAAiB,KAAK,gBAAc,GAAE;AAAA,EAAC;AAAA,EAAC,cAAc,GAAEA,MAAE,MAAG;AAAC,QAAG,KAAK,YAAY,SAAO;AAAE;AAAO,QAAI,IAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,GAAG,GAAE,CAAC,GAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,0CAA0C;AAAE,MAAE,CAAC,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,EAAE,IAAI,GAAE,KAAK,kBAAiB,KAAK,gBAAc,GAAEA,OAAG,KAAK,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,qBAAmB,EAAE,QAAQ,GAAE,KAAK,qBAAmB;AAAA,EAAE;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,oBAAmB;AAAC,WAAO,KAAK;AAAA,EAAc;AAAA,EAAC,UAAS;AAAC,SAAK,YAAY,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,YAAY,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,cAAY,oBAAI,OAAI,KAAK,cAAY,oBAAI,OAAI,KAAK,iBAAe,GAAE,KAAK,iBAAe,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,GAAGA,GAAC,IAAI,CAAC;AAAE;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,SAAO,GAAE,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEC,KAAE,GAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAE,IAAEA,MAAE,GAAE,IAAE,GAAG,GAAEA,KAAE,GAAE,CAAC;AAAE,QAAG,KAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,gBAAc,GAAE,KAAK,mBAAkB,KAAK,aAAa,IAAI,CAAC,EAAE,SAAO,GAAE;AAAC,WAAK;AAAkB,UAAI,IAAE,KAAK,aAAa,IAAI,CAAC,EAAE,MAAM;AAAE,aAAO,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,IAAC;AAAC,SAAK,qBAAmB;AAAE,QAAI,IAAE,KAAK,OAAO,cAAc,EAAC,MAAK,CAAC,GAAEA,GAAC,GAAE,QAAO,GAAE,OAAM,EAAC,CAAC;AAAE,WAAO,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAE;AAAC,QAAG,KAAK,aAAa,SAAO;AAAE;AAAO,QAAIA,MAAE,EAAE,OAAM,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,OAAM,IAAE,GAAGA,KAAE,GAAE,GAAE,CAAC;AAAE,SAAK,aAAa,IAAI,CAAC,KAAG,KAAK,aAAa,IAAI,GAAE,CAAC,CAAC,GAAE,KAAK,aAAa,IAAI,CAAC,EAAE,KAAK,CAAC,GAAE,KAAK,mBAAkB,KAAK;AAAkB,QAAI,IAAE,KAAK,aAAa,IAAI,CAAC,GAAE,IAAE,EAAE,QAAQ,CAAC;AAAE,QAAG,IAAE;AAAE,YAAM,IAAI,MAAM,0EAA0E;AAAE,MAAE,OAAO,GAAE,CAAC;AAAE,QAAI,IAAE,GAAG,CAAC,GAAE,IAAEA,MAAE,IAAE;AAAE,SAAK,gBAAc;AAAA,EAAC;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK;AAAA,EAAe;AAAA,EAAC,UAAS;AAAC,SAAK,aAAa,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,aAAa,QAAQ,CAAC,GAAEA,QAAI;AAAC,QAAE,QAAQ,OAAG;AAAC,UAAE,QAAQ;AAAA,MAAC,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,eAAa,oBAAI,OAAI,KAAK,eAAa,oBAAI,OAAI,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,SAAM,GAAGD,GAAC,IAAI,CAAC,IAAIC,GAAC,IAAI,CAAC;AAAE;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI;AAAa,WAAO;AAAG,QAAM,IAAI,MAAM,GAAGA,GAAC,oBAAoB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAG,KAAK,IAAI,GAAGA,GAAC,IAAE;AAAE,UAAM,IAAI,MAAM,0DAA0D;AAAE,MAAIC,MAAED,IAAE,QAAO,IAAE,UAAS,IAAEA,IAAE,IAAI,OAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,IAAI,MAAMC,MAAE,CAAC;AAAE,IAAEA,MAAE,CAAC,IAAE,EAAEA,MAAE,CAAC;AAAE,WAAQ,IAAEA,MAAE,GAAE,KAAG,GAAE,EAAE;AAAE,MAAE,CAAC,IAAE,IAAI,EAAE,IAAE,CAAC,CAAC,MAAM,EAAE,IAAE,CAAC,CAAC;AAAI,SAAO;AAAC;AAAC,IAAI,KAAG,CAACD,KAAE,GAAEC,QAAIA,QAAI,UAAQ,aAAaD,GAAC,kBAAkB,CAAC,QAAM;AAAA;AAAA;AAAA;AAAA,4DAI72qB,CAAC;AAAA;AAAA,oDAETA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxC,IAAI;AAAA,CAAI,SAASA,KAAE;AAAC,EAAAA,IAAEA,IAAE,cAAY,CAAC,IAAE,eAAcA,IAAEA,IAAE,OAAK,CAAC,IAAE;AAAM,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,CAACA,KAAE,GAAEC,KAAE,GAAE,MAAI;AAAC,MAAI,IAAE,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAIA,KAAE,GAAE,CAAC,GAAE,IAAED,IAAE,mBAAmB,EAAC,MAAK,GAAE,OAAM,EAAE,YAAY,KAAI,CAAC,GAAE,IAAE,EAAE,EAAE,IAAI,qBAAqB;AAAE,MAAG,MAAI,IAAG;AAAC,QAAE,EAAE,YAAY;AAAE,QAAI,IAAE,EAAE,MAAM,GAAG;AAAE,KAAC,MAAI,SAAO,EAAE,KAAK,OAAG,EAAE,UAAU,YAAY,EAAE,SAAS,CAAC,CAAC,OAAK,QAAQ,MAAM,EAAE,SAAS,GAAE,QAAQ,MAAM,CAAC,GAAE,QAAQ,SAAS;AAAA,EAAE;AAAC,SAAO,IAAEA,IAAE,2BAA2B,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAM,EAAE,YAAY,MAAK,QAAO,OAAM,CAAC,IAAEA,IAAE,sBAAsB,EAAC,SAAQ,EAAC,QAAO,GAAE,YAAW,SAAQ,GAAE,OAAM,EAAE,YAAY,MAAK,QAAO,OAAM,CAAC;AAAC;AAAhjB,IAAkjB,KAAG,CAACA,KAAE,IAAE,UAAQ;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK;AAAE,aAAM,GAAG,CAAC;AAAA,IAAG,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI,KAAK;AAAE,aAAM,QAAQ,CAAC;AAAA,IAAI;AAAQ,YAAM,IAAI,MAAM,GAAGA,GAAC,cAAc,CAAC,oBAAoB;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGA,KAAE;AAAC,MAAGA,OAAG;AAAE,WAAM;AAAM,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,QAAI;AAAE,WAAM;AAAO,MAAGA,QAAI;AAAE,WAAM;AAAO,QAAM,MAAM,gBAAgBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,MAAGA,QAAI;AAAE,WAAM;AAAI,QAAM,MAAM,SAASA,GAAC,uBAAuB;AAAC;AAAC,SAAS,KAAKA,KAAE;AAAC,MAAI;AAAE,UAAOA,IAAE,QAAO;AAAA,IAAC,KAAK;AAAE,UAAE;AAAA;AAAA;AAErwC;AAAA,IAAM,KAAK;AAAE,UAAE;AAAA,kBACLA,IAAE,CAAC,CAAC;AAAA;AACd;AAAA,IAAM;AAAQ,YAAM,MAAM,aAAa;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC;AAAE,SAAOA,MAAE;AAAA,OACnF,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAWHD,MAAE,4BAA0B,SAAS;AAAA;AAAA,OAEzCC;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,SAAM;AAAA,6BACDA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC,KAAKA,IAAE,cAAc,CAAC,CAAC;AAAA;AAC5F;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,CAAC,GAAE,IAAEA,IAAE,cAAc,CAAC,IAAEA,IAAE,cAAc,CAAC,IAAEA,IAAE,cAAc,CAAC;AAAE,MAAGA,IAAE,kBAAgBA,IAAE,kBAAgBA,IAAE,kBAAgB,GAAE,EAAE,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAUlJ,GAAGA,GAAC,IAAE,8BAA4B;AAAA,qEACyB,CAAC;AAAA;AAAA,SAE7D;AAAA;AAAA,KAEJ,GAAEA,IAAE,gBAAc,MAAK;AAAC,QAAI,IAAEA,IAAE,iBAAe,GAAG,cAAY,gEAAgE,GAAG,EAAE,OAAMA,IAAE,eAAe,CAAC,OAAK,0DAA0D,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,eAAe,CAAC,MAAK,IAAE,EAAE,MAAM,WAAS,IAAE,cAAY;AAAM,MAAE,KAAK;AAAA;AAAA,8BAEpR,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMrB,CAAC;AAAA;AAAA,OAEJ;AAAE,QAAI,IAAE,GAAGA,GAAC;AAAE,WAAM,CAAC,IAAG,EAAE,KAAK;AAAA,CACrC,GAAE,GAAG,EAAE,KAAK,GAAEA,IAAE,YAAY,GAAE,GAAG,GAAEA,GAAC,CAAC,EAAE,KAAK;AAAA,CAC5C;AAAA,EAAC;AAAC,MAAI,GAAE,GAAE,IAAE;AAAgD,EAAAA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,GAAGD,IAAE,CAAC,EAAE,MAAM,MAAM;AAAE,SAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,MAAK,IAAEA,IAAE,CAAC,EAAE,MAAM,SAAO,GAAE,IAAE,GAAG,CAAC,GAAE,KAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC;AAAA,EAAI,CAAC;AAAE,MAAI,IAAE,GAAG,EAAE,MAAM,MAAM;AAAE,OAAG,cAAc,CAAC,MAAK,IAAE,EAAE,MAAM,SAAO,GAAE,IAAE,GAAG,CAAC,GAAE,KAAG;AAAA,4BACvU,CAAC,MAAKC,IAAE,SAAO,KAAG,iBAAgBA,IAAE,aAAW,KAAGA,IAAE,WAAU,KAAG,MAAK,IAAE,IAAI,CAAC,GAAE,EAAE,KAAK,CAAC,GAAEA,IAAE,SAAO,EAAE,KAAK;AAAA;AAAA,KAEhI,IAAE,EAAE,KAAK;AAAA,qEACuD,GAAG,EAAE,OAAMA,IAAE,eAAe,CAAC;AAAA,KAC7F,GAAEA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,KAAK;AAAA,2BACnB,IAAE,CAAC,wBAAwB,CAAC,WAAWA,IAAE,qBAAmB,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,mBAAmB,CAAC,CAAC,IAAE,GAAGD,IAAE,CAAC,EAAE,OAAMC,IAAE,eAAe,CAAC;AAAA,SACrJ;AAAA,EAAC,CAAC,GAAE,MAAI,MAAI,EAAE,KAAK;AAAA,2BACD,IAAEA,IAAE,cAAc,MAAM;AAAA,OAC5C;AAAE,MAAI,IAAE,IAAI,EAAE,OAAMA,IAAE,cAAc,GAAE,IAAE,CAAC,IAAG,EAAE,KAAK;AAAA,CACzD,IAAE,KAAI,GAAG,EAAE,KAAK,GAAE,GAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAAE,EAAAA,IAAE,UAAQ,EAAE,KAAK,IAAI,EAAE,OAAM,EAAE,OAAMA,IAAE,eAAe,CAAC,GAAEA,IAAE,cAAc,QAAQ,CAAC,GAAE,MAAI;AAAC,MAAE,KAAK,GAAG,GAAGD,IAAE,CAAC,EAAE,OAAM,CAAC,CAAC,EAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,IAAI,GAAE,EAAE,OAAMC,IAAE,qBAAmBA,IAAE,mBAAmB,CAAC,IAAEA,IAAE,iBAAgBA,IAAE,eAAe,EAAE,WAAS,EAAE,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,CACpT;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAKA,IAAE,YAAY,CAAC;AAAE,MAAI,IAAE,GAAGA,GAAC;AAAE,SAAO,EAAE,KAAK,GAAG,GAAEA,GAAC,CAAC,GAAE,EAAE,KAAK;AAAA,CAC9E;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE;AAAU,MAAGA,IAAE,gBAAc;AAAK,WAAO;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,MAAE,KAAK,EAAE,KAAK,GAAE,EAAE,KAAK,EAAE,KAAK;AAAA,EAAC,CAAC,GAAE,EAAE,KAAKC,IAAE,KAAK,GAAE,EAAE,KAAKA,IAAE,KAAK;AAAE,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,iBAAiB,EAAE,OAAMA,IAAE,KAAK,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,YAAY,EAAE,OAAMA,IAAE,KAAK,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAE,IAAE,GAAGD,GAAC,IAAE,iBAAe;AAAG,SAAO,KAAG,OAAKA,IAAE,gBAAcA,IAAE,cAAc,KAAK,GAAG,IAAE,MAAI,EAAE,IAAI,OAAG,EAAE,MAAM,EAAE,KAAK,GAAG,IAAE,EAAE,KAAK,GAAG,IAAEA,IAAE,cAAc,KAAK,GAAG,IAAE,IAAE,IAAE,GAAE;AAAC;AAAC,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAkDld,MAAI;AAAA;AAAA;AAAA;AAAA;AAIJ,SAAS,GAAGA,KAAE,IAAE,IAAG;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,MAAI,KAAG,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,oBAAkB,sBAAqB,IAAE,MAAI,KAAG,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,iBAAe;AAAkB,MAAGC,OAAG;AAAE,WAAM,MAAM,CAAC;AAAyC,MAAI,IAAE,EAAE,eAAeD,GAAC,GAAE,IAAE,GAAGC,GAAC,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAEA,KAAE;AAAI,MAAE,KAAK,IAAI,CAAC,EAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAM,UAAU,CAAC;AAAA,kCACxV,CAAC,oCAAoC,CAAC;AAAA;AAAA;AAEjE,MAAI;AAAE,SAAO,IAAE,wBAAsB,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,OAAO,EAAE,CAAC,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC,CAAC,IAAG,IAAE,MAAI,EAAE,SAAO,IAAE,OAAO,EAAE,IAAE,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC,KAAG,qBAAqB,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC;AAAG,WAAM,GAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,EAAE,KAAK,EAAE,GAAE;AAAA,SACxQ,CAAC,oBAAoB,CAAC;AAAA,QACvB,CAAC;AAAA,eACM,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAE5B;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE,MAAK,IAAEA,IAAE,MAAM,QAAO,IAAE,GAAG,CAAC,GAAE,IAAE,QAAMC,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAE,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI;AAAE,MAAG,IAAE;AAAE,WAAM;AAAA,WAC5L,CAAC,SAAS,GAAG,CAAC,CAAC;AAAA,iBACT,GAAG,CAAC,CAAC,IAAIA,GAAC;AAAA;AAAA;AAErB,MAAI,IAAE,YAAYA,IAAE,OAAO,CAAC,EAAE,YAAY,IAAEA,IAAE,MAAM,CAAC,CAAC,SAAQ,IAAE,GAAG,CAAC;AAAI,SAAO,MAAI,MAAI,IAAE,OAAM;AAAA,SAC5F,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAAA,eACb,GAAG,CAAC,CAAC,IAAIA,GAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC;AAAA,UAC1D,CAAC,IAAI,MAAI,IAAE,KAAG,MAAM,CAAC,EAAE;AAAA;AAAA;AAE7B;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAK,IAAE,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,QAAM,IAAE,YAAW,IAAEA,IAAE,MAAM,QAAO,IAAE,EAAE,QAAO,IAAE,GAAG,CAAC;AAAE,MAAG,EAAE,YAAYA,IAAE,OAAM,CAAC,KAAG;AAAE,WAAM;AAAA,SACpK,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA,eAC/B,GAAGA,GAAC,CAAC,IAAI,CAAC;AAAA;AAAA;AAAA,SAGhB,CAAC,mBAAmB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA,eAC5B,GAAGA,GAAC,CAAC,IAAI,CAAC,IAAI,IAAE,IAAE,qCAAmC,QAAQ,GAAGA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAE3F,MAAI,IAAE,EAAE,iBAAiBD,IAAE,OAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE;AAAG,MAAG,MAAI;AAAE,WAAM;AAAA,SAC3D,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA,kBAC5B,CAAC;AAAA;AAAA;AAAA,SAGV,CAAC,mBAAmB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA,kBACzB,CAAC;AAAA;AAAA;AAEf,MAAE,KAAG,EAAE,UAAQ,IAAE,IAAE,gBAAc,IAAE,EAAE,IAAI,OAAG,UAAU,GAAG,IAAE,CAAC,CAAC,OAAO,EAAE,KAAK;AAAA,CAC9E;AAAE,MAAI,IAAE;AAAG,MAAG,IAAE,KAAG,IAAE;AAAE,QAAE;AAAA,WAAiB,IAAE,GAAE;AAAC,QAAI,IAAE,GAAG,CAAC,GAAE,IAAED,IAAE,MAAM,IAAI,CAAC,GAAE,MAAI,UAAU,GAAG,IAAE,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI;AAAE,QAAE,GAAG,CAAC,IAAI,CAAC;AAAA,EAAG;AAAM,QAAE;AAAS,MAAI,IAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,IAAE,EAAE,MAAM,CAAC,CAAC,SAAQ,IAAE,GAAG,CAAC;AAAI,SAAM;AAAA,OACvN,CAAC,+BAA+B,GAAGC,GAAC,CAAC;AAAA;AAAA,MAEtC,CAAC;AAAA,aACM,GAAGA,GAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAIA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAAA,OAGxE,CAAC,qBAAqB,CAAC,QAAQ,GAAGA,GAAC,CAAC;AAAA;AAAA,MAErC,CAAC;AAAA,aACM,GAAGA,GAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAIA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAE9E;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAI,IAAE,IAAID,KAAEC,GAAC;AAAE,SAAOD,IAAE,MAAM,UAAQ,EAAE,WAAS,KAAG,IAAIA,KAAE,GAAEC,KAAE,CAAC,IAAG;AAAC;AAAC,SAAS,IAAID,KAAE,GAAE;AAAC,MAAG,EAAC,GAAEC,KAAE,GAAE,IAAE,CAAC,GAAE,GAAE,IAAE,CAAC,EAAC,IAAE,GAAE,IAAED,IAAE,QAAO,IAAEC,IAAE,SAAO,EAAE,SAAO,EAAE;AAAO,MAAG,MAAI;AAAE,WAAM;AAAG,MAAGA,IAAE,WAAS;AAAE,WAAM,2BAA2B,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAInP,MAAI,IAAE,IAAG,IAAE,CAACA,KAAE,GAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,QAAI,IAAE,EAAE,CAAC;AAAE,QAAG,EAAE,WAAS;AAAE,UAAG,EAAE,WAAS;AAAE,aAAG,QAAQ,EAAE,CAAC,CAAC,mBAAmB,CAAC;AAAA,WAAU;AAAC,YAAI,IAAE,GAAG,GAAE,mBAAmB;AAAE,aAAG,YAAY,CAAC,mBAAmB,CAAC;AAAM,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,eAAG,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,KAAI,MAAI,EAAE,SAAO,IAAE,KAAG,QAAQ,EAAE,IAAE,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAI,KAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,MAAG;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,MAAE,KAAK,IAAI,CAAC,EAAE;AAAE,MAAI,IAAE,GAAG,CAAC,GAAE,IAAE,2BAA2B,CAAC;AAAA,IACpe,CAAC;AAAA;AACH,SAAO,EAAE,WAAS,IAAE,KAAG,UAAU,CAAC,WAAS,KAAG,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,QAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE;AAAG,UAAOA,KAAE;AAAA,IAAC,KAAK;AAAA,IAAE,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAI7H;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAIhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAKhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB;AAAA,IAAM,KAAK;AAAE,WAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAShB;AAAA,IAAM;AAAQ,QAAE,OAAO,OAAG,MAAI,eAAeA,GAAC,SAAS;AAAE;AAAA,EAAK;AAAC,SAAO;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAOA,IAAE,SAAS,CAAC,MAAI,KAAGA,IAAE,SAAS,CAAC,MAAI;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,GAAE;AAAC,MAAGA,QAAI;AAAU,WAAO,GAAG,GAAE,KAAK;AAAE,MAAGA,QAAI,WAASA,QAAI;AAAO,WAAO,GAAG,GAAE,KAAK;AAAE,QAAM,IAAI,MAAM,QAAQA,GAAC,oBAAoB;AAAC;AAAC,SAAS,IAAIA,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,QAAO,IAAE,GAAG,GAAEC,GAAC,GAAE,IAAE,gDAAgD,GAAGA,GAAC,CAAC;AAAA,4BACzW,CAAC;AAAA;AAAA;AAAA,sDAGyB,GAAGA,KAAE,KAAK,CAAC;AAAA,4BACrC,CAAC;AAAA;AAAA;AAEvB,MAAG,KAAG,GAAE;AAAC,QAAI,IAAE,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,IAAE,GAAG,CAAC;AAAE,SAAG;AAAA,6BAC9C,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,aAAa,GAAGA,GAAC,CAAC;AAAA,mDAC7B,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,oCAChCA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA,gCAEtB,EAAE,IAAI,OAAG,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,aAAa,GAAGA,KAAE,KAAK,CAAC;AAAA,mDACtC,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,uCAC7BA,QAAI,IAAE,KAAG,MAAMA,GAAC,EAAE;AAAA;AAAA;AAAA,EAEpD;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE;AAAwB,EAAAA,MAAEA,IAAE,QAAQ,GAAE,OAAG,gBAAc,CAAC;AAAE,MAAIC,MAAE;AAAwB,SAAOD,MAAEA,IAAE,QAAQC,KAAE,CAAC,GAAE,GAAE,MAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,GAAED;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,SAAM,EAAEA,IAAE,eAAe,eAAe,GAAG,KAAGA,IAAE,eAAe,EAAE,WAAS,KAAGA,IAAE,eAAe,eAAe,GAAG,KAAGA,IAAE,eAAe,EAAE,WAAS;AAAE;AAAC,IAAI,KAAG,CAAC;AAAE,GAAG,IAAG,EAAC,oBAAmB,MAAI,IAAG,mBAAkB,MAAI,IAAG,kBAAiB,MAAI,IAAG,iBAAgB,MAAI,GAAE,+BAA8B,MAAI,IAAG,+BAA8B,MAAI,IAAG,+BAA8B,MAAI,IAAG,oBAAmB,MAAI,GAAE,mBAAkB,MAAI,IAAG,yBAAwB,MAAI,IAAG,CAAC;AAAE,IAAI,KAAG,CAAAA,QAAG;AAAC,MAAI,IAAE;AAAE,WAAQC,MAAE,GAAEA,MAAED,IAAE,QAAOC;AAAI,SAAGD,IAAEC,GAAC;AAAE,SAAO;AAAC;AAAE,SAAS,IAAID,KAAE,GAAE;AAAC,MAAGA,IAAE,WAAS,EAAE;AAAO,UAAM,IAAI,MAAM,+BAA+BA,IAAE,MAAM,+BAA+B,EAAE,MAAM,4BAA4B;AAAE,SAAO,EAAE,MAAM,CAACC,KAAE,MAAIA,MAAED,IAAE,CAAC,MAAI,CAAC;AAAC;AAAC,SAAS,EAAEA,KAAE,GAAEC,MAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE;AAAC,MAAG,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,KAAK,KAAK,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,GAAED,IAAE,IAAE,KAAK,KAAK,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,KAAGC,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,IAAE,CAAC;AAAE,SAAM,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG;AAAC,MAAI,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,SAAO,MAAID,OAAG,MAAI,EAAE,CAAC,IAAE,IAAG,KAAG,MAAIC,OAAG,OAAK,EAAE,CAAC,IAAE,KAAI,EAAC,eAAc,GAAE,mBAAkB,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGA;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,KAAG,IAAE,CAAC,GAAE,IAAG,CAAC,IAAE,KAAG,IAAE,CAAC,IAAG,GAAE,CAAC,IAAE,CAAC,IAAG,IAAG,CAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG;AAAC,MAAGA;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,GAAGD,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE,GAAGA,IAAE,EAAE,IAAI,OAAG,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,KAAG,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAG,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,SAAS,EAAEA,KAAE;AAAC,SAAM,EAAC,GAAEA,IAAE,IAAI,CAAC,GAAEC,QAAIA,GAAC,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAGA,QAAI,aAAWA,QAAI,WAASA,QAAI,UAAQA,QAAI;AAAS,WAAO;AAAE,MAAGA,QAAI;AAAY,WAAO;AAAE,QAAM,IAAI,MAAM,iBAAiBA,GAAC,EAAE;AAAC;AAAC,SAAS,KAAI;AAAC,SAAM,CAAC,EAAE,OAAO,cAAY,eAAa,WAAW,aAAW,WAAW,UAAU;AAAI;AAAC,SAAS,GAAGA,KAAE,GAAE;AAAC,QAAM,QAAQA,GAAC,MAAIA,MAAE,CAACA,GAAC,IAAGA,IAAE,QAAQ,CAAAC,QAAG;AAAC,IAAAA,OAAG,QAAM,EAAE,OAAOA,IAAE,UAAQ,aAAY,MAAI,GAAG,CAAC,4DAA4D;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,+BAA6B,CAAC,IAAE,gCAA+BA,IAAEA,IAAE,sBAAoB,CAAC,IAAE,uBAAsBA,IAAEA,IAAE,YAAU,CAAC,IAAE;AAAW,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,MAAI,EAAE,EAAE,UAAU,mCAAmC;AAAzD,IAA2D,MAAI,CAACA,KAAE,MAAI;AAAC,MAAIC,MAAED,IAAE,OAAO,kCAAiC,IAAE,EAAE,gBAAe,IAAE,EAAE;AAAS,MAAG,EAAE,MAAM,OAAG,KAAGC,GAAC;AAAE,WAAO;AAAE,IAAE,OAAO,EAAE,CAAC,IAAEA,OAAG,EAAE,MAAI,UAAQ,EAAE,MAAI,QAAO,MAAI,0DAA0D;AAAE,MAAI,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AAAE,SAAO,IAAEA,OAAG,IAAE,KAAK,KAAK,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,GAAE,EAAE,OAAO,KAAGA,KAAE,MAAI,6CAA6C,GAAE,CAAC,GAAE,GAAE,CAAC,KAAG,CAAC,GAAE,GAAE,CAAC;AAAC;AAA3b,IAA6b,KAAG,MAAMD,YAAU,GAAE;AAAA,EAAC,aAAY;AAAC,WAAOA,IAAE;AAAA,EAAY;AAAA,EAAC,YAAY,GAAEC,KAAE;AAAC,QAAG,MAAM,GAAE,KAAK,uBAAqB,oBAAI,WAAQ,KAAK,sBAAoB,GAAE,KAAK,WAAS,OAAG,KAAK,iBAAe,GAAE,KAAK,4BAA0B,CAAC,GAAE,KAAK,qBAAmB,MAAK,KAAK,WAAS,MAAK,KAAK,gBAAc,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,eAAa,GAAE,KAAK,oBAAkB,OAAG,KAAK,0BAAwB,OAAG,CAAC,GAAG;AAAE,YAAM,IAAI,MAAM,wCAAwC;AAAE,SAAK,gBAAc,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,QAAM,EAAE,OAAM,KAAK,iBAAe,MAAK,KAAK,qBAAmB,MAAK,KAAK,cAAY,IAAI,GAAGA,GAAC,GAAE,KAAK,wBAAsB,KAAK,OAAO,SAAS,IAAI,iBAAiB,GAAE,KAAK,gCAA8B,KAAK,YAAY,sBAAoB,KAAG,KAAG,GAAE,KAAK,gBAAc,IAAI,GAAG,KAAK,MAAM,GAAE,KAAK,iBAAe,IAAI,GAAG,KAAK,MAAM,GAAE,KAAK,YAAU,IAAI,GAAG,MAAK,GAAG,CAAC,GAAE,EAAE,EAAE,QAAQ,yBAAyB,MAAI,KAAK,cAAY,SAAS,cAAc,QAAQ,GAAE,KAAK,YAAY,QAAM,GAAE,KAAK,YAAY,SAAO,GAAE,KAAK,eAAa,KAAK,YAAY,WAAW,QAAQ,GAAE,KAAK,aAAa,UAAU,EAAC,QAAO,GAAE,QAAO,aAAY,CAAC,GAAE,SAAS,KAAK,YAAY,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,iBAAgB;AAAC,WAAO;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG;AAAC,QAAG,CAAC,KAAK,UAAU,IAAI,CAAC;AAAE,aAAM;AAAG,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAOA,MAAE,EAAE,WAAS,IAAE,EAAE,YAAW,EAAE,WAAS,IAAE,SAAI,EAAE,sBAAoB,SAAO,KAAK,YAAY,EAAE,mBAAmB,KAAK,MAAM,GAAE,KAAK,YAAY,EAAE,mBAAmB,KAAK,MAAM,IAAG,KAAK,qBAAqB,IAAI,CAAC,KAAG,KAAK,0BAA0B,KAAK,CAAC,GAAE,SAAK,KAAK,gBAAgB,CAAC,GAAE,KAAK,UAAU,OAAO,CAAC,GAAE;AAAA,EAAI;AAAA,EAAC,SAAQ;AAAC,WAAM,EAAC,eAAc,KAAK,cAAc,cAAa,wBAAuB,KAAK,cAAc,mBAAkB,YAAW,MAAE;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAG,EAAE,CAACA,OAAG,CAACA,IAAE,WAAU;AAAC,UAAGA,IAAE,UAAS;AAAC,QAAAA,IAAE,WAAS;AAAK;AAAA,MAAM;AAAC,MAAAA,IAAE,oBAAoB,YAAU,KAAK,cAAc,cAAcA,IAAE,QAAQ,IAAEA,IAAE,oBAAoB,cAAY,KAAK,eAAe,eAAeA,IAAE,QAAQ,GAAEA,IAAE,WAAS;AAAA,IAAI;AAAA,EAAC;AAAA,EAAC,SAAS,GAAE;AAAC,WAAO,KAAK,UAAU,IAAI,CAAC,IAAE,KAAK,UAAU,IAAI,CAAC,EAAE,WAAS;AAAA,EAAC;AAAA,EAAC,OAAO,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,IAAAA,IAAE;AAAA,EAAU;AAAA,EAAC,OAAO,GAAE;AAAC,QAAG,KAAK,UAAU,IAAI,CAAC,GAAE;AAAC,UAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,MAAAA,IAAE;AAAA,IAAU;AAAA,EAAC;AAAA,EAAC,MAAM,GAAEA,KAAE,GAAE;AAAC,QAAG,MAAI,eAAa,KAAG;AAAK,YAAM,IAAI,MAAM,uEAAuE;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,WAAO,KAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,GAAE,UAAS,EAAC,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,KAAK,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,uEAAuE;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAOA,KAAE,UAAS,EAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,SAAK,MAAM,OAAO,CAAC,KAAK,eAAe,OAAO,CAAC,CAAC,GAAE,KAAK,iBAAe,MAAK,KAAK,sBAAoB,GAAE,KAAK,uBAAqB,oBAAI,WAAQ,KAAK,0BAA0B,QAAQ,OAAG;AAAC,WAAK,gBAAgB,CAAC,GAAE,KAAK,UAAU,OAAO,CAAC;AAAA,IAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,OAAG,KAAK,cAAc,cAAc,CAAC,CAAC,GAAE,KAAK,uBAAuB,QAAQ,OAAG,KAAK,cAAc,cAAc,GAAE,KAAE,CAAC,GAAE,KAAK,4BAA0B,CAAC,GAAE,KAAK,yBAAuB,CAAC,GAAE,KAAK,yBAAuB,CAAC;AAAA,EAAC;AAAA,EAAC,4BAA2B;AAAC,SAAK,mBAAiB,KAAK,iBAAe,KAAK,OAAO,qBAAqB;AAAA,EAAE;AAAA,EAAC,wBAAuB;AAAC,SAAK,uBAAqB,KAAK,mBAAmB,IAAI,GAAE,KAAK,qBAAmB;AAAA,EAAK;AAAA,EAAC,MAAM,8BAA6B;AAAC,QAAI;AAAE,QAAG;AAAC,UAAE,MAAM,QAAQ,IAAI,OAAO,OAAO,KAAK,aAAa,CAAC;AAAA,IAAC,SAAOA,KAAE;AAAC,YAAM,IAAI,MAAMA,IAAE,OAAO;AAAA,IAAC;AAAC,WAAO,KAAK,KAAK,aAAa,EAAE,IAAI,CAACA,KAAE,MAAI;AAAC,WAAK,cAAcA,GAAC,IAAE,EAAE,CAAC;AAAA,IAAC,CAAC;AAAA,EAAC;AAAA,EAAC,MAAM,cAAc,GAAE;AAAC,QAAG,EAAE,EAAE,QAAQ,4BAA4B;AAAE,aAAO,QAAQ,KAAK,oIAAoI,GAAE;AAAK,QAAIA,MAAE,EAAE,MAAK,IAAE,KAAK,cAAc,cAAcA,KAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,YAAY,GAAE,MAAM,EAAE,SAAS,WAAW,IAAI;AAAE,QAAI,IAAE,EAAE,eAAe,EAAE,MAAM,CAAC;AAAE,WAAO,EAAE,MAAM,GAAE,KAAG,QAAM,KAAK,cAAc,cAAc,CAAC,GAAE,EAAE,EAAE,QAAQ,yBAAyB,MAAI,EAAE,OAAO,KAAK,iBAAe,QAAO,MAAI,wCAAwC,GAAE,KAAK,aAAa,kBAAkB,IAAG;AAAA,EAAC;AAAA,EAAC,qBAAqB,GAAEA,KAAE;AAAC,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC;AAAE,WAAO,EAAE,SAAOA,KAAE,EAAE;AAAA,EAAM;AAAA,EAAC,SAAS,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,oBAAmB,EAAC,IAAEA;AAAE,QAAG,KAAG,QAAMA,IAAE,UAAQ;AAAS,aAAO;AAAE,QAAGA,IAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,KAAK,SAAS,EAAE,KAAK,MAAM,GAAE,IAAE,EAAE,mCAAmC,EAAE,uBAAuB,GAAE,CAAC,EAAE,QAAO,SAAS;AAAE,aAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,IAAC;AAAC,SAAK,sBAAoB,KAAK,oBAAkB,MAAG,QAAQ,KAAK,oIAAoI;AAAG,QAAI,IAAE,CAAC,UAAS,eAAe,GAAE,IAAEA,IAAE,UAAS,IAAE,EAAE;AAAK,MAAE,OAAO,IAAE,MAAI,GAAE,MAAI,4EAA4E;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAI,YAAY,CAAC,GAAE,IAAE,KAAI,IAAE,KAAI,IAAE,EAAE,IAAI,OAAG,IAAI,gBAAgB,GAAE,CAAC,CAAC,GAAE,IAAE,IAAI,gBAAgB,GAAE,CAAC;AAAE,SAAK,sBAAsB,GAAE,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,WAAW,QAAQ;AAAE,aAAO,EAAE,UAAU,EAAC,QAAO,KAAK,QAAO,QAAO,cAAa,OAAM,gBAAgB,UAAS,WAAU,EAAE,CAAC,EAAC,CAAC,GAAE,EAAE,kBAAkB;AAAA,IAAC,CAAC,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,aAAK,0BAA0B,GAAE,KAAK,eAAe,oBAAoB,EAAC,QAAO,GAAE,aAAY,GAAE,QAAO,EAAC,GAAE,EAAC,SAAQ,EAAC,GAAE,EAAC,OAAM,GAAE,QAAO,EAAC,CAAC,GAAE,KAAK,YAAY;AAAE,YAAI,IAAE,EAAE,WAAW,MAAK,EAAC,oBAAmB,KAAE,CAAC;AAAE,UAAE,UAAU,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,UAAU,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,YAAI,IAAE,EAAE,aAAa,GAAE,GAAE,GAAE,CAAC,EAAE,MAAK,IAAE,EAAE,CAAC,GAAE,IAAE,IAAI,kBAAkB,GAAE,GAAE,IAAE,IAAE,CAAC;AAAE,iBAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAG;AAAE,cAAG,MAAI;AAAgB,cAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC;AAAA,eAAM;AAAC,gBAAI,IAAE,EAAE,CAAC;AAAE,cAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE,EAAE,IAAE,CAAC,GAAE,EAAE,IAAE,CAAC,IAAE;AAAA,UAAC;AAAA,MAAC,GAAE,IAAE,KAAK,MAAM,KAAG,IAAE,EAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE;AAAE,eAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,GAAE,GAAE,CAAC,GAAE,KAAG,IAAE,IAAE;AAAE,UAAI,IAAE,KAAG,IAAE;AAAG,UAAE,KAAK,MAAM,IAAE,CAAC,GAAE,IAAE,MAAI,EAAE,GAAE,GAAE,CAAC,GAAE,KAAG,KAAG,IAAE,KAAI,IAAE,IAAE,GAAE,IAAE,KAAG,EAAE,GAAE,GAAE,CAAC;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,EAAE,mCAAmC,GAAEA,IAAE,KAAK;AAAE,WAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,QAAG,CAAC,KAAK,UAAU,IAAI,CAAC;AAAE,YAAM,IAAI,MAAM,UAAU,CAAC,sBAAsB;AAAE,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,EAAC,IAAEA;AAAE,QAAG,KAAG;AAAK,aAAO;AAAE,QAAI;AAAE,QAAGA,IAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,MAAM,QAAQ,IAAI,CAAC,KAAK,KAAKA,IAAE,mBAAmB,KAAK,MAAM,GAAE,KAAK,KAAKA,IAAE,mBAAmB,KAAK,MAAM,CAAC,CAAC,GAAE,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC;AAAE,UAAE,EAAE,uBAAuB,GAAE,CAAC;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,MAAM,KAAK,cAAcA,IAAE,QAAQ;AAAE,UAAE,EAAE,mCAAmC,GAAEA,IAAE,KAAK;AAAA,IAAC;AAAC,WAAO,KAAK,qBAAqB,GAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,KAAK,cAAc,cAAcA,KAAE,CAAC;AAAE,WAAO,KAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,YAAY,GAAE;AAAA,EAAC;AAAA,EAAC,wBAAwB,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,EAAE;AAAO,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,qCAAqC;AAAE,QAAI,IAAE,EAAC,IAAG,KAAK,WAAW,EAAC;AAAE,SAAK,UAAU,IAAI,GAAE,EAAC,OAAM,GAAE,OAAMA,KAAE,QAAO,MAAK,UAAS,GAAE,UAAS,EAAE,SAAQ,CAAC;AAAE,QAAI,IAAE,KAAK,UAAU,IAAI,CAAC,GAAE,IAAE,GAAG,EAAE,KAAK,IAAE,EAAE,cAAc,EAAE,KAAK;AAAE,QAAG,EAAE,OAAO,OAAK;AAAE,YAAM,IAAI,MAAM,kBAAkB,EAAE,OAAO,IAAI,iCAAiC,CAAC,IAAI;AAAE,SAAI,EAAE,OAAO,SAAO,eAAe,UAAQ,eAAe,gBAAc,eAAe,UAAQ,eAAe;AAAU,YAAM,IAAI,MAAM,kFAAkF;AAAE,WAAO,EAAE,aAAW,SAAK,IAAE,KAAK,WAAW,CAAC,IAAG,EAAE,WAAS,GAAE,GAAG,EAAE,qBAAqB,GAAEA,KAAE,GAAE,IAAI;AAAA,EAAC;AAAA,EAAC,UAAU,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC,GAAE,EAAC,QAAO,GAAE,OAAM,GAAE,OAAM,GAAE,UAAS,EAAC,IAAEA;AAAE,QAAG,MAAI;AAAY,YAAM,IAAI,MAAM,sDAAsD;AAAE,QAAG,KAAG;AAAK,YAAM,KAAG,OAAK,IAAI,MAAM,gCAAgC,IAAE,IAAI,MAAM,iCAAiC;AAAE,QAAI,IAAE,GAAE,IAAE,EAAE,MAAK,IAAE,EAAE,OAAM,IAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,SAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY;AAAE,QAAI,IAAE,KAAK,eAAe,GAAE,CAAC,GAAE,IAAE,GAAG,EAAE,yBAAyB,CAAC,GAAE,IAAE,KAAK,UAAU,IAAI,EAAE,MAAM;AAAE,WAAO,EAAE,WAAS,GAAE,EAAC,WAAU,GAAE,QAAO,EAAC;AAAA,EAAC;AAAA,EAAC,WAAW,GAAE;AAAC,QAAIA,MAAE,KAAK,SAAS,EAAE,MAAM;AAAE,QAAG,EAAE,UAAQ;AAAS,UAAG;AAAC,YAAI,IAAEA,IAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC;AAAE,eAAO,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC;AAAA,MAAC,SAAO,GAAE;AAAC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MAAC;AAAC,WAAO,GAAG,EAAE,OAAM,EAAE,OAAMA,GAAC;AAAA,EAAC;AAAA,EAAC,MAAM,KAAK,GAAE;AAAC,KAAC,KAAK,yBAAuB,CAAC,KAAK,4BAA0B,QAAQ,KAAK,mOAAmO,GAAE,KAAK,0BAAwB;AAAI,QAAIA,MAAE,KAAK,cAAa,IAAE,CAAC,GAAE,IAAE;AAAG,SAAK,sBAAoB,QAAM,KAAK,qBAAmB,GAAE,IAAE,QAAI,KAAK,aAAa,KAAK,CAAC,GAAE,KAAK,eAAa,GAAE,EAAE;AAAE,QAAI,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,KAAK,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI,GAAE,IAAE,EAAE,QAAQ,KAAK,aAAa,IAAI,OAAG,EAAE,IAAI,CAAC,EAAE,OAAO,OAAG,KAAG,IAAI;AAAE,SAAK,eAAaA,KAAE,MAAI,KAAK,qBAAmB;AAAM,QAAI,IAAE,EAAC,cAAa,KAAK,cAAa,gBAAe,KAAK,gBAAe,UAAS,MAAK,QAAO,KAAI,GAAE,IAAE,MAAM,QAAQ,IAAI,CAAC;AAAE,WAAO,EAAE,WAAS,EAAE,IAAI,CAAC,GAAE,EAAE,sBAAoB,MAAI,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,MAAK,EAAE,CAAC,GAAE,IAAG,EAAC,EAAE,EAAE,IAAI,OAAG,GAAG,EAAE,IAAI,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,GAAE,KAAK,eAAa,GAAE,KAAK,iBAAe,GAAE;AAAA,EAAC;AAAA,EAAC,eAAe,GAAEA,KAAE,GAAE;AAAC,WAAOA,QAAI,YAAU,KAAG,QAAM,EAAE,SAAO,KAAG,EAAE,SAAS,EAAE,CAAC,CAAC,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAG,EAAC,QAAO,KAAK,MAAM,GAAE,GAAEA,GAAC,GAAE,OAAM,GAAE,OAAMA,IAAC;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAE;AAAC,QAAG,CAAC;AAAE,aAAO;AAAK,QAAI,IAAE,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE;AAAS,WAAO,aAAa,YAAU,EAAC,QAAO,EAAC,IAAE,aAAa,aAAW,EAAE,WAAW,IAAE;AAAA,EAAC;AAAA,EAAC,YAAY,GAAE;AAAC,QAAIA,MAAE,KAAK,UAAU,IAAI,CAAC;AAAE,QAAGA,IAAE,YAAU;AAAK;AAAO,QAAI,IAAE,GAAGA,IAAE,KAAK,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,GAAE,IAAE,eAAe,UAAQ,eAAe,WAAS,eAAe;AAAS,QAAGA,IAAE,QAAO;AAAC,UAAG,IAAE,KAAK,cAAc,cAAc,GAAE,GAAE,IAAE,GAAE,EAAE,aAAW,YAAW;AAAC,YAAI,IAAE,KAAK,cAAc,cAAc,GAAE,eAAe,YAAU,eAAe,UAAS,MAAG,KAAE,GAAE,IAAE,EAAE,eAAe;AAAE,QAAAA,IAAE,UAAQ,WAASA,IAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAIA,IAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAIA,IAAE,MAAM,GAAE,EAAE,MAAM,GAAE,KAAK,0BAA0B,GAAE,KAAK,sBAAsB,GAAE,KAAK,eAAe,mBAAmB,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,KAAK,uBAAuB,KAAK,CAAC;AAAA,MAAC,OAAK;AAAC,YAAI,IAAE,EAAE,eAAe;AAAE,QAAAA,IAAE,UAAQ,WAASA,IAAE,UAAQ,SAAO,IAAI,WAAW,CAAC,EAAE,IAAIA,IAAE,MAAM,IAAE,IAAI,aAAa,CAAC,EAAE,IAAIA,IAAE,MAAM,GAAE,EAAE,MAAM;AAAA,MAAC;AAAC,MAAAA,IAAE,SAAO;AAAA,IAAI;AAAM,UAAE,KAAK,cAAc,cAAc,GAAE,CAAC;AAAE,IAAAA,IAAE,WAAS;AAAA,EAAC;AAAA,EAAC,aAAa,GAAE;AAAC,QAAIA,MAAE,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE;AAAE,MAAE,QAAQ,OAAG;AAAC,QAAE,KAAK,WAAS,MAAI,EAAE,OAAK,CAAC,CAAC;AAAG,UAAI;AAAE,cAAO,EAAE,KAAK,QAAO;AAAA,QAAC,KAAK;AAAE,cAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAE;AAAE;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM,KAAK;AAAE,cAAE;AAAG;AAAA,QAAM;AAAQ,YAAE,OAAO,OAAG,MAAI,eAAe,EAAE,KAAK,MAAM,SAAS;AAAA,MAAC;AAAC,OAAC,MAAI,KAAG,MAAI,OAAK,IAAE,KAAI,IAAE,MAAI,IAAE,IAAGA,MAAE,KAAK,KAAKA,MAAE,CAAC,IAAE,GAAE,IAAE,EAAE,KAAK,QAAO,EAAE,KAAKA,GAAC,GAAEA,OAAG,EAAE,KAAK,SAAO;AAAA,IAAC,CAAC,GAAEA,MAAE,KAAK,KAAKA,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,IAAI,YAAYA,GAAC;AAAE,MAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,UAAI,IAAE,EAAE,CAAC;AAAE,QAAE,SAAO,UAAQ,IAAI,WAAW,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAE,EAAE,SAAO,WAAS,IAAI,YAAY,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAE,IAAI,aAAa,GAAE,GAAE,EAAE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI;AAAA,IAAC,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,cAAcA,KAAE,eAAe,WAAS,eAAe,OAAO;AAAE,WAAO,KAAK,MAAM,YAAY,GAAE,GAAE,GAAE,GAAEA,GAAC,GAAE,KAAK,uBAAuB,KAAK,CAAC,GAAE,EAAC,QAAO,GAAE,MAAKA,KAAE,QAAO,EAAC;AAAA,EAAC;AAAA,EAAC,iBAAiB,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,QAAG,MAAI,IAAE,KAAK,eAAe,EAAE,aAAY,CAAC,IAAG,EAAE,cAAc,EAAE,KAAK,MAAI;AAAE,aAAO,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,SAAO,EAAE,uBAAuB,EAAE,OAAM,CAAC,GAAE;AAAE,SAAK,YAAY,EAAE,MAAM,GAAE,EAAE,WAAS,IAAI,KAAK,QAAO,CAAC;AAAE,QAAI,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,UAAG,EAAE,UAAQ;AAAY,cAAM,IAAI,MAAM,iIAAiI;AAAE,aAAO,KAAK,YAAY,EAAE,MAAM,GAAE,EAAC,OAAM,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,OAAM,OAAM,EAAE,OAAM,MAAK,EAAE,cAAc,CAAC,EAAC;AAAA,IAAC,CAAC;AAAE,MAAE,YAAU,GAAG,GAAE,GAAE,CAAC;AAAE,QAAI,IAAE,EAAE,EAAE,QAAQ,4BAA4B;AAAE,WAAO,EAAE,aAAa,KAAK,kBAAgB,KAAK,cAAc,EAAE,SAAS,IAAE,GAAG,KAAK,QAAO,GAAE,GAAE,GAAE,CAAC,IAAG,EAAE,WAAS,KAAK,cAAc,EAAE,SAAS,GAAE,KAAG,KAAK,gBAAgB,GAAE,GAAEA,KAAE,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,gBAAgB,GAAEA,KAAE,GAAE,GAAE;AAAC,QAAG,EAAE,oBAAoB;AAAQ,YAAM,IAAI,MAAM,iFAAiF;AAAE,QAAI,IAAE,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE;AAAQ,QAAG,EAAE,gBAAc,MAAK;AAAC,QAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,GAAG,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAOA,GAAC,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,UAAI,IAAE;AAAQ,QAAE,IAAI,OAAG;AAAC,UAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAE,YAAI,IAAE,EAAE,eAAe,CAAC;AAAE,UAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAA,MAAC,CAAC;AAAA,IAAC,OAAK;AAAC,UAAI,IAAE,EAAE,eAAeA,IAAE,KAAK;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,EAAC,CAAC;AAAA,IAAC;AAAC,QAAG,EAAE,MAAK;AAAC,UAAI,IAAE,EAAE,cAAc,EAAE,WAAW;AAAE,QAAE,KAAK,EAAC,MAAK,GAAE,MAAK,CAAC,EAAE,kBAAgB,IAAE,EAAE,kBAAgB,CAAC,EAAC,CAAC;AAAA,IAAC;AAAC,UAAI,IAAE,CAAC,GAAG,GAAE,GAAG,CAAC;AAAG,QAAI,IAAE,CAAC,KAAK,gBAAgBA,GAAC,GAAE,GAAG,EAAE,IAAI,OAAG,KAAK,gBAAgB,CAAC,CAAC,GAAE,KAAK,aAAa,CAAC,CAAC;AAAE,MAAE,QAAQ,OAAG;AAAC,WAAK,qBAAqB,IAAI,EAAE,MAAM;AAAA,IAAC,CAAC,GAAE,KAAK,qBAAqB,IAAIA,IAAE,MAAM;AAAE,QAAI,IAAE,KAAK,OAAO,gBAAgB,EAAC,QAAO,EAAE,SAAS,mBAAmB,CAAC,GAAE,SAAQ,EAAE,IAAI,CAAC,GAAE,OAAK,EAAC,SAAQ,GAAE,UAAS,EAAC,EAAE,EAAC,CAAC,GAAE,IAAE,KAAK,gBAAc;AAAK,SAAK,0BAA0B;AAAE,QAAI,IAAE,CAAC;AAAE,SAAG,KAAK,yBAAuB,KAAK,sBAAsB,GAAE,KAAK,YAAU,SAAO,KAAK,WAAS,KAAK,OAAO,eAAe,EAAC,MAAK,aAAY,OAAM,KAAK,cAAa,CAAC,IAAG,EAAE,kBAAgB,EAAC,UAAS,KAAK,UAAS,2BAA0B,GAAE,qBAAoB,EAAC,GAAE,KAAK,qBAAmB,KAAK,eAAe,iBAAiB,CAAC,KAAG,KAAK,uBAAqB,KAAK,qBAAmB,KAAK,eAAe,iBAAiB,CAAC,IAAG,KAAK,mBAAmB,YAAY,EAAE,QAAQ,GAAE,KAAK,mBAAmB,aAAa,GAAE,CAAC,GAAE,KAAK,mBAAmB,mBAAmB,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,GAAE,EAAE,SAAS,CAAC,CAAC,GAAE,KAAK,wBAAuB,KAAG,EAAE,EAAE,IAAI,mCAAmC,KAAG,KAAK,uBAAqB,EAAE,iBAAe,GAAG,UAAQ,KAAK,sBAAsB,GAAE,IAAE,KAAK,aAAa,KAAK,EAAC,MAAK,EAAE,YAAY,MAAK,OAAM,KAAK,aAAa,EAAC,CAAC,IAAE,KAAK,YAAY;AAAA,EAAE;AAAA,EAAC,MAAM,eAAc;AAAC,QAAG,CAAC,KAAK;AAAsB,aAAO;AAAE,SAAK,sBAAoB,SAAO,KAAK,qBAAmB,KAAK,cAAc,cAAc,KAAK,gBAAc,GAAE,eAAe,WAAS,eAAe,WAAS,eAAe,aAAa,IAAG,KAAK,eAAe,gBAAgB,KAAK,UAAS,GAAE,KAAK,eAAc,KAAK,oBAAmB,CAAC;AAAE,QAAI,IAAE,KAAK,cAAc,cAAc,KAAK,gBAAc,GAAE,eAAe,WAAS,eAAe,QAAQ;AAAE,SAAK,eAAe,mBAAmB,KAAK,oBAAmB,GAAE,GAAE,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,YAAY,GAAE,MAAM,EAAE,SAAS,WAAW,IAAI;AAAE,QAAIA,MAAE,IAAI,eAAe,EAAE,eAAe,CAAC,GAAE,IAAE,OAAOA,IAAE,CAAC,IAAEA,IAAE,CAAC,CAAC,IAAE;AAAI,WAAO,EAAE,MAAM,GAAE,KAAK,cAAc,cAAc,CAAC,GAAE;AAAA,EAAC;AAAA,EAAC,mBAAmB,GAAEA,MAAE,KAAI;AAAC,WAAO,EAAE,EAAE,QAAQ,oBAAoB,KAAG,EAAE,MAAM,OAAG,KAAK,UAAU,IAAI,EAAE,MAAM,EAAE,YAAU,QAAM,EAAE,cAAc,EAAE,KAAK,IAAEA,GAAC;AAAA,EAAC;AAAA,EAAC,aAAY;AAAC,WAAO,KAAK,UAAU,WAAW,IAAE,KAAK,0BAA0B;AAAA,EAAM;AAAA,EAAC,UAAS;AAAC,SAAK,aAAW,KAAK,YAAU,QAAM,KAAK,SAAS,QAAQ,GAAE,KAAK,cAAc,QAAQ,GAAE,KAAK,eAAe,QAAQ,GAAE,KAAK,WAAS;AAAA,EAAG;AAAC;AAAE,GAAG,aAAW;AAAE,GAAG,KAAG,GAAG,UAAS,YAAS;AAAC,MAAID,MAAE,EAAC,iBAAgB,EAAE,EAAE,IAAI,0BAA0B,IAAE,cAAY,mBAAkB,GAAE,IAAE,MAAM,UAAU,IAAI,eAAeA,GAAC,GAAEC,MAAE,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,SAAS,IAAI,iBAAiB,KAAG,EAAE,KAAK,iBAAiB,GAAE,EAAE,SAAS,IAAI,oBAAoB,KAAG,EAAE,KAAK,CAAC,oBAAoB,CAAC,GAAEA,IAAE,mBAAiB;AAAE,MAAI,IAAE,EAAE;AAAO,EAAAA,IAAE,iBAAe,EAAC,gCAA+B,EAAE,gCAA+B,kCAAiC,EAAE,kCAAiC,6BAA4B,EAAE,6BAA4B,eAAc,EAAE,eAAc,0BAAyB,EAAE,0BAAyB,mCAAkC,EAAE,kCAAiC;AAAE,MAAI,IAAE,MAAM,EAAE,cAAcA,GAAC,GAAE,IAAE,MAAM,EAAE,mBAAmB;AAAE,SAAO,IAAI,GAAG,GAAE,CAAC;AAAC,GAAE,CAAC;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,wBAAsB,CAAC,IAAE,yBAAwBA,IAAEA,IAAE,wBAAsB,CAAC,IAAE,yBAAwBA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,YAAU,CAAC,IAAE,aAAYA,IAAEA,IAAE,UAAQ,CAAC,IAAE,WAAUA,IAAEA,IAAE,gBAAc,CAAC,IAAE,iBAAgBA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,qBAAmB,EAAE,IAAE,sBAAqBA,IAAEA,IAAE,MAAI,EAAE,IAAE;AAAK,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,MAAI;AAAR,IAAkC,MAAI;AAAtC,IAAsE,MAAI;AAA1E,IAA4H,MAAI;AAAhI,IAAkL,MAAI;AAAtL,IAAgN,MAAI;AAApN,IAA6Q,MAAI;AAAA;AAAA;AAAA;AAAA;AAAjR,IAI/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAJ22lB,IAU/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAV22lB,IAc/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAd22lB,IAkB/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAlB22lB,IAsB/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAtB22lB,IA0B/2lB,MAAI;AA1B22lB,IA0Bv0lB,MAAI;AAAA;AA1Bm0lB,IA2B70lB,MAAI;AA3By0lB,IA2BrylB,MAAI;AAAA;AA3BiylB,IA4B7zlB,MAAI;AA5ByzlB,IA4B3xlB,MAAI;AA5BuxlB,IA4BzvlB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AA5BqvlB,IAiC/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjC22lB,IAgD/2lB,MAAI;AAhD22lB,IAgDj1lB,MAAI;AAAA;AAAA;AAAA;AAhD60lB,IAmD/2lB,MAAI;AAAA;AAAA;AAAA;AAnD22lB,IAsD/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtD22lB,IA6D/2lB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA7D22lB,IAkF/2lB,MAAI;AAlF22lB,IAkF/zlB,MAAI;AAAA;AAAA;AAAA;AAlF2zlB,IAqF/2lB,MAAI;AArF22lB,IAqFr0lB,MAAI;AAA0B,SAAS,GAAGA,KAAE,GAAE;AAAC,MAAIC;AAAE,KAAE;AAAC,YAAOD,KAAE;AAAA,MAAC,KAAK,GAAG;AAAM,QAAAC,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAU,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM,KAAK,GAAG;AAAI,QAAAA,MAAE,IAAE,MAAI;AAAI;AAAA,MAAM;AAAQ;AAAA,IAAQ;AAAC,QAAI,GAAE,GAAE;AAAE,WAAO,KAAG,IAAE,aAAY,IAAE,aAAY,IAAE,iBAAe,IAAE,SAAQ,IAAE,OAAM,IAAE,SAAQ;AAAA,qBACjX,CAAC;AAAA,0CACoB,CAAC;AAAA,qBACtB,CAAC;AAAA,0CACoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMjCA,GAAC;AAAA;AAAA,0BAEe,CAAC;AAAA,cACb,CAAC;AAAA;AAAA;AAAA,EAEV,SAAO;AAAI,UAAOD,KAAE;AAAA,IAAC,KAAK,GAAG;AAAI,MAAAC,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAsB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAU,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAQ,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAc,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAK,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAW,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAY,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAW,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAM,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,GAAG;AAAmB,MAAAA,MAAE;AAAI;AAAA,IAAM,KAAK,GAAG;AAAI,MAAAA,MAAE;AAAI;AAAA,IAAM;AAAA,EAAQ;AAAC,SAAM;AAAA,MAChjBA,GAAC;AAAA;AAAA;AAEJ;AAAC,IAAI;AAAA,CAAG,SAASD,KAAE;AAAC,EAAAA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,QAAM,CAAC,IAAE,SAAQA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,CAAC,IAAE,OAAMA,IAAEA,IAAE,OAAK,CAAC,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,cAAY,EAAE,IAAE,eAAcA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,YAAU,EAAE,IAAE,aAAYA,IAAEA,IAAE,aAAW,EAAE,IAAE,cAAaA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,QAAM,EAAE,IAAE,SAAQA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,UAAQ,EAAE,IAAE,WAAUA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,WAAS,EAAE,IAAE,YAAWA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,SAAO,EAAE,IAAE,UAASA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,MAAI,EAAE,IAAE,OAAMA,IAAEA,IAAE,OAAK,EAAE,IAAE,QAAOA,IAAEA,IAAE,SAAO,EAAE,IAAE;AAAQ,GAAG,MAAI,IAAE,CAAC,EAAE;AAAE,IAAI,MAAI;AAAR,IAAyB,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAA7B,IAK55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AALw5B,IAU55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAVw5B,IAe55B,MAAI;AAfw5B,IAer4B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAfi4B,IAoB55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AApBw5B,IA+B55B,MAAI;AA/Bw5B,IA+Bt4B,MAAI;AA/Bk4B,IA+Bj3B,MAAI;AAAA;AAAA;AAAA;AA/B62B,IAkC55B,MAAI;AAlCw5B,IAkCj4B,MAAI;AAlC63B,IAkCv0B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlCm0B,IAiD55B,MAAI;AAAA;AAAA;AAAA;AAAA,YAIM,EAAE,KAAK;AAAA,aACN,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA,aACR,EAAE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA1Dy4B,IAgE55B,MAAI;AAhEw5B,IAgEv4B,MAAI;AAhEm4B,IAgEh3B,MAAI;AAhE42B,IAgEt0B,MAAI;AAhEk0B,IAgE1yB,MAAI;AAhEsyB,IAgE9wB,MAAI;AAhE0wB,IAgE9vB,MAAI;AAAA;AAhE0vB,IAiE54B,MAAI;AAAA;AAAA;AAAA;AAjEw4B,IAoE55B,MAAI;AApEw5B,IAoE73B,MAAI;AApEy3B,IAoE52B,MAAI;AApEw2B,IAoEhzB,MAAI;AAAA;AAAA;AAAA;AApE4yB,IAuE55B,MAAI;AAvEw5B,IAuEt4B,MAAI;AAvEk4B,IAuEh2B,MAAI;AAvE41B,IAuE/zB,MAAI;AAvE2zB,IAuE1uB,MAAI;AAAA;AAAA;AAvEsuB,IAyE55B,MAAI;AAzEw5B,IAyEr4B,MAAI;AAzEi4B,IAyEx2B,MAAI;AAAA;AAAA,aAE7C,EAAE,UAAU;AAAA;AAAA,aAEZ,EAAE,eAAe;AAAA;AAAA;AA7Eg4B,IA+E55B,MAAI;AA/Ew5B,IA+El3B,MAAI;AA/E82B,IA+E51B,MAAI;AA/Ew1B,IA+Ev0B,MAAI;AAAA;AAAA;AAAA;AA/Em0B,IAkF55B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAlFw5B,IAiG55B,MAAI;AAjGw5B,IAiGt4B,MAAI;AAjGk4B,IAiGl3B,MAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAjG82B,IAuG55B,MAAI;AAvGw5B,IAuGv4B,MAAI;AAAA;AAAA;AAAA;AAvGm4B,IA0G55B,MAAI;AAAwB,SAAS,GAAGA,KAAE,GAAE;AAAC,UAAOA,KAAE;AAAA,IAAC,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAU,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAY,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAU,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAW,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO,IAAE,MAAI;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAM,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAQ,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAS,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAI,aAAO;AAAA,IAAI,KAAK,EAAE;AAAK,aAAO;AAAA,IAAI,KAAK,EAAE;AAAO,aAAO;AAAA,IAAI;AAAQ,YAAM,IAAI,MAAM,cAAcA,GAAC,sBAAsB;AAAA,EAAC;AAAC;AAAC,SAAS,GAAGA,KAAE,IAAE,OAAGC,MAAE,OAAG,IAAE,GAAE;AAAC,MAAGD,QAAI;AAAK,WAAM;AAAG,MAAI,IAAE;AAAG,MAAGA,QAAI;AAAS,QAAE,GAAG,EAAE,MAAM;AAAA,WAAUA,QAAI;AAAO,QAAE,GAAG,EAAE,MAAKC,GAAC;AAAA,WAAUD,QAAI;AAAM,QAAE,GAAG,EAAE,KAAIC,GAAC;AAAA,WAAUD,QAAI;AAAQ,QAAE,GAAG,EAAE,OAAMC,GAAC;AAAA,WAAUD,QAAI;AAAQ,QAAE,GAAG,GAAG,OAAMC,GAAC;AAAA,WAAUD,QAAI;AAAU,QAAE,GAAG,EAAE,SAAQC,GAAC;AAAA,WAAUD,QAAI;AAAY,QAAE,GAAG,EAAE,WAAUC,GAAC;AAAA;AAAO,UAAM,IAAI,MAAM,cAAcD,GAAC,mDAAmD;AAAE,MAAI,IAAE,GAAGC,MAAE,IAAE,CAAC,GAAE,IAAE;AAAG,SAAO,IAAE,IAAE;AAAA,0BAChgD,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAAA;AAAA,UAEjD,CAAC;AAAA,WACF,IAAE;AAAA,0BACe,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAAA,UACjD,CAAC;AAAA,UACF;AAAC;AAAC,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM;AAAA,QAC1BA,MAAE,mDAAiD,EAAE;AAAA,QACrD,IAAE,uCAAqC,EAAE;AAAA;AAC1C;AAAC,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,IAAE,OAAOD,OAAG,MAAI,KAAG,CAACA,KAAE,MAAI,cAAcA,GAAC,0CAA0C,CAAC,EAAE;AAAE,MAAI,IAAE;AAAA,QAClIA,MAAE,mCAAiC,gCAAgC;AAAA;AAAA,OAErE,IAAE,IAAE,mCAAiC;AAAiC,SAAM;AAAA,mDAC/B,GAAG,CAAC,CAAC;AAAA,kBACtC,GAAG,CAAC,CAAC;AAAA,MACjBC,OAAG,IAAE,IAAE;AAAA,MACPD,MAAE,4DAA0D,0DAA0D;AAAA;AAAA,QAEpH,CAAC;AAAA;AAAA,KAEJ;AAAA;AAAA;AAAA;AAAA,mDAI8C,GAAG,CAAC,CAAC;AAAA,kBACtC,GAAG,CAAC,CAAC;AAAA,MACjB,CAAC;AAAA;AAAA;AAAA;AAGJ;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG,IAAE,GAAE;AAAC,SAAM;AAAA,IAC9C,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC,CAAC;AAAA,yDACsC,GAAG,CAAC,CAAC;AAAA,MACxD,KAAG,IAAE,KAAG,2DAA2D;AAAA;AAAA;AAAA;AAAA,QAIjE,GAAGD,KAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAIZ;AAAC,IAAI,MAAI,CAACA,KAAE,MAAIA,MAAE;AAAA;AAAA;AAAA,wCAGmB,CAAC;AAAA,YAC/B;AAAA;AAAA;AAAA,gCAGsB,CAAC;AAAA;AAP7B,IAQM,MAAI,CAACA,KAAE,GAAEC,KAAE,MAAI;AAAC,MAAGD;AAAE,WAAM;AAAA,4BACT,CAAC;AAAA;AAAA;AAAA,8BAGCC,GAAC;AAAA;AAAA;AAAA;AAGtB;AAAC,QAAI,IAAE,IAAG,IAAE;AAAG,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,WAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,eAAc,KAAG,uBAAuB,CAAC,uBAAuB,CAAC;AAAe,WAAM;AAAA,4BAClJ,IAAE,CAAC;AAAA,UACrB,CAAC;AAAA,8BACmBA,GAAC;AAAA;AAAA,YAEnB,CAAC;AAAA;AAAA;AAAA,EAEL;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,MAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG;AAAC,MAAI,IAAE,EAAE,CAAC,IAAED,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,IAAEC,MAAE,IAAE,GAAE,IAAEA,MAAE,IAAE,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC;AAAE,SAAO,EAAE,QAAQC,OAAG,MAAI,KAAGD,IAAE,CAAC,MAAI,KAAG,CAACC,QAAI,MAAI,KAAG,MAAI,OAAK,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,KAAGD,IAAE,CAAC,MAAI,GAAE,MAAI,iBAAiBC,GAAC,8BAA8B,CAAC,yBAAyBD,IAAE,CAAC,CAAC;AAAA,wCACtQ,CAAC;AAAA,mBACtB,CAAC,yCAAyC,EAAE,CAAC,CAAC,eAAe,CAAC,0CAA0C,EAAE,CAAC,CAAC,kBAAkBA,IAAE,CAAC,CAAC,aAAa,GAAE;AAAA,4CACxH,CAAC,UAAU,IAAE,CAAC,MAAM,CAAC;AAAA,oDACb,IAAEA,IAAE,CAAC,CAAC,MAAM,CAAC;AAAA;AAAA,IAE7D,EAAE,CAAC;AAAA;AAAA,+BAEwB,CAAC;AAAA;AAAA;AAAA,wCAGQ,CAAC;AAAA,wCACD,CAAC;AAAA,kBACvB,IAAE,MAAI,iBAAiB;AAAA,mBACtB,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,mBAC1C,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,gDACb,CAAC;AAAA;AAAA,qBAE5B,IAAE,GAAG,KAAK,KAAK,IAAE,CAAC,CAAC,KAAG,6BAA6B,CAAC,MAAM;AAAA,mBAC5D,IAAE,qBAAqB,CAAC,KAAG,GAAG;AAAA;AAAA,gCAEjB,CAAC;AAAA;AAAA;AAAA,gCAGD,CAAC;AAAA;AAAA;AAAA,4CAGW,CAAC;AAAA;AAAA;AAAA,cAG/B,IAAIC,KAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,4CAIsB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,4BAKjB,CAAC;AAAA;AAAA;AAAA;AAAA,UAInB,IAAIA,KAAE,GAAE,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,wCAIkB,CAAC;AAAA;AAAA;AAAA;AAGrC;AAAC,IAAI,KAAG,CAAAD,QAAGA,MAAE;AAAA;AAAA;AAAA;AAAA,YAIP;AAAA;AAAA;AAAA;AAAA;AAJL,IAQK,MAAI,CAAAA,QAAGA,MAAE,kDAAgD;AAAgD,SAAS,GAAGA,KAAE,GAAEC,MAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,IAAG,IAAE,OAAG,IAAE,OAAG;AAAC,MAAI,IAAED,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAEC,MAAE,IAAE,GAAE,IAAEA,MAAE,IAAE;AAAE,IAAE,OAAO,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,KAAG,IAAE,EAAE,CAAC,MAAI,GAAE,MAAI,cAAc,CAAC,yCAAyC,EAAE,CAAC,CAAC,gBAAgB,CAAC,yCAAyC,EAAE,CAAC,CAAC,eAAe,CAAC,yCAAyC,EAAE,CAAC,CAAC,EAAE;AAAE,MAAI,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,EAAE,CAAC,GAAE,IAAED,IAAE,CAAC,GAAE,IAAEA,IAAE,CAAC,GAAE,IAAE,IAAE;AAAA;AAAA;AAAA,kDAGxb,CAAC;AAAA,kDACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,mDAKA,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,qDAC9B,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,cACvE,GAAGC,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA,mDAIgC,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA,yDAC1B,CAAC,2BAA2B,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAM7D,CAAC;AAAA;AAAA;AAAA;AAAA,mCAIM,CAAC;AAAA,8BACN,CAAC;AAAA,wCACS,CAAC;AAAA,6DACoB,EAAE,CAAC,CAAC;AAAA;AAAA,8CAEnB,CAAC;AAAA,4BACnBA,MAAE,oCAAoC,EAAE,CAAC,CAAC,OAAK,iCAAiC,EAAE,CAAC,CAAC,OAAO;AAAA,gDACvE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAQP,CAAC;AAAA,4DACiB,EAAE,CAAC,CAAC;AAAA,4CACpB,CAAC;AAAA,8DACiB,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UAI1D;AAAA,mCAC2B,CAAC;AAAA,mCACD,CAAC;AAAA;AAAA,sCAEE,CAAC;AAAA,sCACD,CAAC;AAAA,8CACO,CAAC;AAAA;AAAA,oCAEX,CAAC;AAAA,oCACD,CAAC;AAAA,oCACD,CAAC;AAAA;AAAA;AAAA;AAAA,wCAIG,CAAC;AAAA,0CACC,CAAC;AAAA;AAAA;AAAA,UAGjC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,wCAKyB,CAAC;AAAA,0CACC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQnB,CAAC;AAAA;AAAA;AAAA;AAAA,+BAIM,CAAC;AAAA,0BACN,CAAC;AAAA,oCACS,CAAC;AAAA;AAAA;AAAA;AAAA,0CAIK,CAAC;AAAA,UACjC,IAAIA,GAAC,CAAC;AAAA,4CAC4B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAUP,CAAC;AAAA,wCACC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAKrC,SAAM;AAAA,gDACsC,CAAC,MAAM,CAAC;AAAA,gDACR,CAAC,MAAM,CAAC;AAAA;AAAA,MAElD,EAAE,CAAC;AAAA,oBACW,IAAE,MAAI,iBAAiB;AAAA,qBACtB,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,qBAC1C,KAAG,CAAC,IAAE,UAAQ,4BAA4B;AAAA,uBACxC,IAAE,GAAG,KAAK,KAAK,IAAE,CAAC,CAAC,KAAG,6BAA6B,CAAC,MAAM;AAAA,qBAC5D,IAAE,qBAAqB,CAAC,KAAG,GAAG;AAAA;AAAA,mCAEhB,CAAC,MAAM,CAAC;AAAA;AAAA;AAAA,0CAGD,CAAC;AAAA,4CACC,CAAC;AAAA;AAAA;AAAA;AAAA,QAIrC,CAAC;AAAA;AAAA;AAEN;AAAC,IAAI,MAAI,CAAAD,QAAGA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA,MAKb;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,SAAS,IAAIA,KAAE,IAAE,OAAG;AAAC,IAAE,OAAOA,IAAE,CAAC,MAAI,KAAGA,IAAE,CAAC,MAAI,GAAE,MAAI,iDAAiDA,GAAC,GAAG;AAAE,MAAIC,MAAED,IAAE,CAAC,IAAE;AAAE,SAAM;AAAA,gDACnFA,IAAE,CAAC,CAAC;AAAA;AAAA,MAE9C,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,iDAKwCC,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAUzBA,GAAC;AAAA,uCACa,IAAI,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,8BAIfA,MAAE,CAAC;AAAA,2BACNA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAezB;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC;AAAE,QAAI,IAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC;AAAE,QAAG,KAAK,UAAQ,IAAE,MAAI,KAAG,CAAC,KAAGA,IAAE,CAAC,IAAE,MAAI,KAAG,MAAIA,IAAE,CAAC,IAAE,MAAI,KAAG,CAAC,GAAE,KAAK,kBAAgB,KAAK,SAAO,IAAE,GAAE,KAAK,YAAUA,IAAE,CAAC,MAAI,KAAG,CAAC,GAAE,CAAC,KAAK,UAAQ,KAAK;AAAU,WAAK,oBAAkB,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAE,GAAGA,IAAE,CAAC,GAAE,GAAEA,IAAE,CAAC,GAAE,CAAC;AAAE,WAAK,gBAAc,EAAE,eAAc,KAAK,oBAAkB,EAAE;AAAA,IAAiB;AAAC,SAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB;AAAE,QAAI,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,4BAA0B,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,CAAC,KAAK,WAAU,KAAK,WAAU,KAAK,QAAQ,IAAE,KAAK,YAAYA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAE,CAAC,GAAE,KAAK,YAAU,gBAAgB,KAAK,iBAAiB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,SAAS,IAAI,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,KAAK,SAAS,IAAI,KAAK,yBAAyB;AAAA,EAAE;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAI,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC;AAAE,KAAC,KAAK,UAAQ,KAAK,YAAU,KAAK,YAAU,KAAK,cAAc,CAAC,IAAE,IAAE,KAAK,YAAU;AAAE,QAAI,IAAE,IAAE,MAAI,GAAE,IAAEA,MAAE,MAAI,GAAE,IAAE,IAAE,KAAK,cAAY;AAAE,WAAM,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC37C,GAAG,KAAK,YAAW,KAAK,2BAA0B,KAAK,MAAM,CAAC;AAAA,QAC9D,GAAG,KAAK,SAAQ,KAAK,YAAW,OAAG,KAAK,YAAW,KAAK,WAAU,KAAK,WAAU,KAAK,UAAS,KAAK,SAAO,IAAE,CAAC,CAAC;AAAA,QAC/G,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,KAAK,WAAU,OAAG,MAAK,IAAE,IAAE,KAAK,YAAU,IAAI,KAAK,eAAc,KAAK,UAAU,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,KAAK,WAAU,OAAG,MAAK,KAAK,2BAA0B,IAAE,CAAC;AAAA;AAAA,EACpR;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,SAAM;AAAA,4CACcA,GAAC;AAAA,MACvC,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yDASgDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAQ5BA,MAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc9B;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,MAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa;AAAE,QAAI,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,aAAWA,KAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,YAAU,gBAAgB,KAAK,UAAU,IAAIA,GAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC7lB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,QAClD,GAAG,KAAK,SAAQ,KAAK,YAAW,KAAK,YAAW,KAAK,UAAU,CAAC;AAAA,QAChE,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC;AAAA;AAAA,EAC7B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAEA,IAAE,CAAC,GAAEC,MAAED,IAAE,CAAC,GAAE,IAAE,IAAEC,MAAE,IAAEA;AAAE,SAAM;AAAA,8CACZ,CAAC,MAAM,CAAC;AAAA,8CACRA,GAAC,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQlD,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAUwC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAQhB,CAAC;AAAA,gCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAYC,CAAC;AAAA,kCACD,CAAC;AAAA;AAAA,4BAEP,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ1B;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,OAAG,IAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,CAAC,KAAK,KAAK,EAAE,CAAC,IAAE,KAAK,cAAc,CAAC,CAAC,GAAE,KAAK,KAAK,EAAE,CAAC,IAAE,KAAK,cAAc,CAAC,CAAC,GAAE,EAAE,CAAC,CAAC;AAAE,QAAI,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,MAAM;AAAE,QAAI,IAAE,KAAG;AAAK,SAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,YAAU,yBAAyB,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACpoB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,QAClD,GAAG,KAAK,SAAQ,KAAK,YAAW,KAAK,YAAW,KAAK,UAAU,CAAC;AAAA,QAChE,IAAI,KAAK,aAAa,CAAC;AAAA;AAAA,EAC1B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qDAAoD,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,kBAAgB,KAAI,EAAE,OAAO,EAAE,CAAC,MAAI,GAAE,MAAI,8CAA8C,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC;AAAE,QAAI,KAAG,KAAG,KAAK,YAAY,CAAC,IAAE,MAAI,KAAG,CAAC,KAAGA,MAAE,MAAI,MAAI,KAAK,YAAY,CAAC,IAAE,MAAI;AAAE,SAAK,oBAAkB,CAAC,GAAE,GAAE,KAAK,eAAe,GAAE,KAAK,kBAAgB,IAAE,IAAE,GAAE,MAAI,KAAK,YAAY,CAAC,IAAE,OAAK,KAAK,kBAAkB,CAAC,IAAE,IAAG,KAAK,YAAY,CAAC,IAAE,OAAK,KAAK,kBAAkB,CAAC,IAAE,KAAI,KAAK,WAAS,EAAE,KAAK,gBAAe,CAAC,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,aAAW,GAAE,KAAK,aAAW,GAAE,KAAK,YAAU,gBAAgB,CAAC,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,eAAe;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK;AAAgB,WAAM;AAAA,QACp5B,GAAG,OAAG,KAAK,YAAW,OAAG,OAAG,OAAG,CAAC,CAAC;AAAA,8DACqB,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAMnC,CAAC;AAAA,cACnB,GAAG,0BAAyB,GAAG,IAAE,IAAE,aAAW,OAAO,IAAG,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA,QAIxE,MAAI,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,IAAG,MAAG,KAAK,eAAe,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,KAAK,YAAW,IAAG,MAAG,KAAK,eAAe,CAAC;AAAA;AAAA,EAC1L;AAAC;AAdE,IAcA,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,MAAK,IAAE,MAAK,IAAE,MAAK;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,UAAQA,OAAG,MAAK,KAAK,4BAA0B,KAAG,MAAK,KAAK,aAAW,GAAE,KAAK,WAAS,KAAK,cAAc,KAAK,MAAM,GAAE,KAAK,6BAA2B,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,YAAU,kBAAkB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC7gB,GAAG,KAAK,YAAW,KAAK,yBAAyB,CAAC;AAAA,MAClD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,UAIN,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIrC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,gBAAe,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC5T,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAEA;AAAE,MAAG,IAAE,KAAG,EAAE,WAAW,CAAC,GAAE,MAAI,UAAS;AAAC,QAAI,IAAE,EAAE,kBAAkB,GAAE,EAAE,cAAc,CAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAEC,KAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,uBAAuB,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC;AAAE,SAAO,EAAE,OAAO,MAAI,GAAE,MAAI,kBAAkB,CAAC,SAAS,CAAC,gCAAgC,EAAE,KAAK,SAAS,CAAC,+EAA+E,GAAED,IAAE,QAAQ,OAAO,EAAE,MAAM,GAAE,EAAC,QAAO,EAAE,QAAO,OAAM,GAAE,OAAM,EAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAG,EAAC,GAAEA,KAAE,GAAE,GAAE,YAAWC,KAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,EAAE,MAAM,QAAO,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEC,MAAED,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAE,IAAE,IAAE,EAAE,MAAM,IAAE,CAAC,IAAE,EAAE,MAAM,IAAE,CAAC,GAAE,IAAEA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,MAAM,MAAM,GAAE,EAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,GAAG,2BAA2BA,IAAE,MAAM,MAAM,GAAE,EAAE,GAAE,EAAE,MAAM,MAAM,GAAE,EAAE,CAAC,EAAE,OAAO,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,OAAO,MAAI,GAAE,MAAI,kCAAkC,CAAC,UAAU,CAAC,4BAA4BA,IAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmBC,GAAC,mBAAmB,CAAC,cAAc;AAAE,MAAI,IAAEA,MAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,GAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,EAAE,IAAI,4BAA4B;AAAE,MAAG,IAAE,GAAE;AAAC,QAAI,IAAE,EAAE,EAAE,UAAU,oDAAoD,GAAE,IAAE,IAAE,IAAE,IAAE,EAAE,+BAA8B,IAAE,IAAE,KAAK,KAAK,IAAE,EAAE,IAAE,KAAK,KAAK,IAAE,EAAE;AAAE,SAAG,KAAG,KAAG,KAAG,KAAG,IAAE,IAAE,IAAE,IAAE,KAAG,MAAI,IAAE,GAAG,sBAAoB,MAAI,KAAG,KAAG,MAAI,IAAE,GAAG,sBAAoB,IAAE,GAAG,+BAA6B,IAAE,GAAG;AAAA,EAAmB;AAAC,UAAO,GAAE;AAAA,IAAC,KAAK,GAAG;AAAoB,UAAE,IAAI,GAAG,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK,GAAG,qBAAoB;AAAC,UAAG,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAMD,IAAE,MAAK,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAEC,KAAE,CAAC,GAAE,KAAG,GAAE;AAAC,YAAE,EAAE,iBAAiB,GAAE,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,YAAI,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,MAAK,KAAG,CAAC,CAAC;AAAE,aAAG,GAAG,KAAK,CAAC,GAAE,KAAG,GAAG,KAAK,CAAC,GAAE,MAAI,gBAAc,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU;AAAiB,YAAI,KAAG,EAAE,iBAAiB,GAAE,IAAG,EAAE,OAAM,CAAC;AAAE,UAAE,KAAK,CAAC;AAAE,YAAI,KAAG,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,UAAE,KAAK,EAAE;AAAE,iBAAQ,MAAM;AAAE,YAAE,YAAY,GAAG,MAAM;AAAE,eAAO;AAAA,MAAE;AAAC;AAAA,IAAK;AAAA,IAAC,KAAK,GAAG;AAA6B,UAAE,IAAI,GAAG,GAAE,GAAE,GAAEC,KAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM,KAAK,GAAG;AAAoB,UAAI,IAAE,EAAE,YAAY,QAAQ;AAAE,UAAE,IAAI,GAAG,GAAE,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE;AAAA,IAAM;AAAQ,YAAM,IAAI,MAAM,iCAAiC,CAAC,GAAG;AAAA,EAAC;AAAC,OAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC,GAAE,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU,kBAAiB,IAAE,EAAE,iBAAiB,GAAE,GAAED,IAAE,OAAM,GAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,SAAQ,OAAO,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,mBAAmB,CAAC,IAAG,KAAK,KAAG;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA,UAGhqH,GAAG,KAAK,IAAG,KAAE,CAAC;AAAA;AAAA;AAAA,QAGhB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,cAAY,EAAE,2BAA2BA,KAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,KAAG,GAAE,KAAK,uBAAqBA,IAAE,UAAQ,KAAG,EAAE,SAAO,KAAGA,IAAE,CAAC,IAAE,KAAI,KAAK,uBAAqB,EAAE,UAAQ,KAAGA,IAAE,SAAO,KAAG,EAAE,CAAC,IAAE,KAAI,KAAK,wBAAsB,KAAK;AAAqB,WAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,GAAE,KAAK,oBAAkB,KAAK,uBAAqB,EAAE,CAAC,IAAEA,IAAE,CAAC,GAAE,KAAK,YAAU,UAAU,CAAC,IAAI,KAAK,iBAAiB,IAAG,KAAK,OAAK,UAAS,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC;AAAA,SAAM;AAAC,UAAI,IAAEA,IAAE,SAAO,KAAGA,IAAEA,IAAE,SAAO,CAAC,IAAE,MAAI,GAAE,IAAE,EAAE,SAAO,KAAG,EAAE,EAAE,SAAO,CAAC,IAAE,MAAI;AAAE,WAAG,KAAG,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,KAAG,MAAI,EAAE,cAAc,CAAC,KAAG,EAAE,EAAE,SAAO,CAAC,MAAI,MAAI,MAAI,EAAE,cAAcA,GAAC,KAAGA,IAAEA,IAAE,SAAO,CAAC,MAAI,MAAI,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,MAAI,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,KAAK,OAAK,aAAY,KAAK,YAAU,UAAU,CAAC,IAAI,KAAK,kBAAkB,IAAG,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC;AAAA,IAAC;AAAC,SAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,iBAAgB,GAAE,CAAC,CAAC;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA,MAAE,KAAK,oBAAkB,IAAE,cAAY,OAAM,IAAE;AAAA,6BACzoCA,GAAC,SAASA,GAAC,QAAQA,GAAC;AAAA,QACzC,GAAG,KAAK,IAAG,KAAK,oBAAkB,CAAC,CAAC;AAAA;AAAA;AAEtC,QAAG,KAAK,SAAO,UAAS;AAAC,UAAI,IAAE,KAAK,oBAAkB,IAAE,UAAU,KAAK,YAAY,SAAO,CAAC,MAAI,KAAI,IAAE,KAAK,uBAAqB;AAAA,8BACvG,CAAC,OAAK,qBAAqB,CAAC;AAAA;AACb,UAAE;AAAA,UACrC,CAAC;AAAA,gDACqC,KAAK,iBAAiB;AAAA,UAC5D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGQ,KAAK,iBAAiB;AAAA,0CACR,KAAK,uBAAqB,MAAI,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAM7D,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAIN;AAAM,UAAE;AAAA,SACR,CAAC;AAAA,SACD,EAAE,OAAO,CAAC;AAAA;AAAA,qDAEkC,KAAK,eAAe;AAAA,qBACpDA,GAAC;AAAA,qBACDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAIb,WAAO;AAAA,EAAC;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,EAAC,IAAEA,KAAE,EAAC,GAAEC,IAAC,IAAE;AAAE,SAAOD,IAAE,QAAQ,OAAOC,IAAE,MAAM,GAAE,EAAC,QAAOA,IAAE,QAAO,OAAMA,IAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,IAAE,eAAe,EAAE,OAAM,WAAW,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,SAAO,EAAE,qBAAmB,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,IAAG;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE;AAAI,SAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,KAAGA,KAAE,MAAI,OAAK,KAAK,WAAS,IAAG,KAAK,YAAU,SAASA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA,UAEtyB,GAAG,KAAK,IAAG,KAAE,CAAC;AAAA;AAAA,QAEhB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX;AAAC;AAAE,SAAS,GAAG,EAAC,QAAOD,KAAE,eAAc,GAAE,OAAMC,IAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,GAAE,IAAEA,OAAG,EAAE;AAAM,QAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,EAAE,QAAO,CAAC;AAAE,aAAO,EAAE,eAAe,EAAE,OAAM,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAMD,GAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,SAAS,GAAG,EAAC,QAAOA,KAAE,eAAc,GAAE,iBAAgBC,MAAE,OAAG,OAAM,EAAC,GAAE;AAAC,SAAM,CAAC,EAAC,QAAO,GAAE,SAAQ,EAAC,MAAI;AAAC,QAAG,EAAC,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE;AAAE,QAAGA,OAAG,EAAE,UAAQ,aAAY;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,GAAE,GAAE;AAAE,UAAGD,QAAI,GAAG;AAAI,SAAC,GAAE,CAAC,IAAE,CAAC,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,GAAE,CAAC,EAAE,mBAAmB,MAAK,EAAE,mBAAmB,IAAI,CAAC,EAAE,IAAI,OAAG;AAAC,cAAG,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK,GAAE,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,iBAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAA,QAAC,CAAC;AAAA,WAAM;AAAC,YAAI,IAAE,IAAI,GAAG,GAAG,uBAAsB,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAG,uBAAsB,EAAE,OAAM,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAE,MAAK,CAAC;AAAE,YAAE,EAAE,iBAAiB,GAAE,GAAE,SAAS,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,SAAS;AAAA,MAAC;AAAC,UAAI,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,aAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,IAAC;AAAC,QAAI,IAAE,KAAG,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAI,EAAE,UAAQ,YAAU,EAAE,UAAQ,YAAU,EAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,MAAI,KAAG,MAAK;AAAC,UAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,uBAAuB,CAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,aAAO,EAAE,eAAe,GAAE,GAAE,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,IAAI,GAAGA,KAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAA,EAAC;AAAC;AAAC,IAAG,EAAC,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,YAAW,IAAG,WAAU,IAAG,SAAQ,IAAG,WAAU,IAAG,WAAU,IAAG,cAAa,IAAG,cAAa,IAAG,cAAa,IAAG,kBAAiB,IAAG,aAAY,IAAG,eAAc,IAAG,UAAS,IAAG,SAAQ,IAAG,SAAQ,IAAG,aAAY,IAAG,aAAY,IAAG,cAAa,IAAG,SAAQ,IAAG,cAAa,IAAG,UAAS,IAAG,WAAU,IAAG,WAAU,IAAG,aAAY,IAAG,eAAc,IAAG,WAAU,IAAG,kBAAiB,IAAG,kBAAiB,IAAG,SAAQ,IAAG,UAAS,IAAG,UAAS,IAAG,eAAc,IAAG,YAAW,IAAG,IAAE;AAAG,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,GAAE,CAAC;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA9D,IAAgE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAACC,KAAE,MAAI,IAAI,CAAC,EAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC;AAAE,SAAK,cAAc,QAAQ,OAAG;AAAC,QAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,yBAAyB;AAAA,IAAC,CAAC;AAAE,QAAIA,MAAE,KAAK,cAAc,IAAI,OAAG,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK;AAAE,WAAM;AAAA,QACxtG,EAAE,OAAO,CAAC;AAAA,8BACY,KAAK,aAAa;AAAA,oCACZ,KAAK,aAAa;AAAA;AAAA;AAAA,cAGxC,EAAE,KAAK;AAAA,SACZ,CAAC;AAAA,0CACgCA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAItC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,EAAE,OAAO,CAAC,GAAE,MAAI,GAAG,GAAE,CAAC,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,IAAG,CAAC;AAAE,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAiB;AAAA,EAAC,cAAa;AAAC,MAAE,OAAO,KAAK,cAAc,CAAC,MAAI,KAAK,cAAc,CAAC,GAAE,MAAI,gDAAgD,KAAK,cAAc,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC,EAAE;AAAE,QAAI,IAAE,KAAK,cAAc,CAAC;AAAE,WAAM;AAAA,+CACrvB,KAAK,cAAc,CAAC,IAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC;AAAA,QACzF,EAAE,CAAC;AAAA,uCAC4B,CAAC;AAAA,uCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAQL,CAAC;AAAA,mCACD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/B;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAEA,IAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,SAAOA,KAAE,KAAK,YAAU,aAAaA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,MAAM,GAAEA,MAAE,GAAG,KAAK,MAAM;AAAE,WAAM;AAAA,QAC1c,EAAE,OAAO,CAAC;AAAA,6BACW,KAAK,aAAa;AAAA,oCACX,KAAK,aAAa;AAAA;AAAA;AAAA,8DAGQ,KAAK,YAAY,MAAM;AAAA,gBACrE,CAAC,IAAIA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIjB;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAI,IAAEA,IAAE;AAAO,MAAG,IAAE;AAAE,UAAM,MAAM,sBAAsB,CAAC,uBAAuB;AAAE,MAAIC,MAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,IAAAC,IAAED,IAAE,CAAC,CAAC,IAAE,UAAU,GAAG,CAAC,CAAC;AAAG,SAAOC,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,MAAE,CAAC,IAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,MAAM,WAAS,KAAG,EAAE,YAAY,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,WAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,qBAAoB,KAAK,OAAK,MAAG,KAAK,aAAW,CAAC,EAAE,WAAU,EAAE,MAAM;AAAE,QAAG,CAAC,CAAC,IAAE,EAAE,0BAA0B,KAAK,YAAW,CAAC,CAAC,CAAC;AAAE,SAAK,cAAY,EAAE,WAAS,IAAE,CAAC,CAAC,IAAE,GAAE,EAAE,UAAQ,SAAO,KAAG,MAAI,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,EAAE,UAAQ,OAAK,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,KAAK,aAAWA,KAAE,KAAK,YAAU,UAAUA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAGA,MAAE,OAAM,IAAE,KAAK,cAAc,CAAC;AAAE,SAAK,eAAa,SAAO,KAAK,eAAa,SAAO,IAAE;AAAA;AAAA;AAAA,qDAG3vC,KAAK,eAAa,QAAM,MAAI,GAAG;AAAA,yCAC5CA,MAAE,oBAAkB,KAAK,eAAa,SAAO,KAAK,eAAa,SAAO,IAAE,yCAAuC,KAAK,eAAa,UAAQ,IAAE,wCAAuCA,MAAE,SAAO,KAAK,eAAa,SAAO,IAAE,4DAA2DA,MAAE,SAAO,KAAK,eAAa,UAAQ,IAAE,4DAA2DA,MAAE;AAAO,QAAI,IAAE,KAAK,eAAa,SAAO,yEAAuE;AAA4C,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA,SAKjjB;AAAA,mDAC0C,CAAC;AAAA,QAC5C;AAAA;AAAA;AAAA,wBAGgB,KAAK,YAAY,WAAS,IAAE,iBAAe,iBAAiB;AAAA;AAAA;AAAA,SAG3E,EAAE,OAAO,CAAC;AAAA,qCACkB,CAAC;AAAA;AAAA,2BAEXA,GAAC;AAAA;AAAA,qDAEyB,CAAC;AAAA;AAAA,uBAE/B,CAAC;AAAA;AAAA,aAEX,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,6CAK+B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMhC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAQH,CAAC;AAAA;AAAA;AAAA;AAAA,EAGP;AAAC;AAAE,IAAI,MAAI,EAAC,MAAK,WAAU,KAAI,QAAO,KAAI,OAAM;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE,GAAE;AAAC,MAAI,IAAED,IAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,EAAE,eAAe,GAAEA,IAAE,KAAK,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAEA;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,OAAM,EAAC,MAAK,EAAC,GAAE,SAAQ,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,2BAA2B,GAAE,GAAE,CAAC;AAAE,MAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,EAAE,OAAM,CAAC,GAAE,IAAE;AAAE,EAAAC,QAAI,IAAE,EAAE,qBAAqB,GAAE,CAAC;AAAG,MAAI;AAAE,OAAI,MAAI,SAAO,MAAI,WAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAE,EAAE,UAAU,IAAI,EAAE,MAAM,EAAE;AAAO,YAAO,GAAE;AAAA,MAAC,KAAI;AAAM,YAAI,IAAE,GAAG,GAAE,EAAE,cAAc,CAAC,GAAE,GAAED,IAAE,KAAK;AAAE,YAAE,EAAE,eAAe,GAAEA,IAAE,OAAM,CAAC;AAAE;AAAA,MAAM,KAAI;AAAO,YAAG,EAAC,SAAQ,GAAE,UAAS,GAAE,UAAS,EAAC,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC;AAAE,YAAE,EAAE,eAAe,GAAE,GAAE,CAAC;AAAE;AAAA,MAAM;AAAQ,cAAM,IAAI,MAAM,GAAG,CAAC,2CAA2C;AAAA,IAAC;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,EAAC,YAAW,GAAE,QAAO,GAAE,WAAU,GAAE,SAAQ,EAAC,GAAE,IAAE,IAAI,CAAC,KAAG,GAAGA,IAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,EAAE,OAAO,OAAO,wBAAwB,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,MAAE,KAAK,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQ,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAG,EAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,OAAK;AAAG,QAAI,IAAE,CAACA,GAAC;AAAE,SAAK,KAAG,MAAI,QAAM,MAAI;AAAI,QAAG,CAAC,GAAE,CAAC,IAAE,EAAE,0BAA0B,GAAE,CAAC;AAAE,SAAK,cAAY,EAAE,WAAS,IAAE,CAAC,CAAC,IAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,EAAE,cAAc,CAAC,IAAE,MAAI,KAAK,OAAK,SAAQ,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,MAAI,KAAK,OAAK,UAAS,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,GAAE,GAAE,CAAC,CAAC,IAAG,KAAK,aAAW,GAAE,KAAK,YAAU,aAAa,KAAK,EAAE,IAAI,KAAK,IAAI;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAc,CAAC,GAAEA,MAAE,MAAI,KAAK,WAAW,WAAS,IAAE,oBAAkB,mBAAmB,GAAG,KAAK,WAAW,SAAO,CAAC,CAAC,IAAG,IAAE,MAAI;AAAC,UAAI,IAAE;AAAG,UAAG,KAAK,YAAY,WAAS;AAAE,aAAK,WAAW,WAAS,MAAI,KAAG;AAAA;AAAsB,iBAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO;AAAI,eAAG,gBAAgB,GAAG,CAAC,CAAC;AAAI,aAAO;AAAA,IAAC;AAAE,WAAO,KAAK,SAAO,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA,QAK3yE;AAAA,iDACyC,CAAC;AAAA,gDACF,CAAC;AAAA,KAC5C;AAAA;AAAA,QAEG,EAAE,OAAO,CAAC;AAAA,oCACkB,CAAC;AAAA,6BACRA,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMV,CAAC;AAAA,iCACU,EAAE,CAAC;AAAA,+CACW,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDASJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMvB,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAc7B;AAAA,QACE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,iCAIe,EAAE,CAAC;AAAA,+BACLA,IAAE,CAAC;AAAA;AAAA,mCAEC,EAAE,CAAC;AAAA,4BACV,KAAK,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ5B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,CAAC,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,EAAE,mBAAmB,GAAE,EAAE,MAAM,MAAM,GAAE,IAAE,GAAE,IAAE,CAAC;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,EAAE,QAAO,EAAE,MAAM,MAAM,IAAG,EAAE,2BAA2B,UAAS,CAAC,EAAE,CAAC,CAAC,GAAE,EAAE,MAAM,MAAM;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,CAAC,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,MAAK,CAAC;AAA5B,IAA8B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAA6B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACz0D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+GAA8G,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAGA,QAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAASA,KAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAUA,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,SAAK,aAAW,QAAM,IAAE,4DAA0D,KAAK,mBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,wBAI1rB,KAAK,mBAAiB,KAAK,oBAAkB,2FAAyF,4DAA0D,iCAAiC;AAAA,WAChP,IAAE;AAAyC,QAAIA,MAAE;AAAc,WAAO,KAAK,aAAW,UAAQA,MAAE,kCAAiC;AAAA,QAClI,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YASN,KAAK,mBAAiB;AAAA;AAAA,oCAEA,qBAAqB,KAAK,aAAW,QAAM,QAAM,yBAAyB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAiB/F,CAAC;AAAA;AAAA;AAAA;AAAA,YAIL,KAAK,mBAAiB,6CAA2C,2BAA2BA,GAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAzCE,IAyCA,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG,IAAE,OAAG,IAAE,OAAG;AAAC,QAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wFAAuF,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAGA,QAAI,SAAO;AAAE,YAAM,IAAI,MAAM,4CAA4C;AAAE,SAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAASA,KAAE,KAAK,mBAAiB,GAAE,KAAK,mBAAiB,GAAE,KAAK,oBAAkB,GAAE,KAAK,YAAU,UAAUA,GAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,SAAK,aAAW,QAAM,IAAE,wCAAsC,KAAK,mBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,wBAI3oB,KAAK,mBAAiB,KAAK,oBAAkB,oHAAkH,sFAAoF,sFAAsF;AAAA,WACxV,IAAE;AAAyC,QAAIA,MAAE;AAAc,WAAO,KAAK,aAAW,UAAQA,MAAE,kCAAiC;AAAA,QAClI,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWN,KAAK,mBAAiB;AAAA;AAAA,oCAEA,qBAAqB,KAAK,aAAW,QAAM,QAAM,yBAAyB,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAsB7F,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKP,KAAK,mBAAiB,6CAA2C,2BAA2BA,GAAC,IAAI;AAAA;AAAA;AAAA;AAAA,EAGxG;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAOC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,GAAE;AAAC,MAAG,EAAE,gBAAc,KAAG,EAAE,iBAAe,KAAG,EAAE,YAAY,EAAE,SAAQ,EAAE,QAAQ;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,EAAC,CAAC;AAAE,MAAG,EAAE,gBAAc,EAAE,WAAS,EAAE,iBAAe,EAAE,YAAU,EAAE,cAAY,KAAG,EAAE,QAAQ,SAAO,SAAQ;AAAC,QAAI,IAAEA,IAAE,MAAM,QAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAACA,IAAE,MAAM,IAAE,CAAC,IAAEA,IAAE,MAAM,IAAE,CAAC,GAAEA,IAAE,MAAM,IAAE,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE;AAAE,IAAAC,QAAI,QAAM,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,MAAK,GAAE,UAAS,MAAE,EAAC,CAAC,KAAG,EAAE,OAAOA,QAAI,OAAM,MAAI,qBAAqBA,GAAC,EAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,kBAAiB,GAAE,UAAS,MAAE,EAAC,CAAC;AAAG,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,EAAC,CAAC;AAAE,WAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAe,KAAG,EAAE,gBAAc,IAAE,IAAE,IAAI,GAAG,CAAC,KAAGA,QAAI,QAAM,IAAE,IAAI,GAAG,GAAE,KAAK,KAAG,EAAE,OAAOA,QAAI,OAAM,MAAI,qBAAqBA,GAAC,EAAE,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,IAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,IAAG,EAAE,iBAAiB,GAAE,CAACD,GAAC,GAAEA,IAAE,OAAM,CAAC;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+DAClvE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAClS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqCb;AAAC;AAvCsuE,IAuCpuE,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,+EACM,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAClT,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+Cb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAG,EAAE,cAAY,EAAE,eAAa,EAAE,cAAa,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAqB,IAAE,EAAE,QAAQ,OAAM,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,KAAG,EAAE,eAAa,EAAE,cAAa,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,GAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQC,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,OAAKA,IAAE,QAAO,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,QAAM,GAAE,KAAK,WAAS,WAAW,GAAG,EAAE,MAAM,CAAC,MAAK,KAAK,YAAU;AAAA,EAAO;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,IAAI,GAAEA,MAAE,IAAI,KAAK,IAAI,GAAE;AAAE,WAAO,KAAK,MAAM,WAAS,IAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,MAAI,sCAAsC,IAAE,IAAE,KAAK,YAAY,IAAI,CAAC,GAAE,MAAI,aAAa,GAAG,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,GAAE;AAAA,QAC1uE,EAAE,OAAO,CAAC;AAAA;AAAA,4BAEU,CAAC;AAAA;AAAA,YAEjB,EAAE,KAAK;AAAA,CAClB,CAAC;AAAA,8CAC4CA,GAAC;AAAA;AAAA;AAAA;AAAA,EAG1C;AAAC;AAV2nD,IAUznD,KAAG,CAAC,KAAI,KAAI,KAAI,KAAI,KAAI,GAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAGA,QAAI;AAAE,WAAM;AAAY,MAAGA,OAAG;AAAE,WAAO,GAAG,MAAM,GAAEA,GAAC,EAAE,IAAI,OAAG,aAAa,CAAC,EAAE,EAAE,KAAK,GAAG;AAAE,QAAM,MAAM,oBAAoBA,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,iBAAiB,GAAE,GAAE,CAAC;AAAE,MAAG,GAAG,kBAAkB,GAAE,GAAE,CAAC,GAAEC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,QAAO,GAAE,GAAE,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,OAAM,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,uEAAuE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,MAAM,GAAE,IAAE,EAAE,oBAAoB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,oBAAoB,GAAE,EAAE,MAAM,GAAE,IAAE,EAAE,aAAa,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAA7oB,IAA+oB,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI;AAAA;AAAA,MAEt4C,GAAG,kBAAiB,SAAQ,SAAS,CAAC;AAAA;AAAA;AAFw1C,IAIl4C,MAAI;AAAA;AAAA;AAAA;AAAA;AAJ83C,IAQl4C,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,uBAAsB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,aAAW,MAAG,KAAK,eAAa,OAAG,KAAK,cAAY,GAAE,KAAK,OAAK,EAAE,QAAO,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAa,GAAE,MAAI,KAAK,SAAO,QAAI,KAAK,aAAWA,KAAE,KAAK,cAAY,KAAK,cAAc,KAAK,GAAG,GAAE,KAAK,YAAU,YAAY,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,KAAK,IAAI;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjiB,KAAK,eAAa,MAAI,GAAG;AAAA,IAC3B,EAAE,OAAO,CAAC;AAAA,MACR,KAAK,SAAO,IAAE;AAAA;AAAA;AAAA,sBAGE,KAAK,eAAa,IAAE,KAAK,aAAW,gBAAc,IAAI;AAAA;AAAA;AAAA,SAGrE;AAAA;AAAA;AAAA;AAAA,sBAIe,KAAK,eAAa,IAAE,KAAK,aAAW,6BAA2B,IAAI;AAAA;AAAA;AAAA,MAGnF;AAAA;AAAA;AAAA,EAEH;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,MAAK,IAAI,GAAE,KAAK,WAAS,gCAA+B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAe;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,IACnsB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBX;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,IAAG,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,EAAE,QAAO,IAAE,EAAE,QAAO,IAAE,EAAE,2BAA2B,MAAM,KAAK,CAAC,GAAE,MAAM,KAAK,CAAC,CAAC;AAAE,WAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,WAAW,KAAK,CAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,KAAK,IAAI,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAC,QAAO,GAAG,WAAU,OAAM,QAAO,eAAc,GAAE,CAAC;AAA7D,IAA+D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAE,IAAI,GAAGD,IAAE,OAAM,EAAE,MAAM,GAAE,IAAE,EAAE,iBAAiBC,KAAE,CAACD,GAAC,GAAE,OAAO;AAAE,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAE,MAAK;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE;AAAE,MAAG,MAAI,aAAY;AAAC,QAAG,EAAE,UAAQ;AAAY,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,QAAI,IAAE,GAAG,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,UAAS,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAG,CAAC,EAAE,gBAAgB,EAAE,OAAM,CAAC,GAAE;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAM,EAAC;AAAA,EAAC;AAAC,MAAGA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,CAAC,GAAE,GAAE,CAAC,IAAE,GAAG,GAAE,EAAE,OAAM,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAQ,WAAO,GAAG,GAAEA,GAAC;AAAE,MAAG,MAAI,QAAO;AAAC,QAAI,IAAEA,IAAE,eAAe,CAAC,GAAE,QAAO,EAAE,uBAAuB,QAAO,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,QAAM,IAAI,MAAM,iCAAiC,EAAE,KAAK,OAAO,CAAC,EAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+BAA8B,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,kBAAgB,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC/6E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,+BAA8B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACxT,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,cAAc,EAAE,KAAK,IAAE,MAAI,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjnB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,SAAM,EAAC,QAAO,EAAE,QAAO,OAAM,EAAE,OAAM,OAAMA,IAAE,MAAK;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,GAAG,GAAE,EAAE,mBAAmB,IAAI,GAAE,GAAG,GAAE,EAAE,mBAAmB,IAAI,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,gBAAgB,GAAE,CAAC,GAAE,KAAK,gBAAc,EAAE,IAAI,CAACA,KAAE,MAAI,IAAI,CAAC,EAAE,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,KAAK,eAAa,EAAE,SAAO;AAAE,aAAQA,MAAE,GAAEA,MAAE,KAAK,cAAaA;AAAI,WAAK,YAAU,SAASA,GAAC;AAAU,SAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,CAAC;AAAE,QAAG,KAAK,eAAa,GAAE;AAAC,QAAE,KAAK,qFAAqF;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,cAAa;AAAI,UAAE,KAAK,gCAAgC,CAAC,CAAC,CAAC,gDAAgD,CAAC,4BAA4B,IAAE,CAAC,OAAO;AAAE,UAAI,IAAE,KAAK,cAAa,IAAE,KAAK,eAAa;AAAE,QAAE,KAAK,oDAAoD,CAAC,4BAA4B,CAAC,OAAO;AAAA,IAAC;AAAM,QAAE,KAAK,uDAAuD;AAAE,WAAM;AAAA,QAC7xC,EAAE,OAAO,CAAC;AAAA,6BACW,KAAK,aAAa;AAAA,oCACX,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMxC,EAAE,KAAK;AAAA,SACZ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIL;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAEC,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,mBAAmB,KAAI,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAED,IAAE,CAAC,EAAE;AAAM,MAAG,MAAI,aAAY;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAED,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,GAAE,GAAEA,GAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,mBAAmBD,GAAC;AAAE,MAAG,MAAI,aAAW,IAAE,OAAI,GAAE;AAAC,QAAI,IAAEA,IAAE,IAAI,OAAG;AAAC,UAAI,IAAE,CAAC,IAAG,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC;AAAE,aAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,IAAC,CAAC,GAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAKA,IAAE,SAAS,EAAE,MAAM,GAAE,OAAM,EAAE,MAAK,EAAE,GAAE,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAE,EAAE,CAAC,EAAE,MAAM,CAAC,MAAI,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC,GAAE,IAAEC,IAAE,eAAe,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,OAAO,OAAO,kCAAgC;AAAE,MAAGD,IAAE,SAAO,GAAE;AAAC,QAAI,IAAE,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAEA,IAAE,QAAO,KAAG,GAAE;AAAC,UAAI,IAAEA,IAAE,MAAM,GAAE,IAAE,CAAC;AAAE,QAAE,KAAK,GAAG,GAAE,GAAEC,GAAC,CAAC;AAAA,IAAC;AAAC,QAAI,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAE,aAAQ,KAAK;AAAE,MAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,WAAO;AAAA,EAAC;AAAC,MAAG,EAAC,WAAU,GAAE,UAAS,EAAC,IAAE,IAAID,KAAE,GAAEC,GAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,EAAE,SAAO,CAAC;AAAE,MAAG,EAAE,SAAO,GAAE;AAAC,MAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,IAAE,CAAC,IAAE,EAAE,CAAC,EAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAEA,IAAE,iBAAiB,GAAE,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC;AAAE,IAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAE,EAAE,gBAAgBD,IAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,SAAM,EAAC,WAAUA,IAAE,IAAI,OAAG,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,MAAM,MAAM,GAAE,CAAC,CAAC,GAAE,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC,CAAC,CAAC,EAAC,EAAC,CAAC,CAAC,GAAE,UAAS,EAAC;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG,EAAE,KAAK;AAAE,IAAE,uBAAuB,GAAE,CAAC;AAAE,MAAI,IAAE,EAAE,gBAAgB,EAAE,IAAI,OAAG,EAAE,KAAK,GAAE,CAAC;AAAE,MAAG,EAAE,cAAc,CAAC,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,CAAC,EAAE,OAAM,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAO,OAAG,EAAE,cAAc,EAAE,KAAK,IAAE,CAAC;AAAE,SAAO,EAAE,WAAS,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,IAAE,GAAG,GAAE,GAAEA,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE,GAAEC,KAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE;AAAC,MAAI,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAA4B,KAAK;AAAE,eAAM;AAAA,MAAgE,KAAK;AAAE,eAAM;AAAA,MAAsC;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAAiD,KAAK;AAAE,eAAM;AAAA,MAA6D;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAED,MAAE;AAAA;AAAA,UAE3sF;AAAA;AAAA,SAEA,IAAEA,MAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAMA,IAAEA,MAAE,uBAAqB,sBAAqB,IAAEA,MAAE,uBAAqB,sBAAqB,IAAEA,MAAE,QAAM,OAAM,IAAEA,MAAE,QAAM,OAAM,IAAE;AAAA;AAAA,uBAE/GA,MAAE,yBAAuB,sBAAsB;AAAA,qBACjD,CAAC;AAAA,qBACD,CAAC;AAAA;AAAA,mBAEH,CAAC;AAAA,mBACD,CAAC;AAAA;AAAA;AAAA,kBAGF,CAAC;AAAA,sBACG,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA,gCAGK,CAAC,2BAA2B,CAAC;AAAA,UACnD,CAAC;AAAA;AAAA,UAED,EAAE,CAAC,CAAC;AAAA;AAAA,wBAES,IAAEA,MAAE,KAAG,IAAE;AAAA,QACxB,CAAC,KAAG;AAAA;AAAA,UAEF,CAAC;AAAA;AAAA,eAEI,GAAG,CAAC,CAAC,WAAS,KAAGC,MAAE;AAAA,QAC1B,CAAC,KAAG;AAAA;AAAA,UAEF,CAAC;AAAA;AAAA,eAEI,GAAG,CAAC,CAAC,UAAS,IAAE,GAAG,EAAE,CAAC,CAAC,IAAG,IAAE,GAAG,CAAC,GAAE,IAAED,MAAE,GAAG,CAAC,IAAE,GAAG,CAAC,GAAE,IAAEA,MAAE,GAAG,CAAC,IAAE,GAAG,CAAC;AAAE,SAAM;AAAA,QAC/E,GAAG,GAAE,GAAE,MAAI,GAAE,CAAC,CAAC;AAAA,yDACkC,CAAC;AAAA,UAChDA,MAAE,IAAE,CAAC;AAAA;AAAA;AAAA,yDAG0C,CAAC;AAAA,UAChDA,MAAE,IAAE,CAAC;AAAA;AAAA;AAAA,gEAGiD,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIxCA,MAAE,yBAAuB,sBAAsB;AAAA,UAC9D,CAAC;AAAA,UACD,GAAG,GAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAGT;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,2IAA0I,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,WAAS,EAAE,aAAW,MAAI,KAAG,EAAE,aAAW,MAAI,MAAI,KAAK,kBAAgB,EAAE,WAAS,MAAI,KAAG,CAAC,KAAK,mBAAiB,EAAE,cAAY,MAAI,GAAE,KAAK,iBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,IAAE,EAAC,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,gBAAc,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,oBAAkB,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,UAAQ,KAAK,kBAAgB,GAAE,KAAK,kBAAgB,EAAE,aAAW,MAAI,KAAG,KAAK,mBAAiB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,MAAI,KAAK,mBAAiB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,MAAI,KAAK,cAAc,KAAK,MAAM,GAAE,KAAK,mBAAmB,KAAK,CAAC,IAAG,MAAI,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,mBAAmB,KAAK,CAAC,OAAK,KAAK,mBAAiB,KAAK,kBAAkB,CAAC,GAAE,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,IAAG,KAAK,4BAA0B,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAE,KAAK,aAAW,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,KAAK,aAAW,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAkB,CAAC,GAAE,KAAK,YAAU,KAAK,IAAI,KAAK,cAAc,CAAC,IAAE,KAAK,kBAAiB,KAAK,cAAc,CAAC,CAAC,GAAE,KAAK,YAAUA,MAAE,KAAK,eAAa,GAAE,KAAK,YAAU,IAAE,KAAK,eAAa,GAAE,KAAK,WAAS,IAAE,KAAK,cAAY,GAAE,KAAK,YAAU,YAAY,KAAK,iBAAiB,IAAI,KAAK,UAAU,KAAK,KAAK,SAAS,IAAI,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI,KAAK,MAAM,IAAI,KAAK,gBAAgB,IAAI,KAAK,cAAc,IAAI,KAAK,yBAAyB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,eAAc,CAAC,KAAK,gBAAe,KAAK,SAAS,IAAE,GAAG,KAAK,mBAAkB,KAAK,eAAc,CAAC,KAAK,gBAAe,KAAK,WAAU,OAAG,MAAK,KAAK,yBAAyB,GAAEA,MAAE,KAAK,SAAO,CAAC,KAAK,kBAAiB,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,CAAC;AAAE,WAAM;AAAA,MAC9pE,IAAI,KAAK,gBAAe,KAAK,WAAU,KAAK,WAAU,KAAK,UAAS,KAAK,SAAQ,KAAK,YAAW,KAAK,2BAA0BA,IAAE,CAAC,GAAEA,IAAE,CAAC,GAAEA,IAAE,CAAC,CAAC,CAAC;AAAA,MAC/I,CAAC;AAAA;AAAA,EACJ;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,iBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,IAAE,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,4BAA0B,GAAEA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,YAAU,eAAe,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SACpqB,GAAG,KAAK,YAAW,KAAK,2BAA0B,OAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAkBxC,KAAK,iBAAe,sCAAoC,mCAAmC;AAAA;AAAA;AAAA,aAGtG,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA,SAIpC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGS,KAAK,iBAAe,eAAa,YAAY;AAAA,wBACjD,KAAK,iBAAe,eAAa,YAAY;AAAA,wBAC7C,KAAK,iBAAe,eAAa,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAMpB,KAAK,iBAAe,wBAAsB,qBAAqB;AAAA,iBAC/F,KAAK,iBAAe,kDAAgD,+CAA+C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ9H;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS;AAAA,2BACpD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAeA,KAAE,KAAK,YAAU,UAAU,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,IAAE,GAAEA,MAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,KAAK,iBAAe,cAAY,aAAY,IAAE,KAAK,iBAAe,cAAY,aAAY,IAAE,KAAK,iBAAe,gCAA8B;AAA8B,WAAM;AAAA,MAChgB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,oBAII,CAAC;AAAA,oBACD,CAAC;AAAA;AAAA;AAAA;AAAA,oCAIe,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAMCA,GAAC;AAAA,sBACjB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,MAAIC,MAAED,IAAE;AAAO,SAAOC,OAAG,IAAE,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,GAAGD,IAAE,MAAM,GAAE,EAAE,GAAEA,IAAEC,MAAE,CAAC,GAAED,IAAEC,MAAE,CAAC,IAAED,IAAEC,MAAE,CAAC,CAAC,IAAE,CAAC,KAAGA,QAAI,KAAGD,IAAE,CAAC,IAAE,IAAE,CAACA,IAAE,CAAC,GAAE,CAAC,IAAE;AAAI;AAAC,SAAS,IAAI,EAAC,GAAEA,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAEA,IAAE,eAAa,gBAAe,IAAE,CAAC,GAAE,IAAE,OAAG,IAAE,KAAGA,IAAE,iBAAeA,IAAE,YAAUA,IAAE,gBAAcA,IAAE,WAASA,IAAE,QAAQ,SAAO,SAAQ,IAAE,CAAC,GAAE,GAAE;AAAE,MAAG,GAAE;AAAC,QAAI,IAAEA,IAAE,WAASA,IAAE,UAAQA,IAAE;AAAW,QAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEC,IAAE,WAAU,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAEA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAA,EAAC;AAAM,QAAE,GAAG,EAAC,QAAO,EAAC,GAAED,IAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,IAAE,CAACC,IAAE,WAAUA,IAAE,WAASA,IAAE,SAAQA,IAAE,UAAU,IAAE,CAACA,IAAE,WAAUA,IAAE,YAAWA,IAAE,WAASA,IAAE,OAAO,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAEA,IAAE,YAAWA,IAAE,WAAW,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,GAAE,YAAW,GAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMA,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAG,EAAC,aAAY,GAAE,cAAa,GAAE,YAAW,GAAE,aAAY,GAAE,cAAa,GAAE,SAAQ,GAAE,UAAS,GAAE,WAAU,GAAE,eAAc,GAAE,gBAAe,GAAE,YAAW,EAAC,IAAEA,KAAE,IAAE,MAAI,gBAAe,IAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,IAAE,CAACA,IAAE,WAAU,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,KAAI,EAAE,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAACD,GAAC,GAAEA,IAAE,OAAM,CAAC,GAAE,IAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,GAAE,EAAE,EAAC,EAAC,CAAC;AAAE,MAAG,EAAE,KAAK,CAAC,GAAE,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,GAAG,EAAE,OAAM,CAAC;AAAE,SAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,EAAE;AAAC,MAAI,IAAE,GAAG,EAAC,GAAE,IAAE,IAAE,GAAE,GAAE,IAAE,IAAE,GAAE,YAAW,CAAC,GAAE,YAAW,OAAG,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAMC,IAAE,SAAQ,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,GAAG,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,IAAE,MAAK,wBAAuB,IAAE,MAAK,gBAAe,IAAE,GAAE,YAAW,IAAE,KAAI,GAAE;AAAC,MAAI,IAAE,KAAG,MAAK,IAAE,KAAG,MAAK,IAAEA,IAAE,eAAa,gBAAe,IAAE,KAAGA,IAAE,iBAAeA,IAAE,YAAUA,IAAE,gBAAcA,IAAE,WAASA,IAAE,QAAQ,SAAO,SAAQ,IAAE,EAAE,EAAE,QAAQ,+BAA+B;AAAE,MAAG,CAAC,MAAI,KAAGA,IAAE,iBAAe,KAAGA,IAAE,gBAAc,KAAGA,IAAE,mBAAiB,KAAGA,IAAE,kBAAgB,KAAGA,IAAE,iBAAe,KAAGA,IAAE,gBAAc,MAAIA,IAAE,QAAQ,SAAO,UAAQA,IAAE,QAAQ,SAAO;AAAU,WAAO,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,GAAE,YAAW,GAAE,wBAAuB,GAAE,gBAAe,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,EAAE,UAAU,oDAAoD,GAAE,IAAE,IAAE,KAAG,IAAE,EAAE,+BAA8B,IAAEA,IAAE,YAAU,KAAK,KAAKA,IAAE,YAAUA,IAAE,WAAS,EAAE,IAAE,KAAK,KAAKA,IAAE,cAAY,EAAE;AAAE,MAAG,EAAE,EAAE,QAAQ,oCAAoC,KAAG,KAAG;AAAE,WAAO,IAAI,EAAC,GAAED,KAAE,QAAO,GAAE,UAASC,KAAE,SAAQ,GAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAE,MAAI,GAAE,IAAE,CAACA,IAAE,QAAQ,KAAIA,IAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,cAAaA,IAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,cAAaA,IAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAACA,IAAE,gBAAeA,IAAE,aAAa,EAAC,CAAC;AAAE,MAAG;AAAE,QAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,CAAC;AAAA,OAAM;AAAC,QAAI,IAAE,IAAEA,IAAE,YAAUA,IAAE,WAASA,IAAE,aAAY,IAAE,IAAEA,IAAE,cAAYA,IAAE,YAAUA,IAAE,UAAS,IAAEA,IAAE,eAAaA,IAAE,cAAYA,IAAE;AAAW,MAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAI,IAAE,EAAE,YAAY,QAAQ;AAAE,QAAE,IAAI,GAAGA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,GAAE,IAAE,CAACD,KAAE,CAAC;AAAE,QAAI,CAAC,KAAG,EAAE,MAAM,WAAS,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,KAAK,CAAC,IAAG,MAAI,CAAC,KAAG,EAAE,MAAM,WAAS,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,EAAE,MAAM,CAAC,GAAE,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,EAAE,KAAK,CAAC,IAAG,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU;AAAiB,MAAI,IAAE,EAAE,iBAAiB,GAAE,GAAEA,IAAE,OAAM,CAAC;AAAE,WAAQ,KAAK;AAAE,MAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAEC,KAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQ,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS,2FAA0F,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,OAAG,KAAK,SAAO,OAAG,KAAK,gBAAc,GAAE,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,SAAO,KAAK,kBAAgB,EAAE,cAAY,MAAI,KAAG,EAAE,aAAW,MAAI,GAAE,KAAK,UAAQ,KAAK,gBAAc,GAAE,KAAK,kBAAgB,GAAE,KAAK,gBAAc,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,GAAE,KAAK,eAAc,CAAC,CAAC,MAAI,KAAK,OAAK,MAAG,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,IAAG,KAAK,YAAU,kBAAkB,KAAK,cAAc,IAAI,KAAK,MAAM,IAAI,KAAK,aAAa;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,IAAE,GAAEA,MAAE,KAAK,iBAAe,IAAE,GAAE,IAAE,KAAK,iBAAe,IAAE,GAAE,IAAE;AAAA,MAC99K,EAAE,CAAC;AAAA;AAAA;AAAA,kCAGyB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAOd,KAAK,aAAa;AAAA,4BAC5B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAgFlB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOxC,WAAO,KAAK,SAAO;AAAA,MACnB,CAAC;AAAA,QACD;AAAA,MACA,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,0BAIU,CAAC;AAAA;AAAA,0CAEe,CAAC,aAAaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BA0B5B,KAAK,iBAAe,iCAA+B,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS3G;AAAC;AA/I2gJ,IA+IzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS,2HAA0H,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAe,EAAE,eAAa,gBAAe,KAAK,YAAU,mBAAmB,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACrf,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAyBI,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAepC;AAAC;AAxL2gJ,IAwLzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,wFACa,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAiB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC/T,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuCb;AAAC;AAjO2gJ,IAiOzgJ,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4EACC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAgB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC9S,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,MAAE,GAAE;AAAC,MAAI,IAAE,OAAG;AAAC,YAAO,GAAE;AAAA,MAAC,KAAK;AAAE,eAAM;AAAA,MAA0D,KAAK;AAAE,eAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASnsB;AAAQ,cAAM,IAAI,MAAM,oBAAoB,CAAC,oBAAoB;AAAA,IAAC;AAAA,EAAC,GAAE,IAAE;AAAA,UAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBASO,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA,iBAGL,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DAOwCA,GAAC,IAAI;AAAA;AAAA,eAEpD,GAAGA,GAAC,CAAC;AAAS,SAAM;AAAA,qDACkB,GAAGA,GAAC,CAAC;AAAA,MACpD,CAAC;AAAA;AAAA;AAAA,qDAG8C,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASlD,EAAEA,GAAC,CAAC;AAAA;AAAA,aAEC,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA,+DAG6C,GAAGA,GAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iEAQHA,GAAC;AAAA;AAAA;AAE9D;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,6IAA4I,KAAK,cAAY,EAAE,SAAQ,EAAE,OAAO,EAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAE,KAAK,SAAO,EAAE,aAAW,MAAI,KAAG,EAAE,cAAY,MAAI,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC,CAAC,EAAC,GAAE,KAAK,gBAAc,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,oBAAkB,GAAG,KAAK,gBAAe,KAAK,aAAY,KAAK,MAAM,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,KAAK,iBAAiB,GAAE,KAAK,WAAS,KAAK,kBAAgB,GAAE,KAAK,qBAAmB,CAAC,GAAE,CAAC,IAAG,KAAK,YAAU,oBAAoB,KAAK,MAAM,IAAI,KAAK,iBAAiB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,SAAO,GAAG,KAAK,mBAAkB,KAAK,aAAa,IAAE,GAAG,KAAK,mBAAkB,KAAK,aAAa;AAAE,WAAM;AAAA,MAC15B,IAAI,KAAK,SAAO,IAAE,CAAC,CAAC;AAAA,MACpB,CAAC;AAAA;AAAA,EACF;AAAC;AAAE,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,UAAS,EAAE,WAAW,EAAC,CAAC,GAAE;AAAE,MAAG,EAAE,EAAE,QAAQ,mCAAmC,KAAG,EAAE,eAAa;AAAe,QAAE,IAAI,GAAG,CAAC;AAAA,OAAM;AAAC,QAAE,IAAI,GAAG,CAAC;AAAE,QAAI,IAAE,EAAE,WAAS,EAAE,SAAQ,IAAE,EAAE,YAAW,IAAE,EAAE,eAAa,EAAE,cAAY,EAAE;AAAY,MAAE,KAAK,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,qFAAoF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAa;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAChuC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiFV;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAc,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,IAAE,EAAE,QAAQ,OAAM,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,SAAQ,QAAQ,GAAE,KAAK,WAAS,6BAA4B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAG,CAAC,CAAC,IAAEA;AAAE,SAAK,cAAY,CAAC,GAAE,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,MAAI,aAAW,IAAE,GAAE,KAAK,wBAAsB,KAAK,YAAY,CAAC,IAAE,GAAE,KAAK,uBAAqB,KAAK,YAAY,CAAC,IAAE,GAAE,KAAK,YAAU,iBAAiB,KAAK,QAAQ,IAAI,KAAK,qBAAqB,IAAI,KAAK,oBAAoB;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAG,CAAC,GAAEA,GAAC,IAAE,CAAC,mCAAkC,iCAAiC,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,wBAAsB,CAAC,IAAI,CAAC,qCAAoC,0BAAyB,MAAM,CAAC,0BAA0B,IAAE,CAAC,OAAM,OAAM,mBAAmB,CAAC,EAAE,GAAE,CAAC,GAAE,GAAE,CAAC,IAAE,KAAK,uBAAqB,CAAC,IAAIA,GAAC,qCAAoC,yBAAwB,MAAMA,GAAC,yBAAyB,IAAE,CAAC,OAAM,OAAM,mBAAmBA,GAAC,EAAE;AAAE,WAAM;AAAA,MACz6F,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,iCAGiB,CAAC;AAAA,gCACF,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAeJ,CAAC;AAAA,4BACF,CAAC;AAAA,qBACR,CAAC;AAAA,mCACa,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIf,CAAC;AAAA,mCACaA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,aAKvB,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBrB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,QAAO,GAAE,oBAAmB,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAvO,IAAyO,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI;AAAA,CAAI,SAASD,KAAE;AAAC,EAAAA,IAAE,OAAK,KAAIA,IAAE,MAAI;AAAG,GAAG,OAAK,KAAG,CAAC,EAAE;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEC,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,gBAAe,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,GAAE,KAAK,UAAQ,GAAE,KAAK,KAAG,GAAE,KAAK,YAAU,OAAO,KAAK,EAAE,IAAI,KAAK,SAAS,IAAI,KAAK,OAAO;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,YAAY,QAAOA,MAAE,KAAK,OAAK,GAAG,OAAK,QAAM,OAAM,IAAE,KAAK,YAAUA,MAAE,QAAQ,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC,KAAI,IAAE,KAAK,YAAY,KAAK,YAAY,SAAO,CAAC,GAAE,IAAE,IAAG,IAAE;AAAG,WAAO,KAAK,aAAW,IAAE,KAAK,UAAQ,UAAU,IAAE,CAAC,KAAG,YAAW,IAAE,KAAK,UAAQ,YAAU,cAAY,IAAE,KAAK,UAAQ,gBAAgB,CAAC,KAAG,eAAc,IAAE,KAAK,UAAQ,eAAa,eAAc;AAAA,QACpkC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,qBAIG,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,qBACtB,CAAC;AAAA;AAAA,eAEP,CAAC;AAAA,uBACO,CAAC;AAAA,aACX,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA,iBAClB,KAAK,EAAE,UAAU,GAAG,GAAE,UAAS,KAAK,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnD;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAG,CAAC;AAAG,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;AAAK,QAAM,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE;AAAC,MAAGD,QAAI;AAAE,WAAM,GAAG,CAAC;AAAG,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,MAAGA,QAAI;AAAE,WAAM,GAAG,CAAC;AAAK,QAAM,MAAM,cAAcC,GAAC,aAAaD,GAAC,uBAAuB;AAAC;AAAC,SAAS,GAAGA,KAAE,GAAEC,KAAE,GAAE,GAAE,GAAE;AAAC,MAAI,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAG,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAE,MAAG,MAAI,IAAE;AAAE,UAAM,IAAI,MAAM,oDAAoD,EAAE,MAAM,SAAO,CAAC,iBAAiB,CAAC,EAAE;AAAE,MAAI,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAQ,IAAE,GAAE,KAAG,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,IAAE,GAAE,KAAI;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,OAAG,CAAC,GAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,GAAE;AAAC,QAAI,IAAE,IAAI,GAAGD,KAAE,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,QAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,MAAG,KAAG,MAAK;AAAC,QAAI,IAAE,EAAE,uBAAuB,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,MAAK,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,GAAE,SAAQ,EAAC,IAAE;AAAE,SAAO,GAAG,GAAG,KAAI,GAAEC,KAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,cAAa,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,WAAS,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,IAAE,CAAC,EAAE,MAAM,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,IAAE,CAAC,CAAC,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAE,CAAC,GAAE,CAAC,IAAE,CAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,WAAS,oBAAmB,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,gBAAgBA,GAAC,IAAG,KAAK,aAAWA;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzwE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,oBAIE,KAAK,qBAAqB,CAAC;AAAA,oBAC3B,KAAK,oBAAoB,CAAC;AAAA,oBAC1B,KAAK,oBAAoB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAOhC,KAAK,mBAAmB,CAAC;AAAA;AAAA;AAAA,sBAGjB,KAAK,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAG3C;AAAA,EAAC,uBAAsB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,sBAAqB;AAAC,WAAO,KAAK,eAAa,SAAO,cAAY;AAAA,EAAW;AAAA,EAAC,qBAAoB;AAAC,WAAO,KAAK,eAAa,SAAO,yBAAuB;AAAA,EAAsB;AAAA,EAAC,yBAAwB;AAAC,WAAO,KAAK,eAAa,SAAO,8BAA4B;AAAA,EAA2B;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,MAAI,SAAO,EAAE,MAAM,CAAC,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAG,IAAE,MAAI,SAAO,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,IAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,yCAAwC,KAAK,gBAAc,CAAC,IAAG,IAAG,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,UAAQ,GAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,eAAaA,KAAE,KAAK,cAAY,GAAE,KAAK,YAAU,iBAAiB,KAAK,UAAU,IAAI,KAAK,YAAY,IAAI,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAY,KAAK,cAAaA,MAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAc,CAAC,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,eAAa,GAAE,IAAE,KAAK,cAAc,CAAC,IAAE,KAAK,cAAY;AAAE,WAAM;AAAA,QAC1mD,GAAG,KAAK,YAAW,KAAK,oBAAmB,OAAG,CAAC,CAAC;AAAA;AAAA,kDAEN,CAAC,MAAM,CAAC;AAAA,kDACR,KAAK,WAAW,MAAM,KAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUjF,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAewC,CAAC,2BAA2B,KAAK,cAAc,CAAC,CAAC;AAAA,qDAC/C,CAAC,2BAA2B,KAAK,cAAc,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAS5F,IAAEA,MAAE,gBAAgB,CAAC,MAAI,kBAAkB,CAAC,uBAAuBA,GAAC,GAAG;AAAA;AAAA;AAAA,gCAGjD,KAAK,WAAW;AAAA,gCAChB,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAOhB,KAAK,YAAY;AAAA,kCACf,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMxC,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,6DAA4D,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,gBAAc,GAAE,KAAK,kBAAgB,GAAE,KAAK,cAAY,EAAE,UAAS,KAAK,eAAa,KAAK,KAAK,KAAK,YAAY,CAAC,IAAE,KAAK,aAAa,IAAE,KAAK;AAAc,QAAI,IAAE,CAAC,KAAK,YAAY,CAAC,GAAE,KAAK,YAAY,CAAC,GAAE,KAAK,cAAa,KAAK,YAAY,CAAC,CAAC;AAAE,SAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,eAAc,CAAC,KAAK,kBAAgB,KAAK,eAAc,GAAE,CAAC,CAAC,GAAE,EAAE,OAAO,EAAE,eAAa,gBAAe,MAAI,6BAA6B,GAAEA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,YAAU,iBAAiB,CAAC,IAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,WAAW,IAAI,KAAK,aAAa;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,KAAG,KAAK,gBAAc,KAAG,KAAK,SAAS,cAAY,KAAK,SAAS,aAAYA,MAAE,KAAK,SAAS,cAAa,IAAE,KAAK,SAAS;AAAY,WAAM;AAAA,QACjmC,GAAG,KAAK,YAAW,KAAK,oBAAmB,MAAG,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAShD,EAAE,OAAO,CAAC;AAAA,8CAC4B,KAAK,eAAe;AAAA,sCAC5B,KAAK,eAAe;AAAA;AAAA,+CAEX,KAAK,aAAa;AAAA,sCAC3B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,sDAKFA,GAAC,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,uCAItB,CAAC;AAAA,yCACC,KAAK,aAAa;AAAA,8BAC7B,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,gCAKhB,KAAK,SAAS,YAAY;AAAA;AAAA;AAAA,kCAGxB,CAAC;AAAA;AAAA;AAAA,oCAGC,KAAK,SAAS,WAAW;AAAA;AAAA,oCAEzB,KAAK,aAAa;AAAA,6CACT,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMhB,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA,cAIlC,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzC;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,MAAE,OAAG,IAAE,MAAK,IAAE,OAAG;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS;AAAA,uEAC1B,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,iBAAe,EAAE,eAAa,gBAAeA,OAAG,KAAK,cAAc,KAAK,MAAM,GAAE,KAAG,KAAK,cAAc,KAAK,wBAAwB,GAAE,KAAK,WAAS,GAAE,KAAK,UAAQA,KAAE,KAAK,aAAW,GAAE,KAAK,qBAAmB,GAAE,KAAK,YAAU,aAAa,KAAK,UAAU,IAAI,KAAK,cAAc;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,iBAAe,6BAA2B;AAA2B,WAAM;AAAA,QACnnB,GAAG,KAAK,YAAW,KAAK,oBAAmB,OAAG,CAAC,CAAC;AAAA;AAAA,QAEhD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,6CAI2B,KAAK,iBAAe,OAAK,IAAI;AAAA,4BAC9C,KAAK,iBAAe,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BA4BpB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAoBD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAMlB,GAAG,KAAK,SAAQ,KAAK,UAAU,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIzC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC;AAAG,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,MAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,CAAC,GAAE,IAAE,EAAE,eAAa,gBAAe;AAAE,SAAM,CAAC,KAAG,EAAE,WAAS,MAAI,EAAE,UAAQ,MAAI,EAAE,iBAAe,KAAG,EAAE,gBAAc,KAAG,EAAE,kBAAgB,KAAG,EAAE,mBAAiB,KAAG,EAAE,eAAa,EAAE,cAAY,IAAE,IAAI,GAAG,EAAE,UAAS,EAAE,cAAa,EAAE,WAAW,IAAE,KAAG,EAAE,YAAU,KAAG,EAAE,WAAS,KAAG,EAAE,eAAa,KAAG,EAAE,eAAa,EAAE,eAAa,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,aAAW,MAAI,KAAG,IAAE,IAAI,GAAG,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,CAAC,MAAI,IAAE,IAAI,GAAG,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,IAAGC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,IAAI,GAAE,KAAK,WAAS;AAAA,0FACtiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAkC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAChV,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkCb;AAAC;AApCijC,IAoC/iC,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,GAAG,GAAE,KAAK,WAAS;AAAA,4DACjB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAiC;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC7S,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyCb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,EAAE,UAAU,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,KAAI,GAAE,iBAAgB,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,eAAa,IAAE,EAAE,QAAQ,KAAI,EAAE,cAAY,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAY,EAAE,UAAU,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAE,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC1/C,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,IAAE,CAAC,GAAG,EAAE,OAAM,GAAG,EAAE,KAAK,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,GAAG,GAAE,KAAK,WAAS,oFAAmF,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,UAAS,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAC1uB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+Bb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,GAAG,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,EAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,EAAE,UAAS,KAAK,aAAa,GAAEA,QAAI,aAAWA,QAAI;AAAQ,YAAM,IAAI,MAAM;AAAA,oCACz1BA,GAAC,QAAQ;AAAE,SAAK,OAAKA,KAAE,KAAK,YAAU;AAAA,EAAyB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAC/G,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAuCN,GAAG,wBAAuB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGnD;AAAC;AA5C8e,IA4C5e,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,gBAAc,CAAC,KAAI,KAAI,IAAI,GAAE,KAAK,WAAS,kGAAiG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,EAAE,aAAY,KAAK,iBAAe,EAAE,EAAE,QAAQ,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,EAAE,UAAS,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI;AAAQ,YAAM,IAAI,MAAM;AAAA,oCAC/W,CAAC,QAAQ;AAAE,SAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAA0B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,SAChH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAsCN,GAAG,wBAAuB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGnD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,sBAAsB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,QAAO,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAE,SAAQ,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,WAAS,eAAc,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,eAAa,GAAG,MAAK,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAKA,KAAE,KAAK,gBAAc,GAAE,KAAK,YAAU,QAAQA,GAAC,IAAI,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA,MAAE,KAAK,SAAO,YAAU,UAAQ;AAAgB,WAAO,IAAE;AAAA;AAAA,oBAErmDA,GAAC;AAAA,oBACDA,GAAC;AAAA,oBACDA,GAAC;AAAA;AAAA,oBAEDA,GAAC;AAAA,UACZ;AAAA,iEACwD,KAAK,aAAa;AAAA,SAC1E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,eAKJ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,MAAM,MAAM,GAAE,CAAC,GAAE,EAAC,cAAa,EAAC,IAAE,KAAG,CAAC,GAAE,KAAG,KAAG,OAAK,SAAO,EAAE,UAAQ,GAAE,IAAEC,IAAE,OAAO,SAAS,IAAI,oBAAoB,IAAE,eAAa,cAAa,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,EAAE,OAAM,CAAC;AAAE,IAAE,QAAM,GAAE,EAAE,SAAO;AAAE,MAAI,IAAE,UAAS,IAAE,EAAE,WAAW,CAAC,GAAE;AAAE,QAAI,IAAE,IAAI,gBAAgB,GAAE,CAAC,GAAE,IAAE,EAAE,WAAW,CAAC;AAAG,MAAI,IAAE,EAAE,MAAM,WAAS,IAAE,EAAE,MAAM,CAAC,IAAE;AAAE,IAAE,UAAU,EAAC,QAAOA,IAAE,QAAO,QAAO,GAAE,OAAM,gBAAgB,iBAAgB,WAAU,gBAAe,CAAC;AAAE,MAAI,IAAE,SAAQ,IAAEA,IAAE,eAAe,GAAE,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,IAAE,WAAS,EAAE,kBAAkB,GAAE,EAAE,WAAS;AAAG,MAAI,IAAE,CAAC,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,GAAE;AAAC,QAAI,IAAE,EAAE,WAAW,IAAI;AAAE,QAAG,CAAC;AAAE,YAAM,IAAI,MAAM,2EAA2E;AAAE,MAAE,UAAU,GAAE,GAAE,CAAC;AAAA,EAAC;AAAC,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA7D,IAA+D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,UAAS,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,SAAQ,GAAE,YAAW,GAAE,QAAO,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,MAAM;AAAE,IAAE,oBAAoB,EAAE,QAAO,GAAE,CAAC;AAAE,MAAG,EAAC,MAAK,GAAE,OAAM,EAAC,IAAE,EAAE,qBAAqB,GAAE,CAAC,GAAE,IAAE,EAAE,QAAO,IAAE,MAAK,IAAE,EAAE,QAAO,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,EAAE,GAAE;AAAC,aAAQ,KAAK,EAAE,CAAC,GAAE;AAAC,UAAG,EAAC,oBAAmB,GAAE,YAAW,EAAC,IAAE,EAAE,qBAAqB,GAAE,EAAE,CAAC,CAAC,GAAE;AAAE,QAAE,sBAAsB,CAAC,IAAE,IAAE,EAAE,CAAC,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAG,UAAI,IAAE,EAAE,MAAM,MAAM;AAAE,eAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,EAAE;AAAE,UAAE,OAAO,EAAE,CAAC,GAAE,GAAE,CAAC;AAAE,QAAE,YAAY,EAAE,OAAM,CAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG,MAAI,OAAK,IAAE,KAAG,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,EAAE,KAAK,CAAC;AAAA,IAAE;AAAC,QAAE,IAAE,MAAI,EAAE,CAAC,KAAG,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAE,CAAC,KAAG,EAAE,SAAO,IAAG,UAAS,MAAE,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,IAAG;AAAA,EAAI;AAAC,WAAQ,KAAK;AAAE,UAAI,KAAGA,IAAE,YAAY,EAAE,MAAM;AAAE,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,IAAG,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAG,SAAQ,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAC;AAAlI,IAAoI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,OAAM,OAAM,QAAO,eAAc,GAAE,CAAC;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,IAAG,OAAM,UAAS,CAAC;AAA1D,IAA4D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,OAAMC,KAAE,SAAQ,EAAC,IAAED,KAAE,EAAC,KAAI,EAAC,IAAEC,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,MAAM,GAAE,IAAE;AAAE,SAAO,IAAE,MAAI,EAAE,OAAO,EAAE,IAAE,MAAI,GAAE,MAAI,iCAAiC,EAAE,IAAE,EAAE,KAAK,CAAC,GAAG,GAAE,IAAE,IAAE,IAAE,IAAG,EAAE,OAAO,GAAE,GAAE,CAAC,GAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQ,GAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,QAAO,MAAM,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,+CAA8C,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,GAAE,KAAK,YAAU,OAAO,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA,QAEp8G,KAAK,cAAY,SAAO,sCAAoC,mCAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBjG,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE;AAAC,MAAI,IAAEA,IAAE,UAAU,IAAID,IAAE,MAAM,GAAE,IAAE,EAAE,cAAcA,IAAE,KAAK,GAAE,IAAEA,IAAE,MAAMA,IAAE,MAAM,SAAO,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAEA,IAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,IAAI,GAAG,QAAO,CAAC,GAAE,IAAE,IAAI,GAAG,QAAO,CAAC,GAAE,IAAE,CAAC,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,GAAE,EAAC,QAAO,EAAE,mBAAmB,KAAK,QAAO,OAAM,EAAE,mBAAmB,KAAK,OAAM,OAAM,EAAC,CAAC,GAAE,IAAE,IAAE,IAAE,KAAK,KAAG,KAAG,KAAK,IAAG,IAAE,IAAE,EAAE,CAAC,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAMD,IAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGC,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAe;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACnqC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,OAAMC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,KAAK;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,WAAU,eAAc,IAAG,OAAM,QAAO,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,IAAE,OAAG;AAAC,SAAK,eAAa,GAAG,aAAY,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAACA,KAAE,GAAE,CAAC,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,YAAU,cAAc,KAAK,WAAW;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,cAAY,4CAA0C;AAA4C,WAAM;AAAA,uCACzzB,KAAK,cAAY,qBAAmB,iBAAiB;AAAA,QACpF,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,yBAIO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvB;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAzD,IAA2D;AAA3D,IAA8D,KAAG,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE;AAAE,MAAG,KAAG;AAAK,UAAM,IAAI,MAAM,0DAA0D;AAAE,MAAI,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,oBAAkB,eAAa,aAAa,kBAAiB,IAAE,OAAO,qBAAmB,eAAa,aAAa,qBAAmB,OAAO,mBAAiB,eAAa,aAAa,iBAAgB,IAAE,OAAO,eAAa,eAAa,aAAa,aAAY,CAAC,GAAE,CAAC,IAAE,IAAE,CAAC,EAAE,YAAW,EAAE,WAAW,IAAE,CAAC,EAAE,OAAM,EAAE,MAAM,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,EAAE,QAAQ,gCAAgC,KAAG,GAAE,IAAE,KAAG;AAAE,MAAG,KAAG,KAAG,GAAE;AAAC,QAAI;AAAE,QAAG;AAAE,UAAEC,IAAE,OAAO,sBAAsB,EAAC,QAAO,EAAC,CAAC;AAAA,SAAM;AAAC,UAAG,GAAE;AAAC,YAAI,IAAE,EAAE,EAAE,QAAQ,uCAAuC;AAAE,SAAC,MAAI,QAAM,MAAI,QAAM,KAAG,GAAE,KAAG,SAAS,cAAc,QAAQ,EAAE,WAAW,MAAK,EAAC,oBAAmB,GAAE,CAAC,IAAG,GAAG,OAAO,QAAM,GAAE,GAAG,OAAO,SAAO,GAAE,GAAG,UAAU,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG;AAAA,MAAM;AAAC,UAAI,IAAE,gBAAgB,WAAS,gBAAgB,oBAAkB,gBAAgB,iBAAgB,IAAEA,IAAE,eAAe,eAAe,EAAE,CAAC,GAAE,EAAE,CAAC,GAAE,cAAa,CAAC;AAAE,MAAAA,IAAE,MAAM,2BAA2B,EAAC,QAAO,EAAC,GAAE,EAAC,SAAQ,EAAC,GAAE,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,CAAC,GAAE,IAAE;AAAA,IAAC;AAAC,QAAI,IAAE,EAAE,cAAc,CAAC,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,UAAS,MAAK,CAAC,GAAG,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,eAAe,CAAC,GAAE,CAAC,GAAE,OAAO,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM;AAAE,MAAE,WAAS;AAAE,QAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAC,MAAI,IAAE,EAAE,MAAK,IAAE;AAAE,MAAG,KAAG,QAAM,MAAI,GAAE;AAAC,QAAE,IAAI,WAAW,EAAE,QAAM,EAAE,SAAO,CAAC;AAAE,QAAI,IAAE,EAAE,QAAO,IAAE;AAAE,aAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAE,IAAE,MAAI,EAAE,GAAG,IAAE,EAAE,CAAC;AAAA,EAAE;AAAC,MAAI,IAAEA,IAAE,eAAe,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE;AAAC,SAAK,WAAS,0BAAyB,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,gBAAc,CAAC,KAAI,QAAO,UAAU,GAAE,EAAE,2BAA2B,GAAEA,GAAC,GAAE,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,QAAQ,IAAG,KAAG,SAAO,EAAE,2BAA2B,GAAE,CAAC,GAAE,KAAK,cAAc,KAAK,OAAO,IAAG,KAAK,cAAY,GAAE,KAAK,aAAW,GAAE,KAAK,YAAU;AAAA,EAAW;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE;AAAM,SAAK,eAAa,SAAO,IAAE;AAAiC,QAAIA,MAAE;AAAM,WAAO,KAAK,cAAY,SAAOA,MAAE,iCAAgC;AAAA,QAC3/E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMY,CAAC;AAAA,6BACFA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3B;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,GAAE,OAAM,GAAE,QAAO,GAAE,MAAK,GAAE,UAAS,EAAC,IAAED,KAAE,EAAC,iBAAgB,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE;AAAK,OAAG,SAAO,IAAE,EAAE,OAAM,EAAE,KAAK,CAAC;AAAG,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,OAAM,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE,EAAE,wBAAwB,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,OAAG,CAAC;AAAE,SAAO,GAAG,EAAC,GAAE,GAAE,QAAO,GAAE,UAAS,GAAE,SAAQC,KAAE,MAAK,GAAE,wBAAuB,GAAE,gBAAe,GAAE,YAAW,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,QAAO,GAAE,MAAK,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,SAAQ,GAAE,KAAI,GAAE,WAAU,GAAE,iBAAgB,GAAE,YAAW,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,CAAC,GAAE,CAAC,IAAG,EAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,gFAAgF,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,IAAE,GAAE,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,KAAG,MAAK,IAAE,KAAG;AAAK,OAAG,EAAE,KAAK,CAAC,GAAE,KAAG,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,CAAC,GAAE;AAAE,SAAO,EAAE,YAAU,KAAG,EAAE,WAAS,KAAG,EAAE,eAAa,KAAG,EAAE,eAAa,EAAE,eAAa,EAAE,mBAAiB,KAAG,EAAE,kBAAgB,KAAG,EAAE,aAAW,MAAI,KAAG,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,CAAC,MAAI,IAAE,IAAI,GAAG,GAAE,GAAE,GAAE,CAAC,GAAE,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,YAAY,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,CAAC,IAAG,MAAI,gBAAc,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,EAAE,YAAU,kBAAiBC,IAAE,iBAAiB,GAAE,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU,YAAY,CAAC,IAAG,KAAK,WAAS,GAAE,KAAK,WAAS,6BAA6B,GAAG,CAAC,CAAC;AAAA,EAAG;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,WAAO,KAAK,WAAS,IAAE,IAAE,wBAAsB,IAAE,oBAAmB;AAAA,QAC31E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAMY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,mBAAmB,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,KAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,OAAM,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,MAAM,GAAE,KAAK,SAAO,GAAE,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAI,KAAK,MAAM;AAAE,WAAM;AAAA,QACjlC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,oDAKkC,CAAC;AAAA;AAAA;AAAA;AAAA,EAGhD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAEC,MAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,IAAE,QAAO;AAAI,UAAI,IAAEC,IAAE,KAAK,QAAQ,IAAEA,IAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,SAAOA,IAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,WAAU,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,aAAa,yBAAyB,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,EAAE,WAAU,EAAE,SAAQ,EAAE,SAAS,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,WAAU,IAAE,EAAE,SAAS,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC,GAAE,EAAE,KAAK,CAAC;AAAE,MAAI,IAAE,CAAC,EAAE,WAAU,EAAE,WAAU,IAAE,EAAE,WAAU,EAAE,SAAS;AAAE,MAAGA,IAAE,mBAAmB,CAAC,GAAE,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE,QAAO,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,CAAC;AAAE,WAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAEA,IAAE,eAAe,EAAE,aAAY,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,KAAK;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,YAAW,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,SAAQ,eAAc,IAAG,OAAM,OAAM,CAAC;AAA5D,IAA8D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,eAAc,OAAM,QAAO,eAAc,GAAE,CAAC;AAAlE,IAAoE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,WAAU,OAAM,OAAM,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,OAAM,OAAM,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,OAAM,OAAM,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,WAAU,cAAc;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,MAAK,OAAM,QAAO,eAAc,GAAE,CAAC;AAAzD,IAA2D,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,YAAW,OAAM,QAAO,eAAc,GAAE,CAAC;AAA/D,IAAiE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,4BAA2B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC1hF,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,KAAI,EAAC,IAAEC,KAAE,KAAG,IAAE,MAAI,IAAE,IAAG,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,eAAc,GAAE,CAAC;AAA1C,IAA4C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,aAAY,OAAM,OAAM,CAAC;AAA/C,IAAiD,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,YAAW,CAAC;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,WAAU,CAAC;AAAjC,IAAmC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAP,IAUptB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC1V,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAiBN,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT;AAAC;AAjCktB,IAiChtB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,sDAAqD,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,iBAAe,IAAG,EAAE,OAAOA,OAAG,KAAK,gBAAe,MAAI,wCAAwC,KAAK,cAAc,uBAAuBA,GAAC,EAAE,GAAE,KAAK,cAAY,GAAE,KAAK,uBAAqB,KAAK,cAAc,CAAC,IAAE,IAAE,KAAK,gBAAe,KAAK,iBAAe,EAAC,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC,GAAE,CAAC,EAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,CAAC,KAAK,sBAAqB,KAAK,cAAc,CAAC,GAAE,KAAK,cAAc,CAAC,CAAC,CAAC,GAAE,KAAK,YAAU;AAAA,EAAY;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,wCACxkB,KAAK,cAAc,CAAC,CAAC;AAAA,mCAC1B,KAAK,oBAAoB;AAAA,6BAC/B,KAAK,cAAc;AAAA;AAAA,MAE1C,EAAE,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAuBC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAIL;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE;AAAE,MAAE,KAAG,IAAE,IAAI,GAAG,EAAE,KAAK,IAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,cAAa,eAAc,IAAI,GAAE,KAAK,WAAS,2DAA0D,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAU;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAC/uB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,GAAE,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,aAAY,GAAE,MAAK,GAAE,OAAM,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,GAAG,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,YAAW,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,yCACxwC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC5Q,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2Cb;AAAC;AA7C6tC,IA6C3tC,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,MAAK,QAAQ,GAAE,KAAK,WAAS;AAAA,wDAC1B,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,EAAE,SAAQ,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC3R,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,GAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,CAAC,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,OAAM,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAQ,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,aAAY,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAqB,IAAE,EAAE,QAAQ,OAAM,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,sBAAqB,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,IAAG,GAAE,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE;AAAE,KAAG,CAAC,GAAE,CAAC,GAAE,aAAa;AAAE,MAAG,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,iBAAgB,EAAC,IAAE,GAAE,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC;AAAE,MAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,wBAAsB,IAAE,EAAE,QAAQ,KAAI,EAAE,uBAAqB,IAAE,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,SAAS,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,YAAW,GAAE,SAAQ,GAAE,KAAI,GAAE,qBAAoB,EAAC,IAAE,GAAE,EAAC,GAAE,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,WAAS,GAAE,MAAI,uDAAuD,EAAE,MAAM,MAAM,GAAG;AAAE,MAAI,IAAE,CAAC,GAAE,CAAC;AAAE,IAAE,OAAO,EAAE,+BAA+B,GAAE,CAAC,GAAE,MAAI,wEAAwE,CAAC,mBAAmB,CAAC,GAAG;AAAE,MAAI,IAAE,EAAE,kBAAkB,EAAE,OAAM,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAa,EAAE,WAAW,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,QAAQ,KAAI,EAAE,QAAQ,IAAI,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,gBAAe,EAAE,aAAa,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,UAAS,EAAE,OAAO,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,uBAAsB,EAAE,oBAAoB,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,OAAM,KAAE,GAAE,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,OAAM,MAAG,MAAG,CAAC;AAAE,MAAI,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAM,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAMC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,GAAE,CAAC;AAA3C,IAA6C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,SAAO,GAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,SAAO,MAAI,YAAU,IAAE,GAAE,KAAK,YAAU,aAAa,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,OAAO,QAAOA,MAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAE,KAAK,OAAO,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwB,IAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAE,MAAI,IAAE,UAAQ,YAAW,IAAE,MAAI,IAAE,QAAM,UAAS,IAAE,MAAI,IAAE,SAAO,WAAU,IAAE,GAAG,CAAC,GAAE,IAAE,IAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAE,CAAC,IAAE;AAAS,WAAM;AAAA,QAC36H,EAAE,OAAO,CAAC;AAAA;AAAA,wBAEM,CAAC,IAAIA,GAAC;AAAA,sBACR,CAAC,IAAI,CAAC;AAAA;AAAA,gCAEI,CAAC;AAAA,kBACf,CAAC,MAAM,CAAC;AAAA,gBACV,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM;AAAA,wBAC5B,CAAC,OAAO,CAAC;AAAA,gBACjB,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,yCAIjB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,EAAC,UAAS,GAAE,MAAK,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,EAAE,IAAI,QAAI,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,EAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,OAAO,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,iCAAgC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAa;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWjqB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBb;AAAC;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,QAAQ,GAAE,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,CAAC,KAAK,YAAY,CAAC,GAAE,GAAE,CAAC,GAAE,KAAK,YAAY,CAAC,KAAG,OAAK,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,IAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,YAAU;AAAA,EAAS;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,sCAC7P,KAAK,cAAc,CAAC,CAAC;AAAA;AAAA;AAAA,wBAGnC,KAAK,cAAc,CAAC,CAAC;AAAA,MACvC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsDX;AAAC;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,KAAI,EAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,EAAE,cAAc,EAAE,KAAK,IAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,KAAK,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAE,IAAE,IAAE,GAAG,EAAC,QAAO,EAAC,QAAO,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAE,MAAM,SAAO,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,SAAQ,CAAC;AAAE,SAAO,KAAGA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,UAAU,IAAI,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,EAAE,QAAO,EAAE,OAAM,EAAE,KAAK;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,GAAG;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,UAAQ,KAAK,gGAAgG;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,EAAC,iBAAgB,EAAC,IAAE,GAAG,wBAAwB,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAOA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,UAAQ,KAAK,gGAAgG;AAAE,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,cAAa,GAAE,gBAAe,GAAE,cAAa,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,IAAE,GAAE,EAAC,iBAAgB,GAAE,gBAAe,EAAC,IAAE,GAAG,wBAAwB,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,SAAQ,IAAI,WAAW,CAAC,CAAC,GAAEA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,WAAU,IAAI,aAAa,CAAC,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,kCAAiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,GAAEA,GAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC/4E,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,OAAM,GAAE,SAAQ,GAAE,UAAS,EAAC,IAAE,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,CAAC,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,GAAE,CAAC;AAAE,EAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,CAAC,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAE,UAAQ,WAAS,KAAG,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE;AAAE,MAAG,EAAE,UAAQ;AAAS,UAAM,IAAI,MAAM,8CAA8C;AAAE,MAAG,EAAE,UAAQ,aAAY;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQC,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,MAAK,GAAE,MAAK,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAE,WAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAA,EAAC;AAAM,WAAO,GAAG,EAAC,OAAM,EAAC,OAAM,EAAE,OAAM,OAAM,EAAE,OAAM,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAG,EAAE,WAAS;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,OAAM,EAAE,CAAC,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,CAAC,EAAE,OAAM,IAAE,EAAE,CAAC,EAAE;AAAM,IAAE,QAAQ,OAAG;AAAC,MAAE,kBAAkB,GAAE,EAAE,OAAM,uDAAuD,GAAE,EAAE,OAAO,MAAI,EAAE,OAAM,MAAI,uDAAuD;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,OAAM,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,KAAI,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,KAAK,CAAC,GAAE;AAAA,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,GAAGD,KAAE,IAAE,OAAG;AAAC,MAAIC,MAAED,IAAE,QAAO,IAAE,GAAGC,GAAC,GAAE,IAAED,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,GAAE,IAAEA,IAAE,IAAI,CAAC,GAAE,MAAI,eAAe,CAAC,wBAAwBC,MAAE,IAAE,IAAI,CAAC,MAAI,EAAE,EAAE,EAAE,KAAK,GAAG,GAAE,IAAEA,MAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAEA,MAAE,IAAE,GAAG,CAAC,IAAI,CAAC,MAAI,GAAG,CAAC,IAAG,IAAEA,MAAE,IAAE,8BAA4B,wBAAuB,IAAEA,MAAE,IAAE,6BAA2B,uBAAsB,IAAEA,MAAE,IAAE,CAAC,aAAY,aAAY,aAAY,WAAW,EAAE,MAAM,GAAEA,GAAC,IAAE;AAAS,SAAM;AAAA,sBACp/E,CAAC;AAAA,oBACH,CAAC;AAAA,cACP,CAAC,OAAO,CAAC;AAAA,oCACa,IAAE,IAAE,wBAAwB;AAAA;AAAA;AAAA,yCAGvB,CAAC;AAAA;AAAA;AAEvC;AAAC,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,wBAAuB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,IAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAEA,IAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,SAAO,GAAE,KAAK,YAAU;AAAA,EAAK;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC9Y,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,YAGN,GAAG,KAAK,MAAM,CAAC;AAAA;AAAA;AAAA;AAAA,EAGtB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,UAAS,GAAE,eAAc,EAAC,IAAE;AAAE,MAAG,EAAE,MAAM,OAAG,EAAE,YAAY,GAAE,CAAC,GAAE,CAAC,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAG,EAAE,cAAc,EAAE,KAAK,MAAI,GAAE;AAAC,QAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC;AAAE,WAAO,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAE,MAAK,EAAC,CAAC;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,IAAE,IAAI,OAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAAE,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAA5b,IAA8b,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,GAAE,GAAE,OAAM,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,GAAG,OAAM,EAAE,OAAM,EAAE,KAAK;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAS;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,UAAS,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,QAAOC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,SAAQ,GAAE,OAAMC,IAAC,IAAED,KAAE,EAAC,OAAM,GAAE,MAAK,GAAE,MAAK,GAAE,OAAM,EAAC,IAAEC,KAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAE,GAAE,CAAC;AAAC;AAA5H,IAA8H,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,IAAG,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,WAAU,CAAC;AAAhC,IAAkC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,0DAAyD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,EAAE,CAAC,GAAEA,KAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAgB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzyD,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0Cb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,MAAK,GAAE,kBAAiB,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,MAAG,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,qFACrU,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,0BAA0BA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QAC9U,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyEb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,WAAS,mDAAkD,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,CAAC,EAAE,CAAC,GAAEA,KAAE,GAAE,EAAE,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,mBAAiB,GAAE,KAAK,YAAU,iBAAiB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI;AAAE,WAAO,KAAK,mBAAiB,IAAE,4FAA0F,IAAE,mDAAkD;AAAA,QAChnC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAmBkB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWhC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,EAAC,IAAE,GAAE,EAAC,cAAa,GAAE,kBAAiB,GAAE,MAAK,EAAC,IAAE,GAAE,CAAC,GAAE,CAAC,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,KAAG,IAAE,IAAE,IAAE,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,GAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,IAAE,MAAG,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,IAAI,GAAE,KAAK,WAAS;AAAA,0CAChX,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,gCAAgCA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,QACzS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA0CE,KAAK,eAAa,+BAA6B,sBAAsB;AAAA;AAAA;AAAA;AAAA,oBAIrE,KAAK,eAAa,+BAA6B,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYpF;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,IAAG,EAAC,IAAE,GAAE,EAAC,cAAa,EAAC,IAAE,GAAE,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,EAAC,GAAE,CAAC,IAAE,EAAE,OAAM,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,CAAC,KAAG,IAAE,IAAE,IAAE,IAAE,GAAE,KAAG,IAAE,IAAE,IAAE,IAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,EAAE,CAAC,IAAE,EAAE,CAAC,GAAE,IAAE,IAAE,GAAE,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,KAAK,KAAK,CAAC,IAAE,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,sBAAqB,KAAK,YAAU;AAAA,EAAS;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAsB3zB,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM;AAAO,MAAG,MAAI;AAAE,WAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,IAAC,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,CAAC,GAAE,MAAI;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,IAAE,QAAQ,OAAG;AAAC,QAAI,IAAE,IAAE,IAAE;AAAE,MAAE,CAAC,IAAE;AAAA,EAAC,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,EAAAA,IAAE,YAAY,EAAE,MAAM;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS;AAAA,8BAC5yB,KAAK,YAAU,UAAS,KAAK,cAAY,GAAE,OAAOA,OAAG,YAAU,KAAK,YAAU,qBAAoB,KAAK,cAAY,yCAAwC,KAAK,aAAW,aAAW,KAAK,YAAU,2BAA0B,KAAK,cAAY,oDAAmD,KAAK,aAAW;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UACnW,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAWN,KAAK,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQvB;AAAC;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,MAAI;AAAC,MAAG,EAAC,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,WAAU,GAAE,QAAO,EAAC,IAAE,GAAE,IAAEC,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC,GAAE,CAAC,GAAE,CAAC,IAAE,EAAE,eAAe,GAAE,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAC,CAAC;AAAE,SAAO,OAAO,KAAG,WAAS,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAC,CAAC,IAAE,EAAE,KAAK,EAAC,MAAK,WAAU,MAAK,EAAC,CAAC,GAAE,EAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,MAAK,CAAC;AAA3B,IAA6B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,OAAM,eAAc,GAAE,CAAC;AAA5C,IAA8C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE,GAAE,IAAE,MAAG;AAAC,SAAK,gBAAc,CAAC,WAAU,SAAS,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,GAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,KAAK,yBAAuBA,MAAE,GAAE,KAAK,YAAU,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM;AAAG,QAAI,IAAE,GAAG,EAAE,MAAM;AAAE,SAAK,WAAS,4BAA4B,CAAC,uBAAsB,KAAK,cAAY,GAAE,KAAK,cAAY;AAAA,EAAC;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE;AAAG,SAAK,gBAAc,IAAE,IAAE,cAAY,KAAK,gBAAc,MAAI,IAAE;AAAgB,QAAIA,MAAE,cAAc,CAAC,KAAI,IAAE,KAAK,yBAAuB,wBAAsB,oBAAmB,IAAE,IAAG,IAAE;AAAG,SAAK,eAAe,EAAE,WAAS,KAAG,IAAE,kBAAiB,IAAE;AAAA;AAAA;AAAA;AAAA,WAI16C,KAAK,eAAe,EAAE,WAAS,MAAI,IAAE,wCAAuC,IAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAW9E,QAAI,IAAE,cAAc,MAAM,KAAK,EAAC,QAAO,KAAK,YAAW,GAAE,CAAC,GAAE,MAAI,UAAU,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC;AAAI,WAAM;AAAA,MACvG,CAAC;AAAA,QACC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,0CAKwBA,GAAC;AAAA,8DACmB,CAAC;AAAA;AAAA;AAAA,gBAG/C,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,qDACmB,CAAC;AAAA;AAAA,YAE1C,KAAK,iBAAe,GAAG,sBAAqB,eAAc,KAAK,IAAI,IAAE,6DAA6D;AAAA;AAAA;AAAA,EAEtI;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAOC,IAAE,eAAe,GAAE,EAAE,KAAK;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,kBAAiB,QAAQ,GAAE,KAAK,WAAS,oBAAmB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAKA,KAAE,KAAK,YAAU,iBAAiBA,GAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8CAMrlC,KAAK,SAAO,SAAO,MAAI,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASjE,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,gBAAe,GAAE,QAAO,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,GAAE,EAAE,MAAM,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,MAAM,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,SAAQ,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,KAAI,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,QAAM,GAAE,KAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAAQ;AAAA,EAAC,cAAa;AAAC,QAAI,GAAEA;AAAE,QAAG,KAAK,OAAK;AAAE,YAAM,MAAM,kBAAkB,KAAK,IAAI,uBAAuB;AAAE,QAAG,KAAK,SAAO;AAAE,MAAAA,MAAE,SAAQ,IAAE;AAAA,SAAY;AAAC,UAAI,IAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC,GAAE,IAAE,CAAC;AAAE,eAAQ,IAAE,GAAE,IAAE,KAAK,YAAY,QAAO;AAAI,UAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,GAAE,IAAE,KAAK,SAAO,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE;AAAE,UAAE,EAAE,KAAK,GAAEA,MAAE,EAAE,KAAK;AAAA,IAAC;AAAC,WAAM;AAAA,QAC52B,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,4BAGU,CAAC;AAAA;AAAA,2CAEcA,GAAC;AAAA;AAAA,2CAEDA,GAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAIvC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,WAAU,GAAE,GAAE,GAAE,GAAE,EAAC,IAAE,GAAE,IAAE,IAAI,GAAG,EAAE,MAAM,QAAO,EAAE,OAAM,EAAE,MAAM,MAAM;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,GAAE,CAAC,GAAE,GAAG,EAAE,OAAM,EAAE,KAAK,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,QAAO,CAAC;AAA7B,IAA+B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,SAAQ,CAAC;AAA9B,IAAgC,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE,GAAE,GAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,IAAG,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,EAAE,CAAC,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,SAAO,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,SAAO,GAAE,KAAK,eAAaA,KAAE,KAAK,YAAU,0BAA0B,GAAG,EAAE,MAAM,CAAC,2BAA2B,GAAG,CAAC,CAAC,MAAK,EAAE,IAAI,CAAC,GAAE,MAAI;AAAC,WAAK,YAAU,OAAO,CAAC;AAAA,IAAe,CAAC,GAAE,KAAK,YAAU,kBAAkB,CAAC;AAAA,EAAE;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,GAAG,KAAK,YAAY,MAAM,GAAEA,MAAE,GAAG,KAAK,MAAM;AAAE,WAAM;AAAA,QAC/1C,GAAG,KAAK,cAAa,SAAS,CAAC;AAAA,QAC/B,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,kDAGgC,KAAK,YAAY,MAAM,KAAK,CAAC,IAAIA,GAAC;AAAA;AAAA,YAExE,GAAG,KAAK,QAAO,IAAE,CAAC;AAAA;AAAA;AAAA;AAAA,EAGzB;AAAC;AAAE,IAAI,MAAI,CAAAD,QAAG;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,YAAW,GAAE,UAAS,EAAC,IAAE;AAAE,IAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,uEAAuE;AAAE,MAAI,IAAE,EAAE,OAAO,CAAC,GAAE,MAAI,IAAE,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,CAAC,CAAC;AAAE,IAAE,KAAK,GAAG,CAAC;AAAE,WAAQ,IAAE,IAAE,EAAE,QAAO,IAAE,EAAE,MAAM,QAAO,EAAE;AAAE,MAAE,KAAK,CAAC,GAAE,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,IAAI,CAAC,GAAE,MAAI,EAAE,CAAC,IAAE,EAAE,MAAM,CAAC,IAAE,EAAE,CAAC,CAAC,GAAE,IAAE,EAAE,YAAY,GAAE,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,YAAY,EAAE,QAAO,EAAE,QAAO,KAAE,GAAE,IAAE,EAAE,oBAAoB,GAAE,GAAE,GAAE,KAAE,GAAE,IAAE,EAAE,eAAe,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,EAAE,MAAM,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC;AAAE,IAAE,IAAI,OAAG,EAAE,KAAK,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,CAAC,GAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC;AAAE,MAAI,IAAEC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAnsB,IAAqsB,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,WAAU,YAAY,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,wCAAuC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,GAAE,KAAK,OAAK,GAAE,KAAK,iBAAe,EAAE,CAACA,GAAC,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,CAACA,GAAC,GAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAkB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MAClnC,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UASN,GAAG,qBAAoB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA,EAGhD;AAAC;AAbgwB,IAa9vB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,YAAY,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAY,CAAC,CAAC,GAAE,KAAK,iBAAe,EAAEA,GAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAeA,KAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAA6B;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACpS,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,UAGN,GAAG,sBAAqB,KAAI,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA,EAG3C;AAAC;AApBgwB,IAoB9vB,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,cAAa,oBAAoB,GAAE,KAAK,cAAY,CAAC,GAAE,KAAK,WAAS,qBAAoB,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,OAAKA,KAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAmB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACzV,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,YAKJ,KAAK,SAAO,YAAU,6DAA2D,wDAAwD;AAAA;AAAA;AAAA;AAAA;AAAA,EAIlJ;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAEC,KAAE,IAAE,OAAG,GAAE;AAAC,MAAI,IAAE,EAAE,cAAcD,IAAE,KAAK,IAAEA,IAAE,MAAM,CAAC,GAAE,IAAEA,IAAE,OAAM,IAAE,EAAE,cAAc,EAAE,KAAK,GAAE,IAAE,EAAE,SAASC,IAAE,MAAM,GAAE,IAAE,IAAE,IAAE,EAAE,IAAE,CAAC,IAAE,IAAE,GAAE,GAAE,IAAED,IAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAE,GAAE,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,GAAE,CAAC;AAAE,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAACA,KAAE,GAAEC,GAAC,GAAE,GAAE,GAAE,CAAC;AAAE,MAAG;AAAE,WAAO;AAAE,MAAI,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,CAAC,CAAC,GAAE,OAAM,GAAE,OAAM,QAAO,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAEA,IAAE,KAAK;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAE,SAAQ,MAAK,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQ,GAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,IAAI,GAAG,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,MAAI,IAAE,EAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAE,SAAO,EAAE,YAAY,EAAE,MAAM,GAAE,EAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,OAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,IAAC,IAAED,KAAE,EAAC,MAAK,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE;AAAE,SAAO,GAAG,GAAE,GAAE,GAAE,MAAGC,GAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK;AAAG,QAAI,IAAE,IAAI,MAAM,EAAE,MAAM;AAAE,aAAQ,IAAE,GAAE,IAAE,EAAE,QAAO;AAAI,QAAE,CAAC,IAAE,EAAE,CAAC,IAAEA,IAAE,CAAC;AAAE,SAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,OAAK,KAAK,YAAY,QAAO,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,IAAI,KAAK,MAAK,WAAW;AAAE,WAAM;AAAA,QAC/2C,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,yCAGuB,CAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAE,IAAE,IAAG;AAAC,MAAGA,OAAG;AAAE,UAAM,MAAM,iBAAiBA,GAAC,uBAAuB;AAAE,MAAGA,QAAI;AAAE,WAAM,YAAY,CAAC;AAAU,MAAIC,MAAE,CAAC,WAAU,WAAU,WAAU,SAAS,GAAE,IAAE,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAED,KAAE;AAAI,MAAE,KAAK,IAAIC,IAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI;AAAE,SAAO,EAAE,KAAK;AAAC;AAAC,SAAS,GAAGD,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,KAAG,EAAE,UAAQ,YAAU,EAAE,MAAM,UAAQ,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,EAAE,UAAQ,WAAS,EAAE,IAAI,OAAG,EAAE,aAAa,CAAC,CAAC,IAAE,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,IAAI,GAAG,EAAE,OAAM,CAAC;AAAE,SAAOA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,KAAK;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,GAAE;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,eAAc,GAAE,cAAa,GAAE,cAAa,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE;AAAG,MAAG,EAAE,UAAQ,UAAS;AAAC,QAAI,IAAEC,IAAE,WAAW,CAAC,GAAE,IAAEA,IAAE,WAAW,CAAC,GAAE,IAAE,EAAE,aAAaA,IAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,WAAOA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC;AAAC,MAAI,IAAE,CAAC,IAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,MAAM,SAAO,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,EAAE,OAAM,IAAEA,IAAE,eAAe,CAAC,GAAE,GAAE,EAAE,oBAAoB,GAAE,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,UAAO,GAAE;AAAA,IAAC,KAAK;AAAE;AAAA,IAAM,KAAK;AAAE;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC;AAAA,IAAM;AAAQ;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAC;AAAC,YAAI,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,CAAC;AAAE,QAAAA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC;AAAA,MAAC;AAAA,EAAC;AAAC,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,SAAOA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAEA,IAAE,YAAY,EAAE,MAAM,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,iBAAgB,GAAE,MAAK,EAAC,IAAE,GAAE,IAAE,EAAE,eAAe,GAAE,EAAE,KAAK,EAAE,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,GAAE,CAAC,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,SAAO,EAAE,IAAI,OAAG;AAAC,QAAI,IAAE,CAAC,GAAG,CAAC;AAAE,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,WAAO,EAAE,CAAC,KAAG,GAAE;AAAA,EAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,CAAC,EAAC,QAAOD,KAAE,SAAQ,EAAC,MAAI;AAAC,MAAG,EAAC,GAAEC,IAAC,IAAED,KAAE,IAAE,GAAE,IAAE,IAAI,GAAGC,IAAE,OAAM,EAAE,MAAM;AAAE,SAAO,EAAE,iBAAiB,GAAE,CAACA,GAAC,GAAEA,IAAE,KAAK;AAAC,EAAC;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,mBAAkB,CAAC;AAAzC,IAA2C,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAI,EAAC,QAAOD,KAAE,OAAM,GAAE,SAAQC,IAAC,GAAE;AAAC,MAAG,EAAC,GAAE,EAAC,IAAED,KAAE,IAAE,IAAI,GAAG,EAAE,OAAM,EAAE,MAAK,kBAAkB,GAAE,IAAE,CAAC,EAAC,MAAK,WAAU,MAAK,CAAC,EAAE,KAAK,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,GAAG,GAAE,KAAK,gBAAc,GAAE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,eAAc,CAAC,KAAK,eAAc,GAAE,CAAC,CAAC;AAAE,QAAIA,MAAE,GAAG,KAAK,YAAY,MAAM;AAAE,SAAK,WAAS,WAAWA,GAAC,gBAAgBA,GAAC,MAAK,KAAK,YAAU;AAAA,EAAc;AAAA,EAAC,cAAa;AAAC,QAAI,IAAE,KAAK,YAAY,QAAOA,MAAE;AAAG,QAAG,MAAI;AAAE,MAAAA,MAAE;AAAA,SAAiD;AAAC,UAAI,IAAE;AAAE,MAAAA,MAAE,KAAK,YAAY,IAAI,CAAC,GAAE,OAAK,KAAI,KAAK,YAAY,WAAS,IAAE,6BAA6B,CAAC,sBAAsB,CAAC,MAAI,UAAU,IAAE,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG;AAAA,IAAC;AAAC,WAAM;AAAA,SAC5oH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA,0CAGuBA,GAAC;AAAA;AAAA;AAAA;AAAA,EAGrC;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,OAAM,GAAE,KAAI,GAAE,SAAQ,GAAE,WAAU,GAAE,SAAQ,GAAE,cAAa,GAAE,aAAY,GAAE,gBAAe,EAAC,IAAE,GAAE,EAAC,kBAAiB,GAAE,YAAW,GAAE,YAAW,GAAE,WAAU,GAAE,eAAc,GAAE,OAAM,GAAE,KAAI,GAAE,SAAQ,EAAC,IAAE,GAAG,UAAU,EAAE,OAAM,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC,GAAE;AAAE,MAAG;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAA,WAAU,KAAG,GAAE;AAAC,MAAE,OAAO,EAAE,MAAM,UAAQ,GAAE,MAAI,yCAAyC,EAAE,MAAM,MAAM,EAAE;AAAE,QAAI,IAAE,GAAG,gBAAgB,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC,WAASA,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,IAAE,GAAG,EAAE,OAAM,EAAE,OAAM,CAAC,GAAE,IAAE,GAAG,GAAE,GAAE,GAAE,CAAC;AAAE,QAAEA,IAAE,eAAe,GAAE,EAAE,OAAM,EAAE,MAAM;AAAA,EAAC,OAAK;AAAC,QAAI,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,CAAC,GAAE,EAAE,OAAM,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC,GAAEA,IAAE,YAAY,EAAE,MAAM;AAAA,EAAC;AAAC,SAAO;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,WAAU,GAAE,aAAY,GAAE,SAAQ,GAAE,UAAS,GAAE,UAAS,GAAE,wBAAuB,EAAC,IAAE,GAAE,EAAC,MAAK,GAAE,YAAW,EAAC,IAAE,GAAE,IAAEC,IAAE,SAAS,EAAE,MAAM,GAAE,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,GAAE,CAAC;AAAE,SAAM,CAACA,IAAE,eAAe,CAAC,EAAE,MAAM,GAAE,UAAS,CAAC,GAAEA,IAAE,eAAe,EAAE,OAAM,SAAQ,CAAC,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,GAAG,KAAI,eAAc,IAAG,iBAAgB,KAAE,CAAC;AAA9D,IAAgE,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,IAAG,CAAC;AAAzB,IAA2B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,GAAG,EAAC,QAAO,EAAE,KAAI,CAAC;AAA1B,IAA4B,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,QAAO,GAAE,SAAQ,GAAE,SAAQ,EAAC,IAAE,GAAE,CAAC,IAAE,GAAE,EAAC,WAAU,GAAE,YAAW,GAAE,WAAU,GAAE,SAAQ,GAAE,YAAW,EAAC,IAAE,EAAE,gBAAgB,GAAE,GAAE,EAAE,KAAK,GAAE,IAAE,CAAC,IAAE,GAAE,CAAC;AAAE,MAAG,MAAI;AAAE,WAAOC,IAAE,eAAe,EAAE,OAAM,EAAE,KAAK;AAAE,MAAI,IAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,CAAC,GAAE,GAAE,EAAE,MAAM,QAAO,EAAE,MAAM,QAAO,GAAE,GAAE,EAAE,OAAM,KAAE,GAAE,IAAE,EAAE,cAAc,CAAC,GAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAE,MAAK,EAAC,CAAC;AAAE,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS;AAAA,gCAC9sF,KAAK,YAAU;AAAA,EAAM;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UAC/D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkEb;AAAC;AApE0+E,IAoEx+E,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,KAAI,SAAS,GAAE,KAAK,gBAAc,CAAC,KAAI,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,WAAS,8CAA6C,KAAK,YAAU;AAAA,EAAO;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,UAC/U,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0Db;AAAC;AAAE,SAAS,GAAGD,KAAE,GAAE;AAAC,QAAI,QAAMA,IAAE,YAAY,EAAE,MAAM;AAAC;AAAC,SAAS,GAAGA,KAAE;AAAC,MAAI,IAAE;AAAE,SAAK,IAAEA;AAAG,SAAG;AAAE,SAAO;AAAC;AAAC,SAAS,IAAIA,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,EAAC,IAAE,GAAE,EAAC,GAAE,GAAE,QAAO,EAAC,IAAE,GAAE,IAAE,EAAE,OAAM,IAAE,EAAE,EAAE,SAAO,CAAC;AAAE,MAAGC,IAAE,mBAAmB,CAAC,CAAC,CAAC,GAAE;AAAC,QAAI,IAAEA,IAAE,SAAS,EAAE,MAAM,GAAE,CAAC,GAAE,CAAC,IAAE,GAAG,GAAE,GAAE,EAAE,OAAM,GAAE,CAAC;AAAE,WAAM,CAACA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,GAAEA,IAAE,eAAe,EAAE,OAAM,EAAE,OAAM,EAAE,MAAM,CAAC;AAAA,EAAC;AAAC,MAAG,MAAI;AAAE,WAAO,EAAE,EAAE,SAAO,CAAC,IAAE,GAAE,CAACA,IAAE,eAAe,GAAE,EAAE,OAAM,CAAC,CAAC,GAAEA,IAAE,eAAe,GAAE,SAAQ,CAAC,CAAC,CAAC;AAAE,MAAG,MAAI;AAAE,WAAM,CAAC,GAAE,GAAG,EAAC,OAAM,EAAC,OAAM,GAAE,OAAM,SAAQ,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,CAAC;AAAE,MAAI,IAAE,EAAE,cAAc,CAAC,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,CAAC,GAAE,CAAC,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,GAAG,CAAC,GAAE,IAAE,MAAK,IAAE,MAAI,MAAI,OAAK,CAAC,GAAE,CAAC,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,MAAI;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,MAAI,OAAK,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,OAAO,iBAAiB,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAA,EAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,CAAC,GAAE,CAAC,CAAC;AAAA,EAAC;AAAC,WAAQ,IAAE,GAAE,IAAE,GAAE,KAAG,GAAE;AAAC,QAAI,IAAE,EAAE,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,CAAC,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,MAAI,OAAK,IAAE,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,CAAC,GAAE,IAAE;AAAE,QAAEA,IAAE,iBAAiB,GAAE,GAAE,SAAQ,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,QAAI,IAAE,IAAE,GAAE,IAAE,IAAE;AAAE,aAAQ,IAAE,GAAE,KAAG,GAAE,KAAG;AAAE,QAAE,GAAE,GAAE,EAAE,KAAK;AAAA,EAAC;AAAC,MAAI,IAAE;AAAE,MAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,CAAC,GAAE,CAAC,EAAC,EAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,GAAE,SAAQ,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,GAAE,WAAU,EAAC,EAAC,CAAC;AAAE,KAAGA,KAAE,CAAC;AAAE,MAAI,IAAE,EAAE,MAAM,GAAE,EAAE;AAAE,IAAE,KAAK,CAAC,GAAE,IAAE,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC;AAAE,MAAI,IAAE;AAAE,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,OAAM,EAAC,OAAM,EAAC,GAAE,SAAQA,IAAC,CAAC,GAAE,GAAGA,KAAE,CAAC,GAAE,CAAC,GAAE,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAE;AAAC,SAAK,gBAAc,CAAC,SAAQ,YAAY,GAAE,KAAK,WAAS,iEAAgE,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,OAAK,MAAG,KAAK,cAAY,GAAE,KAAK,iBAAe,EAAE,KAAK,WAAW,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,KAAK,aAAY,KAAK,aAAa,GAAE,KAAK,YAAU;AAAA,EAAW;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAgE76D,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoDb;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,eAAc,GAAE,UAAS,GAAE,WAAU,GAAE,aAAY,EAAC,IAAE,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,IAAE,EAAE,OAAM,CAAC,GAAE,CAAC,IAAE,KAAG,OAAK,IAAE,CAAC,GAAE,CAAC,GAAE,IAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,IAAI,GAAG,CAAC,GAAE,IAAE,MAAI,YAAU,IAAE,GAAE;AAAE,UAAO,GAAE;AAAA,IAAC,KAAI;AAAW,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM,KAAI;AAAO,UAAE;AAAE;AAAA,IAAM,KAAI;AAAU,UAAE;AAAE;AAAA,IAAM;AAAQ,UAAE;AAAE;AAAA,EAAK;AAAC,MAAI,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,WAAU,MAAK,CAAC,CAAC,EAAC,CAAC;AAAE,SAAOC,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,WAAU,CAAC;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,OAAM,EAAC,IAAE,GAAE,EAAC,MAAK,EAAC,IAAE;AAAE,MAAE,MAAI,KAAG,EAAE,MAAM;AAAQ,MAAI,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,EAAE,MAAM,CAAC,GAAE,IAAE,IAAI,MAAM,IAAE,CAAC,GAAE,IAAE;AAAE,WAAQ,IAAE,GAAE,IAAE,GAAE;AAAI,UAAI,MAAI,EAAE,GAAG,IAAE,EAAE,MAAM,CAAC;AAAG,MAAI,IAAE,CAAC,GAAE,IAAE,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,MAAM,MAAM;AAAE,IAAE,CAAC,IAAE;AAAE,MAAI,IAAE,IAAI,MAAM,CAAC;AAAE,WAAQ,IAAE,GAAE,IAAE,EAAE,QAAO,KAAI;AAAC,MAAE,CAAC,IAAE;AAAE,QAAI,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,OAAM,GAAE,MAAK,EAAC,EAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,MAAE,CAAC,IAAE,GAAE,EAAE,KAAK,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,KAAG,MAAK;AAAA,EAAC,YAAY,GAAEA,KAAE,GAAE;AAAC,QAAG,KAAK,cAAY,CAAC,GAAE,KAAK,gBAAc,CAAC,KAAI,YAAY,GAAE,KAAK,WAAS,kCAAiC,KAAK,gBAAc,CAAC,IAAG,GAAE,CAAC,GAAE,KAAK,SAAO,MAAG,KAAK,cAAYA,KAAE,KAAK,iBAAe,EAAE,CAAC,GAAE,KAAK,WAAS,EAAE,KAAK,gBAAe,GAAE,KAAK,aAAa,GAAE,MAAI,aAAW,MAAI;AAAQ,YAAM,IAAI,MAAM;AAAA,wCAC31C,CAAC,QAAQ;AAAE,SAAK,OAAK,GAAE,KAAK,YAAU;AAAA,EAAoB;AAAA,EAAC,cAAa;AAAC,WAAM;AAAA,MACjH,EAAE,OAAO,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAWJ,GAAG,sBAAqB,SAAQ,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAInD;AAAC;AAAE,SAAS,IAAID,KAAE;AAAC,MAAG,EAAC,QAAO,GAAE,SAAQC,KAAE,OAAM,EAAC,IAAED,KAAE,EAAC,GAAE,GAAE,YAAW,EAAC,IAAE,GAAE,EAAC,aAAY,EAAC,IAAE,GAAE,IAAE,EAAE,MAAM,QAAO,IAAE,CAAC,GAAE,IAAE,GAAE,IAAE,EAAE,mBAAmB,CAAC,CAAC,GAAE,CAAC,GAAE,IAAE;AAAE,OAAG,SAAO,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQC,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC,GAAE,EAAE,KAAK,CAAC,GAAE,IAAE,EAAE,iBAAiB,GAAE,CAAC,EAAE,CAAC;AAAG,MAAI,IAAE,EAAE,aAAa,gBAAgB,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,CAAC,IAAG,CAAC,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE,EAAE,OAAM,IAAE,CAAC,EAAE,MAAM,CAAC,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,SAAQA,KAAE,OAAM,EAAC,OAAM,GAAE,OAAM,GAAE,OAAM,EAAC,EAAC,CAAC,GAAE,IAAE,IAAI,GAAG,EAAE,OAAM,GAAE,CAAC,GAAE,IAAE,CAAC,EAAC,MAAK,SAAQ,MAAK,CAAC,CAAC,EAAC,GAAE,EAAC,MAAK,SAAQ,MAAK,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAC,CAAC,GAAE,IAAEA,IAAE,iBAAiB,GAAE,CAAC,GAAE,CAAC,GAAE,GAAE,GAAE,CAAC,GAAE,IAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,OAAM,EAAC,EAAC,CAAC;AAAE,IAAE,KAAK,CAAC;AAAE,MAAI,IAAE;AAAE,MAAG,KAAG,MAAK;AAAC,MAAE,KAAK,CAAC;AAAE,QAAI,IAAE,EAAE,uBAAuB,CAAC;AAAE,QAAE,GAAG,EAAC,QAAO,EAAC,GAAE,EAAC,GAAE,SAAQA,KAAE,OAAM,EAAC,MAAK,EAAC,EAAC,CAAC;AAAA,EAAC;AAAC,SAAO,EAAE,QAAQ,OAAGA,IAAE,YAAY,EAAE,MAAM,CAAC,GAAE;AAAC;AAAC,IAAI,KAAG,EAAC,YAAW,IAAG,aAAY,UAAS,YAAW,IAAG;AAAE,IAAI,MAAI,CAAC,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,IAAG,EAAE;AAAE,SAAQD,OAAK;AAAI,KAAGA,GAAC;AAAE,IAAI,KAAG;AAAP,IAAgB,MAAI;AAApB,IAA6B,MAAI;AAAjC,IAA0C,MAAI;AAA9C,IAAuD,MAAI;AAA3D,IAAoE,MAAI;AAAxE,IAAiF,MAAI,EAAC,MAAK,IAAG,aAAY,IAAG,kBAAiB,KAAI,oBAAmB,KAAI,sBAAqB,KAAI,qBAAoB,KAAI,uBAAsB,IAAG;AAAE,IAAI,MAAI;;;ACt0Q/lD,SAAS,OAAO,KAAW;AAChC,QAAMO,MAAK,oBAAI,KAAK;AACpB,QAAMC,MAAK,GAAGD,IAAG,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAIA,IAAG,gBAAgB,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AACzM,MAAI;AAAK,YAAQ,IAAIC,KAAI,UAAU,GAAG,GAAG;AAC3C;AAGO,SAAS,KAAK,QAAgB,MAAsB;AACzD,QAAM,YAAY,OAAO,SAAS,GAAG,IAAI,KAAK;AAC9C,QAAM,WAAW,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,QAAQ,KAAK,KAAK,WAAW,OAAO;AACjJ,QAAM,OAAO,WAAW,GAAG,IAAI,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;AAChE,MAAI,CAAC,KAAK,kBAAkB,EAAE,SAAS,OAAO;AAAG,UAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAChH,SAAO;AACT;AAGO,IAAM,MAAM,MAAM;AACvB,MAAI,OAAO,gBAAgB;AAAa,WAAO,YAAY,IAAI;AAC/D,SAAO,UAAU,OAAO,QAAQ,OAAO,OAAO,CAAC,IAAI,MAAO,KAAM,SAAS,CAAC;AAC5E;AAGO,SAAS,SAAS,UAA2BC,SAAyB,SAAS,UAAU,OAA+D,CAAC,GAAG;AACjK,aAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACrC,QAAI,OAAOA,QAAO,GAAG,MAAM,UAAU;AACnC,eAAS,SAAS,GAAG,GAAGA,QAAO,GAAG,GAAG,KAAK,IAAI;AAAA,IAChD,OAAO;AACL,YAAM,UAAU,YAAa,OAAO,SAAS,GAAG,MAAM;AACtD,UAAI,CAAC;AAAS,aAAK,KAAK,EAAE,QAAQ,oBAAoB,OAAO,GAAG,MAAM,IAAI,GAAG,MAAMA,QAAO,GAAG,CAAC,GAAG,CAAC;AAClG,YAAM,OAAO,YAAY,OAAO,SAAS,GAAG,MAAM,OAAOA,QAAO,GAAG;AACnE,UAAI,WAAW,CAAC;AAAM,aAAK,KAAK,EAAE,QAAQ,0BAA0B,OAAO,GAAG,MAAM,IAAI,GAAG,MAAMA,QAAO,GAAG,CAAC,IAAI,UAAU,OAAO,SAAS,GAAG,EAAE,CAAC;AAAA,IAClJ;AAAA,EAEF;AACA,MAAIA,QAAO,SAAS,WAAW,YAAY,KAAK,SAAS;AAAG,QAAI,yBAAyB,IAAI;AAC7F,SAAO;AACT;AAGO,SAAS,aAAa,SAAS;AACpC,QAAM,WAAW,CAAC,QAAQ,OAAO,OAAO,QAAQ;AAChD,SAAO,QAAQ,OAAO,CAAC,MAAM,QAAQ;AACnC,WAAO,KAAK,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACtC,YAAM,OAAO,KAAK,GAAG;AACrB,YAAM,OAAO,IAAI,GAAG;AACpB,UAAI,MAAM,QAAQ,IAAI,KAAK,MAAM,QAAQ,IAAI;AAAG,aAAK,GAAG,IAAI,KAAK,OAAO,GAAG,IAAI;AAAA,eACtE,SAAS,IAAI,KAAK,SAAS,IAAI;AAAG,aAAK,GAAG,IAAI,UAAU,MAAM,IAAI;AAAA;AACtE,aAAK,GAAG,IAAI;AAAA,IACnB,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AACP;;;ACyRA,IAAM,SAAiB;AAAA,EACrB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,UAAU;AAAA,EACV,mBAAmB;AAAA,EACnB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,OAAO,CAAC;AAAA,EACR,iBAAiB;AAAA,EACjB,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,cAAc;AAAA,IACd,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,MACR,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,MACf,SAAS;AAAA,MACT,cAAc;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,WAAW;AAAA,MACX,aAAa;AAAA,IACf;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AAAA,IACA,MAAM;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,eAAe;AAAA,IACjB;AAAA,IACA,WAAW;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,IACA,UAAU;AAAA,MACR,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AACF;;;AC1dO,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBvB,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAc7B,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAchC,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAejB,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBb,IAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9E3B,IAAM,UAAU,CAAC,QAAQ,QAAgB,eAAe;AACtD,QAAMC,MAAI,IAAI,OAAO,QAAQ,SAAS,gBAAgB,IAAI;AAC1D,SAAO,QAAQA,KAAG,CAACC,QAAO,SAAS;AACjC,eAAW,IAAI,IAAI;AACnB,WAAOA;AAAA,EACT,CAAC;AACH;AAEA,IAAM,YAAN,MAAgB;AAAA,EAMd,YAAYC,KAAI,cAAc,gBAAgB;AAL9C,mCAAU,CAAC;AACX,qCAAY,CAAC;AACb;AACA;AA2BA,mCAAU,CAAC,QAAQ,SAA6B;AAC9C,YAAM,SAAS,KAAK,GAAG,aAAa,IAAI;AACxC,UAAI,CAAC,QAAQ;AACX,YAAI,iCAAiC;AACrC,eAAO;AAAA,MACT;AACA,WAAK,GAAG,aAAa,QAAQ,MAAM;AACnC,WAAK,GAAG,cAAc,MAAM;AAC5B,UAAI,CAAC,KAAK,GAAG,mBAAmB,QAAQ,KAAK,GAAG,cAAc,GAAG;AAC/D,YAAI,8BAA8B,KAAK,GAAG,iBAAiB,MAAM,KAAK,SAAS,EAAE;AACjF,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AArCE,SAAK,KAAKA;AACV,UAAM,eAAe,KAAK,QAAQ,cAAc,KAAK,GAAG,aAAa;AACrE,UAAM,iBAAiB,KAAK,QAAQ,gBAAgB,KAAK,GAAG,eAAe;AAC3E,SAAK,KAAK,KAAK,GAAG,cAAc;AAChC,QAAI,CAAC,gBAAgB,CAAC;AAAgB;AACtC,QAAI,CAAC,KAAK,IAAI;AACZ,UAAI,wCAAwC;AAC5C;AAAA,IACF;AACA,SAAK,GAAG,aAAa,KAAK,IAAI,YAAY;AAC1C,SAAK,GAAG,aAAa,KAAK,IAAI,cAAc;AAC5C,SAAK,GAAG,YAAY,KAAK,EAAE;AAC3B,QAAI,CAAC,KAAK,GAAG,oBAAoB,KAAK,IAAI,KAAK,GAAG,WAAW,GAAG;AAC9D,UAAI,2BAA2B,KAAK,GAAG,kBAAkB,KAAK,EAAE,KAAK,SAAS,EAAE;AAChF;AAAA,IACF;AACA,SAAK,GAAG,WAAW,KAAK,EAAE;AAC1B,YAAQ,cAAc,aAAa,KAAK,SAAS;AACjD,eAAW,KAAK,KAAK;AAAW,WAAK,UAAU,CAAC,IAAI,KAAK,GAAG,kBAAkB,KAAK,IAAI,CAAC;AACxF,YAAQ,cAAc,WAAW,KAAK,OAAO;AAC7C,YAAQ,gBAAgB,WAAW,KAAK,OAAO;AAC/C,eAAW,KAAK,KAAK;AAAS,WAAK,QAAQ,CAAC,IAAI,KAAK,GAAG,mBAAmB,KAAK,IAAI,CAAC;AAAA,EACvF;AAgBF;AAWO,SAAS,gBAAgB;AAC9B,MAAI,YAAY;AAChB,MAAI,gBAAqC;AACzC,MAAI,cAAc;AAClB,MAAI,0BAA0B;AAC9B,MAAI,mBAAoG,CAAC,MAAM,IAAI;AACnH,MAAI,cAAyC,CAAC;AAC9C,MAAI,eAAmC;AACvC,MAAI,iBAAmC;AACvC,QAAM,WAAW,OAAO,KAAK,GAAG;AAChC,QAAM,qBAAqB,CAAE;AAC7B,QAAM,OAAO,EAAE,cAAc,EAAE;AAC/B,QAAMA,MAAK,SAAS,WAAW,OAAO;AACtC,MAAI,CAACA,KAAI;AACP,QAAI,kCAAkC;AACtC;AAAA,EACF;AAEA,OAAK,KAAKA;AAEV,WAAS,OAAO,OAAO,QAAQ;AAC7B,QAAI,UAAU,SAAS,SAAS,WAAW,SAAS;AAAQ;AAC5D,aAAS,QAAQ;AACjB,aAAS,SAAS;AAClB,QAAI,CAAC,cAAc;AACjB,YAAM,WAAW,IAAI,aAAa,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAChH,qBAAeA,IAAG,aAAa;AAC/B,MAAAA,IAAG,WAAWA,IAAG,cAAc,YAAY;AAC3C,MAAAA,IAAG,WAAWA,IAAG,cAAc,UAAUA,IAAG,WAAW;AACvD,MAAAA,IAAG,YAAYA,IAAG,gCAAgC,IAAI;AAAA,IACxD;AACA,IAAAA,IAAG,SAAS,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AACjD,uBAAmB,CAAC,MAAM,IAAI;AAAA,EAChC;AAEA,WAAS,yBAAyB,OAAO,QAAQ;AAC/C,UAAM,MAAMA,IAAG,kBAAkB;AACjC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,GAAG;AACtC,UAAM,eAAeA,IAAG,mBAAmB;AAC3C,IAAAA,IAAG,iBAAiBA,IAAG,cAAc,YAAY;AACjD,UAAM,UAAUA,IAAG,cAAc;AACjC,IAAAA,IAAG,YAAYA,IAAG,YAAY,OAAO;AACrC,IAAAA,IAAG,WAAWA,IAAG,YAAY,GAAGA,IAAG,MAAM,OAAO,QAAQ,GAAGA,IAAG,MAAMA,IAAG,eAAe,IAAI;AAC1F,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,MAAM;AAChE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,MAAM;AAChE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,qBAAqBA,IAAG,aAAaA,IAAG,mBAAmBA,IAAG,YAAY,SAAS,CAAC;AACvF,IAAAA,IAAG,YAAYA,IAAG,YAAY,IAAI;AAClC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,IAAI;AACvC,WAAO,EAAE,KAAK,QAAQ;AAAA,EACxB;AAEA,WAAS,mBAAmBC,QAAuE;AACjG,qBAAiBA,MAAK,IAAI,iBAAiBA,MAAK,KAAK,yBAAyB,SAAS,OAAO,SAAS,MAAM;AAC7G,WAAO,iBAAiBA,MAAK;AAAA,EAC/B;AAEA,WAAS,KAAK,QAAQ,GAAG;AACvB,QAAI,CAAC;AAAgB;AACrB,QAAI,SAA8B;AAClC,QAAI,SAAkC;AACtC,QAAI,QAAQ;AACZ,QAAI,cAAc;AAAG,eAAS;AAAA;AACzB,eAAS,mBAAmB,uBAAuB,EAAE,WAAW;AACrE;AACA,QAAI,eAAe,EAAE,QAAQ,KAAK,eAAe;AAC/C,eAAS;AACT,cAAQ,YAAY,MAAM;AAAA,IAC5B,OAAO;AACL,iCAA2B,0BAA0B,KAAK;AAC1D,eAAS,mBAAmB,uBAAuB,EAAE,OAAO;AAAA,IAC9D;AACA,IAAAD,IAAG,YAAYA,IAAG,YAAY,MAAM;AACpC,IAAAA,IAAG,gBAAgBA,IAAG,aAAa,MAAM;AACzC,IAAAA,IAAG,UAAU,eAAe,QAAQ,OAAO,GAAI,QAAQ,KAAK,CAAE;AAC9D,IAAAA,IAAG,WAAWA,IAAG,WAAW,GAAG,CAAC;AAAA,EAClC;AAEA,WAAS,cAAc,gBAAkC;AACvD,QAAI,mBAAmB,cAAc,GAAG;AACtC,uBAAiB,mBAAmB,cAAc;AAClD,MAAAA,IAAG,YAAY,iBAAiB,eAAe,KAAK,SAAS,IAAI;AACjE,aAAO;AAAA,IACT;AACA,qBAAiB,IAAI,UAAUA,KAAY,gBAAgB,cAAc;AACzE,QAAI,CAAC,gBAAgB;AACnB,UAAI,qCAAqC;AACzC,aAAO;AAAA,IACT;AACA,UAAM,YAAY,aAAa;AAC/B,UAAM,WAAW,IAAI;AACrB,IAAAA,IAAG,wBAAwB,eAAe,UAAU,KAAK,CAAC;AAC1D,IAAAA,IAAG,oBAAoB,eAAe,UAAU,KAAK,GAAG,GAAGA,IAAG,OAAO,OAAO,UAAU,IAAI,SAAS;AACnG,IAAAA,IAAG,wBAAwB,eAAe,UAAU,IAAI,CAAC;AACzD,IAAAA,IAAG,oBAAoB,eAAe,UAAU,IAAI,GAAG,GAAGA,IAAG,OAAO,OAAO,UAAU,IAAI,SAAS;AAClG,uBAAmB,cAAc,IAAI;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,SAAS;AAAA,IACb,aAAa,CAAC,WAAqB;AACjC,YAAM,IAAI,IAAI,aAAa,MAAM;AACjC,QAAE,CAAC,KAAK;AACR,QAAE,CAAC,KAAK;AACR,QAAE,EAAE,KAAK;AACT,QAAE,EAAE,KAAK;AACT,YAAM,SAAU,EAAE,EAAE,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,KAAK,EAAE,EAAE,MAAM,IACrH,0BACA;AACZ,YAAM,UAAU,cAAc,MAAM;AACpC,UAAI,CAAC;AAAS;AACd,MAAAA,IAAG,WAAW,QAAQ,QAAQ,GAAG,GAAG,CAAC;AACrC,WAAK;AAAA,IACP;AAAA,IAEA,YAAY,CAAC,eAAuB;AAClC,YAAM,KAAK,cAAc,KAAK;AAC9B,aAAO,YAAY;AAAA,QACjB;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,CAAC,WAAmB;AAC9B,YAAM,KAAK,UAAU,KAAK,IAAI,IAAI;AAClC,YAAME,MAAM,IAAI,KAAK;AACrB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAGA;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZA;AAAA,QAAG;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZA;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,WAAW,EAAE;AAAA,IACtB;AAAA,IAEA,UAAU,CAAC,WAAmB;AAC5B,YAAMC,MAAK,UAAU,KAAK;AAC1B,YAAM,IAAI,QAAQA,KAAI;AACtB,aAAO,YAAY;AAAA,QACjBA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAGA;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,MAAM;AACd,aAAO,SAAS,EAAE;AAAA,IACpB;AAAA,IAEA,KAAK,CAAC,aAAqB;AACzB,kBAAY,YAAY,KAAK,MAAM,KAAK;AACxC,YAAM,MAAM,KAAK,IAAI,QAAQ;AAC7B,YAAM,MAAM,KAAK,IAAI,QAAQ;AAC7B,YAAM,OAAO;AACb,YAAM,OAAO;AACb,YAAM,OAAO;AACb,aAAO,YAAY;AAAA,QACjB,OAAO,OAAO,IAAI,QAAQ,MAAO,CAAC;AAAA,QAAO,OAAO,MAAO,CAAC,OAAQ,MAAO,CAAC;AAAA,QAAO,OAAO,MAAO,CAAC,OAAQ,OAAO,IAAI;AAAA,QAAO;AAAA,QAAG;AAAA,QAC3H,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAQ,OAAO,OAAO,IAAI,QAAQ,MAAO;AAAA,QAAQ,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAS;AAAA,QAAG;AAAA,QACzH,OAAO,MAAO,CAAC,OAAQ,MAAO,EAAE,IAAI;AAAA,QAAQ,OAAO,MAAO,CAAC,OAAQ,MAAO;AAAA,QAAO,OAAO,OAAO,IAAI,QAAQ,MAAO;AAAA,QAAO;AAAA,QAAG;AAAA,QAC5H;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,qBAAqB,MAAM;AACzB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAW;AAAA,QAAW;AAAA,QAAW;AAAA,QAAG;AAAA,QACpC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,MAAM;AACX,aAAO,YAAY;AAAA,QACjB;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAO;AAAA,QAAW;AAAA,QAAY;AAAA,QAAG;AAAA,QACjC;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,MAAM;AACb,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAuB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB,MAAM;AACpB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAG;AAAA,QACjE;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAG;AAAA,QAChE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAsB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QACnE;AAAA,QAAsB;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,aAAa,MAAM;AACjB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAqB;AAAA,QAAoB;AAAA,QAAsB;AAAA,QAAG;AAAA,QAClE;AAAA,QAAoB;AAAA,QAAqB;AAAA,QAAmB;AAAA,QAAG;AAAA,QAC/D;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,MAAM;AACd,aAAO,YAAY;AAAA,QACjB;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAQ;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAQ;AAAA,QAAQ;AAAA,QAAO;AAAA,QAAG;AAAA,QAC1B;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,MAAM;AAChB,aAAO,YAAY;AAAA,QACjB;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QACZ;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,QAAG;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,aAAa,CAAC,WAAqB;AACjC,YAAM,IAAI,IAAI,aAAa,MAAM;AACjC,YAAM,aAAa,IAAI,SAAS;AAChC,YAAM,aAAa,IAAI,SAAS;AAChC,YAAM,UAAU,cAAsB,WAAW;AACjD,UAAI,CAAC;AAAS;AACd,MAAAH,IAAG,WAAW,QAAQ,QAAQ,GAAG,GAAG,CAAC;AACrC,MAAAA,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,YAAY,UAAU;AAC1D,WAAK;AAAA,IACP;AAAA,IAEA,aAAa,MAAM;AAEjB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAG;AAAA,QAAG;AAAA,QACN;AAAA,QAAG;AAAA,QAAI;AAAA,QACP;AAAA,QAAG;AAAA,QAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM;AAEZ,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAI;AAAA,QAAG;AAAA,QACP;AAAA,QAAI;AAAA,QAAG;AAAA,QACP;AAAA,QAAI;AAAA,QAAG;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,MAAM;AAEZ,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAI;AAAA,QAAI;AAAA,QACR;AAAA,QAAG;AAAA,QAAG;AAAA,QACN;AAAA,QAAG;AAAA,QAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,CAAC,WAAW;AACnB,YAAM,IAAI,UAAU;AAEpB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,QACX,KAAK;AAAA,QAAG,IAAI,IAAI;AAAA,QAAG,KAAK;AAAA,QACxB;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IAEA,QAAQ,CAACI,UAAiB;AACxB,YAAM,IAAIA,SAAQ;AAElB,aAAO,YAAY,KAAK,MAAM;AAAA,QAC5B,KAAK;AAAA,QAAG,KAAK;AAAA,QAAG;AAAA,QAChB,KAAK;AAAA,QAAG;AAAA,QAAG,IAAI;AAAA,QACf;AAAA,QAAG,IAAI;AAAA,QAAG,IAAI;AAAA,MAChB,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,CAACA,UAAiB;AACtB,YAAM,YAAaA,QAAO,IAAK,SAAS;AACxC,YAAM,YAAaA,QAAO,IAAK,SAAS;AACxC,YAAM,UAAU,cAAsB,IAAI;AAC1C,UAAI,CAAC;AAAS;AAEd,MAAAJ,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,GAAG,SAAS;AAChD,WAAK,KAAK,YAAY;AAEtB,MAAAA,IAAG,UAAU,QAAQ,QAAQ,IAAI,GAAG,WAAW,CAAC;AAChD,WAAK;AAAA,IACP;AAAA,IAEA,UAAU,CAACI,UAAiB;AAC1B,YAAM,YAAaA,QAAQ,SAAS;AACpC,YAAM,YAAaA,QAAQ,SAAS;AACpC,YAAM,UAAU,cAAsB,QAAQ;AAC9C,UAAI,CAAC;AAAS;AACd,MAAAJ,IAAG,UAAU,QAAQ,QAAQ,MAAM,GAAG,WAAW,SAAS;AAC1D,WAAK;AAAA,IACP;AAAA,EACF;AAGA,OAAK,MAAM,SAAU,MAAM;AACzB,UAAM,OAAO,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AACpD,UAAM,OAAO,OAAO,IAAI;AACxB,gBAAY,KAAK,EAAE,MAAM,KAAK,CAAC;AAAA,EACjC;AAGA,OAAK,QAAQ,WAAY;AACvB,kBAAc,CAAC;AAAA,EACjB;AAGA,OAAK,MAAM,WAAY;AACrB,WAAO;AAAA,EACT;AAGA,OAAK,QAAQ,SAAU,OAAO;AAC5B,WAAO,MAAM,OAAO,MAAM,MAAM;AAChC,gBAAY;AACZ,QAAI,CAAC;AAAe,sBAAgBA,IAAG,cAAc;AACrD,IAAAA,IAAG,YAAYA,IAAG,YAAY,aAAa;AAC3C,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,gBAAgBA,IAAG,aAAa;AACnE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,OAAO;AACjE,IAAAA,IAAG,cAAcA,IAAG,YAAYA,IAAG,oBAAoBA,IAAG,OAAO;AACjE,IAAAA,IAAG,WAAWA,IAAG,YAAY,GAAGA,IAAG,MAAMA,IAAG,MAAMA,IAAG,eAAe,KAAK;AACzE,aAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,oBAAe,MAAM,YAAY,SAAS;AAC1C,YAAM,IAAI,YAAY,CAAC;AAEvB,QAAE,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAGA,OAAK,OAAO,SAAU,OAAO;AAC3B,SAAK,IAAI,cAAc,CAAC;AACxB,WAAO,KAAK,MAAM,KAAK;AAAA,EACzB;AACF;;;AClbA,eAAsB,sBAAsB,YAAqC;AAC/E,QAAM,UAAU,WAAW,MAAM,WAAW,IAAO,GAAQ,UAAU,IAAI;AACzE,QAAMK,OAAS,GAAM,SAAS,GAAG,CAAC;AAClC,QAAM,MAAgB,CAAI,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,CAAC;AACrE,QAAM,MAAgB,CAAI,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,CAAC,CAAC;AAGrE,QAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC,CAAC;AACrE,QAAM,WAAW,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AAClE,QAAM,WAAW,WAAW,IAAI,MAAM;AACtC,QAAM,SAAS,WAAW;AAC1B,MAAI;AACJ,MAAI,SAAS,GAAG;AACd,UAAM,MAAM,CAAI,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAIA,KAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACnF,UAAM,QAAQ,CAAI,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAM,GAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAErF,UAAM,MAAM,CAAI,GAAI,IAAI,CAAC,GAAG,MAAM,GAAM,GAAI,IAAI,CAAC,GAAG,MAAM,GAAM,GAAI,IAAI,CAAC,GAAG,MAAM,CAAC;AACnF,UAAM,QAAW,GAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;AAClD,YAAW,EAAQ,OAAO,CAAC,GAAG,QAAQ,MAAM,CAAC,KAAK,GAAG,QAAQ,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9E,IAAG,GAAQ,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,KAAK,CAAC;AAAA,EAC9C,OAAO;AACL,YAAW,GAAW,SAAS,CAAC;AAAA,EAClC;AACA,EAAG,GAAQ,CAAC,GAAGA,MAAK,GAAG,KAAK,GAAG,KAAKA,MAAK,SAAS,UAAU,CAAC;AAC7D,SAAO;AACT;;;ACpBA,IAAM,UAAU;AAEhB,IAAI,WAA6B;AACjC,IAAI,YAA8B;AAClC,IAAI,YAA8B;AAElC,IAAIC;AAEJ,IAAM,OAAoG;AAAA,EACxG,UAAU;AAAA,EACV,WAAW;AAAA,EACX,WAAW;AAAA,EACX,aAAa;AACf;AAEO,SAAS,QAAQ;AACtB,OAAK,WAAW;AAChB,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,cAAc;AACrB;AAEO,SAAS,OAAO,OAAe,QAA2B;AAC/D,MAAI;AACJ,MAAI,IAAI,SAAS;AACf,QAAI,IAAI,QAAQ;AACd,UAAI,OAAO,oBAAoB;AAAa,cAAM,IAAI,MAAM,mFAAmF;AAC/I,UAAI,IAAI,gBAAgB,OAAO,MAAM;AAAA,IACvC,OAAO;AACL,UAAI,OAAO,aAAa,aAAa;AACnC,YAAI,SAAS,cAAc,QAAQ;AACnC,UAAE,QAAQ;AACV,UAAE,SAAS;AAAA,MACb,WAAW,OAAO,cAAc,eAAe,UAAU,YAAY,eAAe;AAElF,YAAI,OAAO,IAAI,WAAW;AAAa,cAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,iBAC9D,OAAO,WAAW,WAAW;AAAa,cAAI,IAAI,WAAW,OAAO,OAAO,MAAM;AAAA;AACrF,gBAAM,IAAI,MAAM,wFAAwF;AAAA,MAC/G,OAAO;AACL,cAAM,IAAI,MAAM,kEAAkE;AAAA,MACpF;AAAA,IACF;AAAA,EACF,OAAO;AAEL,QAAI,OAAO,IAAI,WAAW;AAAa,UAAI,IAAI,IAAI,OAAO,OAAO,MAAM;AAAA,aAC9D,OAAO,WAAW,WAAW;AAAa,UAAI,IAAI,WAAW,OAAO,OAAO,MAAM;AAAA,EAE5F;AAEA,SAAO;AACT;AAGO,SAAS,KAAK,OAAkB,QAAoB;AACzD,QAAM,eAAe,UAAU,OAAO,MAAM,OAAO,MAAM,MAAM;AAC/D,QAAM,MAAM,aAAa,WAAW,IAAI;AACxC,MAAI,UAAU,OAAO,GAAG,CAAC;AACzB,SAAO;AACT;AAKA,eAAsBC,SAAQ,OAAcC,SAAgB,YAAqB,MAAsE;AA3EvJ,cAAAC;AA4EE,MAAI,CAAC,OAAO;AAEV,QAAID,QAAO;AAAO,UAAI,+BAA+B;AACrD,WAAO,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,EACtC;AAEA,MACE,EAAE,iBAAoB,OACnB,EAAE,OAAO,UAAU,eAAe,iBAAiB,UACnD,EAAE,OAAO,WAAW,WAAW,eAAe,iBAAiB,WAAW,WAC1E,EAAE,OAAO,cAAc,eAAe,iBAAiB,cACvD,EAAE,OAAO,gBAAgB,eAAe,iBAAiB,gBACzD,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,qBAAqB,eAAe,iBAAiB,qBAC9D,EAAE,OAAO,sBAAsB,eAAe,iBAAiB,sBAC/D,EAAE,OAAO,oBAAoB,eAAe,iBAAiB,kBAChE;AACA,UAAM,IAAI,MAAM,kCAAkC;AAAA,EACpD;AACA,MAAI,iBAAoB,IAAQ;AAC9B,QAAIE,UAAwB;AAC5B,QAAI,MAAM,oBAAoB;AAAG,YAAM,IAAI,MAAM,yDAAyD;AAC1G,QAAI,CAAE,MAAiB;AAAO,YAAM,IAAI,MAAM,sDAAsD;AACpG,QAAK,MAAiB,MAAM,WAAW,GAAG;AACxC,UAAK,MAAiB,MAAM,CAAC,MAAM,GAAG;AACpC,QAAAA,UAAY,GAAW,OAAO,CAAC;AAAA,MACjC,WAAY,MAAiB,MAAM,CAAC,MAAM,GAAG;AAC3C,cAAMC,OAAS,GAAQ,OAAmB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AAChE,QAAAD,UAAY,GAAWC,MAAK,CAAC;AAC7B,QAAG,GAAQA,IAAG;AAAA,MAChB;AAAA,IACF,WAAY,MAAiB,MAAM,WAAW,GAAG;AAC/C,UAAK,MAAiB,MAAM,CAAC,MAAM,GAAG;AACpC,QAAAD,UAAY,GAAM,KAAK;AAAA,MACzB,WAAY,MAAiB,MAAM,CAAC,MAAM,GAAG;AAC3C,QAAAA,UAAY,GAAQ,OAAmB,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAAA,MACtE;AAAA,IACF;AAEA,QAAIA,WAAU,QAAQA,QAAO,MAAM,WAAW,KAAKA,QAAO,MAAM,CAAC,MAAM,KAAKA,QAAO,MAAM,CAAC,MAAM;AAAG,YAAM,IAAI,MAAM,iEAAmE,MAAiB,MAAO,SAAS,CAAC,EAAE;AAC1N,QAAKA,QAAQ,UAAU,SAAS;AAC9B,YAAM,OAAU,GAAKA,SAAQ,SAAS;AACtC,MAAG,GAAQA,OAAM;AACjB,MAAAA,UAAS;AAAA,IACX;AACA,WAAO,EAAE,QAAQA,SAAoB,QAASF,QAAO,OAAO,SAAS,YAAY,KAAM;AAAA,EACzF;AAEA,MAAI,OAAO,MAAM,YAAY,MAAM,eAAgB,MAA2B,cAAc,GAAG;AAC7F,QAAIA,QAAO;AAAO,UAAI,2BAA2B;AACjD,WAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS;AAAA,EAC1C;AACA,QAAM,gBAAwB,MAAM,cAAc,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO,KAAM,MAAM,OAAO,KAAM,MAAM,OAAO,EAAE,CAAC,IAAI;AACxI,QAAM,iBAAyB,MAAM,eAAe,KAAK,MAAM,aAAa,KAAK,MAAM,QAAQ,KAAM,MAAM,OAAO,KAAM,MAAM,OAAO,EAAE,CAAC,IAAI;AAC5I,MAAI,CAAC,iBAAiB,CAAC,gBAAgB;AACrC,QAAIA,QAAO;AAAO,UAAI,mCAAmC;AACzD,WAAO,EAAE,QAAQ,MAAM,QAAQ,SAAS;AAAA,EAC1C;AACA,MAAI,cAAsB;AAC1B,MAAI,eAAuB;AAC3B,MAAI,cAAc,SAAS;AACzB,kBAAc;AACd,mBAAe,KAAK,MAAM,cAAc,iBAAiB,aAAa;AAAA,EACxE;AACA,MAAI,eAAe,SAAS;AAC1B,mBAAe;AACf,kBAAc,KAAK,MAAM,eAAe,gBAAgB,cAAc;AAAA,EACxE;AAGA,SAAK,KAAAA,QAAO,WAAP,mBAAe,UAAS,KAAK;AAAG,kBAAcA,QAAO,OAAO;AAAA,cACvD,KAAAA,QAAO,WAAP,mBAAe,WAAU,KAAK;AAAG,kBAAc,kBAAkBA,QAAO,OAAO,UAAU,KAAK;AACxG,OAAKA,QAAO,OAAO,UAAU,KAAK;AAAG,mBAAeA,QAAO,OAAO;AAAA,YACxDA,QAAO,OAAO,SAAS,KAAK;AAAG,mBAAe,mBAAmBA,QAAO,OAAO,SAAS,KAAK;AACvG,MAAI,CAAC,eAAe,CAAC;AAAc,UAAM,IAAI,MAAM,yCAAyC;AAC5F,MAAI,CAAC,YAAa,SAAS,UAAU,eAAiB,SAAS,WAAW;AAAe,eAAW,OAAO,aAAa,YAAY;AAGpI,QAAM,QAAQ,SAAS,WAAW,IAAI;AACtC,MAAK,OAAO,cAAc,eAAiB,iBAAiB,WAAY;AACtE,UAAM,aAAa,OAAO,GAAG,CAAC;AAAA,EAChC,OAAO;AACL,QAAIA,QAAO,OAAO,QAAQ,OAAO,MAAM,cAAc,aAAa;AAChE,YAAM,UAAU,eAAe,CAAC;AAChC,YAAM,MAAM,IAAI,CAAC;AACjB,YAAM,UAAU,OAAoB,GAAG,GAAG,eAAe,gBAAgB,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AAC9G,YAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IACrC,OAAO;AACL,YAAM,UAAU,OAAoB,GAAG,GAAG,eAAe,gBAAgB,GAAG,GAAG,SAAS,OAAO,SAAS,MAAM;AAAA,IAChH;AAAA,EACF;AAEA,MAAI,CAAC,aAAc,SAAS,UAAU,UAAU,SAAW,SAAS,WAAW,UAAU;AAAS,gBAAY,OAAO,SAAS,OAAO,SAAS,MAAM;AAGpJ,MAAIA,QAAO,OAAO,WAAW,IAAI,MAAM,WAAW;AAChD,QAAI,CAACF;AAAI,MAAAA,MAAK,IAAI,UAAU,IAAY,cAAc,IAAI;AAC1D,QAAI,SAAS,CAAC,CAACA;AACf,QAAI,EAACA,OAAA,gBAAAA,IAAI,MAAK;AACZ,UAAIE,QAAO;AAAO,YAAI,gDAAgD;AACtE,UAAI,MAAM,YAAY;AACtB,MAAAA,QAAO,OAAO,UAAU;AACxB,WAAK,UAAU,SAAS;AAAA,IAE1B,OAAO;AACL,MAAAF,IAAG,MAAM;AACT,UAAIE,QAAO,OAAO,eAAe;AAAG,QAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,aAAa;AAAG,QAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,UAAIA,QAAO,OAAO,cAAc;AAAG,QAAAF,IAAG,IAAI,WAAWE,QAAO,OAAO,SAAS;AAC5E,UAAIA,QAAO,OAAO,SAAS;AAAG,QAAAF,IAAG,IAAI,QAAQE,QAAO,OAAO,IAAI;AAC/D,UAAIA,QAAO,OAAO,eAAe;AAAG,QAAAF,IAAG,IAAI,cAAcE,QAAO,OAAO,UAAU;AACjF,UAAIA,QAAO,OAAO,QAAQ;AAAG,QAAAF,IAAG,IAAI,OAAOE,QAAO,OAAO,GAAG;AAC5D,UAAIA,QAAO,OAAO;AAAU,QAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO;AAAO,QAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO;AAAS,QAAAF,IAAG,IAAI,SAAS;AAC3C,UAAIE,QAAO,OAAO;AAAO,QAAAF,IAAG,IAAI,OAAO;AACvC,UAAIE,QAAO,OAAO;AAAY,QAAAF,IAAG,IAAI,YAAY;AACjD,UAAIE,QAAO,OAAO;AAAa,QAAAF,IAAG,IAAI,aAAa;AACnD,UAAIE,QAAO,OAAO;AAAU,QAAAF,IAAG,IAAI,UAAU;AAC7C,UAAIE,QAAO,OAAO,aAAa;AAAG,QAAAF,IAAG,IAAI,YAAYE,QAAO,OAAO,QAAQ;AAC3E,YAAIC,MAAAH,IAAG,IAAI,MAAP,gBAAAG,IAAU,UAAS;AAAG,oBAAYH,IAAG,MAAM,QAAQ;AAAA;AAClD,oBAAYA,IAAG,KAAK,QAAQ;AAAA,IACnC;AAAA,EACF,OAAO;AACL,SAAK,UAAU,SAAS;AACxB,QAAIA;AAAI,MAAAA,MAAK;AACb,QAAI,SAAS,CAAC,CAACA;AAAA,EACjB;AAEA,MAAI,CAAC;AAAW,WAAO,EAAE,QAAQ,MAAM,QAAQ,UAAU;AACzD,MAAI,CAAC;AAAW,UAAM,IAAI,MAAM,oCAAoC;AAGpE,MAAI;AACJ,MAAI,QAAQ;AACZ,MAAK,OAAO,cAAc,eAAe,iBAAiB,aAAgB,MAAoB,QAAS,MAAoB,SAAU,MAAoB,QAAS;AAChK,QAAI,IAAI,WAAc,IAAS;AAC7B,eAAY,KAAa,GAAQ,WAAW,KAAkB,IAAI;AAAA,IACpE,OAAO;AACL,cAAS,MAAoB,KAAK,SAAU,MAAoB,SAAU,MAAoB;AAE9F,YAAM,MAAM,IAAI,WAAY,MAAoB,KAAK,MAAM;AAC3D,eAAY,GAAO,KAAK,CAAE,MAAoB,QAAS,MAAoB,OAAO,KAAK,GAAG,OAAO;AAAA,IACnG;AAAA,EACF,OAAO;AACL,QAAI,CAAC,aAAc,UAAU,UAAU,UAAU,SAAW,UAAU,WAAW,UAAU;AAAS,kBAAY,OAAO,UAAU,OAAO,UAAU,MAAM;AACxJ,QAAO,MAAW,IAAI,SAAS;AAC7B,UAAIE,QAAO,YAAY,WAAWA,QAAO,YAAY,aAAaA,QAAO,YAAY,UAAU;AAC7F,iBAAY,GAAQ,WAAW,SAA8B;AAAA,MAC/D,OAAO;AACL,oBAAY,KAAK,SAAS;AAC1B,iBAAY,GAAQ,WAAW,SAA8B;AAAA,MAC/D;AAAA,IACF,OAAO;AACL,YAAM,aAAa,KAAK,SAAS;AACjC,YAAM,UAAU,WAAW,WAAW,IAAI;AAC1C,YAAM,WAAW,QAAQ,aAAa,GAAG,GAAG,aAAa,YAAY;AACrE,cAAQ,SAAS,KAAK,SAAS,cAAc;AAC7C,YAAM,MAAM,IAAI,WAAW,SAAS,KAAK,MAAM;AAC/C,eAAY,GAAO,KAAK,CAAC,aAAa,cAAc,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,MAAI,UAAU,GAAG;AACf,UAAMG,OAAS,GAAQ,QAAQ,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;AACrD,IAAG,GAAQ,MAAM;AACjB,aAASA;AAAA,EACX;AACA,MAAI,CAAC;AAAQ,UAAM,IAAI,MAAM,mCAAmC;AAChE,QAAM,SAAoB,GAAK,QAAQ,SAAS;AAChD,QAAM,SAAiBH,QAAO,OAAO,eAAe,MAAc,sBAAsB,MAAM,IAAO,GAAW,QAAQ,CAAC;AACzH,EAAG,GAAQ,CAAC,QAAQ,MAAM,CAAC;AAE3B,MAAIA,QAAO,OAAO,gBAAgB;AAChC,UAAM,MAAS,GAAI,MAAM;AACzB,UAAM,SAAS,MAAM,IAAI,KAAK;AAC9B,IAAAA,QAAO,OAAO,aAAa,OAAO,CAAC,IAAI,IAAK,IAAI,OAAO,CAAC,IAAI,MAAQ,IAAI,OAAO,CAAC;AAChF,IAAG,GAAQ,GAAG;AAAA,EAChB;AAEA,SAAO,EAAE,QAA4B,QAASA,QAAO,OAAO,SAAS,YAAY,KAAM;AACzF;AAgCA,eAAsB,KAAKA,SAAyB,OAAe;AACjE,MAAI,YAAY;AAChB,MAAIA,QAAO,qBAAqB,KAAK,CAAC,MAAM,SAAS,MAAM,MAAM,WAAW,KAAK,MAAM,MAAM,CAAC,IAAI,QAAQ,MAAM,MAAM,CAAC,IAAI;AAAM,WAAO;AAcxI,MAAI,CAAC,KAAK,aAAa;AACrB,SAAK,cAAiB,GAAM,KAAK;AAAA,EACnC,WAAW,KAAK,YAAY,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,KAAK,KAAK,YAAY,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG;AACvG,IAAG,GAAQ,KAAK,WAAW;AAC3B,SAAK,cAAiB,GAAM,KAAK;AAAA,EACnC,OAAO;AACL,UAAMI,MAA4B,CAAC;AACnC,IAAAA,IAAE,OAAU,GAAI,OAAO,KAAK,WAAW;AACvC,IAAAA,IAAE,UAAa,GAAIA,IAAE,MAAMA,IAAE,IAAI;AACjC,IAAAA,IAAE,MAAS,GAAIA,IAAE,OAAO;AACxB,UAAM,UAAU,MAAMA,IAAE,IAAI,KAAK;AACjC,UAAM,eAAe,QAAQ,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,MAAM,CAAC,KAAK,KAAK,MAAM;AACxF,IAAG,GAAQ,CAAC,KAAK,aAAaA,IAAE,MAAMA,IAAE,SAASA,IAAE,GAAG,CAAC;AACvD,SAAK,cAAiB,GAAM,KAAK;AACjC,gBAAY,iBAAiBJ,QAAO,oBAAoB;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,eAAsB,QAAQA,SAAyB,QAAgB,QAAiC;AACtG,QAAMI,MAA4B,CAAC;AACnC,MAAI,CAAC,UAAU,CAAC,UAAU,OAAO,MAAM,WAAW,KAAK,OAAO,MAAM,WAAW,OAAO,MAAM,QAAQ;AAClG,QAAI,CAACJ,QAAO;AAAO,UAAI,uDAAuD,OAAO,OAAO,OAAO,KAAK;AACxG,WAAO;AAAA,EACT;AACA,MAAI,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,MAAM,CAAC,MAAM,GAAG;AACpG,QAAI,CAACA,QAAO;AAAO,UAAI,yDAAyD,OAAO,OAAO,OAAO,KAAK;AAC1G,WAAO;AAAA,EACT;AACA,EAAAI,IAAE,SAAY,GAAM,MAAM;AAC1B,EAAAA,IAAE,SAAU,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,KAAK,OAAO,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,IAAQ,GAAM,eAAe,QAAoB,CAAC,OAAO,MAAM,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,IAAO,GAAM,MAAM;AAC3L,EAAAA,IAAE,OAAU,GAAIA,IAAE,QAAQA,IAAE,MAAM;AAClC,EAAAA,IAAE,UAAa,GAAIA,IAAE,MAAMA,IAAE,IAAI;AACjC,EAAAA,IAAE,MAAS,GAAIA,IAAE,OAAO;AACxB,QAAM,UAAU,MAAMA,IAAE,IAAI,KAAK;AACjC,QAAM,eAAe,QAAQ,CAAC,KAAK,OAAO,MAAM,CAAC,KAAK,MAAM,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM;AAC1F,EAAG,GAAQ,CAACA,IAAE,QAAQA,IAAE,QAAQA,IAAE,MAAMA,IAAE,SAASA,IAAE,GAAG,CAAC;AACzD,SAAO;AACT;;;ACvVA;AAIO,IAAM,MAAN,MAAU;AAAA,EAgGf,cAAc;AA9Fd;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA,oCAAmB;AAEnB;AAAA,iCAAgB;AAEhB;AAAA,oCAAqB,CAAC;AAEtB;AAAA;AAEA;AAAA;AAEA;AAAA;AAIA;AAAA;AAEA;AAAA,mCAAmB;AAEnB;AAAA,sCAGI;AAAA,MACA,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AAEF;AAAA,gCAKI;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAEF;AAAA,iCAOI;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAEF;AAAA,kCAII;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,MACT,SAAS;AAAA,IACX;AAEF;AAAA,+BAGI;AAAA,MACA,OAAO;AAAA,MACP,OAAO,CAAC;AAAA,IACV;AAEF;AAAA,mCAAoB,CAAC;AAGrB;AAAA;AACA;AACA;AAYE,SAAK,UAAW,OAAO,cAAc,eAAiB,OAAO,UAAU,eAAe;AACtF,SAAK,OAAQ,OAAO,YAAY,eAAiB,OAAO,QAAQ,aAAa,eAAiB,OAAO,QAAQ,SAAS,SAAS;AAC/H,SAAK,OAAO,EAAE,SAAY,IAAQ,WAAW,EAAE;AAC/C,SAAK,YAAY,OAAO,oBAAoB;AAC5C,SAAK,UAAU;AAGf,SAAK,SAAS,KAAK,WAAW,KAAK,YAAa,OAAO,sBAAsB,cAAe;AAC5F,QAAK,OAAO,cAAc,eAAiB,OAAO,UAAU,cAAc,aAAc;AACtF,YAAM,QAAQ,UAAU,aAAa;AACrC,YAAM,MAAM,MAAM,MAAM,eAAe;AACvC,UAAI,2BAAM,IAAI;AACZ,cAAM,gBAAgB,IAAI,CAAC,EAAE,MAAM,eAAe;AAClD,aAAK,YAAY,+CAAgB,MAAM,cAAc,CAAC,EAAE,QAAQ,UAAU,EAAE,IAAI;AAChF,aAAK,QAAQ,MAAM,QAAQ,IAAI,CAAC,GAAG,EAAE;AACrC,YAAI,KAAK,SAAS,CAAC;AAAG,eAAK,QAAQ,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,EAAE;AAChE,aAAK,QAAQ,KAAK,MAAM,QAAQ,OAAO,GAAG;AAAA,MAC5C;AAAA,IACF,WAAW,OAAO,YAAY,aAAa;AACzC,WAAK,WAAW,GAAG,QAAQ,QAAQ,IAAI,QAAQ,IAAI;AACnD,WAAK,QAAQ,UAAU,QAAQ,OAAO;AAAA,IACxC;AAAA,EACF;AAAA,EAhCA,IAAI,SAAS;AAAE,WAAO,mBAAK;AAAA,EAAS;AAAA,EACpC,IAAI,OAAO,KAAK;AAAE,uBAAK,SAAU;AAAK,eAAW,SAAS;AAAA,EAAK;AAAA,EAC/D,IAAI,QAAQ;AAAE,WAAO,mBAAK;AAAA,EAAQ;AAAA;AAAA,EAElC,IAAI,MAAM,KAAK;AAAE,uBAAK,QAAS;AAAK,eAAW,QAAQ;AAAA,EAAK;AAAA,EAC5D,IAAI,YAAY;AAAE,WAAO,mBAAK;AAAA,EAAY;AAAA;AAAA,EAE1C,IAAI,UAAU,KAAK;AAAE,uBAAK,YAAa;AAAK,eAAW,YAAY;AAAA,EAAK;AAAA;AAAA,EA4BxE,MAAM,gBAAgB;AAEpB,SAAK,WAAW,OAAO,KAAQ,GAAO,EAAE,eAAe;AACvD,QAAI;AACF,WAAK,aAAa;AAAA,QAChB,SAAa,GAAQ,EAAE,SAAS,IAAO,GAAQ,EAAE,SAAS,EAAE,aAAa;AAAA,QACzE,KAAS,GAAQ,EAAE,SAAS,IAAO,GAAQ,EAAE,SAAS,EAAE,iBAAiB,IAAI;AAAA,MAC/E;AAAA,IACF,SAAQ;AAAA,IAAO;AACf,SAAK,KAAK,YAAY,OAAO,gBAAgB;AAC7C,SAAK,KAAK,UAAU,KAAK,SAAS,SAAS,MAAM;AACjD,QAAI,KAAK,KAAK,aAAa,KAAK,KAAK,SAAS;AAC5C,WAAK,KAAK,OAAO,MAAS,EAAI,EAAE,SAAS,uBAAuB;AAChE,WAAK,KAAK,cAAc,MAAS,EAAI,EAAE,SAAS,8BAA8B;AAAA,IAChF;AACA,UAAM,IAAU,OAAO,KAAK,GAAG;AAC/B,UAAMC,MAAK,IAAI,EAAE,WAAW,QAAQ,IAA8B;AAClE,SAAK,MAAM,YAAY,OAAOA,QAAO;AACrC,SAAK,MAAM,UAAU,KAAK,SAAS,SAAS,OAAO;AACnD,QAAI,KAAK,MAAM,aAAa,KAAK,MAAM,WAAWA,KAAI;AACpD,WAAK,MAAM,UAAUA,IAAG,aAAaA,IAAG,OAAO;AAC/C,WAAK,MAAM,SAASA,IAAG,aAAaA,IAAG,MAAM;AAC7C,WAAK,MAAM,WAAWA,IAAG,aAAaA,IAAG,QAAQ;AACjD,WAAK,MAAM,SAASA,IAAG,aAAaA,IAAG,wBAAwB;AAAA,IACjE;AACA,SAAK,OAAO,YAAY,KAAK,WAAW,OAAO,cAAc,eAAe,OAAO,UAAU,QAAQ;AACrG,SAAK,OAAO,UAAU,KAAK,SAAS,SAAS,QAAQ;AACrD,QAAI;AACF,UAAI,KAAK,OAAO,WAAW;AACzB,cAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AACnD,aAAK,OAAO,UAAU,OAAM,mCAAS;AAAA,MACvC;AAAA,IACF,SAAQ;AACN,WAAK,OAAO,YAAY;AAAA,IAC1B;AACA,QAAI;AACF,WAAK,UAAa,GAAwB,GAAW,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC;AAAA,IACzG,SAAQ;AAAA,IAAO;AAAA,EACjB;AAAA;AAAA,EAGA,YAAY;AACV,UAAM,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,EAAE;AACnC,QAAI,KAAK,QAAQ,KAAK,SAAS,WAAW,OAAO,GAAG;AAAA,IAWpD;AACA,QAAI,CAAC,KAAK;AAAK,aAAO,eAAe,MAAM,OAAO,EAAE,OAAO,IAAI,CAAC;AAAA;AAC3D,WAAK,MAAM;AAAA,EAClB;AACF;AAjGE;AACA;AACA;AAiGK,IAAM,MAAM,IAAI,IAAI;;;AC/JpB,IAAM,SAAN,MAAa;AAAA,EAUlB,cAAc;AARd;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA,mCAA6B,CAAC;AA2D9B,wBAAO,aAAY,YAAwC;AACzD,UAAI;AACF,cAAM,UAAU,MAAM,UAAU,aAAa,iBAAiB;AAC9D,aAAK,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,YAAY;AAAA,MACxE,SAAQ;AACN,aAAK,UAAU,CAAC;AAAA,MAClB;AACA,aAAO,KAAK;AAAA,IACd;AAGA;AAAA,wBAAO,SAAQ,OAAO,iBAA0D;AAzGlF;AA2GI,UAAI,6CAAc;AAAO,aAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc;AAAM,aAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc;AAAM,aAAK,OAAO,OAAO,6CAAc;AACzD,UAAI,6CAAc;AAAO,aAAK,OAAO,QAAQ,6CAAc;AAC3D,UAAI,6CAAc;AAAQ,aAAK,OAAO,SAAS,6CAAc;AAC7D,UAAI,6CAAc;AAAI,aAAK,OAAO,KAAK,6CAAc;AAGrD,UAAI,6CAAc,SAAS;AACzB,YAAI,OAAO,aAAa,YAAY,UAAU;AAC5C,gBAAMC,MAAK,SAAS,eAAe,aAAa,OAAO;AACvD,cAAIA,OAAMA,eAAc,kBAAkB;AACxC,iBAAK,UAAUA;AAAA,UACjB,OAAO;AACL,gBAAI,KAAK,OAAO;AAAO,kBAAI,UAAU,0BAA0B,aAAa,OAAO;AACnF,mBAAO,yCAAyC,aAAa,OAAO;AAAA,UACtE;AAAA,QACF,WAAW,aAAa,mBAAmB,kBAAkB;AAC3D,eAAK,UAAU,aAAa;AAAA,QAC9B,OAAO;AACL,cAAI,KAAK,OAAO;AAAO,gBAAI,UAAU,uBAAuB,aAAa,OAAO;AAChF,iBAAO,sCAAsC,aAAa,OAAO;AAAA,QACnE;AAAA,MACF,OAAO;AACL,aAAK,UAAU,SAAS,cAAc,OAAO;AAAA,MAC/C;AAGA,YAAM,uBAA+C;AAAA,QACnD,OAAO;AAAA,QACP,OAAO;AAAA,UACL,YAAY,KAAK,OAAO,SAAS,UAAU,SAAS;AAAA;AAAA,UAEpD,YAAY,KAAK,OAAO,OAAO,mBAAmB;AAAA,QACpD;AAAA,MACF;AACA,YAAI,UAAK,WAAL,mBAAa,SAAQ;AAAG,QAAC,qBAAqB,MAAgC,QAAQ,EAAE,OAAO,KAAK,OAAO,MAAM;AACrH,YAAI,UAAK,WAAL,mBAAa,UAAS;AAAG,QAAC,qBAAqB,MAAgC,SAAS,EAAE,OAAO,KAAK,OAAO,OAAO;AACxH,UAAI,KAAK,OAAO;AAAI,QAAC,qBAAqB,MAAkC,WAAW,KAAK,OAAO;AAGnG,WAAK,QAAQ,iBAAiB,QAAQ,MAAM;AAAE,YAAI,KAAK,OAAO;AAAO,cAAI,UAAU,MAAM;AAAA,MAAG,CAAC;AAC7F,WAAK,QAAQ,iBAAiB,SAAS,MAAM;AAAE,YAAI,KAAK,OAAO;AAAO,cAAI,UAAU,OAAO;AAAA,MAAG,CAAC;AAC/F,WAAK,QAAQ,iBAAiB,SAAS,YAAY;AACjD,YAAI,CAAC,KAAK,WAAW,CAAC,KAAK;AAAQ;AACnC,YAAI,KAAK,QAAQ;AAAQ,gBAAM,KAAK,QAAQ,KAAK;AAAA;AAC5C,eAAK,QAAQ,MAAM;AAAA,MAC1B,CAAC;AAGD,UAAI,EAAC,uCAAW,eAAc;AAC5B,YAAI,KAAK,OAAO;AAAO,cAAI,gBAAgB,YAAY;AACvD,eAAO;AAAA,MACT;AACA,UAAI;AACF,aAAK,SAAS,MAAM,UAAU,aAAa,aAAa,oBAAoB;AAAA,MAC9E,SAAS,KAAK;AACZ,YAAI,UAAU,GAAG;AACjB,eAAO,iBAAiB,GAAG;AAAA,MAC7B;AACA,UAAI,CAAC,KAAK,QAAQ;AAChB,YAAI,KAAK,OAAO;AAAO,cAAI,gBAAgB,WAAW;AACtD,eAAO;AAAA,MACT;AACA,WAAK,QAAQ,YAAY,KAAK;AAC9B,YAAM,QAAQ,IAAI,QAAQ,CAAC,YAAY;AACrC,YAAI,CAAC,KAAK;AAAS,kBAAQ,KAAK;AAAA;AAC3B,eAAK,QAAQ,eAAe,MAAM,QAAQ,IAAI;AAAA,MACrD,CAAC;AACD,YAAM;AACN,YAAM,KAAK,QAAQ,KAAK;AAExB,UAAI,KAAK,OAAO,OAAO;AACrB,YAAI,UAAU;AAAA,UACZ,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA,UACZ,QAAQ,KAAK;AAAA,UACb,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,aAAa,KAAK;AAAA,UAClB,cAAc,KAAK;AAAA,QACrB,CAAC;AAAA,MACH;AACA,aAAO,WAAW,KAAK,KAAK;AAAA,IAC9B;AAGA;AAAA,wBAAO,SAAQ,MAAY;AACzB,UAAI,KAAK;AAAS,aAAK,QAAQ,MAAM;AAAA,IACvC;AAGA;AAAA,wBAAO,QAAO,YAA2B;AACvC,UAAI,KAAK;AAAS,cAAM,KAAK,QAAQ,KAAK;AAAA,IAC5C;AAGA;AAAA,wBAAO,QAAO,MAAY;AACxB,UAAI,KAAK,OAAO;AAAO,YAAI,UAAU,MAAM;AAC3C,UAAI,KAAK;AAAO,aAAK,MAAM,KAAK;AAAA,IAClC;AA1KE,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,IAAW,QAAsC;AAC/C,QAAI,CAAC,KAAK;AAAQ,aAAO;AACzB,WAAO,KAAK,OAAO,eAAe,EAAE,CAAC;AAAA,EACvC;AAAA;AAAA,EAGA,IAAW,eAAmD;AAC5D,QAAI,CAAC,KAAK;AAAO,aAAO;AACxB,WAAO,KAAK,MAAM,kBAAkB,KAAK,MAAM,gBAAgB,IAAI;AAAA,EACrE;AAAA;AAAA,EAGA,IAAW,cAAiD;AAC1D,QAAI,CAAC,KAAK;AAAO,aAAO;AACxB,WAAO,KAAK,MAAM,iBAAiB,KAAK,MAAM,eAAe,IAAI;AAAA,EACnE;AAAA;AAAA,EAGA,IAAW,WAA2C;AACpD,QAAI,CAAC,KAAK;AAAQ,aAAO;AACzB,UAAM,QAA0B,KAAK,OAAO,eAAe,EAAE,CAAC;AAC9D,WAAO,MAAM,cAAc,MAAM,YAAY,IAAI;AAAA,EACnD;AAAA;AAAA,EAGA,IAAW,QAAgB;AACzB,QAAI,CAAC,KAAK;AAAO,aAAO;AACxB,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA;AAAA,EAGA,IAAW,SAAkB;AAhF/B;AAiFI,aAAO,UAAK,YAAL,mBAAc,WAAU;AAAA,EACjC;AAAA;AAAA,EAGA,IAAW,QAAgB;AArF7B;AAsFI,aAAO,UAAK,YAAL,mBAAc,eAAc;AAAA,EACrC;AAAA;AAAA,EAGA,IAAW,SAAiB;AA1F9B;AA2FI,aAAO,UAAK,YAAL,mBAAc,gBAAe;AAAA,EACtC;AAqHF;;;ACjNA;AAAA;AAAA,+BAAAC;AAAA,EAAA;AAAA,yBAAAC;AAAA,EAAA;AAAA;AAAA,0BAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,wBAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA,wBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA,+BAAAC;AAAA,EAAA,0BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,8BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,iCAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA,wBAAAC;AAAA,EAAA;AAAA,mBAAAC;AAAA,EAAA,iBAAAC;AAAA,EAAA;AAAA,8BAAAC;AAAA,EAAA;AAAA,6BAAAC;AAAA,EAAA,2BAAAC;AAAA,EAAA,6BAAAC;AAAA,EAAA;AAAA;AAAA,uCAAAC;AAAA,EAAA,uCAAAC;AAAA,EAAA,uCAAAC;AAAA,EAAA,qCAAAC;AAAA,EAAA,qCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAAAC;AAAA,EAAA,2BAAAC;AAAA,EAAA,yBAAAC;AAAA,EAAA;AAAA,qBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA,mBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACE,gBAAa;AACb,gBAAa;AACb,gBAAa;AACb,cAAW;AACX,eAAY;AACZ,cAAW;AACX,IAAAb,oBAAqB;AACrB,gBAAa;AACb,WAAQ;AACR,eAAY;AACZ,aAAU;AACV,IAAAO,oBAAqB;AACrB,IAAA3B,sBAAuB;AACvB,UAAO;AACP,IAAAE,iBAAkB;AAClB,IAAAC,kBAAmB;AACnB,IAAAC,qBAAsB;AACtB,IAAAC,iBAAkB;AAClB,IAAAC,kBAAmB;AACnB,IAAAC,iBAAkB;AAClB,oBAAiB;AACjB,gBAAa;AACb,IAAAK,2BAA4B;AAC5B,IAAAD,qBAAsB;AACtB,IAAAE,0BAA2B;AAC3B,IAAAC,2BAA4B;AAC5B,IAAAC,eAAgB;AAChB,IAAAC,UAAW;AACX,IAAAC,UAAW;AACX,WAAQ;AACR,IAAAC,qBAAsB;AACtB,aAAU;AACV,iBAAc;AACd,IAAAC,oBAAqB;AACrB,IAAAE,sBAAuB;AACvB,mBAAgB;AAChB,WAAQ;AACR,iBAAc;AACd,oBAAiB;AACjB,IAAAO,oBAAqB;AACrB,IAAAC,kBAAmB;AACnB,cAAW;AACX,cAAW;AACX,UAAO;AACP,aAAU;AACV,IAAA5B,gBAAiB;AACjB,IAAAO,uBAAwB;AACxB,IAAAC,wBAAyB;AACzB,IAAAC,mBAAoB;AACpB,IAAAY,8BAA+B;AAC/B,IAAAC,gCAAiC;AACjC,IAAAC,gCAAiC;AACjC,IAAAC,8BAA+B;AAC/B,IAAAC,8BAA+B;AAC/B,IAAAI,YAAa;AACb,IAAAC,YAAa;AACb,IAAAC,YAAa;AACb,IAAAC,YAAa;AA1Df;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAO;AAAA,EACA,uBAAA3B;AAAA,EACA;AAAA,EACA,kBAAAE;AAAA,EACA,mBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,4BAAAK;AAAA,EACA,sBAAAD;AAAA,EACA,2BAAAE;AAAA,EACA,4BAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,sBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAC;AAAA,EACA,uBAAAE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,qBAAAO;AAAA,EACA,mBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAA5B;AAAA,EACA,wBAAAO;AAAA,EACA,yBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,+BAAAY;AAAA,EACA,iCAAAC;AAAA,EACA,iCAAAC;AAAA,EACA,+BAAAC;AAAA,EACA,+BAAAC;AAAA,EACA,aAAAI;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AACF;;;ACrDA,IAAM,UAAU;AAAA,EACd,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,eAAe;AACjB;AAWO,IAAM,aAAwC,CAAC;AAEtD,eAAe,YAAY,KAAaC,OAA8C;AACpF,MAAI,QAAQ;AAAO,QAAI,qBAAqB,KAAKA,KAAI;AACrD,SAAO,MAAM,KAAKA,KAAI;AACxB;AAEO,SAAS,oBAAoBC,SAAgB;AAClD,UAAQ,cAAcA,QAAO;AAC7B,UAAQ,UAAUA,QAAO;AACzB,UAAQ,gBAAgBA,QAAO;AACjC;AAEA,eAAsB,UAAU,WAAoD;AApCpF,cAAAC,KAAAC;AAqCE,MAAI,WAAW,KAAK,QAAQ,eAAe,aAAa,EAAE;AAC1D,MAAI,CAAC,SAAS,YAAY,EAAE,SAAS,OAAO;AAAG,gBAAY;AAC3D,QAAM,oBAAoB,SAAS,SAAS,GAAG,IAAI,SAAS,MAAM,GAAG,IAAI,SAAS,MAAM,IAAI;AAC5F,QAAM,iBAAiB,kBAAkB,kBAAkB,SAAS,CAAC,EAAE,QAAQ,SAAS,EAAE;AAC1F,QAAM,kBAAkB,iBAAiB;AACzC,aAAW,cAAc,IAAI;AAAA,IAC3B,MAAM;AAAA,IACN,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,aAAa,eAAW,cAAc;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,EACP;AACA,UAAQ,iBAAkB,OAAO,cAAc;AAC/C,MAAI,eAAe,CAAC;AACpB,MAAI;AACF,mBAAgB,QAAQ,kBAAkB,QAAQ,cAAe,MAAS,GAAG,WAAW,IAAI,CAAC;AAAA,EAC/F,SAAQ;AACN,YAAQ,iBAAiB;AAAA,EAC3B;AACA,aAAW,cAAc,EAAE,UAAW,QAAQ,kBAAkB,QAAQ,eAAgB,OAAO,KAAK,YAAY,EAAE,SAAS,eAAe;AAC1I,aAAW,cAAc,EAAE,MAAM,WAAW,cAAc,EAAE,UAAU,kBAAkB;AACxF,QAAM,gBAAgB,OAAO,UAAU,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,KAAaH,UAAuB,YAAY,KAAKA,KAAI,EAAE;AACnI,MAAII,UAAoB,IAAO,GAAW,WAAW,cAAc,EAAE,KAAK,aAAa;AACvF,MAAI,SAAS;AACb,MAAI;AAEF,IAAAA,QAAM,cAAc;AACpB,QAAI,QAAQ;AAAO,UAAI,uBAAuBA,QAAM,SAAS,CAAC;AAAA,EAChE,SAAS,KAAK;AACZ,QAAI,oCAAoC,UAAU,GAAG;AAAA,EACvD;AACA,MAAI;AAEF,UAAM,YAAY,QAAM,KAAAA,QAAM,YAAN,mBAAe,WAAU;AACjD,eAAW,cAAc,EAAE,qBAAmB,4CAAW,eAAX,mBAAuB,eAAc;AACnF,QAAI;AAAW,MAAAA,QAAM,SAAS,SAAS;AAAA;AAClC,MAAAA,UAAQ,MAAS,GAAe,WAAW,cAAc,EAAE,UAAU,kBAAkB,UAAU,aAAa;AAEnH,eAAW,cAAc,EAAE,sBAAoBD,OAAAD,MAAAE,QAAM,cAAN,gBAAAF,IAAiB,eAAjB,gBAAAC,IAA6B,eAAc;AAC1F,QAAI,QAAQ;AAAS,UAAI,SAAS,EAAE,OAAO,gBAAgB,KAAKC,QAAM,UAAU,GAAG,OAAO,WAAW,cAAc,EAAE,kBAAkB,CAAC;AACxI,aAAS;AAAA,EACX,SAAS,KAAK;AACZ,QAAI,wBAAwB,UAAU,GAAG;AAAA,EAC3C;AACA,MAAI,UAAU,QAAQ,eAAe,QAAQ,kBAAkB,CAAC,WAAW,cAAc,EAAE,SAAS;AAClG,QAAI;AACF,YAAM,aAAa,MAAMA,QAAM,KAAK,eAAe;AACnD,UAAI,QAAQ;AAAO,YAAI,gBAAgB,iBAAiB,UAAU;AAAA,IACpE,SAAS,KAAK;AACZ,UAAI,uBAAuB,UAAU,GAAG;AAAA,IAC1C;AAAA,EACF;AACA,SAAOA;AACT;;;ACzFE,cAAW;;;ACMN,IAAMC,UAAS;AAAA,EACpB,MAAM;AAAA,EACN,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,IAAI;AAAA,EACJ,YAAY,CAAC;AAAA,EACb,WAAW;AAAA;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,uBAAuB;AAAA,IACvB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,8BAA8B;AAAA;AAAA,IAC9B,gBAAgB;AAAA;AAAA,EAClB;AACF;AAEA,SAAS,aAAmB;AAK1B,QAAMC,MAAKD,QAAO;AAClB,MAAI,CAACC;AAAI;AACT,EAAAD,QAAO,aAAaC,IAAG,uBAAuB;AAEhD;AAOO,SAAS,SAAS,UAAuB;AA1ChD;AA4CE,MAAI,SAAS,OAAO,YAAY;AAAW;AAC3C,MAAKD,QAAO,QAAW,GAAO,EAAE,YAAa,GAAC,KAAAA,WAAA,gBAAAA,QAAQ,OAAR,mBAAY,aAAaA,QAAO,GAAG,WAAU;AACzF,QAAI,wCAAwC;AAC5C,aAAS,OAAO,MAAM;AAAA,EAMxB;AACA,MAAI,CAAI,IAAYA,QAAO,IAAI,GAAG;AAChC,QAAI;AACF,MAAAA,QAAO,SAAe,OAAO,KAAK,GAAG;AAAA,IACvC,SAAS,KAAK;AACZ,UAAI,wCAAwC,GAAG;AAC/C;AAAA,IACF;AACA,QAAI;AACF,MAAAA,QAAO,KAAKA,QAAO,OAAO,WAAW,UAAUA,QAAO,SAAS;AAC/D,UAAI,CAACA,QAAO,IAAI;AACd,YAAI,yCAAyC;AAC7C;AAAA,MACF;AACA,YAAM,OAAOA,QAAO,GAAG,aAAaA,QAAO,GAAG,OAAO,EAAE,SAAS,KAAK;AACrE,UAAI,CAAC,MAAM;AACT,YAAI,6EAA6E;AACjF,iBAAS,OAAO,UAAU;AAC1B;AAAA,MACF;AACA,UAAIA,QAAO,QAAQ;AACjB,QAAAA,QAAO,OAAO,iBAAiB,oBAAoB,CAAC,MAAM;AACxD,cAAI,kBAAkB,EAAE,IAAI;AAC5B,cAAI,0FAA0F;AAC9F,mBAAS,KAAK,OAAO;AACrB,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD,CAAC;AACD,QAAAA,QAAO,OAAO,iBAAiB,wBAAwB,CAAC,MAAM;AAC5D,cAAI,oCAAoC,CAAC;AAAA,QAC3C,CAAC;AACD,QAAAA,QAAO,OAAO,iBAAiB,6BAA6B,CAAC,MAAM;AACjE,cAAI,kCAAkC,CAAC;AAAA,QACzC,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,4CAA4C,GAAG;AACnD;AAAA,IACF;AACA,QAAI;AACF,MAAG,GAAgB,GAAGA,QAAO,EAAE;AAAA,IACjC,SAAS,KAAK;AACZ,UAAI,4CAA4C,GAAG;AACnD;AAAA,IACF;AACA,QAAI;AACF,YAAM,MAAM,IAAO,GAAaA,QAAO,EAAE;AAEzC,MAAG,GAAgBA,QAAO,MAAM,MAAM,IAAO,GAAiB,GAAG,GAAGA,QAAO,QAAQ;AAAA,IACrF,SAAS,KAAK;AACZ,UAAI,iDAAiD,GAAG;AACxD;AAAA,IACF;AACA,QAAI;AACF,YAAM,UAAa,GAAqB,OAAO;AAC/C,cAAQ,QAAQ,CAAC,iBAAiB;AAChC,cAAM,kBAAkB,EAAE,GAAG,cAAc,aAAaA,QAAO,KAAK;AACpE,QAAG,GAAe,eAAe;AAAA,MACnC,CAAC;AAAA,IACH,SAAS,KAAK;AACZ,UAAI,4DAA4D,GAAG;AACnE;AAAA,IACF;AACA,QAAI;AAEF,UAAO,EAAI,EAAE,aAAa;AAAe,QAAG,EAAI,EAAE,IAAI,iBAAiB,CAAC;AAAA,IAC1E,SAAS,KAAK;AACZ,UAAI,kDAAkD,GAAG;AACzD;AAAA,IACF;AACA,eAAW;AACX,UAAM,UAAa,GAAQ;AAC3B,UAAM,UAAU,OAAO,QAAQ,OAAO,MAAM,cAAc,QAAQ,iBAAiB,EAAE,EAAE,KAAK;AAC5F,QAAI,SAAS;AACX,UAAI,SAAS,OAAO;AAAO,YAAI,+BAA+B,EAAE,OAAO,QAAQ,aAAa,QAAQ,OAAO,GAAa,UAAU,QAAQ,aAAa,QAAQ,QAAQ,EAAY,CAAC;AAAA,IACtL,OAAO;AACL,UAAI,yCAAyC,SAASA,QAAO,EAAE;AAAA,IACjE;AAAA,EACF;AACF;;;AChIO,IAAM,YAAwD;AAAA,EACnE,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK,CAAC,QAAQ,OAAQ,KAAM;AAC9B;AAEO,SAAS,OAAO;AACrB,YAAU,QAAW,GAAO,KAAO,SAAS;AAC5C,YAAU,MAAS,GAAO,GAAK,SAAS;AACxC,YAAU,MAAS,GAAO,GAAK,SAAS;AACxC,YAAU,OAAU,GAAO,KAAK,SAAS;AACzC,YAAU,QAAW,GAAO,OAAO,SAAS;AAC5C,YAAU,MAAS,GAAS,CAAC,QAAQ,OAAQ,KAAM,GAAG,SAAS;AACjE;;;ACTA,eAAsB,iBAAuC;AAV7D;AAWE,QAAM,IAAI,cAAc;AACxB,OAAI,SAAI,eAAJ,mBAAgB;AAAS,WAAO;AACpC,MAAI,IAAI,OAAO,aAAa,IAAI,OAAO;AAAS,WAAO;AACvD,MAAI,IAAI,MAAM,aAAa,IAAI,MAAM;AAAS,WAAO;AACrD,MAAI,IAAI,KAAK,aAAa,IAAI,KAAK;AAAS,WAAO;AACnD,SAAO;AACT;AAEA,SAAS,kBAAkBE,SAAgB;AACzC,QAAM,aAAuB,CAAC;AAC9B,MAAI,CAAC,IAAI,QAAQ,SAAS,KAAK,GAAG;AAChC,UAAM,YAAY;AAAA,MAChB,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACC,QAAU,GAAK,MAAS,GAAIA,IAAG,OAAO,GAAM,GAAO,GAAIA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,GAAGA,IAAG,OAAO,CAAC,CAAC,CAAC;AAAA,IAC9G;AACA,IAAG,GAAe,SAAS;AAC3B,QAAI,QAAQ,KAAK,KAAK;AACtB,eAAW,KAAK,KAAK;AAAA,EACvB;AACA,MAAI,CAAC,IAAI,QAAQ,SAAS,UAAU,GAAG;AACrC,UAAM,iBAAiB;AAAA,MACrB,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACA,QAAU,GAAK,MAAS,GAAO,GAAO,GAASA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,GAAGA,IAAG,OAAO,CAAC,GAAM,GAAIA,IAAG,OAAO,GAAGA,IAAG,OAAO,CAAC,CAAC,CAAC;AAAA,IACxI;AACA,IAAG,GAAe,cAAc;AAChC,QAAI,QAAQ,KAAK,UAAU;AAC3B,eAAW,KAAK,UAAU;AAAA,EAC5B;AAqBA,MAAI,CAAC,IAAI,QAAQ,SAAS,kBAAkB,KAAKD,QAAO,iBAAiB;AACvE,UAAM,yBAAyB;AAAA,MAC7B,YAAY;AAAA,MACZ,aAAgB,GAAW;AAAA,MAC3B,YAAY,CAACC,QAAU,GAAK,MAAM;AAChC,cAAM,UAAa,GAAW;AAC9B,QAAG,IAAW,KAAK;AACnB,cAAMC,MAAO,GAAM,iBAAiBD,IAAG,OAAO,OAAOA,IAAG,MAAM,SAASA,IAAG,MAAM,WAAWA,IAAG,MAAM,MAAM;AAC1G,QAAG,IAAW,OAAO;AACrB,eAAOC;AAAA,MACT,CAAC;AAAA,IACH;AACA,IAAG,GAAe,sBAAsB;AACxC,QAAI,QAAQ,KAAK,kBAAkB;AACnC,eAAW,KAAK,kBAAkB;AAAA,EACpC;AACA,MAAK,WAAW,SAAS,KAAMF,QAAO;AAAO,QAAI,uBAAuB,UAAU;AACpF;AAEA,IAAI,eAAwC,CAAC;AAE7C,eAAsB,MAAM,UAAiB,QAAQ,OAAO;AAlF5D;AAmFE,WAAS,QAAQ;AACjB,QAAI,cAAS,OAAO,YAAhB,mBAAyB,YAAW;AAAG,aAAS,OAAO,UAAU,MAAM,eAAe;AAC1F,MAAI,SAAS,IAAI,WAAY,SAAS,OAAO,WAAY,SAAS,OAAO,QAAQ,SAAS,KAAU,GAAW,MAAM,SAAS,OAAO,SAAW;AAC9I,UAAM,YAAY,IAAI;AAEtB,QAAI,SAAS,OAAO,WAAW,SAAS,OAAO,QAAQ,SAAS,GAAG;AAGjE,UAAI,OAAO,WAAW,eAAe,OAAO,sBAAsB,eAAe,SAAS,OAAO,OAAO;AACtG,YAAI,SAAS,OAAO;AAAO,cAAI,2BAA2B;AAAA,MAC5D;AAEA,UAAI,OAAO,cAAc,iBAAe,4CAAW,cAAX,mBAAsB,cAAc,SAAS,cAAa;AAChG,YAAI,SAAS,OAAO;AAAO,cAAI,yBAAyB;AAAA,MAC1D;AAGA,UAAI,YAAY,OAAO,KAAQ,GAAO,EAAE,eAA0C;AAClF,UAAI,SAAS,OAAO,YAAY,aAAa,CAAC,UAAU,SAAS,SAAS,GAAG;AAC3E,QAAQ,SAAS,QAAQ;AACzB,oBAAY,OAAO,KAAQ,GAAO,EAAE,eAA0C;AAAA,MAChF;AACA,UAAI,SAAS,OAAO;AAAO,YAAI,uBAAuB,SAAS;AAG/D,UAAI,IAAI,WAAW,CAAC,IAAI,QAAS,SAAS,OAAO,YAAY,gBAAiB,UAAU,SAAS,OAAO,GAAG;AACzG,YAAI,SAAS,OAAO;AAAO,cAAI,8DAA8D;AAC7F,iBAAS,OAAO,UAAU;AAAA,MAC5B;AACA,UAAI,IAAI,QAAQ,CAAC,IAAI,YAAY,SAAS,OAAO,YAAY,WAAW,SAAS,OAAO,YAAY,cAAc,UAAU,SAAS,YAAY,GAAG;AAClJ,YAAI,SAAS,OAAO;AAAO,cAAI,4BAA4B,SAAS,OAAO,OAAO,0BAA0B;AAC5G,iBAAS,OAAO,UAAU;AAAA,MAC5B;AAGA,UAAI,IAAI,WAAW,SAAS,OAAO,YAAY,UAAU;AACvD,YAAI,OAAO,cAAc,eAAe,OAAO,UAAU,QAAQ,aAAa;AAC5E,cAAI,qEAAqE;AACzE,mBAAS,OAAO,UAAU;AAAA,QAC5B,OAAO;AACL,gBAAM,UAAU,MAAM,UAAU,IAAI,eAAe;AACnD,cAAI,SAAS,OAAO;AAAO,gBAAI,8BAA8B,OAAO;AACpE,cAAI,CAAC,SAAS;AACZ,gBAAI,sEAAsE;AAC1E,qBAAS,OAAO,UAAU;AAAA,UAC5B,OAAO;AAEL,kBAAM,cAAc,wBAAwB,UAAU,MAAM,QAAQ,mBAAmB,IAAI;AAE3F,gBAAI,wBAAwB,WAAW;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,UAAU,SAAS,SAAS,OAAO,OAAO,GAAG;AAChD,YAAI,kBAAkB,SAAS,OAAO,OAAO,wBAAwB;AACrE,iBAAS,OAAO,UAAU,IAAI,OAAO,eAAe;AACpD,YAAI,SAAS,OAAO;AAAO,cAAI,6BAA6B,SAAS,OAAO,OAAO,EAAE;AAAA,MACvF;AAEA,UAAI,SAAS,OAAO;AAAO,YAAI,oBAAoB,CAAC,SAAS,OAAO,OAAO,CAAC;AAG5E,UAAI,SAAS,OAAO,YAAY,QAAQ;AAEtC,YAAO,EAAI,EAAE,aAAa;AAA+B,UAAG,EAAI,EAAE,IAAI,iCAAiC,IAAI;AAC3G,YAAI,SAAS,OAAO;AAAO,cAAI,cAAc,SAAS,OAAO,QAAQ;AACrE,YAAI,OAAU,QAAiB;AAAa,UAAG,IAAa,SAAS,OAAO,UAAU,SAAS,OAAO,iBAAiB;AAAA;AAClH,gBAAM,IAAI,MAAM,wEAAwE;AAC7F,YAAIG,MAAK;AACT,YAAI,OAAO;AACX,YAAI;AACF,UAAAA,MAAK,MAAS,EAAI,EAAE,SAAS,8BAA8B;AAC3D,iBAAO,MAAS,EAAI,EAAE,SAAS,uBAAuB;AACtD,cAAI,SAAS,OAAO;AAAO,gBAAI,mBAAmB,OAAO,SAAS,SAAS,IAAIA,MAAK,kBAAkB,gBAAgB,EAAE;AACxH,cAAI,SAAS,OAAO,SAAS,CAAC;AAAM,gBAAI,2CAA2C;AAAA,QACrF,SAAQ;AACN,cAAI,uBAAuB;AAAA,QAC7B;AAAA,MACF;AAEA,UAAI;AACF,cAAS,IAAW,SAAS,OAAO,OAAO;AAC3C,cAAS,IAAM;AAAA,MACjB,SAAS,KAAK;AACZ,YAAI,8BAA8B,SAAS,OAAO,SAAS,GAAG;AAC9D,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,OAAO;AAAO,uBAAe,KAAK,MAAM,KAAK,UAAa,EAAI,EAAE,KAAK,CAAC;AAAA,IACrF;AAGA,QAAO,GAAW,MAAM,aAAgB,GAAW,MAAM,SAAS;AAEhE,UAAO,EAAI,EAAE,aAAa;AAA2B,QAAG,EAAI,EAAE,IAAI,6BAA6B,IAAI;AAEnG,UAAO,EAAI,EAAE,aAAa;AAAgB,QAAG,EAAI,EAAE,IAAI,kBAAkB,IAAI;AAK7E,UAAI,SAAS,OAAO,SAAS,OAAO,SAAS,OAAO,eAAe,eAAe,SAAS,OAAO,YAAY;AAC5G,YAAI,mDAAmD,IAAI;AAC3D,QAAG,EAAI,EAAE,IAAI,kCAAkC,CAAC;AAAA,MAClD;AAAA,IACF;AAGA,QAAO,GAAW,MAAM,UAAU;AAAA,IAIlC;AAEA,QAAI,SAAS,OAAO,OAAO;AAEzB,YAAM,WAAc,EAAI,EAAE;AAC1B,YAAM,eAAe,CAAC;AACtB,iBAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,YAAI,aAAa,GAAG,MAAM,SAAS,GAAG;AAAG;AACzC,qBAAa,GAAG,IAAI,SAAS,GAAG;AAAA,MAClC;AACA,UAAI,SAAS,OAAO,SAAS,OAAO,KAAK,YAAY,EAAE,SAAS;AAAG,YAAI,YAAe,GAAW,GAAG,UAAU,YAAY;AAAA,IAC5H;AAEA,QAAI,SAAS,OAAO,SAAS,OAAO,KAAK,SAAS,OAAO,KAAK,EAAE,SAAS,GAAG;AAC1E,UAAI,SAAS,OAAO;AAAO,YAAI,UAAU,SAAS,OAAO,OAAO,CAAC;AACjE,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,SAAS,OAAO,KAAK,GAAG;AAC9D,QAAG,EAAI,EAAE,IAAI,KAAK,GAAuB;AAAA,MAC3C;AAAA,IACF;AAEA,IAAG,IAAe;AAClB,IAAU,KAAK;AACf,aAAS,YAAY,cAAc,KAAK,MAAM,IAAI,IAAI,SAAS;AAC/D,aAAS,OAAO,UAAa,GAAW;AACxC,UAAM,IAAI,cAAc;AACxB,sBAAkB,SAAS,MAAM;AAAA,EAGnC;AACA,SAAO;AACT;AAGO,SAAS,QAAQ,aAAuBH,SAAQ;AAErD,aAAW,cAAc,aAAa;AACpC,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,aAAaA,QAAO;AAAA,MACpB,YAAY,CAAC,UAAsB;AA3OzC;AA4OQ,YAAIA,QAAO;AAAO,cAAI,cAAc,YAAYA,QAAO,SAAS,KAAK;AACrE,gBAAO,oCAAO,WAAP,mBAAe;AAAA,MACxB;AAAA;AAAA;AAAA,IAGF;AACA,IAAG,GAAe,YAAY;AAAA,EAChC;AACA,MAAI,UAAa,GAAwB,GAAW,CAAC,EAAE,IAAI,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC;AACxG;;;ACrPA;AAAA;AAAA;AAAA;AAAA,gBAAAI;AAAA,EAAA;AAAA;AAAA;AAAA,cAAAC;AAAA,EAAA;AAAA,iBAAAC;AAAA,EAAA;AAAA;;;ACKO,IAAM,mBAAmB,CAAC,UAAqB;AACpD,MAAI,CAAC;AAAO,QAAI,4BAA4B;AAAA,WACnC,CAAC,MAAM;AAAY,QAAI,wCAAwC;AAAA,OACnE;AACH,UAAM,MAAM,MAAM,WAAW,MAAM,EAAE,oBAAoB,KAAK,CAAC;AAC/D,QAAI,CAAC;AAAK,UAAI,uCAAuC;AAAA;AAChD,aAAO;AAAA,EACd;AACA,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,UAAkB,KAAK,MAAO,QAAQ,MAAO,KAAK,EAAE;AAErE,IAAM,UAAU,CAAC,KAAa,QAAgB,WAA4B,IAAI,QAAQ,QAAQ,OAAO,WAAW,WAAW,OAAO,QAAQ,CAAC,IAAI,MAAM;AAErJ,IAAM,aAAa,CAAC,GAAuB,QAA6B;AAC7E,MAAI,CAAC,IAAI,YAAY,OAAO,MAAM;AAAa,WAAO,IAAI;AAC1D,QAAMC,OAAM,kBAAkB,KAAK,CAAC,MAAO,IAAI,GAAI,MAAO,IAAI,GAAI,GAAG,CAAC;AACtE,SAAO,QAAQA,KAAI,CAAC,CAAC,KAAKA,KAAI,CAAC,CAAC,KAAKA,KAAI,CAAC,CAAC,KAAK,IAAI,KAAK;AAC3D;AAEO,SAAS,OAAO,KAAmE,KAAa,QAAgB,QAAgBC,eAA2B;AAChK,QAAM,OAAiB,IAAI,QAAQ,WAAW,EAAE,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;AACjF,QAAM,IAAI,KAAK,IAAI,GAAG,MAAM;AAC5B,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,UAAMC,KAAI,IAAID,cAAa,aAAa;AACxC,QAAIA,cAAa,eAAeA,cAAa,gBAAgB,IAAI;AAC/D,UAAI,YAAYA,cAAa;AAC7B,UAAI,SAAS,KAAK,CAAC,GAAG,IAAI,GAAGC,KAAI,EAAE;AAAA,IACrC;AACA,QAAI,YAAYD,cAAa;AAC7B,QAAI,SAAS,KAAK,CAAC,GAAG,IAAI,GAAGC,KAAI,EAAE;AAAA,EACrC;AACF;AAEO,SAAS,MAAM,KAAmE,GAAWA,IAAW,GAAuBD,eAA2B;AAC/J,MAAI,YAAY,WAAW,GAAGA,aAAY;AAC1C,MAAI,UAAU;AACd,MAAI,IAAI,GAAGC,IAAGD,cAAa,WAAW,GAAG,IAAI,KAAK,EAAE;AACpD,MAAI,KAAK;AACX;AAEO,SAAS,KAAK,KAAmE,GAAWC,IAAW,OAAe,QAAgBD,eAA2B;AACtK,MAAI,UAAU;AACd,MAAI,YAAYA,cAAa;AAC7B,MAAIA,cAAa,WAAW;AAC1B,UAAME,OAAM,IAAI,IAAI,SAAS;AAC7B,UAAMC,OAAMF,KAAIA,KAAI,UAAU;AAC9B,QAAI,QAAQC,KAAIC,KAAI,QAAQ,GAAG,SAAS,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,EAC9D,OAAO;AACL,QAAI,OAAO,IAAIH,cAAa,WAAWC,EAAC;AACxC,QAAI,OAAO,IAAI,QAAQD,cAAa,WAAWC,EAAC;AAChD,QAAI,iBAAiB,IAAI,OAAOA,IAAG,IAAI,OAAOA,KAAID,cAAa,SAAS;AACxE,QAAI,OAAO,IAAI,OAAOC,KAAI,SAASD,cAAa,SAAS;AACzD,QAAI,iBAAiB,IAAI,OAAOC,KAAI,QAAQ,IAAI,QAAQD,cAAa,WAAWC,KAAI,MAAM;AAC1F,QAAI,OAAO,IAAID,cAAa,WAAWC,KAAI,MAAM;AACjD,QAAI,iBAAiB,GAAGA,KAAI,QAAQ,GAAGA,KAAI,SAASD,cAAa,SAAS;AAC1E,QAAI,OAAO,GAAGC,KAAID,cAAa,SAAS;AACxC,QAAI,iBAAiB,GAAGC,IAAG,IAAID,cAAa,WAAWC,EAAC;AACxD,QAAI,UAAU;AAAA,EAChB;AACA,MAAI,OAAO;AACb;AAEO,SAAS,MAAM,KAAmE,QAAiBD,eAA2B;AACnI,MAAI,OAAO,SAAS;AAAG;AACvB,MAAI,UAAU;AACd,MAAI,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC,aAAWI,OAAM,QAAQ;AACvB,QAAI,cAAc,WAAWA,IAAG,CAAC,KAAK,GAAGJ,aAAY;AACrD,QAAI,OAAO,KAAK,MAAMI,IAAG,CAAC,CAAC,GAAG,KAAK,MAAMA,IAAG,CAAC,CAAC,CAAC;AAAA,EACjD;AACA,MAAI,OAAO;AACX,MAAIJ,cAAa,cAAc;AAC7B,QAAI,UAAU;AACd,QAAI,KAAK;AAAA,EACX;AACF;AAEO,SAAS,OAAO,KAAmE,QAAiBA,eAA2B;AACpI,MAAI,OAAO,SAAS;AAAG;AACvB,MAAI,YAAYA,cAAa;AAC7B,MAAI,CAACA,cAAa,aAAa,OAAO,UAAU,GAAG;AACjD,UAAM,KAAK,QAAQA,aAAY;AAC/B;AAAA,EACF;AACA,MAAI,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;AACrC,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KAAK;AAC1C,UAAMK,OAAM,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK;AAC/C,UAAMC,OAAM,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK;AAC/C,QAAI,iBAAiB,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,GAAGD,KAAIC,GAAE;AAAA,EACzD;AACA,MAAI,iBAAiB,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,GAAG,OAAO,OAAO,SAAS,CAAC,EAAE,CAAC,CAAC;AAC3I,MAAI,OAAO;AACX,MAAIN,cAAa,cAAc;AAC7B,QAAI,UAAU;AACd,QAAI,KAAK;AAAA,EACX;AACF;AAEO,SAAS,MAAM,KAAmE,MAAa,IAAW,SAAS,GAAG;AAC3H,MAAI;AACJ,MAAI;AACJ,MAAIC;AACJ,MAAI,UAAU;AACd,MAAI,OAAO,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAC3B,MAAI,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACvB,UAAQ,KAAK,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;AACnD,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,WAAU,IAAM,KAAQ,IAAI,KAAK;AACjC,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,WAAU,IAAM,KAAQ,IAAI,KAAK;AACjC,MAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,EAAAA,KAAI,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACnC,MAAI,OAAO,GAAGA,EAAC;AACf,MAAI,UAAU;AACd,MAAI,OAAO;AACX,MAAI,KAAK;AACX;;;ACnEO,IAAMM,WAAuB;AAAA,EAClC,OAAO;AAAA;AAAA,EACP,YAAY;AAAA;AAAA,EACZ,aAAa;AAAA,EACb,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AAAA,EACV,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,eAAe;AACjB;;;AClFO,IAAM,kBAA4C;AAAA,EACvD,YAAY;AAAA,IACV;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACtD;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IACvD;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,IAAK;AAAA,IAAK;AAAA,IAAK;AAAA,IAAI;AAAA,IAAI;AAAA,IAAK;AAAA,IAAI;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,KAAK,KAAK,KAAK,GAAG;AAAA,EACvD,gBAAgB,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAClE,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EACxD,gBAAgB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjE,oBAAoB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrE,oBAAoB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5D,oBAAoB,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrE,oBAAoB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,GAAG;AAAA,EAC5D,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAClD,gBAAgB,CAAC,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EACzD,gBAAgB,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA;AAAA,EAC7C,gBAAgB,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG;AAAA;AAAA,EACvD,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAClD,gBAAgB,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAC3D,gBAAgB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EAC5D,mBAAmB,CAAC,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;AAAA;AAAA,EACtD,mBAAmB,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,EAAE;AAAA;AAAA,EAC3C,cAAc,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA;AAAA,EACtC,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACjD,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,eAAe,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3D,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACzD,kBAAkB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EAC/C,aAAa,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,EACrC,mBAAmB,CAAC,GAAG;AAAA,EACvB,SAAS,CAAC,CAAC;AAAA,EACX,YAAY,CAAC,CAAC;AAAA,EACd,iBAAiB,CAAC,EAAE;AAAA,EACpB,gBAAgB,CAAC,GAAG;AAAA,EACpB,YAAY,CAAC,GAAG;AAAA,EAChB,WAAW,CAAC,GAAG;AACjB;AAEO,IAAM,gBAAmD;AAAA,EAC9D,OAAO;AAAA,EACP,OAAO;AAAA,EACP,cAAc,CAAC,IAAI,gBAAgB,kBAAkB,CAAC,CAAC;AACzD;AAEO,IAAM,qBAAwD;AAAA,EACnE,SAAS;AAAA,EACT,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA,EACV,cAAc,CAAC,GAAG,CAAC;AACrB;AAEO,IAAM,cAAoD;AAAA;AAAA,EAC/D,EAAE,KAAK,aAAa,SAAS,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EACzD,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAC1D,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAC1D,EAAE,KAAK,aAAa,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE;AAAA;AAAA,EACzD,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,aAAa,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EAClE,EAAE,KAAK,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAAA,EACjE,EAAE,KAAK,gBAAgB,SAAS,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;AAAA;AAC3D;AAEO,IAAM,QAA4B;AAAA,EACvC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,gBAAgB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,gBAAgB;AAAA,EAClC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,iBAAiB,iBAAiB;AAAA,EACnC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,mBAAmB,iBAAiB;AAAA,EACrC,CAAC,kBAAkB,iBAAiB;AAAA,EACpC,C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AAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACtJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EACnJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC7I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACnJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EACrJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACrJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAI;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC9I;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAC/I;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAChJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAClJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAG;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACpJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACjJ;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,E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EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,UAAU,GAAG,SAAS;AAAA,EAC3B,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,SAAS,GAAG,QAAQ;AAAA,EACzB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,EACvB,EAAE,GAAG,QAAQ,GAAG,OAAO;AAAA,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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0Jb,IAAMC,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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", + "names": ["r2", "r", "t", "r4", "r5", "r7", "r9", "r3", "dt", "ts", "config", "r", "match", "gl", "index", "y", "v", "size", "rgb", "fx", "process", "config", "_c", "tensor", "rgb", "t", "gl", "el", "affectnet-mobilenet", "anti-spoofing", "blazeface-back", "blazeface-front", "blazepose-detector", "blazepose-full", "blazepose-heavy", "blazepose-lite", "efficientpose-i-lite", "efficientpose-ii-lite", "efficientpose-iv", "facemesh-attention", "facemesh-attention-pinto", "facemesh-detection-full", "facemesh-detection-short", "faceres-deep", "gear-e1", "gear-e2", "gender-ssrnet-imdb", "handlandmark-full", "handlandmark-lite", "handlandmark-sparse", "insightface-efficientnet-b0", "insightface-ghostnet-strides1", "insightface-ghostnet-strides2", "insightface-mobilenet-emore", "insightface-mobilenet-swish", "movenet-lightning", "movenet-multipose", "movenet-thunder", "nanodet-e", "nanodet-g", "nanodet-m", "nanodet-t", "init", "config", "_c", "_d", "model", "config", "gl", "config", "op", "t", "mt", "canvas", "init", "options", "rgb", "localOptions", "y", "cx", "cy", "pt", "xc", "yc", "options", "connectionsToIndices", "index", "_c", "_d", "_f", "_g", "_h", "_i", "emotion", "index", "v", "pt", "inCanvas", "options", "inCanvas", "localOptions", "options", "pt", "connected", "inCanvas", "localOptions", "options", "pt", "inCanvas", "localOptions", "options", "inCanvas", "localOptions", "options", "inCanvas", "localOptions", "options", "canvas", "init", "anchors", "y", "config", "outputSize", "t", "outputSize", "pt", "model", "inputSize", "config", "size", "t", "outputSize", "kpt", "distance", "annotations", "pt", "body", "_c", "labels", "model", "inputSize", "last", "lastTime", "skipped", "config", "process", "t", "id", "labels", "y", "predict", "outputSize", "connected", "kpt", "model", "lastTime", "cache", "skipped", "load", "config", "y", "predict", "enhance", "id", "x", "kpt", "connected", "pt", "pt", "w", "size", "y", "y", "v1", "v2", "size", "inputSize", "anchors", "face", "y", "model", "inputSize", "load", "config", "decodeBoxes", "t", "r2", "_c", "_d", "_f", "_g", "model", "inputSize", "load", "config", "index", "face", "scale", "y", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "t", "r", "cache", "model", "inputSize", "predict", "config", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "id", "size", "face", "pt", "t", "index", "load", "model", "last", "lastTime", "skipped", "load", "config", "_c", "predict", "count", "_a", "_b", "t", "inputSize", "model", "last", "lastTime", "lastCount", "skipped", "load", "config", "predict", "count", "_c", "_d", "_a", "t", "gender", "all", "y", "face", "pt", "model", "skipped", "lastCount", "lastTime", "load", "config", "predict", "count", "model", "cached", "skipped", "lastCount", "lastTime", "load", "config", "predict", "count", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "_b", "_c", "_d", "t", "gender", "age", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_c", "_d", "_a", "_b", "t", "model", "last", "lastCount", "lastTime", "skipped", "rgb", "load", "config", "predict", "count", "_c", "_d", "_a", "_b", "t", "normalize", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "model", "last", "lastCount", "lastTime", "skipped", "load", "config", "predict", "count", "_a", "t", "face", "normalize", "v", "y", "r", "r10", "r11", "r12", "r22", "size", "pt", "face", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "predict", "el", "options", "point", "point2", "gesture", "body", "face", "iris", "_c", "_d", "hand", "getBoxSize", "getBoxCenter", "w", "scaleBoxCoordinates", "enlargeBox", "size", "squarifyBox", "normalizeRadians", "computeRotation", "buildTranslationMatrix", "y", "dot", "v1", "v2", "getColumnFrom2DArr", "multiplyTransformMatrices", "size", "buildRotationMatrix", "invertTransformMatrix", "rotatePoint", "anchors", "model", "_c", "_d", "anchors", "t", "r2", "index", "config", "hand", "scaleBoxCoordinates", "lastTime", "handPoseModel", "_c", "xs", "ys", "rotatePoint", "enlargeBox", "squarifyBox", "getBoxSize", "buildRotationMatrix", "invertTransformMatrix", "getBoxCenter", "dot", "config", "computeRotation", "meshAnnotations", "predict", "config", "annotations", "index", "pt", "loadDetect", "models", "inputSize", "skipped", "lastTime", "cache", "loadDetect", "config", "loadSkeleton", "config", "models", "t", "ratio", "id", "hand", "inputSize", "kpt", "index", "predict", "skipped", "lastTime", "cache", "connected", "kpt", "calc", "config", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "t0", "_a", "_b", "_e", "annotations", "pt", "kp", "t1", "model", "load", "config", "predict", "t", "options", "clamp", "index", "models_exports", "cache", "body", "kp", "compare", "inputSize", "t", "outputSize", "kpt", "pt", "model", "inputSize", "skipped", "cache", "load", "config", "kpt", "id", "pt", "annotations", "connected", "kp", "body", "predict", "t", "model", "last", "lastTime", "skipped", "inputSize", "load", "config", "process", "id", "size", "labels", "cx", "cy", "y", "w", "predict", "outputSize", "y", "maxSize", "t", "outputStride", "y1", "y2", "x2", "dy", "dx", "model", "point", "height", "width", "minConfidence", "y", "predict", "config", "t", "load", "model", "outputNodes", "init", "config", "load", "r", "rgb", "predict", "model", "load", "config", "predict", "t", "model", "op", "_c", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "_v", "_w", "_x", "_z", "_A", "load", "loadDetect", "loadSkeleton", "models", "join", "_c", "_d", "_f", "id", "face", "person", "body", "hand", "gesture", "y", "face", "body", "res", "face", "body", "canvas", "atob", "_c", "_d", "model", "t", "t0", "t1", "init", "process", "_c", "predict", "count", "model", "calc", "t0", "t1", "ms", "_d", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_n", "_o", "_p", "_q", "_r", "_s", "_u", "face", "body", "hand", "iris", "join"] } diff --git a/dist/human.js b/dist/human.js index f96187b0..956afee9 100644 --- a/dist/human.js +++ b/dist/human.js @@ -4,57 +4,57 @@ author: ' */ -"use strict";var Human=(()=>{var Jc=Object.defineProperty;var xC=Object.getOwnPropertyDescriptor;var AC=Object.getOwnPropertyNames;var bC=Object.prototype.hasOwnProperty;var vC=(e,t,a)=>t in e?Jc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var vr=(e,t)=>{for(var a in t)Jc(e,a,{get:t[a],enumerable:!0})},wC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of AC(t))!bC.call(e,r)&&r!==a&&Jc(e,r,{get:()=>t[r],enumerable:!(n=xC(t,r))||n.enumerable});return e};var kC=e=>wC(Jc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>(vC(e,typeof t!="symbol"?t+"":t,a),a),a5=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var Xa=(e,t,a)=>(a5(e,t,"read from private field"),a?a.call(e):t.get(e)),Yn=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a)},wr=(e,t,a,n)=>(a5(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var zxe={};vr(zxe,{Env:()=>uc,Human:()=>Ux,default:()=>Ux,defaults:()=>yl,draw:()=>F0,empty:()=>fr,env:()=>ne,match:()=>im,models:()=>Vx});var Ye={};vr(Ye,{Abs:()=>cu,Acos:()=>$i,Acosh:()=>Di,AdadeltaOptimizer:()=>s3,AdagradOptimizer:()=>i3,AdamOptimizer:()=>o3,AdamaxOptimizer:()=>l3,Add:()=>Mr,AddN:()=>Pi,All:()=>_i,Any:()=>Oi,ArgMax:()=>hu,ArgMin:()=>mu,Asin:()=>zi,Asinh:()=>Li,Atan:()=>Wi,Atan2:()=>Vi,Atanh:()=>Bi,AvgPool:()=>Ui,AvgPool3D:()=>fu,AvgPool3DGrad:()=>yp,AvgPoolGrad:()=>gp,BackendWasm:()=>Wk,BatchMatMul:()=>Gi,BatchToSpaceND:()=>gu,Bincount:()=>Hi,BitwiseAnd:()=>ji,BroadcastArgs:()=>yu,BroadcastTo:()=>mN,Cast:()=>qi,Ceil:()=>cs,ClipByValue:()=>hs,Complex:()=>xp,ComplexAbs:()=>Ap,Concat:()=>xu,Conv2D:()=>Xi,Conv2DBackpropFilter:()=>bp,Conv2DBackpropInput:()=>Ki,Conv3D:()=>Yi,Conv3DBackpropFilterV2:()=>Au,Conv3DBackpropInputV2:()=>Zi,Cos:()=>Ji,Cosh:()=>Qi,CropAndResize:()=>ao,Cumprod:()=>eo,Cumsum:()=>to,DataStorage:()=>hp,DenseBincount:()=>bu,DepthToSpace:()=>no,DepthwiseConv2dNative:()=>ro,DepthwiseConv2dNativeBackpropFilter:()=>vp,DepthwiseConv2dNativeBackpropInput:()=>wp,Diag:()=>vu,Dilation2D:()=>so,Dilation2DBackpropFilter:()=>Ql,Dilation2DBackpropInput:()=>Jl,Draw:()=>kp,ENV:()=>lg,Einsum:()=>Ip,Elu:()=>oo,EluGrad:()=>wu,Environment:()=>UA,Equal:()=>ms,Erf:()=>lo,Exp:()=>fs,ExpandDims:()=>ku,Expm1:()=>gs,FFT:()=>Sp,Fill:()=>Iu,FlipLeftRight:()=>uo,Floor:()=>ys,FloorDiv:()=>xs,FromPixels:()=>jd,FusedBatchNorm:()=>po,FusedConv2D:()=>as,FusedDepthwiseConv2D:()=>ns,GPGPUContext:()=>Yl,GatherNd:()=>co,GatherV2:()=>Su,GraphModel:()=>ec,Greater:()=>As,GreaterEqual:()=>bs,IFFT:()=>Tp,Identity:()=>ho,Imag:()=>Cp,IsFinite:()=>mo,IsInf:()=>fo,IsNan:()=>go,KernelBackend:()=>du,LRN:()=>ko,LRNGrad:()=>Tu,LeakyRelu:()=>yo,Less:()=>vs,LessEqual:()=>ws,LinSpace:()=>xo,Log:()=>ks,Log1p:()=>Ao,LogSoftmax:()=>fN,LogicalAnd:()=>bo,LogicalNot:()=>vo,LogicalOr:()=>wo,LogicalXor:()=>HA,LowerBound:()=>gN,MathBackendCPU:()=>A3,MathBackendWebGL:()=>rc,MatrixBandPart:()=>yN,Max:()=>Io,MaxPool:()=>So,MaxPool3D:()=>Cu,MaxPool3DGrad:()=>Rp,MaxPoolGrad:()=>Np,MaxPoolWithArgmax:()=>Nu,Maximum:()=>Is,Mean:()=>To,Min:()=>Co,Minimum:()=>Ss,MirrorPad:()=>No,Mod:()=>Ro,MomentumOptimizer:()=>u3,Multinomial:()=>Eo,Multiply:()=>Ts,Neg:()=>Ru,NonMaxSuppressionV3:()=>Mo,NonMaxSuppressionV4:()=>Eu,NonMaxSuppressionV5:()=>Fo,NotEqual:()=>Cs,OP_SCOPE_SUFFIX:()=>hg,OneHot:()=>$o,OnesLike:()=>Mu,Optimizer:()=>_s,OptimizerConstructors:()=>s6,Pack:()=>Fu,PadV2:()=>Do,Pool:()=>xN,Pow:()=>Po,Prelu:()=>_o,Prod:()=>Oo,RMSPropOptimizer:()=>d3,RaggedGather:()=>Lh,RaggedRange:()=>Wh,RaggedTensorToTensor:()=>Bh,Range:()=>$u,Rank:()=>u1,Real:()=>Ep,RealDiv:()=>io,Reciprocal:()=>zo,Reduction:()=>wa,Relu:()=>Lo,Relu6:()=>Vo,Reshape:()=>Du,ResizeBilinear:()=>Bo,ResizeBilinearGrad:()=>_u,ResizeNearestNeighbor:()=>Wo,ResizeNearestNeighborGrad:()=>Pu,Reverse:()=>Uo,RotateWithOffset:()=>ol,Round:()=>Go,Rsqrt:()=>Ns,SGDOptimizer:()=>i0,ScatterNd:()=>Ho,SearchSorted:()=>qo,Select:()=>Ou,Selu:()=>Xo,Sigmoid:()=>Rs,Sign:()=>Zo,Sin:()=>Ko,Sinh:()=>Yo,Slice:()=>zu,Softmax:()=>el,Softplus:()=>Jo,SpaceToBatchND:()=>Lu,SparseFillEmptyRows:()=>Mp,SparseReshape:()=>Bu,SparseSegmentMean:()=>Vu,SparseSegmentSum:()=>Uu,SparseToDense:()=>tl,SplitV:()=>Wu,Sqrt:()=>Es,Square:()=>Fp,SquaredDifference:()=>Ms,StaticRegexReplace:()=>Gu,Step:()=>Ds,StridedSlice:()=>al,StringNGrams:()=>Hu,StringSplit:()=>$p,StringToHashBucketFast:()=>Dp,Sub:()=>Fs,Sum:()=>Qo,Tan:()=>nl,Tanh:()=>rl,Tensor:()=>yt,TensorBuffer:()=>Rt,TensorScatterUpdate:()=>jo,Tile:()=>$s,TopK:()=>sl,Transform:()=>il,Transpose:()=>Tr,Unique:()=>Pp,Unpack:()=>ju,UnsortedSegmentSum:()=>_p,UpperBound:()=>AN,Variable:()=>Yd,WebGPUBackend:()=>ny,ZerosLike:()=>qu,_FusedMatMul:()=>ts,abs:()=>Ja,acos:()=>xb,acosh:()=>Ab,add:()=>we,addN:()=>Uh,all:()=>bb,any:()=>vb,argMax:()=>or,argMin:()=>wb,asin:()=>kb,asinh:()=>Ib,atan:()=>Sb,atan2:()=>Tb,atanh:()=>Cb,avgPool:()=>vg,avgPool3d:()=>Mb,backend:()=>Gn,backend_util:()=>I,basicLSTMCell:()=>Fb,batchNorm:()=>jp,batchNorm2d:()=>$b,batchNorm3d:()=>Db,batchNorm4d:()=>Pb,batchToSpaceND:()=>wg,bincount:()=>kg,bitwiseAnd:()=>_b,booleanMaskAsync:()=>b7,broadcastArgs:()=>Ob,broadcastTo:()=>Ai,broadcast_util:()=>ul,browser:()=>Pr,buffer:()=>Te,cast:()=>Ue,ceil:()=>zb,clipByValue:()=>Lb,clone:()=>Ia,complex:()=>Rr,concat:()=>lt,concat1d:()=>Wb,concat2d:()=>Xu,concat3d:()=>Bb,concat4d:()=>Vb,conv1d:()=>Ub,conv2d:()=>qp,conv2dTranspose:()=>Hb,conv3d:()=>jb,conv3dTranspose:()=>qb,copyRegisteredKernels:()=>IN,cos:()=>Xb,cosh:()=>Kb,cosineWindow:()=>t0,cumprod:()=>Yb,cumsum:()=>Zb,customGrad:()=>rr,denseBincount:()=>Jb,deprecationWarn:()=>fg,depthToSpace:()=>Qb,depthwiseConv2d:()=>Gh,deregisterOp:()=>TO,device_util:()=>Wp,diag:()=>e4,dilation2d:()=>t4,disableDeprecationWarnings:()=>tR,dispose:()=>J,disposeVariables:()=>aR,div:()=>ve,divNoNan:()=>n4,dot:()=>r4,dropout:()=>S7,einsum:()=>hi,elu:()=>Tg,enableDebugMode:()=>eR,enableProdMode:()=>mg,enclosingPowerOfTwo:()=>a3,engine:()=>St,ensureShape:()=>s4,env:()=>B,equal:()=>Sg,erf:()=>i4,euclideanNorm:()=>u4,exp:()=>ls,expandDims:()=>Bt,expm1:()=>d4,eye:()=>Ng,fft:()=>Zh,fill:()=>lr,findBackend:()=>gg,findBackendFactory:()=>oR,floor:()=>Rg,floorDiv:()=>Gp,forceHalfFloat:()=>Dw,fused:()=>n3,gather:()=>Eg,gatherND:()=>I7,gather_util:()=>h3,getBackend:()=>ea,getGradient:()=>o1,getKernel:()=>Xd,getKernelsForBackend:()=>tr,getThreadsCount:()=>Zle,gpgpu_util:()=>pw,grad:()=>UM,grads:()=>GM,greater:()=>Yp,greaterEqual:()=>Mg,ifft:()=>rp,imag:()=>Zp,image:()=>fe,inTopKAsync:()=>T7,io:()=>Jn,irfft:()=>Yg,isFinite:()=>p4,isInf:()=>c4,isNaN:()=>h4,keep:()=>Bn,kernel_impls:()=>Fn,leakyRelu:()=>Fg,less:()=>bh,lessEqual:()=>Hh,linalg:()=>D7,linspace:()=>m4,loadGraphModel:()=>x3,loadGraphModelSync:()=>Fz,localResponseNormalization:()=>f4,log:()=>au,log1p:()=>$g,logSigmoid:()=>y4,logSoftmax:()=>x4,logSumExp:()=>Pg,logicalAnd:()=>tp,logicalNot:()=>_g,logicalOr:()=>Og,logicalXor:()=>A4,losses:()=>P7,lowerBound:()=>b4,matMul:()=>pt,math:()=>q7,max:()=>fa,maxPool:()=>zg,maxPool3d:()=>v4,maxPoolWithArgmax:()=>w4,maximum:()=>Lg,mean:()=>ap,memory:()=>nR,meshgrid:()=>k4,min:()=>os,minimum:()=>np,mirrorPad:()=>I4,mod:()=>Ku,moments:()=>S4,movingAverage:()=>v7,mul:()=>te,multiRNNCell:()=>T4,multinomial:()=>C4,neg:()=>Vn,nextFrame:()=>i6,node:()=>py,norm:()=>Kp,notEqual:()=>Wg,oneHot:()=>vh,ones:()=>Yr,onesLike:()=>N4,op:()=>z,outerProduct:()=>R4,pad:()=>ur,pad1d:()=>E4,pad2d:()=>M4,pad3d:()=>F4,pad4d:()=>$4,pool:()=>D4,pow:()=>tu,prelu:()=>Vg,print:()=>Ag,prod:()=>P4,profile:()=>rR,raggedGather:()=>_4,raggedRange:()=>O4,raggedTensorToTensor:()=>z4,rand:()=>L4,randomGamma:()=>U4,randomNormal:()=>qg,randomStandardNormal:()=>G4,randomUniform:()=>Xh,randomUniformInt:()=>H4,range:()=>nu,ready:()=>Vp,real:()=>ru,reciprocal:()=>j4,registerBackend:()=>ll,registerGradient:()=>vN,registerKernel:()=>bn,registerOp:()=>SO,relu:()=>Jp,relu6:()=>Xg,removeBackend:()=>iR,reshape:()=>Q,reverse:()=>us,reverse1d:()=>q4,reverse2d:()=>X4,reverse3d:()=>K4,reverse4d:()=>Y4,rfft:()=>Jh,round:()=>Kg,rsqrt:()=>Z4,scalar:()=>Ge,scatterND:()=>w7,scatter_util:()=>Qh,searchSorted:()=>qh,selu:()=>J4,separableConv2d:()=>Q4,serialization:()=>z7,setBackend:()=>Bp,setPlatform:()=>lR,setThreadsCount:()=>Yle,setWasmPath:()=>Kle,setWasmPaths:()=>f0,setWebGLContext:()=>u0,setdiff1dAsync:()=>e7,shared:()=>b3,sigmoid:()=>za,sign:()=>t7,signal:()=>$7,sin:()=>a7,sinh:()=>n7,slice:()=>_e,slice1d:()=>r7,slice2d:()=>s7,slice3d:()=>Qp,slice4d:()=>Kh,slice_util:()=>wt,softmax:()=>Yh,softplus:()=>Dg,spaceToBatchND:()=>Bg,sparse:()=>_7,sparseToDense:()=>k7,spectral:()=>F7,split:()=>Sa,sqrt:()=>nr,square:()=>En,squaredDifference:()=>Zg,squeeze:()=>Oe,stack:()=>ca,step:()=>Jg,stridedSlice:()=>i7,string:()=>O7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Lp,tan:()=>o7,tanh:()=>Ah,tensor:()=>Ve,tensor1d:()=>Vt,tensor2d:()=>er,tensor3d:()=>Qg,tensor4d:()=>l7,tensor5d:()=>u7,tensor6d:()=>d7,tensorScatterUpdate:()=>c7,tensor_util:()=>ZA,test_util:()=>W4,tidy:()=>Pe,tile:()=>Qr,time:()=>sR,topk:()=>h7,train:()=>w_,transpose:()=>Si,truncatedNormal:()=>m7,unique:()=>f7,unregisterGradient:()=>kN,unregisterKernel:()=>wN,unsortedSegmentSum:()=>g7,unstack:()=>Na,upcastType:()=>Qt,upperBound:()=>y7,util:()=>v,valueAndGrad:()=>HM,valueAndGrads:()=>jM,variable:()=>x7,variableGrads:()=>g4,version:()=>lc,version_converter:()=>Dz,version_core:()=>m3,version_cpu:()=>XL,version_wasm:()=>Jle,version_webgl:()=>Oq,webgl:()=>zq,webgl_util:()=>Pv,webgpu_util:()=>Uk,where:()=>Cr,whereAsync:()=>t3,zeros:()=>An,zerosLike:()=>en});var IC=Object.create,sg=Object.defineProperty,SC=Object.getOwnPropertyDescriptor,TC=Object.getOwnPropertyNames,CC=Object.getPrototypeOf,NC=Object.prototype.hasOwnProperty,Xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ke=(e,t)=>{for(var a in t)sg(e,a,{get:t[a],enumerable:!0})},RC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of TC(t))!NC.call(e,r)&&r!==a&&sg(e,r,{get:()=>t[r],enumerable:!(n=SC(t,r))||n.enumerable});return e},uu=(e,t,a)=>(a=e!=null?IC(CC(e)):{},RC(t||!e||!e.__esModule?sg(a,"default",{value:e,enumerable:!0}):a,e)),EC=Xt((e,t)=>{t.exports=n;var a=null;try{a=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(T){}function n(T,D,O){this.low=T|0,this.high=D|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(T){return(T&&T.__isLong__)===!0}n.isLong=r;var s={},i={};function o(T,D){var O,W,$;return D?(T>>>=0,($=0<=T&&T<256)&&(W=i[T],W)?W:(O=u(T,(T|0)<0?-1:0,!0),$&&(i[T]=O),O)):(T|=0,($=-128<=T&&T<128)&&(W=s[T],W)?W:(O=u(T,T<0?-1:0,!1),$&&(s[T]=O),O))}n.fromInt=o;function l(T,D){if(isNaN(T))return D?b:A;if(D){if(T<0)return b;if(T>=g)return M}else{if(T<=-y)return F;if(T+1>=y)return N}return T<0?l(-T,D).neg():u(T%f|0,T/f|0,D)}n.fromNumber=l;function u(T,D,O){return new n(T,D,O)}n.fromBits=u;var d=Math.pow;function c(T,D,O){if(T.length===0)throw Error("empty string");if(T==="NaN"||T==="Infinity"||T==="+Infinity"||T==="-Infinity")return A;if(typeof D=="number"?(O=D,D=!1):D=!!D,O=O||10,O<2||360)throw Error("interior hyphen");if(W===0)return c(T.substring(1),D,O).neg();for(var $=l(d(O,8)),U=A,G=0;G>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},E.toString=function(T){if(T=T||10,T<2||36>>0,V=H.toString(T);if(U=q,U.isZero())return V+G;for(;V.length<6;)V="0"+V;G=""+V+G}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq(F)?64:this.neg().getNumBitsAbs();for(var T=this.high!=0?this.high:this.low,D=31;D>0&&!(T&1<=0},E.isOdd=function(){return(this.low&1)===1},E.isEven=function(){return(this.low&1)===0},E.equals=function(T){return r(T)||(T=p(T)),this.unsigned!==T.unsigned&&this.high>>>31===1&&T.high>>>31===1?!1:this.high===T.high&&this.low===T.low},E.eq=E.equals,E.notEquals=function(T){return!this.eq(T)},E.neq=E.notEquals,E.ne=E.notEquals,E.lessThan=function(T){return this.comp(T)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(T){return this.comp(T)<=0},E.lte=E.lessThanOrEqual,E.le=E.lessThanOrEqual,E.greaterThan=function(T){return this.comp(T)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(T){return this.comp(T)>=0},E.gte=E.greaterThanOrEqual,E.ge=E.greaterThanOrEqual,E.compare=function(T){if(r(T)||(T=p(T)),this.eq(T))return 0;var D=this.isNegative(),O=T.isNegative();return D&&!O?-1:!D&&O?1:this.unsigned?T.high>>>0>this.high>>>0||T.high===this.high&&T.low>>>0>this.low>>>0?-1:1:this.sub(T).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq(F)?F:this.not().add(w)},E.neg=E.negate,E.add=function(T){r(T)||(T=p(T));var D=this.high>>>16,O=this.high&65535,W=this.low>>>16,$=this.low&65535,U=T.high>>>16,G=T.high&65535,q=T.low>>>16,H=T.low&65535,V=0,Z=0,X=0,re=0;return re+=$+H,X+=re>>>16,re&=65535,X+=W+q,Z+=X>>>16,X&=65535,Z+=O+G,V+=Z>>>16,Z&=65535,V+=D+U,V&=65535,u(X<<16|re,V<<16|Z,this.unsigned)},E.subtract=function(T){return r(T)||(T=p(T)),this.add(T.neg())},E.sub=E.subtract,E.multiply=function(T){if(this.isZero())return A;if(r(T)||(T=p(T)),a){var D=a.mul(this.low,this.high,T.low,T.high);return u(D,a.get_high(),this.unsigned)}if(T.isZero())return A;if(this.eq(F))return T.isOdd()?F:A;if(T.eq(F))return this.isOdd()?F:A;if(this.isNegative())return T.isNegative()?this.neg().mul(T.neg()):this.neg().mul(T).neg();if(T.isNegative())return this.mul(T.neg()).neg();if(this.lt(x)&&T.lt(x))return l(this.toNumber()*T.toNumber(),this.unsigned);var O=this.high>>>16,W=this.high&65535,$=this.low>>>16,U=this.low&65535,G=T.high>>>16,q=T.high&65535,H=T.low>>>16,V=T.low&65535,Z=0,X=0,re=0,ee=0;return ee+=U*V,re+=ee>>>16,ee&=65535,re+=$*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=W*V,Z+=X>>>16,X&=65535,X+=$*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+W*H+$*q+U*G,Z&=65535,u(re<<16|ee,Z<<16|X,this.unsigned)},E.mul=E.multiply,E.divide=function(T){if(r(T)||(T=p(T)),T.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&T.low===-1&&T.high===-1)return this;var D=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,T.low,T.high);return u(D,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var O,W,$;if(this.unsigned){if(T.unsigned||(T=T.toUnsigned()),T.gt(this))return b;if(T.gt(this.shru(1)))return S;$=b}else{if(this.eq(F)){if(T.eq(w)||T.eq(C))return F;if(T.eq(F))return w;var U=this.shr(1);return O=U.div(T).shl(1),O.eq(A)?T.isNegative()?w:C:(W=this.sub(T.mul(O)),$=O.add(W.div(T)),$)}else if(T.eq(F))return this.unsigned?b:A;if(this.isNegative())return T.isNegative()?this.neg().div(T.neg()):this.neg().div(T).neg();if(T.isNegative())return this.div(T.neg()).neg();$=A}for(W=this;W.gte(T);){O=Math.max(1,Math.floor(W.toNumber()/T.toNumber()));for(var G=Math.ceil(Math.log(O)/Math.LN2),q=G<=48?1:d(2,G-48),H=l(O),V=H.mul(T);V.isNegative()||V.gt(W);)O-=q,H=l(O,this.unsigned),V=H.mul(T);H.isZero()&&(H=w),$=$.add(H),W=W.sub(V)}return $},E.div=E.divide,E.modulo=function(T){if(r(T)||(T=p(T)),a){var D=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,T.low,T.high);return u(D,a.get_high(),this.unsigned)}return this.sub(this.div(T).mul(T))},E.mod=E.modulo,E.rem=E.modulo,E.not=function(){return u(~this.low,~this.high,this.unsigned)},E.and=function(T){return r(T)||(T=p(T)),u(this.low&T.low,this.high&T.high,this.unsigned)},E.or=function(T){return r(T)||(T=p(T)),u(this.low|T.low,this.high|T.high,this.unsigned)},E.xor=function(T){return r(T)||(T=p(T)),u(this.low^T.low,this.high^T.high,this.unsigned)},E.shiftLeft=function(T){return r(T)&&(T=T.toInt()),(T&=63)===0?this:T<32?u(this.low<>>32-T,this.unsigned):u(0,this.low<>>T|this.high<<32-T,this.high>>T,this.unsigned):u(this.high>>T-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(T){if(r(T)&&(T=T.toInt()),T&=63,T===0)return this;var D=this.high;if(T<32){var O=this.low;return u(O>>>T|D<<32-T,D>>>T,this.unsigned)}else return T===32?u(D,0,this.unsigned):u(D>>>T-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.shr_u=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},E.toBytes=function(T){return T?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var T=this.high,D=this.low;return[D&255,D>>>8&255,D>>>16&255,D>>>24,T&255,T>>>8&255,T>>>16&255,T>>>24]},E.toBytesBE=function(){var T=this.high,D=this.low;return[T>>>24,T>>>16&255,T>>>8&255,T&255,D>>>24,D>>>16&255,D>>>8&255,D&255]},n.fromBytes=function(T,D,O){return O?n.fromBytesLE(T,D):n.fromBytesBE(T,D)},n.fromBytesLE=function(T,D){return new n(T[0]|T[1]<<8|T[2]<<16|T[3]<<24,T[4]|T[5]<<8|T[6]<<16|T[7]<<24,D)},n.fromBytesBE=function(T,D){return new n(T[4]<<24|T[5]<<16|T[6]<<8|T[7],T[0]<<24|T[1]<<16|T[2]<<8|T[3],D)}}),MC=Xt(()=>{}),FC=Xt(()=>{}),$C=Xt((e,t)=>{(function(a,n,r){function s(u){var d=this,c=l();d.next=function(){var p=2091639*d.s0+d.c*23283064365386963e-26;return d.s0=d.s1,d.s1=d.s2,d.s2=p-(d.c=p|0)},d.c=1,d.s0=c(" "),d.s1=c(" "),d.s2=c(" "),d.s0-=c(u),d.s0<0&&(d.s0+=1),d.s1-=c(u),d.s1<0&&(d.s1+=1),d.s2-=c(u),d.s2<0&&(d.s2+=1),c=null}function i(u,d){return d.c=u.c,d.s0=u.s0,d.s1=u.s1,d.s2=u.s2,d}function o(u,d){var c=new s(u),p=d&&d.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,p&&(typeof p=="object"&&i(p,c),h.state=function(){return i(c,{})}),h}function l(){var u=4022871197,d=function(c){c=String(c);for(var p=0;p>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),DC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var p=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^p^p>>>8},l===(l|0)?u.x=l:d+=l;for(var c=0;c>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,m=(d.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),PC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.next=function(){var p=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(p^p<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:d+=l;for(var c=0;c>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,m=(d.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),_C=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,p=u.i,h,m,f;return h=c[p],h^=h>>>7,m=h^h<<24,h=c[p+1&7],m^=h^h>>>10,h=c[p+3&7],m^=h^h>>>3,h=c[p+4&7],m^=h^h<<7,h=c[p+7&7],h=h^h<<13,m^=h^h<<9,c[p]=m,u.i=p+1&7,m};function d(c,p){var h,m,f=[];if(p===(p|0))m=f[0]=p;else for(p=""+p,h=0;h0;--h)c.next()}d(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,m=(d.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},p.int32=d.next,p.quick=p,c&&(c.x&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),OC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.w,p=u.X,h=u.i,m,f;return u.w=c=c+1640531527|0,f=p[h+34&127],m=p[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=p[h]=f^m,u.i=h,f+(c^c>>>16)|0};function d(c,p){var h,m,f,g,y,x=[],A=128;for(p===(p|0)?(m=p,p=null):(p=p+"\0",m=0,A=Math.max(A,p.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(x[(p&&p.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=x[f+34&127],h=x[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,x[f]=m^h;c.w=y,c.X=x,c.i=f}d(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var d=new s(l),c=u&&u.state,p=function(){return(d.next()>>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,m=(d.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},p.int32=d.next,p.quick=p,c&&(c.X&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),zC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,d="";u.next=function(){var p=u.b,h=u.c,m=u.d,f=u.a;return p=p<<25^p>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-p|0,u.b=p=p<<20^p>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-p|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):d+=l;for(var c=0;c>>0)/4294967296};return p.double=function(){do var h=d.next()>>>11,m=(d.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},p.int32=d.next,p.quick=p,c&&(typeof c=="object"&&i(c,d),p.state=function(){return i(d,{})}),p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),LC=Xt(()=>{}),WC=Xt((e,t)=>{(function(a,n,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),d=r.pow(2,o),c=d*2,p=s-1,h;function m(w,S,C){var N=[];S=S==!0?{entropy:!0}:S||{};var M=x(y(S.entropy?[w,b(n)]:w==null?A():w,3),N),F=new f(N),E=function(){for(var T=F.g(i),D=u,O=0;T=c;)T/=2,D/=2,O>>>=1;return(T+O)/D};return E.int32=function(){return F.g(4)|0},E.quick=function(){return F.g(4)/4294967296},E.double=E,x(b(F.S),n),(S.pass||C||function(T,D,O,W){return W&&(W.S&&g(W,F),T.state=function(){return g(F,{})}),O?(r[l]=T,D):T})(E,M,"global"in S?S.global:this==r,S.state)}function f(w){var S,C=w.length,N=this,M=0,F=N.i=N.j=0,E=N.S=[];for(C||(w=[C++]);M{var a=$C(),n=DC(),r=PC(),s=_C(),i=OC(),o=zC(),l=WC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),MA=Xt(()=>{}),FA=Xt(()=>{}),BC=Xt(()=>{}),VC=Xt(()=>{}),UC=Xt(()=>{}),GC=Xt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};function s(){return ie.buffer!=He&&ht(ie.buffer),xt}function i(){return ie.buffer!=He&&ht(ie.buffer),ja}function o(){return ie.buffer!=He&&ht(ie.buffer),Lt}function l(){return ie.buffer!=He&&ht(ie.buffer),ua}function u(){return ie.buffer!=He&&ht(ie.buffer),Da}function d(){return ie.buffer!=He&&ht(ie.buffer),cn}function c(){return ie.buffer!=He&&ht(ie.buffer),Pa}var p=typeof r!="undefined"?r:{},h,m;p.ready=new Promise(function(_,j){h=_,m=j});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},p),y=[],x="./this.program",A=(_,j)=>{throw j},b=typeof window=="object",w=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=p.ENVIRONMENT_IS_PTHREAD||!1,N="";function M(_){return p.locateFile?p.locateFile(_,N):N+_}var F,E,T,D;function O(_){_ instanceof ii||H("exiting due to exception: "+_)}if(S){var W=MA(),$=FA();w?N=$.dirname(N)+"/":N=__dirname+"/",F=(j,oe)=>(j=Pl(j)?new URL(j):$.normalize(j),W.readFileSync(j,oe?void 0:"utf8")),T=j=>{var oe=F(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Fe)=>{j=Pl(j)?new URL(j):$.normalize(j),W.readFile(j,function(je,Be){je?Fe(je):oe(Be.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(j){if(!(j instanceof ii))throw j}),process.on("unhandledRejection",function(j){throw j}),A=(j,oe)=>{if(Tn())throw process.exitCode=j,oe;O(oe),process.exit(j)},p.inspect=function(){return"[Emscripten Module object]"};let _;try{_=BC()}catch(j){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),j}global.Worker=_.Worker}else(b||w)&&(w?N=self.location.href:typeof document!="undefined"&&document.currentScript&&(N=document.currentScript.src),typeof n!="undefined"&&n&&(N=n),N.indexOf("blob:")!==0?N=N.substr(0,N.replace(/[?#].*/,"").lastIndexOf("/")+1):N="",S||(F=_=>{var j=new XMLHttpRequest;return j.open("GET",_,!1),j.send(null),j.responseText},w&&(T=_=>{var j=new XMLHttpRequest;return j.open("GET",_,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),E=(_,j,oe)=>{var Fe=new XMLHttpRequest;Fe.open("GET",_,!0),Fe.responseType="arraybuffer",Fe.onload=()=>{if(Fe.status==200||Fe.status==0&&Fe.response){j(Fe.response);return}oe()},Fe.onerror=oe,Fe.send(null)}),D=_=>document.title=_);S&&typeof performance=="undefined"&&(global.performance=VC().performance);var U=console.log.bind(console),G=console.warn.bind(console);S&&(U=_=>W.writeSync(1,_+` -`),G=_=>W.writeSync(2,_+` -`));var q=p.print||U,H=p.printErr||G;Object.assign(p,g),g=null,p.arguments&&(y=p.arguments),p.thisProgram&&(x=p.thisProgram),p.quit&&(A=p.quit);var V=4,Z=Atomics.load,X=Atomics.store,re=Atomics.compareExchange,ee;p.wasmBinary&&(ee=p.wasmBinary);var ge=p.noExitRuntime||!0;typeof WebAssembly!="object"&&si("no native wasm support detected");var ie,be,Ce=!1,Ee;function Le(_,j){_||si(j)}var qe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function gt(_,j,oe){j>>>=0;for(var Fe=j+oe,je=j;_[je]&&!(je>=Fe);)++je;if(je-j>16&&_.buffer&&qe)return qe.decode(_.buffer instanceof SharedArrayBuffer?_.slice(j,je):_.subarray(j,je));for(var Be="";j>10,56320|mn&1023)}}return Be}function dt(_,j){return _>>>=0,_?gt(i(),_,j):""}function st(_,j,oe,Fe){if(oe>>>=0,!(Fe>0))return 0;for(var je=oe,Be=oe+Fe-1,ye=0;ye<_.length;++ye){var Re=_.charCodeAt(ye);if(Re>=55296&&Re<=57343){var Nt=_.charCodeAt(++ye);Re=65536+((Re&1023)<<10)|Nt&1023}if(Re<=127){if(oe>=Be)break;j[oe++>>>0]=Re}else if(Re<=2047){if(oe+1>=Be)break;j[oe++>>>0]=192|Re>>6,j[oe++>>>0]=128|Re&63}else if(Re<=65535){if(oe+2>=Be)break;j[oe++>>>0]=224|Re>>12,j[oe++>>>0]=128|Re>>6&63,j[oe++>>>0]=128|Re&63}else{if(oe+3>=Be)break;j[oe++>>>0]=240|Re>>18,j[oe++>>>0]=128|Re>>12&63,j[oe++>>>0]=128|Re>>6&63,j[oe++>>>0]=128|Re&63}}return j[oe>>>0]=0,oe-je}function it(_,j,oe){return st(_,i(),j,oe)}var He,xt,ja,Lt,pn,ua,Da,cn,Pa;C&&(He=p.buffer);function ht(_){He=_,p.HEAP8=xt=new Int8Array(_),p.HEAP16=Lt=new Int16Array(_),p.HEAP32=ua=new Int32Array(_),p.HEAPU8=ja=new Uint8Array(_),p.HEAPU16=pn=new Uint16Array(_),p.HEAPU32=Da=new Uint32Array(_),p.HEAPF32=cn=new Float32Array(_),p.HEAPF64=Pa=new Float64Array(_)}var _a=p.INITIAL_MEMORY||16777216;if(C)ie=p.wasmMemory,He=p.buffer;else if(p.wasmMemory)ie=p.wasmMemory;else if(ie=new WebAssembly.Memory({initial:_a/65536,maximum:65536,shared:!0}),!(ie.buffer instanceof SharedArrayBuffer))throw H("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"),S&&H("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ie&&(He=ie.buffer),_a=He.byteLength,ht(He);var qa,yr=[],$l=[],Kn=[],bd=!1;function Tn(){return ge}function Br(){if(p.preRun)for(typeof p.preRun=="function"&&(p.preRun=[p.preRun]);p.preRun.length;)ym(p.preRun.shift());wd(yr)}function Yt(){bd=!0,!C&&wd($l)}function Ic(){if(!C){if(p.postRun)for(typeof p.postRun=="function"&&(p.postRun=[p.postRun]);p.postRun.length;)Gx(p.postRun.shift());wd(Kn)}}function ym(_){yr.unshift(_)}function xm(_){$l.unshift(_)}function Gx(_){Kn.unshift(_)}var Vr=0,Dl=null,xr=null;function Am(_){Vr++,p.monitorRunDependencies&&p.monitorRunDependencies(Vr)}function Sc(_){if(Vr--,p.monitorRunDependencies&&p.monitorRunDependencies(Vr),Vr==0&&(Dl!==null&&(clearInterval(Dl),Dl=null),xr)){var j=xr;xr=null,j()}}function si(_){p.onAbort&&p.onAbort(_),_="Aborted("+_+")",H(_),Ce=!0,Ee=1,_+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(_);throw m(j),j}var bm="data:application/octet-stream;base64,";function Tc(_){return _.startsWith(bm)}function Pl(_){return _.startsWith("file://")}var ma;ma="tfjs-backend-wasm-threaded-simd.wasm",Tc(ma)||(ma=M(ma));function Cc(_){try{if(_==ma&&ee)return new Uint8Array(ee);if(T)return T(_);throw"both async and sync fetching of the wasm failed"}catch(j){si(j)}}function vm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Pl(ma))return fetch(ma,{credentials:"same-origin"}).then(function(_){if(!_.ok)throw"failed to load wasm binary file at '"+ma+"'";return _.arrayBuffer()}).catch(function(){return Cc(ma)});if(E)return new Promise(function(_,j){E(ma,function(oe){_(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return Cc(ma)})}function wm(){var _={env:Wc,wasi_snapshot_preview1:Wc};function j(ye,Re){var Nt=ye.exports;if(p.asm=Nt,Mm(p.asm._emscripten_tls_init),qa=p.asm.__indirect_function_table,xm(p.asm.__wasm_call_ctors),be=Re,!C){var mn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(br){We.loadWasmModuleToWorker(br,function(){--mn||Sc("wasm-instantiate")})})}}C||Am("wasm-instantiate");function oe(ye){j(ye.instance,ye.module)}function Fe(ye){return vm().then(function(Re){return WebAssembly.instantiate(Re,_)}).then(function(Re){return Re}).then(ye,function(Re){H("failed to asynchronously prepare wasm: "+Re),si(Re)})}function je(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!Tc(ma)&&!Pl(ma)&&!S&&typeof fetch=="function"?fetch(ma,{credentials:"same-origin"}).then(function(ye){var Re=WebAssembly.instantiateStreaming(ye,_);return Re.then(oe,function(Nt){return H("wasm streaming compile failed: "+Nt),H("falling back to ArrayBuffer instantiation"),Fe(oe)})}):Fe(oe)}if(p.instantiateWasm)try{var Be=p.instantiateWasm(_,j);return Be}catch(ye){H("Module.instantiateWasm callback failed with error: "+ye),m(ye)}return je().catch(m),{}}var Hx,jx,Nc={};function ii(_){this.name="ExitStatus",this.message="Program terminated with exit("+_+")",this.status=_}function km(_){var j=We.pthreads[_];delete We.pthreads[_],j.terminate(),X2(_),We.runningWorkers.splice(We.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function Im(_){var j=We.pthreads[_];j.postMessage({cmd:"cancel"})}function vd(_){var j=We.pthreads[_];Le(j),We.returnWorkerToPool(j)}function Sm(_){var j=We.getNewWorker();if(!j)return 6;We.runningWorkers.push(j),We.pthreads[_.pthread_ptr]=j,j.pthread_ptr=_.pthread_ptr;var oe={cmd:"run",start_routine:_.startRoutine,arg:_.arg,pthread_ptr:_.pthread_ptr};return j.runPthread=()=>{S&&j.ref(),j.postMessage(oe,_.transferList),delete j.runPthread},j.loaded&&j.runPthread(),0}var Rc={varargs:void 0,get:function(){Rc.varargs+=4;var _=l()[Rc.varargs-4>>>2];return _},getStr:function(_){var j=dt(_);return j}};function Ec(_){if(C)return Ur(1,1,_);Ee=_,Tn()||(We.terminateAllThreads(),p.onExit&&p.onExit(_),Ce=!0),A(_,new ii(_))}function Tm(_,j){if(Ee=_,!j&&C)throw Fc(_),"unwind";Ec(_)}var Mc=Tm;function Cm(_){if(_ instanceof ii||_=="unwind")return Ee;A(1,_)}var We={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?We.initWorker():We.initMainThread()},initMainThread:function(){for(var _=8;_--;)We.allocateUnusedWorker()},initWorker:function(){ge=!1},setExitStatus:function(_){Ee=_},terminateAllThreads:function(){for(var _ of Object.values(We.pthreads))We.returnWorkerToPool(_);for(var _ of We.unusedWorkers)_.terminate();We.unusedWorkers=[]},returnWorkerToPool:function(_){var j=_.pthread_ptr;delete We.pthreads[j],We.unusedWorkers.push(_),We.runningWorkers.splice(We.runningWorkers.indexOf(_),1),_.pthread_ptr=0,S&&_.unref(),X2(j)},receiveObjectTransfer:function(_){},threadInitTLS:function(){We.tlsInitFunctions.forEach(_=>_())},loadWasmModuleToWorker:function(_,j){_.onmessage=Be=>{var ye=Be.data,Re=ye.cmd;if(_.pthread_ptr&&(We.currentProxiedOperationCallerThread=_.pthread_ptr),ye.targetThread&&ye.targetThread!=jc()){var Nt=We.pthreads[ye.targetThread];Nt?Nt.postMessage(ye,ye.transferList):H('Internal error! Worker sent a message "'+Re+'" to target pthread '+ye.targetThread+", but that thread no longer exists!"),We.currentProxiedOperationCallerThread=void 0;return}Re==="processProxyingQueue"?kd(ye.queue):Re==="spawnThread"?Sm(ye):Re==="cleanupThread"?vd(ye.thread):Re==="killThread"?km(ye.thread):Re==="cancelThread"?Im(ye.thread):Re==="loaded"?(_.loaded=!0,S&&_.unref(),j&&j(_),_.runPthread&&_.runPthread()):Re==="print"?q("Thread "+ye.threadId+": "+ye.text):Re==="printErr"?H("Thread "+ye.threadId+": "+ye.text):Re==="alert"?alert("Thread "+ye.threadId+": "+ye.text):ye.target==="setimmediate"?_.postMessage(ye):Re==="callHandler"?p[ye.handler](...ye.args):Re&&H("worker sent an unknown command "+Re),We.currentProxiedOperationCallerThread=void 0},_.onerror=Be=>{var ye="worker sent an error!";throw H(ye+" "+Be.filename+":"+Be.lineno+": "+Be.message),Be},S&&(_.on("message",function(Be){_.onmessage({data:Be})}),_.on("error",function(Be){_.onerror(Be)}),_.on("detachedExit",function(){}));var oe=[],Fe=["onExit","onAbort","print","printErr"];for(var je of Fe)p.hasOwnProperty(je)&&oe.push(je);_.postMessage({cmd:"load",handlers:oe,urlOrBlob:p.mainScriptUrlOrBlob||n,wasmMemory:ie,wasmModule:be})},allocateUnusedWorker:function(){var _,j=M("tfjs-backend-wasm-threaded-simd.worker.js");_=new Worker(j),We.unusedWorkers.push(_)},getNewWorker:function(){return We.unusedWorkers.length==0&&(We.allocateUnusedWorker(),We.loadWasmModuleToWorker(We.unusedWorkers[0])),We.unusedWorkers.pop()}};p.PThread=We;function wd(_){for(;_.length>0;)_.shift()(p)}function Nm(){var _=jc(),j=l()[_+52>>>2],oe=l()[_+56>>>2],Fe=j-oe;Jx(j,Fe),qc(j)}p.establishStackSpace=Nm;function Fc(_){if(C)return Ur(2,0,_);try{Mc(_)}catch(j){Cm(j)}}var _l=[];function Rm(_){var j=_l[_];return j||(_>=_l.length&&(_l.length=_+1),_l[_]=j=qa.get(_)),j}function Em(_,j){var oe=Rm(_)(j);Tn()?We.setExitStatus(oe):Zx(oe)}p.invokeEntryPoint=Em;function Mm(_){We.tlsInitFunctions.push(_)}function Fm(_){Xx(_,!w,1,!b),We.threadInitTLS()}function $m(_){C?postMessage({cmd:"cleanupThread",thread:_}):vd(_)}function $c(_,j,oe,Fe){return C?Ur(3,1,_,j,oe,Fe):Dc(_,j,oe,Fe)}function Dc(_,j,oe,Fe){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var je=[],Be=0;if(C&&(je.length===0||Be))return $c(_,j,oe,Fe);if(Be)return Be;var ye={startRoutine:oe,pthread_ptr:_,arg:Fe,transferList:je};return C?(ye.cmd="spawnThread",postMessage(ye,je),0):Sm(ye)}function Dm(){return 65536}var Pm=!0;function _m(){return Pm}function kd(_){Atomics.store(l(),_>>2,1),jc()&&Yx(_),Atomics.compareExchange(l(),_>>2,1,0)}p.executeNotifiedProxyingQueue=kd;function Om(_,j,oe,Fe){if(_==j)setTimeout(()=>kd(Fe));else if(C)postMessage({targetThread:_,cmd:"processProxyingQueue",queue:Fe});else{var je=We.pthreads[_];if(!je)return;je.postMessage({cmd:"processProxyingQueue",queue:Fe})}return 1}function zm(_,j,oe){return-1}function Lm(){si("")}function oi(_){oi.shown||(oi.shown={}),oi.shown[_]||(oi.shown[_]=1,S&&(_="warning: "+_),H(_))}function Wm(){S||w||oi("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Bm(){return Date.now()}function Pc(){return 4294901760}function Vm(){return Pc()}var Id;S?Id=()=>{var _=process.hrtime();return _[0]*1e3+_[1]/1e6}:Id=()=>performance.timeOrigin+performance.now();function Um(_,j,oe){i().copyWithin(_>>>0,j>>>0,j+oe>>>0)}function Gm(){return S?UC().cpus().length:navigator.hardwareConcurrency}function Hm(_){var j=K2(),oe=_();return qc(j),oe}function Ur(_,j){var oe=arguments.length-2,Fe=arguments;return Hm(()=>{for(var je=oe,Be=Xc(je*8),ye=Be>>3,Re=0;Re>>0]=Nt}return Kx(_,je,Be,j)})}var Sd=[];function jm(_,j,oe){Sd.length=j;for(var Fe=oe>>3,je=0;je>>0];var Be=_<0,ye=Be?Nc[-_-1]:tf[_];return ye.apply(null,Sd)}function qm(_){try{return ie.grow(_-He.byteLength+65535>>>16),ht(ie.buffer),1}catch(j){}}function Xm(_){var j=i().length;if(_=_>>>0,_<=j)return!1;var oe=Pc();if(_>oe)return!1;let Fe=(Nt,mn)=>Nt+(mn-Nt%mn)%mn;for(var je=1;je<=4;je*=2){var Be=j*(1+.2/je);Be=Math.min(Be,_+100663296);var ye=Math.min(oe,Fe(Math.max(_,Be),65536)),Re=qm(ye);if(Re)return!0}return!1}function Km(){throw"unwind"}function _c(_){return C?Ur(4,1,_):52}function Oc(_,j,oe,Fe,je){return C?Ur(5,1,_,j,oe,Fe,je):70}var Ym=[null,[],[]];function Zm(_,j){var oe=Ym[_];j===0||j===10?((_===1?q:H)(gt(oe,0)),oe.length=0):oe.push(j)}function zc(_,j,oe,Fe){if(C)return Ur(6,1,_,j,oe,Fe);for(var je=0,Be=0;Be>>2],Re=u()[j+4>>>2];j+=8;for(var Nt=0;Nt>>0]);je+=Re}return u()[Fe>>>2]=je,0}function Lc(_){var j=p["_"+_];return j}function Jm(_,j){s().set(_,j>>>0)}function Qm(_,j,oe,Fe,je){var Be={string:fn=>{var Wl=0;if(fn!=null&&fn!==0){var t5=(fn.length<<2)+1;Wl=Xc(t5),it(fn,Wl,t5)}return Wl},array:fn=>{var Wl=Xc(fn.length);return Jm(fn,Wl),Wl}};function ye(fn){return j==="string"?dt(fn):j==="boolean"?!!fn:fn}var Re=Lc(_),Nt=[],mn=0;if(Fe)for(var br=0;brye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Fe?Lc(_):function(){return Qm(_,j,oe,arguments,Fe)}}We.init();var tf=[null,Ec,Fc,$c,_c,Oc,zc],Wc={__emscripten_init_main_thread_js:Fm,__emscripten_thread_cleanup:$m,__pthread_create_js:Dc,_emscripten_default_pthread_stack_size:Dm,_emscripten_get_now_is_monotonic:_m,_emscripten_notify_task_queue:Om,_emscripten_set_offscreencanvas_size:zm,abort:Lm,emscripten_check_blocking_allowed:Wm,emscripten_date_now:Bm,emscripten_get_heap_max:Vm,emscripten_get_now:Id,emscripten_memcpy_big:Um,emscripten_num_logical_cores:Gm,emscripten_receive_on_main_thread_js:jm,emscripten_resize_heap:Xm,emscripten_unwind_to_js_event_loop:Km,exit:Mc,fd_close:_c,fd_seek:Oc,fd_write:zc,memory:ie||p.wasmMemory},qx=wm(),af=p.___wasm_call_ctors=function(){return(af=p.___wasm_call_ctors=p.asm.__wasm_call_ctors).apply(null,arguments)},nf=p._init=function(){return(nf=p._init=p.asm.init).apply(null,arguments)},rf=p._init_with_threads_count=function(){return(rf=p._init_with_threads_count=p.asm.init_with_threads_count).apply(null,arguments)},sf=p._get_threads_count=function(){return(sf=p._get_threads_count=p.asm.get_threads_count).apply(null,arguments)},of=p._register_tensor=function(){return(of=p._register_tensor=p.asm.register_tensor).apply(null,arguments)},lf=p._dispose_data=function(){return(lf=p._dispose_data=p.asm.dispose_data).apply(null,arguments)},uf=p._dispose=function(){return(uf=p._dispose=p.asm.dispose).apply(null,arguments)},df=p._Abs=function(){return(df=p._Abs=p.asm.Abs).apply(null,arguments)},pf=p._Acos=function(){return(pf=p._Acos=p.asm.Acos).apply(null,arguments)},cf=p._Acosh=function(){return(cf=p._Acosh=p.asm.Acosh).apply(null,arguments)},hf=p._Add=function(){return(hf=p._Add=p.asm.Add).apply(null,arguments)},mf=p._AddN=function(){return(mf=p._AddN=p.asm.AddN).apply(null,arguments)},ff=p._All=function(){return(ff=p._All=p.asm.All).apply(null,arguments)},gf=p._Any=function(){return(gf=p._Any=p.asm.Any).apply(null,arguments)},yf=p._ArgMax=function(){return(yf=p._ArgMax=p.asm.ArgMax).apply(null,arguments)},xf=p._ArgMin=function(){return(xf=p._ArgMin=p.asm.ArgMin).apply(null,arguments)},Af=p._Asin=function(){return(Af=p._Asin=p.asm.Asin).apply(null,arguments)},bf=p._Asinh=function(){return(bf=p._Asinh=p.asm.Asinh).apply(null,arguments)},vf=p._Atan=function(){return(vf=p._Atan=p.asm.Atan).apply(null,arguments)},wf=p._Atan2=function(){return(wf=p._Atan2=p.asm.Atan2).apply(null,arguments)},kf=p._Atanh=function(){return(kf=p._Atanh=p.asm.Atanh).apply(null,arguments)},If=p._AvgPool=function(){return(If=p._AvgPool=p.asm.AvgPool).apply(null,arguments)},Sf=p._AvgPool3D=function(){return(Sf=p._AvgPool3D=p.asm.AvgPool3D).apply(null,arguments)},Tf=p._AvgPool3DGrad=function(){return(Tf=p._AvgPool3DGrad=p.asm.AvgPool3DGrad).apply(null,arguments)},Cf=p._AvgPoolGrad=function(){return(Cf=p._AvgPoolGrad=p.asm.AvgPoolGrad).apply(null,arguments)},Nf=p._BatchMatMul=function(){return(Nf=p._BatchMatMul=p.asm.BatchMatMul).apply(null,arguments)},Rf=p._Bincount=function(){return(Rf=p._Bincount=p.asm.Bincount).apply(null,arguments)},Ef=p._BitwiseAnd=function(){return(Ef=p._BitwiseAnd=p.asm.BitwiseAnd).apply(null,arguments)},Mf=p._Ceil=function(){return(Mf=p._Ceil=p.asm.Ceil).apply(null,arguments)},Ff=p._ClipByValue=function(){return(Ff=p._ClipByValue=p.asm.ClipByValue).apply(null,arguments)},$f=p._Conv2D=function(){return($f=p._Conv2D=p.asm.Conv2D).apply(null,arguments)},Df=p._Conv2DBackpropInput=function(){return(Df=p._Conv2DBackpropInput=p.asm.Conv2DBackpropInput).apply(null,arguments)},Pf=p._Conv3D=function(){return(Pf=p._Conv3D=p.asm.Conv3D).apply(null,arguments)},_f=p._Conv3DBackpropFilterV2=function(){return(_f=p._Conv3DBackpropFilterV2=p.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Of=p._Conv3DBackpropInputV2=function(){return(Of=p._Conv3DBackpropInputV2=p.asm.Conv3DBackpropInputV2).apply(null,arguments)},zf=p._Cos=function(){return(zf=p._Cos=p.asm.Cos).apply(null,arguments)},Lf=p._Cosh=function(){return(Lf=p._Cosh=p.asm.Cosh).apply(null,arguments)},Wf=p._CropAndResize=function(){return(Wf=p._CropAndResize=p.asm.CropAndResize).apply(null,arguments)},Bf=p._Cumprod=function(){return(Bf=p._Cumprod=p.asm.Cumprod).apply(null,arguments)},Vf=p._Cumsum=function(){return(Vf=p._Cumsum=p.asm.Cumsum).apply(null,arguments)},Uf=p._DenseBincount=function(){return(Uf=p._DenseBincount=p.asm.DenseBincount).apply(null,arguments)},Gf=p._DepthToSpace=function(){return(Gf=p._DepthToSpace=p.asm.DepthToSpace).apply(null,arguments)},Hf=p._DepthwiseConv2dNative=function(){return(Hf=p._DepthwiseConv2dNative=p.asm.DepthwiseConv2dNative).apply(null,arguments)},jf=p._Diag=function(){return(jf=p._Diag=p.asm.Diag).apply(null,arguments)},qf=p._Dilation2D=function(){return(qf=p._Dilation2D=p.asm.Dilation2D).apply(null,arguments)},Xf=p._Dilation2DBackpropFilter=function(){return(Xf=p._Dilation2DBackpropFilter=p.asm.Dilation2DBackpropFilter).apply(null,arguments)},Kf=p._Dilation2DBackpropInput=function(){return(Kf=p._Dilation2DBackpropInput=p.asm.Dilation2DBackpropInput).apply(null,arguments)},Yf=p._Elu=function(){return(Yf=p._Elu=p.asm.Elu).apply(null,arguments)},Zf=p._EluGrad=function(){return(Zf=p._EluGrad=p.asm.EluGrad).apply(null,arguments)},Jf=p._Equal=function(){return(Jf=p._Equal=p.asm.Equal).apply(null,arguments)},Qf=p._Erf=function(){return(Qf=p._Erf=p.asm.Erf).apply(null,arguments)},e2=p._Exp=function(){return(e2=p._Exp=p.asm.Exp).apply(null,arguments)},t2=p._Expm1=function(){return(t2=p._Expm1=p.asm.Expm1).apply(null,arguments)},a2=p._FlipLeftRight=function(){return(a2=p._FlipLeftRight=p.asm.FlipLeftRight).apply(null,arguments)},n2=p._Floor=function(){return(n2=p._Floor=p.asm.Floor).apply(null,arguments)},r2=p._FloorDiv=function(){return(r2=p._FloorDiv=p.asm.FloorDiv).apply(null,arguments)},s2=p._FusedBatchNorm=function(){return(s2=p._FusedBatchNorm=p.asm.FusedBatchNorm).apply(null,arguments)},i2=p._FusedConv2D=function(){return(i2=p._FusedConv2D=p.asm.FusedConv2D).apply(null,arguments)},o2=p._FusedDepthwiseConv2D=function(){return(o2=p._FusedDepthwiseConv2D=p.asm.FusedDepthwiseConv2D).apply(null,arguments)},l2=p._Gather=function(){return(l2=p._Gather=p.asm.Gather).apply(null,arguments)},u2=p._GatherNd=function(){return(u2=p._GatherNd=p.asm.GatherNd).apply(null,arguments)},d2=p._Greater=function(){return(d2=p._Greater=p.asm.Greater).apply(null,arguments)},p2=p._GreaterEqual=function(){return(p2=p._GreaterEqual=p.asm.GreaterEqual).apply(null,arguments)},c2=p._IsFinite=function(){return(c2=p._IsFinite=p.asm.IsFinite).apply(null,arguments)},h2=p._IsInf=function(){return(h2=p._IsInf=p.asm.IsInf).apply(null,arguments)},m2=p._IsNan=function(){return(m2=p._IsNan=p.asm.IsNan).apply(null,arguments)},f2=p._LRN=function(){return(f2=p._LRN=p.asm.LRN).apply(null,arguments)},g2=p._LRNGrad=function(){return(g2=p._LRNGrad=p.asm.LRNGrad).apply(null,arguments)},y2=p._LeakyRelu=function(){return(y2=p._LeakyRelu=p.asm.LeakyRelu).apply(null,arguments)},x2=p._Less=function(){return(x2=p._Less=p.asm.Less).apply(null,arguments)},A2=p._LessEqual=function(){return(A2=p._LessEqual=p.asm.LessEqual).apply(null,arguments)},b2=p._LinSpace=function(){return(b2=p._LinSpace=p.asm.LinSpace).apply(null,arguments)},v2=p._Log=function(){return(v2=p._Log=p.asm.Log).apply(null,arguments)},w2=p._Log1p=function(){return(w2=p._Log1p=p.asm.Log1p).apply(null,arguments)},k2=p._LogicalAnd=function(){return(k2=p._LogicalAnd=p.asm.LogicalAnd).apply(null,arguments)},I2=p._LogicalNot=function(){return(I2=p._LogicalNot=p.asm.LogicalNot).apply(null,arguments)},S2=p._LogicalOr=function(){return(S2=p._LogicalOr=p.asm.LogicalOr).apply(null,arguments)},T2=p._LogicalXor=function(){return(T2=p._LogicalXor=p.asm.LogicalXor).apply(null,arguments)},C2=p._Max=function(){return(C2=p._Max=p.asm.Max).apply(null,arguments)},N2=p._MaxPool=function(){return(N2=p._MaxPool=p.asm.MaxPool).apply(null,arguments)},R2=p._MaxPool3D=function(){return(R2=p._MaxPool3D=p.asm.MaxPool3D).apply(null,arguments)},E2=p._MaxPool3DGrad=function(){return(E2=p._MaxPool3DGrad=p.asm.MaxPool3DGrad).apply(null,arguments)},M2=p._MaxPoolGrad=function(){return(M2=p._MaxPoolGrad=p.asm.MaxPoolGrad).apply(null,arguments)},F2=p._MaxPoolWithArgmax=function(){return(F2=p._MaxPoolWithArgmax=p.asm.MaxPoolWithArgmax).apply(null,arguments)},$2=p._Maximum=function(){return($2=p._Maximum=p.asm.Maximum).apply(null,arguments)},D2=p._Mean=function(){return(D2=p._Mean=p.asm.Mean).apply(null,arguments)},P2=p._Min=function(){return(P2=p._Min=p.asm.Min).apply(null,arguments)},_2=p._Minimum=function(){return(_2=p._Minimum=p.asm.Minimum).apply(null,arguments)},O2=p._MirrorPad=function(){return(O2=p._MirrorPad=p.asm.MirrorPad).apply(null,arguments)},z2=p._Mod=function(){return(z2=p._Mod=p.asm.Mod).apply(null,arguments)},L2=p._Multinomial=function(){return(L2=p._Multinomial=p.asm.Multinomial).apply(null,arguments)},W2=p._Multiply=function(){return(W2=p._Multiply=p.asm.Multiply).apply(null,arguments)},B2=p._Neg=function(){return(B2=p._Neg=p.asm.Neg).apply(null,arguments)},V2=p._NonMaxSuppressionV3=function(){return(V2=p._NonMaxSuppressionV3=p.asm.NonMaxSuppressionV3).apply(null,arguments)},U2=p._NonMaxSuppressionV4=function(){return(U2=p._NonMaxSuppressionV4=p.asm.NonMaxSuppressionV4).apply(null,arguments)},Bc=p._NonMaxSuppressionV5=function(){return(Bc=p._NonMaxSuppressionV5=p.asm.NonMaxSuppressionV5).apply(null,arguments)},Vc=p._NotEqual=function(){return(Vc=p._NotEqual=p.asm.NotEqual).apply(null,arguments)},Td=p._OneHot=function(){return(Td=p._OneHot=p.asm.OneHot).apply(null,arguments)},G2=p._PadV2=function(){return(G2=p._PadV2=p.asm.PadV2).apply(null,arguments)},H2=p._Pow=function(){return(H2=p._Pow=p.asm.Pow).apply(null,arguments)},Ol=p._Prelu=function(){return(Ol=p._Prelu=p.asm.Prelu).apply(null,arguments)},Uc=p._Prod=function(){return(Uc=p._Prod=p.asm.Prod).apply(null,arguments)},zl=p._RealDiv=function(){return(zl=p._RealDiv=p.asm.RealDiv).apply(null,arguments)},Ll=p._Reciprocal=function(){return(Ll=p._Reciprocal=p.asm.Reciprocal).apply(null,arguments)},j2=p._Relu=function(){return(j2=p._Relu=p.asm.Relu).apply(null,arguments)},Y=p._Relu6=function(){return(Y=p._Relu6=p.asm.Relu6).apply(null,arguments)},se=p._ResizeBilinear=function(){return(se=p._ResizeBilinear=p.asm.ResizeBilinear).apply(null,arguments)},Me=p._ResizeBilinearGrad=function(){return(Me=p._ResizeBilinearGrad=p.asm.ResizeBilinearGrad).apply(null,arguments)},et=p._ResizeNearestNeighbor=function(){return(et=p._ResizeNearestNeighbor=p.asm.ResizeNearestNeighbor).apply(null,arguments)},kt=p._ResizeNearestNeighborGrad=function(){return(kt=p._ResizeNearestNeighborGrad=p.asm.ResizeNearestNeighborGrad).apply(null,arguments)},It=p._Reverse=function(){return(It=p._Reverse=p.asm.Reverse).apply(null,arguments)},Je=p._RotateWithOffset=function(){return(Je=p._RotateWithOffset=p.asm.RotateWithOffset).apply(null,arguments)},Ze=p._Round=function(){return(Ze=p._Round=p.asm.Round).apply(null,arguments)},Wt=p._Rsqrt=function(){return(Wt=p._Rsqrt=p.asm.Rsqrt).apply(null,arguments)},hn=p._ScatterNd=function(){return(hn=p._ScatterNd=p.asm.ScatterNd).apply(null,arguments)},Ar=p._SearchSorted=function(){return(Ar=p._SearchSorted=p.asm.SearchSorted).apply(null,arguments)},Gc=p._SelectV2=function(){return(Gc=p._SelectV2=p.asm.SelectV2).apply(null,arguments)},Cd=p._Selu=function(){return(Cd=p._Selu=p.asm.Selu).apply(null,arguments)},q2=p._Sigmoid=function(){return(q2=p._Sigmoid=p.asm.Sigmoid).apply(null,arguments)},Oa=p._Sign=function(){return(Oa=p._Sign=p.asm.Sign).apply(null,arguments)},Gr=p._Sin=function(){return(Gr=p._Sin=p.asm.Sin).apply(null,arguments)},Hc=p._Sinh=function(){return(Hc=p._Sinh=p.asm.Sinh).apply(null,arguments)},LT=p._Softmax=function(){return(LT=p._Softmax=p.asm.Softmax).apply(null,arguments)},WT=p._Softplus=function(){return(WT=p._Softplus=p.asm.Softplus).apply(null,arguments)},BT=p._SparseFillEmptyRows=function(){return(BT=p._SparseFillEmptyRows=p.asm.SparseFillEmptyRows).apply(null,arguments)},VT=p._SparseReshape=function(){return(VT=p._SparseReshape=p.asm.SparseReshape).apply(null,arguments)},UT=p._SparseSegmentReduction=function(){return(UT=p._SparseSegmentReduction=p.asm.SparseSegmentReduction).apply(null,arguments)},GT=p._SparseToDense=function(){return(GT=p._SparseToDense=p.asm.SparseToDense).apply(null,arguments)},HT=p._Sqrt=function(){return(HT=p._Sqrt=p.asm.Sqrt).apply(null,arguments)},jT=p._Square=function(){return(jT=p._Square=p.asm.Square).apply(null,arguments)},qT=p._SquaredDifference=function(){return(qT=p._SquaredDifference=p.asm.SquaredDifference).apply(null,arguments)},XT=p._Step=function(){return(XT=p._Step=p.asm.Step).apply(null,arguments)},KT=p._StridedSlice=function(){return(KT=p._StridedSlice=p.asm.StridedSlice).apply(null,arguments)},YT=p._Sub=function(){return(YT=p._Sub=p.asm.Sub).apply(null,arguments)},ZT=p._Sum=function(){return(ZT=p._Sum=p.asm.Sum).apply(null,arguments)},JT=p._Tan=function(){return(JT=p._Tan=p.asm.Tan).apply(null,arguments)},QT=p._Tanh=function(){return(QT=p._Tanh=p.asm.Tanh).apply(null,arguments)},eC=p._TensorScatterUpdate=function(){return(eC=p._TensorScatterUpdate=p.asm.TensorScatterUpdate).apply(null,arguments)},tC=p._Tile=function(){return(tC=p._Tile=p.asm.Tile).apply(null,arguments)},aC=p._TopK=function(){return(aC=p._TopK=p.asm.TopK).apply(null,arguments)},nC=p._Transform=function(){return(nC=p._Transform=p.asm.Transform).apply(null,arguments)},rC=p._Transpose=function(){return(rC=p._Transpose=p.asm.Transpose).apply(null,arguments)},sC=p.__FusedMatMul=function(){return(sC=p.__FusedMatMul=p.asm._FusedMatMul).apply(null,arguments)},iC=p._malloc=function(){return(iC=p._malloc=p.asm.malloc).apply(null,arguments)},oC=p._free=function(){return(oC=p._free=p.asm.free).apply(null,arguments)},lC=p.__emscripten_tls_init=function(){return(lC=p.__emscripten_tls_init=p.asm._emscripten_tls_init).apply(null,arguments)},jc=p._pthread_self=function(){return(jc=p._pthread_self=p.asm.pthread_self).apply(null,arguments)},uC=p.___errno_location=function(){return(uC=p.___errno_location=p.asm.__errno_location).apply(null,arguments)},Xx=p.__emscripten_thread_init=function(){return(Xx=p.__emscripten_thread_init=p.asm._emscripten_thread_init).apply(null,arguments)},dC=p.__emscripten_thread_crashed=function(){return(dC=p.__emscripten_thread_crashed=p.asm._emscripten_thread_crashed).apply(null,arguments)},pC=p._emscripten_main_thread_process_queued_calls=function(){return(pC=p._emscripten_main_thread_process_queued_calls=p.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},cC=p._emscripten_main_browser_thread_id=function(){return(cC=p._emscripten_main_browser_thread_id=p.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Kx=p._emscripten_run_in_main_runtime_thread_js=function(){return(Kx=p._emscripten_run_in_main_runtime_thread_js=p.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},hC=p._emscripten_dispatch_to_thread_=function(){return(hC=p._emscripten_dispatch_to_thread_=p.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},Yx=p.__emscripten_proxy_execute_task_queue=function(){return(Yx=p.__emscripten_proxy_execute_task_queue=p.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},X2=p.__emscripten_thread_free_data=function(){return(X2=p.__emscripten_thread_free_data=p.asm._emscripten_thread_free_data).apply(null,arguments)},Zx=p.__emscripten_thread_exit=function(){return(Zx=p.__emscripten_thread_exit=p.asm._emscripten_thread_exit).apply(null,arguments)},Jx=p._emscripten_stack_set_limits=function(){return(Jx=p._emscripten_stack_set_limits=p.asm.emscripten_stack_set_limits).apply(null,arguments)},K2=p.stackSave=function(){return(K2=p.stackSave=p.asm.stackSave).apply(null,arguments)},qc=p.stackRestore=function(){return(qc=p.stackRestore=p.asm.stackRestore).apply(null,arguments)},Xc=p.stackAlloc=function(){return(Xc=p.stackAlloc=p.asm.stackAlloc).apply(null,arguments)},mC=p.dynCall_iijjiiii=function(){return(mC=p.dynCall_iijjiiii=p.asm.dynCall_iijjiiii).apply(null,arguments)},fC=p.dynCall_jiji=function(){return(fC=p.dynCall_jiji=p.asm.dynCall_jiji).apply(null,arguments)};p.keepRuntimeAlive=Tn,p.wasmMemory=ie,p.cwrap=ef,p.ExitStatus=ii,p.PThread=We;var Kc;xr=function _(){Kc||Qx(),Kc||(xr=_)};function Qx(_){if(_=_||y,Vr>0)return;if(C){h(p),Yt(),startWorker(p);return}if(Br(),Vr>0)return;function j(){Kc||(Kc=!0,p.calledRun=!0,!Ce&&(Yt(),h(p),p.onRuntimeInitialized&&p.onRuntimeInitialized(),Ic()))}p.setStatus?(p.setStatus("Running..."),setTimeout(function(){setTimeout(function(){p.setStatus("")},1),j()},1)):j()}if(p.preInit)for(typeof p.preInit=="function"&&(p.preInit=[p.preInit]);p.preInit.length>0;)p.preInit.pop()();Qx();var Yc;f&&(Yc={uncaughtException:process.listeners("uncaughtException").filter(function(_){return!f.uncaughtException.indexOf(_)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(_){return!f.unhandledRejection.indexOf(_)>-1})});var Zc;if(typeof WasmBackendModule!="undefined")Zc=WasmBackendModule;else if(typeof r!="undefined")Zc=r;else throw new Error("Could not find wasm module in post.js");if(Yc){var gC=Zc._dispose;Zc._dispose=function(){gC(),Yc.uncaughtException.forEach(function(_){process.removeListener("uncaughtException",_)}),Yc.unhandledRejection.forEach(function(_){process.removeListener("unhandledRejection",_)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=a)}),HC=Xt((e,t)=>{t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" -");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}),jC=Xt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(Y,se){i=Y,o=se});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),d=[],c="./this.program",p=(Y,se)=>{throw se},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(Y){return s.locateFile?s.locateFile(Y,g):g+Y}var x,A,b,w;function S(Y){Y instanceof Dl||F("exiting due to exception: "+Y)}if(f){var C=MA(),N=FA();m?g=N.dirname(g)+"/":g=__dirname+"/",x=(Y,se)=>(Y=Br(Y)?new URL(Y):N.normalize(Y),C.readFileSync(Y,se?void 0:"utf8")),b=Y=>{var se=x(Y,!0);return se.buffer||(se=new Uint8Array(se)),se},A=(Y,se,Me)=>{Y=Br(Y)?new URL(Y):N.normalize(Y),C.readFile(Y,function(et,kt){et?Me(et):se(kt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),d=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof Dl))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),p=(Y,se)=>{if(ja())throw process.exitCode=Y,se;S(se),process.exit(Y)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",x=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.send(null),se.responseText},m&&(b=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),A=(Y,se,Me)=>{var et=new XMLHttpRequest;et.open("GET",Y,!0),et.responseType="arraybuffer",et.onload=()=>{if(et.status==200||et.status==0&&et.response){se(et.response);return}Me()},et.onerror=Me,et.send(null)},w=Y=>document.title=Y);var M=s.print||console.log.bind(console),F=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(d=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(p=s.quit);var E=4,T;s.wasmBinary&&(T=s.wasmBinary);var D=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Kn("no native wasm support detected");var O,W=!1,$;function U(Y,se){Y||Kn(se)}var G=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function q(Y,se,Me){se>>>=0;for(var et=se+Me,kt=se;Y[kt]&&!(kt>=et);)++kt;if(kt-se>16&&Y.buffer&&G)return G.decode(Y.subarray(se,kt));for(var It="";se>10,56320|hn&1023)}}return It}function H(Y,se){return Y>>>=0,Y?q(ee,Y,se):""}function V(Y,se,Me,et){if(Me>>>=0,!(et>0))return 0;for(var kt=Me,It=Me+et-1,Je=0;Je=55296&&Ze<=57343){var Wt=Y.charCodeAt(++Je);Ze=65536+((Ze&1023)<<10)|Wt&1023}if(Ze<=127){if(Me>=It)break;se[Me++>>>0]=Ze}else if(Ze<=2047){if(Me+1>=It)break;se[Me++>>>0]=192|Ze>>6,se[Me++>>>0]=128|Ze&63}else if(Ze<=65535){if(Me+2>=It)break;se[Me++>>>0]=224|Ze>>12,se[Me++>>>0]=128|Ze>>6&63,se[Me++>>>0]=128|Ze&63}else{if(Me+3>=It)break;se[Me++>>>0]=240|Ze>>18,se[Me++>>>0]=128|Ze>>12&63,se[Me++>>>0]=128|Ze>>6&63,se[Me++>>>0]=128|Ze&63}}return se[Me>>>0]=0,Me-kt}function Z(Y,se,Me){return V(Y,ee,se,Me)}var X,re,ee,ge,ie,be,Ce,Ee,Le;function qe(Y){X=Y,s.HEAP8=re=new Int8Array(Y),s.HEAP16=ge=new Int16Array(Y),s.HEAP32=be=new Int32Array(Y),s.HEAPU8=ee=new Uint8Array(Y),s.HEAPU16=ie=new Uint16Array(Y),s.HEAPU32=Ce=new Uint32Array(Y),s.HEAPF32=Ee=new Float32Array(Y),s.HEAPF64=Le=new Float64Array(Y)}var gt=s.INITIAL_MEMORY||16777216,dt,st=[],it=[],He=[],xt=!1;function ja(){return D}function Lt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Da(s.preRun.shift());xr(st)}function pn(){xt=!0,xr(it)}function ua(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Pa(s.postRun.shift());xr(He)}function Da(Y){st.unshift(Y)}function cn(Y){it.unshift(Y)}function Pa(Y){He.unshift(Y)}var ht=0,_a=null,qa=null;function yr(Y){ht++,s.monitorRunDependencies&&s.monitorRunDependencies(ht)}function $l(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(_a!==null&&(clearInterval(_a),_a=null),qa)){var se=qa;qa=null,se()}}function Kn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",F(Y),W=!0,$=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var bd="data:application/octet-stream;base64,";function Tn(Y){return Y.startsWith(bd)}function Br(Y){return Y.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",Tn(Yt)||(Yt=y(Yt));function Ic(Y){try{if(Y==Yt&&T)return new Uint8Array(T);if(b)return b(Y);throw"both async and sync fetching of the wasm failed"}catch(se){Kn(se)}}function ym(){if(!T&&(h||m)){if(typeof fetch=="function"&&!Br(Yt))return fetch(Yt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Yt+"'";return Y.arrayBuffer()}).catch(function(){return Ic(Yt)});if(A)return new Promise(function(Y,se){A(Yt,function(Me){Y(new Uint8Array(Me))},se)})}return Promise.resolve().then(function(){return Ic(Yt)})}function xm(){var Y={env:vd,wasi_snapshot_preview1:vd};function se(Je,Ze){var Wt=Je.exports;s.asm=Wt,O=s.asm.memory,qe(O.buffer),dt=s.asm.__indirect_function_table,cn(s.asm.__wasm_call_ctors),$l("wasm-instantiate")}yr("wasm-instantiate");function Me(Je){se(Je.instance)}function et(Je){return ym().then(function(Ze){return WebAssembly.instantiate(Ze,Y)}).then(function(Ze){return Ze}).then(Je,function(Ze){F("failed to asynchronously prepare wasm: "+Ze),Kn(Ze)})}function kt(){return!T&&typeof WebAssembly.instantiateStreaming=="function"&&!Tn(Yt)&&!Br(Yt)&&!f&&typeof fetch=="function"?fetch(Yt,{credentials:"same-origin"}).then(function(Je){var Ze=WebAssembly.instantiateStreaming(Je,Y);return Ze.then(Me,function(Wt){return F("wasm streaming compile failed: "+Wt),F("falling back to ArrayBuffer instantiation"),et(Me)})}):et(Me)}if(s.instantiateWasm)try{var It=s.instantiateWasm(Y,se);return It}catch(Je){F("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return kt().catch(o),{}}var Gx,Vr;function Dl(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function xr(Y){for(;Y.length>0;)Y.shift()(s)}function Am(){Kn("")}function Sc(){return 4294901760}function si(){return Sc()}function bm(Y,se,Me){ee.copyWithin(Y>>>0,se>>>0,se+Me>>>0)}function Tc(Y){try{return O.grow(Y-X.byteLength+65535>>>16),qe(O.buffer),1}catch(se){}}function Pl(Y){var se=ee.length;Y=Y>>>0;var Me=Sc();if(Y>Me)return!1;let et=(Wt,hn)=>Wt+(hn-Wt%hn)%hn;for(var kt=1;kt<=4;kt*=2){var It=se*(1+.2/kt);It=Math.min(It,Y+100663296);var Je=Math.min(Me,et(Math.max(Y,It),65536)),Ze=Tc(Je);if(Ze)return!0}return!1}var ma={varargs:void 0,get:function(){ma.varargs+=4;var Y=be[ma.varargs-4>>>2];return Y},getStr:function(Y){var se=H(Y);return se}};function Cc(Y){return 52}function vm(Y,se,Me,et,kt){return 70}var wm=[null,[],[]];function Hx(Y,se){var Me=wm[Y];se===0||se===10?((Y===1?M:F)(q(Me,0)),Me.length=0):Me.push(se)}function jx(Y,se,Me,et){for(var kt=0,It=0;It>>2],Ze=Ce[se+4>>>2];se+=8;for(var Wt=0;Wt>>0]);kt+=Ze}return Ce[et>>>2]=kt,0}function Nc(Y){var se=s["_"+Y];return se}function ii(Y,se){re.set(Y,se>>>0)}function km(Y,se,Me,et,kt){var It={string:Oa=>{var Gr=0;if(Oa!=null&&Oa!==0){var Hc=(Oa.length<<2)+1;Gr=Td(Hc),Z(Oa,Gr,Hc)}return Gr},array:Oa=>{var Gr=Td(Oa.length);return ii(Oa,Gr),Gr}};function Je(Oa){return se==="string"?H(Oa):se==="boolean"?!!Oa:Oa}var Ze=Nc(Y),Wt=[],hn=0;if(et)for(var Ar=0;ArJe==="number"||Je==="boolean"),It=se!=="string";return It&&kt&&!et?Nc(Y):function(){return km(Y,se,Me,arguments,et)}}var vd={abort:Am,emscripten_get_heap_max:si,emscripten_memcpy_big:bm,emscripten_resize_heap:Pl,fd_close:Cc,fd_seek:vm,fd_write:jx},Sm=xm(),Rc=s.___wasm_call_ctors=function(){return(Rc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Ec=s._init=function(){return(Ec=s._init=s.asm.init).apply(null,arguments)},Tm=s._init_with_threads_count=function(){return(Tm=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Mc=s._get_threads_count=function(){return(Mc=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},Cm=s._register_tensor=function(){return(Cm=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},We=s._dispose_data=function(){return(We=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},wd=s._dispose=function(){return(wd=s._dispose=s.asm.dispose).apply(null,arguments)},Nm=s._Abs=function(){return(Nm=s._Abs=s.asm.Abs).apply(null,arguments)},Fc=s._Acos=function(){return(Fc=s._Acos=s.asm.Acos).apply(null,arguments)},_l=s._Acosh=function(){return(_l=s._Acosh=s.asm.Acosh).apply(null,arguments)},Rm=s._Add=function(){return(Rm=s._Add=s.asm.Add).apply(null,arguments)},Em=s._AddN=function(){return(Em=s._AddN=s.asm.AddN).apply(null,arguments)},Mm=s._All=function(){return(Mm=s._All=s.asm.All).apply(null,arguments)},Fm=s._Any=function(){return(Fm=s._Any=s.asm.Any).apply(null,arguments)},$m=s._ArgMax=function(){return($m=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},$c=s._ArgMin=function(){return($c=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Dc=s._Asin=function(){return(Dc=s._Asin=s.asm.Asin).apply(null,arguments)},Dm=s._Asinh=function(){return(Dm=s._Asinh=s.asm.Asinh).apply(null,arguments)},Pm=s._Atan=function(){return(Pm=s._Atan=s.asm.Atan).apply(null,arguments)},_m=s._Atan2=function(){return(_m=s._Atan2=s.asm.Atan2).apply(null,arguments)},kd=s._Atanh=function(){return(kd=s._Atanh=s.asm.Atanh).apply(null,arguments)},Om=s._AvgPool=function(){return(Om=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},zm=s._AvgPool3D=function(){return(zm=s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},Lm=s._AvgPool3DGrad=function(){return(Lm=s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},oi=s._AvgPoolGrad=function(){return(oi=s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},Wm=s._BatchMatMul=function(){return(Wm=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Bm=s._Bincount=function(){return(Bm=s._Bincount=s.asm.Bincount).apply(null,arguments)},Pc=s._BitwiseAnd=function(){return(Pc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Vm=s._Ceil=function(){return(Vm=s._Ceil=s.asm.Ceil).apply(null,arguments)},Id=s._ClipByValue=function(){return(Id=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Um=s._Conv2D=function(){return(Um=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Gm=s._Conv2DBackpropInput=function(){return(Gm=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Hm=s._Conv3D=function(){return(Hm=s._Conv3D=s.asm.Conv3D).apply(null,arguments)},Ur=s._Conv3DBackpropFilterV2=function(){return(Ur=s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Sd=s._Conv3DBackpropInputV2=function(){return(Sd=s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},jm=s._Cos=function(){return(jm=s._Cos=s.asm.Cos).apply(null,arguments)},qm=s._Cosh=function(){return(qm=s._Cosh=s.asm.Cosh).apply(null,arguments)},Xm=s._CropAndResize=function(){return(Xm=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Km=s._Cumprod=function(){return(Km=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},_c=s._Cumsum=function(){return(_c=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Oc=s._DenseBincount=function(){return(Oc=s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},Ym=s._DepthToSpace=function(){return(Ym=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Zm=s._DepthwiseConv2dNative=function(){return(Zm=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},zc=s._Diag=function(){return(zc=s._Diag=s.asm.Diag).apply(null,arguments)},Lc=s._Dilation2D=function(){return(Lc=s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},Jm=s._Dilation2DBackpropFilter=function(){return(Jm=s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},Qm=s._Dilation2DBackpropInput=function(){return(Qm=s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},ef=s._Elu=function(){return(ef=s._Elu=s.asm.Elu).apply(null,arguments)},tf=s._EluGrad=function(){return(tf=s._EluGrad=s.asm.EluGrad).apply(null,arguments)},Wc=s._Equal=function(){return(Wc=s._Equal=s.asm.Equal).apply(null,arguments)},qx=s._Erf=function(){return(qx=s._Erf=s.asm.Erf).apply(null,arguments)},af=s._Exp=function(){return(af=s._Exp=s.asm.Exp).apply(null,arguments)},nf=s._Expm1=function(){return(nf=s._Expm1=s.asm.Expm1).apply(null,arguments)},rf=s._FlipLeftRight=function(){return(rf=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},sf=s._Floor=function(){return(sf=s._Floor=s.asm.Floor).apply(null,arguments)},of=s._FloorDiv=function(){return(of=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},lf=s._FusedBatchNorm=function(){return(lf=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},uf=s._FusedConv2D=function(){return(uf=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},df=s._FusedDepthwiseConv2D=function(){return(df=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},pf=s._Gather=function(){return(pf=s._Gather=s.asm.Gather).apply(null,arguments)},cf=s._GatherNd=function(){return(cf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},hf=s._Greater=function(){return(hf=s._Greater=s.asm.Greater).apply(null,arguments)},mf=s._GreaterEqual=function(){return(mf=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},ff=s._IsFinite=function(){return(ff=s._IsFinite=s.asm.IsFinite).apply(null,arguments)},gf=s._IsInf=function(){return(gf=s._IsInf=s.asm.IsInf).apply(null,arguments)},yf=s._IsNan=function(){return(yf=s._IsNan=s.asm.IsNan).apply(null,arguments)},xf=s._LRN=function(){return(xf=s._LRN=s.asm.LRN).apply(null,arguments)},Af=s._LRNGrad=function(){return(Af=s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},bf=s._LeakyRelu=function(){return(bf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},vf=s._Less=function(){return(vf=s._Less=s.asm.Less).apply(null,arguments)},wf=s._LessEqual=function(){return(wf=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},kf=s._LinSpace=function(){return(kf=s._LinSpace=s.asm.LinSpace).apply(null,arguments)},If=s._Log=function(){return(If=s._Log=s.asm.Log).apply(null,arguments)},Sf=s._Log1p=function(){return(Sf=s._Log1p=s.asm.Log1p).apply(null,arguments)},Tf=s._LogicalAnd=function(){return(Tf=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},Cf=s._LogicalNot=function(){return(Cf=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},Nf=s._LogicalOr=function(){return(Nf=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},Rf=s._LogicalXor=function(){return(Rf=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},Ef=s._Max=function(){return(Ef=s._Max=s.asm.Max).apply(null,arguments)},Mf=s._MaxPool=function(){return(Mf=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Ff=s._MaxPool3D=function(){return(Ff=s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},$f=s._MaxPool3DGrad=function(){return($f=s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},Df=s._MaxPoolGrad=function(){return(Df=s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},Pf=s._MaxPoolWithArgmax=function(){return(Pf=s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},_f=s._Maximum=function(){return(_f=s._Maximum=s.asm.Maximum).apply(null,arguments)},Of=s._Mean=function(){return(Of=s._Mean=s.asm.Mean).apply(null,arguments)},zf=s._Min=function(){return(zf=s._Min=s.asm.Min).apply(null,arguments)},Lf=s._Minimum=function(){return(Lf=s._Minimum=s.asm.Minimum).apply(null,arguments)},Wf=s._MirrorPad=function(){return(Wf=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Bf=s._Mod=function(){return(Bf=s._Mod=s.asm.Mod).apply(null,arguments)},Vf=s._Multinomial=function(){return(Vf=s._Multinomial=s.asm.Multinomial).apply(null,arguments)},Uf=s._Multiply=function(){return(Uf=s._Multiply=s.asm.Multiply).apply(null,arguments)},Gf=s._Neg=function(){return(Gf=s._Neg=s.asm.Neg).apply(null,arguments)},Hf=s._NonMaxSuppressionV3=function(){return(Hf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},jf=s._NonMaxSuppressionV4=function(){return(jf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},qf=s._NonMaxSuppressionV5=function(){return(qf=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Xf=s._NotEqual=function(){return(Xf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Kf=s._OneHot=function(){return(Kf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Yf=s._PadV2=function(){return(Yf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Zf=s._Pow=function(){return(Zf=s._Pow=s.asm.Pow).apply(null,arguments)},Jf=s._Prelu=function(){return(Jf=s._Prelu=s.asm.Prelu).apply(null,arguments)},Qf=s._Prod=function(){return(Qf=s._Prod=s.asm.Prod).apply(null,arguments)},e2=s._RealDiv=function(){return(e2=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},t2=s._Reciprocal=function(){return(t2=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},a2=s._Relu=function(){return(a2=s._Relu=s.asm.Relu).apply(null,arguments)},n2=s._Relu6=function(){return(n2=s._Relu6=s.asm.Relu6).apply(null,arguments)},r2=s._ResizeBilinear=function(){return(r2=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},s2=s._ResizeBilinearGrad=function(){return(s2=s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},i2=s._ResizeNearestNeighbor=function(){return(i2=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},o2=s._ResizeNearestNeighborGrad=function(){return(o2=s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},l2=s._Reverse=function(){return(l2=s._Reverse=s.asm.Reverse).apply(null,arguments)},u2=s._RotateWithOffset=function(){return(u2=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},d2=s._Round=function(){return(d2=s._Round=s.asm.Round).apply(null,arguments)},p2=s._Rsqrt=function(){return(p2=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},c2=s._ScatterNd=function(){return(c2=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},h2=s._SearchSorted=function(){return(h2=s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},m2=s._SelectV2=function(){return(m2=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},f2=s._Selu=function(){return(f2=s._Selu=s.asm.Selu).apply(null,arguments)},g2=s._Sigmoid=function(){return(g2=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},y2=s._Sign=function(){return(y2=s._Sign=s.asm.Sign).apply(null,arguments)},x2=s._Sin=function(){return(x2=s._Sin=s.asm.Sin).apply(null,arguments)},A2=s._Sinh=function(){return(A2=s._Sinh=s.asm.Sinh).apply(null,arguments)},b2=s._Softmax=function(){return(b2=s._Softmax=s.asm.Softmax).apply(null,arguments)},v2=s._Softplus=function(){return(v2=s._Softplus=s.asm.Softplus).apply(null,arguments)},w2=s._SparseFillEmptyRows=function(){return(w2=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},k2=s._SparseReshape=function(){return(k2=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},I2=s._SparseSegmentReduction=function(){return(I2=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},S2=s._SparseToDense=function(){return(S2=s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},T2=s._Sqrt=function(){return(T2=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},C2=s._Square=function(){return(C2=s._Square=s.asm.Square).apply(null,arguments)},N2=s._SquaredDifference=function(){return(N2=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},R2=s._Step=function(){return(R2=s._Step=s.asm.Step).apply(null,arguments)},E2=s._StridedSlice=function(){return(E2=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},M2=s._Sub=function(){return(M2=s._Sub=s.asm.Sub).apply(null,arguments)},F2=s._Sum=function(){return(F2=s._Sum=s.asm.Sum).apply(null,arguments)},$2=s._Tan=function(){return($2=s._Tan=s.asm.Tan).apply(null,arguments)},D2=s._Tanh=function(){return(D2=s._Tanh=s.asm.Tanh).apply(null,arguments)},P2=s._TensorScatterUpdate=function(){return(P2=s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},_2=s._Tile=function(){return(_2=s._Tile=s.asm.Tile).apply(null,arguments)},O2=s._TopK=function(){return(O2=s._TopK=s.asm.TopK).apply(null,arguments)},z2=s._Transform=function(){return(z2=s._Transform=s.asm.Transform).apply(null,arguments)},L2=s._Transpose=function(){return(L2=s._Transpose=s.asm.Transpose).apply(null,arguments)},W2=s.__FusedMatMul=function(){return(W2=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},B2=s._malloc=function(){return(B2=s._malloc=s.asm.malloc).apply(null,arguments)},V2=s._free=function(){return(V2=s._free=s.asm.free).apply(null,arguments)},U2=s.___errno_location=function(){return(U2=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Bc=s.stackSave=function(){return(Bc=s.stackSave=s.asm.stackSave).apply(null,arguments)},Vc=s.stackRestore=function(){return(Vc=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},Td=s.stackAlloc=function(){return(Td=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},G2=s.dynCall_iijjiiii=function(){return(G2=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},H2=s.dynCall_jiji=function(){return(H2=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Im;var Ol;qa=function Y(){Ol||Uc(),Ol||(qa=Y)};function Uc(Y){if(Y=Y||d,ht>0||(Lt(),ht>0))return;function se(){Ol||(Ol=!0,s.calledRun=!0,!W&&(pn(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),ua()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),se()},1)):se()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Uc();var zl;l&&(zl={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!l.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!l.unhandledRejection.indexOf(Y)>-1})});var Ll;if(typeof r!="undefined")Ll=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Ll=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(zl){var j2=Ll._dispose;Ll._dispose=function(){j2(),zl.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),zl.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModule=a)}),hp=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}},du=class{refCount(e){return Ka("refCount")}incRef(e){return Ka("incRef")}timerAvailable(){return!0}time(e){return Ka("time")}read(e){return Ka("read")}readSync(e){return Ka("readSync")}readToGPU(e,t){return Ka("readToGPU")}numDataIds(){return Ka("numDataIds")}disposeData(e,t){return Ka("disposeData")}write(e,t,a){return Ka("write")}move(e,t,a,n,r){return Ka("move")}createTensorFromGPUData(e,t,a){return Ka("createTensorFromGPUData")}memory(){return Ka("memory")}floatPrecision(){return Ka("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Ka("dispose")}};function Ka(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 $A(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,fh(e,t,a)}function qC(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let a=e.length,n=0;for(;a>0;)n=Math.random()*a|0,a--,fh(e,a,n),fh(t,a,n)}function Hd(e,t,a){return Math.max(e,Math.min(t,a))}function XC(e){return e%2===0?e:e+1}function fh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function KC(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function Fi(e){P(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function mt(e){if(e.length===0)return 1;let t=e[0];for(let a=1;a0,a,n){return new Promise((r,s)=>{let i=0,o=()=>{if(e()){r();return}i++;let l=t(i);if(a!=null&&i>=a){s();return}n!=null?n(o,l):setTimeout(o,l)};o()})}function nN(e,t){let a=1,n=-1;for(let s=0;s=0)a*=e[s];else if(e[s]===-1){if(n!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${n} and dim ${s}`);n=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==a)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(a===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%a!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${a}`);let r=e.slice();return r[n]=t/a,r}function mp(e,t){let a=t.length;return e=e==null?t.map((n,r)=>r):[].concat(e),P(e.every(n=>n>=-a&&n`All values in axis param must be in range [-${a}, ${a}) but got axis ${e}`),P(e.every(n=>Zl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function PA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:mp(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(a.push(e[o]),n.push(o)),s[i]<=o&&i++}e[o]!==1&&(a.push(e[o]),n.push(o))}return{newShape:a,keptDims:n}}function _A(e,t){return ig(e,t)}function ig(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else if(e==="string")a=new Array(t);else throw new Error(`Unknown data type ${e}`);return a}function OA(e,t){for(let a=0;at+=a.length),t}function Xr(e){return typeof e=="string"||e instanceof String}function WA(e){return typeof e=="boolean"}function BA(e){return typeof e=="number"}function fp(e){return Array.isArray(e)?fp(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":BA(e)?"float32":Xr(e)?"string":WA(e)?"bool":"float32"}function es(e){return!!(e&&e.constructor&&e.call&&e.apply)}function yh(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function VA(e,t,a,n=!1){let r=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;il*u)*(n?2:1);for(let l=0;lr*s)*(a?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${a?" for a complex tensor":""}.`);return VA(0,e,t,a)}function sN(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function og(e,t){let a=Oh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return ql(e,new Float32Array(a));if(t==="int32")return ql(e,new Int32Array(a));if(t==="bool")return ql(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function nn(e){e.forEach(t=>{P(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function oN(e,t,a){if(t===0)return 0;if(t===1)return e[0];let n=e[e.length-1];for(let r=0;r{let[a,n]=t.split(":");this.urlFlags[a]=pN(a,n)})}};function uN(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(dN(t,n[0],n[1]),n.join("="))),t}function dN(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function pN(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function B(){return lg}var lg=null;function cN(e){lg=e}var Z2;function GA(){if(Z2==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");Z2=e}return Z2}function hN(){let e=GA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function ug(e,t){let a=hN();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var cu="Abs",$i="Acos",Di="Acosh",Mr="Add",Pi="AddN",_i="All",Oi="Any",hu="ArgMax",mu="ArgMin",zi="Asin",Li="Asinh",Wi="Atan",Bi="Atanh",Vi="Atan2",Ui="AvgPool",gp="AvgPoolGrad",fu="AvgPool3D",yp="AvgPool3DGrad",Gi="BatchMatMul",gu="BatchToSpaceND",Hi="Bincount",ji="BitwiseAnd",mN="BroadcastTo",yu="BroadcastArgs",qi="Cast",cs="Ceil",hs="ClipByValue",xp="Complex",Ap="ComplexAbs",xu="Concat",Xi="Conv2D",bp="Conv2DBackpropFilter",Ki="Conv2DBackpropInput",Yi="Conv3D",Au="Conv3DBackpropFilterV2",Zi="Conv3DBackpropInputV2",Ji="Cos",Qi="Cosh",eo="Cumprod",to="Cumsum",ao="CropAndResize",bu="DenseBincount",no="DepthToSpace",ro="DepthwiseConv2dNative",vp="DepthwiseConv2dNativeBackpropFilter",wp="DepthwiseConv2dNativeBackpropInput",vu="Diag",so="Dilation2D",Jl="Dilation2DBackpropInput",Ql="Dilation2DBackpropFilter",kp="Draw",io="RealDiv",Ip="Einsum",oo="Elu",wu="EluGrad",lo="Erf",ms="Equal",fs="Exp",ku="ExpandDims",gs="Expm1",Sp="FFT",Iu="Fill",uo="FlipLeftRight",ys="Floor",xs="FloorDiv",po="FusedBatchNorm",Su="GatherV2",co="GatherNd",As="Greater",bs="GreaterEqual",ho="Identity",Tp="IFFT",Cp="Imag",mo="IsFinite",fo="IsInf",go="IsNan",yo="LeakyRelu",vs="Less",ws="LessEqual",xo="LinSpace",ks="Log",Ao="Log1p",bo="LogicalAnd",vo="LogicalNot",wo="LogicalOr",HA="LogicalXor",fN="LogSoftmax",gN="LowerBound",ko="LRN",Tu="LRNGrad",yN="MatrixBandPart",Io="Max",Is="Maximum",So="MaxPool",Np="MaxPoolGrad",Cu="MaxPool3D",Rp="MaxPool3DGrad",Nu="MaxPoolWithArgmax",To="Mean",Co="Min",Ss="Minimum",No="MirrorPad",Ro="Mod",Eo="Multinomial",Ts="Multiply",Ru="Neg",Cs="NotEqual",Mo="NonMaxSuppressionV3",Eu="NonMaxSuppressionV4",Fo="NonMaxSuppressionV5",Mu="OnesLike",$o="OneHot",Fu="Pack",Do="PadV2",xN="Pool",Po="Pow",_o="Prelu",Oo="Prod",Lh="RaggedGather",Wh="RaggedRange",Bh="RaggedTensorToTensor",$u="Range",Ep="Real",zo="Reciprocal",Lo="Relu",Du="Reshape",Wo="ResizeNearestNeighbor",Pu="ResizeNearestNeighborGrad",Bo="ResizeBilinear",_u="ResizeBilinearGrad",Vo="Relu6",Uo="Reverse",Go="Round",Ns="Rsqrt",Ho="ScatterNd",jo="TensorScatterUpdate",qo="SearchSorted",Ou="Select",Xo="Selu",zu="Slice",Ko="Sin",Yo="Sinh",Zo="Sign",Rs="Sigmoid",Jo="Softplus",Es="Sqrt",Qo="Sum",Lu="SpaceToBatchND",Wu="SplitV",el="Softmax",Mp="SparseFillEmptyRows",Bu="SparseReshape",Vu="SparseSegmentMean",Uu="SparseSegmentSum",tl="SparseToDense",Ms="SquaredDifference",Fp="Square",Gu="StaticRegexReplace",al="StridedSlice",Hu="StringNGrams",$p="StringSplit",Dp="StringToHashBucketFast",Fs="Sub",nl="Tan",rl="Tanh",$s="Tile",sl="TopK",il="Transform",Tr="Transpose",Pp="Unique",ju="Unpack",_p="UnsortedSegmentSum",AN="UpperBound",qu="ZerosLike",Ds="Step",jd="FromPixels",ol="RotateWithOffset",ts="_FusedMatMul",as="FusedConv2D",ns="FusedDepthwiseConv2D";function qr(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.warn(...e)}function bN(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.log(...e)}var eu=ug("kernelRegistry",()=>new Map),qd=ug("gradRegistry",()=>new Map);function Xd(e,t){let a=dg(e,t);return eu.get(a)}function o1(e){return qd.get(e)}function tr(e){let t=eu.entries(),a=[];for(;;){let{done:n,value:r}=t.next();if(n)break;let[s,i]=r,[o]=s.split("_");o===e&&a.push(i)}return a}function bn(e){let{kernelName:t,backendName:a}=e,n=dg(t,a);eu.has(n)&&qr(`The kernel '${t}' for backend '${a}' is already registered`),eu.set(n,e)}function vN(e){let{kernelName:t}=e;qd.has(t)&&B().getBool("DEBUG")&&qr(`Overriding the gradient for '${t}'`),qd.set(t,e)}function wN(e,t){let a=dg(e,t);if(!eu.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);eu.delete(a)}function kN(e){if(!qd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);qd.delete(e)}function IN(e,t){tr(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});bn(n)})}function dg(e,t){return`${t}_${e}`}var v={};Ke(v,{arraysEqual:()=>Er,arraysEqualWithNull:()=>DA,assert:()=>P,assertNonNegativeIntegerDimensions:()=>nn,assertNonNull:()=>Fi,assertShapesMatch:()=>Ca,bytesFromStringArray:()=>LA,bytesPerElement:()=>gh,checkConversionForErrors:()=>OA,clamp:()=>Hd,computeStrides:()=>pu,convertBackendValuesAndArrayBuffer:()=>sN,createScalarValue:()=>EN,createShuffledIndices:()=>tN,decodeString:()=>xh,distSquared:()=>ZC,encodeString:()=>zp,fetch:()=>FN,fingerPrint64:()=>RN,flatten:()=>rs,getArrayFromDType:()=>ig,getTypedArrayFromDType:()=>_A,hasEncodingLoss:()=>rN,hexToLong:()=>Op,indexToLoc:()=>lN,inferDtype:()=>fp,inferFromImplicitShape:()=>nN,isBoolean:()=>WA,isFunction:()=>es,isInt:()=>Zl,isNumber:()=>BA,isPromise:()=>zh,isScalarShape:()=>JC,isString:()=>Xr,isTypedArray:()=>Jt,isValidDtype:()=>zA,locToIndex:()=>oN,makeOnesTypedArray:()=>og,makeZerosNestedTypedArray:()=>iN,makeZerosTypedArray:()=>Oh,nearestDivisor:()=>yh,nearestLargerEven:()=>XC,now:()=>Kd,parseAxisParam:()=>mp,randUniform:()=>YC,repeatedTry:()=>aN,rightPad:()=>Bd,shuffle:()=>$A,shuffleCombo:()=>qC,sizeFromShape:()=>mt,sizeToSquarishShape:()=>eN,squeezeShape:()=>PA,sum:()=>KC,swap:()=>fh,tanh:()=>QC,toNestedArray:()=>ql,toTypedArray:()=>Vh});function jA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var r5=uu(EC()),ci=r5.default||r5;function Op(e){return ci.fromString(e,!0,16)}var qA=Op("c3a5c85c97cb3127"),di=Op("b492b66fbe98f273"),va=Op("9ae16a3b2f90404f");function l1(e){return e.xor(e.shru(47))}function XA(e,t,a){let n=e.slice(t,t+a);return ci.fromBytes(Array.from(n),!0,!0)}function At(e,t){return XA(e,t,8)}function s5(e,t){return XA(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function Jr(e,t,a=Op("9ddfea08eb382d69")){let n=e.xor(t).mul(a);n=n.xor(n.shru(47));let r=t.xor(n).mul(a);return r=r.xor(r.shru(47)),r=r.mul(a),r}function SN(e,t,a,n,r,s){r=r.add(e),s=Zt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Zt(r,44)),[r.add(n),s.add(i)]}function Qc(e,t,a,n){return SN(At(e,t),At(e,t+8),At(e,t+16),At(e,t+24),a,n)}function TN(e,t=e.length){if(t>=8){let a=va.add(t*2),n=At(e,0).add(va),r=At(e,t-8),s=Zt(r,37).mul(a).add(n),i=Zt(n,25).add(r).mul(a);return Jr(s,i,a)}if(t>=4){let a=va.add(t*2),n=s5(e,0);return Jr(n.shl(3).add(t),s5(e,t-4),a)}if(t>0){let a=e[0],n=e[t>>1],r=e[t-1],s=a+(n<<8),i=t+(r<<2);return l1(va.mul(s).xor(qA.mul(i))).mul(va)}return va}function CN(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(di),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va);return Jr(Zt(n.add(r),43).add(Zt(s,30)).add(i),n.add(Zt(r.add(va),18)).add(s),a)}function NN(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(va),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va),o=Zt(n.add(r),43).add(Zt(s,30)).add(i),l=Jr(o,n.add(Zt(r.add(va),18)).add(s),a),u=At(e,16).mul(a),d=At(e,24),c=o.add(At(e,t-32)).mul(a),p=l.add(At(e,t-24)).mul(a);return Jr(Zt(u.add(d),43).add(Zt(c,30)).add(p),u.add(Zt(d.add(n),18)).add(c),a)}function RN(e,t=e.length){let a=ci.fromNumber(81,!0);if(t<=32)return t<=16?TN(e,t):CN(e,t);if(t<=64)return NN(e,t);let n=a,r=a.mul(di).add(113),s=l1(r.mul(va).add(113)).mul(va),i=[ci.UZERO,ci.UZERO],o=[ci.UZERO,ci.UZERO];n=n.mul(va).add(At(e,0));let l=0,u=(t-1>>6)*64,d=u+(t-1&63)-63;do n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(di),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(di),n=n.xor(o[1]),r=r.add(i[0]).add(At(e,l+40)),s=Zt(s.add(o[0]),33).mul(di),i=Qc(e,l,i[1].mul(di),n.add(o[0])),o=Qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=di.add(s.and(255).shl(1));return l=d,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(c),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(At(e,l+40))),s=Zt(s.add(o[0]),33).mul(c),i=Qc(e,l,i[1].mul(c),n.add(o[0])),o=Qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],Jr(Jr(i[0],o[0],c).add(l1(r).mul(qA)).add(s),Jr(i[1],o[1],c).add(n),c)}function EN(e,t){return t==="string"?zp(e):Vh([e],t)}function MN(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Vh(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=rs(e)),B().getBool("DEBUG")&&OA(e,t),MN(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 a=new Uint8Array(e.length);for(let n=0;n{n=a()},s,i=Kd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Kd()-i})}if(B().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{DN(u,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:a,timeMs:n,inputs:r,extraInfo:s}=e;a.forEach(i=>{Promise.all([i.data(),n,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function DN(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${d} %c${u} %c${c} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function _N(e,t,a){let n={},r={};for(let l=0;ln[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[a.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],d=u.inputs;for(let c=0;c=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):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 u=a(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let d=s.inputs[l];if(!Er(u.shape,d.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${d.shape}'`);if(e[d.id]==null)e[d.id]=u;else{let c=e[d.id];e[d.id]=n(c,u),c.dispose()}}}}var i5=20,Nd=3,J2=7;function zN(e,t,a,n){let r=pu(t),s=LN(e,t,a,r),i=t.length,o=ih(e,t,a,r,s),l=["Tensor"];return n&&(l.push(` dtype: ${a}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` +"use strict";var Human=(()=>{var jc=Object.defineProperty;var EC=Object.getOwnPropertyDescriptor;var MC=Object.getOwnPropertyNames;var $C=Object.prototype.hasOwnProperty;var PC=(e,t,a)=>t in e?jc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var yr=(e,t)=>{for(var a in t)jc(e,a,{get:t[a],enumerable:!0})},_C=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of MC(t))!$C.call(e,r)&&r!==a&&jc(e,r,{get:()=>t[r],enumerable:!(n=EC(t,r))||n.enumerable});return e};var FC=e=>_C(jc({},"__esModule",{value:!0}),e);var he=(e,t,a)=>(PC(e,typeof t!="symbol"?t+"":t,a),a),Gx=(e,t,a)=>{if(!t.has(e))throw TypeError("Cannot "+a)};var qa=(e,t,a)=>(Gx(e,t,"read from private field"),a?a.call(e):t.get(e)),qn=(e,t,a)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,a)},xr=(e,t,a,n)=>(Gx(e,t,"write to private field"),n?n.call(e,a):t.set(e,a),a);var lye={};yr(lye,{Env:()=>nc,Human:()=>Mx,default:()=>Mx,defaults:()=>dl,draw:()=>C0,empty:()=>pr,env:()=>ne,match:()=>em,models:()=>Ex});var Ke={};yr(Ke,{Abs:()=>iu,Acos:()=>oi,Acosh:()=>li,AdadeltaOptimizer:()=>Zg,AdagradOptimizer:()=>Jg,AdamOptimizer:()=>Qg,AdamaxOptimizer:()=>e3,Add:()=>os,AddN:()=>ui,All:()=>di,Any:()=>pi,ArgMax:()=>ou,ArgMin:()=>lu,Asin:()=>ci,Asinh:()=>hi,Atan:()=>mi,Atan2:()=>gi,Atanh:()=>fi,AvgPool:()=>yi,AvgPool3D:()=>uu,AvgPool3DGrad:()=>dp,AvgPoolGrad:()=>up,BackendWasm:()=>kk,BatchMatMul:()=>xi,BatchToSpaceND:()=>du,Bincount:()=>Ai,BitwiseAnd:()=>pu,BroadcastArgs:()=>cu,BroadcastTo:()=>CT,Cast:()=>bi,Ceil:()=>vi,ClipByValue:()=>ls,Complex:()=>pp,ComplexAbs:()=>cp,Concat:()=>hu,Conv2D:()=>wi,Conv2DBackpropFilter:()=>hp,Conv2DBackpropInput:()=>ki,Conv3D:()=>Ii,Conv3DBackpropFilterV2:()=>mu,Conv3DBackpropInputV2:()=>Si,Cos:()=>Ci,Cosh:()=>Ti,CropAndResize:()=>Ei,Cumprod:()=>Ni,Cumsum:()=>Ri,DataStorage:()=>ip,DenseBincount:()=>fu,DepthToSpace:()=>Mi,DepthwiseConv2dNative:()=>$i,DepthwiseConv2dNativeBackpropFilter:()=>mp,DepthwiseConv2dNativeBackpropInput:()=>fp,Diag:()=>gu,Dilation2D:()=>Pi,Dilation2DBackpropFilter:()=>ql,Dilation2DBackpropInput:()=>jl,Draw:()=>gp,ENV:()=>eg,Einsum:()=>yp,Elu:()=>Fi,EluGrad:()=>yu,Environment:()=>CA,Equal:()=>Oi,Erf:()=>Di,Exp:()=>zi,ExpandDims:()=>xu,Expm1:()=>Li,FFT:()=>xp,Fill:()=>Au,FlipLeftRight:()=>Wi,Floor:()=>Bi,FloorDiv:()=>Vi,FromPixels:()=>Ld,FusedBatchNorm:()=>Ui,FusedConv2D:()=>Zr,FusedDepthwiseConv2D:()=>Jr,GPGPUContext:()=>Gl,GatherNd:()=>Gi,GatherV2:()=>bu,GraphModel:()=>Xp,Greater:()=>Hi,GreaterEqual:()=>ji,IFFT:()=>Ap,Identity:()=>qi,Imag:()=>bp,IsFinite:()=>Xi,IsInf:()=>Ki,IsNan:()=>Yi,KernelBackend:()=>ru,LRN:()=>io,LRNGrad:()=>vu,LeakyRelu:()=>Zi,Less:()=>Ji,LessEqual:()=>Qi,LinSpace:()=>eo,Log:()=>to,Log1p:()=>ao,LogSoftmax:()=>TT,LogicalAnd:()=>no,LogicalNot:()=>ro,LogicalOr:()=>so,LogicalXor:()=>NA,LowerBound:()=>NT,MathBackendCPU:()=>p3,MathBackendWebGL:()=>Jp,MatrixBandPart:()=>RT,Max:()=>oo,MaxPool:()=>uo,MaxPool3D:()=>wu,MaxPool3DGrad:()=>wp,MaxPoolGrad:()=>vp,MaxPoolWithArgmax:()=>ku,Maximum:()=>lo,Mean:()=>po,Min:()=>co,Minimum:()=>ho,MirrorPad:()=>mo,Mod:()=>fo,MomentumOptimizer:()=>t3,Multinomial:()=>go,Multiply:()=>yo,Neg:()=>Iu,NonMaxSuppressionV3:()=>Ao,NonMaxSuppressionV4:()=>Su,NonMaxSuppressionV5:()=>bo,NotEqual:()=>xo,OP_SCOPE_SUFFIX:()=>sg,OneHot:()=>vo,OnesLike:()=>Cu,Optimizer:()=>cs,OptimizerConstructors:()=>V7,Pack:()=>Tu,PadV2:()=>wo,Pool:()=>ET,Pow:()=>ko,Prelu:()=>Io,Prod:()=>So,RMSPropOptimizer:()=>a3,RaggedGather:()=>$h,RaggedRange:()=>Ph,RaggedTensorToTensor:()=>_h,Range:()=>Nu,Rank:()=>n1,Real:()=>kp,RealDiv:()=>_i,Reciprocal:()=>Co,Reduction:()=>wa,Relu:()=>To,Relu6:()=>Eo,Reshape:()=>Ru,ResizeBilinear:()=>Ro,ResizeBilinearGrad:()=>Mu,ResizeNearestNeighbor:()=>No,ResizeNearestNeighborGrad:()=>Eu,Reverse:()=>Mo,RotateWithOffset:()=>el,Round:()=>$o,Rsqrt:()=>Po,SGDOptimizer:()=>Qh,ScatterNd:()=>_o,SearchSorted:()=>Do,Select:()=>$u,Selu:()=>Oo,Sigmoid:()=>Bo,Sign:()=>Wo,Sin:()=>zo,Sinh:()=>Lo,Slice:()=>Pu,Softmax:()=>Ho,Softplus:()=>Vo,SpaceToBatchND:()=>_u,SparseFillEmptyRows:()=>Ip,SparseReshape:()=>Du,SparseSegmentMean:()=>Ou,SparseSegmentSum:()=>zu,SparseToDense:()=>jo,SplitV:()=>Fu,Sqrt:()=>Uo,Square:()=>Sp,SquaredDifference:()=>qo,StaticRegexReplace:()=>Cp,Step:()=>ds,StridedSlice:()=>Xo,StringNGrams:()=>Lu,StringSplit:()=>Tp,StringToHashBucketFast:()=>Np,Sub:()=>Ko,Sum:()=>Go,Tan:()=>Yo,Tanh:()=>Zo,Tensor:()=>yt,TensorBuffer:()=>Vt,TensorScatterUpdate:()=>Fo,Tile:()=>us,TopK:()=>Jo,Transform:()=>Qo,Transpose:()=>wr,Unique:()=>Rp,Unpack:()=>Wu,UnsortedSegmentSum:()=>Ep,UpperBound:()=>MT,Variable:()=>Ud,WebGPUBackend:()=>X3,ZerosLike:()=>Bu,_FusedMatMul:()=>Yr,abs:()=>Za,acos:()=>tb,acosh:()=>ab,add:()=>we,addN:()=>Dh,all:()=>nb,any:()=>rb,argMax:()=>rr,argMin:()=>sb,asin:()=>ib,asinh:()=>ob,atan:()=>lb,atan2:()=>ub,atanh:()=>db,avgPool:()=>hg,avgPool3d:()=>mb,backend:()=>Bn,backend_util:()=>C,basicLSTMCell:()=>fb,batchNorm:()=>Wp,batchNorm2d:()=>gb,batchNorm3d:()=>yb,batchNorm4d:()=>xb,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>Ab,booleanMaskAsync:()=>n7,broadcastArgs:()=>bb,broadcastTo:()=>Ul,broadcast_util:()=>al,browser:()=>Er,buffer:()=>_e,cast:()=>Ue,ceil:()=>vb,clipByValue:()=>wb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>kb,concat2d:()=>Vu,concat3d:()=>Ib,concat4d:()=>Sb,conv1d:()=>Cb,conv2d:()=>Bp,conv2dTranspose:()=>Nb,conv3d:()=>Rb,conv3dTranspose:()=>Eb,copyRegisteredKernels:()=>DT,cos:()=>Mb,cosh:()=>$b,cosineWindow:()=>Xh,cumprod:()=>Pb,cumsum:()=>_b,customGrad:()=>tr,denseBincount:()=>Fb,deprecationWarn:()=>og,depthToSpace:()=>Db,depthwiseConv2d:()=>Oh,deregisterOp:()=>zD,device_util:()=>_p,diag:()=>Ob,dilation2d:()=>zb,disableDeprecationWarnings:()=>hN,dispose:()=>J,disposeVariables:()=>mN,div:()=>ve,divNoNan:()=>Wb,dot:()=>Bb,dropout:()=>l7,einsum:()=>Vs,elu:()=>xg,enableDebugMode:()=>cN,enableProdMode:()=>ig,enclosingPowerOfTwo:()=>Xg,engine:()=>It,ensureShape:()=>Vb,env:()=>B,equal:()=>yg,erf:()=>Ub,euclideanNorm:()=>jb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>qb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,findBackend:()=>lg,findBackendFactory:()=>AN,floor:()=>vg,floorDiv:()=>zp,forceHalfFloat:()=>y8,fused:()=>Kg,gather:()=>wg,gatherND:()=>o7,gather_util:()=>s3,getBackend:()=>Qt,getGradient:()=>t1,getKernel:()=>Bd,getKernelsForBackend:()=>Jn,getThreadsCount:()=>ule,gpgpu_util:()=>Xv,grad:()=>tM,grads:()=>aM,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>u7,io:()=>Kn,irfft:()=>Vg,isFinite:()=>Xb,isInf:()=>Kb,isNaN:()=>Yb,keep:()=>zn,kernel_impls:()=>Rn,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>y7,linspace:()=>Zb,loadGraphModel:()=>d3,loadGraphModelSync:()=>GO,localResponseNormalization:()=>Jb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>e4,logSoftmax:()=>t4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>a4,losses:()=>x7,lowerBound:()=>n4,matMul:()=>pt,math:()=>E7,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>r4,maxPoolWithArgmax:()=>s4,maximum:()=>Mg,mean:()=>Kd,memory:()=>fN,meshgrid:()=>i4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>o4,mod:()=>Uu,moments:()=>l4,movingAverage:()=>r7,mul:()=>te,multiRNNCell:()=>u4,multinomial:()=>d4,neg:()=>Ln,nextFrame:()=>U7,node:()=>Q3,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>p4,op:()=>z,outerProduct:()=>c4,pad:()=>ir,pad1d:()=>h4,pad2d:()=>m4,pad3d:()=>f4,pad4d:()=>g4,pool:()=>y4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>x4,profile:()=>gN,raggedGather:()=>A4,raggedRange:()=>b4,raggedTensorToTensor:()=>v4,rand:()=>w4,randomGamma:()=>C4,randomNormal:()=>Lg,randomStandardNormal:()=>T4,randomUniform:()=>Bh,randomUniformInt:()=>N4,range:()=>Zl,ready:()=>Dp,real:()=>Jl,reciprocal:()=>R4,registerBackend:()=>tl,registerGradient:()=>PT,registerKernel:()=>xn,registerOp:()=>OD,relu:()=>jp,relu6:()=>Wg,removeBackend:()=>xN,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>E4,reverse2d:()=>M4,reverse3d:()=>$4,reverse4d:()=>P4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>_4,scalar:()=>Ge,scatterND:()=>s7,scatter_util:()=>jh,searchSorted:()=>Wh,selu:()=>F4,separableConv2d:()=>D4,serialization:()=>v7,setBackend:()=>Fp,setPlatform:()=>bN,setThreadsCount:()=>lle,setWasmPath:()=>ole,setWasmPaths:()=>u0,setWebGLContext:()=>n0,setdiff1dAsync:()=>O4,shared:()=>t0,sigmoid:()=>za,sign:()=>z4,signal:()=>g7,sin:()=>L4,sinh:()=>W4,slice:()=>Fe,slice1d:()=>B4,slice2d:()=>V4,slice3d:()=>qp,slice4d:()=>Vh,slice_util:()=>Nt,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>A7,sparseToDense:()=>i7,spectral:()=>f7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>U4,string:()=>b7,sub:()=>xe,sum:()=>ot,sumOutType:()=>Pp,tan:()=>G4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>H4,tensor5d:()=>j4,tensor6d:()=>q4,tensorScatterUpdate:()=>K4,tensor_util:()=>_A,test_util:()=>k4,tidy:()=>De,tile:()=>Xr,time:()=>yN,topk:()=>Y4,train:()=>_F,transpose:()=>Qs,truncatedNormal:()=>Z4,unique:()=>J4,unregisterGradient:()=>FT,unregisterKernel:()=>_T,unsortedSegmentSum:()=>Q4,unstack:()=>Na,upcastType:()=>pa,upperBound:()=>e7,util:()=>v,valueAndGrad:()=>nM,valueAndGrads:()=>rM,variable:()=>t7,variableGrads:()=>Qb,version:()=>ac,version_converter:()=>jO,version_core:()=>i3,version_cpu:()=>iL,version_wasm:()=>dle,version_webgl:()=>Kj,webgl:()=>Yj,webgl_util:()=>xv,webgpu_util:()=>Ck,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var DC=Object.create,Z1=Object.defineProperty,OC=Object.getOwnPropertyDescriptor,zC=Object.getOwnPropertyNames,LC=Object.getPrototypeOf,WC=Object.prototype.hasOwnProperty,Xt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ze=(e,t)=>{for(var a in t)Z1(e,a,{get:t[a],enumerable:!0})},BC=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of zC(t))!WC.call(e,r)&&r!==a&&Z1(e,r,{get:()=>t[r],enumerable:!(n=OC(t,r))||n.enumerable});return e},nu=(e,t,a)=>(a=e!=null?DC(LC(e)):{},BC(t||!e||!e.__esModule?Z1(a,"default",{value:e,enumerable:!0}):a,e)),VC=Xt((e,t)=>{t.exports=n;var a=null;try{a=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(S){}function n(S,_,O){this.low=S|0,this.high=_|0,this.unsigned=!!O}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}n.isLong=r;var s={},i={};function o(S,_){var O,W,P;return _?(S>>>=0,(P=0<=S&&S<256)&&(W=i[S],W)?W:(O=u(S,(S|0)<0?-1:0,!0),P&&(i[S]=O),O)):(S|=0,(P=-128<=S&&S<128)&&(W=s[S],W)?W:(O=u(S,S<0?-1:0,!1),P&&(s[S]=O),O))}n.fromInt=o;function l(S,_){if(isNaN(S))return _?b:A;if(_){if(S<0)return b;if(S>=g)return M}else{if(S<=-y)return $;if(S+1>=y)return N}return S<0?l(-S,_).neg():u(S%f|0,S/f|0,_)}n.fromNumber=l;function u(S,_,O){return new n(S,_,O)}n.fromBits=u;var p=Math.pow;function c(S,_,O){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return A;if(typeof _=="number"?(O=_,_=!1):_=!!_,O=O||10,O<2||360)throw Error("interior hyphen");if(W===0)return c(S.substring(1),_,O).neg();for(var P=l(p(O,8)),U=A,G=0;G>>0:this.low},E.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},E.toString=function(S){if(S=S||10,S<2||36>>0,V=H.toString(S);if(U=q,U.isZero())return V+G;for(;V.length<6;)V="0"+V;G=""+V+G}},E.getHighBits=function(){return this.high},E.getHighBitsUnsigned=function(){return this.high>>>0},E.getLowBits=function(){return this.low},E.getLowBitsUnsigned=function(){return this.low>>>0},E.getNumBitsAbs=function(){if(this.isNegative())return this.eq($)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,_=31;_>0&&!(S&1<<_);_--);return this.high!=0?_+33:_+1},E.isZero=function(){return this.high===0&&this.low===0},E.eqz=E.isZero,E.isNegative=function(){return!this.unsigned&&this.high<0},E.isPositive=function(){return this.unsigned||this.high>=0},E.isOdd=function(){return(this.low&1)===1},E.isEven=function(){return(this.low&1)===0},E.equals=function(S){return r(S)||(S=d(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},E.eq=E.equals,E.notEquals=function(S){return!this.eq(S)},E.neq=E.notEquals,E.ne=E.notEquals,E.lessThan=function(S){return this.comp(S)<0},E.lt=E.lessThan,E.lessThanOrEqual=function(S){return this.comp(S)<=0},E.lte=E.lessThanOrEqual,E.le=E.lessThanOrEqual,E.greaterThan=function(S){return this.comp(S)>0},E.gt=E.greaterThan,E.greaterThanOrEqual=function(S){return this.comp(S)>=0},E.gte=E.greaterThanOrEqual,E.ge=E.greaterThanOrEqual,E.compare=function(S){if(r(S)||(S=d(S)),this.eq(S))return 0;var _=this.isNegative(),O=S.isNegative();return _&&!O?-1:!_&&O?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},E.comp=E.compare,E.negate=function(){return!this.unsigned&&this.eq($)?$:this.not().add(w)},E.neg=E.negate,E.add=function(S){r(S)||(S=d(S));var _=this.high>>>16,O=this.high&65535,W=this.low>>>16,P=this.low&65535,U=S.high>>>16,G=S.high&65535,q=S.low>>>16,H=S.low&65535,V=0,Z=0,X=0,re=0;return re+=P+H,X+=re>>>16,re&=65535,X+=W+q,Z+=X>>>16,X&=65535,Z+=O+G,V+=Z>>>16,Z&=65535,V+=_+U,V&=65535,u(X<<16|re,V<<16|Z,this.unsigned)},E.subtract=function(S){return r(S)||(S=d(S)),this.add(S.neg())},E.sub=E.subtract,E.multiply=function(S){if(this.isZero())return A;if(r(S)||(S=d(S)),a){var _=a.mul(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(S.isZero())return A;if(this.eq($))return S.isOdd()?$:A;if(S.eq($))return this.isOdd()?$:A;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(x)&&S.lt(x))return l(this.toNumber()*S.toNumber(),this.unsigned);var O=this.high>>>16,W=this.high&65535,P=this.low>>>16,U=this.low&65535,G=S.high>>>16,q=S.high&65535,H=S.low>>>16,V=S.low&65535,Z=0,X=0,re=0,ee=0;return ee+=U*V,re+=ee>>>16,ee&=65535,re+=P*V,X+=re>>>16,re&=65535,re+=U*H,X+=re>>>16,re&=65535,X+=W*V,Z+=X>>>16,X&=65535,X+=P*H,Z+=X>>>16,X&=65535,X+=U*q,Z+=X>>>16,X&=65535,Z+=O*V+W*H+P*q+U*G,Z&=65535,u(re<<16|ee,Z<<16|X,this.unsigned)},E.mul=E.multiply,E.divide=function(S){if(r(S)||(S=d(S)),S.isZero())throw Error("division by zero");if(a){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var _=(this.unsigned?a.div_u:a.div_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?b:A;var O,W,P;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return b;if(S.gt(this.shru(1)))return I;P=b}else{if(this.eq($)){if(S.eq(w)||S.eq(T))return $;if(S.eq($))return w;var U=this.shr(1);return O=U.div(S).shl(1),O.eq(A)?S.isNegative()?w:T:(W=this.sub(S.mul(O)),P=O.add(W.div(S)),P)}else if(S.eq($))return this.unsigned?b:A;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();P=A}for(W=this;W.gte(S);){O=Math.max(1,Math.floor(W.toNumber()/S.toNumber()));for(var G=Math.ceil(Math.log(O)/Math.LN2),q=G<=48?1:p(2,G-48),H=l(O),V=H.mul(S);V.isNegative()||V.gt(W);)O-=q,H=l(O,this.unsigned),V=H.mul(S);H.isZero()&&(H=w),P=P.add(H),W=W.sub(V)}return P},E.div=E.divide,E.modulo=function(S){if(r(S)||(S=d(S)),a){var _=(this.unsigned?a.rem_u:a.rem_s)(this.low,this.high,S.low,S.high);return u(_,a.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},E.mod=E.modulo,E.rem=E.modulo,E.not=function(){return u(~this.low,~this.high,this.unsigned)},E.and=function(S){return r(S)||(S=d(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},E.or=function(S){return r(S)||(S=d(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},E.xor=function(S){return r(S)||(S=d(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},E.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<>>32-S,this.unsigned):u(0,this.low<>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},E.shr=E.shiftRight,E.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var _=this.high;if(S<32){var O=this.low;return u(O>>>S|_<<32-S,_>>>S,this.unsigned)}else return S===32?u(_,0,this.unsigned):u(_>>>S-32,0,this.unsigned)},E.shru=E.shiftRightUnsigned,E.shr_u=E.shiftRightUnsigned,E.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},E.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},E.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},E.toBytesLE=function(){var S=this.high,_=this.low;return[_&255,_>>>8&255,_>>>16&255,_>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},E.toBytesBE=function(){var S=this.high,_=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,_>>>24,_>>>16&255,_>>>8&255,_&255]},n.fromBytes=function(S,_,O){return O?n.fromBytesLE(S,_):n.fromBytesBE(S,_)},n.fromBytesLE=function(S,_){return new n(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,_)},n.fromBytesBE=function(S,_){return new n(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],_)}}),UC=Xt(()=>{}),GC=Xt(()=>{}),HC=Xt((e,t)=>{(function(a,n,r){function s(u){var p=this,c=l();p.next=function(){var d=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=d-(p.c=d|0)},p.c=1,p.s0=c(" "),p.s1=c(" "),p.s2=c(" "),p.s0-=c(u),p.s0<0&&(p.s0+=1),p.s1-=c(u),p.s1<0&&(p.s1+=1),p.s2-=c(u),p.s2<0&&(p.s2+=1),c=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var c=new s(u),d=p&&p.state,h=c.next;return h.int32=function(){return c.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,d&&(typeof d=="object"&&i(d,c),h.state=function(){return i(c,{})}),h}function l(){var u=4022871197,p=function(c){c=String(c);for(var d=0;d>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),jC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},l===(l|0)?u.x=l:p+=l;for(var c=0;c>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),qC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var c=0;c>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),XC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.x,d=u.i,h,m,f;return h=c[d],h^=h>>>7,m=h^h<<24,h=c[d+1&7],m^=h^h>>>10,h=c[d+3&7],m^=h^h>>>3,h=c[d+4&7],m^=h^h<<7,h=c[d+7&7],h=h^h<<13,m^=h^h<<9,c[d]=m,u.i=d+1&7,m};function p(c,d){var h,m,f=[];if(d===(d|0))m=f[0]=d;else for(d=""+d,h=0;h0;--h)c.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},d.int32=p.next,d.quick=d,c&&(c.x&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),KC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this;u.next=function(){var c=u.w,d=u.X,h=u.i,m,f;return u.w=c=c+1640531527|0,f=d[h+34&127],m=d[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=d[h]=f^m,u.i=h,f+(c^c>>>16)|0};function p(c,d){var h,m,f,g,y,x=[],A=128;for(d===(d|0)?(m=d,d=null):(d=d+"\0",m=0,A=Math.max(A,d.length)),f=0,g=-32;g>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=x[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(x[(d&&d.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=x[f+34&127],h=x[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,x[f]=m^h;c.w=y,c.X=x,c.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),c=u&&u.state,d=function(){return(p.next()>>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},d.int32=p.next,d.quick=d,c&&(c.X&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),YC=Xt((e,t)=>{(function(a,n,r){function s(l){var u=this,p="";u.next=function(){var d=u.b,h=u.c,m=u.d,f=u.a;return d=d<<25^d>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-d|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var c=0;c>>0)/4294967296};return d.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},d.int32=p.next,d.quick=d,c&&(typeof c=="object"&&i(c,p),d.state=function(){return i(p,{})}),d}n&&n.exports?n.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ZC=Xt(()=>{}),JC=Xt((e,t)=>{(function(a,n,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),c=p*2,d=s-1,h;function m(w,I,T){var N=[];I=I==!0?{entropy:!0}:I||{};var M=x(y(I.entropy?[w,b(n)]:w==null?A():w,3),N),$=new f(N),E=function(){for(var S=$.g(i),_=u,O=0;S=c;)S/=2,_/=2,O>>>=1;return(S+O)/_};return E.int32=function(){return $.g(4)|0},E.quick=function(){return $.g(4)/4294967296},E.double=E,x(b($.S),n),(I.pass||T||function(S,_,O,W){return W&&(W.S&&g(W,$),S.state=function(){return g($,{})}),O?(r[l]=S,_):S})(E,M,"global"in I?I.global:this==r,I.state)}function f(w){var I,T=w.length,N=this,M=0,$=N.i=N.j=0,E=N.S=[];for(T||(w=[T++]);M{var a=HC(),n=jC(),r=qC(),s=XC(),i=KC(),o=YC(),l=JC();l.alea=a,l.xor128=n,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),mA=Xt(()=>{}),fA=Xt(()=>{}),QC=Xt(()=>{}),eT=Xt(()=>{}),tT=Xt(()=>{}),aT=Xt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};function s(){return ie.buffer!=He&&ht(ie.buffer),xt}function i(){return ie.buffer!=He&&ht(ie.buffer),Ha}function o(){return ie.buffer!=He&&ht(ie.buffer),zt}function l(){return ie.buffer!=He&&ht(ie.buffer),la}function u(){return ie.buffer!=He&&ht(ie.buffer),_a}function p(){return ie.buffer!=He&&ht(ie.buffer),dn}function c(){return ie.buffer!=He&&ht(ie.buffer),Fa}var d=typeof r!="undefined"?r:{},h,m;d.ready=new Promise(function(D,j){h=D,m=j});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),y=[],x="./this.program",A=(D,j)=>{throw j},b=typeof window=="object",w=typeof importScripts=="function",I=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",T=d.ENVIRONMENT_IS_PTHREAD||!1,N="";function M(D){return d.locateFile?d.locateFile(D,N):N+D}var $,E,S,_;function O(D){D instanceof Fs||H("exiting due to exception: "+D)}if(I){var W=mA(),P=fA();w?N=P.dirname(N)+"/":N=__dirname+"/",$=(j,oe)=>(j=Nl(j)?new URL(j):P.normalize(j),W.readFileSync(j,oe?void 0:"utf8")),S=j=>{var oe=$(j,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},E=(j,oe,Me)=>{j=Nl(j)?new URL(j):P.normalize(j),W.readFile(j,function(je,Be){je?Me(je):oe(Be.buffer)})},process.argv.length>1&&(x=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(j){if(!(j instanceof Fs))throw j}),process.on("unhandledRejection",function(j){throw j}),A=(j,oe)=>{if(In())throw process.exitCode=j,oe;O(oe),process.exit(j)},d.inspect=function(){return"[Emscripten Module object]"};let D;try{D=QC()}catch(j){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),j}global.Worker=D.Worker}else(b||w)&&(w?N=self.location.href:typeof document!="undefined"&&document.currentScript&&(N=document.currentScript.src),typeof n!="undefined"&&n&&(N=n),N.indexOf("blob:")!==0?N=N.substr(0,N.replace(/[?#].*/,"").lastIndexOf("/")+1):N="",I||($=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.send(null),j.responseText},w&&(S=D=>{var j=new XMLHttpRequest;return j.open("GET",D,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),E=(D,j,oe)=>{var Me=new XMLHttpRequest;Me.open("GET",D,!0),Me.responseType="arraybuffer",Me.onload=()=>{if(Me.status==200||Me.status==0&&Me.response){j(Me.response);return}oe()},Me.onerror=oe,Me.send(null)}),_=D=>document.title=D);I&&typeof performance=="undefined"&&(global.performance=eT().performance);var U=console.log.bind(console),G=console.warn.bind(console);I&&(U=D=>W.writeSync(1,D+` +`),G=D=>W.writeSync(2,D+` +`));var q=d.print||U,H=d.printErr||G;Object.assign(d,g),g=null,d.arguments&&(y=d.arguments),d.thisProgram&&(x=d.thisProgram),d.quit&&(A=d.quit);var V=4,Z=Atomics.load,X=Atomics.store,re=Atomics.compareExchange,ee;d.wasmBinary&&(ee=d.wasmBinary);var ge=d.noExitRuntime||!0;typeof WebAssembly!="object"&&_s("no native wasm support detected");var ie,be,Ce=!1,Re;function Le(D,j){D||_s(j)}var qe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function gt(D,j,oe){j>>>=0;for(var Me=j+oe,je=j;D[je]&&!(je>=Me);)++je;if(je-j>16&&D.buffer&&qe)return qe.decode(D.buffer instanceof SharedArrayBuffer?D.slice(j,je):D.subarray(j,je));for(var Be="";j>10,56320|cn&1023)}}return Be}function dt(D,j){return D>>>=0,D?gt(i(),D,j):""}function st(D,j,oe,Me){if(oe>>>=0,!(Me>0))return 0;for(var je=oe,Be=oe+Me-1,ye=0;ye=55296&&Ne<=57343){var Tt=D.charCodeAt(++ye);Ne=65536+((Ne&1023)<<10)|Tt&1023}if(Ne<=127){if(oe>=Be)break;j[oe++>>>0]=Ne}else if(Ne<=2047){if(oe+1>=Be)break;j[oe++>>>0]=192|Ne>>6,j[oe++>>>0]=128|Ne&63}else if(Ne<=65535){if(oe+2>=Be)break;j[oe++>>>0]=224|Ne>>12,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}else{if(oe+3>=Be)break;j[oe++>>>0]=240|Ne>>18,j[oe++>>>0]=128|Ne>>12&63,j[oe++>>>0]=128|Ne>>6&63,j[oe++>>>0]=128|Ne&63}}return j[oe>>>0]=0,oe-je}function it(D,j,oe){return st(D,i(),j,oe)}var He,xt,Ha,zt,un,la,_a,dn,Fa;T&&(He=d.buffer);function ht(D){He=D,d.HEAP8=xt=new Int8Array(D),d.HEAP16=zt=new Int16Array(D),d.HEAP32=la=new Int32Array(D),d.HEAPU8=Ha=new Uint8Array(D),d.HEAPU16=un=new Uint16Array(D),d.HEAPU32=_a=new Uint32Array(D),d.HEAPF32=dn=new Float32Array(D),d.HEAPF64=Fa=new Float64Array(D)}var Da=d.INITIAL_MEMORY||16777216;if(T)ie=d.wasmMemory,He=d.buffer;else if(d.wasmMemory)ie=d.wasmMemory;else if(ie=new WebAssembly.Memory({initial:Da/65536,maximum:65536,shared:!0}),!(ie.buffer instanceof SharedArrayBuffer))throw H("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"),I&&H("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ie&&(He=ie.buffer),Da=He.byteLength,ht(He);var ja,hr=[],Cl=[],jn=[],md=!1;function In(){return ge}function Dr(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)pm(d.preRun.shift());gd(hr)}function Yt(){md=!0,!T&&gd(Cl)}function xc(){if(!T){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)$x(d.postRun.shift());gd(jn)}}function pm(D){hr.unshift(D)}function cm(D){Cl.unshift(D)}function $x(D){jn.unshift(D)}var Or=0,Tl=null,mr=null;function hm(D){Or++,d.monitorRunDependencies&&d.monitorRunDependencies(Or)}function Ac(D){if(Or--,d.monitorRunDependencies&&d.monitorRunDependencies(Or),Or==0&&(Tl!==null&&(clearInterval(Tl),Tl=null),mr)){var j=mr;mr=null,j()}}function _s(D){d.onAbort&&d.onAbort(D),D="Aborted("+D+")",H(D),Ce=!0,Re=1,D+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(D);throw m(j),j}var mm="data:application/octet-stream;base64,";function bc(D){return D.startsWith(mm)}function Nl(D){return D.startsWith("file://")}var ma;ma="tfjs-backend-wasm-threaded-simd.wasm",bc(ma)||(ma=M(ma));function vc(D){try{if(D==ma&&ee)return new Uint8Array(ee);if(S)return S(D);throw"both async and sync fetching of the wasm failed"}catch(j){_s(j)}}function fm(){if(!ee&&(b||w)){if(typeof fetch=="function"&&!Nl(ma))return fetch(ma,{credentials:"same-origin"}).then(function(D){if(!D.ok)throw"failed to load wasm binary file at '"+ma+"'";return D.arrayBuffer()}).catch(function(){return vc(ma)});if(E)return new Promise(function(D,j){E(ma,function(oe){D(new Uint8Array(oe))},j)})}return Promise.resolve().then(function(){return vc(ma)})}function gm(){var D={env:_c,wasi_snapshot_preview1:_c};function j(ye,Ne){var Tt=ye.exports;if(d.asm=Tt,Sm(d.asm._emscripten_tls_init),ja=d.asm.__indirect_function_table,cm(d.asm.__wasm_call_ctors),be=Ne,!T){var cn=We.unusedWorkers.length;We.unusedWorkers.forEach(function(gr){We.loadWasmModuleToWorker(gr,function(){--cn||Ac("wasm-instantiate")})})}}T||hm("wasm-instantiate");function oe(ye){j(ye.instance,ye.module)}function Me(ye){return fm().then(function(Ne){return WebAssembly.instantiate(Ne,D)}).then(function(Ne){return Ne}).then(ye,function(Ne){H("failed to asynchronously prepare wasm: "+Ne),_s(Ne)})}function je(){return!ee&&typeof WebAssembly.instantiateStreaming=="function"&&!bc(ma)&&!Nl(ma)&&!I&&typeof fetch=="function"?fetch(ma,{credentials:"same-origin"}).then(function(ye){var Ne=WebAssembly.instantiateStreaming(ye,D);return Ne.then(oe,function(Tt){return H("wasm streaming compile failed: "+Tt),H("falling back to ArrayBuffer instantiation"),Me(oe)})}):Me(oe)}if(d.instantiateWasm)try{var Be=d.instantiateWasm(D,j);return Be}catch(ye){H("Module.instantiateWasm callback failed with error: "+ye),m(ye)}return je().catch(m),{}}var Px,_x,wc={};function Fs(D){this.name="ExitStatus",this.message="Program terminated with exit("+D+")",this.status=D}function ym(D){var j=We.pthreads[D];delete We.pthreads[D],j.terminate(),V2(D),We.runningWorkers.splice(We.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function xm(D){var j=We.pthreads[D];j.postMessage({cmd:"cancel"})}function fd(D){var j=We.pthreads[D];Le(j),We.returnWorkerToPool(j)}function Am(D){var j=We.getNewWorker();if(!j)return 6;We.runningWorkers.push(j),We.pthreads[D.pthread_ptr]=j,j.pthread_ptr=D.pthread_ptr;var oe={cmd:"run",start_routine:D.startRoutine,arg:D.arg,pthread_ptr:D.pthread_ptr};return j.runPthread=()=>{I&&j.ref(),j.postMessage(oe,D.transferList),delete j.runPthread},j.loaded&&j.runPthread(),0}var kc={varargs:void 0,get:function(){kc.varargs+=4;var D=l()[kc.varargs-4>>>2];return D},getStr:function(D){var j=dt(D);return j}};function Ic(D){if(T)return zr(1,1,D);Re=D,In()||(We.terminateAllThreads(),d.onExit&&d.onExit(D),Ce=!0),A(D,new Fs(D))}function bm(D,j){if(Re=D,!j&&T)throw Cc(D),"unwind";Ic(D)}var Sc=bm;function vm(D){if(D instanceof Fs||D=="unwind")return Re;A(1,D)}var We={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){T?We.initWorker():We.initMainThread()},initMainThread:function(){for(var D=8;D--;)We.allocateUnusedWorker()},initWorker:function(){ge=!1},setExitStatus:function(D){Re=D},terminateAllThreads:function(){for(var D of Object.values(We.pthreads))We.returnWorkerToPool(D);for(var D of We.unusedWorkers)D.terminate();We.unusedWorkers=[]},returnWorkerToPool:function(D){var j=D.pthread_ptr;delete We.pthreads[j],We.unusedWorkers.push(D),We.runningWorkers.splice(We.runningWorkers.indexOf(D),1),D.pthread_ptr=0,I&&D.unref(),V2(j)},receiveObjectTransfer:function(D){},threadInitTLS:function(){We.tlsInitFunctions.forEach(D=>D())},loadWasmModuleToWorker:function(D,j){D.onmessage=Be=>{var ye=Be.data,Ne=ye.cmd;if(D.pthread_ptr&&(We.currentProxiedOperationCallerThread=D.pthread_ptr),ye.targetThread&&ye.targetThread!=Wc()){var Tt=We.pthreads[ye.targetThread];Tt?Tt.postMessage(ye,ye.transferList):H('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ye.targetThread+", but that thread no longer exists!"),We.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?yd(ye.queue):Ne==="spawnThread"?Am(ye):Ne==="cleanupThread"?fd(ye.thread):Ne==="killThread"?ym(ye.thread):Ne==="cancelThread"?xm(ye.thread):Ne==="loaded"?(D.loaded=!0,I&&D.unref(),j&&j(D),D.runPthread&&D.runPthread()):Ne==="print"?q("Thread "+ye.threadId+": "+ye.text):Ne==="printErr"?H("Thread "+ye.threadId+": "+ye.text):Ne==="alert"?alert("Thread "+ye.threadId+": "+ye.text):ye.target==="setimmediate"?D.postMessage(ye):Ne==="callHandler"?d[ye.handler](...ye.args):Ne&&H("worker sent an unknown command "+Ne),We.currentProxiedOperationCallerThread=void 0},D.onerror=Be=>{var ye="worker sent an error!";throw H(ye+" "+Be.filename+":"+Be.lineno+": "+Be.message),Be},I&&(D.on("message",function(Be){D.onmessage({data:Be})}),D.on("error",function(Be){D.onerror(Be)}),D.on("detachedExit",function(){}));var oe=[],Me=["onExit","onAbort","print","printErr"];for(var je of Me)d.hasOwnProperty(je)&&oe.push(je);D.postMessage({cmd:"load",handlers:oe,urlOrBlob:d.mainScriptUrlOrBlob||n,wasmMemory:ie,wasmModule:be})},allocateUnusedWorker:function(){var D,j=M("tfjs-backend-wasm-threaded-simd.worker.js");D=new Worker(j),We.unusedWorkers.push(D)},getNewWorker:function(){return We.unusedWorkers.length==0&&(We.allocateUnusedWorker(),We.loadWasmModuleToWorker(We.unusedWorkers[0])),We.unusedWorkers.pop()}};d.PThread=We;function gd(D){for(;D.length>0;)D.shift()(d)}function wm(){var D=Wc(),j=l()[D+52>>>2],oe=l()[D+56>>>2],Me=j-oe;Wx(j,Me),Bc(j)}d.establishStackSpace=wm;function Cc(D){if(T)return zr(2,0,D);try{Sc(D)}catch(j){vm(j)}}var Rl=[];function km(D){var j=Rl[D];return j||(D>=Rl.length&&(Rl.length=D+1),Rl[D]=j=ja.get(D)),j}function Im(D,j){var oe=km(D)(j);In()?We.setExitStatus(oe):Lx(oe)}d.invokeEntryPoint=Im;function Sm(D){We.tlsInitFunctions.push(D)}function Cm(D){Dx(D,!w,1,!b),We.threadInitTLS()}function Tm(D){T?postMessage({cmd:"cleanupThread",thread:D}):fd(D)}function Tc(D,j,oe,Me){return T?zr(3,1,D,j,oe,Me):Nc(D,j,oe,Me)}function Nc(D,j,oe,Me){if(typeof SharedArrayBuffer=="undefined")return H("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var je=[],Be=0;if(T&&(je.length===0||Be))return Tc(D,j,oe,Me);if(Be)return Be;var ye={startRoutine:oe,pthread_ptr:D,arg:Me,transferList:je};return T?(ye.cmd="spawnThread",postMessage(ye,je),0):Am(ye)}function Nm(){return 65536}var Rm=!0;function Em(){return Rm}function yd(D){Atomics.store(l(),D>>2,1),Wc()&&zx(D),Atomics.compareExchange(l(),D>>2,1,0)}d.executeNotifiedProxyingQueue=yd;function Mm(D,j,oe,Me){if(D==j)setTimeout(()=>yd(Me));else if(T)postMessage({targetThread:D,cmd:"processProxyingQueue",queue:Me});else{var je=We.pthreads[D];if(!je)return;je.postMessage({cmd:"processProxyingQueue",queue:Me})}return 1}function $m(D,j,oe){return-1}function Pm(){_s("")}function Ds(D){Ds.shown||(Ds.shown={}),Ds.shown[D]||(Ds.shown[D]=1,I&&(D="warning: "+D),H(D))}function _m(){I||w||Ds("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Fm(){return Date.now()}function Rc(){return 4294901760}function Dm(){return Rc()}var xd;I?xd=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:xd=()=>performance.timeOrigin+performance.now();function Om(D,j,oe){i().copyWithin(D>>>0,j>>>0,j+oe>>>0)}function zm(){return I?tT().cpus().length:navigator.hardwareConcurrency}function Lm(D){var j=U2(),oe=D();return Bc(j),oe}function zr(D,j){var oe=arguments.length-2,Me=arguments;return Lm(()=>{for(var je=oe,Be=Vc(je*8),ye=Be>>3,Ne=0;Ne>>0]=Tt}return Ox(D,je,Be,j)})}var Ad=[];function Wm(D,j,oe){Ad.length=j;for(var Me=oe>>3,je=0;je>>0];var Be=D<0,ye=Be?wc[-D-1]:Km[D];return ye.apply(null,Ad)}function Bm(D){try{return ie.grow(D-He.byteLength+65535>>>16),ht(ie.buffer),1}catch(j){}}function Vm(D){var j=i().length;if(D=D>>>0,D<=j)return!1;var oe=Rc();if(D>oe)return!1;let Me=(Tt,cn)=>Tt+(cn-Tt%cn)%cn;for(var je=1;je<=4;je*=2){var Be=j*(1+.2/je);Be=Math.min(Be,D+100663296);var ye=Math.min(oe,Me(Math.max(D,Be),65536)),Ne=Bm(ye);if(Ne)return!0}return!1}function Um(){throw"unwind"}function Ec(D){return T?zr(4,1,D):52}function Mc(D,j,oe,Me,je){return T?zr(5,1,D,j,oe,Me,je):70}var Gm=[null,[],[]];function Hm(D,j){var oe=Gm[D];j===0||j===10?((D===1?q:H)(gt(oe,0)),oe.length=0):oe.push(j)}function $c(D,j,oe,Me){if(T)return zr(6,1,D,j,oe,Me);for(var je=0,Be=0;Be>>2],Ne=u()[j+4>>>2];j+=8;for(var Tt=0;Tt>>0]);je+=Ne}return u()[Me>>>2]=je,0}function Pc(D){var j=d["_"+D];return j}function jm(D,j){s().set(D,j>>>0)}function qm(D,j,oe,Me,je){var Be={string:hn=>{var Pl=0;if(hn!=null&&hn!==0){var Ux=(hn.length<<2)+1;Pl=Vc(Ux),it(hn,Pl,Ux)}return Pl},array:hn=>{var Pl=Vc(hn.length);return jm(hn,Pl),Pl}};function ye(hn){return j==="string"?dt(hn):j==="boolean"?!!hn:hn}var Ne=Pc(D),Tt=[],cn=0;if(Me)for(var gr=0;grye==="number"||ye==="boolean"),Be=j!=="string";return Be&&je&&!Me?Pc(D):function(){return qm(D,j,oe,arguments,Me)}}We.init();var Km=[null,Ic,Cc,Tc,Ec,Mc,$c],_c={__emscripten_init_main_thread_js:Cm,__emscripten_thread_cleanup:Tm,__pthread_create_js:Nc,_emscripten_default_pthread_stack_size:Nm,_emscripten_get_now_is_monotonic:Em,_emscripten_notify_task_queue:Mm,_emscripten_set_offscreencanvas_size:$m,abort:Pm,emscripten_check_blocking_allowed:_m,emscripten_date_now:Fm,emscripten_get_heap_max:Dm,emscripten_get_now:xd,emscripten_memcpy_big:Om,emscripten_num_logical_cores:zm,emscripten_receive_on_main_thread_js:Wm,emscripten_resize_heap:Vm,emscripten_unwind_to_js_event_loop:Um,exit:Sc,fd_close:Ec,fd_seek:Mc,fd_write:$c,memory:ie||d.wasmMemory},Fx=gm(),Ym=d.___wasm_call_ctors=function(){return(Ym=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},Zm=d._init=function(){return(Zm=d._init=d.asm.init).apply(null,arguments)},Jm=d._init_with_threads_count=function(){return(Jm=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},Qm=d._get_threads_count=function(){return(Qm=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},ef=d._register_tensor=function(){return(ef=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},tf=d._dispose_data=function(){return(tf=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},af=d._dispose=function(){return(af=d._dispose=d.asm.dispose).apply(null,arguments)},nf=d._Abs=function(){return(nf=d._Abs=d.asm.Abs).apply(null,arguments)},rf=d._Acos=function(){return(rf=d._Acos=d.asm.Acos).apply(null,arguments)},sf=d._Acosh=function(){return(sf=d._Acosh=d.asm.Acosh).apply(null,arguments)},of=d._Add=function(){return(of=d._Add=d.asm.Add).apply(null,arguments)},lf=d._AddN=function(){return(lf=d._AddN=d.asm.AddN).apply(null,arguments)},uf=d._All=function(){return(uf=d._All=d.asm.All).apply(null,arguments)},df=d._Any=function(){return(df=d._Any=d.asm.Any).apply(null,arguments)},pf=d._ArgMax=function(){return(pf=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},cf=d._ArgMin=function(){return(cf=d._ArgMin=d.asm.ArgMin).apply(null,arguments)},hf=d._Asin=function(){return(hf=d._Asin=d.asm.Asin).apply(null,arguments)},mf=d._Asinh=function(){return(mf=d._Asinh=d.asm.Asinh).apply(null,arguments)},ff=d._Atan=function(){return(ff=d._Atan=d.asm.Atan).apply(null,arguments)},gf=d._Atan2=function(){return(gf=d._Atan2=d.asm.Atan2).apply(null,arguments)},yf=d._Atanh=function(){return(yf=d._Atanh=d.asm.Atanh).apply(null,arguments)},xf=d._AvgPool=function(){return(xf=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Af=d._AvgPool3D=function(){return(Af=d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},bf=d._AvgPool3DGrad=function(){return(bf=d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},vf=d._AvgPoolGrad=function(){return(vf=d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},wf=d._BatchMatMul=function(){return(wf=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},kf=d._Bincount=function(){return(kf=d._Bincount=d.asm.Bincount).apply(null,arguments)},If=d._BitwiseAnd=function(){return(If=d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},Sf=d._Ceil=function(){return(Sf=d._Ceil=d.asm.Ceil).apply(null,arguments)},Cf=d._ClipByValue=function(){return(Cf=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},Tf=d._Conv2D=function(){return(Tf=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Nf=d._Conv2DBackpropInput=function(){return(Nf=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Rf=d._Conv3D=function(){return(Rf=d._Conv3D=d.asm.Conv3D).apply(null,arguments)},Ef=d._Conv3DBackpropFilterV2=function(){return(Ef=d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mf=d._Conv3DBackpropInputV2=function(){return(Mf=d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},$f=d._Cos=function(){return($f=d._Cos=d.asm.Cos).apply(null,arguments)},Pf=d._Cosh=function(){return(Pf=d._Cosh=d.asm.Cosh).apply(null,arguments)},_f=d._CropAndResize=function(){return(_f=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},Ff=d._Cumprod=function(){return(Ff=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Df=d._Cumsum=function(){return(Df=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Of=d._DenseBincount=function(){return(Of=d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},zf=d._DepthToSpace=function(){return(zf=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Lf=d._DepthwiseConv2dNative=function(){return(Lf=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Wf=d._Diag=function(){return(Wf=d._Diag=d.asm.Diag).apply(null,arguments)},Bf=d._Dilation2D=function(){return(Bf=d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},Vf=d._Dilation2DBackpropFilter=function(){return(Vf=d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},Uf=d._Dilation2DBackpropInput=function(){return(Uf=d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},Gf=d._Elu=function(){return(Gf=d._Elu=d.asm.Elu).apply(null,arguments)},Hf=d._EluGrad=function(){return(Hf=d._EluGrad=d.asm.EluGrad).apply(null,arguments)},jf=d._Equal=function(){return(jf=d._Equal=d.asm.Equal).apply(null,arguments)},qf=d._Erf=function(){return(qf=d._Erf=d.asm.Erf).apply(null,arguments)},Xf=d._Exp=function(){return(Xf=d._Exp=d.asm.Exp).apply(null,arguments)},Kf=d._Expm1=function(){return(Kf=d._Expm1=d.asm.Expm1).apply(null,arguments)},Yf=d._FlipLeftRight=function(){return(Yf=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Zf=d._Floor=function(){return(Zf=d._Floor=d.asm.Floor).apply(null,arguments)},Jf=d._FloorDiv=function(){return(Jf=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},Qf=d._FusedBatchNorm=function(){return(Qf=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},e2=d._FusedConv2D=function(){return(e2=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},t2=d._FusedDepthwiseConv2D=function(){return(t2=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},a2=d._Gather=function(){return(a2=d._Gather=d.asm.Gather).apply(null,arguments)},n2=d._GatherNd=function(){return(n2=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},r2=d._Greater=function(){return(r2=d._Greater=d.asm.Greater).apply(null,arguments)},s2=d._GreaterEqual=function(){return(s2=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},i2=d._IsFinite=function(){return(i2=d._IsFinite=d.asm.IsFinite).apply(null,arguments)},o2=d._IsInf=function(){return(o2=d._IsInf=d.asm.IsInf).apply(null,arguments)},l2=d._IsNan=function(){return(l2=d._IsNan=d.asm.IsNan).apply(null,arguments)},u2=d._LRN=function(){return(u2=d._LRN=d.asm.LRN).apply(null,arguments)},d2=d._LRNGrad=function(){return(d2=d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},p2=d._LeakyRelu=function(){return(p2=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},c2=d._Less=function(){return(c2=d._Less=d.asm.Less).apply(null,arguments)},h2=d._LessEqual=function(){return(h2=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},m2=d._LinSpace=function(){return(m2=d._LinSpace=d.asm.LinSpace).apply(null,arguments)},f2=d._Log=function(){return(f2=d._Log=d.asm.Log).apply(null,arguments)},g2=d._Log1p=function(){return(g2=d._Log1p=d.asm.Log1p).apply(null,arguments)},y2=d._LogicalAnd=function(){return(y2=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},x2=d._LogicalNot=function(){return(x2=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},A2=d._LogicalOr=function(){return(A2=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},b2=d._LogicalXor=function(){return(b2=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},v2=d._Max=function(){return(v2=d._Max=d.asm.Max).apply(null,arguments)},w2=d._MaxPool=function(){return(w2=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},k2=d._MaxPool3D=function(){return(k2=d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},I2=d._MaxPool3DGrad=function(){return(I2=d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},S2=d._MaxPoolGrad=function(){return(S2=d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},C2=d._MaxPoolWithArgmax=function(){return(C2=d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},T2=d._Maximum=function(){return(T2=d._Maximum=d.asm.Maximum).apply(null,arguments)},N2=d._Mean=function(){return(N2=d._Mean=d.asm.Mean).apply(null,arguments)},R2=d._Min=function(){return(R2=d._Min=d.asm.Min).apply(null,arguments)},E2=d._Minimum=function(){return(E2=d._Minimum=d.asm.Minimum).apply(null,arguments)},M2=d._MirrorPad=function(){return(M2=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},$2=d._Mod=function(){return($2=d._Mod=d.asm.Mod).apply(null,arguments)},P2=d._Multinomial=function(){return(P2=d._Multinomial=d.asm.Multinomial).apply(null,arguments)},_2=d._Multiply=function(){return(_2=d._Multiply=d.asm.Multiply).apply(null,arguments)},F2=d._Neg=function(){return(F2=d._Neg=d.asm.Neg).apply(null,arguments)},D2=d._NonMaxSuppressionV3=function(){return(D2=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},O2=d._NonMaxSuppressionV4=function(){return(O2=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},Fc=d._NonMaxSuppressionV5=function(){return(Fc=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Dc=d._NotEqual=function(){return(Dc=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},bd=d._OneHot=function(){return(bd=d._OneHot=d.asm.OneHot).apply(null,arguments)},z2=d._PadV2=function(){return(z2=d._PadV2=d.asm.PadV2).apply(null,arguments)},L2=d._Pow=function(){return(L2=d._Pow=d.asm.Pow).apply(null,arguments)},El=d._Prelu=function(){return(El=d._Prelu=d.asm.Prelu).apply(null,arguments)},Oc=d._Prod=function(){return(Oc=d._Prod=d.asm.Prod).apply(null,arguments)},Ml=d._RealDiv=function(){return(Ml=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},$l=d._Reciprocal=function(){return($l=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},W2=d._Relu=function(){return(W2=d._Relu=d.asm.Relu).apply(null,arguments)},Y=d._Relu6=function(){return(Y=d._Relu6=d.asm.Relu6).apply(null,arguments)},se=d._ResizeBilinear=function(){return(se=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},Ee=d._ResizeBilinearGrad=function(){return(Ee=d._ResizeBilinearGrad=d.asm.ResizeBilinearGrad).apply(null,arguments)},et=d._ResizeNearestNeighbor=function(){return(et=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},wt=d._ResizeNearestNeighborGrad=function(){return(wt=d._ResizeNearestNeighborGrad=d.asm.ResizeNearestNeighborGrad).apply(null,arguments)},kt=d._Reverse=function(){return(kt=d._Reverse=d.asm.Reverse).apply(null,arguments)},Je=d._RotateWithOffset=function(){return(Je=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},Ye=d._Round=function(){return(Ye=d._Round=d.asm.Round).apply(null,arguments)},Lt=d._Rsqrt=function(){return(Lt=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},pn=d._ScatterNd=function(){return(pn=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},fr=d._SearchSorted=function(){return(fr=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},zc=d._SelectV2=function(){return(zc=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},vd=d._Selu=function(){return(vd=d._Selu=d.asm.Selu).apply(null,arguments)},B2=d._Sigmoid=function(){return(B2=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},Oa=d._Sign=function(){return(Oa=d._Sign=d.asm.Sign).apply(null,arguments)},Lr=d._Sin=function(){return(Lr=d._Sin=d.asm.Sin).apply(null,arguments)},Lc=d._Sinh=function(){return(Lc=d._Sinh=d.asm.Sinh).apply(null,arguments)},ZS=d._Softmax=function(){return(ZS=d._Softmax=d.asm.Softmax).apply(null,arguments)},JS=d._Softplus=function(){return(JS=d._Softplus=d.asm.Softplus).apply(null,arguments)},QS=d._SparseFillEmptyRows=function(){return(QS=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},eC=d._SparseReshape=function(){return(eC=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},tC=d._SparseSegmentReduction=function(){return(tC=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},aC=d._SparseToDense=function(){return(aC=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},nC=d._Sqrt=function(){return(nC=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},rC=d._Square=function(){return(rC=d._Square=d.asm.Square).apply(null,arguments)},sC=d._SquaredDifference=function(){return(sC=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},iC=d._Step=function(){return(iC=d._Step=d.asm.Step).apply(null,arguments)},oC=d._StridedSlice=function(){return(oC=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},lC=d._Sub=function(){return(lC=d._Sub=d.asm.Sub).apply(null,arguments)},uC=d._Sum=function(){return(uC=d._Sum=d.asm.Sum).apply(null,arguments)},dC=d._Tan=function(){return(dC=d._Tan=d.asm.Tan).apply(null,arguments)},pC=d._Tanh=function(){return(pC=d._Tanh=d.asm.Tanh).apply(null,arguments)},cC=d._TensorScatterUpdate=function(){return(cC=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},hC=d._Tile=function(){return(hC=d._Tile=d.asm.Tile).apply(null,arguments)},mC=d._TopK=function(){return(mC=d._TopK=d.asm.TopK).apply(null,arguments)},fC=d._Transform=function(){return(fC=d._Transform=d.asm.Transform).apply(null,arguments)},gC=d._Transpose=function(){return(gC=d._Transpose=d.asm.Transpose).apply(null,arguments)},yC=d.__FusedMatMul=function(){return(yC=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},xC=d._malloc=function(){return(xC=d._malloc=d.asm.malloc).apply(null,arguments)},AC=d._free=function(){return(AC=d._free=d.asm.free).apply(null,arguments)},bC=d.__emscripten_tls_init=function(){return(bC=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Wc=d._pthread_self=function(){return(Wc=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},vC=d.___errno_location=function(){return(vC=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},Dx=d.__emscripten_thread_init=function(){return(Dx=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},wC=d.__emscripten_thread_crashed=function(){return(wC=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},kC=d._emscripten_main_thread_process_queued_calls=function(){return(kC=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},IC=d._emscripten_main_browser_thread_id=function(){return(IC=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},Ox=d._emscripten_run_in_main_runtime_thread_js=function(){return(Ox=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},SC=d._emscripten_dispatch_to_thread_=function(){return(SC=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},zx=d.__emscripten_proxy_execute_task_queue=function(){return(zx=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},V2=d.__emscripten_thread_free_data=function(){return(V2=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},Lx=d.__emscripten_thread_exit=function(){return(Lx=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Wx=d._emscripten_stack_set_limits=function(){return(Wx=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},U2=d.stackSave=function(){return(U2=d.stackSave=d.asm.stackSave).apply(null,arguments)},Bc=d.stackRestore=function(){return(Bc=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Vc=d.stackAlloc=function(){return(Vc=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},CC=d.dynCall_iijjiiii=function(){return(CC=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},TC=d.dynCall_jiji=function(){return(TC=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=In,d.wasmMemory=ie,d.cwrap=Xm,d.ExitStatus=Fs,d.PThread=We;var Uc;mr=function D(){Uc||Bx(),Uc||(mr=D)};function Bx(D){if(D=D||y,Or>0)return;if(T){h(d),Yt(),startWorker(d);return}if(Dr(),Or>0)return;function j(){Uc||(Uc=!0,d.calledRun=!0,!Ce&&(Yt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),xc()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),j()},1)):j()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();Bx();var Gc;f&&(Gc={uncaughtException:process.listeners("uncaughtException").filter(function(D){return!f.uncaughtException.indexOf(D)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(D){return!f.unhandledRejection.indexOf(D)>-1})});var Hc;if(typeof WasmBackendModule!="undefined")Hc=WasmBackendModule;else if(typeof r!="undefined")Hc=r;else throw new Error("Could not find wasm module in post.js");if(Gc){var NC=Hc._dispose;Hc._dispose=function(){NC(),Gc.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Gc.unhandledRejection.forEach(function(D){process.removeListener("unhandledRejection",D)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=a)}),nT=Xt((e,t)=>{t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}),rT=Xt((e,t)=>{var a=(()=>{var n=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(n=n||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(Y,se){i=Y,o=se});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],c="./this.program",d=(Y,se)=>{throw se},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(Y){return s.locateFile?s.locateFile(Y,g):g+Y}var x,A,b,w;function I(Y){Y instanceof Tl||$("exiting due to exception: "+Y)}if(f){var T=mA(),N=fA();m?g=N.dirname(g)+"/":g=__dirname+"/",x=(Y,se)=>(Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFileSync(Y,se?void 0:"utf8")),b=Y=>{var se=x(Y,!0);return se.buffer||(se=new Uint8Array(se)),se},A=(Y,se,Ee)=>{Y=Dr(Y)?new URL(Y):N.normalize(Y),T.readFile(Y,function(et,wt){et?Ee(et):se(wt.buffer)})},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof Tl))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),d=(Y,se)=>{if(Ha())throw process.exitCode=Y,se;I(se),process.exit(Y)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),n&&(g=n),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",x=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.send(null),se.responseText},m&&(b=Y=>{var se=new XMLHttpRequest;return se.open("GET",Y,!1),se.responseType="arraybuffer",se.send(null),new Uint8Array(se.response)}),A=(Y,se,Ee)=>{var et=new XMLHttpRequest;et.open("GET",Y,!0),et.responseType="arraybuffer",et.onload=()=>{if(et.status==200||et.status==0&&et.response){se(et.response);return}Ee()},et.onerror=Ee,et.send(null)},w=Y=>document.title=Y);var M=s.print||console.log.bind(console),$=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(d=s.quit);var E=4,S;s.wasmBinary&&(S=s.wasmBinary);var _=s.noExitRuntime||!0;typeof WebAssembly!="object"&&jn("no native wasm support detected");var O,W=!1,P;function U(Y,se){Y||jn(se)}var G=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function q(Y,se,Ee){se>>>=0;for(var et=se+Ee,wt=se;Y[wt]&&!(wt>=et);)++wt;if(wt-se>16&&Y.buffer&&G)return G.decode(Y.subarray(se,wt));for(var kt="";se>10,56320|pn&1023)}}return kt}function H(Y,se){return Y>>>=0,Y?q(ee,Y,se):""}function V(Y,se,Ee,et){if(Ee>>>=0,!(et>0))return 0;for(var wt=Ee,kt=Ee+et-1,Je=0;Je=55296&&Ye<=57343){var Lt=Y.charCodeAt(++Je);Ye=65536+((Ye&1023)<<10)|Lt&1023}if(Ye<=127){if(Ee>=kt)break;se[Ee++>>>0]=Ye}else if(Ye<=2047){if(Ee+1>=kt)break;se[Ee++>>>0]=192|Ye>>6,se[Ee++>>>0]=128|Ye&63}else if(Ye<=65535){if(Ee+2>=kt)break;se[Ee++>>>0]=224|Ye>>12,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}else{if(Ee+3>=kt)break;se[Ee++>>>0]=240|Ye>>18,se[Ee++>>>0]=128|Ye>>12&63,se[Ee++>>>0]=128|Ye>>6&63,se[Ee++>>>0]=128|Ye&63}}return se[Ee>>>0]=0,Ee-wt}function Z(Y,se,Ee){return V(Y,ee,se,Ee)}var X,re,ee,ge,ie,be,Ce,Re,Le;function qe(Y){X=Y,s.HEAP8=re=new Int8Array(Y),s.HEAP16=ge=new Int16Array(Y),s.HEAP32=be=new Int32Array(Y),s.HEAPU8=ee=new Uint8Array(Y),s.HEAPU16=ie=new Uint16Array(Y),s.HEAPU32=Ce=new Uint32Array(Y),s.HEAPF32=Re=new Float32Array(Y),s.HEAPF64=Le=new Float64Array(Y)}var gt=s.INITIAL_MEMORY||16777216,dt,st=[],it=[],He=[],xt=!1;function Ha(){return _}function zt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)_a(s.preRun.shift());mr(st)}function un(){xt=!0,mr(it)}function la(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Fa(s.postRun.shift());mr(He)}function _a(Y){st.unshift(Y)}function dn(Y){it.unshift(Y)}function Fa(Y){He.unshift(Y)}var ht=0,Da=null,ja=null;function hr(Y){ht++,s.monitorRunDependencies&&s.monitorRunDependencies(ht)}function Cl(Y){if(ht--,s.monitorRunDependencies&&s.monitorRunDependencies(ht),ht==0&&(Da!==null&&(clearInterval(Da),Da=null),ja)){var se=ja;ja=null,se()}}function jn(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",$(Y),W=!0,P=1,Y+=". Build with -sASSERTIONS for more info.";var se=new WebAssembly.RuntimeError(Y);throw o(se),se}var md="data:application/octet-stream;base64,";function In(Y){return Y.startsWith(md)}function Dr(Y){return Y.startsWith("file://")}var Yt;Yt="tfjs-backend-wasm.wasm",In(Yt)||(Yt=y(Yt));function xc(Y){try{if(Y==Yt&&S)return new Uint8Array(S);if(b)return b(Y);throw"both async and sync fetching of the wasm failed"}catch(se){jn(se)}}function pm(){if(!S&&(h||m)){if(typeof fetch=="function"&&!Dr(Yt))return fetch(Yt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Yt+"'";return Y.arrayBuffer()}).catch(function(){return xc(Yt)});if(A)return new Promise(function(Y,se){A(Yt,function(Ee){Y(new Uint8Array(Ee))},se)})}return Promise.resolve().then(function(){return xc(Yt)})}function cm(){var Y={env:fd,wasi_snapshot_preview1:fd};function se(Je,Ye){var Lt=Je.exports;s.asm=Lt,O=s.asm.memory,qe(O.buffer),dt=s.asm.__indirect_function_table,dn(s.asm.__wasm_call_ctors),Cl("wasm-instantiate")}hr("wasm-instantiate");function Ee(Je){se(Je.instance)}function et(Je){return pm().then(function(Ye){return WebAssembly.instantiate(Ye,Y)}).then(function(Ye){return Ye}).then(Je,function(Ye){$("failed to asynchronously prepare wasm: "+Ye),jn(Ye)})}function wt(){return!S&&typeof WebAssembly.instantiateStreaming=="function"&&!In(Yt)&&!Dr(Yt)&&!f&&typeof fetch=="function"?fetch(Yt,{credentials:"same-origin"}).then(function(Je){var Ye=WebAssembly.instantiateStreaming(Je,Y);return Ye.then(Ee,function(Lt){return $("wasm streaming compile failed: "+Lt),$("falling back to ArrayBuffer instantiation"),et(Ee)})}):et(Ee)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,se);return kt}catch(Je){$("Module.instantiateWasm callback failed with error: "+Je),o(Je)}return wt().catch(o),{}}var $x,Or;function Tl(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function mr(Y){for(;Y.length>0;)Y.shift()(s)}function hm(){jn("")}function Ac(){return 4294901760}function _s(){return Ac()}function mm(Y,se,Ee){ee.copyWithin(Y>>>0,se>>>0,se+Ee>>>0)}function bc(Y){try{return O.grow(Y-X.byteLength+65535>>>16),qe(O.buffer),1}catch(se){}}function Nl(Y){var se=ee.length;Y=Y>>>0;var Ee=Ac();if(Y>Ee)return!1;let et=(Lt,pn)=>Lt+(pn-Lt%pn)%pn;for(var wt=1;wt<=4;wt*=2){var kt=se*(1+.2/wt);kt=Math.min(kt,Y+100663296);var Je=Math.min(Ee,et(Math.max(Y,kt),65536)),Ye=bc(Je);if(Ye)return!0}return!1}var ma={varargs:void 0,get:function(){ma.varargs+=4;var Y=be[ma.varargs-4>>>2];return Y},getStr:function(Y){var se=H(Y);return se}};function vc(Y){return 52}function fm(Y,se,Ee,et,wt){return 70}var gm=[null,[],[]];function Px(Y,se){var Ee=gm[Y];se===0||se===10?((Y===1?M:$)(q(Ee,0)),Ee.length=0):Ee.push(se)}function _x(Y,se,Ee,et){for(var wt=0,kt=0;kt>>2],Ye=Ce[se+4>>>2];se+=8;for(var Lt=0;Lt>>0]);wt+=Ye}return Ce[et>>>2]=wt,0}function wc(Y){var se=s["_"+Y];return se}function Fs(Y,se){re.set(Y,se>>>0)}function ym(Y,se,Ee,et,wt){var kt={string:Oa=>{var Lr=0;if(Oa!=null&&Oa!==0){var Lc=(Oa.length<<2)+1;Lr=bd(Lc),Z(Oa,Lr,Lc)}return Lr},array:Oa=>{var Lr=bd(Oa.length);return Fs(Oa,Lr),Lr}};function Je(Oa){return se==="string"?H(Oa):se==="boolean"?!!Oa:Oa}var Ye=wc(Y),Lt=[],pn=0;if(et)for(var fr=0;frJe==="number"||Je==="boolean"),kt=se!=="string";return kt&&wt&&!et?wc(Y):function(){return ym(Y,se,Ee,arguments,et)}}var fd={abort:hm,emscripten_get_heap_max:_s,emscripten_memcpy_big:mm,emscripten_resize_heap:Nl,fd_close:vc,fd_seek:fm,fd_write:_x},Am=cm(),kc=s.___wasm_call_ctors=function(){return(kc=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Ic=s._init=function(){return(Ic=s._init=s.asm.init).apply(null,arguments)},bm=s._init_with_threads_count=function(){return(bm=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Sc=s._get_threads_count=function(){return(Sc=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},vm=s._register_tensor=function(){return(vm=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},We=s._dispose_data=function(){return(We=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},gd=s._dispose=function(){return(gd=s._dispose=s.asm.dispose).apply(null,arguments)},wm=s._Abs=function(){return(wm=s._Abs=s.asm.Abs).apply(null,arguments)},Cc=s._Acos=function(){return(Cc=s._Acos=s.asm.Acos).apply(null,arguments)},Rl=s._Acosh=function(){return(Rl=s._Acosh=s.asm.Acosh).apply(null,arguments)},km=s._Add=function(){return(km=s._Add=s.asm.Add).apply(null,arguments)},Im=s._AddN=function(){return(Im=s._AddN=s.asm.AddN).apply(null,arguments)},Sm=s._All=function(){return(Sm=s._All=s.asm.All).apply(null,arguments)},Cm=s._Any=function(){return(Cm=s._Any=s.asm.Any).apply(null,arguments)},Tm=s._ArgMax=function(){return(Tm=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},Tc=s._ArgMin=function(){return(Tc=s._ArgMin=s.asm.ArgMin).apply(null,arguments)},Nc=s._Asin=function(){return(Nc=s._Asin=s.asm.Asin).apply(null,arguments)},Nm=s._Asinh=function(){return(Nm=s._Asinh=s.asm.Asinh).apply(null,arguments)},Rm=s._Atan=function(){return(Rm=s._Atan=s.asm.Atan).apply(null,arguments)},Em=s._Atan2=function(){return(Em=s._Atan2=s.asm.Atan2).apply(null,arguments)},yd=s._Atanh=function(){return(yd=s._Atanh=s.asm.Atanh).apply(null,arguments)},Mm=s._AvgPool=function(){return(Mm=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},$m=s._AvgPool3D=function(){return($m=s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},Pm=s._AvgPool3DGrad=function(){return(Pm=s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},Ds=s._AvgPoolGrad=function(){return(Ds=s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},_m=s._BatchMatMul=function(){return(_m=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Fm=s._Bincount=function(){return(Fm=s._Bincount=s.asm.Bincount).apply(null,arguments)},Rc=s._BitwiseAnd=function(){return(Rc=s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},Dm=s._Ceil=function(){return(Dm=s._Ceil=s.asm.Ceil).apply(null,arguments)},xd=s._ClipByValue=function(){return(xd=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Om=s._Conv2D=function(){return(Om=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},zm=s._Conv2DBackpropInput=function(){return(zm=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Lm=s._Conv3D=function(){return(Lm=s._Conv3D=s.asm.Conv3D).apply(null,arguments)},zr=s._Conv3DBackpropFilterV2=function(){return(zr=s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Ad=s._Conv3DBackpropInputV2=function(){return(Ad=s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},Wm=s._Cos=function(){return(Wm=s._Cos=s.asm.Cos).apply(null,arguments)},Bm=s._Cosh=function(){return(Bm=s._Cosh=s.asm.Cosh).apply(null,arguments)},Vm=s._CropAndResize=function(){return(Vm=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Um=s._Cumprod=function(){return(Um=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Ec=s._Cumsum=function(){return(Ec=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Mc=s._DenseBincount=function(){return(Mc=s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},Gm=s._DepthToSpace=function(){return(Gm=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Hm=s._DepthwiseConv2dNative=function(){return(Hm=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},$c=s._Diag=function(){return($c=s._Diag=s.asm.Diag).apply(null,arguments)},Pc=s._Dilation2D=function(){return(Pc=s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},jm=s._Dilation2DBackpropFilter=function(){return(jm=s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},qm=s._Dilation2DBackpropInput=function(){return(qm=s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},Xm=s._Elu=function(){return(Xm=s._Elu=s.asm.Elu).apply(null,arguments)},Km=s._EluGrad=function(){return(Km=s._EluGrad=s.asm.EluGrad).apply(null,arguments)},_c=s._Equal=function(){return(_c=s._Equal=s.asm.Equal).apply(null,arguments)},Fx=s._Erf=function(){return(Fx=s._Erf=s.asm.Erf).apply(null,arguments)},Ym=s._Exp=function(){return(Ym=s._Exp=s.asm.Exp).apply(null,arguments)},Zm=s._Expm1=function(){return(Zm=s._Expm1=s.asm.Expm1).apply(null,arguments)},Jm=s._FlipLeftRight=function(){return(Jm=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},Qm=s._Floor=function(){return(Qm=s._Floor=s.asm.Floor).apply(null,arguments)},ef=s._FloorDiv=function(){return(ef=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},tf=s._FusedBatchNorm=function(){return(tf=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},af=s._FusedConv2D=function(){return(af=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},nf=s._FusedDepthwiseConv2D=function(){return(nf=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},rf=s._Gather=function(){return(rf=s._Gather=s.asm.Gather).apply(null,arguments)},sf=s._GatherNd=function(){return(sf=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},of=s._Greater=function(){return(of=s._Greater=s.asm.Greater).apply(null,arguments)},lf=s._GreaterEqual=function(){return(lf=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},uf=s._IsFinite=function(){return(uf=s._IsFinite=s.asm.IsFinite).apply(null,arguments)},df=s._IsInf=function(){return(df=s._IsInf=s.asm.IsInf).apply(null,arguments)},pf=s._IsNan=function(){return(pf=s._IsNan=s.asm.IsNan).apply(null,arguments)},cf=s._LRN=function(){return(cf=s._LRN=s.asm.LRN).apply(null,arguments)},hf=s._LRNGrad=function(){return(hf=s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},mf=s._LeakyRelu=function(){return(mf=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},ff=s._Less=function(){return(ff=s._Less=s.asm.Less).apply(null,arguments)},gf=s._LessEqual=function(){return(gf=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},yf=s._LinSpace=function(){return(yf=s._LinSpace=s.asm.LinSpace).apply(null,arguments)},xf=s._Log=function(){return(xf=s._Log=s.asm.Log).apply(null,arguments)},Af=s._Log1p=function(){return(Af=s._Log1p=s.asm.Log1p).apply(null,arguments)},bf=s._LogicalAnd=function(){return(bf=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},vf=s._LogicalNot=function(){return(vf=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},wf=s._LogicalOr=function(){return(wf=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},kf=s._LogicalXor=function(){return(kf=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},If=s._Max=function(){return(If=s._Max=s.asm.Max).apply(null,arguments)},Sf=s._MaxPool=function(){return(Sf=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Cf=s._MaxPool3D=function(){return(Cf=s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},Tf=s._MaxPool3DGrad=function(){return(Tf=s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},Nf=s._MaxPoolGrad=function(){return(Nf=s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},Rf=s._MaxPoolWithArgmax=function(){return(Rf=s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},Ef=s._Maximum=function(){return(Ef=s._Maximum=s.asm.Maximum).apply(null,arguments)},Mf=s._Mean=function(){return(Mf=s._Mean=s.asm.Mean).apply(null,arguments)},$f=s._Min=function(){return($f=s._Min=s.asm.Min).apply(null,arguments)},Pf=s._Minimum=function(){return(Pf=s._Minimum=s.asm.Minimum).apply(null,arguments)},_f=s._MirrorPad=function(){return(_f=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Ff=s._Mod=function(){return(Ff=s._Mod=s.asm.Mod).apply(null,arguments)},Df=s._Multinomial=function(){return(Df=s._Multinomial=s.asm.Multinomial).apply(null,arguments)},Of=s._Multiply=function(){return(Of=s._Multiply=s.asm.Multiply).apply(null,arguments)},zf=s._Neg=function(){return(zf=s._Neg=s.asm.Neg).apply(null,arguments)},Lf=s._NonMaxSuppressionV3=function(){return(Lf=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},Wf=s._NonMaxSuppressionV4=function(){return(Wf=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Bf=s._NonMaxSuppressionV5=function(){return(Bf=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Vf=s._NotEqual=function(){return(Vf=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Uf=s._OneHot=function(){return(Uf=s._OneHot=s.asm.OneHot).apply(null,arguments)},Gf=s._PadV2=function(){return(Gf=s._PadV2=s.asm.PadV2).apply(null,arguments)},Hf=s._Pow=function(){return(Hf=s._Pow=s.asm.Pow).apply(null,arguments)},jf=s._Prelu=function(){return(jf=s._Prelu=s.asm.Prelu).apply(null,arguments)},qf=s._Prod=function(){return(qf=s._Prod=s.asm.Prod).apply(null,arguments)},Xf=s._RealDiv=function(){return(Xf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Kf=s._Reciprocal=function(){return(Kf=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},Yf=s._Relu=function(){return(Yf=s._Relu=s.asm.Relu).apply(null,arguments)},Zf=s._Relu6=function(){return(Zf=s._Relu6=s.asm.Relu6).apply(null,arguments)},Jf=s._ResizeBilinear=function(){return(Jf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Qf=s._ResizeBilinearGrad=function(){return(Qf=s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},e2=s._ResizeNearestNeighbor=function(){return(e2=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},t2=s._ResizeNearestNeighborGrad=function(){return(t2=s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},a2=s._Reverse=function(){return(a2=s._Reverse=s.asm.Reverse).apply(null,arguments)},n2=s._RotateWithOffset=function(){return(n2=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},r2=s._Round=function(){return(r2=s._Round=s.asm.Round).apply(null,arguments)},s2=s._Rsqrt=function(){return(s2=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},i2=s._ScatterNd=function(){return(i2=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},o2=s._SearchSorted=function(){return(o2=s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},l2=s._SelectV2=function(){return(l2=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},u2=s._Selu=function(){return(u2=s._Selu=s.asm.Selu).apply(null,arguments)},d2=s._Sigmoid=function(){return(d2=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},p2=s._Sign=function(){return(p2=s._Sign=s.asm.Sign).apply(null,arguments)},c2=s._Sin=function(){return(c2=s._Sin=s.asm.Sin).apply(null,arguments)},h2=s._Sinh=function(){return(h2=s._Sinh=s.asm.Sinh).apply(null,arguments)},m2=s._Softmax=function(){return(m2=s._Softmax=s.asm.Softmax).apply(null,arguments)},f2=s._Softplus=function(){return(f2=s._Softplus=s.asm.Softplus).apply(null,arguments)},g2=s._SparseFillEmptyRows=function(){return(g2=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},y2=s._SparseReshape=function(){return(y2=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},x2=s._SparseSegmentReduction=function(){return(x2=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},A2=s._SparseToDense=function(){return(A2=s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},b2=s._Sqrt=function(){return(b2=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},v2=s._Square=function(){return(v2=s._Square=s.asm.Square).apply(null,arguments)},w2=s._SquaredDifference=function(){return(w2=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},k2=s._Step=function(){return(k2=s._Step=s.asm.Step).apply(null,arguments)},I2=s._StridedSlice=function(){return(I2=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},S2=s._Sub=function(){return(S2=s._Sub=s.asm.Sub).apply(null,arguments)},C2=s._Sum=function(){return(C2=s._Sum=s.asm.Sum).apply(null,arguments)},T2=s._Tan=function(){return(T2=s._Tan=s.asm.Tan).apply(null,arguments)},N2=s._Tanh=function(){return(N2=s._Tanh=s.asm.Tanh).apply(null,arguments)},R2=s._TensorScatterUpdate=function(){return(R2=s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},E2=s._Tile=function(){return(E2=s._Tile=s.asm.Tile).apply(null,arguments)},M2=s._TopK=function(){return(M2=s._TopK=s.asm.TopK).apply(null,arguments)},$2=s._Transform=function(){return($2=s._Transform=s.asm.Transform).apply(null,arguments)},P2=s._Transpose=function(){return(P2=s._Transpose=s.asm.Transpose).apply(null,arguments)},_2=s.__FusedMatMul=function(){return(_2=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},F2=s._malloc=function(){return(F2=s._malloc=s.asm.malloc).apply(null,arguments)},D2=s._free=function(){return(D2=s._free=s.asm.free).apply(null,arguments)},O2=s.___errno_location=function(){return(O2=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Fc=s.stackSave=function(){return(Fc=s.stackSave=s.asm.stackSave).apply(null,arguments)},Dc=s.stackRestore=function(){return(Dc=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},bd=s.stackAlloc=function(){return(bd=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},z2=s.dynCall_iijjiiii=function(){return(z2=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},L2=s.dynCall_jiji=function(){return(L2=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=xm;var El;ja=function Y(){El||Oc(),El||(ja=Y)};function Oc(Y){if(Y=Y||p,ht>0||(zt(),ht>0))return;function se(){El||(El=!0,s.calledRun=!0,!W&&(un(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),la()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),se()},1)):se()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Oc();var Ml;l&&(Ml={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!l.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!l.unhandledRejection.indexOf(Y)>-1})});var $l;if(typeof r!="undefined")$l=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")$l=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Ml){var W2=$l._dispose;$l._dispose=function(){W2(),Ml.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Ml.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=a:typeof define=="function"&&define.amd?define([],function(){return a}):typeof e=="object"&&(e.WasmBackendModule=a)}),ip=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}},ru=class{refCount(e){return Xa("refCount")}incRef(e){return Xa("incRef")}timerAvailable(){return!0}time(e){return Xa("time")}read(e){return Xa("read")}readSync(e){return Xa("readSync")}readToGPU(e,t){return Xa("readToGPU")}numDataIds(){return Xa("numDataIds")}disposeData(e,t){return Xa("disposeData")}write(e,t,a){return Xa("write")}move(e,t,a,n,r){return Xa("move")}createTensorFromGPUData(e,t,a){return Xa("createTensorFromGPUData")}memory(){return Xa("memory")}floatPrecision(){return Xa("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Xa("dispose")}};function Xa(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 gA(e){let t=e.length,a=0;for(;t>0;)a=Math.random()*t|0,t--,uh(e,t,a)}function sT(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let a=e.length,n=0;for(;a>0;)n=Math.random()*a|0,a--,uh(e,a,n),uh(t,a,n)}function zd(e,t,a){return Math.max(e,Math.min(t,a))}function iT(e){return e%2===0?e:e+1}function uh(e,t,a){let n=e[t];e[t]=e[a],e[a]=n}function oT(e){let t=0;for(let a=0;aa+` Shapes ${e} and ${t} must match`)}function ii(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function mt(e){if(e.length===0)return 1;let t=e[0];for(let a=1;a0,a,n){return new Promise((r,s)=>{let i=0,o=()=>{if(e()){r();return}i++;let l=t(i);if(a!=null&&i>=a){s();return}n!=null?n(o,l):setTimeout(o,l)};o()})}function fT(e,t){let a=1,n=-1;for(let s=0;s=0)a*=e[s];else if(e[s]===-1){if(n!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${n} and dim ${s}`);n=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(n===-1){if(t>0&&t!==a)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(a===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%a!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${a}`);let r=e.slice();return r[n]=t/a,r}function op(e,t){let a=t.length;return e=e==null?t.map((n,r)=>r):[].concat(e),F(e.every(n=>n>=-a&&n`All values in axis param must be in range [-${a}, ${a}) but got axis ${e}`),F(e.every(n=>Hl(n)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(n=>n<0?a+n:n)}function xA(e,t){let a=[],n=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:op(t,e).sort(),i=0;for(let o=0;oo)&&e[o]===1&&(a.push(e[o]),n.push(o)),s[i]<=o&&i++}e[o]!==1&&(a.push(e[o]),n.push(o))}return{newShape:a,keptDims:n}}function AA(e,t){return J1(e,t)}function J1(e,t){let a=null;if(e==null||e==="float32")a=new Float32Array(t);else if(e==="int32")a=new Int32Array(t);else if(e==="bool")a=new Uint8Array(t);else if(e==="string")a=new Array(t);else throw new Error(`Unknown data type ${e}`);return a}function bA(e,t){for(let a=0;at+=a.length),t}function Ur(e){return typeof e=="string"||e instanceof String}function kA(e){return typeof e=="boolean"}function IA(e){return typeof e=="number"}function lp(e){return Array.isArray(e)?lp(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":IA(e)?"float32":Ur(e)?"string":kA(e)?"bool":"float32"}function Kr(e){return!!(e&&e.constructor&&e.call&&e.apply)}function ph(e,t){for(let a=t;a=0;--n)a[n]=a[n+1]*e[n+1];return a}function SA(e,t,a,n=!1){let r=new Array;if(t.length===1){let s=t[0]*(n?2:1);for(let i=0;il*u)*(n?2:1);for(let l=0;lr*s)*(a?2:1);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${a?" for a complex tensor":""}.`);return SA(0,e,t,a)}function yT(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function Q1(e,t){let a=Eh(e,t);for(let n=0;nn*r,1);if(t==null||t==="float32")return Wl(e,new Float32Array(a));if(t==="int32")return Wl(e,new Int32Array(a));if(t==="bool")return Wl(e,new Uint8Array(a));throw new Error(`Unknown data type ${t}`)}function an(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function AT(e,t,a){if(t===0)return 0;if(t===1)return e[0];let n=e[e.length-1];for(let r=0;r{let[a,n]=t.split(":");this.urlFlags[a]=kT(a,n)})}};function vT(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(a,...n)=>(wT(t,n[0],n[1]),n.join("="))),t}function wT(e,t,a){e[decodeURIComponent(t)]=decodeURIComponent(a||"")}function kT(e,t){let a=t.toLowerCase();return a==="true"||a==="false"?a==="true":`${+a}`===a?+a:t}function B(){return eg}var eg=null;function IT(e){eg=e}var H2;function TA(){if(H2==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");H2=e}return H2}function ST(){let e=TA();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function tg(e,t){let a=ST();if(a.has(e))return a.get(e);{let n=t();return a.set(e,n),a.get(e)}}var iu="Abs",oi="Acos",li="Acosh",os="Add",ui="AddN",di="All",pi="Any",ou="ArgMax",lu="ArgMin",ci="Asin",hi="Asinh",mi="Atan",fi="Atanh",gi="Atan2",yi="AvgPool",up="AvgPoolGrad",uu="AvgPool3D",dp="AvgPool3DGrad",xi="BatchMatMul",du="BatchToSpaceND",Ai="Bincount",pu="BitwiseAnd",CT="BroadcastTo",cu="BroadcastArgs",bi="Cast",vi="Ceil",ls="ClipByValue",pp="Complex",cp="ComplexAbs",hu="Concat",wi="Conv2D",hp="Conv2DBackpropFilter",ki="Conv2DBackpropInput",Ii="Conv3D",mu="Conv3DBackpropFilterV2",Si="Conv3DBackpropInputV2",Ci="Cos",Ti="Cosh",Ni="Cumprod",Ri="Cumsum",Ei="CropAndResize",fu="DenseBincount",Mi="DepthToSpace",$i="DepthwiseConv2dNative",mp="DepthwiseConv2dNativeBackpropFilter",fp="DepthwiseConv2dNativeBackpropInput",gu="Diag",Pi="Dilation2D",jl="Dilation2DBackpropInput",ql="Dilation2DBackpropFilter",gp="Draw",_i="RealDiv",yp="Einsum",Fi="Elu",yu="EluGrad",Di="Erf",Oi="Equal",zi="Exp",xu="ExpandDims",Li="Expm1",xp="FFT",Au="Fill",Wi="FlipLeftRight",Bi="Floor",Vi="FloorDiv",Ui="FusedBatchNorm",bu="GatherV2",Gi="GatherNd",Hi="Greater",ji="GreaterEqual",qi="Identity",Ap="IFFT",bp="Imag",Xi="IsFinite",Ki="IsInf",Yi="IsNan",Zi="LeakyRelu",Ji="Less",Qi="LessEqual",eo="LinSpace",to="Log",ao="Log1p",no="LogicalAnd",ro="LogicalNot",so="LogicalOr",NA="LogicalXor",TT="LogSoftmax",NT="LowerBound",io="LRN",vu="LRNGrad",RT="MatrixBandPart",oo="Max",lo="Maximum",uo="MaxPool",vp="MaxPoolGrad",wu="MaxPool3D",wp="MaxPool3DGrad",ku="MaxPoolWithArgmax",po="Mean",co="Min",ho="Minimum",mo="MirrorPad",fo="Mod",go="Multinomial",yo="Multiply",Iu="Neg",xo="NotEqual",Ao="NonMaxSuppressionV3",Su="NonMaxSuppressionV4",bo="NonMaxSuppressionV5",Cu="OnesLike",vo="OneHot",Tu="Pack",wo="PadV2",ET="Pool",ko="Pow",Io="Prelu",So="Prod",$h="RaggedGather",Ph="RaggedRange",_h="RaggedTensorToTensor",Nu="Range",kp="Real",Co="Reciprocal",To="Relu",Ru="Reshape",No="ResizeNearestNeighbor",Eu="ResizeNearestNeighborGrad",Ro="ResizeBilinear",Mu="ResizeBilinearGrad",Eo="Relu6",Mo="Reverse",$o="Round",Po="Rsqrt",_o="ScatterNd",Fo="TensorScatterUpdate",Do="SearchSorted",$u="Select",Oo="Selu",Pu="Slice",zo="Sin",Lo="Sinh",Wo="Sign",Bo="Sigmoid",Vo="Softplus",Uo="Sqrt",Go="Sum",_u="SpaceToBatchND",Fu="SplitV",Ho="Softmax",Ip="SparseFillEmptyRows",Du="SparseReshape",Ou="SparseSegmentMean",zu="SparseSegmentSum",jo="SparseToDense",qo="SquaredDifference",Sp="Square",Cp="StaticRegexReplace",Xo="StridedSlice",Lu="StringNGrams",Tp="StringSplit",Np="StringToHashBucketFast",Ko="Sub",Yo="Tan",Zo="Tanh",us="Tile",Jo="TopK",Qo="Transform",wr="Transpose",Rp="Unique",Wu="Unpack",Ep="UnsortedSegmentSum",MT="UpperBound",Bu="ZerosLike",ds="Step",Ld="FromPixels",el="RotateWithOffset",Yr="_FusedMatMul",Zr="FusedConv2D",Jr="FusedDepthwiseConv2D";function Vr(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.warn(...e)}function $T(...e){B().getBool("IS_TEST")||B().getBool("PROD")||console.log(...e)}var Xl=tg("kernelRegistry",()=>new Map),Wd=tg("gradRegistry",()=>new Map);function Bd(e,t){let a=ag(e,t);return Xl.get(a)}function t1(e){return Wd.get(e)}function Jn(e){let t=Xl.entries(),a=[];for(;;){let{done:n,value:r}=t.next();if(n)break;let[s,i]=r,[o]=s.split("_");o===e&&a.push(i)}return a}function xn(e){let{kernelName:t,backendName:a}=e,n=ag(t,a);Xl.has(n)&&Vr(`The kernel '${t}' for backend '${a}' is already registered`),Xl.set(n,e)}function PT(e){let{kernelName:t}=e;Wd.has(t)&&B().getBool("DEBUG")&&Vr(`Overriding the gradient for '${t}'`),Wd.set(t,e)}function _T(e,t){let a=ag(e,t);if(!Xl.has(a))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Xl.delete(a)}function FT(e){if(!Wd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Wd.delete(e)}function DT(e,t){Jn(e).forEach(a=>{let n=Object.assign({},a,{backendName:t});xn(n)})}function ag(e,t){return`${t}_${e}`}var v={};Ze(v,{arraysEqual:()=>Cr,arraysEqualWithNull:()=>yA,assert:()=>F,assertNonNegativeIntegerDimensions:()=>an,assertNonNull:()=>ii,assertShapesMatch:()=>Ta,bytesFromStringArray:()=>wA,bytesPerElement:()=>dh,checkConversionForErrors:()=>bA,clamp:()=>zd,computeStrides:()=>su,convertBackendValuesAndArrayBuffer:()=>yT,createScalarValue:()=>VT,createShuffledIndices:()=>hT,decodeString:()=>ch,distSquared:()=>uT,encodeString:()=>$p,fetch:()=>GT,fingerPrint64:()=>BT,flatten:()=>Qr,getArrayFromDType:()=>J1,getTypedArrayFromDType:()=>AA,hasEncodingLoss:()=>gT,hexToLong:()=>Mp,indexToLoc:()=>bT,inferDtype:()=>lp,inferFromImplicitShape:()=>fT,isBoolean:()=>kA,isFunction:()=>Kr,isInt:()=>Hl,isNumber:()=>IA,isPromise:()=>Mh,isScalarShape:()=>dT,isString:()=>Ur,isTypedArray:()=>Jt,isValidDtype:()=>vA,locToIndex:()=>AT,makeOnesTypedArray:()=>Q1,makeZerosNestedTypedArray:()=>xT,makeZerosTypedArray:()=>Eh,nearestDivisor:()=>ph,nearestLargerEven:()=>iT,now:()=>Vd,parseAxisParam:()=>op,randUniform:()=>lT,repeatedTry:()=>mT,rightPad:()=>_d,shuffle:()=>gA,shuffleCombo:()=>sT,sizeFromShape:()=>mt,sizeToSquarishShape:()=>cT,squeezeShape:()=>xA,sum:()=>oT,swap:()=>uh,tanh:()=>pT,toNestedArray:()=>Wl,toTypedArray:()=>Fh});function RA(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var jx=nu(VC()),Bs=jx.default||jx;function Mp(e){return Bs.fromString(e,!0,16)}var EA=Mp("c3a5c85c97cb3127"),Ls=Mp("b492b66fbe98f273"),va=Mp("9ae16a3b2f90404f");function a1(e){return e.xor(e.shru(47))}function MA(e,t,a){let n=e.slice(t,t+a);return Bs.fromBytes(Array.from(n),!0,!0)}function At(e,t){return MA(e,t,8)}function qx(e,t){return MA(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function qr(e,t,a=Mp("9ddfea08eb382d69")){let n=e.xor(t).mul(a);n=n.xor(n.shru(47));let r=t.xor(n).mul(a);return r=r.xor(r.shru(47)),r=r.mul(a),r}function OT(e,t,a,n,r,s){r=r.add(e),s=Zt(s.add(r).add(n),21);let i=r;return r=r.add(t),r=r.add(a),s=s.add(Zt(r,44)),[r.add(n),s.add(i)]}function qc(e,t,a,n){return OT(At(e,t),At(e,t+8),At(e,t+16),At(e,t+24),a,n)}function zT(e,t=e.length){if(t>=8){let a=va.add(t*2),n=At(e,0).add(va),r=At(e,t-8),s=Zt(r,37).mul(a).add(n),i=Zt(n,25).add(r).mul(a);return qr(s,i,a)}if(t>=4){let a=va.add(t*2),n=qx(e,0);return qr(n.shl(3).add(t),qx(e,t-4),a)}if(t>0){let a=e[0],n=e[t>>1],r=e[t-1],s=a+(n<<8),i=t+(r<<2);return a1(va.mul(s).xor(EA.mul(i))).mul(va)}return va}function LT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(Ls),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va);return qr(Zt(n.add(r),43).add(Zt(s,30)).add(i),n.add(Zt(r.add(va),18)).add(s),a)}function WT(e,t=e.length){let a=va.add(t*2),n=At(e,0).mul(va),r=At(e,8),s=At(e,t-8).mul(a),i=At(e,t-16).mul(va),o=Zt(n.add(r),43).add(Zt(s,30)).add(i),l=qr(o,n.add(Zt(r.add(va),18)).add(s),a),u=At(e,16).mul(a),p=At(e,24),c=o.add(At(e,t-32)).mul(a),d=l.add(At(e,t-24)).mul(a);return qr(Zt(u.add(p),43).add(Zt(c,30)).add(d),u.add(Zt(p.add(n),18)).add(c),a)}function BT(e,t=e.length){let a=Bs.fromNumber(81,!0);if(t<=32)return t<=16?zT(e,t):LT(e,t);if(t<=64)return WT(e,t);let n=a,r=a.mul(Ls).add(113),s=a1(r.mul(va).add(113)).mul(va),i=[Bs.UZERO,Bs.UZERO],o=[Bs.UZERO,Bs.UZERO];n=n.mul(va).add(At(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(Ls),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(Ls),n=n.xor(o[1]),r=r.add(i[0]).add(At(e,l+40)),s=Zt(s.add(o[0]),33).mul(Ls),i=qc(e,l,i[1].mul(Ls),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],l+=64;while(l!==u);let c=Ls.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),n=Zt(n.add(r).add(i[0]).add(At(e,l+8)),37).mul(c),r=Zt(r.add(i[1]).add(At(e,l+48)),42).mul(c),n=n.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(At(e,l+40))),s=Zt(s.add(o[0]),33).mul(c),i=qc(e,l,i[1].mul(c),n.add(o[0])),o=qc(e,l+32,s.add(o[1]),r.add(At(e,l+16))),[s,n]=[n,s],qr(qr(i[0],o[0],c).add(a1(r).mul(EA)).add(s),qr(i[1],o[1],c).add(n),c)}function VT(e,t){return t==="string"?$p(e):Fh([e],t)}function UT(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Fh(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Qr(e)),B().getBool("DEBUG")&&bA(e,t),UT(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 a=new Uint8Array(e.length);for(let n=0;n{n=a()},s,i=Vd();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of n)o.dataSync();s=Promise.resolve({kernelMs:Vd()-i})}if(B().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{jT(u,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:a,timeMs:n,inputs:r,extraInfo:s}=e;a.forEach(i=>{Promise.all([i.data(),n,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function jT(e,t,a){if(t!=="float32")return!1;for(let n=0;n0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${c} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function XT(e,t,a){let n={},r={};for(let l=0;ln[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[a.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let c=0;c=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):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 u=a(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!Cr(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let c=e[p.id];e[p.id]=n(c,u),c.dispose()}}}}var Xx=20,wd=3,j2=7;function YT(e,t,a,n){let r=su(t),s=ZT(e,t,a,r),i=t.length,o=eh(e,t,a,r,s),l=["Tensor"];return n&&(l.push(` dtype: ${a}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(` `)),l.join(` -`)}function LN(e,t,a,n){let r=mt(t),s=n[n.length-1],i=new Array(s).fill(0),o=t.length,l=a==="complex64"?Md(e):e;if(o>1)for(let u=0;ui5){let f=Nd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-Nd)*i,o*i));return a==="complex64"&&(g=Md(g),y=Md(y)),["["+g.map((x,A)=>Ed(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>Ed(x,r[o-Nd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?Md(e):Array.from(e)).map((f,g)=>Ed(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),d=n.slice(1),c=n[0]*i,p=[];if(o>i5){for(let f=0;f0?p[0]+h:"");for(let f=1;f1)for(let u=0;uXx){let f=wd*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-wd)*i,o*i));return a==="complex64"&&(g=Sd(g),y=Sd(y)),["["+g.map((x,A)=>Id(x,r[A],a)).join(", ")+", ..., "+y.map((x,A)=>Id(x,r[o-wd+A],a)).join(", ")+"]"]}return["["+(a==="complex64"?Sd(e):Array.from(e)).map((f,g)=>Id(f,r[g],a)).join(", ")+"]"]}let u=t.slice(1),p=n.slice(1),c=n[0]*i,d=[];if(o>Xx){for(let f=0;f0?d[0]+h:"");for(let f=1;f`Length of values '${n}' 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=a||ig(t,this.size),this.strides=pu(e)}set(e,...t){t.length===0&&(t=[0]),P(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let a=this.locToIndex(t);this.values[a]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let a=e[e.length-1];for(let n=0;nxh(a))}catch(a){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Wn().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Wn().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>xh(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 Wn().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Wn().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Gl.print(this,e)}clone(){return this.throwIfDisposed(),Gl.clone(this)}toString(e=!1){let t=this.dataSync();return zN(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Gl.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),Wn().makeVariable(this,e,t,a)}};Object.defineProperty(yt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function YA(){return ug("Tensor",()=>yt)}YA();var Yd=class extends yt{constructor(e,t,a,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=a}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(!Er(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Wn().disposeTensor(this),this.dataId=e.dataId,Wn().incRef(this,null)}dispose(){Wn().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Yd,Symbol.hasInstance,{value:e=>e instanceof yt&&e.assign!=null&&e.assign instanceof Function});var ZA={};Ke(ZA,{assertTypesMatch:()=>eb,getTensorsInContainer:()=>pg,isTensorInList:()=>HN,makeTypesMatch:()=>Et});var u1;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(u1||(u1={}));var d1;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(d1||(d1={}));var p1;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(p1||(p1={}));var c1;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(c1||(c1={}));var h1;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(h1||(h1={}));var GN={float32:c1,int32:d1,bool:p1,complex64:h1};function Qt(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return GN[e][t]}function Lp(e){return Qt(e,"int32")}function JA(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function QA(e){return typeof GPUBuffer!="undefined"&&e!=null&&typeof e=="object"&&"buffer"in e&&e.buffer instanceof GPUBuffer}function Et(e,t){if(e.dtype===t.dtype)return[e,t];let a=Qt(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function eb(e,t){P(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function HN(e,t){return t.some(a=>a.id===e.id)}function pg(e){let t=[];return tb(e,t,new Set),t}function tb(e,t,a){if(e==null)return;if(e instanceof yt){t.push(e);return}if(!jN(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),tb(s,t,a))}}function jN(e){return Array.isArray(e)||typeof e=="object"}function Q2(e){return e.kernelName!=null}var o5=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()}},cg=class m1{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new o5}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let a=0;a{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){tr(t).forEach(a=>{a.disposeFunc!=null&&a.disposeFunc(this.registry[t])})}initializeBackend(t){let a=this.registryFactory[t];if(a==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=a.factory();if(n&&!(n instanceof du)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(i=>r(rthis.registryFactory[a].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let a=0;athis.startScope(n),()=>this.endScope(r),()=>(r=a(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(t,a,n){t();try{let r=n();return a(),r}catch(r){throw a(),r}}nextTensorId(){return m1.nextTensorId++}nextVariableId(){return m1.nextVariableId++}clone(t){let a=L.runKernel(ho,{x:t}),n={x:t},r=i=>({x:()=>{let o="float32",l={x:i},u={dtype:o};return L.runKernel(qi,l,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[a],r,s,{}),a}runKernel(t,a,n){if(this.backendName==null&&this.backend,Xd(t,this.backendName)==null)throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:a,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,a,n){let r=this.backend.numDataIds(),s=0;n.forEach(l=>{s+=l.dtype==="complex64"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=r-a-s-i;if(o>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${o} data ids) after running '${t}'`)}runKernelFunc(t){let a,n=[],r=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let o;this.backendName==null&&this.backend;let l,u=Q2(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Q2(t)){let{kernelName:m,inputs:f,attrs:g}=t;this.backendName==null&&this.backend;let y=Xd(m,this.backendName);P(y!=null,()=>`Cannot find registered kernel '${m}' for backend '${this.backendName}'`),o=()=>{let x=this.backend.numDataIds();l=y.kernelFunc({inputs:f,attrs:g,backend:this.backend});let A=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(m,x,A);let b=A.map(w=>w.rank!=null?w:this.makeTensorFromTensorInfo(w));if(r){let w=this.getTensorsForGradient(m,f,b);n=this.saveTensorsForBackwardMode(w)}return b}}else{let{forwardFunc:m}=t,f=g=>{r&&(n=g.map(y=>this.keep(this.clone(y))))};o=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>m(this.backend,f));let y=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:d,attrs:c}=t,p=Q2(t)?null:t.backwardsFunc,h;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?a=o():(h=this.profiler.profileKernel(u,d,()=>o()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(h),a=h.outputs)}),r&&this.addTapeNode(u,d,a,p,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(d).map(m=>d[m]!=null?d[m].shape:null),outputShapes:a.map(m=>m.shape),kernelTimeMs:h.timeMs,extraInfo:h.extraInfo}),Array.isArray(l)?a:a[0]}saveTensorsForBackwardMode(t){return t.map(a=>this.keep(this.clone(a)))}getTensorsForGradient(t,a,n){let r=o1(t);if(r!=null){let s=r.inputsToSave||[],i=r.outputsToSave||[],o;r.saveAllInputs?(P(Array.isArray(a),()=>"saveAllInputs is true, expected inputs to be an array."),o=Object.keys(a).map(u=>a[u])):o=s.map(u=>a[u]);let l=n.filter((u,d)=>i[d]);return o.concat(l)}return[]}makeTensor(t,a,n,r){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=t;n==="string"&&Xr(t[0])&&(s=t.map(l=>zp(l)));let i=r.write(s,a,n),o=new yt(a,n,i,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let l=this.state.tensorInfo.get(i),u=LA(s);this.state.numBytes+=u-l.bytes,l.bytes=u}return o}makeTensorFromDataId(t,a,n,r){n=n||"float32";let s={dataId:t,shape:a,dtype:n};return this.makeTensorFromTensorInfo(s,r)}makeTensorFromTensorInfo(t,a){let{dataId:n,shape:r,dtype:s}=t,i=new yt(r,s,n,this.nextTensorId());return this.trackTensor(i,a),i}makeVariable(t,a=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==t.dtype&&(t=t.cast(r));let s=new Yd(t,a,n,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(t,a){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let n=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(n=t.size*gh(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:a||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Yd||this.track(t)}incRef(t,a){this.trackTensor(t,a),this.backend.incRef(t.dataId)}removeDataId(t,a){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===a&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let a=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=a.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let n=t.size*gh(t.dtype);this.state.numBytes-=n}a.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,a.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let a=this.state.registeredVariables[t];this.disposeVariable(a)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let a=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),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-a,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(t,a,n,r,s,i){let o={id:this.state.nextTapeNodeId++,kernelName:t,inputs:a,outputs:n,saved:s},l=o1(t);l!=null&&(r=l.gradFunc),r!=null&&(o.gradient=u=>(u=u.map((d,c)=>{if(d==null){let p=n[c],h=Oh(p.size,p.dtype);return this.makeTensor(h,p.shape,p.dtype)}return d}),r(u.length>1?u:u[0],s,i))),this.state.activeTape.push(o)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let a={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(a.name=t),this.state.scopeStack.push(a),this.state.activeScope=a}endScope(t){let a=pg(t),n=new Set(a.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(t,a,n,r=!1){if(P(a.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 s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));P(s instanceof yt,()=>"The result y returned by f() must be a tensor.");let i=_N(this.state.activeTape,a,s);if(!r&&i.length===0&&a.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 o={};o[s.id]=n==null?qN(s.shape):n,ON(o,i,u=>this.tidy(u),XN);let l=a.map(u=>o[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let d of u.saved)d.dispose()}),this.state.activeTape=null),{value:s,grads:l}})}customGrad(t){return P(es(t),()=>"The f passed in customGrad(f) must be a function."),(...a)=>{P(a.every(o=>o instanceof yt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};a.forEach((o,l)=>{r[l]=o});let s=(o,l)=>(n=t(...a,l),P(n.value instanceof yt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),P(es(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),i=(o,l)=>{let u=n.gradFunc(o,l),d=Array.isArray(u)?u:[u];P(d.length===a.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(...)."),P(d.every(p=>p instanceof yt),()=>"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 c={};return d.forEach((p,h)=>{c[h]=()=>p}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:r})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,a){return this.state.tensorInfo.get(t).backend.readToGPU(t,a)}async time(t){let a=Kd(),n=await this.backend.time(t);return n.wallMs=Kd()-a,n}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new o5;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};cg.nextTensorId=0;cg.nextVariableId=0;function qN(e){let t=og(mt(e),"float32");return L.makeTensor(t,e,"float32")}function ab(){let e=GA();if(e._tfengine==null){let t=new UA(e);e._tfengine=new cg(t)}return cN(e._tfengine.ENV),BN(()=>e._tfengine),e._tfengine}var L=ab();function XN(e,t){let a={a:e,b:t};return L.runKernel(Mr,a)}var Wp={};Ke(Wp,{isBrowser:()=>nb,isMobile:()=>ZN,mockIsMobile:()=>YN});function KN(){return typeof navigator!="undefined"&&navigator!=null}var f1;function YN(e){f1=e}function ZN(e){if(f1!==void 0)return f1;if(e||KN()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let a=e;return a.userAgentData&&a.userAgentData.mobile}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(t)||/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(t.substr(0,4))}return!1}function nb(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ba=B();Ba.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.")});Ba.registerFlag("IS_BROWSER",()=>nb());Ba.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ba.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ba.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Ba.registerFlag("PROD",()=>!1);Ba.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ba.getBool("DEBUG"));Ba.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ba.registerFlag("IS_TEST",()=>!1);Ba.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Ba.getBool("DEBUG"));Ba.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ba.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ba.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function ar(e,t){let a=e;if(Jt(e))return t==="string"?[]:[e.length];if(JA(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if(QA(e))return[e.buffer.size/(t==null?4:gh(t))];if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||Jt(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&B().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&rb(e,n,[]),n}function rb(e,t,a){if(a=a||[],!Array.isArray(e)&&!Jt(e)){P(t.length===0,()=>`Element arr[${a.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}P(t.length>0,()=>`Element arr[${a.join("][")}] should be a primitive, but is an array of ${e.length} elements`),P(e.length===t[0],()=>`Element arr[${a.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let n=t.slice(1);for(let r=0;r=0&&(r=n),l5(n,r,t,a),e==null||!Jt(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 '${a}' must be a Tensor or TensorLike, but got '${o}'`)}let s=ar(e,r);!Jt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Vh(e,r):rs(e,[],!0);return L.makeTensor(i,s,r)}function Zd(e,t,a,n="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${a} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>R(r,`${t}[${s}]`,a,n))}var hg="__op";function z(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 a=t[0],n=e[a];a.endsWith("_")&&(a=a.substring(0,a.length-1)),a=a+hg;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return zh(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function JN(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Ca(a.shape,n.shape,`real and imag shapes, ${a.shape} and ${n.shape}, must match in call to tf.complex().`);let r={real:a,imag:n};return L.runKernel(xp,r)}var Rr=z({complex_:JN});function Ps(e,t,a,n){if(n==null)n=fp(e);else if(n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(QA(e)||JA(e)){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return L.backend.createTensorFromGPUData(e,t||a,n)}if(!Jt(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){nn(t);let r=mt(t),s=mt(a);P(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${a}) does not match the provided shape (${t}). `)}}return!Jt(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?Vh(e,n):rs(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=ar(e,a);return Ps(e,t,n,a)}var vi={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Fr=class sb{static join(t){return new sb(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(n=>Jt(n)?n.buffer:n),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let a=0;for(let n=0;n=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function a(r){return t=r.end?1:0}if(a(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let n=QN(this.shards,a);return n===-1?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function QN(e,t){let a=0,n=e.length;for(;a<=n;){let r=Math.floor((n-a)/2)+a,s=t(e[r]);if(s===0)return r;s<0?n=r:a=r+1}return-1}function mg(){B().set("PROD",!0)}function eR(){B().set("DEBUG",!0)}function tR(){B().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function fg(e){B().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}UN(fg);function aR(){L.disposeVariables()}function St(){return L}function nR(){return L.memory()}function rR(e){return L.profile(e)}function Pe(e,t){return L.tidy(e,t)}function J(e){pg(e).forEach(t=>t.dispose())}function Bn(e){return L.keep(e)}function sR(e){return L.time(e)}function Bp(e){return L.setBackend(e)}function Vp(){return L.ready()}function ea(){return L.backendName}function iR(e){L.removeBackend(e)}function gg(e){return L.findBackend(e)}function oR(e){return L.findBackendFactory(e)}function ll(e,t,a=1){return L.registerBackend(e,t,a)}function Gn(){return L.backend}function lR(e,t){B().setPlatform(e,t)}var ss=4;async function uR(e,t){let a=[],n=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let p=await l.bytes(),h=p.reduce((g,y)=>g+y.length,0)+ss*p.length,m=new Uint8Array(h),f=0;for(let g=0;ga.slice(r+o,r+l));n[s.name]=ob(s,a.slice(r,r+i)),r+=i}return n}function dR(e,t){let a=mt(e.shape),n;if("quantization"in e){let r=e.quantization;n=vi[r.dtype]}else if(e.dtype==="string"){let r=0;for(let s=0;s(r=await u5(n,r,d),r.slice(u,d)));r=await u5(n,r,i);let o=r.slice(0,i);r=r.slice(i);let l=ob(s,o);if(a[s.name]=l,ea()==="webgpu"){let u=Gn();"uploadToGPU"in u&&mt(l.shape)>=B().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(l.dataId)}}return a}function cR(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,a=[];e.forEach(s=>{if(t+=s.byteLength,a.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 n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var yg=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function d5(e){return yg?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function hR(e){if(yg)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{let n=a<<13,r=0;for(;!(n&8388608);)r-=8388608,n<<=1;return n&=-8388609,r+=947912704,n|r},t=new Uint32Array(2048);t[0]=0;for(let a=1;a<1024;a++)t[a]=e(a);for(let a=1024;a<2048;a++)t[a]=939524096+(a-1024<<13);return t}function yR(){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 xR(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function AR(){let e=gR(),t=yR(),a=xR();return n=>{let r=new ArrayBuffer(4*n.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var xn=class zn{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return zn.instance==null&&(zn.instance=new zn),zn.instance}static registerSaveRouter(t){zn.getInstance().saveRouters.push(t)}static registerLoadRouter(t){zn.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return zn.getHandlers(t,"save")}static getLoadHandlers(t,a){return zn.getHandlers(t,"load",a)}static getHandlers(t,a,n){let r=[];return(a==="load"?zn.getInstance().loadRouters:zn.getInstance().saveRouters).forEach(s=>{let i=s(t,n);i!==null&&r.push(i)}),r}},bR=e=>xn.registerSaveRouter(e),vR=e=>xn.registerLoadRouter(e),wR=e=>xn.getSaveHandlers(e),kR=(e,t)=>xn.getLoadHandlers(e,t),y1="tensorflowjs",x1=1,yi="models_store",Kr="model_info_store";function pb(){if(!B().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 A1(e){let t=e.result;t.createObjectStore(yi,{keyPath:"modelPath"}),t.createObjectStore(Kr,{keyPath:"modelPath"})}var wi=class{constructor(e){if(this.indexedDB=pb(),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((a,n)=>{let r=this.indexedDB.open(y1,x1);r.onupgradeneeded=()=>A1(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(yi,"readonly"),o=i.objectStore(yi).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));a(o.result.modelArtifacts)},o.onerror=l=>(s.close(),n(o.error)),i.oncomplete=()=>s.close()}else{t.weightData=Fr.join(t.weightData);let i=Up(t),o=s.transaction(Kr,"readwrite"),l=o.objectStore(Kr),u;try{u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(c){return n(c)}let d;u.onsuccess=()=>{d=s.transaction(yi,"readwrite");let c=d.objectStore(yi),p;try{p=c.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(h){return n(h)}p.onsuccess=()=>a({modelArtifactsInfo:i}),p.onerror=h=>{l=o.objectStore(Kr);let m=l.delete(this.modelPath);m.onsuccess=()=>(s.close(),n(p.error)),m.onerror=f=>(s.close(),n(p.error))}},u.onerror=c=>(s.close(),n(u.error)),o.oncomplete=()=>{d==null?s.close():d.oncomplete=()=>s.close()}}},r.onerror=s=>n(r.error)})}};wi.URL_SCHEME="indexeddb://";var cb=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(wi.URL_SCHEME)?IR(e.slice(wi.URL_SCHEME.length)):null;xn.registerSaveRouter(cb);xn.registerLoadRouter(cb);function IR(e){return new wi(e)}function SR(e){return e.startsWith(wi.URL_SCHEME)?e.slice(wi.URL_SCHEME.length):e}var TR=class{constructor(){this.indexedDB=pb()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(y1,x1);a.onupgradeneeded=()=>A1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Kr,"readonly"),s=r.objectStore(Kr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(n.close(),t(s.error)),r.oncomplete=()=>n.close()},a.onerror=n=>t(a.error)})}async removeModel(e){return e=SR(e),new Promise((t,a)=>{let n=this.indexedDB.open(y1,x1);n.onupgradeneeded=()=>A1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Kr,"readwrite"),i=s.objectStore(Kr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),a(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),d=()=>{l=r.transaction(yi,"readwrite");let c=l.objectStore(yi).delete(e);c.onsuccess=()=>t(o.result.modelArtifactsInfo),c.onerror=p=>a(o.error)};u.onsuccess=d,u.onerror=c=>(d(),r.close(),a(o.error))}},o.onerror=u=>(r.close(),a(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},n.onerror=r=>a(n.error)})}},Sr="/",Hl="tensorflowjs_models",hb="info",CR="model_topology",NR="weight_specs",RR="weight_data",ER="model_metadata";function mb(e){return{info:[Hl,e,hb].join(Sr),topology:[Hl,e,CR].join(Sr),weightSpecs:[Hl,e,NR].join(Sr),weightData:[Hl,e,RR].join(Sr),modelMetadata:[Hl,e,ER].join(Sr)}}function fb(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function MR(e){let t=e.split(Sr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Sr)}function FR(e){return e.startsWith(ki.URL_SCHEME)?e.slice(ki.URL_SCHEME.length):e}var ki=class{constructor(e){if(!B().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=mb(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),a=JSON.stringify(e.weightSpecs),n=Up(e),r=Fr.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,a),this.LS.setItem(this.keys.weightData,hR(r));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw fb(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},a=JSON.parse(this.LS.getItem(this.keys.topology));if(a==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=a;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}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=mR(s),t}};ki.URL_SCHEME="localstorage://";var gb=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ki.URL_SCHEME)?$R(e.slice(ki.URL_SCHEME.length)):null;xn.registerSaveRouter(gb);xn.registerLoadRouter(gb);function $R(e){return new ki(e)}var DR=class{constructor(){P(B().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),P(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Hl+Sr,a=Sr+hb;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(Xl)&&(t=t.slice(0,t.indexOf(Xl))),P(t.length>0,()=>"scheme must not be an empty string.");let n=Hr.getInstance();P(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=a}static getManager(t){let a=Hr.getInstance().managers[t];if(a==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return a}static getSchemes(){return Object.keys(Hr.getInstance().managers)}};function oh(e){if(e.indexOf(Xl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${is.getSchemes().join(",")}`);return{scheme:e.split(Xl)[0],path:e.split(Xl)[1]}}async function yb(e,t,a=!1){P(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=xn.getLoadHandlers(e);P(n.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),P(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${e}.`);let r=n[0],s=xn.getSaveHandlers(t);P(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),P(s.length<2,()=>`Copying failed because more than one (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],o=oh(e).scheme,l=oh(e).path,u=o===oh(e).scheme,d=await r.load();a&&u&&await is.getManager(o).removeModel(l);let c=await i.save(d);return a&&!u&&await is.getManager(o).removeModel(l),c.modelArtifactsInfo}async function PR(){let e=is.getSchemes(),t={};for(let a of e){let n=await is.getManager(a).listModels();for(let r in n){let s=a+Xl+r;t[s]=n[r]}}return t}async function _R(e){let t=oh(e);return is.getManager(t.scheme).removeModel(t.path)}async function OR(e,t){return yb(e,t,!1)}async function zR(e,t){return yb(e,t,!0)}var LR=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!B().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",a=>{if(a.source===window&&a.data.name===this.messageName){a.stopPropagation();let n=this.functionRefs[a.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return jA(e)}};if(B().get("IS_BROWSER")){B().setPlatform("browser",new LR);try{is.registerManager(ki.URL_SCHEME,new DR)}catch(e){}try{is.registerManager(wi.URL_SCHEME,new TR)}catch(e){}}var WR={importFetch:()=>MC()},e1,BR=class{constructor(){this.util=FC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return B().global.fetch!=null?B().global.fetch(e,t):(e1==null&&(e1=WR.importFetch()),e1(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};B().get("IS_NODE")&&!B().get("IS_BROWSER")&&B().setPlatform("node",new BR);function Te(e,t="float32",a){return t=t||"float32",nn(e),new Rt(e,t,a)}function VR(e,t){let a=R(e,"x","cast");if(!zA(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&a.dtype!=="string"||t!=="string"&&a.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:a},r={dtype:t};return L.runKernel(qi,n,r)}var Ue=z({cast_:VR});function UR(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(ho,t)}var Ia=z({clone_:UR});function Ag(e,t=!1){console.log(e.toString(t))}ab();var GR={buffer:Te,cast:Ue,clone:Ia,print:Ag};VN(GR);function HR(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(Mr,r)}var we=z({add_:HR});function jR(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(xs,r)}var Gp=z({floorDiv_:jR});function qR(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=Et(a,n),a.dtype==="int32"&&n.dtype==="int32")return Gp(a,n);let r={a,b:n},s={};return L.runKernel(io,r,s)}var ve=z({div_:qR});function XR(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(Ts,r)}var te=z({mul_:XR});function KR(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return L.runKernel(Ap,a)}else{let a={x:t};return L.runKernel(cu,a)}}var Ja=z({abs_:KR});function YR(e){let t={x:R(e,"x","acos")};return L.runKernel($i,t)}var xb=z({acos_:YR});function ZR(e){let t={x:R(e,"x","acosh")};return L.runKernel(Di,t)}var Ab=z({acosh_:ZR});function JR(e){P(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),P(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>R(r,`tensors${s}`,"addN")),a=t[0];t.forEach(r=>{if(r.dtype!==a.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!Er(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return L.runKernel(Pi,n)}var Uh=z({addN_:JR});function QR(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(_i,n,r)}var bb=z({all_:QR});function eE(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(Oi,n,r)}var vb=z({any_:eE});function tE(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(hu,a,n)}var or=z({argMax_:tE});function aE(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(mu,a,n)}var wb=z({argMin_:aE});function nE(e){let t={x:R(e,"x","asin")};return L.runKernel(zi,t)}var kb=z({asin_:nE});function rE(e){let t={x:R(e,"x","asinh")};return L.runKernel(Li,t)}var Ib=z({asinh_:rE});function sE(e){let t={x:R(e,"x","atan")};return L.runKernel(Wi,t)}var Sb=z({atan_:sE});function iE(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(Vi,r)}var Tb=z({atan2_:iE});function oE(e){let t={x:R(e,"x","atanh")};return L.runKernel(Bi,t)}var Cb=z({atanh_:oE});function lE(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=Eb(r);return Hp(e,o,a,s,n,null,null,l)}function Nb(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Jd(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Hp(e,u,a,n,r,s,!1,i)}function uE(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=b1(t),d,c;if(i==="NDHWC")c="channelsLast",d=[o,l,u,e[4],e[4]];else if(i==="NCDHW")c="channelsFirst",d=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Rb(e,d,a,n,r,!1,c,s)}function Hp(e,t,a,n,r,s,i=!1,o="channelsLast"){let[l,u,d,c]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,d,c]=e;else if(o==="channelsFirst")[l,c,u,d]=e;else throw new Error(`Unknown dataFormat ${o}`);let[p,h,,m]=t,[f,g]=Jd(a),[y,x]=Jd(n),A=Kl(p,y),b=Kl(h,x),{padInfo:w,outHeight:S,outWidth:C}=cE(r,u,d,f,g,A,b,s,o),N=i?m*c:m,M;return o==="channelsFirst"?M=[l,N,S,C]:o==="channelsLast"&&(M=[l,S,C,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:d,inChannels:c,outHeight:S,outWidth:C,outChannels:N,padInfo:w,strideHeight:f,strideWidth:g,filterHeight:p,filterWidth:h,effectiveFilterHeight:A,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:x,inShape:e,outShape:M,filterShape:t}}function Rb(e,t,a,n,r,s=!1,i="channelsLast",o){let[l,u,d,c,p]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,d,c,p]=e;else if(i==="channelsFirst")[l,p,u,d,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,m,f,,g]=t,[y,x,A]=b1(a),[b,w,S]=b1(n),C=Kl(h,b),N=Kl(m,w),M=Kl(f,S),{padInfo:F,outDepth:E,outHeight:T,outWidth:D}=hE(r,u,d,c,y,x,A,C,N,M,o),O=s?g*p:g,W;return i==="channelsFirst"?W=[l,O,E,T,D]:i==="channelsLast"&&(W=[l,E,T,D,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:d,inWidth:c,inChannels:p,outDepth:E,outHeight:T,outWidth:D,outChannels:O,padInfo:F,strideDepth:y,strideHeight:x,strideWidth:A,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:C,effectiveFilterHeight:N,effectiveFilterWidth:M,dilationDepth:b,dilationHeight:w,dilationWidth:S,inShape:e,outShape:W,filterShape:t}}function dE(e,t,a,n,r){n==null&&(n=bg(e,t,a));let s=e[0],i=e[1],o=Qd((s-t+2*n)/a+1,r),l=Qd((i-t+2*n)/a+1,r);return[o,l]}function pE(e,t,a,n,r,s){r==null&&(r=bg(e,t[0],n[0]));let i=[0,0,0,a];for(let o=0;o<3;o++)e[o]+2*r>=t[o]&&(i[o]=Qd((e[o]-t[o]+2*r)/n[o]+1,s));return i}function bg(e,t,a,n=1){let r=Kl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Jd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function b1(e){return typeof e=="number"?[e,e,e]:e}function Kl(e,t){return t<=1?e:e+(e-1)*(t-1)}function cE(e,t,a,n,r,s,i,o,l){let u,d,c;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let p=dE([t,a],s,n,e,o);d=p[0],c=p[1]}else if(e==="same"){d=Math.ceil(t/n),c=Math.ceil(a/r);let p=Math.max(0,(d-1)*n+s-t),h=Math.max(0,(c-1)*r+i-a),m=Math.floor(p/2),f=p-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},d=Math.ceil((t-s+1)/n),c=Math.ceil((a-i+1)/r);else if(typeof e=="object"){let p=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:p,bottom:h,left:m,right:f,type:p===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},d=Qd((t-s+p+h)/n+1,o),c=Qd((a-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:d,outWidth:c}}function hE(e,t,a,n,r,s,i,o,l,u,d){let c,p,h,m;if(e==="valid"&&(e=0),typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=pE([t,a,n,1],[o,l,u],1,[r,s,i],e,d);p=f[0],h=f[1],m=f[2]}else if(e==="same"){p=Math.ceil(t/r),h=Math.ceil(a/s),m=Math.ceil(n/i);let f=(p-1)*r+o-t,g=(h-1)*s+l-a,y=(m-1)*i+u-n,x=Math.floor(f/2),A=f-x,b=Math.floor(g/2),w=g-b,S=Math.floor(y/2),C=y-S;c={top:b,bottom:w,left:S,right:C,front:x,back:A,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:p,outHeight:h,outWidth:m}}function Qd(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 ep(e){let[t,a,n]=Jd(e);return t===1&&a===1&&n===1}function $r(e,t){return ep(e)||ep(t)}function Ii(e){return Jd(e).every(t=>t>0)}function Eb(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Mn(e,t,a){if(a!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);if(typeof t=="number")P(Zl(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);else if(typeof t=="object")t.forEach(n=>{n.forEach(r=>{P(Zl(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function mE(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Du,a,n)}var Q=z({reshape_:mE});function fE(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;P($r(a,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} 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]])),P(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),Mn("avgPool",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(Ui,u,d);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var vg=z({avgPool_:fE});function gE(e,t,a,n,r,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]])),P(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),P(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),P(typeof a=="number"&&a>0||Array.isArray(a)&&a[0]>0&&a[1]>0&&a[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${a}'`),Mn("avgPool3d",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(fu,u,d);return c=Ue(c,o.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var Mb=z({avgPool3d_:gE});function yE(e,t=0){P(e.length>=1,()=>"Pass at least one tensor to concat");let a=Zd(e,"tensors","concat","string_or_numeric");if(a[0].dtype==="complex64"&&a.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${s.dtype}. `)}),a.length===1)return Ia(a[0]);let n=a,r={axis:t};return L.runKernel(xu,n,r)}var lt=z({concat_:yE});function xE(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=Et(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return L.runKernel(Gi,i,o)}var pt=z({matMul_:xE});function AE(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(Rs,t)}var za=z({sigmoid_:AE});function bE(e,t,a){let n=R(e,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let r={x:n},s={begin:t,size:a};return L.runKernel(zu,r,s)}var _e=z({slice_:bE});function vE(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(rl,t)}var Ah=z({tanh_:vE});function wE(e,t,a,n,r,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(a,"lstmBias","basicLSTMCell"),u=R(n,"data","basicLSTMCell"),d=R(r,"c","basicLSTMCell"),c=R(s,"h","basicLSTMCell"),p=lt([u,c],1),h=pt(p,o),m=we(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],x=_e(m,[0,0],y),A=_e(m,[0,g],y),b=_e(m,[0,g*2],y),w=_e(m,[0,g*3],y),S=we(te(za(x),Ah(A)),te(d,za(we(i,b)))),C=te(Ah(S),za(w));return[S,C]}var Fb=z({basicLSTMCell_:wE});function kE(e,t,a){let n=R(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);P(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),P(a.length===t.length,()=>`crops.length is ${a.length} but should be equal to blockShape.length ${t.length}`),P(n.shape[0]%r===0,()=>`input tensor batch is ${n.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:n},i={blockShape:t,crops:a};return L.runKernel(gu,s,i)}var wg=z({batchToSpaceND_:kE});function IE(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 SE(e,t,a,n,r,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;n!=null&&(d=R(n,"offset","batchNorm")),P(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),P(d==null||o.rank===d.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),P(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let c={x:IE(i),scale:u,offset:d,mean:o,variance:l},p={varianceEpsilon:s},h=L.runKernel(po,c,p);return Q(h,i.shape)}var jp=z({batchNorm_:SE});function TE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),P(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),P(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),P(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),d!=null&&P(d.rank===2||d.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${d.rank}.`),jp(i,o,l,d,u,s)}var $b=z({batchNorm2d_:TE});function CE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),P(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),P(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),P(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),d!=null&&P(d.rank===3||d.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${d.rank}.`),jp(i,o,l,d,u,s)}var Db=z({batchNorm3d_:CE});function NE(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let d;return n!=null&&(d=R(n,"offset","batchNorm")),P(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),P(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),P(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&P(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),d!=null&&P(d.rank===4||d.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${d.rank}.`),jp(i,o,l,d,u,s)}var Pb=z({batchNorm4d_:NE});function RE(e,t,a){let n=R(e,"x","bincount"),r=R(t,"weights","bincount");P(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),P(a>=0,()=>`size must be non-negative, but got ${a}.`),P(r.size===n.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${n.shape}, weights shape: ${r.shape}.`);let s={x:n,weights:r},i={size:a};return L.runKernel(Hi,s,i)}var kg=z({bincount_:RE});function EE(e,t){let a=R(e,"x","bitwiseAnd"),n=R(t,"y","bitwiseAnd");if(!Er(a.shape,n.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${a.shape}, y: ${n.shape}`);if(a.dtype!=="int32"||n.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${a.dtype} and type of y: ${n.dtype}`);let r={a,b:n};return L.runKernel(ji,r)}var _b=z({bitwiseAnd_:EE});function ME(e,t){let a=R(e,"s0","broadcastArgs","int32"),n=R(t,"s1","broadcastArgs","int32");if(a.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${a.rank}`);if(n.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${n.rank}`);let r={s0:a,s1:n};return L.runKernel(yu,r)}var Ob=z({broadcastArgs_:ME});function FE(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(nn(t),t.lengtha.rank){let l=a.shape.slice();for(;l.length=0;l--)if(r[l]===t[l])s[l]=1;else if(a.shape[l]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return Ia(a);let i={x:a},o={reps:s};return L.runKernel($s,i,o)}var Ai=z({broadcastTo_:FE});function $E(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(cs,t)}var zb=z({ceil_:$E});function lr(e,t,a){nn(e),a=a||fp(t);let n={shape:e,value:t,dtype:a};return L.runKernel(Iu,{},n)}function DE(e,t,a){let n=R(e,"x","clipByValue");if(P(t<=a,()=>`Error in clip: min (${t}) must be less than or equal to max (${a}).`),t===a)return lr(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return L.runKernel(hs,r,s)}var Lb=z({clipByValue_:DE});function PE(e){return lt(e,0)}var Wb=z({concat1d_:PE});function _E(e,t){return lt(e,t)}var Xu=z({concat2d_:_E});function OE(e,t){return lt(e,t)}var Bb=z({concat3d_:OE});function zE(e,t){return lt(e,t)}var Vb=z({concat4d_:zE});function LE(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","conv2d","float32"),l=R(t,"filter","conv2d","float32"),u=o,d=!1;o.rank===3&&(d=!0,u=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),P(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Mn("conv2d",n,i);let c=r==="NHWC"?u.shape[3]:u.shape[1];P(c===l.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${l.shape[2]}.`),P($r(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),P(Ii(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),P(Ii(a),()=>"Error in conv2D: Strides should be larger than 0.");let p={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(Xi,p,h);return d?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var qp=z({conv2d_:LE});function WE(e,t,a,n,r="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),u=o,d=!1;o.rank===2&&(d=!0,u=Q(o,[1,o.shape[0],o.shape[1]])),P(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),P(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Mn("conv1d",n,i),P(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),P($r(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),P(Ii(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),P(Ii(a),()=>"Error in conv1D: Stride should be larger than 0."),P(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=Q(l,[1,l.shape[0],l.shape[1],l.shape[2]]),p=Q(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=qp(p,c,[1,a],n,"NHWC",[1,s],i);return d?Q(h,[h.shape[2],h.shape[3]]):Q(h,[h.shape[0],h.shape[2],h.shape[3]])}var Ub=z({conv1d_:WE});function BE(e,t,a,n,r,s="NHWC",i){P(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=Q(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),P(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),P(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),P(a.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${a.rank}`);let d=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];P(d===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${d}) must match input depth for filter ${a.shape[2]}.`),P(c===a.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${a.shape[3]}.`),Mn("conv2dDerInput",r,i);let p={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(Ki,p,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Gb=z({conv2DBackpropInput_:BE});function VE(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Gb(a,i,o,n,r,"NHWC",s)}var Hb=z({conv2dTranspose_:VE});function UE(e,t,a,n,r="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=Q(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),P(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),P(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),P(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),P($r(a,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),P(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`),P(Ii(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),P(Ii(a),()=>"Error in conv3D: Strides should be larger than 0.");let d={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},p=L.runKernel(Yi,d,c);return u?Q(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var jb=z({conv3d_:UE});function GE(e,t,a,n,r){P(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],u=i.shape[4];P(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),P(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),P(a.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${a.rank}`),P(l===a.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${a.shape[3]}.`),P(u===a.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${a.shape[4]}.`);let d={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},p=L.runKernel(Zi,d,c);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var HE=z({conv3DBackpropInput_:GE});function jE(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return HE(a,s,i,n,r)}var qb=z({conv3dTranspose_:jE});function qE(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(Ji,t)}var Xb=z({cos_:qE});function XE(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Qi,t)}var Kb=z({cosh_:XE});function KE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(eo,r,s)}var Yb=z({cumprod_:KE});function YE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(to,r,s)}var Zb=z({cumsum_:YE});function ZE(e,t,a,n=!1){let r=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");P(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),P(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),P(a>=0,()=>`size must be non-negative, but got ${a}.`),P(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:a,binaryOutput:n};return L.runKernel(bu,i,o)}var Jb=z({denseBincount_:ZE});function JE(e,t,a="NHWC"){let n=R(e,"x","depthToSpace","float32"),r=a==="NHWC"?n.shape[1]:n.shape[2],s=a==="NHWC"?n.shape[2]:n.shape[3],i=a==="NHWC"?n.shape[3]:n.shape[1];P(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),P(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying +`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":m),d}function Sd(e){let t=[];for(let a=0;a`Length of values '${n}' 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=a||J1(t,this.size),this.strides=su(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 a=this.locToIndex(t);this.values[a]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let a=e[e.length-1];for(let n=0;nch(a))}catch(a){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),On().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=On().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>ch(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 On().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),On().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Ol.print(this,e)}clone(){return this.throwIfDisposed(),Ol.clone(this)}toString(e=!1){let t=this.dataSync();return YT(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Ol.cast(this,e)}variable(e=!0,t,a){return this.throwIfDisposed(),On().makeVariable(this,e,t,a)}};Object.defineProperty(yt,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function PA(){return tg("Tensor",()=>yt)}PA();var Ud=class extends yt{constructor(e,t,a,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=a}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(!Cr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);On().disposeTensor(this),this.dataId=e.dataId,On().incRef(this,null)}dispose(){On().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Ud,Symbol.hasInstance,{value:e=>e instanceof yt&&e.assign!=null&&e.assign instanceof Function});var _A={};Ze(_A,{assertTypesMatch:()=>OA,getTensorsInContainer:()=>ng,isTensorInList:()=>nN,makeTypesMatch:()=>Rt});var n1;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(n1||(n1={}));var r1;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(r1||(r1={}));var s1;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(s1||(s1={}));var i1;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(i1||(i1={}));var o1;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(o1||(o1={}));var aN={float32:i1,int32:r1,bool:s1,complex64:o1};function pa(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return aN[e][t]}function Pp(e){return pa(e,"int32")}function FA(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function DA(e){return typeof GPUBuffer!="undefined"&&e!=null&&typeof e=="object"&&"buffer"in e&&e.buffer instanceof GPUBuffer}function Rt(e,t){if(e.dtype===t.dtype)return[e,t];let a=pa(e.dtype,t.dtype);return[e.cast(a),t.cast(a)]}function OA(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function nN(e,t){return t.some(a=>a.id===e.id)}function ng(e){let t=[];return zA(e,t,new Set),t}function zA(e,t,a){if(e==null)return;if(e instanceof yt){t.push(e);return}if(!rN(e))return;let n=e;for(let r in n){let s=n[r];a.has(s)||(a.add(s),zA(s,t,a))}}function rN(e){return Array.isArray(e)||typeof e=="object"}function q2(e){return e.kernelName!=null}var Kx=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()}},rg=class l1{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Kx}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let a=0;a{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){Jn(t).forEach(a=>{a.disposeFunc!=null&&a.disposeFunc(this.registry[t])})}initializeBackend(t){let a=this.registryFactory[t];if(a==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let n=a.factory();if(n&&!(n instanceof ru)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(i=>r(rthis.registryFactory[a].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let a=0;athis.startScope(n),()=>this.endScope(r),()=>(r=a(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(t,a,n){t();try{let r=n();return a(),r}catch(r){throw a(),r}}nextTensorId(){return l1.nextTensorId++}nextVariableId(){return l1.nextVariableId++}clone(t){let a=L.runKernel(qi,{x:t}),n={x:t},r=i=>({x:()=>{let o="float32",l={x:i},u={dtype:o};return L.runKernel(bi,l,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[a],r,s,{}),a}runKernel(t,a,n){if(this.backendName==null&&this.backend,Bd(t,this.backendName)==null)throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:a,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,a,n){let r=this.backend.numDataIds(),s=0;n.forEach(l=>{s+=l.dtype==="complex64"?3:1});let i=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=r-a-s-i;if(o>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${o} data ids) after running '${t}'`)}runKernelFunc(t){let a,n=[],r=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let o;this.backendName==null&&this.backend;let l,u=q2(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(q2(t)){let{kernelName:m,inputs:f,attrs:g}=t;this.backendName==null&&this.backend;let y=Bd(m,this.backendName);F(y!=null,()=>`Cannot find registered kernel '${m}' for backend '${this.backendName}'`),o=()=>{let x=this.backend.numDataIds();l=y.kernelFunc({inputs:f,attrs:g,backend:this.backend});let A=Array.isArray(l)?l:[l];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(m,x,A);let b=A.map(w=>w.rank!=null?w:this.makeTensorFromTensorInfo(w));if(r){let w=this.getTensorsForGradient(m,f,b);n=this.saveTensorsForBackwardMode(w)}return b}}else{let{forwardFunc:m}=t,f=g=>{r&&(n=g.map(y=>this.keep(this.clone(y))))};o=()=>{let g=this.backend.numDataIds();l=this.tidy(()=>m(this.backend,f));let y=Array.isArray(l)?l:[l];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,y),y}}let{inputs:p,attrs:c}=t,d=q2(t)?null:t.backwardsFunc,h;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?a=o():(h=this.profiler.profileKernel(u,p,()=>o()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(h),a=h.outputs)}),r&&this.addTapeNode(u,p,a,d,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(p).map(m=>p[m]!=null?p[m].shape:null),outputShapes:a.map(m=>m.shape),kernelTimeMs:h.timeMs,extraInfo:h.extraInfo}),Array.isArray(l)?a:a[0]}saveTensorsForBackwardMode(t){return t.map(a=>this.keep(this.clone(a)))}getTensorsForGradient(t,a,n){let r=t1(t);if(r!=null){let s=r.inputsToSave||[],i=r.outputsToSave||[],o;r.saveAllInputs?(F(Array.isArray(a),()=>"saveAllInputs is true, expected inputs to be an array."),o=Object.keys(a).map(u=>a[u])):o=s.map(u=>a[u]);let l=n.filter((u,p)=>i[p]);return o.concat(l)}return[]}makeTensor(t,a,n,r){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=t;n==="string"&&Ur(t[0])&&(s=t.map(l=>$p(l)));let i=r.write(s,a,n),o=new yt(a,n,i,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let l=this.state.tensorInfo.get(i),u=wA(s);this.state.numBytes+=u-l.bytes,l.bytes=u}return o}makeTensorFromDataId(t,a,n,r){n=n||"float32";let s={dataId:t,shape:a,dtype:n};return this.makeTensorFromTensorInfo(s,r)}makeTensorFromTensorInfo(t,a){let{dataId:n,shape:r,dtype:s}=t,i=new yt(r,s,n,this.nextTensorId());return this.trackTensor(i,a),i}makeVariable(t,a=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==t.dtype&&(t=t.cast(r));let s=new Ud(t,a,n,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(t,a){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let n=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(n=t.size*dh(t.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:a||this.backend,dtype:t.dtype,shape:t.shape,bytes:n})),t instanceof Ud||this.track(t)}incRef(t,a){this.trackTensor(t,a),this.backend.incRef(t.dataId)}removeDataId(t,a){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===a&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let a=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=a.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let n=t.size*dh(t.dtype);this.state.numBytes-=n}a.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,a.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let a=this.state.registeredVariables[t];this.disposeVariable(a)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let a=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),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-a,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(t,a,n,r,s,i){let o={id:this.state.nextTapeNodeId++,kernelName:t,inputs:a,outputs:n,saved:s},l=t1(t);l!=null&&(r=l.gradFunc),r!=null&&(o.gradient=u=>(u=u.map((p,c)=>{if(p==null){let d=n[c],h=Eh(d.size,d.dtype);return this.makeTensor(h,d.shape,d.dtype)}return p}),r(u.length>1?u:u[0],s,i))),this.state.activeTape.push(o)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let a={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(a.name=t),this.state.scopeStack.push(a),this.state.activeScope=a}endScope(t){let a=ng(t),n=new Set(a.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(t,a,n,r=!1){if(F(a.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 s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));F(s instanceof yt,()=>"The result y returned by f() must be a tensor.");let i=XT(this.state.activeTape,a,s);if(!r&&i.length===0&&a.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 o={};o[s.id]=n==null?sN(s.shape):n,KT(o,i,u=>this.tidy(u),iN);let l=a.map(u=>o[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let p of u.saved)p.dispose()}),this.state.activeTape=null),{value:s,grads:l}})}customGrad(t){return F(Kr(t),()=>"The f passed in customGrad(f) must be a function."),(...a)=>{F(a.every(o=>o instanceof yt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};a.forEach((o,l)=>{r[l]=o});let s=(o,l)=>(n=t(...a,l),F(n.value instanceof yt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),F(Kr(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),i=(o,l)=>{let u=n.gradFunc(o,l),p=Array.isArray(u)?u:[u];F(p.length===a.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(p.every(d=>d instanceof yt),()=>"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 c={};return p.forEach((d,h)=>{c[h]=()=>d}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:i,inputs:r})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,a){return this.state.tensorInfo.get(t).backend.readToGPU(t,a)}async time(t){let a=Vd(),n=await this.backend.time(t);return n.wallMs=Vd()-a,n}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Kx;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};rg.nextTensorId=0;rg.nextVariableId=0;function sN(e){let t=Q1(mt(e),"float32");return L.makeTensor(t,e,"float32")}function LA(){let e=TA();if(e._tfengine==null){let t=new CA(e);e._tfengine=new rg(t)}return IT(e._tfengine.ENV),QT(()=>e._tfengine),e._tfengine}var L=LA();function iN(e,t){let a={a:e,b:t};return L.runKernel(os,a)}var _p={};Ze(_p,{isBrowser:()=>WA,isMobile:()=>uN,mockIsMobile:()=>lN});function oN(){return typeof navigator!="undefined"&&navigator!=null}var u1;function lN(e){u1=e}function uN(e){if(u1!==void 0)return u1;if(e||oN()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let a=e;return a.userAgentData&&a.userAgentData.mobile}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(t)||/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(t.substr(0,4))}return!1}function WA(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ba=B();Ba.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.")});Ba.registerFlag("IS_BROWSER",()=>WA());Ba.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ba.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ba.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Ba.registerFlag("PROD",()=>!1);Ba.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ba.getBool("DEBUG"));Ba.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ba.registerFlag("IS_TEST",()=>!1);Ba.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Ba.getBool("DEBUG"));Ba.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ba.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Ba.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function Qn(e,t){let a=e;if(Jt(e))return t==="string"?[]:[e.length];if(FA(e)){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if(DA(e))return[e.buffer.size/(t==null?4:dh(t))];if(!Array.isArray(e))return[];let n=[];for(;Array.isArray(a)||Jt(a)&&t!=="string";)n.push(a.length),a=a[0];return Array.isArray(e)&&B().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&BA(e,n,[]),n}function BA(e,t,a){if(a=a||[],!Array.isArray(e)&&!Jt(e)){F(t.length===0,()=>`Element arr[${a.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}F(t.length>0,()=>`Element arr[${a.join("][")}] should be a primitive, but is an array of ${e.length} elements`),F(e.length===t[0],()=>`Element arr[${a.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let n=t.slice(1);for(let r=0;r=0&&(r=n),Yx(n,r,t,a),e==null||!Jt(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 '${a}' must be a Tensor or TensorLike, but got '${o}'`)}let s=Qn(e,r);!Jt(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Fh(e,r):Qr(e,[],!0);return L.makeTensor(i,s,r)}function Gd(e,t,a,n="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${a} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>R(r,`${t}[${s}]`,a,n))}var sg="__op";function z(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 a=t[0],n=e[a];a.endsWith("_")&&(a=a.substring(0,a.length-1)),a=a+sg;let r=(...s)=>{L.startScope(a);try{let i=n(...s);return Mh(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:a,configurable:!0}),r}function dN(e,t){let a=R(e,"real","complex"),n=R(t,"imag","complex");Ta(a.shape,n.shape,`real and imag shapes, ${a.shape} and ${n.shape}, must match in call to tf.complex().`);let r={real:a,imag:n};return L.runKernel(pp,r)}var Sr=z({complex_:dN});function ps(e,t,a,n){if(n==null)n=lp(e);else if(n==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(DA(e)||FA(e)){if(n!=="float32"&&n!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${n}.`);return L.backend.createTensorFromGPUData(e,t||a,n)}if(!Jt(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){an(t);let r=mt(t),s=mt(a);F(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${a}) does not match the provided shape (${t}). `)}}return!Jt(e)&&!Array.isArray(e)&&(e=[e]),t=t||a,e=n!=="string"?Fh(e,n):Qr(e,[],!0),L.makeTensor(e,t,n)}function Ve(e,t,a){let n=Qn(e,a);return ps(e,t,n,a)}var Ks={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Tr=class VA{static join(t){return new VA(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(n=>Jt(n)?n.buffer:n),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let a=0;for(let n=0;n=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function a(r){return t=r.end?1:0}if(a(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let n=pN(this.shards,a);return n===-1?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function pN(e,t){let a=0,n=e.length;for(;a<=n;){let r=Math.floor((n-a)/2)+a,s=t(e[r]);if(s===0)return r;s<0?n=r:a=r+1}return-1}function ig(){B().set("PROD",!0)}function cN(){B().set("DEBUG",!0)}function hN(){B().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function og(e){B().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}tN(og);function mN(){L.disposeVariables()}function It(){return L}function fN(){return L.memory()}function gN(e){return L.profile(e)}function De(e,t){return L.tidy(e,t)}function J(e){ng(e).forEach(t=>t.dispose())}function zn(e){return L.keep(e)}function yN(e){return L.time(e)}function Fp(e){return L.setBackend(e)}function Dp(){return L.ready()}function Qt(){return L.backendName}function xN(e){L.removeBackend(e)}function lg(e){return L.findBackend(e)}function AN(e){return L.findBackendFactory(e)}function tl(e,t,a=1){return L.registerBackend(e,t,a)}function Bn(){return L.backend}function bN(e,t){B().setPlatform(e,t)}var es=4;async function vN(e,t){let a=[],n=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let d=await l.bytes(),h=d.reduce((g,y)=>g+y.length,0)+es*d.length,m=new Uint8Array(h),f=0;for(let g=0;ga.slice(r+o,r+l));n[s.name]=GA(s,a.slice(r,r+i)),r+=i}return n}function wN(e,t){let a=mt(e.shape),n;if("quantization"in e){let r=e.quantization;n=Ks[r.dtype]}else if(e.dtype==="string"){let r=0;for(let s=0;s(r=await Zx(n,r,p),r.slice(u,p)));r=await Zx(n,r,i);let o=r.slice(0,i);r=r.slice(i);let l=GA(s,o);if(a[s.name]=l,Qt()==="webgpu"){let u=Bn();"uploadToGPU"in u&&mt(l.shape)>=B().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(l.dataId)}}return a}function IN(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,a=[];e.forEach(s=>{if(t+=s.byteLength,a.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 n=new Uint8Array(t),r=0;return a.forEach(s=>{n.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),n.buffer}var ug=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Jx(e){return ug?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function SN(e){if(ug)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),a="";for(let n=0,r=t.length;n{let n=a<<13,r=0;for(;!(n&8388608);)r-=8388608,n<<=1;return n&=-8388609,r+=947912704,n|r},t=new Uint32Array(2048);t[0]=0;for(let a=1;a<1024;a++)t[a]=e(a);for(let a=1024;a<2048;a++)t[a]=939524096+(a-1024<<13);return t}function RN(){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 EN(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function MN(){let e=NN(),t=RN(),a=EN();return n=>{let r=new ArrayBuffer(4*n.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var gn=class Fn{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Fn.instance==null&&(Fn.instance=new Fn),Fn.instance}static registerSaveRouter(t){Fn.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Fn.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Fn.getHandlers(t,"save")}static getLoadHandlers(t,a){return Fn.getHandlers(t,"load",a)}static getHandlers(t,a,n){let r=[];return(a==="load"?Fn.getInstance().loadRouters:Fn.getInstance().saveRouters).forEach(s=>{let i=s(t,n);i!==null&&r.push(i)}),r}},$N=e=>gn.registerSaveRouter(e),PN=e=>gn.registerLoadRouter(e),_N=e=>gn.getSaveHandlers(e),FN=(e,t)=>gn.getLoadHandlers(e,t),p1="tensorflowjs",c1=1,js="models_store",Gr="model_info_store";function XA(){if(!B().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 h1(e){let t=e.result;t.createObjectStore(js,{keyPath:"modelPath"}),t.createObjectStore(Gr,{keyPath:"modelPath"})}var Ys=class{constructor(e){if(this.indexedDB=XA(),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((a,n)=>{let r=this.indexedDB.open(p1,c1);r.onupgradeneeded=()=>h1(r),r.onsuccess=()=>{let s=r.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(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));a(o.result.modelArtifacts)},o.onerror=l=>(s.close(),n(o.error)),i.oncomplete=()=>s.close()}else{t.weightData=Tr.join(t.weightData);let i=Op(t),o=s.transaction(Gr,"readwrite"),l=o.objectStore(Gr),u;try{u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(c){return n(c)}let p;u.onsuccess=()=>{p=s.transaction(js,"readwrite");let c=p.objectStore(js),d;try{d=c.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(h){return n(h)}d.onsuccess=()=>a({modelArtifactsInfo:i}),d.onerror=h=>{l=o.objectStore(Gr);let m=l.delete(this.modelPath);m.onsuccess=()=>(s.close(),n(d.error)),m.onerror=f=>(s.close(),n(d.error))}},u.onerror=c=>(s.close(),n(u.error)),o.oncomplete=()=>{p==null?s.close():p.oncomplete=()=>s.close()}}},r.onerror=s=>n(r.error)})}};Ys.URL_SCHEME="indexeddb://";var KA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?DN(e.slice(Ys.URL_SCHEME.length)):null;gn.registerSaveRouter(KA);gn.registerLoadRouter(KA);function DN(e){return new Ys(e)}function ON(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var zN=class{constructor(){this.indexedDB=XA()}async listModels(){return new Promise((e,t)=>{let a=this.indexedDB.open(p1,c1);a.onupgradeneeded=()=>h1(a),a.onsuccess=()=>{let n=a.result,r=n.transaction(Gr,"readonly"),s=r.objectStore(Gr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(n.close(),t(s.error)),r.oncomplete=()=>n.close()},a.onerror=n=>t(a.error)})}async removeModel(e){return e=ON(e),new Promise((t,a)=>{let n=this.indexedDB.open(p1,c1);n.onupgradeneeded=()=>h1(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(Gr,"readwrite"),i=s.objectStore(Gr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),a(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),p=()=>{l=r.transaction(js,"readwrite");let c=l.objectStore(js).delete(e);c.onsuccess=()=>t(o.result.modelArtifactsInfo),c.onerror=d=>a(o.error)};u.onsuccess=p,u.onerror=c=>(p(),r.close(),a(o.error))}},o.onerror=u=>(r.close(),a(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},n.onerror=r=>a(n.error)})}},vr="/",zl="tensorflowjs_models",YA="info",LN="model_topology",WN="weight_specs",BN="weight_data",VN="model_metadata";function ZA(e){return{info:[zl,e,YA].join(vr),topology:[zl,e,LN].join(vr),weightSpecs:[zl,e,WN].join(vr),weightData:[zl,e,BN].join(vr),modelMetadata:[zl,e,VN].join(vr)}}function JA(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function UN(e){let t=e.split(vr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(vr)}function GN(e){return e.startsWith(Zs.URL_SCHEME)?e.slice(Zs.URL_SCHEME.length):e}var Zs=class{constructor(e){if(!B().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=ZA(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),a=JSON.stringify(e.weightSpecs),n=Op(e),r=Tr.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,a),this.LS.setItem(this.keys.weightData,SN(r));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:n}}catch(s){throw JA(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},a=JSON.parse(this.LS.getItem(this.keys.topology));if(a==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=a;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}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=CN(s),t}};Zs.URL_SCHEME="localstorage://";var QA=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Zs.URL_SCHEME)?HN(e.slice(Zs.URL_SCHEME.length)):null;gn.registerSaveRouter(QA);gn.registerLoadRouter(QA);function HN(e){return new Zs(e)}var jN=class{constructor(){F(B().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=zl+vr,a=vr+YA;for(let n=0;n"scheme must not be undefined or null."),t.endsWith(Bl)&&(t=t.slice(0,t.indexOf(Bl))),F(t.length>0,()=>"scheme must not be an empty string.");let n=Wr.getInstance();F(n.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),n.managers[t]=a}static getManager(t){let a=Wr.getInstance().managers[t];if(a==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return a}static getSchemes(){return Object.keys(Wr.getInstance().managers)}};function th(e){if(e.indexOf(Bl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ts.getSchemes().join(",")}`);return{scheme:e.split(Bl)[0],path:e.split(Bl)[1]}}async function eb(e,t,a=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let n=gn.getLoadHandlers(e);F(n.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),F(n.length<2,()=>`Copying failed because more than one (${n.length}) load handlers for source URL ${e}.`);let r=n[0],s=gn.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 (${n.length}) save handlers for destination URL ${t}.`);let i=s[0],o=th(e).scheme,l=th(e).path,u=o===th(e).scheme,p=await r.load();a&&u&&await ts.getManager(o).removeModel(l);let c=await i.save(p);return a&&!u&&await ts.getManager(o).removeModel(l),c.modelArtifactsInfo}async function qN(){let e=ts.getSchemes(),t={};for(let a of e){let n=await ts.getManager(a).listModels();for(let r in n){let s=a+Bl+r;t[s]=n[r]}}return t}async function XN(e){let t=th(e);return ts.getManager(t.scheme).removeModel(t.path)}async function KN(e,t){return eb(e,t,!1)}async function YN(e,t){return eb(e,t,!0)}var ZN=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!B().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",a=>{if(a.source===window&&a.data.name===this.messageName){a.stopPropagation();let n=this.functionRefs[a.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return RA(e)}};if(B().get("IS_BROWSER")){B().setPlatform("browser",new ZN);try{ts.registerManager(Zs.URL_SCHEME,new jN)}catch(e){}try{ts.registerManager(Ys.URL_SCHEME,new zN)}catch(e){}}var JN={importFetch:()=>UC()},X2,QN=class{constructor(){this.util=GC(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return B().global.fetch!=null?B().global.fetch(e,t):(X2==null&&(X2=JN.importFetch()),X2(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};B().get("IS_NODE")&&!B().get("IS_BROWSER")&&B().setPlatform("node",new QN);function _e(e,t="float32",a){return t=t||"float32",an(e),new Vt(e,t,a)}function eR(e,t){let a=R(e,"x","cast");if(!vA(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&a.dtype!=="string"||t!=="string"&&a.dtype==="string")throw new Error("Only strings can be casted to strings");let n={x:a},r={dtype:t};return L.runKernel(bi,n,r)}var Ue=z({cast_:eR});function tR(e){let t={x:R(e,"x","clone","string_or_numeric")};return L.runKernel(qi,t)}var Ia=z({clone_:tR});function pg(e,t=!1){console.log(e.toString(t))}LA();var aR={buffer:_e,cast:Ue,clone:Ia,print:pg};eN(aR);function nR(e,t){let a=R(e,"a","add"),n=R(t,"b","add");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(os,r)}var we=z({add_:nR});function rR(e,t){let a=R(e,"a","floorDiv"),n=R(t,"b","floorDiv");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Vi,r)}var zp=z({floorDiv_:rR});function sR(e,t){let a=R(e,"a","div"),n=R(t,"b","div");if([a,n]=Rt(a,n),a.dtype==="int32"&&n.dtype==="int32")return zp(a,n);let r={a,b:n},s={};return L.runKernel(_i,r,s)}var ve=z({div_:sR});function iR(e,t){let a=R(e,"a","mul"),n=R(t,"b","mul");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(yo,r)}var te=z({mul_:iR});function oR(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let a={x:t};return L.runKernel(cp,a)}else{let a={x:t};return L.runKernel(iu,a)}}var Za=z({abs_:oR});function lR(e){let t={x:R(e,"x","acos")};return L.runKernel(oi,t)}var tb=z({acos_:lR});function uR(e){let t={x:R(e,"x","acosh")};return L.runKernel(li,t)}var ab=z({acosh_:uR});function dR(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((r,s)=>R(r,`tensors${s}`,"addN")),a=t[0];t.forEach(r=>{if(r.dtype!==a.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!Cr(r.shape,a.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let n=t;return L.runKernel(ui,n)}var Dh=z({addN_:dR});function pR(e,t=null,a=!1){let n={x:R(e,"x","all","bool")},r={axis:t,keepDims:a};return L.runKernel(di,n,r)}var nb=z({all_:pR});function cR(e,t=null,a=!1){let n={x:R(e,"x","any","bool")},r={axis:t,keepDims:a};return L.runKernel(pi,n,r)}var rb=z({any_:cR});function hR(e,t=0){let a={x:R(e,"x","argMax")},n={axis:t};return L.runKernel(ou,a,n)}var rr=z({argMax_:hR});function mR(e,t=0){let a={x:R(e,"x","argMin")},n={axis:t};return L.runKernel(lu,a,n)}var sb=z({argMin_:mR});function fR(e){let t={x:R(e,"x","asin")};return L.runKernel(ci,t)}var ib=z({asin_:fR});function gR(e){let t={x:R(e,"x","asinh")};return L.runKernel(hi,t)}var ob=z({asinh_:gR});function yR(e){let t={x:R(e,"x","atan")};return L.runKernel(mi,t)}var lb=z({atan_:yR});function xR(e,t){let a=R(e,"a","atan2"),n=R(t,"b","atan2");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(gi,r)}var ub=z({atan2_:xR});function AR(e){let t={x:R(e,"x","atanh")};return L.runKernel(fi,t)}var db=z({atanh_:AR});function bR(e,t,a,n,r="NHWC",s){let i=e[3],o=[...t,i],l=hb(r);return Lp(e,o,a,s,n,null,null,l)}function pb(e,t,a,n,r,s,i="channelsLast"){let[o,l]=Hd(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Lp(e,u,a,n,r,s,!1,i)}function vR(e,t,a,n,r,s,i="NDHWC"){let[o,l,u]=m1(t),p,c;if(i==="NDHWC")c="channelsLast",p=[o,l,u,e[4],e[4]];else if(i==="NCDHW")c="channelsFirst",p=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return cb(e,p,a,n,r,!1,c,s)}function Lp(e,t,a,n,r,s,i=!1,o="channelsLast"){let[l,u,p,c]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,p,c]=e;else if(o==="channelsFirst")[l,c,u,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[d,h,,m]=t,[f,g]=Hd(a),[y,x]=Hd(n),A=Vl(d,y),b=Vl(h,x),{padInfo:w,outHeight:I,outWidth:T}=IR(r,u,p,f,g,A,b,s,o),N=i?m*c:m,M;return o==="channelsFirst"?M=[l,N,I,T]:o==="channelsLast"&&(M=[l,I,T,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:c,outHeight:I,outWidth:T,outChannels:N,padInfo:w,strideHeight:f,strideWidth:g,filterHeight:d,filterWidth:h,effectiveFilterHeight:A,effectiveFilterWidth:b,dilationHeight:y,dilationWidth:x,inShape:e,outShape:M,filterShape:t}}function cb(e,t,a,n,r,s=!1,i="channelsLast",o){let[l,u,p,c,d]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,p,c,d]=e;else if(i==="channelsFirst")[l,d,u,p,c]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,m,f,,g]=t,[y,x,A]=m1(a),[b,w,I]=m1(n),T=Vl(h,b),N=Vl(m,w),M=Vl(f,I),{padInfo:$,outDepth:E,outHeight:S,outWidth:_}=SR(r,u,p,c,y,x,A,T,N,M,o),O=s?g*d:g,W;return i==="channelsFirst"?W=[l,O,E,S,_]:i==="channelsLast"&&(W=[l,E,S,_,O]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:c,inChannels:d,outDepth:E,outHeight:S,outWidth:_,outChannels:O,padInfo:$,strideDepth:y,strideHeight:x,strideWidth:A,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:T,effectiveFilterHeight:N,effectiveFilterWidth:M,dilationDepth:b,dilationHeight:w,dilationWidth:I,inShape:e,outShape:W,filterShape:t}}function wR(e,t,a,n,r){n==null&&(n=cg(e,t,a));let s=e[0],i=e[1],o=jd((s-t+2*n)/a+1,r),l=jd((i-t+2*n)/a+1,r);return[o,l]}function kR(e,t,a,n,r,s){r==null&&(r=cg(e,t[0],n[0]));let i=[0,0,0,a];for(let o=0;o<3;o++)e[o]+2*r>=t[o]&&(i[o]=jd((e[o]-t[o]+2*r)/n[o]+1,s));return i}function cg(e,t,a,n=1){let r=Vl(t,n);return Math.floor((e[0]*(a-1)-a+r)/2)}function Hd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function m1(e){return typeof e=="number"?[e,e,e]:e}function Vl(e,t){return t<=1?e:e+(e-1)*(t-1)}function IR(e,t,a,n,r,s,i,o,l){let u,p,c;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let d=wR([t,a],s,n,e,o);p=d[0],c=d[1]}else if(e==="same"){p=Math.ceil(t/n),c=Math.ceil(a/r);let d=Math.max(0,(p-1)*n+s-t),h=Math.max(0,(c-1)*r+i-a),m=Math.floor(d/2),f=d-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},p=Math.ceil((t-s+1)/n),c=Math.ceil((a-i+1)/r);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:h,left:m,right:f,type:d===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},p=jd((t-s+d+h)/n+1,o),c=jd((a-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:c}}function SR(e,t,a,n,r,s,i,o,l,u,p){let c,d,h,m;if(e==="valid"&&(e=0),typeof e=="number"){c={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=kR([t,a,n,1],[o,l,u],1,[r,s,i],e,p);d=f[0],h=f[1],m=f[2]}else if(e==="same"){d=Math.ceil(t/r),h=Math.ceil(a/s),m=Math.ceil(n/i);let f=(d-1)*r+o-t,g=(h-1)*s+l-a,y=(m-1)*i+u-n,x=Math.floor(f/2),A=f-x,b=Math.floor(g/2),w=g-b,I=Math.floor(y/2),T=y-I;c={top:b,bottom:w,left:I,right:T,front:x,back:A,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outDepth:d,outHeight:h,outWidth:m}}function jd(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 qd(e){let[t,a,n]=Hd(e);return t===1&&a===1&&n===1}function Nr(e,t){return qd(e)||qd(t)}function Js(e){return Hd(e).every(t=>t>0)}function hb(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Nn(e,t,a){if(a!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);if(typeof t=="number")F(Hl(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${t}.`);else if(typeof t=="object")t.forEach(n=>{n.forEach(r=>{F(Hl(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function CR(e,t){let a={x:R(e,"x","reshape","string_or_numeric")},n={shape:t};return L.runKernel(Ru,a,n)}var Q=z({reshape_:CR});function TR(e,t,a,n,r){let s=R(e,"x","avgPool","float32"),i=1;F(Nr(a,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} 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}.`),Nn("avgPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(yi,u,p);return c=Ue(c,s.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var hg=z({avgPool_:TR});function NR(e,t,a,n,r,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}`),F(typeof a=="number"&&a>0||Array.isArray(a)&&a[0]>0&&a[1]>0&&a[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${a}'`),Nn("avgPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(uu,u,p);return c=Ue(c,o.dtype),l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var mb=z({avgPool3d_:NR});function RR(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let a=Gd(e,"tensors","concat","string_or_numeric");if(a[0].dtype==="complex64"&&a.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${s.dtype}. `)}),a.length===1)return Ia(a[0]);let n=a,r={axis:t};return L.runKernel(hu,n,r)}var lt=z({concat_:RR});function ER(e,t,a=!1,n=!1){let r=R(e,"a","matMul"),s=R(t,"b","matMul");[r,s]=Rt(r,s);let i={a:r,b:s},o={transposeA:a,transposeB:n};return L.runKernel(xi,i,o)}var pt=z({matMul_:ER});function MR(e){let t={x:R(e,"x","sigmoid","float32")};return L.runKernel(Bo,t)}var za=z({sigmoid_:MR});function $R(e,t,a){let n=R(e,"x","slice","string_or_numeric");if(n.rank===0)throw new Error("Slicing scalar is not possible");let r={x:n},s={begin:t,size:a};return L.runKernel(Pu,r,s)}var Fe=z({slice_:$R});function PR(e){let t={x:R(e,"x","tanh","float32")};return L.runKernel(Zo,t)}var hh=z({tanh_:PR});function _R(e,t,a,n,r,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(a,"lstmBias","basicLSTMCell"),u=R(n,"data","basicLSTMCell"),p=R(r,"c","basicLSTMCell"),c=R(s,"h","basicLSTMCell"),d=lt([u,c],1),h=pt(d,o),m=we(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],x=Fe(m,[0,0],y),A=Fe(m,[0,g],y),b=Fe(m,[0,g*2],y),w=Fe(m,[0,g*3],y),I=we(te(za(x),hh(A)),te(p,za(we(i,b)))),T=te(hh(I),za(w));return[I,T]}var fb=z({basicLSTMCell_:_R});function FR(e,t,a){let n=R(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);F(n.rank>=1+t.length,()=>`input rank is ${n.rank} but should be > than blockShape.length ${t.length}`),F(a.length===t.length,()=>`crops.length is ${a.length} but should be equal to blockShape.length ${t.length}`),F(n.shape[0]%r===0,()=>`input tensor batch is ${n.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:n},i={blockShape:t,crops:a};return L.runKernel(du,s,i)}var mg=z({batchToSpaceND_:FR});function DR(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 OR(e,t,a,n,r,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;n!=null&&(p=R(n,"offset","batchNorm")),F(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),F(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),F(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let c={x:DR(i),scale:u,offset:p,mean:o,variance:l},d={varianceEpsilon:s},h=L.runKernel(Ui,c,d);return Q(h,i.shape)}var Wp=z({batchNorm_:OR});function zR(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"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}.`),u!=null&&F(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&F(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var gb=z({batchNorm2d_:zR});function LR(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"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}.`),u!=null&&F(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&F(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var yb=z({batchNorm3d_:LR});function WR(e,t,a,n,r,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(a,"variance","batchNorm"),u;r!=null&&(u=R(r,"scale","batchNorm"));let p;return n!=null&&(p=R(n,"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}.`),u!=null&&F(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&F(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Wp(i,o,l,p,u,s)}var xb=z({batchNorm4d_:WR});function BR(e,t,a){let n=R(e,"x","bincount"),r=R(t,"weights","bincount");F(n.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${n.dtype}`),F(a>=0,()=>`size must be non-negative, but got ${a}.`),F(r.size===n.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${n.shape}, weights shape: ${r.shape}.`);let s={x:n,weights:r},i={size:a};return L.runKernel(Ai,s,i)}var fg=z({bincount_:BR});function VR(e,t){let a=R(e,"x","bitwiseAnd"),n=R(t,"y","bitwiseAnd");if(!Cr(a.shape,n.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${a.shape}, y: ${n.shape}`);if(a.dtype!=="int32"||n.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${a.dtype} and type of y: ${n.dtype}`);let r={a,b:n};return L.runKernel(pu,r)}var Ab=z({bitwiseAnd_:VR});function UR(e,t){let a=R(e,"s0","broadcastArgs","int32"),n=R(t,"s1","broadcastArgs","int32");if(a.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${a.rank}`);if(n.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${n.rank}`);let r={s0:a,s1:n};return L.runKernel(cu,r)}var bb=z({broadcastArgs_:UR});function GR(e,t){let a=R(e,"broadcastTo","x"),n=a.shape;if(an(t),t.lengtha.rank){let l=a.shape.slice();for(;l.length=0;l--)if(r[l]===t[l])s[l]=1;else if(a.shape[l]!==1)throw new Error(`broadcastTo(): [${n}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return Ia(a);let i={x:a},o={reps:s};return L.runKernel(us,i,o)}var Ul=z({broadcastTo_:GR});function HR(e){let t={x:R(e,"x","ceil","float32")};return L.runKernel(vi,t)}var vb=z({ceil_:HR});function sr(e,t,a){an(e),a=a||lp(t);let n={shape:e,value:t,dtype:a};return L.runKernel(Au,{},n)}function jR(e,t,a){let n=R(e,"x","clipByValue");if(F(t<=a,()=>`Error in clip: min (${t}) must be less than or equal to max (${a}).`),t===a)return sr(n.shape,t,n.dtype);let r={x:n},s={clipValueMin:t,clipValueMax:a};return L.runKernel(ls,r,s)}var wb=z({clipByValue_:jR});function qR(e){return lt(e,0)}var kb=z({concat1d_:qR});function XR(e,t){return lt(e,t)}var Vu=z({concat2d_:XR});function KR(e,t){return lt(e,t)}var Ib=z({concat3d_:KR});function YR(e,t){return lt(e,t)}var Sb=z({concat4d_:YR});function ZR(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","conv2d","float32"),l=R(t,"filter","conv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),F(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Nn("conv2d",n,i);let c=r==="NHWC"?u.shape[3]:u.shape[1];F(c===l.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${l.shape[2]}.`),F(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),F(Js(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv2D: Strides should be larger than 0.");let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(wi,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Bp=z({conv2d_:ZR});function JR(e,t,a,n,r="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),u=o,p=!1;o.rank===2&&(p=!0,u=Q(o,[1,o.shape[0],o.shape[1]])),F(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),F(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Nn("conv1d",n,i),F(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),F(Nr(a,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${a} and dilation '${s}'`),F(Js(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv1D: Stride should be larger than 0."),F(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let c=Q(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=Q(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Bp(d,c,[1,a],n,"NHWC",[1,s],i);return p?Q(h,[h.shape[2],h.shape[3]]):Q(h,[h.shape[0],h.shape[2],h.shape[3]])}var Cb=z({conv1d_:JR});function QR(e,t,a,n,r,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,u=!1;t.rank===3&&(u=!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(a.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${a.rank}`);let p=s==="NHWC"?o[3]:o[1],c=s==="NHWC"?l.shape[3]:l.shape[1];F(p===a.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${a.shape[2]}.`),F(c===a.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${a.shape[3]}.`),Nn("conv2dDerInput",r,i);let d={dy:l,filter:a},h={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(ki,d,h);return u?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Tb=z({conv2DBackpropInput_:QR});function eE(e,t,a,n,r,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Tb(a,i,o,n,r,"NHWC",s)}var Nb=z({conv2dTranspose_:eE});function tE(e,t,a,n,r="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!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(Nr(a,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),F(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`),F(Js(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),F(Js(a),()=>"Error in conv3D: Strides should be larger than 0.");let p={x:l,filter:o},c={strides:a,pad:n,dataFormat:r,dilations:s},d=L.runKernel(Ii,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Rb=z({conv3d_:tE});function aE(e,t,a,n,r){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],u=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(a.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${a.rank}`),F(l===a.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${a.shape[3]}.`),F(u===a.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${a.shape[4]}.`);let p={dy:i,filter:a},c={pad:r,strides:n,inputShape:s},d=L.runKernel(Si,p,c);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var nE=z({conv3DBackpropInput_:aE});function rE(e,t,a,n,r){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return nE(a,s,i,n,r)}var Eb=z({conv3dTranspose_:rE});function sE(e){let t={x:R(e,"x","cos","float32")};return L.runKernel(Ci,t)}var Mb=z({cos_:sE});function iE(e){let t={x:R(e,"x","cosh","float32")};return L.runKernel(Ti,t)}var $b=z({cosh_:iE});function oE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumprod")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ni,r,s)}var Pb=z({cumprod_:oE});function lE(e,t=0,a=!1,n=!1){let r={x:R(e,"x","cumsum")},s={axis:t,exclusive:a,reverse:n};return L.runKernel(Ri,r,s)}var _b=z({cumsum_:lE});function uE(e,t,a,n=!1){let r=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");F(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),F(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),F(a>=0,()=>`size must be non-negative, but got ${a}.`),F(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:a,binaryOutput:n};return L.runKernel(fu,i,o)}var Fb=z({denseBincount_:uE});function dE(e,t,a="NHWC"){let n=R(e,"x","depthToSpace","float32"),r=a==="NHWC"?n.shape[1]:n.shape[2],s=a==="NHWC"?n.shape[2]:n.shape[3],i=a==="NHWC"?n.shape[3]:n.shape[1];F(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),F(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${r} and ${t} for depthToSpace with input shape - ${n.shape}`),P(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying + ${n.shape}`),F(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape - ${n.shape}`),P(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${n.shape}`);let o={x:n},l={blockSize:t,dataFormat:a};return L.runKernel(no,o,l)}var Qb=z({depthToSpace_:JE});function QE(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d","float32"),l=R(t,"filter","depthwiseConv2d","float32"),u=o,d=!1;o.rank===3&&(d=!0,u=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),P(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`);let c=r==="NHWC"?u.shape[3]:u.shape[1];P(c===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${l.shape[2]}.`),Mn("depthwiseConv2d",n,i);let p={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(ro,p,h);return d?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Gh=z({depthwiseConv2d_:QE});function eM(e){let t={x:R(e,"x","diag")};return L.runKernel(vu,t)}var e4=z({diag_:eM});function tM(e,t,a,n,r=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");P(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),P(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),P(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=Q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),P(l.shape[3]===o.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`);let d={x:l,filter:o},c={strides:a,pad:n,dilations:r},p=L.runKernel(so,d,c);return u?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var t4=z({dilation2d_:tM}),ul={};Ke(ul,{assertAndGetBroadcastShape:()=>Ut,getBroadcastDims:()=>a4,getReductionAxes:()=>Ig});function a4(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function Ig(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function Ut(e,t){let a=Math.max(e.length,t.length),n=new Array(a);for(let r=0;r`Error in dot: inputs must all be rank 1 or 2, but got ranks ${a.rank} and ${n.rank}.`);let r=a.rank===1?a.size:a.shape[1],s=n.rank===1?n.size:n.shape[0];if(P(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),a.rank===1&&n.rank===1){let i=Q(a,[1,-1]),o=Q(n,[-1,1]),l=pt(i,o);return Q(l,[])}else if(a.rank===1&&n.rank===2){let i=Q(a,[1,-1]),o=Q(n,[n.shape[0],n.shape[1]]),l=pt(i,o);return Q(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=Q(n,[-1,1]),o=pt(a,i);return Q(o,[o.size])}else{let i=Q(n,[n.shape[0],n.shape[1]]);return pt(a,i)}}var r4=z({dot_:iM});function oM(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return L.runKernel(Ip,a,n)}var hi=z({einsum_:oM});function lM(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(oo,t)}var Tg=z({elu_:lM});function uM(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!DA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var s4=z({ensureShape_:uM});function dM(e){let t=R(e,"x","erf");P(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=Ue(t,"float32"));let a={x:t};return L.runKernel(lo,a)}var i4=z({erf_:dM});function Cg(e,t){for(let a=0;ae[s]);return[a,r]}function Xp(e,t){let a=t.map(n=>1);return o4(e,a,t)}function cM(e,t,a){P(Cg(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function hM(e,t){if(Cg(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function mM(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function fM(e,t){let a=[];for(let n=t-e;n"Axis must be <= rank of the tensor");let n={input:a},r={dim:t};return L.runKernel(ku,n,r)}var Bt=z({expandDims_:SM});function TM(e){let t={x:R(e,"x","expm1")};return L.runKernel(gs,t)}var d4=z({expm1_:TM});function CM(e,t){let a=R(e,"x","tile","string_or_numeric");P(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of reps ${t}.`);let n={x:a},r={reps:t};return L.runKernel($s,n,r)}var Qr=z({tile_:CM});function NM(e,t,a,n="float32"){t==null&&(t=e);let r=Te([e,t],n),s=e<=t?e:t;for(let o=0;o`Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`),P(Zl(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},u={depthRadius:t,bias:a,alpha:n,beta:r},d=L.runKernel(ko,l,u);return o?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var f4=z({localResponseNormalization_:WM});function BM(e){let t={x:R(e,"x","log","float32")};return L.runKernel(ks,t)}var au=z({log_:BM});function VM(e){let t={x:R(e,"x","log1p")};return L.runKernel(Ao,t)}var $g=z({log1p_:VM});function UM(e){return P(es(e),()=>"The f passed in grad(f) must be a function"),(t,a)=>{let n=R(t,"x","tf.grad","string_or_numeric"),r=a!=null?R(a,"dy","tf.grad"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(n),[n],r);return r!=null&&Ca(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),jh(i),i[0]})}}function GM(e){return P(es(e),()=>"The f passed in grads(f) must be a function"),(t,a)=>{P(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=Zd(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...n),n,r);return r!=null&&Ca(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),jh(i),i})}}function HM(e){return P(es(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{P(t instanceof yt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),P(a==null||a instanceof yt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return jh(n),{grad:n[0],value:r}}}function jM(e){return P(es(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{P(Array.isArray(t)&&t.every(r=>r instanceof yt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),P(a==null||a instanceof yt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=L.gradients(()=>e(...t),t,a);return a!=null&&Ca(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),jh(n.grads),n}}function g4(e,t){P(es(e),()=>"The f passed in variableGrads(f) must be a function"),P(t==null||Array.isArray(t)&&t.every(u=>u instanceof Yd),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in L.registeredVariables)t.push(L.registeredVariables[u])}let n=a?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),P(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=L.gradients(e,t,null,s);P(o.some(u=>u!=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()."),P(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((u,d)=>{o[d]!=null&&(l[u.name]=o[d])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function rr(e){return L.customGrad(e)}function jh(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 qM(e){let t={x:R(e,"x","neg")};return L.runKernel(Ru,t)}var Vn=z({neg_:qM});function XM(e){let t={x:R(e,"x","softplus")};return L.runKernel(Jo,t)}var Dg=z({softplus_:XM});function KM(e){let t=R(e,"x","logSigmoid");return rr(a=>({value:Vn(Dg(Vn(a))),gradFunc:n=>te(n,za(Vn(a)))}))(t)}var y4=z({logSigmoid_:KM});function YM(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(Fs,r)}var xe=z({sub_:YM});function ZM(e,t=-1){let a=R(e,"logits","logSoftmax");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and axis was ${t}`);return rr((n,r)=>{let s=fa(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),au(ot(ls(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[d]=u,c=!0,p=ls(d);return xe(l,te(ot(l,t,c),p))}}})(a)}var x4=z({logSoftmax_:ZM});function JM(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=mp(t,n.shape),s=fa(n,r,!0),i=xe(n,s),o=ls(i),l=ot(o,r),u=au(l),d=we(Q(s,u.shape),u);if(a){let c=Xp(d.shape,r);return Q(d,c)}return d}var Pg=z({logSumExp_:JM});function QM(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(bo,r)}var tp=z({logicalAnd_:QM});function eF(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(vo,t)}var _g=z({logicalNot_:eF});function tF(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(wo,r)}var Og=z({logicalOr_:tF});function aF(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Ut(a.shape,n.shape),tp(Og(e,t),_g(tp(e,t)))}var A4=z({logicalXor_:aF}),eh=2147483648;function nF(e,t,a="left"){let n=R(e,"sortedSequence","searchSorted"),r=R(t,"values","searchSorted"),s=n.shape[n.shape.length-1],i=r.shape[r.shape.length-1],o=Q(n,[-1,s]),l=Q(r,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(mt(l.shape)>=eh)throw new Error(`values tensor size must less than ${eh}`);if(o.shape[1]>=eh)throw new Error(`trailing dim_size must less than ${eh} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},d={side:a};return L.runKernel(qo,u,d)}var qh=z({searchSorted_:nF});function b4(e,t){return qh(e,t,"left")}function rF(e,t,a,n,r){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]])),P(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),P($r(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Mn("maxPool",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(So,u,d);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var zg=z({maxPool_:rF});function sF(e,t=[1,1,1],a,n,r,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]])),P(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),P(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Mn("maxPool3d",n,r);let u={x:o},d={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(Cu,u,d);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var v4=z({maxPool3d_:sF});function iF(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=L.runKernel(Nu,s,i);return{result:o[0],indexes:o[1]}}var w4=z({maxPoolWithArgmax_:iF});function oF(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=Et(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(Is,r)}var Lg=z({maximum_:oF});function lF(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(To,n,r)}var ap=z({mean_:lF});function An(e,t="float32"){if(nn(e),t==="complex64"){let n=An(e,"float32"),r=An(e,"float32");return Rr(n,r)}let a=Oh(mt(e),t);return L.makeTensor(a,e,t)}function Yr(e,t="float32"){if(nn(e),t==="complex64"){let n=Yr(e,"float32"),r=An(e,"float32");return Rr(n,r)}let a=og(mt(e),t);return L.makeTensor(a,e,t)}function k4(e,t,{indexing:a="xy"}={}){if(a!=="xy"&&a!=="ij")throw new TypeError(`${a} is not a valid third argument to meshgrid`);if(e===void 0)return[];let n=R(e,"x","meshgrid",e instanceof yt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof yt?t.dtype:"float32"),s=mt(n.shape),i=mt(r.shape);return a==="xy"?(n=Q(n,[1,-1]),r=Q(r,[-1,1]),[pt(Yr([i,1],n.dtype),n),pt(r,Yr([1,s],r.dtype))]):(n=Q(n,[-1,1]),r=Q(r,[1,-1]),[pt(n,Yr([1,i],n.dtype)),pt(Yr([s,1],r.dtype),r)])}function uF(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=Et(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(Ss,r)}var np=z({minimum_:uF});function dF(e,t,a){P(a==="reflect"||a==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${a}.`);let n=R(e,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");P(t.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${t.length}.`);let r=a==="reflect"?1:0;for(let o=0;o"Invalid number of paddings. Must be length of 2 each."),P(t[o][0]>=0&&t[o][0]<=n.shape[o]-r&&t[o][1]>=0&&t[o][1]<=n.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${n.shape[o]-r} or less than 0 for input of shape ${n.shape}`);let s={paddings:t,mode:a},i={x:n};return L.runKernel(No,i,s)}var I4=z({mirrorPad_:dF});function pF(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=Et(a,n);let r={a,b:n};return L.runKernel(Ro,r)}var Ku=z({mod_:pF});function cF(e,t=null,a=!1){e=R(e,"x","moments");let n=mp(t,e.shape),r=ap(e,n,a),s=r.shape;a||(s=Xp(r.shape,n));let i=En(xe(Ue(e,"float32"),Q(r,s))),o=ap(i,n,a);return{mean:r,variance:o}}var S4=z({moments_:cF});function hF(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=Zd(a,"c","multiRNNCell"),i=Zd(n,"h","multiRNNCell"),o=r,l=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);a=a||Math.random();let o={logits:i===1?Q(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=L.runKernel(Eo,o,l);return i===1?Q(u,[u.size]):u}var C4=z({multinomial_:mF});function fF(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=Et(a,n),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(Cs,r)}var Wg=z({notEqual_:fF});function gF(e,t,a=1,n=0,r="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:R(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:a,offValue:n};return L.runKernel($o,s,i)}var vh=z({oneHot_:gF});function yF(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Mu,t)}var N4=z({onesLike_:yF});function xF(e,t){let a=R(e,"v1","outerProduct"),n=R(t,"v2","outerProduct");P(a.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${a.rank} and ${n.rank}.`);let r=Q(a,[-1,1]),s=Q(n,[1,-1]);return pt(r,s)}var R4=z({outerProduct_:xF});function AF(e,t,a=0){let n=R(e,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:a},s={x:n};return L.runKernel(Do,s,r)}var ur=z({pad_:AF});function bF(e,t,a=0){return P(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ur(e,[t],a)}var E4=z({pad1d_:bF});function vF(e,t,a=0){return P(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ur(e,t,a)}var M4=z({pad2d_:vF});function wF(e,t,a=0){return P(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."),ur(e,t,a)}var F4=z({pad3d_:wF});function kF(e,t,a=0){return P(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."),ur(e,t,a)}var $4=z({pad4d_:kF});function IF(e,t,a){let n=R(e,"x","spaceToBatchND");P(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),P(a.length===t.length,()=>`paddings.shape[0] ${a.length} must be equal to [blockShape] ${t.length}`),P(n.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+a[l-1][0]+a[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${a.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:n},s={blockShape:t,paddings:a};return L.runKernel(Lu,r,s)}var Bg=z({spaceToBatchND_:IF});function SF(e,t,a,n,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),n===0&&(n="valid");let o=R(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),P($r(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let d=Nb(l.shape,t,s,r,n),c=[d.dilationHeight,d.dilationWidth],p;n==="same"?p=CF([d.filterHeight,d.filterWidth],c):p=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[m,f]=TF([d.inHeight,d.inWidth],c,p),g=h?n:"valid",y=h?l:Bg(l,c,m),x=(a==="avg"?()=>vg(y,t,s,g,i):()=>zg(y,t,s,g,i))(),A=h?x:wg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function TF(e,t,a){let n=a.map(d=>d[0]),r=a.map(d=>d[1]),s=e.concat(n,r),i=t.map((d,c)=>(d-s[c]%d)%d),o=r.map((d,c)=>d+i[c]),l=t.map((d,c)=>[n[c],o[c]]),u=t.map((d,c)=>[0,i[c]]);return[l,u]}function CF(e,t){let a=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),n=a.map(s=>Math.floor(s/2)),r=a.map((s,i)=>s-n[i]);return a.map((s,i)=>[n[i],r[i]])}var D4=z({pool_:SF});function NF(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(_o,r)}var Vg=z({prelu_:NF});function RF(e,t=null,a=!1){let n=R(e,"x","prod");n.dtype==="bool"&&(n=Ue(n,"int32"));let r={x:n},s={axis:t,keepDims:a};return L.runKernel(Oo,r,s)}var P4=z({prod_:RF});function EF(e,t,a,n){let r=e.map((d,c)=>R(d,`tensors${c}`,"raggedGather","int32")),s=R(t,"paramsDenseValues","raggedGather"),i=R(a,"indices","raggedGather","int32"),o={paramsNestedSplits:r,paramsDenseValues:s,indices:i},l={outputRaggedRank:n},u=L.runKernel(Lh,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var _4=z({raggedGather_:EF});function MF(e,t,a){let n=R(e,"starts","raggedRange"),r=R(t,"limits","raggedRange",n.dtype),s=R(a,"deltas","raggedRange",n.dtype),i={starts:n,limits:r,deltas:s},o=L.runKernel(Wh,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var O4=z({raggedRange_:MF});function FF(e,t,a,n,r){let s=R(e,"shape","raggedTensorToTensor","int32"),i=R(t,"values","raggedTensorToTensor"),o=R(a,"defaultValue","raggedTensorToTensor",i.dtype),l=n.map((c,p)=>R(c,`tensors${p}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},d={rowPartitionTypes:r};return L.runKernel(Bh,u,d)}var z4=z({raggedTensorToTensor_:FF});function $F(e,t,a){nn(e);let n=mt(e),r=null;if(a==null||a==="float32")r=new Float32Array(n);else if(a==="int32")r=new Int32Array(n);else if(a==="bool")r=new Uint8Array(n);else throw new Error(`Unknown data type ${a}`);for(let s=0;sB4,createVideoElement:()=>BF,encodeStrings:()=>V4,expectArrayBuffersEqual:()=>WF,expectArraysClose:()=>PF,expectArraysEqual:()=>OF,expectNumbersClose:()=>zF,expectPromiseToFail:()=>_F,expectValuesInRange:()=>LF,play:()=>VF,testEpsilon:()=>Gg});var DF=.001,B4=.1;function PF(e,t,a){return a==null&&(a=Gg()),v1(e,t,(n,r)=>Hg(n,r,a))}function Gg(){return L.backend.floatPrecision()===32?DF:B4}function v1(e,t,a){let n=!0;if((Jt(e)||Jt(t))&&(n=!1),Jt(e)&&Jt(t)&&(n=!0),n){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=ar(e),o=ar(t);if(!Er(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=Jt(e)?e:rs(e),s=Jt(t)?t:rs(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}. + ${n.shape}`),F(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${n.shape}`);let o={x:n},l={blockSize:t,dataFormat:a};return L.runKernel(Mi,o,l)}var Db=z({depthToSpace_:dE});function pE(e,t,a,n,r="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d","float32"),l=R(t,"filter","depthwiseConv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),F(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`);let c=r==="NHWC"?u.shape[3]:u.shape[1];F(c===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${l.shape[2]}.`),Nn("depthwiseConv2d",n,i);let d={x:u,filter:l},h={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel($i,d,h);return p?Q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Oh=z({depthwiseConv2d_:pE});function cE(e){let t={x:R(e,"x","diag")};return L.runKernel(gu,t)}var Ob=z({diag_:cE});function hE(e,t,a,n,r=[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,u=!1;i.rank===3&&(l=Q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),F(l.shape[3]===o.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`);let p={x:l,filter:o},c={strides:a,pad:n,dilations:r},d=L.runKernel(Pi,p,c);return u?Q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var zb=z({dilation2d_:hE}),al={};Ze(al,{assertAndGetBroadcastShape:()=>Ut,getBroadcastDims:()=>Lb,getReductionAxes:()=>gg});function Lb(e,t){let a=e.length,n=[];for(let r=0;r1&&i===1&&n.unshift(s)}return n}function gg(e,t){let a=[];for(let n=0;n1)&&a.unshift(s)}return a}function Ut(e,t){let a=Math.max(e.length,t.length),n=new Array(a);for(let r=0;r`Error in dot: inputs must all be rank 1 or 2, but got ranks ${a.rank} and ${n.rank}.`);let r=a.rank===1?a.size:a.shape[1],s=n.rank===1?n.size:n.shape[0];if(F(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),a.rank===1&&n.rank===1){let i=Q(a,[1,-1]),o=Q(n,[-1,1]),l=pt(i,o);return Q(l,[])}else if(a.rank===1&&n.rank===2){let i=Q(a,[1,-1]),o=Q(n,[n.shape[0],n.shape[1]]),l=pt(i,o);return Q(l,[l.size])}else if(a.rank===2&&n.rank===1){let i=Q(n,[-1,1]),o=pt(a,i);return Q(o,[o.size])}else{let i=Q(n,[n.shape[0],n.shape[1]]);return pt(a,i)}}var Bb=z({dot_:xE});function AE(e,...t){let a=t.map((r,s)=>R(r,`tensors${s}`,"einsum")),n={equation:e};return L.runKernel(yp,a,n)}var Vs=z({einsum_:AE});function bE(e){let t={x:R(e,"x","elu","float32")};return L.runKernel(Fi,t)}var xg=z({elu_:bE});function vE(e,t){let a=R(e,"x","ensureShape","string_or_numeric");if(!yA(a.shape,t))throw new Error(`EnsureShape: Shape of tensor ${a.shape} is not compatible with expected shape ${t}`);return e}var Vb=z({ensureShape_:vE});function wE(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=Ue(t,"float32"));let a={x:t};return L.runKernel(Di,a)}var Ub=z({erf_:wE});function Ag(e,t){for(let a=0;ae[s]);return[a,r]}function Vp(e,t){let a=t.map(n=>1);return Gb(e,a,t)}function IE(e,t,a){F(Ag(t,a),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${a} input.`)}function SE(e,t){if(Ag(e,t))return null;let a=[];for(let n=0;na.push(n)),a}function CE(e){return e.map((t,a)=>[a,t]).sort((t,a)=>t[1]-a[1]).map(t=>t[0])}function TE(e,t){let a=[];for(let n=t-e;n"Axis must be <= rank of the tensor");let n={input:a},r={dim:t};return L.runKernel(xu,n,r)}var Wt=z({expandDims_:OE});function zE(e){let t={x:R(e,"x","expm1")};return L.runKernel(Li,t)}var qb=z({expm1_:zE});function LE(e,t){let a=R(e,"x","tile","string_or_numeric");F(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of reps ${t}.`);let n={x:a},r={reps:t};return L.runKernel(us,n,r)}var Xr=z({tile_:LE});function WE(e,t,a,n="float32"){t==null&&(t=e);let r=_e([e,t],n),s=e<=t?e:t;for(let o=0;o`Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`),F(Hl(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},u={depthRadius:t,bias:a,alpha:n,beta:r},p=L.runKernel(io,l,u);return o?Q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Jb=z({localResponseNormalization_:JE});function QE(e){let t={x:R(e,"x","log","float32")};return L.runKernel(to,t)}var Yl=z({log_:QE});function eM(e){let t={x:R(e,"x","log1p")};return L.runKernel(ao,t)}var Sg=z({log1p_:eM});function tM(e){return F(Kr(e),()=>"The f passed in grad(f) must be a function"),(t,a)=>{let n=R(t,"x","tf.grad","string_or_numeric"),r=a!=null?R(a,"dy","tf.grad"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(n),[n],r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Lh(i),i[0]})}}function aM(e){return F(Kr(e),()=>"The f passed in grads(f) must be a function"),(t,a)=>{F(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let n=Gd(t,"args","tf.grads","string_or_numeric"),r=a!=null?R(a,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...n),n,r);return r!=null&&Ta(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(i),i})}}function nM(e){return F(Kr(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,a)=>{F(t instanceof yt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:n,value:r}=L.gradients(()=>e(t),[t],a);return Lh(n),{grad:n[0],value:r}}}function rM(e){return F(Kr(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,a)=>{F(Array.isArray(t)&&t.every(r=>r instanceof yt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(a==null||a instanceof yt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let n=L.gradients(()=>e(...t),t,a);return a!=null&&Ta(n.value.shape,a.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lh(n.grads),n}}function Qb(e,t){F(Kr(e),()=>"The f passed in variableGrads(f) must be a function"),F(t==null||Array.isArray(t)&&t.every(u=>u instanceof Ud),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let a=t!=null;if(!a){t=[];for(let u in L.registeredVariables)t.push(L.registeredVariables[u])}let n=a?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),F(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=L.gradients(e,t,null,s);F(o.some(u=>u!=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((u,p)=>{o[p]!=null&&(l[u.name]=o[p])}),n!=null&&n.forEach(u=>l[u.name]=null),{value:i,grads:l}}function tr(e){return L.customGrad(e)}function Lh(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 sM(e){let t={x:R(e,"x","neg")};return L.runKernel(Iu,t)}var Ln=z({neg_:sM});function iM(e){let t={x:R(e,"x","softplus")};return L.runKernel(Vo,t)}var Cg=z({softplus_:iM});function oM(e){let t=R(e,"x","logSigmoid");return tr(a=>({value:Ln(Cg(Ln(a))),gradFunc:n=>te(n,za(Ln(a)))}))(t)}var e4=z({logSigmoid_:oM});function lM(e,t){let a=R(e,"a","sub"),n=R(t,"b","sub");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(Ko,r)}var xe=z({sub_:lM});function uM(e,t=-1){let a=R(e,"logits","logSoftmax");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and axis was ${t}`);return tr((n,r)=>{let s=fa(n,t,!0),i=xe(n,s),o=xe(Ue(i,"float32"),Yl(ot(ns(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,c=!0,d=ns(p);return xe(l,te(ot(l,t,c),d))}}})(a)}var t4=z({logSoftmax_:uM});function dM(e,t=null,a=!1){let n=R(e,"x","logSumExp"),r=op(t,n.shape),s=fa(n,r,!0),i=xe(n,s),o=ns(i),l=ot(o,r),u=Yl(l),p=we(Q(s,u.shape),u);if(a){let c=Vp(p.shape,r);return Q(p,c)}return p}var Tg=z({logSumExp_:dM});function pM(e,t){let a=R(e,"a","logicalAnd","bool"),n=R(t,"b","logicalAnd","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(no,r)}var Xd=z({logicalAnd_:pM});function cM(e){let t={x:R(e,"x","logicalNot","bool")};return L.runKernel(ro,t)}var Ng=z({logicalNot_:cM});function hM(e,t){let a=R(e,"a","logicalOr","bool"),n=R(t,"b","logicalOr","bool");Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(so,r)}var Rg=z({logicalOr_:hM});function mM(e,t){let a=R(e,"a","logicalXor","bool"),n=R(t,"b","logicalXor","bool");return Ut(a.shape,n.shape),Xd(Rg(e,t),Ng(Xd(e,t)))}var a4=z({logicalXor_:mM}),Xc=2147483648;function fM(e,t,a="left"){let n=R(e,"sortedSequence","searchSorted"),r=R(t,"values","searchSorted"),s=n.shape[n.shape.length-1],i=r.shape[r.shape.length-1],o=Q(n,[-1,s]),l=Q(r,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(mt(l.shape)>=Xc)throw new Error(`values tensor size must less than ${Xc}`);if(o.shape[1]>=Xc)throw new Error(`trailing dim_size must less than ${Xc} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:a};return L.runKernel(Do,u,p)}var Wh=z({searchSorted_:fM});function n4(e,t){return Wh(e,t,"left")}function gM(e,t,a,n,r){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(Nr(a,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${i}'`),Nn("maxPool",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r},c=L.runKernel(uo,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Eg=z({maxPool_:gM});function yM(e,t=[1,1,1],a,n,r,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}`),Nn("maxPool3d",n,r);let u={x:o},p={filterSize:t,strides:a,pad:n,dimRoundingMode:r,dataFormat:s},c=L.runKernel(wu,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var r4=z({maxPool3d_:yM});function xM(e,t,a,n,r=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:a,pad:n,includeBatchInIndex:r},o=L.runKernel(ku,s,i);return{result:o[0],indexes:o[1]}}var s4=z({maxPoolWithArgmax_:xM});function AM(e,t){let a=R(e,"a","maximum"),n=R(t,"b","maximum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(lo,r)}var Mg=z({maximum_:AM});function bM(e,t=null,a=!1){let n={x:R(e,"x","mean")},r={axis:t,keepDims:a};return L.runKernel(po,n,r)}var Kd=z({mean_:bM});function yn(e,t="float32"){if(an(e),t==="complex64"){let n=yn(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Eh(mt(e),t);return L.makeTensor(a,e,t)}function Hr(e,t="float32"){if(an(e),t==="complex64"){let n=Hr(e,"float32"),r=yn(e,"float32");return Sr(n,r)}let a=Q1(mt(e),t);return L.makeTensor(a,e,t)}function i4(e,t,{indexing:a="xy"}={}){if(a!=="xy"&&a!=="ij")throw new TypeError(`${a} is not a valid third argument to meshgrid`);if(e===void 0)return[];let n=R(e,"x","meshgrid",e instanceof yt?e.dtype:"float32");if(t===void 0)return[n];let r=R(t,"y","meshgrid",t instanceof yt?t.dtype:"float32"),s=mt(n.shape),i=mt(r.shape);return a==="xy"?(n=Q(n,[1,-1]),r=Q(r,[-1,1]),[pt(Hr([i,1],n.dtype),n),pt(r,Hr([1,s],r.dtype))]):(n=Q(n,[-1,1]),r=Q(r,[1,-1]),[pt(n,Hr([1,i],n.dtype)),pt(Hr([s,1],r.dtype),r)])}function vM(e,t){let a=R(e,"a","minimum"),n=R(t,"b","minimum");[a,n]=Rt(a,n),a.dtype==="bool"&&(a=Ue(a,"int32"),n=Ue(n,"int32")),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(ho,r)}var Yd=z({minimum_:vM});function wM(e,t,a){F(a==="reflect"||a==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${a}.`);let n=R(e,"x","mirrorPad");if(n.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");F(t.length===n.rank,()=>`Padding doesn't match input. Must be ${n.rank}. Got ${t.length}.`);let r=a==="reflect"?1:0;for(let o=0;o"Invalid number of paddings. Must be length of 2 each."),F(t[o][0]>=0&&t[o][0]<=n.shape[o]-r&&t[o][1]>=0&&t[o][1]<=n.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${n.shape[o]-r} or less than 0 for input of shape ${n.shape}`);let s={paddings:t,mode:a},i={x:n};return L.runKernel(mo,i,s)}var o4=z({mirrorPad_:wM});function kM(e,t){let a=R(e,"a","mod"),n=R(t,"b","mod");[a,n]=Rt(a,n);let r={a,b:n};return L.runKernel(fo,r)}var Uu=z({mod_:kM});function IM(e,t=null,a=!1){e=R(e,"x","moments");let n=op(t,e.shape),r=Kd(e,n,a),s=r.shape;a||(s=Vp(r.shape,n));let i=Tn(xe(Ue(e,"float32"),Q(r,s))),o=Kd(i,n,a);return{mean:r,variance:o}}var l4=z({moments_:IM});function SM(e,t,a,n){let r=R(t,"data","multiRNNCell"),s=Gd(a,"c","multiRNNCell"),i=Gd(n,"h","multiRNNCell"),o=r,l=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);a=a||Math.random();let o={logits:i===1?Q(r,[1,-1]):r},l={numSamples:t,seed:a,normalized:n},u=L.runKernel(go,o,l);return i===1?Q(u,[u.size]):u}var d4=z({multinomial_:CM});function TM(e,t){let a=R(e,"a","notEqual","string_or_numeric"),n=R(t,"b","notEqual","string_or_numeric");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n};return L.runKernel(xo,r)}var $g=z({notEqual_:TM});function NM(e,t,a=1,n=0,r="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:R(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:a,offValue:n};return L.runKernel(vo,s,i)}var fh=z({oneHot_:NM});function RM(e){let t={x:R(e,"x","onesLike")};return L.runKernel(Cu,t)}var p4=z({onesLike_:RM});function EM(e,t){let a=R(e,"v1","outerProduct"),n=R(t,"v2","outerProduct");F(a.rank===1&&n.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${a.rank} and ${n.rank}.`);let r=Q(a,[-1,1]),s=Q(n,[1,-1]);return pt(r,s)}var c4=z({outerProduct_:EM});function MM(e,t,a=0){let n=R(e,"x","pad");if(n.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:a},s={x:n};return L.runKernel(wo,s,r)}var ir=z({pad_:MM});function $M(e,t,a=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ir(e,[t],a)}var h4=z({pad1d_:$M});function PM(e,t,a=0){return F(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ir(e,t,a)}var m4=z({pad2d_:PM});function _M(e,t,a=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."),ir(e,t,a)}var f4=z({pad3d_:_M});function FM(e,t,a=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."),ir(e,t,a)}var g4=z({pad4d_:FM});function DM(e,t,a){let n=R(e,"x","spaceToBatchND");F(n.rank>=1+t.length,()=>`input rank ${n.rank} should be > than [blockShape] ${t.length}`),F(a.length===t.length,()=>`paddings.shape[0] ${a.length} must be equal to [blockShape] ${t.length}`),F(n.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+a[l-1][0]+a[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${n.shape.slice(1)} with paddings ${a.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:n},s={blockShape:t,paddings:a};return L.runKernel(_u,r,s)}var Pg=z({spaceToBatchND_:DM});function OM(e,t,a,n,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),n===0&&(n="valid");let o=R(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=Q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(Nr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=pb(l.shape,t,s,r,n),c=[p.dilationHeight,p.dilationWidth],d;n==="same"?d=LM([p.filterHeight,p.filterWidth],c):d=[[0,0],[0,0]];let h=c[0]===1&&c[1]===1,[m,f]=zM([p.inHeight,p.inWidth],c,d),g=h?n:"valid",y=h?l:Pg(l,c,m),x=(a==="avg"?()=>hg(y,t,s,g,i):()=>Eg(y,t,s,g,i))(),A=h?x:mg(x,c,f);return u?Q(A,[A.shape[1],A.shape[2],A.shape[3]]):A}function zM(e,t,a){let n=a.map(p=>p[0]),r=a.map(p=>p[1]),s=e.concat(n,r),i=t.map((p,c)=>(p-s[c]%p)%p),o=r.map((p,c)=>p+i[c]),l=t.map((p,c)=>[n[c],o[c]]),u=t.map((p,c)=>[0,i[c]]);return[l,u]}function LM(e,t){let a=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),n=a.map(s=>Math.floor(s/2)),r=a.map((s,i)=>s-n[i]);return a.map((s,i)=>[n[i],r[i]])}var y4=z({pool_:OM});function WM(e,t){let a=R(e,"x","prelu"),n=R(t,"alpha","prelu"),r={x:a,alpha:n};return L.runKernel(Io,r)}var _g=z({prelu_:WM});function BM(e,t=null,a=!1){let n=R(e,"x","prod");n.dtype==="bool"&&(n=Ue(n,"int32"));let r={x:n},s={axis:t,keepDims:a};return L.runKernel(So,r,s)}var x4=z({prod_:BM});function VM(e,t,a,n){let r=e.map((p,c)=>R(p,`tensors${c}`,"raggedGather","int32")),s=R(t,"paramsDenseValues","raggedGather"),i=R(a,"indices","raggedGather","int32"),o={paramsNestedSplits:r,paramsDenseValues:s,indices:i},l={outputRaggedRank:n},u=L.runKernel($h,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var A4=z({raggedGather_:VM});function UM(e,t,a){let n=R(e,"starts","raggedRange"),r=R(t,"limits","raggedRange",n.dtype),s=R(a,"deltas","raggedRange",n.dtype),i={starts:n,limits:r,deltas:s},o=L.runKernel(Ph,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var b4=z({raggedRange_:UM});function GM(e,t,a,n,r){let s=R(e,"shape","raggedTensorToTensor","int32"),i=R(t,"values","raggedTensorToTensor"),o=R(a,"defaultValue","raggedTensorToTensor",i.dtype),l=n.map((c,d)=>R(c,`tensors${d}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},p={rowPartitionTypes:r};return L.runKernel(_h,u,p)}var v4=z({raggedTensorToTensor_:GM});function HM(e,t,a){an(e);let n=mt(e),r=null;if(a==null||a==="float32")r=new Float32Array(n);else if(a==="int32")r=new Int32Array(n);else if(a==="bool")r=new Uint8Array(n);else throw new Error(`Unknown data type ${a}`);for(let s=0;sI4,createVideoElement:()=>QM,encodeStrings:()=>S4,expectArrayBuffersEqual:()=>JM,expectArraysClose:()=>qM,expectArraysEqual:()=>KM,expectNumbersClose:()=>YM,expectPromiseToFail:()=>XM,expectValuesInRange:()=>ZM,play:()=>e$,testEpsilon:()=>Dg});var jM=.001,I4=.1;function qM(e,t,a){return a==null&&(a=Dg()),f1(e,t,(n,r)=>Og(n,r,a))}function Dg(){return L.backend.floatPrecision()===32?jM:I4}function f1(e,t,a){let n=!0;if((Jt(e)||Jt(t))&&(n=!1),Jt(e)&&Jt(t)&&(n=!0),n){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=Qn(e),o=Qn(t);if(!Cr(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=Jt(e)?e:Qr(e),s=Jt(t)?t:Qr(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}. Actual: ${r}. Expected: ${s}.`);for(let i=0;it.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function OF(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Xr(e)||Xr(e[0])||Xr(t)||Xr(t[0])?v1(e,a,(n,r)=>n==r):v1(e,t,(n,r)=>Hg(n,r,0))}function zF(e,t,a){if(a==null&&(a=Gg()),!Hg(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Hg(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function LF(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function WF(e,t){let a=new Float32Array(e),n=new Float32Array(t);if(a.length!==n.length)throw new Error(`Expected ArrayBuffer to be of length ${n.length}, but it was ${a.length}`);for(let r=0;r{t.addEventListener("loadeddata",n=>a(t)),t.load()})}async function VF(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var jg=class{constructor(e,t,a,n,r){this.mean=e,this.stdDev=t,this.dtype=a,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=Ug.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,a=!1;for(;!a;){let n,r,s;do n=2*this.random()-1,r=2*this.random()-1,s=n*n+r*r;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(a=!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}},UF=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=Ug.alea(r.toString()),this.randn=new jg(0,1,a,!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,a,n,r,s;for(;;){do n=this.randn.nextValue(),s=1+this.c*n;while(s<=0);if(s*=s*s,e=n*n,t=1-.331*e*e,a=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),rthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=a,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Ug.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function HF(e,t,a=1,n="float32",r){if(nn(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new UF(t,a,n,r),i=Te(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),us(t,0)}var q4=z({reverse1d_:t$});function a$(e,t){let a=R(e,"x","reverse");return P(a.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${a.rank}.`),us(a,t)}var X4=z({reverse2d_:a$});function n$(e,t){let a=R(e,"x","reverse");return P(a.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${a.rank}.`),us(a,t)}var K4=z({reverse3d_:n$});function r$(e,t){let a=R(e,"x","reverse");return P(a.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${a.rank}.`),us(a,t)}var Y4=z({reverse4d_:r$});function s$(e){let t={x:R(e,"x","round")};return L.runKernel(Go,t)}var Kg=z({round_:s$});function i$(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Ns,t)}var Z4=z({rsqrt_:i$});function o$(e){let t={x:R(e,"x","selu")};return L.runKernel(Xo,t)}var J4=z({selu_:o$});function l$(e,t,a,n,r,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),u=R(a,"pointwiseFilter","separableConv2d"),d=o,c=!1;if(o.rank===3&&(c=!0,d=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");P(d.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${d.rank}.`),P(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),P(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),P(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),P(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let p=l.shape[2],h=l.shape[3];P(u.shape[2]===p*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${p*h}, but got ${u.shape[2]}.`);let m=Gh(d,l,n,r,i,s),f=qp(m,u,1,"valid",i);return c?Q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Q4=z({separableConv2d_:l$});async function u$(e,t){let a=R(e,"x","setdiff1d"),n=R(t,"y","setdiff1d");P(a.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${a.dtype}) and y (${n.dtype}).`),P(a.rank===1,()=>`x should be 1D tensor, but got x (${a.shape}).`),P(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let r=await a.data(),s=await n.data(),i=new Set(s),o=0;for(let d=0;d`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),_e(n,[t],[a])}var r7=z({slice1d_:h$});function m$(e,t,a){let n=R(e,"x","slice2d");return P(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var s7=z({slice2d_:m$});function f$(e,t,a){let n=R(e,"x","slice3d");return P(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var Qp=z({slice3d_:f$});function g$(e,t,a){let n=R(e,"x","slice4d");return P(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),_e(n,t,a)}var Kh=z({slice4d_:g$});function y$(e,t=-1){let a=R(e,"logits","softmax","float32");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and dim was ${t}`);let n={logits:a},r={dim:t};return L.runKernel(el,n,r)}var Yh=z({softmax_:y$});function x$(e){P(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Sp,t)}var Zh=z({fft_:x$});function A$(e){P(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Tp,t)}var rp=z({ifft_:A$});function b$(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=Q(e,[a,t]);n=rp(r)}else{let r=[a,2*(t-1)],s=Q(ru(e),[a,t]),i=Q(Zp(e),[a,t]),o=us(_e(s,[0,1],[a,t-2]),1),l=te(us(_e(i,[0,1],[a,t-2]),1),Ge(-1)),u=lt([s,o],1),d=lt([i,l],1),c=Q(Rr(u,d),[r[0],r[1]]);n=rp(c)}if(n=ru(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=Q(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var Yg=z({irfft_:b$});function v$(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(Wu,n,r)}var Sa=z({split_:v$});function w$(e,t){P(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let a=e.shape[e.shape.length-1],n=e.size/a,r;if(t!=null&&t0),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=_e(e,m,f),a=t}else if(t!=null&&t>a){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-a,r=lt([e,An(m)],e.shape.length-1),a=t}else r=e;let s=en(r),i=Q(Rr(r,s),[n,a]),o=Zh(i),l=Math.floor(a/2)+1,u=ru(o),d=Zp(o),c=Sa(u,[l,a-l],u.shape.length-1),p=Sa(d,[l,a-l],d.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,Q(Rr(c[0],p[0]),h)}var Jh=z({rfft_:w$});function k$(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=Et(a,n),Ut(a.shape,n.shape);let r={a,b:n},s={};return L.runKernel(Ms,r,s)}var Zg=z({squaredDifference_:k$});function I$(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,PA(a.shape,t).newShape)}var Oe=z({squeeze_:I$});function S$(e,t=0){let a=Zd(e,"tensors","stack","string_or_numeric");P(a.length>=1,()=>"Pass at least one tensor to tf.stack"),a.length>0&&P(t<=a[0].rank,()=>"Axis must be <= rank of the tensor");let n=a,r={axis:t};return L.runKernel(Fu,n,r)}var ca=z({stack_:S$});function T$(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(Ds,a,n)}var Jg=z({step_:T$});function C$(e,t,a,n,r=0,s=0,i=0,o=0,l=0){let u={x:R(e,"x","stridedSlice","string_or_numeric")},d={begin:t,end:a,strides:n,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return L.runKernel(al,u,d)}var i7=z({stridedSlice_:C$});function N$(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(nl,t)}var o7=z({tan_:N$});function Vt(e,t){Fi(e);let a=ar(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Ps(e,null,a,t)}function er(e,t,a){if(Fi(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=ar(e,a);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Ps(e,t,n,a)}function Qg(e,t,a){if(Fi(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=ar(e,a);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Ps(e,t,n,a)}function l7(e,t,a){if(Fi(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=ar(e,a);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Ps(e,t,n,a)}function u7(e,t,a){if(Fi(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=ar(e,a);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Ps(e,t,n,a)}function d7(e,t,a){if(Fi(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=ar(e,a);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||n,Ps(e,t,n,a)}var Qh={};Ke(Qh,{calculateShapes:()=>p7,validateInput:()=>e0,validateUpdateShape:()=>e3});function e3(e,t,a){let n=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${a.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${n}, and batchDim: ${r}.`;if(a.rank1?t.shape[n-1]:1,s=a.length,i=1;for(let c=r;c= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:n},i={k:t,sorted:a},[o,l]=L.runKernel(sl,s,i);return{values:o,indices:l}}var h7=z({topk_:E$});function M$(e,t=0,a=1,n,r){if(nn(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new jg(t,a,n,!0,r),i=Te(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=L.runKernel(Pp,n,r);return{values:s,indices:i}}var f7=z({unique_:F$});function $$(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");P(Zl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(_p,s,i)}var g7=z({unsortedSegmentSum_:$$});function D$(e,t=0){let a=R(e,"x","unstack","string_or_numeric");P(t>=-a.shape.length&&t`Axis = ${t} is not in [-${a.shape.length}, ${a.shape.length})`);let n={value:a},r={axis:t};return L.runKernel(ju,n,r)}var Na=z({unstack_:D$});function y7(e,t){return qh(e,t,"right")}function x7(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function A7(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Ca(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let f=s;fo).reverse()),P(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{P(i>=0&&i`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},s={perm:t};return n.dtype==="complex64"?Pe(()=>{let i=ru(n),o=Zp(n);return i=L.runKernel(Tr,{x:i},s),o=L.runKernel(Tr,{x:o},s),a&&(o=Vn(o)),Rr(i,o)}):L.runKernel(Tr,r,s)}var Si=z({transpose_:O$});function z$(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");eb(s,i),P(Er(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Ge(1),u=xe(l,o),d=te(xe(i,s),u);if(r){P(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");d=ve(d,xe(l,tu(o,c)))}return we(s,d)}var v7=z({movingAverage_:z$});function L$(e,t,a){nn(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");e0(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(Ho,s,i)}var w7=z({scatterND_:L$});function W$(e,t,a,n){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 r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(a.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${a.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function B$(e,t,a,n=0){nn(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);W$(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(tl,o,l)}var k7=z({sparseToDense_:B$});function V$(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(co,n)}var I7=z({gatherND_:V$});function U$(e,t){if(t==null)return e.shape.slice();if(Er(e.shape,t))return t;if(e.shape.length===t.length){let a=[];for(let n=0;n`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),P(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof yt?r.clone():r;let s=U$(r,a),i=1-t,o=ve(Rg(we(Xh(s,0,1,"float32",n),i)),i);return te(r,o)}var S7=z({dropout_:G$});function a3(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function t0(e,t,a){let n=1-e%2,r=new Float32Array(e);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${n.rank}`),P(n.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${n.rank} and targets rank ${r.rank}`),Ca(n.shape.slice(0,n.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=n.shape[n.shape.length-1];P(a>0&&a<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${a}`);let i=await n.data(),o=await r.data(),[l,u]=[i.length/s,s],d=_A("bool",l);for(let c=0;cg.value-f.value),d[c]=0;for(let f=0;fK$,depthwiseConv2d:()=>tD,matMul:()=>nD});function j$(e,t,a,n,r,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]])),P(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),P(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),P(a.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${a}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],d=s==="NHWC"?l.shape[3]:l.shape[1];P(u===a[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${a[2]}.`),P(d===a[3],()=>`Error in conv2dDerFilter: depth of dy (${d}) must match output depth for filter (${a[3]}).`),Mn("conv2dDerFilter",r,i);let c={x:o,dy:l},p={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return L.runKernel(bp,c,p)}var q$=z({conv2DBackpropFilter_:j$});function a0(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Jg(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function n0(e,t){let a=t,n=Ig(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function r0(e,t,a,n){if(t==="linear")return e;if(t==="relu")return Jp(e);if(t==="elu")return Tg(e);if(t==="relu6")return Xg(e);if(t==="prelu")return Vg(e,a);if(t==="leakyrelu")return Fg(e,n);if(t==="sigmoid")return za(e);throw new Error(`Unknown fused activation ${t}.`)}var s0=(e,t)=>!(e>0)||t==="linear";function X$({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(l=l||"linear",s0(L.state.gradientDepth,l)===!1){P(r==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${r} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let S=qp(e,t,a,n,r,s,i);return o!=null&&(S=we(S,o)),r0(S,l,u,d)}let c=R(e,"x","conv2d","float32"),p=R(t,"filter","conv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(c,[1,c.shape[0],c.shape[1],c.shape[2]])),P(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),P(p.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${p.rank}.`),Mn("fused conv2d",n,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];P(p.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${p.shape[2]}.`),P($r(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Hp(h.shape,p.shape,a,s,n,i),y;o!=null&&(y=R(o,"bias","fused conv2d"),[y]=Et(y,c),r==="NHWC"?Ut(g.outShape,y.shape):(P(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),P(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let x;if(u!=null){let S=u.shape;if(P(S.length<=1||S.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${S.length}.`),S.length===1)P(S[0]===1||S[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the number of output channels (${g.outChannels}).`);else if(S.length===3)try{Ut(S,g.outShape)}catch(C){let N=`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(N)}x=R(u,"prelu weights","fused conv2d")}let A=(S,C)=>{P(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,M,F,E]=C,T=a0(S,F,l);P(ep(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let D=Gb(M.shape,T,N,a,n),O=q$(M,T,N.shape,a,n),W=[D,O];if(E!=null){let $=n0(E,T);W.push($)}return W},b={x:h,filter:p,bias:y,preluActivationWeights:x},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return o==null?rr((S,C,N)=>{let M=L.runKernel(as,b,w);return N([C,S,M]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:A}})(h,p):rr((S,C,N,M)=>{let F=L.runKernel(as,b,w);return M([C,S,F,N]),m&&(F=Q(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:A}})(h,p,y)}var K$=z({fusedConv2d_:X$});function Y$(e,t,a,n,r,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 u={x:o,dy:l},d={strides:n,pad:r,dimRoundingMode:i,dilations:s,filterShape:a};return L.runKernel(vp,u,d)}var Z$=z({depthwiseConv2dNativeBackpropFilter_:Y$});function J$(e,t,a,n,r,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 u={dy:o,filter:a},d={strides:n,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},c=L.runKernel(wp,u,d);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Q$=z({depthwiseConv2dNativeBackpropInput_:J$});function eD({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(s0(L.state.gradientDepth,l)===!1){let w=Gh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),r0(w,l,u,d)}let c=R(e,"x","depthwiseConv2d","float32"),p=R(t,"filter","depthwiseConv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(c,[1,c.shape[0],c.shape[1],c.shape[2]])),P(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),P(p.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`),P(h.shape[3]===p.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${p.shape[2]}.`),s==null&&(s=[1,1]),P($r(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Mn("fused depthwiseConv2d",n,i);let f=Hp(h.shape,p.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=Et(g,c),Ut(f.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let x=(w,S)=>{P(ep(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[C,N,M,F]=S,E=a0(w,M,l),T=Q$(N.shape,E,C,a,n,s,i),D=Z$(N,E,C.shape,a,n,s,i);if(F!=null){let O=n0(g,E);return[T,D,O]}return[T,D]},A={x:h,filter:p,bias:g,preluActivationWeights:y},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return o==null?rr((w,S,C)=>{let N=L.runKernel(ns,A,b);return C([S,w,N]),m&&(N=Q(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:x}})(h,p):rr((w,S,C,N)=>{let M=L.runKernel(ns,A,b);return N([S,w,M,C]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:x}})(h,p,g)}var tD=z({fusedDepthwiseConv2d_:eD});function aD({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(s0(L.state.gradientDepth,s)===!1){let F=pt(e,t,a,n);return r!=null&&(F=we(F,r)),r0(F,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=Et(l,u);let d=a?l.shape[l.rank-2]:l.shape[l.rank-1],c=n?u.shape[u.rank-1]:u.shape[u.rank-2],p=a?l.shape[l.rank-1]:l.shape[l.rank-2],h=n?u.shape[u.rank-2]:u.shape[u.rank-1],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=mt(m),y=mt(f);P(d===c,()=>`Error in fused matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${a} and transposeB=${n} must match.`);let x=Ut(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([p,h]),A=a?Q(l,[g,d,p]):Q(l,[g,p,d]),b=n?Q(u,[y,h,c]):Q(u,[y,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=Et(w,l),Ut(x,w.shape));let S;i!=null&&(S=R(i,"prelu weights","fused matMul"));let C=(F,E)=>{let[T,D,O,W]=E,$=a0(Q(F,O.shape),O,s),U,G;if(!a&&!n?(U=pt($,D,!1,!0),G=pt(T,$,!0,!1)):!a&&n?(U=pt($,D,!1,!1),G=pt($,T,!0,!1)):a&&!n?(U=pt(D,$,!1,!0),G=pt(T,$,!1,!1)):(U=pt(D,$,!0,!0),G=pt($,T,!0,!0)),r!=null){let q=n0(W,$);return[U,G,q]}else return[U,G]},N={a:A,b,bias:w,preluActivationWeights:S},M={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?rr((F,E,T)=>{let D=L.runKernel(ts,N,M);return T([F,E,D]),{value:Q(D,x),gradFunc:C}})(A,b):rr((F,E,T,D)=>{let O=L.runKernel(ts,N,M);return D([F,E,O,T]),{value:Q(O,x),gradFunc:C}})(A,b,w)}var nD=z({fusedMatMul_:aD});function rD(e){return t0(e,.54,.46)}var sD=z({hammingWindow_:rD});function iD(e){return t0(e,.5,.5)}var C7=z({hannWindow_:iD});function oD(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(_e(e,s,t)),s+=a;if(n)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),P(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),P(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),P(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),P(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),P(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let d={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return L.runKernel(ao,d,c)}var pD=z({cropAndResize_:dD});function cD(e){let t=R(e,"image","flipLeftRight","float32");P(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let a={image:t};return L.runKernel(uo,a,{})}var hD=z({flipLeftRight_:cD});function mD(e){let t=R(e,"image","grayscaleToRGB"),a=t.rank-1,n=t.shape[a];P(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),P(n===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${n}.`);let r=new Array(t.rank);return r.fill(1,0,a),r[a]=3,Qr(t,r)}var fD=z({grayscaleToRGB_:mD});function gD(e){let t=R(e,"image","RGBToGrayscale"),a=t.rank-1,n=t.shape[a];P(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),P(n===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${n}.`);let r=t.dtype,s=Ue(t,"float32"),i=Vt([.2989,.587,.114]),o;switch(t.rank){case 2:o=hi("ij,j->i",s,i);break;case 3:o=hi("ijk,k->ij",s,i);break;case 4:o=hi("ijkl,l->ijk",s,i);break;case 5:o=hi("ijklm,m->ijkl",s,i);break;case 6:o=hi("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Bt(o,-1),Ue(o,r)}var yD=z({rgbToGrayscale_:gD});function xD(e,t,a=0,n=.5){let r=R(e,"image","rotateWithOffset","float32");P(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:a,center:n};return L.runKernel(ol,s,i)}var AD=z({rotateWithOffset_:xD});function Yu(e,t,a,n,r,s){n==null&&(n=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return a=Math.min(a,i),P(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),P(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),P(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),P(t.rank===1,()=>"scores must be a 1D tensor"),P(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),P(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s}}function bD(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Yu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return L.runKernel(Mo,{boxes:s,scores:i},l)}var vD=z({nonMaxSuppression_:bD});function wD(e,t,a){let n=kD(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function kD(e,t,a){return SD(e,t,a||ID)}function ID(e,t){return e>t?1:e>>1);let o=a(t,e[s]);o>0?n=s+1:(r=s,i=!o)}return i?n:-n-1}function R7(e,t,a,n,r){return r3(e,t,a,n,r,0)}function E7(e,t,a,n,r,s){return r3(e,t,a,n,r,0,!1,s,!0)}function M7(e,t,a,n,r,s){return r3(e,t,a,n,r,s,!0)}function r3(e,t,a,n,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;gr&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(c5);let d=s>0?-.5/s:0,c=[],p=[];for(;c.length0;){let g=u.pop(),{score:y,boxIndex:x,suppressBeginIndex:A}=g;if(y=A;--w){let S=TD(e,x,c[w]);if(S>=n){b=!0;break}if(g.score=g.score*CD(n,d,S),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===y?(c.push(x),p.push(g.score)):g.score>r&&wD(u,g,c5))}let h=c.length,m=a-h;o&&m>0&&(c.push(...new Array(m).fill(0)),p.push(...new Array(m).fill(0)));let f={selectedIndices:c};return i&&(f.selectedScores=p),l&&(f.validOutputs=h),f}function TD(e,t,a){let n=e.subarray(t*4,t*4+4),r=e.subarray(a*4,a*4+4),s=Math.min(n[0],n[2]),i=Math.min(n[1],n[3]),o=Math.max(n[0],n[2]),l=Math.max(n[1],n[3]),u=Math.min(r[0],r[2]),d=Math.min(r[1],r[3]),c=Math.max(r[0],r[2]),p=Math.max(r[1],r[3]),h=(o-s)*(l-i),m=(c-u)*(p-d);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,d),y=Math.min(o,c),x=Math.min(l,p),A=Math.max(y-f,0)*Math.max(x-g,0);return A/(h+m-A)}function CD(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function c5(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function ND(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Yu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],d=l[1],{selectedIndices:c}=R7(u,d,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Vt(c,"int32")}var RD=ND;function ED(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Yu(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},d={maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s},c=L.runKernel(Fo,u,d);return{selectedIndices:c[0],selectedScores:c[1]}}var MD=z({nonMaxSuppressionWithScore_:ED});async function FD(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Yu(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),d=u[0],c=u[1],{selectedIndices:p,selectedScores:h}=M7(d,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Vt(p,"int32"),selectedScores:Vt(h)}}var $D=FD;function DD(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Yu(i,o,a,n,r,null),u=l.maxOutputSize,d=l.iouThreshold,c=l.scoreThreshold,p={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:d,scoreThreshold:c,padToMaxOutputSize:s},m=L.runKernel(Eu,p,h);return{selectedIndices:m[0],validOutputs:m[1]}}var PD=z({nonMaxSuppressionPadded_:DD});async function _D(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Yu(i,o,a,n,r,null),u=l.maxOutputSize,d=l.iouThreshold,c=l.scoreThreshold,[p,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:m,validOutputs:f}=E7(p,h,u,d,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Vt(m,"int32"),validOutputs:Ge(f,"int32")}}var OD=_D;function zD(e,t,a=!1,n=!1){let r=R(e,"images","resizeBilinear");P(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),P(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),P(n===!1||a===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(Bo,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var LD=z({resizeBilinear_:zD});function WD(e,t,a=!1,n=!1){let r=R(e,"images","resizeNearestNeighbor");P(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),P(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),P(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),P(n===!1||a===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(Wo,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var BD=z({resizeNearestNeighbor_:WD});function VD(e,t="binary",a=!1,n=.5){let r=R(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=te(Vt([n]),255),d,c,p,h;if(P(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),P(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),P(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),P(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[d,c,p]=Sa(r,[1,1,1],-1);let f=te(d,s),g=te(c,i),y=te(p,o);h=we(we(f,g),y)}else h=e;if(t==="otsu"){let f=kg(Ue(Kg(h),"int32"),Ve([]),256);u=UD(f,l)}let m=a?Hh(h,u):Yp(h,u);return Ue(te(m,255),"int32")}function UD(e,t){let a=Vt([-1]),n=Vt([0]),r=Vt([0]),s,i,o,l,u,d;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${i.rank}.`),P(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),P(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:a,fillMode:n,fillValue:r,outputShape:s};return L.runKernel(il,l,u)}var jD=z({transform_:HD});function qD(e,t,a){let n=R(e,"a","bandPart");P(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let r=n.shape,[s,i]=n.shape.slice(-2),o,l;typeof t=="number"?(P(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),P(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),o=R(t<0?s:t,"numLower","bandPart")):(P(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),o=Cr(bh(t,0),s,np(t,s))),typeof a=="number"?(P(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`),P(a<=i,()=>`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`),l=R(a<0?i:a,"numUpper","bandPart")):(P(a.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),l=Cr(bh(a,0),i,np(a,i)));let u=Q(nu(0,s,1,"int32"),[-1,1]),d=nu(0,i,1,"int32"),c=xe(u,d),p=tp(Hh(c,o),Mg(c,Vn(l))),h=An([s,i],n.dtype);return Q(ca(Na(Q(n,[-1,s,i])).map(m=>Cr(p,m,h))),r)}var XD=z({bandPart_:qD});function KD(e){let t;if(Array.isArray(e)){t=!1,P(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let r=e[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=Sa(e,e.shape[0],0).map(r=>Oe(r,[0]));P(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let a=[],n=e;for(let r=0;r{let s=n[r];if(r>0)for(let i=0;i=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return h5(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Na(Q(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,d]=h5(l,t);r.push(u),s.push(d)});let i=Q(ca(r,0),e.shape),o=Q(ca(s,0),e.shape);return[i,o]}}function h5(e,t=!1){return L.tidy(()=>{P(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let a=e.shape[0],n=e.shape[1],r=Ng(a),s=Ia(e),i=er([[1]],[1,1]),o=Ia(i),l=a>=n?n:a;for(let u=0;u{let h=_e(s,[u,u],[a-u,1]),m=Kp(h),f=_e(s,[u,u],[1,1]),g=Cr(Yp(f,0),er([[-1]]),er([[1]])),y=xe(f,te(g,m)),x=ve(h,y);x.shape[0]===1?o=Ia(i):o=lt([i,_e(x,[1,0],[x.shape[0]-1,x.shape[1]])],0);let A=Vn(ve(pt(g,y),m)),b=_e(s,[u,0],[a-u,n]),w=te(A,o),S=Si(o);if(u===0)s=xe(b,pt(w,pt(S,b)));else{let M=xe(b,pt(w,pt(S,b)));s=lt([_e(s,[0,0],[u,n]),M],0)}let C=Si(w),N=_e(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=xe(N,pt(pt(N,o),C));else{let M=xe(N,pt(pt(N,o),C));r=lt([_e(r,[0,0],[a,u]),M],1)}return[o,s,r]}),J([d,c,p])}return!t&&a>n&&(r=_e(r,[0,0],[a,n]),s=_e(s,[0,0],[n,n])),[r,s]})}var JD=z({qr_:ZD}),wa;(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"})(wa||(wa={}));function QD(e,t,a=wa.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:te(n,r);if(a===wa.NONE)return s;if(a===wa.SUM)return ot(s);if(a===wa.MEAN){if(r==null)return ap(s);{let i=n.size/r.size,o=ve(ot(s),ot(r));return i>1?ve(o,Ge(i)):o}}if(a===wa.SUM_BY_NONZERO_WEIGHTS){if(r==null)return ve(ot(s),Ge(n.size));{let i=te(r,Yr(n.shape)),o=Ue(ot(Wg(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Dr=z({computeWeightedLoss_:QD});function eP(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Ca(r.shape,s.shape,"Error in absoluteDifference: ");let o=Ja(xe(r,s));return Dr(o,i,n)}var tP=z({absoluteDifference_:eP});function aP(e,t,a,n,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Ca(s.shape,i.shape,"Error in cosineDistance: ");let l=Ge(1),u=xe(l,ot(te(s,i),a,!0));return Dr(u,o,r)}var nP=z({cosineDistance_:aP});function rP(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Ca(r.shape,s.shape,"Error in hingeLoss: ");let o=Ge(1);r=xe(te(Ge(2),r),o);let l=Jp(xe(o,te(r,s)));return Dr(l,i,n)}var sP=z({hingeLoss_:rP});function iP(e,t,a,n=1,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Ca(s.shape,i.shape,"Error in huberLoss: ");let l=Ge(n),u=Ja(xe(i,s)),d=np(u,l),c=xe(u,d),p=we(te(Ge(.5),En(d)),te(l,c));return Dr(p,o,r)}var oP=z({huberLoss_:iP});function lP(e,t,a,n=1e-7,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Ca(s.shape,i.shape,"Error in logLoss: ");let l=Ge(1),u=Ge(n),d=Vn(te(s,au(we(i,u)))),c=te(xe(l,s),au(we(xe(l,i),u))),p=xe(d,c);return Dr(p,o,r)}var uP=z({logLoss_:lP});function dP(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Ca(r.shape,s.shape,"Error in meanSquaredError: ");let o=Zg(r,s);return Dr(o,i,n)}var pP=z({meanSquaredError_:dP});function cP(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Ca(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=Jp(n),s=te(n,a),i=$g(ls(Vn(Ja(n))));return we(xe(r,s),i)}function hP(e,t,a,n=0,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","sigmoidCrossEntropy")),Ca(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Ge(n),d=Ge(1),c=Ge(.5);s=we(te(s,xe(d,u)),te(c,u))}let l=cP(s,i);return Dr(l,o,r)}var mP=z({sigmoidCrossEntropy_:hP});function fP(e,t,a=-1){if(a===-1&&(a=t.rank-1),a!==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 ${a}`);return rr((n,r,s)=>{let i=Pg(r,[a],!0),o=xe(Ue(r,"float32"),i);s([n,o]);let l=Vn(te(o,n));return{value:ot(l,[a]),gradFunc:(u,d)=>{let[c,p]=d,h=Xp(u.shape,[a]);return[te(Q(u,h),xe(Ue(c,"float32"),ls(p))),te(Q(u,h),xe(ls(p),Ue(c,"float32")))]}}})(e,t)}function gP(e,t,a,n=0,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","softmaxCrossEntropy")),Ca(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Ge(n),d=Ge(1),c=Ge(s.shape[1]);s=we(te(s,xe(d,u)),ve(u,c))}let l=fP(s,i);return Dr(l,o,r)}var yP=z({softmaxCrossEntropy_:gP});function xP(e,t,a,n){let r=R(e,"indices","sparseFillEmptyRows","int32"),s=R(t,"values","sparseFillEmptyRows"),i=R(a,"denseShape","sparseFillEmptyRows","int32"),o=R(n,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape - ${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=L.runKernel(Mp,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var AP=z({sparseFillEmptyRows_:xP});function bP(e,t,a){let n=R(e,"inputIndices","sparseReshape","int32"),r=R(t,"inputShape","sparseReshape","int32"),s=R(a,"newShape","sparseReshape","int32");if(n.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape - ${n.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:n,inputShape:r,newShape:s},o=L.runKernel(Bu,i);return{outputIndices:o[0],outputShape:o[1]}}var vP=z({sparseReshape_:bP});function wP(e,t,a){let n=R(e,"data","sparseSegmentMean"),r=R(t,"indices","sparseSegmentMean","int32"),s=R(a,"segmentIds","sparseSegmentMean","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function XM(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function KM(e,t){let a=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Ur(e)||Ur(e[0])||Ur(t)||Ur(t[0])?f1(e,a,(n,r)=>n==r):f1(e,t,(n,r)=>Og(n,r,0))}function YM(e,t,a){if(a==null&&(a=Dg()),!Og(e,t,a))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Og(e,t,a){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>a)}function ZM(e,t,a){for(let n=0;na)throw new Error(`Value out of range:${e[n]} low: ${t}, high: ${a}`)}function JM(e,t){let a=new Float32Array(e),n=new Float32Array(t);if(a.length!==n.length)throw new Error(`Expected ArrayBuffer to be of length ${n.length}, but it was ${a.length}`);for(let r=0;r{t.addEventListener("loadeddata",n=>a(t)),t.load()})}async function e$(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var zg=class{constructor(e,t,a,n,r){this.mean=e,this.stdDev=t,this.dtype=a,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=Fg.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,a=!1;for(;!a;){let n,r,s;do n=2*this.random()-1,r=2*this.random()-1,s=n*n+r*r;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(a=!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}},t$=class{constructor(e,t,a,n){this.alpha=e,this.beta=1/t,this.dtype=a;let r=n||Math.random();this.randu=Fg.alea(r.toString()),this.randn=new zg(0,1,a,!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,a,n,r,s;for(;;){do n=this.randn.nextValue(),s=1+this.c*n;while(s<=0);if(s*=s*s,e=n*n,t=1-.331*e*e,a=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),rthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=a,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Fg.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function n$(e,t,a=1,n="float32",r){if(an(e),a==null&&(a=1),n==null&&(n="float32"),n!=="float32"&&n!=="int32")throw new Error(`Unsupported data type ${n}`);let s=new t$(t,a,n,r),i=_e(e,n);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),rs(t,0)}var E4=z({reverse1d_:h$});function m$(e,t){let a=R(e,"x","reverse");return F(a.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${a.rank}.`),rs(a,t)}var M4=z({reverse2d_:m$});function f$(e,t){let a=R(e,"x","reverse");return F(a.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${a.rank}.`),rs(a,t)}var $4=z({reverse3d_:f$});function g$(e,t){let a=R(e,"x","reverse");return F(a.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${a.rank}.`),rs(a,t)}var P4=z({reverse4d_:g$});function y$(e){let t={x:R(e,"x","round")};return L.runKernel($o,t)}var Bg=z({round_:y$});function x$(e){let t={x:R(e,"x","rsqrt","float32")};return L.runKernel(Po,t)}var _4=z({rsqrt_:x$});function A$(e){let t={x:R(e,"x","selu")};return L.runKernel(Oo,t)}var F4=z({selu_:A$});function b$(e,t,a,n,r,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),u=R(a,"pointwiseFilter","separableConv2d"),p=o,c=!1;if(o.rank===3&&(c=!0,p=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(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),F(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),F(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),F(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),F(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=l.shape[2],h=l.shape[3];F(u.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${u.shape[2]}.`);let m=Oh(p,l,n,r,i,s),f=Bp(m,u,1,"valid",i);return c?Q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var D4=z({separableConv2d_:b$});async function v$(e,t){let a=R(e,"x","setdiff1d"),n=R(t,"y","setdiff1d");F(a.dtype===n.dtype,()=>`x and y should have the same dtype, but got x (${a.dtype}) and y (${n.dtype}).`),F(a.rank===1,()=>`x should be 1D tensor, but got x (${a.shape}).`),F(n.rank===1,()=>`y should be 1D tensor, but got y (${n.shape}).`);let r=await a.data(),s=await n.data(),i=new Set(s),o=0;for(let p=0;p`slice1d expects a rank-1 tensor, but got a rank-${n.rank} tensor`),Fe(n,[t],[a])}var B4=z({slice1d_:S$});function C$(e,t,a){let n=R(e,"x","slice2d");return F(n.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var V4=z({slice2d_:C$});function T$(e,t,a){let n=R(e,"x","slice3d");return F(n.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var qp=z({slice3d_:T$});function N$(e,t,a){let n=R(e,"x","slice4d");return F(n.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${n.rank} tensor`),Fe(n,t,a)}var Vh=z({slice4d_:N$});function R$(e,t=-1){let a=R(e,"logits","softmax","float32");if(t===-1&&(t=a.rank-1),t!==a.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a.rank} and dim was ${t}`);let n={logits:a},r={dim:t};return L.runKernel(Ho,n,r)}var Uh=z({softmax_:R$});function E$(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(xp,t)}var Gh=z({fft_:E$});function M$(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Ap,t)}var Zd=z({ifft_:M$});function $$(e){let t=e.shape[e.shape.length-1],a=e.size/t,n;if(t<=2){let r=Q(e,[a,t]);n=Zd(r)}else{let r=[a,2*(t-1)],s=Q(Jl(e),[a,t]),i=Q(Hp(e),[a,t]),o=rs(Fe(s,[0,1],[a,t-2]),1),l=te(rs(Fe(i,[0,1],[a,t-2]),1),Ge(-1)),u=lt([s,o],1),p=lt([i,l],1),c=Q(Sr(u,p),[r[0],r[1]]);n=Zd(c)}if(n=Jl(n),e.rank===3&&e.shape[0]!==0){let r=n,s=e.shape[0];n=Q(n,[s,n.shape[0]/s,n.shape[1]]),r.dispose()}return n}var Vg=z({irfft_:$$});function P$(e,t,a=0){let n={x:R(e,"x","split")},r={numOrSizeSplits:t,axis:a};return L.runKernel(Fu,n,r)}var Sa=z({split_:P$});function _$(e,t){F(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let a=e.shape[e.shape.length-1],n=e.size/a,r;if(t!=null&&t0),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=Fe(e,m,f),a=t}else if(t!=null&&t>a){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-a,r=lt([e,yn(m)],e.shape.length-1),a=t}else r=e;let s=Qa(r),i=Q(Sr(r,s),[n,a]),o=Gh(i),l=Math.floor(a/2)+1,u=Jl(o),p=Hp(o),c=Sa(u,[l,a-l],u.shape.length-1),d=Sa(p,[l,a-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,Q(Sr(c[0],d[0]),h)}var Hh=z({rfft_:_$});function F$(e,t){let a=R(e,"a","squaredDifference"),n=R(t,"b","squaredDifference");[a,n]=Rt(a,n),Ut(a.shape,n.shape);let r={a,b:n},s={};return L.runKernel(qo,r,s)}var Ug=z({squaredDifference_:F$});function D$(e,t){let a=R(e,"x","squeeze","string_or_numeric");return Q(a,xA(a.shape,t).newShape)}var Oe=z({squeeze_:D$});function O$(e,t=0){let a=Gd(e,"tensors","stack","string_or_numeric");F(a.length>=1,()=>"Pass at least one tensor to tf.stack"),a.length>0&&F(t<=a[0].rank,()=>"Axis must be <= rank of the tensor");let n=a,r={axis:t};return L.runKernel(Tu,n,r)}var ca=z({stack_:O$});function z$(e,t=0){let a={x:R(e,"x","step")},n={alpha:t};return L.runKernel(ds,a,n)}var Gg=z({step_:z$});function L$(e,t,a,n,r=0,s=0,i=0,o=0,l=0){let u={x:R(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:a,strides:n,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return L.runKernel(Xo,u,p)}var U4=z({stridedSlice_:L$});function W$(e){let t={x:R(e,"x","tan","float32")};return L.runKernel(Yo,t)}var G4=z({tan_:W$});function Bt(e,t){ii(e);let a=Qn(e,t);if(a.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ps(e,null,a,t)}function Zn(e,t,a){if(ii(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let n=Qn(e,a);if(n.length!==2&&n.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return ps(e,t,n,a)}function Hg(e,t,a){if(ii(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let n=Qn(e,a);if(n.length!==3&&n.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return ps(e,t,n,a)}function H4(e,t,a){if(ii(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let n=Qn(e,a);if(n.length!==4&&n.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return ps(e,t,n,a)}function j4(e,t,a){if(ii(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let n=Qn(e,a);if(n.length!==5&&n.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return ps(e,t,n,a)}function q4(e,t,a){if(ii(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let n=Qn(e,a);if(n.length!==6&&n.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(n.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||n,ps(e,t,n,a)}var jh={};Ze(jh,{calculateShapes:()=>X4,validateInput:()=>qh,validateUpdateShape:()=>jg});function jg(e,t,a){let n=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${a.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${n}, and batchDim: ${r}.`;if(a.rank1?t.shape[n-1]:1,s=a.length,i=1;for(let c=r;c= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:n},i={k:t,sorted:a},[o,l]=L.runKernel(Jo,s,i);return{values:o,indices:l}}var Y4=z({topk_:V$});function U$(e,t=0,a=1,n,r){if(an(e),n!=null&&n==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new zg(t,a,n,!0,r),i=_e(e,n);for(let o=0;o0,()=>"The input tensor must be at least 1D");let n={x:a},r={axis:t},[s,i]=L.runKernel(Rp,n,r);return{values:s,indices:i}}var J4=z({unique_:G$});function H$(e,t,a){let n=R(e,"x","unsortedSegmentSum"),r=R(t,"segmentIds","unsortedSegmentSum","int32");F(Hl(a),()=>"numSegments must be of dtype int");let s={x:n,segmentIds:r},i={numSegments:a};return L.runKernel(Ep,s,i)}var Q4=z({unsortedSegmentSum_:H$});function j$(e,t=0){let a=R(e,"x","unstack","string_or_numeric");F(t>=-a.shape.length&&t`Axis = ${t} is not in [-${a.shape.length}, ${a.shape.length})`);let n={value:a},r={axis:t};return L.runKernel(Wu,n,r)}var Na=z({unstack_:j$});function e7(e,t){return Wh(e,t,"right")}function t7(e,t=!0,a,n){return L.makeVariable(e,t,a,n)}function a7(e,t){let a=[];for(let s=0;s0,()=>"mask cannot be scalar"),Ta(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let f=s;fo).reverse()),F(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(i=>{F(i>=0&&i`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},s={perm:t};return n.dtype==="complex64"?De(()=>{let i=Jl(n),o=Hp(n);return i=L.runKernel(wr,{x:i},s),o=L.runKernel(wr,{x:o},s),a&&(o=Ln(o)),Sr(i,o)}):L.runKernel(wr,r,s)}var Qs=z({transpose_:K$});function Y$(e,t,a,n,r=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(a,"decay","movingAverage");OA(s,i),F(Cr(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Ge(1),u=xe(l,o),p=te(xe(i,s),u);if(r){F(n!=null,()=>"When using zeroDebias: true, step is required.");let c=R(n,"step","movingAverage");p=ve(p,xe(l,Kl(o,c)))}return we(s,p)}var r7=z({movingAverage_:Y$});function Z$(e,t,a){an(a);let n=R(e,"indices","scatterND","int32"),r=R(t,"updates","scatterND");qh(r,n,a);let s={indices:n,updates:r},i={shape:a};return L.runKernel(_o,s,i)}var s7=z({scatterND_:Z$});function J$(e,t,a,n){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 r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(a.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${a.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==n.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function Q$(e,t,a,n=0){an(a);let r=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense","string_or_numeric"),i=R(n,"defaultValue","sparseToDense",s.dtype);J$(r,s,a,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:a};return L.runKernel(jo,o,l)}var i7=z({sparseToDense_:Q$});function eP(e,t){let a=R(t,"indices","gatherND","int32"),n={params:R(e,"x","gatherND","string_or_numeric"),indices:a};return L.runKernel(Gi,n)}var o7=z({gatherND_:eP});function tP(e,t){if(t==null)return e.shape.slice();if(Cr(e.shape,t))return t;if(e.shape.length===t.length){let a=[];for(let n=0;n`x has to be a floating point tensor since it's going to be scaled, but got a ${r.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 yt?r.clone():r;let s=tP(r,a),i=1-t,o=ve(vg(we(Bh(s,0,1,"float32",n),i)),i);return te(r,o)}var l7=z({dropout_:aP});function Xg(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Xh(e,t,a){let n=1-e%2,r=new Float32Array(e);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${n.rank}`),F(n.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${n.rank} and targets rank ${r.rank}`),Ta(n.shape.slice(0,n.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=n.shape[n.shape.length-1];F(a>0&&a<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${a}`);let i=await n.data(),o=await r.data(),[l,u]=[i.length/s,s],p=AA("bool",l);for(let c=0;cg.value-f.value),p[c]=0;for(let f=0;foP,depthwiseConv2d:()=>hP,matMul:()=>fP});function rP(e,t,a,n,r,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(a.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${a}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],p=s==="NHWC"?l.shape[3]:l.shape[1];F(u===a[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${a[2]}.`),F(p===a[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${a[3]}).`),Nn("conv2dDerFilter",r,i);let c={x:o,dy:l},d={strides:n,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:a};return L.runKernel(hp,c,d)}var sP=z({conv2DBackpropFilter_:rP});function Kh(e,t,a){if(a==null||a==="linear")return e;if(a==="relu")return te(e,Gg(t));throw new Error(`Cannot compute gradient for fused activation ${a}.`)}function Yh(e,t){let a=t,n=gg(e.shape,t.shape);return n.length>0&&(a=ot(a,n)),Q(a,e.shape)}function Zh(e,t,a,n){if(t==="linear")return e;if(t==="relu")return jp(e);if(t==="elu")return xg(e);if(t==="relu6")return Wg(e);if(t==="prelu")return _g(e,a);if(t==="leakyrelu")return Ig(e,n);if(t==="sigmoid")return za(e);throw new Error(`Unknown fused activation ${t}.`)}var Jh=(e,t)=>!(e>0)||t==="linear";function iP({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(l=l||"linear",Jh(L.state.gradientDepth,l)===!1){F(r==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${r} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let I=Bp(e,t,a,n,r,s,i);return o!=null&&(I=we(I,o)),Zh(I,l,u,p)}let c=R(e,"x","conv2d","float32"),d=R(t,"filter","conv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(c,[1,c.shape[0],c.shape[1],c.shape[2]])),F(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),F(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),Nn("fused conv2d",n,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];F(d.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${d.shape[2]}.`),F(Nr(a,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let g=Lp(h.shape,d.shape,a,s,n,i),y;o!=null&&(y=R(o,"bias","fused conv2d"),[y]=Rt(y,c),r==="NHWC"?Ut(g.outShape,y.shape):(F(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),F(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let x;if(u!=null){let I=u.shape;if(F(I.length<=1||I.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${I.length}.`),I.length===1)F(I[0]===1||I[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the number of output channels (${g.outChannels}).`);else if(I.length===3)try{Ut(I,g.outShape)}catch(T){let N=`Error in fused conv2d: PReLU activation weights (${I}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(N)}x=R(u,"prelu weights","fused conv2d")}let A=(I,T)=>{F(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[N,M,$,E]=T,S=Kh(I,$,l);F(qd(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let _=Tb(M.shape,S,N,a,n),O=sP(M,S,N.shape,a,n),W=[_,O];if(E!=null){let P=Yh(E,S);W.push(P)}return W},b={x:h,filter:d,bias:y,preluActivationWeights:x},w={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((I,T,N)=>{let M=L.runKernel(Zr,b,w);return N([T,I,M]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:A}})(h,d):tr((I,T,N,M)=>{let $=L.runKernel(Zr,b,w);return M([T,I,$,N]),m&&($=Q($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:A}})(h,d,y)}var oP=z({fusedConv2d_:iP});function lP(e,t,a,n,r,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 u={x:o,dy:l},p={strides:n,pad:r,dimRoundingMode:i,dilations:s,filterShape:a};return L.runKernel(mp,u,p)}var uP=z({depthwiseConv2dNativeBackpropFilter_:lP});function dP(e,t,a,n,r,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 u={dy:o,filter:a},p={strides:n,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},c=L.runKernel(fp,u,p);return l?Q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var pP=z({depthwiseConv2dNativeBackpropInput_:dP});function cP({x:e,filter:t,strides:a,pad:n,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(Jh(L.state.gradientDepth,l)===!1){let w=Oh(e,t,a,n,r,s,i);return o!=null&&(w=we(w,o)),Zh(w,l,u,p)}let c=R(e,"x","depthwiseConv2d","float32"),d=R(t,"filter","depthwiseConv2d","float32"),h=c,m=!1;c.rank===3&&(m=!0,h=Q(c,[1,c.shape[0],c.shape[1],c.shape[2]])),F(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),F(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),F(h.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),s==null&&(s=[1,1]),F(Nr(a,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`),Nn("fused depthwiseConv2d",n,i);let f=Lp(h.shape,d.shape,a,s,n,i,!0),g;o!=null&&(g=R(o,"bias","fused conv2d"),[g]=Rt(g,c),Ut(f.outShape,g.shape));let y;u!=null&&(y=R(u,"prelu weights","fused depthwiseConv2d"));let x=(w,I)=>{F(qd(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[T,N,M,$]=I,E=Kh(w,M,l),S=pP(N.shape,E,T,a,n,s,i),_=uP(N,E,T.shape,a,n,s,i);if($!=null){let O=Yh(g,E);return[S,_,O]}return[S,_]},A={x:h,filter:d,bias:g,preluActivationWeights:y},b={strides:a,pad:n,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?tr((w,I,T)=>{let N=L.runKernel(Jr,A,b);return T([I,w,N]),m&&(N=Q(N,[N.shape[1],N.shape[2],N.shape[3]])),{value:N,gradFunc:x}})(h,d):tr((w,I,T,N)=>{let M=L.runKernel(Jr,A,b);return N([I,w,M,T]),m&&(M=Q(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:x}})(h,d,g)}var hP=z({fusedDepthwiseConv2d_:cP});function mP({a:e,b:t,transposeA:a=!1,transposeB:n=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Jh(L.state.gradientDepth,s)===!1){let $=pt(e,t,a,n);return r!=null&&($=we($,r)),Zh($,s,i,o)}let l=R(e,"a","fused matMul"),u=R(t,"b","fused matMul");[l,u]=Rt(l,u);let p=a?l.shape[l.rank-2]:l.shape[l.rank-1],c=n?u.shape[u.rank-1]:u.shape[u.rank-2],d=a?l.shape[l.rank-1]:l.shape[l.rank-2],h=n?u.shape[u.rank-2]:u.shape[u.rank-1],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=mt(m),y=mt(f);F(p===c,()=>`Error in fused matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${a} and transposeB=${n} must match.`);let x=Ut(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([d,h]),A=a?Q(l,[g,p,d]):Q(l,[g,d,p]),b=n?Q(u,[y,h,c]):Q(u,[y,c,h]),w;r!=null&&(w=R(r,"bias","fused matMul"),[w]=Rt(w,l),Ut(x,w.shape));let I;i!=null&&(I=R(i,"prelu weights","fused matMul"));let T=($,E)=>{let[S,_,O,W]=E,P=Kh(Q($,O.shape),O,s),U,G;if(!a&&!n?(U=pt(P,_,!1,!0),G=pt(S,P,!0,!1)):!a&&n?(U=pt(P,_,!1,!1),G=pt(P,S,!0,!1)):a&&!n?(U=pt(_,P,!1,!0),G=pt(S,P,!1,!1)):(U=pt(_,P,!0,!0),G=pt(P,S,!0,!0)),r!=null){let q=Yh(W,P);return[U,G,q]}else return[U,G]},N={a:A,b,bias:w,preluActivationWeights:I},M={transposeA:a,transposeB:n,activation:s,leakyreluAlpha:o};return r==null?tr(($,E,S)=>{let _=L.runKernel(Yr,N,M);return S([$,E,_]),{value:Q(_,x),gradFunc:T}})(A,b):tr(($,E,S,_)=>{let O=L.runKernel(Yr,N,M);return _([$,E,O,S]),{value:Q(O,x),gradFunc:T}})(A,b,w)}var fP=z({fusedMatMul_:mP});function gP(e){return Xh(e,.54,.46)}var yP=z({hammingWindow_:gP});function xP(e){return Xh(e,.5,.5)}var d7=z({hannWindow_:xP});function AP(e,t,a,n=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Fe(e,s,t)),s+=a;if(n)for(;s`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 [${u},4] but had shape ${o.shape}.`),F(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),F(n.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${n.length}.`),F(n[0]>=1&&n[1]>=1,()=>`cropSize must be atleast [1,1], but was ${n}`),F(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let p={image:i,boxes:o,boxInd:l},c={method:r,extrapolationValue:s,cropSize:n};return L.runKernel(Ei,p,c)}var kP=z({cropAndResize_:wP});function IP(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 a={image:t};return L.runKernel(Wi,a,{})}var SP=z({flipLeftRight_:IP});function CP(e){let t=R(e,"image","grayscaleToRGB"),a=t.rank-1,n=t.shape[a];F(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),F(n===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${n}.`);let r=new Array(t.rank);return r.fill(1,0,a),r[a]=3,Xr(t,r)}var TP=z({grayscaleToRGB_:CP});function NP(e){let t=R(e,"image","RGBToGrayscale"),a=t.rank-1,n=t.shape[a];F(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),F(n===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${n}.`);let r=t.dtype,s=Ue(t,"float32"),i=Bt([.2989,.587,.114]),o;switch(t.rank){case 2:o=Vs("ij,j->i",s,i);break;case 3:o=Vs("ijk,k->ij",s,i);break;case 4:o=Vs("ijkl,l->ijk",s,i);break;case 5:o=Vs("ijklm,m->ijkl",s,i);break;case 6:o=Vs("ijklmn,n->ijklm",s,i);break;default:throw new Error("Not a valid tensor rank.")}return o=Wt(o,-1),Ue(o,r)}var RP=z({rgbToGrayscale_:NP});function EP(e,t,a=0,n=.5){let r=R(e,"image","rotateWithOffset","float32");F(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:a,center:n};return L.runKernel(el,s,i)}var MP=z({rotateWithOffset_:EP});function Gu(e,t,a,n,r,s){n==null&&(n=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return a=Math.min(a,i),F(0<=n&&n<=1,()=>`iouThreshold must be in [0, 1], but was '${n}'`),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:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s}}function $P(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression","float32"),i=R(t,"scores","nonMaxSuppression","float32"),o=Gu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:a,iouThreshold:n,scoreThreshold:r};return L.runKernel(Ao,{boxes:s,scores:i},l)}var PP=z({nonMaxSuppression_:$P});function _P(e,t,a){let n=FP(e,t,a),r=n<0?-(n+1):n;e.splice(r,0,t)}function FP(e,t,a){return OP(e,t,a||DP)}function DP(e,t){return e>t?1:e>>1);let o=a(t,e[s]);o>0?n=s+1:(r=s,i=!o)}return i?n:-n-1}function c7(e,t,a,n,r){return Yg(e,t,a,n,r,0)}function h7(e,t,a,n,r,s){return Yg(e,t,a,n,r,0,!1,s,!0)}function m7(e,t,a,n,r,s){return Yg(e,t,a,n,r,s,!0)}function Yg(e,t,a,n,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;gr&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(e5);let p=s>0?-.5/s:0,c=[],d=[];for(;c.length0;){let g=u.pop(),{score:y,boxIndex:x,suppressBeginIndex:A}=g;if(y=A;--w){let I=zP(e,x,c[w]);if(I>=n){b=!0;break}if(g.score=g.score*LP(n,p,I),g.score<=r)break}g.suppressBeginIndex=c.length,b||(g.score===y?(c.push(x),d.push(g.score)):g.score>r&&_P(u,g,e5))}let h=c.length,m=a-h;o&&m>0&&(c.push(...new Array(m).fill(0)),d.push(...new Array(m).fill(0)));let f={selectedIndices:c};return i&&(f.selectedScores=d),l&&(f.validOutputs=h),f}function zP(e,t,a){let n=e.subarray(t*4,t*4+4),r=e.subarray(a*4,a*4+4),s=Math.min(n[0],n[2]),i=Math.min(n[1],n[3]),o=Math.max(n[0],n[2]),l=Math.max(n[1],n[3]),u=Math.min(r[0],r[2]),p=Math.min(r[1],r[3]),c=Math.max(r[0],r[2]),d=Math.max(r[1],r[3]),h=(o-s)*(l-i),m=(c-u)*(d-p);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,p),y=Math.min(o,c),x=Math.min(l,d),A=Math.max(y-f,0)*Math.max(x-g,0);return A/(h+m-A)}function LP(e,t,a){let n=Math.exp(t*a*a);return a<=e?n:0}function e5(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function WP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=Gu(s,i,a,n,r);a=o.maxOutputSize,n=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],p=l[1],{selectedIndices:c}=c7(u,p,a,n,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Bt(c,"int32")}var BP=WP;function VP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},p={maxOutputSize:a,iouThreshold:n,scoreThreshold:r,softNmsSigma:s},c=L.runKernel(bo,u,p);return{selectedIndices:c[0],selectedScores:c[1]}}var UP=z({nonMaxSuppressionWithScore_:VP});async function GP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(i,o,a,n,r,s);a=l.maxOutputSize,n=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),p=u[0],c=u[1],{selectedIndices:d,selectedScores:h}=m7(p,c,a,n,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(d,"int32"),selectedScores:Bt(h)}}var HP=GP;function jP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=Gu(i,o,a,n,r,null),u=l.maxOutputSize,p=l.iouThreshold,c=l.scoreThreshold,d={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:p,scoreThreshold:c,padToMaxOutputSize:s},m=L.runKernel(Su,d,h);return{selectedIndices:m[0],validOutputs:m[1]}}var qP=z({nonMaxSuppressionPadded_:jP});async function XP(e,t,a,n=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=Gu(i,o,a,n,r,null),u=l.maxOutputSize,p=l.iouThreshold,c=l.scoreThreshold,[d,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:m,validOutputs:f}=h7(d,h,u,p,c,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Bt(m,"int32"),validOutputs:Ge(f,"int32")}}var KP=XP;function YP(e,t,a=!1,n=!1){let r=R(e,"images","resizeBilinear");F(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),F(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),F(n===!1||a===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(Ro,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var ZP=z({resizeBilinear_:YP});function JP(e,t,a=!1,n=!1){let r=R(e,"images","resizeNearestNeighbor");F(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),F(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),F(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),F(n===!1||a===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=Q(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:a,halfPixelCenters:n,size:t},u=L.runKernel(No,o,l);return i?Q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var QP=z({resizeNearestNeighbor_:JP});function e_(e,t="binary",a=!1,n=.5){let r=R(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=te(Bt([n]),255),p,c,d,h;if(F(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),F(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),F(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),F(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,c,d]=Sa(r,[1,1,1],-1);let f=te(p,s),g=te(c,i),y=te(d,o);h=we(we(f,g),y)}else h=e;if(t==="otsu"){let f=fg(Ue(Bg(h),"int32"),Ve([]),256);u=t_(f,l)}let m=a?zh(h,u):Gp(h,u);return Ue(te(m,255),"int32")}function t_(e,t){let a=Bt([-1]),n=Bt([0]),r=Bt([0]),s,i,o,l,u,p;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${i.rank}.`),F(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),F(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:a,fillMode:n,fillValue:r,outputShape:s};return L.runKernel(Qo,l,u)}var r_=z({transform_:n_});function s_(e,t,a){let n=R(e,"a","bandPart");F(n.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${n.rank}.`);let r=n.shape,[s,i]=n.shape.slice(-2),o,l;typeof t=="number"?(F(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),F(t<=s,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`),o=R(t<0?s:t,"numLower","bandPart")):(F(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),o=kr(mh(t,0),s,Yd(t,s))),typeof a=="number"?(F(a%1===0,()=>`bandPart(): numUpper must be an integer, got ${a}.`),F(a<=i,()=>`bandPart(): numUpper (${a}) must not be greater than the number of columns (${i}).`),l=R(a<0?i:a,"numUpper","bandPart")):(F(a.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),l=kr(mh(a,0),i,Yd(a,i)));let u=Q(Zl(0,s,1,"int32"),[-1,1]),p=Zl(0,i,1,"int32"),c=xe(u,p),d=Xd(zh(c,o),kg(c,Ln(l))),h=yn([s,i],n.dtype);return Q(ca(Na(Q(n,[-1,s,i])).map(m=>kr(d,m,h))),r)}var i_=z({bandPart_:s_});function o_(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 r=e[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=Sa(e,e.shape[0],0).map(r=>Oe(r,[0]));F(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let a=[],n=e;for(let r=0;r{let s=n[r];if(r>0)for(let i=0;i=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return t5(e,t);{let a=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),n=Na(Q(e,[a,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];n.forEach(l=>{let[u,p]=t5(l,t);r.push(u),s.push(p)});let i=Q(ca(r,0),e.shape),o=Q(ca(s,0),e.shape);return[i,o]}}function t5(e,t=!1){return L.tidy(()=>{F(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let a=e.shape[0],n=e.shape[1],r=bg(a),s=Ia(e),i=Zn([[1]],[1,1]),o=Ia(i),l=a>=n?n:a;for(let u=0;u{let h=Fe(s,[u,u],[a-u,1]),m=Up(h),f=Fe(s,[u,u],[1,1]),g=kr(Gp(f,0),Zn([[-1]]),Zn([[1]])),y=xe(f,te(g,m)),x=ve(h,y);x.shape[0]===1?o=Ia(i):o=lt([i,Fe(x,[1,0],[x.shape[0]-1,x.shape[1]])],0);let A=Ln(ve(pt(g,y),m)),b=Fe(s,[u,0],[a-u,n]),w=te(A,o),I=Qs(o);if(u===0)s=xe(b,pt(w,pt(I,b)));else{let M=xe(b,pt(w,pt(I,b)));s=lt([Fe(s,[0,0],[u,n]),M],0)}let T=Qs(w),N=Fe(r,[0,u],[a,r.shape[1]-u]);if(u===0)r=xe(N,pt(pt(N,o),T));else{let M=xe(N,pt(pt(N,o),T));r=lt([Fe(r,[0,0],[a,u]),M],1)}return[o,s,r]}),J([p,c,d])}return!t&&a>n&&(r=Fe(r,[0,0],[a,n]),s=Fe(s,[0,0],[n,n])),[r,s]})}var d_=z({qr_:u_}),wa;(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"})(wa||(wa={}));function p_(e,t,a=wa.SUM_BY_NONZERO_WEIGHTS){let n=R(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=R(t,"weights","computeWeightedLoss"));let s=r==null?n:te(n,r);if(a===wa.NONE)return s;if(a===wa.SUM)return ot(s);if(a===wa.MEAN){if(r==null)return Kd(s);{let i=n.size/r.size,o=ve(ot(s),ot(r));return i>1?ve(o,Ge(i)):o}}if(a===wa.SUM_BY_NONZERO_WEIGHTS){if(r==null)return ve(ot(s),Ge(n.size));{let i=te(r,Hr(n.shape)),o=Ue(ot($g(i,Ge(0))),"float32");return ve(ot(s),o)}}throw Error(`Unknown reduction: ${a}`)}var Rr=z({computeWeightedLoss_:p_});function c_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;a!=null&&(i=R(a,"weights","absoluteDifference")),Ta(r.shape,s.shape,"Error in absoluteDifference: ");let o=Za(xe(r,s));return Rr(o,i,n)}var h_=z({absoluteDifference_:c_});function m_(e,t,a,n,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;n!=null&&(o=R(n,"weights","cosineDistance")),Ta(s.shape,i.shape,"Error in cosineDistance: ");let l=Ge(1),u=xe(l,ot(te(s,i),a,!0));return Rr(u,o,r)}var f_=z({cosineDistance_:m_});function g_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;a!=null&&(i=R(a,"weights","hingeLoss")),Ta(r.shape,s.shape,"Error in hingeLoss: ");let o=Ge(1);r=xe(te(Ge(2),r),o);let l=jp(xe(o,te(r,s)));return Rr(l,i,n)}var y_=z({hingeLoss_:g_});function x_(e,t,a,n=1,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;a!=null&&(o=R(a,"weights","huberLoss")),Ta(s.shape,i.shape,"Error in huberLoss: ");let l=Ge(n),u=Za(xe(i,s)),p=Yd(u,l),c=xe(u,p),d=we(te(Ge(.5),Tn(p)),te(l,c));return Rr(d,o,r)}var A_=z({huberLoss_:x_});function b_(e,t,a,n=1e-7,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;a!=null&&(o=R(a,"weights","logLoss")),Ta(s.shape,i.shape,"Error in logLoss: ");let l=Ge(1),u=Ge(n),p=Ln(te(s,Yl(we(i,u)))),c=te(xe(l,s),Yl(we(xe(l,i),u))),d=xe(p,c);return Rr(d,o,r)}var v_=z({logLoss_:b_});function w_(e,t,a,n=wa.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;a!=null&&(i=R(a,"weights","meanSquaredError")),Ta(r.shape,s.shape,"Error in meanSquaredError: ");let o=Ug(r,s);return Rr(o,i,n)}var k_=z({meanSquaredError_:w_});function I_(e,t){let a=R(e,"labels","sigmoidCrossEntropyWithLogits"),n=R(t,"logits","sigmoidCrossEntropyWithLogits");Ta(a.shape,n.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=jp(n),s=te(n,a),i=Sg(ns(Ln(Za(n))));return we(xe(r,s),i)}function S_(e,t,a,n=0,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","sigmoidCrossEntropy")),Ta(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(.5);s=we(te(s,xe(p,u)),te(c,u))}let l=I_(s,i);return Rr(l,o,r)}var C_=z({sigmoidCrossEntropy_:S_});function T_(e,t,a=-1){if(a===-1&&(a=t.rank-1),a!==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 ${a}`);return tr((n,r,s)=>{let i=Tg(r,[a],!0),o=xe(Ue(r,"float32"),i);s([n,o]);let l=Ln(te(o,n));return{value:ot(l,[a]),gradFunc:(u,p)=>{let[c,d]=p,h=Vp(u.shape,[a]);return[te(Q(u,h),xe(Ue(c,"float32"),ns(d))),te(Q(u,h),xe(ns(d),Ue(c,"float32")))]}}})(e,t)}function N_(e,t,a,n=0,r=wa.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(a!=null&&(o=R(a,"weights","softmaxCrossEntropy")),Ta(s.shape,i.shape,"Error in softmaxCrossEntropy: "),n>0){let u=Ge(n),p=Ge(1),c=Ge(s.shape[1]);s=we(te(s,xe(p,u)),ve(u,c))}let l=T_(s,i);return Rr(l,o,r)}var R_=z({softmaxCrossEntropy_:N_});function E_(e,t,a,n){let r=R(e,"indices","sparseFillEmptyRows","int32"),s=R(t,"values","sparseFillEmptyRows"),i=R(a,"denseShape","sparseFillEmptyRows","int32"),o=R(n,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape + ${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=L.runKernel(Ip,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var M_=z({sparseFillEmptyRows_:E_});function $_(e,t,a){let n=R(e,"inputIndices","sparseReshape","int32"),r=R(t,"inputShape","sparseReshape","int32"),s=R(a,"newShape","sparseReshape","int32");if(n.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape + ${n.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:n,inputShape:r,newShape:s},o=L.runKernel(Du,i);return{outputIndices:o[0],outputShape:o[1]}}var P_=z({sparseReshape_:$_});function __(e,t,a){let n=R(e,"data","sparseSegmentMean"),r=R(t,"indices","sparseSegmentMean","int32"),s=R(a,"segmentIds","sparseSegmentMean","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(Vu,i)}var kP=z({sparseSegmentMean_:wP});function IP(e,t,a){let n=R(e,"data","sparseSegmentSum"),r=R(t,"indices","sparseSegmentSum","int32"),s=R(a,"segmentIds","sparseSegmentSum","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(Ou,i)}var F_=z({sparseSegmentMean_:__});function D_(e,t,a){let n=R(e,"data","sparseSegmentSum"),r=R(t,"indices","sparseSegmentSum","int32"),s=R(a,"segmentIds","sparseSegmentSum","int32");if(n.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(Uu,i)}var SP=z({sparseSegmentSum_:IP});function TP(e,t,a,n,r,s,i,o){let l=R(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=R(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let d={separator:a,nGramWidths:n,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},c={data:l,dataSplits:u},p=L.runKernel(Hu,c,d);return{nGrams:p[0],nGramsSplits:p[1]}}var CP=z({stringNGrams_:TP});function NP(e,t,a=!0){let n=R(e,"input","stringSplit","string"),r=R(t,"delimiter","stringSplit","string");if(n.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${n.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:a},i={input:n,delimiter:r},o=L.runKernel($p,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var RP=z({stringSplit_:NP});function EP(e,t){let a=R(e,"input","stringToHashBucketFast","string"),n={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:a};return L.runKernel(Dp,r,n)}var MP=z({stringToHashBucketFast_:EP});function FP(e,t,a,n=!0){let r=R(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:a,replaceGlobal:n};return L.runKernel(Gu,{x:r},s)}var $P=z({staticRegexReplace_:FP}),F7={fft:Zh,ifft:rp,rfft:Jh,irfft:Yg},$7={hammingWindow:sD,hannWindow:C7,frame:N7,stft:uD},fe={flipLeftRight:hD,grayscaleToRGB:fD,resizeNearestNeighbor:BD,resizeBilinear:LD,rgbToGrayscale:yD,rotateWithOffset:AD,cropAndResize:pD,nonMaxSuppression:vD,nonMaxSuppressionAsync:RD,nonMaxSuppressionWithScore:MD,nonMaxSuppressionWithScoreAsync:$D,nonMaxSuppressionPadded:PD,nonMaxSuppressionPaddedAsync:OD,threshold:GD,transform:jD},D7={bandPart:XD,gramSchmidt:YD,qr:JD},P7={absoluteDifference:tP,computeWeightedLoss:Dr,cosineDistance:nP,hingeLoss:sP,huberLoss:oP,logLoss:uP,meanSquaredError:pP,sigmoidCrossEntropy:mP,softmaxCrossEntropy:yP},_7={sparseFillEmptyRows:AP,sparseReshape:vP,sparseSegmentMean:kP,sparseSegmentSum:SP},O7={stringNGrams:CP,stringSplit:RP,stringToHashBucketFast:MP,staticRegexReplace:$P},z7={};Ke(z7,{Serializable:()=>L7,SerializationMap:()=>W7,getRegisteredName:()=>PP,registerClass:()=>B7});var DP=new Map,w1=new Map,L7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},W7=class jl{constructor(){this.classNameMap={}}static getMap(){return jl.instance==null&&(jl.instance=new jl),jl.instance}static register(t){jl.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function B7(e,t,a){P(e.className!=null,()=>"Class being registered does not have the static className property defined."),P(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),P(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof t=="undefined"&&(t="Custom"),typeof a=="undefined"&&(a=e.className);let n=a,r=t+">"+n;return W7.register(e),DP.set(r,e),w1.set(e,r),e}function PP(e){return w1.has(e)?w1.get(e):e.className}var _s=class extends L7{minimize(e,t=!1,a){let{value:n,grads:r}=this.computeGradients(e,a);if(a!=null){let s=a.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return J(r),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return g4(e,t)}dispose(){this.iterations_!=null&&J(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ge(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(_s,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var s3=class extends _s{static get className(){return"Adadelta"}constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:Pe(()=>en(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:Pe(()=>en(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[a].variable,o=this.accumulatedUpdates[a].variable;Pe(()=>{let l=we(te(i,this.rho),te(En(s),1-this.rho)),u=te(ve(nr(we(o,this.epsilon)),nr(we(i,this.epsilon))),s),d=we(te(o,this.rho),te(En(u),1-this.rho));i.assign(l),o.assign(d);let c=we(te(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(J(this.accumulatedGrads.map(e=>e.variable)),J(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,a=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}},i3=class extends _s{static get className(){return"Adagrad"}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,a)=>{let n=L.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:Pe(()=>lr(n.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[a].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[a].variable;Pe(()=>{let i=we(s,En(r));s.assign(i);let o=we(te(ve(r,nr(we(i,L.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&J(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(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}},o3=class extends _s{static get className(){return"Adam"}constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Pe(()=>{this.accBeta1=Ge(t).variable(),this.accBeta2=Ge(a).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);Pe(()=>{let a=xe(1,this.accBeta1),n=xe(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Pe(()=>en(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:Pe(()=>en(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,d=this.accumulatedSecondMoment[s].variable,c=we(te(u,this.beta1),te(l,1-this.beta1)),p=we(te(d,this.beta2),te(En(l),1-this.beta2)),h=ve(c,a),m=ve(p,n);u.assign(c),d.assign(p);let f=we(te(ve(h,we(nr(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(te(this.accBeta1,this.beta1)),this.accBeta2.assign(te(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&J(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),Pe(()=>{this.accBeta1.assign(tu(this.beta1,this.iterations_+1)),this.accBeta2.assign(tu(this.beta2,this.iterations_+1))});let t=e.length/2,a=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}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)}},l3=class extends _s{static get className(){return"Adamax"}constructor(e,t,a,n=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Pe(()=>{this.iteration=Ge(0).variable(),this.accBeta1=Ge(t).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);Pe(()=>{let a=xe(1,this.accBeta1),n=ve(-this.learningRate,we(te(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:en(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:en(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,d=this.accumulatedWeightedInfNorm[s].variable,c=we(te(u,this.beta1),te(l,1-this.beta1)),p=te(d,this.beta2),h=Ja(l),m=Lg(p,h);u.assign(c),d.assign(m);let f=we(te(ve(n,a),ve(c,we(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(we(this.iteration,1)),this.accBeta1.assign(te(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&J(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)}},i0=class extends _s{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=Array.isArray(e)?e[a].tensor:e[t];if(n==null)return;let r=L.registeredVariables[t];Pe(()=>{let s=we(te(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Bn(Ge(-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)}},u3=class extends i0{static get className(){return"Momentum"}constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Ge(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:Pe(()=>en(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&Pe(()=>{let i,o=we(te(this.m,r),s);this.useNesterov?i=we(te(this.c,we(s,te(o,this.m))),n):i=we(te(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&J(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(a=>({originalName:a.name,variable:a.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)}},d3=class extends _s{static get className(){return"RMSProp"}constructor(e,t=.9,a=0,n=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=a,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,n==null&&(this.epsilon=L.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,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:Pe(()=>en(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:Pe(()=>en(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:Pe(()=>en(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[a].variable,o=this.accumulatedMoments[a].variable;Pe(()=>{let l=we(te(i,this.decay),te(En(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,d=we(te(u,this.decay),te(s,1-this.decay)),c=ve(te(s,this.learningRate),nr(xe(l,we(En(d),this.epsilon)))),p=we(te(o,this.momentum),c);i.assign(l),u.assign(d),o.assign(p);let h=xe(n,p);n.assign(h)}else{let u=we(te(i,this.decay),te(En(s),1-this.decay)),d=we(te(o,this.momentum),ve(te(s,this.learningRate),nr(we(u,this.epsilon))));i.assign(u),o.assign(d);let c=xe(n,d);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&J(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&J(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&J(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,a=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})))}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)}},_P=[s3,i3,o3,l3,u3,d3,i0];function OP(){for(let e of _P)B7(e)}var Jn={};Ke(Jn,{CompositeArrayBuffer:()=>Fr,browserFiles:()=>GP,browserHTTPRequest:()=>YP,concatenateArrayBuffers:()=>fR,copyModel:()=>OR,decodeWeights:()=>ib,decodeWeightsStream:()=>lb,encodeWeights:()=>uR,fromMemory:()=>JP,fromMemorySync:()=>j7,getLoadHandlers:()=>kR,getModelArtifactsForJSON:()=>xg,getModelArtifactsForJSONSync:()=>db,getModelArtifactsInfoForJSON:()=>Up,getSaveHandlers:()=>wR,getWeightSpecs:()=>g1,http:()=>c3,isHTTPScheme:()=>I1,listModels:()=>PR,loadWeights:()=>jP,moveModel:()=>zR,registerLoadRouter:()=>vR,registerSaveRouter:()=>bR,removeModel:()=>_R,weightsLoaderFactory:()=>U7,withSaveHandler:()=>QP,withSaveHandlerSync:()=>e_});var zP="model",LP=".json",WP=".weights.bin";function m5(e){return new Promise(t=>setTimeout(t)).then(e)}var wh=class k1{constructor(t){if(!B().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(k1.URL_SCHEME)&&(t=t.slice(k1.URL_SCHEME.length)),(t==null||t.length===0)&&(t=zP),this.modelJsonFileName=t+LP,this.weightDataFileName=t+WP}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let a=Fr.join(t.weightData),n=window.URL.createObjectURL(new Blob([a],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let r=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=ub(t,r),i=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),o=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(o.download=this.modelJsonFileName,o.href=i,await m5(()=>o.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let l=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;l.download=this.weightDataFileName,l.href=n,await m5(()=>l.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Up(t)}}}};wh.URL_SCHEME="downloads://";var BP=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let a=new FileReader;a.onload=n=>{let r=JSON.parse(n.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=xg(r,o=>this.loadWeights(o));e(i)},a.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(this.jsonFile)})}loadWeights(e){let t=[],a=[];for(let s of e)t.push(...s.weights),a.push(...s.paths);let n=this.checkManifestAndWeightFiles(e),r=a.map(s=>this.loadWeightsFile(s,n[s]));return Promise.all(r).then(s=>[t,s])}loadWeightsFile(e,t){return new Promise((a,n)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;a(i)},r.onerror=s=>n(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],a=this.weightsFiles.map(r=>p5(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=p5(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),a.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[s]=this.weightsFiles[a.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},VP=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(wh.URL_SCHEME)?UP(e.slice(wh.URL_SCHEME.length)):null;xn.registerSaveRouter(VP);function UP(e="model"){return new wh(e)}function GP(e){return new BP(e)}function f5(e,t,a,n){i(e),a=a==null?0:a,n=n==null?1:n,o(a,n);let r=0,s=l=>(l.then(u=>{let d=a+ ++r/e.length*(n-a);return t(d),u}),l);function i(l){P(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){P(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),P(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),P(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function V7(e,t){t==null&&(t={});let a=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,n=e.map(s=>a(s,t.requestInit,{isBinary:!0})),r=(t.onProgress==null?await Promise.all(n):await f5(n,t.onProgress,0,.5)).map(s=>s.arrayBuffer());return t.onProgress==null?await Promise.all(r):await f5(r,t.onProgress,.5,1)}function HP(e,t){var a;let n=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,r=0,s;return(a=t.onProgress)===null||a===void 0||a.call(t,0),new ReadableStream({pull:async i=>{for(var o;rV7(r,{requestInit:n}))(e,t,a)}function U7(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,x=vi[y]*mt(g.shape),A=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:x})};n!=null?n.forEach((b,w)=>{b===g.name&&(A(),i[w]=!0)}):A(),o.push(g.name),f+=x})}),!i.every(h=>h)){let h=n.filter((m,f)=>!i[f]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. -Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=a+(a.endsWith("/")?"":"/")+m;u.push(f)})});let d=await e(u),c={},p=0;return l.forEach(h=>{let m=t[h].paths.length,f=new Fr(d.slice(p,p+m));s[h].forEach(g=>{let y=f.slice(g.groupOffset,g.groupOffset+g.sizeBytes),x=ib(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),p+=m}),c}}var qP="application/octet-stream",XP="application/json",p3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(P(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=B().platform.fetch,P(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&P(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||{},this.loadOptions=t}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 a=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=ub(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:XP}),"model.json"),e.weightData!=null){let s=Fr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:qP}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Up(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async loadModelJSON(){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(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" 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.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return xg(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),a=g1(e.weightsManifest),n=()=>HP(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:a,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=KP(t),r=this.weightPathPrefix||a,s=[],i=[];for(let o of e)for(let l of o.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(l)):s.push(r+l+n);return this.weightUrlConverter&&s.push(...await Promise.all(i)),s}async loadWeights(e){let t=await this.getWeightUrls(e),a=g1(e),n=await V7(t,this.loadOptions);return[a,n]}};p3.URL_SCHEME_REGEX=/^https?:\/\//;function KP(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function I1(e){return e.match(p3.URL_SCHEME_REGEX)!=null}var G7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>I1(n)):a=I1(e),a)return c3(e,t)}return null};xn.registerSaveRouter(G7);xn.registerLoadRouter(G7);function c3(e,t){return new p3(e,t)}function YP(e,t){return c3(e,t)}var t1=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},H7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},ZP=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function JP(e,t,a,n){let r=arguments;return new ZP(j7(...r))}function j7(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new t1(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 t1({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 t1({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function QP(e){return new H7(e)}function e_(e){return new H7(e)}var q7={};Ke(q7,{confusionMatrix:()=>a_});function t_(e,t,a){let n=R(e,"labels","confusionMatrix"),r=R(t,"predictions","confusionMatrix");P(a==null||a>0&&Number.isInteger(a),()=>`If provided, numClasses must be a positive integer, but got ${a}`),P(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),P(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),P(n.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),P(a>0&&Number.isInteger(a),()=>`numClasses is required to be a positive integer, but got ${a}`);let s=vh(Ue(n,"int32"),a),i=vh(Ue(r,"int32"),a),o=Si(s),l=pt(o,i);return Ue(l,"int32")}var a_=z({confusionMatrix_:t_}),Pr={};Ke(Pr,{draw:()=>d_,fromPixels:()=>p_,fromPixelsAsync:()=>o_,toPixels:()=>u_});var li,g5=!1;function X7(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 a=!1,n=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)a=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!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(Xd(jd,L.backendName)!=null){let p={pixels:e},h={numChannels:t};return L.runKernel(jd,p,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],d;if(i)d=e.getContext("2d").getImageData(0,0,l,u).data;else if(n||a)d=e.data;else if(s||r||o){if(li==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")li=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else li=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});li.canvas.width=l,li.canvas.height=u,li.drawImage(e,0,0,l,u),d=li.getImageData(0,0,l,u).data}let c;if(t===4)c=new Int32Array(d);else{let p=l*u;c=new Int32Array(p*t);for(let h=0;h4||t===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}function l_(e){let t=(e==null?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function u_(e,t){let a=R(e,"img","toPixels");if(!(e instanceof yt)){let u=a;a=Ue(u,"int32"),u.dispose()}K7(a);let[n,r]=a.shape.slice(0,2),s=a.rank===2?1:a.shape[2],i=await a.data(),o=a.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*n*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(a.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(d[0]=h*o,d[1]=h*o,d[2]=h*o):d[p]=h*o}let c=u*4;l[c+0]=Math.round(d[0]),l[c+1]=Math.round(d[1]),l[c+2]=Math.round(d[2]),l[c+3]=Math.round(d[3])}if(t!=null){g5||Xd(kp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),g5=!0),t.width=r,t.height=n;let u=t.getContext("2d"),d=new ImageData(l,r,n);u.putImageData(d,0,0)}return a!==e&&a.dispose(),l}function d_(e,t,a){let n=R(e,"img","draw");if(!(e instanceof yt)){let i=n;n=Ue(i,"int32"),i.dispose()}K7(n),l_(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(kp,r,s)}var p_=z({fromPixels_:X7}),h3={};Ke(h3,{prepareAndValidate:()=>Y7});function Y7(e,t){let a=e.shape.length,n=t.shape.length;if(a<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${a}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);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[n-1]>a)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[n-1]} vs. ${a}`);if(mt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let c=0;cc/u),1].slice(0,s);return[l,i,u,d]}var wt={};Ke(wt,{assertParamsValid:()=>h_,computeFlatOffset:()=>x_,computeOutShape:()=>f_,getNormalizedAxes:()=>g_,isSliceContinous:()=>y_,maskToAxes:()=>m_,parseSliceParams:()=>A_,sliceInfo:()=>b_,startForAxis:()=>n6,startIndicesWithElidedDims:()=>e6,stopForAxis:()=>r6,stopIndicesWithElidedDims:()=>t6,stridesForAxis:()=>a6,stridesWithElidedDims:()=>Z7});var S1=-2,c_=-1;function h_(e,t,a){let n=e.shape.length;P(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),P(n===a.length,()=>`Error in slice${n}D: Length of size ${a} must match the rank of the array (${n}).`);for(let r=0;r`Error in slice${n}D: begin[${r}] + size[${r}] (${t[r]+a[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function m_(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function f_(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;d=e6(i,h,m,n,e),c=t6(o,h,m,r,e),p=Z7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=J7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=J7(t,a,o),u=n[l];e&1<0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),i=Hd(0,i,l-1),i}function r6(e,t,a,n,r,s){let i=t[r],o=a[r]||1;(e&1<0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),o>0?i=Hd(0,i,l):i=Hd(-1,i,l-1),i}function y_(e,t,a){let n=a.length;for(let r=0;r1){n=r;break}for(let r=n+1;r0||a[r]!==e[r])return!1;return!0}function x_(e,t){let a=e.length>0?e[e.length-1]:1;for(let n=0;n{P(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return a==null?s=new Array(r).fill(-1):typeof a=="number"?s=[a,...new Array(r-1).fill(-1)]:a.lengthi>=0?i:(P(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-n[o])),[n,s]}function b_(e,t,a,n,r,s,i,o,l){let u;if(n==null?(u=new Array(t.length),u.fill(1)):u=n,i!=null&&i&i-1)throw new Error("Multiple ellipses in slice is not allowed.");let d=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:a.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let x=0;x0?0:-1,p.strides[x]>0?b:b-1];if(A&&p.strides[x]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&p.strides[x]===1;let C=!!(p.beginMask&1<=b)throw Error(`slice index ${p.begin[x]} of dimension ${x} out of bounds.`)}else p.begin[x]=y5(p.begin[x],0,p.strides[x],b,w,S),p.end[x]=y5(p.end[x],1,p.strides[x],b,w,S);let F=p.strides[x]===1&&p.begin[x]===0&&p.end[x]===b;h=h&&F,m=m&&(x===0&&p.strides[x]===1||F)}else h=h&&p.strides[x]===1&&C,m=m&&(x===0&&p.strides[x]===1||C);let N,M=!1;if(p.beginValid&&p.endValid?(N=p.end[x]-p.begin[x],M=!0):A?(N=1,M=!0):C&&b>=0&&(p.strides[x]<0?N=-b:N=b,M=!0),M){let F;N===0||N<0!=p.strides[x]<0?F=0:F=Math.trunc(N/p.strides[x])+(N%p.strides[x]!==0?1:0),g.push(F)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===S1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>p.finalShapeGatherIndices[A]!==S1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:p.begin,end:p.end,strides:p.strides}}function v_(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let a=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let n=0;n0?s[t]:s[t+1&1];{let i=e<0?n+e:e;return is[1]?s[1]:i}}var m3="4.17.0",s6=class{static sgd(e){return new i0(e)}static momentum(e,t,a=!1){return new u3(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new d3(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new o3(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new s3(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new l3(e,t,a,n,r)}static adagrad(e,t=.1){return new i3(e,t)}},w_=s6,k_=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function i6(){return new Promise(e=>k_(()=>e()))}var I={};Ke(I,{ERF_A1:()=>W_,ERF_A2:()=>B_,ERF_A3:()=>V_,ERF_A4:()=>U_,ERF_A5:()=>G_,ERF_P:()=>L_,PARALLELIZE_THRESHOLD:()=>f3,RowPartitionType:()=>Zn,SELU_SCALE:()=>z_,SELU_SCALEALPHA:()=>O_,applyActivation:()=>r0,assertAndGetBroadcastShape:()=>Ut,assertAxesAreInnerMostDims:()=>cM,assertParamsConsistent:()=>I_,assignToTypedArray:()=>Y_,axesAreInnerMostDims:()=>Cg,calculateShapes:()=>p7,checkEinsumDimSizes:()=>aO,checkPadOnDimRoundingMode:()=>Mn,combineLocations:()=>o4,combineRaggedTensorToTensorShapes:()=>T_,complexWithEvenIndex:()=>q_,complexWithOddIndex:()=>X_,computeConv2DInfo:()=>Hp,computeConv3DInfo:()=>Rb,computeDefaultPad:()=>bg,computeDilation2DInfo:()=>lE,computeOptimalWindowSize:()=>E_,computeOutAndReduceShapes:()=>pM,computeOutShape:()=>S_,computePool2DInfo:()=>Nb,computePool3DInfo:()=>uE,convertConv2DDataFormat:()=>Eb,decodeEinsumEquation:()=>eO,eitherStridesOrDilationsAreOne:()=>$r,expandShapeToKeepDim:()=>Xp,exponent:()=>J_,exponents:()=>Z_,fromStringArrayToUint8:()=>kO,fromUint8ToStringArray:()=>wO,getAxesPermutation:()=>hM,getBroadcastDims:()=>a4,getComplexWithIndex:()=>K_,getEinsumComputePath:()=>nO,getEinsumPermutation:()=>tO,getFusedBiasGradient:()=>n0,getFusedDyActivation:()=>a0,getImageCenter:()=>M_,getInnerMostAxes:()=>fM,getPermuted:()=>$_,getRaggedRank:()=>N_,getReductionAxes:()=>Ig,getReshaped:()=>F_,getReshapedPermuted:()=>D_,getRowPartitionTypesHelper:()=>C_,getSliceBeginCoords:()=>P_,getSliceSize:()=>__,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>oO,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>lO,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>uO,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>cO,getSparseReshapeInputOutputMismatchErrorMessage:()=>mO,getSparseReshapeInputOutputMultipleErrorMessage:()=>hO,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>dO,getSparseReshapeNegativeOutputDimErrorMessage:()=>pO,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>xO,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>fO,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>gO,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>yO,getUndoAxesPermutation:()=>mM,isIdentityPermutation:()=>rO,log:()=>bN,mergeRealAndImagArrays:()=>H_,prepareAndValidate:()=>Y7,prepareSplitSize:()=>iO,segment_util:()=>o6,shouldFuse:()=>s0,slice_util:()=>wt,splitRealAndImagArrays:()=>j_,stridesOrDilationsArePositive:()=>Ii,tupleValuesAreOne:()=>ep,upcastType:()=>Qt,validateDefaultValueShape:()=>R_,validateInput:()=>e0,validateUpdateShape:()=>e3,warn:()=>qr});function I_(e,t){let a=e[0].length;e.forEach((r,s)=>{P(r.length===a,()=>`Error in concat${a}D: rank of tensors[${s}] must be the same as the rank of the rest (${a})`)}),P(t>=0&&t`Error in concat${a}D: axis must be between 0 and ${a-1}.`);let n=e[0];e.forEach((r,s)=>{for(let i=0;i`Error in concat${a}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function S_(e,t){let a=e[0].slice();for(let n=1;n=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${r+e}] = ${s} but shape[${r+e}] = ${o}`)}else n[i]=s}return n}function C_(e){let t={FIRST_DIM_SIZE:Zn.FIRST_DIM_SIZE,VALUE_ROWIDS:Zn.VALUE_ROWIDS,ROW_LENGTHS:Zn.ROW_LENGTHS,ROW_SPLITS:Zn.ROW_SPLITS,ROW_LIMITS:Zn.ROW_LIMITS,ROW_STARTS:Zn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function N_(e){return e.length===0?0:e[0]===Zn.FIRST_DIM_SIZE?e.length-1:e.length}function R_(e,t){if(e==null||t==null)return;let a=e.length,n=t.length;if(a>=n)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${a} must be less than ragged tensor input flatValues.rank = ${n})`);for(let r=0;r=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${r-e.length}] = ${s} but ragged tensor input.flatValues.shape[${r-e.length}] = ${i}`)}}var f3=30;function E_(e){return e<=f3?e:yh(e,Math.floor(Math.sqrt(e)))}function M_(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function F_(e,t,a,n=!0){let r=[];if(n)r=r.concat(t.slice(0)),r.push(e[0]/a),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i=t*2+1||i%2===1?s.push(i):r.push(i);n.push(...r),n.push(0),n.push(...s)}return n}function D_(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,x5=",",A5="...";function eO(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(Q_,"").length)/a1.length;if(a<1)throw new Error("Equations without an arrow are not supported.");if(a>1)throw new Error(`Equation must contain exactly one arrow ("${a1}").`);let[n,r]=e.split(a1);P(n.indexOf(A5)===-1,()=>`The ellipsis notation ("${A5}") is not supported yet.`);let s=n.split(x5),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let p=0;pm.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let p=0;pr!==-1),{permutationIndices:a,expandDims:n}}function aO(e,t,a){let n=new Array(e);for(let r=0;r`Expected dimension ${n[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function nO(e,t){let a=e,n=[],r=0;e.length===0&&a.push(-1),r=e.length+1;for(let i=0;it===a)}function sO(e,t){let a=[];for(let n=0;n"Number of splits must evenly divide the axis."),n=new Array(t).fill(e.shape[a]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);P(r<=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[a]-i}P(e.shape[a]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),n=t}return n}function oO(e){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${e}`}function lO(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function uO(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function dO(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function pO(e,t){return`size ${e} must be non-negative, not ${t}`}function cO(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function hO(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a SparseTensor with ${a} - dense values, but the requested shape requires a multiple of ${n}. inputShape=${e} outputShape= ${t}`}function mO(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function fO(){return"segment ids must be >= 0"}function gO(){return"segment ids are not increasing"}function yO(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function xO(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var o6={};Ke(o6,{collectGatherOpShapeInfo:()=>vO,computeOutShape:()=>bO,segOpComputeOptimalWindowSize:()=>AO});function AO(e,t){let a=!1,n;for(e<=f3?(n=e,a=!0):n=yh(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=yh(e,n+1);return n}function bO(e,t,a){let n=[],r=e.length;for(let s=0;sr))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${n}`);if(n<0&&(n+=r),n>s)throw new Error(`batchDims (${n}) must be less than rank(x) ( - ${s}).`);if(axh(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function kO(e){return e.map(t=>zp(t))}var Fn={};Ke(Fn,{nonMaxSuppressionV3Impl:()=>R7,nonMaxSuppressionV4Impl:()=>E7,nonMaxSuppressionV5Impl:()=>M7,whereImpl:()=>A7});OP();var IO=B();IO.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var Ya;(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_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",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",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"})(Ya||(Ya={}));var b5;(function(e){let t;(function(a){a[a.LEGACY=0]="LEGACY",a[a.V1=1]="V1",a[a.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(b5||(b5={}));var g3={};function SO(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};g3[e]=a}function l6(e){return g3[e]}function TO(e){delete g3[e]}function k(e,t,a,n,r){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,u=o<0?t.inputNames.length+o:o;if(s.type==="tensor")return da(t.inputNames[u],a,n,r);if(s.type==="tensors"){let p=t.inputs.slice(o,l);return t.inputNames.slice(o,l).filter((h,m)=>{var f;return((f=p[m])===null||f===void 0?void 0:f.op)!=="NoOp"}).map(h=>da(h,a,n,r))}let d=da(t.inputNames[u],a,n,r),c=d.dataSync();return s.type==="number"?c[0]:v.toNestedArray(d.shape,c)}let i=t.attrParams[e];return i&&i.value}function da(e,t,a,n){let[r,s]=Za(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[kh(r,o)]);return i!==void 0?t[kh(r,i)][s]:void 0}function v5(e,t,a){return t[kh(e,a.currentContextId)]}function kr(e,t){let[a,n,r]=Za(e,t);return[kh(a,t&&t.currentContextId),n,r]}function kh(e,t){return t?`${e}-${t}`:e}function Za(e,t){if(e==="")return["",0,void 0];let a=t!=null&&t.parseNodeNameCache!=null;if(a){let s=t.parseNodeNameCache.get(e);if(s!=null)return s}let n=e.split(":"),r;if(n.length===1)r=[e,0,void 0];else{let s=n[0],i=n.length===3?n[1]:void 0,o=Number(n[n.length-1]);r=[s,o,i]}return a&&t.parseNodeNameCache.set(e,r),r}function lh(e,t,a){let n=k("pad",e,t,a);if(n==="explicit"){n=k("explicitPaddings",e,t,a);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=n[s*2],r[s][1]=n[s*2+1];return r}return n}function Ir(e){return e.kept?e:Ia(e)}var u6={};Ke(u6,{json:()=>CO});var CO=[{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}]}],d6={};Ke(d6,{json:()=>NO});var NO=[{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:"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}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],p6={};Ke(p6,{json:()=>RO});var RO=[{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:"TensorListConcatV2",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"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],c6={};Ke(c6,{json:()=>EO});var EO=[{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",defaultValue:.2}]},{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"}]}],h6={};Ke(h6,{json:()=>MO});var MO=[{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"}]},{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:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{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:"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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}],m6={};Ke(m6,{json:()=>FO});var FO=[{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}]}],f6={};Ke(f6,{json:()=>$O});var $O=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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"}]}],g6={};Ke(g6,{json:()=>DO});var DO=[{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"}]}],y6={};Ke(y6,{json:()=>PO});var PO=[{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}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],x6={};Ke(x6,{json:()=>_O});var _O=[{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"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],A6={};Ke(A6,{json:()=>OO});var OO=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],b6={};Ke(b6,{json:()=>zO});var zO=[{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:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{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}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],v6={};Ke(v6,{json:()=>LO});var LO=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{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"}]}],w6={};Ke(w6,{json:()=>WO});var WO=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",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"}]},{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"}]}],k6={};Ke(k6,{json:()=>BO});var BO=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],I6={};Ke(I6,{json:()=>VO});var VO=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],S6={};Ke(S6,{json:()=>UO});var UO=[{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}]}],T6={};Ke(T6,{json:()=>GO});var GO=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],C6={};Ke(C6,{json:()=>HO});var HO=[{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:"EnsureShape",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:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],w5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[u6,d6,p6,c6,h6,m6,f6,g6,y6,x6,A6,b6,v6,w6,k6,I6,S6,T6,C6],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?n.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},d={};t!=null&&(u=this.mapSignatureEntries(t.inputs),d=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[x,,A]=kr(g),b=i[x];if(b.outputs!=null){let w=b.outputs.indexOf(A);if(w!==-1){let S=`${x}:${w}`;f.inputNames[y]=S}}f.inputs.push(b),b.children.push(f)})}),Object.keys(d).length===0?c.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(d).forEach(m=>{let[f]=kr(m),g=i[f];g!=null&&(g.signatureKey=d[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=kr(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=n;let p={};e.library!=null&&e.library.function!=null&&(p=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:n,signature:t,functions:p};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,a)=>(t[e[a].name]=a,t),{})}mapNode(e){let t=l6(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let a={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(a.inputParams=t.inputs.reduce((n,r)=>(n[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},n),{})),t.attrs!=null&&(a.attrParams=t.attrs.reduce((n,r)=>{let s=r.type,i;switch(r.type){case"string":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=$1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=$1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=N1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=N1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=F1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=F1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=C1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=C1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=P1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=P1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=M1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=M1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=D1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=D1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=R1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=R1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=E1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=E1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=k5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=k5(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return n[r.name]={value:i,type:s},n},{})),a}mapFunction(e){let t=e.nodeDef,a=[],n=[],r={};t!=null&&(r=t.reduce((u,d)=>(u[d.name]=this.mapNode(d),d.op==="Const"&&n.push(u[d.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[d]=kr(u.name),c={name:d,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:y3(u.type),type:"dtype"}},children:[]};c.signatureKey=u.name,s.push(c),r[d]=c}),Object.keys(r).forEach(u=>{let d=r[u];d.inputNames.forEach((c,p)=>{let[h,,m]=kr(c),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;d.inputNames[p]=y}}d.inputs.push(f),f.children.push(d)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[d,c]=kr(o[u.name]),p=r[d];p!=null&&(p.defaultOutput=c,i.push(p))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:n,placeholders:a,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a),t),{}),outputs:e.signature.outputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a,e.ret),t),{})}}mapArgToTensorInfo(e,t){let a=e.name;return t!=null&&(a=t[a]),{name:a,dtype:e.type}}};function jO(e){let t=B().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 N6(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):jO(e);return t?a:a.toLowerCase()}function T1(e,t,a,n=!1){let r=e[t];return r!=null?N6(r.s,n):a}function C1(e,t,a){let n=e[t];return n?n.b:a}function N1(e,t,a){let n=e[t]||{},r=n.i!=null?n.i:n.f!=null?n.f:a;return typeof r=="number"?r:parseInt(r,10)}function y3(e){switch(typeof e=="string"&&(e=Ya[e]),e){case Ya.DT_FLOAT:case Ya.DT_HALF:return"float32";case Ya.DT_INT32:case Ya.DT_INT64:case Ya.DT_INT8:case Ya.DT_UINT8:return"int32";case Ya.DT_BOOL:return"bool";case Ya.DT_DOUBLE:return"float32";case Ya.DT_STRING:return"string";case Ya.DT_COMPLEX64:case Ya.DT_COMPLEX128:return"complex64";default:return null}}function k5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function R1(e,t,a){let n=e[t];return n&&n.type?y3(n.type):a}function E1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>y3(r)):a}function R6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function M1(e,t,a){let n=e[t];return n&&n.shape?R6(n.shape):a}function F1(e,t,a){let n=e[t];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):a}function $1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>N6(s,n)):a}function D1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>R6(r)):a}function P1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var qO=class{constructor(e,t,a){this.node=e,this.tensorMap=t,this.context=a,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,r)=>(n[r]=this.getAttr(r),n),{}))}getInput(e){return da(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return da(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return N1(this.node.rawAttrs,e,t);if(a.s!=null)return T1(this.node.rawAttrs,e,t);if(a.b!=null)return C1(this.node.rawAttrs,e,t);if(a.shape!=null)return M1(this.node.rawAttrs,e,t);if(a.type!=null)return R1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return F1(this.node.rawAttrs,e,t);if(a.list.s!=null)return $1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return D1(this.node.rawAttrs,e,t);if(a.list.b!=null)return P1(this.node.rawAttrs,e,t);if(a.list.type!=null)return E1(this.node.rawAttrs,e,t)}return t}},ta={};Ke(ta,{OP_SCOPE_SUFFIX:()=>hg,abs:()=>Ja,acos:()=>xb,acosh:()=>Ab,add:()=>we,addN:()=>Uh,all:()=>bb,any:()=>vb,argMax:()=>or,argMin:()=>wb,asin:()=>kb,asinh:()=>Ib,atan:()=>Sb,atan2:()=>Tb,atanh:()=>Cb,avgPool:()=>vg,avgPool3d:()=>Mb,basicLSTMCell:()=>Fb,batchNorm:()=>jp,batchNorm2d:()=>$b,batchNorm3d:()=>Db,batchNorm4d:()=>Pb,batchToSpaceND:()=>wg,bincount:()=>kg,bitwiseAnd:()=>_b,booleanMaskAsync:()=>b7,broadcastArgs:()=>Ob,broadcastTo:()=>Ai,buffer:()=>Te,cast:()=>Ue,ceil:()=>zb,clipByValue:()=>Lb,clone:()=>Ia,complex:()=>Rr,concat:()=>lt,concat1d:()=>Wb,concat2d:()=>Xu,concat3d:()=>Bb,concat4d:()=>Vb,conv1d:()=>Ub,conv2d:()=>qp,conv2dTranspose:()=>Hb,conv3d:()=>jb,conv3dTranspose:()=>qb,cos:()=>Xb,cosh:()=>Kb,cosineWindow:()=>t0,cumprod:()=>Yb,cumsum:()=>Zb,denseBincount:()=>Jb,depthToSpace:()=>Qb,depthwiseConv2d:()=>Gh,diag:()=>e4,dilation2d:()=>t4,div:()=>ve,divNoNan:()=>n4,dot:()=>r4,dropout:()=>S7,einsum:()=>hi,elu:()=>Tg,enclosingPowerOfTwo:()=>a3,ensureShape:()=>s4,equal:()=>Sg,erf:()=>i4,euclideanNorm:()=>u4,exp:()=>ls,expandDims:()=>Bt,expm1:()=>d4,eye:()=>Ng,fft:()=>Zh,fill:()=>lr,floor:()=>Rg,floorDiv:()=>Gp,fused:()=>n3,gather:()=>Eg,gatherND:()=>I7,greater:()=>Yp,greaterEqual:()=>Mg,ifft:()=>rp,imag:()=>Zp,image:()=>fe,inTopKAsync:()=>T7,irfft:()=>Yg,isFinite:()=>p4,isInf:()=>c4,isNaN:()=>h4,leakyRelu:()=>Fg,less:()=>bh,lessEqual:()=>Hh,linalg:()=>D7,linspace:()=>m4,localResponseNormalization:()=>f4,log:()=>au,log1p:()=>$g,logSigmoid:()=>y4,logSoftmax:()=>x4,logSumExp:()=>Pg,logicalAnd:()=>tp,logicalNot:()=>_g,logicalOr:()=>Og,logicalXor:()=>A4,losses:()=>P7,lowerBound:()=>b4,matMul:()=>pt,max:()=>fa,maxPool:()=>zg,maxPool3d:()=>v4,maxPoolWithArgmax:()=>w4,maximum:()=>Lg,mean:()=>ap,meshgrid:()=>k4,min:()=>os,minimum:()=>np,mirrorPad:()=>I4,mod:()=>Ku,moments:()=>S4,movingAverage:()=>v7,mul:()=>te,multiRNNCell:()=>T4,multinomial:()=>C4,neg:()=>Vn,norm:()=>Kp,notEqual:()=>Wg,oneHot:()=>vh,ones:()=>Yr,onesLike:()=>N4,op:()=>z,outerProduct:()=>R4,pad:()=>ur,pad1d:()=>E4,pad2d:()=>M4,pad3d:()=>F4,pad4d:()=>$4,pool:()=>D4,pow:()=>tu,prelu:()=>Vg,print:()=>Ag,prod:()=>P4,raggedGather:()=>_4,raggedRange:()=>O4,raggedTensorToTensor:()=>z4,rand:()=>L4,randomGamma:()=>U4,randomNormal:()=>qg,randomStandardNormal:()=>G4,randomUniform:()=>Xh,randomUniformInt:()=>H4,range:()=>nu,real:()=>ru,reciprocal:()=>j4,relu:()=>Jp,relu6:()=>Xg,reshape:()=>Q,reverse:()=>us,reverse1d:()=>q4,reverse2d:()=>X4,reverse3d:()=>K4,reverse4d:()=>Y4,rfft:()=>Jh,round:()=>Kg,rsqrt:()=>Z4,scalar:()=>Ge,scatterND:()=>w7,searchSorted:()=>qh,selu:()=>J4,separableConv2d:()=>Q4,setdiff1dAsync:()=>e7,sigmoid:()=>za,sign:()=>t7,signal:()=>$7,sin:()=>a7,sinh:()=>n7,slice:()=>_e,slice1d:()=>r7,slice2d:()=>s7,slice3d:()=>Qp,slice4d:()=>Kh,softmax:()=>Yh,softplus:()=>Dg,spaceToBatchND:()=>Bg,sparse:()=>_7,sparseToDense:()=>k7,spectral:()=>F7,split:()=>Sa,sqrt:()=>nr,square:()=>En,squaredDifference:()=>Zg,squeeze:()=>Oe,stack:()=>ca,step:()=>Jg,stridedSlice:()=>i7,string:()=>O7,sub:()=>xe,sum:()=>ot,tan:()=>o7,tanh:()=>Ah,tensor:()=>Ve,tensor1d:()=>Vt,tensor2d:()=>er,tensor3d:()=>Qg,tensor4d:()=>l7,tensor5d:()=>u7,tensor6d:()=>d7,tensorScatterUpdate:()=>c7,tile:()=>Qr,topk:()=>h7,transpose:()=>Si,truncatedNormal:()=>m7,unique:()=>f7,unsortedSegmentSum:()=>g7,unstack:()=>Na,upperBound:()=>y7,variable:()=>x7,where:()=>Cr,whereAsync:()=>t3,zeros:()=>An,zerosLike:()=>en});var XO=(e,t,a,n=ta)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[n.add(k("a",e,t,a),k("b",e,t,a))];case"AddN":return[n.addN(k("tensors",e,t,a))];case"FloorMod":case"Mod":return[n.mod(k("a",e,t,a),k("b",e,t,a))];case"Mul":return[n.mul(k("a",e,t,a),k("b",e,t,a))];case"RealDiv":case"Div":return[n.div(k("a",e,t,a),k("b",e,t,a))];case"DivNoNan":return[n.divNoNan(k("a",e,t,a),k("b",e,t,a))];case"FloorDiv":return[n.floorDiv(k("a",e,t,a),k("b",e,t,a))];case"Sub":return[n.sub(k("a",e,t,a),k("b",e,t,a))];case"Minimum":return[n.minimum(k("a",e,t,a),k("b",e,t,a))];case"Maximum":return[n.maximum(k("a",e,t,a),k("b",e,t,a))];case"Pow":return[n.pow(k("a",e,t,a),k("b",e,t,a))];case"SquaredDifference":return[n.squaredDifference(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},KO=(e,t,a,n=ta)=>{switch(e.op){case"Abs":case"ComplexAbs":return[n.abs(k("x",e,t,a))];case"Acos":return[n.acos(k("x",e,t,a))];case"Acosh":return[n.acosh(k("x",e,t,a))];case"Asin":return[n.asin(k("x",e,t,a))];case"Asinh":return[n.asinh(k("x",e,t,a))];case"Atan":return[n.atan(k("x",e,t,a))];case"Atan2":return[n.atan2(k("x",e,t,a),k("y",e,t,a))];case"Atanh":return[n.atanh(k("x",e,t,a))];case"Ceil":return[n.ceil(k("x",e,t,a))];case"Complex":return[n.complex(k("real",e,t,a),k("imag",e,t,a))];case"Cos":return[n.cos(k("x",e,t,a))];case"Cosh":return[n.cosh(k("x",e,t,a))];case"Elu":return[n.elu(k("x",e,t,a))];case"Erf":return[n.erf(k("x",e,t,a))];case"Exp":return[n.exp(k("x",e,t,a))];case"Expm1":return[n.expm1(k("x",e,t,a))];case"Floor":return[n.floor(k("x",e,t,a))];case"Log":return[n.log(k("x",e,t,a))];case"Log1p":return[n.log1p(k("x",e,t,a))];case"Imag":return[n.imag(k("x",e,t,a))];case"Neg":return[n.neg(k("x",e,t,a))];case"Reciprocal":return[n.reciprocal(k("x",e,t,a))];case"Real":return[n.real(k("x",e,t,a))];case"Relu":return[n.relu(k("x",e,t,a))];case"Round":return[n.round(k("x",e,t,a))];case"Selu":return[n.selu(k("x",e,t,a))];case"Sigmoid":return[n.sigmoid(k("x",e,t,a))];case"Sin":return[n.sin(k("x",e,t,a))];case"Sign":return[n.sign(k("x",e,t,a))];case"Sinh":return[n.sinh(k("x",e,t,a))];case"Softplus":return[n.softplus(k("x",e,t,a))];case"Sqrt":return[n.sqrt(k("x",e,t,a))];case"Square":return[n.square(k("x",e,t,a))];case"Tanh":return[n.tanh(k("x",e,t,a))];case"Tan":return[n.tan(k("x",e,t,a))];case"ClipByValue":return[n.clipByValue(k("x",e,t,a),k("clipValueMin",e,t,a),k("clipValueMax",e,t,a))];case"Relu6":return[n.relu6(k("x",e,t,a))];case"Rsqrt":return[n.rsqrt(da(e.inputNames[0],t,a))];case"LeakyRelu":return[n.leakyRelu(k("x",e,t,a),k("alpha",e,t,a))];case"Prelu":return[n.prelu(k("x",e,t,a),k("alpha",e,t,a))];case"IsNan":return[n.isNaN(da(e.inputNames[0],t,a))];case"IsInf":return[n.isInf(da(e.inputNames[0],t,a))];case"IsFinite":return[n.isFinite(da(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Rn(e,t,a=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>a+` Shapes ${e} and ${t} must match`);for(let n=0;na+` Shapes ${e} and ${t} must match`)}}}function I5(e){return!(typeof e=="number"||e.some(t=>t<0))}function Rd(e,t,a){let n=_1(e,a),r=!I5(n);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(r&&t.forEach(s=>{n=_1(s.shape,n)}),!I5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function _1(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 a=[];for(let n=0;n=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);a[n]=r>=0?r:s}return a}var YO=class{constructor(e,t,a,n,r,s,i){this.name=e,this.dtype=t,this.maxSize=a,this.elementShape=n,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Ge(0),Bn(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 a=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),Rn(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),a.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(a.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);a.tensor=t,Bn(t),a.written=!0,this.tensors[e]=a}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((a,n)=>this.write(a,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${a} vs. ${this.maxSize})`);this.writeMany(e,Na(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 a=0,n=e.map(o=>(a+=o,a));if(a!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${s.shape}`);let i={data:n,indices:r,segmentIds:s};return L.runKernel(zu,i)}var O_=z({sparseSegmentSum_:D_});function z_(e,t,a,n,r,s,i,o){let l=R(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=R(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let p={separator:a,nGramWidths:n,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},c={data:l,dataSplits:u},d=L.runKernel(Lu,c,p);return{nGrams:d[0],nGramsSplits:d[1]}}var L_=z({stringNGrams_:z_});function W_(e,t,a=!0){let n=R(e,"input","stringSplit","string"),r=R(t,"delimiter","stringSplit","string");if(n.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${n.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:a},i={input:n,delimiter:r},o=L.runKernel(Tp,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var B_=z({stringSplit_:W_});function V_(e,t){let a=R(e,"input","stringToHashBucketFast","string"),n={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:a};return L.runKernel(Np,r,n)}var U_=z({stringToHashBucketFast_:V_});function G_(e,t,a,n=!0){let r=R(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:a,replaceGlobal:n};return L.runKernel(Cp,{x:r},s)}var H_=z({staticRegexReplace_:G_}),f7={fft:Gh,ifft:Zd,rfft:Hh,irfft:Vg},g7={hammingWindow:yP,hannWindow:d7,frame:p7,stft:vP},fe={flipLeftRight:SP,grayscaleToRGB:TP,resizeNearestNeighbor:QP,resizeBilinear:ZP,rgbToGrayscale:RP,rotateWithOffset:MP,cropAndResize:kP,nonMaxSuppression:PP,nonMaxSuppressionAsync:BP,nonMaxSuppressionWithScore:UP,nonMaxSuppressionWithScoreAsync:HP,nonMaxSuppressionPadded:qP,nonMaxSuppressionPaddedAsync:KP,threshold:a_,transform:r_},y7={bandPart:i_,gramSchmidt:l_,qr:d_},x7={absoluteDifference:h_,computeWeightedLoss:Rr,cosineDistance:f_,hingeLoss:y_,huberLoss:A_,logLoss:v_,meanSquaredError:k_,sigmoidCrossEntropy:C_,softmaxCrossEntropy:R_},A7={sparseFillEmptyRows:M_,sparseReshape:P_,sparseSegmentMean:F_,sparseSegmentSum:O_},b7={stringNGrams:L_,stringSplit:B_,stringToHashBucketFast:U_,staticRegexReplace:H_},v7={};Ze(v7,{Serializable:()=>w7,SerializationMap:()=>k7,getRegisteredName:()=>q_,registerClass:()=>I7});var j_=new Map,g1=new Map,w7=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},k7=class Ll{constructor(){this.classNameMap={}}static getMap(){return Ll.instance==null&&(Ll.instance=new Ll),Ll.instance}static register(t){Ll.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function I7(e,t,a){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."),typeof t=="undefined"&&(t="Custom"),typeof a=="undefined"&&(a=e.className);let n=a,r=t+">"+n;return k7.register(e),j_.set(r,e),g1.set(e,r),e}function q_(e){return g1.has(e)?g1.get(e):e.className}var cs=class extends w7{minimize(e,t=!1,a){let{value:n,grads:r}=this.computeGradients(e,a);if(a!=null){let s=a.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return J(r),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return Qb(e,t)}dispose(){this.iterations_!=null&&J(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Ge(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(cs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Zg=class extends cs{static get className(){return"Adadelta"}constructor(e,t,a=null){super(),this.learningRate=e,this.rho=t,this.epsilon=a,this.accumulatedGrads=[],this.accumulatedUpdates=[],a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accum_grad`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedUpdates[a]==null&&(this.accumulatedUpdates[a]={originalName:`${t}/accum_var`,variable:De(()=>Qa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[a].variable,o=this.accumulatedUpdates[a].variable;De(()=>{let l=we(te(i,this.rho),te(Tn(s),1-this.rho)),u=te(ve(er(we(o,this.epsilon)),er(we(i,this.epsilon))),s),p=we(te(o,this.rho),te(Tn(u),1-this.rho));i.assign(l),o.assign(p);let c=we(te(u,-this.learningRate),n);n.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(J(this.accumulatedGrads.map(e=>e.variable)),J(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,a=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}},Jg=class extends cs{static get className(){return"Adagrad"}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,a)=>{let n=L.registeredVariables[t];this.accumulatedGrads[a]==null&&(this.accumulatedGrads[a]={originalName:`${t}/accumulator`,variable:De(()=>sr(n.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[a].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[a].variable;De(()=>{let i=we(s,Tn(r));s.assign(i);let o=we(te(ve(r,er(we(i,L.backend.epsilon()))),-this.learningRate),n);n.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&J(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(a=>({originalName:a.name,variable:a.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}},Qg=class extends cs{static get className(){return"Adam"}constructor(e,t,a,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=Ge(t).variable(),this.accBeta2=Ge(a).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=xe(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:De(()=>Qa(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:De(()=>Qa(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedSecondMoment[s].variable,c=we(te(u,this.beta1),te(l,1-this.beta1)),d=we(te(p,this.beta2),te(Tn(l),1-this.beta2)),h=ve(c,a),m=ve(d,n);u.assign(c),p.assign(d);let f=we(te(ve(h,we(er(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(te(this.accBeta1,this.beta1)),this.accBeta2.assign(te(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&J(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),De(()=>{this.accBeta1.assign(Kl(this.beta1,this.iterations_+1)),this.accBeta2.assign(Kl(this.beta2,this.iterations_+1))});let t=e.length/2,a=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)}))}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)}},e3=class extends cs{static get className(){return"Adamax"}constructor(e,t,a,n=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=a,this.epsilon=n,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=Ge(0).variable(),this.accBeta1=Ge(t).variable()}),n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(a=>a.name):Object.keys(e);De(()=>{let a=xe(1,this.accBeta1),n=ve(-this.learningRate,we(te(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Qa(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Qa(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedWeightedInfNorm[s].variable,c=we(te(u,this.beta1),te(l,1-this.beta1)),d=te(p,this.beta2),h=Za(l),m=Mg(d,h);u.assign(c),p.assign(m);let f=we(te(ve(n,a),ve(c,we(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(we(this.iteration,1)),this.accBeta1.assign(te(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&J(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&J(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)}},Qh=class extends cs{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=Array.isArray(e)?e[a].tensor:e[t];if(n==null)return;let r=L.registeredVariables[t];De(()=>{let s=we(te(this.c,n),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=zn(Ge(-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)}},t3=class extends Qh{static get className(){return"Momentum"}constructor(e,t,a=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=a,this.accumulations=[],this.m=Ge(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,a)=>{let n=L.registeredVariables[t];this.accumulations[a]==null&&(this.accumulations[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(!1))});let r=this.accumulations[a].variable,s=Array.isArray(e)?e[a].tensor:e[t];s!=null&&De(()=>{let i,o=we(te(this.m,r),s);this.useNesterov?i=we(te(this.c,we(s,te(o,this.m))),n):i=we(te(this.c,o),n),r.assign(o),n.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&J(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(a=>({originalName:a.name,variable:a.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)}},a3=class extends cs{static get className(){return"RMSProp"}constructor(e,t=.9,a=0,n=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=a,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,n==null&&(this.epsilon=L.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,a)=>{let n=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[a]==null&&(this.accumulatedMeanSquares[a]={originalName:`${t}/rms`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMoments[a]==null&&(this.accumulatedMoments[a]={originalName:`${t}/momentum`,variable:De(()=>Qa(n).variable(r))}),this.accumulatedMeanGrads[a]==null&&this.centered&&(this.accumulatedMeanGrads[a]={originalName:`${t}/mg`,variable:De(()=>Qa(n).variable(r))});let s=Array.isArray(e)?e[a].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[a].variable,o=this.accumulatedMoments[a].variable;De(()=>{let l=we(te(i,this.decay),te(Tn(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[a].variable,p=we(te(u,this.decay),te(s,1-this.decay)),c=ve(te(s,this.learningRate),er(xe(l,we(Tn(p),this.epsilon)))),d=we(te(o,this.momentum),c);i.assign(l),u.assign(p),o.assign(d);let h=xe(n,d);n.assign(h)}else{let u=we(te(i,this.decay),te(Tn(s),1-this.decay)),p=we(te(o,this.momentum),ve(te(s,this.learningRate),er(we(u,this.epsilon))));i.assign(u),o.assign(p);let c=xe(n,p);n.assign(c)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&J(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&J(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&J(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,a=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(a)})))}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)}},X_=[Zg,Jg,Qg,e3,t3,a3,Qh];function K_(){for(let e of X_)I7(e)}var Kn={};Ze(Kn,{CompositeArrayBuffer:()=>Tr,browserFiles:()=>aF,browserHTTPRequest:()=>lF,concatenateArrayBuffers:()=>TN,copyModel:()=>KN,decodeWeights:()=>UA,decodeWeightsStream:()=>HA,encodeWeights:()=>vN,fromMemory:()=>dF,fromMemorySync:()=>R7,getLoadHandlers:()=>FN,getModelArtifactsForJSON:()=>dg,getModelArtifactsForJSONSync:()=>qA,getModelArtifactsInfoForJSON:()=>Op,getSaveHandlers:()=>_N,getWeightSpecs:()=>d1,http:()=>r3,isHTTPScheme:()=>x1,listModels:()=>qN,loadWeights:()=>rF,moveModel:()=>YN,registerLoadRouter:()=>PN,registerSaveRouter:()=>$N,removeModel:()=>XN,weightsLoaderFactory:()=>C7,withSaveHandler:()=>pF,withSaveHandlerSync:()=>cF});var Y_="model",Z_=".json",J_=".weights.bin";function a5(e){return new Promise(t=>setTimeout(t)).then(e)}var gh=class y1{constructor(t){if(!B().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(y1.URL_SCHEME)&&(t=t.slice(y1.URL_SCHEME.length)),(t==null||t.length===0)&&(t=Y_),this.modelJsonFileName=t+Z_,this.weightDataFileName=t+J_}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let a=Tr.join(t.weightData),n=window.URL.createObjectURL(new Blob([a],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let r=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],s=jA(t,r),i=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),o=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(o.download=this.modelJsonFileName,o.href=i,await a5(()=>o.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let l=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;l.download=this.weightDataFileName,l.href=n,await a5(()=>l.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Op(t)}}}};gh.URL_SCHEME="downloads://";var Q_=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let a=new FileReader;a.onload=n=>{let r=JSON.parse(n.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=dg(r,o=>this.loadWeights(o));e(i)},a.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(this.jsonFile)})}loadWeights(e){let t=[],a=[];for(let s of e)t.push(...s.weights),a.push(...s.paths);let n=this.checkManifestAndWeightFiles(e),r=a.map(s=>this.loadWeightsFile(s,n[s]));return Promise.all(r).then(s=>[t,s])}loadWeightsFile(e,t){return new Promise((a,n)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;a(i)},r.onerror=s=>n(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],a=this.weightsFiles.map(r=>Qx(r.name)),n={};for(let r of e)r.paths.forEach(s=>{let i=Qx(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),a.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[s]=this.weightsFiles[a.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},eF=e=>B().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(gh.URL_SCHEME)?tF(e.slice(gh.URL_SCHEME.length)):null;gn.registerSaveRouter(eF);function tF(e="model"){return new gh(e)}function aF(e){return new Q_(e)}function n5(e,t,a,n){i(e),a=a==null?0:a,n=n==null?1:n,o(a,n);let r=0,s=l=>(l.then(u=>{let p=a+ ++r/e.length*(n-a);return t(p),u}),l);function i(l){F(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){F(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),F(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),F(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function S7(e,t){t==null&&(t={});let a=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,n=e.map(s=>a(s,t.requestInit,{isBinary:!0})),r=(t.onProgress==null?await Promise.all(n):await n5(n,t.onProgress,0,.5)).map(s=>s.arrayBuffer());return t.onProgress==null?await Promise.all(r):await n5(r,t.onProgress,.5,1)}function nF(e,t){var a;let n=t.fetchFunc==null?B().platform.fetch:t.fetchFunc,r=0,s;return(a=t.onProgress)===null||a===void 0||a.call(t,0),new ReadableStream({pull:async i=>{for(var o;rS7(r,{requestInit:n}))(e,t,a)}function C7(e){return async(t,a="",n)=>{let r=t.map(()=>!1),s={},i=n!=null?n.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,x=Ks[y]*mt(g.shape),A=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:x})};n!=null?n.forEach((b,w)=>{b===g.name&&(A(),i[w]=!0)}):A(),o.push(g.name),f+=x})}),!i.every(h=>h)){let h=n.filter((m,f)=>!i[f]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. +Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=a+(a.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),c={},d=0;return l.forEach(h=>{let m=t[h].paths.length,f=new Tr(p.slice(d,d+m));s[h].forEach(g=>{let y=f.slice(g.groupOffset,g.groupOffset+g.sizeBytes),x=UA(y,[g.manifestEntry]);for(let A in x)c[A]=x[A]}),d+=m}),c}}var sF="application/octet-stream",iF="application/json",n3=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,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=B().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||{},this.loadOptions=t}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 a=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=jA(e,a);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:iF}),"model.json"),e.weightData!=null){let s=Tr.join(e.weightData);t.body.append("model.weights.bin",new Blob([s],{type:sF}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Op(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async loadModelJSON(){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(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" 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.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let a=t.modelTopology,n=t.weightsManifest;if(a==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return dg(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),a=d1(e.weightsManifest),n=()=>nF(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:a,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[a,n]=oF(t),r=this.weightPathPrefix||a,s=[],i=[];for(let o of e)for(let l of o.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(l)):s.push(r+l+n);return this.weightUrlConverter&&s.push(...await Promise.all(i)),s}async loadWeights(e){let t=await this.getWeightUrls(e),a=d1(e),n=await S7(t,this.loadOptions);return[a,n]}};n3.URL_SCHEME_REGEX=/^https?:\/\//;function oF(e){let t=e.lastIndexOf("/"),a=e.lastIndexOf("?"),n=e.substring(0,t),r=a>t?e.substring(a):"";return[n+"/",r]}function x1(e){return e.match(n3.URL_SCHEME_REGEX)!=null}var T7=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let a=!0;if(Array.isArray(e)?a=e.every(n=>x1(n)):a=x1(e),a)return r3(e,t)}return null};gn.registerSaveRouter(T7);gn.registerLoadRouter(T7);function r3(e,t){return new n3(e,t)}function lF(e,t){return r3(e,t)}var K2=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},N7=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},uF=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function dF(e,t,a,n){let r=arguments;return new uF(R7(...r))}function R7(e,t,a,n){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new K2(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 K2({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 K2({modelTopology:e,weightSpecs:t,weightData:a,trainingConfig:n}))}function pF(e){return new N7(e)}function cF(e){return new N7(e)}var E7={};Ze(E7,{confusionMatrix:()=>mF});function hF(e,t,a){let n=R(e,"labels","confusionMatrix"),r=R(t,"predictions","confusionMatrix");F(a==null||a>0&&Number.isInteger(a),()=>`If provided, numClasses must be a positive integer, but got ${a}`),F(n.rank===1,()=>`Expected the rank of labels to be 1, but got ${n.rank}`),F(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),F(n.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${n.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),F(a>0&&Number.isInteger(a),()=>`numClasses is required to be a positive integer, but got ${a}`);let s=fh(Ue(n,"int32"),a),i=fh(Ue(r,"int32"),a),o=Qs(s),l=pt(o,i);return Ue(l,"int32")}var mF=z({confusionMatrix_:hF}),Er={};Ze(Er,{draw:()=>wF,fromPixels:()=>kF,fromPixelsAsync:()=>AF,toPixels:()=>vF});var Os,r5=!1;function M7(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 a=!1,n=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)a=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)n=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!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(Bd(Ld,L.backendName)!=null){let d={pixels:e},h={numChannels:t};return L.runKernel(Ld,d,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(i)p=e.getContext("2d").getImageData(0,0,l,u).data;else if(n||a)p=e.data;else if(s||r||o){if(Os==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Os=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Os=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Os.canvas.width=l,Os.canvas.height=u,Os.drawImage(e,0,0,l,u),p=Os.getImageData(0,0,l,u).data}let c;if(t===4)c=new Int32Array(p);else{let d=l*u;c=new Int32Array(d*t);for(let h=0;h4||t===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}function bF(e){let t=(e==null?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function vF(e,t){let a=R(e,"img","toPixels");if(!(e instanceof yt)){let u=a;a=Ue(u,"int32"),u.dispose()}$7(a);let[n,r]=a.shape.slice(0,2),s=a.rank===2?1:a.shape[2],i=await a.data(),o=a.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*n*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(a.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(p[0]=h*o,p[1]=h*o,p[2]=h*o):p[d]=h*o}let c=u*4;l[c+0]=Math.round(p[0]),l[c+1]=Math.round(p[1]),l[c+2]=Math.round(p[2]),l[c+3]=Math.round(p[3])}if(t!=null){r5||Bd(gp,L.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),r5=!0),t.width=r,t.height=n;let u=t.getContext("2d"),p=new ImageData(l,r,n);u.putImageData(p,0,0)}return a!==e&&a.dispose(),l}function wF(e,t,a){let n=R(e,"img","draw");if(!(e instanceof yt)){let i=n;n=Ue(i,"int32"),i.dispose()}$7(n),bF(a==null?void 0:a.imageOptions);let r={image:n},s={canvas:t,options:a};L.runKernel(gp,r,s)}var kF=z({fromPixels_:M7}),s3={};Ze(s3,{prepareAndValidate:()=>P7});function P7(e,t){let a=e.shape.length,n=t.shape.length;if(a<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${a}.`);if(n<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${n}.`);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[n-1]>a)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[n-1]} vs. ${a}`);if(mt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let c=0;cc/u),1].slice(0,s);return[l,i,u,p]}var Nt={};Ze(Nt,{assertParamsValid:()=>SF,computeFlatOffset:()=>EF,computeOutShape:()=>TF,getNormalizedAxes:()=>NF,isSliceContinous:()=>RF,maskToAxes:()=>CF,parseSliceParams:()=>MF,sliceInfo:()=>$F,startForAxis:()=>W7,startIndicesWithElidedDims:()=>O7,stopForAxis:()=>B7,stopIndicesWithElidedDims:()=>z7,stridesForAxis:()=>L7,stridesWithElidedDims:()=>_7});var A1=-2,IF=-1;function SF(e,t,a){let n=e.shape.length;F(n===t.length,()=>`Error in slice${n}D: Length of begin ${t} must match the rank of the array (${n}).`),F(n===a.length,()=>`Error in slice${n}D: Length of size ${a} must match the rank of the array (${n}).`);for(let r=0;r`Error in slice${n}D: begin[${r}] + size[${r}] (${t[r]+a[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function CF(e){let t=[],a=0;for(;e>0;)e&1&&t.push(a),e/=2,a++;return t}function TF(e,t,a){let n=[];for(let r=0;r0){let h=t[0],m=a+1;p=O7(i,h,m,n,e),c=z7(o,h,m,r,e),d=_7(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=F7(t,a,o),u=n[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=F7(t,a,o),u=n[l];e&1<0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),i=zd(0,i,l-1),i}function B7(e,t,a,n,r,s){let i=t[r],o=a[r]||1;(e&1<0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=n[r];return i<0&&(i+=l),o>0?i=zd(0,i,l):i=zd(-1,i,l-1),i}function RF(e,t,a){let n=a.length;for(let r=0;r1){n=r;break}for(let r=n+1;r0||a[r]!==e[r])return!1;return!0}function EF(e,t){let a=e.length>0?e[e.length-1]:1;for(let n=0;n{F(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return a==null?s=new Array(r).fill(-1):typeof a=="number"?s=[a,...new Array(r-1).fill(-1)]:a.lengthi>=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]-n[o])),[n,s]}function $F(e,t,a,n,r,s,i,o,l){let u;if(n==null?(u=new Array(t.length),u.fill(1)):u=n,i!=null&&i&i-1)throw new Error("Multiple ellipses in slice is not allowed.");let p=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:a.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let x=0;x0?0:-1,d.strides[x]>0?b:b-1];if(A&&d.strides[x]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&d.strides[x]===1;let T=!!(d.beginMask&1<=b)throw Error(`slice index ${d.begin[x]} of dimension ${x} out of bounds.`)}else d.begin[x]=s5(d.begin[x],0,d.strides[x],b,w,I),d.end[x]=s5(d.end[x],1,d.strides[x],b,w,I);let $=d.strides[x]===1&&d.begin[x]===0&&d.end[x]===b;h=h&&$,m=m&&(x===0&&d.strides[x]===1||$)}else h=h&&d.strides[x]===1&&T,m=m&&(x===0&&d.strides[x]===1||T);let N,M=!1;if(d.beginValid&&d.endValid?(N=d.end[x]-d.begin[x],M=!0):A?(N=1,M=!0):T&&b>=0&&(d.strides[x]<0?N=-b:N=b,M=!0),M){let $;N===0||N<0!=d.strides[x]<0?$=0:$=Math.trunc(N/d.strides[x])+(N%d.strides[x]!==0?1:0),g.push($)}else g.push(-1)}for(let x=0;x=0?y.push(g[A]):A===A1&&y.push(1)}return{finalShapeSparse:y.filter((x,A)=>d.finalShapeGatherIndices[A]!==A1),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:d.begin,end:d.end,strides:d.strides}}function PF(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let a=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let n=0;n0?s[t]:s[t+1&1];{let i=e<0?n+e:e;return is[1]?s[1]:i}}var i3="4.17.0",V7=class{static sgd(e){return new Qh(e)}static momentum(e,t,a=!1){return new t3(e,t,a)}static rmsprop(e,t=.9,a=0,n=null,r=!1){return new a3(e,t,a,n,r)}static adam(e=.001,t=.9,a=.999,n=null){return new Qg(e,t,a,n)}static adadelta(e=.001,t=.95,a=null){return new Zg(e,t,a)}static adamax(e=.002,t=.9,a=.999,n=null,r=0){return new e3(e,t,a,n,r)}static adagrad(e,t=.1){return new Jg(e,t)}},_F=V7,FF=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function U7(){return new Promise(e=>FF(()=>e()))}var C={};Ze(C,{ERF_A1:()=>JF,ERF_A2:()=>QF,ERF_A3:()=>eD,ERF_A4:()=>tD,ERF_A5:()=>aD,ERF_P:()=>ZF,PARALLELIZE_THRESHOLD:()=>o3,RowPartitionType:()=>Xn,SELU_SCALE:()=>YF,SELU_SCALEALPHA:()=>KF,applyActivation:()=>Zh,assertAndGetBroadcastShape:()=>Ut,assertAxesAreInnerMostDims:()=>IE,assertParamsConsistent:()=>DF,assignToTypedArray:()=>lD,axesAreInnerMostDims:()=>Ag,calculateShapes:()=>X4,checkEinsumDimSizes:()=>mD,checkPadOnDimRoundingMode:()=>Nn,combineLocations:()=>Gb,combineRaggedTensorToTensorShapes:()=>zF,complexWithEvenIndex:()=>sD,complexWithOddIndex:()=>iD,computeConv2DInfo:()=>Lp,computeConv3DInfo:()=>cb,computeDefaultPad:()=>cg,computeDilation2DInfo:()=>bR,computeOptimalWindowSize:()=>VF,computeOutAndReduceShapes:()=>kE,computeOutShape:()=>OF,computePool2DInfo:()=>pb,computePool3DInfo:()=>vR,convertConv2DDataFormat:()=>hb,decodeEinsumEquation:()=>cD,eitherStridesOrDilationsAreOne:()=>Nr,expandShapeToKeepDim:()=>Vp,exponent:()=>dD,exponents:()=>uD,fromStringArrayToUint8:()=>FD,fromUint8ToStringArray:()=>_D,getAxesPermutation:()=>SE,getBroadcastDims:()=>Lb,getComplexWithIndex:()=>oD,getEinsumComputePath:()=>fD,getEinsumPermutation:()=>hD,getFusedBiasGradient:()=>Yh,getFusedDyActivation:()=>Kh,getImageCenter:()=>UF,getInnerMostAxes:()=>TE,getPermuted:()=>HF,getRaggedRank:()=>WF,getReductionAxes:()=>gg,getReshaped:()=>GF,getReshapedPermuted:()=>jF,getRowPartitionTypesHelper:()=>LF,getSliceBeginCoords:()=>qF,getSliceSize:()=>XF,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>AD,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>bD,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>vD,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>ID,getSparseReshapeInputOutputMismatchErrorMessage:()=>CD,getSparseReshapeInputOutputMultipleErrorMessage:()=>SD,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>wD,getSparseReshapeNegativeOutputDimErrorMessage:()=>kD,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>ED,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>TD,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>ND,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>RD,getUndoAxesPermutation:()=>CE,isIdentityPermutation:()=>gD,log:()=>$T,mergeRealAndImagArrays:()=>nD,prepareAndValidate:()=>P7,prepareSplitSize:()=>xD,segment_util:()=>G7,shouldFuse:()=>Jh,slice_util:()=>Nt,splitRealAndImagArrays:()=>rD,stridesOrDilationsArePositive:()=>Js,tupleValuesAreOne:()=>qd,upcastType:()=>pa,validateDefaultValueShape:()=>BF,validateInput:()=>qh,validateUpdateShape:()=>jg,warn:()=>Vr});function DF(e,t){let a=e[0].length;e.forEach((r,s)=>{F(r.length===a,()=>`Error in concat${a}D: rank of tensors[${s}] must be the same as the rank of the rest (${a})`)}),F(t>=0&&t`Error in concat${a}D: axis must be between 0 and ${a-1}.`);let n=e[0];e.forEach((r,s)=>{for(let i=0;i`Error in concat${a}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${n}) along the non-concatenated axis ${s}.`)})}function OF(e,t){let a=e[0].slice();for(let n=1;n=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${r+e}] = ${s} but shape[${r+e}] = ${o}`)}else n[i]=s}return n}function LF(e){let t={FIRST_DIM_SIZE:Xn.FIRST_DIM_SIZE,VALUE_ROWIDS:Xn.VALUE_ROWIDS,ROW_LENGTHS:Xn.ROW_LENGTHS,ROW_SPLITS:Xn.ROW_SPLITS,ROW_LIMITS:Xn.ROW_LIMITS,ROW_STARTS:Xn.ROW_STARTS},a=[];for(let n of e)if(n in t)a.push(t[n]);else break;return a}function WF(e){return e.length===0?0:e[0]===Xn.FIRST_DIM_SIZE?e.length-1:e.length}function BF(e,t){if(e==null||t==null)return;let a=e.length,n=t.length;if(a>=n)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${a} must be less than ragged tensor input flatValues.rank = ${n})`);for(let r=0;r=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${r-e.length}] = ${s} but ragged tensor input.flatValues.shape[${r-e.length}] = ${i}`)}}var o3=30;function VF(e){return e<=o3?e:ph(e,Math.floor(Math.sqrt(e)))}function UF(e,t,a){let n=a*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[n,r]}function GF(e,t,a,n=!0){let r=[];if(n)r=r.concat(t.slice(0)),r.push(e[0]/a),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i=t*2+1||i%2===1?s.push(i):r.push(i);n.push(...r),n.push(0),n.push(...s)}return n}function jF(e,t,a,n=!0){let r=[];n?r.push(e[0]/a):r.push(e[0]*a);for(let s=1;s/g,i5=",",o5="...";function cD(e,t){e=e.replace(/\s/g,"");let a=(e.length-e.replace(pD,"").length)/Y2.length;if(a<1)throw new Error("Equations without an arrow are not supported.");if(a>1)throw new Error(`Equation must contain exactly one arrow ("${Y2}").`);let[n,r]=e.split(Y2);F(n.indexOf(o5)===-1,()=>`The ellipsis notation ("${o5}") is not supported yet.`);let s=n.split(i5),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let d=0;dm.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let d=0;dr!==-1),{permutationIndices:a,expandDims:n}}function mD(e,t,a){let n=new Array(e);for(let r=0;r`Expected dimension ${n[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function fD(e,t){let a=e,n=[],r=0;e.length===0&&a.push(-1),r=e.length+1;for(let i=0;it===a)}function yD(e,t){let a=[];for(let n=0;n"Number of splits must evenly divide the axis."),n=new Array(t).fill(e.shape[a]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);F(r<=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[a]-i}F(e.shape[a]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),n=t}return n}function AD(e){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${e}`}function bD(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function vD(e,t,a){return`indices(${e}, 0) is invalid: ${t} >= ${a}`}function wD(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function kD(e,t){return`size ${e} must be non-negative, not ${t}`}function ID(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function SD(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a SparseTensor with ${a} + dense values, but the requested shape requires a multiple of ${n}. inputShape=${e} outputShape= ${t}`}function CD(e,t){let a=mt(e),n=mt(t);return`Input to reshape is a tensor with ${a} dense values, but the requested shape has ${n}. inputShape=${e} outputShape=${t}`}function TD(){return"segment ids must be >= 0"}function ND(){return"segment ids are not increasing"}function RD(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function ED(e,t,a){return`Bad: indices[${e}] == ${t} out of range [0, ${a})`}var G7={};Ze(G7,{collectGatherOpShapeInfo:()=>PD,computeOutShape:()=>$D,segOpComputeOptimalWindowSize:()=>MD});function MD(e,t){let a=!1,n;for(e<=o3?(n=e,a=!0):n=ph(e,Math.floor(Math.sqrt(e)));!a;)n>t||n===e?a=!0:n=ph(e,n+1);return n}function $D(e,t,a){let n=[],r=e.length;for(let s=0;sr))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${n}`);if(n<0&&(n+=r),n>s)throw new Error(`batchDims (${n}) must be less than rank(x) ( + ${s}).`);if(ach(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function FD(e){return e.map(t=>$p(t))}var Rn={};Ze(Rn,{nonMaxSuppressionV3Impl:()=>c7,nonMaxSuppressionV4Impl:()=>h7,nonMaxSuppressionV5Impl:()=>m7,whereImpl:()=>a7});K_();var DD=B();DD.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var Ka;(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_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",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",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"})(Ka||(Ka={}));var l5;(function(e){let t;(function(a){a[a.LEGACY=0]="LEGACY",a[a.V1=1]="V1",a[a.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(l5||(l5={}));var l3={};function OD(e,t){let a={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};l3[e]=a}function H7(e){return l3[e]}function zD(e){delete l3[e]}function k(e,t,a,n,r){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,u=o<0?t.inputNames.length+o:o;if(s.type==="tensor")return ua(t.inputNames[u],a,n,r);if(s.type==="tensors"){let d=t.inputs.slice(o,l);return t.inputNames.slice(o,l).filter((h,m)=>{var f;return((f=d[m])===null||f===void 0?void 0:f.op)!=="NoOp"}).map(h=>ua(h,a,n,r))}let p=ua(t.inputNames[u],a,n,r),c=p.dataSync();return s.type==="number"?c[0]:v.toNestedArray(p.shape,c)}let i=t.attrParams[e];return i&&i.value}function ua(e,t,a,n){let[r,s]=Ya(e,a);if(n!=null){let o=n.getHashTableHandleByName(r);if(o!=null)return o}let i=a.currentContextIds.find(o=>!!t[yh(r,o)]);return i!==void 0?t[yh(r,i)][s]:void 0}function u5(e,t,a){return t[yh(e,a.currentContextId)]}function Ar(e,t){let[a,n,r]=Ya(e,t);return[yh(a,t&&t.currentContextId),n,r]}function yh(e,t){return t?`${e}-${t}`:e}function Ya(e,t){if(e==="")return["",0,void 0];let a=t!=null&&t.parseNodeNameCache!=null;if(a){let s=t.parseNodeNameCache.get(e);if(s!=null)return s}let n=e.split(":"),r;if(n.length===1)r=[e,0,void 0];else{let s=n[0],i=n.length===3?n[1]:void 0,o=Number(n[n.length-1]);r=[s,o,i]}return a&&t.parseNodeNameCache.set(e,r),r}function ah(e,t,a){let n=k("pad",e,t,a);if(n==="explicit"){n=k("explicitPaddings",e,t,a);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=n[s*2],r[s][1]=n[s*2+1];return r}return n}function br(e){return e.kept?e:Ia(e)}var j7={};Ze(j7,{json:()=>LD});var LD=[{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}]}],q7={};Ze(q7,{json:()=>WD});var WD=[{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:"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}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],X7={};Ze(X7,{json:()=>BD});var BD=[{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:"TensorListConcatV2",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"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],K7={};Ze(K7,{json:()=>VD});var VD=[{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",defaultValue:.2}]},{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"}]}],Y7={};Ze(Y7,{json:()=>UD});var UD=[{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"}]},{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:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{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:"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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}],Z7={};Ze(Z7,{json:()=>GD});var GD=[{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}]}],J7={};Ze(J7,{json:()=>HD});var HD=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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"}]}],Q7={};Ze(Q7,{json:()=>jD});var jD=[{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"}]}],e6={};Ze(e6,{json:()=>qD});var qD=[{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}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],t6={};Ze(t6,{json:()=>XD});var XD=[{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"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],a6={};Ze(a6,{json:()=>KD});var KD=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],n6={};Ze(n6,{json:()=>YD});var YD=[{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:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{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}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],r6={};Ze(r6,{json:()=>ZD});var ZD=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{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"}]}],s6={};Ze(s6,{json:()=>JD});var JD=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",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"}]},{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"}]}],i6={};Ze(i6,{json:()=>QD});var QD=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],o6={};Ze(o6,{json:()=>eO});var eO=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],l6={};Ze(l6,{json:()=>tO});var tO=[{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}]}],u6={};Ze(u6,{json:()=>aO});var aO=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],d6={};Ze(d6,{json:()=>nO});var nO=[{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:"EnsureShape",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:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],d5=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[j7,q7,X7,K7,Y7,Z7,J7,Q7,e6,t6,a6,n6,r6,s6,i6,o6,l6,u6,d6],t=[].concat(...e.map(a=>a.json));this.opMappers=t.reduce((a,n)=>(a[n.tfOpName]=n,a),{})}transformGraph(e,t={}){let a=e.node,n=[],r=[],s=[],i=a.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?n.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let c=Object.keys(i);c.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[x,,A]=Ar(g),b=i[x];if(b.outputs!=null){let w=b.outputs.indexOf(A);if(w!==-1){let I=`${x}:${w}`;f.inputNames[y]=I}}f.inputs.push(b),b.children.push(f)})}),Object.keys(p).length===0?c.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(p).forEach(m=>{let[f]=Ar(m),g=i[f];g!=null&&(g.signatureKey=p[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=Ar(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:n,signature:t,functions:d};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,a)=>(t[e[a].name]=a,t),{})}mapNode(e){let t=H7(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let a={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(a.inputParams=t.inputs.reduce((n,r)=>(n[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},n),{})),t.attrs!=null&&(a.attrParams=t.attrs.reduce((n,r)=>{let s=r.type,i;switch(r.type){case"string":i=b1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=b1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=T1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=T1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=w1(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=w1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=C1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=C1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=v1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=v1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=R1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=R1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=S1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=S1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=N1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=N1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=k1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=k1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=I1(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=I1(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=p5(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=p5(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return n[r.name]={value:i,type:s},n},{})),a}mapFunction(e){let t=e.nodeDef,a=[],n=[],r={};t!=null&&(r=t.reduce((u,p)=>(u[p.name]=this.mapNode(p),p.op==="Const"&&n.push(u[p.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[p]=Ar(u.name),c={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:u3(u.type),type:"dtype"}},children:[]};c.signatureKey=u.name,s.push(c),r[p]=c}),Object.keys(r).forEach(u=>{let p=r[u];p.inputNames.forEach((c,d)=>{let[h,,m]=Ar(c),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;p.inputNames[d]=y}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,c]=Ar(o[u.name]),d=r[p];d!=null&&(d.defaultOutput=c,i.push(d))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:n,placeholders:a,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a),t),{}),outputs:e.signature.outputArg.reduce((t,a)=>(t[a.name]=this.mapArgToTensorInfo(a,e.ret),t),{})}}mapArgToTensorInfo(e,t){let a=e.name;return t!=null&&(a=t[a]),{name:a,dtype:e.type}}};function rO(e){let t=B().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 p6(e,t){let a=Array.isArray(e)?String.fromCharCode.apply(null,e):rO(e);return t?a:a.toLowerCase()}function b1(e,t,a,n=!1){let r=e[t];return r!=null?p6(r.s,n):a}function v1(e,t,a){let n=e[t];return n?n.b:a}function w1(e,t,a){let n=e[t]||{},r=n.i!=null?n.i:n.f!=null?n.f:a;return typeof r=="number"?r:parseInt(r,10)}function u3(e){switch(typeof e=="string"&&(e=Ka[e]),e){case Ka.DT_FLOAT:case Ka.DT_HALF:return"float32";case Ka.DT_INT32:case Ka.DT_INT64:case Ka.DT_INT8:case Ka.DT_UINT8:return"int32";case Ka.DT_BOOL:return"bool";case Ka.DT_DOUBLE:return"float32";case Ka.DT_STRING:return"string";case Ka.DT_COMPLEX64:case Ka.DT_COMPLEX128:return"complex64";default:return null}}function p5(e,t,a){let n=e[t];return n&&n.func?n.func.name:a}function k1(e,t,a){let n=e[t];return n&&n.type?u3(n.type):a}function I1(e,t,a){let n=e[t];return n&&n.list&&n.list.type?n.list.type.map(r=>u3(r)):a}function c6(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function S1(e,t,a){let n=e[t];return n&&n.shape?c6(n.shape):a}function C1(e,t,a){let n=e[t];return n?((n.list.f&&n.list.f.length?n.list.f:n.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):a}function T1(e,t,a,n=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>p6(s,n)):a}function N1(e,t,a){let n=e[t];return n&&n.list&&n.list.shape?n.list.shape.map(r=>c6(r)):a}function R1(e,t,a){let n=e[t];return n&&n.list&&n.list.b?n.list.b:a}var sO=class{constructor(e,t,a){this.node=e,this.tensorMap=t,this.context=a,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,r)=>(n[r]=this.getAttr(r),n),{}))}getInput(e){return ua(e,this.tensorMap,this.context)}getAttr(e,t){let a=this.node.rawAttrs[e];if(a.tensor!=null)return ua(e,this.tensorMap,this.context);if(a.i!=null||a.f!=null)return w1(this.node.rawAttrs,e,t);if(a.s!=null)return b1(this.node.rawAttrs,e,t);if(a.b!=null)return v1(this.node.rawAttrs,e,t);if(a.shape!=null)return S1(this.node.rawAttrs,e,t);if(a.type!=null)return k1(this.node.rawAttrs,e,t);if(a.list!=null){if(a.list.i!=null||a.list.f!=null)return C1(this.node.rawAttrs,e,t);if(a.list.s!=null)return T1(this.node.rawAttrs,e,t);if(a.list.shape!=null)return N1(this.node.rawAttrs,e,t);if(a.list.b!=null)return R1(this.node.rawAttrs,e,t);if(a.list.type!=null)return I1(this.node.rawAttrs,e,t)}return t}},ea={};Ze(ea,{OP_SCOPE_SUFFIX:()=>sg,abs:()=>Za,acos:()=>tb,acosh:()=>ab,add:()=>we,addN:()=>Dh,all:()=>nb,any:()=>rb,argMax:()=>rr,argMin:()=>sb,asin:()=>ib,asinh:()=>ob,atan:()=>lb,atan2:()=>ub,atanh:()=>db,avgPool:()=>hg,avgPool3d:()=>mb,basicLSTMCell:()=>fb,batchNorm:()=>Wp,batchNorm2d:()=>gb,batchNorm3d:()=>yb,batchNorm4d:()=>xb,batchToSpaceND:()=>mg,bincount:()=>fg,bitwiseAnd:()=>Ab,booleanMaskAsync:()=>n7,broadcastArgs:()=>bb,broadcastTo:()=>Ul,buffer:()=>_e,cast:()=>Ue,ceil:()=>vb,clipByValue:()=>wb,clone:()=>Ia,complex:()=>Sr,concat:()=>lt,concat1d:()=>kb,concat2d:()=>Vu,concat3d:()=>Ib,concat4d:()=>Sb,conv1d:()=>Cb,conv2d:()=>Bp,conv2dTranspose:()=>Nb,conv3d:()=>Rb,conv3dTranspose:()=>Eb,cos:()=>Mb,cosh:()=>$b,cosineWindow:()=>Xh,cumprod:()=>Pb,cumsum:()=>_b,denseBincount:()=>Fb,depthToSpace:()=>Db,depthwiseConv2d:()=>Oh,diag:()=>Ob,dilation2d:()=>zb,div:()=>ve,divNoNan:()=>Wb,dot:()=>Bb,dropout:()=>l7,einsum:()=>Vs,elu:()=>xg,enclosingPowerOfTwo:()=>Xg,ensureShape:()=>Vb,equal:()=>yg,erf:()=>Ub,euclideanNorm:()=>jb,exp:()=>ns,expandDims:()=>Wt,expm1:()=>qb,eye:()=>bg,fft:()=>Gh,fill:()=>sr,floor:()=>vg,floorDiv:()=>zp,fused:()=>Kg,gather:()=>wg,gatherND:()=>o7,greater:()=>Gp,greaterEqual:()=>kg,ifft:()=>Zd,imag:()=>Hp,image:()=>fe,inTopKAsync:()=>u7,irfft:()=>Vg,isFinite:()=>Xb,isInf:()=>Kb,isNaN:()=>Yb,leakyRelu:()=>Ig,less:()=>mh,lessEqual:()=>zh,linalg:()=>y7,linspace:()=>Zb,localResponseNormalization:()=>Jb,log:()=>Yl,log1p:()=>Sg,logSigmoid:()=>e4,logSoftmax:()=>t4,logSumExp:()=>Tg,logicalAnd:()=>Xd,logicalNot:()=>Ng,logicalOr:()=>Rg,logicalXor:()=>a4,losses:()=>x7,lowerBound:()=>n4,matMul:()=>pt,max:()=>fa,maxPool:()=>Eg,maxPool3d:()=>r4,maxPoolWithArgmax:()=>s4,maximum:()=>Mg,mean:()=>Kd,meshgrid:()=>i4,min:()=>as,minimum:()=>Yd,mirrorPad:()=>o4,mod:()=>Uu,moments:()=>l4,movingAverage:()=>r7,mul:()=>te,multiRNNCell:()=>u4,multinomial:()=>d4,neg:()=>Ln,norm:()=>Up,notEqual:()=>$g,oneHot:()=>fh,ones:()=>Hr,onesLike:()=>p4,op:()=>z,outerProduct:()=>c4,pad:()=>ir,pad1d:()=>h4,pad2d:()=>m4,pad3d:()=>f4,pad4d:()=>g4,pool:()=>y4,pow:()=>Kl,prelu:()=>_g,print:()=>pg,prod:()=>x4,raggedGather:()=>A4,raggedRange:()=>b4,raggedTensorToTensor:()=>v4,rand:()=>w4,randomGamma:()=>C4,randomNormal:()=>Lg,randomStandardNormal:()=>T4,randomUniform:()=>Bh,randomUniformInt:()=>N4,range:()=>Zl,real:()=>Jl,reciprocal:()=>R4,relu:()=>jp,relu6:()=>Wg,reshape:()=>Q,reverse:()=>rs,reverse1d:()=>E4,reverse2d:()=>M4,reverse3d:()=>$4,reverse4d:()=>P4,rfft:()=>Hh,round:()=>Bg,rsqrt:()=>_4,scalar:()=>Ge,scatterND:()=>s7,searchSorted:()=>Wh,selu:()=>F4,separableConv2d:()=>D4,setdiff1dAsync:()=>O4,sigmoid:()=>za,sign:()=>z4,signal:()=>g7,sin:()=>L4,sinh:()=>W4,slice:()=>Fe,slice1d:()=>B4,slice2d:()=>V4,slice3d:()=>qp,slice4d:()=>Vh,softmax:()=>Uh,softplus:()=>Cg,spaceToBatchND:()=>Pg,sparse:()=>A7,sparseToDense:()=>i7,spectral:()=>f7,split:()=>Sa,sqrt:()=>er,square:()=>Tn,squaredDifference:()=>Ug,squeeze:()=>Oe,stack:()=>ca,step:()=>Gg,stridedSlice:()=>U4,string:()=>b7,sub:()=>xe,sum:()=>ot,tan:()=>G4,tanh:()=>hh,tensor:()=>Ve,tensor1d:()=>Bt,tensor2d:()=>Zn,tensor3d:()=>Hg,tensor4d:()=>H4,tensor5d:()=>j4,tensor6d:()=>q4,tensorScatterUpdate:()=>K4,tile:()=>Xr,topk:()=>Y4,transpose:()=>Qs,truncatedNormal:()=>Z4,unique:()=>J4,unsortedSegmentSum:()=>Q4,unstack:()=>Na,upperBound:()=>e7,variable:()=>t7,where:()=>kr,whereAsync:()=>qg,zeros:()=>yn,zerosLike:()=>Qa});var iO=(e,t,a,n=ea)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[n.add(k("a",e,t,a),k("b",e,t,a))];case"AddN":return[n.addN(k("tensors",e,t,a))];case"FloorMod":case"Mod":return[n.mod(k("a",e,t,a),k("b",e,t,a))];case"Mul":return[n.mul(k("a",e,t,a),k("b",e,t,a))];case"RealDiv":case"Div":return[n.div(k("a",e,t,a),k("b",e,t,a))];case"DivNoNan":return[n.divNoNan(k("a",e,t,a),k("b",e,t,a))];case"FloorDiv":return[n.floorDiv(k("a",e,t,a),k("b",e,t,a))];case"Sub":return[n.sub(k("a",e,t,a),k("b",e,t,a))];case"Minimum":return[n.minimum(k("a",e,t,a),k("b",e,t,a))];case"Maximum":return[n.maximum(k("a",e,t,a),k("b",e,t,a))];case"Pow":return[n.pow(k("a",e,t,a),k("b",e,t,a))];case"SquaredDifference":return[n.squaredDifference(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},oO=(e,t,a,n=ea)=>{switch(e.op){case"Abs":case"ComplexAbs":return[n.abs(k("x",e,t,a))];case"Acos":return[n.acos(k("x",e,t,a))];case"Acosh":return[n.acosh(k("x",e,t,a))];case"Asin":return[n.asin(k("x",e,t,a))];case"Asinh":return[n.asinh(k("x",e,t,a))];case"Atan":return[n.atan(k("x",e,t,a))];case"Atan2":return[n.atan2(k("x",e,t,a),k("y",e,t,a))];case"Atanh":return[n.atanh(k("x",e,t,a))];case"Ceil":return[n.ceil(k("x",e,t,a))];case"Complex":return[n.complex(k("real",e,t,a),k("imag",e,t,a))];case"Cos":return[n.cos(k("x",e,t,a))];case"Cosh":return[n.cosh(k("x",e,t,a))];case"Elu":return[n.elu(k("x",e,t,a))];case"Erf":return[n.erf(k("x",e,t,a))];case"Exp":return[n.exp(k("x",e,t,a))];case"Expm1":return[n.expm1(k("x",e,t,a))];case"Floor":return[n.floor(k("x",e,t,a))];case"Log":return[n.log(k("x",e,t,a))];case"Log1p":return[n.log1p(k("x",e,t,a))];case"Imag":return[n.imag(k("x",e,t,a))];case"Neg":return[n.neg(k("x",e,t,a))];case"Reciprocal":return[n.reciprocal(k("x",e,t,a))];case"Real":return[n.real(k("x",e,t,a))];case"Relu":return[n.relu(k("x",e,t,a))];case"Round":return[n.round(k("x",e,t,a))];case"Selu":return[n.selu(k("x",e,t,a))];case"Sigmoid":return[n.sigmoid(k("x",e,t,a))];case"Sin":return[n.sin(k("x",e,t,a))];case"Sign":return[n.sign(k("x",e,t,a))];case"Sinh":return[n.sinh(k("x",e,t,a))];case"Softplus":return[n.softplus(k("x",e,t,a))];case"Sqrt":return[n.sqrt(k("x",e,t,a))];case"Square":return[n.square(k("x",e,t,a))];case"Tanh":return[n.tanh(k("x",e,t,a))];case"Tan":return[n.tan(k("x",e,t,a))];case"ClipByValue":return[n.clipByValue(k("x",e,t,a),k("clipValueMin",e,t,a),k("clipValueMax",e,t,a))];case"Relu6":return[n.relu6(k("x",e,t,a))];case"Rsqrt":return[n.rsqrt(ua(e.inputNames[0],t,a))];case"LeakyRelu":return[n.leakyRelu(k("x",e,t,a),k("alpha",e,t,a))];case"Prelu":return[n.prelu(k("x",e,t,a),k("alpha",e,t,a))];case"IsNan":return[n.isNaN(ua(e.inputNames[0],t,a))];case"IsInf":return[n.isInf(ua(e.inputNames[0],t,a))];case"IsFinite":return[n.isFinite(ua(e.inputNames[0],t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Cn(e,t,a=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>a+` Shapes ${e} and ${t} must match`);for(let n=0;na+` Shapes ${e} and ${t} must match`)}}}function c5(e){return!(typeof e=="number"||e.some(t=>t<0))}function kd(e,t,a){let n=E1(e,a),r=!c5(n);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${n}`);if(r&&t.forEach(s=>{n=E1(s.shape,n)}),!c5(n))throw new Error(`Non-fully-defined elementShape: ${n}`);return n}function E1(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 a=[];for(let n=0;n=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);a[n]=r>=0?r:s}return a}var lO=class{constructor(e,t,a,n,r,s,i){this.name=e,this.dtype=t,this.maxSize=a,this.elementShape=n,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Ge(0),zn(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 a=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),Cn(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),a.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(a.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);a.tensor=t,zn(t),a.written=!0,this.tensors[e]=a}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((a,n)=>this.write(a,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${a} vs. ${this.maxSize})`);this.writeMany(e,Na(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 a=0,n=e.map(o=>(a+=o,a));if(a!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${a}, 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 r=a===0?0:t.size/a,s=[];Pe(()=>{t=Q(t,[1,a,r]);for(let o=0;o{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);Rn(a,s.shape,"TensorList shape mismatch: "),Bn(s)}),this.idTensor=Ge(0),this.maxNumElements=r,Bn(this.idTensor)}copy(){return new O1([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(a=>{(t==null||!t.has(a.id))&&a.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,a,n=-1){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, 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.`);Rn(t,this.elementShape,"TensorList shape mismatch: ");let r=Rd(this.elementShape,this.tensors,t);return Pe(()=>{let s=this.tensors.map(i=>Q(i,r));return ca(s,0)})}popBack(t,a){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Rd(this.elementShape,this.tensors,t),r=this.tensors.pop();return r.kept=!1,Rn(r.shape,t,"TensorList shape mismatch: "),Q(r,n)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Rn(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Bn(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let a=new O1([],this.elementShape,this.elementDtype,this.maxNumElements);a.tensors.length=t;for(let n=0;nthis.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);Rn(this.tensors[t].shape,a,"TensorList shape mismatch: ");let r=Rd(this.elementShape,this.tensors,a);return Q(this.tensors[t],r)}setItem(t,a){if(a.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);Rn(this.elementShape,a.shape,"TensorList shape mismatch: "),Bn(a),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=a}gather(t,a,n){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);Rn(this.elementShape,n,"TensorList shape mismatch: "),t=t.slice(0,this.size());let r=Rd(this.elementShape,this.tensors,n);return t.length===0?Ve([],[0].concat(r)):Pe(()=>{let s=t.map(i=>Q(this.tensors[i],r));return ca(s,0)})}concat(t,a){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Rn(this.elementShape,a,"TensorList shape mismatch: ");let n=Rd(this.elementShape,this.tensors,a);return this.size()===0?Ve([],[0].concat(n)):Pe(()=>{let r=this.tensors.map(s=>Q(s,n));return lt(r,0)})}};function ZO(e,t,a){let n=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!==a)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${a}`);let r=e.shape.slice(1);Rn(r,t,"TensorList shape mismatch: ");let s=Na(e);return new o0(s,t,n)}function JO(e,t,a,n){return new o0([],e,t,n)}function QO(e,t,a,n){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(n!=null&&n!==-1&&r>=n)throw new Error(`Max index must be < array size (${r} vs. ${n})`);let s=new o0([],a,e.dtype,n),i=Na(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function ez(e,t,a){let n=0,r=t.map(d=>(n+=d,n));if(n!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${a}, 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 r=a===0?0:t.size/a,s=[];De(()=>{t=Q(t,[1,a,r]);for(let o=0;o{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);Cn(a,s.shape,"TensorList shape mismatch: "),zn(s)}),this.idTensor=Ge(0),this.maxNumElements=r,zn(this.idTensor)}copy(){return new M1([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(a=>{(t==null||!t.has(a.id))&&a.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,a,n=-1){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, 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.`);Cn(t,this.elementShape,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,t);return De(()=>{let s=this.tensors.map(i=>Q(i,r));return ca(s,0)})}popBack(t,a){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=kd(this.elementShape,this.tensors,t),r=this.tensors.pop();return r.kept=!1,Cn(r.shape,t,"TensorList shape mismatch: "),Q(r,n)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Cn(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");zn(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let a=new M1([],this.elementShape,this.elementDtype,this.maxNumElements);a.tensors.length=t;for(let n=0;nthis.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);Cn(this.tensors[t].shape,a,"TensorList shape mismatch: ");let r=kd(this.elementShape,this.tensors,a);return Q(this.tensors[t],r)}setItem(t,a){if(a.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);Cn(this.elementShape,a.shape,"TensorList shape mismatch: "),zn(a),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=a}gather(t,a,n){if(a!==this.elementDtype)throw new Error(`Invalid data types; op elements ${a}, but list elements ${this.elementDtype}`);Cn(this.elementShape,n,"TensorList shape mismatch: "),t=t.slice(0,this.size());let r=kd(this.elementShape,this.tensors,n);return t.length===0?Ve([],[0].concat(r)):De(()=>{let s=t.map(i=>Q(this.tensors[i],r));return ca(s,0)})}concat(t,a){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Cn(this.elementShape,a,"TensorList shape mismatch: ");let n=kd(this.elementShape,this.tensors,a);return this.size()===0?Ve([],[0].concat(n)):De(()=>{let r=this.tensors.map(s=>Q(s,n));return lt(r,0)})}};function uO(e,t,a){let n=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!==a)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${a}`);let r=e.shape.slice(1);Cn(r,t,"TensorList shape mismatch: ");let s=Na(e);return new e0(s,t,n)}function dO(e,t,a,n){return new e0([],e,t,n)}function pO(e,t,a,n){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(n!=null&&n!==-1&&r>=n)throw new Error(`Max index must be < array size (${r} vs. ${n})`);let s=new e0([],a,e.dtype,n),i=Na(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function cO(e,t,a){let n=0,r=t.map(p=>(n+=p,n));if(n!==e.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: ${e.shape}`);let s=e.shape.slice(1),i=_1(s,a),o=n===0?0:e.size/n,l=Pe(()=>{let d=[];e=Q(e,[1,n,o]);for(let c=0;c{switch(e.op){case"If":case"StatelessIf":{let n=k("thenBranch",e,t,a),r=k("elseBranch",e,t,a),s=k("cond",e,t,a),i=k("args",e,t,a);return(await s.data())[0]?a.functionMap[n].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap):a.functionMap[r].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap)}case"While":case"StatelessWhile":{let n=k("body",e,t,a),r=k("cond",e,t,a),s=k("args",e,t,a),i=await a.functionMap[r].executeFunctionAsync(s,a.tensorArrayMap,a.tensorListMap),o=s.map(d=>d.id),l=await i[0].data();i.forEach(d=>{!d.kept&&o.indexOf(d.id)===-1&&d.dispose()});let u=s;for(;l[0];){let d=u;u=await a.functionMap[n].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);let c=u.map(h=>h.id);d.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()});let p=await a.functionMap[r].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);l=await p[0].data(),p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let n=k("pred",e,t,a);return[Ir(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=Ir(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>da(r,t,a)!==void 0);if(n){let r=da(n,t,a);return[Ir(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[Ir(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[Ir(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[Ir(n)]}case"TensorArrayV3":{let n=k("size",e,t,a),r=k("dtype",e,t,a),s=k("elementShape",e,t,a),i=k("dynamicSize",e,t,a),o=k("clearAfterRead",e,t,a),l=k("identicalElementShapes",e,t,a),u=k("name",e,t,a),d=new YO(u,r,n,s,l,i,o);return a.addTensorArray(d),[d.idTensor,Ge(1)]}case"TensorArrayWriteV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a);return[a.getTensorArray(n.id).read(r)]}case"TensorArrayGatherV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("dtype",e,t,a);return[a.getTensorArray(n.id).gather(r,s)]}case"TensorArrayScatterV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id),s=k("dtype",e,t,a);return[r.concat(s)]}case"TensorArraySplitV3":{let n=k("tensorArrayId",e,t,a),r=k("tensor",e,t,a),s=k("lengths",e,t,a),i=a.getTensorArray(n.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return[Ge(r.size(),"int32")]}case"TensorArrayCloseV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorList(n.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let n=k("indices",e,t,a),r=k("tensor",e,t,a),s=k("elementShape",e,t,a),i=k("numElements",e,t,a),o=QO(r,n,s,i);return a.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=k("elementShape",e,t,a),r=k("elementDType",e,t,a),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,a),o=e.op==="TensorListReserve"?-1:i,l=JO(n,r,i,o);return a.addTensorList(l),[l.idTensor]}case"TensorListGather":{let n=k("tensorListId",e,t,a),r=k("indices",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).gather(r,i,s)]}case"TensorListStack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=k("numElements",e,t,a);return[a.getTensorList(n.id).stack(r,s,i)]}case"TensorListFromTensor":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=ZO(n,r,s);return a.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id),s=k("dtype",e,t,a),i=k("elementShape",e,t,a);return[r.concat(s,i)]}case"TensorListPushBack":{let n=k("tensorListId",e,t,a),r=k("tensor",e,t,a),s=a.getTensorList(n.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a);return[a.getTensorList(n.id).popBack(r,s)]}case"TensorListSplit":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("lengths",e,t,a),i=ez(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Ge(r.size(),"int32")]}case"TensorListResize":{let n=k("tensorListId",e,t,a),r=k("size",e,t,a),s=a.getTensorList(n.id).resize(r);return a.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function S5(e,t,a){let[n,r]=k("fusedOps",e,t,a),s=n==="biasadd",i=!s,o=r==="prelu",l=n==="fusedbatchnorm",u=k("numArgs",e,t,a);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let d=k("strides",e,t,a),c=lh(e,t,a),p=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[m,f]=k("args",e,t,a);i&&(f=m,m=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:d,pad:c,dataFormat:p,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var az=(e,t,a,n=ta)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilation",e,t,a);return[n.conv1d(k("x",e,t,a),k("filter",e,t,a),r,s,i,o)]}case"Conv2D":{let r=k("strides",e,t,a),s=lh(e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv2d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:c}=S5(e,t,a);return[n.fused.conv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:c}=S5(e,t,a);return[n.fused.depthwiseConv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,a),s=k("strides",e,t,a),i=lh(e,t,a);return[n.conv2dTranspose(k("x",e,t,a),k("filter",e,t,a),r,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,a),s=lh(e,t,a),i=k("dilations",e,t,a),o=k("dataFormat",e,t,a).toUpperCase();return[n.depthwiseConv2d(k("input",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv3d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2],r[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a),o=k("includeBatchInIndex",e,t,a),{result:l,indexes:u}=n.maxPoolWithArgmax(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s,o);return[l,u]}case"AvgPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dilations",e,t,a),o=r[1],l=r[2],u=i[1],d=i[2];return[n.dilation2d(k("x",e,t,a),k("filter",e,t,a),[o,l],s,[u,d],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},nz=(e,t,a,n=ta)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,a),s=k("dtype",e,t,a),i=k("value",e,t,a);return[n.fill(r,i,s)]}case"LinSpace":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("num",e,t,a);return[n.linspace(r,s,i)]}case"Multinomial":{let r=k("logits",e,t,a),s=k("numSamples",e,t,a),i=k("seed",e,t,a);return[n.multinomial(r,s,i)]}case"OneHot":{let r=k("indices",e,t,a),s=k("depth",e,t,a),i=k("onValue",e,t,a),o=k("offValue",e,t,a),l=k("dtype",e,t,a);return[n.oneHot(r,s,i,o,l)]}case"Ones":return[n.ones(k("shape",e,t,a),k("dtype",e,t,a))];case"OnesLike":return[n.onesLike(k("x",e,t,a))];case"RandomStandardNormal":return[n.randomStandardNormal(k("shape",e,t,a),k("dtype",e,t,a),k("seed",e,t,a))];case"RandomUniform":return[n.randomUniform(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("dtype",e,t,a))];case"RandomUniformInt":return[n.randomUniformInt(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("seed",e,t,a))];case"Range":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("step",e,t,a);return[n.range(r,s,i,k("dtype",e,t,a))]}case"TruncatedNormal":{let r=k("shape",e,t,a),s=k("mean",e,t,a),i=k("stdDev",e,t,a),o=k("seed",e,t,a);return[n.truncatedNormal(r,s,i,k("dtype",e,t,a),o)]}case"Zeros":return[n.zeros(k("shape",e,t,a),k("dtype",e,t,a))];case"ZerosLike":return[n.zerosLike(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function n1(e,t,a){let n=k("boxes",e,t,a),r=k("scores",e,t,a),s=k("maxOutputSize",e,t,a),i=k("iouThreshold",e,t,a),o=k("scoreThreshold",e,t,a),l=k("softNmsSigma",e,t,a);return{boxes:n,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var rz=async(e,t,a,n,r=ta)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:d}=n1(e,t,a),c=await r.image.nonMaxSuppressionWithScoreAsync(s,i,o,l,u,d);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=n1(e,t,a),d=k("padToMaxOutputSize",e,t,a),c=await r.image.nonMaxSuppressionPaddedAsync(s,i,o,l,u,d);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=n1(e,t,a);return[await r.image.nonMaxSuppressionAsync(s,i,o,l,u)]}case"Where":{let s=r.cast(k("condition",e,t,a),"bool"),i=[await r.whereAsync(s)];return s.dispose(),i}case"ListDiff":return r.setdiff1dAsync(k("x",e,t,a),k("y",e,t,a));default:throw TypeError(`Node type ${e.op} is not implemented`)}},sz=(e,t,a,n=ta)=>{switch(e.op){case"LowerBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.lowerBound(r,s)]}case"TopKV2":{let r=k("x",e,t,a),s=k("k",e,t,a),i=k("sorted",e,t,a),o=n.topk(r,s,i);return[o.values,o.indices]}case"UpperBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.upperBound(r,s)]}case"Unique":{let r=k("x",e,t,a),s=n.unique(r);return[s.values,s.indices]}case"UniqueV2":{let r=k("x",e,t,a),s=k("axis",e,t,a),i=n.unique(r,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},iz=(e,t,a,n=ta)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[da(e.name,t,a)||r];case"Placeholder":return[da(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let d=k("x",e,t,a);return[Ir(d)]}case"IdentityN":return k("x",e,t,a).map(d=>Ir(d));case"Snapshot":let s=k("x",e,t,a);return[Ir(s)];case"Shape":return[n.tensor1d(k("x",e,t,a).shape,"int32")];case"ShapeN":return k("x",e,t,a).map(d=>n.tensor1d(d.shape));case"Size":return[n.scalar(k("x",e,t,a).size,"int32")];case"Rank":return[n.scalar(k("x",e,t,a).rank,"int32")];case"NoOp":return[n.scalar(1)];case"Print":let i=k("x",e,t,a),o=k("data",e,t,a),l=k("message",e,t,a),u=k("summarize",e,t,a);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(l);for(let d=0;de.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Ge(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let a=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),Pe(()=>{let n=Na(t),r=a.length,s=n.length;v.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i{let n=[];for(let r=0;r{switch(e.op){case"HashTable":case"HashTableV2":{let r=n.getHashTableHandleByName(e.name);if(r!=null)return[r];{let s=k("keyDType",e,t,a),i=k("valueDType",e,t,a),o=new oz(s,i);return n.addHashTable(e.name,o),[o.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("values",e,t,a);return[await n.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("defaultValue",e,t,a);return[await n.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=k("tableHandle",e,t,a,n);return[n.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},uz=(e,t,a,n=ta)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeBilinear(r,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeNearestNeighbor(r,[s[0],s[1]],i,o)]}case"CropAndResize":{let r=k("image",e,t,a),s=k("boxes",e,t,a),i=k("boxInd",e,t,a),o=k("cropSize",e,t,a),l=k("method",e,t,a),u=k("extrapolationValue",e,t,a);return[n.image.cropAndResize(r,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let r=k("images",e,t,a),s=k("transforms",e,t,a),i=k("outputShape",e,t,a),o=k("fillValue",e,t,a),l=k("interpolation",e,t,a),u=k("fillMode",e,t,a);return[n.image.transform(r,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},dz=(e,t,a,n=ta)=>{switch(e.op){case"Equal":return[n.equal(k("a",e,t,a),k("b",e,t,a))];case"NotEqual":return[n.notEqual(k("a",e,t,a),k("b",e,t,a))];case"Greater":return[n.greater(k("a",e,t,a),k("b",e,t,a))];case"GreaterEqual":return[n.greaterEqual(k("a",e,t,a),k("b",e,t,a))];case"Less":return[n.less(k("a",e,t,a),k("b",e,t,a))];case"LessEqual":return[n.lessEqual(k("a",e,t,a),k("b",e,t,a))];case"LogicalAnd":return[n.logicalAnd(k("a",e,t,a),k("b",e,t,a))];case"LogicalNot":return[n.logicalNot(k("a",e,t,a))];case"LogicalOr":return[n.logicalOr(k("a",e,t,a),k("b",e,t,a))];case"Select":case"SelectV2":return[n.where(k("condition",e,t,a),k("a",e,t,a),k("b",e,t,a))];case"BitwiseAnd":return[n.bitwiseAnd(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},pz=(e,t,a,n=ta)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[n.matMul(k("a",e,t,a),k("b",e,t,a),k("transposeA",e,t,a),k("transposeB",e,t,a))];case"Einsum":return[n.einsum(k("equation",e,t,a),...k("tensors",e,t,a))];case"Transpose":return[n.transpose(k("x",e,t,a),k("perm",e,t,a))];case"_FusedMatMul":let[r,s]=k("fusedOps",e,t,a),i=r==="biasadd",o=s==="prelu",l=k("numArgs",e,t,a),u=k("leakyreluAlpha",e,t,a);if(i){if(o&&l!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&l!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[d,c]=k("args",e,t,a);return[n.fused.matMul({a:k("a",e,t,a),b:k("b",e,t,a),transposeA:k("transposeA",e,t,a),transposeB:k("transposeB",e,t,a),bias:d,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];case"MatrixBandPart":return[n.linalg.bandPart(k("a",e,t,a),k("numLower",e,t,a),k("numUpper",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},cz=(e,t,a,n=ta)=>{switch(e.op){case"EuclideanNorm":return[n.euclideanNorm(k("x",e,t,a),k("axis",e,t,a),k("keepDims",e,t,a))];case"FusedBatchNorm":case"FusedBatchNormV2":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"FusedBatchNormV3":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"LRN":return[n.localResponseNormalization(k("x",e,t,a),k("radius",e,t,a),k("bias",e,t,a),k("alpha",e,t,a),k("beta",e,t,a))];case"Softmax":return[n.softmax(k("x",e,t,a))];case"LogSoftmax":return[n.logSoftmax(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},hz=(e,t,a,n=ta)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:r,outputDenseValues:s}=n.raggedGather(k("paramsNestedSplits",e,t,a),k("paramsDenseValues",e,t,a),k("indices",e,t,a),k("outputRaggedRank",e,t,a));return r.concat(s)}case"RaggedRange":{let{rtNestedSplits:r,rtDenseValues:s}=n.raggedRange(k("starts",e,t,a),k("limits",e,t,a),k("splits",e,t,a));return[r,s]}case"RaggedTensorToTensor":return[n.raggedTensorToTensor(k("shape",e,t,a),k("values",e,t,a),k("defaultValue",e,t,a),k("rowPartitionTensors",e,t,a),k("rowPartitionTypes",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},mz=(e,t,a,n=ta)=>{switch(e.op){case"Max":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.max(k("x",e,t,a),o,l)]}case"Mean":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.mean(k("x",e,t,a),o,l)]}case"Min":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.min(k("x",e,t,a),o,l)]}case"Sum":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.sum(k("x",e,t,a),o,l)]}case"All":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.all(k("x",e,t,a),o,l)]}case"Any":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.any(k("x",e,t,a),o,l)]}case"ArgMax":{let o=k("axis",e,t,a);return[n.argMax(k("x",e,t,a),o)]}case"ArgMin":{let o=k("axis",e,t,a);return[n.argMin(k("x",e,t,a),o)]}case"Prod":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.prod(k("x",e,t,a),o,l)]}case"Cumprod":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumprod(k("x",e,t,a),o,l,u)]}case"Cumsum":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumsum(k("x",e,t,a),o,l,u)]}case"Bincount":let r=k("x",e,t,a),s=k("weights",e,t,a),i=k("size",e,t,a);return[n.bincount(r,s,i)];case"DenseBincount":{let o=k("x",e,t,a),l=k("weights",e,t,a),u=k("size",e,t,a),d=k("binaryOutput",e,t,a);return[n.denseBincount(o,l,u,d)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},fz=(e,t,a,n=ta)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,a),s=k("axis",e,t,a),i=k("tensors",e,t,a);return i=i.slice(0,r),[n.concat(i,s)]}case"Gather":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gather(r,n.cast(s,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,a),s=k("batchDims",e,t,a),i=k("x",e,t,a),o=k("indices",e,t,a);return[n.gather(i,n.cast(o,"int32"),r,s)]}case"Reverse":{let r=k("dims",e,t,a),s=[];for(let o=0;o{let r=k("axis",e,t,a),s=k("tensors",e,t,a),i=s[0].shape,o=n.squeeze(s[0]).shape,l=s.map(u=>{let d=v.arraysEqual(u.shape,i);if(!d&&!v.arraysEqual(n.squeeze(u).shape,o))throw new Error("the input tensors shape does not match");return d?u:n.reshape(u,i)});return[n.stack(l,r)]});case"Unpack":{let r=k("axis",e,t,a),s=k("tensor",e,t,a);return n.unstack(s,r)}case"Tile":{let r=k("reps",e,t,a);return[n.tile(k("x",e,t,a),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,a),s=k("numOrSizeSplits",e,t,a),i=k("x",e,t,a);return n.split(i,s,r)}case"ScatterNd":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("shape",e,t,a);return[n.scatterND(r,s,i)]}case"GatherNd":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gatherND(r,s)]}case"SparseToDense":{let r=k("sparseIndices",e,t,a),s=k("outputShape",e,t,a),i=k("sparseValues",e,t,a),o=k("defaultValue",e,t,a);return[n.sparseToDense(r,i,s,i.dtype===o.dtype?o:n.cast(o,i.dtype))]}case"TensorScatterUpdate":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("tensor",e,t,a);return[n.tensorScatterUpdate(i,r,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},gz=(e,t,a,n=ta)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=n.sparse.sparseFillEmptyRows(k("indices",e,t,a),k("values",e,t,a),k("denseShape",e,t,a),k("defaultValue",e,t,a));return[r,s,i,o]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=n.sparse.sparseReshape(k("inputIndices",e,t,a),k("inputShape",e,t,a),k("newShape",e,t,a));return[r,s]}case"SparseSegmentMean":return[n.sparse.sparseSegmentMean(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];case"SparseSegmentSum":return[n.sparse.sparseSegmentSum(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},yz=(e,t,a,n=ta)=>{switch(e.op){case"FFT":return[n.fft(k("x",e,t,a))];case"IFFT":return[n.ifft(k("x",e,t,a))];case"RFFT":return[n.rfft(k("x",e,t,a))];case"IRFFT":return[n.irfft(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},xz=(e,t,a,n=ta)=>{switch(e.op){case"StaticRegexReplace":return[n.string.staticRegexReplace(k("input",e,t,a),k("pattern",e,t,a),k("rewrite",e,t,a),k("replaceGlobal",e,t,a))];case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=n.string.stringNGrams(k("data",e,t,a),k("dataSplits",e,t,a),k("separator",e,t,a),k("nGramWidths",e,t,a),k("leftPad",e,t,a),k("rightPad",e,t,a),k("padWidth",e,t,a),k("preserveShortSequences",e,t,a));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:i}=n.string.stringSplit(k("input",e,t,a),k("delimiter",e,t,a),k("skipEmpty",e,t,a));return[r,s,i]}case"StringToHashBucketFast":return[n.string.stringToHashBucketFast(k("input",e,t,a),k("numBuckets",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Az=(e,t,a,n=ta)=>{switch(e.op){case"Cast":return[n.cast(k("x",e,t,a),k("dtype",e,t,a))];case"ExpandDims":{let r=k("axis",e,t,a);return[n.expandDims(k("x",e,t,a),r)]}case"Squeeze":{let r=k("axis",e,t,a);return[n.squeeze(k("x",e,t,a),r)]}case"Reshape":return[n.reshape(k("x",e,t,a),k("shape",e,t,a))];case"EnsureShape":return[n.ensureShape(k("x",e,t,a),k("shape",e,t,a))];case"MirrorPad":return[n.mirrorPad(k("x",e,t,a),k("padding",e,t,a),k("mode",e,t,a))];case"PadV2":case"Pad":return[n.pad(k("x",e,t,a),k("padding",e,t,a),k("constantValue",e,t,a))];case"SpaceToBatchND":{let r=k("blockShape",e,t,a),s=k("paddings",e,t,a);return[n.spaceToBatchND(k("x",e,t,a),r,s)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,a),s=k("crops",e,t,a);return[n.batchToSpaceND(k("x",e,t,a),r,s)]}case"DepthToSpace":{let r=k("blockSize",e,t,a),s=k("dataFormat",e,t,a).toUpperCase();return[n.depthToSpace(k("x",e,t,a),r,s)]}case"BroadcastTo":return[n.broadcastTo(k("x",e,t,a),k("shape",e,t,a))];case"BroadcastArgs":return[n.broadcastArgs(k("s0",e,t,a),k("s1",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function T5(e,t,a,n,r=Pe){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>XO(i,o,l));case"basic_math":return r(()=>KO(i,o,l));case"control":return tz(i,o,l);case"convolution":return r(()=>az(i,o,l));case"creation":return r(()=>nz(i,o,l));case"dynamic":return rz(i,o,l);case"evaluation":return r(()=>sz(i,o,l));case"image":return r(()=>uz(i,o,l));case"graph":return r(()=>iz(i,o,l));case"logical":return r(()=>dz(i,o,l));case"matrices":return r(()=>pz(i,o,l));case"normalization":return r(()=>cz(i,o,l));case"ragged":return r(()=>hz(i,o,l));case"reduction":return r(()=>mz(i,o,l));case"slice_join":return r(()=>fz(i,o,l));case"sparse":return r(()=>gz(i,o,l));case"spectral":return r(()=>yz(i,o,l));case"string":return r(()=>xz(i,o,l));case"transformation":return r(()=>Az(i,o,l));case"hash_table":return lz(i,o,l,n);case"custom":let u=l6(i.op);if(u&&u.customExecutor)return u.customExecutor(new qO(i,o,l));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.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,a);return v.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var C5=class{constructor(e={},t={},a={},n={},r){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.parseNodeNameCache=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;tt.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 N5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(p=>Za(p)[0]));n=n||[];let d=new Set(n.map(p=>Za(p.name)[0])),c=[...t];for(;c.length>0;){let p=c.pop();if((mi(p)||Cz(p)||Nz(p))&&i==null&&(i=p,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(p.name),a[p.name]==null&&!u.has(p.name)&&!d.has(p.name)){if(p.inputs.length===0){s.push(p.name);continue}p.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),c.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function bz(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Za(g)[0]).map(g=>e.nodes[g]),s=e.initNodes||[],i=g=>a.has(typeof g=="string"?g:g.name);function o(g){return[...new Map(g.map(y=>[y.name,y])).values()]}let l=o([...r,...e.weights,...s]).filter(i),u=o([...l,...Object.values(e.nodes)]).filter(i),d=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let y of g.children)i(y)||(c[y.name]=Number.POSITIVE_INFINITY),c[y.name]=(c[y.name]||0)+1}let p=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),h=[...p];for(;p.length>0;){let g=p.pop(),y=d.get(g);for(let x of y.children.filter(i))--c[x.name]===0&&(h.push(x.name),p.push(x.name))}let m=h.map(g=>d.get(g)),f=vz(m,l);return wz(f,l),f}function vz(e,t){let a=new Map(e.map(s=>[s.name,s])),n=t.map(s=>s.name),r=new Set(n);for(;n.length>0;){let s=n.pop(),i=a.get(s);for(let o of i.children)!a.has(o.name)||r.has(o.name)||(r.add(o.name),n.push(o.name))}return e.filter(s=>r.has(s.name))}var th=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function wz(e,t){let a=new Map(e.map((o,l)=>[o.name,l])),n=new Set(t.map(o=>o.name)),r=o=>n.has(typeof o=="string"?o:o.name),s=new Set(e.map(o=>o.name)),i=o=>s.has(typeof o=="string"?o:o.name);for(let o of e){for(let l of o.children.filter(i)){if(!a.has(l.name))throw new th(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new th(`Node ${o.name} is scheduled to run after its child ${l.name}.`)}if(!r(o))for(let l of o.inputs){if(!a.has(l.name))throw new th(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new th(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function kz(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>mi(o)?a:l),r=o=>{let l=n[t.get(o.name)];return l==null?-1:l},s=e.map((o,l)=>o.children.map(r).reduce((u,d)=>Math.max(u,d),n[l])),i=new Map;for(let o=0;ot[n].map(r=>r.id));this._weightIds=[].concat(...a),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let a=t.signatureKey||t.name;return t.defaultOutput?`${a}:${t.defaultOutput}`:a})}get functions(){return Object.keys(this._functions).reduce((t,a)=>(t[a]=this._functions[a].signature,t),{})}constructor(t,a){this.graph=t,this.parent=a,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(n=>{this._functionExecutorMap[n]=new E6(t.functions[n],this)})}getCompilationKey(t,a){let n=t.map(s=>s.name).sort(),r=a.map(s=>s.name).sort();return n.join(this.SEPARATOR)+"--"+r.join(this.SEPARATOR)}compile(t,a){let n=N5(t,a,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:i}=n;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${i}]`);if(r.length>0){let u=a.map(c=>c.name),d=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${d}]. Missing the following inputs: [${r}]`)}let o=bz(this.graph,n),l=kz(o);return{orderedNodes:o,nodeLiveUntilMap:l}}cloneAndKeepTensor(t){if(t==null)return null;let a=t.clone();return Bn(a),a}cloneTensorList(t){return t?t.map(a=>this.cloneAndKeepTensor(a)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([a,n])=>[a,this.cloneTensorList(n)]))}execute(t,a){this.disposeIntermediateTensors(),t=this.mapInputs(t);let n=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a);let r=n.map(p=>this.graph.nodes[Za(p)[0]]),s=a.map(p=>Za(p)[0]),i=new Set(s),o=s.map(p=>this.graph.nodes[p]);o.length===0&&(o=this._outputs);let l=this.getCompilationKey(r,o),u=this.compiledMap.get(l);u==null&&(u=this.compile(t,o),this.compiledMap.set(l,u));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(p){this.keepIntermediateTensors=!1,console.warn(p.message)}let d={},c={};return Pe(()=>{let p=new C5(this.weightMap,d,c,this.functionExecutorMap,this.parseNodeNameCache),h=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(y=>{let[x,A]=Za(y,p),b=[];b[A]=t[y],h[x]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x]=this.cloneTensorList(b))});let m=this.getFrozenTensorIds(h),{orderedNodes:f,nodeLiveUntilMap:g}=u;for(let y of f){if(h[y.name])continue;let x=T5(y,h,p,this._resourceManager);if(v.isPromise(x))throw new Error(`The execution of the op '${y.op}' returned a promise. Please use model.executeAsync() instead.`);h[y.name]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[y.name]=this.cloneTensorList(x)),this.checkTensorForDisposalWithNodeLiveUntilInfo(y,h,p,m,i,g.get(y.name))}return this.parent==null&&p.dispose(m),a.map(y=>da(y,h,p))})}getFrozenTensorIds(t){let a=[].concat.apply([],Object.keys(t).map(n=>t[n]).map(n=>n.map(r=>r.id)));return new Set(a)}checkTensorForDisposal(t,a,n,r,s,i,o){if(!(mi(a)||i.has(t))){for(let l of n[t])l!=null&&(o[l.id]=(o[l.id]||0)+a.children.length);for(let l of a.inputs){if(mi(l))continue;let u=v5(l.name,n,r);if(u!=null)for(let d of u){if(!d||d.kept||s.has(d.id))continue;let c=o[d.id];c===1?(d.dispose(),delete o[d.id]):c!=null&&o[d.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(t,a,n,r,s,i){function o(l){return mi(l)||s.has(l.name)}if(!(mi(t)||i==null))for(let l of i){if(o(l))continue;let u=v5(l.name,a,n);for(let d of u)!d||d.kept||r.has(d.id)||d.dispose()}}async executeAsync(t,a){return this._executeAsync(t,a)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let a of t)a&&!a.isDisposed&&a.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,a,n=!1,r={},s={}){this.disposeIntermediateTensors(),n||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(p){this.keepIntermediateTensors=!1,console.warn(p.message)}let i=new C5(this.weightMap,r,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let o=await this.executeWithControlFlow(t,i,a,n),l=a.map(p=>da(p,o,i)),u=l.map(p=>p.id),d=Object.keys(t).map(p=>t[p].id),c=new Set([...u,...d,...this.weightIds]);return Object.values(o).forEach(p=>{p.forEach(h=>{h&&!h.isDisposed&&!c.has(h.id)&&h.dispose()})}),this.parent==null&&i.dispose(c),l}async executeFunctionAsync(t,a,n){let r=t.reduce((s,i,o)=>(s[this.inputs[o].name]=i,s),{});return this._executeAsync(r,this.outputNodes,!0,a,n)}async executeWithControlFlow(t,a,n,r){let s=Object.keys(t),i=s.map(b=>this.graph.nodes[Za(b)[0]]),o=n.map(b=>Za(b)[0]),l=new Set(o),u=o.map(b=>this.graph.nodes[b]);u.length===0&&(u=this._outputs);let{usedNodes:d,missingInputs:c,dynamicNode:p,syncInputs:h}=N5(t,u,this.weightMap,this._initNodes),m=[...i,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:a.currentContext})),f=Object.assign({},this.weightMap);Object.keys(t).forEach(b=>{let[w,S]=Za(b),C=[];C[S]=t[b],f[w]=C});let g={},y=this.getFrozenTensorIds(f),x={};for(;m.length>0;){let b=this.processStack(i,m,a,f,x,y,l,g,d);await Promise.all(b)}p==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 A=u.filter(b=>!mi(b)&&!da(b.name,f,a)).map(b=>b.name);if(A.length>0){let b="";throw p!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${A}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${b}`)}return f}processStack(t,a,n,r,s,i,o,l,u){let d=[];for(;a.length>0;){let c=a.pop();n.currentContext=c.contexts;let p="";if(c.node.op==="Enter"&&k("isConstant",c.node,r,n)&&([p]=kr(c.node.name,n)),r[c.node.name]==null){let h=T5(c.node,r,n,this._resourceManager);p||([p]=kr(c.node.name,n));let m=n.currentContext;v.isPromise(h)?d.push(h.then(f=>(r[p]=f,this.keepIntermediateTensors&&(this.clonedTensorsMap[p]=this.cloneTensorList(f)),n.currentContext=m,this.checkTensorForDisposal(p,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u),f))):(r[p]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[p]=this.cloneTensorList(h)),this.checkTensorForDisposal(p,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u))}else this.processChildNodes(c.node,a,n,r,s,u)}return d}processChildNodes(t,a,n,r,s,i){t.children.forEach(o=>{let[l]=kr(o.name,n);s[l]||!i.has(o.name)||(o.op==="Merge"?o.inputNames.some(u=>!!da(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})):o.inputNames.every(u=>!!da(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(a=>a.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(a=>{let n=t[a],[r]=Za(a),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let i=s.attrParams.shape.value,o=i.length===n.shape.length&&n.shape.every((l,u)=>i[u]===-1||i[u]===l);v.assert(o,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${i}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&v.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(t){var a,n;let r={};for(let s in t){let i=(n=(a=this._signature)===null||a===void 0?void 0:a.inputs)===null||n===void 0?void 0:n[s];i!=null?r[i.name]=t[s]:r[s]=t[s]}return r}checkInputs(t){let a=Object.keys(t).filter(n=>{let[r]=Za(n);return this.graph.nodes[r]==null});if(a.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${a}] that are not part of graph`)}mapOutputs(t){return t.map(a=>{var n,r;let s=(r=(n=this._signature)===null||n===void 0?void 0:n.outputs)===null||r===void 0?void 0:r[a];return s!=null?s.name:a},{})}checkOutputs(t){t.forEach(a=>{let[n]=Za(a);if(!this.graph.nodes[n])throw new Error(`The output '${a}' is not found in the graph`)})}},Rz=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]}},Ez="?tfjs-format=file",Mz="model.json",ec=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},a=Jn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new Rz}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return v.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await lb(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let a=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(n=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}if(this.signature=n,this.version=`${a.versions.producer}.${a.versions.minConsumer}`,this.executor=new R5(w5.Instance.transformGraph(a,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=w5.Instance.transformGraph(e.modelInitializer);this.initializer=new R5(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let a=this.io.getSaveHandlers(e);if(a.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(a.length>1)throw new Error(`Found more than one (${a.length}) save handlers for URL '${e}'`);e=a[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof yt?[e]:e,a={};return t.forEach((n,r)=>a[this.structuredOutputKeys[r]]=n),a}return e}predict(e,t){let a=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(a)}async predictAsync(e,t){let a=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(a)}normalizeInputs(e){var t;if(!(e instanceof yt)&&!Array.isArray(e)){let r=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(r!=null)for(let s in r){let i=r[s];i.resourceId!=null&&(e[s]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let a=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+a!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-a} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((r,s)=>{var i,o,l;let u=(l=(o=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||o===void 0?void 0:o[s])===null||l===void 0?void 0:l.resourceId;return u!=null?r[s]=this.resourceIdToCapturedInput[u]:r[s]=e[n++],r},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,a=Object.keys(t);for(let n=0;n1?a:a[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let a=await this.executor.executeAsync(e,t);return a.length>1?a:a[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,a)=>(t[a]=[e[a]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&J(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function x3(e,t={},a=Jn){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&&typeof e=="string"&&(e=$z(e));let n=new ec(e,t,a);return await n.load(),n}function Fz(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[n,r]=e;if(!n)throw new Error("modelJSON must be the first element of the array");if(!r||!(r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let s=Jn.getWeightSpecs(n.weightsManifest),i=Jn.getModelArtifactsForJSONSync(n,s,r);t=Jn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Jn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new ec(t);return a.load(),a}function $z(e){return e.endsWith("/")||(e=e+"/"),`${e}${Mz}${Ez}`}var Dz="4.17.0";function Ie(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var Pz=Fn.whereImpl,A3=class M6 extends du{nextDataId(){return M6.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new hp(this,St())}write(t,a,n){this.firstUse&&(this.firstUse=!1,B().get("IS_NODE")&&I.warn(` + ${n}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=E1(s,a),o=n===0?0:e.size/n,l=De(()=>{let p=[];e=Q(e,[1,n,o]);for(let c=0;c{switch(e.op){case"If":case"StatelessIf":{let n=k("thenBranch",e,t,a),r=k("elseBranch",e,t,a),s=k("cond",e,t,a),i=k("args",e,t,a);return(await s.data())[0]?a.functionMap[n].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap):a.functionMap[r].executeFunctionAsync(i,a.tensorArrayMap,a.tensorListMap)}case"While":case"StatelessWhile":{let n=k("body",e,t,a),r=k("cond",e,t,a),s=k("args",e,t,a),i=await a.functionMap[r].executeFunctionAsync(s,a.tensorArrayMap,a.tensorListMap),o=s.map(p=>p.id),l=await i[0].data();i.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&p.dispose()});let u=s;for(;l[0];){let p=u;u=await a.functionMap[n].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);let c=u.map(h=>h.id);p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()});let d=await a.functionMap[r].executeFunctionAsync(u,a.tensorArrayMap,a.tensorListMap);l=await d[0].data(),d.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&c.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let n=k("pred",e,t,a);return[br(n)]}case"Switch":{let n=k("pred",e,t,a),r=k("data",e,t,a);return r.kept||(r=br(r)),(await n.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let n=e.inputNames.find(r=>ua(r,t,a)!==void 0);if(n){let r=ua(n,t,a);return[br(r)]}return}case"Enter":{let n=k("frameName",e,t,a),r=k("tensor",e,t,a);return a.enterFrame(n),[br(r)]}case"Exit":{let n=k("tensor",e,t,a);return a.exitFrame(),[br(n)]}case"NextIteration":{let n=k("tensor",e,t,a);return a.nextIteration(),[br(n)]}case"TensorArrayV3":{let n=k("size",e,t,a),r=k("dtype",e,t,a),s=k("elementShape",e,t,a),i=k("dynamicSize",e,t,a),o=k("clearAfterRead",e,t,a),l=k("identicalElementShapes",e,t,a),u=k("name",e,t,a),p=new lO(u,r,n,s,l,i,o);return a.addTensorArray(p),[p.idTensor,Ge(1)]}case"TensorArrayWriteV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let n=k("tensorArrayId",e,t,a),r=k("index",e,t,a);return[a.getTensorArray(n.id).read(r)]}case"TensorArrayGatherV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("dtype",e,t,a);return[a.getTensorArray(n.id).gather(r,s)]}case"TensorArrayScatterV3":{let n=k("tensorArrayId",e,t,a),r=k("indices",e,t,a),s=k("tensor",e,t,a),i=a.getTensorArray(n.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id),s=k("dtype",e,t,a);return[r.concat(s)]}case"TensorArraySplitV3":{let n=k("tensorArrayId",e,t,a),r=k("tensor",e,t,a),s=k("lengths",e,t,a),i=a.getTensorArray(n.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return[Ge(r.size(),"int32")]}case"TensorArrayCloseV3":{let n=k("tensorArrayId",e,t,a),r=a.getTensorArray(n.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("tensor",e,t,a),i=a.getTensorList(n.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let n=k("tensorListId",e,t,a),r=k("index",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let n=k("indices",e,t,a),r=k("tensor",e,t,a),s=k("elementShape",e,t,a),i=k("numElements",e,t,a),o=pO(r,n,s,i);return a.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let n=k("elementShape",e,t,a),r=k("elementDType",e,t,a),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,a),o=e.op==="TensorListReserve"?-1:i,l=dO(n,r,i,o);return a.addTensorList(l),[l.idTensor]}case"TensorListGather":{let n=k("tensorListId",e,t,a),r=k("indices",e,t,a),s=k("elementShape",e,t,a),i=k("elementDType",e,t,a);return[a.getTensorList(n.id).gather(r,i,s)]}case"TensorListStack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=k("numElements",e,t,a);return[a.getTensorList(n.id).stack(r,s,i)]}case"TensorListFromTensor":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a),i=uO(n,r,s);return a.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id),s=k("dtype",e,t,a),i=k("elementShape",e,t,a);return[r.concat(s,i)]}case"TensorListPushBack":{let n=k("tensorListId",e,t,a),r=k("tensor",e,t,a),s=a.getTensorList(n.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let n=k("tensorListId",e,t,a),r=k("elementShape",e,t,a),s=k("elementDType",e,t,a);return[a.getTensorList(n.id).popBack(r,s)]}case"TensorListSplit":{let n=k("tensor",e,t,a),r=k("elementShape",e,t,a),s=k("lengths",e,t,a),i=cO(n,s,r);return a.addTensorList(i),[i.idTensor]}case"TensorListLength":{let n=k("tensorListId",e,t,a),r=a.getTensorList(n.id);return[Ge(r.size(),"int32")]}case"TensorListResize":{let n=k("tensorListId",e,t,a),r=k("size",e,t,a),s=a.getTensorList(n.id).resize(r);return a.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function h5(e,t,a){let[n,r]=k("fusedOps",e,t,a),s=n==="biasadd",i=!s,o=r==="prelu",l=n==="fusedbatchnorm",u=k("numArgs",e,t,a);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let p=k("strides",e,t,a),c=ah(e,t,a),d=k("dataFormat",e,t,a).toUpperCase(),h=k("dilations",e,t,a),[m,f]=k("args",e,t,a);i&&(f=m,m=void 0);let g=k("leakyreluAlpha",e,t,a);return{stride:p,pad:c,dataFormat:d,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var mO=(e,t,a,n=ea)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilation",e,t,a);return[n.conv1d(k("x",e,t,a),k("filter",e,t,a),r,s,i,o)]}case"Conv2D":{let r=k("strides",e,t,a),s=ah(e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv2d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:c}=h5(e,t,a);return[n.fused.conv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:c}=h5(e,t,a);return[n.fused.depthwiseConv2d({x:k("x",e,t,a),filter:k("filter",e,t,a),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,a),s=k("strides",e,t,a),i=ah(e,t,a);return[n.conv2dTranspose(k("x",e,t,a),k("filter",e,t,a),r,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,a),s=ah(e,t,a),i=k("dilations",e,t,a),o=k("dataFormat",e,t,a).toUpperCase();return[n.depthwiseConv2d(k("input",e,t,a),k("filter",e,t,a),[r[1],r[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dataFormat",e,t,a).toUpperCase(),o=k("dilations",e,t,a);return[n.conv3d(k("x",e,t,a),k("filter",e,t,a),[r[1],r[2],r[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a),o=k("includeBatchInIndex",e,t,a),{result:l,indexes:u}=n.maxPoolWithArgmax(k("x",e,t,a),[i[1],i[2]],[r[1],r[2]],s,o);return[l,u]}case"AvgPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.avgPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("kernelSize",e,t,a);return[n.maxPool3d(k("x",e,t,a),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=k("strides",e,t,a),s=k("pad",e,t,a),i=k("dilations",e,t,a),o=r[1],l=r[2],u=i[1],p=i[2];return[n.dilation2d(k("x",e,t,a),k("filter",e,t,a),[o,l],s,[u,p],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},fO=(e,t,a,n=ea)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,a),s=k("dtype",e,t,a),i=k("value",e,t,a);return[n.fill(r,i,s)]}case"LinSpace":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("num",e,t,a);return[n.linspace(r,s,i)]}case"Multinomial":{let r=k("logits",e,t,a),s=k("numSamples",e,t,a),i=k("seed",e,t,a);return[n.multinomial(r,s,i)]}case"OneHot":{let r=k("indices",e,t,a),s=k("depth",e,t,a),i=k("onValue",e,t,a),o=k("offValue",e,t,a),l=k("dtype",e,t,a);return[n.oneHot(r,s,i,o,l)]}case"Ones":return[n.ones(k("shape",e,t,a),k("dtype",e,t,a))];case"OnesLike":return[n.onesLike(k("x",e,t,a))];case"RandomStandardNormal":return[n.randomStandardNormal(k("shape",e,t,a),k("dtype",e,t,a),k("seed",e,t,a))];case"RandomUniform":return[n.randomUniform(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("dtype",e,t,a))];case"RandomUniformInt":return[n.randomUniformInt(k("shape",e,t,a),k("minval",e,t,a),k("maxval",e,t,a),k("seed",e,t,a))];case"Range":{let r=k("start",e,t,a),s=k("stop",e,t,a),i=k("step",e,t,a);return[n.range(r,s,i,k("dtype",e,t,a))]}case"TruncatedNormal":{let r=k("shape",e,t,a),s=k("mean",e,t,a),i=k("stdDev",e,t,a),o=k("seed",e,t,a);return[n.truncatedNormal(r,s,i,k("dtype",e,t,a),o)]}case"Zeros":return[n.zeros(k("shape",e,t,a),k("dtype",e,t,a))];case"ZerosLike":return[n.zerosLike(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Z2(e,t,a){let n=k("boxes",e,t,a),r=k("scores",e,t,a),s=k("maxOutputSize",e,t,a),i=k("iouThreshold",e,t,a),o=k("scoreThreshold",e,t,a),l=k("softNmsSigma",e,t,a);return{boxes:n,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var gO=async(e,t,a,n,r=ea)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Z2(e,t,a),c=await r.image.nonMaxSuppressionWithScoreAsync(s,i,o,l,u,p);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Z2(e,t,a),p=k("padToMaxOutputSize",e,t,a),c=await r.image.nonMaxSuppressionPaddedAsync(s,i,o,l,u,p);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=Z2(e,t,a);return[await r.image.nonMaxSuppressionAsync(s,i,o,l,u)]}case"Where":{let s=r.cast(k("condition",e,t,a),"bool"),i=[await r.whereAsync(s)];return s.dispose(),i}case"ListDiff":return r.setdiff1dAsync(k("x",e,t,a),k("y",e,t,a));default:throw TypeError(`Node type ${e.op} is not implemented`)}},yO=(e,t,a,n=ea)=>{switch(e.op){case"LowerBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.lowerBound(r,s)]}case"TopKV2":{let r=k("x",e,t,a),s=k("k",e,t,a),i=k("sorted",e,t,a),o=n.topk(r,s,i);return[o.values,o.indices]}case"UpperBound":{let r=k("sortedSequence",e,t,a),s=k("values",e,t,a);return[n.upperBound(r,s)]}case"Unique":{let r=k("x",e,t,a),s=n.unique(r);return[s.values,s.indices]}case"UniqueV2":{let r=k("x",e,t,a),s=k("axis",e,t,a),i=n.unique(r,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},xO=(e,t,a,n=ea)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,a);return[ua(e.name,t,a)||r];case"Placeholder":return[ua(e.name,t,a)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,a);return[br(p)]}case"IdentityN":return k("x",e,t,a).map(p=>br(p));case"Snapshot":let s=k("x",e,t,a);return[br(s)];case"Shape":return[n.tensor1d(k("x",e,t,a).shape,"int32")];case"ShapeN":return k("x",e,t,a).map(p=>n.tensor1d(p.shape));case"Size":return[n.scalar(k("x",e,t,a).size,"int32")];case"Rank":return[n.scalar(k("x",e,t,a).rank,"int32")];case"NoOp":return[n.scalar(1)];case"Print":let i=k("x",e,t,a),o=k("data",e,t,a),l=k("message",e,t,a),u=k("summarize",e,t,a);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(l);for(let p=0;pe.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Ge(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let a=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=Na(t),r=a.length,s=n.length;v.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i{let n=[];for(let r=0;r{switch(e.op){case"HashTable":case"HashTableV2":{let r=n.getHashTableHandleByName(e.name);if(r!=null)return[r];{let s=k("keyDType",e,t,a),i=k("valueDType",e,t,a),o=new AO(s,i);return n.addHashTable(e.name,o),[o.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("values",e,t,a);return[await n.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=k("tableHandle",e,t,a,n),s=k("keys",e,t,a),i=k("defaultValue",e,t,a);return[await n.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=k("tableHandle",e,t,a,n);return[n.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},vO=(e,t,a,n=ea)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeBilinear(r,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,a),s=k("size",e,t,a),i=k("alignCorners",e,t,a),o=k("halfPixelCenters",e,t,a);return[n.image.resizeNearestNeighbor(r,[s[0],s[1]],i,o)]}case"CropAndResize":{let r=k("image",e,t,a),s=k("boxes",e,t,a),i=k("boxInd",e,t,a),o=k("cropSize",e,t,a),l=k("method",e,t,a),u=k("extrapolationValue",e,t,a);return[n.image.cropAndResize(r,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let r=k("images",e,t,a),s=k("transforms",e,t,a),i=k("outputShape",e,t,a),o=k("fillValue",e,t,a),l=k("interpolation",e,t,a),u=k("fillMode",e,t,a);return[n.image.transform(r,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},wO=(e,t,a,n=ea)=>{switch(e.op){case"Equal":return[n.equal(k("a",e,t,a),k("b",e,t,a))];case"NotEqual":return[n.notEqual(k("a",e,t,a),k("b",e,t,a))];case"Greater":return[n.greater(k("a",e,t,a),k("b",e,t,a))];case"GreaterEqual":return[n.greaterEqual(k("a",e,t,a),k("b",e,t,a))];case"Less":return[n.less(k("a",e,t,a),k("b",e,t,a))];case"LessEqual":return[n.lessEqual(k("a",e,t,a),k("b",e,t,a))];case"LogicalAnd":return[n.logicalAnd(k("a",e,t,a),k("b",e,t,a))];case"LogicalNot":return[n.logicalNot(k("a",e,t,a))];case"LogicalOr":return[n.logicalOr(k("a",e,t,a),k("b",e,t,a))];case"Select":case"SelectV2":return[n.where(k("condition",e,t,a),k("a",e,t,a),k("b",e,t,a))];case"BitwiseAnd":return[n.bitwiseAnd(k("a",e,t,a),k("b",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},kO=(e,t,a,n=ea)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[n.matMul(k("a",e,t,a),k("b",e,t,a),k("transposeA",e,t,a),k("transposeB",e,t,a))];case"Einsum":return[n.einsum(k("equation",e,t,a),...k("tensors",e,t,a))];case"Transpose":return[n.transpose(k("x",e,t,a),k("perm",e,t,a))];case"_FusedMatMul":let[r,s]=k("fusedOps",e,t,a),i=r==="biasadd",o=s==="prelu",l=k("numArgs",e,t,a),u=k("leakyreluAlpha",e,t,a);if(i){if(o&&l!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&l!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[p,c]=k("args",e,t,a);return[n.fused.matMul({a:k("a",e,t,a),b:k("b",e,t,a),transposeA:k("transposeA",e,t,a),transposeB:k("transposeB",e,t,a),bias:p,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];case"MatrixBandPart":return[n.linalg.bandPart(k("a",e,t,a),k("numLower",e,t,a),k("numUpper",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},IO=(e,t,a,n=ea)=>{switch(e.op){case"EuclideanNorm":return[n.euclideanNorm(k("x",e,t,a),k("axis",e,t,a),k("keepDims",e,t,a))];case"FusedBatchNorm":case"FusedBatchNormV2":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"FusedBatchNormV3":return[n.batchNorm(k("x",e,t,a),k("mean",e,t,a),k("variance",e,t,a),k("offset",e,t,a),k("scale",e,t,a),k("epsilon",e,t,a))];case"LRN":return[n.localResponseNormalization(k("x",e,t,a),k("radius",e,t,a),k("bias",e,t,a),k("alpha",e,t,a),k("beta",e,t,a))];case"Softmax":return[n.softmax(k("x",e,t,a))];case"LogSoftmax":return[n.logSoftmax(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},SO=(e,t,a,n=ea)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:r,outputDenseValues:s}=n.raggedGather(k("paramsNestedSplits",e,t,a),k("paramsDenseValues",e,t,a),k("indices",e,t,a),k("outputRaggedRank",e,t,a));return r.concat(s)}case"RaggedRange":{let{rtNestedSplits:r,rtDenseValues:s}=n.raggedRange(k("starts",e,t,a),k("limits",e,t,a),k("splits",e,t,a));return[r,s]}case"RaggedTensorToTensor":return[n.raggedTensorToTensor(k("shape",e,t,a),k("values",e,t,a),k("defaultValue",e,t,a),k("rowPartitionTensors",e,t,a),k("rowPartitionTypes",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},CO=(e,t,a,n=ea)=>{switch(e.op){case"Max":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.max(k("x",e,t,a),o,l)]}case"Mean":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.mean(k("x",e,t,a),o,l)]}case"Min":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.min(k("x",e,t,a),o,l)]}case"Sum":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.sum(k("x",e,t,a),o,l)]}case"All":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.all(k("x",e,t,a),o,l)]}case"Any":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.any(k("x",e,t,a),o,l)]}case"ArgMax":{let o=k("axis",e,t,a);return[n.argMax(k("x",e,t,a),o)]}case"ArgMin":{let o=k("axis",e,t,a);return[n.argMin(k("x",e,t,a),o)]}case"Prod":{let o=k("axis",e,t,a),l=k("keepDims",e,t,a);return[n.prod(k("x",e,t,a),o,l)]}case"Cumprod":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumprod(k("x",e,t,a),o,l,u)]}case"Cumsum":{let o=k("axis",e,t,a),l=k("exclusive",e,t,a),u=k("reverse",e,t,a);return[n.cumsum(k("x",e,t,a),o,l,u)]}case"Bincount":let r=k("x",e,t,a),s=k("weights",e,t,a),i=k("size",e,t,a);return[n.bincount(r,s,i)];case"DenseBincount":{let o=k("x",e,t,a),l=k("weights",e,t,a),u=k("size",e,t,a),p=k("binaryOutput",e,t,a);return[n.denseBincount(o,l,u,p)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},TO=(e,t,a,n=ea)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,a),s=k("axis",e,t,a),i=k("tensors",e,t,a);return i=i.slice(0,r),[n.concat(i,s)]}case"Gather":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gather(r,n.cast(s,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,a),s=k("batchDims",e,t,a),i=k("x",e,t,a),o=k("indices",e,t,a);return[n.gather(i,n.cast(o,"int32"),r,s)]}case"Reverse":{let r=k("dims",e,t,a),s=[];for(let o=0;o{let r=k("axis",e,t,a),s=k("tensors",e,t,a),i=s[0].shape,o=n.squeeze(s[0]).shape,l=s.map(u=>{let p=v.arraysEqual(u.shape,i);if(!p&&!v.arraysEqual(n.squeeze(u).shape,o))throw new Error("the input tensors shape does not match");return p?u:n.reshape(u,i)});return[n.stack(l,r)]});case"Unpack":{let r=k("axis",e,t,a),s=k("tensor",e,t,a);return n.unstack(s,r)}case"Tile":{let r=k("reps",e,t,a);return[n.tile(k("x",e,t,a),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,a),s=k("numOrSizeSplits",e,t,a),i=k("x",e,t,a);return n.split(i,s,r)}case"ScatterNd":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("shape",e,t,a);return[n.scatterND(r,s,i)]}case"GatherNd":{let r=k("x",e,t,a),s=k("indices",e,t,a);return[n.gatherND(r,s)]}case"SparseToDense":{let r=k("sparseIndices",e,t,a),s=k("outputShape",e,t,a),i=k("sparseValues",e,t,a),o=k("defaultValue",e,t,a);return[n.sparseToDense(r,i,s,i.dtype===o.dtype?o:n.cast(o,i.dtype))]}case"TensorScatterUpdate":{let r=k("indices",e,t,a),s=k("values",e,t,a),i=k("tensor",e,t,a);return[n.tensorScatterUpdate(i,r,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},NO=(e,t,a,n=ea)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=n.sparse.sparseFillEmptyRows(k("indices",e,t,a),k("values",e,t,a),k("denseShape",e,t,a),k("defaultValue",e,t,a));return[r,s,i,o]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=n.sparse.sparseReshape(k("inputIndices",e,t,a),k("inputShape",e,t,a),k("newShape",e,t,a));return[r,s]}case"SparseSegmentMean":return[n.sparse.sparseSegmentMean(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];case"SparseSegmentSum":return[n.sparse.sparseSegmentSum(k("data",e,t,a),k("indices",e,t,a),k("segmentIds",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},RO=(e,t,a,n=ea)=>{switch(e.op){case"FFT":return[n.fft(k("x",e,t,a))];case"IFFT":return[n.ifft(k("x",e,t,a))];case"RFFT":return[n.rfft(k("x",e,t,a))];case"IRFFT":return[n.irfft(k("x",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},EO=(e,t,a,n=ea)=>{switch(e.op){case"StaticRegexReplace":return[n.string.staticRegexReplace(k("input",e,t,a),k("pattern",e,t,a),k("rewrite",e,t,a),k("replaceGlobal",e,t,a))];case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=n.string.stringNGrams(k("data",e,t,a),k("dataSplits",e,t,a),k("separator",e,t,a),k("nGramWidths",e,t,a),k("leftPad",e,t,a),k("rightPad",e,t,a),k("padWidth",e,t,a),k("preserveShortSequences",e,t,a));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:i}=n.string.stringSplit(k("input",e,t,a),k("delimiter",e,t,a),k("skipEmpty",e,t,a));return[r,s,i]}case"StringToHashBucketFast":return[n.string.stringToHashBucketFast(k("input",e,t,a),k("numBuckets",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},MO=(e,t,a,n=ea)=>{switch(e.op){case"Cast":return[n.cast(k("x",e,t,a),k("dtype",e,t,a))];case"ExpandDims":{let r=k("axis",e,t,a);return[n.expandDims(k("x",e,t,a),r)]}case"Squeeze":{let r=k("axis",e,t,a);return[n.squeeze(k("x",e,t,a),r)]}case"Reshape":return[n.reshape(k("x",e,t,a),k("shape",e,t,a))];case"EnsureShape":return[n.ensureShape(k("x",e,t,a),k("shape",e,t,a))];case"MirrorPad":return[n.mirrorPad(k("x",e,t,a),k("padding",e,t,a),k("mode",e,t,a))];case"PadV2":case"Pad":return[n.pad(k("x",e,t,a),k("padding",e,t,a),k("constantValue",e,t,a))];case"SpaceToBatchND":{let r=k("blockShape",e,t,a),s=k("paddings",e,t,a);return[n.spaceToBatchND(k("x",e,t,a),r,s)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,a),s=k("crops",e,t,a);return[n.batchToSpaceND(k("x",e,t,a),r,s)]}case"DepthToSpace":{let r=k("blockSize",e,t,a),s=k("dataFormat",e,t,a).toUpperCase();return[n.depthToSpace(k("x",e,t,a),r,s)]}case"BroadcastTo":return[n.broadcastTo(k("x",e,t,a),k("shape",e,t,a))];case"BroadcastArgs":return[n.broadcastArgs(k("s0",e,t,a),k("s1",e,t,a))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function m5(e,t,a,n,r=De){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>iO(i,o,l));case"basic_math":return r(()=>oO(i,o,l));case"control":return hO(i,o,l);case"convolution":return r(()=>mO(i,o,l));case"creation":return r(()=>fO(i,o,l));case"dynamic":return gO(i,o,l);case"evaluation":return r(()=>yO(i,o,l));case"image":return r(()=>vO(i,o,l));case"graph":return r(()=>xO(i,o,l));case"logical":return r(()=>wO(i,o,l));case"matrices":return r(()=>kO(i,o,l));case"normalization":return r(()=>IO(i,o,l));case"ragged":return r(()=>SO(i,o,l));case"reduction":return r(()=>CO(i,o,l));case"slice_join":return r(()=>TO(i,o,l));case"sparse":return r(()=>NO(i,o,l));case"spectral":return r(()=>RO(i,o,l));case"string":return r(()=>EO(i,o,l));case"transformation":return r(()=>MO(i,o,l));case"hash_table":return bO(i,o,l,n);case"custom":let u=H7(i.op);if(u&&u.customExecutor)return u.customExecutor(new sO(i,o,l));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.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,a);return v.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var f5=class{constructor(e={},t={},a={},n={},r){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=a,this.functionMap=n,this.parseNodeNameCache=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;tt.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 g5(e,t,a,n){let r=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map(d=>Ya(d)[0]));n=n||[];let p=new Set(n.map(d=>Ya(d.name)[0])),c=[...t];for(;c.length>0;){let d=c.pop();if((Us(d)||LO(d)||WO(d))&&i==null&&(i=d,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(d.name),a[d.name]==null&&!u.has(d.name)&&!p.has(d.name)){if(d.inputs.length===0){s.push(d.name);continue}d.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),c.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function $O(e,t){let{usedNodes:a,inputs:n}=t,r=Object.keys(n).map(g=>Ya(g)[0]).map(g=>e.nodes[g]),s=e.initNodes||[],i=g=>a.has(typeof g=="string"?g:g.name);function o(g){return[...new Map(g.map(y=>[y.name,y])).values()]}let l=o([...r,...e.weights,...s]).filter(i),u=o([...l,...Object.values(e.nodes)]).filter(i),p=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let y of g.children)i(y)||(c[y.name]=Number.POSITIVE_INFINITY),c[y.name]=(c[y.name]||0)+1}let d=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),h=[...d];for(;d.length>0;){let g=d.pop(),y=p.get(g);for(let x of y.children.filter(i))--c[x.name]===0&&(h.push(x.name),d.push(x.name))}let m=h.map(g=>p.get(g)),f=PO(m,l);return _O(f,l),f}function PO(e,t){let a=new Map(e.map(s=>[s.name,s])),n=t.map(s=>s.name),r=new Set(n);for(;n.length>0;){let s=n.pop(),i=a.get(s);for(let o of i.children)!a.has(o.name)||r.has(o.name)||(r.add(o.name),n.push(o.name))}return e.filter(s=>r.has(s.name))}var Kc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function _O(e,t){let a=new Map(e.map((o,l)=>[o.name,l])),n=new Set(t.map(o=>o.name)),r=o=>n.has(typeof o=="string"?o:o.name),s=new Set(e.map(o=>o.name)),i=o=>s.has(typeof o=="string"?o:o.name);for(let o of e){for(let l of o.children.filter(i)){if(!a.has(l.name))throw new Kc(`Child ${l.name} of node ${o.name} is unreachable.`);if(a.get(o.name)>a.get(l.name))throw new Kc(`Node ${o.name} is scheduled to run after its child ${l.name}.`)}if(!r(o))for(let l of o.inputs){if(!a.has(l.name))throw new Kc(`Input ${l.name} of node ${o.name} is unreachable.`);if(a.get(l.name)>a.get(o.name))throw new Kc(`Node ${o.name} is scheduled to run before its input ${l.name}.`)}}}function FO(e){let t=new Map(e.map((o,l)=>[o.name,l])),a=Number.MAX_SAFE_INTEGER,n=e.map((o,l)=>Us(o)?a:l),r=o=>{let l=n[t.get(o.name)];return l==null?-1:l},s=e.map((o,l)=>o.children.map(r).reduce((u,p)=>Math.max(u,p),n[l])),i=new Map;for(let o=0;ot[n].map(r=>r.id));this._weightIds=[].concat(...a),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let a=t.signatureKey||t.name;return t.defaultOutput?`${a}:${t.defaultOutput}`:a})}get functions(){return Object.keys(this._functions).reduce((t,a)=>(t[a]=this._functions[a].signature,t),{})}constructor(t,a){this.graph=t,this.parent=a,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(n=>{this._functionExecutorMap[n]=new h6(t.functions[n],this)})}getCompilationKey(t,a){let n=t.map(s=>s.name).sort(),r=a.map(s=>s.name).sort();return n.join(this.SEPARATOR)+"--"+r.join(this.SEPARATOR)}compile(t,a){let n=g5(t,a,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:i}=n;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${i}]`);if(r.length>0){let u=a.map(c=>c.name),p=Object.keys(t);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${p}]. Missing the following inputs: [${r}]`)}let o=$O(this.graph,n),l=FO(o);return{orderedNodes:o,nodeLiveUntilMap:l}}cloneAndKeepTensor(t){if(t==null)return null;let a=t.clone();return zn(a),a}cloneTensorList(t){return t?t.map(a=>this.cloneAndKeepTensor(a)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([a,n])=>[a,this.cloneTensorList(n)]))}execute(t,a){this.disposeIntermediateTensors(),t=this.mapInputs(t);let n=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a);let r=n.map(d=>this.graph.nodes[Ya(d)[0]]),s=a.map(d=>Ya(d)[0]),i=new Set(s),o=s.map(d=>this.graph.nodes[d]);o.length===0&&(o=this._outputs);let l=this.getCompilationKey(r,o),u=this.compiledMap.get(l);u==null&&(u=this.compile(t,o),this.compiledMap.set(l,u));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let p={},c={};return De(()=>{let d=new f5(this.weightMap,p,c,this.functionExecutorMap,this.parseNodeNameCache),h=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(y=>{let[x,A]=Ya(y,d),b=[];b[A]=t[y],h[x]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x]=this.cloneTensorList(b))});let m=this.getFrozenTensorIds(h),{orderedNodes:f,nodeLiveUntilMap:g}=u;for(let y of f){if(h[y.name])continue;let x=m5(y,h,d,this._resourceManager);if(v.isPromise(x))throw new Error(`The execution of the op '${y.op}' returned a promise. Please use model.executeAsync() instead.`);h[y.name]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[y.name]=this.cloneTensorList(x)),this.checkTensorForDisposalWithNodeLiveUntilInfo(y,h,d,m,i,g.get(y.name))}return this.parent==null&&d.dispose(m),a.map(y=>ua(y,h,d))})}getFrozenTensorIds(t){let a=[].concat.apply([],Object.keys(t).map(n=>t[n]).map(n=>n.map(r=>r.id)));return new Set(a)}checkTensorForDisposal(t,a,n,r,s,i,o){if(!(Us(a)||i.has(t))){for(let l of n[t])l!=null&&(o[l.id]=(o[l.id]||0)+a.children.length);for(let l of a.inputs){if(Us(l))continue;let u=u5(l.name,n,r);if(u!=null)for(let p of u){if(!p||p.kept||s.has(p.id))continue;let c=o[p.id];c===1?(p.dispose(),delete o[p.id]):c!=null&&o[p.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(t,a,n,r,s,i){function o(l){return Us(l)||s.has(l.name)}if(!(Us(t)||i==null))for(let l of i){if(o(l))continue;let u=u5(l.name,a,n);for(let p of u)!p||p.kept||r.has(p.id)||p.dispose()}}async executeAsync(t,a){return this._executeAsync(t,a)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let a of t)a&&!a.isDisposed&&a.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,a,n=!1,r={},s={}){this.disposeIntermediateTensors(),n||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),a=this.mapOutputs(a),this.checkOutputs(a));try{this.keepIntermediateTensors=B().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let i=new f5(this.weightMap,r,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let o=await this.executeWithControlFlow(t,i,a,n),l=a.map(d=>ua(d,o,i)),u=l.map(d=>d.id),p=Object.keys(t).map(d=>t[d].id),c=new Set([...u,...p,...this.weightIds]);return Object.values(o).forEach(d=>{d.forEach(h=>{h&&!h.isDisposed&&!c.has(h.id)&&h.dispose()})}),this.parent==null&&i.dispose(c),l}async executeFunctionAsync(t,a,n){let r=t.reduce((s,i,o)=>(s[this.inputs[o].name]=i,s),{});return this._executeAsync(r,this.outputNodes,!0,a,n)}async executeWithControlFlow(t,a,n,r){let s=Object.keys(t),i=s.map(b=>this.graph.nodes[Ya(b)[0]]),o=n.map(b=>Ya(b)[0]),l=new Set(o),u=o.map(b=>this.graph.nodes[b]);u.length===0&&(u=this._outputs);let{usedNodes:p,missingInputs:c,dynamicNode:d,syncInputs:h}=g5(t,u,this.weightMap,this._initNodes),m=[...i,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:a.currentContext})),f=Object.assign({},this.weightMap);Object.keys(t).forEach(b=>{let[w,I]=Ya(b),T=[];T[I]=t[b],f[w]=T});let g={},y=this.getFrozenTensorIds(f),x={};for(;m.length>0;){let b=this.processStack(i,m,a,f,x,y,l,g,p);await Promise.all(b)}d==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 A=u.filter(b=>!Us(b)&&!ua(b.name,f,a)).map(b=>b.name);if(A.length>0){let b="";throw d!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${A}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${b}`)}return f}processStack(t,a,n,r,s,i,o,l,u){let p=[];for(;a.length>0;){let c=a.pop();n.currentContext=c.contexts;let d="";if(c.node.op==="Enter"&&k("isConstant",c.node,r,n)&&([d]=Ar(c.node.name,n)),r[c.node.name]==null){let h=m5(c.node,r,n,this._resourceManager);d||([d]=Ar(c.node.name,n));let m=n.currentContext;v.isPromise(h)?p.push(h.then(f=>(r[d]=f,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(f)),n.currentContext=m,this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u),f))):(r[d]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(h)),this.checkTensorForDisposal(d,c.node,r,n,i,o,l),this.processChildNodes(c.node,a,n,r,s,u))}else this.processChildNodes(c.node,a,n,r,s,u)}return p}processChildNodes(t,a,n,r,s,i){t.children.forEach(o=>{let[l]=Ar(o.name,n);s[l]||!i.has(o.name)||(o.op==="Merge"?o.inputNames.some(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})):o.inputNames.every(u=>!!ua(u,r,n))&&(s[l]=!0,a.push({contexts:n.currentContext,node:o})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(a=>a.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(a=>{let n=t[a],[r]=Ya(a),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let i=s.attrParams.shape.value,o=i.length===n.shape.length&&n.shape.every((l,u)=>i[u]===-1||i[u]===l);v.assert(o,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${i}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&v.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(t){var a,n;let r={};for(let s in t){let i=(n=(a=this._signature)===null||a===void 0?void 0:a.inputs)===null||n===void 0?void 0:n[s];i!=null?r[i.name]=t[s]:r[s]=t[s]}return r}checkInputs(t){let a=Object.keys(t).filter(n=>{let[r]=Ya(n);return this.graph.nodes[r]==null});if(a.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${a}] that are not part of graph`)}mapOutputs(t){return t.map(a=>{var n,r;let s=(r=(n=this._signature)===null||n===void 0?void 0:n.outputs)===null||r===void 0?void 0:r[a];return s!=null?s.name:a},{})}checkOutputs(t){t.forEach(a=>{let[n]=Ya(a);if(!this.graph.nodes[n])throw new Error(`The output '${a}' is not found in the graph`)})}},BO=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]}},VO="?tfjs-format=file",UO="model.json",Xp=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},a=Kn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=a,t==null&&(this.loadOptions={}),this.resourceManager=new BO}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return v.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await HA(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let a=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(n=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}if(this.signature=n,this.version=`${a.versions.producer}.${a.versions.minConsumer}`,this.executor=new y5(d5.Instance.transformGraph(a,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=d5.Instance.transformGraph(e.modelInitializer);this.initializer=new y5(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let a=this.io.getSaveHandlers(e);if(a.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(a.length>1)throw new Error(`Found more than one (${a.length}) save handlers for URL '${e}'`);e=a[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof yt?[e]:e,a={};return t.forEach((n,r)=>a[this.structuredOutputKeys[r]]=n),a}return e}predict(e,t){let a=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(a)}async predictAsync(e,t){let a=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(a)}normalizeInputs(e){var t;if(!(e instanceof yt)&&!Array.isArray(e)){let r=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(r!=null)for(let s in r){let i=r[s];i.resourceId!=null&&(e[s]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let a=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+a!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-a} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((r,s)=>{var i,o,l;let u=(l=(o=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||o===void 0?void 0:o[s])===null||l===void 0?void 0:l.resourceId;return u!=null?r[s]=this.resourceIdToCapturedInput[u]:r[s]=e[n++],r},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,a=Object.keys(t);for(let n=0;n1?a:a[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let a=await this.executor.executeAsync(e,t);return a.length>1?a:a[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,a)=>(t[a]=[e[a]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&J(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function d3(e,t={},a=Kn){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&&typeof e=="string"&&(e=HO(e));let n=new Xp(e,t,a);return await n.load(),n}function GO(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[n,r]=e;if(!n)throw new Error("modelJSON must be the first element of the array");if(!r||!(r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let s=Kn.getWeightSpecs(n.weightsManifest),i=Kn.getModelArtifactsForJSONSync(n,s,r);t=Kn.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Kn.fromMemorySync(e);else throw new Error("Unknown model format");let a=new Xp(t);return a.load(),a}function HO(e){return e.endsWith("/")||(e=e+"/"),`${e}${UO}${VO}`}var jO="4.17.0";function Ie(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var qO=Rn.whereImpl,p3=class m6 extends ru{nextDataId(){return m6.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ip(this,It())}write(t,a,n){this.firstUse&&(this.firstUse=!1,B().get("IS_NODE")&&C.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. -============================`));let r={id:this.nextDataId()};return this.data.set(r,{values:t,dtype:n,refCount:1}),r}makeTensorInfo(t,a,n){let r;if(a==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return{dataId:r,shape:t,dtype:a}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let a=this.data.get(t);a.refCount++}decRef(t){if(this.data.has(t)){let a=this.data.get(t);a.refCount--}}move(t,a,n,r,s){this.data.set(t,{values:a,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:a,complexTensorInfos:n}=this.data.get(t);if(a==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return I.mergeRealAndImagArrays(r,s)}return v.convertBackendValuesAndArrayBuffer(this.data.get(t).values,a)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return Te(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Te(t.shape,t.dtype,a)}makeOutput(t,a,n){return St().makeTensorFromTensorInfo(this.makeTensorInfo(a,n,t),this)}disposeData(t,a=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!a&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(t);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let a=v.now();return t(),{kernelMs:v.now()-a}}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(t){Ie([t],"where");let a=this.readSync(t.dataId);return Pz(t.shape,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};A3.nextDataId=0;var b3={};Ke(b3,{addImpl:()=>D6,bincountImpl:()=>w3,bincountReduceImpl:()=>P6,bitwiseAndImpl:()=>_6,castImpl:()=>$6,ceilImpl:()=>O6,concatImpl:()=>k3,equalImpl:()=>z6,expImpl:()=>W6,expm1Impl:()=>V6,floorDivImpl:()=>G6,floorImpl:()=>U6,gatherNdImpl:()=>H6,gatherV2Impl:()=>j6,greaterEqualImpl:()=>X6,greaterImpl:()=>q6,lessEqualImpl:()=>Y6,lessImpl:()=>K6,linSpaceImpl:()=>Z6,logImpl:()=>J6,maxImpl:()=>Q6,maximumImpl:()=>ev,minimumImpl:()=>tv,multiplyImpl:()=>I3,negImpl:()=>av,notEqualImpl:()=>nv,prodImpl:()=>rv,raggedGatherImpl:()=>sv,raggedRangeImpl:()=>iv,raggedTensorToTensorImpl:()=>ov,rangeImpl:()=>T3,rsqrtImpl:()=>lv,scatterImpl:()=>xi,sigmoidImpl:()=>DL,simpleAbsImpl:()=>F6,sliceImpl:()=>Sh,sparseFillEmptyRowsImpl:()=>dv,sparseReshapeImpl:()=>pv,sparseSegmentReductionImpl:()=>C3,sqrtImpl:()=>OL,squaredDifferenceImpl:()=>cv,staticRegexReplaceImpl:()=>hv,stridedSliceImpl:()=>mv,stringNGramsImpl:()=>N3,stringSplitImpl:()=>R3,stringToHashBucketFastImpl:()=>E3,subImpl:()=>fv,tileImpl:()=>gv,topKImpl:()=>xv,transposeImpl:()=>S3,uniqueImpl:()=>F3});function F6(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;Ie(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=F6(r),a.makeOutput(n,t.shape,t.dtype)},Oz={kernelName:cu,backendName:"cpu",kernelFunc:_z};function Pt(e){return(t,a,n,r,s)=>{let i=I.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),d=v.getTypedArrayFromDType(s,u),c=t.length,p=a.length,h=v.computeStrides(t),m=v.computeStrides(a),f=I.getBroadcastDims(t,i),g=I.getBroadcastDims(a,i);if(f.length+g.length===0)for(let y=0;yA[C]=0);let b=v.locToIndex(A,c,h),w=x.slice(-p);g.forEach(C=>w[C]=0);let S=v.locToIndex(w,p,m);d[y]=e(n[b],r[S])}return[d,i]}}function Qa(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}var zz={kernelName:xp,backendName:"cpu",kernelFunc:Qa};function Ih(e,t,a="float32"){if(a==="complex64"){let r=Ih(e,t,"float32"),s=Ih(e,t,"float32");return Qa({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function sr(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var Lz={kernelName:ho,backendName:"cpu",kernelFunc:sr};function Ti(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}var Wz={kernelName:Ep,backendName:"cpu",kernelFunc:Ti};function $6(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=Pt((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function ds(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return sr({inputs:{x:r},backend:a});let d=Ih(a,r.shape,r.dtype),c=ds({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),p=Qa({inputs:{real:c,imag:d},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),p}if(r.dtype==="complex64"){let d=Ti({inputs:{input:r},backend:a}),c=ds({inputs:{x:d},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(d),c}if(!v.hasEncodingLoss(r.dtype,s)){let d=sr({inputs:{x:r},backend:a});return{dataId:d.dataId,shape:d.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=$6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var Bz={kernelName:qi,backendName:"cpu",kernelFunc:ds};function Kt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Ie([i,o],e);let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=i.dtype==="string"?I.fromUint8ToStringArray(u):u,p=i.dtype==="string"?I.fromUint8ToStringArray(d):d,h=n||i.dtype,[m,f]=t(i.shape,o.shape,c,p,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=ds({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),d=l.data.get(u.dataId),c=d.complexTensorInfos.real,p=d.complexTensorInfos.imag,h=l.data.get(c.dataId).values,m=l.data.get(p.dataId).values,f=ds({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,x=g.complexTensorInfos.imag,A=l.data.get(y.dataId).values,b=l.data.get(x.dataId).values,[w,S,C]=a(i.shape,o.shape,h,m,A,b),N=l.makeTensorInfo(C,"float32",w),M=l.makeTensorInfo(C,"float32",S),F=Qa({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),F}else{let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=n||i.dtype,[p,h]=t(i.shape,o.shape,u,d,c);return l.makeTensorInfo(h,c,p)}}}function v3(e){return(t,a,n,r,s,i)=>{let o=I.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,d=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),p=v.getTypedArrayFromDType("float32",l),h=I.getBroadcastDims(t,o),m=I.getBroadcastDims(a,o),f=I.mergeRealAndImagArrays(n,r),g=I.mergeRealAndImagArrays(s,i),y=t.length,x=v.computeStrides(t),A=a.length,b=v.computeStrides(a);if(h.length+m.length===0)for(let w=0;wC[T]=0);let N=v.locToIndex(C,y,x),M=S.slice(-A);m.forEach(T=>M[T]=0);let F=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[F*2],g[F*2+1]);c[w]=E.real,p[w]=E.imag}return[c,p,o]}}var D6=Pt((e,t)=>e+t),Vz=v3((e,t,a,n)=>({real:e+a,imag:t+n})),su=Kt(Mr,D6,Vz),Uz={kernelName:Mr,backendName:"cpu",kernelFunc:su};function w3(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function P6(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=Te([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}var _6=Pt((e,t)=>e&t),Gz=Kt(ji,_6),Hz={kernelName:ji,backendName:"cpu",kernelFunc:Gz};function dr(e){return(t,a,n)=>{let r=v.getArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;Ie(i,e);let o=s,l=o.data.get(i.dataId).values,u;if(i.dtype==="string"){if(!Array.isArray(l))throw new Error("String tensor's value was not an instance of Array");u=I.fromUint8ToStringArray(l)}else u=l;let d=a||i.dtype,c=t(u,d,r);return o.makeTensorInfo(i.shape,d,c)}}var O6=dr(e=>Math.ceil(e)),jz=Os(cs,O6),qz={kernelName:cs,backendName:"cpu",kernelFunc:jz};function k3(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?I.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),L6=Kt(ms,z6,null,"bool"),Xz={kernelName:ms,backendName:"cpu",kernelFunc:L6},W6=dr(e=>Math.exp(e)),B6=Os(fs,W6,"float32"),Kz={kernelName:fs,backendName:"cpu",kernelFunc:B6},V6=dr(e=>Math.expm1(e)),Yz=Os(gs,V6),Zz={kernelName:gs,backendName:"cpu",kernelFunc:Yz},U6=dr(e=>Math.floor(e)),Jz=Os(ys,U6),Qz={kernelName:ys,backendName:"cpu",kernelFunc:Jz},G6=Pt((e,t)=>Math.floor(e/t)),eL=Kt(xs,G6,null,"int32"),tL={kernelName:xs,backendName:"cpu",kernelFunc:eL};function H6(e,t,a,n,r,s,i,o,l){let u=Te([n,s],a);for(let d=0;d=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),aL=Kt(As,q6,null,"bool"),nL={kernelName:As,backendName:"cpu",kernelFunc:aL},X6=Pt((e,t)=>e>=t?1:0),rL=Kt(bs,X6,null,"bool"),sL={kernelName:bs,backendName:"cpu",kernelFunc:rL},K6=Pt((e,t)=>ee<=t?1:0),lL=Kt(ws,Y6,null,"bool"),uL={kernelName:ws,backendName:"cpu",kernelFunc:lL};function Z6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),dL=Os(ks,J6),pL={kernelName:ks,backendName:"cpu",kernelFunc:dL};function Q6(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var ev=Pt((e,t)=>Math.max(e,t)),cL=Kt(Is,ev),hL={kernelName:Is,backendName:"cpu",kernelFunc:cL},tv=Pt((e,t)=>Math.min(e,t)),mL=Kt(Ss,tv),fL={kernelName:Ss,backendName:"cpu",kernelFunc:mL},I3=Pt((e,t)=>e*t),gL=v3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),l0=Kt(Ts,I3,gL),yL={kernelName:Ts,backendName:"cpu",kernelFunc:l0};function av(e,t,a){let n=v.createScalarValue(-1,a);return I3([],t,n,e,a)}function xL(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=av(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var AL={kernelName:Ru,backendName:"cpu",kernelFunc:xL},nv=Pt((e,t)=>e!==t?1:0),bL=Kt(Cs,nv,null,"bool"),vL={kernelName:Cs,backendName:"cpu",kernelFunc:bL};function S3(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let d=0;da.disposeIntermediateTensorInfo(x)),a.makeTensorInfo(y,g,m)}var IL={kernelName:Oo,backendName:"cpu",kernelFunc:kL};function SL(e,t,a){e.forEach((n,r)=>{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function TL(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function CL(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);TL(a,n);let l=1;for(let u=0;u=0){let f=o[m],g=f[f.length-1]-h[d];for(let y=d;yr[i]=s)}return t}function E5(e,t){let a=e.slice(0,t);for(;a.length1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,d=[];o||d.push(t[0]),l||d.push(r[0]),u||d.push(i[0]);for(let g=1;g0&&xy)b=0;else if(b=Math.ceil(Math.abs((x-y)/A)),b>M5)throw new Error(`Requires ((limit - start) / delta) <= ${M5}`);p[g+1]=p[g]+b}let h=p[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;gn&&(n=s)}return n}static getMaxWidthValueRowID(t){let a=t.length;if(a===0)return 0;let n=0,r=t[0],s=0;for(let i=1;i"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,a,n,r){let s=t.length,i=[];for(let o=0;o0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,a,n,r){let s=t.length,i=[];if(s===0)return[];let o=0,l=t[0];if(l>=a.length)throw new Error(`Got currentValueRowId=${l}, which is not less than ${a.length}`);let u=a[l];i.push(u);for(let d=1;d=0&&(++o,o=a.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${a.length}`);u=a[c]}i.push(u)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,a,n,r){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Cn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case Cn.ROW_SPLITS:if(s.length-1>a.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${a.length}`);return this.calculateOutputIndexRowSplit(s,a,n,r);default:throw new Error(`Unsupported partition type: ${Cn[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let a=this.rowPartitionTypes[0];switch(a){case Cn.FIRST_DIM_SIZE:return t[0];case Cn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Cn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Cn[a]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),a=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let i=n.length-2;i>=0;--i)n[i]=n[i+1]*a[i+1];let r=$5(a,!1),s=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(r));if(n[0]*a[0]>0){let i=this.calculateFirstParentOutputIndex(t,n[0],a[0]);for(let o=1;o<=this.raggedRank;++o)i=this.calculateOutputIndex(o-1,i,n[o],a[o]);this.setOutput(this.raggedRank,i,s,r)}return[r,s]}setOutput(t,a,n,r){if(n.length===0)return;let s=this.values,i=n,o=r.slice();o=o.slice(t+1);let l=v.sizeFromShape(o),u=a.length,d=this.defaultValue;if(d.length!==l&&d.length!==1){let m=this.defaultValueShape;Pe(()=>{let f=Q(d,m);d=Ai(f,o).dataSync()})}let c=0,p=0,h=0;for(let m=0;m<=u;++m){let f=m=u){let g=n.length;f=Math.floor(g/l)}if(f>h)if(this.defaultValue.length===1)i.subarray(h*l,f*l).fill(this.defaultValue[0]),h=f;else for(;f>h;){let g=i.slice(h*l);F5(g,d,l),++h}f<0?(c=m+1,p=h):(c=m,p=h,h=p+1)}}};function F5(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function ov(e,t,a,n,r,s,i,o,l,u){return new ML(e,t,a,n,r,s,i,o,l,u).compute()}function T3(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),FL=Os(Ns,lv),$L={kernelName:Ns,backendName:"cpu",kernelFunc:FL};function xi(e,t,a,n,r,s,i,o,l,u){let d=[n/r,r],c=e.values,p=t.values;if(n===0)return Te(a,t.dtype);let h=l instanceof Rt?l:Te(d,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m=n/r)throw new Error(`Invalid indices: ${f} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),uv=ct(Rs,e=>1/(1+Math.exp(-e))),PL={kernelName:Rs,backendName:"cpu",kernelFunc:uv};function Sh(e,t,a,n,r){let s=wt.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=wt.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?I.fromUint8ToStringArray(e):e,u=Te(n,r,l),d=Te(a,r);for(let c=0;cm+t[f]);d.set(u.get(...h),...p)}return r==="string"?I.fromStringArrayToUint8(d.values):d.values}function Ci(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;Ie(r,"slice");let[o,l]=wt.parseSliceParams(r,s,i);wt.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,d=Sh(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}var _L={kernelName:zu,backendName:"cpu",kernelFunc:Ci};function dv(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),d=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,d]}let p=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],p=p&&y>=h,h=y}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&p){let g=e,y=n;for(let x=0;x0){p[c-1]=1;for(let f=c-2;f>=0;--f)p[f]=p[f+1]*n[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(a,i*o);for(let f=0;f0?r[o-1]+1:0;if(d<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=d;let p=c.reduce((x,A)=>x*A,1),h=v.getArrayFromDType(a,p);if(o===0)return d>0&&h.fill(i),[h,c];if(d<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=d)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,d));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),zL=ct(Es,e=>Math.sqrt(e)),LL={kernelName:Es,backendName:"cpu",kernelFunc:zL},cv=Pt((e,t)=>{let a=e-t;return a*a}),WL=Kt(Ms,cv),BL={kernelName:Ms,backendName:"cpu",kernelFunc:WL},hv=dr((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),VL=Os(Gu,hv),UL={kernelName:Gu,backendName:"cpu",kernelFunc:VL};function mv(e,t,a,n){let r=Te(e,t.dtype);for(let s=0;s0?0:i-o),p=0;p+=l*this.leftPad.length;for(let y=0;yy.forEach(x=>m[f++]=x);for(let y=0;y0){g(e[c+d-1]);for(let y=0;y0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(d=>{u+=this.getNumNGrams(l,d)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],p=this.getNumNGrams(c,d);this.createNGrams(e,l,i,u,p,d),u+=p}),this.preserveShort&&u===s[o]){let d=t[o+1]-t[o];if(d===0)continue;let c=d+2*this.padWidth;this.createNGrams(e,l,i,u,1,c)}}return[i,s]}};function N3(e,t,a,n,r,s,i,o){return new GL(a,n,r,s,i,o).compute(e,t)}function HL(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),jL=v3((e,t,a,n)=>({real:e-a,imag:t-n})),M3=Kt(Fs,fv,jL),qL={kernelName:Fs,backendName:"cpu",kernelFunc:M3};function gv(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function yv(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),d=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*d*(o-d)/o)*Math.sign(l-o/2),p=Math.max(a,Math.floor(t-l*d/o+c)),h=Math.min(n,Math.floor(t+(o-l)*d/o+c));yv(e,t,p,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Fd(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Fd(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function xv(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cm[A]={value:x,index:A}),n{for(let g=0;gnew A3,1);var Av=ct(oo,e=>e>=0?e:Math.exp(e)-1),KL={kernelName:oo,backendName:"cpu",kernelFunc:Av};function bv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;Ie([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=a.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;ue<0?t*e:e);function vv(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;Ie([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=ZL(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var JL={kernelName:_o,backendName:"cpu",kernelFunc:vv},wv=ct(Lo,e=>Math.max(0,e)),QL={kernelName:Lo,backendName:"cpu",kernelFunc:wv},kv=ct(Vo,e=>Math.min(Math.max(0,e),6)),eW={kernelName:Vo,backendName:"cpu",kernelFunc:kv};function Th(e,t,a,n,r){if(a==="linear")return sr({inputs:{x:t},backend:e});if(a==="relu")return wv({inputs:{x:t},backend:e});if(a==="elu")return Av({inputs:{x:t},backend:e});if(a==="relu6")return kv({inputs:{x:t},backend:e});if(a==="prelu")return vv({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return bv({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return uv({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function bt(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=v.sizeFromShape(r.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),a.incRef(r.dataId);let u=a.data.get(r.dataId);if(u.complexTensorInfos!=null){let d=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;d.shape=o,c.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var tW={kernelName:Du,backendName:"cpu",kernelFunc:bt};function Iv(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;Ie([r,s],"matMul");let l=r.shape.length,u=s.shape.length,d=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],p=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=ul.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([p,h]);v.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let A=i?[g,d,p]:[g,p,d],b=o?[y,h,c]:[y,c,h],w=bt({inputs:{x:r},backend:a,attrs:{shape:A}}),S=bt({inputs:{x:s},backend:a,attrs:{shape:b}}),C=i?w.shape[1]:w.shape[2],N=i?w.shape[2]:w.shape[1],M=o?S.shape[1]:S.shape[2],F=Math.max(g,y),E=a.data.get(w.dataId).values,T=a.data.get(S.dataId).values,D=v.computeStrides(w.shape),O=v.computeStrides(S.shape),[W,$,U]=i?[D[0],1,D[1]]:[D[0],D[1],1],[G,q,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],V=N*M,Z=Te([F,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;eeMath.acos(e)),iW={kernelName:$i,backendName:"cpu",kernelFunc:sW},oW=ct(Di,e=>Math.acosh(e)),lW={kernelName:Di,backendName:"cpu",kernelFunc:oW};function uW(e){let{inputs:t,backend:a}=e,n=t;Ie(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=Te(n[0].shape,n[0].dtype),i=s.values;for(let o=0;ox&&(x=w,A=b)}h[g]=A}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(d,"int32",h)}var gW={kernelName:hu,backendName:"cpu",kernelFunc:fW};function yW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;Ie(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=I.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Va({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=I.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],I.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[d,c]=I.computeOutAndReduceShapes(l.shape,i),p=v.sizeFromShape(d),h=v.makeZerosTypedArray(p,"int32"),m=v.sizeFromShape(c),f=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(d,"int32",h)}var xW={kernelName:mu,backendName:"cpu",kernelFunc:yW},AW=ct(zi,e=>Math.asin(e)),bW={kernelName:zi,backendName:"cpu",kernelFunc:AW},vW=ct(Li,e=>Math.asinh(e)),wW={kernelName:Li,backendName:"cpu",kernelFunc:vW},kW=ct(Wi,e=>Math.atan(e)),IW={kernelName:Wi,backendName:"cpu",kernelFunc:kW},SW=Pt((e,t)=>Math.atan2(e,t)),TW=Kt(Vi,SW),CW={kernelName:Vi,backendName:"cpu",kernelFunc:TW},NW=ct(Bi,e=>Math.atanh(e)),RW={kernelName:Bi,backendName:"cpu",kernelFunc:NW};function $3(e,t,a,n,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,d=r.effectiveFilterHeight,c=r.effectiveFilterWidth,p=r.padInfo.top,h=r.padInfo.left,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=Te(r.outShape,a),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],x=r.outShape[2]*r.outShape[3],A=r.outShape[3];for(let b=0;bU?U=ee:s==="avg"&&(G+=ee,q++)}if(isNaN(U))break}let H=T+D*A+C;g[H]=s==="avg"?G/q:U}}}return f}function Sv(e,t,a,n,r=!1,s=!1){let i=Te(n.outShape,"int32"),o=n.strideHeight,l=n.strideWidth,u=n.dilationHeight,d=n.dilationWidth,c=n.effectiveFilterHeight,p=n.effectiveFilterWidth,h=n.padInfo.top,m=n.padInfo.left,f=Te(t,a,e);for(let g=0;gF&&(F=$,r?E=s?((g*n.inHeight+T)*n.inWidth+O)*n.inChannels+y:(T*n.inWidth+O)*n.inChannels+y:E=D*p+W)}}i.set(E,g,x,S,y)}}return i}function Tv(e,t,a,n,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,d=r.dilationHeight,c=r.dilationWidth,p=r.effectiveFilterDepth,h=r.effectiveFilterHeight,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,x=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,A=Te(r.outShape,a),b=A.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],S=r.outShape[2]*r.outShape[3]*r.outShape[4],C=r.outShape[3]*r.outShape[4],N=r.outShape[4];for(let M=0;Mbe?be=xt:s==="avg"&&(Ce+=xt,Ee++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Le=ie+T;b[Le]=s==="avg"?Ce/Math.max(Ee,1):be}}}}return A}function EW(e,t){let a=Te(t.outShape,"int32"),n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,d=t.effectiveFilterHeight,c=t.effectiveFilterWidth,p=t.padInfo.front,h=t.padInfo.top,m=t.padInfo.left;for(let f=0;f=D&&(D=V,O=$*d*c+G*d+H)}}}a.set(O,f,y,w,M,g)}}}return a}function MW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ie(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(I.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=I.computePool2DInfo(r.shape,s,i,u,o,l),c;if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))c=sr({inputs:{x:r},backend:a});else{let p=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=$3(p,r.shape,r.dtype,h,d,"avg");c=a.makeTensorInfo(d.outShape,r.dtype,m.values)}return c}var FW={kernelName:Ui,backendName:"cpu",kernelFunc:MW};function $W(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"avgPool3d");let d=I.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,p=Tv(c,r.shape,r.dtype,v.computeStrides(r.shape),d,"avg");return a.makeTensorInfo(p.shape,"float32",p.values)}var DW={kernelName:fu,backendName:"cpu",kernelFunc:$W};function PW(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"avgPool3DGrad");let d=I.computePool3DInfo(s.shape,i,o,1,l,u),c=d.strideDepth,p=d.strideHeight,h=d.strideWidth,m=d.filterDepth,f=d.filterHeight,g=d.filterWidth,y=d.dilationDepth,x=d.dilationHeight,A=d.dilationWidth,b=d.effectiveFilterDepth,w=d.effectiveFilterHeight,S=d.effectiveFilterWidth,C=b-1-d.padInfo.front,N=S-1-d.padInfo.left,M=w-1-d.padInfo.top,F=Te(s.shape,"float32"),E=1/(m*f*g),T=a.bufferSync(r);for(let D=0;D=d.outDepth||Math.floor(X)!==X))for(let re=0;re=d.outHeight||Math.floor(ee)!==ee))for(let ge=0;ge=d.outWidth||Math.floor(ie)!==ie)continue;let be=T.get(D,X,ee,ie,O);V+=be}}}F.set(V*E,D,W,$,U,O)}return a.makeTensorInfo(F.shape,F.dtype,F.values)}var _W={kernelName:yp,backendName:"cpu",kernelFunc:PW};function OW(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ie([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,d=I.computePool2DInfo(i.shape,o,l,1,u),c=d.strideHeight,p=d.strideWidth,h=d.filterHeight,m=d.filterWidth,f=d.dilationHeight,g=d.dilationWidth,y=d.effectiveFilterHeight,x=d.effectiveFilterWidth,A=x-1-d.padInfo.left,b=y-1-d.padInfo.top,w=Te(i.shape,"float32"),S=1/(h*m),C=a.data.get(r.dataId).values,N=Te(r.shape,"float32",C);for(let M=0;M=d.outHeight||Math.floor(U)!==U))for(let G=0;G=d.outWidth||Math.floor(q)!==q)continue;let H=N.get(M,U,q,F);W+=H}}w.set(W*S,M,E,T,F)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var zW={kernelName:gp,backendName:"cpu",kernelFunc:OW};function LW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Ie([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=n;u==null&&(u=.001);let d=a.data.get(r.dataId).values,c=a.data.get(o.dataId).values,p=a.data.get(l.dataId).values,h=s?a.data.get(s.dataId).values:new Float32Array([1]),m=i?a.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(d.length),g=m.length,y=h.length,x=p.length,A=c.length,b=0,w=0,S=0,C=0;for(let N=0;N=g&&(b=0),w>=A&&(w=0),S>=y&&(S=0),C>=x&&(C=0);return a.makeTensorInfo(r.shape,r.dtype,f)}var WW={kernelName:po,backendName:"cpu",kernelFunc:LW};function BW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;Ie([r],"batchToSpaceND");let o=s.reduce((y,x)=>y*x),l=I.getReshaped(r.shape,s,o),u=I.getPermuted(l.length,s.length),d=I.getReshapedPermuted(r.shape,s,o),c=I.getSliceBeginCoords(i,s.length),p=I.getSliceSize(d,i,s.length),h=bt({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Va({inputs:{x:h},backend:a,attrs:{perm:u}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:d}}),g=Ci({inputs:{x:f},backend:a,attrs:{begin:c,size:p}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var VW={kernelName:gu,backendName:"cpu",kernelFunc:BW};function UW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,u=w3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var GW={kernelName:Hi,backendName:"cpu",kernelFunc:UW};function HW(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=I.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var jW={kernelName:yu,backendName:"cpu",kernelFunc:HW},qW=ct(hs,(e,t)=>{let a=t;return e>a.clipValueMax?a.clipValueMax:e{let{x:t}=e.inputs,a=e.backend,n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values;for(let u=0;uf.shape);I.assertParamsConsistent(i,s);let o=I.computeOutShape(t.map(f=>f.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(f=>v.sizeFromShape(f.shape)>0);if(l.length===1)return sr({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>Ti({inputs:{input:b},backend:a})),g=l.map(b=>iu({inputs:{input:b},backend:a})),y=ou({inputs:f,backend:a,attrs:{axis:s}}),x=ou({inputs:g,backend:a,attrs:{axis:s}}),A=Qa({inputs:{real:y,imag:x},backend:a});return f.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(x),A}let u=l.map(f=>{let g=[-1,v.sizeFromShape(f.shape.slice(s))];return bt({inputs:{x:f},backend:a,attrs:{shape:g}})}),d=u.map(f=>({vals:a.data.get(f.dataId).values,shape:f.shape}));o=I.computeOutShape(u.map(f=>f.shape),1);let c=u[0].shape[0]===1,p=k3(d,o,t[0].dtype,c),h=I.computeOutShape(l.map(f=>f.shape),s),m=a.makeTensorInfo(h,t[0].dtype,p);return u.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var JW={kernelName:xu,backendName:"cpu",kernelFunc:ou};function Cv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n;Ie([r,s],"conv2d");let c=I.convertConv2DDataFormat(l),p=I.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c),h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.padInfo.left,x=p.padInfo.top,A=p.dataFormat==="channelsLast",b=new Rt(p.outShape,r.dtype),w=v.computeStrides(r.shape),S=v.computeStrides(s.shape),C=w[0],N=A?w[1]:w[2],M=A?w[2]:1,F=A?1:w[1],E=b.strides[0],T=A?b.strides[1]:b.strides[2],D=A?b.strides[2]:1,O=A?1:b.strides[1],W=a.data.get(r.dataId).values,$=a.data.get(s.dataId).values,U=b.values;for(let G=0;G=p.inHeight)continue;let ge=re*S[0],ie=q+ee*N;for(let be=0;be=p.inWidth)continue;let gt=ge+Le*S[1],dt=ie+qe*M,st=gt;for(let it=0;it=u.inDepth)continue;let G=$*M[0],q=E+U*N[1];for(let H=0;H=u.inHeight)continue;let ee=G+X*M[1],ge=q+re*N[2];for(let ie=0;ie=u.inWidth)continue;let qe=ee+Ee*M[2],gt=ge+Le*u.inChannels,dt=qe;for(let st=0;stMath.cos(e)),pB={kernelName:Ji,backendName:"cpu",kernelFunc:dB},cB=ct(Qi,e=>Math.cosh(e)),hB={kernelName:Qi,backendName:"cpu",kernelFunc:cB};function mB(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,[d,c,p,h]=r.shape,m=s.shape[0],[f,g]=o,y=Te([m,f,g,h],"float32"),x=a.data.get(s.dataId).values,A=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),S=v.computeStrides(y.shape);for(let C=0;C=d)continue;let O=f>1?(E-M)*(c-1)/(f-1):0,W=g>1?(T-F)*(p-1)/(g-1):0;for(let $=0;$1?M*(c-1)+$*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?F*(p-1)+V*W:.5*(F+T)*(p-1);if(Z<0||Z>p-1){for(let ge=0;ge1?F*(p-1)+G*W:.5*(F+T)*(p-1);if(q<0||q>p-1){for(let Z=0;Zy+m-x-1:(y,x)=>y+x;for(let y=0;yy+m-x-1:(y,x)=>y+x;for(let y=0;y`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],d=r.shape[3],c=l*s,p=u*s,h=d/(s*s),m=a.data.get(r.dataId).values,f=new Float32Array(o*c*p*h),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let h=I.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:x}=h,A=x.left,b=x.top,w=h.outChannels/h.inChannels,S=new Rt(h.outShape,r.dtype),C=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,M=S.values;for(let F=0;F=h.inHeight)continue;let G=$*c[0],q=E+U*d[1];for(let H=0;H=h.inWidth)continue;let ee=G+X*c[1],ge=q+re*h.inChannels,ie=V,be=ee;for(let Ce=0;Ce{let{x:n,filter:r}=e,{strides:s,pad:i,dilations:o}=a,l=t,u=l.data.get(n.dataId).values,d=n.shape.length,c=l.data.get(r.dataId).values,p=r.shape.length,{batchSize:h,inHeight:m,inWidth:f,inChannels:g,outHeight:y,outWidth:x,padInfo:A,strideHeight:b,strideWidth:w,filterHeight:S,filterWidth:C,dilationHeight:N,dilationWidth:M,outShape:F}=I.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape(F),T=F.length,D=v.getArrayFromDType(n.dtype,E);for(let O=0;O=0&&X=0&&eeH&&(H=be)}}}let V=v.locToIndex([O,W,U,q],T,v.computeStrides(F));D[V]=H}}}return{dataId:l.write(v.toTypedArray(D,n.dtype),F,n.dtype),shape:F,dtype:n.dtype}}},FB={kernelName:Ql,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,d=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:p,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:N,outShape:M}=I.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${Ql}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let F=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let T=0;T=0&&Z=0&&reG&&(G=ee,q=V,H=X)}}}E[q][H][U]+=F[T][D][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},$B={kernelName:Jl,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,d=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:p,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:S,dilationHeight:C,dilationWidth:N,outShape:M}=I.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${Jl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let F=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let T=0;T=0&&Z=0&&reG&&(G=ee,q=Z,H=re)}}}E[T][q][H][U]+=F[T][D][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function DB(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,{contextOptions:o,imageOptions:l}=i||{},u=(l==null?void 0:l.alpha)||1,d=(o==null?void 0:o.contextType)||"2d";if(d!=="2d")throw new Error(`Context type ${o.contextType} is not supported by the CPU backend.`);let c=s.getContext(d,(o==null?void 0:o.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${d} type.`);let[p,h]=r.shape.slice(0,2),m=r.shape.length===2?1:r.shape[2],f=a.data.get(r.dataId).values,g=r.dtype==="float32"?255:1,y=new Uint8ClampedArray(h*p*4);for(let A=0;A1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${C}.`)}else if(r.dtype==="int32"&&(C<0||C>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${C}.`);m===1?(b[0]=C*g,b[1]=C*g,b[2]=C*g):b[S]=C*g}let w=A*4;y[w+0]=Math.round(b[0]),y[w+1]=Math.round(b[1]),y[w+2]=Math.round(b[2]),y[w+3]=Math.round(b[3])}s.width=h,s.height=p;let x=new ImageData(y,h,p);return c.putImageData(x,0,0),r}var PB={kernelName:kp,backendName:"cpu",kernelFunc:DB};function tc(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"sum");let o;r.dtype==="bool"?o=ds({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=sr({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),d=I.getAxesPermutation(u,l),c=u,p=o;d!=null&&(p=Va({inputs:{x:o},backend:a,attrs:{perm:d}}),c=I.getInnerMostAxes(c.length,l)),I.assertAxesAreInnerMostDims("sum",c,p.shape.length);let[h,m]=I.computeOutAndReduceShapes(p.shape,c),f=I.upcastType(p.dtype,"int32"),g=Ih(a,h,f),y=v.sizeFromShape(m),x=a.data.get(g.dataId).values,A=a.data.get(p.dataId).values;for(let b=0;b=0&&(p=tc({inputs:{x:p},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(p)),h--)}for(let f of m)f!==p&&a.disposeIntermediateTensorInfo(f);return p}var zB={kernelName:Ip,backendName:"cpu",kernelFunc:OB};function LB(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;Ie([n,r],"eluGrad");let s=new Float32Array(v.sizeFromShape(r.shape)),i=a.data.get(r.dataId).values,o=a.data.get(n.dataId).values;for(let l=0;l=0?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var WB={kernelName:wu,backendName:"cpu",kernelFunc:LB},BB=I.ERF_P,VB=I.ERF_A1,UB=I.ERF_A2,GB=I.ERF_A3,HB=I.ERF_A4,jB=I.ERF_A5,qB=ct(lo,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+BB*a);return t*(1-((((jB*n+HB)*n+GB)*n+UB)*n+VB)*n*Math.exp(-a*a))}),XB={kernelName:lo,backendName:"cpu",kernelFunc:qB};function Ch(e){let{inputs:t,backend:a,attrs:n}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),bt({inputs:{x:r},backend:a,attrs:{shape:o}})}var KB={kernelName:ku,backendName:"cpu",kernelFunc:Ch},YB=Pt((e,t)=>e/t),D3=Kt(io,YB),L1={kernelName:io,backendName:"cpu",kernelFunc:D3};function Rv(e,t,a){let n=e.shape,r=n[0],s=n[1],i=a.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],d=v.sizeFromShape(u),c=v.getTypedArrayFromDType("float32",d),p=v.getTypedArrayFromDType("float32",d);for(let g=0;g{let{image:n}=e,r=a,s=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[i,o,l,u]=n.shape,d=r.data.get(n.dataId).values;for(let c=0;c=0&&x=0,()=>`GatherV2: the index value ${w} is not in [0, ${d-1}]`)}let c=o;o==null&&(c=0);let p=v.sizeFromShape(s.shape),h=I.segment_util.collectGatherOpShapeInfo(r,s,l,c),m=bt({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=bt({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,p/h.batchSize]}}),g=[h.batchSize,h.outerSize,p/h.batchSize,h.sliceSize],y=a.bufferSync(f),x=a.bufferSync(m),A=j6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var cV={kernelName:Su,backendName:"cpu",kernelFunc:pV};function hV(e){let{inputs:t,backend:a}=e,{input:n}=t,r=v.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=r/s,o=bt({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=Rv(o,!0,a),u=bt({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var mV={kernelName:Tp,backendName:"cpu",kernelFunc:hV},fV=ct(mo,e=>Number.isFinite(e)?1:0,"bool"),gV={kernelName:mo,backendName:"cpu",kernelFunc:fV},yV=ct(fo,e=>Math.abs(e)===1/0?1:0,"bool"),xV={kernelName:fo,backendName:"cpu",kernelFunc:yV},AV=ct(go,e=>Number.isNaN(e)?1:0,"bool"),bV={kernelName:go,backendName:"cpu",kernelFunc:AV};function vV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=Z6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var wV={kernelName:xo,backendName:"cpu",kernelFunc:vV},kV=ct(Ao,e=>Math.log1p(e)),IV={kernelName:Ao,backendName:"cpu",kernelFunc:kV},SV=Pt((e,t)=>e&&t),TV=Kt(bo,SV,null,"bool"),CV={kernelName:bo,backendName:"cpu",kernelFunc:TV},NV=ct(vo,e=>e?0:1,"bool"),RV={kernelName:vo,backendName:"cpu",kernelFunc:NV},EV=Pt((e,t)=>e||t),MV=Kt(wo,EV,null,"bool"),FV={kernelName:wo,backendName:"cpu",kernelFunc:MV};function $V(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;Ie(r,"LRN");let u=r.shape[3],d=u-1,c=a.data.get(r.dataId).values,p=v.sizeFromShape(r.shape),h=new Float32Array(p);function m(f){let g=f%u,y=f-g+Math.max(0,g-s),x=f-g+Math.min(g+s,d),A=0;for(;y<=x;y++){let b=c[y];A+=b*b}return A}for(let f=0;f`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=I.computePool2DInfo(r.shape,s,i,u,o,l),c;if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))c=sr({inputs:{x:r},backend:a});else{let p=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=$3(p,r.shape,r.dtype,h,d,"max");c=a.makeTensorInfo(d.outShape,r.dtype,m.values)}return c}var LV={kernelName:So,backendName:"cpu",kernelFunc:zV};function WV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"maxPool3d");let d=I.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,p=Tv(c,r.shape,r.dtype,v.computeStrides(r.shape),d,"max");return a.makeTensorInfo(p.shape,"float32",p.values)}var BV={kernelName:Cu,backendName:"cpu",kernelFunc:WV};function VV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"maxPool3DGrad");let d=I.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),p=EW(c,d),h=d.strideDepth,m=d.strideHeight,f=d.strideWidth,g=d.dilationDepth,y=d.dilationHeight,x=d.dilationWidth,A=d.effectiveFilterDepth,b=d.effectiveFilterHeight,w=d.effectiveFilterWidth,S=A-1-d.padInfo.front,C=w-1-d.padInfo.left,N=b-1-d.padInfo.top,M=Te(s.shape,"float32"),F=a.bufferSync(r);for(let E=0;E=d.outDepth||Math.floor(V)!==V))for(let Z=0;Z=d.outHeight||Math.floor(X)!==X))for(let re=0;re=d.outWidth||Math.floor(ee)!==ee)continue;let ge=A*b*w-1-p.get(E,V,X,ee,T),ie=H*b*w+Z*w+re,be=ge===ie?1:0;if(be===0)continue;let Ce=F.get(E,V,X,ee,T);q+=Ce*be}}}M.set(q,E,D,O,W,T)}return a.makeTensorInfo(M.shape,M.dtype,M.values)}var UV={kernelName:Rp,backendName:"cpu",kernelFunc:VV};function GV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ie([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:c}=n,p=I.computePool2DInfo(o.shape,l,u,1,d,c),h=a.data.get(o.dataId).values,m=Te(p.outShape,o.dtype,Sv(h,o.shape,o.dtype,p).values),f=p.strideHeight,g=p.strideWidth,y=p.dilationHeight,x=p.dilationWidth,A=p.effectiveFilterHeight,b=p.effectiveFilterWidth,w=b-1-p.padInfo.left,S=A-1-p.padInfo.top,C=Te(o.shape,"float32"),N=a.data.get(r.dataId).values,M=Te(r.shape,"float32",N);for(let F=0;F=p.outHeight||Math.floor(G)!==G))for(let q=0;q=p.outWidth||Math.floor(H)!==H)continue;let V=A*b-1-m.get(F,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get(F,G,H,E);$+=re*X}}C.set($,F,T,D,E)}return a.makeTensorInfo(C.shape,C.dtype,C.values)}var HV={kernelName:Np,backendName:"cpu",kernelFunc:GV};function jV(e,t,a,n,r){let s=v.computeStrides(t),i=$3(e,t,a,s,r,"max"),o=Sv(e,t,a,r,!0,n);return[i.values,o.values]}var qV={kernelName:Nu,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;Ie(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,d=I.computePool2DInfo(n.shape,r,s,[1,1],i),[c,p]=jV(u,n.shape,n.dtype,o,d),h=l.write(c,d.outShape,n.dtype),m=l.write(p,d.outShape,n.dtype);return[{dataId:h,shape:d.outShape,dtype:n.dtype},{dataId:m,shape:d.outShape,dtype:"int32"}]}};function XV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=I.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),d=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));d.push(c);let p=ds({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});d.push(p);let h=D3({inputs:{a:p,b:c},backend:a});d.push(h);let m=tc({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return d.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var KV={kernelName:To,backendName:"cpu",kernelFunc:XV};function YV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=I.getAxesPermutation(l,r.shape.length),d=r;u!=null&&(d=Va({inputs:{x:r},backend:a,attrs:{perm:u}}),l=I.getInnerMostAxes(l.length,r.shape.length)),I.assertAxesAreInnerMostDims("min",l,d.shape.length);let[c,p]=I.computeOutAndReduceShapes(d.shape,l),h=v.sizeFromShape(p),m=v.makeZerosTypedArray(v.sizeFromShape(c),d.dtype),f=a.data.get(d.dataId).values;for(let y=0;yx[0]+r.shape[A]+x[1]),l=s.map(x=>x[0]),u=s.map((x,A)=>x[0]+r.shape[A]),d=i==="reflect"?0:1,c=a.data.get(r.dataId).values,p=r.shape.length,h=v.computeStrides(r.shape),m=v.sizeFromShape(o),f=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,m);for(let x=0;x=u[w]&&(A[w]=(u[w]-1)*2-A[w]+d);A=A.map((w,S)=>w-l[S]);let b=v.locToIndex(A,p,h);y[x]=c[b]}return{dataId:a.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var QV={kernelName:No,backendName:"cpu",kernelFunc:JV},eU=Pt((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),tU=Kt(Ro,eU),aU={kernelName:Ro,backendName:"cpu",kernelFunc:tU},nU=uu(EA());function Mv(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=r.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=v.parseAxisParam([o],r.shape),u=Ev({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),d=I.expandShapeToKeepDim(u.shape,l),c=bt({inputs:{x:u},backend:a,attrs:{shape:d}}),p=M3({inputs:{a:r,b:c},backend:a}),h=B6({inputs:{x:p},backend:a}),m=tc({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:d}}),g=D3({inputs:{a:h,b:f},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var rU={kernelName:el,backendName:"cpu",kernelFunc:Mv};function sU(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;Ie(r,"multinomial");let l=o?r:Mv({inputs:{logits:r},backend:a,attrs:{dim:-1}}),u=l.shape[0],d=l.shape[1],c=a.data.get(l.dataId).values,p=[u,s],h=v.makeZerosTypedArray(v.sizeFromShape(p),"int32");for(let m=0;m=0&&c[p]{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=Ch({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=ou({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeIntermediateTensorInfo(d)),u}var bU={kernelName:Fu,backendName:"cpu",kernelFunc:$v};function vU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;Ie(r,"pad");let o=s.map((y,x)=>y[0]+r.shape[x]+y[1]),l=s.map(y=>y[0]),u=a.data.get(r.dataId).values,d=v.sizeFromShape(r.shape),c=r.shape.length,p=v.computeStrides(r.shape),h=v.sizeFromShape(o),m=o.length,f=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;yb+l[w]),A=v.locToIndex(x,m,f);g[A]=u[y]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var Dv={kernelName:Do,backendName:"cpu",kernelFunc:vU},wU=Pt((e,t)=>Math.pow(e,t)),kU=Kt(Po,wU),IU={kernelName:Po,backendName:"cpu",kernelFunc:kU};function SU(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.data.get(y.dataId).values),u=r.map(y=>y.shape),d=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[p,h,m]=sv(l,u,d,s.shape,s.dtype,c,i.shape,o),f=p.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var TU={kernelName:Lh,backendName:"cpu",kernelFunc:SU};function CU(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=iv(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),p=a.makeTensorInfo([d.length],n.dtype,d);return[c,p]}var NU={kernelName:Wh,backendName:"cpu",kernelFunc:CU};function RU(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.data.get(r.dataId).values,d=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,p=o.map(g=>a.data.get(g.dataId).values),h=o.map(g=>g.shape),[m,f]=ov(u,r.shape,d,s.shape,s.dtype,c,i.shape,p,h,l);return a.makeTensorInfo(m,s.dtype,f)}var EU={kernelName:Bh,backendName:"cpu",kernelFunc:RU};function MU(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=T3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var FU={kernelName:$u,backendName:"cpu",kernelFunc:MU},$U=ct(zo,e=>1/e),DU={kernelName:zo,backendName:"cpu",kernelFunc:$U};function PU(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;Ie(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,d]=o,[c,p,h,m]=r.shape,f=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,d,m])),y=[s&&u>1?p-1:p,s&&d>1?h-1:h],x=[s&&u>1?u-1:u,s&&d>1?d-1:d],A=0,b=y[0]/x[0],w=y[1]/x[1];for(let S=0;S1?u-1:u,i&&h>1?d-1:d],g=[i&&p>1?p-1:p,i&&h>1?h-1:h],y=f[0]/g[0],x=f[1]/g[1],A=a.data.get(s.dataId).values,b=0;for(let w=0;w1?p-1:p,s&&d>1?h-1:h],x=[s&&u>1?u-1:u,s&&d>1?d-1:d],A=y[0]/x[0],b=y[1]/x[1],w=0;for(let S=0;S1?d-1:d,i&&m>1?c-1:c],x=[i&&h>1?h-1:h,i&&m>1?m-1:m],A=y[0]/x[0],b=y[1]/x[1],w=1/A,S=1/b,C=Math.ceil(w)*2+2,N=Math.ceil(S)*2+2;for(let M=0;M=h)continue;let X=F+Z*l[1],re=Z*A,ee=Math.min(d-1,i?Math.round(re):Math.floor(re));if(E===ee)for(let ge=0;ge=m)continue;let be=X+ie*l[2],Ce=ie*b,Ee=Math.min(c-1,i?Math.round(Ce):Math.floor(Ce));W===Ee&&(H+=g[be+q])}}f[$+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var VU={kernelName:Pu,backendName:"cpu",kernelFunc:BU};function UU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;Ie(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return sr({inputs:{x:r},backend:a});let l=new Rt(r.shape,r.dtype),u=a.bufferSync(r);for(let d=0;dp[h]=r.shape[h]-1-p[h]),l.set(u.get(...p),...c)}return a.makeTensorInfo(l.shape,l.dtype,l.values)}var GU={kernelName:Uo,backendName:"cpu",kernelFunc:UU},HU={kernelName:ol,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[u,d,c,p]=n.shape,[h,m]=I.getImageCenter(i,d,c),f=255,g=Math.sin(r),y=Math.cos(r),x=o.data.get(n.dataId).values;for(let A=0;A=0&&D=0&&O{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),qU={kernelName:Go,backendName:"cpu",kernelFunc:jU};function XU(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=I.calculateShapes(s,r,i),p=!0,h=a.bufferSync(r),m=a.bufferSync(s),f=xi(h,m,i,c,u,l,o,d,0,p);return a.makeTensorInfo(i,f.dtype,f.values)}var KU={kernelName:Ho,backendName:"cpu",kernelFunc:XU};function YU(e,t){let a=0,n=e.length,r=0;for(;a1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let m=0;me>=0?rG*e:nG*(Math.exp(e)-1)),iG={kernelName:Xo,backendName:"cpu",kernelFunc:sG},oG=ct(Zo,e=>e<0?-1:e>0?1:0),lG={kernelName:Zo,backendName:"cpu",kernelFunc:oG},uG=ct(Ko,e=>Math.sin(e)),dG={kernelName:Ko,backendName:"cpu",kernelFunc:uG},pG=ct(Yo,e=>Math.sinh(e)),cG={kernelName:Yo,backendName:"cpu",kernelFunc:pG},hG=11920928955078125e-23,D5=Math.log(hG)+2,mG=ct(Jo,e=>{let t=e>-D5,a=e0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return{dataId:r,shape:t,dtype:a}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let a=this.data.get(t);a.refCount++}decRef(t){if(this.data.has(t)){let a=this.data.get(t);a.refCount--}}move(t,a,n,r,s){this.data.set(t,{values:a,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:a,complexTensorInfos:n}=this.data.get(t);if(a==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return C.mergeRealAndImagArrays(r,s)}return v.convertBackendValuesAndArrayBuffer(this.data.get(t).values,a)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(a,n,t),this)}disposeData(t,a=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!a&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(t);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let a=v.now();return t(),{kernelMs:v.now()-a}}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(t){Ie([t],"where");let a=this.readSync(t.dataId);return qO(t.shape,a)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};p3.nextDataId=0;var t0={};Ze(t0,{addImpl:()=>y6,bincountImpl:()=>h3,bincountReduceImpl:()=>x6,bitwiseAndImpl:()=>A6,castImpl:()=>g6,ceilImpl:()=>b6,concatImpl:()=>m3,equalImpl:()=>v6,expImpl:()=>k6,expm1Impl:()=>S6,floorDivImpl:()=>T6,floorImpl:()=>C6,gatherNdImpl:()=>N6,gatherV2Impl:()=>R6,greaterEqualImpl:()=>M6,greaterImpl:()=>E6,lessEqualImpl:()=>P6,lessImpl:()=>$6,linSpaceImpl:()=>_6,logImpl:()=>F6,maxImpl:()=>D6,maximumImpl:()=>O6,minimumImpl:()=>z6,multiplyImpl:()=>f3,negImpl:()=>L6,notEqualImpl:()=>W6,prodImpl:()=>B6,raggedGatherImpl:()=>V6,raggedRangeImpl:()=>U6,raggedTensorToTensorImpl:()=>G6,rangeImpl:()=>y3,rsqrtImpl:()=>H6,scatterImpl:()=>qs,sigmoidImpl:()=>jz,simpleAbsImpl:()=>f6,sliceImpl:()=>Ah,sparseFillEmptyRowsImpl:()=>q6,sparseReshapeImpl:()=>X6,sparseSegmentReductionImpl:()=>x3,sqrtImpl:()=>Kz,squaredDifferenceImpl:()=>K6,staticRegexReplaceImpl:()=>Y6,stridedSliceImpl:()=>Z6,stringNGramsImpl:()=>A3,stringSplitImpl:()=>b3,stringToHashBucketFastImpl:()=>v3,subImpl:()=>J6,tileImpl:()=>Q6,topKImpl:()=>tv,transposeImpl:()=>g3,uniqueImpl:()=>k3});function f6(e){let t=new Float32Array(e.length);for(let a=0;a{let{x:t}=e.inputs,a=e.backend;Ie(t,"abs");let n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId).values;return n=f6(r),a.makeOutput(n,t.shape,t.dtype)},KO={kernelName:iu,backendName:"cpu",kernelFunc:XO};function _t(e){return(t,a,n,r,s)=>{let i=C.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),p=v.getTypedArrayFromDType(s,u),c=t.length,d=a.length,h=v.computeStrides(t),m=v.computeStrides(a),f=C.getBroadcastDims(t,i),g=C.getBroadcastDims(a,i);if(f.length+g.length===0)for(let y=0;yA[T]=0);let b=v.locToIndex(A,c,h),w=x.slice(-d);g.forEach(T=>w[T]=0);let I=v.locToIndex(w,d,m);p[y]=e(n[b],r[I])}return[p,i]}}function Ja(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}var YO={kernelName:pp,backendName:"cpu",kernelFunc:Ja};function xh(e,t,a="float32"){if(a==="complex64"){let r=xh(e,t,"float32"),s=xh(e,t,"float32");return Ja({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function ar(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var ZO={kernelName:qi,backendName:"cpu",kernelFunc:ar};function ei(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}var JO={kernelName:kp,backendName:"cpu",kernelFunc:ei};function g6(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=_t((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function ss(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return ar({inputs:{x:r},backend:a});let p=xh(a,r.shape,r.dtype),c=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),d=Ja({inputs:{real:c,imag:p},backend:a});return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),d}if(r.dtype==="complex64"){let p=ei({inputs:{input:r},backend:a}),c=ss({inputs:{x:p},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(p),c}if(!v.hasEncodingLoss(r.dtype,s)){let p=ar({inputs:{x:r},backend:a});return{dataId:p.dataId,shape:p.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=g6(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}var QO={kernelName:bi,backendName:"cpu",kernelFunc:ss};function Kt(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Ie([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=i.dtype==="string"?C.fromUint8ToStringArray(u):u,d=i.dtype==="string"?C.fromUint8ToStringArray(p):p,h=n||i.dtype,[m,f]=t(i.shape,o.shape,c,d,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=ss({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),p=l.data.get(u.dataId),c=p.complexTensorInfos.real,d=p.complexTensorInfos.imag,h=l.data.get(c.dataId).values,m=l.data.get(d.dataId).values,f=ss({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,x=g.complexTensorInfos.imag,A=l.data.get(y.dataId).values,b=l.data.get(x.dataId).values,[w,I,T]=a(i.shape,o.shape,h,m,A,b),N=l.makeTensorInfo(T,"float32",w),M=l.makeTensorInfo(T,"float32",I),$=Ja({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),$}else{let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,c=n||i.dtype,[d,h]=t(i.shape,o.shape,u,p,c);return l.makeTensorInfo(h,c,d)}}}function c3(e){return(t,a,n,r,s,i)=>{let o=C.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,p=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),d=v.getTypedArrayFromDType("float32",l),h=C.getBroadcastDims(t,o),m=C.getBroadcastDims(a,o),f=C.mergeRealAndImagArrays(n,r),g=C.mergeRealAndImagArrays(s,i),y=t.length,x=v.computeStrides(t),A=a.length,b=v.computeStrides(a);if(h.length+m.length===0)for(let w=0;wT[S]=0);let N=v.locToIndex(T,y,x),M=I.slice(-A);m.forEach(S=>M[S]=0);let $=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[$*2],g[$*2+1]);c[w]=E.real,d[w]=E.imag}return[c,d,o]}}var y6=_t((e,t)=>e+t),ez=c3((e,t,a,n)=>({real:e+a,imag:t+n})),Ql=Kt(os,y6,ez),tz={kernelName:os,backendName:"cpu",kernelFunc:Ql};function h3(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function x6(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=_e([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}var A6=_t((e,t)=>e&t),az=Kt(pu,A6),nz={kernelName:pu,backendName:"cpu",kernelFunc:az};function or(e){return(t,a,n)=>{let r=v.getArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;Ie(i,e);let o=s,l=o.data.get(i.dataId).values,u;if(i.dtype==="string"){if(!Array.isArray(l))throw new Error("String tensor's value was not an instance of Array");u=C.fromUint8ToStringArray(l)}else u=l;let p=a||i.dtype,c=t(u,p,r);return o.makeTensorInfo(i.shape,p,c)}}var b6=or(e=>Math.ceil(e)),rz=hs(vi,b6),sz={kernelName:vi,backendName:"cpu",kernelFunc:rz};function m3(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?C.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),w6=Kt(Oi,v6,null,"bool"),iz={kernelName:Oi,backendName:"cpu",kernelFunc:w6},k6=or(e=>Math.exp(e)),I6=hs(zi,k6,"float32"),oz={kernelName:zi,backendName:"cpu",kernelFunc:I6},S6=or(e=>Math.expm1(e)),lz=hs(Li,S6),uz={kernelName:Li,backendName:"cpu",kernelFunc:lz},C6=or(e=>Math.floor(e)),dz=hs(Bi,C6),pz={kernelName:Bi,backendName:"cpu",kernelFunc:dz},T6=_t((e,t)=>Math.floor(e/t)),cz=Kt(Vi,T6,null,"int32"),hz={kernelName:Vi,backendName:"cpu",kernelFunc:cz};function N6(e,t,a,n,r,s,i,o,l){let u=_e([n,s],a);for(let p=0;p=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),mz=Kt(Hi,E6,null,"bool"),fz={kernelName:Hi,backendName:"cpu",kernelFunc:mz},M6=_t((e,t)=>e>=t?1:0),gz=Kt(ji,M6,null,"bool"),yz={kernelName:ji,backendName:"cpu",kernelFunc:gz},$6=_t((e,t)=>ee<=t?1:0),bz=Kt(Qi,P6,null,"bool"),vz={kernelName:Qi,backendName:"cpu",kernelFunc:bz};function _6(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),wz=hs(to,F6),kz={kernelName:to,backendName:"cpu",kernelFunc:wz};function D6(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var O6=_t((e,t)=>Math.max(e,t)),Iz=Kt(lo,O6),Sz={kernelName:lo,backendName:"cpu",kernelFunc:Iz},z6=_t((e,t)=>Math.min(e,t)),Cz=Kt(ho,z6),Tz={kernelName:ho,backendName:"cpu",kernelFunc:Cz},f3=_t((e,t)=>e*t),Nz=c3((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),a0=Kt(yo,f3,Nz),Rz={kernelName:yo,backendName:"cpu",kernelFunc:a0};function L6(e,t,a){let n=v.createScalarValue(-1,a);return f3([],t,n,e,a)}function Ez(e){let{inputs:t,backend:a}=e,{x:n}=t;Ie(n,"neg");let r=a.data.get(n.dataId).values,[s,i]=L6(r,n.shape,n.dtype);return a.makeTensorInfo(i,n.dtype,s)}var Mz={kernelName:Iu,backendName:"cpu",kernelFunc:Ez},W6=_t((e,t)=>e!==t?1:0),$z=Kt(xo,W6,null,"bool"),Pz={kernelName:xo,backendName:"cpu",kernelFunc:$z};function g3(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let p=0;pa.disposeIntermediateTensorInfo(x)),a.makeTensorInfo(y,g,m)}var Dz={kernelName:So,backendName:"cpu",kernelFunc:Fz};function Oz(e,t,a){e.forEach((n,r)=>{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function zz(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function Lz(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);zz(a,n);let l=1;for(let u=0;u=0){let f=o[m],g=f[f.length-1]-h[p];for(let y=p;yr[i]=s)}return t}function x5(e,t){let a=e.slice(0,t);for(;a.length1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,p=[];o||p.push(t[0]),l||p.push(r[0]),u||p.push(i[0]);for(let g=1;g0&&xy)b=0;else if(b=Math.ceil(Math.abs((x-y)/A)),b>A5)throw new Error(`Requires ((limit - start) / delta) <= ${A5}`);d[g+1]=d[g]+b}let h=d[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;gn&&(n=s)}return n}static getMaxWidthValueRowID(t){let a=t.length;if(a===0)return 0;let n=0,r=t[0],s=0;for(let i=1;i"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,a,n,r){let s=t.length,i=[];for(let o=0;o0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,a,n,r){let s=t.length,i=[];if(s===0)return[];let o=0,l=t[0];if(l>=a.length)throw new Error(`Got currentValueRowId=${l}, which is not less than ${a.length}`);let u=a[l];i.push(u);for(let p=1;p=0&&(++o,o=a.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${a.length}`);u=a[c]}i.push(u)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,a,n,r){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Sn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case Sn.ROW_SPLITS:if(s.length-1>a.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${a.length}`);return this.calculateOutputIndexRowSplit(s,a,n,r);default:throw new Error(`Unsupported partition type: ${Sn[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let a=this.rowPartitionTypes[0];switch(a){case Sn.FIRST_DIM_SIZE:return t[0];case Sn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Sn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Sn[a]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),a=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let i=n.length-2;i>=0;--i)n[i]=n[i+1]*a[i+1];let r=v5(a,!1),s=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(r));if(n[0]*a[0]>0){let i=this.calculateFirstParentOutputIndex(t,n[0],a[0]);for(let o=1;o<=this.raggedRank;++o)i=this.calculateOutputIndex(o-1,i,n[o],a[o]);this.setOutput(this.raggedRank,i,s,r)}return[r,s]}setOutput(t,a,n,r){if(n.length===0)return;let s=this.values,i=n,o=r.slice();o=o.slice(t+1);let l=v.sizeFromShape(o),u=a.length,p=this.defaultValue;if(p.length!==l&&p.length!==1){let m=this.defaultValueShape;De(()=>{let f=Q(p,m);p=Ul(f,o).dataSync()})}let c=0,d=0,h=0;for(let m=0;m<=u;++m){let f=m=u){let g=n.length;f=Math.floor(g/l)}if(f>h)if(this.defaultValue.length===1)i.subarray(h*l,f*l).fill(this.defaultValue[0]),h=f;else for(;f>h;){let g=i.slice(h*l);b5(g,p,l),++h}f<0?(c=m+1,d=h):(c=m,d=h,h=d+1)}}};function b5(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function G6(e,t,a,n,r,s,i,o,l,u){return new Uz(e,t,a,n,r,s,i,o,l,u).compute()}function y3(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),Gz=hs(Po,H6),Hz={kernelName:Po,backendName:"cpu",kernelFunc:Gz};function qs(e,t,a,n,r,s,i,o,l,u){let p=[n/r,r],c=e.values,d=t.values;if(n===0)return _e(a,t.dtype);let h=l instanceof Vt?l:_e(p,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m=n/r)throw new Error(`Invalid indices: ${f} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),j6=ct(Bo,e=>1/(1+Math.exp(-e))),qz={kernelName:Bo,backendName:"cpu",kernelFunc:j6};function Ah(e,t,a,n,r){let s=Nt.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=Nt.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?C.fromUint8ToStringArray(e):e,u=_e(n,r,l),p=_e(a,r);for(let c=0;cm+t[f]);p.set(u.get(...h),...d)}return r==="string"?C.fromStringArrayToUint8(p.values):p.values}function ti(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n;Ie(r,"slice");let[o,l]=Nt.parseSliceParams(r,s,i);Nt.assertParamsValid(r,o,l);let u=a.data.get(r.dataId).values,p=Ah(u,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}var Xz={kernelName:Pu,backendName:"cpu",kernelFunc:ti};function q6(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),p=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,p]}let d=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],d=d&&y>=h,h=y}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&d){let g=e,y=n;for(let x=0;x0){d[c-1]=1;for(let f=c-2;f>=0;--f)d[f]=d[f+1]*n[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(a,i*o);for(let f=0;f0?r[o-1]+1:0;if(p<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=p;let d=c.reduce((x,A)=>x*A,1),h=v.getArrayFromDType(a,d);if(o===0)return p>0&&h.fill(i),[h,c];if(p<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),Yz=ct(Uo,e=>Math.sqrt(e)),Zz={kernelName:Uo,backendName:"cpu",kernelFunc:Yz},K6=_t((e,t)=>{let a=e-t;return a*a}),Jz=Kt(qo,K6),Qz={kernelName:qo,backendName:"cpu",kernelFunc:Jz},Y6=or((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),eL=hs(Cp,Y6),tL={kernelName:Cp,backendName:"cpu",kernelFunc:eL};function Z6(e,t,a,n){let r=_e(e,t.dtype);for(let s=0;s0?0:i-o),d=0;d+=l*this.leftPad.length;for(let y=0;yy.forEach(x=>m[f++]=x);for(let y=0;y0){g(e[c+p-1]);for(let y=0;y0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(p=>{u+=this.getNumNGrams(l,p)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],d=this.getNumNGrams(c,p);this.createNGrams(e,l,i,u,d,p),u+=d}),this.preserveShort&&u===s[o]){let p=t[o+1]-t[o];if(p===0)continue;let c=p+2*this.padWidth;this.createNGrams(e,l,i,u,1,c)}}return[i,s]}};function A3(e,t,a,n,r,s,i,o){return new aL(a,n,r,s,i,o).compute(e,t)}function nL(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),rL=c3((e,t,a,n)=>({real:e-a,imag:t-n})),w3=Kt(Ko,J6,rL),sL={kernelName:Ko,backendName:"cpu",kernelFunc:w3};function Q6(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function ev(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),p=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*p*(o-p)/o)*Math.sign(l-o/2),d=Math.max(a,Math.floor(t-l*p/o+c)),h=Math.min(n,Math.floor(t+(o-l)*p/o+c));ev(e,t,d,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Cd(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Cd(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function tv(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cm[A]={value:x,index:A}),n{for(let g=0;gnew p3,1);var av=ct(Fi,e=>e>=0?e:Math.exp(e)-1),oL={kernelName:Fi,backendName:"cpu",kernelFunc:av};function nv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n;Ie([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=a.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;ue<0?t*e:e);function rv(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t;Ie([n,r],"prelu");let s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,[o,l]=uL(n.shape,r.shape,s,i,"float32");return a.makeTensorInfo(l,"float32",o)}var dL={kernelName:Io,backendName:"cpu",kernelFunc:rv},sv=ct(To,e=>Math.max(0,e)),pL={kernelName:To,backendName:"cpu",kernelFunc:sv},iv=ct(Eo,e=>Math.min(Math.max(0,e),6)),cL={kernelName:Eo,backendName:"cpu",kernelFunc:iv};function bh(e,t,a,n,r){if(a==="linear")return ar({inputs:{x:t},backend:e});if(a==="relu")return sv({inputs:{x:t},backend:e});if(a==="elu")return av({inputs:{x:t},backend:e});if(a==="relu6")return iv({inputs:{x:t},backend:e});if(a==="prelu")return rv({inputs:{x:t,alpha:n},backend:e});if(a==="leakyrelu")return nv({inputs:{x:t},backend:e,attrs:{alpha:r}});if(a==="sigmoid")return j6({inputs:{x:t},backend:e});throw new Error(`Activation ${a} has not been implemented for the CPU backend.`)}function bt(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=v.sizeFromShape(r.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),a.incRef(r.dataId);let u=a.data.get(r.dataId);if(u.complexTensorInfos!=null){let p=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;p.shape=o,c.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var hL={kernelName:Ru,backendName:"cpu",kernelFunc:bt};function ov(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;Ie([r,s],"matMul");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],d=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([d,h]);v.assert(p===c,()=>`Error in matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=bt({inputs:{x:r},backend:a,attrs:{shape:A}}),I=bt({inputs:{x:s},backend:a,attrs:{shape:b}}),T=i?w.shape[1]:w.shape[2],N=i?w.shape[2]:w.shape[1],M=o?I.shape[1]:I.shape[2],$=Math.max(g,y),E=a.data.get(w.dataId).values,S=a.data.get(I.dataId).values,_=v.computeStrides(w.shape),O=v.computeStrides(I.shape),[W,P,U]=i?[_[0],1,_[1]]:[_[0],_[1],1],[G,q,H]=o?[1,O[1],O[0]]:[O[1],1,O[0]],V=N*M,Z=_e([$,N,M],w.dtype),X=Z.values,re=a.blockSize;for(let ee=0;ee<$;ee++){let ge=ee%g,ie=ee%y;for(let be=0;beMath.acos(e)),xL={kernelName:oi,backendName:"cpu",kernelFunc:yL},AL=ct(li,e=>Math.acosh(e)),bL={kernelName:li,backendName:"cpu",kernelFunc:AL};function vL(e){let{inputs:t,backend:a}=e,n=t;Ie(t,"addN");let r=n.map(o=>a.data.get(o.dataId).values),s=_e(n[0].shape,n[0].dtype),i=s.values;for(let o=0;ox&&(x=w,A=b)}h[g]=A}return u.forEach(g=>a.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var NL={kernelName:ou,backendName:"cpu",kernelFunc:TL};function RL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n;Ie(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Va({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,c]=C.computeOutAndReduceShapes(l.shape,i),d=v.sizeFromShape(p),h=v.makeZerosTypedArray(d,"int32"),m=v.sizeFromShape(c),f=a.data.get(l.dataId).values;for(let g=0;ga.disposeIntermediateTensorInfo(g)),a.makeTensorInfo(p,"int32",h)}var EL={kernelName:lu,backendName:"cpu",kernelFunc:RL},ML=ct(ci,e=>Math.asin(e)),$L={kernelName:ci,backendName:"cpu",kernelFunc:ML},PL=ct(hi,e=>Math.asinh(e)),_L={kernelName:hi,backendName:"cpu",kernelFunc:PL},FL=ct(mi,e=>Math.atan(e)),DL={kernelName:mi,backendName:"cpu",kernelFunc:FL},OL=_t((e,t)=>Math.atan2(e,t)),zL=Kt(gi,OL),LL={kernelName:gi,backendName:"cpu",kernelFunc:zL},WL=ct(fi,e=>Math.atanh(e)),BL={kernelName:fi,backendName:"cpu",kernelFunc:WL};function I3(e,t,a,n,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,p=r.effectiveFilterHeight,c=r.effectiveFilterWidth,d=r.padInfo.top,h=r.padInfo.left,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=_e(r.outShape,a),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],x=r.outShape[2]*r.outShape[3],A=r.outShape[3];for(let b=0;bU?U=ee:s==="avg"&&(G+=ee,q++)}if(isNaN(U))break}let H=S+_*A+T;g[H]=s==="avg"?G/q:U}}}return f}function lv(e,t,a,n,r=!1,s=!1){let i=_e(n.outShape,"int32"),o=n.strideHeight,l=n.strideWidth,u=n.dilationHeight,p=n.dilationWidth,c=n.effectiveFilterHeight,d=n.effectiveFilterWidth,h=n.padInfo.top,m=n.padInfo.left,f=_e(t,a,e);for(let g=0;g$&&($=P,r?E=s?((g*n.inHeight+S)*n.inWidth+O)*n.inChannels+y:(S*n.inWidth+O)*n.inChannels+y:E=_*d+W)}}i.set(E,g,x,I,y)}}return i}function uv(e,t,a,n,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,p=r.dilationHeight,c=r.dilationWidth,d=r.effectiveFilterDepth,h=r.effectiveFilterHeight,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,x=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,A=_e(r.outShape,a),b=A.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],I=r.outShape[2]*r.outShape[3]*r.outShape[4],T=r.outShape[3]*r.outShape[4],N=r.outShape[4];for(let M=0;Mbe?be=xt:s==="avg"&&(Ce+=xt,Re++),isNaN(be))break}if(isNaN(be))break}if(isNaN(be))break}let Le=ie+S;b[Le]=s==="avg"?Ce/Math.max(Re,1):be}}}}return A}function VL(e,t){let a=_e(t.outShape,"int32"),n=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,p=t.effectiveFilterHeight,c=t.effectiveFilterWidth,d=t.padInfo.front,h=t.padInfo.top,m=t.padInfo.left;for(let f=0;f=_&&(_=V,O=P*p*c+G*p+H)}}}a.set(O,f,y,w,M,g)}}}return a}function UL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ie(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"avg");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var GL={kernelName:yi,backendName:"cpu",kernelFunc:UL};function HL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"avgPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=uv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return a.makeTensorInfo(d.shape,"float32",d.values)}var jL={kernelName:uu,backendName:"cpu",kernelFunc:HL};function qL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"avgPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=p.strideDepth,d=p.strideHeight,h=p.strideWidth,m=p.filterDepth,f=p.filterHeight,g=p.filterWidth,y=p.dilationDepth,x=p.dilationHeight,A=p.dilationWidth,b=p.effectiveFilterDepth,w=p.effectiveFilterHeight,I=p.effectiveFilterWidth,T=b-1-p.padInfo.front,N=I-1-p.padInfo.left,M=w-1-p.padInfo.top,$=_e(s.shape,"float32"),E=1/(m*f*g),S=a.bufferSync(r);for(let _=0;_=p.outDepth||Math.floor(X)!==X))for(let re=0;re=p.outHeight||Math.floor(ee)!==ee))for(let ge=0;ge=p.outWidth||Math.floor(ie)!==ie)continue;let be=S.get(_,X,ee,ie,O);V+=be}}}$.set(V*E,_,W,P,U,O)}return a.makeTensorInfo($.shape,$.dtype,$.values)}var XL={kernelName:dp,backendName:"cpu",kernelFunc:qL};function KL(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ie([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=p.strideHeight,d=p.strideWidth,h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.effectiveFilterHeight,x=p.effectiveFilterWidth,A=x-1-p.padInfo.left,b=y-1-p.padInfo.top,w=_e(i.shape,"float32"),I=1/(h*m),T=a.data.get(r.dataId).values,N=_e(r.shape,"float32",T);for(let M=0;M=p.outHeight||Math.floor(U)!==U))for(let G=0;G=p.outWidth||Math.floor(q)!==q)continue;let H=N.get(M,U,q,$);W+=H}}w.set(W*I,M,E,S,$)}return a.makeTensorInfo(w.shape,w.dtype,w.values)}var YL={kernelName:up,backendName:"cpu",kernelFunc:KL};function ZL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Ie([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=n;u==null&&(u=.001);let p=a.data.get(r.dataId).values,c=a.data.get(o.dataId).values,d=a.data.get(l.dataId).values,h=s?a.data.get(s.dataId).values:new Float32Array([1]),m=i?a.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(p.length),g=m.length,y=h.length,x=d.length,A=c.length,b=0,w=0,I=0,T=0;for(let N=0;N=g&&(b=0),w>=A&&(w=0),I>=y&&(I=0),T>=x&&(T=0);return a.makeTensorInfo(r.shape,r.dtype,f)}var JL={kernelName:Ui,backendName:"cpu",kernelFunc:ZL};function QL(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;Ie([r],"batchToSpaceND");let o=s.reduce((y,x)=>y*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=bt({inputs:{x:r},backend:a,attrs:{shape:l}}),m=Va({inputs:{x:h},backend:a,attrs:{perm:u}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=ti({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var eW={kernelName:du,backendName:"cpu",kernelFunc:QL};function tW(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,u=h3(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var aW={kernelName:Ai,backendName:"cpu",kernelFunc:tW};function nW(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var rW={kernelName:cu,backendName:"cpu",kernelFunc:nW},sW=ct(ls,(e,t)=>{let a=t;return e>a.clipValueMax?a.clipValueMax:e{let{x:t}=e.inputs,a=e.backend,n=new Float32Array(v.sizeFromShape(t.shape)),r=a.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values;for(let u=0;uf.shape);C.assertParamsConsistent(i,s);let o=C.computeOutShape(t.map(f=>f.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(f=>v.sizeFromShape(f.shape)>0);if(l.length===1)return ar({inputs:{x:l[0]},backend:a});if(l[0].dtype==="complex64"){let f=l.map(b=>ei({inputs:{input:b},backend:a})),g=l.map(b=>eu({inputs:{input:b},backend:a})),y=tu({inputs:f,backend:a,attrs:{axis:s}}),x=tu({inputs:g,backend:a,attrs:{axis:s}}),A=Ja({inputs:{real:y,imag:x},backend:a});return f.forEach(b=>a.disposeIntermediateTensorInfo(b)),g.forEach(b=>a.disposeIntermediateTensorInfo(b)),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(x),A}let u=l.map(f=>{let g=[-1,v.sizeFromShape(f.shape.slice(s))];return bt({inputs:{x:f},backend:a,attrs:{shape:g}})}),p=u.map(f=>({vals:a.data.get(f.dataId).values,shape:f.shape}));o=C.computeOutShape(u.map(f=>f.shape),1);let c=u[0].shape[0]===1,d=m3(p,o,t[0].dtype,c),h=C.computeOutShape(l.map(f=>f.shape),s),m=a.makeTensorInfo(h,t[0].dtype,d);return u.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var dW={kernelName:hu,backendName:"cpu",kernelFunc:tu};function dv(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n;Ie([r,s],"conv2d");let c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h=d.filterHeight,m=d.filterWidth,f=d.dilationHeight,g=d.dilationWidth,y=d.padInfo.left,x=d.padInfo.top,A=d.dataFormat==="channelsLast",b=new Vt(d.outShape,r.dtype),w=v.computeStrides(r.shape),I=v.computeStrides(s.shape),T=w[0],N=A?w[1]:w[2],M=A?w[2]:1,$=A?1:w[1],E=b.strides[0],S=A?b.strides[1]:b.strides[2],_=A?b.strides[2]:1,O=A?1:b.strides[1],W=a.data.get(r.dataId).values,P=a.data.get(s.dataId).values,U=b.values;for(let G=0;G=d.inHeight)continue;let ge=re*I[0],ie=q+ee*N;for(let be=0;be=d.inWidth)continue;let gt=ge+Le*I[1],dt=ie+qe*M,st=gt;for(let it=0;it=u.inDepth)continue;let G=P*M[0],q=E+U*N[1];for(let H=0;H=u.inHeight)continue;let ee=G+X*M[1],ge=q+re*N[2];for(let ie=0;ie=u.inWidth)continue;let qe=ee+Re*M[2],gt=ge+Le*u.inChannels,dt=qe;for(let st=0;stMath.cos(e)),kW={kernelName:Ci,backendName:"cpu",kernelFunc:wW},IW=ct(Ti,e=>Math.cosh(e)),SW={kernelName:Ti,backendName:"cpu",kernelFunc:IW};function CW(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,[p,c,d,h]=r.shape,m=s.shape[0],[f,g]=o,y=_e([m,f,g,h],"float32"),x=a.data.get(s.dataId).values,A=a.data.get(i.dataId).values,b=a.data.get(r.dataId).values,w=v.computeStrides(r.shape),I=v.computeStrides(y.shape);for(let T=0;T=p)continue;let O=f>1?(E-M)*(c-1)/(f-1):0,W=g>1?(S-$)*(d-1)/(g-1):0;for(let P=0;P1?M*(c-1)+P*O:.5*(M+E)*(c-1);if(U<0||U>c-1){for(let G=0;G1?$*(d-1)+V*W:.5*($+S)*(d-1);if(Z<0||Z>d-1){for(let ge=0;ge1?$*(d-1)+G*W:.5*($+S)*(d-1);if(q<0||q>d-1){for(let Z=0;Zy+m-x-1:(y,x)=>y+x;for(let y=0;yy+m-x-1:(y,x)=>y+x;for(let y=0;y`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],p=r.shape[3],c=l*s,d=u*s,h=p/(s*s),m=a.data.get(r.dataId).values,f=new Float32Array(o*c*d*h),g=0;for(let y=0;y`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:x}=h,A=x.left,b=x.top,w=h.outChannels/h.inChannels,I=new Vt(h.outShape,r.dtype),T=a.data.get(r.dataId).values,N=a.data.get(s.dataId).values,M=I.values;for(let $=0;$=h.inHeight)continue;let G=P*c[0],q=E+U*p[1];for(let H=0;H=h.inWidth)continue;let ee=G+X*c[1],ge=q+re*h.inChannels,ie=V,be=ee;for(let Ce=0;Ce{let{x:n,filter:r}=e,{strides:s,pad:i,dilations:o}=a,l=t,u=l.data.get(n.dataId).values,p=n.shape.length,c=l.data.get(r.dataId).values,d=r.shape.length,{batchSize:h,inHeight:m,inWidth:f,inChannels:g,outHeight:y,outWidth:x,padInfo:A,strideHeight:b,strideWidth:w,filterHeight:I,filterWidth:T,dilationHeight:N,dilationWidth:M,outShape:$}=C.computeDilation2DInfo(n.shape,r.shape,s,i,"NHWC",o),E=v.sizeFromShape($),S=$.length,_=v.getArrayFromDType(n.dtype,E);for(let O=0;O=0&&X=0&&eeH&&(H=be)}}}let V=v.locToIndex([O,W,U,q],S,v.computeStrides($));_[V]=H}}}return{dataId:l.write(v.toTypedArray(_,n.dtype),$,n.dtype),shape:$,dtype:n.dtype}}},GW={kernelName:ql,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,p=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:d,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${ql}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=V,H=X)}}}E[q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},HW={kernelName:jl,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:a})=>{let{x:n,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=a,u=t,p=v.toNestedArray(n.shape,u.data.get(n.dataId).values),c=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:d,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:x,strideHeight:A,strideWidth:b,filterHeight:w,filterWidth:I,dilationHeight:T,dilationWidth:N,outShape:M}=C.computeDilation2DInfo(n.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===M.length,()=>`Error in ${jl}, dy must have the same rank as output ${M.length}, but got ${s.rank}`);let $=v.toNestedArray(M,u.data.get(s.dataId).values),E=v.makeZerosNestedTypedArray(n.shape,n.dtype);for(let S=0;S=0&&Z=0&&reG&&(G=ee,q=Z,H=re)}}}E[S][q][H][U]+=$[S][_][W][U]}}}return{dataId:u.write(v.toTypedArray(E,n.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};function jW(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,{contextOptions:o,imageOptions:l}=i||{},u=(l==null?void 0:l.alpha)||1,p=(o==null?void 0:o.contextType)||"2d";if(p!=="2d")throw new Error(`Context type ${o.contextType} is not supported by the CPU backend.`);let c=s.getContext(p,(o==null?void 0:o.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${p} type.`);let[d,h]=r.shape.slice(0,2),m=r.shape.length===2?1:r.shape[2],f=a.data.get(r.dataId).values,g=r.dtype==="float32"?255:1,y=new Uint8ClampedArray(h*d*4);for(let A=0;A1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${T}.`)}else if(r.dtype==="int32"&&(T<0||T>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${T}.`);m===1?(b[0]=T*g,b[1]=T*g,b[2]=T*g):b[I]=T*g}let w=A*4;y[w+0]=Math.round(b[0]),y[w+1]=Math.round(b[1]),y[w+2]=Math.round(b[2]),y[w+3]=Math.round(b[3])}s.width=h,s.height=d;let x=new ImageData(y,h,d);return c.putImageData(x,0,0),r}var qW={kernelName:gp,backendName:"cpu",kernelFunc:jW};function Kp(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"sum");let o;r.dtype==="bool"?o=ss({inputs:{x:r},backend:a,attrs:{dtype:"int32"}}):o=ar({inputs:{x:r},backend:a});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=C.getAxesPermutation(u,l),c=u,d=o;p!=null&&(d=Va({inputs:{x:o},backend:a,attrs:{perm:p}}),c=C.getInnerMostAxes(c.length,l)),C.assertAxesAreInnerMostDims("sum",c,d.shape.length);let[h,m]=C.computeOutAndReduceShapes(d.shape,c),f=C.upcastType(d.dtype,"int32"),g=xh(a,h,f),y=v.sizeFromShape(m),x=a.data.get(g.dataId).values,A=a.data.get(d.dataId).values;for(let b=0;b=0&&(d=Kp({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var YW={kernelName:yp,backendName:"cpu",kernelFunc:KW};function ZW(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t;Ie([n,r],"eluGrad");let s=new Float32Array(v.sizeFromShape(r.shape)),i=a.data.get(r.dataId).values,o=a.data.get(n.dataId).values;for(let l=0;l=0?s[l]=o[l]:s[l]=o[l]*(u+1)}return a.makeTensorInfo(r.shape,"float32",s)}var JW={kernelName:yu,backendName:"cpu",kernelFunc:ZW},QW=C.ERF_P,eB=C.ERF_A1,tB=C.ERF_A2,aB=C.ERF_A3,nB=C.ERF_A4,rB=C.ERF_A5,sB=ct(Di,e=>{let t=Math.sign(e),a=Math.abs(e),n=1/(1+QW*a);return t*(1-((((rB*n+nB)*n+aB)*n+tB)*n+eB)*n*Math.exp(-a*a))}),iB={kernelName:Di,backendName:"cpu",kernelFunc:sB};function vh(e){let{inputs:t,backend:a,attrs:n}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),bt({inputs:{x:r},backend:a,attrs:{shape:o}})}var oB={kernelName:xu,backendName:"cpu",kernelFunc:vh},lB=_t((e,t)=>e/t),S3=Kt(_i,lB),P1={kernelName:_i,backendName:"cpu",kernelFunc:S3};function cv(e,t,a){let n=e.shape,r=n[0],s=n[1],i=a.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],p=v.sizeFromShape(u),c=v.getTypedArrayFromDType("float32",p),d=v.getTypedArrayFromDType("float32",p);for(let g=0;g{let{image:n}=e,r=a,s=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[i,o,l,u]=n.shape,p=r.data.get(n.dataId).values;for(let c=0;c=0&&x=0,()=>`GatherV2: the index value ${w} is not in [0, ${p-1}]`)}let c=o;o==null&&(c=0);let d=v.sizeFromShape(s.shape),h=C.segment_util.collectGatherOpShapeInfo(r,s,l,c),m=bt({inputs:{x:r},backend:a,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=bt({inputs:{x:s},backend:a,attrs:{shape:[h.batchSize,d/h.batchSize]}}),g=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],y=a.bufferSync(f),x=a.bufferSync(m),A=R6(x,y,g);return a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.makeTensorInfo(h.outputShape,A.dtype,A.values)}var IB={kernelName:bu,backendName:"cpu",kernelFunc:kB};function SB(e){let{inputs:t,backend:a}=e,{input:n}=t,r=v.sizeFromShape(n.shape),s=n.shape[n.shape.length-1],i=r/s,o=bt({inputs:{x:n},backend:a,attrs:{shape:[i,s]}}),l=cv(o,!0,a),u=bt({inputs:{x:l},backend:a,attrs:{shape:n.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(l),u}var CB={kernelName:Ap,backendName:"cpu",kernelFunc:SB},TB=ct(Xi,e=>Number.isFinite(e)?1:0,"bool"),NB={kernelName:Xi,backendName:"cpu",kernelFunc:TB},RB=ct(Ki,e=>Math.abs(e)===1/0?1:0,"bool"),EB={kernelName:Ki,backendName:"cpu",kernelFunc:RB},MB=ct(Yi,e=>Number.isNaN(e)?1:0,"bool"),$B={kernelName:Yi,backendName:"cpu",kernelFunc:MB};function PB(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=_6(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var _B={kernelName:eo,backendName:"cpu",kernelFunc:PB},FB=ct(ao,e=>Math.log1p(e)),DB={kernelName:ao,backendName:"cpu",kernelFunc:FB},OB=_t((e,t)=>e&&t),zB=Kt(no,OB,null,"bool"),LB={kernelName:no,backendName:"cpu",kernelFunc:zB},WB=ct(ro,e=>e?0:1,"bool"),BB={kernelName:ro,backendName:"cpu",kernelFunc:WB},VB=_t((e,t)=>e||t),UB=Kt(so,VB,null,"bool"),GB={kernelName:so,backendName:"cpu",kernelFunc:UB};function HB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;Ie(r,"LRN");let u=r.shape[3],p=u-1,c=a.data.get(r.dataId).values,d=v.sizeFromShape(r.shape),h=new Float32Array(d);function m(f){let g=f%u,y=f-g+Math.max(0,g-s),x=f-g+Math.min(g+s,p),A=0;for(;y<=x;y++){let b=c[y];A+=b*b}return A}for(let f=0;f`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),c;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))c=ar({inputs:{x:r},backend:a});else{let d=a.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=I3(d,r.shape,r.dtype,h,p,"max");c=a.makeTensorInfo(p.outShape,r.dtype,m.values)}return c}var ZB={kernelName:uo,backendName:"cpu",kernelFunc:YB};function JB(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n;Ie(r,"maxPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.data.get(r.dataId).values,d=uv(c,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return a.makeTensorInfo(d.shape,"float32",d.values)}var QB={kernelName:wu,backendName:"cpu",kernelFunc:JB};function eV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n;Ie([r,s],"maxPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.bufferSync(s),d=VL(c,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,y=p.dilationHeight,x=p.dilationWidth,A=p.effectiveFilterDepth,b=p.effectiveFilterHeight,w=p.effectiveFilterWidth,I=A-1-p.padInfo.front,T=w-1-p.padInfo.left,N=b-1-p.padInfo.top,M=_e(s.shape,"float32"),$=a.bufferSync(r);for(let E=0;E=p.outDepth||Math.floor(V)!==V))for(let Z=0;Z=p.outHeight||Math.floor(X)!==X))for(let re=0;re=p.outWidth||Math.floor(ee)!==ee)continue;let ge=A*b*w-1-d.get(E,V,X,ee,S),ie=H*b*w+Z*w+re,be=ge===ie?1:0;if(be===0)continue;let Ce=$.get(E,V,X,ee,S);q+=Ce*be}}}M.set(q,E,_,O,W,S)}return a.makeTensorInfo(M.shape,M.dtype,M.values)}var tV={kernelName:wp,backendName:"cpu",kernelFunc:eV};function aV(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ie([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=a.data.get(o.dataId).values,m=_e(d.outShape,o.dtype,lv(h,o.shape,o.dtype,d).values),f=d.strideHeight,g=d.strideWidth,y=d.dilationHeight,x=d.dilationWidth,A=d.effectiveFilterHeight,b=d.effectiveFilterWidth,w=b-1-d.padInfo.left,I=A-1-d.padInfo.top,T=_e(o.shape,"float32"),N=a.data.get(r.dataId).values,M=_e(r.shape,"float32",N);for(let $=0;$=d.outHeight||Math.floor(G)!==G))for(let q=0;q=d.outWidth||Math.floor(H)!==H)continue;let V=A*b-1-m.get($,G,H,E),Z=U*b+q,X=V===Z?1:0;if(X===0)continue;let re=M.get($,G,H,E);P+=re*X}}T.set(P,$,S,_,E)}return a.makeTensorInfo(T.shape,T.dtype,T.values)}var nV={kernelName:vp,backendName:"cpu",kernelFunc:aV};function rV(e,t,a,n,r){let s=v.computeStrides(t),i=I3(e,t,a,s,r,"max"),o=lv(e,t,a,r,!0,n);return[i.values,o.values]}var sV={kernelName:ku,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;Ie(n,"MaxPoolWithArgmax");let u=l.data.get(n.dataId).values,p=C.computePool2DInfo(n.shape,r,s,[1,1],i),[c,d]=rV(u,n.shape,n.dtype,o,p),h=l.write(c,p.outShape,n.dtype),m=l.write(d,p.outShape,n.dtype);return[{dataId:h,shape:p.outShape,dtype:n.dtype},{dataId:m,shape:p.outShape,dtype:"int32"}]}};function iV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=v.parseAxisParam(s,r.shape),l=C.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],c=a.makeTensorInfo([],"float32",new Float32Array([u]));p.push(c);let d=ss({inputs:{x:r},backend:a,attrs:{dtype:"float32"}});p.push(d);let h=S3({inputs:{a:d,b:c},backend:a});p.push(h);let m=Kp({inputs:{x:h},backend:a,attrs:{axis:s,keepDims:i}});return p.forEach(f=>a.disposeIntermediateTensorInfo(f)),m}var oV={kernelName:po,backendName:"cpu",kernelFunc:iV};function lV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;Ie(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=C.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Va({inputs:{x:r},backend:a,attrs:{perm:u}}),l=C.getInnerMostAxes(l.length,r.shape.length)),C.assertAxesAreInnerMostDims("min",l,p.shape.length);let[c,d]=C.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(d),m=v.makeZerosTypedArray(v.sizeFromShape(c),p.dtype),f=a.data.get(p.dataId).values;for(let y=0;yx[0]+r.shape[A]+x[1]),l=s.map(x=>x[0]),u=s.map((x,A)=>x[0]+r.shape[A]),p=i==="reflect"?0:1,c=a.data.get(r.dataId).values,d=r.shape.length,h=v.computeStrides(r.shape),m=v.sizeFromShape(o),f=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,m);for(let x=0;x=u[w]&&(A[w]=(u[w]-1)*2-A[w]+p);A=A.map((w,I)=>w-l[I]);let b=v.locToIndex(A,d,h);y[x]=c[b]}return{dataId:a.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var pV={kernelName:mo,backendName:"cpu",kernelFunc:dV},cV=_t((e,t)=>{let a=e%t;return e<0&&t<0||e>=0&&t>=0?a:(a+t)%t}),hV=Kt(fo,cV),mV={kernelName:fo,backendName:"cpu",kernelFunc:hV},fV=nu(hA());function mv(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=r.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=v.parseAxisParam([o],r.shape),u=hv({inputs:{x:r},backend:a,attrs:{reductionIndices:l,keepDims:!1}}),p=C.expandShapeToKeepDim(u.shape,l),c=bt({inputs:{x:u},backend:a,attrs:{shape:p}}),d=w3({inputs:{a:r,b:c},backend:a}),h=I6({inputs:{x:d},backend:a}),m=Kp({inputs:{x:h},backend:a,attrs:{axis:l,keepDims:!1}}),f=bt({inputs:{x:m},backend:a,attrs:{shape:p}}),g=S3({inputs:{a:h,b:f},backend:a});return a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),g}var gV={kernelName:Ho,backendName:"cpu",kernelFunc:mv};function yV(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;Ie(r,"multinomial");let l=o?r:mv({inputs:{logits:r},backend:a,attrs:{dim:-1}}),u=l.shape[0],p=l.shape[1],c=a.data.get(l.dataId).values,d=[u,s],h=v.makeZerosTypedArray(v.sizeFromShape(d),"int32");for(let m=0;m=0&&c[d]{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=vh({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=tu({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var $V={kernelName:Tu,backendName:"cpu",kernelFunc:gv};function PV(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;Ie(r,"pad");let o=s.map((y,x)=>y[0]+r.shape[x]+y[1]),l=s.map(y=>y[0]),u=a.data.get(r.dataId).values,p=v.sizeFromShape(r.shape),c=r.shape.length,d=v.computeStrides(r.shape),h=v.sizeFromShape(o),m=o.length,f=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;yb+l[w]),A=v.locToIndex(x,m,f);g[A]=u[y]}return{dataId:a.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var yv={kernelName:wo,backendName:"cpu",kernelFunc:PV},_V=_t((e,t)=>Math.pow(e,t)),FV=Kt(ko,_V),DV={kernelName:ko,backendName:"cpu",kernelFunc:FV};function OV(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.data.get(y.dataId).values),u=r.map(y=>y.shape),p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,[d,h,m]=V6(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var zV={kernelName:$h,backendName:"cpu",kernelFunc:OV};function LV(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,p]=U6(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),d=a.makeTensorInfo([p.length],n.dtype,p);return[c,d]}var WV={kernelName:Ph,backendName:"cpu",kernelFunc:LV};function BV(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.data.get(r.dataId).values,p=a.data.get(s.dataId).values,c=a.data.get(i.dataId).values,d=o.map(g=>a.data.get(g.dataId).values),h=o.map(g=>g.shape),[m,f]=G6(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var VV={kernelName:_h,backendName:"cpu",kernelFunc:BV};function UV(e){let{backend:t,attrs:a}=e,{start:n,stop:r,dtype:s,step:i}=a,o=y3(n,r,i,s);return t.makeTensorInfo([o.length],s,o)}var GV={kernelName:Nu,backendName:"cpu",kernelFunc:UV},HV=ct(Co,e=>1/e),jV={kernelName:Co,backendName:"cpu",kernelFunc:HV};function qV(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n;Ie(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,p]=o,[c,d,h,m]=r.shape,f=a.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([c,u,p,m])),y=[s&&u>1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=0,b=y[0]/x[0],w=y[1]/x[1];for(let I=0;I1?u-1:u,i&&h>1?p-1:p],g=[i&&d>1?d-1:d,i&&h>1?h-1:h],y=f[0]/g[0],x=f[1]/g[1],A=a.data.get(s.dataId).values,b=0;for(let w=0;w1?d-1:d,s&&p>1?h-1:h],x=[s&&u>1?u-1:u,s&&p>1?p-1:p],A=y[0]/x[0],b=y[1]/x[1],w=0;for(let I=0;I1?p-1:p,i&&m>1?c-1:c],x=[i&&h>1?h-1:h,i&&m>1?m-1:m],A=y[0]/x[0],b=y[1]/x[1],w=1/A,I=1/b,T=Math.ceil(w)*2+2,N=Math.ceil(I)*2+2;for(let M=0;M=h)continue;let X=$+Z*l[1],re=Z*A,ee=Math.min(p-1,i?Math.round(re):Math.floor(re));if(E===ee)for(let ge=0;ge=m)continue;let be=X+ie*l[2],Ce=ie*b,Re=Math.min(c-1,i?Math.round(Ce):Math.floor(Ce));W===Re&&(H+=g[be+q])}}f[P+q]=H}}}}return a.makeTensorInfo(r.shape,r.dtype,f)}var eU={kernelName:Eu,backendName:"cpu",kernelFunc:QV};function tU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n;Ie(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return ar({inputs:{x:r},backend:a});let l=new Vt(r.shape,r.dtype),u=a.bufferSync(r);for(let p=0;pd[h]=r.shape[h]-1-d[h]),l.set(u.get(...d),...c)}return a.makeTensorInfo(l.shape,l.dtype,l.values)}var aU={kernelName:Mo,backendName:"cpu",kernelFunc:tU},nU={kernelName:el,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=v.getTypedArrayFromDType(n.dtype,v.sizeFromShape(n.shape)),[u,p,c,d]=n.shape,[h,m]=C.getImageCenter(i,p,c),f=255,g=Math.sin(r),y=Math.cos(r),x=o.data.get(n.dataId).values;for(let A=0;A=0&&_=0&&O{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),sU={kernelName:$o,backendName:"cpu",kernelFunc:rU};function iU(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(s,r,i),d=!0,h=a.bufferSync(r),m=a.bufferSync(s),f=qs(h,m,i,c,u,l,o,p,0,d);return a.makeTensorInfo(i,f.dtype,f.values)}var oU={kernelName:_o,backendName:"cpu",kernelFunc:iU};function lU(e,t){let a=0,n=e.length,r=0;for(;a1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let m=0;me>=0?gU*e:fU*(Math.exp(e)-1)),xU={kernelName:Oo,backendName:"cpu",kernelFunc:yU},AU=ct(Wo,e=>e<0?-1:e>0?1:0),bU={kernelName:Wo,backendName:"cpu",kernelFunc:AU},vU=ct(zo,e=>Math.sin(e)),wU={kernelName:zo,backendName:"cpu",kernelFunc:vU},kU=ct(Lo,e=>Math.sinh(e)),IU={kernelName:Lo,backendName:"cpu",kernelFunc:kU},SU=11920928955078125e-23,w5=Math.log(SU)+2,CU=ct(Vo,e=>{let t=e>-w5,a=eNumber(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var AG={kernelName:Mp,backendName:"cpu",kernelFunc:xG};function bG(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape + ${i.shape}`);let o=a.data.get(n.dataId).values,l=a.data.get(r.dataId).values,u=a.data.get(s.dataId).values,p=a.data.get(i.dataId).values[0],[c,d,h,m,f]=q6(o,n.shape,n.dtype,l,r.dtype,u,p);return[a.makeTensorInfo(d,n.dtype,c),a.makeTensorInfo([d[0]],r.dtype,h),a.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var MU={kernelName:Ip,backendName:"cpu",kernelFunc:EU};function $U(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape - ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.data.get(r.dataId).values),o=a.data.get(n.dataId).values,l=Array.from(a.data.get(s.dataId).values),[u,d,c]=pv(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(d,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var vG={kernelName:Bu,backendName:"cpu",kernelFunc:bG};function wG(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.data.get(r.dataId).values),o=a.data.get(n.dataId).values,l=Array.from(a.data.get(s.dataId).values),[u,p,c]=X6(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var PU={kernelName:Du,backendName:"cpu",kernelFunc:$U};function _U(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=C3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(d,n.dtype,u)}var kG={kernelName:Vu,backendName:"cpu",kernelFunc:wG};function IG(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,p]=x3(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var FU={kernelName:Ou,backendName:"cpu",kernelFunc:_U};function DU(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=a.data.get(n.dataId).values,o=a.data.get(r.dataId).values,l=a.data.get(s.dataId).values,[u,d]=C3(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(d,n.dtype,u)}var SG={kernelName:Uu,backendName:"cpu",kernelFunc:IG};function TG(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=I.calculateShapes(s,r,o),h=!1,m=a.bufferSync(r),f;switch(s.dtype){case"bool":{let g=a.bufferSync(s),y=!!a.data.get(i.dataId).values[0];f=xi(m,g,o,p,d,u,l,c,y,h);break}case"float32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=xi(m,g,o,p,d,u,l,c,y,h);break}case"int32":{let g=a.bufferSync(s),y=a.data.get(i.dataId).values[0];f=xi(m,g,o,p,d,u,l,c,y,h);break}case"string":{let g=a.bufferSync(s),y=v.decodeString(a.data.get(i.dataId).values[0]);f=xi(m,g,o,p,d,u,l,c,y,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return a.makeTensorInfo(o,f.dtype,f.values)}var CG={kernelName:tl,backendName:"cpu",kernelFunc:TG};function NG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=I.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),d=r.shape.slice();return l.map(c=>{let p=[...d];p[o]=c;let h=Ci({inputs:{x:r},backend:a,attrs:{begin:u,size:p}});return u[o]+=c,h})}var RG={kernelName:Wu,backendName:"cpu",kernelFunc:NG},EG={kernelName:Fp,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;Ie(a,"square");let r=n.data.get(a.dataId).values,s=new Float32Array(r.length);for(let i=0;i{let a=t;return isNaN(e)?NaN:e>0?1:a.alpha}),FG={kernelName:Ds,backendName:"cpu",kernelFunc:MG};function $G(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n;Ie(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=wt.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(f)w=bt({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=wt.computeOutShape(x,A,b),C=Ci({inputs:{x:r},backend:a,attrs:{begin:x,size:S}});w=bt({inputs:{x:C},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(C)}else{let S=a.bufferSync(r),C=mv(h,S,b,x);w=a.makeTensorInfo(m,C.dtype,C.values)}return w}var DG={kernelName:al,backendName:"cpu",kernelFunc:$G};function PG(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.data.get(d.dataId).values,h=a.data.get(c.dataId).values,[m,f]=N3(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var _G={kernelName:Hu,backendName:"cpu",kernelFunc:PG};function OG(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values[0],[u,d,c]=R3(o,l,r),p=d.length;return[a.makeTensorInfo([p,2],"int32",u),a.makeTensorInfo([p],"string",d),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var zG={kernelName:$p,backendName:"cpu",kernelFunc:OG};function LG(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.data.get(s.dataId).values,o=E3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var WG={kernelName:Dp,backendName:"cpu",kernelFunc:LG},BG=ct(nl,e=>Math.tan(e)),VG={kernelName:nl,backendName:"cpu",kernelFunc:BG},UG=ct(rl,e=>Math.tanh(e)),GG={kernelName:rl,backendName:"cpu",kernelFunc:UG};function HG(e){let{inputs:t,backend:a}=e,{tensor:n,indices:r,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:d}=I.calculateShapes(s,r,n.shape),c=!1,p=a.bufferSync(r),h=a.bufferSync(s),m=a.bufferSync(n),f=xi(p,h,n.shape,d,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var jG={kernelName:jo,backendName:"cpu",kernelFunc:HG};function qG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=gv(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var XG={kernelName:$s,backendName:"cpu",kernelFunc:qG};function KG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;Ie(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=xv(o,r.shape,r.dtype,s,i);return[a.makeTensorInfo(l.shape,l.dtype,l.values),a.makeTensorInfo(u.shape,u.dtype,u.values)]}var YG={kernelName:sl,backendName:"cpu",kernelFunc:KG};function ZG(e){let{inputs:t,attrs:a,backend:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[d,c,p,h]=r.shape,[m,f]=u!=null?u:[c,p],g=[d,m,f,h],y=v.computeStrides(r.shape),x=y[0],A=y[1],b=y[2],w=v.computeStrides(g),S=w[0],C=w[1],N=w[2],M=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));M.fill(l);let F=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values;for(let T=0;Tt-1)if(t<=1)a=0;else{let n=2*t;a-=n*Math.trunc(a/n),a>=t&&(a=n-a-1)}return v.clamp(0,a,t-1)}function eH(e,t){let a=e;if(a<0)if(t<=1)a=0;else{let n=t-1;a+=t*(Math.trunc(-a/n)+1)}else if(a>t-1)if(t<=1)a=0;else{let n=t-1;a-=t*Math.trunc(a/n)}return v.clamp(0,a,t-1)}function tH(e,t){return e}function aH(e,t){return v.clamp(0,e,t-1)}function $d(e,t,a,n,r,s,i,o,l,u,d){let c=i*n+o*r+l*s+u;return 0<=o&&oa.disposeIntermediateTensorInfo(m)),h}var dH={kernelName:_p,backendName:"cpu",kernelFunc:uH},pH=[rW,Oz,iW,lW,Uz,dW,cW,mW,gW,xW,bW,wW,IW,CW,RW,FW,DW,_W,zW,aW,WW,VW,GW,Hz,jW,Bz,qz,XW,zz,YW,JW,QW,tB,nB,sB,oB,uB,pB,hB,fB,yB,AB,vB,kB,IB,TB,NB,EB,MB,FB,$B,PB,zB,KL,WB,Xz,XB,Kz,KB,Zz,tV,aV,rV,Qz,tL,iV,lV,dV,cV,nL,sL,Lz,mV,ZW,gV,xV,bV,YL,oL,uL,wV,pL,IV,CV,RV,FV,DV,_V,OV,hL,LV,BV,UV,HV,qV,KV,ZV,fL,QV,aU,iU,yL,AL,uU,cU,fU,vL,yU,AU,bU,Dv,IU,JL,IL,TU,NU,EU,FU,Wz,L1,DU,QL,eW,tW,_U,zU,WU,VU,GU,HU,qU,$L,KU,eG,aG,iG,PL,lG,dG,cG,_L,rU,fG,yG,AG,vG,kG,SG,CG,RG,LL,EG,BL,UL,FG,DG,_G,zG,WG,qL,_B,VG,GG,jG,XG,YG,JG,wL,iH,lH,dH,xU];for(let e of pH)bn(e);var Pv={};Ke(Pv,{assertNotComplex:()=>Ju,bindCanvasToFramebuffer:()=>wH,bindColorTextureToFramebuffer:()=>dh,bindTextureToProgramUniformSampler:()=>Yv,bindTextureUnit:()=>qv,bindVertexBufferToProgramAttribute:()=>B1,callAndCheck:()=>ce,canBeRepresented:()=>_v,createFragmentShader:()=>Lv,createFramebuffer:()=>jv,createProgram:()=>Wv,createStaticIndexBuffer:()=>Uv,createStaticVertexBuffer:()=>Vv,createTexture:()=>Gv,createVertexShader:()=>zv,getBatchDim:()=>Ni,getExtensionOrThrow:()=>Dd,getFramebufferErrorMessage:()=>Zv,getMaxTexturesInShader:()=>tw,getNumChannels:()=>bH,getProgramUniformLocation:()=>Kv,getProgramUniformLocationOrThrow:()=>Xv,getRowsCols:()=>Ri,getShapeAs3D:()=>_d,getTextureShapeFromLogicalShape:()=>Qv,getWebGLDisjointQueryTimerVersion:()=>aw,getWebGLErrorMessage:()=>Ov,getWebGLMaxTextureSize:()=>ew,hasExtension:()=>yn,isCapableOfRenderingToFloatTexture:()=>nw,isDownloadFloatTextureEnabled:()=>rw,isReshapeFree:()=>ip,isWebGLFenceEnabled:()=>sw,isWebGLVersionEnabled:()=>U1,linkProgram:()=>Bv,logShaderSourceAndInfoLog:()=>O3,resetMaxTextureSize:()=>kH,resetMaxTexturesInShader:()=>IH,unbindColorTextureFromFramebuffer:()=>V1,unbindTextureUnit:()=>vH,validateFramebuffer:()=>Pd,validateProgram:()=>uh,validateTextureSize:()=>Hv});var fi={},ah={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function u0(e,t){fi[e]=t}function Un(e,t){if(!(e in fi)||t!=null){let n=hH(e,t);if(n!==null)fi[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=fi[e];return a==null||a.isContextLost()?(delete fi[e],Un(e)):(a.disable(a.DEPTH_TEST),a.disable(a.STENCIL_TEST),a.disable(a.BLEND),a.disable(a.DITHER),a.disable(a.POLYGON_OFFSET_FILL),a.disable(a.SAMPLE_COVERAGE),a.enable(a.SCISSOR_TEST),a.enable(a.CULL_FACE),a.cullFace(a.BACK),fi[e])}function cH(e){if(!B().getBool("IS_SAFARI")&&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 hH(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?cH(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete fi[e]},!1),B().getBool("SOFTWARE_WEBGL_ENABLED")&&(ah.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",ah)||a.getContext("experimental-webgl",ah):a.getContext("webgl2",ah)}var sp;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(sp||(sp={}));var gn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(gn||(gn={}));var pa;(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"})(pa||(pa={}));function ac(e,t){return[t,e]}function mH(e,t){return e*t}function nh(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Zu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function fH(e,t){let[a,n]=Zu(e,t);return a*n*4}function _3(e,t){let a=e,n,r,s,i,o,l,u,d,c,p;return B().getNumber("WEBGL_VERSION")===2?(n=a.R32F,r=a.R16F,s=a.RGBA16F,i=a.RGBA32F,o=a.RED,u=4,d=1,c=a.HALF_FLOAT,p=a.FLOAT,l=a.RGBA8):(n=e.RGBA,r=e.RGBA,s=e.RGBA,i=a.RGBA,o=e.RGBA,u=4,d=4,c=t!=null?t.HALF_FLOAT_OES:null,p=e.FLOAT,l=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:d,textureTypeHalfFloat:c,textureTypeFloat:p}}function ce(e,t){let a=t();return B().getBool("DEBUG")&&gH(e),a}function gH(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+Ov(e,t))}var yH=596e-10,xH=65504;function _v(e){return!!(B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||yHe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function zv(e,t){let a=_r(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(a)),new Error("Failed to compile vertex shader.");return a}function Lv(e,t){let a=_r(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),B().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw O3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var AH=/ERROR: [0-9]+:([0-9]+):/g;function O3(e,t){let a=AH.exec(t);if(a==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let n=+a[1],r=e.split(` -`),s=r.length.toString().length+2,i=r.map((c,p)=>v.rightPad((p+1).toString(),s)+c),o=0;for(let c=0;c{let d=[...p];d[o]=c;let h=ti({inputs:{x:r},backend:a,attrs:{begin:u,size:d}});return u[o]+=c,h})}var BU={kernelName:Fu,backendName:"cpu",kernelFunc:WU},VU={kernelName:Sp,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t;Ie(a,"square");let r=n.data.get(a.dataId).values,s=new Float32Array(r.length);for(let i=0;i{let a=t;return isNaN(e)?NaN:e>0?1:a.alpha}),GU={kernelName:ds,backendName:"cpu",kernelFunc:UU};function HU(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n;Ie(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=bt({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=ti({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=bt({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(T)}else{let I=a.bufferSync(r),T=Z6(h,I,b,x);w=a.makeTensorInfo(m,T.dtype,T.values)}return w}var jU={kernelName:Xo,backendName:"cpu",kernelFunc:HU};function qU(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.data.get(p.dataId).values,h=a.data.get(c.dataId).values,[m,f]=A3(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var XU={kernelName:Lu,backendName:"cpu",kernelFunc:qU};function KU(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.data.get(s.dataId).values,l=a.data.get(i.dataId).values[0],[u,p,c]=b3(o,l,r),d=p.length;return[a.makeTensorInfo([d,2],"int32",u),a.makeTensorInfo([d],"string",p),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var YU={kernelName:Tp,backendName:"cpu",kernelFunc:KU};function ZU(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.data.get(s.dataId).values,o=v3(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var JU={kernelName:Np,backendName:"cpu",kernelFunc:ZU},QU=ct(Yo,e=>Math.tan(e)),eG={kernelName:Yo,backendName:"cpu",kernelFunc:QU},tG=ct(Zo,e=>Math.tanh(e)),aG={kernelName:Zo,backendName:"cpu",kernelFunc:tG};function nG(e){let{inputs:t,backend:a}=e,{tensor:n,indices:r,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:p}=C.calculateShapes(s,r,n.shape),c=!1,d=a.bufferSync(r),h=a.bufferSync(s),m=a.bufferSync(n),f=qs(d,h,n.shape,p,l,o,i,u,m,c);return a.makeTensorInfo(n.shape,f.dtype,f.values)}var rG={kernelName:Fo,backendName:"cpu",kernelFunc:nG};function sG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reps:s}=n;Ie(r,"tile");let i=Q6(a.bufferSync(r),s);return a.makeTensorInfo(i.shape,i.dtype,i.values)}var iG={kernelName:us,backendName:"cpu",kernelFunc:sG};function oG(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{k:s,sorted:i}=n;Ie(r,"topk");let o=a.data.get(r.dataId).values,[l,u]=tv(o,r.shape,r.dtype,s,i);return[a.makeTensorInfo(l.shape,l.dtype,l.values),a.makeTensorInfo(u.shape,u.dtype,u.values)]}var lG={kernelName:Jo,backendName:"cpu",kernelFunc:oG};function uG(e){let{inputs:t,attrs:a,backend:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,c,d,h]=r.shape,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=v.computeStrides(r.shape),x=y[0],A=y[1],b=y[2],w=v.computeStrides(g),I=w[0],T=w[1],N=w[2],M=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));M.fill(l);let $=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values;for(let S=0;St-1)if(t<=1)a=0;else{let n=2*t;a-=n*Math.trunc(a/n),a>=t&&(a=n-a-1)}return v.clamp(0,a,t-1)}function cG(e,t){let a=e;if(a<0)if(t<=1)a=0;else{let n=t-1;a+=t*(Math.trunc(-a/n)+1)}else if(a>t-1)if(t<=1)a=0;else{let n=t-1;a-=t*Math.trunc(a/n)}return v.clamp(0,a,t-1)}function hG(e,t){return e}function mG(e,t){return v.clamp(0,e,t-1)}function Td(e,t,a,n,r,s,i,o,l,u,p){let c=i*n+o*r+l*s+u;return 0<=o&&oa.disposeIntermediateTensorInfo(m)),h}var wG={kernelName:Ep,backendName:"cpu",kernelFunc:vG},kG=[gL,KO,xL,bL,tz,wL,IL,CL,NL,EL,$L,_L,DL,LL,BL,GL,jL,XL,YL,mL,JL,eW,aW,nz,rW,QO,sz,iW,YO,lW,dW,pW,hW,fW,yW,AW,vW,kW,SW,TW,RW,MW,PW,FW,DW,zW,WW,VW,UW,GW,HW,qW,YW,oL,JW,iz,iB,oz,oB,uz,hB,mB,gB,pz,hz,xB,bB,wB,IB,fz,yz,ZO,CB,uW,NB,EB,$B,lL,Az,vz,_B,kz,DB,LB,BB,GB,jB,XB,KB,Sz,ZB,QB,tV,nV,sV,oV,uV,Tz,pV,mV,xV,Rz,Mz,vV,IV,TV,Pz,RV,MV,$V,yv,DV,dL,Dz,zV,WV,VV,GV,JO,P1,jV,pL,cL,hL,XV,YV,JV,eU,aU,nU,sU,Hz,oU,cU,mU,xU,qz,bU,wU,IU,Xz,gV,TU,RU,MU,PU,FU,OU,LU,BU,Zz,VU,Qz,tL,GU,jU,XU,YU,JU,sL,XW,eG,aG,rG,iG,lG,dG,_z,xG,bG,wG,EV];for(let e of kG)xn(e);var xv={};Ze(xv,{assertNotComplex:()=>ju,bindCanvasToFramebuffer:()=>_G,bindColorTextureToFramebuffer:()=>rh,bindTextureToProgramUniformSampler:()=>Pv,bindTextureUnit:()=>Ev,bindVertexBufferToProgramAttribute:()=>F1,callAndCheck:()=>ce,canBeRepresented:()=>Av,createFragmentShader:()=>wv,createFramebuffer:()=>Rv,createProgram:()=>kv,createStaticIndexBuffer:()=>Cv,createStaticVertexBuffer:()=>Sv,createTexture:()=>Tv,createVertexShader:()=>vv,getBatchDim:()=>ai,getExtensionOrThrow:()=>Nd,getFramebufferErrorMessage:()=>_v,getMaxTexturesInShader:()=>zv,getNumChannels:()=>$G,getProgramUniformLocation:()=>$v,getProgramUniformLocationOrThrow:()=>Mv,getRowsCols:()=>ni,getShapeAs3D:()=>Ed,getTextureShapeFromLogicalShape:()=>Dv,getWebGLDisjointQueryTimerVersion:()=>Lv,getWebGLErrorMessage:()=>bv,getWebGLMaxTextureSize:()=>Ov,hasExtension:()=>fn,isCapableOfRenderingToFloatTexture:()=>Wv,isDownloadFloatTextureEnabled:()=>Bv,isReshapeFree:()=>Qd,isWebGLFenceEnabled:()=>Vv,isWebGLVersionEnabled:()=>O1,linkProgram:()=>Iv,logShaderSourceAndInfoLog:()=>N3,resetMaxTextureSize:()=>FG,resetMaxTexturesInShader:()=>DG,unbindColorTextureFromFramebuffer:()=>D1,unbindTextureUnit:()=>PG,validateFramebuffer:()=>Rd,validateProgram:()=>nh,validateTextureSize:()=>Nv});var Gs={},Yc={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function n0(e,t){Gs[e]=t}function Wn(e,t){if(!(e in Gs)||t!=null){let n=SG(e,t);if(n!==null)Gs[e]=n;else return console.log("Could not get context for WebGL version",e),null}let a=Gs[e];return a==null||a.isContextLost()?(delete Gs[e],Wn(e)):(a.disable(a.DEPTH_TEST),a.disable(a.STENCIL_TEST),a.disable(a.BLEND),a.disable(a.DITHER),a.disable(a.POLYGON_OFFSET_FILL),a.disable(a.SAMPLE_COVERAGE),a.enable(a.SCISSOR_TEST),a.enable(a.CULL_FACE),a.cullFace(a.BACK),Gs[e])}function IG(e){if(!B().getBool("IS_SAFARI")&&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 SG(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let a=t==null?IG(e):t;return a.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete Gs[e]},!1),B().getBool("SOFTWARE_WEBGL_ENABLED")&&(Yc.failIfMajorPerformanceCaveat=!1),e===1?a.getContext("webgl",Yc)||a.getContext("experimental-webgl",Yc):a.getContext("webgl2",Yc)}var Jd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Jd||(Jd={}));var mn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(mn||(mn={}));var da;(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"})(da||(da={}));function Yp(e,t){return[t,e]}function CG(e,t){return e*t}function Zc(e){let t=v.sizeFromShape(e),a=Math.ceil(t/4);return v.sizeToSquarishShape(a)}function Hu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function TG(e,t){let[a,n]=Hu(e,t);return a*n*4}function T3(e,t){let a=e,n,r,s,i,o,l,u,p,c,d;return B().getNumber("WEBGL_VERSION")===2?(n=a.R32F,r=a.R16F,s=a.RGBA16F,i=a.RGBA32F,o=a.RED,u=4,p=1,c=a.HALF_FLOAT,d=a.FLOAT,l=a.RGBA8):(n=e.RGBA,r=e.RGBA,s=e.RGBA,i=a.RGBA,o=e.RGBA,u=4,p=4,c=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT,l=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:p,textureTypeHalfFloat:c,textureTypeFloat:d}}function ce(e,t){let a=t();return B().getBool("DEBUG")&&NG(e),a}function NG(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+bv(e,t))}var RG=596e-10,EG=65504;function Av(e){return!!(B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||RGe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function vv(e,t){let a=Mr(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(a)),new Error("Failed to compile vertex shader.");return a}function wv(e,t){let a=Mr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(a,t)),ce(e,()=>e.compileShader(a)),B().get("ENGINE_COMPILE_ONLY"))return a;if(e.getShaderParameter(a,e.COMPILE_STATUS)===!1)throw N3(t,e.getShaderInfoLog(a)),new Error("Failed to compile fragment shader.");return a}var MG=/ERROR: [0-9]+:([0-9]+):/g;function N3(e,t){let a=MG.exec(t);if(a==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let n=+a[1],r=e.split(` +`),s=r.length.toString().length+2,i=r.map((c,d)=>v.rightPad((d+1).toString(),s)+c),o=0;for(let c=0;ce.createProgram(),"Unable to create WebGLProgram.")}function Bv(e,t){if(ce(e,()=>e.linkProgram(t)),!B().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function uh(e,t){if(ce(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Vv(e,t){let a=_r(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function Uv(e,t){let a=_r(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function bH(){return B().getNumber("WEBGL_VERSION")===2?1:4}function Gv(e){return _r(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Hv(e,t){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let n=`[${e}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(e>a||t>a){let n=`[${e}x${t}]`,r=`[${a}x${a}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+r+".")}}function jv(e){return _r(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function B1(e,t,a,n,r,s,i){let o=e.getAttribLocation(t,a);return o===-1?!1:(ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ce(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ce(e,()=>e.enableVertexAttribArray(o)),!0)}function qv(e,t,a){Jv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function vH(e,t){Jv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Xv(e,t,a){return _r(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function Kv(e,t,a){return e.getUniformLocation(t,a)}function Yv(e,t,a,n){ce(e,()=>qv(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function wH(e){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ce(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function dh(e,t,a){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,a)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function V1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Pd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Zv(e,t))}function Zv(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 _r(e,t,a){let n=ce(e,()=>t());if(n==null)throw new Error(a);return n}function Jv(e,t){let a=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+e.TEXTURE0;if(na){let r=`[gl.TEXTURE0, gl.TEXTURE${a}]`;throw new Error(`textureUnit must be in ${r}.`)}}function Ni(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function Ri(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 _d(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[Ni(e),...Ri(e)]),t}function Qv(e,t=!1){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=B().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&B().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=a/2),t&&(a=a*2,n=n*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=a?s=[1,r]:e.length===2&&e[0]<=a&&e[1]<=a?s=e:e.length===3&&e[0]*e[1]<=a&&e[2]<=a?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=a&&e[1]*e[2]<=a?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=a&&e[3]<=a?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=a&&e[1]*e[2]*e[3]<=a&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=Ni(e),l=2,u=2;e.length&&([l,u]=Ri(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(d=>d*2)}else s=v.sizeToSquarishShape(r);return s}function rh(e){return e%2===0}function ip(e,t){if(e=e.slice(-2),t=t.slice(-2),v.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 a=e[e.length-1],n=t[t.length-1];if(a===n||rh(a)&&rh(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&rh(e[0])&&rh(t[0])}var ph,ch;function ew(e){if(ph==null){let t=Un(e);ph=t.getParameter(t.MAX_TEXTURE_SIZE)}return ph}function kH(){ph=null}function IH(){ch=null}function tw(e){if(ch==null){let t=Un(e);ch=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,ch)}function aw(e){if(e===0)return 0;let t,a=Un(e);return yn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:yn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function yn(e,t){return e.getExtension(t)!=null}function U1(e){try{if(Un(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function nw(e){if(e===0)return!1;let t=Un(e);if(e===1){if(!yn(t,"OES_texture_float"))return!1}else if(!yn(t,"EXT_color_buffer_float"))return!1;return G1(t)}function rw(e){if(e===0)return!1;let t=Un(e);if(e===1){if(!yn(t,"OES_texture_float")||!yn(t,"WEBGL_color_buffer_float"))return!1}else{if(yn(t,"EXT_color_buffer_float"))return G1(t);let a="EXT_color_buffer_half_float";if(yn(t,a)){let n=t.getExtension(a);return SH(t,n)}return!1}return G1(t)}function G1(e){let t=_3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let n=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let r=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(n),r}function SH(e,t){let a=_3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,1,1,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),s}function sw(e){return e!==2?!1:Un(e).fenceSync!=null}function Ju(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var Se=B();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>U1(2)?2:U1(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>ew(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>tw(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:aw(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Wp.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>nw(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>rw(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>sw(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Wp.isMobile()?1:-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${e}.`);if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Ra(){let e,t,a,n,r,s,i,o,l,u;return B().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=B().getBool("WEBGL2_ISNAN_CUSTOM")?` +`)[0]),console.log(`%c ${v.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(p.join(` +`))}function kv(e){return Mr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function Iv(e,t){if(ce(e,()=>e.linkProgram(t)),!B().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function nh(e,t){if(ce(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function Sv(e,t){let a=Mr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function Cv(e,t){let a=Mr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a)),ce(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),a}function $G(){return B().getNumber("WEBGL_VERSION")===2?1:4}function Tv(e){return Mr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function Nv(e,t){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let n=`[${e}x${t}]`;throw new Error("Requested texture size "+n+" is invalid.")}if(e>a||t>a){let n=`[${e}x${t}]`,r=`[${a}x${a}]`;throw new Error("Requested texture size "+n+" greater than WebGL maximum on this browser / GPU "+r+".")}}function Rv(e){return Mr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function F1(e,t,a,n,r,s,i){let o=e.getAttribLocation(t,a);return o===-1?!1:(ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ce(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ce(e,()=>e.enableVertexAttribArray(o)),!0)}function Ev(e,t,a){Fv(e,a),ce(e,()=>e.activeTexture(e.TEXTURE0+a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function PG(e,t){Fv(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Mv(e,t,a){return Mr(e,()=>e.getUniformLocation(t,a),'uniform "'+a+'" not present in program.')}function $v(e,t,a){return e.getUniformLocation(t,a)}function Pv(e,t,a,n){ce(e,()=>Ev(e,t,n)),ce(e,()=>e.uniform1i(a,n))}function _G(e){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ce(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function rh(e,t,a){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,a)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function D1(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Rd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+_v(e,t))}function _v(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 Mr(e,t,a){let n=ce(e,()=>t());if(n==null)throw new Error(a);return n}function Fv(e,t){let a=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,n=t+e.TEXTURE0;if(na){let r=`[gl.TEXTURE0, gl.TEXTURE${a}]`;throw new Error(`textureUnit must be in ${r}.`)}}function ai(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function ni(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 Ed(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ai(e),...ni(e)]),t}function Dv(e,t=!1){let a=B().getNumber("WEBGL_MAX_TEXTURE_SIZE"),n=B().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");n===1/0&&B().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(n=a/2),t&&(a=a*2,n=n*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=a?s=[1,r]:e.length===2&&e[0]<=a&&e[1]<=a?s=e:e.length===3&&e[0]*e[1]<=a&&e[2]<=a?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=a&&e[1]*e[2]<=a?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=a&&e[3]<=a?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=a&&e[1]*e[2]*e[3]<=a&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>n&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=ai(e),l=2,u=2;e.length&&([l,u]=ni(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function Jc(e){return e%2===0}function Qd(e,t){if(e=e.slice(-2),t=t.slice(-2),v.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 a=e[e.length-1],n=t[t.length-1];if(a===n||Jc(a)&&Jc(n)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Jc(e[0])&&Jc(t[0])}var sh,ih;function Ov(e){if(sh==null){let t=Wn(e);sh=t.getParameter(t.MAX_TEXTURE_SIZE)}return sh}function FG(){sh=null}function DG(){ih=null}function zv(e){if(ih==null){let t=Wn(e);ih=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,ih)}function Lv(e){if(e===0)return 0;let t,a=Wn(e);return fn(a,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:fn(a,"EXT_disjoint_timer_query")?t=1:t=0,t}function fn(e,t){return e.getExtension(t)!=null}function O1(e){try{if(Wn(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function Wv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float"))return!1}else if(!fn(t,"EXT_color_buffer_float"))return!1;return z1(t)}function Bv(e){if(e===0)return!1;let t=Wn(e);if(e===1){if(!fn(t,"OES_texture_float")||!fn(t,"WEBGL_color_buffer_float"))return!1}else{if(fn(t,"EXT_color_buffer_float"))return z1(t);let a="EXT_color_buffer_half_float";if(fn(t,a)){let n=t.getExtension(a);return OG(t,n)}return!1}return z1(t)}function z1(e){let t=T3(e),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let n=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,n),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let r=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(n),r}function OG(e,t){let a=T3(e,t),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,a.internalFormatHalfFloat,1,1,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),s}function Vv(e){return e!==2?!1:Wn(e).fenceSync!=null}function ju(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var Se=B();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>O1(2)?2:O1(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>Ov(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>zv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:Lv(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!_p.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>Wv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>Bv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>Vv(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>_p.isMobile()?1:-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${e}.`);if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Ra(){let e,t,a,n,r,s,i,o,l,u;return B().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",a="out",n="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=B().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:e,attribute:t,varyingVs:a,varyingFs:n,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function dl(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / ${r}`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function d0(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / outShapeStrides[${s}]`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function TH(e,t){let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}function CH(e,t,a="index"){let n=e.map((s,i)=>i),r=TH(n,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${a} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${a} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function z3(e){let t=v.computeStrides(e).map(a=>a.toString());return` + `),{version:e,attribute:t,varyingVs:a,varyingFs:n,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function nl(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / ${r}`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function r0(e,t,a="index"){let n=v.computeStrides(t);return n.map((r,s)=>{let i=`int ${e[s]} = ${a} / outShapeStrides[${s}]`,o=s===n.length-1?`int ${e[s+1]} = ${a} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function zG(e,t){let a=e.length,n=e.map(s=>`${t}[${s}]`),r=new Array(a-1);r[a-2]=n[a-1];for(let s=a-3;s>=0;--s)r[s]=`(${r[s+1]} * ${n[s+1]})`;return r}function LG(e,t,a="index"){let n=e.map((s,i)=>i),r=zG(n,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${a} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${a} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function R3(e){let t=v.computeStrides(e).map(a=>a.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } -`}function L3(){return` +`}function E3(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var iw=` +`}var Uv=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -147,22 +147,22 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return c / 255.0; } -`,{getBroadcastDims:ow}=I;function NH(e,t,a){let n=[];if(e.forEach(p=>{let h=v.sizeFromShape(p.shapeInfo.logicalShape);if(p.shapeInfo.isUniform?n.push(`uniform float ${p.name}${h>1?`[${h}]`:""};`):(n.push(`uniform sampler2D ${p.name};`),n.push(`uniform int offset${p.name};`)),a.enableShapeUniforms){let{uniformShape:m}=W3(a.packedInputs,p.shapeInfo.logicalShape,p.shapeInfo.texShape);switch(m.length){case 1:n.push(`uniform int ${p.name}Shape;`);break;case 2:n.push(`uniform ivec2 ${p.name}Shape;`);break;case 3:n.push(`uniform ivec3 ${p.name}Shape;`);break;case 4:n.push(`uniform ivec4 ${p.name}Shape;`);break;default:break}n.push(`uniform ivec2 ${p.name}TexShape;`)}}),a.enableShapeUniforms){switch(t.logicalShape.length){case 1:n.push("uniform int outShape;");break;case 2:n.push("uniform ivec2 outShape;"),n.push("uniform int outShapeStrides;");break;case 3:n.push("uniform ivec3 outShape;"),n.push("uniform ivec2 outShapeStrides;");break;case 4:n.push("uniform ivec4 outShape;"),n.push("uniform ivec3 outShapeStrides;");break;default:break}n.push("uniform ivec2 outTexShape;")}a.customUniforms&&a.customUniforms.forEach(p=>{n.push(`uniform ${p.type} ${p.name}${p.arrayIndex?`[${p.arrayIndex}]`:""};`)});let r=n.join(` -`),s=e.map(p=>RH(p,t,a.packedInputs,a.enableShapeUniforms)).join(` -`),i=t.texShape,o=Ra(),l=FH(o),u,d,c=PH(o);return t.isPacked?(u=EH(t.logicalShape,i,a.enableShapeUniforms),d=DH(o)):(u=MH(t.logicalShape,i,a.enableShapeUniforms),d=$H(o)),a.packedInputs&&(c+=LH),[c,l,d,r,u,s,a.userCode].join(` -`)}function Qu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return ZH(e,t);case 1:return QH(e,t);case 2:return tj(e,t);case 3:return nj(e,t);case 4:return sj(e,t);case 5:return ij(e);case 6:return oj(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function lw(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return YH(e);case 1:return JH(e,t);case 2:return ej(e,t);case 3:return aj(e,t);default:return rj(e,t)}}function RH(e,t,a=!1,n){let r="";a?r+=lw(e,n):r+=Qu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=lj(e,t):r+=uj(e,t)),r}function EH(e,t,a){switch(e.length){case 0:return uw();case 1:return WH(e,t,a);case 2:return XH(e,t,a);case 3:return VH(e,t,a);default:return GH(e,t,a)}}function MH(e,t,a){switch(e.length){case 0:return uw();case 1:return BH(e,t,a);case 2:return KH(e,t,a);case 3:return UH(e,t,a);case 4:return HH(e,t,a);case 5:return jH(e,t);case 6:return qH(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function FH(e){return` +`,{getBroadcastDims:Gv}=C;function WG(e,t,a){let n=[];if(e.forEach(d=>{let h=v.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?n.push(`uniform float ${d.name}${h>1?`[${h}]`:""};`):(n.push(`uniform sampler2D ${d.name};`),n.push(`uniform int offset${d.name};`)),a.enableShapeUniforms){let{uniformShape:m}=M3(a.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(m.length){case 1:n.push(`uniform int ${d.name}Shape;`);break;case 2:n.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:n.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:n.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}n.push(`uniform ivec2 ${d.name}TexShape;`)}}),a.enableShapeUniforms){switch(t.logicalShape.length){case 1:n.push("uniform int outShape;");break;case 2:n.push("uniform ivec2 outShape;"),n.push("uniform int outShapeStrides;");break;case 3:n.push("uniform ivec3 outShape;"),n.push("uniform ivec2 outShapeStrides;");break;case 4:n.push("uniform ivec4 outShape;"),n.push("uniform ivec3 outShapeStrides;");break;default:break}n.push("uniform ivec2 outTexShape;")}a.customUniforms&&a.customUniforms.forEach(d=>{n.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let r=n.join(` +`),s=e.map(d=>BG(d,t,a.packedInputs,a.enableShapeUniforms)).join(` +`),i=t.texShape,o=Ra(),l=GG(o),u,p,c=qG(o);return t.isPacked?(u=VG(t.logicalShape,i,a.enableShapeUniforms),p=jG(o)):(u=UG(t.logicalShape,i,a.enableShapeUniforms),p=HG(o)),a.packedInputs&&(c+=ZG),[c,l,p,r,u,s,a.userCode].join(` +`)}function qu(e,t=!1){let a=e.shapeInfo.logicalShape;switch(a.length){case 0:return uH(e,t);case 1:return pH(e,t);case 2:return hH(e,t);case 3:return fH(e,t);case 4:return yH(e,t);case 5:return xH(e);case 6:return AH(e);default:throw new Error(`${a.length}-D input sampling is not yet supported`)}}function Hv(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return lH(e);case 1:return dH(e,t);case 2:return cH(e,t);case 3:return mH(e,t);default:return gH(e,t)}}function BG(e,t,a=!1,n){let r="";a?r+=Hv(e,n):r+=qu(e,n);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a?r+=bH(e,t):r+=vH(e,t)),r}function VG(e,t,a){switch(e.length){case 0:return jv();case 1:return JG(e,t,a);case 2:return iH(e,t,a);case 3:return eH(e,t,a);default:return aH(e,t,a)}}function UG(e,t,a){switch(e.length){case 0:return jv();case 1:return QG(e,t,a);case 2:return oH(e,t,a);case 3:return tH(e,t,a);case 4:return nH(e,t,a);case 5:return rH(e,t);case 6:return sH(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function GG(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } - `}function $H(e){return` + `}function HG(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } - `}function DH(e){return` + `}function jG(e){return` void setOutput(vec4 val) { ${e.output} = val; } - `}function PH(e){return`${e.version} + `}function qG(e){return`${e.version} precision highp float; precision highp int; precision highp sampler2D; @@ -217,10 +217,10 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return fract((p3.x + p3.y) * p3.z); } - ${_H} - ${OH} - ${zH} - `}var _H=` + ${XG} + ${KG} + ${YG} + `}var XG=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -232,7 +232,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,OH=` +`,KG=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -240,7 +240,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,zH=` +`,YG=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -249,7 +249,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,LH=` +`,ZG=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -260,11 +260,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } -`;function uw(){return` +`;function jv(){return` int getOutputCoords() { return 0; } - `}function WH(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` + `}function JG(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?a?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } @@ -293,7 +293,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${n[0]}, ${n[1]})); return 2 * (resTexRC.x * ${n[1]} + resTexRC.y); } - `}function BH(e,t,a){return t[0]===1?a?` + `}function QG(e,t,a){return t[0]===1?a?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } @@ -321,7 +321,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${t[0]}, ${t[1]})); return resTexRC.x * ${t[1]} + resTexRC.y; } - `}function VH(e,t,a){if(a)return` + `}function eH(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); @@ -352,15 +352,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec3(b, r, c); } - `}function UH(e,t,a){if(a)return` + `}function tH(e,t,a){if(a)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${d0(["r","c","d"],e)} + ${r0(["r","c","d"],e)} return ivec3(r, c, d); } -`;let n=dl(["r","c","d"],e);return` +`;let n=nl(["r","c","d"],e);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec3(r, c, d); } - `}function GH(e,t,a){if(a)return` + `}function aH(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -409,15 +409,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec${e.length}(${l}); } - `}function HH(e,t,a){if(a)return` + `}function nH(e,t,a){if(a)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${d0(["r","c","d","d2"],e)} + ${r0(["r","c","d","d2"],e)} return ivec4(r, c, d, d2); } - `;let n=dl(["r","c","d","d2"],e);return` + `;let n=nl(["r","c","d","d2"],e);return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${n} return ivec4(r, c, d, d2); } - `}function jH(e,t){let a=dl(["r","c","d","d2","d3"],e);return` + `}function rH(e,t){let a=nl(["r","c","d","d2","d3"],e);return` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -437,7 +437,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec5 outShape = ivec5(r, c, d, d2, d3); return outShape; } - `}function qH(e,t){let a=dl(["r","c","d","d2","d3","d4"],e);return` + `}function sH(e,t){let a=nl(["r","c","d","d2","d3","d4"],e);return` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]})); @@ -448,7 +448,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec6 result = ivec6(r, c, d, d2, d3, d4); return result; } - `}function XH(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` + `}function iH(e,t,a){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return a?` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); @@ -481,7 +481,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec2(r, c); } - `}function KH(e,t,a){return v.arraysEqual(e,t)?a?` + `}function oH(e,t,a){return v.arraysEqual(e,t)?a?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,15 +535,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${e[1]}; return ivec2(r, c); } - `}function pl(e){return`offset${e}`}function YH(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ra();return` + `}function rl(e){return`offset${e}`}function lH(e){let t=e.name,a="get"+t.charAt(0).toUpperCase()+t.slice(1),n=Ra();return` vec4 ${a}() { return ${n.texture2D}(${t}, halfCR); } - `}function ZH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${a};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return` + `}function uH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${a};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return` float ${n}() { return sampleTexture(${a}, halfCR); } - `;let i=pl(a);if(t)return` + `;let i=rl(a);if(t)return` float ${n}() { vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], ${i}); return sampleTexture(${a}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${o}, ${l}, ${i}); return sampleTexture(${a}, uv); } - `}function JH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ra();if(t)return` + `}function dH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1),r=e.shapeInfo.texShape,s=Ra();if(t)return` vec4 ${n}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -566,15 +566,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i[0]}, ${i[1]}, index); return ${s.texture2D}(${a}, uv); } - `}function QH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` + `}function pH(e,t){let a=e.name,n="get"+a.charAt(0).toUpperCase()+a.slice(1);if(e.shapeInfo.isUniform)return` float ${n}(int index) { - ${ed(e)} + ${Xu(e)} } `;let r=e.shapeInfo.texShape,s=r[0],i=r[1];if(i===1&&s===1)return` float ${n}(int index) { return sampleTexture(${a}, halfCR); } - `;let o=pl(a);return i===1?t?` + `;let o=rl(a);return i===1?t?` float ${n}(int index) { vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${a}TexShape[0])); return sampleTexture(${a}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${i}, index + ${o}); return sampleTexture(${a}, uv); } - `}function ej(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=Ra();if(s!=null&&v.arraysEqual(a,s))return t?` + `}function cH(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=Ra();if(s!=null&&v.arraysEqual(a,s))return t?` vec4 ${r}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]); @@ -623,32 +623,32 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col); return ${l.texture2D}(${n}, uv); } - `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],d=Math.ceil(a[1]/2);return` + `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],p=Math.ceil(a[1]/2);return` vec4 ${r}(int row, int col) { - vec2 uv = packedUVfrom2D(${d}, ${u[0]}, ${u[1]}, row, col); + vec2 uv = packedUVfrom2D(${p}, ${u[0]}, ${u[1]}, row, col); return ${l.texture2D}(${n}, uv); } - `}function tj(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape;if(s!=null&&v.arraysEqual(a,s)){if(t)return` + `}function hH(e,t){let a=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape;if(s!=null&&v.arraysEqual(a,s)){if(t)return` float ${r}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${n}TexShape[1], ${n}TexShape[0]); return sampleTexture(${n}, uv); } - `;let p=s[0],h=s[1];return` + `;let d=s[0],h=s[1];return` float ${r}(int row, int col) { - vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${p}.0); + vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${d}.0); return sampleTexture(${n}, uv); } - `}let{newShape:i,keptDims:o}=v.squeezeShape(a),l=i;if(l.length=1?d="coords = 0;":d=o.map(g=>`coords.${c[g+u]} = 0;`).join(` -`);let p="";i<2&&s>0?p="coords":p=e.shapeInfo.logicalShape.map((g,y)=>`coords.${c[y+u]}`).join(", ");let h="return outputValue;",m=v.sizeFromShape(e.shapeInfo.logicalShape)===1,f=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!m&&!f)h=` + `}function bH(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=Gv(e.shapeInfo.logicalShape,t.logicalShape),l=ft(i),u=i-s,p,c=["x","y","z","w","u","v"];s===0?p="":i<2&&o.length>=1?p="coords = 0;":p=o.map(g=>`coords.${c[g+u]} = 0;`).join(` +`);let d="";i<2&&s>0?d="coords":d=e.shapeInfo.logicalShape.map((g,y)=>`coords.${c[y+u]}`).join(", ");let h="return outputValue;",m=v.sizeFromShape(e.shapeInfo.logicalShape)===1,f=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!m&&!f)h=` return vec4(outputValue.xy, outputValue.xy); `;else if(m&&!f)i===1?h=` return vec4(outputValue.x, outputValue.x, 0., 0.); @@ -961,24 +961,24 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, `;else if(o.length){let g=s-2,y=s-1;o.indexOf(g)>-1&&o.indexOf(y)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${r}() { ${l} coords = getOutputCoords(); - ${d} - vec4 outputValue = get${n}(${p}); + ${p} + vec4 outputValue = get${n}(${d}); ${h} } - `}function uj(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"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&&v.arraysEqual(i,s))return` + `}function vH(e,t){let a=e.name,n=a.charAt(0).toUpperCase()+a.slice(1),r="get"+n+"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&&v.arraysEqual(i,s))return` float ${r}() { return sampleTexture(${a}, resultUV); } - `;let u=ft(l),d=ow(e.shapeInfo.logicalShape,t.logicalShape),c=l-o,p,h=["x","y","z","w","u","v"];o===0?p="":l<2&&d.length>=1?p="coords = 0;":p=d.map(f=>`coords.${h[f+c]} = 0;`).join(` + `;let u=ft(l),p=Gv(e.shapeInfo.logicalShape,t.logicalShape),c=l-o,d,h=["x","y","z","w","u","v"];o===0?d="":l<2&&p.length>=1?d="coords = 0;":d=p.map(f=>`coords.${h[f+c]} = 0;`).join(` `);let m="";return l<2&&o>0?m="coords":m=e.shapeInfo.logicalShape.map((f,g)=>`coords.${h[g+c]}`).join(", "),` float ${r}() { ${u} coords = getOutputCoords(); - ${p} + ${d} return get${n}(${m}); } - `}function ft(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 W3(e,t,a){let{newShape:n,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):n,l=!e&&s>1&&!v.arraysEqual(t,a)&&n.lengthe[a]).join(", ")}function dj(e,t,a,n){let r=a.map((d,c)=>{let p={logicalShape:d.shape,texShape:d.isUniform?null:d.texData.texShape,isUniform:d.isUniform,isPacked:d.isUniform?!1:d.texData.isPacked,flatOffset:null};return d.texData!=null&&d.texData.slice!=null&&d.texData.slice.flatOffset>0&&(p.flatOffset=d.texData.slice.flatOffset),{name:t.variableNames[c],shapeInfo:p}}),s=r.map(d=>d.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},o=NH(r,i,t),l=Lv(e.gl,o),u=e.createProgram(l);return B().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(u),Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},dw(e,t,u)))}function dw(e,t,a){let n=[],r=[],s,i,o,l=null,u=null;u=e.getUniformLocation(a,"NAN",!1),B().getNumber("WEBGL_VERSION")===1&&(l=e.getUniformLocation(a,"INFINITY",!1));let d=!1;for(let c of t.variableNames){let p={name:c,uniform:e.getUniformLocation(a,c,d),offset:e.getUniformLocation(a,`offset${c}`,d)};t.enableShapeUniforms&&(p.shape=e.getUniformLocation(a,`${c}Shape`,d),p.texShape=e.getUniformLocation(a,`${c}TexShape`,d)),n.push(p)}if(t.enableShapeUniforms&&(s=e.getUniformLocation(a,"outShape",d),o=e.getUniformLocation(a,"outShapeStrides",d),i=e.getUniformLocation(a,"outTexShape",d)),t.customUniforms)for(let c of t.customUniforms)r.push(e.getUniformLocation(a,c.name,d));return{variablesLocations:n,customUniformLocations:r,infLoc:l,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:o,outTexShapeLocation:i}}function _5(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((a,n)=>{let r=a.logicalShape,s=t[n],i=s.shape;if(!v.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(a.isUniform&&s.isUniform)return;let o=a.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function pj(e,t,a,n,r){t.program.enableShapeUniforms||(_5(t.inShapeInfos,a),_5([t.outShapeInfo],[n]));let s=n.texData.texture,i=n.texData.texShape;n.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),e.bindVertexArray(t.webGLProgram.vao),B().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN);for(let l=0;l{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:d,keptDims:c}=W3(e.packedInputs,i.shape,l),p="",h="",m="";if(d.length===1&&e.packedInputs){let w=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];p=`${w[0]>1}_${w[1]>1}`}else if(d.length===2&&!e.packedInputs)h=`${d[0]>1}_${d[1]>1}`;else if(d.length>2&&!e.packedInputs){let w=v.computeStrides(d);m=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let f=i.shape.length,g=d.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,x=I.getBroadcastDims(i.shape,a.shape),A=!e.packedInputs&&f===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||d.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${f}_${A}_${u?c:""}_${d.length}_${y}_${x}_${g}_${p}_${h}_${m}_${b}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;n+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+n+"_"+r+`${B().getNumber("WEBGL_VERSION")}`,s}function ga(e){return B().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var hj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=sp.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}function ft(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 M3(e,t,a){let{newShape:n,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):n,l=!e&&s>1&&!v.arraysEqual(t,a)&&n.lengthe[a]).join(", ")}function wH(e,t,a,n){let r=a.map((p,c)=>{let d={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&&(d.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[c],shapeInfo:d}}),s=r.map(p=>p.shapeInfo),i={logicalShape:n.shape,texShape:n.texData.texShape,isUniform:!1,isPacked:n.texData.isPacked,flatOffset:null},o=WG(r,i,t),l=wv(e.gl,o),u=e.createProgram(l);return B().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(u),Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},qv(e,t,u)))}function qv(e,t,a){let n=[],r=[],s,i,o,l=null,u=null;u=e.getUniformLocation(a,"NAN",!1),B().getNumber("WEBGL_VERSION")===1&&(l=e.getUniformLocation(a,"INFINITY",!1));let p=!1;for(let c of t.variableNames){let d={name:c,uniform:e.getUniformLocation(a,c,p),offset:e.getUniformLocation(a,`offset${c}`,p)};t.enableShapeUniforms&&(d.shape=e.getUniformLocation(a,`${c}Shape`,p),d.texShape=e.getUniformLocation(a,`${c}TexShape`,p)),n.push(d)}if(t.enableShapeUniforms&&(s=e.getUniformLocation(a,"outShape",p),o=e.getUniformLocation(a,"outShapeStrides",p),i=e.getUniformLocation(a,"outTexShape",p)),t.customUniforms)for(let c of t.customUniforms)r.push(e.getUniformLocation(a,c.name,p));return{variablesLocations:n,customUniformLocations:r,infLoc:l,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:o,outTexShapeLocation:i}}function I5(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((a,n)=>{let r=a.logicalShape,s=t[n],i=s.shape;if(!v.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(a.isUniform&&s.isUniform)return;let o=a.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function kH(e,t,a,n,r){t.program.enableShapeUniforms||(I5(t.inShapeInfos,a),I5([t.outShapeInfo],[n]));let s=n.texData.texture,i=n.texData.texShape;n.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),e.bindVertexArray(t.webGLProgram.vao),B().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN);for(let l=0;l{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:p,keptDims:c}=M3(e.packedInputs,i.shape,l),d="",h="",m="";if(p.length===1&&e.packedInputs){let w=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];d=`${w[0]>1}_${w[1]>1}`}else if(p.length===2&&!e.packedInputs)h=`${p[0]>1}_${p[1]>1}`;else if(p.length>2&&!e.packedInputs){let w=v.computeStrides(p);m=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let f=i.shape.length,g=p.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,x=C.getBroadcastDims(i.shape,a.shape),A=!e.packedInputs&&f===a.shape.length&&v.arraysEqual(l,a.texData.texShape),b=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;n+=`${f}_${A}_${u?c:""}_${p.length}_${y}_${x}_${g}_${d}_${h}_${m}_${b}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;n+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+n+"_"+r+`${B().getNumber("WEBGL_VERSION")}`,s}function ga(e){return B().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var SH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?d0(["r","c","d"],e):dl(["r","c","d"],e)} + ${this.enableShapeUniforms?r0(["r","c","d"],e):nl(["r","c","d"],e)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},mj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=sp.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}},CH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Jd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?d0(["r","c","d"],e):dl(["r","c","d"],e)} + ${this.enableShapeUniforms?r0(["r","c","d"],e):nl(["r","c","d"],e)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}},fj=class{constructor(e){this.variableNames=["A"],this.outTexUsage=gn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` - ${iw} + `}},TH=class{constructor(e){this.variableNames=["A"],this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Uv} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}},gj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=gn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` - ${iw} + `}},NH=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mn.DOWNLOAD;let t=Ra();this.outputShape=e,this.userCode=` + ${Uv} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}},yj={R:0,G:1,B:2,A:3},O5=class{constructor(e,t=!1,a="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Ra();this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)");let s="";for(let i=0;ibw,createBufferFromOutputTexture:()=>kw,createFloat16MatrixTexture:()=>gw,createFloat16PackedMatrixTexture:()=>Aw,createFloat32MatrixTexture:()=>fw,createIndexBuffer:()=>mw,createPackedMatrixTexture:()=>xw,createUnsignedBytesMatrixTexture:()=>yw,createVertexBuffer:()=>hw,createVertexShader:()=>cw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Sw,downloadFloat32MatrixFromBuffer:()=>Iw,downloadMatrixFromPackedOutputTexture:()=>Cw,downloadPackedMatrixFromBuffer:()=>Tw,getInternalFormatForFloat16MatrixTexture:()=>V3,getInternalFormatForFloat16PackedMatrixTexture:()=>H3,getInternalFormatForFloat32MatrixTexture:()=>B3,getInternalFormatForPackedMatrixTexture:()=>G3,getInternalFormatForUnsignedBytesMatrixTexture:()=>U3,uploadDenseMatrixToTexture:()=>vw,uploadPixelDataToTexture:()=>ww});function cw(e){let t=Ra(),a=`${t.version} + `}},Xv={};Ze(Xv,{bindVertexProgramAttributeStreams:()=>n8,createBufferFromOutputTexture:()=>i8,createFloat16MatrixTexture:()=>Qv,createFloat16PackedMatrixTexture:()=>a8,createFloat32MatrixTexture:()=>Jv,createIndexBuffer:()=>Zv,createPackedMatrixTexture:()=>t8,createUnsignedBytesMatrixTexture:()=>e8,createVertexBuffer:()=>Yv,createVertexShader:()=>Kv,downloadByteEncodedFloatMatrixFromOutputTexture:()=>l8,downloadFloat32MatrixFromBuffer:()=>o8,downloadMatrixFromPackedOutputTexture:()=>d8,downloadPackedMatrixFromBuffer:()=>u8,getInternalFormatForFloat16MatrixTexture:()=>P3,getInternalFormatForFloat16PackedMatrixTexture:()=>D3,getInternalFormatForFloat32MatrixTexture:()=>$3,getInternalFormatForPackedMatrixTexture:()=>F3,getInternalFormatForUnsignedBytesMatrixTexture:()=>_3,uploadDenseMatrixToTexture:()=>r8,uploadPixelDataToTexture:()=>s8});function Kv(e){let t=Ra(),a=`${t.version} precision highp float; ${t.attribute} vec3 clipSpacePos; ${t.attribute} vec2 uv; @@ -1107,7 +1107,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return zv(e,a)}function hw(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 Vv(e,t)}function mw(e){let t=new Uint16Array([0,1,2,2,1,3]);return Uv(e,t)}function nc(e,t,a,n,r,s){Hv(t,a);let i=Gv(e),o=e.TEXTURE_2D;return ce(e,()=>e.bindTexture(o,i)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),B().getNumber("WEBGL_VERSION")===1?ce(e,()=>e.texImage2D(o,0,n,t,a,0,r,s,null)):ce(e,()=>e.texStorage2D(o,1,n,t,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[a,t]}}function B3(e){return e.internalFormatFloat}function fw(e,t,a,n){let[r,s]=ac(t,a);return nc(e,r,s,B3(n),n.textureFormatFloat,e.FLOAT)}function V3(e){return e.internalFormatHalfFloat}function gw(e,t,a,n){let[r,s]=ac(t,a);return nc(e,r,s,V3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function U3(e){return e.downloadTextureFormat}function yw(e,t,a,n){let[r,s]=ac(t,a);return nc(e,r,s,U3(n),e.RGBA,e.UNSIGNED_BYTE)}function G3(e){return e.internalFormatPackedFloat}function xw(e,t,a,n){let[r,s]=Zu(t,a);return nc(e,r,s,G3(n),e.RGBA,e.FLOAT)}function H3(e){return e.internalFormatPackedHalfFloat}function Aw(e,t,a,n){let[r,s]=Zu(t,a);return nc(e,r,s,H3(n),e.RGBA,n.textureTypeHalfFloat)}function bw(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),B1(e,t,"clipSpacePos",a,3,20,0)&&B1(e,t,"uv",a,2,20,12)}function vw(e,t,a,n,r,s){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(a*n*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(a*n*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a,n,e.RGBA,o,i)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,a,n,0,e.RGBA,o,i)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function ww(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a.width,a.height,e.RGBA,e.UNSIGNED_BYTE,a.data)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,a.width,a.height,0,e.RGBA,e.UNSIGNED_BYTE,a.data)):B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,a)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function kw(e,t,a,n){let r=e.createBuffer();ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*a;return ce(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,0)),ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function Iw(e,t,a){let n=e,r=new Float32Array(a);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,r),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),r}function Sw(e,t,a,n){let[r,s]=ac(t,a),i=4,o=new Uint8Array(mH(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function Tw(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(fH(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function Cw(e,t,a){let n=new Float32Array(t*a*4);return ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,n)),n}var Yl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=B().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,u0(t,e)):this.gl=Un(t),e=this.gl,B().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ce(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ce(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ce(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ce(r,()=>r.getParameter(r.VERTEX_ARRAY_BINDING))}else if(e!=null){let r=e.getExtension("OES_vertex_array_object");if(r==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ce(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ce(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ce(e,()=>e.getParameter(r.VERTEX_ARRAY_BINDING_OES))}let a="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),B().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Dd(this.gl,r),yn(this.gl,s))this.textureHalfFloatExtension=Dd(this.gl,s);else if(B().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(a),yn(this.gl,n))this.colorBufferHalfFloatExtension=Dd(this.gl,n);else if(B().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(a="EXT_color_buffer_float",yn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(yn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=hw(this.gl),this.indexBuffer=mw(this.gl),this.framebuffer=jv(this.gl),this.textureConfig=_3(this.gl,this.textureHalfFloatExtension)}get debug(){return B().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),fw(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),gw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),yw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),ww(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),vw(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Aw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),xw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(V1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>Sw(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return Tw(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Iw(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=kw(this.gl,t,a,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,a;if(B().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),a=()=>{let s=n.clientWaitSync(r,0,0);return s===n.ALREADY_SIGNALED||s===n.CONDITION_SATISFIED},t=r}else B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>Cw(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=cw(t));let a=Wv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),Bv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&uh(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),bw(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&uh(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?Xv(this.gl,e,t):Kv(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,a){this.throwIfDisposed(),this.throwIfNoProgram(),Yv(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Zu(t,a);this.setOutputMatrixTextureDriver(e,n,r)}setOutputMatrixWriteRegion(e,t,a,n){this.setOutputMatrixWriteRegionDriver(a,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,a,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&uh(this.gl,this.program),Pd(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Dd(this.gl,B().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(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.createQuery();return a.beginQuery(n.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,a=this.getQueryTimerExtensionWebGL2();t.endQuery(a.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let a=this.gl;return a.getQueryParameter(e,a.QUERY_RESULT)/1e6}else{let a=this.getQueryTimerExtensionWebGL1();return a.getQueryObjectEXT(e,a.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.getQueryParameter(e,a.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let a=this.getQueryTimerExtensionWebGL1(),n=a.getQueryObjectEXT(e,a.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=Aj(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:a}=this.itemsToPoll[t];a()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let a;"setTimeoutCustom"in B().platform&&(a=B().platform.setTimeoutCustom.bind(B().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),dh(this.gl,e,this.framebuffer),this.debug&&Pd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(dh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Pd(this.gl)):V1(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let a=t();return this.unbindTextureToFrameBuffer(),a}setOutputMatrixTextureDriver(e,t,a){this.throwIfDisposed();let n=this.gl;dh(n,e,this.framebuffer),this.debug&&Pd(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,a)),ce(n,()=>n.scissor(0,0,t,a))}setOutputMatrixWriteRegionDriver(e,t,a,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,a,n))}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 Aj(e){let t=0;for(;t`${e}.${a}`)}function ka(e,t){return t===1?[e]:Mw(e,t)}function pq(e,t){if(e===1)return"rc";let a="";for(let n=0;ne.bindTexture(o,i)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),B().getNumber("WEBGL_VERSION")===1?ce(e,()=>e.texImage2D(o,0,n,t,a,0,r,s,null)):ce(e,()=>e.texStorage2D(o,1,n,t,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[a,t]}}function $3(e){return e.internalFormatFloat}function Jv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,$3(n),n.textureFormatFloat,e.FLOAT)}function P3(e){return e.internalFormatHalfFloat}function Qv(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,P3(n),n.textureFormatFloat,n.textureTypeHalfFloat)}function _3(e){return e.downloadTextureFormat}function e8(e,t,a,n){let[r,s]=Yp(t,a);return Zp(e,r,s,_3(n),e.RGBA,e.UNSIGNED_BYTE)}function F3(e){return e.internalFormatPackedFloat}function t8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,F3(n),e.RGBA,e.FLOAT)}function D3(e){return e.internalFormatPackedHalfFloat}function a8(e,t,a,n){let[r,s]=Hu(t,a);return Zp(e,r,s,D3(n),e.RGBA,n.textureTypeHalfFloat)}function n8(e,t,a){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),F1(e,t,"clipSpacePos",a,3,20,0)&&F1(e,t,"uv",a,2,20,12)}function r8(e,t,a,n,r,s){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(a*n*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(a*n*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a,n,e.RGBA,o,i)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,a,n,0,e.RGBA,o,i)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function s8(e,t,a){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),a.data instanceof Uint8Array?B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,a.width,a.height,e.RGBA,e.UNSIGNED_BYTE,a.data)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,a.width,a.height,0,e.RGBA,e.UNSIGNED_BYTE,a.data)):B().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,a)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function i8(e,t,a,n){let r=e.createBuffer();ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*a;return ce(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,0)),ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function o8(e,t,a){let n=e,r=new Float32Array(a);return n.bindBuffer(n.PIXEL_PACK_BUFFER,t),n.getBufferSubData(n.PIXEL_PACK_BUFFER,0,r),n.bindBuffer(n.PIXEL_PACK_BUFFER,null),r}function l8(e,t,a,n){let[r,s]=Yp(t,a),i=4,o=new Uint8Array(CG(t*a,i));return ce(e,()=>e.readPixels(0,0,r,s,n.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function u8(e,t,a,n,r,s,i,o){let l=e,u=new Float32Array(TG(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function d8(e,t,a){let n=new Float32Array(t*a*4);return ce(e,()=>e.readPixels(0,0,a,t,e.RGBA,e.FLOAT,n)),n}var Gl=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=B().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,n0(t,e)):this.gl=Wn(t),e=this.gl,B().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ce(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ce(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ce(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ce(r,()=>r.getParameter(r.VERTEX_ARRAY_BINDING))}else if(e!=null){let r=e.getExtension("OES_vertex_array_object");if(r==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ce(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ce(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ce(e,()=>e.getParameter(r.VERTEX_ARRAY_BINDING_OES))}let a="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),B().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Nd(this.gl,r),fn(this.gl,s))this.textureHalfFloatExtension=Nd(this.gl,s);else if(B().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(a),fn(this.gl,n))this.colorBufferHalfFloatExtension=Nd(this.gl,n);else if(B().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(a="EXT_color_buffer_float",fn(this.gl,a))this.colorBufferFloatExtension=this.gl.getExtension(a);else if(fn(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Yv(this.gl),this.indexBuffer=Zv(this.gl),this.framebuffer=Rv(this.gl),this.textureConfig=T3(this.gl,this.textureHalfFloatExtension)}get debug(){return B().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),Jv(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Qv(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),e8(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),s8(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,a,n){this.throwIfDisposed(),r8(this.gl,e,t,a,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),a8(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),t8(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(D1(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,a){return this.downloadMatrixDriver(e,()=>l8(this.gl,t,a,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,a,n,r,s){return u8(this.gl,e,t,a,n,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return o8(this.gl,e,t)}createBufferFromTexture(e,t,a){this.bindTextureToFrameBuffer(e);let n=i8(this.gl,t,a,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,a;if(B().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,r=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),a=()=>{let s=n.clientWaitSync(r,0,0);return s===n.ALREADY_SIGNALED||s===n.CONDITION_SATISFIED},t=r}else B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),a=()=>this.isQueryAvailable(t,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):a=()=>!0;return{query:t,isFencePassed:a}}downloadMatrixFromPackedTexture(e,t,a){return this.downloadMatrixDriver(e,()=>d8(this.gl,t,a))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=Kv(t));let a=kv(t);ce(t,()=>t.attachShader(a,this.vertexShader)),ce(t,()=>t.attachShader(a,e)),Iv(t,a);let n=Object.assign(a,{vao:this.createVertexArray()});return this.debug&&nh(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),n8(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&nh(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,a=!0){return this.throwIfDisposed(),a?Mv(this.gl,e,t):$v(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,a){this.throwIfDisposed(),this.throwIfNoProgram(),Pv(this.gl,e,t,a)}setOutputMatrixTexture(e,t,a){this.setOutputMatrixTextureDriver(e,a,t)}setOutputPackedMatrixTexture(e,t,a){this.throwIfDisposed();let[n,r]=Hu(t,a);this.setOutputMatrixTextureDriver(e,n,r)}setOutputMatrixWriteRegion(e,t,a,n){this.setOutputMatrixWriteRegionDriver(a,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,a,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&nh(this.gl,this.program),Rd(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Nd(this.gl,B().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(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.createQuery();return a.beginQuery(n.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,a=this.getQueryTimerExtensionWebGL2();t.endQuery(a.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let a=this.gl;return a.getQueryParameter(e,a.QUERY_RESULT)/1e6}else{let a=this.getQueryTimerExtensionWebGL1();return a.getQueryObjectEXT(e,a.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let a=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=a.getQueryParameter(e,a.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let a=this.getQueryTimerExtensionWebGL1(),n=a.getQueryObjectEXT(e,a.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=MH(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:a}=this.itemsToPoll[t];a()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let a;"setTimeoutCustom"in B().platform&&(a=B().platform.setTimeoutCustom.bind(B().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,a)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),rh(this.gl,e,this.framebuffer),this.debug&&Rd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(rh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Rd(this.gl)):D1(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let a=t();return this.unbindTextureToFrameBuffer(),a}setOutputMatrixTextureDriver(e,t,a){this.throwIfDisposed();let n=this.gl;rh(n,e,this.framebuffer),this.debug&&Rd(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,a)),ce(n,()=>n.scissor(0,0,t,a))}setOutputMatrixWriteRegionDriver(e,t,a,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,a,n))}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 MH(e){let t=0;for(;t`${e}.${a}`)}function ka(e,t){return t===1?[e]:m8(e,t)}function kj(e,t){if(e===1)return"rc";let a="";for(let n=0;n= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}), cEdge ? 0. : getA(${t[1]}), rEdge ? 0. : getA(${t[2]}), - rEdge || cEdge ? 0. : getA(${t[3]})`}},Fw=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let a="";for(let n=0;n<4;n++){let r="thisRC = rc;";n%2===1&&(r+="thisRC.z += 1;"),n>1&&(r+="thisRC.y += 1;"),a+=` + rEdge || cEdge ? 0. : getA(${t[3]})`}},f8=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let a="";for(let n=0;n<4;n++){let r="thisRC = rc;";n%2===1&&(r+="thisRC.z += 1;"),n>1&&(r+="thisRC.y += 1;"),a+=` ${r} ${n>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); @@ -1146,8 +1146,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${hq(t,this.enableShapeUniforms)} - ${this.enableShapeUniforms?L3():z3(e)} + ${Sj(t,this.enableShapeUniforms)} + ${this.enableShapeUniforms?E3():R3(e)} void main() { ivec3 rc = getOutputCoords(); @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function hq(e,t){return` + `}};function Sj(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${t?CH(["r","c","d"],"inputShape"):dl(["r","c","d"],e)} + ${t?LG(["r","c","d"],"inputShape"):nl(["r","c","d"],e)} return ivec3(r, c, d); } - `}var mq=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,a){let n=L5(t,a),r=W5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=z5(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,a);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].pop();return this.usedTextures[r].push(o),o}let i;return n===pa.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===pa.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===pa.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===pa.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===pa.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,a,n){if(this.freeTextures==null)return;let r=L5(a,n),s=W5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=z5(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=B().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l&&l.indexOf(e);if(u==null||u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l[u]=l[l.length-1],l.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function fq(e,t){let a=e;if(t===a.R32F)return 4;if(t===a.R16F)return 2;if(t===a.RGBA32F||t===e.RGBA)return 16;if(t===a.RGBA16F)return 8;if(t===a.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function z5(e,t,a,n,r){let s=gq(t,n),i;if(r){let[l,u]=Zu(e[0],e[1]);i=l*u}else{let[l,u]=ac(e[0],e[1]);i=l*u}let o=fq(a,s);return i*o}function gq(e,t){switch(e){case pa.PACKED_2X2_FLOAT32:return G3(t);case pa.PACKED_2X2_FLOAT16:return H3(t);case pa.UNPACKED_FLOAT32:return B3(t);case pa.UNPACKED_FLOAT16:return V3(t);case pa.PACKED_4X1_UNSIGNED_BYTE:return U3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function yq(e){return B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?pa.PACKED_2X2_FLOAT32:pa.UNPACKED_FLOAT32:e?pa.PACKED_2X2_FLOAT16:pa.UNPACKED_FLOAT16}function L5(e,t){if(e===gn.UPLOAD)return pa.PACKED_2X2_FLOAT32;if(e===gn.RENDER||e==null)return yq(t);if(e===gn.DOWNLOAD||e===gn.PIXELS)return pa.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function W5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Qn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` + `}var Cj=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,a){let n=T5(t,a),r=N5(e,n,a);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=C5(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,a);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].pop();return this.usedTextures[r].push(o),o}let i;return n===da.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===da.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===da.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===da.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,a,n){if(this.freeTextures==null)return;let r=T5(a,n),s=N5(t,r,n);s in this.freeTextures||(this.freeTextures[s]=[]);let i=C5(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,n),o=B().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l&&l.indexOf(e);if(u==null||u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l[u]=l[l.length-1],l.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function Tj(e,t){let a=e;if(t===a.R32F)return 4;if(t===a.R16F)return 2;if(t===a.RGBA32F||t===e.RGBA)return 16;if(t===a.RGBA16F)return 8;if(t===a.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function C5(e,t,a,n,r){let s=Nj(t,n),i;if(r){let[l,u]=Hu(e[0],e[1]);i=l*u}else{let[l,u]=Yp(e[0],e[1]);i=l*u}let o=Tj(a,s);return i*o}function Nj(e,t){switch(e){case da.PACKED_2X2_FLOAT32:return F3(t);case da.PACKED_2X2_FLOAT16:return D3(t);case da.UNPACKED_FLOAT32:return $3(t);case da.UNPACKED_FLOAT16:return P3(t);case da.PACKED_4X1_UNSIGNED_BYTE:return _3(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function Rj(e){return B().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?da.PACKED_2X2_FLOAT32:da.UNPACKED_FLOAT32:e?da.PACKED_2X2_FLOAT16:da.UNPACKED_FLOAT16}function T5(e,t){if(e===mn.UPLOAD)return da.PACKED_2X2_FLOAT32;if(e===mn.RENDER||e==null)return Rj(t);if(e===mn.DOWNLOAD||e===mn.PIXELS)return da.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function N5(e,t,a){return`${e[0]}_${e[1]}_${t}_${a}`}var Yn=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},$n="if (isnan(x)) return x;",xq="return x;",B5="return abs(x);",Aq="return (x >= 0.0) ? x : (exp(x) - 1.0);",bq=$n+` + `}},En="if (isnan(x)) return x;",Ej="return x;",R5="return abs(x);",Mj="return (x >= 0.0) ? x : (exp(x) - 1.0);",$j=En+` return (x < 0.0) ? 0.0 : x; -`,vq=$n+` +`,Pj=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,jr="return x;",wq="return 1.0 / (1.0 + exp(-1.0 * x));",kq="return x;",Iq=` +`,Br="return x;",_j="return 1.0 / (1.0 + exp(-1.0 * x));",Fj="return x;",Dj=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -1191,7 +1191,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,Sq=` +`,Oj=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1201,7 +1201,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,Tq=` +`,zj=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1211,7 +1211,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,Cq="return 1.0 / (1.0 + exp(-1.0 * x));",Zr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` +`,Lj="return 1.0 / (1.0 + exp(-1.0 * x));",jr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } @@ -1222,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Nq=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.length,a=ka("rc",t),n=ft(t),r=pq(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` + `}},Wj=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.length,a=ka("rc",t),n=ft(t),r=kj(t,a),s=a.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=` void main() { ${n} rc = getOutputCoords(); vec4 packedInput = getA(${r}); setOutput(getChannel(packedInput, ${i})); } - `}},Rq=Fn.whereImpl,Eq=1e-7,Mq=1e-4,r1={};function Fq(e){return e in r1||(r1[e]={}),r1[e]}var $q=B().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),Dq=600;function Pq(){return B().global.screen==null?1024:B().global.screen.height*B().global.screen.width*window.devicePixelRatio*Dq/1024/1024}var rc=class $w extends du{nextDataId(){return $w.nextDataId++}constructor(t){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!B().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let a;if(t!=null){if(t instanceof Yl)a=t;else{let n=Un(B().getNumber("WEBGL_VERSION"),t);a=new Yl(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Un(B().getNumber("WEBGL_VERSION"));a=new Yl(n),this.binaryCache=Fq(B().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=a,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new mq(this.gpgpu),this.numMBBeforeWarning=Pq(),this.texData=new hp(this,St())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,a,n,r,s,i){let o=this.makeTensorInfo(a,n),l=this.texData.get(o.dataId);l.isPacked=!1,l.texture={texture:t,texShape:[r,s]},l.texShape=[r,s];let u=_d(a),d=new O5(u,!1,i),c=this.runWebGLProgram(d,[o],n,[[r,s]]);return c.shape=a,l.texture=null,this.disposeIntermediateTensorInfo(o),c.dataId}write(t,a,n){if((B().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||B().getBool("DEBUG"))&&this.checkNumericalProblems(t),n==="complex64"&&t!=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:a,dtype:n,values:t,usage:gn.UPLOAD,refCount:1}),r}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let a=this.texData.get(t);a.refCount++}decRef(t){if(this.texData.has(t)){let a=this.texData.get(t);a.refCount--}}move(t,a,n,r,s){if(B().getBool("DEBUG")&&this.checkNumericalProblems(a),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:r,values:a,usage:gn.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let a=this.texData.get(t),{values:n,dtype:r,complexTensorInfos:s,slice:i,shape:o,isPacked:l}=a;if(i!=null){let p;l?p=new Zr(o,jr):p=new Qn(o,jr);let h=this.runWebGLProgram(p,[{dataId:t,shape:o,dtype:r}],r),m=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),m}if(n!=null)return this.convertAndCacheOnCPU(t);if(r==="string")return n;let u=this.activeTimers!=null,d;u&&(d=v.now());let c;if(r==="complex64"){let p=this.readSync(s.real.dataId),h=this.readSync(s.imag.dataId);c=I.mergeRealAndImagArrays(p,h)}else c=this.getValuesFromTexture(t);return u&&(this.downloadWaitMs+=v.now()-d),this.convertAndCacheOnCPU(t,c)}async read(t){if(this.pendingRead.has(t)){let m=this.pendingRead.get(t);return new Promise(f=>m.push(f))}let a=this.texData.get(t),{values:n,shape:r,slice:s,dtype:i,complexTensorInfos:o,isPacked:l}=a;if(s!=null){let m;l?m=new Zr(r,jr):m=new Qn(r,jr);let f=this.runWebGLProgram(m,[{dataId:t,shape:r,dtype:i}],i),g=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),g}if(n!=null)return this.convertAndCacheOnCPU(t);if(B().getBool("DEBUG")&&!B().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&B().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,d;if(i!=="complex64"&&B().get("WEBGL_BUFFER_SUPPORTED")){d=this.decode(t);let m=this.texData.get(d.dataId);u=this.gpgpu.createBufferFromTexture(m.texture.texture,...nh(r))}this.pendingRead.set(t,[]),i!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(i==="complex64"){let m=await Promise.all([this.read(o.real.dataId),this.read(o.imag.dataId)]),f=m[0],g=m[1];c=I.mergeRealAndImagArrays(f,g)}else if(u==null)c=this.getValuesFromTexture(t);else{let m=v.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,m)}if(d!=null&&this.disposeIntermediateTensorInfo(d),u!=null){let m=this.gpgpu.gl;ce(m,()=>m.deleteBuffer(u))}let p=this.convertAndCacheOnCPU(t,c),h=this.pendingRead.get(t);return this.pendingRead.delete(t),h.forEach(m=>m(p)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&St().removeDataId(t,this),this.pendingDeletes--),p}readToGPU(t,a={}){let n=this.texData.get(t),{values:r,shape:s,slice:i,dtype:o,isPacked:l,texture:u}=n;if(o==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(i!=null){let h;l?h=new Zr(s,jr):h=new Qn(s,jr);let m=this.runWebGLProgram(h,[{dataId:t,shape:s,dtype:o}],o),f=this.readToGPU(m,a);return this.disposeIntermediateTensorInfo(m),f}if(u==null)throw r!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let d=this.decode(t,a.customTexShape),c=St().makeTensorFromTensorInfo(d),p=this.texData.get(d.dataId);return Object.assign({tensorRef:c},p.texture)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return Te(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Te(t.shape,t.dtype,a)}checkNumericalProblems(t){if(t!=null)for(let a=0;a0}time(t){let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),i=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(s);o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,d)=>({name:i[d],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else o.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,o})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(t){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=v.now(),t)}async getQueryTime(t){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let a=t;return a.endMs-a.startMs}disposeData(t,a=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(a?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!a&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:n}=this.texData.get(t);return n!=null&&(this.disposeData(n.real.dataId,a),this.disposeData(n.imag.dataId,a)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:a,dtype:n,texShape:r,usage:s,isPacked:i,slice:o}=this.texData.get(t),l=o&&o.origDataId||t,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),a!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(a,r,s,i)));let d=this.texData.get(t);d.texture=null,d.texShape=null,d.isPacked=!1,d.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,a=$q){return B().getBool("WEBGL_CPU_FORWARD")&&t.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return this.texData.get(r).usage=null,{dataId:r,shape:t,dtype:a}}makeOutput(t,a,n){return St().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,n),this)}unpackTensor(t){let a=new Nq(t.shape);return this.runWebGLProgram(a,[t],t.dtype)}packTensor(t){let a=new cq(t.shape);return this.runWebGLProgram(a,[t],t.dtype,null,!0)}packedReshape(t,a){let n=[Ni(t.shape),...Ri(t.shape)],r={dtype:t.dtype,shape:n,dataId:t.dataId},s=[Ni(a),...Ri(a)],i=new Fw(s,n),o=!0,l=[n],u=this.runWebGLProgram(i,[r],t.dtype,l,o);return{dataId:u.dataId,shape:a,dtype:u.dtype}}decode(t,a){let n=this.texData.get(t),{isPacked:r,shape:s,dtype:i}=n;if(a!=null){let p=v.sizeFromShape(s),h=a[0]*a[1]*4;v.assert(p<=h,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let o=_d(s),l;r?l=new mj(o):l=new hj(o);let u=!0,d=[a!=null?a:nh(o)],c=this.runWebGLProgram(l,[{shape:o,dtype:i,dataId:t}],i,d,u,a);return{dtype:i,shape:s,dataId:c.dataId}}runWebGLProgram(t,a,n,r,s=!1,i){let o=this.makeTensorInfo(t.outputShape,n),l=this.texData.get(o.dataId);if(t.packedOutput&&(l.isPacked=!0),t.outPackingScheme===sp.DENSE){let y=i!=null?i:nh(t.outputShape);l.texShape=y.map(x=>x*2)}if(t.outTexUsage!=null&&(l.usage=t.outTexUsage),v.sizeFromShape(o.shape)===0)return l.values=v.getTypedArrayFromDType(o.dtype,0),o;let u=[],d=a.map(y=>{if(y.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let x=this.texData.get(y.dataId);if(x.texture==null){if(!t.packedInputs&&v.sizeFromShape(y.shape)<=B().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:x.values};t.packedInputs&&(x.isPacked=!0,x.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!x.isPacked!=!!t.packedInputs)y=x.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),x=this.texData.get(y.dataId);else if(x.isPacked&&!ip(x.shape,y.shape)){let A=y,b=y.shape;y.shape=x.shape,y=this.packedReshape(y,b),u.push(y),x=this.texData.get(y.dataId),A.shape=b}return{shape:y.shape,texData:x,isUniform:!1}});this.uploadToGPU(o.dataId);let c={shape:o.shape,texData:l,isUniform:!1},p=cj(t,d,c),h=this.getAndSaveBinary(p,()=>dj(this.gpgpu,t,d,c)),m=this.activeTimers!=null,f;m&&(f=this.startTimer()),B().get("ENGINE_COMPILE_ONLY")||pj(this.gpgpu,h,d,c,r),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),m&&(f=this.endTimer(f),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(f)}));let g=B().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let y=v.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!B().getBool("WEBGL_LAZILY_UNPACK")&&l.isPacked&&s===!1){let y=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),y}return o}compileAndRun(t,a,n,r,s=!1){return n=n||a[0].dtype,this.runWebGLProgram(t,a,n,r,s)}getAndSaveBinary(t,a){return t in this.binaryCache||(this.binaryCache[t]=a()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(B().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=Pe(()=>{if(!B().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=B().getBool("DEBUG");B().set("DEBUG",!1);let a=this.abs(Ge(1e-8)).dataSync()[0];if(B().set("DEBUG",t),a>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?Eq:Mq}uploadToGPU(t){let a=this.texData.get(t),{shape:n,dtype:r,values:s,texture:i,usage:o,isPacked:l}=a;if(i!=null)return;let u=this.activeTimers!=null,d;u&&(d=v.now());let c=a.texShape;if(c==null&&(c=Qv(n,l),a.texShape=c),s!=null){let p=_d(n),h,m=c[1],f=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(l||!g)&&([m,f]=Zu(c[0],c[1])),l?h=new xj(p,g):h=new O5(p,g);let y=g?[f,m]:c,x=this.makeTensorInfo(y,r),A=this.texData.get(x.dataId);g?A.usage=gn.PIXELS:A.usage=gn.UPLOAD,A.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),m,f,s);let b=[[f,m]],w=this.runWebGLProgram(h,[x],r,b,!0),S=this.texData.get(w.dataId);a.texShape=S.texShape,a.isPacked=S.isPacked,a.usage=S.usage,B().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(a.texture=S.texture,a.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(x),u&&(this.uploadWaitMs+=v.now()-d)}else{let p=this.acquireTexture(c,o,r,l);a.texture=p}}convertAndCacheOnCPU(t,a){let n=this.texData.get(t),{dtype:r}=n;return a!=null&&(n.values=_q(a,r)),n.values}acquireTexture(t,a,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(t,a,r)}computeBytes(t,a){return t[0]*t[1]*v.bytesPerElement(a)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,a]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(a));return Promise.all(t)}else{for(let[,a]of Object.entries(this.binaryCache)){let n=new Promise(r=>{try{this.checkCompletion_(a),r(!0)}catch(s){throw s}});t.push(n)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await i6(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(O3(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let t of Object.values(this.binaryCache)){this.gpgpu.buildVao(t.webGLProgram);let{variablesLocations:a,customUniformLocations:n,infLoc:r,nanLoc:s,outShapeLocation:i,outShapeStridesLocation:o,outTexShapeLocation:l}=dw(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=a,t.customUniformLocations=n,t.infLoc=r,t.nanLoc=s,t.outShapeLocation=i,t.outShapeStridesLocation=o,t.outTexShapeLocation=l}}createTensorFromGPUData(t,a,n){t.channels=t.channels||"RGBA";let{texture:r,height:s,width:i,channels:o}=t,l=St().backend;if(!l.gpgpu.gl.isTexture(r))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=l.writeTexture(r,a,n,s,i,o);return St().makeTensorFromDataId(u,a,n,l)}};rc.nextDataId=0;function _q(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let a=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let n=0;nnew rc,2);var zq={forceHalfFloat:Dw},q3=` + `}},Bj=Rn.whereImpl,Vj=1e-7,Uj=1e-4,J2={};function Gj(e){return e in J2||(J2[e]={}),J2[e]}var Hj=B().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),jj=600;function qj(){return B().global.screen==null?1024:B().global.screen.height*B().global.screen.width*window.devicePixelRatio*jj/1024/1024}var Jp=class g8 extends ru{nextDataId(){return g8.nextDataId++}constructor(t){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!B().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let a;if(t!=null){if(t instanceof Gl)a=t;else{let n=Wn(B().getNumber("WEBGL_VERSION"),t);a=new Gl(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Wn(B().getNumber("WEBGL_VERSION"));a=new Gl(n),this.binaryCache=Gj(B().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=a,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new Cj(this.gpgpu),this.numMBBeforeWarning=qj(),this.texData=new ip(this,It())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,a,n,r,s,i){let o=this.makeTensorInfo(a,n),l=this.texData.get(o.dataId);l.isPacked=!1,l.texture={texture:t,texShape:[r,s]},l.texShape=[r,s];let u=Ed(a),p=new S5(u,!1,i),c=this.runWebGLProgram(p,[o],n,[[r,s]]);return c.shape=a,l.texture=null,this.disposeIntermediateTensorInfo(o),c.dataId}write(t,a,n){if((B().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||B().getBool("DEBUG"))&&this.checkNumericalProblems(t),n==="complex64"&&t!=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:a,dtype:n,values:t,usage:mn.UPLOAD,refCount:1}),r}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let a=this.texData.get(t);a.refCount++}decRef(t){if(this.texData.has(t)){let a=this.texData.get(t);a.refCount--}}move(t,a,n,r,s){if(B().getBool("DEBUG")&&this.checkNumericalProblems(a),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:n,dtype:r,values:a,usage:mn.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let a=this.texData.get(t),{values:n,dtype:r,complexTensorInfos:s,slice:i,shape:o,isPacked:l}=a;if(i!=null){let d;l?d=new jr(o,Br):d=new Yn(o,Br);let h=this.runWebGLProgram(d,[{dataId:t,shape:o,dtype:r}],r),m=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),m}if(n!=null)return this.convertAndCacheOnCPU(t);if(r==="string")return n;let u=this.activeTimers!=null,p;u&&(p=v.now());let c;if(r==="complex64"){let d=this.readSync(s.real.dataId),h=this.readSync(s.imag.dataId);c=C.mergeRealAndImagArrays(d,h)}else c=this.getValuesFromTexture(t);return u&&(this.downloadWaitMs+=v.now()-p),this.convertAndCacheOnCPU(t,c)}async read(t){if(this.pendingRead.has(t)){let m=this.pendingRead.get(t);return new Promise(f=>m.push(f))}let a=this.texData.get(t),{values:n,shape:r,slice:s,dtype:i,complexTensorInfos:o,isPacked:l}=a;if(s!=null){let m;l?m=new jr(r,Br):m=new Yn(r,Br);let f=this.runWebGLProgram(m,[{dataId:t,shape:r,dtype:i}],i),g=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),g}if(n!=null)return this.convertAndCacheOnCPU(t);if(B().getBool("DEBUG")&&!B().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&B().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,p;if(i!=="complex64"&&B().get("WEBGL_BUFFER_SUPPORTED")){p=this.decode(t);let m=this.texData.get(p.dataId);u=this.gpgpu.createBufferFromTexture(m.texture.texture,...Zc(r))}this.pendingRead.set(t,[]),i!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(i==="complex64"){let m=await Promise.all([this.read(o.real.dataId),this.read(o.imag.dataId)]),f=m[0],g=m[1];c=C.mergeRealAndImagArrays(f,g)}else if(u==null)c=this.getValuesFromTexture(t);else{let m=v.sizeFromShape(r);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,m)}if(p!=null&&this.disposeIntermediateTensorInfo(p),u!=null){let m=this.gpgpu.gl;ce(m,()=>m.deleteBuffer(u))}let d=this.convertAndCacheOnCPU(t,c),h=this.pendingRead.get(t);return this.pendingRead.delete(t),h.forEach(m=>m(d)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&It().removeDataId(t,this),this.pendingDeletes--),d}readToGPU(t,a={}){let n=this.texData.get(t),{values:r,shape:s,slice:i,dtype:o,isPacked:l,texture:u}=n;if(o==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(i!=null){let h;l?h=new jr(s,Br):h=new Yn(s,Br);let m=this.runWebGLProgram(h,[{dataId:t,shape:s,dtype:o}],o),f=this.readToGPU(m,a);return this.disposeIntermediateTensorInfo(m),f}if(u==null)throw r!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let p=this.decode(t,a.customTexShape),c=It().makeTensorFromTensorInfo(p),d=this.texData.get(p.dataId);return Object.assign({tensorRef:c},d.texture)}bufferSync(t){let a=this.readSync(t.dataId);if(t.dtype==="string")try{let n=a.map(r=>v.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}checkNumericalProblems(t){if(t!=null)for(let a=0;a0}time(t){let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(l=>l.query)).filter(l=>l!=null),i=v.flatten(this.activeTimers.map(l=>l.name)).filter(l=>l!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let l=await Promise.all(s);o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", ")}else o.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,o})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(t){return B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=v.now(),t)}async getQueryTime(t){if(B().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let a=t;return a.endMs-a.startMs}disposeData(t,a=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(a?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!a&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:n}=this.texData.get(t);return n!=null&&(this.disposeData(n.real.dataId,a),this.disposeData(n.imag.dataId,a)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:a,dtype:n,texShape:r,usage:s,isPacked:i,slice:o}=this.texData.get(t),l=o&&o.origDataId||t,u=this.dataRefCount.get(l);u>1?this.dataRefCount.set(l,u-1):(this.dataRefCount.delete(l),a!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(a,r,s,i)));let p=this.texData.get(t);p.texture=null,p.texShape=null,p.isPacked=!1,p.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,a=Hj){return B().getBool("WEBGL_CPU_FORWARD")&&t.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)0&&v.isString(n[0])){let s=n.map(i=>v.encodeString(i));r=this.write(s,t,a)}else r=this.write(n,t,a);return this.texData.get(r).usage=null,{dataId:r,shape:t,dtype:a}}makeOutput(t,a,n){return It().makeTensorFromTensorInfo(this.makeTensorInfo(t,a,n),this)}unpackTensor(t){let a=new Wj(t.shape);return this.runWebGLProgram(a,[t],t.dtype)}packTensor(t){let a=new Ij(t.shape);return this.runWebGLProgram(a,[t],t.dtype,null,!0)}packedReshape(t,a){let n=[ai(t.shape),...ni(t.shape)],r={dtype:t.dtype,shape:n,dataId:t.dataId},s=[ai(a),...ni(a)],i=new f8(s,n),o=!0,l=[n],u=this.runWebGLProgram(i,[r],t.dtype,l,o);return{dataId:u.dataId,shape:a,dtype:u.dtype}}decode(t,a){let n=this.texData.get(t),{isPacked:r,shape:s,dtype:i}=n;if(a!=null){let d=v.sizeFromShape(s),h=a[0]*a[1]*4;v.assert(d<=h,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let o=Ed(s),l;r?l=new CH(o):l=new SH(o);let u=!0,p=[a!=null?a:Zc(o)],c=this.runWebGLProgram(l,[{shape:o,dtype:i,dataId:t}],i,p,u,a);return{dtype:i,shape:s,dataId:c.dataId}}runWebGLProgram(t,a,n,r,s=!1,i){let o=this.makeTensorInfo(t.outputShape,n),l=this.texData.get(o.dataId);if(t.packedOutput&&(l.isPacked=!0),t.outPackingScheme===Jd.DENSE){let y=i!=null?i:Zc(t.outputShape);l.texShape=y.map(x=>x*2)}if(t.outTexUsage!=null&&(l.usage=t.outTexUsage),v.sizeFromShape(o.shape)===0)return l.values=v.getTypedArrayFromDType(o.dtype,0),o;let u=[],p=a.map(y=>{if(y.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let x=this.texData.get(y.dataId);if(x.texture==null){if(!t.packedInputs&&v.sizeFromShape(y.shape)<=B().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:y.shape,texData:null,isUniform:!0,uniformValues:x.values};t.packedInputs&&(x.isPacked=!0,x.shape=y.shape)}if(this.uploadToGPU(y.dataId),!!x.isPacked!=!!t.packedInputs)y=x.isPacked?this.unpackTensor(y):this.packTensor(y),u.push(y),x=this.texData.get(y.dataId);else if(x.isPacked&&!Qd(x.shape,y.shape)){let A=y,b=y.shape;y.shape=x.shape,y=this.packedReshape(y,b),u.push(y),x=this.texData.get(y.dataId),A.shape=b}return{shape:y.shape,texData:x,isUniform:!1}});this.uploadToGPU(o.dataId);let c={shape:o.shape,texData:l,isUniform:!1},d=IH(t,p,c),h=this.getAndSaveBinary(d,()=>wH(this.gpgpu,t,p,c)),m=this.activeTimers!=null,f;m&&(f=this.startTimer()),B().get("ENGINE_COMPILE_ONLY")||kH(this.gpgpu,h,p,c,r),u.forEach(y=>this.disposeIntermediateTensorInfo(y)),m&&(f=this.endTimer(f),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(f)}));let g=B().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let y=v.now();y-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=y)}if(!B().getBool("WEBGL_LAZILY_UNPACK")&&l.isPacked&&s===!1){let y=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),y}return o}compileAndRun(t,a,n,r,s=!1){return n=n||a[0].dtype,this.runWebGLProgram(t,a,n,r,s)}getAndSaveBinary(t,a){return t in this.binaryCache||(this.binaryCache[t]=a()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(B().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=De(()=>{if(!B().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=B().getBool("DEBUG");B().set("DEBUG",!1);let a=this.abs(Ge(1e-8)).dataSync()[0];if(B().set("DEBUG",t),a>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?Vj:Uj}uploadToGPU(t){let a=this.texData.get(t),{shape:n,dtype:r,values:s,texture:i,usage:o,isPacked:l}=a;if(i!=null)return;let u=this.activeTimers!=null,p;u&&(p=v.now());let c=a.texShape;if(c==null&&(c=Dv(n,l),a.texShape=c),s!=null){let d=Ed(n),h,m=c[1],f=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(l||!g)&&([m,f]=Hu(c[0],c[1])),l?h=new EH(d,g):h=new S5(d,g);let y=g?[f,m]:c,x=this.makeTensorInfo(y,r),A=this.texData.get(x.dataId);g?A.usage=mn.PIXELS:A.usage=mn.UPLOAD,A.texShape=y,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(x.dataId),m,f,s);let b=[[f,m]],w=this.runWebGLProgram(h,[x],r,b,!0),I=this.texData.get(w.dataId);a.texShape=I.texShape,a.isPacked=I.isPacked,a.usage=I.usage,B().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(a.texture=I.texture,a.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(x),u&&(this.uploadWaitMs+=v.now()-p)}else{let d=this.acquireTexture(c,o,r,l);a.texture=d}}convertAndCacheOnCPU(t,a){let n=this.texData.get(t),{dtype:r}=n;return a!=null&&(n.values=Xj(a,r)),n.values}acquireTexture(t,a,n,r){if(this.numBytesInGPU+=this.computeBytes(t,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(t,a,r)}computeBytes(t,a){return t[0]*t[1]*v.bytesPerElement(a)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,a]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(a));return Promise.all(t)}else{for(let[,a]of Object.entries(this.binaryCache)){let n=new Promise(r=>{try{this.checkCompletion_(a),r(!0)}catch(s){throw s}});t.push(n)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await U7(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(N3(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let t of Object.values(this.binaryCache)){this.gpgpu.buildVao(t.webGLProgram);let{variablesLocations:a,customUniformLocations:n,infLoc:r,nanLoc:s,outShapeLocation:i,outShapeStridesLocation:o,outTexShapeLocation:l}=qv(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=a,t.customUniformLocations=n,t.infLoc=r,t.nanLoc=s,t.outShapeLocation=i,t.outShapeStridesLocation=o,t.outTexShapeLocation=l}}createTensorFromGPUData(t,a,n){t.channels=t.channels||"RGBA";let{texture:r,height:s,width:i,channels:o}=t,l=It().backend;if(!l.gpgpu.gl.isTexture(r))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=l.writeTexture(r,a,n,s,i,o);return It().makeTensorFromDataId(u,a,n,l)}};Jp.nextDataId=0;function Xj(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let a=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let n=0;nnew Jp,2);var Yj={forceHalfFloat:y8},z3=` if (isnan(a)) return a; if (isnan(b)) return b; -`,Ei=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=I.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` +`,ri=class{constructor(e,t,a){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.enableShapeUniforms=ga(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } @@ -1242,12 +1242,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } - `}},cl=` + `}},sl=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; -`,nd=class{constructor(e,t,a,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=I.assertAndGetBroadcastShape(t,a);let r=this.outputShape.length;this.enableShapeUniforms=ga(r);let s="";if(n)if(r===0||v.sizeFromShape(this.outputShape)===1)s=` +`,Zu=class{constructor(e,t,a,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,a);let r=this.outputShape.length;this.enableShapeUniforms=ga(r);let s="";if(n)if(r===0||v.sizeFromShape(this.outputShape)===1)s=` result.y = 0.; result.z = 0.; result.w = 0.; @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function tn(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var Lq={kernelName:ho,backendName:"webgl",kernelFunc:tn};function zs(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.texData.get(s.dataId),o=tn({inputs:{x:n},backend:a}),l=tn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Wq={kernelName:xp,backendName:"webgl",kernelFunc:zs},Pw="return (a < 0.) ? b * a : a;",_w=` + `}};function en(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}var Zj={kernelName:qi,backendName:"webgl",kernelFunc:en};function ms(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.texData.get(s.dataId),o=en({inputs:{x:n},backend:a}),l=en({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var Jj={kernelName:pp,backendName:"webgl",kernelFunc:ms},x8="return (a < 0.) ? b * a : a;",A8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function Bq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new nd(_w,r.shape,i.shape):new Ei(Pw,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var Vq={kernelName:yo,backendName:"webgl",kernelFunc:Bq},Ow="return (a < 0.) ? b * a : a;",zw=` +`;function Qj(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=a.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(A8,r.shape,i.shape):new ri(x8,r.shape,i.shape),l=a.runWebGLProgram(o,[r,i],"float32");return a.disposeIntermediateTensorInfo(i),l}var eq={kernelName:Zi,backendName:"webgl",kernelFunc:Qj},b8="return (a < 0.) ? b * a : a;",v8=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function Uq(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new nd(zw,n.shape,r.shape):new Ei(Ow,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var Gq={kernelName:_o,backendName:"webgl",kernelFunc:Uq},rd="if (isnan(x)) return x;";function tt({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:a,dtype:n}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=n||i.dtype;if(o.shouldExecuteOnCPU([i])&&a!=null){let c=o.texData.get(i.dataId),p=a(c.values,l);return o.makeTensorInfo(i.shape,l,p)}let u=B().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,d;return u?d=new Zr(i.shape,t):d=new Qn(i.shape,e),o.runWebGLProgram(d,[i],l)}}function ha({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:a=!1,supportsComplex:n=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,d=o;if(n&&l.dtype==="complex64"){let m=d.texData.get(l.dataId),f=d.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(A=>{let[b,w]=A,S={dataId:b.dataId,dtype:b.dtype,shape:l.shape},C={dataId:w.dataId,dtype:w.dtype,shape:u.shape},N=new Ei(e,l.shape,u.shape);return d.runWebGLProgram(N,[S,C],Qt(b.dtype,w.dtype))}),x=zs({inputs:{real:g,imag:y},backend:d});return d.disposeIntermediateTensorInfo(g),d.disposeIntermediateTensorInfo(y),x}let c=s||Qt(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||d.shouldExecuteOnCPU([l,u]))&&r!=null){let m=d.texData.get(l.dataId).values,f=d.texData.get(u.dataId).values,g=l.dtype==="string"?I.fromUint8ToStringArray(m):m,y=l.dtype==="string"?I.fromUint8ToStringArray(f):f,[x,A]=r(l.shape,u.shape,g,y,c),b=d.makeTensorInfo(A,c),w=d.texData.get(b.dataId);return w.values=x,b}let p=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return p?h=new nd(t,l.shape,u.shape,a):h=new Ei(e,l.shape,u.shape),d.runWebGLProgram(h,[l,u],c)}}function op(e,t=!1){if(e==="linear")return t?kq:xq;if(e==="relu")return t?Sq:bq;if(e==="elu")return t?Iq:Aq;if(e==="relu6")return t?Tq:vq;if(e==="prelu")return t?zw:Ow;if(e==="leakyrelu")return t?_w:Pw;if(e==="sigmoid")return t?Cq:wq;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var Lw=class{constructor(e,t,a,n=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a,this.enableShapeUniforms=ga(this.outputShape.length);let u=n?e[1]:e[2],d=Math.ceil(u/2),c=n?"i * 2, rc.y":"rc.y, i * 2",p=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) { +`;function tq(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(v8,n.shape,r.shape):new ri(b8,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],"float32")}var aq={kernelName:Io,backendName:"webgl",kernelFunc:tq},Ju="if (isnan(x)) return x;";function tt({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:a,dtype:n}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=n||i.dtype;if(o.shouldExecuteOnCPU([i])&&a!=null){let c=o.texData.get(i.dataId),d=a(c.values,l);return o.makeTensorInfo(i.shape,l,d)}let u=B().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new jr(i.shape,t):p=new Yn(i.shape,e),o.runWebGLProgram(p,[i],l)}}function ha({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:a=!1,supportsComplex:n=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,p=o;if(n&&l.dtype==="complex64"){let m=p.texData.get(l.dataId),f=p.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(A=>{let[b,w]=A,I={dataId:b.dataId,dtype:b.dtype,shape:l.shape},T={dataId:w.dataId,dtype:w.dtype,shape:u.shape},N=new ri(e,l.shape,u.shape);return p.runWebGLProgram(N,[I,T],pa(b.dtype,w.dtype))}),x=ms({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),x}let c=s||pa(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let m=p.texData.get(l.dataId).values,f=p.texData.get(u.dataId).values,g=l.dtype==="string"?C.fromUint8ToStringArray(m):m,y=l.dtype==="string"?C.fromUint8ToStringArray(f):f,[x,A]=r(l.shape,u.shape,g,y,c),b=p.makeTensorInfo(A,c),w=p.texData.get(b.dataId);return w.values=x,b}let d=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new Zu(t,l.shape,u.shape,a):h=new ri(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],c)}}function ep(e,t=!1){if(e==="linear")return t?Fj:Ej;if(e==="relu")return t?Oj:$j;if(e==="elu")return t?Dj:Mj;if(e==="relu6")return t?zj:Pj;if(e==="prelu")return t?v8:b8;if(e==="leakyrelu")return t?A8:x8;if(e==="sigmoid")return t?Lj:_j;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var w8=class{constructor(e,t,a,n=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a,this.enableShapeUniforms=ga(this.outputShape.length);let u=n?e[1]:e[2],p=Math.ceil(u/2),c=n?"i * 2, rc.y":"rc.y, i * 2",d=r?"rc.z, i * 2":"i * 2, rc.z",h=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:l?f=`vec4 activation(vec4 a) { @@ -1308,15 +1308,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, }`,g="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let x="rc.x",A="rc.x";e[0]`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let d=i.texData.get(r.dataId);return d.isPacked&&!ip(r.shape,l)&&!(d.texture!==null&&ip(d.shape,l))?jq(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var qq={kernelName:Du,backendName:"webgl",kernelFunc:pe},H5=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i=Math.floor(a/4)*4,o=a%4,l="sumValue += dot(values, ones);";if(t!=null){let d=1/t;l=`sumValue += dot(values * ${v.isInt(d)?d.toPrecision(2):d}, ones);`}let u="";r%a>0&&(u=` + `}},$5="return a * b;";function L3(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=C.upcastType(n.dtype,r.dtype);if(n.dtype==="complex64"){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),u=new M5(E5.REAL,n.shape,r.shape),p=new M5(E5.IMAG,n.shape,r.shape),c=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:n.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:n.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:r.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:r.shape}],d=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(p,c,"float32"),m=ms({inputs:{real:d,imag:h},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),m}if(a.shouldExecuteOnCPU([n,r])){let o=a.texData.get(n.dataId),l=a.texData.get(r.dataId),[u,p]=QH(n.shape,r.shape,o.values,l.values,s),c=a.makeTensorInfo(p,s),d=a.texData.get(c.dataId);return d.values=u,c}let i;return B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new Zu($5,n.shape,r.shape):i=new ri($5,n.shape,r.shape),a.runWebGLProgram(i,[n,r],s)}var nq={kernelName:yo,backendName:"webgl",kernelFunc:L3};function rq(e,t,a){let n=[ai(e.shape),...ni(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[ai(t),...ni(t)],i=new f8(s,n),o=!0,l=[n],u=a.runWebGLProgram(i,[r],e.dtype,l,o);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function pe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{shape:s}=n,i=a,o=v.sizeFromShape(r.shape),l=v.inferFromImplicitShape(s,o),u=v.sizeFromShape(l);v.assert(o===u,()=>`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let p=i.texData.get(r.dataId);return p.isPacked&&!Qd(r.shape,l)&&!(p.texture!==null&&Qd(p.shape,l))?rq(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var sq={kernelName:Ru,backendName:"webgl",kernelFunc:pe},P5=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,s];let i=Math.floor(a/4)*4,o=a%4,l="sumValue += dot(values, ones);";if(t!=null){let p=1/t;l=`sumValue += dot(values * ${v.isInt(p)?p.toPrecision(2):p}, ones);`}let u="";r%a>0&&(u=` if (inIdx < 0 || inIdx >= ${r}) { return 0.0; } @@ -1402,7 +1402,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(sumValue); } - `}},Xq=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,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 u=Math.floor(a/4)*4,d=a%4,c=` + `}},iq=class{constructor(e,t){this.variableNames=["x"];let{windowSize:a,batchSize:n,inSize:r,outSize:s}=e;this.outputShape=[n,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 u=Math.floor(a/4)*4,p=a%4,c=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { @@ -1418,15 +1418,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } } } - `,p="vec4";t==="all"?(i="1.0",c=` + `,d="vec4";t==="all"?(i="1.0",c=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); - `,p="bvec4"):t==="any"&&(i="0.0",c=` + `,d="bvec4"):t==="any"&&(i="0.0",c=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); - `,p="bvec4");let h="";r%a>0&&(h=` + `,d="bvec4");let h="";r%a>0&&(h=` if (inIdx < 0 || inIdx >= ${r}) { return initializationValue; } @@ -1453,7 +1453,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, for (int i = 0; i < ${u}; i += 4) { int inIdx = inOffset + i; - ${p} values = ${p}( + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1464,8 +1464,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } int inIdx = inOffset + ${u}; - if (${d===1}) { - ${p} values = ${p}( + if (${p===1}) { + ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, @@ -1473,8 +1473,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${c} - } else if (${d===2}) { - ${p} values = ${p}( + } else if (${p===2}) { + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, @@ -1482,8 +1482,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${c} - } else if (${d===3}) { - ${p} values = ${p}( + } else if (${p===3}) { + ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${l}); } - `}};function Kq(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let a=t.length?t[t.length-1].outSize:e[1],n=I.computeOptimalWindowSize(a);t.push({inSize:a,windowSize:n,outSize:Math.ceil(a/n)})}return t}function hl(e,t,a,n){let r=Kq(e.shape),s=e;for(let i=0;i6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(t);for(let r=0;r6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=ft(this.rank),r=Mw("rc",this.rank),s=new Array(this.rank);for(let u=0;u6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],n=new Array(t);for(let r=0;r6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=ft(this.rank),r=m8("rc",this.rank),s=new Array(this.rank);for(let u=0;u`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[x,m,p]:[x,p,m],S=pe({inputs:{x:e},backend:r,attrs:{shape:b}}),C=pe({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[S,C],M=Math.max(y,x),F=a?S.shape[1]:S.shape[2],E=s!=null,T=i!=null,D=l==="leakyrelu",O=l!=null?op(l,!0):null,W=E||T||D||O!=null,$;if((h===1||m===1)&&F>Ww&&W===!1){let G=S,q=C;a&&(G=Ta({inputs:{x:S},backend:r,attrs:{perm:[0,2,1]}}),N.push(G)),n&&(q=Ta({inputs:{x:C},backend:r,attrs:{perm:[0,2,1]}}),N.push(q));let H=m!==1,V=m===1,Z=G;H&&(Z=pe({inputs:{x:G},backend:r,attrs:{shape:[M,F,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,F]}}),N.push(re));let ee=X3({inputs:{a:Z,b:re},backend:r});$=c0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=Qt(e.dtype,t.dtype),q=new Lw(b,w,[M,h,m],a,n,E,O,T,D),H=[S,C];if(s!=null&&H.push(s),T&&H.push(i),D){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),N.push(V)}$=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:$},backend:r,attrs:{shape:A}});N.push($);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function aX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n;return Rh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:d})}var nX={kernelName:ts,backendName:"webgl",kernelFunc:aX},j5="return abs(x);";function rX(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=a.texData.get(n.dataId),i=Rw(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Zr(n.shape,j5):r=new Qn(n.shape,j5),a.runWebGLProgram(r,[n],n.dtype)}var sX={kernelName:cu,backendName:"webgl",kernelFunc:rX},iX=$n+` + `}};function s0(e,t,a){let n=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new dq(e.shape,t):new lq(e.shape,t);return a.runWebGLProgram(n,[e],e.dtype)}function pq(e,t,a,n){let r=t,s=e.shape.length,i=v.parseAxisParam(r,e.shape),o=i,l=C.getAxesPermutation(o,s),u=l!=null,p=e;u&&(p=s0(e,l,n),o=C.getInnerMostAxes(o.length,s)),C.assertAxesAreInnerMostDims("sum",o,s);let[c,d]=C.computeOutAndReduceShapes(p.shape,o),h=c;a&&(h=C.expandShapeToKeepDim(c,i));let m=v.sizeFromShape(d),f=v.sizeFromShape(e.shape)/m,g=pe({inputs:{x:p},attrs:{shape:[f,m]},backend:n}),y=Pp(e.dtype),x=il(g,y,"sum",n),A=pe({inputs:{x},attrs:{shape:h},backend:n});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(x),u&&n.disposeIntermediateTensorInfo(p),A}function i0(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return pq(r,s,i,a)}var cq={kernelName:Go,backendName:"webgl",kernelFunc:i0};function Ca(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{perm:s}=n,i=a,o=r.shape.length,l=new Array(o);for(let p=0;p`Error in matMul: inner shapes (${c}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=pe({inputs:{x:e},backend:r,attrs:{shape:b}}),T=pe({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=a?I.shape[1]:I.shape[2],E=s!=null,S=i!=null,_=l==="leakyrelu",O=l!=null?ep(l,!0):null,W=E||S||_||O!=null,P;if((h===1||m===1)&&$>k8&&W===!1){let G=I,q=T;a&&(G=Ca({inputs:{x:I},backend:r,attrs:{perm:[0,2,1]}}),N.push(G)),n&&(q=Ca({inputs:{x:T},backend:r,attrs:{perm:[0,2,1]}}),N.push(q));let H=m!==1,V=m===1,Z=G;H&&(Z=pe({inputs:{x:G},backend:r,attrs:{shape:[M,$,1]}}),N.push(Z));let X=m===1?2:1,re=q;V&&(re=pe({inputs:{x:q},backend:r,attrs:{shape:[M,1,$]}}),N.push(re));let ee=L3({inputs:{a:Z,b:re},backend:r});P=i0({inputs:{x:ee},backend:r,attrs:{axis:X,keepDims:!0}}),N.push(ee)}else{let G=pa(e.dtype,t.dtype),q=new w8(b,w,[M,h,m],a,n,E,O,S,_),H=[I,T];if(s!=null&&H.push(s),S&&H.push(i),_){let V=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));H.push(V),N.push(V)}P=r.runWebGLProgram(q,H,G)}let U=pe({inputs:{x:P},backend:r,attrs:{shape:A}});N.push(P);for(let G of N)r.disposeIntermediateTensorInfo(G);return U}function mq(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n;return kh({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var fq={kernelName:Yr,backendName:"webgl",kernelFunc:mq},_5="return abs(x);";function gq(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])&&n.dtype!=="complex64"){let s=a.texData.get(n.dataId),i=c8(s.values);return a.makeTensorInfo(n.shape,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,_5):r=new Yn(n.shape,_5),a.runWebGLProgram(r,[n],n.dtype)}var yq={kernelName:iu,backendName:"webgl",kernelFunc:gq},xq=En+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,oX=tt({opSnippet:iX}),lX={kernelName:$i,backendName:"webgl",kernelFunc:oX},uX=$n+` +`,Aq=tt({opSnippet:xq}),bq={kernelName:oi,backendName:"webgl",kernelFunc:Aq},vq=En+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,backendName:"webgl",kernelFunc:dX},q5="return a + b;",cX=ha({opSnippet:q5,packedOpSnippet:q5,supportsComplex:!0,cpuKernelImpl:bj}),hX={kernelName:Mr,backendName:"webgl",kernelFunc:cX},mX=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`float v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` +return log(x + sqrt(x * x - 1.0));`,wq=tt({opSnippet:vq}),kq={kernelName:li,backendName:"webgl",kernelFunc:wq},F5="return a + b;",Iq=ha({opSnippet:F5,packedOpSnippet:F5,supportsComplex:!0,cpuKernelImpl:$H}),Sq={kernelName:os,backendName:"webgl",kernelFunc:Iq},Cq=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`float v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` void main() { ${a.join(` `)} @@ -1531,7 +1531,7 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back float result = ${n}; setOutput(result); } - `}},fX=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`vec4 v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` + `}},Tq=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let a=[];this.variableNames.forEach(r=>{a.push(`vec4 v${r} = get${r}AtOutCoords();`)});let n=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=` void main() { ${a.join(` `)} @@ -1539,7 +1539,7 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back vec4 result = ${n}; setOutput(result); } - `}};function hh(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return tn({inputs:{x:n[0]},backend:a});if(n.length>B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=hh({inputs:n.slice(0,o),backend:a}),u=hh({inputs:n.slice(o),backend:a});return hh({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>Qt(o,l)),s=n.map(o=>o.shape),i=B().getBool("WEBGL_PACK")?new fX(n[0].shape,s):new mX(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var gX={kernelName:Pi,backendName:"webgl",kernelFunc:hh};function yX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=I.getAxesPermutation(u,o),c=r;d!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:d}}),u=I.getInnerMostAxes(u.length,o)),I.assertAxesAreInnerMostDims("all",u,o);let[p,h]=I.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=hl(f,f.dtype,"all",a),y;if(i){let x=I.expandShapeToKeepDim(p,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:p}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),d!=null&&a.disposeIntermediateTensorInfo(c),y}var xX={kernelName:_i,backendName:"webgl",kernelFunc:yX};function AX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=I.getAxesPermutation(u,o),c=r;d!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:d}}),u=I.getInnerMostAxes(u.length,o)),I.assertAxesAreInnerMostDims("any",u,o);let[p,h]=I.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=hl(f,f.dtype,"any",a),y;if(i){let x=I.expandShapeToKeepDim(p,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:p}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),d!=null&&a.disposeIntermediateTensorInfo(c),y}var bX={kernelName:Oi,backendName:"webgl",kernelFunc:AX},vX=class{constructor(e,t,a){this.variableNames=["A"];let{windowSize:n,batchSize:r,outSize:s}=e;a||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=a?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` + `}};function oh(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return en({inputs:{x:n[0]},backend:a});if(n.length>B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(n.length/2),l=oh({inputs:n.slice(0,o),backend:a}),u=oh({inputs:n.slice(o),backend:a});return oh({inputs:[l,u],backend:a})}let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=B().getBool("WEBGL_PACK")?new Tq(n[0].shape,s):new Cq(n[0].shape,s);return a.runWebGLProgram(i,n,r)}var Nq={kernelName:ui,backendName:"webgl",kernelFunc:oh};function Rq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("all",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"all",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var Eq={kernelName:di,backendName:"webgl",kernelFunc:Rq};function Mq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=C.getAxesPermutation(u,o),c=r;p!=null&&(c=Ca({inputs:{x:r},backend:a,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("any",u,o);let[d,h]=C.computeOutAndReduceShapes(c.shape,u),m=v.sizeFromShape(h),f=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,m]}}),g=il(f,f.dtype,"any",a),y;if(i){let x=C.expandShapeToKeepDim(d,l);y=pe({inputs:{x:g},backend:a,attrs:{shape:x}})}else y=pe({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),p!=null&&a.disposeIntermediateTensorInfo(c),y}var $q={kernelName:pi,backendName:"webgl",kernelFunc:Mq},Pq=class{constructor(e,t,a){this.variableNames=["A"];let{windowSize:n,batchSize:r,outSize:s}=e;a||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=a?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -1559,15 +1559,15 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back } setOutput(float(bestIndex)); } - `}},wX=class{constructor(e,t,a,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${a.charAt(0).toUpperCase()+a.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=ft(o),u=ka("coords",o),d,c;if(s===1){c=o+1;let C=ft(c);d=` - ${C} sourceLocR = ${C}(${u.join()}, 0); + `}},_q=class{constructor(e,t,a,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${a.charAt(0).toUpperCase()+a.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=ft(o),u=ka("coords",o),p,c;if(s===1){c=o+1;let T=ft(c);p=` + ${T} sourceLocR = ${T}(${u.join()}, 0); ++${u[o-1]}; - ${C} sourceLocG = ${C}(${u.join()}, 0); + ${T} sourceLocG = ${T}(${u.join()}, 0); ++${u[o-2]}; - ${C} sourceLocA = ${C}(${u.join()}, 0); + ${T} sourceLocA = ${T}(${u.join()}, 0); --${u[o-1]}; - ${C} sourceLocB = ${C}(${u.join()}, 0); - --${u[o-2]};`}else c=o,d=` + ${T} sourceLocB = ${T}(${u.join()}, 0); + --${u[o-2]};`}else c=o,p=` ${l} sourceLocR = coords; ++${u[o-1]}; ${l} sourceLocG = coords; @@ -1575,7 +1575,7 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back ${l} sourceLocA = coords; --${u[o-1]}; ${l} sourceLocB = coords; - --${u[o-2]};`;let p=["x","y","z","w","u","v"].slice(0,c),h="."+p[c-1],m=p.map(C=>"int "+C),f=ka("sourceLocR",c-1).concat("inIdx.r"),g=ka("sourceLocG",c-1).concat("inIdx.g"),y=ka("sourceLocB",c-1).concat("inIdx.b"),x=ka("sourceLocA",c-1).concat("inIdx.a"),A=a==="max"?"greaterThan":"lessThan",b=n?"":` + --${u[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,c),h="."+d[c-1],m=d.map(T=>"int "+T),f=ka("sourceLocR",c-1).concat("inIdx.r"),g=ka("sourceLocG",c-1).concat("inIdx.g"),y=ka("sourceLocB",c-1).concat("inIdx.b"),x=ka("sourceLocA",c-1).concat("inIdx.a"),A=a==="max"?"greaterThan":"lessThan",b=n?"":` inIdx = round(vec4(getBestIndicesAChannel(${f.join()}), getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${y.join()}), @@ -1583,21 +1583,21 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back getAChannel(${f.join()}), hasNextCol ? getAChannel(${g.join()}) : 0., hasNextRow ? getAChannel(${y.join()}) : 0., - hasNextRow && hasNextCol ? getAChannel(${x.join()}) : 0.)`,S=n?"":` + hasNextRow && hasNextCol ? getAChannel(${x.join()}) : 0.)`,I=n?"":` float getBestIndicesAChannel(${m.join()}) { - return getChannel(getBestIndicesA(${p.join()}), - vec2(${p.slice(-2).join()})); + return getChannel(getBestIndicesA(${d.join()}), + vec2(${d.slice(-2).join()})); }`;this.userCode=` float getAChannel(${m.join()}) { - return getChannel(getA(${p.join()}), - vec2(${p.slice(-2).join()})); + return getChannel(getA(${d.join()}), + vec2(${d.slice(-2).join()})); } - ${S} + ${I} void main() { ${l} coords = getOutputCoords(); bool hasNextCol = ${u[o-1]} < ${i[o-1]-1}; bool hasNextRow = ${u[o-2]} < ${i[o-2]-1}; - ${d} + ${p} ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h}, sourceLocB${h}, sourceLocA${h}) * ${t}; ivec4 inIdx = srcIdx; @@ -1621,27 +1621,27 @@ return log(x + sqrt(x * x - 1.0));`,dX=tt({opSnippet:uX}),pX={kernelName:Di,back } setOutput(bestIndex); } - `}};function Bw(e,t,a,n=null){let r=t.shape[0],s=t.shape[1];n!=null&&(r=n.shape[0],s=n.shape[1]);let i=I.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new vX(o,a,n==null),u=[t];n!=null&&u.push(n);let d=e.runWebGLProgram(l,u,"int32");if(d.shape[1]===1)return d;let c=Bw(e,t,a,d);return e.disposeIntermediateTensorInfo(d),c}function Vw(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=I.computeOptimalWindowSize(s),o=new wX(r,i,a,n==null),l=n==null?[t]:[t,n],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let d=Vw(e,t,a,u);return e.disposeIntermediateTensorInfo(u),d}return u}function Uw(e,t,a,n){let r=[a];if(I.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!B().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,d]=I.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(d),p=pe({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(p);let h=Bw(e,p,n);s.push(h);let m=pe({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return Vw(e,t,n)}function kX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=I.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ta({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=I.getInnerMostAxes(i.length,l.shape.length)),I.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let d=Uw(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),d}var IX={kernelName:hu,backendName:"webgl",kernelFunc:kX};function SX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=I.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ta({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=I.getInnerMostAxes(i.length,l.shape.length)),I.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let d=Uw(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),d}var TX={kernelName:mu,backendName:"webgl",kernelFunc:SX},CX=$n+` + `}};function I8(e,t,a,n=null){let r=t.shape[0],s=t.shape[1];n!=null&&(r=n.shape[0],s=n.shape[1]);let i=C.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new Pq(o,a,n==null),u=[t];n!=null&&u.push(n);let p=e.runWebGLProgram(l,u,"int32");if(p.shape[1]===1)return p;let c=I8(e,t,a,p);return e.disposeIntermediateTensorInfo(p),c}function S8(e,t,a,n=null){let r=n!=null?n.shape:t.shape,s=r[r.length-1],i=C.computeOptimalWindowSize(s),o=new _q(r,i,a,n==null),l=n==null?[t]:[t,n],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let p=S8(e,t,a,u);return e.disposeIntermediateTensorInfo(u),p}return u}function C8(e,t,a,n){let r=[a];if(C.assertAxesAreInnerMostDims("arg"+n.charAt(0).toUpperCase()+n.slice(1),r,t.shape.length),!B().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,p]=C.computeOutAndReduceShapes(l.shape,r),c=v.sizeFromShape(p),d=pe({inputs:{x:l},backend:e,attrs:{shape:[-1,c]}});s.push(d);let h=I8(e,d,n);s.push(h);let m=pe({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return S8(e,t,n)}function Fq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=C8(a,l,i[0],"max");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var Dq={kernelName:ou,backendName:"webgl",kernelFunc:Fq};function Oq(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Ca({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=C8(a,l,i[0],"min");return u.forEach(c=>a.disposeIntermediateTensorInfo(c)),p}var zq={kernelName:lu,backendName:"webgl",kernelFunc:Oq},Lq=En+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,NX=tt({opSnippet:CX}),RX={kernelName:zi,backendName:"webgl",kernelFunc:NX},EX=$n+"return log(x + sqrt(x * x + 1.0));",MX=tt({opSnippet:EX}),FX={kernelName:Li,backendName:"webgl",kernelFunc:MX},$X=$n+` +`,Wq=tt({opSnippet:Lq}),Bq={kernelName:ci,backendName:"webgl",kernelFunc:Wq},Vq=En+"return log(x + sqrt(x * x + 1.0));",Uq=tt({opSnippet:Vq}),Gq={kernelName:hi,backendName:"webgl",kernelFunc:Uq},Hq=En+` return atan(x); -`,DX=tt({opSnippet:$X}),PX={kernelName:Wi,backendName:"webgl",kernelFunc:DX},_X=q3+` +`,jq=tt({opSnippet:Hq}),qq={kernelName:mi,backendName:"webgl",kernelFunc:jq},Xq=z3+` return atan(a, b); -`,OX=` +`,Kq=` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - `+cl+` + `+sl+` return result; -`,zX=ha({opSnippet:_X,packedOpSnippet:OX}),LX={kernelName:Vi,backendName:"webgl",kernelFunc:zX},WX=$n+` +`,Yq=ha({opSnippet:Xq,packedOpSnippet:Kq}),Zq={kernelName:gi,backendName:"webgl",kernelFunc:Yq},Jq=En+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelName:Bi,backendName:"webgl",kernelFunc:BX},lp=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterHeight,c=e.effectiveFilterWidth,p=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),a){let C=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Qq=tt({opSnippet:Jq}),eX={kernelName:fi,backendName:"webgl",kernelFunc:Qq},tp=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterHeight,c=e.effectiveFilterWidth,d=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),a){let T=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); - const ivec2 pads = ivec2(${p}, ${h}); + const ivec2 pads = ivec2(${d}, ${h}); void main() { ivec4 coords = getOutputCoords(); @@ -1659,7 +1659,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam int minMaxPosition = 0; float avgValue = 0.0; - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${p}; wR += ${l}) { int xR = xRCorner + wR; @@ -1681,7 +1681,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); - if (value ${C} currMinMaxValue) { + if (value ${T} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${n?r?f:g:`wR * ${c} + wC`}; @@ -1690,7 +1690,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(float(minMaxPosition)); } - `;return}let x="max",A=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(A="avgValue / max(count, 1.0)");let b=Math.floor(s/4)*4,w=s%4,S=` + `;return}let x="max",A=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(A="avgValue / max(count, 1.0)");let b=Math.floor(s/4)*4,w=s%4,I=` if (${m}) { avgValue += dot(values, ones); } else { @@ -1698,7 +1698,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); - const ivec2 pads = ivec2(${p}, ${h}); + const ivec2 pads = ivec2(${d}, ${h}); const float initializationValue = ${y}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); @@ -1727,7 +1727,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float avgValue = 0.0; count = 0.0; - for (int wR = 0; wR < ${d}; + for (int wR = 0; wR < ${p}; wR += ${l}) { int xR = xRCorner + wR; @@ -1745,7 +1745,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam getValue(batch, xR, xC + 3 * ${u}, d) ); - ${S} + ${I} } int xC = xCCorner + ${b}; @@ -1757,7 +1757,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam initializationValue ); - ${S} + ${I} } else if (${w===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -1766,7 +1766,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam initializationValue ); - ${S} + ${I} } else if (${w===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), @@ -1775,12 +1775,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam initializationValue ); - ${S} + ${I} } } setOutput(${A}); } - `}},K3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,d=e.dilationHeight,c=e.dilationWidth,p=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let x=t==="avg",A="0.0";if(x||(A="-1.0 / 1e-20"),a){let M=">=";this.userCode=` + `}},W3=class{constructor(e,t,a,n=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,c=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let x=t==="avg",A="0.0";if(x||(A="-1.0 / 1e-20"),a){let M=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); const ivec3 pads = ivec3(${f}, ${g}, ${y}); @@ -1801,7 +1801,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float minMaxValueFound = 0.0; int minMaxPosition = 0; - for (int wD = 0; wD < ${p}; + for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; @@ -1810,7 +1810,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } for (int wR = 0; wR < ${h}; - wR += ${d}) { + wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { @@ -1842,7 +1842,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(float(minMaxPosition)); } - `;return}let b="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / max(count, 1.0)");let S=Math.floor(s/4)*4,C=s%4,N=` + `;return}let b="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / max(count, 1.0)");let I=Math.floor(s/4)*4,T=s%4,N=` if (${x}) { avgValue += dot(values, ones); } else { @@ -1881,7 +1881,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float avgValue = 0.0; count = 0.0; - for (int wD = 0; wD < ${p}; + for (int wD = 0; wD < ${d}; wD += ${u}) { int xD = xDCorner + wD; @@ -1890,14 +1890,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } for (int wR = 0; wR < ${h}; - wR += ${d}) { + wR += ${p}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } - for (int wC = 0; wC < ${S}; wC += 4) { + for (int wC = 0; wC < ${I}; wC += 4) { int xC = xCCorner + wC * ${c}; vec4 values = vec4( @@ -1910,8 +1910,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${N} } - int xC = xCCorner + ${S}; - if (${C===1}) { + int xC = xCCorner + ${I}; + if (${T===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, @@ -1920,7 +1920,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ); ${N} - } else if (${C===2}) { + } else if (${T===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${c}, ch), @@ -1929,7 +1929,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ); ${N} - } else if (${C===3}) { + } else if (${T===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${c}, ch), @@ -1943,8 +1943,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(${w}); } - `}};function UX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;Ju(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(I.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=I.computePool2DInfo(r.shape,s,i,u,o,l);if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))return tn({inputs:{x:r},backend:a});let c=new lp(d,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var GX={kernelName:Ui,backendName:"webgl",kernelFunc:UX};function HX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,d=[1,1,1],c=I.computePool3DInfo(r.shape,s,i,d,o,l,u),p=new K3(c,"avg",!1);return a.runWebGLProgram(p,[r],"float32")}var jX={kernelName:fu,backendName:"webgl",kernelFunc:HX},qX=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,d=l-1-e.padInfo.left,c=1/(t*a);this.userCode=` - const ivec2 pads = ivec2(${u}, ${d}); + `}};function tX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ju(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"avg",!1);return a.runWebGLProgram(c,[r],"float32")}var aX={kernelName:yi,backendName:"webgl",kernelFunc:tX};function nX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=[1,1,1],c=C.computePool3DInfo(r.shape,s,i,p,o,l,u),d=new W3(c,"avg",!1);return a.runWebGLProgram(d,[r],"float32")}var rX={kernelName:uu,backendName:"webgl",kernelFunc:nX},sX=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,p=l-1-e.padInfo.left,c=1/(t*a);this.userCode=` + const ivec2 pads = ivec2(${u}, ${p}); const float avgMultiplier = float(${c}); void main() { @@ -1985,7 +1985,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},XX=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterDepth,c=e.effectiveFilterHeight,p=e.effectiveFilterWidth,h=d-1-e.padInfo.front,m=c-1-e.padInfo.top,f=p-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` + `}},iX=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterDepth,c=e.effectiveFilterHeight,d=e.effectiveFilterWidth,h=p-1-e.padInfo.front,m=c-1-e.padInfo.top,f=d-1-e.padInfo.left,g=1/(t*a*n);this.userCode=` const ivec3 pads = ivec3(${h}, ${m}, ${f}); const float avgMultiplier = float(${g}); @@ -2004,7 +2004,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; - for (int wD = 0; wD < ${d}; + for (int wD = 0; wD < ${p}; wD += ${o}) { float dyD = float(dyDCorner + wD) / ${r}.0; @@ -2023,7 +2023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } int idyR = int(dyR); - for (int wC = 0; wC < ${p}; + for (int wC = 0; wC < ${d}; wC += ${u}) { float dyC = float(dyCCorner + wC) / ${i}.0; @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}};function KX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=[1,1,1],p=I.computePool3DInfo(i.shape,o,l,c,u,d),h=new XX(p);return a.runWebGLProgram(h,[r],i.dtype)}var YX={kernelName:yp,backendName:"webgl",kernelFunc:KX};function ZX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;Ju([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,d=I.computePool2DInfo(i.shape,o,l,1,u),c=new qX(d);return a.runWebGLProgram(c,[r],i.dtype)}var JX={kernelName:gp,backendName:"webgl",kernelFunc:ZX};function QX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return Rh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var eK={kernelName:Gi,backendName:"webgl",kernelFunc:QX},tK=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(I.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function oX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=n,c=[1,1,1],d=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new iX(d);return a.runWebGLProgram(h,[r],i.dtype)}var lX={kernelName:dp,backendName:"webgl",kernelFunc:oX};function uX(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;ju([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new sX(p);return a.runWebGLProgram(c,[r],i.dtype)}var dX={kernelName:up,backendName:"webgl",kernelFunc:uX};function pX(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return kh({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var cX={kernelName:xi,backendName:"webgl",kernelFunc:pX},hX=class{constructor(e,t,a,n,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="0.0";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -2051,7 +2051,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float inv = scale * inversesqrt(variance + float(${s})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}},aK=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],I.assertAndGetBroadcastShape(e,t),I.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(I.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(I.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}},mX=class{constructor(e,t,a,n,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,a);let i="vec4(0.0)";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${o}; @@ -2064,7 +2064,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam setOutput((x - mean) * inv + offset); } - `}},nK=({inputs:e,backend:t,attrs:a})=>{let{x:n,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=a;l==null&&(l=.001);let u=[n,r,s],d=null;i!=null&&(d=i.shape,u.push(i));let c=null;o!=null&&(c=o.shape,u.push(o));let p=B().getBool("WEBGL_PACK_NORMALIZATION")?new aK(n.shape,r.shape,s.shape,d,c,l):new tK(n.shape,r.shape,s.shape,d,c,l);return t.runWebGLProgram(p,u,u[0].dtype)},rK={kernelName:po,backendName:"webgl",kernelFunc:nK},sK=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ft(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=iK(this.rank),n,r=e.map((s,i)=>`sourceLoc.${H1[i]} = start[${i}] + coords.${H1[i]};`);n=` + `}},fX=({inputs:e,backend:t,attrs:a})=>{let{x:n,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=a;l==null&&(l=.001);let u=[n,r,s],p=null;i!=null&&(p=i.shape,u.push(i));let c=null;o!=null&&(c=o.shape,u.push(o));let d=B().getBool("WEBGL_PACK_NORMALIZATION")?new mX(n.shape,r.shape,s.shape,p,c,l):new hX(n.shape,r.shape,s.shape,p,c,l);return t.runWebGLProgram(d,u,u[0].dtype)},gX={kernelName:Ui,backendName:"webgl",kernelFunc:fX},yX=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ft(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let a=xX(this.rank),n,r=e.map((s,i)=>`sourceLoc.${L1[i]} = start[${i}] + coords.${L1[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${r.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${n} setOutput(getSource(${a})); } - `}},H1=["x","y","z","w","u","v"];function iK(e){if(e===1)return"sourceLoc";if(e<=6)return H1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var oK=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=ft(this.rank),a=ka("coords",this.rank),n=ka("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` + `}},L1=["x","y","z","w","u","v"];function xX(e){if(e===1)return"sourceLoc";if(e<=6)return L1.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var AX=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=ft(this.rank),a=ka("coords",this.rank),n=ka("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,s=`getChannel(getSource(${n.join()}), ${r})`,i=` result.x = ${s}; if (++${a[this.rank-1]} < ${e[this.rank-1]}) { ++${n[this.rank-1]}; @@ -2092,7 +2092,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } } `,l=this.rank<=4?`sourceLoc = coords + - ${t}(${e.map((u,d)=>`start[${d}]`).join()});`:e.map((u,d)=>`${n[d]} = ${a[d]} + start[${d}];`).join(` + ${t}(${e.map((u,p)=>`start[${p}]`).join()});`:e.map((u,p)=>`${n[p]} = ${a[p]} + start[${p}];`).join(` `);this.userCode=` void main() { ${t} coords = getOutputCoords(); @@ -2103,15 +2103,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${o} setOutput(result); } - `}};function lK(e,t,a,n){let r=n.texData.get(e.dataId),s=n.makeTensorInfo(a,e.dtype),i=n.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=a,i.dtype=e.dtype;let o=wt.computeFlatOffset(t,v.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=n.dataRefCount.get(i.slice.origDataId)||1;return n.dataRefCount.set(i.slice.origDataId,l+1),s}function sd(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=wt.parseSliceParams(r,s,i);if(wt.assertParamsValid(r,o,l),v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);if(a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.texData.get(r.dataId),p=Jj(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}let{isPacked:u}=a.texData.get(r.dataId),d=wt.isSliceContinous(r.shape,o,l);if(u||!d){let c=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new oK(l):new sK(l),p=[o];return a.runWebGLProgram(c,[r],r.dtype,p)}return a.uploadToGPU(r.dataId),lK(r,o,l,a)}var uK={kernelName:zu,backendName:"webgl",kernelFunc:sd},dK=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=I.getReshaped(r.shape,s,o),u=I.getPermuted(l.length,s.length),d=I.getReshapedPermuted(r.shape,s,o),c=I.getSliceBeginCoords(i,s.length),p=I.getSliceSize(d,i,s.length),h=[],m=pe({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Ta({inputs:{x:m},backend:a,attrs:{perm:u}}),g=pe({inputs:{x:f},backend:a,attrs:{shape:d}}),y=sd({inputs:{x:g},backend:a,attrs:{begin:c,size:p}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeIntermediateTensorInfo(x)),y},pK={kernelName:gu,backendName:"webgl",kernelFunc:dK};function cK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.readSync(r.dataId),l=a.readSync(s.dataId),u=Nw(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var hK={kernelName:Hi,backendName:"webgl",kernelFunc:cK},mK=` + `}};function bX(e,t,a,n){let r=n.texData.get(e.dataId),s=n.makeTensorInfo(a,e.dtype),i=n.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=a,i.dtype=e.dtype;let o=Nt.computeFlatOffset(t,v.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=n.dataRefCount.get(i.slice.origDataId)||1;return n.dataRefCount.set(i.slice.origDataId,l+1),s}function Qu(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.assertParamsValid(r,o,l),v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);if(a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.texData.get(r.dataId),d=dj(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}let{isPacked:u}=a.texData.get(r.dataId),p=Nt.isSliceContinous(r.shape,o,l);if(u||!p){let c=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new AX(l):new yX(l),d=[o];return a.runWebGLProgram(c,[r],r.dtype,d)}return a.uploadToGPU(r.dataId),bX(r,o,l,a)}var vX={kernelName:Pu,backendName:"webgl",kernelFunc:Qu},wX=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=pe({inputs:{x:r},backend:a,attrs:{shape:l}}),f=Ca({inputs:{x:m},backend:a,attrs:{perm:u}}),g=pe({inputs:{x:f},backend:a,attrs:{shape:p}}),y=Qu({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeIntermediateTensorInfo(x)),y},kX={kernelName:du,backendName:"webgl",kernelFunc:wX};function IX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=a.readSync(r.dataId),l=a.readSync(s.dataId),u=p8(o,l,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,u)}var SX={kernelName:Ai,backendName:"webgl",kernelFunc:IX},CX=` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); int ra = int(a.a) & int(b.a); return vec4(r, g, rb, ra); -`,fK=` +`,TX=` return float(int(a.r) & int(b.r)); -`;function gK(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS"),i=B().getNumber("WEBGL_VERSION");if(a.shouldExecuteOnCPU([n,r])||i===1){let l=a.texData.get(n.dataId).values,u=a.texData.get(r.dataId).values,[d,c]=wj(n.shape,r.shape,l,u,n.dtype),p=a.makeTensorInfo(c,n.dtype),h=a.texData.get(p.dataId);return h.values=d,p}let o;return s?o=new nd(mK,n.shape,r.shape,!1):o=new Ei(fK,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var yK={kernelName:ji,backendName:"webgl",kernelFunc:gK};function xK(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=I.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var AK={kernelName:yu,backendName:"webgl",kernelFunc:xK},bK="return float(a != b);",Gw=ha({opSnippet:bK,cpuKernelImpl:Uj,dtype:"bool"}),vK={kernelName:Cs,backendName:"webgl",kernelFunc:Gw};function sc(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.real},backend:a})}var wK={kernelName:Ep,backendName:"webgl",kernelFunc:sc},kK="return float(int(x));";function IK(e,t){let a=new Qn(e.shape,kK),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function j1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tn({inputs:{x:r},backend:a});let i=An(r.shape),o=j1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=zs({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=sc({inputs:{input:r},backend:a}),o=j1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=tn({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.texData.get(r.dataId).values,[o,l,u]=kj(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return IK(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Gw({inputs:{a:r,b:i},backend:a});return a.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var SK={kernelName:qi,backendName:"webgl",kernelFunc:j1},X5="return ceil(x);",TK=tt({opSnippet:X5,packedOpSnippet:X5,cpuKernelImpl:Ij}),CK={kernelName:cs,backendName:"webgl",kernelFunc:TK},NK=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` +`;function NX(e){let{inputs:t,backend:a}=e,{a:n,b:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS"),i=B().getNumber("WEBGL_VERSION");if(a.shouldExecuteOnCPU([n,r])||i===1){let l=a.texData.get(n.dataId).values,u=a.texData.get(r.dataId).values,[p,c]=_H(n.shape,r.shape,l,u,n.dtype),d=a.makeTensorInfo(c,n.dtype),h=a.texData.get(d.dataId);return h.values=p,d}let o;return s?o=new Zu(CX,n.shape,r.shape,!1):o=new ri(TX,n.shape,r.shape),a.runWebGLProgram(o,[n,r],n.dtype)}var RX={kernelName:pu,backendName:"webgl",kernelFunc:NX};function EX(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.readSync(n.dataId),i=a.readSync(r.dataId),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var MX={kernelName:cu,backendName:"webgl",kernelFunc:EX},$X="return float(a != b);",T8=ha({opSnippet:$X,cpuKernelImpl:tj,dtype:"bool"}),PX={kernelName:xo,backendName:"webgl",kernelFunc:T8};function Qp(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.real},backend:a})}var _X={kernelName:kp,backendName:"webgl",kernelFunc:Qp},FX="return float(int(x));";function DX(e,t){let a=new Yn(e.shape,FX),n=t.runWebGLProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function W1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return en({inputs:{x:r},backend:a});let i=yn(r.shape),o=W1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ms({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Qp({inputs:{input:r},backend:a}),o=W1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=en({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.texData.get(r.dataId).values,[o,l,u]=FH(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return DX(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=T8({inputs:{a:r,b:i},backend:a});return a.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var OX={kernelName:bi,backendName:"webgl",kernelFunc:W1},D5="return ceil(x);",zX=tt({opSnippet:D5,packedOpSnippet:D5,cpuKernelImpl:DH}),LX={kernelName:vi,backendName:"webgl",kernelFunc:zX},WX=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { float value = getAAtOutCoords(); @@ -2122,7 +2122,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam setOutput(clamp(value, minVal, maxVal)); } - `}},RK=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}},BX=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { vec4 value = getAAtOutCoords(); @@ -2133,7 +2133,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function EK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;B().getBool("WEBGL_PACK_CLIP")?o=new RK(r.shape):o=new NK(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var MK={kernelName:hs,backendName:"webgl",kernelFunc:EK},FK=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function VX(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o;B().getBool("WEBGL_PACK_CLIP")?o=new BX(r.shape):o=new WX(r.shape);let l=[[s],[i]];return a.runWebGLProgram(o,[r],r.dtype,l)}var UX={kernelName:ls,backendName:"webgl",kernelFunc:VX},GX=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); @@ -2146,7 +2146,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function K5(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function $K(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.texData.get(n.dataId),s=new FK(n.shape),i=[K5(n,r.complexTensorInfos.real),K5(n,r.complexTensorInfos.imag)];return a.runWebGLProgram(s,i,i[0].dtype)}var DK={kernelName:Ap,backendName:"webgl",kernelFunc:$K},PK=class{constructor(e){this.outputShape=[],this.outputShape=I.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${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s`T${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m`T${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m= ${o[m-1]}) { return getChannel( - getT${m}(${sh(i,l,f)}), - vec2(${sh(u,l,f)})); - }`}let p=o.length,h=o[o.length-1];c+=` + getT${m}(${Qc(i,l,f)}), + vec2(${Qc(u,l,f)})); + }`}let d=o.length,h=o[o.length-1];c+=` return getChannel( - getT${p}(${sh(i,l,h)}), - vec2(${sh(u,l,h)}));`,this.userCode=` + getT${d}(${Qc(i,l,h)}), + vec2(${Qc(u,l,h)}));`,this.userCode=` float getValue(${i.map(m=>"int "+m)}) { ${c} } @@ -2192,7 +2192,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(result); } - `}};function sh(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function h0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.imag},backend:a})}var OK={kernelName:Cp,backendName:"webgl",kernelFunc:h0};function Od(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>sc({inputs:{input:x},backend:a})),m=e.map(x=>h0({inputs:{input:x},backend:a})),f=Od(h,t,a),g=Od(m,t,a),y=zs({inputs:{real:f,imag:g},backend:a});return h.forEach(x=>a.disposeIntermediateTensorInfo(x)),m.forEach(x=>a.disposeIntermediateTensorInfo(x)),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),y}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let h=e.map(b=>{let w=[-1,v.sizeFromShape(b.shape.slice(t))];return pe({inputs:{x:b},backend:a,attrs:{shape:w}})}),m=h.map(b=>({vals:a.readSync(b.dataId),shape:b.shape})),f=I.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,y=Sj(m,f,n,g),x=I.computeOutShape(e.map(b=>b.shape),t),A=a.makeTensorInfo(x,n,y);return h.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new Qn(e[0].shape,jr):new Zr(e[0].shape,jr);return a.runWebGLProgram(h,e,n)}let o=B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let f=0;fm.shape),t);return a.runWebGLProgram(h,s,n)}let{tensors2D:l,outShape:u}=zK(s,t,a),d=new PK(l.map(h=>h.shape)),c=a.runWebGLProgram(d,l,n);l.forEach(h=>a.disposeIntermediateTensorInfo(h));let p=pe({inputs:{x:c},attrs:{shape:u},backend:a});return a.disposeIntermediateTensorInfo(c),p}function zK(e,t,a){let n=I.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>pe({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function Hw(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);I.assertParamsConsistent(i,s);let o=I.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?tn({inputs:{x:l[0]},backend:a}):Od(l,s,a)}var LK={kernelName:xu,backendName:"webgl",kernelFunc:Hw},jw=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,d=e.dilationWidth,c=e.filterHeight,p=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,x=f?3:1,A="",b="";a&&(n?A=`float activation(float a) { + `}};function Qc(e,t,a){let n=e.indexOf(t);return e.map((r,s)=>s===n?`${r} - ${a}`:r).join()}function o0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.texData.get(n.dataId);return en({inputs:{x:r.complexTensorInfos.imag},backend:a})}var KX={kernelName:bp,backendName:"webgl",kernelFunc:o0};function Md(e,t,a){let n=e[0].dtype;if(n==="complex64"){let h=e.map(x=>Qp({inputs:{input:x},backend:a})),m=e.map(x=>o0({inputs:{input:x},backend:a})),f=Md(h,t,a),g=Md(m,t,a),y=ms({inputs:{real:f,imag:g},backend:a});return h.forEach(x=>a.disposeIntermediateTensorInfo(x)),m.forEach(x=>a.disposeIntermediateTensorInfo(x)),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(g),y}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let h=e.map(b=>{let w=[-1,v.sizeFromShape(b.shape.slice(t))];return pe({inputs:{x:b},backend:a,attrs:{shape:w}})}),m=h.map(b=>({vals:a.readSync(b.dataId),shape:b.shape})),f=C.computeOutShape(h.map(b=>b.shape),1),g=h[0].shape[0]===1,y=OH(m,f,n,g),x=C.computeOutShape(e.map(b=>b.shape),t),A=a.makeTensorInfo(x,n,y);return h.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new Yn(e[0].shape,Br):new jr(e[0].shape,Br);return a.runWebGLProgram(h,e,n)}let o=B().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let f=0;fm.shape),t);return a.runWebGLProgram(h,s,n)}let{tensors2D:l,outShape:u}=YX(s,t,a),p=new qX(l.map(h=>h.shape)),c=a.runWebGLProgram(p,l,n);l.forEach(h=>a.disposeIntermediateTensorInfo(h));let d=pe({inputs:{x:c},attrs:{shape:u},backend:a});return a.disposeIntermediateTensorInfo(c),d}function YX(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>pe({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:a})),outShape:n}}function N8(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);C.assertParamsConsistent(i,s);let o=C.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?en({inputs:{x:l[0]},backend:a}):Md(l,s,a)}var ZX={kernelName:hu,backendName:"webgl",kernelFunc:N8},R8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,p=e.dilationWidth,c=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,x=f?3:1,A="",b="";a&&(n?A=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${a} }`:r?A=`float activation(float a) { @@ -2228,8 +2228,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam continue; } - for (int wC = 0; wC < ${p}; wC++) { - int xC = xCCorner + wC * ${d}; + for (int wC = 0; wC < ${d}; wC++) { + int xC = xCCorner + wC * ${p}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -2326,7 +2326,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${b} setOutput(result); } - `}},WK=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,a=e.padInfo.top,n=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.filterDepth,c=e.filterHeight,p=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4;this.userCode=` + `}},JX=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,a=e.padInfo.top,n=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.filterDepth,c=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${r}, ${s}, ${i}); const ivec3 pads = ivec3(${t}, ${a}, ${n}); @@ -2344,7 +2344,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; - for (int wF = 0; wF < ${d}; wF++) { + for (int wF = 0; wF < ${p}; wF++) { int xF = xFCorner + wF * ${o}; if (xF < 0 || xF >= ${e.inDepth}) { @@ -2358,7 +2358,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam continue; } - for (int wC = 0; wC < ${p}; wC++) { + for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${u}; if (xC < 0 || xC >= ${e.inWidth}) { @@ -2414,7 +2414,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},qw=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,d=u,c=` + `}},E8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,p=u,c=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let f=0;f=0 && xR < inDims[0]) { - `;for(let f=0;f<(d+1)/2;f++){let g=f*2;if(c+=` + `;for(let f=0;f<(p+1)/2;f++){let g=f*2;if(c+=` xC = xCCorner + ${g*o}; `,i===1){if(g=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function Xw({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=n.texData.get(e.dataId),d=a.inChannels,c=l[0]*l[1]*l[2],p=a.outChannels,h=a.dataFormat==="channelsLast",m=!1,f=!1,g,y=[];if(s!=null){let x=Eh(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=Eh(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||p===1)&&d>Ww)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let x=l[0]*l[1]*(l[2]+1),A={dataId:e.dataId,shape:[1,x,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(ip(u.shape,A.shape),()=>`packed reshape ${u.shape} to ${A.shape} isn't free`);let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});y.push(w);let S=Rh({a:A,b:w,backend:n,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),C=n.texData.get(S.dataId);v.assert(C.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,C.shape=a.outShape,g=tn({inputs:{x:S},backend:n}),g.shape=a.outShape,y.push(S)}else{let x=a.outHeight*a.outWidth,A=pe({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,x,a.inChannels]:[a.batchSize,a.inChannels,x]}}),b=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=Rh({a:h?A:b,b:h?b:A,transposeA:!h,transposeB:f,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=pe({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),y.push(A),y.push(b),y.push(w)}for(let x of y)n.disposeIntermediateTensorInfo(x);return g}function Kw({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:d,outWidth:c,outHeight:p,dataFormat:h}=a,m=h==="channelsLast",f=l*u*d,g=p*c,y=[a.batchSize,f,g],x=!0,A=!1,b=[];if(s!=null){let G=Eh(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=Eh(r.shape,m);G!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:G}}),b.push(r))}let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});b.push(w);let S=new BK(y,a),C=[e.shape,[a.padInfo.top,a.padInfo.left],[a.strideHeight,a.strideWidth],[a.dilationHeight,a.dilationWidth],[a.inChannels],[a.filterWidth*a.inChannels],[a.outWidth]],N=n.runWebGLProgram(S,[e],"float32",C),M=pe({inputs:{x:N},backend:n,attrs:{shape:y}});b.push(N),b.push(M);let F=r!=null,E=s!=null,T=o==="leakyrelu",D=o?op(o,!0):null,O=new Lw(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,F,D,E,T),W=m?[M,w]:[w,M];if(r&&W.push(r),E&&W.push(s),T){let G=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));W.push(G),b.push(G)}let $=n.runWebGLProgram(O,W,"float32"),U=pe({inputs:{x:$},backend:n,attrs:{shape:a.outShape}});b.push($);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function VK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n,c=I.convertConv2DDataFormat(l),p=I.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c),h;if(p.filterHeight===1&&p.filterWidth===1&&p.dilationHeight===1&&p.dilationWidth===1&&p.strideHeight===1&&p.strideWidth===1&&(p.padInfo.type==="SAME"||p.padInfo.type==="VALID"))h=Xw({x:r,filter:s,convInfo:p,backend:a});else if(p.strideWidth<=2&&c==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let f=new qw(p),g=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];h=a.runWebGLProgram(f,[r,s],"float32",g)}else if(B().getBool("WEBGL_CONV_IM2COL"))h=Kw({x:r,filter:s,convInfo:p,backend:a});else{let f=new jw(p);h=a.runWebGLProgram(f,[r,s],"float32")}let m=pe({inputs:{x:h},backend:a,attrs:{shape:p.outShape}});return a.disposeIntermediateTensorInfo(h),m}var UK={kernelName:Xi,backendName:"webgl",kernelFunc:VK},GK=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=` + `}};function Ih(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function M8({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=n.texData.get(e.dataId),p=a.inChannels,c=l[0]*l[1]*l[2],d=a.outChannels,h=a.dataFormat==="channelsLast",m=!1,f=!1,g,y=[];if(s!=null){let x=Ih(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:x}}),y.push(s))}if(r!=null){let x=Ih(r.shape,h);x!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:x}}),y.push(r))}if(!((c===1||d===1)&&p>k8)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let x=l[0]*l[1]*(l[2]+1),A={dataId:e.dataId,shape:[1,x,a.inChannels],dtype:e.dtype},b=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(Qd(u.shape,A.shape),()=>`packed reshape ${u.shape} to ${A.shape} isn't free`);let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});y.push(w);let I=kh({a:A,b:w,backend:n,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),T=n.texData.get(I.dataId);v.assert(T.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=b,T.shape=a.outShape,g=en({inputs:{x:I},backend:n}),g.shape=a.outShape,y.push(I)}else{let x=a.outHeight*a.outWidth,A=pe({inputs:{x:e},backend:n,attrs:{shape:h?[a.batchSize,x,a.inChannels]:[a.batchSize,a.inChannels,x]}}),b=pe({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}}),w=kh({a:h?A:b,b:h?b:A,transposeA:!h,transposeB:f,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=pe({inputs:{x:w},backend:n,attrs:{shape:a.outShape}}),y.push(A),y.push(b),y.push(w)}for(let x of y)n.disposeIntermediateTensorInfo(x);return g}function $8({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,outWidth:c,outHeight:d,dataFormat:h}=a,m=h==="channelsLast",f=l*u*p,g=d*c,y=[a.batchSize,f,g],x=!0,A=!1,b=[];if(s!=null){let G=Ih(s.shape,m);G!=null&&(s=pe({inputs:{x:s},backend:n,attrs:{shape:G}}),b.push(s))}if(r!=null){let G=Ih(r.shape,m);G!=null&&(r=pe({inputs:{x:r},backend:n,attrs:{shape:G}}),b.push(r))}let w=pe({inputs:{x:t},backend:n,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});b.push(w);let I=new QX(y,a),T=[e.shape,[a.padInfo.top,a.padInfo.left],[a.strideHeight,a.strideWidth],[a.dilationHeight,a.dilationWidth],[a.inChannels],[a.filterWidth*a.inChannels],[a.outWidth]],N=n.runWebGLProgram(I,[e],"float32",T),M=pe({inputs:{x:N},backend:n,attrs:{shape:y}});b.push(N),b.push(M);let $=r!=null,E=s!=null,S=o==="leakyrelu",_=o?ep(o,!0):null,O=new w8(m?M.shape:w.shape,m?w.shape:M.shape,m?[a.batchSize,g,a.outChannels]:[a.batchSize,a.outChannels,g],x,A,$,_,E,S),W=m?[M,w]:[w,M];if(r&&W.push(r),E&&W.push(s),S){let G=n.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));W.push(G),b.push(G)}let P=n.runWebGLProgram(O,W,"float32"),U=pe({inputs:{x:P},backend:n,attrs:{shape:a.outShape}});b.push(P);for(let G of b)n.disposeIntermediateTensorInfo(G);return U}function eK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n,c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c),h;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"))h=M8({x:r,filter:s,convInfo:d,backend:a});else if(d.strideWidth<=2&&c==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let f=new E8(d),g=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=a.runWebGLProgram(f,[r,s],"float32",g)}else if(B().getBool("WEBGL_CONV_IM2COL"))h=$8({x:r,filter:s,convInfo:d,backend:a});else{let f=new R8(d);h=a.runWebGLProgram(f,[r,s],"float32")}let m=pe({inputs:{x:h},backend:a,attrs:{shape:d.outShape}});return a.disposeIntermediateTensorInfo(h),m}var tK={kernelName:wi,backendName:"webgl",kernelFunc:eK},aK=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -2694,13 +2694,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},HK=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=a-1-e.padInfo.left,l=s?1:2,u=s?2:3,d=s?3:1;this.userCode=` + `}},nK=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=a-1-e.padInfo.left,l=s?1:2,u=s?2:3,p=s?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${o}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d1 = coords[${d}]; + int d1 = coords[${p}]; ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads; int dyRCorner = dyCorner.x; @@ -2747,7 +2747,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},jK=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=` + `}},rK=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; @@ -2789,7 +2789,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},qK=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=a-1-e.padInfo.top,u=n-1-e.padInfo.left;this.userCode=` + `}},sK=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,a=e.filterHeight,n=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=a-1-e.padInfo.top,u=n-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${o}, ${l}, ${u}); void main() { @@ -2846,7 +2846,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}};function XK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:d}=n,c=I.convertConv2DDataFormat(l),p=I.computeConv2DInfo(r.shape,d,i,1,o,u,!1,c),h=new GK(p);return a.runWebGLProgram(h,[r,s],"float32")}var KK={kernelName:bp,backendName:"webgl",kernelFunc:XK},YK=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.filterHeight,a=e.filterWidth,n=t-1-e.padInfo.top,r=a-1-e.padInfo.left;this.userCode=` + `}};function iK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=n,c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new aK(d);return a.runWebGLProgram(h,[r,s],"float32")}var oK={kernelName:hp,backendName:"webgl",kernelFunc:iK},lK=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=ga(this.outputShape.length);let t=e.filterHeight,a=e.filterWidth,n=t-1-e.padInfo.top,r=a-1-e.padInfo.left;this.userCode=` const ivec2 pads = ivec2(${n}, ${r}); void main() { @@ -2920,17 +2920,17 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(result); } - `}};function ZK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}=n,c=I.convertConv2DDataFormat(u),p=I.computeConv2DInfo(i,s.shape,o,1,l,d,!1,c);if(B().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let h=[[p.strideHeight,p.strideWidth]],m=new YK(p);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new HK(p);return a.runWebGLProgram(h,[r,s],"float32")}}var JK={kernelName:Ki,backendName:"webgl",kernelFunc:ZK};function QK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=I.computeConv3DInfo(r.shape,s.shape,i,l,o),d=new WK(u);return a.runWebGLProgram(d,[r,s],"float32")}var eY={kernelName:Yi,backendName:"webgl",kernelFunc:QK};function tY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=I.computeConv3DInfo(r.shape,l,i,1,o),d=new jK(u);return a.runWebGLProgram(d,[r,s],"float32")}var aY={kernelName:Au,backendName:"webgl",kernelFunc:tY};function nY(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=I.computeConv3DInfo(l,s.shape,o,1,i),d=new qK(u);return a.runWebGLProgram(d,[r,s],"float32")}var rY={kernelName:Zi,backendName:"webgl",kernelFunc:nY},sY=rd+` + `}};function uK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=n,c=C.convertConv2DDataFormat(u),d=C.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c);if(B().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let h=[[d.strideHeight,d.strideWidth]],m=new lK(d);return a.runWebGLProgram(m,[r,s],"float32",h)}else{let h=new nK(d);return a.runWebGLProgram(h,[r,s],"float32")}}var dK={kernelName:ki,backendName:"webgl",kernelFunc:uK};function pK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new JX(u);return a.runWebGLProgram(p,[r,s],"float32")}var cK={kernelName:Ii,backendName:"webgl",kernelFunc:pK};function hK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new rK(u);return a.runWebGLProgram(p,[r,s],"float32")}var mK={kernelName:mu,backendName:"webgl",kernelFunc:hK};function fK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,o,1,i),p=new sK(u);return a.runWebGLProgram(p,[r,s],"float32")}var gK={kernelName:Si,backendName:"webgl",kernelFunc:fK},yK=Ju+` return cos(x); -`,iY=` +`,xK=` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${cl} + ${sl} return result; -`,oY=tt({opSnippet:sY,packedOpSnippet:iY}),lY={kernelName:Ji,backendName:"webgl",kernelFunc:oY},uY=` +`,AK=tt({opSnippet:yK,packedOpSnippet:xK}),bK={kernelName:Ci,backendName:"webgl",kernelFunc:AK},vK=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,dY=tt({opSnippet:uY}),pY={kernelName:Qi,backendName:"webgl",kernelFunc:dY},cY=class{constructor(e,t,a,n,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[d,c]=a;this.outputShape=[u,d,c,l];let p=n==="bilinear"?1:0,[h,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=d>1?[`${(i-1)/(d-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[x,A,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=` +`,wK=tt({opSnippet:vK}),kK={kernelName:Ti,backendName:"webgl",kernelFunc:wK},IK=class{constructor(e,t,a,n,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[p,c]=a;this.outputShape=[u,p,c,l];let d=n==="bilinear"?1:0,[h,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[x,A,b]=c>1?[`${(o-1)/(c-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=` const float height_ratio = float(${f}); const float width_ratio = float(${x}); void main() { @@ -2967,7 +2967,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } vec2 sourceFracIndexCR = vec2(in_x,in_y); - if(${p} == 1) { + if(${d} == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); @@ -2991,20 +2991,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam setOutput(newValue); } } - `}},hY=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,d=new cY(r.shape,s.shape,o,l,u);return a.runWebGLProgram(d,[r,s,i],"float32")},mY={kernelName:ao,backendName:"webgl",kernelFunc:hY},up;(function(e){e.Prod="*",e.Sum="+"})(up||(up={}));var Y5=class{constructor(e,t,a,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let r=this.outputShape.length,s=this.op===up.Prod?"1.0":"0.0",i=a?s:`getX(${Z5(r,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";a?(l=n?`end != ${o-1}`:"end != 0",u=n?"end + 1":"end - 1"):(l=n?`end + pow2 < ${o}`:"end >= pow2",u=n?"end + pow2":"end - pow2"),this.userCode=` + `}},SK=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,p=new IK(r.shape,s.shape,o,l,u);return a.runWebGLProgram(p,[r,s,i],"float32")},CK={kernelName:Ei,backendName:"webgl",kernelFunc:SK},ap;(function(e){e.Prod="*",e.Sum="+"})(ap||(ap={}));var z5=class{constructor(e,t,a,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let r=this.outputShape.length,s=this.op===ap.Prod?"1.0":"0.0",i=a?s:`getX(${L5(r,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";a?(l=n?`end != ${o-1}`:"end != 0",u=n?"end + 1":"end - 1"):(l=n?`end + pow2 < ${o}`:"end >= pow2",u=n?"end + pow2":"end - pow2"),this.userCode=` void main() { ${ft(r)} coords = getOutputCoords(); - int end = ${J5(r,"coords",this.op)}; + int end = ${W5(r,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${l}) { int idx = ${u}; - ${J5(r,"coords",this.op)} = idx; - val ${this.op}= getX(${Z5(r,"coords",this.op)}); + ${W5(r,"coords",this.op)} = idx; + val ${this.op}= getX(${L5(r,"coords",this.op)}); } setOutput(val); } - `}};function Z5(e,t,a){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 new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function J5(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function Yw(e,t,a,n,r,s){let i=t.shape.length,o=I.getAxesPermutation([n],i),l=t;o!=null&&(l=Ta({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=I.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let d=l.shape[u],c=tn({inputs:{x:l},backend:a});for(let p=0;p<=Math.ceil(Math.log2(d))-1;p++){let h=new Y5(e,l.shape,!1,s),m=[[p]],f=c;c=a.runWebGLProgram(h,[c],c.dtype,m),a.disposeIntermediateTensorInfo(f)}if(r){let p=new Y5(e,l.shape,r,s),h=c;c=a.runWebGLProgram(p,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let p=I.getUndoAxesPermutation(o),h=Ta({inputs:{x:c},backend:a,attrs:{perm:p}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function fY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Yw(up.Prod,r,a,s,i,o)}var gY={kernelName:eo,backendName:"webgl",kernelFunc:fY};function yY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Yw(up.Sum,r,a,s,i,o)}var xY={kernelName:to,backendName:"webgl",kernelFunc:yY};function AY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n;if(r.shape.length===1){let l=a.readSync(r.dataId),u=a.readSync(s.dataId),d=Nw(l,u,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,d)}else if(r.shape.length===2){let l=a.bufferSync(r),u=a.bufferSync(s),d=vj(l,u,i,o);return a.makeTensorInfo(d.shape,s.dtype,d.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var bY={kernelName:bu,backendName:"webgl",kernelFunc:AY},vY=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` + `}};function L5(e,t,a){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 new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function W5(e,t,a){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw new Error(`Cumulative ${a} for rank ${e} is not yet supported`)}function P8(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=Ca({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let p=l.shape[u],c=en({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new z5(e,l.shape,!1,s),m=[[d]],f=c;c=a.runWebGLProgram(h,[c],c.dtype,m),a.disposeIntermediateTensorInfo(f)}if(r){let d=new z5(e,l.shape,r,s),h=c;c=a.runWebGLProgram(d,[c],c.dtype),a.disposeIntermediateTensorInfo(h)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=Ca({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(l),h}return c}function TK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return P8(ap.Prod,r,a,s,i,o)}var NK={kernelName:Ni,backendName:"webgl",kernelFunc:TK};function RK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return P8(ap.Sum,r,a,s,i,o)}var EK={kernelName:Ri,backendName:"webgl",kernelFunc:RK};function MK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n;if(r.shape.length===1){let l=a.readSync(r.dataId),u=a.readSync(s.dataId),p=p8(l,u,s.dtype,s.shape,i);return a.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=a.bufferSync(r),u=a.bufferSync(s),p=PH(l,u,i,o);return a.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var $K={kernelName:fu,backendName:"webgl",kernelFunc:MK},PK=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=a,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3023,7 +3023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam 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 wY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),m=i==="NHWC"?[o,c,p,h]:[o,h,c,p],f=new vY(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var kY={kernelName:no,backendName:"webgl",kernelFunc:wY},Zw=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";a&&(n?l=`float activation(float a) { + `}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 _K(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=new PK(m,s,i);return a.runWebGLProgram(f,[r],r.dtype)}var FK={kernelName:Mi,backendName:"webgl",kernelFunc:_K},_8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";a&&(n?l=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${a} }`:r?l=`float activation(float a) { @@ -3033,7 +3033,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float activation(float x) { ${a} } - `,u="result = activation(result);");let d=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` + `,u="result = activation(result);");let p=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${l} void main() { @@ -3072,30 +3072,30 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } float result = dotProd; - ${d} + ${p} ${u} setOutput(result); } - `}},Jw=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,d=e.filterWidth,c=d,p=` + `}},F8=class{constructor(e,t=!1,a=null,n=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ga(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,p=e.filterWidth,c=p,d=` int xR; int xC; int xCOffset; - vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) { - `;for(let g=0;g<(c+1)/2;g++){let y=g*2;if(p+=` + `;for(let g=0;g<(c+1)/2;g++){let y=g*2;if(d+=` xC = xCCorner + ${y*l}; - `,o===1){if(y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xCOffset, d1); @@ -3107,9 +3107,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } xTexelC${y}Ready = 1; } - `,l===1&&y>0?p+=` + `,l===1&&y>0?d+=` xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy); - `:p+=` + `:d+=` xCOffset = xC + 1 - 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { @@ -3125,7 +3125,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } else { xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy); } - `):p+=` + `):d+=` if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -3135,7 +3135,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } xC${y} = xTexelC${y}; - `,y+1= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { @@ -3148,7 +3148,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } xTexelC${y+1}Ready = 1; } - `,l>1?p+=` + `,l>1?d+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); @@ -3156,11 +3156,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } else { xC${y+1} = vec4(0.0, 0.0, xTexelC${y+1}.xy); } - `:p+=` + `:d+=` xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy); - `):x===1?p+=` + `):x===1?d+=` xC${y+1} = xTexelC${y}; - `:p+=` + `:d+=` xCOffset = xC + ${x}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) { @@ -3172,7 +3172,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } xC${y+1} = xTexelC${y+1}; - `}}else y= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xCOffset, d1); @@ -3195,14 +3195,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw); - `,y+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy); - `)):(p+=` + `)):(d+=` if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) { xTexelC${y} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { @@ -3222,17 +3222,17 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam xC${y} = vec4( xTexelC${y}.xy, xTexelC${y+1}.xy); - `,y+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let c=I.computeConv2DInfo(r.shape,s.shape,i,d,o,u,!0),p;B().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?p=new Jw(c):p=new Zw(c);let h=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return a.runWebGLProgram(p,[r,s],"float32",h)}var SY={kernelName:ro,backendName:"webgl",kernelFunc:IY},TY=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=` + `}};function DK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=n,p=l;p==null&&(p=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(i,p),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let c=C.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),d;B().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?d=new F8(c):d=new _8(c);let h=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return a.runWebGLProgram(d,[r,s],"float32",h)}var OK={kernelName:$i,backendName:"webgl",kernelFunc:DK},zK=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,a=e.strideWidth,n=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -3300,7 +3300,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},CY=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=a-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=` + `}},LK=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,a=e.filterWidth,n=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=a-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${s}, ${i}); void main() { @@ -3345,15 +3345,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}};function NY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:d}=n,c=I.computeConv2DInfo(r.shape,d,i,o,l,u,!0),p=new TY(c);return a.runWebGLProgram(p,[r,s],"float32")}var RY={kernelName:vp,backendName:"webgl",kernelFunc:NY};function EY(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:d}=n,c=I.computeConv2DInfo(d,s.shape,i,o,l,u,!0),p=new CY(c);return a.runWebGLProgram(p,[r,s],"float32")}var MY={kernelName:wp,backendName:"webgl",kernelFunc:EY},FY=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function WK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=n,c=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new zK(c);return a.runWebGLProgram(d,[r,s],"float32")}var BK={kernelName:mp,backendName:"webgl",kernelFunc:WK};function VK(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=n,c=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new LK(c);return a.runWebGLProgram(d,[r,s],"float32")}var UK={kernelName:fp,backendName:"webgl",kernelFunc:VK},GK=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 $Y(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=pe({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new FY(s),l=a.runWebGLProgram(o,[i],i.dtype),u=pe({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var DY={kernelName:vu,backendName:"webgl",kernelFunc:$Y},PY=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:a,padInfo:n,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:d,left:c}=n;this.userCode=` + `}};function HK(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=pe({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new GK(s),l=a.runWebGLProgram(o,[i],i.dtype),u=pe({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(l),u}var jK={kernelName:gu,backendName:"webgl",kernelFunc:HK},qK=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:a,padInfo:n,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:p,left:c}=n;this.userCode=` const ivec2 strides = ivec2(${r}, ${s}); - const ivec2 pads = ivec2(${d}, ${c}); + const ivec2 pads = ivec2(${p}, ${c}); const float neg_infinity = -3.4e38; void main() { @@ -3389,7 +3389,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float result = curVal; setOutput(result); } - `}};function _Y(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=I.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),d,c=new PY(u);d=a.runWebGLProgram(c,[r,s],"float32");let p=pe({inputs:{x:d},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(d),p}var OY={kernelName:so,backendName:"webgl",kernelFunc:_Y};function zY(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=I.decodeEinsumEquation(r,s.length);I.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=I.getEinsumComputePath(o,l),c=d.length,p=null,h=i.length,m=[];for(let f=0;f=0&&(p=c0({inputs:{x:p},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(p)),h--)}for(let f of m)f!==p&&a.disposeIntermediateTensorInfo(f);return p}var LY={kernelName:Ip,backendName:"webgl",kernelFunc:zY},WY="return (x >= 0.0) ? x : (exp(x) - 1.0);",BY=` + `}};function XK(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,c=new qK(u);p=a.runWebGLProgram(c,[r,s],"float32");let d=pe({inputs:{x:p},backend:a,attrs:{shape:u.outShape}});return a.disposeIntermediateTensorInfo(p),d}var KK={kernelName:Pi,backendName:"webgl",kernelFunc:XK};function YK(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=i0({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeIntermediateTensorInfo(f);return d}var ZK={kernelName:yp,backendName:"webgl",kernelFunc:YK},JK="return (x >= 0.0) ? x : (exp(x) - 1.0);",QK=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3398,29 +3398,29 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,VY=tt({opSnippet:WY,packedOpSnippet:BY}),UY={kernelName:oo,backendName:"webgl",kernelFunc:VY},GY="return (b >= 0.0) ? a : a * (b + 1.0);",HY=` +`,eY=tt({opSnippet:JK,packedOpSnippet:QK}),tY={kernelName:Fi,backendName:"webgl",kernelFunc:eY},aY="return (b >= 0.0) ? a : a * (b + 1.0);",nY=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,jY=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new nd(HY,n.shape,r.shape):new Ei(GY,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},qY={kernelName:wu,backendName:"webgl",kernelFunc:jY},XY=` +`,rY=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=B().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Zu(nY,n.shape,r.shape):new ri(aY,n.shape,r.shape);return a.runWebGLProgram(s,[n,r],n.dtype)},sY={kernelName:yu,backendName:"webgl",kernelFunc:rY},iY=` return vec4(equal(a, b)); -`,KY="return float(a == b);",YY=ha({opSnippet:KY,packedOpSnippet:XY,dtype:"bool",cpuKernelImpl:Tj}),ZY={kernelName:ms,backendName:"webgl",kernelFunc:YY},JY=` +`,oY="return float(a == b);",lY=ha({opSnippet:oY,packedOpSnippet:iY,dtype:"bool",cpuKernelImpl:zH}),uY={kernelName:Oi,backendName:"webgl",kernelFunc:lY},dY=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - float p = ${I.ERF_P}; - float a1 = ${I.ERF_A1}; - float a2 = ${I.ERF_A2}; - float a3 = ${I.ERF_A3}; - float a4 = ${I.ERF_A4}; - float a5 = ${I.ERF_A5}; + 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)); -`,QY=tt({opSnippet:JY}),eZ={kernelName:lo,backendName:"webgl",kernelFunc:QY},tZ=rd+` +`,pY=tt({opSnippet:dY}),cY={kernelName:Di,backendName:"webgl",kernelFunc:pY},hY=Ju+` return exp(x); -`,aZ=` +`,mY=` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -3429,7 +3429,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam result.a = isNaN.a ? x.a : result.a; return result; -`,Qw=tt({opSnippet:tZ,packedOpSnippet:aZ,cpuKernelImpl:Cj,dtype:"float32"}),nZ={kernelName:fs,backendName:"webgl",kernelFunc:Qw};function q1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),pe({inputs:{x:s},backend:n,attrs:{shape:o}})}var rZ={kernelName:ku,backendName:"webgl",kernelFunc:q1},Q5="return exp(x) - 1.0;",sZ=tt({opSnippet:Q5,packedOpSnippet:Q5,cpuKernelImpl:Nj}),iZ={kernelName:gs,backendName:"webgl",kernelFunc:sZ},eA=class{constructor(e,t,a){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let r=a?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=a?`${n}.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=` +`,D8=tt({opSnippet:hY,packedOpSnippet:mY,cpuKernelImpl:LH,dtype:"float32"}),fY={kernelName:zi,backendName:"webgl",kernelFunc:D8};function B1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),pe({inputs:{x:s},backend:n,attrs:{shape:o}})}var gY={kernelName:xu,backendName:"webgl",kernelFunc:B1},B5="return exp(x) - 1.0;",yY=tt({opSnippet:B5,packedOpSnippet:B5,cpuKernelImpl:WH}),xY={kernelName:Li,backendName:"webgl",kernelFunc:yY},V5=class{constructor(e,t,a){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let r=a?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=a?`${n}.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 = ${r}; float unaryOpComplex(float real, float expR, float imag, float expI) { @@ -3462,12 +3462,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function e8(e,t,a){let n=a.texData.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=pe({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new eA("real",l,t),d=new eA("imag",l,t),c=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:l},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:l}],p=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(d,c,"float32"),m=zs({inputs:{real:p,imag:h},backend:a});a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h);let f=pe({inputs:{x:m},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(m),f}function oZ(e){let{inputs:t,backend:a}=e,{input:n}=t;return e8(n,!1,a)}var lZ={kernelName:Sp,backendName:"webgl",kernelFunc:oZ},uZ=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function O8(e,t,a){let n=a.texData.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=pe({inputs:{x:e},backend:a,attrs:{shape:[i,s]}}),l=o.shape,u=new V5("real",l,t),p=new V5("imag",l,t),c=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:l},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:l}],d=a.runWebGLProgram(u,c,"float32"),h=a.runWebGLProgram(p,c,"float32"),m=ms({inputs:{real:d,imag:h},backend:a});a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h);let f=pe({inputs:{x:m},backend:a,attrs:{shape:e.shape}});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(m),f}function AY(e){let{inputs:t,backend:a}=e,{input:n}=t;return O8(n,!1,a)}var bY={kernelName:xp,backendName:"webgl",kernelFunc:AY},vY=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } - `}};function ic(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new uZ(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var dZ={kernelName:Iu,backendName:"webgl",kernelFunc:ic},pZ=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function ec(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new vY(n,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var wY={kernelName:Au,backendName:"webgl",kernelFunc:ec},kY=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]; @@ -3481,7 +3481,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(outputValue); } - `}},cZ={kernelName:uo,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new pZ(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},tA="return floor(x);",hZ=tt({opSnippet:tA,packedOpSnippet:tA,cpuKernelImpl:Rj}),mZ={kernelName:ys,backendName:"webgl",kernelFunc:hZ},fZ=` + `}},IY={kernelName:Wi,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new kY(a.shape);return n.runWebGLProgram(r,[a],a.dtype)}},U5="return floor(x);",SY=tt({opSnippet:U5,packedOpSnippet:U5,cpuKernelImpl:BH}),CY={kernelName:Bi,backendName:"webgl",kernelFunc:SY},TY=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3491,7 +3491,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } else { return NAN; } -`,gZ=` +`,NY=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -3512,7 +3512,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,yZ=ha({opSnippet:fZ,packedOpSnippet:gZ,dtype:"int32"}),xZ={kernelName:xs,backendName:"webgl",kernelFunc:yZ},AZ=class{constructor(e){this.variableNames=["A"];let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` +`,RY=ha({opSnippet:TY,packedOpSnippet:NY,dtype:"int32"}),EY={kernelName:Vi,backendName:"webgl",kernelFunc:RY},MY=class{constructor(e){this.variableNames=["A"];let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3534,7 +3534,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam setOutput(floor(value * 255.0 + 0.5)); } - `}},bZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` + `}},$Y=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Ra(),[a,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3568,7 +3568,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${t.output} = result; } - `}},vZ={kernelName:jd,backendName:"webgl",kernelFunc:wZ},Bl,s1=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function wZ(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],d=[u,l],c=[u,l,s];if(o||i){let f=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Bl==null||f!==s1)&&(s1=f,Bl=document.createElement("canvas").getContext("2d",{willReadFrequently:s1})),Bl.canvas.width=l,Bl.canvas.height=u,Bl.drawImage(r,0,0,l,u),r=Bl.canvas}let p=a.makeTensorInfo(d,"int32");a.texData.get(p.dataId).usage=gn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(p.dataId),r);let h=B().getBool("WEBGL_PACK")?new bZ(c):new AZ(c),m=a.runWebGLProgram(h,[p],"int32");return a.disposeData(p.dataId),m}function kZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:m}=n,f=I.convertConv2DDataFormat(d),g=I.computeConv2DInfo(r.shape,s.shape,l,c,u,p,!1,f),y,x=[],A=i!=null,b=o!=null,w=h==="leakyrelu",S=()=>{let N=[r,s],M=(F,E)=>{if(E==="NCHW"&&F.shape.length===1&&F.shape[0]!==1){let T=pe({inputs:{x:F},backend:a,attrs:{shape:[F.shape[0],1,1]}});return x.push(T),T}return F};if(A&&N.push(M(i,d)),b&&N.push(M(o,d)),w){let F=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push(F),x.push(F)}return N};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=Xw({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let N=h?op(h,!0):null,M=new qw(g,A,N,b,w),F=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],E=S();y=a.runWebGLProgram(M,E,"float32",F)}else if(B().getBool("WEBGL_CONV_IM2COL"))y=Kw({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let N=h?op(h,!1):null,M=new jw(g,A,N,b,w),F=S();y=a.runWebGLProgram(M,F,"float32")}let C=pe({inputs:{x:y},backend:a,attrs:{shape:g.outShape}});return x.push(y),x.forEach(N=>a.disposeIntermediateTensorInfo(N)),C}var IZ={kernelName:as,backendName:"webgl",kernelFunc:kZ};function SZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dimRoundingMode:c,activation:p,leakyreluAlpha:h}=n,m=[],f=d;f==null&&(f=[1,1]),v.assert(I.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=I.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),y=B().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,x=p?op(p,y):null,A=[r,s],b=i!=null,w=o!=null,S=p==="leakyrelu";if(b&&A.push(i),w&&A.push(o),S){let F=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push(F),m.push(F)}let C;y?C=new Jw(g,b,x,w,S):C=new Zw(g,b,x,w,S);let N=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=a.runWebGLProgram(C,A,"float32",N);return m.forEach(F=>a.disposeIntermediateTensorInfo(F)),M}var TZ={kernelName:ns,backendName:"webgl",kernelFunc:SZ},CZ=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=ft(a.length),s=` + `}},PY={kernelName:Ld,backendName:"webgl",kernelFunc:_Y},_l,Q2=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function _Y(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[u,l],c=[u,l,s];if(o||i){let f=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(_l==null||f!==Q2)&&(Q2=f,_l=document.createElement("canvas").getContext("2d",{willReadFrequently:Q2})),_l.canvas.width=l,_l.canvas.height=u,_l.drawImage(r,0,0,l,u),r=_l.canvas}let d=a.makeTensorInfo(p,"int32");a.texData.get(d.dataId).usage=mn.PIXELS,a.gpgpu.uploadPixelDataToTexture(a.getTexture(d.dataId),r);let h=B().getBool("WEBGL_PACK")?new $Y(c):new MY(c),m=a.runWebGLProgram(h,[d],"int32");return a.disposeData(d.dataId),m}function FY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f),y,x=[],A=i!=null,b=o!=null,w=h==="leakyrelu",I=()=>{let N=[r,s],M=($,E)=>{if(E==="NCHW"&&$.shape.length===1&&$.shape[0]!==1){let S=pe({inputs:{x:$},backend:a,attrs:{shape:[$.shape[0],1,1]}});return x.push(S),S}return $};if(A&&N.push(M(i,p)),b&&N.push(M(o,p)),w){let $=a.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));N.push($),x.push($)}return N};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=M8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&B().getBool("WEBGL_EXP_CONV")){let N=h?ep(h,!0):null,M=new E8(g,A,N,b,w),$=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],E=I();y=a.runWebGLProgram(M,E,"float32",$)}else if(B().getBool("WEBGL_CONV_IM2COL"))y=$8({x:r,filter:s,convInfo:g,backend:a,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let N=h?ep(h,!1):null,M=new R8(g,A,N,b,w),$=I();y=a.runWebGLProgram(M,$,"float32")}let T=pe({inputs:{x:y},backend:a,attrs:{shape:g.outShape}});return x.push(y),x.forEach(N=>a.disposeIntermediateTensorInfo(N)),T}var DY={kernelName:Zr,backendName:"webgl",kernelFunc:FY};function OY(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:c,activation:d,leakyreluAlpha:h}=n,m=[],f=p;f==null&&(f=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=C.computeConv2DInfo(r.shape,s.shape,l,f,u,c,!0),y=B().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,x=d?ep(d,y):null,A=[r,s],b=i!=null,w=o!=null,I=d==="leakyrelu";if(b&&A.push(i),w&&A.push(o),I){let $=a.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));A.push($),m.push($)}let T;y?T=new F8(g,b,x,w,I):T=new _8(g,b,x,w,I);let N=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],M=a.runWebGLProgram(T,A,"float32",N);return m.forEach($=>a.disposeIntermediateTensorInfo($)),M}var zY={kernelName:Jr,backendName:"webgl",kernelFunc:OY},LY=class{constructor(e,t,a,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=a;let r=ft(a.length),s=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function MZ(e,t){let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=0,()=>`GatherV2: the index value ${w} is not in [0, ${A-1}]`)}}let u=I.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=v.sizeFromShape(s.shape),c=[],p=pe({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=pe({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,d/u.batchSize]}});c.push(p),c.push(h);let m=[u.batchSize,u.outerSize,d/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=a.bufferSync(h),A=a.bufferSync(p),b=Mj(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new EZ(p.shape,m),g=a.runWebGLProgram(f,[p,h],p.dtype);c.push(g);let y=pe({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeIntermediateTensorInfo(x)),y}var FZ={kernelName:Su,backendName:"webgl",kernelFunc:t8},$Z="return float(a > b);",DZ=` + `}};function UY(e,t){let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=0,()=>`GatherV2: the index value ${w} is not in [0, ${A-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),c=[],d=pe({inputs:{x:r},backend:a,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=pe({inputs:{x:s},backend:a,attrs:{shape:[u.batchSize,p/u.batchSize]}});c.push(d),c.push(h);let m=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(a.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let x=a.bufferSync(h),A=a.bufferSync(d),b=UH(A,x,m);return c.forEach(w=>a.disposeIntermediateTensorInfo(w)),a.makeTensorInfo(u.outputShape,b.dtype,b.values)}let f=new VY(d.shape,m),g=a.runWebGLProgram(f,[d,h],d.dtype);c.push(g);let y=pe({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeIntermediateTensorInfo(x)),y}var GY={kernelName:bu,backendName:"webgl",kernelFunc:z8},HY="return float(a > b);",jY=` return vec4(greaterThan(a, b)); -`,PZ=ha({opSnippet:$Z,packedOpSnippet:DZ,cpuKernelImpl:Fj,dtype:"bool"}),_Z={kernelName:As,backendName:"webgl",kernelFunc:PZ},OZ="return float(a >= b);",zZ=` +`,qY=ha({opSnippet:HY,packedOpSnippet:jY,cpuKernelImpl:GH,dtype:"bool"}),XY={kernelName:Hi,backendName:"webgl",kernelFunc:qY},KY="return float(a >= b);",YY=` return vec4(greaterThanEqual(a, b)); -`,LZ=ha({opSnippet:OZ,packedOpSnippet:zZ,dtype:"bool",cpuKernelImpl:$j}),WZ={kernelName:bs,backendName:"webgl",kernelFunc:LZ};function BZ(e){let{inputs:t,backend:a}=e,{input:n}=t;return e8(n,!0,a)}var VZ={kernelName:Tp,backendName:"webgl",kernelFunc:BZ},UZ="return float(!isnan(x) && !isinf(x));",GZ=tt({opSnippet:UZ,dtype:"bool"}),HZ={kernelName:mo,backendName:"webgl",kernelFunc:GZ},jZ="return float(isinf(x));",qZ=tt({opSnippet:jZ,dtype:"bool"}),XZ={kernelName:fo,backendName:"webgl",kernelFunc:qZ},KZ="return float(isnan(x));",YZ=tt({opSnippet:KZ,dtype:"bool"}),ZZ={kernelName:go,backendName:"webgl",kernelFunc:YZ},JZ="return float(a < b);",QZ=` +`,ZY=ha({opSnippet:KY,packedOpSnippet:YY,dtype:"bool",cpuKernelImpl:HH}),JY={kernelName:ji,backendName:"webgl",kernelFunc:ZY};function QY(e){let{inputs:t,backend:a}=e,{input:n}=t;return O8(n,!0,a)}var eZ={kernelName:Ap,backendName:"webgl",kernelFunc:QY},tZ="return float(!isnan(x) && !isinf(x));",aZ=tt({opSnippet:tZ,dtype:"bool"}),nZ={kernelName:Xi,backendName:"webgl",kernelFunc:aZ},rZ="return float(isinf(x));",sZ=tt({opSnippet:rZ,dtype:"bool"}),iZ={kernelName:Ki,backendName:"webgl",kernelFunc:sZ},oZ="return float(isnan(x));",lZ=tt({opSnippet:oZ,dtype:"bool"}),uZ={kernelName:Yi,backendName:"webgl",kernelFunc:lZ},dZ="return float(a < b);",pZ=` return vec4(lessThan(a, b)); -`,eJ=ha({opSnippet:JZ,packedOpSnippet:QZ,cpuKernelImpl:Dj,dtype:"bool"}),tJ={kernelName:vs,backendName:"webgl",kernelFunc:eJ},aJ="return float(a <= b);",nJ=` +`,cZ=ha({opSnippet:dZ,packedOpSnippet:pZ,cpuKernelImpl:jH,dtype:"bool"}),hZ={kernelName:Ji,backendName:"webgl",kernelFunc:cZ},mZ="return float(a <= b);",fZ=` return vec4(lessThanEqual(a, b)); -`,rJ=ha({opSnippet:aJ,packedOpSnippet:nJ,cpuKernelImpl:Pj,dtype:"bool"}),sJ={kernelName:ws,backendName:"webgl",kernelFunc:rJ};function iJ(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=_j(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var oJ={kernelName:xo,backendName:"webgl",kernelFunc:iJ},lJ=rd+` +`,gZ=ha({opSnippet:mZ,packedOpSnippet:fZ,cpuKernelImpl:qH,dtype:"bool"}),yZ={kernelName:Qi,backendName:"webgl",kernelFunc:gZ};function xZ(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=XH(n,r,s);return t.makeTensorInfo([i.length],"float32",i)}var AZ={kernelName:eo,backendName:"webgl",kernelFunc:xZ},bZ=Ju+` return x < 0.0 ? 0./0. : log(x); -`,uJ=` +`,vZ=` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -3608,18 +3608,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; -`,dJ=tt({opSnippet:lJ,packedOpSnippet:uJ,cpuKernelImpl:Oj}),pJ={kernelName:ks,backendName:"webgl",kernelFunc:dJ},cJ=rd+` +`,wZ=tt({opSnippet:bZ,packedOpSnippet:vZ,cpuKernelImpl:KH}),kZ={kernelName:to,backendName:"webgl",kernelFunc:wZ},IZ=Ju+` return log(1.0 + x); -`,hJ=tt({opSnippet:cJ}),mJ={kernelName:Ao,backendName:"webgl",kernelFunc:hJ},fJ="return float(a >= 1.0 && b >= 1.0);",gJ=` +`,SZ=tt({opSnippet:IZ}),CZ={kernelName:ao,backendName:"webgl",kernelFunc:SZ},TZ="return float(a >= 1.0 && b >= 1.0);",NZ=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,yJ=ha({opSnippet:fJ,packedOpSnippet:gJ,dtype:"bool"}),xJ={kernelName:bo,backendName:"webgl",kernelFunc:yJ},AJ="return float(!(x >= 1.0));",bJ=tt({opSnippet:AJ}),vJ={kernelName:vo,backendName:"webgl",kernelFunc:bJ},wJ="return float(a >= 1.0 || b >= 1.0);",kJ=` +`,RZ=ha({opSnippet:TZ,packedOpSnippet:NZ,dtype:"bool"}),EZ={kernelName:no,backendName:"webgl",kernelFunc:RZ},MZ="return float(!(x >= 1.0));",$Z=tt({opSnippet:MZ}),PZ={kernelName:ro,backendName:"webgl",kernelFunc:$Z},_Z="return float(a >= 1.0 || b >= 1.0);",FZ=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,IJ=ha({opSnippet:wJ,packedOpSnippet:kJ,dtype:"bool"}),SJ={kernelName:wo,backendName:"webgl",kernelFunc:IJ},TJ=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` +`,DZ=ha({opSnippet:_Z,packedOpSnippet:FZ,dtype:"bool"}),OZ={kernelName:so,backendName:"webgl",kernelFunc:DZ},zZ=class{constructor(e,t,a,n,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3638,7 +3638,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam float val = x * ${o}; setOutput(val); } - `}},CJ=class{constructor(e,t,a,n,r){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(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` + `}},LZ=class{constructor(e,t,a,n,r){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(${a}) + float(${n}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; @@ -3700,7 +3700,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam vec4 result = xAtOutputCoords * ${o}; setOutput(result); } - `}},NJ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=B().getBool("WEBGL_PACK_NORMALIZATION")?new CJ(r.shape,s,i,o,l):new TJ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},RJ={kernelName:ko,backendName:"webgl",kernelFunc:NJ},EJ=class{constructor(e,t,a,n,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=a,this.alpha=n,this.beta=r,this.userCode=` + `}},WZ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u=B().getBool("WEBGL_PACK_NORMALIZATION")?new LZ(r.shape,s,i,o,l):new zZ(r.shape,s,i,o,l);return a.runWebGLProgram(u,[r],r.dtype)},BZ={kernelName:io,backendName:"webgl",kernelFunc:WZ},VZ=class{constructor(e,t,a,n,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=a,this.alpha=n,this.beta=r,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3755,16 +3755,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(result); } - `}},MJ=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=n,c=new EJ(r.shape,o,l,u,d);return a.runWebGLProgram(c,[r,s,i],r.dtype)},FJ={kernelName:Tu,backendName:"webgl",kernelFunc:MJ};function $J(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=hl(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function a8(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,d=I.getAxesPermutation(u,o),c=d!=null,p=a.shouldExecuteOnCPU([r]),h=r;if(c){if(p){let x=a.texData.get(h.dataId).values,A=new Array(o);for(let S=0;S{let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n,c=new VZ(r.shape,o,l,u,p);return a.runWebGLProgram(c,[r,s,i],r.dtype)},GZ={kernelName:vu,backendName:"webgl",kernelFunc:UZ};function HZ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,e.dtype,"max",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}function L8(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=C.getAxesPermutation(u,o),c=p!=null,d=a.shouldExecuteOnCPU([r]),h=r;if(c){if(d){let x=a.texData.get(h.dataId).values,A=new Array(o);for(let I=0;I`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=I.computePool2DInfo(r.shape,s,i,u,o,l);if(d.filterWidth===1&&d.filterHeight===1&&v.arraysEqual(d.inShape,d.outShape))return tn({inputs:{x:r},backend:a});let c=new lp(d,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var WJ={kernelName:So,backendName:"webgl",kernelFunc:LJ};function BJ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,d=[1,1,1],c=I.computePool3DInfo(r.shape,s,i,d,o,u,l),p=new K3(c,"max",!1);return a.runWebGLProgram(p,[r],r.dtype)}var VJ={kernelName:Cu,backendName:"webgl",kernelFunc:BJ},UJ=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,a=e.strideWidth,n=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=` +`,KZ=ha({opSnippet:qZ,packedOpSnippet:XZ,cpuKernelImpl:ZH}),YZ={kernelName:lo,backendName:"webgl",kernelFunc:KZ};function ZZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;ju(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return en({inputs:{x:r},backend:a});let c=new tp(p,"max",!1);return a.runWebGLProgram(c,[r],r.dtype)}var JZ={kernelName:uo,backendName:"webgl",kernelFunc:ZZ};function QZ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,p=[1,1,1],c=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new W3(c,"max",!1);return a.runWebGLProgram(d,[r],r.dtype)}var eJ={kernelName:wu,backendName:"webgl",kernelFunc:QZ},tJ=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,a=e.strideWidth,n=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${o}); void main() { @@ -3810,8 +3810,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}},GJ=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,d=o-1-e.padInfo.front,c=l-1-e.padInfo.top,p=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=` - const ivec3 pads = ivec3(${d}, ${c}, ${p}); + `}},aJ=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,a=e.strideHeight,n=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,p=o-1-e.padInfo.front,c=l-1-e.padInfo.top,d=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=` + const ivec3 pads = ivec3(${p}, ${c}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -3874,16 +3874,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam } setOutput(dotProd); } - `}};function HJ(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=[1,1,1],p=I.computePool3DInfo(i.shape,o,l,c,u,d),h=new K3(p,"max",!0),m=a.runWebGLProgram(h,[i],i.dtype),f=new GJ(p),g=a.runWebGLProgram(f,[r,m],i.dtype);return a.disposeIntermediateTensorInfo(m),g}var jJ={kernelName:Rp,backendName:"webgl",kernelFunc:HJ};function qJ(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;Ju([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:c}=n,p=I.computePool2DInfo(o.shape,l,u,1,d,c),h=!0,m=new lp(p,"max",h),f=a.runWebGLProgram(m,[o],o.dtype),g=new UJ(p),y=a.runWebGLProgram(g,[r,f],o.dtype);return a.disposeIntermediateTensorInfo(f),y}var XJ={kernelName:Np,backendName:"webgl",kernelFunc:qJ};function KJ(e,t,a,n){let r=new lp(a,"max",!1),s=n.runWebGLProgram(r,[e],"float32");r=new lp(a,"max",!0,!0,t);let i=n.runWebGLProgram(r,[e],"float32");return[s,i]}var YJ={kernelName:Nu,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;v.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];v.assert(I.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let d=I.computePool2DInfo(n.shape,r,s,u,i),[c,p]=KJ(n,o,d,l);return[c,p]}};function ZJ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=hl(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var JJ={kernelName:To,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{keepDims:r,axis:s}=t,i=a,o=n.shape.length,l=v.parseAxisParam(s,n.shape),u=l,d=I.getAxesPermutation(u,o),c=d!=null,p=i.shouldExecuteOnCPU([n]),h=[],m=n;if(c){if(p){let A=i.texData.get(m.dataId).values,b=new Array(o);for(let C=0;C{let{x:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=a;v.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(n.shape,r,s,u,i),[c,d]=oJ(n,o,p,l);return[c,d]}};function uJ(e,t,a,n){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=pe({inputs:{x:e},attrs:{shape:[s,r]},backend:n}),o=il(i,"float32","mean",n),l=pe({inputs:{x:o},attrs:{shape:a},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}var dJ={kernelName:po,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{keepDims:r,axis:s}=t,i=a,o=n.shape.length,l=v.parseAxisParam(s,n.shape),u=l,p=C.getAxesPermutation(u,o),c=p!=null,d=i.shouldExecuteOnCPU([n]),h=[],m=n;if(c){if(d){let A=i.texData.get(m.dataId).values,b=new Array(o);for(let T=0;Tu[0]+e[d]+u[1]);let n=e.length,r=ft(n),s=t.map(u=>u[0]).join(","),i=t.map((u,d)=>u[0]+e[d]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),l=a==="reflect"?0:1;if(n===1){this.userCode=` +`,fJ=ha({opSnippet:hJ,packedOpSnippet:mJ,cpuKernelImpl:JH}),gJ={kernelName:ho,backendName:"webgl",kernelFunc:fJ},yJ=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=t.map((u,p)=>u[0]+e[p]+u[1]);let n=e.length,r=ft(n),s=t.map(u=>u[0]).join(","),i=t.map((u,p)=>u[0]+e[p]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),l=a==="reflect"?0:1;if(n===1){this.userCode=` int start = ${s}; int end = ${i}; @@ -3912,7 +3912,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam ${r} coords = outC - start; setOutput(getX(${o})); } - `}},iQ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let n=e.length,r=ft(n),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=ka("rc",n),l=ka("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,d=n===1?"source":`vec2(${l.slice(-2).join()})`,c=a==="reflect"?0:1,p="";if(n===1){let h=` + `}},xJ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let n=e.length,r=ft(n),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=ka("rc",n),l=ka("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,p=n===1?"source":`vec2(${l.slice(-2).join()})`,c=a==="reflect"?0:1,d="";if(n===1){let h=` ${r} source = rc; if (source < start) { source = start * 2 - source - ${c}; @@ -3920,14 +3920,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam source = (end - 1) * 2 - source + ${c}; } source -= start; - `;p=` + `;d=` ${r} rc = outputLoc; ${h} - result[0] = getChannel(getX(${l.join()}), ${d}); + result[0] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[1] = getChannel(getX(${l.join()}), ${d}); + result[1] = getChannel(getX(${l.join()}), ${p}); } `}else{let h=` ${r} source = rc; @@ -3938,24 +3938,24 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam lt * (start * 2 - source - ${c}) + gte * ((end - 1) * 2 - source + ${c}); source -= start; - `;p=` + `;d=` ${r} rc = outputLoc; ${h} - result[0] = getChannel(getX(${l.join()}), ${d}); + result[0] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[1] = getChannel(getX(${l.join()}), ${d}); + result[1] = getChannel(getX(${l.join()}), ${p}); } rc = outputLoc; ${o[n-2]} += 1; if(${o[n-2]} < ${this.outputShape[n-2]}) { ${h} - result[2] = getChannel(getX(${l.join()}), ${d}); + result[2] = getChannel(getX(${l.join()}), ${p}); ${o[n-1]} += 1; if(${u}) { ${h} - result[3] = getChannel(getX(${l.join()}), ${d}); + result[3] = getChannel(getX(${l.join()}), ${p}); } } `}this.userCode=` @@ -3965,16 +3965,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam void main() { ${r} outputLoc = getOutputCoords(); vec4 result = vec4(0.); - ${p} + ${d} setOutput(result); } - `}},oQ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new iQ(n.shape,r,s):new sQ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},lQ={kernelName:No,backendName:"webgl",kernelFunc:oQ},uQ=`if (b == 0.0) return NAN; - return mod(a, b);`,dQ=` + `}},AJ=({inputs:e,backend:t,attrs:a})=>{let{x:n}=e,{paddings:r,mode:s}=a,i=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new xJ(n.shape,r,s):new yJ(n.shape,r,s);return t.runWebGLProgram(i,[n],n.dtype)},bJ={kernelName:mo,backendName:"webgl",kernelFunc:AJ},vJ=`if (b == 0.0) return NAN; + return mod(a, b);`,wJ=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - `+cl+` + `+sl+` return result; -`,pQ=ha({opSnippet:uQ,packedOpSnippet:dQ}),cQ={kernelName:Ro,backendName:"webgl",kernelFunc:pQ},hQ=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` +`,kJ=ha({opSnippet:vJ,packedOpSnippet:wJ}),IJ={kernelName:fo,backendName:"webgl",kernelFunc:kJ},SJ=class{constructor(e,t,a){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,a],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -3994,11 +3994,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,BX=tt({opSnippet:WX}),VX={kernelNam // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}},mQ=` + `}},CJ=` if (a == b) { return 1.0; }; -return a / b;`,fQ=` +return a / b;`,TJ=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -4016,9 +4016,9 @@ return a / b;`,fQ=` } return result; -`,n8=ha({opSnippet:mQ,packedOpSnippet:fQ,checkOutOfBounds:!0}),gQ={kernelName:io,backendName:"webgl",kernelFunc:n8},aA="return a - b;",r8=ha({opSnippet:aA,packedOpSnippet:aA,supportsComplex:!0,cpuKernelImpl:oq}),yQ={kernelName:Fs,backendName:"webgl",kernelFunc:r8};function s8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=a8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=I.expandShapeToKeepDim(o.shape,i),u=pe({inputs:{x:o},backend:a,attrs:{shape:l}}),d=r8({inputs:{a:r,b:u},backend:a}),c=Qw({inputs:{x:d},backend:a}),p=c0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:p},backend:a,attrs:{shape:l}}),m=n8({inputs:{a:c,b:h},backend:a});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h),m}var xQ={kernelName:el,backendName:"webgl",kernelFunc:s8};function AQ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:s8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],d=l.shape[1],c=new hQ(u,d,s),p=[[i]],h=a.runWebGLProgram(c,[l],"int32",p);return o||a.disposeIntermediateTensorInfo(l),h}var bQ={kernelName:Eo,backendName:"webgl",kernelFunc:AQ},vQ=$n+` +`,W8=ha({opSnippet:CJ,packedOpSnippet:TJ,checkOutOfBounds:!0}),NJ={kernelName:_i,backendName:"webgl",kernelFunc:W8},G5="return a - b;",B8=ha({opSnippet:G5,packedOpSnippet:G5,supportsComplex:!0,cpuKernelImpl:Aj}),RJ={kernelName:Ko,backendName:"webgl",kernelFunc:B8};function V8(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=v.parseAxisParam([s],r.shape),o=L8({inputs:{x:r},backend:a,attrs:{reductionIndices:i,keepDims:!1}}),l=C.expandShapeToKeepDim(o.shape,i),u=pe({inputs:{x:o},backend:a,attrs:{shape:l}}),p=B8({inputs:{a:r,b:u},backend:a}),c=D8({inputs:{x:p},backend:a}),d=i0({inputs:{x:c},backend:a,attrs:{axis:i,keepDims:!1}}),h=pe({inputs:{x:d},backend:a,attrs:{shape:l}}),m=W8({inputs:{a:c,b:h},backend:a});return a.disposeIntermediateTensorInfo(o),a.disposeIntermediateTensorInfo(u),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(h),m}var EJ={kernelName:Ho,backendName:"webgl",kernelFunc:V8};function MJ(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:V8({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new SJ(u,p,s),d=[[i]],h=a.runWebGLProgram(c,[l],"int32",d);return o||a.disposeIntermediateTensorInfo(l),h}var $J={kernelName:go,backendName:"webgl",kernelFunc:MJ},PJ=En+` return -x; -`,wQ=` +`,_J=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -4028,14 +4028,14 @@ return a / b;`,fQ=` result.a = isNaN.a ? x.a : result.a; return result; -`;function kQ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=Vj(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Zr(n.shape,wQ):r=new Qn(n.shape,vQ),a.runWebGLProgram(r,[n],n.dtype)}var IQ={kernelName:Ru,backendName:"webgl",kernelFunc:kQ},SQ=Fn.nonMaxSuppressionV3Impl;function TQ(e){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),{selectedIndices:c}=SQ(u,d,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var CQ={kernelName:Mo,backendName:"webgl",kernelFunc:TQ},NQ=Fn.nonMaxSuppressionV4Impl;function RQ(e){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),{selectedIndices:p,validOutputs:h}=NQ(d,c,i,o,l,u);return[a.makeTensorInfo([p.length],"int32",new Int32Array(p)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var EQ={kernelName:Eu,backendName:"webgl",kernelFunc:RQ},MQ=Fn.nonMaxSuppressionV5Impl;function FQ(e){I.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),p=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=MQ(d,c,p,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var $Q={kernelName:Fo,backendName:"webgl",kernelFunc:FQ},DQ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function FJ(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.texData.get(n.dataId),[i,o]=ej(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r;return B().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new jr(n.shape,_J):r=new Yn(n.shape,PJ),a.runWebGLProgram(r,[n],n.dtype)}var DJ={kernelName:Iu,backendName:"webgl",kernelFunc:FJ},OJ=Rn.nonMaxSuppressionV3Impl;function zJ(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),{selectedIndices:c}=OJ(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var LJ={kernelName:Ao,backendName:"webgl",kernelFunc:zJ},WJ=Rn.nonMaxSuppressionV4Impl;function BJ(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),{selectedIndices:d,validOutputs:h}=WJ(p,c,i,o,l,u);return[a.makeTensorInfo([d.length],"int32",new Int32Array(d)),a.makeTensorInfo([],"int32",new Int32Array([h]))]}var VJ={kernelName:Su,backendName:"webgl",kernelFunc:BJ},UJ=Rn.nonMaxSuppressionV5Impl;function GJ(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),d=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=UJ(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var HJ={kernelName:bo,backendName:"webgl",kernelFunc:GJ},jJ=class{constructor(e,t,a,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${n}), float(${a}), float(index == coords.y))); } - `}},PQ=e=>{let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),d=new DQ(u,i,o,l),c=pe({inputs:{x:r},backend:a,attrs:{shape:[u]}}),p=a.runWebGLProgram(d,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],m=pe({inputs:{x:p},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(p),m},_Q={kernelName:$o,backendName:"webgl",kernelFunc:PQ};function Mh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=sc({inputs:{input:n},backend:a}),s=Mh({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Mh({inputs:{x:i},backend:a}),l=zs({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ic({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var OQ={kernelName:qu,backendName:"webgl",kernelFunc:Mh};function i8(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=sc({inputs:{input:n},backend:a}),s=i8({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Mh({inputs:{x:i},backend:a}),l=zs({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ic({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var zQ={kernelName:Mu,backendName:"webgl",kernelFunc:i8};function LQ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return q1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=q1({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Hw({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeIntermediateTensorInfo(d)),u}var WQ={kernelName:Fu,backendName:"webgl",kernelFunc:LQ},BQ=class{constructor(e,t,a){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let n=e.length,r=ft(n),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` + `}},qJ=e=>{let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),p=new jJ(u,i,o,l),c=pe({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=a.runWebGLProgram(p,[c],s);a.disposeIntermediateTensorInfo(c);let h=[...r.shape,i],m=pe({inputs:{x:d},backend:a,attrs:{shape:h}});return a.disposeIntermediateTensorInfo(d),m},XJ={kernelName:vo,backendName:"webgl",kernelFunc:qJ};function Sh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=Qp({inputs:{input:n},backend:a}),s=Sh({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var KJ={kernelName:Bu,backendName:"webgl",kernelFunc:Sh};function U8(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=Qp({inputs:{input:n},backend:a}),s=U8({inputs:{x:r},backend:a}),i=o0({inputs:{input:n},backend:a}),o=Sh({inputs:{x:i},backend:a}),l=ms({inputs:{real:s,imag:o},backend:a});return a.disposeIntermediateTensorInfo(r),a.disposeIntermediateTensorInfo(s),a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}else return ec({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var YJ={kernelName:Cu,backendName:"webgl",kernelFunc:U8};function ZJ(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return B1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=B1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=N8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeIntermediateTensorInfo(p)),u}var JJ={kernelName:Tu,backendName:"webgl",kernelFunc:ZJ},QJ=class{constructor(e,t,a){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let n=e.length,r=ft(n),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${s}; int end = ${i}; @@ -4060,19 +4060,19 @@ return a / b;`,fQ=` setOutput(getX(${o})); } } - `}},VQ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let n=e.length,r=ft(n),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=ka("rc",n),l=ka("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,d=n===1?"source":`vec2(${l.slice(-2).join()})`,c=[`${r} rc = outputLoc;`,`${o[n-1]} += 1; + `}},eQ=class{constructor(e,t,a){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let n=e.length,r=ft(n),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=ka("rc",n),l=ka("source",n),u=`${o[n-1]} < ${this.outputShape[n-1]}`,p=n===1?"source":`vec2(${l.slice(-2).join()})`,c=[`${r} rc = outputLoc;`,`${o[n-1]} += 1; if(${u}) { `,n===1?"":`} rc = outputLoc; ${o[n-2]} += 1; if(${o[n-2]} < ${this.outputShape[n-2]}) {`,n===1?"":` ${o[n-1]} += 1; - if(${u}) {`],p=n===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let m=0,f=n===1?2:4;m= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let m=0,f=n===1?2:4;m{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(v.sizeFromShape(r.shape)===0){let u=s.map((d,c)=>d[0]+r.shape[c]+d[1]);return ic({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new VQ(r.shape,s,i):new BQ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},UQ={kernelName:Do,backendName:"webgl",kernelFunc:o8},GQ=` + `}},G8=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(v.sizeFromShape(r.shape)===0){let u=s.map((p,c)=>p[0]+r.shape[c]+p[1]);return ec({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new eQ(r.shape,s,i):new QJ(r.shape,s,i),l=[[i]];return a.runWebGLProgram(o,[r],r.dtype,l)},tQ={kernelName:wo,backendName:"webgl",kernelFunc:G8},aQ=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4093,7 +4093,7 @@ return a / b;`,fQ=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,HQ=` +`,nQ=` // 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); @@ -4109,11 +4109,11 @@ return a / b;`,fQ=` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - `+cl+` + `+sl+` return result; -`,jQ=ha({opSnippet:GQ,packedOpSnippet:HQ}),qQ={kernelName:Po,backendName:"webgl",kernelFunc:jQ};function XQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=[],u=v.parseAxisParam(s,r.shape),d=u,c=I.getAxesPermutation(d,o),p=r;c!=null&&(p=Ta({inputs:{x:r},backend:a,attrs:{perm:c}}),d=I.getInnerMostAxes(d.length,o),l.push(p)),I.assertAxesAreInnerMostDims("prod",d,o);let h;if(a.shouldExecuteOnCPU([p])){let m=a.texData.get(p.dataId).values,{outVals:f,outShape:g,outDtype:y}=Gj(p.shape,p.dtype,m,d);h=a.makeTensorInfo(g,y,f)}else{let[m,f]=I.computeOutAndReduceShapes(p.shape,d),g=v.sizeFromShape(f),y=pe({inputs:{x:p},backend:a,attrs:{shape:[-1,g]}}),x=Lp(r.dtype),A=hl(y,x,"prod",a);h=pe({inputs:{x:A},backend:a,attrs:{shape:m}}),l.push(y),l.push(A)}if(i){l.push(h);let m=I.expandShapeToKeepDim(h.shape,u);h=pe({inputs:{x:h},backend:a,attrs:{shape:m}})}return l.forEach(m=>a.disposeIntermediateTensorInfo(m)),h}var KQ={kernelName:Oo,backendName:"webgl",kernelFunc:XQ};function YQ(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.readSync(y.dataId)),u=r.map(y=>y.shape),d=a.readSync(s.dataId),c=a.readSync(i.dataId),[p,h,m]=Hj(l,u,d,s.shape,s.dtype,c,i.shape,o),f=p.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var ZQ={kernelName:Lh,backendName:"webgl",kernelFunc:YQ};function JQ(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=jj(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),p=a.makeTensorInfo([d.length],n.dtype,d);return[c,p]}var QQ={kernelName:Wh,backendName:"webgl",kernelFunc:JQ};function eee(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),c=a.readSync(i.dataId),p=o.map(g=>a.readSync(g.dataId)),h=o.map(g=>g.shape),[m,f]=qj(u,r.shape,d,s.shape,s.dtype,c,i.shape,p,h,l);return a.makeTensorInfo(m,s.dtype,f)}var tee={kernelName:Bh,backendName:"webgl",kernelFunc:eee},l8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Xj(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},aee={kernelName:$u,backendName:"webgl",kernelFunc:l8},nee="return 1.0 / x;",ree=tt({opSnippet:nee}),see={kernelName:zo,backendName:"webgl",kernelFunc:ree},iee=$n+` +`,rQ=ha({opSnippet:aQ,packedOpSnippet:nQ}),sQ={kernelName:ko,backendName:"webgl",kernelFunc:rQ};function iQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n,o=r.shape.length,l=[],u=v.parseAxisParam(s,r.shape),p=u,c=C.getAxesPermutation(p,o),d=r;c!=null&&(d=Ca({inputs:{x:r},backend:a,attrs:{perm:c}}),p=C.getInnerMostAxes(p.length,o),l.push(d)),C.assertAxesAreInnerMostDims("prod",p,o);let h;if(a.shouldExecuteOnCPU([d])){let m=a.texData.get(d.dataId).values,{outVals:f,outShape:g,outDtype:y}=aj(d.shape,d.dtype,m,p);h=a.makeTensorInfo(g,y,f)}else{let[m,f]=C.computeOutAndReduceShapes(d.shape,p),g=v.sizeFromShape(f),y=pe({inputs:{x:d},backend:a,attrs:{shape:[-1,g]}}),x=Pp(r.dtype),A=il(y,x,"prod",a);h=pe({inputs:{x:A},backend:a,attrs:{shape:m}}),l.push(y),l.push(A)}if(i){l.push(h);let m=C.expandShapeToKeepDim(h.shape,u);h=pe({inputs:{x:h},backend:a,attrs:{shape:m}})}return l.forEach(m=>a.disposeIntermediateTensorInfo(m)),h}var oQ={kernelName:So,backendName:"webgl",kernelFunc:iQ};function lQ(e){let{inputs:t,backend:a,attrs:n}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=n,l=r.map(y=>a.readSync(y.dataId)),u=r.map(y=>y.shape),p=a.readSync(s.dataId),c=a.readSync(i.dataId),[d,h,m]=nj(l,u,p,s.shape,s.dtype,c,i.shape,o),f=d.map(y=>a.makeTensorInfo([y.length],"int32",y)),g=a.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var uQ={kernelName:$h,backendName:"webgl",kernelFunc:lQ};function dQ(e){let{inputs:t,backend:a}=e,{starts:n,limits:r,deltas:s}=t,i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=rj(i,n.shape,n.dtype,o,r.shape,l,s.shape),c=a.makeTensorInfo([u.length],"int32",u),d=a.makeTensorInfo([p.length],n.dtype,p);return[c,d]}var pQ={kernelName:Ph,backendName:"webgl",kernelFunc:dQ};function cQ(e){let{inputs:t,backend:a,attrs:n}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),c=a.readSync(i.dataId),d=o.map(g=>a.readSync(g.dataId)),h=o.map(g=>g.shape),[m,f]=sj(u,r.shape,p,s.shape,s.dtype,c,i.shape,d,h,l);return a.makeTensorInfo(m,s.dtype,f)}var hQ={kernelName:_h,backendName:"webgl",kernelFunc:cQ},H8=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=ij(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},mQ={kernelName:Nu,backendName:"webgl",kernelFunc:H8},fQ="return 1.0 / x;",gQ=tt({opSnippet:fQ}),yQ={kernelName:Co,backendName:"webgl",kernelFunc:gQ},xQ=En+` return (x < 0.0) ? 0.0 : x; -`,oee=` +`,AQ=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4123,9 +4123,9 @@ return a / b;`,fQ=` result.a = isNaN.a ? x.a : result.a; return result; -`,lee=tt({opSnippet:iee,packedOpSnippet:oee}),uee={kernelName:Lo,backendName:"webgl",kernelFunc:lee},dee=$n+` +`,bQ=tt({opSnippet:xQ,packedOpSnippet:AQ}),vQ={kernelName:To,backendName:"webgl",kernelFunc:bQ},wQ=En+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,pee=` +`,kQ=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4135,10 +4135,10 @@ return a / b;`,fQ=` result.a = isNaN.a ? x.a : result.a; return result; -`,cee=tt({opSnippet:dee,packedOpSnippet:pee}),hee={kernelName:Vo,backendName:"webgl",kernelFunc:cee},mee=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` +`,IQ=tt({opSnippet:wQ,packedOpSnippet:kQ}),SQ={kernelName:Eo,backendName:"webgl",kernelFunc:IQ},CQ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${u[0]/d[0]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${o}.0); void main() { @@ -4168,11 +4168,11 @@ return a / b;`,fQ=` setOutput(newValue); } - `}},fee=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}},TQ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c;r?c="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${u[0]/d[0]}, - ${u[1]/d[1]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}, + ${u[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${o}.0, ${o}.0); @@ -4245,7 +4245,7 @@ return a / b;`,fQ=` setOutput(newValue); } - `}};function gee(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new fee(r.shape,l,u,s,i):new mee(r.shape,l,u,s,i);return a.runWebGLProgram(d,[r],"float32")}var yee={kernelName:Bo,backendName:"webgl",kernelFunc:gee},xee=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],c=1/u,p=1/d,h=Math.ceil(c)*2+2,m=Math.ceil(p)*2+2;this.userCode=` + `}};function NQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new TQ(r.shape,l,u,s,i):new CQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],"float32")}var RQ={kernelName:Ro,backendName:"webgl",kernelFunc:NQ},EQ=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],c=1/u,d=1/p,h=Math.ceil(c)*2+2,m=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4256,10 +4256,10 @@ return a / b;`,fQ=` float accumulator = 0.0; const float heightScale = float(${u}); - const float widthScale = float(${d}); + const float widthScale = float(${p}); const float invHeightScale = float(${c}); - const float invWidthScale = float(${p}); + const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${m}); @@ -4326,10 +4326,10 @@ return a / b;`,fQ=` setOutput(accumulator); } - `}};function Aee(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new xee(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var bee={kernelName:_u,backendName:"webgl",kernelFunc:Aee},vee=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",p;r?p="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":p="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};function MQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new EQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var $Q={kernelName:Mu,backendName:"webgl",kernelFunc:MQ},PQ=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",d;r?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${u[0]/d[0]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${o}.0); void main() { @@ -4339,7 +4339,7 @@ return a / b;`,fQ=` ivec2 yRC = coords.yz; // Fractional source index. - vec2 sourceFracIndexRC = ${p}; + vec2 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( @@ -4348,11 +4348,11 @@ return a / b;`,fQ=` setOutput(newValue); } - `}},wee=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],d=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",p;r?p="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":p="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}},_Q=class{constructor(e,t,a,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,a,l];let u=[n&&t>1?i-1:i,n&&a>1?o-1:o],p=[n&&t>1?t-1:t,n&&a>1?a-1:a],c=n?"0.5":"0.0",d;r?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${u[0]/d[0]}, - ${u[1]/d[1]}, - ${u[1]/d[1]}); + ${u[0]/p[0]}, + ${u[1]/p[1]}, + ${u[1]/p[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${o}.0, ${o}.0); @@ -4368,7 +4368,7 @@ return a / b;`,fQ=` ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. - vec3 sourceFracIndexRC = ${p}; + vec3 sourceFracIndexRC = ${d}; // Compute the coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( @@ -4389,7 +4389,7 @@ return a / b;`,fQ=` setOutput(newValue); } - `}};function kee(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new wee(r.shape,l,u,s,i):new vee(r.shape,l,u,s,i);return a.runWebGLProgram(d,[r],r.dtype)}var Iee={kernelName:Wo,backendName:"webgl",kernelFunc:kee},See=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],c=1/u,p=1/d,h=Math.ceil(c)*2+2,m=Math.ceil(p)*2+2;this.userCode=` + `}};function FQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=B().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new _Q(r.shape,l,u,s,i):new PQ(r.shape,l,u,s,i);return a.runWebGLProgram(p,[r],r.dtype)}var DQ={kernelName:No,backendName:"webgl",kernelFunc:FQ},OQ=class{constructor(e,t,a){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,r]=t,[,s,i]=e,o=[a&&s>1?n-1:n,a&&i>1?r-1:r],l=[a&&s>1?s-1:s,a&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],c=1/u,d=1/p,h=Math.ceil(c)*2+2,m=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4400,10 +4400,10 @@ return a / b;`,fQ=` float accumulator = 0.0; const float heightScale = float(${u}); - const float widthScale = float(${d}); + const float widthScale = float(${p}); const float invHeightScale = float(${c}); - const float invWidthScale = float(${p}); + const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${m}); @@ -4459,7 +4459,7 @@ return a / b;`,fQ=` setOutput(accumulator); } - `}};function Tee(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new See(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var Cee={kernelName:Pu,backendName:"webgl",kernelFunc:Tee},Nee=class{constructor(e,t){this.variableNames=["x"];let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);if(this.outputShape=e,a===1){this.userCode=` + `}};function zQ(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=new OQ(s.shape,r.shape,i);return a.runWebGLProgram(o,[s],s.dtype)}var LQ={kernelName:Eu,backendName:"webgl",kernelFunc:zQ},WQ=class{constructor(e,t){this.variableNames=["x"];let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);if(this.outputShape=e,a===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); @@ -4469,7 +4469,7 @@ return a / b;`,fQ=` ${s} coords = getOutputCoords(); setOutput(getX(${r})); } - `}},Ree=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);this.outputShape=e;let n=ka("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=ft(a);a===1?this.userCode=` + `}},BQ=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let a=e.length;if(a>4)throw new Error(`WebGL backend: Reverse of rank-${a} tensor is not yet supported`);this.outputShape=e;let n=ka("rc",a),r=`${n[a-1]} + 1 < ${this.outputShape[a-1]}`,s=`${n[a-2]} + 1 < ${this.outputShape[a-2]}`,i=ft(a);a===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4492,12 +4492,12 @@ return a / b;`,fQ=` if(${s}) { result.b = ${u(n.slice())}; if(${r}) { - result.a = ${d(n.slice())}; + result.a = ${p(n.slice())}; } } setOutput(result); } - `;function o(h){return c(h)}function l(h){return h[a-1]="("+h[a-1]+" + 1)",c(h)}function u(h){return h[a-2]="("+h[a-2]+" + 1)",c(h)}function d(h){return h[a-1]="("+h[a-1]+" + 1)",h[a-2]="("+h[a-2]+" + 1)",c(h)}function c(h){let m=e.map((y,x)=>p(x,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function p(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function Eee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return tn({inputs:{x:r},backend:a});let l=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Ree(r.shape,o):new Nee(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var Mee={kernelName:Uo,backendName:"webgl",kernelFunc:Eee},Fee=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let a=e[1],n=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=` + `;function o(h){return c(h)}function l(h){return h[a-1]="("+h[a-1]+" + 1)",c(h)}function u(h){return h[a-2]="("+h[a-2]+" + 1)",c(h)}function p(h){return h[a-1]="("+h[a-1]+" + 1)",h[a-2]="("+h[a-2]+" + 1)",c(h)}function c(h){let m=e.map((y,x)=>d(x,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function d(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function VQ(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return en({inputs:{x:r},backend:a});let l=B().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new BQ(r.shape,o):new WQ(r.shape,o);return a.runWebGLProgram(l,[r],r.dtype)}var UQ={kernelName:Mo,backendName:"webgl",kernelFunc:VQ},GQ=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let a=e[1],n=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=` vec3 fill = vec3(${t.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { @@ -4516,7 +4516,7 @@ return a / b;`,fQ=` } setOutput(outputValue); } - `}},$ee={kernelName:ol,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new Fee(n.shape,s),[u,d]=I.getImageCenter(i,n.shape[1],n.shape[2]),c=[[u,d,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[n],n.dtype,c)}},Dee=` + `}},HQ={kernelName:el,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new GQ(n.shape,s),[u,p]=C.getImageCenter(i,n.shape[1],n.shape[2]),c=[[u,p,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[n],n.dtype,c)}},jQ=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -4531,7 +4531,7 @@ return a / b;`,fQ=` return base + 1.0; } } -`,Pee=tt({opSnippet:Dee}),_ee={kernelName:Go,backendName:"webgl",kernelFunc:Pee},Oee="return inversesqrt(x);",zee=tt({opSnippet:Oee,cpuKernelImpl:Kj}),Lee={kernelName:Ns,backendName:"webgl",kernelFunc:zee},Y3=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=ft(r.length),u=ft(s.length),d="";a===1?d="i":a===2&&(d="i, j");let c=`getIndices(${d})`,p="";n===1?p="i":n===2&&(p="i, coords[1]");let h=`getUpdates(${p})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides";this.userCode=` +`,qQ=tt({opSnippet:jQ}),XQ={kernelName:$o,backendName:"webgl",kernelFunc:qQ},KQ="return inversesqrt(x);",YQ=tt({opSnippet:KQ,cpuKernelImpl:oj}),ZQ={kernelName:Po,backendName:"webgl",kernelFunc:YQ},B3=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides";this.userCode=` ${l} strides = ${l}(${r}); void main() { @@ -4551,7 +4551,7 @@ return a / b;`,fQ=` } setOutput(mix(${f}, sum, float(found))); } - `}},Wee=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=s;let l=ft(r.length),u=ft(s.length),d="";a===1?d="i":a===2&&(d="i, j");let c=`getIndices(${d})`,p="";n===1?p="i":n===2&&(p="i, coords[1]");let h=`getUpdates(${p})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides",y=t>1?"strides[j + 1]":"strides";this.userCode=` + `}},JQ=class{constructor(e,t,a,n,r,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=s;let l=ft(r.length),u=ft(s.length),p="";a===1?p="i":a===2&&(p="i, j");let c=`getIndices(${p})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,m="";o&&(m="coords[0], coords[1]");let f=`getDefaultValue(${m})`,g=t>1?"strides[j]":"strides",y=t>1?"strides[j + 1]":"strides";this.userCode=` ${l} strides = ${l}(${r}); void main() { @@ -4588,7 +4588,7 @@ return a / b;`,fQ=` } setOutput(mix(${f}, sum, found)); } - `}};function Bee(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=I.calculateShapes(s,r,i),p=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=pe({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=a.makeTensorInfo([],"float32",new Float32Array([0])),g;B().getBool("WEBGL_PACK")?g=new Wee(l,o,h.shape.length,m.shape.length,d,p):g=new Y3(l,o,h.shape.length,m.shape.length,d,p);let y=a.runWebGLProgram(g,[m,h,f],m.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(f),x}var Vee={kernelName:Ho,backendName:"webgl",kernelFunc:Bee},Uee=class{constructor(e,t,a,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,a];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=B().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` + `}};function QQ(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=pe({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=a.makeTensorInfo([],"float32",new Float32Array([0])),g;B().getBool("WEBGL_PACK")?g=new JQ(l,o,h.shape.length,m.shape.length,p,d):g=new B3(l,o,h.shape.length,m.shape.length,p,d);let y=a.runWebGLProgram(g,[m,h,f],m.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:i}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(y),a.disposeIntermediateTensorInfo(f),x}var eee={kernelName:_o,backendName:"webgl",kernelFunc:QQ},tee=class{constructor(e,t,a,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,a];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=B().getNumber("WEBGL_VERSION")===2?r:s,o=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4613,7 +4613,7 @@ return a / b;`,fQ=` setOutput(float(findBound(batch, value))); } - `}};function Gee(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new Uee(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return a.runWebGLProgram(o,[r,s],"int32",l)}var Hee={kernelName:qo,backendName:"webgl",kernelFunc:Gee},jee=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.outputShape=t;let n,r;if(a>4)throw Error(`Where for rank ${a} is not yet supported`);if(a===1)r="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u4)throw Error(`Where for rank ${a} is not yet supported`);if(a===1)r="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); -`,Yee=tt({opSnippet:Kee}),Zee={kernelName:Xo,backendName:"webgl",kernelFunc:Yee},Jee=rd+` +`,lee=tt({opSnippet:oee}),uee={kernelName:Oo,backendName:"webgl",kernelFunc:lee},dee=Ju+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,Qee=` +`,pee=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4641,20 +4641,20 @@ return a / b;`,fQ=` result.a = isNaN.a ? x.a : result.a; return result; -`,ete=tt({opSnippet:Jee,packedOpSnippet:Qee,cpuKernelImpl:Zj}),tte={kernelName:Rs,backendName:"webgl",kernelFunc:ete},ate=` +`,cee=tt({opSnippet:dee,packedOpSnippet:pee,cpuKernelImpl:uj}),hee={kernelName:Bo,backendName:"webgl",kernelFunc:cee},mee=` if (isnan(x)) { return 0.0; } return sign(x); -`,nte=tt({opSnippet:ate}),rte={kernelName:Zo,backendName:"webgl",kernelFunc:nte},ste=rd+` +`,fee=tt({opSnippet:mee}),gee={kernelName:Wo,backendName:"webgl",kernelFunc:fee},yee=Ju+` return sin(x); -`,ite=` +`,xee=` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${cl} + ${sl} return result; -`,ote=tt({opSnippet:ste,packedOpSnippet:ite}),lte={kernelName:Ko,backendName:"webgl",kernelFunc:ote},ute=` +`,Aee=tt({opSnippet:yee,packedOpSnippet:xee}),bee={kernelName:zo,backendName:"webgl",kernelFunc:Aee},vee=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,dte=tt({opSnippet:ute}),pte={kernelName:Yo,backendName:"webgl",kernelFunc:dte},cte=` +`,wee=tt({opSnippet:vee}),kee={kernelName:Lo,backendName:"webgl",kernelFunc:wee},Iee=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4674,17 +4674,17 @@ return a / b;`,fQ=` result = log(exp_x + 1.0); } return result; -`,hte=tt({opSnippet:cte}),mte={kernelName:Jo,backendName:"webgl",kernelFunc:hte},fte=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,x)=>y*x),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeIntermediateTensorInfo(y)),g},gte={kernelName:Lu,backendName:"webgl",kernelFunc:fte};function yte(e){let{inputs:t,backend:a}=e,{indices:n,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: +`,See=tt({opSnippet:Iee}),Cee={kernelName:Vo,backendName:"webgl",kernelFunc:See},Tee=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,x)=>y*x),l=[[0,0]];l.push(...i);for(let y=1+s.length;ya.disposeIntermediateTensorInfo(y)),g},Nee={kernelName:_u,backendName:"webgl",kernelFunc:Tee};function Ree(e){let{inputs:t,backend:a}=e,{indices:n,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${s.shape}`);if(n.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${n.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw: ${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw: - ${i.shape}`);let o=a.readSync(n.dataId),l=a.readSync(r.dataId),u=a.readSync(s.dataId),d=a.readSync(i.dataId)[0],[c,p,h,m,f]=Qj(o,n.shape,n.dtype,l,r.dtype,u,d);return[a.makeTensorInfo(p,n.dtype,c),a.makeTensorInfo([p[0]],r.dtype,h),a.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var xte={kernelName:Mp,backendName:"webgl",kernelFunc:yte};function Ate(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.readSync(r.dataId)),o=a.readSync(n.dataId),l=Array.from(a.readSync(s.dataId)),[u,d,c]=eq(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(d,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var bte={kernelName:Bu,backendName:"webgl",kernelFunc:Ate};function vte(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${i.shape}`);let o=a.readSync(n.dataId),l=a.readSync(r.dataId),u=a.readSync(s.dataId),p=a.readSync(i.dataId)[0],[c,d,h,m,f]=pj(o,n.shape,n.dtype,l,r.dtype,u,p);return[a.makeTensorInfo(d,n.dtype,c),a.makeTensorInfo([d[0]],r.dtype,h),a.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),a.makeTensorInfo([f.length],n.dtype,new Int32Array(f))]}var Eee={kernelName:Ip,backendName:"webgl",kernelFunc:Ree};function Mee(e){let{inputs:t,backend:a}=e,{inputIndices:n,inputShape:r,newShape:s}=t;if(n.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${n.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(a.readSync(r.dataId)),o=a.readSync(n.dataId),l=Array.from(a.readSync(s.dataId)),[u,p,c]=cj(o,n.shape,n.dtype,i,l);return[a.makeTensorInfo(p,n.dtype,u),a.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var $ee={kernelName:Du,backendName:"webgl",kernelFunc:Mee};function Pee(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=Ew(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(d,n.dtype,u)}var wte={kernelName:Vu,backendName:"webgl",kernelFunc:vte};function kte(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=h8(i,n.shape,n.dtype,o,l,!0);return a.makeTensorInfo(p,n.dtype,u)}var _ee={kernelName:Ou,backendName:"webgl",kernelFunc:Pee};function Fee(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;if(n.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,d]=Ew(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(d,n.dtype,u)}var Ite={kernelName:Uu,backendName:"webgl",kernelFunc:kte};function Ste(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=I.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=a.bufferSync(r),x=a.bufferSync(s),A=v.decodeString(a.readSync(i.dataId)[0]),b=Yj(y,x,o,p,d,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new Y3(u,l,r.shape.length,s.shape.length,c,[p,1],h),f=a.runWebGLProgram(m,[s,r,i],s.dtype),g=pe({inputs:{x:f},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(f),g}var Tte={kernelName:tl,backendName:"webgl",kernelFunc:Ste};function Cte(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=I.prepareSplitSize(r,s,o),u=r.shape.length,d=new Array(u).fill(0),c=r.shape.slice();return l.map(p=>{let h=[...c];h[o]=p;let m=sd({inputs:{x:r},backend:a,attrs:{begin:d,size:h}});return d[o]+=p,m})}var Nte={kernelName:Wu,backendName:"webgl",kernelFunc:Cte},nA="return sqrt(x);",Rte=tt({opSnippet:nA,packedOpSnippet:nA,cpuKernelImpl:tq}),Ete={kernelName:Es,backendName:"webgl",kernelFunc:Rte},Mte="return x * x;",Fte=tt({opSnippet:Mte}),$te={kernelName:Fp,backendName:"webgl",kernelFunc:Fte},rA="return (a - b) * (a - b);",Dte=ha({opSnippet:rA,packedOpSnippet:rA}),Pte={kernelName:Ms,backendName:"webgl",kernelFunc:Dte};function _te(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;if(r.dtype!=="string")throw new Error("Input must be of datatype string");let s=a.readSync(r.dataId),i=I.fromUint8ToStringArray(s),o=aq(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Ote={kernelName:Gu,backendName:"webgl",kernelFunc:_te};function zte({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=$n+` + ${s.shape}`);let i=a.readSync(n.dataId),o=a.readSync(r.dataId),l=a.readSync(s.dataId),[u,p]=h8(i,n.shape,n.dtype,o,l);return a.makeTensorInfo(p,n.dtype,u)}var Dee={kernelName:zu,backendName:"webgl",kernelFunc:Fee};function Oee(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=a.bufferSync(r),x=a.bufferSync(s),A=v.decodeString(a.readSync(i.dataId)[0]),b=lj(y,x,o,d,p,u,l,c,A,h);return a.makeTensorInfo(o,b.dtype,b.values)}let m=new B3(u,l,r.shape.length,s.shape.length,c,[d,1],h),f=a.runWebGLProgram(m,[s,r,i],s.dtype),g=pe({inputs:{x:f},backend:a,attrs:{shape:o}});return a.disposeIntermediateTensorInfo(f),g}var zee={kernelName:jo,backendName:"webgl",kernelFunc:Oee};function Lee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=C.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),c=r.shape.slice();return l.map(d=>{let h=[...c];h[o]=d;let m=Qu({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var Wee={kernelName:Fu,backendName:"webgl",kernelFunc:Lee},H5="return sqrt(x);",Bee=tt({opSnippet:H5,packedOpSnippet:H5,cpuKernelImpl:hj}),Vee={kernelName:Uo,backendName:"webgl",kernelFunc:Bee},Uee="return x * x;",Gee=tt({opSnippet:Uee}),Hee={kernelName:Sp,backendName:"webgl",kernelFunc:Gee},j5="return (a - b) * (a - b);",jee=ha({opSnippet:j5,packedOpSnippet:j5}),qee={kernelName:qo,backendName:"webgl",kernelFunc:jee};function Xee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t;if(r.dtype!=="string")throw new Error("Input must be of datatype string");let s=a.readSync(r.dataId),i=C.fromUint8ToStringArray(s),o=mj(i,"string",n);return a.makeTensorInfo(r.shape,"string",o)}var Kee={kernelName:Cp,backendName:"webgl",kernelFunc:Xee};function Yee({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=En+` return x > 0.0 ? 1.0 : float(${t.alpha}); - `,s=new Qn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var Lte={kernelName:Ds,backendName:"webgl",kernelFunc:zte},Wte=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=ft(a.length),s=ft(a.length),i="";if(n===1)i="coords * strides + begin";else{let o=0;i=a.map((l,u)=>(o++,a.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` + `,s=new Yn(n.shape,r);return a.runWebGLProgram(s,[n],n.dtype)}var Zee={kernelName:ds,backendName:"webgl",kernelFunc:Yee},Jee=class{constructor(e,t,a){this.variableNames=["x"],this.outputShape=a;let n=a.length,r=ft(a.length),s=ft(a.length),i="";if(n===1)i="coords * strides + begin";else{let o=0;i=a.map((l,u)=>(o++,a.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=` ${r} begin = ${r}(${e}); ${r} strides = ${r}(${t}); @@ -4692,15 +4692,15 @@ return a / b;`,fQ=` ${s} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function Bte(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=wt.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(f)w=pe({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let C=wt.computeOutShape(x,A,b),N=sd({inputs:{x:r},backend:a,attrs:{begin:x,size:C}});w=pe({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(N)}else if(a.shouldExecuteOnCPU([r])){let C=a.readSync(r.dataId),N=Te(r.shape,r.dtype,C),M=nq(h,N,b,x);w=a.makeTensorInfo(m,r.dtype,M.values)}else{let C=new Wte(x,b,h);w=a.runWebGLProgram(C,[r],r.dtype)}let S=pe({inputs:{x:w},backend:a,attrs:{shape:m}});return a.disposeIntermediateTensorInfo(w),S}var Vte={kernelName:al,backendName:"webgl",kernelFunc:Bte};function Ute(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.readSync(d.dataId),h=a.readSync(c.dataId),[m,f]=rq(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var Gte={kernelName:Hu,backendName:"webgl",kernelFunc:Ute};function Hte(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.readSync(s.dataId),l=a.readSync(i.dataId)[0],[u,d,c]=sq(o,l,r),p=d.length;return[a.makeTensorInfo([p,2],"int32",u),a.makeTensorInfo([p],"string",d),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var jte={kernelName:$p,backendName:"webgl",kernelFunc:Hte};function qte(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.readSync(s.dataId),o=iq(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var Xte={kernelName:Dp,backendName:"webgl",kernelFunc:qte},Kte="return tan(x);",Yte=tt({opSnippet:Kte}),Zte={kernelName:nl,backendName:"webgl",kernelFunc:Yte},Jte=` + `}};function Qee(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=pe({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Nt.computeOutShape(x,A,b),N=Qu({inputs:{x:r},backend:a,attrs:{begin:x,size:T}});w=pe({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeIntermediateTensorInfo(N)}else if(a.shouldExecuteOnCPU([r])){let T=a.readSync(r.dataId),N=_e(r.shape,r.dtype,T),M=fj(h,N,b,x);w=a.makeTensorInfo(m,r.dtype,M.values)}else{let T=new Jee(x,b,h);w=a.runWebGLProgram(T,[r],r.dtype)}let I=pe({inputs:{x:w},backend:a,attrs:{shape:m}});return a.disposeIntermediateTensorInfo(w),I}var ete={kernelName:Xo,backendName:"webgl",kernelFunc:Qee};function tte(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.readSync(p.dataId),h=a.readSync(c.dataId),[m,f]=gj(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var ate={kernelName:Lu,backendName:"webgl",kernelFunc:tte};function nte(e){let{inputs:t,backend:a,attrs:n}=e,{skipEmpty:r}=n,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=a.readSync(s.dataId),l=a.readSync(i.dataId)[0],[u,p,c]=yj(o,l,r),d=p.length;return[a.makeTensorInfo([d,2],"int32",u),a.makeTensorInfo([d],"string",p),a.makeTensorInfo([2],"int32",new Int32Array(c))]}var rte={kernelName:Tp,backendName:"webgl",kernelFunc:nte};function ste(e){let{inputs:t,backend:a,attrs:n}=e,{numBuckets:r}=n,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=a.readSync(s.dataId),o=xj(i,r);return a.makeTensorInfo(s.shape,"int32",o)}var ite={kernelName:Np,backendName:"webgl",kernelFunc:ste},ote="return tan(x);",lte=tt({opSnippet:ote}),ute={kernelName:Yo,backendName:"webgl",kernelFunc:lte},dte=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,Qte=tt({opSnippet:Jte}),eae={kernelName:rl,backendName:"webgl",kernelFunc:Qte};function tae(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=I.calculateShapes(i,s,r.shape),p=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=pe({inputs:{x:s},backend:a,attrs:{shape:[l,o]}}),m=pe({inputs:{x:i},backend:a,attrs:{shape:[l,u]}}),f=pe({inputs:{x:r},backend:a,attrs:{shape:p}}),g=new Y3(l,o,h.shape.length,m.shape.length,d,p,!1,!0),y=a.runWebGLProgram(g,[m,h,f],f.dtype),x=pe({inputs:{x:y},backend:a,attrs:{shape:r.shape}});return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(m),a.disposeIntermediateTensorInfo(f),a.disposeIntermediateTensorInfo(y),x}var aae={kernelName:jo,backendName:"webgl",kernelFunc:tae},nae=class{constructor(e,t){this.variableNames=["A"];let a=new Array(e.length);for(let s=0;s5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let r=0;r5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=Te(r.shape,r.dtype,l),d=lq(u,s);return a.makeTensorInfo(d.shape,d.dtype,d.values)}let i=new nae(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var sae={kernelName:$s,backendName:"webgl",kernelFunc:u8},iae=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` + `}};function gte(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 a=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],n=[];for(let r=0;r5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=_e(r.shape,r.dtype,l),p=bj(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new fte(r.shape,s);return a.runWebGLProgram(i,[r],r.dtype)}var yte={kernelName:us,backendName:"webgl",kernelFunc:j8},xte=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4740,7 +4740,7 @@ return a / b;`,fQ=` setOutput(float(i1)); } } - `}},oae=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` + `}},Ate=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); @@ -4774,7 +4774,7 @@ return a / b;`,fQ=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function ui(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function sA(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[F,E]=uq(M,u,r.dtype,s,i);return[a.makeTensorInfo(F.shape,F.dtype,F.values),a.makeTensorInfo(E.shape,E.dtype,E.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(d===1)return[r,ic({attrs:{shape:u,dtype:"int32",value:0},backend:a})];let c=a.texData.get(r.dataId),p=c!==null&&c.isPacked,h=p?a.unpackTensor(r):r,m=v.sizeFromShape(u)/d,f=pe({inputs:{x:h},attrs:{shape:[m,d]},backend:a});p&&ui(a,h);let g=sA(s),y=sA(d),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,F,E)=>{let T=A(),D=new iae(E),O=[[d],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[F]],W=x;x=a.runWebGLProgram(D,T,"int32",O),ui(a,W)};for(let M=1;M=1;E/=2)b(F,E,[m,y])}for(let M=y;M>g;M/=2){let F=A(),E=new oae([m,M/2]),T=[[d],[x===null?1:0],[g]],D=x;x=a.runWebGLProgram(E,F,"int32",T),ui(a,D);let O=g/2,W=O*2;for(let $=O;$>=1;$/=2)b(W,$,x.shape)}let w=x;x=sd({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),ui(a,w);let S=t8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});ui(a,f);let C=u.slice(0,-1);C.push(s),w=x,x=pe({inputs:{x},attrs:{shape:C},backend:a}),ui(a,w);let N=S;return S=pe({inputs:{x:S},attrs:{shape:C},backend:a}),ui(a,N),[S,x]}var uae={kernelName:sl,backendName:"webgl",kernelFunc:lae},dae=class{constructor(e,t,a,n,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=a==="nearest"?1:2,o;switch(n){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=` + `}};function zs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function q5(e){let t=1;for(;tl){let M=a.readSync(r.dataId),[$,E]=vj(M,u,r.dtype,s,i);return[a.makeTensorInfo($.shape,$.dtype,$.values),a.makeTensorInfo(E.shape,E.dtype,E.values)]}if(s===0)return u[u.length-1]=0,[a.makeTensorInfo(u,r.dtype,[]),a.makeTensorInfo(u,"int32",[])];if(p===1)return[r,ec({attrs:{shape:u,dtype:"int32",value:0},backend:a})];let c=a.texData.get(r.dataId),d=c!==null&&c.isPacked,h=d?a.unpackTensor(r):r,m=v.sizeFromShape(u)/p,f=pe({inputs:{x:h},attrs:{shape:[m,p]},backend:a});d&&zs(a,h);let g=q5(s),y=q5(p),x=null,A=()=>x===null?[f,f]:[f,x],b=(M,$,E)=>{let S=A(),_=new xte(E),O=[[p],[x===null?1:0],[Number.NEGATIVE_INFINITY],[M],[$]],W=x;x=a.runWebGLProgram(_,S,"int32",O),zs(a,W)};for(let M=1;M=1;E/=2)b($,E,[m,y])}for(let M=y;M>g;M/=2){let $=A(),E=new Ate([m,M/2]),S=[[p],[x===null?1:0],[g]],_=x;x=a.runWebGLProgram(E,$,"int32",S),zs(a,_);let O=g/2,W=O*2;for(let P=O;P>=1;P/=2)b(W,P,x.shape)}let w=x;x=Qu({inputs:{x},backend:a,attrs:{begin:0,size:[m,s]}}),zs(a,w);let I=z8({inputs:{x:f,indices:x},backend:a,attrs:{axis:1,batchDims:1}});zs(a,f);let T=u.slice(0,-1);T.push(s),w=x,x=pe({inputs:{x},attrs:{shape:T},backend:a}),zs(a,w);let N=I;return I=pe({inputs:{x:I},attrs:{shape:T},backend:a}),zs(a,N),[I,x]}var vte={kernelName:Jo,backendName:"webgl",kernelFunc:bte},wte=class{constructor(e,t,a,n,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=a==="nearest"?1:2,o;switch(n){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${o} == 2) { @@ -4886,9 +4886,9 @@ return a / b;`,fQ=` } setOutput(outputValue); } - `}};function pae(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[m,f]=u!=null?u:[c,p],g=[d,m,f,h],y=new dae(c,p,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var cae={kernelName:il,backendName:"webgl",kernelFunc:pae};function hae(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;Ju(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=n.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=dq(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var mae={kernelName:Pp,backendName:"webgl",kernelFunc:hae};function fae(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),d=0;for(let f=0;fa.disposeIntermediateTensorInfo(f)),m}var gae={kernelName:ju,backendName:"webgl",kernelFunc:fae},yae=class{constructor(e,t){this.variableNames=["x","segmentIds"];let a=e.windowSize,n=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/a);this.outputShape=[n,i];let o="0.0",l="sumValue",u=Math.floor(a/4)*4,d=a%4,c=` + `}};function kte(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new wte(c,d,i,o,l,g);return a.runWebGLProgram(y,[r,s],"float32")}var Ite={kernelName:Qo,backendName:"webgl",kernelFunc:kte};function Ste(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t;ju(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=n.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=wj(i,r,s.shape,s.dtype);return[n.makeTensorInfo(l,s.dtype,o),n.makeTensorInfo([u.length],"int32",u)]}var Cte={kernelName:Rp,backendName:"webgl",kernelFunc:Ste};function Tte(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let f=0;fa.disposeIntermediateTensorInfo(f)),m}var Nte={kernelName:Wu,backendName:"webgl",kernelFunc:Tte},Rte=class{constructor(e,t){this.variableNames=["x","segmentIds"];let a=e.windowSize,n=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/a);this.outputShape=[n,i];let o="0.0",l="sumValue",u=Math.floor(a/4)*4,p=a%4,c=` sumValue += dot(values, segFilter); - `,p="";r%a>0&&(p=` + `,d="";r%a>0&&(d=` if (inIdx < 0 || inIdx >= ${r}) { return initializationValue; } @@ -4900,7 +4900,7 @@ return a / b;`,fQ=` const float initializationValue = ${o}; float getValue(int batch, int inIdx) { - ${p} + ${d} return getX(batch, inIdx); } @@ -4939,7 +4939,7 @@ return a / b;`,fQ=` } int inIdx = inOffset + ${u}; - if (${d===1}) { + if (${p===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, @@ -4957,7 +4957,7 @@ return a / b;`,fQ=` ); ${c} - } else if (${d===2}) { + } else if (${p===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4973,7 +4973,7 @@ return a / b;`,fQ=` ); ${c} - } else if (${d===3}) { + } else if (${p===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4992,9 +4992,9 @@ return a / b;`,fQ=` } setOutput(${l}); } - `}};function xae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,d=I.getAxesPermutation([u],o),c=r;d!=null&&(c=Ta({inputs:{x:r},backend:a,attrs:{perm:d}}),l.push(c),u=I.getInnerMostAxes(1,o)[0]);let p=I.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=pe({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=Lp(r.dtype),g=(b,w,S,C,N)=>{let M=b.shape[0],F=b.shape[1],E=I.segment_util.segOpComputeOptimalWindowSize(F,N),T={windowSize:E,inSize:F,batchSize:M,numSegments:N},D=new yae(T,w),O=a.compileAndRun(D,[b,S],C);if(l.push(O),O.shape[1]===N)return O;let W=l8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),$=u8({inputs:{x:W},backend:a,attrs:{reps:[F/E]}});return l.push(W),l.push($),g(O,w,$,C,N)},y=g(m,"unsortedSegmentSum",s,f,i),x=pe({inputs:{x:y},backend:a,attrs:{shape:p}}),A=x;if(d!=null){l.push(x);let b=I.getUndoAxesPermutation(d);A=Ta({inputs:{x:A},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}var Aae={kernelName:_p,backendName:"webgl",kernelFunc:xae},bae=[nX,sX,lX,pX,hX,gX,xX,bX,IX,TX,RX,FX,PX,LX,VX,GX,jX,YX,JX,eK,rK,pK,hK,yK,AK,SK,CK,MK,Wq,DK,LK,UK,KK,JK,eY,aY,rY,lY,pY,mY,gY,xY,bY,kY,SY,RY,MY,DY,OY,LY,UY,qY,ZY,eZ,nZ,rZ,iZ,lZ,dZ,cZ,mZ,xZ,vZ,IZ,TZ,RZ,FZ,_Z,WZ,Lq,VZ,OK,HZ,XZ,ZZ,Vq,tJ,sJ,oJ,pJ,mJ,xJ,vJ,SJ,RJ,FJ,DJ,zJ,WJ,VJ,jJ,XJ,YJ,JJ,eQ,rQ,lQ,cQ,bQ,Hq,IQ,CQ,EQ,$Q,vK,_Q,zQ,WQ,UQ,qQ,Gq,KQ,ZQ,QQ,tee,aee,wK,gQ,see,uee,hee,qq,yee,bee,Iee,Cee,Mee,$ee,_ee,Lee,Vee,Hee,Xee,Zee,tte,rte,lte,pte,uK,xQ,mte,gte,xte,bte,wte,Ite,Tte,Nte,Ete,$te,Pte,Ote,Lte,Vte,Gte,jte,Xte,yQ,eX,Zte,eae,aae,sae,uae,cae,tX,mae,gae,Aae,OQ];for(let e of bae)bn(e);var nt;(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"})(nt||(nt={}));var dp;(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",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(dp||(dp={}));var d8;function vae(e){d8=e.wasm.cwrap(ts,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function wae(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n,p=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(s.dataId).id,m=0;if(i!=null){let N=a.dataIdMap.get(i.dataId);if(N.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${N.shape.length}.`);m=N.id}let f=o==null?0:a.dataIdMap.get(o.dataId).id,g=dp[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],x=u?s.shape[1]:s.shape[2],A=ul.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...A,y,x],r.dtype),w=a.dataIdMap.get(b.dataId).id,S=new Uint8Array(new Int32Array(r.shape).buffer),C=new Uint8Array(new Int32Array(s.shape).buffer);return d8(p,S,r.shape.length,h,C,s.shape.length,l,u,g,m,f,c||0,w),b}var kae={kernelName:ts,backendName:"wasm",setupFunc:vae,kernelFunc:wae};function Qe(e,t){let a;function n(s){a=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),d=i.dataIdMap.get(u.dataId).id;return v.sizeFromShape(u.shape)===0||a(l,nt[o.dtype],d),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var Iae=Qe(cu),Sae=Qe($i),Tae=Qe(Di);function Gt(e,t,a){let n;function r(i){n=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:d}=l,c=o.dataIdMap.get(u.dataId).id,p=o.dataIdMap.get(d.dataId).id,h=a!=null?a:u.dtype,m=I.assertAndGetBroadcastShape(u.shape,d.shape),f=o.makeOutput(m,h);if(v.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(d.shape).buffer),x=o.dataIdMap.get(f.dataId).id;return n(c,g,u.shape.length,p,y,d.shape.length,nt[u.dtype],x),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Cae=!0,Nae=Gt(Mr,Cae),p8;function Rae(e){p8=e.wasm.cwrap(Pi,null,["array","number","number","number"])}function Eae(e){let{inputs:t,backend:a}=e,n=a.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(n.shape)===0)return n;let r=t.map(o=>a.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=a.dataIdMap.get(n.dataId).id;return p8(s,r.length,nt[n.dtype],i),n}var Mae={kernelName:Pi,backendName:"wasm",setupFunc:Rae,kernelFunc:Eae};function m0(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return Ve(a.readSync(t.dataId),t.shape,t.dtype);let n=a.makeOutput(t.shape,t.dtype),r=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(n).set(r),n}var Fae={kernelName:ho,backendName:"wasm",kernelFunc:m0},c8;function $ae(e){c8=e.wasm.cwrap(Tr,null,["number","array","number","number","number","array","number"])}function ps(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=Pae(t.x.shape,n.perm),i=!0;for(let m=0;m=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var _ae={kernelName:Tr,backendName:"wasm",kernelFunc:ps,setupFunc:$ae};function Ls(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=I.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let d=new Array(r);for(let p=0;p`new shape: ${i}, old shape: ${n.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var lne={kernelName:Du,backendName:"wasm",kernelFunc:La},b8;function une(e){b8=e.wasm.cwrap(Gi,null,["number","array","number","number","array","number","number","number","number"])}function dne(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,d=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],p=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=ul.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([p,h]);v.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let A=i?[g,d,p]:[g,p,d],b=o?[y,h,c]:[y,c,h],w=La({inputs:{x:r},backend:a,attrs:{shape:A}}),S=La({inputs:{x:s},backend:a,attrs:{shape:b}}),C=a.dataIdMap.get(w.dataId).id,N=a.dataIdMap.get(S.dataId).id,M=i?w.shape[2]:w.shape[1],F=o?S.shape[1]:S.shape[2],E=Math.max(g,y),T=a.makeOutput([E,M,F],w.dtype),D=a.dataIdMap.get(T.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),W=new Uint8Array(new Int32Array(S.shape).buffer);return b8(C,O,w.shape.length,N,W,S.shape.length,i,o,D),a.disposeData(w.dataId),a.disposeData(S.dataId),T.shape=x,T}var pne={kernelName:Gi,backendName:"wasm",setupFunc:une,kernelFunc:dne};function Mi(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=wt.parseSliceParams(t,a,n),o=wt.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),d=v.computeStrides(t.shape),c=r.dataIdMap.get(u.dataId);if(o){let m=wt.computeFlatOffset(s,d);return t.dtype==="string"?c.stringBytes=l.slice(m,m+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+v.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Sh(l,s,i,t.shape,t.dtype);return c.stringBytes=m,u}let p=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)cne(l,d[0],p,s,i);else if(h===3)hne(l,d[0],d[1],p,s,i);else if(h===4)mne(l,d[0],d[1],d[2],p,s,i);else{let m=Sh(l,s,i,t.shape,t.dtype);p.set(m)}return u}function cne(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;uy*x),l=I.getReshaped(r.shape,s,o),u=I.getPermuted(l.length,s.length),d=I.getReshapedPermuted(r.shape,s,o),c=I.getSliceBeginCoords(i,s.length),p=I.getSliceSize(d,i,s.length),h=La({inputs:{x:r},backend:a,attrs:{shape:l}}),m=ps({inputs:{x:h},backend:a,attrs:{perm:u}}),f=La({inputs:{x:m},backend:a,attrs:{shape:d}}),g=Mi({inputs:{x:f},backend:a,attrs:{begin:c,size:p}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(f.dataId),g}var yne={kernelName:gu,backendName:"wasm",kernelFunc:gne},v8;function xne(e){v8=e.wasm.cwrap(Hi,null,["number","number","boolean","number","number","number"])}function Ane(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i}=n,o=s.shape.reduce((c,p)=>c*p,1)!==0,l=r.shape.length===1?[i]:[r.shape[0],i],u=t.makeOutput(l,s.dtype);function d(c){return t.dataIdMap.get(c.dataId).id}return v8(d(r),i,o,d(s),nt[s.dtype],d(u)),u}var bne={kernelName:Hi,backendName:"wasm",setupFunc:xne,kernelFunc:Ane},vne=!0,wne=Gt(ji,vne);function kne(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.typedArrayFromHeap(n),i=a.typedArrayFromHeap(r),o=I.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}var Ine={kernelName:yu,backendName:"wasm",kernelFunc:kne};function Ws(e){let{inputs:{x:t},attrs:{dtype:a},backend:n}=e,r=n.makeOutput(t.shape,a),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var Sne={kernelName:qi,backendName:"wasm",kernelFunc:Ws},Tne=Qe(cs),w8;function Cne(e){w8=e.wasm.cwrap(hs,null,["number","number","number","number"])}function Nne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o=a.dataIdMap.get(r.dataId).id,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(l.dataId).id;return w8(o,s,i,u),l}var Rne={kernelName:hs,backendName:"wasm",setupFunc:Cne,kernelFunc:Nne};function k8(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);I.assertParamsConsistent(r,n);let s=I.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return m0({inputs:{x:i[0]},backend:a});let o=a.makeOutput(s,t[0].dtype);if(v.sizeFromShape(s)===0)return o;if(i[0].dtype==="string"){let h=i.map(A=>{let b=[-1,v.sizeFromShape(A.shape.slice(n))];return La({inputs:{x:A},backend:a,attrs:{shape:b}})}),m=h.map(A=>({vals:a.readSync(A.dataId),shape:A.shape}));s=I.computeOutShape(h.map(A=>A.shape),1);let f=h[0].shape[0]===1,g=k3(m,s,t[0].dtype,f),y=I.computeOutShape(i.map(A=>A.shape),n);o.shape=y;let x=a.dataIdMap.get(o.dataId);return x.stringBytes=I.fromStringArrayToUint8(g),h.forEach(A=>a.disposeData(A.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,d=i.map(h=>{let m=v.sizeFromShape(h.shape.slice(n));return u+=m,m}),c=i.map(h=>a.typedArrayFromHeap(h)),p=a.typedArrayFromHeap(o);for(let h=0;h`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],l),d=r;u!==null&&(d=ps({inputs:{x:r},attrs:{perm:u},backend:a}));let c=I.getInnerMostAxes(1,l)[0];I.assertAxesAreInnerMostDims("cumprod",[c],l);let p=a.makeOutput(d.shape,d.dtype),h=d.shape[c],m=a.dataIdMap.get(d.dataId).id,f=a.dataIdMap.get(p.dataId).id;E8(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=p;if(u!==null){let y=I.getUndoAxesPermutation(u);g=ps({inputs:{x:p},attrs:{perm:y},backend:a}),a.disposeData(d.dataId),a.disposeData(p.dataId)}return g}var Qne={kernelName:eo,backendName:"wasm",setupFunc:Zne,kernelFunc:Jne},M8;function ere(e){M8=e.wasm.cwrap(to,null,["number","number","number","number","number","number"])}function tre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=I.getAxesPermutation([s],l),d=r;u!==null&&(d=ps({inputs:{x:r},attrs:{perm:u},backend:a}));let c=I.getInnerMostAxes(1,l)[0];I.assertAxesAreInnerMostDims("cumsum",[c],l);let p=a.makeOutput(d.shape,d.dtype),h=d.shape[c],m=a.dataIdMap.get(d.dataId).id,f=a.dataIdMap.get(p.dataId).id;M8(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=p;if(u!==null){let y=I.getUndoAxesPermutation(u);g=ps({inputs:{x:p},attrs:{perm:y},backend:a}),a.disposeData(d.dataId),a.disposeData(p.dataId)}return g}var are={kernelName:to,backendName:"wasm",setupFunc:ere,kernelFunc:tre},F8;function nre(e){F8=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function rre(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i,binaryOutput:o}=n,l=s.shape.reduce((p,h)=>p*h,1)!==0,u=r.shape.length===1?[i]:[r.shape[0],i],d=t.makeOutput(u,s.dtype);function c(p){return t.dataIdMap.get(p.dataId).id}return F8(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(d)),d}var sre={kernelName:bu,backendName:"wasm",setupFunc:nre,kernelFunc:rre},$8;function ire(e){$8=e.wasm.cwrap(no,null,["number","number","number","array","number","array","array","number","number"])}function ore(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),m=i==="NHWC"?[o,c,p,h]:[o,h,c,p],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(m).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),b=t.dataIdMap.get(f.dataId).id;return $8(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var lre={kernelName:no,backendName:"wasm",setupFunc:ire,kernelFunc:ore},D8;function ure(e){D8=e.wasm.cwrap(ro,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function dre(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:d,dimRoundingMode:c}=a,p=u==null?[1,1]:u,h=I.computeConv2DInfo(r.shape,s.shape,l,p,d,c,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,x=h.padInfo.bottom,A=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,S=h.strideHeight,C=h.strideWidth,N=h.inChannels,M=h.outChannels,F=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let E=n.makeOutput(h.outShape,"float32"),T=n.dataIdMap.get(E.dataId).id;return D8(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,F,b,w,S,C,N,M,T),E}var pre={kernelName:ro,backendName:"wasm",setupFunc:ure,kernelFunc:dre},P8;function cre(e){P8=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function hre(e){let{inputs:t,backend:a}=e,{x:n}=t,r=v.sizeFromShape(n.shape),s=a.makeOutput([...n.shape,...n.shape],n.dtype);return P8(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var mre={kernelName:vu,backendName:"wasm",setupFunc:cre,kernelFunc:hre},_8;function fre(e){_8=e.wasm.cwrap(so,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n;if(r.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${s.dtype}`);let u=I.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),d=a.makeOutput(u.outShape,r.dtype);return _8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(d.dataId).id,nt[r.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),d}var yre={kernelName:so,backendName:"wasm",setupFunc:fre,kernelFunc:gre},O8;function xre(e){O8=e.wasm.cwrap(Ql,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Are(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let d=I.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(s.shape,s.dtype);return O8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.filterHeight,d.filterWidth,d.padInfo.top,d.padInfo.left),c}var bre={kernelName:Ql,backendName:"wasm",setupFunc:xre,kernelFunc:Are},z8;function vre(e){z8=e.wasm.cwrap(Jl,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let d=I.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(r.shape,r.dtype);return z8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.filterHeight,d.filterWidth,d.padInfo.top,d.padInfo.left),c}var kre={kernelName:Jl,backendName:"wasm",setupFunc:vre,kernelFunc:wre},Ire=Qe(oo),L8;function Sre(e){L8=e.wasm.cwrap(wu,null,["number","number","number"])}function Tre(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=a.makeOutput(r.shape,"float32"),i=o=>a.dataIdMap.get(o.dataId).id;return L8(i(r),i(n),i(s)),s}var Cre={kernelName:wu,backendName:"wasm",setupFunc:Sre,kernelFunc:Tre},Nre=!1,Rre=Gt(ms,Nre,"bool"),Ere=Qe(lo),Mre=Qe(fs,"float32");function K1(e){let{inputs:t,attrs:a,backend:n}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),La({inputs:{x:r},backend:n,attrs:{shape:o}})}var Fre={kernelName:ku,backendName:"wasm",kernelFunc:K1},$re=Qe(gs,"float32");function W8(e){let{attrs:{shape:t,value:a},backend:n}=e,{attrs:{dtype:r}}=e;r=r||v.inferDtype(a);let s=n.makeOutput(t,r);return n.typedArrayFromHeap(s).fill(a),s}var Dre={kernelName:Iu,backendName:"wasm",kernelFunc:W8},B8;function Pre(e){B8=e.wasm.cwrap(uo,null,["number","number","number","number","number","number"])}function _re(e){let{inputs:t,backend:a}=e,{image:n}=t,r=a.makeOutput(n.shape,n.dtype),s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,[o,l,u,d]=n.shape;return B8(s,o,l,u,d,i),r}var Ore={kernelName:uo,backendName:"wasm",kernelFunc:_re,setupFunc:Pre},zre=Qe(ys),Lre=!1,Wre=Gt(xs,Lre),V8;function Bre(e){V8=e.wasm.cwrap(po,null,["number","number","number","number","number","number","number"])}function Vre(e){let{backend:t,inputs:a,attrs:n}=e,{varianceEpsilon:r}=n,{x:s,mean:i,variance:o,offset:l,scale:u}=a,d=t.dataIdMap.get(s.dataId).id,c=t.dataIdMap.get(i.dataId).id,p=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return V8(d,c,p,h,m,r,g),f}var Ure={kernelName:po,backendName:"wasm",setupFunc:Bre,kernelFunc:Vre},U8;function Gre(e){U8=e.wasm.cwrap(as,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 Hre(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:c,dimRoundingMode:p,activation:h,leakyreluAlpha:m}=a,f=I.computeConv2DInfo(r.shape,s.shape,l,d,u,p),g=dp[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.dataId);if(X.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==A)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,S=f.filterWidth,C=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,F=f.padInfo.left,E=f.dilationHeight,T=f.dilationWidth,D=f.strideHeight,O=f.strideWidth,W=f.inChannels,$=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return U8(y,U,G,q,x,w,S,b,C,N,M,F,$,E,T,D,O,W,A,g,Z,m||0,V),H}var jre={kernelName:as,backendName:"wasm",setupFunc:Gre,kernelFunc:Hre},G8;function qre(e){G8=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"])}function Xre(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:c,dimRoundingMode:p,activation:h,leakyreluAlpha:m}=a,f=I.computeConv2DInfo(r.shape,s.shape,l,d,u,p,!0),g=dp[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.dataId);if(X.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==A)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,S=f.filterWidth,C=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,F=f.padInfo.left,E=f.dilationHeight,T=f.dilationWidth,D=f.strideHeight,O=f.strideWidth,W=f.inChannels,$=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return G8(y,U,G,q,x,w,S,b,C,N,M,F,$,E,T,D,O,W,A,g,Z,m||0,V),H}var Kre={kernelName:ns,backendName:"wasm",setupFunc:qre,kernelFunc:Xre},H8;function Yre(e){H8=e.wasm.cwrap(co,null,["number","number","number","number","number","number","array","number"])}function Zre(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=h3.prepareAndValidate(n,r),u=t.makeOutput(s,n.dtype);if(i===0)return u;let d=r.shape,c=d[d.length-1],p=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(r.dataId).id,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return H8(p,nt[n.dtype],h,i,c,o,m,f),u}var Jre={kernelName:co,backendName:"wasm",setupFunc:Yre,kernelFunc:Zre},j8;function Qre(e){j8=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function ese(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,indices:s}=a,{axis:i,batchDims:o}=n,l=v.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),d=r.shape[l];for(let C=0;C=0,()=>`GatherV2: the index value ${N} is not in [0, ${d-1}]`)}let c=I.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=La({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=La({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),f=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(f,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=p.shape.length-1,x=t.dataIdMap.get(p.dataId).id,A=t.dataIdMap.get(m.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(p.shape)).buffer),S=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return j8(x,nt[r.dtype],w,y,A,c.batchSize,S,b),t.disposeData(p.dataId),t.disposeData(m.dataId),g.shape=c.outputShape,g}var tse={kernelName:Su,backendName:"wasm",setupFunc:Qre,kernelFunc:ese},ase=!1,nse=Gt(As,ase,"bool"),rse=!1,sse=Gt(bs,rse,"bool"),ise=Qe(mo,"bool"),ose=Qe(fo,"bool"),lse=Qe(go,"bool"),q8;function use(e){q8=e.wasm.cwrap(yo,null,["number","number","number","number"])}function dse(e){let{inputs:{x:t},attrs:{alpha:a},backend:n}=e,r=n.dataIdMap.get(t.dataId).id,s=n.makeOutput(t.shape,"float32");if(v.sizeFromShape(t.shape)!==0){let i=n.dataIdMap.get(s.dataId).id;q8(r,nt[t.dtype],a,i)}return s}var pse={kernelName:yo,backendName:"wasm",setupFunc:use,kernelFunc:dse},cse=!1,hse=Gt(vs,cse,"bool"),mse=!1,fse=Gt(ws,mse,"bool"),X8;function gse(e){X8=e.wasm.cwrap(xo,null,["number","number","number","number"])}function yse(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return X8(a.dataIdMap.get(o.dataId).id,n,r,i),o}var xse={kernelName:xo,backendName:"wasm",setupFunc:gse,kernelFunc:yse},Ase=Qe(ks),bse=Qe(Ao),vse=!1,wse=Gt(bo,vse,"bool"),kse=Qe(vo),Ise=!1,Sse=Gt(wo,Ise,"bool"),Tse=!1,Cse=Gt(HA,Tse,"bool"),K8;function Nse(e){K8=e.wasm.cwrap(ko,null,["number","number","number","number","number","number","number"])}function Rse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=a.makeOutput(r.shape,r.dtype);return K8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var Ese={kernelName:ko,backendName:"wasm",setupFunc:Nse,kernelFunc:Rse},Y8;function Mse(e){Y8=e.wasm.cwrap(Tu,null,["number","number","number","number","number","number","number","number","number"])}function Fse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=n;if(r.dtype!=="float32"||s.dtype!=="float32"||i.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let c=a.makeOutput(r.shape,r.dtype);return Y8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,i.shape[3],o,l,u,d),c}var $se={kernelName:Tu,backendName:"wasm",setupFunc:Mse,kernelFunc:Fse},Z8;function Dse(e){Z8=e.wasm.cwrap(Io,null,["number","number","number","number"])}function Pse(e){let{backend:t,inputs:a,attrs:n}=e,{reductionIndices:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:d,originalAxes:c,inputWasTransposed:p}=Ls(i,r,t);if(p){let x=t.dataIdMap.get(u.dataId).id;l=u,o=x}let h=l.shape.length;I.assertAxesAreInnerMostDims("max",d,h);let[m,f]=I.computeOutAndReduceShapes(l.shape,d),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;Z8(o,nt[i.dtype],g,x)}if(p&&t.disposeData(u.dataId),s){let x=I.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var _se={kernelName:Io,backendName:"wasm",setupFunc:Dse,kernelFunc:Pse},Ose=!1,zse=Gt(Is,Ose),J8;function Lse(e){J8=e.wasm.cwrap(So,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Wse(e){let{inputs:t,attrs:a,backend:n}=e,r=t.x,s=n.dataIdMap.get(r.dataId).id;v.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a,d=I.computePool2DInfo(r.shape,i,o,1,l,u),c=d.filterHeight,p=d.filterWidth,h=d.padInfo.top,m=d.padInfo.right,f=d.padInfo.bottom,g=d.padInfo.left,y=d.dilationHeight,x=d.dilationWidth,A=d.strideHeight,b=d.strideWidth,w=d.inChannels,S=d.outChannels;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let C=n.makeOutput(d.outShape,"float32"),N=n.dataIdMap.get(C.dataId).id;return J8(s,r.shape[0],r.shape[1],r.shape[2],c,p,h,m,f,g,y,x,A,b,w,S,N),C}var Bse={kernelName:So,backendName:"wasm",setupFunc:Lse,kernelFunc:Wse},Q8;function Vse(e){Q8=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Use(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,d=I.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.makeOutput(d.outShape,r.dtype);return Q8(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left),c}var Gse={kernelName:Cu,backendName:"wasm",setupFunc:Vse,kernelFunc:Use},ek;function Hse(e){ek=e.wasm.cwrap("MaxPool3DGrad",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 jse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,d=I.computePool3DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return ek(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left),c}var qse={kernelName:Rp,backendName:"wasm",setupFunc:Hse,kernelFunc:jse},tk;function Xse(e){tk=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Kse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,d=I.computePool2DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return tk(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.top,d.padInfo.left),c}var Yse={kernelName:Np,backendName:"wasm",setupFunc:Xse,kernelFunc:Kse},ak;function Zse(e){ak=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Jse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,includeBatchInIndex:l}=n;v.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];v.assert(I.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let d=I.computePool2DInfo(r.shape,s,i,[1,1],o),c=a.makeOutput(d.outShape,r.dtype),p=a.makeOutput(d.outShape,"int32");return ak(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,a.dataIdMap.get(p.dataId).id,nt[r.dtype],l,d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.top,d.padInfo.left),[c,p]}var Qse={kernelName:Nu,backendName:"wasm",setupFunc:Zse,kernelFunc:Jse},nk;function eie(e){nk=e.wasm.cwrap(To,null,["number, number, number"])}function tie(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Ls(i,r,t),m=c;if(h){let b=t.dataIdMap.get(d.dataId).id;b!==o&&(u=d,l=b,m=I.getInnerMostAxes(m.length,u.shape.length))}I.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=I.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=u;u.dtype!=="float32"&&(x=Ws({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(x.dataId).id);let A=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(A.dataId).id;nk(l,y,b)}if(h&&t.disposeData(d.dataId),s){let b=I.expandShapeToKeepDim(A.shape,p);A.shape=b}return u.dtype!=="float32"&&t.disposeData(x.dataId),A}var aie={kernelName:To,backendName:"wasm",setupFunc:eie,kernelFunc:tie},rk;function nie(e){rk=e.wasm.cwrap(Co,null,["number","number","number","number"])}function rie(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Ls(i,r,t);if(h){let A=t.dataIdMap.get(d.dataId).id;A!==o&&(u=d,l=A)}let m=u.shape.length;I.assertAxesAreInnerMostDims("min",c,m);let[f,g]=I.computeOutAndReduceShapes(u.shape,c),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;rk(l,nt[i.dtype],y,A)}if(h&&t.disposeData(d.dataId),s){let A=I.expandShapeToKeepDim(x.shape,p);x.shape=A}return x}var sie={kernelName:Co,backendName:"wasm",setupFunc:nie,kernelFunc:rie},iie=!1,oie=Gt(Ss,iie),Y1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(Y1||(Y1={}));var sk;function lie(e){sk=e.wasm.cwrap(No,null,["number","array","number","number","array","array","number","number"])}function uie(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]),i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=n.map(m=>m[0]),c=n.map(m=>m[1]),p=new Uint8Array(new Int32Array(d).buffer),h=new Uint8Array(new Int32Array(c).buffer);return sk(i,u,t.shape.length,nt[t.dtype],p,h,Y1[r],l),o}var die={kernelName:No,backendName:"wasm",kernelFunc:uie,setupFunc:lie},ik;function pie(e){ik=e.wasm.cwrap(el,null,["number","number","number","number"])}function ok(e){let{backend:t,inputs:{logits:a},attrs:{dim:n}}=e,r=t.dataIdMap.get(a.dataId).id,s=t.makeOutput(a.shape,a.dtype),i=t.dataIdMap.get(s.dataId).id,o=a.shape[n],l=v.sizeFromShape(a.shape)/o;return v.sizeFromShape(s.shape)===0||ik(r,i,o,l),s}var cie={kernelName:el,backendName:"wasm",setupFunc:pie,kernelFunc:ok},lk;function hie(e){lk=e.wasm.cwrap(Eo,null,["number","number","number","number","number","number"])}function mie(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);let l=o?r:ok({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,d]=l.shape,c=a.makeOutput([u,s],"int32");return lk(a.dataIdMap.get(l.dataId).id,u,d,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var fie={kernelName:Eo,backendName:"wasm",setupFunc:hie,kernelFunc:mie},gie=Gt(Ro,!0),yie=!0,xie=Gt(Ts,yie),Aie=Qe(Ru);function Z3(e,t){let a=new Int32Array(e.wasm.HEAPU8.buffer,t,4),n=a[0],r=a[1],s=a[2],i=a[3];return e.wasm._free(t),{pSelectedIndices:n,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var uk;function bie(e){uk=e.wasm.cwrap(Mo,"number",["number","number","number","number","number"])}function vie(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=n,{boxes:o,scores:l}=a,u=t.dataIdMap.get(o.dataId).id,d=t.dataIdMap.get(l.dataId).id,c=uk(u,d,s,r,i),{pSelectedIndices:p,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=Z3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",p)}var wie={kernelName:Mo,backendName:"wasm",setupFunc:bie,kernelFunc:vie},dk;function kie(e){dk=e.wasm.cwrap(Eu,"number",["number","number","number","number","number","bool"])}function Iie(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=n,{boxes:l,scores:u}=a,d=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,p=dk(d,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=Z3(t,p);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var Sie={kernelName:Eu,backendName:"wasm",setupFunc:kie,kernelFunc:Iie},pk;function Tie(e){pk=e.wasm.cwrap(Fo,"number",["number","number","number","number","number","number"])}function Cie(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=n,{boxes:l,scores:u}=a,d=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,p=pk(d,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=Z3(t,p);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var Nie={kernelName:Fo,backendName:"wasm",setupFunc:Tie,kernelFunc:Cie},Rie=!1,Eie=Gt(Cs,Rie,"bool"),ck;function Mie(e){ck=e.wasm.cwrap($o,null,["number","number","number","number","number"])}function Fie(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=a.makeOutput([...r.shape,i],s),d=a.dataIdMap.get(u.dataId).id,c=a.dataIdMap.get(r.dataId).id;return ck(c,i,o,l,d),u}var $ie={kernelName:$o,backendName:"wasm",setupFunc:Mie,kernelFunc:Fie};function Die(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var Pie={kernelName:Mu,backendName:"wasm",kernelFunc:Die};function _ie(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return K1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=K1({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=k8({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeData(d.dataId)),u}var Oie={kernelName:Fu,backendName:"wasm",kernelFunc:_ie},hk;function zie(e){hk=e.wasm.cwrap(Do,null,["number","array","number","number","array","array","number","number"])}function Lie(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]);if(v.sizeFromShape(t.shape)===0)return W8({backend:a,attrs:{shape:s,value:r,dtype:t.dtype}});let i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=n.map(m=>m[0]),c=n.map(m=>m[1]),p=new Uint8Array(new Int32Array(d).buffer),h=new Uint8Array(new Int32Array(c).buffer);return hk(i,u,t.shape.length,nt[t.dtype],p,h,r,l),o}var mk={kernelName:Do,backendName:"wasm",kernelFunc:Lie,setupFunc:zie},Wie=!1,Bie=Gt(Po,Wie),fk;function Vie(e){fk=e.wasm.cwrap(_o,null,["number","number","number"])}function Uie(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,o=s,l=n,u=l;l.dtype!=="float32"&&(u=Ws({backend:a,inputs:{x:n},attrs:{dtype:"float32"}}),o=a.dataIdMap.get(u.dataId).id);let d=a.makeOutput(n.shape,"float32"),c=a.dataIdMap.get(d.dataId).id;return fk(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),d}var Gie={kernelName:_o,backendName:"wasm",setupFunc:Vie,kernelFunc:Uie},gk;function Hie(e){gk=e.wasm.cwrap(Oo,null,["number","number","number","number"])}function jie(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Ls(i,r,t),m=c;if(h){let A=t.dataIdMap.get(d.dataId).id;A!==o&&(u=d,l=A,m=I.getInnerMostAxes(m.length,u.shape.length))}I.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=I.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;gk(l,y,nt[x.dtype],A)}if(h&&t.disposeData(d.dataId),s){let A=I.expandShapeToKeepDim(x.shape,p);x.shape=A}return x}var qie={kernelName:Oo,backendName:"wasm",setupFunc:Hie,kernelFunc:jie},Xie=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=T3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Kie={kernelName:$u,backendName:"wasm",kernelFunc:Xie},Yie=!0,Zie=Gt(io,Yie),Jie=Qe(zo),Qie=Qe(Lo),eoe=Qe(Vo),yk;function toe(e){yk=e.wasm.cwrap(Bo,null,["number","number","number","number","number","number","number","number","number","number"])}function aoe(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[d,c,p,h]=r.shape,m=[d,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=Ws({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,x=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return x;let A=t.dataIdMap.get(x.dataId).id;return yk(y,d,c,p,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var noe={kernelName:Bo,backendName:"wasm",setupFunc:toe,kernelFunc:aoe},xk;function roe(e){xk=e.wasm.cwrap(_u,null,["number","number","number","array","array","boolean"])}function soe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=Ws({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),xk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var ioe={kernelName:_u,backendName:"wasm",setupFunc:roe,kernelFunc:soe},Ak;function ooe(e){Ak=e.wasm.cwrap(Wo,null,["number","number","number","number","number","number","number","number","number","number"])}function loe(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[d,c,p,h]=r.shape,m=[d,l,u,h],f=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=Ws({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let x=g.id,A=t.dataIdMap.get(f.dataId).id;return Ak(x,d,c,p,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var uoe={kernelName:Wo,backendName:"wasm",setupFunc:ooe,kernelFunc:loe},bk;function doe(e){bk=e.wasm.cwrap(Pu,null,["number","number","number","array","array","boolean"])}function poe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=Ws({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),bk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var coe={kernelName:Pu,backendName:"wasm",setupFunc:doe,kernelFunc:poe},vk;function hoe(e){vk=e.wasm.cwrap(Uo,null,["number","array","number","array","number","number"])}function moe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=v.parseAxisParam(s,r.shape);if(r.shape.length===0)return m0({inputs:{x:r},backend:a});let o=a.makeOutput(r.shape,r.dtype),l=a.dataIdMap.get(r.dataId).id,u=a.dataIdMap.get(o.dataId).id,d=new Uint8Array(new Int32Array(i).buffer),c=new Uint8Array(new Int32Array(r.shape).buffer);vk(l,d,i.length,c,r.shape.length,u);let p=La({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),p}var foe={kernelName:Uo,backendName:"wasm",kernelFunc:moe,setupFunc:hoe},wk;function goe(e){wk=e.wasm.cwrap(ol,null,["number","number","number","number","number","number","number","number","array","number","number"])}function yoe(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=n,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(r.dataId).id,d=a.dataIdMap.get(l.dataId).id,[c,p,h,m]=r.shape,[f,g]=I.getImageCenter(o,p,h),y=i===0,x=255,A=typeof i=="number"?[i,i,i,y?0:x]:[...i,x],b=new Uint8Array(new Int32Array(A).buffer);return wk(u,c,p,h,m,s,f,g,b,A.length,d),l}var xoe={kernelName:ol,backendName:"wasm",kernelFunc:yoe,setupFunc:goe},Aoe=Qe(Go),boe=Qe(Ns),kk;function voe(e){kk=e.wasm.cwrap(Ho,null,["number","number","number","number","number","number","array","number","number"])}function woe(e){let{backend:t,inputs:a,attrs:n}=e,{indices:r,updates:s}=a,{shape:i}=n,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=Qh.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return kk(h,m,nt[s.dtype],l,u,d,f,p,g),o}var koe={kernelName:Ho,backendName:"wasm",setupFunc:voe,kernelFunc:woe},Ik;function Ioe(e){Ik=e.wasm.cwrap(qo,null,["number","number","number","number","number","number","bool","number"])}function Soe(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n;if(r.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${s.dtype}`);let o=a.makeOutput(s.shape,"int32");function l(u){return a.dataIdMap.get(u.dataId).id}return Ik(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var Toe={kernelName:qo,backendName:"wasm",setupFunc:Ioe,kernelFunc:Soe},Sk;function Coe(e){Sk=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Noe(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=a.dataIdMap.get(n.dataId).id,o=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(s.dataId).id,u=a.makeOutput(r.shape,r.dtype),d=a.dataIdMap.get(u.dataId).id,c=n.shape.length,p=r.shape.length,h=c===0||c>1||p===1?1:v.sizeFromShape(r.shape.slice(1));return Sk(i,o,l,h,d),u}var Roe={kernelName:Ou,backendName:"wasm",kernelFunc:Noe,setupFunc:Coe},Eoe=Qe(Xo),Tk;function Moe(e){Tk=e.wasm.cwrap(Rs,null,["number","number"])}function Foe(e){let{backend:t,inputs:{x:a}}=e,n=t.dataIdMap.get(a.dataId).id,r=t.makeOutput(a.shape,a.dtype),s=t.dataIdMap.get(r.dataId).id;return v.sizeFromShape(r.shape)===0||Tk(n,s),r}var $oe={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Moe,kernelFunc:Foe},Doe=Qe(Zo),Poe=Qe(Ko),_oe=Qe(Yo),Ooe=Qe(Jo);function zoe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n,o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g{let M=b.shape[0],$=b.shape[1],E=C.segment_util.segOpComputeOptimalWindowSize($,N),S={windowSize:E,inSize:$,batchSize:M,numSegments:N},_=new Rte(S,w),O=a.compileAndRun(_,[b,I],T);if(l.push(O),O.shape[1]===N)return O;let W=H8({backend:a,attrs:{start:0,stop:N,step:1,dtype:"float32"}}),P=j8({inputs:{x:W},backend:a,attrs:{reps:[$/E]}});return l.push(W),l.push(P),g(O,w,P,T,N)},y=g(m,"unsortedSegmentSum",s,f,i),x=pe({inputs:{x:y},backend:a,attrs:{shape:d}}),A=x;if(p!=null){l.push(x);let b=C.getUndoAxesPermutation(p);A=Ca({inputs:{x:A},backend:a,attrs:{perm:b}})}return l.forEach(b=>a.disposeIntermediateTensorInfo(b)),A}var Mte={kernelName:Ep,backendName:"webgl",kernelFunc:Ete},$te=[fq,yq,bq,kq,Sq,Nq,Eq,$q,Dq,zq,Bq,Gq,qq,Zq,eX,aX,rX,lX,dX,cX,gX,kX,SX,RX,MX,OX,LX,UX,Jj,jX,ZX,tK,oK,dK,cK,mK,gK,bK,kK,CK,NK,EK,$K,FK,OK,BK,UK,jK,KK,ZK,tY,sY,uY,cY,fY,gY,xY,bY,wY,IY,CY,EY,PY,DY,zY,BY,GY,XY,JY,Zj,eZ,KX,nZ,iZ,uZ,eq,hZ,yZ,AZ,kZ,CZ,EZ,PZ,OZ,BZ,GZ,jZ,YZ,JZ,eJ,rJ,iJ,lJ,dJ,cJ,gJ,bJ,IJ,$J,nq,DJ,LJ,VJ,HJ,PX,XJ,YJ,JJ,tQ,sQ,aq,oQ,uQ,pQ,hQ,mQ,_X,NJ,yQ,vQ,SQ,sq,RQ,$Q,DQ,LQ,UQ,HQ,XQ,ZQ,eee,nee,iee,uee,hee,gee,bee,kee,vX,EJ,Cee,Nee,Eee,$ee,_ee,Dee,zee,Wee,Vee,Hee,qee,Kee,Zee,ete,ate,rte,ite,RJ,cq,ute,cte,mte,yte,vte,Ite,hq,Cte,Nte,Mte,KJ];for(let e of $te)xn(e);var nt;(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"})(nt||(nt={}));var np;(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",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(np||(np={}));var q8;function Pte(e){q8=e.wasm.cwrap(Yr,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function _te(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n,d=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(s.dataId).id,m=0;if(i!=null){let N=a.dataIdMap.get(i.dataId);if(N.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${N.shape.length}.`);m=N.id}let f=o==null?0:a.dataIdMap.get(o.dataId).id,g=np[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],x=u?s.shape[1]:s.shape[2],A=al.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),b=a.makeOutput([...A,y,x],r.dtype),w=a.dataIdMap.get(b.dataId).id,I=new Uint8Array(new Int32Array(r.shape).buffer),T=new Uint8Array(new Int32Array(s.shape).buffer);return q8(d,I,r.shape.length,h,T,s.shape.length,l,u,g,m,f,c||0,w),b}var Fte={kernelName:Yr,backendName:"wasm",setupFunc:Pte,kernelFunc:_te};function Qe(e,t){let a;function n(s){a=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),p=i.dataIdMap.get(u.dataId).id;return v.sizeFromShape(u.shape)===0||a(l,nt[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var Dte=Qe(iu),Ote=Qe(oi),zte=Qe(li);function Gt(e,t,a){let n;function r(i){n=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:p}=l,c=o.dataIdMap.get(u.dataId).id,d=o.dataIdMap.get(p.dataId).id,h=a!=null?a:u.dtype,m=C.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(v.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),x=o.dataIdMap.get(f.dataId).id;return n(c,g,u.shape.length,d,y,p.shape.length,nt[u.dtype],x),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Lte=!0,Wte=Gt(os,Lte),X8;function Bte(e){X8=e.wasm.cwrap(ui,null,["array","number","number","number"])}function Vte(e){let{inputs:t,backend:a}=e,n=a.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(n.shape)===0)return n;let r=t.map(o=>a.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=a.dataIdMap.get(n.dataId).id;return X8(s,r.length,nt[n.dtype],i),n}var Ute={kernelName:ui,backendName:"wasm",setupFunc:Bte,kernelFunc:Vte};function l0(e){let{inputs:{x:t},backend:a}=e;if(t.dtype==="string")return Ve(a.readSync(t.dataId),t.shape,t.dtype);let n=a.makeOutput(t.shape,t.dtype),r=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(n).set(r),n}var Gte={kernelName:qi,backendName:"wasm",kernelFunc:l0},K8;function Hte(e){K8=e.wasm.cwrap(wr,null,["number","array","number","number","number","array","number"])}function is(e){let{inputs:t,backend:a,attrs:n}=e,[r,s]=qte(t.x.shape,n.perm),i=!0;for(let m=0;m=r&&(s===-1||n[s]>n[i])&&(s=i);n[s]=r}return[a,n]}var Xte={kernelName:wr,backendName:"wasm",kernelFunc:is,setupFunc:Hte};function fs(e,t,a){let n=e.shape,r=e.shape.length,s=v.parseAxisParam(t,n),i=s,o=C.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let d=0;d`new shape: ${i}, old shape: ${n.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var bae={kernelName:Ru,backendName:"wasm",kernelFunc:La},nw;function vae(e){nw=e.wasm.cwrap(xi,null,["number","array","number","number","array","number","number","number","number"])}function wae(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],c=o?s.shape[u-1]:s.shape[u-2],d=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),x=al.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([d,h]);v.assert(p===c,()=>`Error in matMul: inner shapes (${p}) and (${c}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let A=i?[g,p,d]:[g,d,p],b=o?[y,h,c]:[y,c,h],w=La({inputs:{x:r},backend:a,attrs:{shape:A}}),I=La({inputs:{x:s},backend:a,attrs:{shape:b}}),T=a.dataIdMap.get(w.dataId).id,N=a.dataIdMap.get(I.dataId).id,M=i?w.shape[2]:w.shape[1],$=o?I.shape[1]:I.shape[2],E=Math.max(g,y),S=a.makeOutput([E,M,$],w.dtype),_=a.dataIdMap.get(S.dataId).id,O=new Uint8Array(new Int32Array(w.shape).buffer),W=new Uint8Array(new Int32Array(I.shape).buffer);return nw(T,O,w.shape.length,N,W,I.shape.length,i,o,_),a.disposeData(w.dataId),a.disposeData(I.dataId),S.shape=x,S}var kae={kernelName:xi,backendName:"wasm",setupFunc:vae,kernelFunc:wae};function si(e){let{inputs:{x:t},attrs:{begin:a,size:n},backend:r}=e,[s,i]=Nt.parseSliceParams(t,a,n),o=Nt.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),p=v.computeStrides(t.shape),c=r.dataIdMap.get(u.dataId);if(o){let m=Nt.computeFlatOffset(s,p);return t.dtype==="string"?c.stringBytes=l.slice(m,m+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+v.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Ah(l,s,i,t.shape,t.dtype);return c.stringBytes=m,u}let d=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)Iae(l,p[0],d,s,i);else if(h===3)Sae(l,p[0],p[1],d,s,i);else if(h===4)Cae(l,p[0],p[1],p[2],d,s,i);else{let m=Ah(l,s,i,t.shape,t.dtype);d.set(m)}return u}function Iae(e,t,a,n,r){let s=0,i=n[0],o=n[1],l=i+r[0];for(let u=i;uy*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=La({inputs:{x:r},backend:a,attrs:{shape:l}}),m=is({inputs:{x:h},backend:a,attrs:{perm:u}}),f=La({inputs:{x:m},backend:a,attrs:{shape:p}}),g=si({inputs:{x:f},backend:a,attrs:{begin:c,size:d}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(f.dataId),g}var Rae={kernelName:du,backendName:"wasm",kernelFunc:Nae},rw;function Eae(e){rw=e.wasm.cwrap(Ai,null,["number","number","boolean","number","number","number"])}function Mae(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i}=n,o=s.shape.reduce((c,d)=>c*d,1)!==0,l=r.shape.length===1?[i]:[r.shape[0],i],u=t.makeOutput(l,s.dtype);function p(c){return t.dataIdMap.get(c.dataId).id}return rw(p(r),i,o,p(s),nt[s.dtype],p(u)),u}var $ae={kernelName:Ai,backendName:"wasm",setupFunc:Eae,kernelFunc:Mae},Pae=!0,_ae=Gt(pu,Pae);function Fae(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t,s=a.typedArrayFromHeap(n),i=a.typedArrayFromHeap(r),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return a.makeOutput([o.length],"int32",void 0,new Int32Array(o))}var Dae={kernelName:cu,backendName:"wasm",kernelFunc:Fae};function gs(e){let{inputs:{x:t},attrs:{dtype:a},backend:n}=e,r=n.makeOutput(t.shape,a),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var Oae={kernelName:bi,backendName:"wasm",kernelFunc:gs},zae=Qe(vi),sw;function Lae(e){sw=e.wasm.cwrap(ls,null,["number","number","number","number"])}function Wae(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o=a.dataIdMap.get(r.dataId).id,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(l.dataId).id;return sw(o,s,i,u),l}var Bae={kernelName:ls,backendName:"wasm",setupFunc:Lae,kernelFunc:Wae};function iw(e){let{inputs:t,backend:a}=e,n=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);C.assertParamsConsistent(r,n);let s=C.computeOutShape(t.map(h=>h.shape),n),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return l0({inputs:{x:i[0]},backend:a});let o=a.makeOutput(s,t[0].dtype);if(v.sizeFromShape(s)===0)return o;if(i[0].dtype==="string"){let h=i.map(A=>{let b=[-1,v.sizeFromShape(A.shape.slice(n))];return La({inputs:{x:A},backend:a,attrs:{shape:b}})}),m=h.map(A=>({vals:a.readSync(A.dataId),shape:A.shape}));s=C.computeOutShape(h.map(A=>A.shape),1);let f=h[0].shape[0]===1,g=m3(m,s,t[0].dtype,f),y=C.computeOutShape(i.map(A=>A.shape),n);o.shape=y;let x=a.dataIdMap.get(o.dataId);return x.stringBytes=C.fromStringArrayToUint8(g),h.forEach(A=>a.disposeData(A.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,n)),u=0,p=i.map(h=>{let m=v.sizeFromShape(h.shape.slice(n));return u+=m,m}),c=i.map(h=>a.typedArrayFromHeap(h)),d=a.typedArrayFromHeap(o);for(let h=0;h`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumprod",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;hw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var pne={kernelName:Ni,backendName:"wasm",setupFunc:une,kernelFunc:dne},mw;function cne(e){mw=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number"])}function hne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],l),p=r;u!==null&&(p=is({inputs:{x:r},attrs:{perm:u},backend:a}));let c=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumsum",[c],l);let d=a.makeOutput(p.shape,p.dtype),h=p.shape[c],m=a.dataIdMap.get(p.dataId).id,f=a.dataIdMap.get(d.dataId).id;mw(m,i?1:0,o?1:0,h,f,nt[r.dtype]);let g=d;if(u!==null){let y=C.getUndoAxesPermutation(u);g=is({inputs:{x:d},attrs:{perm:y},backend:a}),a.disposeData(p.dataId),a.disposeData(d.dataId)}return g}var mne={kernelName:Ri,backendName:"wasm",setupFunc:cne,kernelFunc:hne},fw;function fne(e){fw=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function gne(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,weights:s}=a,{size:i,binaryOutput:o}=n,l=s.shape.reduce((d,h)=>d*h,1)!==0,u=r.shape.length===1?[i]:[r.shape[0],i],p=t.makeOutput(u,s.dtype);function c(d){return t.dataIdMap.get(d.dataId).id}return fw(c(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,i,l,c(s),nt[s.dtype],o,c(p)),p}var yne={kernelName:fu,backendName:"wasm",setupFunc:fne,kernelFunc:gne},gw;function xne(e){gw=e.wasm.cwrap(Mi,null,["number","number","number","array","number","array","array","number","number"])}function Ane(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(m).buffer),A=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),b=t.dataIdMap.get(f.dataId).id;return gw(g,s,i==="NHWC"?1:0,y,r.shape.length-1,x,A,m.length,b),f}var bne={kernelName:Mi,backendName:"wasm",setupFunc:xne,kernelFunc:Ane},yw;function vne(e){yw=e.wasm.cwrap($i,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function wne(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:c}=a,d=u==null?[1,1]:u,h=C.computeConv2DInfo(r.shape,s.shape,l,d,p,c,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,x=h.padInfo.bottom,A=h.padInfo.left,b=h.dilationHeight,w=h.dilationWidth,I=h.strideHeight,T=h.strideWidth,N=h.inChannels,M=h.outChannels,$=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let E=n.makeOutput(h.outShape,"float32"),S=n.dataIdMap.get(E.dataId).id;return yw(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,x,A,$,b,w,I,T,N,M,S),E}var kne={kernelName:$i,backendName:"wasm",setupFunc:vne,kernelFunc:wne},xw;function Ine(e){xw=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function Sne(e){let{inputs:t,backend:a}=e,{x:n}=t,r=v.sizeFromShape(n.shape),s=a.makeOutput([...n.shape,...n.shape],n.dtype);return xw(a.dataIdMap.get(n.dataId).id,nt[n.dtype],r,a.dataIdMap.get(s.dataId).id),s}var Cne={kernelName:gu,backendName:"wasm",setupFunc:Ine,kernelFunc:Sne},Aw;function Tne(e){Aw=e.wasm.cwrap(Pi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Nne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n;if(r.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${s.dtype}`);let u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=a.makeOutput(u.outShape,r.dtype);return Aw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(p.dataId).id,nt[r.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),p}var Rne={kernelName:Pi,backendName:"wasm",setupFunc:Tne,kernelFunc:Nne},bw;function Ene(e){bw=e.wasm.cwrap(ql,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Mne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(s.shape,s.dtype);return bw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var $ne={kernelName:ql,backendName:"wasm",setupFunc:Ene,kernelFunc:Mne},vw;function Pne(e){vw=e.wasm.cwrap(jl,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _ne(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n;if(r.dtype!==s.dtype||r.dtype!==i.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${s.dtype}, and ${i.dtype}`);let p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=a.makeOutput(r.shape,r.dtype);return vw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,nt[r.dtype],p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.filterHeight,p.filterWidth,p.padInfo.top,p.padInfo.left),c}var Fne={kernelName:jl,backendName:"wasm",setupFunc:Pne,kernelFunc:_ne},Dne=Qe(Fi),ww;function One(e){ww=e.wasm.cwrap(yu,null,["number","number","number"])}function zne(e){let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=a.makeOutput(r.shape,"float32"),i=o=>a.dataIdMap.get(o.dataId).id;return ww(i(r),i(n),i(s)),s}var Lne={kernelName:yu,backendName:"wasm",setupFunc:One,kernelFunc:zne},Wne=!1,Bne=Gt(Oi,Wne,"bool"),Vne=Qe(Di),Une=Qe(zi,"float32");function U1(e){let{inputs:t,attrs:a,backend:n}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),La({inputs:{x:r},backend:n,attrs:{shape:o}})}var Gne={kernelName:xu,backendName:"wasm",kernelFunc:U1},Hne=Qe(Li,"float32");function kw(e){let{attrs:{shape:t,value:a},backend:n}=e,{attrs:{dtype:r}}=e;r=r||v.inferDtype(a);let s=n.makeOutput(t,r);return n.typedArrayFromHeap(s).fill(a),s}var jne={kernelName:Au,backendName:"wasm",kernelFunc:kw},Iw;function qne(e){Iw=e.wasm.cwrap(Wi,null,["number","number","number","number","number","number"])}function Xne(e){let{inputs:t,backend:a}=e,{image:n}=t,r=a.makeOutput(n.shape,n.dtype),s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,[o,l,u,p]=n.shape;return Iw(s,o,l,u,p,i),r}var Kne={kernelName:Wi,backendName:"wasm",kernelFunc:Xne,setupFunc:qne},Yne=Qe(Bi),Zne=!1,Jne=Gt(Vi,Zne),Sw;function Qne(e){Sw=e.wasm.cwrap(Ui,null,["number","number","number","number","number","number","number"])}function ere(e){let{backend:t,inputs:a,attrs:n}=e,{varianceEpsilon:r}=n,{x:s,mean:i,variance:o,offset:l,scale:u}=a,p=t.dataIdMap.get(s.dataId).id,c=t.dataIdMap.get(i.dataId).id,d=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return Sw(p,c,d,h,m,r,g),f}var tre={kernelName:Ui,backendName:"wasm",setupFunc:Qne,kernelFunc:ere},Cw;function are(e){Cw=e.wasm.cwrap(Zr,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 nre(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:c,dimRoundingMode:d,activation:h,leakyreluAlpha:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d),g=np[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.dataId);if(X.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==A)throw new Error(`FusedConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Cw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var rre={kernelName:Zr,backendName:"wasm",setupFunc:are,kernelFunc:nre},Tw;function sre(e){Tw=e.wasm.cwrap(Jr,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 ire(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:c,dimRoundingMode:d,activation:h,leakyreluAlpha:m}=a,f=C.computeConv2DInfo(r.shape,s.shape,l,p,u,d,!0),g=np[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=n.dataIdMap.get(r.dataId).id,x=n.dataIdMap.get(s.dataId).id,A=f.outChannels,b=0;if(i!=null){let X=n.dataIdMap.get(i.dataId);if(X.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${X.shape.length}.`);if(X.shape[0]!==A)throw new Error(`FusedDepthwiseConv2D bias shape (${X.shape}) does not match the number of output channels (${A})`);b=X.id}let w=f.filterHeight,I=f.filterWidth,T=f.padInfo.top,N=f.padInfo.right,M=f.padInfo.bottom,$=f.padInfo.left,E=f.dilationHeight,S=f.dilationWidth,_=f.strideHeight,O=f.strideWidth,W=f.inChannels,P=f.padInfo.type==="SAME"?1:0,U=f.batchSize,G=f.inHeight,q=f.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let H=n.makeOutput(f.outShape,"float32"),V=n.dataIdMap.get(H.dataId).id,Z=o==null?0:n.dataIdMap.get(o.dataId).id;return Tw(y,U,G,q,x,w,I,b,T,N,M,$,P,E,S,_,O,W,A,g,Z,m||0,V),H}var ore={kernelName:Jr,backendName:"wasm",setupFunc:sre,kernelFunc:ire},Nw;function lre(e){Nw=e.wasm.cwrap(Gi,null,["number","number","number","number","number","number","array","number"])}function ure(e){let{backend:t,inputs:a}=e,{params:n,indices:r}=a,[s,i,o,l]=s3.prepareAndValidate(n,r),u=t.makeOutput(s,n.dtype);if(i===0)return u;let p=r.shape,c=p[p.length-1],d=t.dataIdMap.get(n.dataId).id,h=t.dataIdMap.get(r.dataId).id,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return Nw(d,nt[n.dtype],h,i,c,o,m,f),u}var dre={kernelName:Gi,backendName:"wasm",setupFunc:lre,kernelFunc:ure},Rw;function pre(e){Rw=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function cre(e){let{backend:t,inputs:a,attrs:n}=e,{x:r,indices:s}=a,{axis:i,batchDims:o}=n,l=v.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),p=r.shape[l];for(let T=0;T=0,()=>`GatherV2: the index value ${N} is not in [0, ${p-1}]`)}let c=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),d=La({inputs:{x:r},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=La({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),f=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],g=t.makeOutput(f,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=d.shape.length-1,x=t.dataIdMap.get(d.dataId).id,A=t.dataIdMap.get(m.dataId).id,b=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(v.computeStrides(d.shape)).buffer),I=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return Rw(x,nt[r.dtype],w,y,A,c.batchSize,I,b),t.disposeData(d.dataId),t.disposeData(m.dataId),g.shape=c.outputShape,g}var hre={kernelName:bu,backendName:"wasm",setupFunc:pre,kernelFunc:cre},mre=!1,fre=Gt(Hi,mre,"bool"),gre=!1,yre=Gt(ji,gre,"bool"),xre=Qe(Xi,"bool"),Are=Qe(Ki,"bool"),bre=Qe(Yi,"bool"),Ew;function vre(e){Ew=e.wasm.cwrap(Zi,null,["number","number","number","number"])}function wre(e){let{inputs:{x:t},attrs:{alpha:a},backend:n}=e,r=n.dataIdMap.get(t.dataId).id,s=n.makeOutput(t.shape,"float32");if(v.sizeFromShape(t.shape)!==0){let i=n.dataIdMap.get(s.dataId).id;Ew(r,nt[t.dtype],a,i)}return s}var kre={kernelName:Zi,backendName:"wasm",setupFunc:vre,kernelFunc:wre},Ire=!1,Sre=Gt(Ji,Ire,"bool"),Cre=!1,Tre=Gt(Qi,Cre,"bool"),Mw;function Nre(e){Mw=e.wasm.cwrap(eo,null,["number","number","number","number"])}function Rre(e){let{attrs:t,backend:a}=e,{start:n,stop:r,num:s}=t,i=Math.floor(s),o=a.makeOutput([i],"float32");return Mw(a.dataIdMap.get(o.dataId).id,n,r,i),o}var Ere={kernelName:eo,backendName:"wasm",setupFunc:Nre,kernelFunc:Rre},Mre=Qe(to),$re=Qe(ao),Pre=!1,_re=Gt(no,Pre,"bool"),Fre=Qe(ro),Dre=!1,Ore=Gt(so,Dre,"bool"),zre=!1,Lre=Gt(NA,zre,"bool"),$w;function Wre(e){$w=e.wasm.cwrap(io,null,["number","number","number","number","number","number","number"])}function Bre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=a.makeOutput(r.shape,r.dtype);return $w(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(u.dataId).id,r.shape[3],s,i,o,l),u}var Vre={kernelName:io,backendName:"wasm",setupFunc:Wre,kernelFunc:Bre},Pw;function Ure(e){Pw=e.wasm.cwrap(vu,null,["number","number","number","number","number","number","number","number","number"])}function Gre(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n;if(r.dtype!=="float32"||s.dtype!=="float32"||i.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let c=a.makeOutput(r.shape,r.dtype);return Pw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(i.dataId).id,a.dataIdMap.get(c.dataId).id,i.shape[3],o,l,u,p),c}var Hre={kernelName:vu,backendName:"wasm",setupFunc:Ure,kernelFunc:Gre},_w;function jre(e){_w=e.wasm.cwrap(oo,null,["number","number","number","number"])}function qre(e){let{backend:t,inputs:a,attrs:n}=e,{reductionIndices:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:c,inputWasTransposed:d}=fs(i,r,t);if(d){let x=t.dataIdMap.get(u.dataId).id;l=u,o=x}let h=l.shape.length;C.assertAxesAreInnerMostDims("max",p,h);let[m,f]=C.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;_w(o,nt[i.dtype],g,x)}if(d&&t.disposeData(u.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var Xre={kernelName:oo,backendName:"wasm",setupFunc:jre,kernelFunc:qre},Kre=!1,Yre=Gt(lo,Kre),Fw;function Zre(e){Fw=e.wasm.cwrap(uo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Jre(e){let{inputs:t,attrs:a,backend:n}=e,r=t.x,s=n.dataIdMap.get(r.dataId).id;v.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a,p=C.computePool2DInfo(r.shape,i,o,1,l,u),c=p.filterHeight,d=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,x=p.dilationWidth,A=p.strideHeight,b=p.strideWidth,w=p.inChannels,I=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let T=n.makeOutput(p.outShape,"float32"),N=n.dataIdMap.get(T.dataId).id;return Fw(s,r.shape[0],r.shape[1],r.shape[2],c,d,h,m,f,g,y,x,A,b,w,I,N),T}var Qre={kernelName:uo,backendName:"wasm",setupFunc:Zre,kernelFunc:Jre},Dw;function ese(e){Dw=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function tse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=n,p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),c=a.makeOutput(p.outShape,r.dtype);return Dw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var ase={kernelName:wu,backendName:"wasm",setupFunc:ese,kernelFunc:tse},Ow;function nse(e){Ow=e.wasm.cwrap("MaxPool3DGrad",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 rse(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool3DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return Ow(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inDepth,p.inHeight,p.inWidth,p.outDepth,p.outHeight,p.outWidth,p.strideDepth,p.strideHeight,p.strideWidth,p.dilationDepth,p.dilationHeight,p.dilationWidth,p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.front,p.padInfo.top,p.padInfo.left),c}var sse={kernelName:wp,backendName:"wasm",setupFunc:nse,kernelFunc:rse},zw;function ise(e){zw=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ose(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=C.computePool2DInfo(s.shape,i,o,1,l,u),c=a.makeOutput(s.shape,s.dtype);return zw(a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),c}var lse={kernelName:vp,backendName:"wasm",setupFunc:ise,kernelFunc:ose},Lw;function use(e){Lw=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function dse(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,includeBatchInIndex:l}=n;v.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,[1,1],o),c=a.makeOutput(p.outShape,r.dtype),d=a.makeOutput(p.outShape,"int32");return Lw(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(c.dataId).id,a.dataIdMap.get(d.dataId).id,nt[r.dtype],l,p.batchSize,p.inChannels,p.inHeight,p.inWidth,p.outHeight,p.outWidth,p.strideHeight,p.strideWidth,p.dilationHeight,p.dilationWidth,p.effectiveFilterHeight,p.effectiveFilterWidth,p.padInfo.top,p.padInfo.left),[c,d]}var pse={kernelName:ku,backendName:"wasm",setupFunc:use,kernelFunc:dse},Ww;function cse(e){Ww=e.wasm.cwrap(po,null,["number, number, number"])}function hse(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=fs(i,r,t),m=c;if(h){let b=t.dataIdMap.get(p.dataId).id;b!==o&&(u=p,l=b,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=u;u.dtype!=="float32"&&(x=gs({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(x.dataId).id);let A=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let b=t.dataIdMap.get(A.dataId).id;Ww(l,y,b)}if(h&&t.disposeData(p.dataId),s){let b=C.expandShapeToKeepDim(A.shape,d);A.shape=b}return u.dtype!=="float32"&&t.disposeData(x.dataId),A}var mse={kernelName:po,backendName:"wasm",setupFunc:cse,kernelFunc:hse},Bw;function fse(e){Bw=e.wasm.cwrap(co,null,["number","number","number","number"])}function gse(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=fs(i,r,t);if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A)}let m=u.shape.length;C.assertAxesAreInnerMostDims("min",c,m);let[f,g]=C.computeOutAndReduceShapes(u.shape,c),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Bw(l,nt[i.dtype],y,A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var yse={kernelName:co,backendName:"wasm",setupFunc:fse,kernelFunc:gse},xse=!1,Ase=Gt(ho,xse),G1;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(G1||(G1={}));var Vw;function bse(e){Vw=e.wasm.cwrap(mo,null,["number","array","number","number","array","array","number","number"])}function vse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,mode:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]),i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=n.map(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Vw(i,u,t.shape.length,nt[t.dtype],d,h,G1[r],l),o}var wse={kernelName:mo,backendName:"wasm",kernelFunc:vse,setupFunc:bse},Uw;function kse(e){Uw=e.wasm.cwrap(Ho,null,["number","number","number","number"])}function Gw(e){let{backend:t,inputs:{logits:a},attrs:{dim:n}}=e,r=t.dataIdMap.get(a.dataId).id,s=t.makeOutput(a.shape,a.dtype),i=t.dataIdMap.get(s.dataId).id,o=a.shape[n],l=v.sizeFromShape(a.shape)/o;return v.sizeFromShape(s.shape)===0||Uw(r,i,o,l),s}var Ise={kernelName:Ho,backendName:"wasm",setupFunc:kse,kernelFunc:Gw},Hw;function Sse(e){Hw=e.wasm.cwrap(go,null,["number","number","number","number","number","number"])}function Cse(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);let l=o?r:Gw({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),[u,p]=l.shape,c=a.makeOutput([u,s],"int32");return Hw(a.dataIdMap.get(l.dataId).id,u,p,s,i,a.dataIdMap.get(c.dataId).id),o||a.disposeData(l.dataId),c}var Tse={kernelName:go,backendName:"wasm",setupFunc:Sse,kernelFunc:Cse},Nse=Gt(fo,!0),Rse=!0,Ese=Gt(yo,Rse),Mse=Qe(Iu);function V3(e,t){let a=new Int32Array(e.wasm.HEAPU8.buffer,t,4),n=a[0],r=a[1],s=a[2],i=a[3];return e.wasm._free(t),{pSelectedIndices:n,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var jw;function $se(e){jw=e.wasm.cwrap(Ao,"number",["number","number","number","number","number"])}function Pse(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=n,{boxes:o,scores:l}=a,u=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(l.dataId).id,c=jw(u,p,s,r,i),{pSelectedIndices:d,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=V3(t,c);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",d)}var _se={kernelName:Ao,backendName:"wasm",setupFunc:$se,kernelFunc:Pse},qw;function Fse(e){qw=e.wasm.cwrap(Su,"number",["number","number","number","number","number","bool"])}function Dse(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=n,{boxes:l,scores:u}=a,p=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,d=qw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([],"int32",g);return[y,x]}var Ose={kernelName:Su,backendName:"wasm",setupFunc:Fse,kernelFunc:Dse},Xw;function zse(e){Xw=e.wasm.cwrap(bo,"number",["number","number","number","number","number","number"])}function Lse(e){let{backend:t,inputs:a,attrs:n}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=n,{boxes:l,scores:u}=a,p=t.dataIdMap.get(l.dataId).id,c=t.dataIdMap.get(u.dataId).id,d=Xw(p,c,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=V3(t,d);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),x=t.makeOutput([m],"float32",f);return[y,x]}var Wse={kernelName:bo,backendName:"wasm",setupFunc:zse,kernelFunc:Lse},Bse=!1,Vse=Gt(xo,Bse,"bool"),Kw;function Use(e){Kw=e.wasm.cwrap(vo,null,["number","number","number","number","number"])}function Gse(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=a.makeOutput([...r.shape,i],s),p=a.dataIdMap.get(u.dataId).id,c=a.dataIdMap.get(r.dataId).id;return Kw(c,i,o,l,p),u}var Hse={kernelName:vo,backendName:"wasm",setupFunc:Use,kernelFunc:Gse};function jse(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(1),n}var qse={kernelName:Cu,backendName:"wasm",kernelFunc:jse};function Xse(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return U1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=U1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=iw({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Kse={kernelName:Tu,backendName:"wasm",kernelFunc:Xse},Yw;function Yse(e){Yw=e.wasm.cwrap(wo,null,["number","array","number","number","array","array","number","number"])}function Zse(e){let{inputs:{x:t},backend:a,attrs:{paddings:n,constantValue:r}}=e,s=n.map((m,f)=>m[0]+t.shape[f]+m[1]);if(v.sizeFromShape(t.shape)===0)return kw({backend:a,attrs:{shape:s,value:r,dtype:t.dtype}});let i=a.dataIdMap.get(t.dataId).id,o=a.makeOutput(s,t.dtype),l=a.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=n.map(m=>m[0]),c=n.map(m=>m[1]),d=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(c).buffer);return Yw(i,u,t.shape.length,nt[t.dtype],d,h,r,l),o}var Zw={kernelName:wo,backendName:"wasm",kernelFunc:Zse,setupFunc:Yse},Jse=!1,Qse=Gt(ko,Jse),Jw;function eie(e){Jw=e.wasm.cwrap(Io,null,["number","number","number"])}function tie(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=a.dataIdMap.get(n.dataId).id,i=a.dataIdMap.get(r.dataId).id,o=s,l=n,u=l;l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:n},attrs:{dtype:"float32"}}),o=a.dataIdMap.get(u.dataId).id);let p=a.makeOutput(n.shape,"float32"),c=a.dataIdMap.get(p.dataId).id;return Jw(o,i,c),l.dtype!=="float32"&&a.disposeData(u.dataId),p}var aie={kernelName:Io,backendName:"wasm",setupFunc:eie,kernelFunc:tie},Qw;function nie(e){Qw=e.wasm.cwrap(So,null,["number","number","number","number"])}function rie(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Qw(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var sie={kernelName:So,backendName:"wasm",setupFunc:nie,kernelFunc:rie},iie=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=y3(n,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},oie={kernelName:Nu,backendName:"wasm",kernelFunc:iie},lie=!0,uie=Gt(_i,lie),die=Qe(Co),pie=Qe(To),cie=Qe(Eo),ek;function hie(e){ek=e.wasm.cwrap(Ro,null,["number","number","number","number","number","number","number","number","number","number"])}function mie(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[p,c,d,h]=r.shape,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,x=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return x;let A=t.dataIdMap.get(x.dataId).id;return ek(y,p,c,d,h,l,u,s?1:0,i?1:0,A),g!=null&&t.disposeData(g.dataId),x}var fie={kernelName:Ro,backendName:"wasm",setupFunc:hie,kernelFunc:mie},tk;function gie(e){tk=e.wasm.cwrap(Mu,null,["number","number","number","array","array","boolean"])}function yie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),tk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var xie={kernelName:Mu,backendName:"wasm",setupFunc:gie,kernelFunc:yie},ak;function Aie(e){ak=e.wasm.cwrap(No,null,["number","number","number","number","number","number","number","number","number","number"])}function bie(e){let{backend:t,inputs:a,attrs:n}=e,{images:r}=a,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,[p,c,d,h]=r.shape,m=[p,l,u,h],f=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=gs({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let x=g.id,A=t.dataIdMap.get(f.dataId).id;return ak(x,p,c,d,h,l,u,s?1:0,i?1:0,A),y!=null&&t.disposeData(y.dataId),f}var vie={kernelName:No,backendName:"wasm",setupFunc:Aie,kernelFunc:bie},nk;function wie(e){nk=e.wasm.cwrap(Eu,null,["number","number","number","array","array","boolean"])}function kie(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,o=a.makeOutput(r.shape,"float32"),l=a.dataIdMap.get(r.dataId),u;return l.dtype!=="float32"&&(u=gs({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(u.dataId)),nk(a.dataIdMap.get(r.dataId).id,a.dataIdMap.get(s.dataId).id,a.dataIdMap.get(o.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),i),u!=null&&a.disposeData(u.dataId),o}var Iie={kernelName:Eu,backendName:"wasm",setupFunc:wie,kernelFunc:kie},rk;function Sie(e){rk=e.wasm.cwrap(Mo,null,["number","array","number","array","number","number"])}function Cie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=v.parseAxisParam(s,r.shape);if(r.shape.length===0)return l0({inputs:{x:r},backend:a});let o=a.makeOutput(r.shape,r.dtype),l=a.dataIdMap.get(r.dataId).id,u=a.dataIdMap.get(o.dataId).id,p=new Uint8Array(new Int32Array(i).buffer),c=new Uint8Array(new Int32Array(r.shape).buffer);rk(l,p,i.length,c,r.shape.length,u);let d=La({inputs:{x:o},attrs:{shape:r.shape},backend:a});return a.disposeData(o.dataId),d}var Tie={kernelName:Mo,backendName:"wasm",kernelFunc:Cie,setupFunc:Sie},sk;function Nie(e){sk=e.wasm.cwrap(el,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Rie(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=n,l=a.makeOutput(r.shape,r.dtype),u=a.dataIdMap.get(r.dataId).id,p=a.dataIdMap.get(l.dataId).id,[c,d,h,m]=r.shape,[f,g]=C.getImageCenter(o,d,h),y=i===0,x=255,A=typeof i=="number"?[i,i,i,y?0:x]:[...i,x],b=new Uint8Array(new Int32Array(A).buffer);return sk(u,c,d,h,m,s,f,g,b,A.length,p),l}var Eie={kernelName:el,backendName:"wasm",kernelFunc:Rie,setupFunc:Nie},Mie=Qe($o),$ie=Qe(Po),ik;function Pie(e){ik=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","array","number","number"])}function _ie(e){let{backend:t,inputs:a,attrs:n}=e,{indices:r,updates:s}=a,{shape:i}=n,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=jh.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(c).buffer),g=t.dataIdMap.get(o.dataId).id;return ik(h,m,nt[s.dtype],l,u,p,f,d,g),o}var Fie={kernelName:_o,backendName:"wasm",setupFunc:Pie,kernelFunc:_ie},ok;function Die(e){ok=e.wasm.cwrap(Do,null,["number","number","number","number","number","number","bool","number"])}function Oie(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n;if(r.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${s.dtype}`);let o=a.makeOutput(s.shape,"int32");function l(u){return a.dataIdMap.get(u.dataId).id}return ok(l(r),l(s),r.shape[0],r.shape[1],s.shape[1],nt[r.dtype],i==="left",l(o)),o}var zie={kernelName:Do,backendName:"wasm",setupFunc:Die,kernelFunc:Oie},lk;function Lie(e){lk=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Wie(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=a.dataIdMap.get(n.dataId).id,o=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(s.dataId).id,u=a.makeOutput(r.shape,r.dtype),p=a.dataIdMap.get(u.dataId).id,c=n.shape.length,d=r.shape.length,h=c===0||c>1||d===1?1:v.sizeFromShape(r.shape.slice(1));return lk(i,o,l,h,p),u}var Bie={kernelName:$u,backendName:"wasm",kernelFunc:Wie,setupFunc:Lie},Vie=Qe(Oo),uk;function Uie(e){uk=e.wasm.cwrap(Bo,null,["number","number"])}function Gie(e){let{backend:t,inputs:{x:a}}=e,n=t.dataIdMap.get(a.dataId).id,r=t.makeOutput(a.shape,a.dtype),s=t.dataIdMap.get(r.dataId).id;return v.sizeFromShape(r.shape)===0||uk(n,s),r}var Hie={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Uie,kernelFunc:Gie},jie=Qe(Wo),qie=Qe(zo),Xie=Qe(Lo),Kie=Qe(Vo);function Yie(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n,o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g0?l+1:0;if(u<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=r.shape.slice();d[0]=u;let c=a.dataIdMap.get(r.dataId).id,p=a.dataIdMap.get(s.dataId).id,h=a.dataIdMap.get(i.dataId).id,m=a.makeOutput(d,r.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([4],"int32"),y=a.dataIdMap.get(g.dataId).id;Rk(c,nt[r.dtype],r.shape[0],p,h,f,y,t,0);let x=a.readSync(g.dataId),A;switch(x[0]){case 0:{A=I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{A=I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:A=I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:A=I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x[1],x[2],x[3]);break;default:A=""}if(a.disposeData(g.dataId),A)throw a.disposeData(m.dataId),new Error(A);return m}function joe(e){return Mk(e,!0)}var qoe={kernelName:Vu,backendName:"wasm",setupFunc:Ek,kernelFunc:joe};function Xoe(e){return Mk(e,!1)}var Koe={kernelName:Uu,backendName:"wasm",setupFunc:Ek,kernelFunc:Xoe},Fk;function Yoe(e){Fk=e.wasm.cwrap(tl,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Zoe(e){let{backend:t,inputs:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=a,{outputShape:o}=n,l=t.makeOutput(o,i.dtype);if(v.sizeFromShape(o)===0)return l;let{sliceRank:u,numUpdates:d,sliceSize:c,strides:p,outputSize:h}=I.calculateShapes(s,r,o),m=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(i.dataId).id,y=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(l.dataId).id;return Fk(m,f,s.shape.length,g,nt[i.dtype],u,d,c,y,h,x),l}var Joe={kernelName:tl,backendName:"wasm",setupFunc:Yoe,kernelFunc:Zoe};function Qoe(e){let{inputs:t,attrs:a,backend:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=I.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),d=r.shape.slice();return l.map(c=>{let p=[...d];p[o]=c;let h=Mi({inputs:{x:r},attrs:{begin:u,size:p},backend:n});return u[o]+=c,h})}var ele={kernelName:Wu,backendName:"wasm",kernelFunc:Qoe},tle=Qe(Es),ale=Qe(Fp),nle=!0,rle=Gt(Ms,nle),$k;function sle(e){$k=e.wasm.cwrap(Ds,null,["number","number","number","number"])}function ile(e){let{backend:t,inputs:a,attrs:n}=e,{alpha:r}=n,{x:s}=a,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return $k(i,r,nt[s.dtype],l),o}var ole={kernelName:Ds,backendName:"wasm",setupFunc:sle,kernelFunc:ile},Dk;function lle(e){Dk=e.wasm.cwrap(al,null,["number","array","number","array","array","array","array","array","number","number"])}function ule(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=wt.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(f)w=La({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=wt.computeOutShape(x,A,b),C=Mi({inputs:{x:r},backend:t,attrs:{begin:x,size:S}});w=La({inputs:{x:C},backend:t,attrs:{shape:m}}),t.disposeData(C.dataId)}else{let S=t.makeOutput(h,"float32"),C=t.dataIdMap.get(r.dataId).id,N=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),M=new Uint8Array(new Int32Array(x).buffer),F=new Uint8Array(new Int32Array(A).buffer),E=new Uint8Array(new Int32Array(b).buffer),T=new Uint8Array(new Int32Array(h).buffer),D=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(S.dataId).id;Dk(C,N,r.shape.length,M,F,E,T,D,h.length,O),w=La({inputs:{x:S},backend:t,attrs:{shape:m}}),t.disposeData(S.dataId)}return w}var dle={kernelName:al,backendName:"wasm",setupFunc:lle,kernelFunc:ule};function ple(e){let{backend:t,inputs:a,attrs:n}=e,{data:r,dataSplits:s}=a,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:d,preserveShortSequences:c}=n,p=t.readSync(r.dataId),h=t.readSync(s.dataId),[m,f]=N3(p,h,i,o,l,u,d,c),g=t.makeOutput([m.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=m;let x=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(x).set(f),[g,x]}var cle={kernelName:Hu,backendName:"wasm",kernelFunc:ple};function hle(e){let{backend:t,inputs:a,attrs:n}=e,{input:r,delimiter:s}=a,{skipEmpty:i}=n,o=t.readSync(r.dataId),l=t.readSync(s.dataId),[u,d,c]=R3(o,l[0],i),p=d.length,h=t.makeOutput([p,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([p],"string"),f=t.dataIdMap.get(m.dataId);f.stringBytes=d;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,m,g]}var mle={kernelName:$p,backendName:"wasm",kernelFunc:hle};function fle(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=E3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var gle={kernelName:Dp,backendName:"wasm",kernelFunc:fle},yle=!0,xle=Gt(Fs,yle),Pk;function Ale(e){Pk=e.wasm.cwrap(Qo,null,["number","number","number","number"])}function ble(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:c,originalAxes:p,inputWasTransposed:h}=Ls(i,r,t),m=c;if(h){let A=t.dataIdMap.get(d.dataId).id;A!==o&&(u=d,l=A,m=I.getInnerMostAxes(m.length,u.shape.length))}I.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=I.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;Pk(l,y,nt[x.dtype],A)}if(h&&t.disposeData(d.dataId),s){let A=I.expandShapeToKeepDim(x.shape,p);x.shape=A}return x}var vle={kernelName:Qo,backendName:"wasm",setupFunc:Ale,kernelFunc:ble},wle=Qe(nl),kle=Qe(rl),_k;function Ile(e){_k=e.wasm.cwrap(jo,null,["number","number","number","number","number","number","array","number","number","number"])}function Sle(e){let{backend:t,inputs:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=a,{}=n,o=t.makeOutput(r.shape,r.dtype);if(v.sizeFromShape(r.shape)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=Qh.calculateShapes(i,s,r.shape),h=t.dataIdMap.get(s.dataId).id,m=t.dataIdMap.get(i.dataId).id,f=t.dataIdMap.get(r.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),y=t.dataIdMap.get(o.dataId).id;return _k(h,m,nt[i.dtype],l,u,d,g,p,y,f),o}var Tle={kernelName:jo,backendName:"wasm",setupFunc:Ile,kernelFunc:Sle},Ok;function Cle(e){Ok=e.wasm.cwrap($s,null,["number","array","number","array","number","number"])}function Nle(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,s=a.dataIdMap.get(r.dataId).id,{reps:i}=n,o=new Array(r.shape.length);for(let p=0;p{let{x:n}=e,{k:r,sorted:s}=a,i=t.dataIdMap.get(n.dataId).id,o=new Uint8Array(new Int32Array(n.shape).buffer),l=n.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,n.dtype),d=t.dataIdMap.get(u.dataId).id,c=t.makeOutput(l,"int32"),p=t.dataIdMap.get(c.dataId).id;return zk(i,o,n.shape.length,nt[n.dtype],r,s,d,p),[u,c]},Fle={kernelName:sl,backendName:"wasm",setupFunc:Ele,kernelFunc:Mle},Lk;function $le(e){Lk=e.wasm.cwrap(il,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Dle(e){let{backend:t,inputs:a,attrs:n}=e,{image:r,transforms:s}=a,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[m,f]=u!=null?u:[c,p],g=[d,m,f,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),A=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(A.dataId).id,w=t.dataIdMap.get(r.dataId).id,S=t.dataIdMap.get(s.dataId).id,C=i==="nearest"?1:2,N;switch(o){case"constant":N=1;break;case"reflect":N=2;break;case"wrap":N=3;break;case"nearest":N=4;break;default:N=1;break}return Lk(w,S,s.shape[0]>1,d,m,f,h,p,c,y,r.shape.length-1,x,g.length-1,C,N,l,b),A}var Ple={kernelName:il,backendName:"wasm",setupFunc:$le,kernelFunc:Dle};function _le(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=F3(n.readSync(s.dataId),r,s.shape,s.dtype);return[n.makeOutput(o,s.dtype,void 0,i),n.makeOutput([l.length],"int32",void 0,l)]}var Ole={kernelName:Pp,backendName:"wasm",kernelFunc:_le};function zle(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h({dataId:h,dtype:m,shape:l}))}var Lle={kernelName:ju,backendName:"wasm",kernelFunc:zle};function Wle(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var Ble={kernelName:qu,backendName:"wasm",kernelFunc:Wle},Vle=[kae,Iae,Sae,Tae,Nae,Mae,Lae,Vae,Uae,Gae,Hae,jae,qae,Xae,Kae,Jae,one,tne,rne,pne,yne,bne,wne,Ine,Sne,Tne,Rne,Ene,$ne,_ne,Lne,Vne,Hne,jne,qne,Yne,Qne,are,sre,lre,pre,mre,yre,bre,kre,Ire,Cre,Rre,Ere,Mre,Fre,$re,Dre,Ore,zre,Wre,Ure,jre,Kre,Jre,tse,nse,sse,Fae,ise,ose,lse,pse,hse,fse,xse,bse,Ase,wse,kse,Sse,Cse,Ese,$se,_se,zse,Bse,Gse,qse,Yse,Qse,aie,sie,oie,die,fie,gie,xie,Aie,wie,Sie,Nie,Eie,$ie,Pie,Oie,mk,Bie,Gie,qie,Kie,Zie,Jie,Qie,eoe,lne,noe,ioe,uoe,coe,foe,xoe,Aoe,boe,koe,Toe,Roe,Eoe,$oe,Doe,Poe,_oe,fne,cie,Ooe,Loe,Voe,Hoe,qoe,Koe,Joe,ele,tle,ale,rle,ole,dle,cle,mle,gle,xle,vle,wle,kle,Tle,Rle,Fle,Ple,_ae,Ole,Lle,Ble];for(let e of Vle)bn(e);var Z1=B();Z1.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return 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]))}catch(e){return!1}});Z1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Z1.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 iA=uu(GC()),Ule=uu(HC()),oA=uu(jC()),lA=iA.default||iA,Gle=oA.default||oA,Wk=class extends du{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Bk),J1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new hp(this,St())}write(e,t,a){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,a,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,a,n,r){let s=this.dataIdNextNumber++;if(n==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:a,dtype:n,memoryOffset:null,refCount:r});return}let i=v.sizeFromShape(a),o=i*v.bytesPerElement(n),l=this.wasm._malloc(o)>>>0;this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:a,dtype:n,refCount:r}),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,t,a){let{memoryOffset:n,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(a==null||a>=i.length)?i:i.slice(t,a);t=t||0,a=a||v.sizeFromShape(s);let o=v.bytesPerElement(r),l=this.wasm.HEAPU8.slice(n+t*o,n+a*o);return qle(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let a=this.dataIdMap.get(e);if(a.refCount--,!t&&a.refCount>0)return!1;this.wasm._free(a.memoryOffset),this.wasm.tfjs.disposeData(a.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(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,a,n){let r;if(a==null)r=this.write(n!=null?n:null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:a,shape:e,dtype:t,refCount:1});let i=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,i,a)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:a}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(a),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,r,s);case"int32":return new Int32Array(n,r,s);case"bool":return new Uint8Array(n,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function Hle(e){return(t,a)=>(v.fetch(e,{credentials:"same-origin"}).then(n=>{n.ok||t.env.a(`failed to load wasm binary file at '${e}'`),n.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{a(s.instance,s.module)})})}),{})}function uA(e,t,a){if(Fh!=null)return Fh;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),Vd!=null&&Vd[n]!=null?Vd[n]:a+n}async function jle(){let[e,t]=await Promise.all([B().getAsync("WASM_HAS_SIMD_SUPPORT"),B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=Ule.wasmWorkerContents.replace(/\n/g,"\\n"),d=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(d)}return o.endsWith(".wasm")?uA(e,t,zd!=null?zd:l):l+o},J3&&(r.instantiateWasm=Hle(uA(e,t,zd!=null?zd:"")));let s=!1;r.onAbort=()=>{s||Ud||(Ud=!0,n({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"}))};let i;t&&e&&Fh==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+lA.toString()],{type:"text/javascript"}),i=lA(r)):i=Gle(r),i.then(o=>{s=!0,Ud=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},a({wasm:o})}).catch(n)})}function qle(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 Xle=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Fh=null,zd=null,Vd={},Ud=!1,J3=!1;function Kle(e,t=!1){if(fg("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Ud)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Fh=e,J3=t}function f0(e,t=!1){if(Ud)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")zd=e;else{Vd=e;let a=Xle.filter(n=>Vd[n]==null);if(a.length>0)throw new Error(`There were no entries found for the following binaries: ${a.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.`)}J3=t}var Bk=-1,J1=-1;function Yle(e){Bk=e}function Zle(){if(J1===-1)throw new Error("WASM backend not initialized.");return J1}var Jle="4.17.0",Qle=2;ll("wasm",async()=>{let{wasm:e}=await jle();return new Wk(e)},Qle);var vn=B();vn.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);vn.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);vn.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);vn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);vn.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);vn.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);vn.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);vn.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);vn.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);vn.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);vn.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);vn.registerFlag("WEBGPU_PRINT_SHADER",()=>"");vn.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var eue=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}},tue=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,a=!1,n=!0){let r,s=dA(e,t);return n?(this.freeBuffers.has(s)||this.freeBuffers.set(s,[]),this.freeBuffers.get(s).length>0?(r=this.freeBuffers.get(s).pop(),this.numFreeBuffers--):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e)):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e),this.usedBuffers.has(s)||this.usedBuffers.set(s,[]),this.usedBuffers.get(s).push(r),this.numUsedBuffers++,this.numBytesUsed+=e,r}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let a=e.size,n=e.usage,r=dA(a,n),s=this.usedBuffers.get(r),i=s.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");s[i]=s[s.length-1],s.pop(),this.numUsedBuffers--,this.numBytesUsed-=a,t?(this.freeBuffers.get(r).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=a)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function dA(e,t){return`${e}_${t}`}var aue=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,a,n){let r=cA(a),s=e*t*r,i=pA(e,t,a,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=s,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let l=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(l),l}this.numBytesAllocated+=s;let o=this.device.createTexture({size:[e,t],format:a,usage:n});return this.usedTextures.get(i).push(o),o}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,a=e.height,n=e.format,r=e.usage,s=pA(t,a,n,r);this.freeTextures.has(s)||this.freeTextures.set(s,[]),this.freeTextures.get(s).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(s),o=i.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(o,1);let l=cA(n),u=t*a*l;this.numBytesUsed-=u}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function pA(e,t,a,n){return`${e}_${t}_${a}_${n}`}function cA(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function nue(e,t){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let a=e.length,n="xyzwuv",r=e.map(i=>`${t}.${n[i]}`),s=new Array(a-1);s[a-2]=r[a-1];for(let i=a-3;i>=0;--i)s[i]=`(${s[i+1]} * ${r[i+1]})`;return s}var Bs=(e,t,a)=>a==="int32"?`atomicAdd(${e}, bitcast(${t}));`:` + ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(n.dataId).id,o=t.dataIdMap.get(r.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=n.shape[0],p=v.sizeFromShape(s.shape),c=t.makeOutput([u,p],n.dtype),d=t.dataIdMap.get(c.dataId).id,h=t.makeOutput([p],s.dtype),m=t.dataIdMap.get(h.dataId).id,f=t.makeOutput([3],"int32"),g=t.dataIdMap.get(f.dataId).id;pk(i,o,l,u,d,m,g);let y=t.readSync(f.dataId),x;switch(y[0]){case 0:{x=C.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(y[1],y[2]);break}case 1:{x=C.getSparseReshapeNegativeOutputDimErrorMessage(y[1],y[2]);break}case 2:x=C.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let A=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));x=C.getSparseReshapeInputOutputMultipleErrorMessage(A,b);break}case 4:{let A=Array.from(t.readSync(r.dataId)),b=Array.from(t.readSync(h.dataId));x=C.getSparseReshapeInputOutputMismatchErrorMessage(A,b);break}default:x=""}if(t.disposeData(f.dataId),x)throw t.disposeData(c.dataId),t.disposeData(h.dataId),new Error(x);return[c,h]}var noe={kernelName:Du,backendName:"wasm",setupFunc:toe,kernelFunc:aoe},ck;function hk(e){ck=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function mk(e,t){let{backend:a,inputs:n}=e,{data:r,indices:s,segmentIds:i}=n,o=s.shape[0],l=a.readSync(i.dataId,o-1,o)[0],u=o>0?l+1:0;if(u<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=r.shape.slice();p[0]=u;let c=a.dataIdMap.get(r.dataId).id,d=a.dataIdMap.get(s.dataId).id,h=a.dataIdMap.get(i.dataId).id,m=a.makeOutput(p,r.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([4],"int32"),y=a.dataIdMap.get(g.dataId).id;ck(c,nt[r.dtype],r.shape[0],d,h,f,y,t,0);let x=a.readSync(g.dataId),A;switch(x[0]){case 0:{A=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{A=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:A=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:A=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x[1],x[2],x[3]);break;default:A=""}if(a.disposeData(g.dataId),A)throw a.disposeData(m.dataId),new Error(A);return m}function roe(e){return mk(e,!0)}var soe={kernelName:Ou,backendName:"wasm",setupFunc:hk,kernelFunc:roe};function ioe(e){return mk(e,!1)}var ooe={kernelName:zu,backendName:"wasm",setupFunc:hk,kernelFunc:ioe},fk;function loe(e){fk=e.wasm.cwrap(jo,null,["number","number","number","number","number","number","number","number","array","number","number"])}function uoe(e){let{backend:t,inputs:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=a,{outputShape:o}=n,l=t.makeOutput(o,i.dtype);if(v.sizeFromShape(o)===0)return l;let{sliceRank:u,numUpdates:p,sliceSize:c,strides:d,outputSize:h}=C.calculateShapes(s,r,o),m=t.dataIdMap.get(r.dataId).id,f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(i.dataId).id,y=new Uint8Array(new Int32Array(d).buffer),x=t.dataIdMap.get(l.dataId).id;return fk(m,f,s.shape.length,g,nt[i.dtype],u,p,c,y,h,x),l}var doe={kernelName:jo,backendName:"wasm",setupFunc:loe,kernelFunc:uoe};function poe(e){let{inputs:t,attrs:a,backend:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=C.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(c=>{let d=[...p];d[o]=c;let h=si({inputs:{x:r},attrs:{begin:u,size:d},backend:n});return u[o]+=c,h})}var coe={kernelName:Fu,backendName:"wasm",kernelFunc:poe},hoe=Qe(Uo),moe=Qe(Sp),foe=!0,goe=Gt(qo,foe),gk;function yoe(e){gk=e.wasm.cwrap(ds,null,["number","number","number","number"])}function xoe(e){let{backend:t,inputs:a,attrs:n}=e,{alpha:r}=n,{x:s}=a,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return gk(i,r,nt[s.dtype],l),o}var Aoe={kernelName:ds,backendName:"wasm",setupFunc:yoe,kernelFunc:xoe},yk;function boe(e){yk=e.wasm.cwrap(Xo,null,["number","array","number","array","array","array","array","array","number","number"])}function voe(e){let{backend:t,inputs:a,attrs:n}=e,{x:r}=a,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=La({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=si({inputs:{x:r},backend:t,attrs:{begin:x,size:I}});w=La({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}else{let I=t.makeOutput(h,"float32"),T=t.dataIdMap.get(r.dataId).id,N=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),M=new Uint8Array(new Int32Array(x).buffer),$=new Uint8Array(new Int32Array(A).buffer),E=new Uint8Array(new Int32Array(b).buffer),S=new Uint8Array(new Int32Array(h).buffer),_=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),O=t.dataIdMap.get(I.dataId).id;yk(T,N,r.shape.length,M,$,E,S,_,h.length,O),w=La({inputs:{x:I},backend:t,attrs:{shape:m}}),t.disposeData(I.dataId)}return w}var woe={kernelName:Xo,backendName:"wasm",setupFunc:boe,kernelFunc:voe};function koe(e){let{backend:t,inputs:a,attrs:n}=e,{data:r,dataSplits:s}=a,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:p,preserveShortSequences:c}=n,d=t.readSync(r.dataId),h=t.readSync(s.dataId),[m,f]=A3(d,h,i,o,l,u,p,c),g=t.makeOutput([m.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=m;let x=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(x).set(f),[g,x]}var Ioe={kernelName:Lu,backendName:"wasm",kernelFunc:koe};function Soe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r,delimiter:s}=a,{skipEmpty:i}=n,o=t.readSync(r.dataId),l=t.readSync(s.dataId),[u,p,c]=b3(o,l[0],i),d=p.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([d],"string"),f=t.dataIdMap.get(m.dataId);f.stringBytes=p;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(c),[h,m,g]}var Coe={kernelName:Tp,backendName:"wasm",kernelFunc:Soe};function Toe(e){let{backend:t,inputs:a,attrs:n}=e,{input:r}=a,{numBuckets:s}=n,i=t.readSync(r.dataId),o=v3(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Noe={kernelName:Np,backendName:"wasm",kernelFunc:Toe},Roe=!0,Eoe=Gt(Ko,Roe),xk;function Moe(e){xk=e.wasm.cwrap(Go,null,["number","number","number","number"])}function $oe(e){let{backend:t,inputs:a,attrs:n}=e,{axis:r,keepDims:s}=n,{x:i}=a,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:c,originalAxes:d,inputWasTransposed:h}=fs(i,r,t),m=c;if(h){let A=t.dataIdMap.get(p.dataId).id;A!==o&&(u=p,l=A,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),x=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let A=t.dataIdMap.get(x.dataId).id;xk(l,y,nt[x.dtype],A)}if(h&&t.disposeData(p.dataId),s){let A=C.expandShapeToKeepDim(x.shape,d);x.shape=A}return x}var Poe={kernelName:Go,backendName:"wasm",setupFunc:Moe,kernelFunc:$oe},_oe=Qe(Yo),Foe=Qe(Zo),Ak;function Doe(e){Ak=e.wasm.cwrap(Fo,null,["number","number","number","number","number","number","array","number","number","number"])}function Ooe(e){let{backend:t,inputs:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=a,{}=n,o=t.makeOutput(r.shape,r.dtype);if(v.sizeFromShape(r.shape)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=jh.calculateShapes(i,s,r.shape),h=t.dataIdMap.get(s.dataId).id,m=t.dataIdMap.get(i.dataId).id,f=t.dataIdMap.get(r.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),y=t.dataIdMap.get(o.dataId).id;return Ak(h,m,nt[i.dtype],l,u,p,g,d,y,f),o}var zoe={kernelName:Fo,backendName:"wasm",setupFunc:Doe,kernelFunc:Ooe},bk;function Loe(e){bk=e.wasm.cwrap(us,null,["number","array","number","array","number","number"])}function Woe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,s=a.dataIdMap.get(r.dataId).id,{reps:i}=n,o=new Array(r.shape.length);for(let d=0;d{let{x:n}=e,{k:r,sorted:s}=a,i=t.dataIdMap.get(n.dataId).id,o=new Uint8Array(new Int32Array(n.shape).buffer),l=n.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,n.dtype),p=t.dataIdMap.get(u.dataId).id,c=t.makeOutput(l,"int32"),d=t.dataIdMap.get(c.dataId).id;return vk(i,o,n.shape.length,nt[n.dtype],r,s,p,d),[u,c]},Goe={kernelName:Jo,backendName:"wasm",setupFunc:Voe,kernelFunc:Uoe},wk;function Hoe(e){wk=e.wasm.cwrap(Qo,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function joe(e){let{backend:t,inputs:a,attrs:n}=e,{image:r,transforms:s}=a,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),A=t.makeOutput(g,r.dtype),b=t.dataIdMap.get(A.dataId).id,w=t.dataIdMap.get(r.dataId).id,I=t.dataIdMap.get(s.dataId).id,T=i==="nearest"?1:2,N;switch(o){case"constant":N=1;break;case"reflect":N=2;break;case"wrap":N=3;break;case"nearest":N=4;break;default:N=1;break}return wk(w,I,s.shape[0]>1,p,m,f,h,d,c,y,r.shape.length-1,x,g.length-1,T,N,l,b),A}var qoe={kernelName:Qo,backendName:"wasm",setupFunc:Hoe,kernelFunc:joe};function Xoe(e){let{inputs:t,attrs:a,backend:n}=e,{axis:r}=a,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=k3(n.readSync(s.dataId),r,s.shape,s.dtype);return[n.makeOutput(o,s.dtype,void 0,i),n.makeOutput([l.length],"int32",void 0,l)]}var Koe={kernelName:Rp,backendName:"wasm",kernelFunc:Xoe};function Yoe(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h({dataId:h,dtype:m,shape:l}))}var Zoe={kernelName:Wu,backendName:"wasm",kernelFunc:Yoe};function Joe(e){let{inputs:{x:t},backend:a}=e,n=a.makeOutput(t.shape,t.dtype);return a.typedArrayFromHeap(n).fill(0),n}var Qoe={kernelName:Bu,backendName:"wasm",kernelFunc:Joe},ele=[Fte,Dte,Ote,zte,Wte,Ute,Zte,eae,tae,aae,nae,rae,sae,iae,oae,dae,Aae,hae,gae,kae,Rae,$ae,_ae,Dae,Oae,zae,Bae,Vae,Hae,Xae,Zae,ene,nne,rne,sne,lne,pne,mne,yne,bne,kne,Cne,Rne,$ne,Fne,Dne,Lne,Bne,Vne,Une,Gne,Hne,jne,Kne,Yne,Jne,tre,rre,ore,dre,hre,fre,yre,Gte,xre,Are,bre,kre,Sre,Tre,Ere,$re,Mre,_re,Fre,Ore,Lre,Vre,Hre,Xre,Yre,Qre,ase,sse,lse,pse,mse,yse,Ase,wse,Tse,Nse,Ese,Mse,_se,Ose,Wse,Vse,Hse,qse,Kse,Zw,Qse,aie,sie,oie,uie,die,pie,cie,bae,fie,xie,vie,Iie,Tie,Eie,Mie,$ie,Fie,zie,Bie,Vie,Hie,jie,qie,Xie,Tae,Ise,Kie,Zie,eoe,noe,soe,ooe,doe,coe,hoe,moe,goe,Aoe,woe,Ioe,Coe,Noe,Eoe,Poe,_oe,Foe,zoe,Boe,Goe,qoe,Xte,Koe,Zoe,Qoe];for(let e of ele)xn(e);var H1=B();H1.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return 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]))}catch(e){return!1}});H1.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(H1.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 X5=nu(aT()),tle=nu(nT()),K5=nu(rT()),Y5=X5.default||X5,ale=K5.default||K5,kk=class extends ru{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Ik),j1=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new ip(this,It())}write(e,t,a){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,a,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,a,n,r){let s=this.dataIdNextNumber++;if(n==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:a,dtype:n,memoryOffset:null,refCount:r});return}let i=v.sizeFromShape(a),o=i*v.bytesPerElement(n),l=this.wasm._malloc(o)>>>0;this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:a,dtype:n,refCount:r}),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,t,a){let{memoryOffset:n,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(a==null||a>=i.length)?i:i.slice(t,a);t=t||0,a=a||v.sizeFromShape(s);let o=v.bytesPerElement(r),l=this.wasm.HEAPU8.slice(n+t*o,n+a*o);return sle(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let a=this.dataIdMap.get(e);if(a.refCount--,!t&&a.refCount>0)return!1;this.wasm._free(a.memoryOffset),this.wasm.tfjs.disposeData(a.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(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,a,n){let r;if(a==null)r=this.write(n!=null?n:null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:a,shape:e,dtype:t,refCount:1});let i=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,i,a)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:a}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(a),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,r,s);case"int32":return new Int32Array(n,r,s);case"bool":return new Uint8Array(n,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function nle(e){return(t,a)=>(v.fetch(e,{credentials:"same-origin"}).then(n=>{n.ok||t.env.a(`failed to load wasm binary file at '${e}'`),n.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{a(s.instance,s.module)})})}),{})}function Z5(e,t,a){if(Ch!=null)return Ch;let n="tfjs-backend-wasm.wasm";return e&&t?n="tfjs-backend-wasm-threaded-simd.wasm":e&&(n="tfjs-backend-wasm-simd.wasm"),Fd!=null&&Fd[n]!=null?Fd[n]:a+n}async function rle(){let[e,t]=await Promise.all([B().getAsync("WASM_HAS_SIMD_SUPPORT"),B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((a,n)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=tle.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?Z5(e,t,$d!=null?$d:l):l+o},U3&&(r.instantiateWasm=nle(Z5(e,t,$d!=null?$d:"")));let s=!1;r.onAbort=()=>{s||Dd||(Dd=!0,n({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"}))};let i;t&&e&&Ch==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Y5.toString()],{type:"text/javascript"}),i=Y5(r)):i=ale(r),i.then(o=>{s=!0,Dd=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},a({wasm:o})}).catch(n)})}function sle(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 ile=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Ch=null,$d=null,Fd={},Dd=!1,U3=!1;function ole(e,t=!1){if(og("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Dd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Ch=e,U3=t}function u0(e,t=!1){if(Dd)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")$d=e;else{Fd=e;let a=ile.filter(n=>Fd[n]==null);if(a.length>0)throw new Error(`There were no entries found for the following binaries: ${a.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.`)}U3=t}var Ik=-1,j1=-1;function lle(e){Ik=e}function ule(){if(j1===-1)throw new Error("WASM backend not initialized.");return j1}var dle="4.17.0",ple=2;tl("wasm",async()=>{let{wasm:e}=await rle();return new kk(e)},ple);var An=B();An.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);An.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);An.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);An.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);An.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);An.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);An.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);An.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);An.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);An.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);An.registerFlag("WEBGPU_PRINT_SHADER",()=>"");An.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var cle=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}},hle=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,a=!1,n=!0){let r,s=J5(e,t);return n?(this.freeBuffers.has(s)||this.freeBuffers.set(s,[]),this.freeBuffers.get(s).length>0?(r=this.freeBuffers.get(s).pop(),this.numFreeBuffers--):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e)):(r=this.device.createBuffer({size:e,usage:t,mappedAtCreation:a}),this.numBytesAllocated+=e),this.usedBuffers.has(s)||this.usedBuffers.set(s,[]),this.usedBuffers.get(s).push(r),this.numUsedBuffers++,this.numBytesUsed+=e,r}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let a=e.size,n=e.usage,r=J5(a,n),s=this.usedBuffers.get(r),i=s.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");s[i]=s[s.length-1],s.pop(),this.numUsedBuffers--,this.numBytesUsed-=a,t?(this.freeBuffers.get(r).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=a)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function J5(e,t){return`${e}_${t}`}var mle=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,a,n){let r=eA(a),s=e*t*r,i=Q5(e,t,a,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=s,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let l=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(l),l}this.numBytesAllocated+=s;let o=this.device.createTexture({size:[e,t],format:a,usage:n});return this.usedTextures.get(i).push(o),o}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,a=e.height,n=e.format,r=e.usage,s=Q5(t,a,n,r);this.freeTextures.has(s)||this.freeTextures.set(s,[]),this.freeTextures.get(s).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(s),o=i.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(o,1);let l=eA(n),u=t*a*l;this.numBytesUsed-=u}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(a=>{a.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Q5(e,t,a,n){return`${e}_${t}_${a}_${n}`}function eA(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function fle(e,t){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let a=e.length,n="xyzwuv",r=e.map(i=>`${t}.${n[i]}`),s=new Array(a-1);s[a-2]=r[a-1];for(let i=a-3;i>=0;--i)s[i]=`(${s[i+1]} * ${r[i+1]})`;return s}var ys=(e,t,a)=>a==="int32"?`atomicAdd(${e}, bitcast(${t}));`:` { var oldValue = 0; loop { @@ -5006,12 +5006,12 @@ return a / b;`,fQ=` } oldValue = res.old_value; } - }`,lu;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(lu||(lu={}));var rue=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=iue(a,s,t),o=e.createShaderModule({code:i,label:t.constructor.name}),l=B().get("WEBGPU_PRINT_SHADER");if(l!==""){l=l.toLowerCase();let u=l.split(",");(l==="all"||u.some(d=>t.shaderKey.toLowerCase().includes(d)))&&(console.group(t.shaderKey),console.debug(i),console.groupEnd())}return r?e.createComputePipelineAsync({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):e.createComputePipeline({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Xe=(e,t="f32")=>{switch(e){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${e}-component ${t} is not supported.`)}};function Dt(e){if(e<=1)return"i32";if(e===2)return"vec2";if(e===3)return"vec3";if(e===4)return"vec4";if(e===5)return"vec5";if(e===6)return"vec6";throw Error(`GPU for rank ${e} is not yet supported`)}function Nr(e){if(e===0)return"x";if(e===1)return"y";if(e===2)return"z";if(e===3)return"w";if(e===4)return"u";if(e===5)return"v";throw Error(`Index ${e} is not yet supported`)}function ue(...e){let t;switch(e.length){case 0:t=` + }`,au;(function(e){e[e.FROM_PIXELS=0]="FROM_PIXELS",e[e.DRAW=1]="DRAW"})(au||(au={}));var gle=(e,t,a,n,r)=>{let s={dtype:n.dtype,shape:n.shape},i=xle(a,s,t),o=e.createShaderModule({code:i,label:t.constructor.name}),l=B().get("WEBGPU_PRINT_SHADER");if(l!==""){l=l.toLowerCase();let u=l.split(",");(l==="all"||u.some(p=>t.shaderKey.toLowerCase().includes(p)))&&(console.group(t.shaderKey),console.debug(i),console.groupEnd())}return r?e.createComputePipelineAsync({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"}):e.createComputePipeline({compute:{module:o,entryPoint:"_start"},label:t.constructor.name,layout:"auto"})},Xe=(e,t="f32")=>{switch(e){case 1:return`${t}`;case 2:return`vec2<${t}>`;case 3:return`vec3<${t}>`;case 4:return`vec4<${t}>`;default:throw new Error(`${e}-component ${t} is not supported.`)}};function Pt(e){if(e<=1)return"i32";if(e===2)return"vec2";if(e===3)return"vec3";if(e===4)return"vec4";if(e===5)return"vec5";if(e===6)return"vec6";throw Error(`GPU for rank ${e} is not yet supported`)}function Ir(e){if(e===0)return"x";if(e===1)return"y";if(e===2)return"z";if(e===3)return"w";if(e===4)return"u";if(e===5)return"v";throw Error(`Index ${e} is not yet supported`)}function ue(...e){let t;switch(e.length){case 0:t=` fn main() `;break;case 1:t=` fn main(${e[0]} : i32) - `;break;default:throw Error("Unreachable")}return t}function hA(e,t){let a;return a=` - ${sue(t)} + `;break;default:throw Error("Unreachable")}return t}function tA(e,t){let a;return a=` + ${yle(t)} fn _start(@builtin(local_invocation_id) LocalId : vec3, @builtin(global_invocation_id) GlobalId : vec3, @builtin(local_invocation_index) LocalIndex: u32, @@ -5024,9 +5024,9 @@ return a / b;`,fQ=` workgroupId = WorkgroupId; ${e?"main(getGlobalIndex());":"main();"}; } - `,a}function sue(e){return` + `,a}function yle(e){return` @compute @workgroup_size(${e.workgroupSize[0]}, ${e.workgroupSize[1]}, ${e.workgroupSize[2]}) -`}function iue(e,t,a){let n=[],r=a.workgroupSize[0]*a.workgroupSize[1]*a.workgroupSize[2];if(a.outputComponent=a.outputComponent?a.outputComponent:1,n.push(` +`}function xle(e,t,a){let n=[],r=a.workgroupSize[0]*a.workgroupSize[1]*a.workgroupSize[2];if(a.outputComponent=a.outputComponent?a.outputComponent:1,n.push(` var localId: vec3; var localIndex: u32; @@ -5036,12 +5036,12 @@ return a / b;`,fQ=` // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${Vk(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${Sk(a)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${r}u + localIndex); `} } - `),a.pixelsOpType!=null){let h=a.pixelsOpType===lu.FROM_PIXELS?`@group(0) @binding(0) var result: array<${gi(t.dtype,a.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${gi(e[0].dtype,a.outputComponent)}>;`,m=t.shape.length===3?"vec2":"i32";n.push(` + `),a.pixelsOpType!=null){let h=a.pixelsOpType===au.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Hs(t.dtype,a.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Hs(e[0].dtype,a.outputComponent)}>;`,m=t.shape.length===3?"vec2":"i32";n.push(` struct Uniform { outShapeStrides : ${m}, size : i32, @@ -5051,21 +5051,21 @@ return a / b;`,fQ=` ${h} @group(0) @binding(2) var uniforms: Uniform; - `);let f=fA(a);return[mA,n.join(` -`),mh(t.shape),a.getUserCode(),hA(f,a)].join(` -`)}let s,i,o="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,m)=>{let f=Dt(e[m].shape.length);o+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${f}, `,s=e[m].shape.length-1,i=Dt(s),o+=`${h.charAt(0).toLowerCase()+h.slice(1)}ShapeStrides: ${i}, `});let l=Dt(t.shape.length);o+=`outShape : ${l}, `,s=t.shape.length-1,i=Dt(s),o+=` - outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=fue(o),n.push(o),a.atomic?n.push(` + `);let f=nA(a);return[aA,n.join(` +`),lh(t.shape),a.getUserCode(),tA(f,a)].join(` +`)}let s,i,o="struct Uniforms { NAN : f32, INFINITY : f32, ";a.variableNames.forEach((h,m)=>{let f=Pt(e[m].shape.length);o+=`${h.charAt(0).toLowerCase()+h.slice(1)}Shape : ${f}, `,s=e[m].shape.length-1,i=Pt(s),o+=`${h.charAt(0).toLowerCase()+h.slice(1)}ShapeStrides: ${i}, `});let l=Pt(t.shape.length);o+=`outShape : ${l}, `,s=t.shape.length-1,i=Pt(s),o+=` + outShapeStrides: ${i}, `,a.size&&(o+="size : i32, "),a.uniforms&&(o+=a.uniforms),o+="};",o=Tle(o),n.push(o),a.atomic?n.push(` @group(0) @binding(0) var result: array>; `):n.push(` - @group(0) @binding(0) var result: array<${gi(t.dtype,a.outputComponent)}>; + @group(0) @binding(0) var result: array<${Hs(t.dtype,a.outputComponent)}>; `),a.variableNames.forEach((h,m)=>{n.push(` - @group(0) @binding(${1+m}) var ${h}: array<${a.variableComponents?gi(e[m].dtype,a.variableComponents[m]):gi(e[m].dtype,a.outputComponent)}>; + @group(0) @binding(${1+m}) var ${h}: array<${a.variableComponents?Hs(e[m].dtype,a.variableComponents[m]):Hs(e[m].dtype,a.outputComponent)}>; `)}),o!==""&&n.push(` @group(0) @binding(${1+a.variableNames.length}) var uniforms: Uniforms; - `);let u=cue(t.shape,a.dispatchLayout),d=[mA,n.join(` -`)+lue,mh(t.shape),u,hue(t.shape.length)];a.atomic||d.push(mue(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{d.push(`${mh(e[m].shape,h)}`)});let c=e.map((h,m)=>pue(h,t.shape,a.variableComponents?a.variableComponents[m]:a.outputComponent,a.dispatchLayout.x.length===t.shape.length)).join(` -`);d.push(c),d.push(a.getUserCode());let p=fA(a);return d.push(hA(p,a)),d.join(` -`)}function oue(e,t,a){let n=e.shaderKey;if(e.pixelsOpType!=null)return n;let r=[],s=[];t.forEach(d=>{r.push(d.shape),s.push(d.dtype)}),r.push(a.shape),s.push(a.dtype);let i=t.map(d=>I.getBroadcastDims(d.shape,a.shape)),o=t.map(d=>v.arraysEqual(d.shape,a.shape)).join("_"),l=i.map(d=>d.join("_")).join(";"),u=Vk(e)?"flatDispatch":"";return n+="_"+(e.workgroupSize?e.workgroupSize.join(","):"")+r.map(d=>d.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,n}var mA=` + `);let u=Ile(t.shape,a.dispatchLayout),p=[aA,n.join(` +`)+ble,lh(t.shape),u,Sle(t.shape.length)];a.atomic||p.push(Cle(t.shape,t.dtype,a.outputComponent)),a.variableNames.forEach((h,m)=>{p.push(`${lh(e[m].shape,h)}`)});let c=e.map((h,m)=>kle(h,t.shape,a.variableComponents?a.variableComponents[m]:a.outputComponent,a.dispatchLayout.x.length===t.shape.length)).join(` +`);p.push(c),p.push(a.getUserCode());let d=nA(a);return p.push(tA(d,a)),p.join(` +`)}function Ale(e,t,a){let n=e.shaderKey;if(e.pixelsOpType!=null)return n;let r=[],s=[];t.forEach(p=>{r.push(p.shape),s.push(p.dtype)}),r.push(a.shape),s.push(a.dtype);let i=t.map(p=>C.getBroadcastDims(p.shape,a.shape)),o=t.map(p=>v.arraysEqual(p.shape,a.shape)).join("_"),l=i.map(p=>p.join("_")).join(";"),u=Sk(e)?"flatDispatch":"";return n+="_"+(e.workgroupSize?e.workgroupSize.join(","):"")+r.map(p=>p.length).join(",")+s.join(",")+e.variableNames.join(",")+l+o+u,n}var aA=` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -5115,19 +5115,19 @@ return a / b;`,fQ=` let floatToUint: vec4 = bitcast>(val); return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u); } -`,lue=` +`,ble=` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } -`;function mh(e,t=""){let a=e.length,n=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",r=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(a<=1)return`fn ${n}(index : i32) -> i32 { return index; }`;let s=v.computeStrides(e),i=Dt(a),o=[];for(let u=0;u vec2 { +`;function lh(e,t=""){let a=e.length,n=t!==""?`get${t.charAt(0).toUpperCase()+t.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",r=t!==""?`${t.charAt(0).toLowerCase()+t.slice(1)}ShapeStrides`:"outShapeStrides";if(a<=1)return`fn ${n}(index : i32) -> i32 { return index; }`;let s=v.computeStrides(e),i=Pt(a),o=[];for(let u=0;u vec2 { let d0 = index / uniforms.${r}; let d1 = index - d0 * uniforms.${r}; return vec2(d0, d1); - }`;let l;return l="var index2 = index;"+s.map((u,d)=>{let c=`let ${o[d]} = index2 / uniforms.${r}.${Nr(d)}`,p=d===s.length-1?`let ${o[d+1]} = index2 - ${o[d]} * uniforms.${r}.${Nr(d)}`:`index2 = index2 - ${o[d]} * uniforms.${r}.${Nr(d)}`;return`${c}; ${p};`}).join(""),` + }`;let l;return l="var index2 = index;"+s.map((u,p)=>{let c=`let ${o[p]} = index2 / uniforms.${r}.${Ir(p)}`,d=p===s.length-1?`let ${o[p+1]} = index2 - ${o[p]} * uniforms.${r}.${Ir(p)}`:`index2 = index2 - ${o[p]} * uniforms.${r}.${Ir(p)}`;return`${c}; ${d};`}).join(""),` fn ${n}(index : i32) -> ${i} { ${l} return ${i}(${o.join(",")}); } - `}function uue(e,t){let a=e.name,n=e.shape.length,r=Dt(n),s="get"+a.charAt(0).toUpperCase()+a.slice(1),i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=i.map(d=>`${d} : i32`).join(", ");if(n<1)return` + `}function vle(e,t){let a=e.name,n=e.shape.length,r=Pt(n),s="get"+a.charAt(0).toUpperCase()+a.slice(1),i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=i.map(p=>`${p} : i32`).join(", ");if(n<1)return` fn ${s}() -> ${Xe(t)} { return ${Xe(t)}(${a}[0]); } @@ -5136,7 +5136,7 @@ return a / b;`,fQ=` return ${Xe(t)}(${a}[getIndexFromCoords${u}(${r}(${i.join(",")}), ${l})${t===1?"":` / ${t}`}]); } - `}function due(e,t,a,n){let r=e.name,s=r.charAt(0).toUpperCase()+r.slice(1),i="get"+s+"ByOutput",o=e.shape.length,l=t.length,u=Dt(l);if(v.arraysEqual(e.shape,t)&&n)return` + `}function wle(e,t,a,n){let r=e.name,s=r.charAt(0).toUpperCase()+r.slice(1),i="get"+s+"ByOutput",o=e.shape.length,l=t.length,u=Pt(l);if(v.arraysEqual(e.shape,t)&&n)return` fn ${i}Index(globalIndex : i32) -> ${Xe(a)} { return ${Xe(a)}(${r}[globalIndex]); } @@ -5144,7 +5144,7 @@ return a / b;`,fQ=` fn ${i}Coords(coords : ${u}) -> ${Xe(a)} { return ${Xe(a)}(${r}[${l>1?"getOutputIndexFromCoords(coords)":"coords"}${a===1?"":` / ${a}`}]); } - `;let d=I.getBroadcastDims(e.shape,t),c=l-o,p="";if(o===0)return` + `;let p=C.getBroadcastDims(e.shape,t),c=l-o,d="";if(o===0)return` fn ${i}Index(globalIndex : i32) -> ${Xe(a)}{ return get${s}(); } @@ -5152,26 +5152,26 @@ return a / b;`,fQ=` fn ${i}Coords(coords : ${u}) -> ${Xe(a)}{ return get${s}(); } - `;l<2&&d.length>=1?p="coords = 0;":p=d.map(g=>`coords.${Nr(g+c)} = 0;`).join(` -`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=Dt(o),y=e.shape.map((x,A)=>`coords.${Nr(A+c)}`).join(", ");h=`${g}(${y})`}else h="coords";let m=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,f=`${o}D`;return` + `;l<2&&p.length>=1?d="coords = 0;":d=p.map(g=>`coords.${Ir(g+c)} = 0;`).join(` +`);let h="";if(l<2&&o>0)h="coords";else if(l>1){let g=Pt(o),y=e.shape.map((x,A)=>`coords.${Ir(A+c)}`).join(", ");h=`${g}(${y})`}else h="coords";let m=`uniforms.${r.charAt(0).toLowerCase()+r.slice(1)}Shape`,f=`${o}D`;return` fn ${i}Index(globalIndex : i32) -> ${Xe(a)} { var coords = getCoordsFromIndex(globalIndex); - ${p} + ${d} return ${Xe(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); } fn ${i}Coords(coordsIn : ${u}) -> ${Xe(a)} { var coords = coordsIn; - ${p} + ${d} return ${Xe(a)}(${r}[getIndexFromCoords${f}(${h}, ${m})${a===1?"":` / ${a}`}]); } -`}function pue(e,t,a,n){let r=uue(e,a);return e.shape.length<=t.length&&(r+=due(e,t,a,n)),r}function cue(e,t){let{x:a,y:n=[],z:r=[]}=t,s=e.length,i=a.length+n.length+r.length;if(i!==s)return"";if(a.length===s)return`fn getOutputCoords() -> ${Dt(s)}{ +`}function kle(e,t,a,n){let r=vle(e,a);return e.shape.length<=t.length&&(r+=wle(e,t,a,n)),r}function Ile(e,t){let{x:a,y:n=[],z:r=[]}=t,s=e.length,i=a.length+n.length+r.length;if(i!==s)return"";if(a.length===s)return`fn getOutputCoords() -> ${Pt(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let o="",l=[a,n,r];for(let p=0;p ${d} { + `;let o="",l=[a,n,r];for(let d=0;d ${p} { ${o} -`;return u.length===0?c+=`return ${d}(0); }`:c+=`return ${d}(${u.join(",")}); }`,c}function hue(e){let t="";switch(e){case 0:case 1:t+=` +`;return u.length===0?c+=`return ${p}(0); }`:c+=`return ${p}(${u.join(",")}); }`,c}function Sle(e){let t="";switch(e){case 0:case 1:t+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5205,14 +5205,14 @@ return a / b;`,fQ=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function Vk(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function gi(e,t=1){if(e==="float32")return Xe(t,"f32");if(e==="int32"||e==="bool")return Xe(t,"i32");throw new Error(`type ${e} is not supported.`)}function mue(e,t,a){let n=e.length,r=gi(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Xe(a)}) { + `;break;default:v.assert(!1,()=>`Unsupported ${e}D shape`);break}return t}function Sk(e){return e.dispatch[1]===1&&e.dispatch[2]===1}function Hs(e,t=1){if(e==="float32")return Xe(t,"f32");if(e==="int32"||e==="bool")return Xe(t,"i32");throw new Error(`type ${e} is not supported.`)}function Cle(e,t,a){let n=e.length,r=Hs(t,a),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Xe(a)}) { result[flatIndex] = ${r}(value); } fn setOutputAtIndexI32(flatIndex : i32, value : ${Xe(a,"i32")}) { result[flatIndex] = ${r}(value); } - `;if(n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=Dt(n);s+=` + `;if(n>=2){let i=["d0","d1","d2","d3","d4","d5"].slice(0,n),o=Pt(n);s+=` fn setOutputAtCoords(${i.map(l=>`${l} : i32`).join(", ")}, value : ${Xe(a)}) { let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndex(flatIndex${a===1?"":` / ${a}`}, value); @@ -5221,40 +5221,40 @@ return a / b;`,fQ=` let flatIndex = getOutputIndexFromCoords(${o}(${i.join(", ")})); setOutputAtIndexI32(flatIndex${a===1?"":` / ${a}`}, value); } - `}return s}function fue(e){let t=/(\w+)\s*:\s*vec(5|6)/g;e=e.replace(t,n=>"@align(16) "+n);let a=/vec(5|6)\s*,\s*(\w+)/g;return e=e.replace(a,(n,r,s)=>`vec${r}, @align(16) ${s}`),e}function fA(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var Uk={};Ke(Uk,{GPUBytesPerElement:()=>Q1,MatMulProgramType:()=>Ln,assertNotComplex:()=>ay,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>ey,computeWorkgroupInfoForMatMul:()=>Gk,computeWorkgroupSizeForConv2d:()=>Q3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>ty,tilesFitEvenlyIntoShape:()=>gue});var bi=e=>{let t=1;for(let a=0;aa%e[n]===0)}function de(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(bi(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(bi(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(bi(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Gk(e,t,a,n=!1){let r=[8,8,1],s=[4,4,1];return n||(e<=8&&(s[1]=1),t<=16&&a<=16&&(r[0]=4)),{workgroupSize:r,elementsPerThread:s}}function Q3(e,t,a=!1){if(a)return[8,8,1];let n=bi(e.x.map(s=>t[s])),r=bi(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function ey(e,t,a=!1){if(a)return[4,4,1];let n=bi(e.x.map(s=>t[s])),r=bi(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function me(e){return{x:e.map((t,a)=>a)}}function Q1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function ty(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function ay(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGPU backend.`)})}var Ln;(function(e){e[e.MatMulReduceProgram=0]="MatMulReduceProgram",e[e.MatMulSplitKProgram=1]="MatMulSplitKProgram",e[e.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",e[e.MatMulPackedProgram=3]="MatMulPackedProgram",e[e.MatMulMax=4]="MatMulMax"})(Ln||(Ln={}));var yue=B().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),xue=(e,t)=>{let a=e.limits.maxComputeWorkgroupsPerDimension,n=t.dispatchLayout,r=t.dispatch;if(r.every(i=>i<=a))return r;v.assert(r[0]>a&&n.y===void 0&&n.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(r[0]));return s>a?(s=Math.ceil(Math.cbrt(r[0])),v.assert(s<=a,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},ny=class Hk extends du{nextDataId(){return Hk.nextDataId++}constructor(t,a){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!ty())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new eue(a),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new tue(this.device),this.textureManager=new aue(this.device),this.tensorMap=new hp(this,St()),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,a=!1){if(!this.tensorMap.has(t))return!0;let n=this.tensorMap.get(t);return a?n.refCount=0:n.refCount--,n.refCount>0?!1:(n.complexTensorInfos!=null&&(this.disposeData(n.complexTensorInfos.real.dataId),this.disposeData(n.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(t)?(this.tensorDataPendingDisposal.push(t),!0):(this.releaseResource(t),this.tensorMap.delete(t),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(t){let a=this.tensorMap.get(t);if(!(!a||!a.resource)){if(a.external){a.resource=null;return}a.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(a.resource):a.resource instanceof GPUTexture&&this.textureManager.releaseTexture(a.resource),a.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let a=this.tensorMap.get(t);a.refCount++}decRef(t){if(this.tensorMap.has(t)){let a=this.tensorMap.get(t);a.refCount--}}write(t,a,n){if(n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.tensorMap.set(r,{dtype:n,shape:a,values:t,refCount:1}),r}move(t,a,n,r,s){if(r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:r,shape:n,values:a,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(t=>{this.releaseResource(t),this.tensorMap.delete(t)}),this.uniformPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t)),this.stagingPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let t;try{t=await Promise.all(Object.values(this.pipelineCache))}catch(a){throw new Error(a.message)}Object.keys(this.pipelineCache).map((a,n)=>{this.pipelineCache[a]=t[n]})}async getBufferData(t){if(B().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let a=t.size,n=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,a),this.submitQueue(),await n.mapAsync(GPUMapMode.READ);let r=n.getMappedRange().slice(0);return n.unmap(),n!=null&&this.bufferManager.releaseBuffer(n),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),r}convertAndCacheOnCPU(t,a){let n=this.tensorMap.get(t);return n.values=a,n.values}readSync(t){let a=this.tensorMap.get(t),{values:n,complexTensorInfos:r}=a;if(n!=null||a.dtype==="string")return n;if(a.dtype==="complex64"){let f=this.readSync(r.real.dataId),g=this.readSync(r.imag.dataId),y=v.convertBackendValuesAndArrayBuffer(I.mergeRealAndImagArrays(f,g).buffer,"float32");return this.convertAndCacheOnCPU(t,y),y}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],i=a.resource,o=i.size;v.assert(o%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let l=o/4,u=new ArrayBuffer(o),d=256,c=256,p=s.map(f=>new OffscreenCanvas(d,c)),h=new OffscreenCanvas(d,c);this.endComputePassEncoder(),p.map((f,g)=>{let y=f.getContext("webgpu");return y.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),y.getCurrentTexture()}).map((f,g)=>{let y=d*4,x=(N,M,F)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:i,bytesPerRow:y,offset:F},{texture:f},{width:N,height:M}),this.submitQueue();let E=h.getContext("2d",{willReadFrequently:!0});E.clearRect(0,0,N,M),E.drawImage(p[g],0,0);let T=E.getImageData(0,0,N,M).data,D=s[g],O=new Uint8ClampedArray(u,F,N*M*4);for(let W=0;W0&&(x(b,w,S),S+=w*(d*4)),b=C%d,b>0&&x(b,1,S)});let m=v.convertBackendValuesAndArrayBuffer(u,a.dtype);return this.convertAndCacheOnCPU(t,m),m}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let a=this.tensorMap.get(t),{values:n}=a;if(n!=null)return n;let r;if(a.dtype==="complex64"){let s=await Promise.all([this.read(a.complexTensorInfos.real.dataId),this.read(a.complexTensorInfos.imag.dataId)]),i=s[0],o=s[1];r=I.mergeRealAndImagArrays(i,o)}else{let s=await this.getBufferData(a.resource);r=v.convertBackendValuesAndArrayBuffer(s,a.dtype)}return this.convertAndCacheOnCPU(t,r),r}copyBuffer(t){let a=t.size,n=t.usage,r=this.bufferManager.acquireBuffer(a,n);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,r,0,a),this.submitQueue(),r}createTensorFromGPUData(t,a,n){let r=t.buffer;if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:n,shape:a,values:null,refCount:1,external:t.zeroCopy});let i=this.tensorMap.get(s),o=Q1(i.dtype)*v.sizeFromShape(i.shape);if(t.buffer.sizev.decodeString(r));return Te(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Te(t.shape,t.dtype,a)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),i=v.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},l=await Promise.all(s);return o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,d)=>({name:i[d],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,o}makeTensorInfo(t,a,n){return a==="string"&&n!=null&&n.length>0&&v.isString(n[0])&&(n=n.map(r=>v.encodeString(r))),{dataId:this.write(n,t,a),shape:t,dtype:a}}tensorToBinding(t){if(!t)return null;let a=this.tensorMap.get(t.dataId).resource;return a instanceof GPUBuffer?{buffer:a}:a instanceof GPUTexture?a.createView():a}uploadToGPU(t){let a=this.tensorMap.get(t);if(a.resource!=null)return;let n=Q1(a.dtype)*v.sizeFromShape(a.shape),r,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(a.values){if(r=this.bufferManager.acquireBuffer(n,s,!0),r.mapState==="unmapped"){let i=this.bufferManager.acquireBuffer(n,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),o=i.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(o).set(a.values):new Float32Array(o).set(a.values),i.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(i,0,r,0,n),this.stagingPendingDisposal.push(i)}else{let i=r.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(i).set(a.values):new Float32Array(i).set(a.values),r.unmap()}a.values=null}else r=this.bufferManager.acquireBuffer(n,s);a.resource=r}makeUniforms(t){let a=0,n=0,r=[],s=1;t.forEach(l=>{l.data.length===0&&(l.data=[1]);let u;switch(l.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:v.assert(!1,()=>`Unsupported ${l.data.length}D shape`)}(n===5||n===6)&&(u=16),u>s&&(s=u),a=Math.ceil(a/u)*u,n=l.data.length,r.push(a),a+=l.data.length*4}),a=Math.ceil(a/s)*s;let i=new ArrayBuffer(a);t.forEach((l,u)=>{let d=r[u];l.type==="int32"?new Int32Array(i,d,l.data.length).set(l.data):l.type==="uint32"?new Uint32Array(i,d,l.data.length).set(l.data):new Float32Array(i,d,l.data.length).set(l.data)});let o=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(o,0,i,0,a),this.uniformPendingDisposal.push(o),{offset:0,size:a,buffer:o}}runWebGPUProgram(t,a,n,r,s){if(s||(s=this.makeTensorInfo(t.outputShape,n)),v.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=v.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=xue(this.device,t);let i=a.map((l,u)=>{if(l.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(l.dataId),{dtype:this.tensorMap.get(l.dataId).dtype,shape:l.shape,name:t.variableNames[u]}});t.shaderKey=oue(t,i,s);let o=B().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=rue(this.device,t,i,s,o)),t.pipeline=this.pipelineCache[t.shaderKey],o||this.recordAndSubmit(t,s,a,r),s}recordAndSubmit(t,a,n,r){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],i=[],o="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=n.concat(a).map(h=>h.shape);let p="int32";i.map(h=>{s.push({type:p,data:h});let m=v.computeStrides(h);s.push({type:p,data:m})})}else{let p=v.computeStrides(a.shape);s.push({type:o,data:p})}if(t.size){let p=v.sizeFromShape(t.outputShape);s.push({type:o,data:[t.outputComponent?p/t.outputComponent:p]})}r&&(s=[...s,...r]);let l=[this.tensorToBinding(a),...n.map(p=>this.tensorToBinding(p)),this.makeUniforms(s)];n.forEach(p=>{this.commandQueueOwnedIds.add(p.dataId)}),this.commandQueueOwnedIds.add(a.dataId);let u=this.device.createBindGroup({layout:t.pipeline.getBindGroupLayout(0),entries:l.map((p,h)=>({binding:h,resource:p}))}),d=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};d&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(d||B().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===lu.DRAW)&&(this.endComputePassEncoder(),d?this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let t=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,t,0,this.querySetCount*8),this.submitQueue(),await t.mapAsync(GPUMapMode.READ);let a=new BigUint64Array(t.getMappedRange()),n=Number(a[1]-a[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),n}shouldExecuteOnCPU(t,a=yue){return B().getBool("WEBGPU_CPU_FORWARD")&&t.every(n=>this.tensorMap.get(n.dataId).resource==null&&v.sizeFromShape(n.shape){let e={powerPreference:B().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a={},n=[];t.features.has("timestamp-query")&&n.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&n.push(["bgra8unorm-storage"]),a.requiredFeatures=n;let r=t.limits;a.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(a),i=await t.requestAdapterInfo();return new ny(s,i)},3);var De;(function(e){e[e.ADD=0]="ADD",e[e.ATAN2=1]="ATAN2",e[e.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",e[e.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",e[e.DIV=4]="DIV",e[e.ELU_DER=5]="ELU_DER",e[e.EQUAL=6]="EQUAL",e[e.FLOOR_DIV=7]="FLOOR_DIV",e[e.GREATER=8]="GREATER",e[e.GREATER_EQUAL=9]="GREATER_EQUAL",e[e.LESS=10]="LESS",e[e.LESS_EQUAL=11]="LESS_EQUAL",e[e.LOGICAL_AND=12]="LOGICAL_AND",e[e.LOGICAL_OR=13]="LOGICAL_OR",e[e.MAX=14]="MAX",e[e.MIN=15]="MIN",e[e.MOD=16]="MOD",e[e.MUL=17]="MUL",e[e.NOT_EQUAL=18]="NOT_EQUAL",e[e.POW=19]="POW",e[e.PRELU=20]="PRELU",e[e.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",e[e.SUB=22]="SUB"})(De||(De={}));var Aue="let resultTemp = a + b;",bue="let resultTemp = atan2(a, b);",vue="let resultTemp = areal * breal - aimag * bimag;",wue="let resultTemp = areal * bimag + aimag * breal;",kue="let resultTemp = a / b;",Iue="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",Sue=` + `}return s}function Tle(e){let t=/(\w+)\s*:\s*vec(5|6)/g;e=e.replace(t,n=>"@align(16) "+n);let a=/vec(5|6)\s*,\s*(\w+)/g;return e=e.replace(a,(n,r,s)=>`vec${r}, @align(16) ${s}`),e}function nA(e){return!(e.dispatchLayout.hasOwnProperty("y")&&e.dispatchLayout.y.length!==0||e.dispatchLayout.hasOwnProperty("z")&&e.dispatchLayout.z.length!==0)}var Ck={};Ze(Ck,{GPUBytesPerElement:()=>q1,MatMulProgramType:()=>Dn,assertNotComplex:()=>q3,computeDispatch:()=>de,computeWorkPerThreadForConv2d:()=>H3,computeWorkgroupInfoForMatMul:()=>Tk,computeWorkgroupSizeForConv2d:()=>G3,flatDispatchLayout:()=>me,isWebGPUSupported:()=>j3,tilesFitEvenlyIntoShape:()=>Nle});var Xs=e=>{let t=1;for(let a=0;aa%e[n]===0)}function de(e,t,a=[1,1,1],n=[1,1,1]){let[r,s,i]=[Math.ceil(Xs(e.x.map(o=>t[o]))/(a[0]*n[0])),e.y?Math.ceil(Xs(e.y.map(o=>t[o]))/(a[1]*n[1])):1,e.z?Math.ceil(Xs(e.z.map(o=>t[o]))/(a[2]*n[2])):1];return[r,s,i]}function Tk(e,t,a,n=!1){let r=[8,8,1],s=[4,4,1];return n||(e<=8&&(s[1]=1),t<=16&&a<=16&&(r[0]=4)),{workgroupSize:r,elementsPerThread:s}}function G3(e,t,a=!1){if(a)return[8,8,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[4,16,1]:r<=4?[16,4,1]:[16,16,1]}function H3(e,t,a=!1){if(a)return[4,4,1];let n=Xs(e.x.map(s=>t[s])),r=Xs(e.y.map(s=>t[s]));return n<=4?[1,2,1]:r<=4?[2,1,1]:[2,2,1]}function me(e){return{x:e.map((t,a)=>a)}}function q1(e){if(e==="float32"||e==="int32"||e==="bool"||e==="string")return 4;if(e==="complex64")return 8;throw new Error(`Unknown dtype ${e}`)}function j3(){return!!(typeof globalThis!="undefined"&&globalThis.navigator&&globalThis.navigator.gpu)}function q3(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGPU backend.`)})}var Dn;(function(e){e[e.MatMulReduceProgram=0]="MatMulReduceProgram",e[e.MatMulSplitKProgram=1]="MatMulSplitKProgram",e[e.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",e[e.MatMulPackedProgram=3]="MatMulPackedProgram",e[e.MatMulMax=4]="MatMulMax"})(Dn||(Dn={}));var Rle=B().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Ele=(e,t)=>{let a=e.limits.maxComputeWorkgroupsPerDimension,n=t.dispatchLayout,r=t.dispatch;if(r.every(i=>i<=a))return r;v.assert(r[0]>a&&n.y===void 0&&n.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(r[0]));return s>a?(s=Math.ceil(Math.cbrt(r[0])),v.assert(s<=a,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},X3=class Nk extends ru{nextDataId(){return Nk.nextDataId++}constructor(t,a){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!j3())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=t,this.queue=t.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new cle(a),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new hle(this.device),this.textureManager=new mle(this.device),this.tensorMap=new ip(this,It()),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:t,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(t,a=!1){if(!this.tensorMap.has(t))return!0;let n=this.tensorMap.get(t);return a?n.refCount=0:n.refCount--,n.refCount>0?!1:(n.complexTensorInfos!=null&&(this.disposeData(n.complexTensorInfos.real.dataId),this.disposeData(n.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(t)?(this.tensorDataPendingDisposal.push(t),!0):(this.releaseResource(t),this.tensorMap.delete(t),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(t){let a=this.tensorMap.get(t);if(!(!a||!a.resource)){if(a.external){a.resource=null;return}a.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(a.resource):a.resource instanceof GPUTexture&&this.textureManager.releaseTexture(a.resource),a.resource=null}}refCount(t){return this.tensorMap.has(t)?this.tensorMap.get(t).refCount:0}incRef(t){let a=this.tensorMap.get(t);a.refCount++}decRef(t){if(this.tensorMap.has(t)){let a=this.tensorMap.get(t);a.refCount--}}write(t,a,n){if(n==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.tensorMap.set(r,{dtype:n,shape:a,values:t,refCount:1}),r}move(t,a,n,r,s){if(r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(t,{dtype:r,shape:n,values:a,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(t=>{this.releaseResource(t),this.tensorMap.delete(t)}),this.uniformPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t)),this.stagingPendingDisposal.forEach(t=>this.bufferManager.releaseBuffer(t,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let t;try{t=await Promise.all(Object.values(this.pipelineCache))}catch(a){throw new Error(a.message)}Object.keys(this.pipelineCache).map((a,n)=>{this.pipelineCache[a]=t[n]})}async getBufferData(t){if(B().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let a=t.size,n=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,n,0,a),this.submitQueue(),await n.mapAsync(GPUMapMode.READ);let r=n.getMappedRange().slice(0);return n.unmap(),n!=null&&this.bufferManager.releaseBuffer(n),B().getBool("WEBGPU_USE_PROFILE_TOOL")&&(v.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),r}convertAndCacheOnCPU(t,a){let n=this.tensorMap.get(t);return n.values=a,n.values}readSync(t){let a=this.tensorMap.get(t),{values:n,complexTensorInfos:r}=a;if(n!=null||a.dtype==="string")return n;if(a.dtype==="complex64"){let f=this.readSync(r.real.dataId),g=this.readSync(r.imag.dataId),y=v.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(f,g).buffer,"float32");return this.convertAndCacheOnCPU(t,y),y}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],i=a.resource,o=i.size;v.assert(o%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let l=o/4,u=new ArrayBuffer(o),p=256,c=256,d=s.map(f=>new OffscreenCanvas(p,c)),h=new OffscreenCanvas(p,c);this.endComputePassEncoder(),d.map((f,g)=>{let y=f.getContext("webgpu");return y.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),y.getCurrentTexture()}).map((f,g)=>{let y=p*4,x=(N,M,$)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:i,bytesPerRow:y,offset:$},{texture:f},{width:N,height:M}),this.submitQueue();let E=h.getContext("2d",{willReadFrequently:!0});E.clearRect(0,0,N,M),E.drawImage(d[g],0,0);let S=E.getImageData(0,0,N,M).data,_=s[g],O=new Uint8ClampedArray(u,$,N*M*4);for(let W=0;W0&&(x(b,w,I),I+=w*(p*4)),b=T%p,b>0&&x(b,1,I)});let m=v.convertBackendValuesAndArrayBuffer(u,a.dtype);return this.convertAndCacheOnCPU(t,m),m}async read(t){if(!this.tensorMap.has(t))throw new Error(`Tensor ${t} was not registered!`);let a=this.tensorMap.get(t),{values:n}=a;if(n!=null)return n;let r;if(a.dtype==="complex64"){let s=await Promise.all([this.read(a.complexTensorInfos.real.dataId),this.read(a.complexTensorInfos.imag.dataId)]),i=s[0],o=s[1];r=C.mergeRealAndImagArrays(i,o)}else{let s=await this.getBufferData(a.resource);r=v.convertBackendValuesAndArrayBuffer(s,a.dtype)}return this.convertAndCacheOnCPU(t,r),r}copyBuffer(t){let a=t.size,n=t.usage,r=this.bufferManager.acquireBuffer(a,n);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(t,0,r,0,a),this.submitQueue(),r}createTensorFromGPUData(t,a,n){let r=t.buffer;if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:n,shape:a,values:null,refCount:1,external:t.zeroCopy});let i=this.tensorMap.get(s),o=q1(i.dtype)*v.sizeFromShape(i.shape);if(t.buffer.sizev.decodeString(r));return _e(t.shape,t.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return _e(t.shape,t.dtype,a)}async time(t){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let a=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,t();let s=v.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),i=v.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=a,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},l=await Promise.all(s);return o.kernelMs=v.sum(l),o.getExtraProfileInfo=()=>l.map((u,p)=>({name:i[p],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,o}makeTensorInfo(t,a,n){return a==="string"&&n!=null&&n.length>0&&v.isString(n[0])&&(n=n.map(r=>v.encodeString(r))),{dataId:this.write(n,t,a),shape:t,dtype:a}}tensorToBinding(t){if(!t)return null;let a=this.tensorMap.get(t.dataId).resource;return a instanceof GPUBuffer?{buffer:a}:a instanceof GPUTexture?a.createView():a}uploadToGPU(t){let a=this.tensorMap.get(t);if(a.resource!=null)return;let n=q1(a.dtype)*v.sizeFromShape(a.shape),r,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(a.values){if(r=this.bufferManager.acquireBuffer(n,s,!0),r.mapState==="unmapped"){let i=this.bufferManager.acquireBuffer(n,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),o=i.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(o).set(a.values):new Float32Array(o).set(a.values),i.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(i,0,r,0,n),this.stagingPendingDisposal.push(i)}else{let i=r.getMappedRange();a.dtype==="int32"||a.dtype==="bool"?new Int32Array(i).set(a.values):new Float32Array(i).set(a.values),r.unmap()}a.values=null}else r=this.bufferManager.acquireBuffer(n,s);a.resource=r}makeUniforms(t){let a=0,n=0,r=[],s=1;t.forEach(l=>{l.data.length===0&&(l.data=[1]);let u;switch(l.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:v.assert(!1,()=>`Unsupported ${l.data.length}D shape`)}(n===5||n===6)&&(u=16),u>s&&(s=u),a=Math.ceil(a/u)*u,n=l.data.length,r.push(a),a+=l.data.length*4}),a=Math.ceil(a/s)*s;let i=new ArrayBuffer(a);t.forEach((l,u)=>{let p=r[u];l.type==="int32"?new Int32Array(i,p,l.data.length).set(l.data):l.type==="uint32"?new Uint32Array(i,p,l.data.length).set(l.data):new Float32Array(i,p,l.data.length).set(l.data)});let o=this.bufferManager.acquireBuffer(a,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(o,0,i,0,a),this.uniformPendingDisposal.push(o),{offset:0,size:a,buffer:o}}runWebGPUProgram(t,a,n,r,s){if(s||(s=this.makeTensorInfo(t.outputShape,n)),v.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=v.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),t.dispatch=Ele(this.device,t);let i=a.map((l,u)=>{if(l.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(l.dataId),{dtype:this.tensorMap.get(l.dataId).dtype,shape:l.shape,name:t.variableNames[u]}});t.shaderKey=Ale(t,i,s);let o=B().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return t.shaderKey in this.pipelineCache||(this.pipelineCache[t.shaderKey]=gle(this.device,t,i,s,o)),t.pipeline=this.pipelineCache[t.shaderKey],o||this.recordAndSubmit(t,s,a,r),s}recordAndSubmit(t,a,n,r){if(t.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],i=[],o="int32";if(t.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),i=n.concat(a).map(h=>h.shape);let d="int32";i.map(h=>{s.push({type:d,data:h});let m=v.computeStrides(h);s.push({type:d,data:m})})}else{let d=v.computeStrides(a.shape);s.push({type:o,data:d})}if(t.size){let d=v.sizeFromShape(t.outputShape);s.push({type:o,data:[t.outputComponent?d/t.outputComponent:d]})}r&&(s=[...s,...r]);let l=[this.tensorToBinding(a),...n.map(d=>this.tensorToBinding(d)),this.makeUniforms(s)];n.forEach(d=>{this.commandQueueOwnedIds.add(d.dataId)}),this.commandQueueOwnedIds.add(a.dataId);let u=this.device.createBindGroup({layout:t.pipeline.getBindGroupLayout(0),entries:l.map((d,h)=>({binding:h,resource:d}))}),p=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};p&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(t.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(t.dispatch[0],t.dispatch[1],t.dispatch[2]),this.dispatchCountInPass++,(p||B().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||t.pixelsOpType===au.DRAW)&&(this.endComputePassEncoder(),p?this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let t=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,t,0,this.querySetCount*8),this.submitQueue(),await t.mapAsync(GPUMapMode.READ);let a=new BigUint64Array(t.getMappedRange()),n=Number(a[1]-a[0])/1e6;return t.unmap(),this.bufferManager.releaseBuffer(t),n}shouldExecuteOnCPU(t,a=Rle){return B().getBool("WEBGPU_CPU_FORWARD")&&t.every(n=>this.tensorMap.get(n.dataId).resource==null&&v.sizeFromShape(n.shape){let e={powerPreference:B().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},t=await navigator.gpu.requestAdapter(e),a={},n=[];t.features.has("timestamp-query")&&n.push("timestamp-query"),t.features.has("bgra8unorm-storage")&&n.push(["bgra8unorm-storage"]),a.requiredFeatures=n;let r=t.limits;a.requiredLimits={maxComputeWorkgroupStorageSize:r.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:r.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:r.maxStorageBufferBindingSize,maxBufferSize:r.maxBufferSize,maxComputeWorkgroupSizeX:r.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:r.maxComputeInvocationsPerWorkgroup};let s=await t.requestDevice(a),i=await t.requestAdapterInfo();return new X3(s,i)},3);var Pe;(function(e){e[e.ADD=0]="ADD",e[e.ATAN2=1]="ATAN2",e[e.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",e[e.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",e[e.DIV=4]="DIV",e[e.ELU_DER=5]="ELU_DER",e[e.EQUAL=6]="EQUAL",e[e.FLOOR_DIV=7]="FLOOR_DIV",e[e.GREATER=8]="GREATER",e[e.GREATER_EQUAL=9]="GREATER_EQUAL",e[e.LESS=10]="LESS",e[e.LESS_EQUAL=11]="LESS_EQUAL",e[e.LOGICAL_AND=12]="LOGICAL_AND",e[e.LOGICAL_OR=13]="LOGICAL_OR",e[e.MAX=14]="MAX",e[e.MIN=15]="MIN",e[e.MOD=16]="MOD",e[e.MUL=17]="MUL",e[e.NOT_EQUAL=18]="NOT_EQUAL",e[e.POW=19]="POW",e[e.PRELU=20]="PRELU",e[e.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",e[e.SUB=22]="SUB"})(Pe||(Pe={}));var Mle="let resultTemp = a + b;",$le="let resultTemp = atan2(a, b);",Ple="let resultTemp = areal * breal - aimag * bimag;",_le="let resultTemp = areal * bimag + aimag * breal;",Fle="let resultTemp = a / b;",Dle="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",Ole=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); -`,Tue=` +`,zle=` let remainder = select(a % b, round(a % b), (round(a) == a) & (round(b) == b)); let quotient = (a - remainder) / b; let resultTemp = round(select(quotient, quotient - 1, sign(remainder) == -sign(b))); -`,Cue=` +`,Lle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a > b); -`,Nue=` +`,Wle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a >= b); -`,Rue=` +`,Ble=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a < b); -`,Eue=` +`,Vle=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a <= b); -`,Mue="return f32(a >= 1.0 && b >= 1.0);",Fue=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,$ue="return f32(a >= 1.0 || b >= 1.0);",Due=`return min(vec4(a >= vec4(1.0)) + - vec4(b >= vec4(1.0)), vec4(1.0));`,Pue="let resultTemp = max(a, b);",_ue="let resultTemp = min(a, b);",Oue=` +`,Ule="return f32(a >= 1.0 && b >= 1.0);",Gle=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,Hle="return f32(a >= 1.0 || b >= 1.0);",jle=`return min(vec4(a >= vec4(1.0)) + + vec4(b >= vec4(1.0)), vec4(1.0));`,qle="let resultTemp = max(a, b);",Xle="let resultTemp = min(a, b);",Kle=` let isNaN = b == 0.; var resultTemp = a % b; resultTemp = select((resultTemp + b) % b, resultTemp, (a < 0. && b < 0.) || (a >= 0. && b > 0.)); -`,zue=` +`,Yle=` let isNaN = !vec4(b); var resultTemp = vec4(a % b); if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { @@ -5269,20 +5269,20 @@ return a / b;`,fQ=` if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; } -`,Lue="let resultTemp = a * b;",Wue=` +`,Zle="let resultTemp = a * b;",Jle=` var resultTemp = f32(a != b); let valueForNaN = 1.0; -`,Bue=` +`,Qle=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; -`,Vue=` +`,eue=` let isNaN = a < 0.0 && floor(b) < b; if (b == 0.0) { return 1.0; } var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b), round(abs(b) % 2.0) != 1.0); -`,Uue=` +`,tue=` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -5303,10 +5303,10 @@ return a / b;`,fQ=` resultTemp.a = 1.0; } let isNaN = (a < vec4(0.0)) & (floor(b) < b); -`,Gue="if (a < 0.0) { return b * a; } return a;",Hue=` +`,aue="if (a < 0.0) { return b * a; } return a;",nue=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,jue="let resultTemp = (a - b) * (a - b);",que="let resultTemp = a - b;";function ry(e,t){let a;do{switch(e){case De.ATAN2:a=bue;break;case De.MAX:a=Pue;break;case De.MIN:a=_ue;break;case De.MOD:a=t?zue:Oue;break;case De.NOT_EQUAL:a=t?Bue:Wue;break;case De.POW:a=t?Uue:Vue;break;default:continue}let n,r,s;return t?(n="isnanVec4",r="vec4",s="vec4"):(n="isnan",r="f32",s="bool"),` +`,rue="let resultTemp = (a - b) * (a - b);",sue="let resultTemp = a - b;";function K3(e,t){let a;do{switch(e){case Pe.ATAN2:a=$le;break;case Pe.MAX:a=qle;break;case Pe.MIN:a=Xle;break;case Pe.MOD:a=t?Yle:Kle;break;case Pe.NOT_EQUAL:a=t?Qle:Jle;break;case Pe.POW:a=t?tue:eue;break;default:continue}let n,r,s;return t?(n="isnanVec4",r="vec4",s="vec4"):(n="isnan",r="f32",s="bool"),` let aIsNaN = ${n}(a); let aPostLegalization = select(a, ${r}(42), aIsNaN); let bIsNaN = ${n}(b); @@ -5321,30 +5321,30 @@ return a / b;`,fQ=` resultTemp, ${r}(valueForNaN), ${s}(isNaN) | aIsNaN | bIsNaN); } - `}while(!1);switch(e){case De.ADD:a=Aue;break;case De.COMPLEX_MULTIPLY_IMAG:a=wue;break;case De.COMPLEX_MULTIPLY_REAL:a=vue;break;case De.DIV:a=kue;break;case De.ELU_DER:a=Iue;break;case De.EQUAL:a=Sue;break;case De.FLOOR_DIV:a=Tue;break;case De.GREATER:a=Cue;break;case De.GREATER_EQUAL:a=Nue;break;case De.LESS:a=Rue;break;case De.LESS_EQUAL:a=Eue;break;case De.LOGICAL_AND:return t?Fue:Mue;case De.LOGICAL_OR:return t?Due:$ue;case De.MUL:a=Lue;break;case De.PRELU:return t?Hue:Gue;case De.SQUARED_DIFFERENCE:a=jue;break;case De.SUB:a=que;break;default:}return` + `}while(!1);switch(e){case Pe.ADD:a=Mle;break;case Pe.COMPLEX_MULTIPLY_IMAG:a=_le;break;case Pe.COMPLEX_MULTIPLY_REAL:a=Ple;break;case Pe.DIV:a=Fle;break;case Pe.ELU_DER:a=Dle;break;case Pe.EQUAL:a=Ole;break;case Pe.FLOOR_DIV:a=zle;break;case Pe.GREATER:a=Lle;break;case Pe.GREATER_EQUAL:a=Wle;break;case Pe.LESS:a=Ble;break;case Pe.LESS_EQUAL:a=Vle;break;case Pe.LOGICAL_AND:return t?Gle:Ule;case Pe.LOGICAL_OR:return t?jle:Hle;case Pe.MUL:a=Zle;break;case Pe.PRELU:return t?nue:aue;case Pe.SQUARED_DIFFERENCE:a=rue;break;case Pe.SUB:a=sue;break;default:}return` ${a} return resultTemp; - `}var le;(function(e){e[e.ABS=0]="ABS",e[e.ACOS=1]="ACOS",e[e.ACOSH=2]="ACOSH",e[e.ASIN=3]="ASIN",e[e.ASINH=4]="ASINH",e[e.ATAN=5]="ATAN",e[e.ATANH=6]="ATANH",e[e.CEIL=7]="CEIL",e[e.COS=8]="COS",e[e.COSH=9]="COSH",e[e.ELU=10]="ELU",e[e.ERF=11]="ERF",e[e.EXP=12]="EXP",e[e.EXPM1=13]="EXPM1",e[e.FLOOR=14]="FLOOR",e[e.IS_FINITE=15]="IS_FINITE",e[e.IS_INF=16]="IS_INF",e[e.IS_NAN=17]="IS_NAN",e[e.LINEAR=18]="LINEAR",e[e.LOG=19]="LOG",e[e.LOG1P=20]="LOG1P",e[e.LOGICAL_NOT=21]="LOGICAL_NOT",e[e.NEG=22]="NEG",e[e.RELU=23]="RELU",e[e.RELU6=24]="RELU6",e[e.LEAKYRELU=25]="LEAKYRELU",e[e.RECIPROCAL=26]="RECIPROCAL",e[e.ROUND=27]="ROUND",e[e.RSQRT=28]="RSQRT",e[e.SELU=29]="SELU",e[e.SIGMOID=30]="SIGMOID",e[e.SIGN=31]="SIGN",e[e.SIN=32]="SIN",e[e.SINH=33]="SINH",e[e.SOFTPLUS=34]="SOFTPLUS",e[e.SQRT=35]="SQRT",e[e.SQUARE=36]="SQUARE",e[e.STEP=37]="STEP",e[e.TAN=38]="TAN",e[e.TANH=39]="TANH",e[e.TO_INT=40]="TO_INT"})(le||(le={}));var Xue="return abs(a);",Kue=` + `}var le;(function(e){e[e.ABS=0]="ABS",e[e.ACOS=1]="ACOS",e[e.ACOSH=2]="ACOSH",e[e.ASIN=3]="ASIN",e[e.ASINH=4]="ASINH",e[e.ATAN=5]="ATAN",e[e.ATANH=6]="ATANH",e[e.CEIL=7]="CEIL",e[e.COS=8]="COS",e[e.COSH=9]="COSH",e[e.ELU=10]="ELU",e[e.ERF=11]="ERF",e[e.EXP=12]="EXP",e[e.EXPM1=13]="EXPM1",e[e.FLOOR=14]="FLOOR",e[e.IS_FINITE=15]="IS_FINITE",e[e.IS_INF=16]="IS_INF",e[e.IS_NAN=17]="IS_NAN",e[e.LINEAR=18]="LINEAR",e[e.LOG=19]="LOG",e[e.LOG1P=20]="LOG1P",e[e.LOGICAL_NOT=21]="LOGICAL_NOT",e[e.NEG=22]="NEG",e[e.RELU=23]="RELU",e[e.RELU6=24]="RELU6",e[e.LEAKYRELU=25]="LEAKYRELU",e[e.RECIPROCAL=26]="RECIPROCAL",e[e.ROUND=27]="ROUND",e[e.RSQRT=28]="RSQRT",e[e.SELU=29]="SELU",e[e.SIGMOID=30]="SIGMOID",e[e.SIGN=31]="SIGN",e[e.SIN=32]="SIN",e[e.SINH=33]="SINH",e[e.SOFTPLUS=34]="SOFTPLUS",e[e.SQRT=35]="SQRT",e[e.SQUARE=36]="SQUARE",e[e.STEP=37]="STEP",e[e.TAN=38]="TAN",e[e.TANH=39]="TANH",e[e.TO_INT=40]="TO_INT"})(le||(le={}));var iue="return abs(a);",oue=` if (abs(a) > 1.) { return uniforms.NAN; } return acos(a); -`,Yue=` +`,lue=` if (a < 1.) { return uniforms.NAN; } return acosh(a); -`,Zue=` +`,uue=` if (abs(a) > 1.) { return uniforms.NAN; } return asin(a); -`,Jue="return asinh(a);",Que=` +`,due="return asinh(a);",pue=` if (isnan(a)) { return uniforms.NAN; } return atan(a); -`,ede=` +`,cue=` if (abs(a) > 1.) { return uniforms.NAN; } @@ -5355,10 +5355,10 @@ return a / b;`,fQ=` return -uniforms.INFINITY; } return atanh(a); -`,tde="return ceil(a);",ade="return cos(a);",nde=` +`,hue="return ceil(a);",mue="return cos(a);",fue=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,rde="return exp(a) - 1.0;",sde="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",ide=` +`,gue="return exp(a) - 1.0;",yue="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",xue=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5373,40 +5373,40 @@ return a / b;`,fQ=` resFloat.a = a.a; } return resFloat; -`,ode=` +`,Aue=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - let p = ${I.ERF_P}; - let a1 = ${I.ERF_A1}; - let a2 = ${I.ERF_A2}; - let a3 = ${I.ERF_A3}; - let a4 = ${I.ERF_A4}; - let a5 = ${I.ERF_A5}; + let p = ${C.ERF_P}; + let a1 = ${C.ERF_A1}; + let a2 = ${C.ERF_A2}; + let a3 = ${C.ERF_A3}; + let a4 = ${C.ERF_A4}; + let a5 = ${C.ERF_A5}; let sign = sign(a); let absA = abs(a); let t = 1.0 / (1.0 + p * absA); return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); -`,lde="return exp(a);",ude="return floor(a);",dde="return f32(!isnan(a) && !isinf(a));",pde="return f32(isinf(a));",cde="return f32(isnan(a));",hde="return a;",mde=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,fde=` +`,bue="return exp(a);",vue="return floor(a);",wue="return f32(!isnan(a) && !isinf(a));",kue="return f32(isinf(a));",Iue="return f32(isnan(a));",Sue="return a;",Cue=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,Tue=` if (isnan(a)) { return a; } return log(1.0 + a); -`,gde="return f32(!(a >= 1.0));",yde="return -a;",xde="if (a < 0.0) { return uniforms.alpha * a; } return a;",Ade=` +`,Nue="return f32(!(a >= 1.0));",Rue="return -a;",Eue="if (a < 0.0) { return uniforms.alpha * a; } return a;",Mue=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,bde="return 1.0 / a;",vde="return select(a, 0.0, a < 0.0);",wde="return clamp(a, 0.0, 6.0);",kde="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Ide=` +`,$ue="return 1.0 / a;",Pue="return select(a, 0.0, a < 0.0);",_ue="return clamp(a, 0.0, 6.0);",Fue="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",Due=` return select(a, vec4(0.0), a < vec4(0.0)); -`,Sde="return round(a);",Tde="return inverseSqrt(a);",Cde=` +`,Oue="return round(a);",zue="return inverseSqrt(a);",Lue=` if (a >= 0.0) { - return ${I.SELU_SCALE} * a; + return ${C.SELU_SCALE} * a; } else { - return ${I.SELU_SCALEALPHA} * (exp(a) - 1.0); + return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0); } -`,Nde="return 1.0 / (1.0 + exp(-1.0 * a));",Rde="return sign(a);",Ede="return sin(a);",Mde=` +`,Wue="return 1.0 / (1.0 + exp(-1.0 * a));",Bue="return sign(a);",Vue="return sin(a);",Uue=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,Fde=` +`,Gue=` let epsilon = 1.1920928955078125e-7; let threshold = log(epsilon) + 2.0; @@ -5421,26 +5421,26 @@ return a / b;`,fQ=` } else { return log(exp_a + 1.0); } -`,$de="return sqrt(a);",Dde="return a * a;",Pde=` +`,Hue="return sqrt(a);",jue="return a * a;",que=` if (isnan(a)) { return a; } return select(uniforms.stepAlpha, 1.0, a > 0.0); -`,_de="return tan(a);",Ode=` +`,Xue="return tan(a);",Kue=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,zde="return f32(i32((a)));";function pi(e,t){switch(e){case le.ABS:return Xue;case le.ACOS:return Kue;case le.ACOSH:return Yue;case le.ASIN:return Zue;case le.ASINH:return Jue;case le.ATAN:return Que;case le.ATANH:return ede;case le.COS:return ade;case le.COSH:return nde;case le.CEIL:return tde;case le.ELU:return t?ide:sde;case le.ERF:return ode;case le.EXP:return lde;case le.EXPM1:return rde;case le.FLOOR:return ude;case le.IS_FINITE:return dde;case le.IS_INF:return pde;case le.IS_NAN:return cde;case le.LINEAR:return hde;case le.LOG:return mde;case le.LOG1P:return fde;case le.LOGICAL_NOT:return gde;case le.NEG:return yde;case le.LEAKYRELU:return t?Ade:xde;case le.RECIPROCAL:return bde;case le.RELU:return t?Ide:vde;case le.RELU6:return t?kde:wde;case le.ROUND:return Sde;case le.RSQRT:return Tde;case le.SELU:return Cde;case le.SIGMOID:return Nde;case le.SIGN:return Rde;case le.SIN:return Ede;case le.SINH:return Mde;case le.SOFTPLUS:return Fde;case le.SQRT:return $de;case le.SQUARE:return Dde;case le.STEP:return Pde;case le.TAN:return _de;case le.TANH:return Ode;case le.TO_INT:return zde;default:throw new Error(`BinaryType ${e} is not implemented!`)}}function Or(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=pi(le.LINEAR);else if(e==="relu")r=pi(le.RELU,a);else if(e==="elu")r=pi(le.ELU,a);else if(e==="relu6")r=pi(le.RELU6,a);else if(e==="prelu")r=ry(De.PRELU,a);else if(e==="sigmoid")r=pi(le.SIGMOID,a);else if(e==="leakyrelu")r=pi(le.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Xe(a?4:1),i="";return t?i=` +`,Yue="return f32(i32((a)));";function Ws(e,t){switch(e){case le.ABS:return iue;case le.ACOS:return oue;case le.ACOSH:return lue;case le.ASIN:return uue;case le.ASINH:return due;case le.ATAN:return pue;case le.ATANH:return cue;case le.COS:return mue;case le.COSH:return fue;case le.CEIL:return hue;case le.ELU:return t?xue:yue;case le.ERF:return Aue;case le.EXP:return bue;case le.EXPM1:return gue;case le.FLOOR:return vue;case le.IS_FINITE:return wue;case le.IS_INF:return kue;case le.IS_NAN:return Iue;case le.LINEAR:return Sue;case le.LOG:return Cue;case le.LOG1P:return Tue;case le.LOGICAL_NOT:return Nue;case le.NEG:return Rue;case le.LEAKYRELU:return t?Mue:Eue;case le.RECIPROCAL:return $ue;case le.RELU:return t?Due:Pue;case le.RELU6:return t?Fue:_ue;case le.ROUND:return Oue;case le.RSQRT:return zue;case le.SELU:return Lue;case le.SIGMOID:return Wue;case le.SIGN:return Bue;case le.SIN:return Vue;case le.SINH:return Uue;case le.SOFTPLUS:return Gue;case le.SQRT:return Hue;case le.SQUARE:return jue;case le.STEP:return que;case le.TAN:return Xue;case le.TANH:return Kue;case le.TO_INT:return Yue;default:throw new Error(`BinaryType ${e} is not implemented!`)}}function $r(e,t=!1,a=!1,n=3){if(e===null)return"";let r="";if(e==="linear")r=Ws(le.LINEAR);else if(e==="relu")r=Ws(le.RELU,a);else if(e==="elu")r=Ws(le.ELU,a);else if(e==="relu6")r=Ws(le.RELU6,a);else if(e==="prelu")r=K3(Pe.PRELU,a);else if(e==="sigmoid")r=Ws(le.SIGMOID,a);else if(e==="leakyrelu")r=Ws(le.LEAKYRELU,a);else throw new Error(`Activation ${e} has not been implemented for the WebGPU backend.`);let s=Xe(a?4:1),i="";return t?i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { let b = getPreluActivationWeightsByOutputCoords(coords); ${r} }`:i=` fn activation(a : ${s}, coords : vec${n}) -> ${s} { ${r} - }`,i}function ml(e,t){return` + }`,i}function ol(e,t){return` ${e?"value = value + getBiasByOutputCoords(coords);":""} ${t?"value = activation(value, coords);":""} - `}function jk(e,t,a=!1,n=!1,r=!1,s=1){v.assert(e&&s===1||!e,()=>`transposeA ${e} is not compatible with component size ${s}`);let i=` + `}function Rk(e,t,a=!1,n=!1,r=!1,s=1){v.assert(e&&s===1||!e,()=>`transposeA ${e} is not compatible with component size ${s}`);let i=` ${e?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,o=t?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` @@ -5460,18 +5460,18 @@ return a / b;`,fQ=` ${o} return value; } - `}function sy(e,t,a,n,r=!1,s=!1,i=!1,o=1){return` - ${jk(a,n,r,s,i,o)} + `}function Y3(e,t,a,n,r=!1,s=!1,i=!1,o=1){return` + ${Rk(a,n,r,s,i,o)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Xe(o)}) { ${r&&s?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${ml(e,t)} + ${ol(e,t)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var Lde=(e,t)=>e?` + `}var Zue=(e,t)=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${t}); @@ -5479,7 +5479,7 @@ return a / b;`,fQ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRow + innerRow, kStart + inputCol * ${t}); - `,Wde=(e,t,a,n)=>{if(e)return` + `,Jue=(e,t,a,n)=>{if(e)return` for (var k = 0; k < ${n}; k++) { let BCached0 = mm_Bsub[k][tileCol]; let ACached0 = mm_Asub[k][localRow]; @@ -5493,10 +5493,10 @@ return a / b;`,fQ=` let ACached = mm_Asub[tileRow + i][k]; ${s} } - }`}};function g0(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,d=a?n:o,c=u/t[0],p=n/t[1],h=e[1],m=e[0];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. + }`}};function d0(e,t,a=!1,n=32,r=!1,s=32,i=!1){let o=t[1]*e[1],l=t[0]*e[0],u=a?o:n,p=a?n:o,c=u/t[0],d=n/t[1],h=e[1],m=e[0];return v.assert((a&&c===4&&e[1]===4||!a&&(c===3||c===4))&&u%t[0]===0&&n%t[1]===0&&e[0]===4,()=>`If transposeA ${a} is true, innerElementSize ${c} and workPerThread[1] ${e[1]} must be 4. Otherwise, innerElementSize ${c} must be 3 or 4. tileAWidth ${u} must be divisible by workgroupSize[0]${t[0]}. tileInner ${n} must be divisible by workgroupSize[1] ${t[1]}. colPerThread ${e[0]} must be 4.`),` - var mm_Asub : array, ${u/c}>, ${d}>; + var mm_Asub : array, ${u/c}>, ${p}>; var mm_Bsub : array, ${l/e[0]}>, ${n}>; ${ue()} { @@ -5517,17 +5517,17 @@ return a / b;`,fQ=` var acc: array, ${h}>; // Loop over shared dimension. - let tileRowB = localRow * ${p}; + let tileRowB = localRow * ${d}; for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. for (var innerRow = 0; innerRow < ${h}; innerRow++) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${Lde(a,c)} + ${Zue(a,c)} } // Load one tile of B into local memory. - for (var innerRow = 0; innerRow < ${p}; innerRow++) { + for (var innerRow = 0; innerRow < ${d}; innerRow++) { let inputRow = tileRowB + innerRow; let inputCol = tileCol; mm_Bsub[inputRow][inputCol] = mm_readB(batchB, kStart + inputRow, globalCol); @@ -5536,14 +5536,14 @@ return a / b;`,fQ=` workgroupBarrier(); // Compute acc values for a single thread. - ${Wde(a,c,h,n)} + ${Jue(a,c,h,n)} workgroupBarrier(); } for (var innerRow = 0; innerRow < ${h}; innerRow++) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var gA=e=>e?` + }`}var rA=e=>e?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -5551,7 +5551,7 @@ return a / b;`,fQ=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRowStart + inputRow, kStart + inputCol); - `,Bde=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function y0(e,t,a=!1,n=32,r=!1,s=32,i=!1,o=!1){let l=e[1]*t[1],u=e[0]*t[0],d=a?l:n,c=a?n:l;v.assert(c%t[1]===0&&d%t[0]===0&&n%t[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${d} must be divisible by workgroupSize[0]${t[0]}, tileInner ${n} must be divisible by workgroupSize[1]${t[1]}`);let p=c/t[1],h=d/t[0],m=n/t[1],f=e[1],g=e[0],y=i?` + `,Que=e=>e?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function p0(e,t,a=!1,n=32,r=!1,s=32,i=!1,o=!1){let l=e[1]*t[1],u=e[0]*t[0],p=a?l:n,c=a?n:l;v.assert(c%t[1]===0&&p%t[0]===0&&n%t[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${t[1]}, tileAWidth ${p} must be divisible by workgroupSize[0]${t[0]}, tileInner ${n} must be divisible by workgroupSize[1]${t[1]}`);let d=c/t[1],h=p/t[0],m=n/t[1],f=e[1],g=e[0],y=i?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${l}; @@ -5561,8 +5561,8 @@ return a / b;`,fQ=` for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${t[1]}) { - for (var inputCol = localCol; inputCol < ${d}; inputCol = inputCol + ${t[0]}) { - ${gA(a)} + for (var inputCol = localCol; inputCol < ${p}; inputCol = inputCol + ${t[0]}) { + ${rA(a)} } } // Load one tile of B into local memory. @@ -5607,17 +5607,17 @@ return a / b;`,fQ=` let globalCol = i32(globalId.x) * ${g}; let globalRowStart = i32(workgroupId.y) * ${l}; - let tileRowA = i32(localId.y) * ${p}; + let tileRowA = i32(localId.y) * ${d}; let tileColA = i32(localId.x) * ${h}; let tileRowB = i32(localId.y) * ${m}; // Loop over shared dimension. for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. - for (var innerRow = 0; innerRow < ${p}; innerRow++) { + for (var innerRow = 0; innerRow < ${d}; innerRow++) { for (var innerCol = 0; innerCol < ${h}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${gA(a)} + ${rA(a)} } } @@ -5642,7 +5642,7 @@ return a / b;`,fQ=` } for (var innerRow = 0; innerRow < ${f}; innerRow++) { - ${Bde(a)} + ${Que(a)} for (var innerCol = 0; innerCol < ${g}; innerCol++) { acc[innerRow][innerCol] = fma(ACached, BCached[innerCol], acc[innerRow][innerCol]); @@ -5660,7 +5660,7 @@ return a / b;`,fQ=` } } `;return` - var mm_Asub : array, ${c}>; + var mm_Asub : array, ${c}>; var mm_Bsub : array, ${n}>; ${ue()} { @@ -5680,7 +5680,7 @@ return a / b;`,fQ=` } ${y} } - `}var Vde=e=>e?` + `}var ede=e=>e?` mm_readA(batchA, colA, globalRow), mm_readA(batchA, colA + 1, globalRow), mm_readA(batchA, colA + 2, globalRow), @@ -5690,7 +5690,7 @@ return a / b;`,fQ=` mm_readA(batchA, globalRow, colA + 1), mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) - `;function Ude(e,t=!1){v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`);let a=e[0]*4;return` + `;function tde(e,t=!1){v.assert(e[1]===1&&e[2]===1,()=>`A linear work group size is required. But got ${e}.`);let a=e[0]*4;return` var mm_Asub : array, ${e[0]}>; ${ue()} { @@ -5709,7 +5709,7 @@ return a / b;`,fQ=` for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. let colA = t * ${a} + tileCol * 4; - mm_Asub[tileCol] = vec4(${Vde(t)}); + mm_Asub[tileCol] = vec4(${ede(t)}); workgroupBarrier(); // Compute acc values for a single thread. @@ -5729,11 +5729,11 @@ return a / b;`,fQ=` mm_write(batch, globalRow, globalCol, acc); } - `}var Gde=class{constructor(e,t,a=!1,n=!1,r=null,s=null,i=null,o=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=a?e[1]:e[2];if(this.isVec4=(l%4===0&&!a||t[1]%4===0&&a)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!a,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let c=Gk(t[1],l,t[2],a);this.workgroupSize=c.workgroupSize,this.elementsPerThread=c.elementsPerThread}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let u=r!=null,d=i!=null;u&&this.variableNames.push("bias"),d&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=o,this.transposeA=a,this.transposeB=n,this.addBias=u,this.activation=s,this.hasPreluActivationWeights=d,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${a}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,a){let n=this.workgroupSize[1]*this.elementsPerThread[1],r=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=r;let s=e%n===0,i=t%r===0,o=a%this.tileInner===0;return[s,i,o]}getUserCode(){return` - ${Or(this.activation,this.hasPreluActivationWeights,this.isVec4)} - ${sy(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?g0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?Ude(this.workgroupSize,this.transposeA):y0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} - `}};function Hde(e){return` + `}var ade=class{constructor(e,t,a=!1,n=!1,r=null,s=null,i=null,o=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let l=a?e[1]:e[2];if(this.isVec4=(l%4===0&&!a||t[1]%4===0&&a)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!a,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let c=Tk(t[1],l,t[2],a);this.workgroupSize=c.workgroupSize,this.elementsPerThread=c.elementsPerThread}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let u=r!=null,p=i!=null;u&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=o,this.transposeA=a,this.transposeB=n,this.addBias=u,this.activation=s,this.hasPreluActivationWeights=p,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],l),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${a}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,a){let n=this.workgroupSize[1]*this.elementsPerThread[1],r=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=r;let s=e%n===0,i=t%r===0,o=a%this.tileInner===0;return[s,i,o]}getUserCode(){return` + ${$r(this.activation,this.hasPreluActivationWeights,this.isVec4)} + ${Y3(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?tde(this.workgroupSize,this.transposeA):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} + `}};function nde(e){return` var sumValues : array; ${ue()} { let coords = getOutputCoords(); @@ -5766,11 +5766,11 @@ return a / b;`,fQ=` mm_write(batch, row, col, sum); } } - `}var jde=class{constructor(e,t=!1,a=!1,n=null,r=null,s=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,o=s!=null;i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=a,this.addBias=i,this.activation=r,this.hasPreluActivationWeights=o,this.shaderKey=`matMulReduce_${this.activation}_${t}_${a}`}getUserCode(){return` - ${Or(this.activation,this.hasPreluActivationWeights)} - ${sy(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${Hde(this.workgroupSize[0])} - `}};function qde(e){let t=e[1],a=e[0],n=t>a?t:a;return` + `}var rde=class{constructor(e,t=!1,a=!1,n=null,r=null,s=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,o=s!=null;i&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=a,this.addBias=i,this.activation=r,this.hasPreluActivationWeights=o,this.shaderKey=`matMulReduce_${this.activation}_${t}_${a}`}getUserCode(){return` + ${$r(this.activation,this.hasPreluActivationWeights)} + ${Y3(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${nde(this.workgroupSize[0])} + `}};function sde(e){let t=e[1],a=e[0],n=t>a?t:a;return` var mm_Asub : array, ${t}>; var mm_Bsub : array, ${n}>; @@ -5822,12 +5822,12 @@ return a / b;`,fQ=` mm_write(batch, globalRow, globalCol, acc); } - `}var Xde=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=a,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(a[2]/this.workgroupSize[0]),Math.ceil(a[1]/this.workgroupSize[1]),a[0]];let l=s!=null;l&&this.variableNames.push("bias");let u=o!=null;u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}`}getUserCode(){return` - ${Or(this.activation,this.hasPreluActivationWeights)} - ${sy(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${qde(this.workgroupSize)} - `}},Kde=class{constructor(e,t,a=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,v.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let r=(a&&this.outputShape[1]%4===0||!a&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=r?4:1,r||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=de(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=a,this.transposeB=n,this.shaderKey=`matMulSplitK_${a}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` - ${jk(!1,this.transposeB,!1,!1,!1,e)} + `}var ide=class{constructor(e,t,a,n=!1,r=!1,s=null,i=null,o=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=a,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(a[2]/this.workgroupSize[0]),Math.ceil(a[1]/this.workgroupSize[1]),a[0]];let l=s!=null;l&&this.variableNames.push("bias");let u=o!=null;u&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=r,this.addBias=l,this.activation=i,this.hasPreluActivationWeights=u,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${r}`}getUserCode(){return` + ${$r(this.activation,this.hasPreluActivationWeights)} + ${Y3(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${sde(this.workgroupSize)} + `}},ode=class{constructor(e,t,a=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,v.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let r=(a&&this.outputShape[1]%4===0||!a&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=r?4:1,r||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=de(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=a,this.transposeB=n,this.shaderKey=`matMulSplitK_${a}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` + ${Rk(!1,this.transposeB,!1,!1,!1,e)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Xe(e)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5835,31 +5835,31 @@ return a / b;`,fQ=` // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${e}; i = i + 1) { - ${Bs("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} + ${ys("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} } } } - ${e===4?g0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):y0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},Yde=class{constructor(e,t=null,a=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=a,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${a}`}getUserCode(){return` - ${Or(this.activation,this.hasPreluActivationWeights)} + ${e===4?d0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):p0(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},lde=class{constructor(e,t=null,a=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=a,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${a}`}getUserCode(){return` + ${$r(this.activation,this.hasPreluActivationWeights)} ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${ml(this.addBias,this.activation)} + ${ol(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}},Zde=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` + `}},ude=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function Wa(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new Zde(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var Jde={kernelName:Iu,backendName:"webgpu",kernelFunc:Wa};function ke(e){let{inputs:t,attrs:a}=e,{x:n}=t,{shape:r}=a,s=v.sizeFromShape(n.shape),i=v.inferFromImplicitShape(r,s),o=v.sizeFromShape(i);return v.assert(s===o,()=>`The new shape (${i}) has ${o} elements and the old shape (${n.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var Qde={kernelName:Du,backendName:"webgpu",kernelFunc:ke};function x0({a:e,b:t,transposeA:a,transposeB:n,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,d=t.shape.length,c=a?e.shape[u-2]:e.shape[u-1],p=n?t.shape[d-1]:t.shape[d-2],h=a?e.shape[u-1]:e.shape[u-2],m=n?t.shape[d-2]:t.shape[d-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(f),x=v.sizeFromShape(g),A=ul.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);v.assert(c===p,()=>`Error in matMul: inner shapes (${c}) and (${p}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[x,m,p]:[x,p,m],S=ke({inputs:{x:e},backend:r,attrs:{shape:b}}),C=ke({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[S,C],M=Math.max(y,x),F=[S,C],E=[{type:"int32",data:[h]},{type:"int32",data:[m]},{type:"int32",data:[c]}],T,D,O=[M,h,m],W=B().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(W<0){let U=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),G=U>0?U:r.thresholdToIncreaseWorkgroups,q=M*Math.ceil(h/32)*Math.ceil(m/32);q<=G||h<=8&&q<=G*2?M*h*m<=128?W=Ln.MatMulReduceProgram:M===1&&p>=2e3?W=Ln.MatMulSplitKProgram:W=Ln.MatMulSmallOutputSizeProgram:W=Ln.MatMulPackedProgram}switch(W){case Ln.MatMulReduceProgram:T=new jde(O,a,n,s,l,i);break;case Ln.MatMulSplitKProgram:{if(D=Wa({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),T=new Kde(O,p,a,n),s||l){D=r.runWebGPUProgram(T,F,e.dtype,E,D);let G=new Yde(D.shape,s,l,i),q=null,H=[D];s&&H.push(s),i&&H.push(i),l==="leakyrelu"&&(q=[{type:"float32",data:[o]}],G.uniforms+=" alpha : f32,");let V=r.runWebGPUProgram(G,H,D.dtype,q);N.push(D);let Z=ke({inputs:{x:V},backend:r,attrs:{shape:A}});N.push(V);for(let X of N)r.disposeData(X.dataId);return Z}break}case Ln.MatMulSmallOutputSizeProgram:T=new Xde(b,w,O,a,n,s,l,i);break;case Ln.MatMulPackedProgram:let U=r.adapterInfo.isIntel();T=new Gde(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${W}.`)}s&&F.push(s),i&&F.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),T.uniforms+=" alpha : f32,"),D=r.runWebGPUProgram(T,F,e.dtype,E,D);let $=ke({inputs:{x:D},backend:r,attrs:{shape:A}});N.push(D);for(let U of N)r.disposeData(U.dataId);return $}function epe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:c}=n;return x0({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:d})}var tpe={kernelName:ts,backendName:"webgpu",kernelFunc:epe},yA=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=I.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` + `}};function Wa(e){let{backend:t,attrs:a}=e,{shape:n,value:r}=a,{dtype:s}=a;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(n));return i.fill(r),t.makeTensorInfo(n,s,i)}else{let i=new ude(n),o=[{type:"float32",data:[r]}];return t.runWebGPUProgram(i,[],s,o)}}var dde={kernelName:Au,backendName:"webgpu",kernelFunc:Wa};function ke(e){let{inputs:t,attrs:a}=e,{x:n}=t,{shape:r}=a,s=v.sizeFromShape(n.shape),i=v.inferFromImplicitShape(r,s),o=v.sizeFromShape(i);return v.assert(s===o,()=>`The new shape (${i}) has ${o} elements and the old shape (${n.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),e.backend.incRef(n.dataId),{dataId:n.dataId,shape:i,dtype:n.dtype}}var pde={kernelName:Ru,backendName:"webgpu",kernelFunc:ke};function c0({a:e,b:t,transposeA:a,transposeB:n,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,p=t.shape.length,c=a?e.shape[u-2]:e.shape[u-1],d=n?t.shape[p-1]:t.shape[p-2],h=a?e.shape[u-1]:e.shape[u-2],m=n?t.shape[p-2]:t.shape[p-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(f),x=v.sizeFromShape(g),A=al.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);v.assert(c===d,()=>`Error in matMul: inner shapes (${c}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${a} and transposeB=${n} must match.`);let b=a?[y,c,h]:[y,h,c],w=n?[x,m,d]:[x,d,m],I=ke({inputs:{x:e},backend:r,attrs:{shape:b}}),T=ke({inputs:{x:t},backend:r,attrs:{shape:w}}),N=[I,T],M=Math.max(y,x),$=[I,T],E=[{type:"int32",data:[h]},{type:"int32",data:[m]},{type:"int32",data:[c]}],S,_,O=[M,h,m],W=B().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(W<0){let U=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),G=U>0?U:r.thresholdToIncreaseWorkgroups,q=M*Math.ceil(h/32)*Math.ceil(m/32);q<=G||h<=8&&q<=G*2?M*h*m<=128?W=Dn.MatMulReduceProgram:M===1&&d>=2e3?W=Dn.MatMulSplitKProgram:W=Dn.MatMulSmallOutputSizeProgram:W=Dn.MatMulPackedProgram}switch(W){case Dn.MatMulReduceProgram:S=new rde(O,a,n,s,l,i);break;case Dn.MatMulSplitKProgram:{if(_=Wa({backend:r,attrs:{shape:O,value:0,dtype:e.dtype}}),S=new ode(O,d,a,n),s||l){_=r.runWebGPUProgram(S,$,e.dtype,E,_);let G=new lde(_.shape,s,l,i),q=null,H=[_];s&&H.push(s),i&&H.push(i),l==="leakyrelu"&&(q=[{type:"float32",data:[o]}],G.uniforms+=" alpha : f32,");let V=r.runWebGPUProgram(G,H,_.dtype,q);N.push(_);let Z=ke({inputs:{x:V},backend:r,attrs:{shape:A}});N.push(V);for(let X of N)r.disposeData(X.dataId);return Z}break}case Dn.MatMulSmallOutputSizeProgram:S=new ide(b,w,O,a,n,s,l,i);break;case Dn.MatMulPackedProgram:let U=r.adapterInfo.isIntel();S=new ade(b,O,a,n,s,l,i,U);break;default:throw new Error(`Unsupported MatMulProgramType ${W}.`)}s&&$.push(s),i&&$.push(i),l==="leakyrelu"&&(E.push({type:"float32",data:[o]}),S.uniforms+=" alpha : f32,"),_=r.runWebGPUProgram(S,$,e.dtype,E,_);let P=ke({inputs:{x:_},backend:r,attrs:{shape:A}});N.push(_);for(let U of N)r.disposeData(U.dataId);return P}function cde(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:c}=n;return c0({a:r,b:s,transposeA:l,transposeB:u,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:c,activation:p})}var hde={kernelName:Yr,backendName:"webgpu",kernelFunc:cde},sA=class{constructor(e,t,a){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=C.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${ry(this.op,!1)} + ${K3(this.op,!1)} } ${ue("index")} { @@ -5871,9 +5871,9 @@ return a / b;`,fQ=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}},$h=class{constructor(e,t,a){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=I.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?a[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,r=a.length>0&&a[a.length-1]%4===0;n&&r?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(v.isScalarShape(a)||a[a.length-1]===1)||r&&(v.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type="nonshared",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",a=` + `}},Th=class{constructor(e,t,a){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,a),this.dispatchLayout=me(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&a.length>1&&t[0]<128,this.useSharedMemoryWithB=a.length<=1&&t.length>1&&a[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?a[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,r=a.length>0&&a[a.length-1]%4===0;n&&r?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(v.isScalarShape(a)||a[a.length-1]===1)||r&&(v.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type="nonshared",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",a=` fn binaryOperation(a : ${t}, b : ${t}) -> ${t} { - ${ry(this.op,this.outputComponent===4)} + ${K3(this.op,this.outputComponent===4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",r=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; @@ -5904,9 +5904,9 @@ return a / b;`,fQ=` setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function an(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var ape={kernelName:ho,backendName:"webgpu",kernelFunc:an};function fl(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.tensorMap.get(s.dataId),o=an({inputs:{x:n},backend:a}),l=an({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var npe={kernelName:xp,backendName:"webgpu",kernelFunc:fl},id=class{constructor(e,t,a=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,a!==""&&(this.uniforms=a),this.shaderKey=`unary_${t}`}getUserCode(){return` + `;return e}};function tn(e){let{inputs:t}=e,{x:a}=t;return e.backend.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var mde={kernelName:qi,backendName:"webgpu",kernelFunc:tn};function ll(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.makeTensorInfo(n.shape,"complex64"),i=a.tensorMap.get(s.dataId),o=tn({inputs:{x:n},backend:a}),l=tn({inputs:{x:r},backend:a});return i.complexTensorInfos={real:o,imag:l},s}var fde={kernelName:pp,backendName:"webgpu",kernelFunc:ll},ed=class{constructor(e,t,a=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,a!==""&&(this.uniforms=a),this.shaderKey=`unary_${t}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { - ${pi(this.op,!1)} + ${Ws(this.op,!1)} } ${ue("index")} { if (index < uniforms.size) { @@ -5914,7 +5914,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, unaryOperation(a)); } } - `}};function at({opType:e,cpuKernelImpl:t,dtype:a}){return({inputs:n,backend:r})=>{let{x:s}=n,i=r,o=a||s.dtype;if(i.shouldExecuteOnCPU([s])&&t!=null){let u=i.tensorMap.get(s.dataId),d=t(u.values,o);return i.makeTensorInfo(s.shape,o,d)}let l=new id(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function aa({opType:e,cpuKernelImpl:t,supportsComplex:a=!1,dtype:n}){return({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(a&&i.dtype==="complex64"){let c=l.tensorMap.get(i.dataId),p=l.tensorMap.get(o.dataId),h,m;if(e!==De.MUL)[h,m]=[[c.complexTensorInfos.real,p.complexTensorInfos.real],[c.complexTensorInfos.imag,p.complexTensorInfos.imag]].map(g=>{let[y,x]=g,A={dataId:y.dataId,dtype:y.dtype,shape:i.shape},b={dataId:x.dataId,dtype:x.dtype,shape:o.shape},w=new $h(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],Qt(y.dtype,x.dtype))});else{let g=new yA(De.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new yA(De.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),x=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:i.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:i.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:o.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:o.shape}];h=l.runWebGPUProgram(g,x,"float32"),m=l.runWebGPUProgram(y,x,"float32")}let f=fl({inputs:{real:h,imag:m},backend:l});return l.disposeData(h.dataId),l.disposeData(m.dataId),f}let u=n||Qt(i.dtype,o.dtype);if((i.dtype==="string"||o.dtype==="string"||l.shouldExecuteOnCPU([i,o]))&&t!=null){let c=l.tensorMap.get(i.dataId).values,p=l.tensorMap.get(o.dataId).values,h=i.dtype==="string"?I.fromUint8ToStringArray(c):c,m=i.dtype==="string"?I.fromUint8ToStringArray(p):p,[f,g]=t(i.shape,o.shape,h,m,u);return l.makeTensorInfo(g,u,f)}let d=new $h(e,i.shape,o.shape);return l.runWebGPUProgram(d,[i,o],u)}}var qk={};Ke(qk,{addImpl:()=>Yk,bincountImpl:()=>ope,bincountReduceImpl:()=>lpe,bitwiseAndImpl:()=>Zk,castImpl:()=>Kk,ceilImpl:()=>Qk,concatImpl:()=>upe,equalImpl:()=>e9,expImpl:()=>t9,expm1Impl:()=>a9,floorDivImpl:()=>r9,floorImpl:()=>n9,gatherNdImpl:()=>dpe,gatherV2Impl:()=>ppe,greaterEqualImpl:()=>i9,greaterImpl:()=>s9,lessEqualImpl:()=>l9,lessImpl:()=>o9,linSpaceImpl:()=>cpe,logImpl:()=>u9,maxImpl:()=>hpe,maximumImpl:()=>d9,minimumImpl:()=>p9,multiplyImpl:()=>ly,negImpl:()=>fpe,notEqualImpl:()=>c9,prodImpl:()=>ype,raggedGatherImpl:()=>Ipe,raggedRangeImpl:()=>Spe,raggedTensorToTensorImpl:()=>Cpe,rangeImpl:()=>Npe,rsqrtImpl:()=>h9,scatterImpl:()=>Rpe,sigmoidImpl:()=>Epe,simpleAbsImpl:()=>rpe,sliceImpl:()=>Mpe,sparseFillEmptyRowsImpl:()=>Fpe,sparseReshapeImpl:()=>$pe,sparseSegmentReductionImpl:()=>Dpe,sqrtImpl:()=>Ppe,squaredDifferenceImpl:()=>m9,staticRegexReplaceImpl:()=>f9,stridedSliceImpl:()=>_pe,stringNGramsImpl:()=>zpe,stringSplitImpl:()=>Wpe,stringToHashBucketFastImpl:()=>Bpe,subImpl:()=>g9,tileImpl:()=>Upe,topKImpl:()=>Gpe,transposeImpl:()=>gpe,uniqueImpl:()=>Hpe});function Xk(e,t){Array.isArray(e)||(e=[e]),e.forEach(a=>{a!=null&&v.assert(a.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}function rpe(e){let t=new Float32Array(e.length);for(let a=0;a{let i=I.assertAndGetBroadcastShape(t,a),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),d=v.getTypedArrayFromDType(s,u),c=t.length,p=a.length,h=v.computeStrides(t),m=v.computeStrides(a),f=I.getBroadcastDims(t,i),g=I.getBroadcastDims(a,i);if(f.length+g.length===0)for(let y=0;yA[C]=0);let b=v.locToIndex(A,c,h),w=x.slice(-p);g.forEach(C=>w[C]=0);let S=v.locToIndex(w,p,m);d[y]=e(n[b],r[S])}return[d,i]}}function iy(e){let{inputs:t,backend:a}=e,{real:n,imag:r}=t,s=a.data.get(n.dataId).values,i=a.data.get(r.dataId).values,o=a.makeTensorInfo(n.shape,"complex64"),l=a.data.get(o.dataId);return l.complexTensorInfos={real:a.makeTensorInfo(n.shape,"float32",s),imag:a.makeTensorInfo(r.shape,"float32",i)},o}function eg(e,t,a="float32"){if(a==="complex64"){let r=eg(e,t,"float32"),s=eg(e,t,"float32");return iy({inputs:{real:r,imag:s},backend:e})}let n=v.makeZerosTypedArray(v.sizeFromShape(t),a);return e.makeTensorInfo(t,a,n)}function xA(e){let{inputs:t,backend:a}=e,{x:n}=t;return a.incRef(n.dataId),{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function spe(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.data.get(n.dataId).complexTensorInfos.real,s=a.data.get(r.dataId).values;return a.makeTensorInfo(r.shape,r.dtype,s)}function Kk(e,t,a,n){if(n==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(n==="bool"){let r=v.toTypedArray([0],a),[s,i]=Ua((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${a} to ${n}`)}function Dh(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return xA({inputs:{x:r},backend:a});let d=eg(a,r.shape,r.dtype),c=Dh({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),p=iy({inputs:{real:c,imag:d},backend:a});return a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(c),p}if(r.dtype==="complex64"){let d=spe({inputs:{input:r},backend:a}),c=Dh({inputs:{x:d},backend:a,attrs:{dtype:s}});return a.disposeIntermediateTensorInfo(d),c}if(!v.hasEncodingLoss(r.dtype,s)){let d=xA({inputs:{x:r},backend:a});return{dataId:d.dataId,shape:d.shape,dtype:s}}let i=a.data.get(r.dataId).values,[o,l,u]=Kk(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}function rn(e,t,a,n){return a==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;Xk([i,o],e);let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=i.dtype==="string"?I.fromUint8ToStringArray(u):u,p=i.dtype==="string"?I.fromUint8ToStringArray(d):d,h=n||i.dtype,[m,f]=t(i.shape,o.shape,c,p,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=Dh({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),d=l.data.get(u.dataId),c=d.complexTensorInfos.real,p=d.complexTensorInfos.imag,h=l.data.get(c.dataId).values,m=l.data.get(p.dataId).values,f=Dh({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,x=g.complexTensorInfos.imag,A=l.data.get(y.dataId).values,b=l.data.get(x.dataId).values,[w,S,C]=a(i.shape,o.shape,h,m,A,b),N=l.makeTensorInfo(C,"float32",w),M=l.makeTensorInfo(C,"float32",S),F=iy({inputs:{real:N,imag:M},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(N),l.disposeIntermediateTensorInfo(M),F}else{let u=l.data.get(i.dataId).values,d=l.data.get(o.dataId).values,c=n||i.dtype,[p,h]=t(i.shape,o.shape,u,d,c);return l.makeTensorInfo(h,c,p)}}}function oy(e){return(t,a,n,r,s,i)=>{let o=I.assertAndGetBroadcastShape(t,a),l=v.sizeFromShape(o),u=o.length,d=v.computeStrides(o),c=v.getTypedArrayFromDType("float32",l),p=v.getTypedArrayFromDType("float32",l),h=I.getBroadcastDims(t,o),m=I.getBroadcastDims(a,o),f=I.mergeRealAndImagArrays(n,r),g=I.mergeRealAndImagArrays(s,i),y=t.length,x=v.computeStrides(t),A=a.length,b=v.computeStrides(a);if(h.length+m.length===0)for(let w=0;wC[T]=0);let N=v.locToIndex(C,y,x),M=S.slice(-A);m.forEach(T=>M[T]=0);let F=v.locToIndex(M,A,b),E=e(f[N*2],f[N*2+1],g[F*2],g[F*2+1]);c[w]=E.real,p[w]=E.imag}return[c,p,o]}}var Yk=Ua((e,t)=>e+t),ipe=oy((e,t,a,n)=>({real:e+a,imag:t+n})),Wxe=rn(Mr,Yk,ipe);function ope(e,t,a,n,r){let s=v.sizeFromShape(n),i=v.makeZerosTypedArray(r,a);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function lpe(e,t,a,n=!1){let r=e.shape[0],s=e.shape[1],i=Te([r,a],t.dtype);for(let o=0;o=a||(n?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}var Zk=Ua((e,t)=>e&t),Bxe=rn(ji,Zk);function pr(e){return(t,a,n)=>{let r=v.getArrayFromDType(a,t.length);for(let s=0;s{let{x:i}=n;Xk(i,e);let o=s,l=o.data.get(i.dataId).values,u;if(i.dtype==="string"){if(!Array.isArray(l))throw new Error("String tensor's value was not an instance of Array");u=I.fromUint8ToStringArray(l)}else u=l;let d=a||i.dtype,c=t(u,d,r);return o.makeTensorInfo(i.shape,d,c)}}var Qk=pr(e=>Math.ceil(e)),Vxe=Vs(cs,Qk);function upe(e,t,a,n){let r=v.getArrayFromDType(a,v.sizeFromShape(t));if(n&&a!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=a==="string"?I.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),Uxe=rn(ms,e9,null,"bool"),t9=pr(e=>Math.exp(e)),Gxe=Vs(fs,t9,"float32"),a9=pr(e=>Math.expm1(e)),Hxe=Vs(gs,a9),n9=pr(e=>Math.floor(e)),jxe=Vs(ys,n9),r9=Ua((e,t)=>Math.floor(e/t)),qxe=rn(xs,r9,null,"int32");function dpe(e,t,a,n,r,s,i,o,l){let u=Te([n,s],a);for(let d=0;d=l/s)throw new Error(`Invalid indices: ${c} does not index into ${o}`);for(let h=0;he>t?1:0),Xxe=rn(As,s9,null,"bool"),i9=Ua((e,t)=>e>=t?1:0),Kxe=rn(bs,i9,null,"bool"),o9=Ua((e,t)=>ee<=t?1:0),Zxe=rn(ws,l9,null,"bool");function cpe(e,t,a){let n=(t-e)/(a-1),r=v.makeZerosTypedArray(a,"float32");r[0]=e;for(let s=1;sMath.log(e)),Jxe=Vs(ks,u9);function hpe(e,t,a,n){let r=v.getTypedArrayFromDType(n,v.sizeFromShape(a));for(let s=0;so)&&(o=u)}r[s]=o}return r}var d9=Ua((e,t)=>Math.max(e,t)),Qxe=rn(Is,d9),p9=Ua((e,t)=>Math.min(e,t)),e5e=rn(Ss,p9),ly=Ua((e,t)=>e*t),mpe=oy((e,t,a,n)=>({real:e*a-t*n,imag:e*n+t*a})),t5e=rn(Ts,ly,mpe);function fpe(e,t,a){let n=v.createScalarValue(-1,a);return ly([],t,n,e,a)}var c9=Ua((e,t)=>e!==t?1:0),a5e=rn(Cs,c9,null,"bool");function gpe(e,t,a,n,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(a,v.sizeFromShape(r));for(let d=0;d{if(n<0||n>=a){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${n} is not in [0, ${a})`)}})}function Ape(e,t){for(let a=0;ar)throw new Error("Ragged splits must not point past values");for(let s=1;sn[s])throw new Error("Ragged splits must be sorted in ascending order")}}function bpe(e,t,a,n){let r=[],s=0,i=t.length-1+a.length,o=new Array(i).fill(null).map(()=>[0]);Ape(a,n);let l=1;for(let u=0;u=0){let f=o[m],g=f[f.length-1]-h[d];for(let y=d;yr[i]=s)}return t}function AA(e,t){let a=e.slice(0,t);for(;a.length1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,d=[];o||d.push(t[0]),l||d.push(r[0]),u||d.push(i[0]);for(let g=1;g0&&xy)b=0;else if(b=Math.ceil(Math.abs((x-y)/A)),b>bA)throw new Error(`Requires ((limit - start) / delta) <= ${bA}`);p[g+1]=p[g]+b}let h=p[c],m=v.getArrayFromDType(a,h),f=0;for(let g=0;gn&&(n=s)}return n}static getMaxWidthValueRowID(t){let a=t.length;if(a===0)return 0;let n=0,r=t[0],s=0;for(let i=1;i"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(t,a,n,r){let s=t.length,i=[];for(let o=0;o0&&i.length!==t[s-1])throw new Error("Invalid row split size.");return i}calculateOutputIndexValueRowID(t,a,n,r){let s=t.length,i=[];if(s===0)return[];let o=0,l=t[0];if(l>=a.length)throw new Error(`Got currentValueRowId=${l}, which is not less than ${a.length}`);let u=a[l];i.push(u);for(let d=1;d=0&&(++o,o=a.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${a.length}`);u=a[c]}i.push(u)}if(i.length!==t.length)throw new Error("Invalid row ids.");return i}calculateOutputIndex(t,a,n,r){let s=this.getRowPartitionTensor(t),i=this.getRowPartitionTypeByDimension(t);switch(i){case Nn.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,a,n,r);case Nn.ROW_SPLITS:if(s.length-1>a.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${a.length}`);return this.calculateOutputIndexRowSplit(s,a,n,r);default:throw new Error(`Unsupported partition type: ${Nn[i]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let a=this.rowPartitionTypes[0];switch(a){case Nn.FIRST_DIM_SIZE:return t[0];case Nn.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Nn.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Nn[a]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),a=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let i=n.length-2;i>=0;--i)n[i]=n[i+1]*a[i+1];let r=wA(a,!1),s=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(r));if(n[0]*a[0]>0){let i=this.calculateFirstParentOutputIndex(t,n[0],a[0]);for(let o=1;o<=this.raggedRank;++o)i=this.calculateOutputIndex(o-1,i,n[o],a[o]);this.setOutput(this.raggedRank,i,s,r)}return[r,s]}setOutput(t,a,n,r){if(n.length===0)return;let s=this.values,i=n,o=r.slice();o=o.slice(t+1);let l=v.sizeFromShape(o),u=a.length,d=this.defaultValue;if(d.length!==l&&d.length!==1){let m=this.defaultValueShape;Pe(()=>{let f=Q(d,m);d=Ai(f,o).dataSync()})}let c=0,p=0,h=0;for(let m=0;m<=u;++m){let f=m=u){let g=n.length;f=Math.floor(g/l)}if(f>h)if(this.defaultValue.length===1)i.subarray(h*l,f*l).fill(this.defaultValue[0]),h=f;else for(;f>h;){let g=i.slice(h*l);vA(g,d,l),++h}f<0?(c=m+1,p=h):(c=m,p=h,h=p+1)}}};function vA(e,t,a){for(let n=0;n= 0`);if(n<-1)throw new Error(`Dimension ${n} must be >= -1`);n=-1}a.push(n)}return a}function Cpe(e,t,a,n,r,s,i,o,l,u){return new Tpe(e,t,a,n,r,s,i,o,l,u).compute()}function Npe(e,t,a,n){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,n);let o=Math.abs(Math.ceil((t-e)/a)),l=v.makeZerosTypedArray(o,n);t1/Math.sqrt(e)),n5e=Vs(Ns,h9);function Rpe(e,t,a,n,r,s,i,o,l,u){let d=[n/r,r],c=e.values,p=t.values;if(n===0)return Te(a,t.dtype);let h=l instanceof Rt?l:Te(d,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m=n/r)throw new Error(`Invalid indices: ${f} does not index into ${a}`);for(let y=0;y1/(1+Math.exp(-e))),r5e=Jk(Rs,e=>1/(1+Math.exp(-e)));function Mpe(e,t,a,n,r){let s=wt.isSliceContinous(n,t,a),i=v.sizeFromShape(a),o=v.computeStrides(n);if(s){let c=wt.computeFlatOffset(t,o);return r==="string"?e.slice(c,c+i):e.subarray(c,c+i)}let l=r==="string"?I.fromUint8ToStringArray(e):e,u=Te(n,r,l),d=Te(a,r);for(let c=0;cm+t[f]);d.set(u.get(...h),...p)}return r==="string"?I.fromStringArrayToUint8(d.values):d.values}function Fpe(e,t,a,n,r,s,i){let o=t[0],l=s[0],u=new Array(l),d=new Array(o),c=t[1];if(l===0){if(o!==0)throw new Error(I.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(a,0),y=v.getArrayFromDType(r,0);return[g,[0,c],y,u,d]}let p=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(I.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],p=p&&y>=h,h=y}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&p){let g=e,y=n;for(let x=0;x0){p[c-1]=1;for(let f=c-2;f>=0;--f)p[f]=p[f+1]*n[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(a,i*o);for(let f=0;f0?r[o-1]+1:0;if(d<0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=t.slice();c[0]=d;let p=c.reduce((x,A)=>x*A,1),h=v.getArrayFromDType(a,p);if(o===0)return d>0&&h.fill(i),[h,c];if(d<=0)throw new Error(I.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let x=0;if(f=x)throw new Error(I.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=d)throw new Error(I.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,d));y>g&&h.fill(i,g*u,y*u);for(let A=m;A=l[0])throw new Error(I.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(A,n[A],l[0]));for(let w=0;wo)break}return gMath.sqrt(e)),s5e=Jk(Es,e=>Math.sqrt(e)),m9=Ua((e,t)=>{let a=e-t;return a*a}),i5e=rn(Ms,m9),f9=pr((e,t)=>{let{pattern:a,replaceGlobal:n,rewrite:r}=t;return e.replace(new RegExp(a,n?"g":""),r)}),o5e=Vs(Gu,f9);function _pe(e,t,a,n){let r=Te(e,t.dtype);for(let s=0;s0?0:i-o),p=0;p+=l*this.leftPad.length;for(let y=0;yy.forEach(x=>m[f++]=x);for(let y=0;y0){g(e[c+d-1]);for(let y=0;y0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l=o;if(u=u&&t[l]<=a,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${a}]`);o=t[l]}if(o!==a)throw new Error(`Last split value must be data size. Expected ${a}, got ${o}`)}let r=n-1,s=v.getArrayFromDType("int32",n);if(a===0||n===0){let o=new Array(a);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(d=>{u+=this.getNumNGrams(l,d)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o{let c=t[o+1]-t[o],p=this.getNumNGrams(c,d);this.createNGrams(e,l,i,u,p,d),u+=p}),this.preserveShort&&u===s[o]){let d=t[o+1]-t[o];if(d===0)continue;let c=d+2*this.padWidth;this.createNGrams(e,l,i,u,1,c)}}return[i,s]}};function zpe(e,t,a,n,r,s,i,o){return new Ope(a,n,r,s,i,o).compute(e,t)}function Lpe(e,t,a,n){if(!e.length)return;if(t.length===0){for(let s=0;se-t),Vpe=oy((e,t,a,n)=>({real:e-a,imag:t-n})),l5e=rn(Fs,g9,Vpe);function Upe(e,t){let a=new Array(e.rank);for(let r=0;r{let a=t.value-e.value;return a===0?e.index-t.index:a};function y9(e,t,a=0,n=e.length-1){for(;n>a;){if(n-a>600){let o=n-a+1,l=t-a+1,u=Math.log(o),d=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*d*(o-d)/o)*Math.sign(l-o/2),p=Math.max(a,Math.floor(t-l*d/o+c)),h=Math.min(n,Math.floor(t+(o-l)*d/o+c));y9(e,t,p,h)}let r=e[t],s=a,i=n;for(v.swap(e,a,t),Ld(e[n],r)>0&&v.swap(e,a,n);s0;)i=i-1}Ld(e[a],r)===0?v.swap(e,a,i):(i=i+1,v.swap(e,i,n)),i<=t&&(a=i+1),t<=i&&(n=i-1)}}function Gpe(e,t,a,n,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(a,i*n),u=v.getTypedArrayFromDType("int32",i*n);for(let c=0;cm[A]={value:x,index:A}),n{for(let g=0;g`T${a}`),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(a=>{e.push(`let v${a} = get${a}ByOutputCoords(coords);`)});let t=this.variableNames.map(a=>`v${a}`).join(" + ");return` + `}};function at({opType:e,cpuKernelImpl:t,dtype:a}){return({inputs:n,backend:r})=>{let{x:s}=n,i=r,o=a||s.dtype;if(i.shouldExecuteOnCPU([s])&&t!=null){let u=i.tensorMap.get(s.dataId),p=t(u.values,o);return i.makeTensorInfo(s.shape,o,p)}let l=new ed(s.shape,e);return i.runWebGPUProgram(l,[s],o)}}function ta({opType:e,cpuKernelImpl:t,supportsComplex:a=!1,dtype:n}){return({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(a&&i.dtype==="complex64"){let c=l.tensorMap.get(i.dataId),d=l.tensorMap.get(o.dataId),h,m;if(e!==Pe.MUL)[h,m]=[[c.complexTensorInfos.real,d.complexTensorInfos.real],[c.complexTensorInfos.imag,d.complexTensorInfos.imag]].map(g=>{let[y,x]=g,A={dataId:y.dataId,dtype:y.dtype,shape:i.shape},b={dataId:x.dataId,dtype:x.dtype,shape:o.shape},w=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(w,[A,b],pa(y.dtype,x.dtype))});else{let g=new sA(Pe.COMPLEX_MULTIPLY_REAL,i.shape,o.shape),y=new sA(Pe.COMPLEX_MULTIPLY_IMAG,i.shape,o.shape),x=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:i.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:i.shape},{dataId:d.complexTensorInfos.real.dataId,dtype:d.complexTensorInfos.real.dtype,shape:o.shape},{dataId:d.complexTensorInfos.imag.dataId,dtype:d.complexTensorInfos.imag.dtype,shape:o.shape}];h=l.runWebGPUProgram(g,x,"float32"),m=l.runWebGPUProgram(y,x,"float32")}let f=ll({inputs:{real:h,imag:m},backend:l});return l.disposeData(h.dataId),l.disposeData(m.dataId),f}let u=n||pa(i.dtype,o.dtype);if((i.dtype==="string"||o.dtype==="string"||l.shouldExecuteOnCPU([i,o]))&&t!=null){let c=l.tensorMap.get(i.dataId).values,d=l.tensorMap.get(o.dataId).values,h=i.dtype==="string"?C.fromUint8ToStringArray(c):c,m=i.dtype==="string"?C.fromUint8ToStringArray(d):d,[f,g]=t(i.shape,o.shape,h,m,u);return l.makeTensorInfo(g,u,f)}let p=new Th(e,i.shape,o.shape);return l.runWebGPUProgram(p,[i,o],u)}}var{addImpl:gde,castImpl:yde,ceilImpl:xde,concatImpl:Ade,equalImpl:bde,expImpl:vde,expm1Impl:wde,floorImpl:kde,floorDivImpl:Ide,gatherNdImpl:Sde,gatherV2Impl:Cde,greaterEqualImpl:Tde,greaterImpl:Nde,lessEqualImpl:Rde,lessImpl:Ede,logImpl:Mde,maxImpl:$de,maximumImpl:Pde,minimumImpl:_de,multiplyImpl:Fde,negImpl:Dde,notEqualImpl:Ode,prodImpl:zde,rangeImpl:Lde,rsqrtImpl:Wde,scatterImpl:Bde,simpleAbsImpl:Vde,sliceImpl:Ude,stridedSliceImpl:Gde,stringNGramsImpl:Hde,subImpl:jde,tileImpl:qde,topKImpl:Xde,transposeImpl:Kde,uniqueImpl:dye}=t0,Yde=at({opType:le.ABS,cpuKernelImpl:Vde}),Zde={kernelName:iu,backendName:"webgpu",kernelFunc:Yde},Jde=at({opType:le.ACOS}),Qde={kernelName:oi,backendName:"webgpu",kernelFunc:Jde},epe=at({opType:le.ACOSH}),tpe={kernelName:li,backendName:"webgpu",kernelFunc:epe},ape=ta({opType:Pe.ADD,cpuKernelImpl:gde,supportsComplex:!0}),npe={kernelName:os,backendName:"webgpu",kernelFunc:ape},rpe=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,a)=>`T${a}`),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(a=>{e.push(`let v${a} = get${a}ByOutputCoords(coords);`)});let t=this.variableNames.map(a=>`v${a}`).join(" + ");return` ${ue("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; @@ -5926,7 +5926,7 @@ return a / b;`,fQ=` } } } - `}};function Pce(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return an({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>Qt(o,l)),s=n.map(o=>o.shape),i=new Dce(s);return a.runWebGPUProgram(i,n,r)}var _ce={kernelName:Pi,backendName:"webgpu",kernelFunc:Pce},Oce=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let a=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return` + `}};function spe(e){let{inputs:t,backend:a}=e,n=t;if(n.length===1)return tn({inputs:{x:n[0]},backend:a});let r=n.map(o=>o.dtype).reduce((o,l)=>pa(o,l)),s=n.map(o=>o.shape),i=new rpe(s);return a.runWebGPUProgram(i,n,r)}var ipe={kernelName:ui,backendName:"webgpu",kernelFunc:spe},ope=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let a=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return` var tile : array, ${this.workgroupSize[0]}>; ${ue()} { var x = i32(workgroupId.x) * ${e} + i32(localId.x); @@ -5945,7 +5945,7 @@ return a / b;`,fQ=` [localId.y]); } } - `}},zce=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=new Array(t);for(let n=0;n=32768&&a>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",a=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` + `}};function Ek(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let a=new Array(t);for(let n=0;n=32768&&a>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",a=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` if (isnan(candidate)) { bestValue = uniforms.NAN; } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) @@ -6004,7 +6004,7 @@ return a / b;`,fQ=` ${n} } } - `}},Bce={mean:"float32",all:"bool",any:"bool"};function gl(e,t,a,n,r){let s=e.shape.length,i=[],o=v.parseAxisParam(t,e.shape),l=o,u=I.getAxesPermutation(l,s),d=e;u!=null&&(d=ir({inputs:{x:e},attrs:{perm:u},backend:r}),l=I.getInnerMostAxes(l.length,s),i.push(d)),I.assertAxesAreInnerMostDims(n,l,s);let[c,p]=I.computeOutAndReduceShapes(d.shape,l),h=c;a&&(h=I.expandShapeToKeepDim(c,o));let m;if((n==="max"||n==="prod")&&r.shouldExecuteOnCPU([d])){let f=r.tensorMap.get(d.dataId).values;switch(n){case"max":let g=lce(f,v.sizeFromShape(p),h,e.dtype);m=r.makeTensorInfo(h,e.dtype,g);break;case"prod":let{outVals:y,outShape:x,outDtype:A}=mce(d.shape,d.dtype,f,l);m=r.makeTensorInfo(x,A,y);break;default:throw new Error(`${n} CPU implementation is not yet supported.`)}}else{let f=v.sizeFromShape(p),g=v.sizeFromShape(d.shape)/f,y={windowSize:f,inSize:f,batchSize:g,outSize:1},x=Bce[n]||Lp(e.dtype),A=[{type:"int32",data:[f]}],b=new Wce(y,n,r.device.limits.maxComputeWorkgroupSizeX),w=r.runWebGPUProgram(b,[d],x,A);i.push(w),m=ke({inputs:{x:w},attrs:{shape:h},backend:r})}return i.forEach(f=>r.disposeData(f.dataId)),m}function Vce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return gl(r,i,s,"all",a)}var Uce={kernelName:_i,backendName:"webgpu",kernelFunc:Vce};function Gce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return gl(r,i,s,"any",a)}var Hce={kernelName:Oi,backendName:"webgpu",kernelFunc:Gce},A9=class{constructor(e,t,a){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=a==="min"?"<":">";let[r,s]=I.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=me(this.outputShape),v.sizeFromShape(s)<32?(this.type="plain",this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Nr(this.inputShape.length-1)}`,a=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let r=0;rr.disposeData(f.dataId)),m}function cpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"all",a)}var hpe={kernelName:di,backendName:"webgpu",kernelFunc:cpe};function mpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"any",a)}var fpe={kernelName:pi,backendName:"webgpu",kernelFunc:mpe},Mk=class{constructor(e,t,a){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=a==="min"?"<":">";let[r,s]=C.computeOutAndReduceShapes(e,n);this.outputShape=r.length===0?[1]:r,this.dispatchLayout=me(this.outputShape),v.sizeFromShape(s)<32?(this.type="plain",this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=de(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Ir(this.inputShape.length-1)}`,a=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let r=0;r u32 { return ((a - 1u) / b + 1u); } @@ -6070,7 +6070,7 @@ return a / b;`,fQ=` setOutputAtIndexI32(index, bestIndex); } } - `}};function jce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=I.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=ir({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=I.getInnerMostAxes(i.length,l.shape.length)),I.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let d=new A9(l.shape,i[0],"max"),c=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],p=a.runWebGPUProgram(d,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),p}var qce={kernelName:hu,backendName:"webgpu",kernelFunc:jce};function Xce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=I.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=ir({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=I.getInnerMostAxes(i.length,l.shape.length)),I.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let d=new A9(l.shape,i[0],"min"),c=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],p=a.runWebGPUProgram(d,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),p}var Kce={kernelName:mu,backendName:"webgpu",kernelFunc:Xce},Yce=at({opType:le.ASIN}),Zce={kernelName:zi,backendName:"webgpu",kernelFunc:Yce},Jce=at({opType:le.ASINH}),Qce={kernelName:Li,backendName:"webgpu",kernelFunc:Jce},ehe=at({opType:le.ATAN}),the={kernelName:Wi,backendName:"webgpu",kernelFunc:ehe},ahe=aa({opType:De.ATAN2}),nhe={kernelName:Vi,backendName:"webgpu",kernelFunc:ahe},rhe=at({opType:le.ATANH}),she={kernelName:Bi,backendName:"webgpu",kernelFunc:rhe},ihe=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + `}};function gpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=new Mk(l.shape,i[0],"max"),c=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],d=a.runWebGPUProgram(p,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),d}var ype={kernelName:ou,backendName:"webgpu",kernelFunc:gpe};function xpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s}=n,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=nr({inputs:{x:r},backend:a,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=new Mk(l.shape,i[0],"min"),c=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],d=a.runWebGPUProgram(p,[l],"int32",c);return u.forEach(h=>a.disposeData(h.dataId)),d}var Ape={kernelName:lu,backendName:"webgpu",kernelFunc:xpe},bpe=at({opType:le.ASIN}),vpe={kernelName:ci,backendName:"webgpu",kernelFunc:bpe},wpe=at({opType:le.ASINH}),kpe={kernelName:hi,backendName:"webgpu",kernelFunc:wpe},Ipe=at({opType:le.ATAN}),Spe={kernelName:mi,backendName:"webgpu",kernelFunc:Ipe},Cpe=ta({opType:Pe.ATAN2}),Tpe={kernelName:gi,backendName:"webgpu",kernelFunc:Cpe},Npe=at({opType:le.ATANH}),Rpe={kernelName:fi,backendName:"webgpu",kernelFunc:Npe},Epe=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6085,7 +6085,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, value); } } - `}},pp=class{constructor(e,t,a=!1,n=!1,r=!1){if(this.variableNames=["x"],this.uniforms="strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool2D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},rp=class{constructor(e,t,a=!1,n=!1,r=!1){if(this.variableNames=["x"],this.uniforms="strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool2D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6126,7 +6126,7 @@ return a / b;`,fQ=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}},uy=class{constructor(e,t,a=!1,n=!1,r=!1){if(this.variableNames=["x"],this.uniforms="strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool3D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},Z3=class{constructor(e,t,a=!1,n=!1,r=!1){if(this.variableNames=["x"],this.uniforms="strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&a)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=a,this.flattenPositions=n,this.includeBatchIndex=r,this.shaderKey=`pool3D_${t}_${a}_${n}_${r}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6175,7 +6175,7 @@ return a / b;`,fQ=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}};function b9(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return gl(r,s,i,"max",a)}var ohe={kernelName:Io,backendName:"webgpu",kernelFunc:b9};function v9(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return gl(r,i,s,"mean",a)}var lhe={kernelName:To,backendName:"webgpu",kernelFunc:v9};function w9(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return an({inputs:{x:e},backend:n});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.padInfo.type==="VALID"){let i=e.shape.length,o=ke({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=v9({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=b9({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=ke({inputs:{x:l},backend:n,attrs:{shape:t.outShape}});return n.disposeData(o.dataId),n.disposeData(l.dataId),u}let r,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?r=new ihe(t):(a==="avg"?r=new pp(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new pp(t,"max")),s.push({type:"int32",data:[t.padInfo.top,t.padInfo.left]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]},{type:"int32",data:[t.inHeight,t.inWidth]},{type:"int32",data:[t.effectiveFilterHeight,t.effectiveFilterWidth]})),n.runWebGPUProgram(r,[e],e.dtype,s)}function uhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=I.computePool2DInfo(r.shape,s,i,1,o,l);return w9(r,u,"avg",a)}var dhe={kernelName:Ui,backendName:"webgpu",kernelFunc:uhe};function phe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,d=[1,1,1],c=I.computePool3DInfo(r.shape,s,i,d,o,u,l),p=new uy(c,"avg"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(p,[r],r.dtype,h)}var che={kernelName:fu,backendName:"webgpu",kernelFunc:phe},hhe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function $k(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=n;return ul(r,s,i,"max",a)}var Mpe={kernelName:oo,backendName:"webgpu",kernelFunc:$k};function Pk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{keepDims:s,axis:i}=n;return ul(r,i,s,"mean",a)}var $pe={kernelName:po,backendName:"webgpu",kernelFunc:Pk};function _k(e,t,a,n){if(t.filterWidth===1&&t.filterHeight===1&&v.arraysEqual(t.inShape,t.outShape))return tn({inputs:{x:e},backend:n});if(t.filterWidth===t.inWidth&&t.filterHeight===t.inHeight&&t.batchSize===1&&t.padInfo.type==="VALID"){let i=e.shape.length,o=ke({inputs:{x:e},backend:n,attrs:{shape:[e.shape[i-3]*e.shape[i-2],e.shape[i-1]]}}),l;a==="avg"?l=Pk({inputs:{x:o},backend:n,attrs:{axis:0,keepDims:!1}}):(v.assert(a==="max",()=>`Invalid pool type ${a}`),l=$k({inputs:{x:o},backend:n,attrs:{reductionIndices:0,keepDims:!1}}));let u=ke({inputs:{x:l},backend:n,attrs:{shape:t.outShape}});return n.disposeData(o.dataId),n.disposeData(l.dataId),u}let r,s=[{type:"int32",data:[t.strideHeight,t.strideWidth]}];return t.filterHeight===1&&t.filterWidth===1?r=new Epe(t):(a==="avg"?r=new rp(t,"avg"):(v.assert(a==="max",()=>`Invalid pool type ${a}`),r=new rp(t,"max")),s.push({type:"int32",data:[t.padInfo.top,t.padInfo.left]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]},{type:"int32",data:[t.inHeight,t.inWidth]},{type:"int32",data:[t.effectiveFilterHeight,t.effectiveFilterWidth]})),n.runWebGPUProgram(r,[e],e.dtype,s)}function Ppe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return _k(r,u,"avg",a)}var _pe={kernelName:yi,backendName:"webgpu",kernelFunc:Ppe};function Fpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,p=[1,1,1],c=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"avg"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var Dpe={kernelName:uu,backendName:"webgpu",kernelFunc:Fpe},Ope=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool2DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -6214,7 +6214,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},mhe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},zpe=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool3DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -6263,7 +6263,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}};function fhe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=I.computePool3DInfo(i.shape,o,l,1,u,d),p=new mhe(c),h=1/(c.filterDepth*c.filterHeight*c.filterWidth),m=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outDepth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[h]}];return a.runWebGPUProgram(p,[r],i.dtype,m)}var ghe={kernelName:yp,backendName:"webgpu",kernelFunc:fhe};function yhe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;ay([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,d=I.computePool2DInfo(i.shape,o,l,1,u),c=new hhe(d),p=1/(d.filterHeight*d.filterWidth),h=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]},{type:"float32",data:[p]}];return a.runWebGPUProgram(c,[r],i.dtype,h)}var xhe={kernelName:gp,backendName:"webgpu",kernelFunc:yhe};function Ahe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return x0({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var bhe={kernelName:Gi,backendName:"webgpu",kernelFunc:Ahe},vhe=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Dt(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=Dt(this.rank),t=whe(this.rank),a;return this.start.length===1?a=this.outputShape.map((n,r)=>"sourceLoc = uniforms.start + coords;"):a=this.outputShape.map((n,r)=>`sourceLoc.${ag[r]} = uniforms.start.${Nr(r)} + coords.${ag[r]};`),` + `}};function Lpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=n,c=C.computePool3DInfo(i.shape,o,l,1,u,p),d=new zpe(c),h=1/(c.filterDepth*c.filterHeight*c.filterWidth),m=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outDepth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[h]}];return a.runWebGPUProgram(d,[r],i.dtype,m)}var Wpe={kernelName:dp,backendName:"webgpu",kernelFunc:Lpe};function Bpe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s;q3([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=n,p=C.computePool2DInfo(i.shape,o,l,1,u),c=new Ope(p),d=1/(p.filterHeight*p.filterWidth),h=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.effectiveFilterHeight-1-p.padInfo.top,p.effectiveFilterWidth-1-p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]},{type:"float32",data:[d]}];return a.runWebGPUProgram(c,[r],i.dtype,h)}var Vpe={kernelName:up,backendName:"webgpu",kernelFunc:Bpe};function Upe(e){let{inputs:t,backend:a,attrs:n}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=n;return c0({a:r,b:s,transposeA:i,transposeB:o,backend:a})}var Gpe={kernelName:xi,backendName:"webgpu",kernelFunc:Upe},Hpe=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${Pt(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=Pt(this.rank),t=jpe(this.rank),a;return this.start.length===1?a=this.outputShape.map((n,r)=>"sourceLoc = uniforms.start + coords;"):a=this.outputShape.map((n,r)=>`sourceLoc.${X1[r]} = uniforms.start.${Ir(r)} + coords.${X1[r]};`),` ${ue("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; @@ -6273,16 +6273,16 @@ return a / b;`,fQ=` setOutputAtIndex(index, getSource(${t})); } } - `}},ag=["x","y","z","w","u","v"];function whe(e){if(e===1)return"sourceLoc";if(e<=6)return ag.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function od(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=wt.parseSliceParams(r,s,i);if(wt.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),p=Ace(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,p)}if(v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);let u=new vhe(o,l),d=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,d)}var khe={kernelName:zu,backendName:"webgpu",kernelFunc:od},Ihe=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=I.getReshaped(r.shape,s,o),u=I.getPermuted(l.length,s.length),d=I.getReshapedPermuted(r.shape,s,o),c=I.getSliceBeginCoords(i,s.length),p=I.getSliceSize(d,i,s.length),h=[],m=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),f=ir({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({inputs:{x:f},backend:a,attrs:{shape:d}}),y=od({inputs:{x:g},backend:a,attrs:{begin:c,size:p}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeData(x.dataId)),y},She={kernelName:gu,backendName:"webgpu",kernelFunc:Ihe},The=` + `}},X1=["x","y","z","w","u","v"];function jpe(e){if(e===1)return"sourceLoc";if(e<=6)return X1.slice(0,e).map(t=>`sourceLoc.${t}`).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}function td(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,size:i}=n,[o,l]=Nt.parseSliceParams(r,s,i);if(Nt.assertParamsValid(r,o,l),a.shouldExecuteOnCPU([r])||r.dtype==="string"){let c=a.tensorMap.get(r.dataId),d=Ude(c.values,o,l,r.shape,r.dtype);return a.makeTensorInfo(l,r.dtype,d)}if(v.sizeFromShape(l)===0)return a.makeTensorInfo(l,r.dtype,[]);let u=new Hpe(o,l),p=[{type:"int32",data:o}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var qpe={kernelName:Pu,backendName:"webgpu",kernelFunc:td},Xpe=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,crops:i}=n;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),c=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(p,i,s.length),h=[],m=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),f=nr({inputs:{x:m},backend:a,attrs:{perm:u}}),g=ke({inputs:{x:f},backend:a,attrs:{shape:p}}),y=td({inputs:{x:g},backend:a,attrs:{begin:c,size:d}});return h.push(m),h.push(f),h.push(g),h.forEach(x=>a.disposeData(x.dataId)),y},Kpe={kernelName:du,backendName:"webgpu",kernelFunc:Xpe},Ype=` fn bincount_write(index: i32, value: f32) { - ${Bs("&result[index]","value","float32")} + ${ys("&result[index]","value","float32")} } -`,Che=` +`,Zpe=` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } -`,k9=class{constructor(e,t,a=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=a,a&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` - ${this.binaryOutput?Che:The} +`,Fk=class{constructor(e,t,a=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=a,a&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` + ${this.binaryOutput?Zpe:Ype} ${ue("index")} { ${this.rank===1?`if (index < uniforms.xShape) { let indexVal = i32(getX(index)); @@ -6299,7 +6299,7 @@ return a / b;`,fQ=` } }`} } - `}};function Nhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=v.sizeFromShape(r.shape),l=v.sizeFromShape(s.shape)>0,u=[i],d=s.dtype,c=Wa({backend:a,attrs:{shape:u,value:0,dtype:d}}),p=new k9([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(p,m,d,h,c)}var Rhe={kernelName:Hi,backendName:"webgpu",kernelFunc:Nhe},Ehe=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` + `}};function Jpe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i}=n,o=v.sizeFromShape(r.shape),l=v.sizeFromShape(s.shape)>0,u=[i],p=s.dtype,c=Wa({backend:a,attrs:{shape:u,value:0,dtype:p}}),d=new Fk([o],l),h=[{type:"int32",data:[i]}],m=l?[r,s]:[r];return a.runWebGPUProgram(d,m,p,h,c)}var Qpe={kernelName:Ai,backendName:"webgpu",kernelFunc:Jpe},ece=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { var s0 = 1.0; @@ -6324,7 +6324,7 @@ return a / b;`,fQ=` } } } - `}};function Mhe(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t;if(a.shouldExecuteOnCPU([n,r])){let d=a.tensorMap.get(n.dataId),c=a.tensorMap.get(r.dataId),p=d.values,h=c.values,m=I.assertAndGetBroadcastShape(Array.from(p),Array.from(h));return a.makeTensorInfo([m.length],"int32",Int32Array.from(m))}let s=v.sizeFromShape(n.shape),i=v.sizeFromShape(r.shape),o=Math.max(s,i),l=new Ehe(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var Fhe={kernelName:yu,backendName:"webgpu",kernelFunc:Mhe},I9=aa({opType:De.NOT_EQUAL,dtype:"bool",cpuKernelImpl:hce}),$he={kernelName:Cs,backendName:"webgpu",kernelFunc:I9};function oc(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return an({inputs:{x:r.complexTensorInfos.real},backend:a})}var Dhe={kernelName:Ep,backendName:"webgpu",kernelFunc:oc};function Phe(e,t){let a=new id(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function ng(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return an({inputs:{x:r},backend:a});let i=An(r.shape),o=ng({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=fl({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=oc({inputs:{input:r},backend:a}),o=ng({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=an({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.tensorMap.get(r.dataId).values,[o,l,u]=qpe(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return Phe(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=I9({inputs:{a:r,b:i},backend:a});return a.disposeData(i.dataId),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var _he={kernelName:qi,backendName:"webgpu",kernelFunc:ng},Ohe=at({opType:le.CEIL,cpuKernelImpl:Xpe}),zhe={kernelName:cs,backendName:"webgpu",kernelFunc:Ohe},Lhe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + `}};function tce(e){let{inputs:t,backend:a}=e,{s0:n,s1:r}=t;if(a.shouldExecuteOnCPU([n,r])){let p=a.tensorMap.get(n.dataId),c=a.tensorMap.get(r.dataId),d=p.values,h=c.values,m=C.assertAndGetBroadcastShape(Array.from(d),Array.from(h));return a.makeTensorInfo([m.length],"int32",Int32Array.from(m))}let s=v.sizeFromShape(n.shape),i=v.sizeFromShape(r.shape),o=Math.max(s,i),l=new ece(o),u=[{type:"int32",data:[s]},{type:"int32",data:[i]}];return a.runWebGPUProgram(l,[n,r],"int32",u)}var ace={kernelName:cu,backendName:"webgpu",kernelFunc:tce},Dk=ta({opType:Pe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Ode}),nce={kernelName:xo,backendName:"webgpu",kernelFunc:Dk};function tc(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.real},backend:a})}var rce={kernelName:kp,backendName:"webgpu",kernelFunc:tc};function sce(e,t){let a=new ed(e.shape,le.TO_INT),n=t.runWebGPUProgram(a,[e],"int32");return{dataId:n.dataId,shape:n.shape,dtype:n.dtype}}function K1(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dtype:s}=n;if(s==="complex64"){if(r.dtype==="complex64")return tn({inputs:{x:r},backend:a});let i=yn(r.shape),o=K1({inputs:{x:r},backend:a,attrs:{dtype:"float32"}}),l=ll({inputs:{real:o,imag:i},backend:a});return i.dispose(),a.disposeData(o.dataId),l}if(r.dtype==="complex64"){let i=tc({inputs:{input:r},backend:a}),o=K1({inputs:{x:i},backend:a,attrs:{dtype:s}});return a.disposeData(i.dataId),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=tn({inputs:{x:r},backend:a});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(a.shouldExecuteOnCPU([r])){let i=a.tensorMap.get(r.dataId).values,[o,l,u]=yde(i,r.shape,r.dtype,s);return a.makeTensorInfo(o,l,u)}if(s==="int32")return sce(r,a);if(s==="bool"){let i=a.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Dk({inputs:{a:r,b:i},backend:a});return a.disposeData(i.dataId),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var ice={kernelName:bi,backendName:"webgpu",kernelFunc:K1},oce=at({opType:le.CEIL,cpuKernelImpl:xde}),lce={kernelName:vi,backendName:"webgpu",kernelFunc:oce},uce=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6334,7 +6334,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, clampedValue); } } - `}},Whe=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` + `}},dce=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6345,7 +6345,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function Bhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o,l=[{type:"float32",data:[s]},{type:"float32",data:[i]}];return v.sizeFromShape(r.shape)%4===0?o=new Lhe(r.shape):o=new Whe(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var Vhe={kernelName:hs,backendName:"webgpu",kernelFunc:Bhe},Uhe=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` + `}};function pce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=n,o,l=[{type:"float32",data:[s]},{type:"float32",data:[i]}];return v.sizeFromShape(r.shape)%4===0?o=new uce(r.shape):o=new dce(r.shape),a.runWebGPUProgram(o,[r],r.dtype,l)}var cce={kernelName:ls,backendName:"webgpu",kernelFunc:pce},hce=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let re = abs(getRealByOutputIndex(index)); @@ -6357,7 +6357,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0)); } } - `}};function kA(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function Ghe(e){let{inputs:t,backend:a}=e,{x:n}=t,r=a.tensorMap.get(n.dataId),s=new Uhe(n.shape),i=[kA(n,r.complexTensorInfos.real),kA(n,r.complexTensorInfos.imag)];return a.runWebGPUProgram(s,i,i[0].dtype)}var Hhe={kernelName:Ap,backendName:"webgpu",kernelFunc:Ghe},jhe=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=I.computeOutShape(e,1),this.variableNames=e.map((t,a)=>`T${a}`),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let n=1;n`T${a}`),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let n=1;noc({inputs:{input:A},backend:a})),f=e.map(A=>A0({inputs:{input:A},backend:a})),g=Wd(m,t,a),y=Wd(f,t,a),x=fl({inputs:{real:g,imag:y},backend:a});return m.forEach(A=>a.disposeData(A.dataId)),f.forEach(A=>a.disposeData(A.dataId)),a.disposeData(g.dataId),a.disposeData(y.dataId),x}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let m=e.map(w=>{let S=[-1,v.sizeFromShape(w.shape.slice(t))];return ke({inputs:{x:w},backend:a,attrs:{shape:S}})}),f=m.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=I.computeOutShape(m.map(w=>w.shape),1),y=m[0].shape[0]===1,x=Kpe(f,g,n,y),A=I.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(A,n,x);return m.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let m=[];for(let g=0;gm.shape),u=new jhe(l),d=[],c=new Array(l.length-1);if(c.length>0){c[0]=l[0][1],d.push({type:"int32",data:[c[0]]});for(let m=1;ma.disposeData(m.dataId));let h=ke({inputs:{x:p},backend:a,attrs:{shape:o}});return a.disposeData(p.dataId),h}function Xhe(e,t,a){let n=I.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function S9(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);I.assertParamsConsistent(i,s);let o=I.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?an({inputs:{x:l[0]},backend:a}):Wd(l,s,a)}var Khe={kernelName:xu,backendName:"webgpu",kernelFunc:S9};function Yhe(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let d=N=>{switch(N){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},c=N=>{switch(N){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},p=e?` + `}};function h0(e){let{inputs:t,backend:a}=e,{input:n}=t,r=a.tensorMap.get(n.dataId);return tn({inputs:{x:r.complexTensorInfos.imag},backend:a})}var yce={kernelName:bp,backendName:"webgpu",kernelFunc:h0};function Pd(e,t,a){let n=e[0].dtype;if(n==="complex64"){let m=e.map(A=>tc({inputs:{input:A},backend:a})),f=e.map(A=>h0({inputs:{input:A},backend:a})),g=Pd(m,t,a),y=Pd(f,t,a),x=ll({inputs:{real:g,imag:y},backend:a});return m.forEach(A=>a.disposeData(A.dataId)),f.forEach(A=>a.disposeData(A.dataId)),a.disposeData(g.dataId),a.disposeData(y.dataId),x}let r=a.shouldExecuteOnCPU(e);if(n==="string"&&(r=!0),r){let m=e.map(w=>{let I=[-1,v.sizeFromShape(w.shape.slice(t))];return ke({inputs:{x:w},backend:a,attrs:{shape:I}})}),f=m.map(w=>({vals:a.readSync(w.dataId),shape:w.shape})),g=C.computeOutShape(m.map(w=>w.shape),1),y=m[0].shape[0]===1,x=Ade(f,g,n,y),A=C.computeOutShape(e.map(w=>w.shape),t),b=a.makeTensorInfo(A,n,x);return m.forEach(w=>a.disposeData(w.dataId)),b}let s=a.device.limits.maxStorageBuffersPerShaderStage-1;if(e.length>s){let m=[];for(let g=0;gm.shape),u=new gce(l),p=[],c=new Array(l.length-1);if(c.length>0){c[0]=l[0][1],p.push({type:"int32",data:[c[0]]});for(let m=1;ma.disposeData(m.dataId));let h=ke({inputs:{x:d},backend:a,attrs:{shape:o}});return a.disposeData(d.dataId),h}function xce(e,t,a){let n=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape.slice(0,t)),v.sizeFromShape(r.shape.slice(t))]}})),outShape:n}}function Ok(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);C.assertParamsConsistent(i,s);let o=C.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return a.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?tn({inputs:{x:l[0]},backend:a}):Pd(l,s,a)}var Ace={kernelName:hu,backendName:"webgpu",kernelFunc:Ok};function bce(e,t,a,n,r=!1,s=null,i=!1,o=4,l=4,u=4){let p=N=>{switch(N){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},c=N=>{switch(N){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${N} is not supported.`)}},d=e?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); @@ -6402,9 +6402,9 @@ return a / b;`,fQ=` // The bounds checking is always needed since we use it to pad zero for // the 'same' padding type. if (xRow >= 0 && xRow < ${m} && xCol >= 0 && xCol < ${f}) { - ${p} + ${d} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); - ${d(o)} + ${p(o)} } return resData;`,A=e?t&&n?` ${x}`:` @@ -6416,13 +6416,13 @@ return a / b;`,fQ=` if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${x} } - return ${Xe(o)}(0.0);`,b=`${c(l)}`,w=Xe(u),S=Xe(e?o:l),C=Xe(e?l:o);return` - ${Or(s,i,u===4,4)} - fn mm_readA(batch: i32, row : i32, col : i32) -> ${S} { + return ${Xe(o)}(0.0);`,b=`${c(l)}`,w=Xe(u),I=Xe(e?o:l),T=Xe(e?l:o);return` + ${$r(s,i,u===4,4)} + fn mm_readA(batch: i32, row : i32, col : i32) -> ${I} { ${e?A:b} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${C} { + fn mm_readB(batch: i32, row : i32, col : i32) -> ${T} { ${e?b:A} } @@ -6432,14 +6432,14 @@ return a / b;`,fQ=` var value = valueIn; let outWidth = ${e?"uniforms.outShape[2]":"uniforms.outShape[3]"}; ${h} - ${ml(r,s)} + ${ol(r,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var Zhe=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=Q3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ey(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),r&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],r&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=o,this.addBias=r,this.activation=s,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=a%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?g0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):y0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` - ${Yhe(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var vce=class{constructor(e,t,a,n,r=!1,s=null,i=!1,o=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),r&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],r&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=o,this.addBias=r,this.activation=s,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=a%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?d0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):p0(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${bce(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}},Jhe=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=a,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` - ${Or(this.activation,this.hasPreluActivationWeights,!1,4)} + `}},wce=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=a,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` + ${$r(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -6460,7 +6460,7 @@ return a / b;`,fQ=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${ml(this.addBias,this.activation)} + ${ol(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -6484,7 +6484,7 @@ return a / b;`,fQ=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}},Qhe=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, + `}},kce=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?"coords[1]":"coords[2]",n=this.isChannelsLast?"coords[2]":"coords[1]",r=this.isChannelsLast?"getX(batch, xRow, xCol, ch)":"getX(batch, ch, xRow, xCol)";return` ${ue("index")} { let coords = getCoordsFromIndex(index); @@ -6508,7 +6508,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, value); } } - `}};function Ph(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function e0e({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=a.dataFormat==="channelsLast",u=!l,d=!1,c=l&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",p=[],h,m;if(c){let y=a.inHeight*a.inWidth*a.inChannels;h=ke({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,y]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,y,a.outChannels]}})}else h=ke({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(p.push(h),p.push(m),s!=null){let y=Ph(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),p.push(s))}if(r!=null){let y=Ph(r.shape,l);y!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:y}}),p.push(r))}let f=x0({a:l?h:m,b:l?m:h,transposeA:u,transposeB:d,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=ke({inputs:{x:f},backend:n,attrs:{shape:a.outShape}});p.push(f);for(let y of p)n.disposeData(y.dataId);return g}function t0e({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:d,strideWidth:c,strideHeight:p,padInfo:h,outWidth:m,outHeight:f,dilationWidth:g,dilationHeight:y,dataFormat:x}=a,A=x==="channelsLast",b=l*u*d,w=f*m,S=A?[a.batchSize,w,b]:[a.batchSize,b,w],C=new Qhe(S,A),N=[{type:"int32",data:[h.top,h.left]},{type:"int32",data:[p,c]},{type:"int32",data:[y,g]},{type:"int32",data:[m]},{type:"int32",data:[d*l]},{type:"int32",data:[d]}],M=n.runWebGPUProgram(C,[e],e.dtype,N),F=[];F.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if(F.push(E),s!=null){let O=Ph(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),F.push(s))}if(r!=null){let O=Ph(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),F.push(r))}let T=x0({a:A?M:E,b:A?E:M,transposeA:!A,transposeB:!1,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),D=ke({inputs:{x:T},backend:n,attrs:{shape:a.outShape}});F.push(T);for(let O of F)n.disposeData(O.dataId);return D}function T9({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=r!=null,u=s!=null,d=a.dataFormat==="channelsLast",c=d&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",p=B().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!p&&(c||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")))return e0e({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),m=h>-1?h:n.thresholdToIncreaseWorkgroups,f=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(B().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||f<=m)return t0e({x:e,filter:t,convInfo:a,backend:n,bias:r,preluActivationWeights:s,leakyreluAlpha:i,activation:o});let g,y=[a.padInfo.top,a.padInfo.left],x=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...y]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(p)g=new Jhe(a,l,o,u);else{let S=d?a.outHeight*a.outWidth:a.outChannels,C=d?a.outChannels:a.outHeight*a.outWidth,N=a.filterHeight*a.filterWidth*a.inChannels;x.push({type:"int32",data:[S]},{type:"int32",data:[C]},{type:"int32",data:[N]});let M=n.adapterInfo.isIntel();g=new Zhe(a,S,C,N,l,o,u,M)}let A=[],b=[e,t];l&&(!d&&r.shape.length===1&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),A.push(r)),b.push(r)),u&&(!d&&s.shape.length===1&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),A.push(s)),b.push(s)),o==="leakyrelu"&&(x.push({type:"float32",data:[i]}),g.uniforms+=" alpha : f32,");let w=n.runWebGPUProgram(g,b,e.dtype,x);for(let S of A)n.disposeData(S.dataId);return w}function a0e(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=a,c=I.convertConv2DDataFormat(l),p=I.computeConv2DInfo(r.shape,s.shape,i,u,o,d,!1,c);return T9({x:r,filter:s,convInfo:p,backend:n})}var n0e={kernelName:Xi,backendName:"webgpu",kernelFunc:a0e},r0e=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1,n=` + `}};function Nh(e,t){let a=e.length;return a>=3?t?[...e.slice(0,-3),e[a-3]*e[a-2],e[a-1]]:[...e.slice(0,-3),e[a-3],e[a-2]*e[a-1]]:!t&&a===1&&e[0]>1?[e[0],1]:null}function Ice({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=a.dataFormat==="channelsLast",u=!l,p=!1,c=l&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",d=[],h,m;if(c){let y=a.inHeight*a.inWidth*a.inChannels;h=ke({inputs:{x:e},backend:n,attrs:{shape:[1,a.batchSize,y]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,y,a.outChannels]}})}else h=ke({inputs:{x:e},backend:n,attrs:{shape:l?[a.batchSize,a.inHeight*a.inWidth,a.inChannels]:[a.batchSize,a.inChannels,a.inHeight*a.inWidth]}}),m=ke({inputs:{x:t},backend:n,attrs:{shape:[1,a.inChannels,a.outChannels]}});if(d.push(h),d.push(m),s!=null){let y=Nh(s.shape,l);y!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:y}}),d.push(s))}if(r!=null){let y=Nh(r.shape,l);y!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:y}}),d.push(r))}let f=c0({a:l?h:m,b:l?m:h,transposeA:u,transposeB:p,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),g=ke({inputs:{x:f},backend:n,attrs:{shape:a.outShape}});d.push(f);for(let y of d)n.disposeData(y.dataId);return g}function Sce({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,strideWidth:c,strideHeight:d,padInfo:h,outWidth:m,outHeight:f,dilationWidth:g,dilationHeight:y,dataFormat:x}=a,A=x==="channelsLast",b=l*u*p,w=f*m,I=A?[a.batchSize,w,b]:[a.batchSize,b,w],T=new kce(I,A),N=[{type:"int32",data:[h.top,h.left]},{type:"int32",data:[d,c]},{type:"int32",data:[y,g]},{type:"int32",data:[m]},{type:"int32",data:[p*l]},{type:"int32",data:[p]}],M=n.runWebGPUProgram(T,[e],e.dtype,N),$=[];$.push(M);let E=ke({inputs:{x:t},backend:n,attrs:{shape:[1,b,-1]}});if($.push(E),s!=null){let O=Nh(s.shape,A);O!=null&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:O}}),$.push(s))}if(r!=null){let O=Nh(r.shape,A);O!=null&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:O}}),$.push(r))}let S=c0({a:A?M:E,b:A?E:M,transposeA:!A,transposeB:!1,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),_=ke({inputs:{x:S},backend:n,attrs:{shape:a.outShape}});$.push(S);for(let O of $)n.disposeData(O.dataId);return _}function zk({x:e,filter:t,convInfo:a,backend:n,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=r!=null,u=s!=null,p=a.dataFormat==="channelsLast",c=p&&a.filterHeight===a.inHeight&&a.filterWidth===a.inWidth&&a.padInfo.type==="VALID",d=B().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!d&&(c||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")))return Ice({x:e,filter:t,convInfo:a,backend:n,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});let h=B().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),m=h>-1?h:n.thresholdToIncreaseWorkgroups,f=a.batchSize*Math.ceil(a.outHeight*a.outWidth/32)*Math.ceil(a.outChannels/32);if(B().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||f<=m)return Sce({x:e,filter:t,convInfo:a,backend:n,bias:r,preluActivationWeights:s,leakyreluAlpha:i,activation:o});let g,y=[a.padInfo.top,a.padInfo.left],x=[{type:"int32",data:[a.filterHeight,a.filterWidth]},{type:"int32",data:[...y]},{type:"int32",data:[a.strideHeight,a.strideWidth]},{type:"int32",data:[a.dilationHeight,a.dilationWidth]}];if(d)g=new wce(a,l,o,u);else{let I=p?a.outHeight*a.outWidth:a.outChannels,T=p?a.outChannels:a.outHeight*a.outWidth,N=a.filterHeight*a.filterWidth*a.inChannels;x.push({type:"int32",data:[I]},{type:"int32",data:[T]},{type:"int32",data:[N]});let M=n.adapterInfo.isIntel();g=new vce(a,I,T,N,l,o,u,M)}let A=[],b=[e,t];l&&(!p&&r.shape.length===1&&(r=ke({inputs:{x:r},backend:n,attrs:{shape:[r.shape[0],1,1]}}),A.push(r)),b.push(r)),u&&(!p&&s.shape.length===1&&(s=ke({inputs:{x:s},backend:n,attrs:{shape:[s.shape[0],1,1]}}),A.push(s)),b.push(s)),o==="leakyrelu"&&(x.push({type:"float32",data:[i]}),g.uniforms+=" alpha : f32,");let w=n.runWebGPUProgram(g,b,e.dtype,x);for(let I of A)n.disposeData(I.dataId);return w}function Cce(e){let{inputs:t,attrs:a,backend:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a,c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,c);return zk({x:r,filter:s,convInfo:d,backend:n})}var Tce={kernelName:wi,backendName:"webgpu",kernelFunc:Cce},Nce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,a=this.isChannelsLast?3:1,n=` ${ue()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; @@ -6651,7 +6651,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},s0e=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` + `}},Rce=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6692,7 +6692,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},i0e=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, + `}},Ece=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerFilter"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { @@ -6733,7 +6733,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},o0e=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, + `}},Mce=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerInput"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { @@ -6787,7 +6787,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}};function l0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:d}=n,c=I.convertConv2DDataFormat(l),p=I.computeConv2DInfo(r.shape,d,i,1,o,u,!1,c),h=new s0e(p),m=[{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.batchSize]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]},{type:"int32",data:[p.inHeight]},{type:"int32",data:[p.inWidth]}];return a.runWebGPUProgram(h,[r,s],r.dtype,m)}var u0e={kernelName:bp,backendName:"webgpu",kernelFunc:l0e};function d0e(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};function $ce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=n,c=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,c),h=new Rce(d),m=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.batchSize]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]},{type:"int32",data:[d.inHeight]},{type:"int32",data:[d.inWidth]}];return a.runWebGPUProgram(h,[r,s],r.dtype,m)}var Pce={kernelName:hp,backendName:"webgpu",kernelFunc:$ce};function _ce(e=4){let t=n=>{switch(n){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` let coord1 = vec4(coordX, coordY, col + 1, rowInner); let coord2 = vec4(coordX, coordY, col + 2, rowInner); let coord3 = vec4(coordX, coordY, col + 3, rowInner); @@ -6847,10 +6847,10 @@ return a / b;`,fQ=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${e}] = value; } - }`}var p0e=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=Q3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=ey(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?g0(this.elementsPerThread,this.workgroupSize):y0(this.elementsPerThread,this.workgroupSize);return` - ${d0e(this.isVec4?4:1)} + }`}var Fce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=G3(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=H3(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?d0(this.elementsPerThread,this.workgroupSize):p0(this.elementsPerThread,this.workgroupSize);return` + ${_ce(this.isVec4?4:1)} ${e} - `}};function c0e(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}=n,c=I.convertConv2DDataFormat(u),p=I.computeConv2DInfo(i,s.shape,o,1,l,d,!1,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.filterHeight-1-p.padInfo.top,p.filterWidth-1-p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.batchSize,p.outHeight,p.outWidth,p.outChannels]}],m;if(B().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||p.dataFormat!=="channelsLast")m=new r0e(p);else{m=new p0e(p);let f=p.inHeight*p.inWidth,g=p.inChannels,y=p.filterHeight*p.filterWidth*p.outChannels;h.push({type:"uint32",data:[f]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return a.runWebGPUProgram(m,[r,s],"float32",h)}var h0e={kernelName:Ki,backendName:"webgpu",kernelFunc:c0e},m0e=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` + `}};function Dce(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=n,c=C.convertConv2DDataFormat(u),d=C.computeConv2DInfo(i,s.shape,o,1,l,p,!1,c),h=[{type:"int32",data:[d.filterHeight,d.filterWidth]},{type:"int32",data:[d.filterHeight-1-d.padInfo.top,d.filterWidth-1-d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.batchSize,d.outHeight,d.outWidth,d.outChannels]}],m;if(B().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||d.dataFormat!=="channelsLast")m=new Nce(d);else{m=new Fce(d);let f=d.inHeight*d.inWidth,g=d.inChannels,y=d.filterHeight*d.filterWidth*d.outChannels;h.push({type:"uint32",data:[f]},{type:"uint32",data:[g]},{type:"uint32",data:[y]})}return a.runWebGPUProgram(m,[r,s],"float32",h)}var Oce={kernelName:ki,backendName:"webgpu",kernelFunc:Dce},zce=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -6932,7 +6932,7 @@ return a / b;`,fQ=` } setOutputAtIndex(index, dotProd); } - }`}};function f0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=I.computeConv3DInfo(r.shape,s.shape,i,l,o),d=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...d]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],p=new m0e(u),h=Qt(r.dtype,s.dtype);return a.runWebGPUProgram(p,[r,s],h,c)}var g0e={kernelName:Yi,backendName:"webgpu",kernelFunc:f0e};function y0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=I.computeConv3DInfo(r.shape,l,i,1,o),d=new i0e(u),c=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return a.runWebGPUProgram(d,[r,s],s.dtype,c)}var x0e={kernelName:Au,backendName:"webgpu",kernelFunc:y0e};function A0e(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,pad:o,inputShape:l}=n,u=I.computeConv3DInfo(l,s.shape,i,1,o),d=new o0e(u),c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var b0e={kernelName:Zi,backendName:"webgpu",kernelFunc:A0e},v0e=at({opType:le.COS}),w0e={kernelName:Ji,backendName:"webgpu",kernelFunc:v0e},k0e=at({opType:le.COSH}),I0e={kernelName:Qi,backendName:"webgpu",kernelFunc:k0e},S0e=class{constructor(e,t,a,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[r]=t;this.outputShape=[r,a[0],a[1],e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[a,n,r]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[s,i,o]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` + }`}};function Lce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],d=new zce(u),h=pa(r.dtype,s.dtype);return a.runWebGPUProgram(d,[r,s],h,c)}var Wce={kernelName:Ii,backendName:"webgpu",kernelFunc:Lce};function Bce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=n,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new Ece(u),c=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return a.runWebGPUProgram(p,[r,s],s.dtype,c)}var Vce={kernelName:mu,backendName:"webgpu",kernelFunc:Bce};function Uce(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,pad:o,inputShape:l}=n,u=C.computeConv3DInfo(l,s.shape,i,1,o),p=new Mce(u),c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return a.runWebGPUProgram(p,[r,s],r.dtype,c)}var Gce={kernelName:Si,backendName:"webgpu",kernelFunc:Uce},Hce=at({opType:le.COS}),jce={kernelName:Ci,backendName:"webgpu",kernelFunc:Hce},qce=at({opType:le.COSH}),Xce={kernelName:Ti,backendName:"webgpu",kernelFunc:qce},Kce=class{constructor(e,t,a,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[r]=t;this.outputShape=[r,a[0],a[1],e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[a,n,r]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[s,i,o]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6988,23 +6988,23 @@ return a / b;`,fQ=` } } } - `}},T0e=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,d=new S0e(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(d,[r,s,i],"float32",c)},C0e={kernelName:ao,backendName:"webgpu",kernelFunc:T0e},cp;(function(e){e.Prod="*",e.Sum="+"})(cp||(cp={}));var IA=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=a,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===cp.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${SA(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],r="",s="";return this.exclusive?(r=this.reverse?`end != ${n-1}`:"end != 0",s=this.reverse?"end + 1":"end - 1"):(r=this.reverse?`end + pow2 < ${n}`:"end >= pow2",s=this.reverse?"end + pow2":"end - pow2"),` + `}},Yce=e=>{let{inputs:t,backend:a,attrs:n}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=n,p=new Kce(r.shape[3],s.shape,o,l),c=[{type:"float32",data:[u]}];return a.runWebGPUProgram(p,[r,s,i],"float32",c)},Zce={kernelName:Ei,backendName:"webgpu",kernelFunc:Yce},sp;(function(e){e.Prod="*",e.Sum="+"})(sp||(sp={}));var oA=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=a,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===sp.Prod?"1.0":"0.0",a=this.exclusive?t:`getX(${lA(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],r="",s="";return this.exclusive?(r=this.reverse?`end != ${n-1}`:"end != 0",s=this.reverse?"end + 1":"end - 1"):(r=this.reverse?`end + pow2 < ${n}`:"end >= pow2",s=this.reverse?"end + pow2":"end - pow2"),` ${ue("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${TA(e,"coords",this.op)}; + let end = ${uA(e,"coords",this.op)}; var val = ${a}; let pow2 = i32(pow(2.0, uniforms.index)); if (${r}) { let idx = ${s}; - ${TA(e,"coords",this.op)} = idx; - val ${this.op}= getX(${SA(e,"coords",this.op)}); + ${uA(e,"coords",this.op)} = idx; + val ${this.op}= getX(${lA(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function SA(e,t,a){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 ${a} for rank ${e} is not yet supported`)}function TA(e,t,a){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 ${a} for rank ${e} is not yet supported`)}function C9(e,t,a,n,r,s){let i=t.shape.length,o=I.getAxesPermutation([n],i),l=t;o!=null&&(l=ir({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=I.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let d=l.shape[u],c=an({inputs:{x:l},backend:a});for(let p=0;p<=Math.ceil(Math.log2(d))-1;p++){let h=new IA(e,l.shape,!1,s),m=c,f=[{type:"float32",data:[p]}];c=a.runWebGPUProgram(h,[c],c.dtype,f),a.disposeData(m.dataId)}if(r){let p=new IA(e,l.shape,r,s),h=c,m=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(p,[c],c.dtype,m),a.disposeData(h.dataId)}if(o!=null){let p=I.getUndoAxesPermutation(o),h=ir({inputs:{x:c},backend:a,attrs:{perm:p}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function N0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return C9(cp.Prod,r,a,s,i,o)}var R0e={kernelName:eo,backendName:"webgpu",kernelFunc:N0e};function E0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return C9(cp.Sum,r,a,s,i,o)}var M0e={kernelName:to,backendName:"webgpu",kernelFunc:E0e};function F0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n,l=r.shape.length===1,u=v.sizeFromShape(s.shape)>0,d=s.dtype,c=l?[r.shape[0]]:[r.shape[0],r.shape[1]],p=l?[i]:[r.shape[0],i],h=Wa({backend:a,attrs:{shape:p,value:0,dtype:d}}),m=new k9(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,d,f,h)}var $0e={kernelName:bu,backendName:"webgpu",kernelFunc:F0e},D0e=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` + `}};function lA(e,t,a){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 ${a} for rank ${e} is not yet supported`)}function uA(e,t,a){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 ${a} for rank ${e} is not yet supported`)}function Lk(e,t,a,n,r,s){let i=t.shape.length,o=C.getAxesPermutation([n],i),l=t;o!=null&&(l=nr({inputs:{x:t},backend:a,attrs:{perm:o}}));let u=C.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${n}`);let p=l.shape[u],c=tn({inputs:{x:l},backend:a});for(let d=0;d<=Math.ceil(Math.log2(p))-1;d++){let h=new oA(e,l.shape,!1,s),m=c,f=[{type:"float32",data:[d]}];c=a.runWebGPUProgram(h,[c],c.dtype,f),a.disposeData(m.dataId)}if(r){let d=new oA(e,l.shape,r,s),h=c,m=[{type:"float32",data:[0]}];c=a.runWebGPUProgram(d,[c],c.dtype,m),a.disposeData(h.dataId)}if(o!=null){let d=C.getUndoAxesPermutation(o),h=nr({inputs:{x:c},backend:a,attrs:{perm:d}});return a.disposeData(c.dataId),a.disposeData(l.dataId),h}return c}function Jce(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Lk(sp.Prod,r,a,s,i,o)}var Qce={kernelName:Ni,backendName:"webgpu",kernelFunc:Jce};function ehe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=n;return Lk(sp.Sum,r,a,s,i,o)}var the={kernelName:Ri,backendName:"webgpu",kernelFunc:ehe};function ahe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=n,l=r.shape.length===1,u=v.sizeFromShape(s.shape)>0,p=s.dtype,c=l?[r.shape[0]]:[r.shape[0],r.shape[1]],d=l?[i]:[r.shape[0],i],h=Wa({backend:a,attrs:{shape:d,value:0,dtype:p}}),m=new Fk(c,u,o),f=[{type:"int32",data:[i]}],g=u?[r,s]:[r];return a.runWebGPUProgram(m,g,p,f,h)}var nhe={kernelName:fu,backendName:"webgpu",kernelFunc:ahe},rhe=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7024,8 +7024,8 @@ return a / b;`,fQ=` let rlt = ${this.getInputSamplingString()}; setOutputAtIndex(index, rlt); } - }`}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"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function P0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],d=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,p=u*s,h=d/(s*s),m=i==="NHWC"?[o,c,p,h]:[o,h,c,p],f=[{type:"int32",data:[s]}],g=new D0e(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var _0e={kernelName:no,backendName:"webgpu",kernelFunc:P0e},O0e=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=r,this.hasPreluActivation=s,this.filterHeight=t,this.filterWidth=a,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],a=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` - ${Or(this.activation,this.hasPreluActivation,!1,4)} + }`}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"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function she(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockSize:s,dataFormat:i}=n,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],c=l*s,d=u*s,h=p/(s*s),m=i==="NHWC"?[o,c,d,h]:[o,h,c,d],f=[{type:"int32",data:[s]}],g=new rhe(m,i);return a.runWebGPUProgram(g,[r],r.dtype,f)}var ihe={kernelName:Mi,backendName:"webgpu",kernelFunc:she},ohe=class{constructor(e,t,a,n=!1,r=null,s=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=r,this.hasPreluActivation=s,this.filterHeight=t,this.filterWidth=a,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],a=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` + ${$r(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${a}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -7081,13 +7081,13 @@ return a / b;`,fQ=` value = fma(xVal, wVal, value); } } - ${ml(this.addBias,this.activation)} + ${ol(this.addBias,this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}},N9=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let r=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=me(r),this.dispatch=de(this.dispatchLayout,r,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${a}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,a=this.convInfo.strideWidth;return` - ${Or(this.activation,this.hasPreluActivation,!0,4)} + `}},Wk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let r=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=me(r),this.dispatch=de(this.dispatchLayout,r,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),v.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${a}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,a=this.convInfo.strideWidth;return` + ${$r(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -7136,14 +7136,14 @@ return a / b;`,fQ=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${ml(this.addBias,this.activation)} + ${ol(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}},R9=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, + `}},Bk=class{constructor(e,t=!1,a=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=a,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` - ${Or(this.activation,this.hasPreluActivation,!1,4)} + ${$r(this.activation,this.hasPreluActivation,!1,4)} ${ue("index")} { if (index < uniforms.size) { @@ -7204,11 +7204,11 @@ return a / b;`,fQ=` } } } - ${ml(this.addBias,this.activation)} + ${ol(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function z0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=n,c=I.convertConv2DDataFormat(l),p=u;p==null&&(p=[1,1]);let h=I.computeConv2DInfo(r.shape,s.shape,i,p,o,d,!0,c),m=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],f=h.dataFormat==="channelsLast",g;return!f&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new O0e(h.outShape,h.filterHeight,h.filterWidth):f&&h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(g=new N9(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new R9(h),m.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),a.runWebGPUProgram(g,[r,s],r.dtype,m)}var L0e={kernelName:ro,backendName:"webgpu",kernelFunc:z0e},W0e=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, + `}};function lhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=n,c=C.convertConv2DDataFormat(l),d=u;d==null&&(d=[1,1]);let h=C.computeConv2DInfo(r.shape,s.shape,i,d,o,p,!0,c),m=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],f=h.dataFormat==="channelsLast",g;return!f&&h.inHeight>16&&h.inWidth>16&&h.strideHeight===1&&h.strideWidth===1&&h.dilationWidth===1&&h.dilationHeight===1&&h.inChannels===h.outChannels?g=new ohe(h.outShape,h.filterHeight,h.filterWidth):f&&h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(g=new Wk(h),m.push({type:"int32",data:[g.virtualWidth]})):(g=new Bk(h),m.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),a.runWebGPUProgram(g,[r,s],r.dtype,m)}var uhe={kernelName:$i,backendName:"webgpu",kernelFunc:lhe},dhe=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_filter"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7244,7 +7244,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},B0e=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, + `}},phe=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_input"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7287,7 +7287,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}};function V0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:d}=n,c=I.computeConv2DInfo(r.shape,d,i,o,l,u,!0),p=new W0e(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.inHeight]},{type:"int32",data:[c.inWidth]},{type:"int32",data:[c.batchSize]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(p,[r,s],"float32",h)}var U0e={kernelName:vp,backendName:"webgpu",kernelFunc:V0e};function G0e(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:d}=n,c=I.computeConv2DInfo(d,s.shape,i,o,l,u,!0),p=new B0e(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(p,[r,s],r.dtype,h)}var H0e={kernelName:wp,backendName:"webgpu",kernelFunc:G0e},j0e=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` + `}};function che(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=n,c=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),d=new dhe(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.inHeight]},{type:"int32",data:[c.inWidth]},{type:"int32",data:[c.batchSize]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],"float32",h)}var hhe={kernelName:mp,backendName:"webgpu",kernelFunc:che};function mhe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=n,c=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),d=new phe(c),h=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.outChannels/c.inChannels]}];return a.runWebGPUProgram(d,[r,s],r.dtype,h)}var fhe={kernelName:fp,backendName:"webgpu",kernelFunc:mhe},ghe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7295,7 +7295,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, value); } } - `}};function q0e(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=ke({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new j0e(s),l=a.runWebGPUProgram(o,[i],i.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var X0e={kernelName:vu,backendName:"webgpu",kernelFunc:q0e},K0e=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` + `}};function yhe(e){let{inputs:t,backend:a}=e,{x:n}=t,r=[...n.shape,...n.shape],s=v.sizeFromShape(n.shape),i=ke({inputs:{x:n},backend:a,attrs:{shape:[s]}}),o=new ghe(s),l=a.runWebGPUProgram(o,[i],i.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var xhe={kernelName:gu,backendName:"webgpu",kernelFunc:yhe},Ahe=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let neg_infinity = -3.4e38; @@ -7327,7 +7327,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, curVal); } } - `}};function Y0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=I.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),d=[u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...d]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],p=new K0e(u);return a.runWebGPUProgram(p,[r,s],r.dtype,c)}var Z0e={kernelName:so,backendName:"webgpu",kernelFunc:Y0e},J0e=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 + `}};function bhe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=n,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p=[u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...p]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],d=new Ahe(u);return a.runWebGPUProgram(d,[r,s],r.dtype,c)}var vhe={kernelName:Pi,backendName:"webgpu",kernelFunc:bhe},whe=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 types, does not support ${t} type.`);this.type=t,this.shaderKey="dilation2DBackpropInput"}getUserCode(){return` ${ue("index")} { if (index < uniforms.dySize) { @@ -7368,10 +7368,10 @@ return a / b;`,fQ=` let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${Bs("&result[flatIndexIn]","value",this.type)} + ${ys("&result[flatIndexIn]","value",this.type)} } } - `}},Q0e=class{constructor(e,t,a){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 + `}},khe=class{constructor(e,t,a){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=me(e.outShape),this.dispatch=de(this.dispatchLayout,e.outShape,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 types, does not support ${a} type.`);this.type=a,this.shaderKey="dilation2DBackpropFilter"}getUserCode(){return` ${ue("index")} { if (index < uniforms.dySize) { @@ -7411,10 +7411,10 @@ return a / b;`,fQ=` let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${Bs("&result[flatIndexIn]","value",this.type)} + ${ys("&result[flatIndexIn]","value",this.type)} } } - `}};function eme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,d=I.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=s.dtype,p=new Q0e(d,s.shape,c),h=[{type:"int32",data:[d.filterHeight,d.filterWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[v.sizeFromShape(d.outShape)]}],m=Wa({backend:a,attrs:{shape:s.shape,value:0,dtype:c}});return a.runWebGPUProgram(p,[r,s,i],c,h,m)}var tme={kernelName:Ql,backendName:"webgpu",kernelFunc:eme};function ame(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,d=I.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=r.dtype,p=new J0e(d,c),h=[{type:"int32",data:[d.filterHeight,d.filterWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[v.sizeFromShape(d.outShape)]}],m=Wa({backend:a,attrs:{shape:d.inShape,value:0,dtype:c}});return a.runWebGPUProgram(p,[r,s,i],c,h,m)}var nme={kernelName:Jl,backendName:"webgpu",kernelFunc:ame},rme=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=lu.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=a,this.shaderKey=`draw_${t}_${a}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` + `}};function Ihe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=s.dtype,d=new khe(p,s.shape,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:s.shape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var She={kernelName:ql,backendName:"webgpu",kernelFunc:Ihe};function Che(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=n,p=C.computeDilation2DInfo(r.shape,s.shape,o,l,"NHWC",u),c=r.dtype,d=new whe(p,c),h=[{type:"int32",data:[p.filterHeight,p.filterWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[v.sizeFromShape(p.outShape)]}],m=Wa({backend:a,attrs:{shape:p.inShape,value:0,dtype:c}});return a.runWebGPUProgram(d,[r,s,i],c,h,m)}var The={kernelName:jl,backendName:"webgpu",kernelFunc:Che},Nhe=class{constructor(e,t,a){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=au.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=a,this.shaderKey=`draw_${t}_${a}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` if (uniforms.numChannels == 1) { rgba[0] = ${t}; rgba[1] = ${t}; @@ -7437,7 +7437,7 @@ return a / b;`,fQ=` textureStore(outImage, vec2(coords.yx), rgba); } } - `}};function sme(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,[o,l]=r.shape.slice(0,2),{imageOptions:u}=i||{},d=(u==null?void 0:u.alpha)||1,c=a.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",p=[o,l],h=new rme(p,r.dtype,c);s.width=l,s.height=o;let m="webgpu",f=s.getContext(m),g;f||(g=new OffscreenCanvas(l,o),f=g.getContext(m));let y=r.shape.length===3?r.shape[2]:1;f.configure({device:a.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let x="int32",A=a.makeTensorInfo(p,x),b=a.tensorMap.get(A.dataId);b.resource=f.getCurrentTexture(),b.external=!0;let w=[{type:"uint32",data:[y]},{type:"float32",data:[d]}];if(a.runWebGPUProgram(h,[r],x,w,A),g){let S=s.getContext("2d");if(!S)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");S.drawImage(g,0,0)}return a.disposeData(A.dataId),r}var ime={kernelName:kp,backendName:"webgpu",kernelFunc:sme},E9=aa({opType:De.MUL,cpuKernelImpl:pce,supportsComplex:!0}),ome={kernelName:Ts,backendName:"webgpu",kernelFunc:E9};function M9(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gl(r,s,i,"sum",a)}var lme={kernelName:Qo,backendName:"webgpu",kernelFunc:M9};function ume(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=I.decodeEinsumEquation(r,s.length);I.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=I.getEinsumComputePath(o,l),c=d.length,p=null,h=i.length,m=[];for(let f=0;f=0&&(p=M9({inputs:{x:p},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(p)),h--)}for(let f of m)f!==p&&a.disposeData(f.dataId);return p}var dme={kernelName:Ip,backendName:"webgpu",kernelFunc:ume},pme=at({opType:le.ELU}),cme={kernelName:oo,backendName:"webgpu",kernelFunc:pme},hme=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new $h(De.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},mme={kernelName:wu,backendName:"webgpu",kernelFunc:hme},fme=aa({opType:De.EQUAL,dtype:"bool",cpuKernelImpl:Ype}),gme={kernelName:ms,backendName:"webgpu",kernelFunc:fme},yme=at({opType:le.ERF}),xme={kernelName:lo,backendName:"webgpu",kernelFunc:yme},Ame=at({opType:le.EXP,cpuKernelImpl:Zpe,dtype:"float32"}),bme={kernelName:fs,backendName:"webgpu",kernelFunc:Ame};function rg(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),ke({inputs:{x:s},backend:n,attrs:{shape:o}})}var vme={kernelName:ku,backendName:"webgpu",kernelFunc:rg},wme=at({opType:le.EXPM1,cpuKernelImpl:Jpe}),kme={kernelName:gs,backendName:"webgpu",kernelFunc:wme},CA=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` + `}};function Rhe(e){let{inputs:t,backend:a,attrs:n}=e,{image:r}=t,{canvas:s,options:i}=n,[o,l]=r.shape.slice(0,2),{imageOptions:u}=i||{},p=(u==null?void 0:u.alpha)||1,c=a.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",d=[o,l],h=new Nhe(d,r.dtype,c);s.width=l,s.height=o;let m="webgpu",f=s.getContext(m),g;f||(g=new OffscreenCanvas(l,o),f=g.getContext(m));let y=r.shape.length===3?r.shape[2]:1;f.configure({device:a.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let x="int32",A=a.makeTensorInfo(d,x),b=a.tensorMap.get(A.dataId);b.resource=f.getCurrentTexture(),b.external=!0;let w=[{type:"uint32",data:[y]},{type:"float32",data:[p]}];if(a.runWebGPUProgram(h,[r],x,w,A),g){let I=s.getContext("2d");if(!I)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");I.drawImage(g,0,0)}return a.disposeData(A.dataId),r}var Ehe={kernelName:gp,backendName:"webgpu",kernelFunc:Rhe},Vk=ta({opType:Pe.MUL,cpuKernelImpl:Fde,supportsComplex:!0}),Mhe={kernelName:yo,backendName:"webgpu",kernelFunc:Vk};function Uk(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"sum",a)}var $he={kernelName:Go,backendName:"webgpu",kernelFunc:Uk};function Phe(e){let{inputs:t,backend:a,attrs:n}=e,{equation:r}=n,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),c=p.length,d=null,h=i.length,m=[];for(let f=0;f=0&&(d=Uk({inputs:{x:d},backend:a,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(d)),h--)}for(let f of m)f!==d&&a.disposeData(f.dataId);return d}var _he={kernelName:yp,backendName:"webgpu",kernelFunc:Phe},Fhe=at({opType:le.ELU}),Dhe={kernelName:Fi,backendName:"webgpu",kernelFunc:Fhe},Ohe=e=>{let{inputs:t,backend:a}=e,{dy:n,y:r}=t,s=new Th(Pe.ELU_DER,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],n.dtype)},zhe={kernelName:yu,backendName:"webgpu",kernelFunc:Ohe},Lhe=ta({opType:Pe.EQUAL,dtype:"bool",cpuKernelImpl:bde}),Whe={kernelName:Oi,backendName:"webgpu",kernelFunc:Lhe},Bhe=at({opType:le.ERF}),Vhe={kernelName:Di,backendName:"webgpu",kernelFunc:Bhe},Uhe=at({opType:le.EXP,cpuKernelImpl:vde,dtype:"float32"}),Ghe={kernelName:zi,backendName:"webgpu",kernelFunc:Uhe};function Y1(e){let{inputs:t,attrs:a,backend:n}=e,{dim:r}=a,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),ke({inputs:{x:s},backend:n,attrs:{shape:o}})}var Hhe={kernelName:xu,backendName:"webgpu",kernelFunc:Y1},jhe=at({opType:le.EXPM1,cpuKernelImpl:wde}),qhe={kernelName:Li,backendName:"webgpu",kernelFunc:jhe},dA=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 { ${this.component==="real"?"return real * expR - imag * expI;":"return real * expI + imag * expR;"} } @@ -7470,7 +7470,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); } } - `}};function F9(e,t,a){let n=a.tensorMap.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=[],l=ke({inputs:{x:e},backend:a,attrs:{shape:[i,s]}});o.push(l);let u=l.shape,d=new CA("real",u),c=new CA("imag",u),p=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:u},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:u}],h=t?2*Math.PI:-2*Math.PI,m=t?u[1]:1,f=[{type:"float32",data:[h]},{type:"float32",data:[m]}],g=a.runWebGPUProgram(d,p,"float32",f);o.push(g);let y=a.runWebGPUProgram(c,p,"float32",f);o.push(y);let x=fl({inputs:{real:g,imag:y},backend:a});o.push(x);let A=ke({inputs:{x},backend:a,attrs:{shape:e.shape}});return o.forEach(b=>a.disposeData(b.dataId)),A}function Ime(e){let{inputs:t,backend:a}=e,{input:n}=t;return F9(n,!1,a)}var Sme={kernelName:Sp,backendName:"webgpu",kernelFunc:Ime},Tme=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` + `}};function Gk(e,t,a){let n=a.tensorMap.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=[],l=ke({inputs:{x:e},backend:a,attrs:{shape:[i,s]}});o.push(l);let u=l.shape,p=new dA("real",u),c=new dA("imag",u),d=[{dataId:n.complexTensorInfos.real.dataId,dtype:n.complexTensorInfos.real.dtype,shape:u},{dataId:n.complexTensorInfos.imag.dataId,dtype:n.complexTensorInfos.imag.dtype,shape:u}],h=t?2*Math.PI:-2*Math.PI,m=t?u[1]:1,f=[{type:"float32",data:[h]},{type:"float32",data:[m]}],g=a.runWebGPUProgram(p,d,"float32",f);o.push(g);let y=a.runWebGPUProgram(c,d,"float32",f);o.push(y);let x=ll({inputs:{real:g,imag:y},backend:a});o.push(x);let A=ke({inputs:{x},backend:a,attrs:{shape:e.shape}});return o.forEach(b=>a.disposeData(b.dataId)),A}function Xhe(e){let{inputs:t,backend:a}=e,{input:n}=t;return Gk(n,!1,a)}var Khe={kernelName:xp,backendName:"webgpu",kernelFunc:Xhe},Yhe=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7479,7 +7479,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, outputValue); } } - `}},Cme={kernelName:uo,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Tme(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Nme=at({opType:le.FLOOR,cpuKernelImpl:Qpe}),Rme={kernelName:ys,backendName:"webgpu",kernelFunc:Nme},Eme=aa({opType:De.FLOOR_DIV,cpuKernelImpl:ece,dtype:"int32"}),Mme={kernelName:xs,backendName:"webgpu",kernelFunc:Eme},Fme=class{constructor(e,t,a=!1){this.pixelsOpType=lu.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=a,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` + `}},Zhe={kernelName:Wi,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{image:a}=e,n=t,r=new Yhe(a.shape);return n.runWebGPUProgram(r,[a],a.dtype)}},Jhe=at({opType:le.FLOOR,cpuKernelImpl:kde}),Qhe={kernelName:Bi,backendName:"webgpu",kernelFunc:Jhe},e0e=ta({opType:Pe.FLOOR_DIV,cpuKernelImpl:Ide,dtype:"int32"}),t0e={kernelName:Vi,backendName:"webgpu",kernelFunc:e0e},a0e=class{constructor(e,t,a=!1){this.pixelsOpType=au.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=a,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` @binding(1) @group(0) var src: ${this.importVideo?"texture_external":"texture_2d"}; ${ue("index")} { let flatIndex = index * uniforms.numChannels; @@ -7491,7 +7491,7 @@ return a / b;`,fQ=` } } } - `}},$me={kernelName:jd,backendName:"webgpu",kernelFunc:Dme},Vl,i1=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Dme(e){let{inputs:t,backend:a,attrs:n}=e,{pixels:r}=t,{numChannels:s}=n;if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,l=typeof HTMLCanvasElement!="undefined"&&r instanceof HTMLCanvasElement||typeof OffscreenCanvas!="undefined"&&r instanceof OffscreenCanvas,u=typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap,[d,c]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[c,d,s],h=B().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE")&&i,m=i||o;if(u||l||m){let x;if(h)x=a.device.importExternalTexture({source:r});else{if(m){let T=B().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Vl==null||T!==i1)&&(i1=T,Vl=document.createElement("canvas").getContext("2d",{willReadFrequently:i1})),Vl.canvas.width=d,Vl.canvas.height=c,Vl.drawImage(r,0,0,d,c),r=Vl.canvas}let F=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,E=a.textureManager.acquireTexture(p[1],p[0],"rgba8unorm",F);a.queue.copyExternalImageToTexture({source:r},{texture:E},[p[1],p[0]]),x=E}let A=v.sizeFromShape(p),b=v.computeStrides(p),w=new Fme(p,s,h),S=[{type:"uint32",data:[A]},{type:"uint32",data:[s]},{type:"uint32",data:[...b]}],C=a.makeTensorInfo([c,d],"int32"),N=a.tensorMap.get(C.dataId);N.resource=x;let M=a.runWebGPUProgram(w,[C],"int32",S);return a.disposeData(C.dataId),M}let f=r.data,g=f;if(s!=null&&s!==4){g=new Uint8Array(r.width*r.height*s);let x=f.length,A=0;for(let b=0;b(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } } - `}},_me={kernelName:po,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n,scale:r,offset:s,mean:i,variance:o}=e,{varianceEpsilon:l}=t,u=a,d=[n,i,o],c=null;s!=null&&(c=s.shape,d.push(s));let p=null;r!=null&&(p=r.shape,d.push(r));let h=new Pme(n.shape,i.shape,o.shape,c,p),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,d,n.dtype,m)}};function Ome(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:c,dimRoundingMode:p,activation:h,leakyreluAlpha:m}=n,f=I.convertConv2DDataFormat(d),g=I.computeConv2DInfo(r.shape,s.shape,l,c,u,p,!1,f);return T9({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var zme={kernelName:as,backendName:"webgpu",kernelFunc:Ome};function Lme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dimRoundingMode:c,activation:p,leakyreluAlpha:h}=n,m=d;m==null&&(m=[1,1]),v.assert(I.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let f=I.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),g=[r,s],y=i!=null,x=o!=null;y&&g.push(i),x&&g.push(o);let A=[{type:"int32",data:[f.padInfo.top,f.padInfo.left]},{type:"int32",data:[f.inHeight,f.inWidth]}],b;return f.outHeight>4&&f.outWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?(b=new N9(f,y,p,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new R9(f,y,p,x),A.push({type:"int32",data:[f.filterHeight]},{type:"int32",data:[f.filterWidth]},{type:"int32",data:[f.strideHeight,f.strideWidth]},{type:"int32",data:[f.dilationHeight,f.dilationWidth]})),p==="leakyrelu"&&(A.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",A)}var Wme={kernelName:ns,backendName:"webgpu",kernelFunc:Lme},Bme=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Dt(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + `}},i0e={kernelName:Ui,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n,scale:r,offset:s,mean:i,variance:o}=e,{varianceEpsilon:l}=t,u=a,p=[n,i,o],c=null;s!=null&&(c=s.shape,p.push(s));let d=null;r!=null&&(d=r.shape,p.push(r));let h=new s0e(n.shape,i.shape,o.shape,c,d),m=[{type:"float32",data:[l]}];return u.runWebGPUProgram(h,p,n.dtype,m)}};function o0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:c,dimRoundingMode:d,activation:h,leakyreluAlpha:m}=n,f=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,c,u,d,!1,f);return zk({x:r,filter:s,convInfo:g,backend:a,bias:i,preluActivationWeights:o,leakyreluAlpha:m,activation:h})}var l0e={kernelName:Zr,backendName:"webgpu",kernelFunc:o0e};function u0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:c,activation:d,leakyreluAlpha:h}=n,m=p;m==null&&(m=[1,1]),v.assert(C.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let f=C.computeConv2DInfo(r.shape,s.shape,l,m,u,c,!0),g=[r,s],y=i!=null,x=o!=null;y&&g.push(i),x&&g.push(o);let A=[{type:"int32",data:[f.padInfo.top,f.padInfo.left]},{type:"int32",data:[f.inHeight,f.inWidth]}],b;return f.outHeight>4&&f.outWidth>4&&f.strideWidth<=2&&f.inChannels===f.outChannels&&f.dilationHeight===1&&f.dilationWidth===1&&f.inChannels%4===0?(b=new Wk(f,y,d,x),A.push({type:"int32",data:[b.virtualWidth]})):(b=new Bk(f,y,d,x),A.push({type:"int32",data:[f.filterHeight]},{type:"int32",data:[f.filterWidth]},{type:"int32",data:[f.strideHeight,f.strideWidth]},{type:"int32",data:[f.dilationHeight,f.dilationWidth]})),d==="leakyrelu"&&(A.push({type:"float32",data:[h]}),b.uniforms+=" alpha : f32,"),a.runWebGPUProgram(b,g,"float32",A)}var d0e={kernelName:Jr,backendName:"webgpu",kernelFunc:u0e},p0e=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${Pt(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7518,7 +7518,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function Vme(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=r.shape,i=s[s.length-1],o=v.sizeFromShape(n.shape),[l,u,d,c]=I.prepareAndValidate(n,r),p=ke({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=ke({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/d,d]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let x=a.readSync(r.dataId),A=a.bufferSync(n),b=tce(x,A,n.dtype,u,i,d,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new Bme(i,[u,d]),f=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(m,[h,p],h.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(p.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),y}var Ume={kernelName:co,backendName:"webgpu",kernelFunc:Vme},Gme=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=Hme(this.aShape);return` + `}};function c0e(e){let{inputs:t,backend:a}=e,{params:n,indices:r}=t,s=r.shape,i=s[s.length-1],o=v.sizeFromShape(n.shape),[l,u,p,c]=C.prepareAndValidate(n,r),d=ke({inputs:{x:r},backend:a,attrs:{shape:[u,i]}}),h=ke({inputs:{x:n},backend:a,attrs:{shape:[v.sizeFromShape(n.shape)/p,p]}});if(a.shouldExecuteOnCPU([n,r])||n.dtype==="string"){let x=a.readSync(r.dataId),A=a.bufferSync(n),b=Sde(x,A,n.dtype,u,i,p,c,n.shape,o);return a.makeTensorInfo(l,n.dtype,b.values)}let m=new p0e(i,[u,p]),f=[{type:"int32",data:[i]},{type:"int32",data:c}],g=a.runWebGPUProgram(m,[h,d],h.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:l}});return a.disposeData(d.dataId),a.disposeData(h.dataId),a.disposeData(g.dataId),y}var h0e={kernelName:Gi,backendName:"webgpu",kernelFunc:c0e},m0e=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=f0e(this.aShape);return` ${ue("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); @@ -7527,13 +7527,13 @@ return a / b;`,fQ=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function Hme(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(C.dataId)),a.makeTensorInfo(u.outputShape,S.dtype,S.values)}let f=new Gme(p.shape,m),g=a.runWebGPUProgram(f,[p,h],p.dtype);c.push(g);let y=ke({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeData(x.dataId)),y}var jme={kernelName:Su,backendName:"webgpu",kernelFunc:$9},qme=aa({opType:De.GREATER,cpuKernelImpl:rce,dtype:"bool"}),Xme={kernelName:As,backendName:"webgpu",kernelFunc:qme},Kme=aa({opType:De.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:nce}),Yme={kernelName:bs,backendName:"webgpu",kernelFunc:Kme};function Zme(e){let{inputs:t,backend:a}=e,{input:n}=t;return F9(n,!0,a)}var Jme={kernelName:Tp,backendName:"webgpu",kernelFunc:Zme},Qme=at({opType:le.IS_FINITE,dtype:"bool"}),efe={kernelName:mo,backendName:"webgpu",kernelFunc:Qme},tfe=at({opType:le.IS_INF,dtype:"bool"}),afe={kernelName:fo,backendName:"webgpu",kernelFunc:tfe},nfe=at({opType:le.IS_NAN,dtype:"bool"}),rfe={kernelName:go,backendName:"webgpu",kernelFunc:nfe};function sfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new id(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var ife={kernelName:yo,backendName:"webgpu",kernelFunc:sfe},ofe=aa({opType:De.LESS,dtype:"bool",cpuKernelImpl:ice}),lfe={kernelName:vs,backendName:"webgpu",kernelFunc:ofe},ufe=aa({opType:De.LESS_EQUAL,dtype:"bool",cpuKernelImpl:sce}),dfe={kernelName:ws,backendName:"webgpu",kernelFunc:ufe},pfe=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` + `}};function f0e(e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let n=0;na.disposeData(T.dataId)),a.makeTensorInfo(u.outputShape,I.dtype,I.values)}let f=new m0e(d.shape,m),g=a.runWebGPUProgram(f,[d,h],d.dtype);c.push(g);let y=ke({inputs:{x:g},backend:a,attrs:{shape:u.outputShape}});return c.forEach(x=>a.disposeData(x.dataId)),y}var g0e={kernelName:bu,backendName:"webgpu",kernelFunc:Hk},y0e=ta({opType:Pe.GREATER,cpuKernelImpl:Nde,dtype:"bool"}),x0e={kernelName:Hi,backendName:"webgpu",kernelFunc:y0e},A0e=ta({opType:Pe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:Tde}),b0e={kernelName:ji,backendName:"webgpu",kernelFunc:A0e};function v0e(e){let{inputs:t,backend:a}=e,{input:n}=t;return Gk(n,!0,a)}var w0e={kernelName:Ap,backendName:"webgpu",kernelFunc:v0e},k0e=at({opType:le.IS_FINITE,dtype:"bool"}),I0e={kernelName:Xi,backendName:"webgpu",kernelFunc:k0e},S0e=at({opType:le.IS_INF,dtype:"bool"}),C0e={kernelName:Ki,backendName:"webgpu",kernelFunc:S0e},T0e=at({opType:le.IS_NAN,dtype:"bool"}),N0e={kernelName:Yi,backendName:"webgpu",kernelFunc:T0e};function R0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{alpha:s}=n,i=[{type:"float32",data:[s]}],o=new ed(r.shape,le.LEAKYRELU,"alpha : f32,");return a.runWebGPUProgram(o,[r],"float32",i)}var E0e={kernelName:Zi,backendName:"webgpu",kernelFunc:R0e},M0e=ta({opType:Pe.LESS,dtype:"bool",cpuKernelImpl:Ede}),$0e={kernelName:Ji,backendName:"webgpu",kernelFunc:M0e},P0e=ta({opType:Pe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:Rde}),_0e={kernelName:Qi,backendName:"webgpu",kernelFunc:P0e},F0e=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step); } } - `}};function cfe(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new pfe(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var hfe={kernelName:xo,backendName:"webgpu",kernelFunc:cfe},mfe=at({opType:le.LOG,cpuKernelImpl:oce}),ffe={kernelName:ks,backendName:"webgpu",kernelFunc:mfe},gfe=at({opType:le.LOG1P}),yfe={kernelName:Ao,backendName:"webgpu",kernelFunc:gfe},xfe=aa({opType:De.LOGICAL_AND,dtype:"bool"}),Afe={kernelName:bo,backendName:"webgpu",kernelFunc:xfe},bfe=at({opType:le.LOGICAL_NOT}),vfe={kernelName:vo,backendName:"webgpu",kernelFunc:bfe},wfe=aa({opType:De.LOGICAL_OR}),kfe={kernelName:wo,backendName:"webgpu",kernelFunc:wfe},D9=` + `}};function D0e(e){let{backend:t,attrs:a}=e,{start:n,stop:r,num:s}=a,i=(r-n)/(s-1),o=new F0e(s),l=[{type:"float32",data:[n]},{type:"float32",data:[i]}];return t.runWebGPUProgram(o,[],"float32",l)}var O0e={kernelName:eo,backendName:"webgpu",kernelFunc:D0e},z0e=at({opType:le.LOG,cpuKernelImpl:Mde}),L0e={kernelName:to,backendName:"webgpu",kernelFunc:z0e},W0e=at({opType:le.LOG1P}),B0e={kernelName:ao,backendName:"webgpu",kernelFunc:W0e},V0e=ta({opType:Pe.LOGICAL_AND,dtype:"bool"}),U0e={kernelName:no,backendName:"webgpu",kernelFunc:V0e},G0e=at({opType:le.LOGICAL_NOT}),H0e={kernelName:ro,backendName:"webgpu",kernelFunc:G0e},j0e=ta({opType:Pe.LOGICAL_OR}),q0e={kernelName:so,backendName:"webgpu",kernelFunc:j0e},jk=` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -7543,7 +7543,7 @@ return a / b;`,fQ=` } else { powValue = exp(log(basis) * (-uniforms.beta)); } -`,Ife=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` +`,X0e=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7561,12 +7561,12 @@ return a / b;`,fQ=` sum = sum + z * z; } } - ${D9} + ${jk} setOutputAtIndex(index, x * powValue); } } - `}},Sfe=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,v.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` + `}},K0e=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,v.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=de(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` var lrnSub: array; const elementsPerWorkgroup = ${this.elementsPerWorkgroup}; const maxAllowRadius = ${this.maxAllowRadius}; @@ -7594,11 +7594,11 @@ return a / b;`,fQ=` let z = lrnSub[index + i]; sum = sum + z * z; } - ${D9} + ${jk} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } - } `}};function Tfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u;s>16?u=new Ife(r.shape):u=new Sfe(r.shape,s);let d=[{type:"int32",data:[s]},{type:"float32",data:[i]},{type:"float32",data:[o]},{type:"float32",data:[l]}];return a.runWebGPUProgram(u,[r],r.dtype,d)}var Cfe={kernelName:ko,backendName:"webgpu",kernelFunc:Tfe},Nfe=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` + } `}};function Y0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n,u;s>16?u=new X0e(r.shape):u=new K0e(r.shape,s);let p=[{type:"int32",data:[s]},{type:"float32",data:[i]},{type:"float32",data:[o]},{type:"float32",data:[l]}];return a.runWebGPUProgram(u,[r],r.dtype,p)}var Z0e={kernelName:io,backendName:"webgpu",kernelFunc:Y0e},J0e=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7648,7 +7648,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, result); } } - `}};function Rfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=n,c=new Nfe(r.shape),p=[{type:"int32",data:[o]},{type:"float32",data:[l]},{type:"float32",data:[u]},{type:"float32",data:[d]}];return a.runWebGPUProgram(c,[r,s,i],r.dtype,p)}var Efe={kernelName:Tu,backendName:"webgpu",kernelFunc:Rfe},Mfe=aa({opType:De.MAX,cpuKernelImpl:uce}),Ffe={kernelName:Is,backendName:"webgpu",kernelFunc:Mfe};function $fe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=I.computePool2DInfo(r.shape,s,i,1,o,l);return w9(r,u,"max",a)}var Dfe={kernelName:So,backendName:"webgpu",kernelFunc:$fe};function Pfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,d=[1,1,1],c=I.computePool3DInfo(r.shape,s,i,d,o,u,l),p=new uy(c,"max"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(p,[r],r.dtype,h)}var _fe={kernelName:Cu,backendName:"webgpu",kernelFunc:Pfe},Ofe=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function Q0e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=n,c=new J0e(r.shape),d=[{type:"int32",data:[o]},{type:"float32",data:[l]},{type:"float32",data:[u]},{type:"float32",data:[p]}];return a.runWebGPUProgram(c,[r,s,i],r.dtype,d)}var eme={kernelName:vu,backendName:"webgpu",kernelFunc:Q0e},tme=ta({opType:Pe.MAX,cpuKernelImpl:Pde}),ame={kernelName:lo,backendName:"webgpu",kernelFunc:tme};function nme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n,u=C.computePool2DInfo(r.shape,s,i,1,o,l);return _k(r,u,"max",a)}var rme={kernelName:uo,backendName:"webgpu",kernelFunc:nme};function sme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=n,p=[1,1,1],c=C.computePool3DInfo(r.shape,s,i,p,o,u,l),d=new Z3(c,"max"),h=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return a.runWebGPUProgram(d,[r],r.dtype,h)}var ime={kernelName:wu,backendName:"webgpu",kernelFunc:sme},ome=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool2DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7693,7 +7693,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}},zfe=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},lme=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool3DBackprop"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -7751,7 +7751,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, dotProd); } } - `}};function Lfe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=n,c=[1,1,1],p=I.computePool3DInfo(i.shape,o,l,c,u,d),h=new uy(p,"max",!0),m=[{type:"int32",data:[p.strideDepth,p.strideHeight,p.strideWidth]},{type:"int32",data:[p.padInfo.front,p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.inDepth,p.inHeight,p.inWidth]},{type:"int32",data:[p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[i],"int32",m),g=new zfe(p);m=[{type:"int32",data:[p.strideDepth,p.strideHeight,p.strideWidth]},{type:"int32",data:[p.effectiveFilterDepth-1-p.padInfo.front,p.effectiveFilterHeight-1-p.padInfo.top,p.effectiveFilterWidth-1-p.padInfo.left]},{type:"int32",data:[p.effectiveFilterDepth,p.effectiveFilterHeight,p.effectiveFilterWidth]},{type:"int32",data:[p.outDepth]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],i.dtype,m);return a.disposeData(f.dataId),y}var Wfe={kernelName:Rp,backendName:"webgpu",kernelFunc:Lfe};function Bfe(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;ay([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:c}=n,p=I.computePool2DInfo(o.shape,l,u,1,d,c),h=new pp(p,"max",!0),m=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.inHeight,p.inWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[o],"int32",m),g=new Ofe(p);m=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.effectiveFilterHeight-1-p.padInfo.top,p.effectiveFilterWidth-1-p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]},{type:"int32",data:[p.outHeight]},{type:"int32",data:[p.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],o.dtype,m);return a.disposeData(f.dataId),y}var Vfe={kernelName:Np,backendName:"webgpu",kernelFunc:Bfe};function Ufe(e){let{inputs:t,backend:a,attrs:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=n,{x:l}=t;v.assert(l.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${l.shape.length}.`);let u=[1,1];v.assert(I.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let d=I.computePool2DInfo(l.shape,r,s,u,i),c=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]}],p=new pp(d,"max",!1),h=a.runWebGPUProgram(p,[l],l.dtype,c);p=new pp(d,"max",!0,!0,o);let m=a.runWebGPUProgram(p,[l],"int32",c);return[h,m]}var Gfe={kernelName:Nu,backendName:"webgpu",kernelFunc:Ufe};function Hfe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gl(r,s,i,"min",a)}var jfe={kernelName:Co,backendName:"webgpu",kernelFunc:Hfe},qfe=aa({opType:De.MIN,cpuKernelImpl:dce}),Xfe={kernelName:Ss,backendName:"webgpu",kernelFunc:qfe},Kfe=class{constructor(e,t,a){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,r)=>n[0]+e[r]+n[1]),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,r)=>{this.uniforms+=` pad${r} : vec2,`}),this.offset=a==="reflect"?0:1,this.shaderKey=`mirrorPad_${a}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((l,u)=>`uniforms.pad${u}[0]`).join(","),a=this.xShape.map((l,u)=>`uniforms.pad${u}[0] + uniforms.xShape${e>1?`[${u}]`:""}`).join(","),n=e===1?"start":"start[i]",r=e===1?"end":"end[i]",s=e===1?"outC":"outC[i]",i=Dt(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + `}};function ume(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=n,c=[1,1,1],d=C.computePool3DInfo(i.shape,o,l,c,u,p),h=new Z3(d,"max",!0),m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.front,d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inDepth,d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[i],"int32",m),g=new lme(d);m=[{type:"int32",data:[d.strideDepth,d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterDepth-1-d.padInfo.front,d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outDepth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],i.dtype,m);return a.disposeData(f.dataId),y}var dme={kernelName:wp,backendName:"webgpu",kernelFunc:ume};function pme(e){let{inputs:t,backend:a,attrs:n}=e,{dy:r,input:s,output:i}=t,o=s;q3([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:c}=n,d=C.computePool2DInfo(o.shape,l,u,1,p,c),h=new rp(d,"max",!0),m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.inHeight,d.inWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]}],f=a.runWebGPUProgram(h,[o],"int32",m),g=new ome(d);m=[{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.effectiveFilterHeight-1-d.padInfo.top,d.effectiveFilterWidth-1-d.padInfo.left]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]},{type:"int32",data:[d.effectiveFilterHeight,d.effectiveFilterWidth]},{type:"int32",data:[d.outHeight]},{type:"int32",data:[d.outWidth]}];let y=a.runWebGPUProgram(g,[r,f],o.dtype,m);return a.disposeData(f.dataId),y}var cme={kernelName:vp,backendName:"webgpu",kernelFunc:pme};function hme(e){let{inputs:t,backend:a,attrs:n}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=n,{x:l}=t;v.assert(l.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${l.shape.length}.`);let u=[1,1];v.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(l.shape,r,s,u,i),c=[{type:"int32",data:[p.strideHeight,p.strideWidth]},{type:"int32",data:[p.padInfo.top,p.padInfo.left]},{type:"int32",data:[p.dilationHeight,p.dilationWidth]},{type:"int32",data:[p.inHeight,p.inWidth]},{type:"int32",data:[p.effectiveFilterHeight,p.effectiveFilterWidth]}],d=new rp(p,"max",!1),h=a.runWebGPUProgram(d,[l],l.dtype,c);d=new rp(p,"max",!0,!0,o);let m=a.runWebGPUProgram(d,[l],"int32",c);return[h,m]}var mme={kernelName:ku,backendName:"webgpu",kernelFunc:hme};function fme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"min",a)}var gme={kernelName:co,backendName:"webgpu",kernelFunc:fme},yme=ta({opType:Pe.MIN,cpuKernelImpl:_de}),xme={kernelName:ho,backendName:"webgpu",kernelFunc:yme},Ame=class{constructor(e,t,a){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,r)=>n[0]+e[r]+n[1]),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,r)=>{this.uniforms+=` pad${r} : vec2,`}),this.offset=a==="reflect"?0:1,this.shaderKey=`mirrorPad_${a}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((l,u)=>`uniforms.pad${u}[0]`).join(","),a=this.xShape.map((l,u)=>`uniforms.pad${u}[0] + uniforms.xShape${e>1?`[${u}]`:""}`).join(","),n=e===1?"start":"start[i]",r=e===1?"end":"end[i]",s=e===1?"outC":"outC[i]",i=Pt(e),o=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` ${ue("index")} { if (index < uniforms.size) { let start = ${i}(${t}); @@ -7768,7 +7768,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, getX(${o})); } } - `}},Yfe={kernelName:No,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{paddings:r,mode:s}=t,i=a,o=r.map(u=>({type:"int32",data:[u[0],u[1]]})),l=new Kfe(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},Zfe=aa({opType:De.MOD}),Jfe={kernelName:Ro,backendName:"webgpu",kernelFunc:Zfe},Qfe=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` + `}},bme={kernelName:mo,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{x:n}=e,{paddings:r,mode:s}=t,i=a,o=r.map(u=>({type:"int32",data:[u[0],u[1]]})),l=new Ame(n.shape,r,s);return i.runWebGPUProgram(l,[n],n.dtype,o)}},vme=ta({opType:Pe.MOD}),wme={kernelName:fo,backendName:"webgpu",kernelFunc:vme},kme=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW fn random (seed : f32, resultUV : vec2) -> f32 { @@ -7801,7 +7801,7 @@ return a / b;`,fQ=` setOutputAtIndexI32(index, uniforms.numOutcomes - 1); } } - `}},e2e=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` + `}},Ime=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` var buf : array; var rowMaxShared : f32; var rowSumShared : f32; @@ -7860,7 +7860,7 @@ return a / b;`,fQ=` setOutputAtCoords(row, col, value); } } - `}};function P9(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape)/r.shape[s],r.shape[s]]}}),o=new e2e(i.shape),l=a.runWebGPUProgram(o,[i],r.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r.shape}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var t2e={kernelName:el,backendName:"webgpu",kernelFunc:P9};function a2e(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:P9({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],d=l.shape[1],c=new Qfe(u,s),p=[{type:"float32",data:[i]},{type:"int32",data:[d]}],h=a.runWebGPUProgram(c,[l],"int32",p);return o||a.disposeData(l.dataId),h}var n2e={kernelName:Eo,backendName:"webgpu",kernelFunc:a2e};function r2e(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=cce(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new id(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var s2e={kernelName:Ru,backendName:"webgpu",kernelFunc:r2e};function i2e(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),d=a.readSync(s.dataId),{selectedIndices:c}=Fn.nonMaxSuppressionV3Impl(u,d,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var o2e={kernelName:Mo,backendName:"webgpu",kernelFunc:i2e};function l2e(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,d=a.readSync(r.dataId),c=a.readSync(s.dataId),p=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=Fn.nonMaxSuppressionV5Impl(d,c,p,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var u2e={kernelName:Fo,backendName:"webgpu",kernelFunc:l2e},d2e=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + `}};function qk(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{dim:s}=n,i=ke({inputs:{x:r},backend:a,attrs:{shape:[v.sizeFromShape(r.shape)/r.shape[s],r.shape[s]]}}),o=new Ime(i.shape),l=a.runWebGPUProgram(o,[i],r.dtype),u=ke({inputs:{x:l},backend:a,attrs:{shape:r.shape}});return a.disposeData(i.dataId),a.disposeData(l.dataId),u}var Sme={kernelName:Ho,backendName:"webgpu",kernelFunc:qk};function Cme(e){let{inputs:t,backend:a,attrs:n}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=n,l=o?r:qk({inputs:{logits:r},backend:a,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],c=new kme(u,s),d=[{type:"float32",data:[i]},{type:"int32",data:[p]}],h=a.runWebGPUProgram(c,[l],"int32",d);return o||a.disposeData(l.dataId),h}var Tme={kernelName:go,backendName:"webgpu",kernelFunc:Cme};function Nme(e){let{inputs:t,backend:a}=e,{x:n}=t;if(a.shouldExecuteOnCPU([n])){let s=a.tensorMap.get(n.dataId),[i,o]=Dde(s.values,n.shape,n.dtype);return a.makeTensorInfo(o,n.dtype,i)}let r=new ed(n.shape,le.NEG);return a.runWebGPUProgram(r,[n],n.dtype)}var Rme={kernelName:Iu,backendName:"webgpu",kernelFunc:Nme};function Eme(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=n,u=a.readSync(r.dataId),p=a.readSync(s.dataId),{selectedIndices:c}=Rn.nonMaxSuppressionV3Impl(u,p,i,o,l);return a.makeTensorInfo([c.length],"int32",new Int32Array(c))}var Mme={kernelName:Ao,backendName:"webgpu",kernelFunc:Eme};function $me(e){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:a,attrs:n}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=n,p=a.readSync(r.dataId),c=a.readSync(s.dataId),d=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=Rn.nonMaxSuppressionV5Impl(p,c,d,h,m,f);return[a.makeTensorInfo([g.length],"int32",new Int32Array(g)),a.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Pme={kernelName:bo,backendName:"webgpu",kernelFunc:$me},_me=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7868,23 +7868,23 @@ return a / b;`,fQ=` f32(i32(round(getX(coords.x))) == coords.y))); } } - `}};function p2e(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),d=new d2e(u,i),c=ke({inputs:{x:r},backend:a,attrs:{shape:[u]}}),p=[{type:"float32",data:[o]},{type:"float32",data:[l]}],h=a.runWebGPUProgram(d,[c],s,p);a.disposeData(c.dataId);let m=[...r.shape,i],f=ke({inputs:{x:h},backend:a,attrs:{shape:m}});return a.disposeData(h.dataId),f}var c2e={kernelName:$o,backendName:"webgpu",kernelFunc:p2e};function _h(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=oc({inputs:{input:n},backend:a}),s=_h({inputs:{x:r},backend:a}),i=A0({inputs:{input:n},backend:a}),o=_h({inputs:{x:i},backend:a}),l=fl({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Wa({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var h2e={kernelName:qu,backendName:"webgpu",kernelFunc:_h};function _9(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=oc({inputs:{input:n},backend:a}),s=_9({inputs:{x:r},backend:a}),i=A0({inputs:{input:n},backend:a}),o=_h({inputs:{x:i},backend:a}),l=fl({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Wa({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var m2e={kernelName:Mu,backendName:"webgpu",kernelFunc:_9};function f2e(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return rg({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(d=>{v.assertShapesMatch(s,d.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===d.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(d=>{let c=rg({inputs:{input:d},backend:a,attrs:{dim:r}});return o.push(c),c}),u=S9({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(d=>a.disposeData(d.dataId)),u}var g2e={kernelName:Fu,backendName:"webgpu",kernelFunc:f2e};function O9(e,t=!1){let a=e.length,n=Dt(a),r=e.map((c,p)=>`uniforms.pad${p}[0]`).join(","),s=e.map((c,p)=>`uniforms.pad${p}[0] + uniforms.xShape${a>1?`[${p}]`:""}`).join(","),i=a>1?`${n}(${r})`:`${r}`,o=a>1?`${n}(${s})`:`${s}`,l=a>1?"any(paddedCoords < start)":"paddedCoords < start",u=a>1?"any(paddedCoords >= end)":"paddedCoords >= end",d=a>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a):"coords";return` + `}};function Fme(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=n,u=v.sizeFromShape(r.shape),p=new _me(u,i),c=ke({inputs:{x:r},backend:a,attrs:{shape:[u]}}),d=[{type:"float32",data:[o]},{type:"float32",data:[l]}],h=a.runWebGPUProgram(p,[c],s,d);a.disposeData(c.dataId);let m=[...r.shape,i],f=ke({inputs:{x:h},backend:a,attrs:{shape:m}});return a.disposeData(h.dataId),f}var Dme={kernelName:vo,backendName:"webgpu",kernelFunc:Fme};function Rh(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="complex64"){let r=tc({inputs:{input:n},backend:a}),s=Rh({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Wa({attrs:{shape:n.shape,dtype:n.dtype,value:n.dtype==="string"?"":0},backend:a})}var Ome={kernelName:Bu,backendName:"webgpu",kernelFunc:Rh};function Xk(e){let{inputs:t,backend:a}=e,{x:n}=t;if(n.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(n.dtype==="complex64"){let r=tc({inputs:{input:n},backend:a}),s=Xk({inputs:{x:r},backend:a}),i=h0({inputs:{input:n},backend:a}),o=Rh({inputs:{x:i},backend:a}),l=ll({inputs:{real:s,imag:o},backend:a});return a.disposeData(r.dataId),a.disposeData(s.dataId),a.disposeData(i.dataId),a.disposeData(o.dataId),l}else return Wa({attrs:{shape:n.shape,dtype:n.dtype,value:1},backend:a})}var zme={kernelName:Cu,backendName:"webgpu",kernelFunc:Xk};function Lme(e){let{inputs:t,backend:a,attrs:n}=e,{axis:r}=n;if(t.length===1)return Y1({inputs:{input:t[0]},backend:a,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let c=Y1({inputs:{input:p},backend:a,attrs:{dim:r}});return o.push(c),c}),u=Ok({inputs:l,backend:a,attrs:{axis:r}});return o.forEach(p=>a.disposeData(p.dataId)),u}var Wme={kernelName:Tu,backendName:"webgpu",kernelFunc:Lme};function Kk(e,t=!1){let a=e.length,n=Pt(a),r=e.map((c,d)=>`uniforms.pad${d}[0]`).join(","),s=e.map((c,d)=>`uniforms.pad${d}[0] + uniforms.xShape${a>1?`[${d}]`:""}`).join(","),i=a>1?`${n}(${r})`:`${r}`,o=a>1?`${n}(${s})`:`${s}`,l=a>1?"any(paddedCoords < start)":"paddedCoords < start",u=a>1?"any(paddedCoords >= end)":"paddedCoords >= end",p=a>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a):"coords";return` let start = ${i}; let end = ${o}; if (${l} || ${u}) { setOutputAtIndex(index, ${t?0:"uniforms.constantValue"}); } else { let coords = paddedCoords - start; - setOutputAtIndex(index, getX(${d})); + setOutputAtIndex(index, getX(${p})); } - `}var y2e=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((a,n)=>a[0]+e[n]+a[1]),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` + `}var Bme=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((a,n)=>a[0]+e[n]+a[1]),this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((a,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${O9(this.xShape)} + ${Kk(this.xShape)} } } - `}},x2e=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(s.every(u=>v.arraysEqual(u,[0,0])))return an({inputs:{x:r},backend:a});if(v.sizeFromShape(r.shape)===0){let u=s.map((d,c)=>d[0]+r.shape[c]+d[1]);return Wa({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=[{type:"float32",data:[i]}];s.map(u=>o.push({type:"int32",data:[u[0],u[1]]}));let l=new y2e(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},A2e={kernelName:Do,backendName:"webgpu",kernelFunc:x2e},b2e=aa({opType:De.POW}),v2e={kernelName:Po,backendName:"webgpu",kernelFunc:b2e};function w2e(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new $h(De.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var k2e={kernelName:_o,backendName:"webgpu",kernelFunc:w2e};function I2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return gl(r,s,i,"prod",a)}var S2e={kernelName:Oo,backendName:"webgpu",kernelFunc:I2e},T2e=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=fce(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},C2e={kernelName:$u,backendName:"webgpu",kernelFunc:T2e},N2e=aa({opType:De.DIV}),R2e={kernelName:io,backendName:"webgpu",kernelFunc:N2e},E2e=at({opType:le.RECIPROCAL}),M2e={kernelName:zo,backendName:"webgpu",kernelFunc:E2e},F2e=at({opType:le.RELU}),$2e={kernelName:Lo,backendName:"webgpu",kernelFunc:F2e},D2e=at({opType:le.RELU6}),P2e={kernelName:Vo,backendName:"webgpu",kernelFunc:D2e},_2e=class{constructor(e,t,a){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + `}},Vme=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{paddings:s,constantValue:i}=n;if(s.every(u=>v.arraysEqual(u,[0,0])))return tn({inputs:{x:r},backend:a});if(v.sizeFromShape(r.shape)===0){let u=s.map((p,c)=>p[0]+r.shape[c]+p[1]);return Wa({backend:a,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=[{type:"float32",data:[i]}];s.map(u=>o.push({type:"int32",data:[u[0],u[1]]}));let l=new Bme(r.shape,s);return a.runWebGPUProgram(l,[r],r.dtype,o)},Ume={kernelName:wo,backendName:"webgpu",kernelFunc:Vme},Gme=ta({opType:Pe.POW}),Hme={kernelName:ko,backendName:"webgpu",kernelFunc:Gme};function jme(e){let{inputs:t,backend:a}=e,{x:n,alpha:r}=t,s=new Th(Pe.PRELU,n.shape,r.shape);return a.runWebGPUProgram(s,[n,r],"float32")}var qme={kernelName:Io,backendName:"webgpu",kernelFunc:jme};function Xme(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{axis:s,keepDims:i}=n;return ul(r,s,i,"prod",a)}var Kme={kernelName:So,backendName:"webgpu",kernelFunc:Xme},Yme=e=>{let{backend:t,attrs:a}=e,{start:n,stop:r,step:s,dtype:i}=a,o=Lde(n,r,s,i);return t.makeTensorInfo([o.length],i,o)},Zme={kernelName:Nu,backendName:"webgpu",kernelFunc:Yme},Jme=ta({opType:Pe.DIV}),Qme={kernelName:_i,backendName:"webgpu",kernelFunc:Jme},efe=at({opType:le.RECIPROCAL}),tfe={kernelName:Co,backendName:"webgpu",kernelFunc:efe},afe=at({opType:le.RELU}),nfe={kernelName:To,backendName:"webgpu",kernelFunc:afe},rfe=at({opType:le.RELU6}),sfe={kernelName:Eo,backendName:"webgpu",kernelFunc:rfe},ife=class{constructor(e,t,a){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7927,7 +7927,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, newValue); } } - `}};function O2e(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,size:i,halfPixelCenters:o}=n,[l,u]=i,d=s&&l>1?1:0,c=s&&u>1?1:0,p=[{type:"float32",data:[d,c]},{type:"float32",data:[o?.5:0]}],h=new _2e(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",p)}var z2e={kernelName:Bo,backendName:"webgpu",kernelFunc:O2e},L2e=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, + `}};function ofe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,size:i,halfPixelCenters:o}=n,[l,u]=i,p=s&&l>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[p,c]},{type:"float32",data:[o?.5:0]}],h=new ife(r.shape,l,u);return a.runWebGPUProgram(h,[r],"float32",d)}var lfe={kernelName:Ro,backendName:"webgpu",kernelFunc:ofe},ufe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8002,7 +8002,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, accumulator); } } - `}};function W2e(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,d]=s.shape,c=[i&&u>1?o-1:o,i&&d>1?l-1:l],p=[i&&u>1?u-1:u,i&&d>1?d-1:d],h=c[0]/p[0],m=c[1]/p[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new L2e(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:p},{type:"float32",data:[h]},{type:"float32",data:[m]},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var B2e={kernelName:_u,backendName:"webgpu",kernelFunc:W2e},V2e=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` + `}};function dfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new ufe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[h]},{type:"float32",data:[m]},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var pfe={kernelName:Mu,backendName:"webgpu",kernelFunc:dfe},cfe=class{constructor(e,t,a,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,a,e[3]],this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -8033,7 +8033,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, newValue); } } - `}};function U2e(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,d=s&&l>1?1:0,c=s&&u>1?1:0,p=[{type:"float32",data:[d,c]},{type:"float32",data:[s?.5:0]}],h=new V2e(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,p)}var G2e={kernelName:Wo,backendName:"webgpu",kernelFunc:U2e},H2e=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, + `}};function hfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=n,[l,u]=o,p=s&&l>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[p,c]},{type:"float32",data:[s?.5:0]}],h=new cfe(r.shape,l,u,i);return a.runWebGPUProgram(h,[r],r.dtype,d)}var mfe={kernelName:No,backendName:"webgpu",kernelFunc:hfe},ffe=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8093,7 +8093,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, accumulator); } } - `}};function j2e(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,d]=s.shape,c=[i&&u>1?o-1:o,i&&d>1?l-1:l],p=[i&&u>1?u-1:u,i&&d>1?d-1:d],h=c[0]/p[0],m=c[1]/p[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new H2e(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:p},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var q2e={kernelName:Pu,backendName:"webgpu",kernelFunc:j2e},X2e=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + `}};function gfe(e){let{inputs:t,backend:a,attrs:n}=e,{images:r,dy:s}=t,{alignCorners:i}=n,[,o,l]=r.shape,[,u,p]=s.shape,c=[i&&u>1?o-1:o,i&&p>1?l-1:l],d=[i&&u>1?u-1:u,i&&p>1?p-1:p],h=c[0]/d[0],m=c[1]/d[1],f=1/h,g=1/m,y=Math.ceil(f)*2+2,x=Math.ceil(g)*2+2,A=new ffe(r.shape,i),b=[{type:"int32",data:c},{type:"int32",data:d},{type:"float32",data:[f]},{type:"float32",data:[g]},{type:"int32",data:[y]},{type:"int32",data:[x]}];return a.runWebGPUProgram(A,[s],s.dtype,b)}var yfe={kernelName:Eu,backendName:"webgpu",kernelFunc:gfe},xfe=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` // Using uniform variables as judging conditions, so the function has // coherent execution within all threads. @@ -8123,7 +8123,7 @@ return a / b;`,fQ=` reverseCoords[1], reverseCoords[2], reverseCoords[3])); } } - `}};function K2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return an({inputs:{x:r},backend:a});let o=r.shape,l=[1,1,1,1];o.forEach((g,y)=>{let x=y+4-i;l[x]=g});let u=v.parseAxisParam(s,r.shape),d=[0,0,0,0];u.forEach(g=>{let y=g+4-i;d[y]=1});let c=[{type:"int32",data:d}],p=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),h=new X2e(l),m=a.runWebGPUProgram(h,[p],p.dtype,c);a.disposeData(p.dataId);let f=ke({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),f}var Y2e={kernelName:Uo,backendName:"webgpu",kernelFunc:K2e},Z2e=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function Afe(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{dims:s}=n,i=r.shape.length;if(i===0)return tn({inputs:{x:r},backend:a});let o=r.shape,l=[1,1,1,1];o.forEach((g,y)=>{let x=y+4-i;l[x]=g});let u=v.parseAxisParam(s,r.shape),p=[0,0,0,0];u.forEach(g=>{let y=g+4-i;p[y]=1});let c=[{type:"int32",data:p}],d=ke({inputs:{x:r},backend:a,attrs:{shape:l}}),h=new xfe(l),m=a.runWebGPUProgram(h,[d],d.dtype,c);a.disposeData(d.dataId);let f=ke({inputs:{x:m},backend:a,attrs:{shape:o}});return a.disposeData(m.dataId),f}var bfe={kernelName:Mo,backendName:"webgpu",kernelFunc:Afe},vfe=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`,this.shaderKey="rotate",this.outputShape=e,typeof t=="number"?(this.uniforms+=" fillValue : f32,",this.fillSnippet="var outputValue = uniforms.fillValue;",this.shaderKey+="_float"):(this.uniforms+=" fillValue : vec3,",this.fillSnippet="var outputValue = uniforms.fillValue[coords[3]];",this.shaderKey+="_vec3")}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8144,7 +8144,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, outputValue); } } - `}},J2e={kernelName:ol,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new Z2e(n.shape,s),[u,d]=I.getImageCenter(i,n.shape[1],n.shape[2]),c=[{type:"float32",data:[u]},{type:"float32",data:[d]},{type:"float32",data:[Math.sin(r)]},{type:"float32",data:[Math.cos(r)]}];return typeof s=="number"?c.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:"float32",data:s}),o.runWebGPUProgram(l,[n],n.dtype,c)}},Q2e=at({opType:le.ROUND}),e1e={kernelName:Go,backendName:"webgpu",kernelFunc:Q2e},t1e=at({opType:le.RSQRT,cpuKernelImpl:gce}),a1e={kernelName:Ns,backendName:"webgpu",kernelFunc:t1e},Gd=class{constructor(e,t,a,n,r,s,i,o=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=s,this.type=i,this.sumDupeIndices=o,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}_${r.length}`;let l=Dt(r.length);this.uniforms=`sliceDim : i32, strides: ${l}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=a}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,a=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",r="";this.dispatchLayout.x.length===1?(n="flattenedIndex",r=` + `}},wfe={kernelName:el,backendName:"webgpu",kernelFunc:({inputs:e,attrs:t,backend:a})=>{let{image:n}=e,{radians:r,fillValue:s,center:i}=t,o=a,l=new vfe(n.shape,s),[u,p]=C.getImageCenter(i,n.shape[1],n.shape[2]),c=[{type:"float32",data:[u]},{type:"float32",data:[p]},{type:"float32",data:[Math.sin(r)]},{type:"float32",data:[Math.cos(r)]}];return typeof s=="number"?c.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:"float32",data:s}),o.runWebGPUProgram(l,[n],n.dtype,c)}},kfe=at({opType:le.ROUND}),Ife={kernelName:$o,backendName:"webgpu",kernelFunc:kfe},Sfe=at({opType:le.RSQRT,cpuKernelImpl:Wde}),Cfe={kernelName:Po,backendName:"webgpu",kernelFunc:Sfe},Od=class{constructor(e,t,a,n,r,s,i,o=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=s,this.type=i,this.sumDupeIndices=o,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${a}_${n}_${this.sliceDimGreaterThanOne}_${i}_${o}_${r.length}`;let l=Pt(r.length);this.uniforms=`sliceDim : i32, strides: ${l}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=a}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,a=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",r="";this.dispatchLayout.x.length===1?(n="flattenedIndex",r=` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; } @@ -8170,12 +8170,12 @@ return a / b;`,fQ=` flattenedIndex = flattenedIndex + indexInside * ${a}; } let updateValue = - ${gi(this.type)}(${s}); + ${Hs(this.type)}(${s}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices?Bs("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices?ys("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} } - }`}};function n1e(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=I.calculateShapes(s,r,i),p=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=ke({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=m.dtype,g=Wa({backend:a,attrs:{shape:p,value:0,dtype:f}}),y=v.sizeFromShape(m.shape),x=[{type:"int32",data:[o]},{type:"int32",data:d},{type:"int32",data:[y]}],A=new Gd(m.shape,o,h.shape.length,m.shape.length,d,p,f),b=a.runWebGPUProgram(A,[m,h],f,x,g),w=ke({inputs:{x:b},backend:a,attrs:{shape:i}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(b.dataId),w}var r1e={kernelName:Ho,backendName:"webgpu",kernelFunc:n1e},s1e=class{constructor(e,t){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` + }`}};function Tfe(e){let{inputs:t,backend:a,attrs:n}=e,{indices:r,updates:s}=t,{shape:i}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(s,r,i),d=[c/u,u];if(c===0)return a.makeTensorInfo(i,r.dtype);let h=ke({inputs:{x:r},backend:a,attrs:{shape:[l,o]}}),m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,u]}}),f=m.dtype,g=Wa({backend:a,attrs:{shape:d,value:0,dtype:f}}),y=v.sizeFromShape(m.shape),x=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[y]}],A=new Od(m.shape,o,h.shape.length,m.shape.length,p,d,f),b=a.runWebGPUProgram(A,[m,h],f,x,g),w=ke({inputs:{x:b},backend:a,attrs:{shape:i}});return a.disposeData(h.dataId),a.disposeData(m.dataId),a.disposeData(b.dataId),w}var Nfe={kernelName:_o,backendName:"webgpu",kernelFunc:Tfe},Rfe=class{constructor(e,t){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` fn findBound(batch: i32, value: f32) -> i32 { var left = i32(0); var right = uniforms.numInputs; @@ -8197,7 +8197,7 @@ return a / b;`,fQ=` setOutputAtIndexI32(index, findBound(coords[0], value)); } } - `}};function i1e(e){let{inputs:t,backend:a,attrs:n}=e,{sortedSequence:r,values:s}=t,{side:i}=n,o=new s1e([s.shape[0],s.shape[1]],i),l=[{type:"int32",data:[r.shape[1]]}];return a.runWebGPUProgram(o,[r,s],"int32",l)}var o1e={kernelName:qo,backendName:"webgpu",kernelFunc:i1e},l1e=class{constructor(e,t,a){this.variableNames=["c","a","b"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=a,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[],r=[];for(let s=0;s4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[],r=[];for(let s=0;s{this.uniforms+=` pad${l} : vec2,`}),this.shaderKey=`spaceToBatchND_${r}`}getUserCode(){let e=Dt(this.outputShape.length),t=x9(this.newDim);return` - ${mh(this.paddedXShape,"PaddedX")} + `}};function Pfe(e){let{inputs:t,backend:a}=e,{condition:n,t:r,e:s}=t,i=new $fe(n.shape.length,r.shape,r.shape.length);return a.runWebGPUProgram(i,[n,r,s],pa(r.dtype,s.dtype))}var _fe={kernelName:$u,backendName:"webgpu",kernelFunc:Pfe},Ffe=at({opType:le.SELU}),Dfe={kernelName:Oo,backendName:"webgpu",kernelFunc:Ffe},Ofe=at({opType:le.SIGMOID}),zfe={kernelName:Bo,backendName:"webgpu",kernelFunc:Ofe},Lfe=at({opType:le.SIGN}),Wfe={kernelName:Wo,backendName:"webgpu",kernelFunc:Lfe},Bfe=at({opType:le.SIN}),Vfe={kernelName:zo,backendName:"webgpu",kernelFunc:Bfe},Ufe=at({opType:le.SINH}),Gfe={kernelName:Lo,backendName:"webgpu",kernelFunc:Ufe},Hfe=at({opType:le.SOFTPLUS}),jfe={kernelName:Vo,backendName:"webgpu",kernelFunc:Hfe},qfe=class{constructor(e,t,a,n,r,s){this.variableNames=["x"],this.outputShape=[],this.uniforms="",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let o=0;o{this.uniforms+=` pad${l} : vec2,`}),this.shaderKey=`spaceToBatchND_${r}`}getUserCode(){let e=Pt(this.outputShape.length),t=Ek(this.newDim);return` + ${lh(this.paddedXShape,"PaddedX")} ${ue("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${O9(this.xShape,!0)} + ${Kk(this.xShape,!0)} } } - `}},I1e=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=[[0,0]];l.push(...i);for(let x=1+s.length;xx[0]+r.shape[A]+x[1]),d=I.getReshaped(u,s,o,!1),c=I.getPermuted(d.length,s.length,!1),p=I.getReshapedPermuted(u,s,o,!1),h=v.computeStrides(u),m=new k1e(r.shape,u,l,d,c,h.length),f=[{type:"int32",data:d},{type:"int32",data:h}];l.map(x=>f.push({type:"int32",data:[x[0],x[1]]}));let g=a.runWebGPUProgram(m,[r],r.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:p}});return a.disposeData(g.dataId),y},S1e={kernelName:Lu,backendName:"webgpu",kernelFunc:I1e},T1e=class{constructor(e,t,a){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=a,this.dispatchLayout=me([t]),this.dispatch=de(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` + `}},Xfe=e=>{let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{blockShape:s,paddings:i}=n;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let o=s.reduce((x,A)=>x*A),l=[[0,0]];l.push(...i);for(let x=1+s.length;xx[0]+r.shape[A]+x[1]),p=C.getReshaped(u,s,o,!1),c=C.getPermuted(p.length,s.length,!1),d=C.getReshapedPermuted(u,s,o,!1),h=v.computeStrides(u),m=new qfe(r.shape,u,l,p,c,h.length),f=[{type:"int32",data:p},{type:"int32",data:h}];l.map(x=>f.push({type:"int32",data:[x[0],x[1]]}));let g=a.runWebGPUProgram(m,[r],r.dtype,f),y=ke({inputs:{x:g},backend:a,attrs:{shape:d}});return a.disposeData(g.dataId),y},Kfe={kernelName:_u,backendName:"webgpu",kernelFunc:Xfe},Yfe=class{constructor(e,t,a){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=a,this.dispatchLayout=me([t]),this.dispatch=de(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` ${ue("index")} { if (index < uniforms.sparseSize) { let indexInSegmentIds = index / uniforms.segmentSize; @@ -8229,17 +8229,17 @@ return a / b;`,fQ=` let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${Bs("&result[outIndex]","value",this.type)} + ${ys("&result[outIndex]","value",this.type)} } } - `}},C1e=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=me(t),this.dispatch=de(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` + `}},Zfe=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=me(t),this.dispatch=de(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` ${ue("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; - ${Bs("&result[segmentId]","1","int32")} + ${ys("&result[segmentId]","1","int32")} } } - `}},N1e=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` + `}},Jfe=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let segmentId = index / uniforms.segmentSize; @@ -8249,21 +8249,21 @@ return a / b;`,fQ=` } } } - `}};function z9(e,t,a,n=!1,r){let s=v.sizeFromShape(e.shape)/e.shape[0],i=e.dtype,o=v.sizeFromShape(t.shape),l=r.readSync(a.dataId),u=o>0?l[o-1]+1:0,d,c=e.shape.slice();c[0]=u;let p=o*s,h=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});d=new T1e(c,p,i);let m=[{type:"int32",data:[s]},{type:"int32",data:[p]}],f=r.runWebGPUProgram(d,[e,t,a],i,m,h);if(n)return f;let g=Wa({backend:r,attrs:{shape:[u],value:0,dtype:"int32"}});d=new C1e(u,a.shape);let y=r.runWebGPUProgram(d,[a],"int32",null,g),x=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});d=new N1e(c,i),m=[{type:"int32",data:[s]}];let A=r.runWebGPUProgram(d,[f,y],i,m,x);return r.disposeData(f.dataId),r.disposeData(y.dataId),A}function R1e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return z9(n,r,s,!1,a)}var E1e={kernelName:Vu,backendName:"webgpu",kernelFunc:R1e};function M1e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return z9(n,r,s,!0,a)}var F1e={kernelName:Uu,backendName:"webgpu",kernelFunc:M1e},$1e=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n0?l[o-1]+1:0,p,c=e.shape.slice();c[0]=u;let d=o*s,h=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Yfe(c,d,i);let m=[{type:"int32",data:[s]},{type:"int32",data:[d]}],f=r.runWebGPUProgram(p,[e,t,a],i,m,h);if(n)return f;let g=Wa({backend:r,attrs:{shape:[u],value:0,dtype:"int32"}});p=new Zfe(u,a.shape);let y=r.runWebGPUProgram(p,[a],"int32",null,g),x=Wa({backend:r,attrs:{shape:c,value:0,dtype:i}});p=new Jfe(c,i),m=[{type:"int32",data:[s]}];let A=r.runWebGPUProgram(p,[f,y],i,m,x);return r.disposeData(f.dataId),r.disposeData(y.dataId),A}function Qfe(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Yk(n,r,s,!1,a)}var e2e={kernelName:Ou,backendName:"webgpu",kernelFunc:Qfe};function t2e(e){let{inputs:t,backend:a}=e,{data:n,indices:r,segmentIds:s}=t;return Yk(n,r,s,!0,a)}var a2e={kernelName:zu,backendName:"webgpu",kernelFunc:t2e},n2e=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let a=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`(resRC % ${t}aShape)`;let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=Te(r.shape,r.dtype,l),d=kce(u,s);return a.makeTensorInfo(d.shape,d.dtype,d.values)}let i=new $1e(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var P1e={kernelName:$s,backendName:"webgpu",kernelFunc:dy};function _1e(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:d,strides:c,outputSize:p}=I.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),M=a.bufferSync(s),F=v.decodeString(a.readSync(i.dataId)[0]),E=yce(N,M,o,p,d,u,l,c,F,h);return a.makeTensorInfo(o,E.dtype,E.values)}let m=[p/d,d],f=ke({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?ke({inputs:{x:s},backend:a,attrs:{shape:[u,d]}}):an({inputs:{x:s},backend:a}),y=g.dtype,x=a.makeTensorInfo([],y,v.makeZerosTypedArray(1,y)),A=ke({inputs:{x:i},backend:a,attrs:{shape:Array(m.length).fill(1)}}),b=dy({inputs:{x:A},backend:a,attrs:{reps:m}}),w=v.sizeFromShape([u,d]),S=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let N=new Gd([u,d],l,f.shape.length,g.shape.length,c,m,y,h);a.runWebGPUProgram(N,[g,f],y,S,b)}break;default:{let N=new Gd([u,d],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,S,b)}{let N=new Gd([u,d],l,f.shape.length,g.shape.length,c,m,y);a.runWebGPUProgram(N,[g,f],y,S,b)}}let C=ke({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(f.dataId),a.disposeData(g.dataId),a.disposeData(A.dataId),a.disposeData(x.dataId),a.disposeData(b.dataId),C}var O1e={kernelName:tl,backendName:"webgpu",kernelFunc:_1e};function z1e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=I.prepareSplitSize(r,s,o),u=r.shape.length,d=new Array(u).fill(0),c=r.shape.slice();return l.map(p=>{let h=[...c];h[o]=p;let m=od({inputs:{x:r},backend:a,attrs:{begin:d,size:h}});return d[o]+=p,m})}var L1e={kernelName:Wu,backendName:"webgpu",kernelFunc:z1e},W1e=at({opType:le.SQRT}),B1e={kernelName:Es,backendName:"webgpu",kernelFunc:W1e},V1e={kernelName:Fp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new id(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},U1e=aa({opType:De.SQUARED_DIFFERENCE}),G1e={kernelName:Ms,backendName:"webgpu",kernelFunc:U1e};function H1e({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new id(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var j1e={kernelName:Ds,backendName:"webgpu",kernelFunc:H1e},q1e=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Dt(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let a=0;t=this.outputShape.map((n,r)=>(a++,this.outputShape.length===1?`coords * uniforms.strides[${r}] + uniforms.begin[${r}]`:`coords[${a-1}] * uniforms.strides[${r}] + uniforms.begin[${r}]`)).join(",")}return` + `}};function r2e(e,t=""){if(e>=5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`(resRC % ${t}aShape)`;let a=["resRC.x","resRC.y","resRC.z","resRC.w"],n=[];for(let r=0;r=5){let o=a.readSync(r.dataId),l=r.dtype==="string"?o.map(c=>v.decodeString(c)):o,u=_e(r.shape,r.dtype,l),p=qde(u,s);return a.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new n2e(r.shape,s);return a.runWebGPUProgram(i,[r],r.dtype)}var s2e={kernelName:us,backendName:"webgpu",kernelFunc:J3};function i2e(e){let{inputs:t,backend:a,attrs:n}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=n,{sliceRank:l,numUpdates:u,sliceSize:p,strides:c,outputSize:d}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let N=a.bufferSync(r),M=a.bufferSync(s),$=v.decodeString(a.readSync(i.dataId)[0]),E=Bde(N,M,o,d,p,u,l,c,$,h);return a.makeTensorInfo(o,E.dtype,E.values)}let m=[d/p,p],f=ke({inputs:{x:r},backend:a,attrs:{shape:[u,l]}}),g=s.shape.length?ke({inputs:{x:s},backend:a,attrs:{shape:[u,p]}}):tn({inputs:{x:s},backend:a}),y=g.dtype,x=a.makeTensorInfo([],y,v.makeZerosTypedArray(1,y)),A=ke({inputs:{x:i},backend:a,attrs:{shape:Array(m.length).fill(1)}}),b=J3({inputs:{x:A},backend:a,attrs:{reps:m}}),w=v.sizeFromShape([u,p]),I=[{type:"int32",data:[l]},{type:"int32",data:c},{type:"int32",data:[w]}];switch(u){case 0:break;case 1:{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y,h);a.runWebGPUProgram(N,[g,f],y,I,b)}break;default:{let N=new Od([u,p],l,f.shape.length,x.shape.length,c,m,y,h);a.runWebGPUProgram(N,[x,f],y,I,b)}{let N=new Od([u,p],l,f.shape.length,g.shape.length,c,m,y);a.runWebGPUProgram(N,[g,f],y,I,b)}}let T=ke({inputs:{x:b},backend:a,attrs:{shape:o}});return a.disposeData(f.dataId),a.disposeData(g.dataId),a.disposeData(A.dataId),a.disposeData(x.dataId),a.disposeData(b.dataId),T}var o2e={kernelName:jo,backendName:"webgpu",kernelFunc:i2e};function l2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=C.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),c=r.shape.slice();return l.map(d=>{let h=[...c];h[o]=d;let m=td({inputs:{x:r},backend:a,attrs:{begin:p,size:h}});return p[o]+=d,m})}var u2e={kernelName:Fu,backendName:"webgpu",kernelFunc:l2e},d2e=at({opType:le.SQRT}),p2e={kernelName:Uo,backendName:"webgpu",kernelFunc:d2e},c2e={kernelName:Sp,backendName:"webgpu",kernelFunc:({inputs:e,backend:t})=>{let{x:a}=e,n=t,r=new ed(a.shape,le.SQUARE);return n.runWebGPUProgram(r,[a],a.dtype)}},h2e=ta({opType:Pe.SQUARED_DIFFERENCE}),m2e={kernelName:qo,backendName:"webgpu",kernelFunc:h2e};function f2e({inputs:e,attrs:t,backend:a}){let{x:n}=e,r=new ed(n.shape,le.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[t.alpha]}];return a.runWebGPUProgram(r,[n],n.dtype,s)}var g2e={kernelName:ds,backendName:"webgpu",kernelFunc:f2e},y2e=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=Pt(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let a=0;t=this.outputShape.map((n,r)=>(a++,this.outputShape.length===1?`coords * uniforms.strides[${r}] + uniforms.begin[${r}]`:`coords[${a-1}] * uniforms.strides[${r}] + uniforms.begin[${r}]`)).join(",")}return` ${ue("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${t})); } } - `}};function X1e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:c,shrinkAxisMask:p}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=wt.sliceInfo(r.shape,s,i,o,l,u,d,c,p),w;if(f)w=ke({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let S=wt.computeOutShape(x,A,b),C=od({inputs:{x:r},backend:a,attrs:{begin:x,size:S}});w=ke({inputs:{x:C},backend:a,attrs:{shape:m}}),a.disposeData(C.dataId)}else if(a.shouldExecuteOnCPU([r])){let S=a.readSync(r.dataId),C=Te(r.shape,r.dtype,S),N=bce(h,C,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let S=new q1e(h),C=[{type:"int32",data:x},{type:"int32",data:b}],N=a.runWebGPUProgram(S,[r],r.dtype,C);w=ke({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeData(N.dataId)}return w}var K1e={kernelName:al,backendName:"webgpu",kernelFunc:X1e};function Y1e(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:d,dataSplits:c}=t,p=a.readSync(d.dataId),h=a.readSync(c.dataId),[m,f]=vce(p,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var Z1e={kernelName:Hu,backendName:"webgpu",kernelFunc:Y1e},J1e=aa({opType:De.SUB,cpuKernelImpl:wce,supportsComplex:!0}),Q1e={kernelName:Fs,backendName:"webgpu",kernelFunc:J1e},ege=at({opType:le.TAN}),tge={kernelName:nl,backendName:"webgpu",kernelFunc:ege},age=at({opType:le.TANH}),nge={kernelName:rl,backendName:"webgpu",kernelFunc:age};function rge(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:c}=I.calculateShapes(i,s,r.shape),p=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=[],m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,o]}});h.push(m);let f=ke({inputs:{x:i},backend:a,attrs:{shape:[l,u]}});h.push(f);let g=ke({inputs:{x:r},backend:a,attrs:{shape:p}});h.push(g);let y=dy({inputs:{x:g},backend:a,attrs:{reps:Array(p.length).fill(1)}}),x=new Gd([l,u],o,m.shape.length,f.shape.length,d,p,r.dtype,!1),A=v.sizeFromShape([l,u]),b=[{type:"int32",data:[o]},{type:"int32",data:d},{type:"int32",data:[A]}],w=a.runWebGPUProgram(x,[f,m],g.dtype,b,y);h.push(w);let S=ke({inputs:{x:w},backend:a,attrs:{shape:r.shape}});return h.forEach(C=>a.disposeData(C.dataId)),S}var sge={kernelName:jo,backendName:"webgpu",kernelFunc:rge},ige=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function x2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:c,shrinkAxisMask:d}=n,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:x,end:A,strides:b}=Nt.sliceInfo(r.shape,s,i,o,l,u,p,c,d),w;if(f)w=ke({inputs:{x:r},backend:a,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let I=Nt.computeOutShape(x,A,b),T=td({inputs:{x:r},backend:a,attrs:{begin:x,size:I}});w=ke({inputs:{x:T},backend:a,attrs:{shape:m}}),a.disposeData(T.dataId)}else if(a.shouldExecuteOnCPU([r])){let I=a.readSync(r.dataId),T=_e(r.shape,r.dtype,I),N=Gde(h,T,b,x);w=a.makeTensorInfo(m,r.dtype,N.values)}else{let I=new y2e(h),T=[{type:"int32",data:x},{type:"int32",data:b}],N=a.runWebGPUProgram(I,[r],r.dtype,T);w=ke({inputs:{x:N},backend:a,attrs:{shape:m}}),a.disposeData(N.dataId)}return w}var A2e={kernelName:Xo,backendName:"webgpu",kernelFunc:x2e};function b2e(e){let{inputs:t,backend:a,attrs:n}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=n,{data:p,dataSplits:c}=t,d=a.readSync(p.dataId),h=a.readSync(c.dataId),[m,f]=Hde(d,h,r,s,i,o,l,u);return[a.makeTensorInfo([m.length],"string",m),a.makeTensorInfo(c.shape,"int32",f)]}var v2e={kernelName:Lu,backendName:"webgpu",kernelFunc:b2e},w2e=ta({opType:Pe.SUB,cpuKernelImpl:jde,supportsComplex:!0}),k2e={kernelName:Ko,backendName:"webgpu",kernelFunc:w2e},I2e=at({opType:le.TAN}),S2e={kernelName:Yo,backendName:"webgpu",kernelFunc:I2e},C2e=at({opType:le.TANH}),T2e={kernelName:Zo,backendName:"webgpu",kernelFunc:C2e};function N2e(e){let{inputs:t,backend:a,attrs:n}=e,{tensor:r,indices:s,updates:i}=t,{}=n,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:c}=C.calculateShapes(i,s,r.shape),d=[c/u,u];if(c===0)return a.makeTensorInfo(r.shape,s.dtype);let h=[],m=ke({inputs:{x:s},backend:a,attrs:{shape:[l,o]}});h.push(m);let f=ke({inputs:{x:i},backend:a,attrs:{shape:[l,u]}});h.push(f);let g=ke({inputs:{x:r},backend:a,attrs:{shape:d}});h.push(g);let y=J3({inputs:{x:g},backend:a,attrs:{reps:Array(d.length).fill(1)}}),x=new Od([l,u],o,m.shape.length,f.shape.length,p,d,r.dtype,!1),A=v.sizeFromShape([l,u]),b=[{type:"int32",data:[o]},{type:"int32",data:p},{type:"int32",data:[A]}],w=a.runWebGPUProgram(x,[f,m],g.dtype,b,y);h.push(w);let I=ke({inputs:{x:w},backend:a,attrs:{shape:r.shape}});return h.forEach(T=>a.disposeData(T.dataId)),I}var R2e={kernelName:Fo,backendName:"webgpu",kernelFunc:N2e},E2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`,this.shaderKey="swap"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { @@ -8331,7 +8331,7 @@ return a / b;`,fQ=` } } } - `}},oge=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` + `}},M2e=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` ${ue("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); @@ -8390,7 +8390,7 @@ return a / b;`,fQ=` } } } - `}};function Ul(e,t){t!==null&&e.disposeData(t.dataId)}function NA(e){let t=1;for(;th===null?[d,d]:[d,h],f=(b,w,S)=>{let C=m(),N=new ige(S),M=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[b]},{type:"int32",data:[w]}],F=h;h=a.runWebGPUProgram(N,C,"int32",M),Ul(a,F)};for(let b=1;b=1;S/=2)f(w,S,[u,p])}for(let b=p;b>c;b/=2){let w=m(),S=new oge([u,b/2]),C=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],N=h;h=a.runWebGPUProgram(S,w,"int32",C),Ul(a,N);let M=c/2,F=M*2;for(let E=M;E>=1;E/=2)f(F,E,h.shape)}let g=h;h=od({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Ul(a,g);let y=$9({inputs:{x:d,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Ul(a,d);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),Ul(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),Ul(a,A),[y,h]}var uge={kernelName:sl,backendName:"webgpu",kernelFunc:lge},dge=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` + `}};function Dl(e,t){t!==null&&e.disposeData(t.dataId)}function pA(e){let t=1;for(;th===null?[p,p]:[p,h],f=(b,w,I)=>{let T=m(),N=new E2e(I),M=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[b]},{type:"int32",data:[w]}],$=h;h=a.runWebGPUProgram(N,T,"int32",M),Dl(a,$)};for(let b=1;b=1;I/=2)f(w,I,[u,d])}for(let b=d;b>c;b/=2){let w=m(),I=new M2e([u,b/2]),T=[{type:"int32",data:[l]},{type:"int32",data:[h===null?1:0]},{type:"int32",data:[c]}],N=h;h=a.runWebGPUProgram(I,w,"int32",T),Dl(a,N);let M=c/2,$=M*2;for(let E=M;E>=1;E/=2)f($,E,h.shape)}let g=h;h=td({inputs:{x:h},backend:a,attrs:{begin:0,size:[u,s]}}),Dl(a,g);let y=Hk({inputs:{x:p,indices:h},backend:a,attrs:{axis:1,batchDims:1}});Dl(a,p);let x=o.slice(0,-1);x.push(s),g=h,h=ke({inputs:{x:h},attrs:{shape:x},backend:a}),Dl(a,g);let A=y;return y=ke({inputs:{x:y},attrs:{shape:x},backend:a}),Dl(a,A),[y,h]}var P2e={kernelName:Jo,backendName:"webgpu",kernelFunc:$2e},_2e=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=me(this.outputShape),this.dispatch=de(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` fn mapCoord(outCoord : f32, len : f32) -> f32{ var inCoord = outCoord; if(uniforms.fillModeId == 2) { @@ -8506,7 +8506,7 @@ return a / b;`,fQ=` setOutputAtIndex(index, outputValue); } } - `}};function pge(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,c,p,h]=r.shape,[m,f]=u!=null?u:[c,p],g=[d,m,f,h],y=new dge(g),x=i==="nearest"?1:2,A;switch(o){case"constant":A=1;break;case"reflect":A=2;break;case"wrap":A=3;break;case"nearest":A=4;break;default:A=1;break}let b=[{type:"int32",data:[x]},{type:"int32",data:[A]},{type:"float32",data:[l]}];return a.runWebGPUProgram(y,[r,s],"float32",b)}var cge={kernelName:il,backendName:"webgpu",kernelFunc:pge};function hge(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),d=0;for(let f=0;fa.disposeData(f.dataId)),m}var mge={kernelName:ju,backendName:"webgpu",kernelFunc:hge},fge=class{constructor(e,t,a){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 + `}};function F2e(e){let{inputs:t,backend:a,attrs:n}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,c,d,h]=r.shape,[m,f]=u!=null?u:[c,d],g=[p,m,f,h],y=new _2e(g),x=i==="nearest"?1:2,A;switch(o){case"constant":A=1;break;case"reflect":A=2;break;case"wrap":A=3;break;case"nearest":A=4;break;default:A=1;break}let b=[{type:"int32",data:[x]},{type:"int32",data:[A]},{type:"float32",data:[l]}];return a.runWebGPUProgram(y,[r,s],"float32",b)}var D2e={kernelName:Qo,backendName:"webgpu",kernelFunc:F2e};function O2e(e){let{inputs:t,backend:a,attrs:n}=e,{value:r}=t,{axis:s}=n;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let f=0;fa.disposeData(f.dataId)),m}var z2e={kernelName:Wu,backendName:"webgpu",kernelFunc:O2e},L2e=class{constructor(e,t,a){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=me(e),this.dispatch=de(this.dispatchLayout,e,this.workgroupSize),a!=="float32"&&a!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 types, does not support ${a} type.`);this.type=a,this.shaderKey="unsortedSegmentSum"}getUserCode(){return` ${ue("index")} { if (index < uniforms.xSize) { @@ -8519,11 +8519,11 @@ return a / b;`,fQ=` let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${Bs("&result[flatIndex]","value",this.type)} + ${ys("&result[flatIndex]","value",this.type)} } } } - `}};function gge(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,d=I.getAxesPermutation([u],o),c=r;d!=null&&(c=ir({inputs:{x:r},backend:a,attrs:{perm:d}}),l.push(c),u=I.getInnerMostAxes(1,o)[0]);let p=I.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=ke({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=r.dtype,g=[m.shape[0],i],y=Wa({backend:a,attrs:{shape:g,value:0,dtype:f}}),x=new fge(m.shape,g,f),A=[{type:"int32",data:[i]},{type:"int32",data:[v.sizeFromShape(m.shape)]}],b=a.runWebGPUProgram(x,[m,s],f,A,y),w=ke({inputs:{x:b},backend:a,attrs:{shape:p}});l.push(b);let S=w;if(d!=null){l.push(w);let C=I.getUndoAxesPermutation(d);S=ir({inputs:{x:S},backend:a,attrs:{perm:C}})}return l.forEach(C=>a.disposeData(C.dataId)),S}var yge={kernelName:_p,backendName:"webgpu",kernelFunc:gge},xge=[tpe,Cce,Rce,Mce,$ce,_ce,Uce,Hce,qce,Kce,Zce,Qce,the,nhe,she,dhe,che,ghe,xhe,bhe,She,Rhe,Fhe,_he,zhe,Vhe,npe,Hhe,Khe,n0e,u0e,h0e,g0e,x0e,b0e,w0e,I0e,C0e,R0e,M0e,$0e,_0e,U0e,H0e,L0e,X0e,Z0e,tme,nme,ime,dme,cme,mme,gme,xme,bme,vme,kme,Sme,Jde,Cme,$me,Rme,Mme,_me,zme,Wme,Ume,jme,Xme,Yme,ape,Jme,qhe,efe,afe,rfe,ife,lfe,dfe,hfe,yfe,ffe,Afe,vfe,kfe,Cfe,Efe,ohe,Ffe,Dfe,Vfe,_fe,Wfe,Gfe,lhe,jfe,Xfe,Yfe,Jfe,n2e,ome,s2e,o2e,u2e,$he,c2e,m2e,g2e,A2e,v2e,k2e,S2e,C2e,Dhe,R2e,M2e,$2e,P2e,Qde,z2e,B2e,G2e,q2e,Y2e,J2e,e1e,a1e,r1e,o1e,d1e,c1e,m1e,g1e,x1e,b1e,khe,j1e,K1e,Z1e,t2e,w1e,S1e,E1e,F1e,O1e,L1e,B1e,V1e,G1e,Q1e,lme,tge,nge,sge,P1e,uge,cge,Lce,mge,yge,h2e];for(let e of xge)bn(e);var RA="4.17.0",Age="4.17.0",bge="4.17.0",vge="4.17.0",wge="4.17.0",kge="4.14.0",lc={tfjs:RA,"tfjs-core":RA,"tfjs-converter":Age,"tfjs-backend-cpu":bge,"tfjs-backend-webgl":vge,"tfjs-backend-wasm":wge,"tfjs-backend-webgpu":kge},py=void 0;function K(...e){let t=new Date,a=`${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(a,"Human:",...e)}function L9(e,t){let a=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${a}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var ae=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function cy(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")cy(e[r],t[r],r,n);else{let s=e&&typeof e[r]!="undefined";s||n.push({reason:"unknown property",where:`${a}.${r} = ${t[r]}`});let i=e&&typeof e[r]==typeof t[r];s&&!i&&n.push({reason:"property type mismatch",where:`${a}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&a==="config"&&n.length>0&&K("invalid configuration",n),n}function Mt(...e){let t=a=>a&&typeof a=="object";return e.reduce((a,n)=>(Object.keys(n||{}).forEach(r=>{let s=a[r],i=n[r];Array.isArray(s)&&Array.isArray(i)?a[r]=s.concat(...i):t(s)&&t(i)?a[r]=Mt(s,i):a[r]=i}),a),{})}var yl={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W9=` + `}};function W2e(e){let{inputs:t,backend:a,attrs:n}=e,{x:r,segmentIds:s}=t,{numSegments:i}=n,o=r.shape.length,l=[],u=0,p=C.getAxesPermutation([u],o),c=r;p!=null&&(c=nr({inputs:{x:r},backend:a,attrs:{perm:p}}),l.push(c),u=C.getInnerMostAxes(1,o)[0]);let d=C.segment_util.computeOutShape(c.shape,u,i),h=v.sizeFromShape([c.shape[u]]),m=ke({inputs:{x:c},backend:a,attrs:{shape:[-1,h]}});l.push(m);let f=r.dtype,g=[m.shape[0],i],y=Wa({backend:a,attrs:{shape:g,value:0,dtype:f}}),x=new L2e(m.shape,g,f),A=[{type:"int32",data:[i]},{type:"int32",data:[v.sizeFromShape(m.shape)]}],b=a.runWebGPUProgram(x,[m,s],f,A,y),w=ke({inputs:{x:b},backend:a,attrs:{shape:d}});l.push(b);let I=w;if(p!=null){l.push(w);let T=C.getUndoAxesPermutation(p);I=nr({inputs:{x:I},backend:a,attrs:{perm:T}})}return l.forEach(T=>a.disposeData(T.dataId)),I}var B2e={kernelName:Ep,backendName:"webgpu",kernelFunc:W2e},V2e=[hde,Zde,Qde,tpe,npe,ipe,hpe,fpe,ype,Ape,vpe,kpe,Spe,Tpe,Rpe,_pe,Dpe,Wpe,Vpe,Gpe,Kpe,Qpe,ace,ice,lce,cce,fde,fce,Ace,Tce,Pce,Oce,Wce,Vce,Gce,jce,Xce,Zce,Qce,the,nhe,ihe,hhe,fhe,uhe,xhe,vhe,She,The,Ehe,_he,Dhe,zhe,Whe,Vhe,Ghe,Hhe,qhe,Khe,dde,Zhe,n0e,Qhe,t0e,i0e,l0e,d0e,h0e,g0e,x0e,b0e,mde,w0e,yce,I0e,C0e,N0e,E0e,$0e,_0e,O0e,B0e,L0e,U0e,H0e,q0e,Z0e,eme,Mpe,ame,rme,cme,ime,dme,mme,$pe,gme,xme,bme,wme,Tme,Mhe,Rme,Mme,Pme,nce,Dme,zme,Wme,Ume,Hme,qme,Kme,Zme,rce,Qme,tfe,nfe,sfe,pde,lfe,pfe,mfe,yfe,bfe,wfe,Ife,Cfe,Nfe,Mfe,_fe,Dfe,zfe,Wfe,Vfe,Gfe,qpe,g2e,A2e,v2e,Sme,jfe,Kfe,e2e,a2e,o2e,u2e,p2e,c2e,m2e,k2e,$he,S2e,T2e,R2e,s2e,P2e,D2e,upe,z2e,B2e,Ome];for(let e of V2e)xn(e);var cA="4.17.0",U2e="4.17.0",G2e="4.17.0",H2e="4.17.0",j2e="4.17.0",q2e="4.17.0",ac={tfjs:cA,"tfjs-core":cA,"tfjs-converter":U2e,"tfjs-backend-cpu":G2e,"tfjs-backend-webgl":H2e,"tfjs-backend-wasm":j2e,"tfjs-backend-webgpu":q2e},Q3=void 0;function K(...e){let t=new Date,a=`${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(a,"Human:",...e)}function Zk(e,t){let a=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${a}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var ae=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function ey(e,t,a="config",n=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")ey(e[r],t[r],r,n);else{let s=e&&typeof e[r]!="undefined";s||n.push({reason:"unknown property",where:`${a}.${r} = ${t[r]}`});let i=e&&typeof e[r]==typeof t[r];s&&!i&&n.push({reason:"property type mismatch",where:`${a}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&a==="config"&&n.length>0&&K("invalid configuration",n),n}function Et(...e){let t=a=>a&&typeof a=="object";return e.reduce((a,n)=>(Object.keys(n||{}).forEach(r=>{let s=a[r],i=n[r];Array.isArray(s)&&Array.isArray(i)?a[r]=s.concat(...i):t(s)&&t(i)?a[r]=Et(s,i):a[r]=i}),a),{})}var dl={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var Jk=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -8533,7 +8533,7 @@ return a / b;`,fQ=` vUv = uv; gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.); } -`;var B9=` +`;var Qk=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8545,7 +8545,7 @@ return a / b;`,fQ=` 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]; } -`,V9=` +`,e9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8557,7 +8557,7 @@ return a / b;`,fQ=` gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14]; gl_FragColor.a = c.a; } -`,U9=` +`,t9=` precision highp float; varying vec2 vUv; uniform vec2 size; @@ -8570,7 +8570,7 @@ return a / b;`,fQ=` vec2 coord = pixelate(vUv, size); gl_FragColor += texture2D(texture, coord); } -`,G9=` +`,a9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8593,7 +8593,7 @@ return a / b;`,fQ=` 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; } -`,H9=` +`,n9=` precision highp float; varying vec2 vUv; uniform sampler2D texture; @@ -8615,8 +8615,8 @@ return a / b;`,fQ=` c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var hy=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},my=class{constructor(t,a,n){he(this,"uniform",{});he(this,"attribute",{});he(this,"gl");he(this,"id");he(this,"compile",(t,a)=>{let n=this.gl.createShader(a);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(K(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)||"unknown"}`),null)):(K("filter: could not create shader"),null)});this.gl=t;let r=this.compile(a,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){K("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){K(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),hy(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);hy(a,"uniform",this.uniform),hy(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function j9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=Dn(100,100),u={},d={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function p(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!i){let b=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]);i=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,i),c.bufferData(c.ARRAY_BUFFER,b,c.STATIC_DRAW),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}c.viewport(0,0,l.width,l.height),r=[null,null]}}function h(x,A){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let S=c.createTexture();return c.bindTexture(c.TEXTURE_2D,S),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,x,A,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,S,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:S}}function m(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function f(x=0){if(!o)return;let A=null,b=null,w=!1;e===0?A=t:A=m(n).texture||null,e++,a&&!(x&d.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=m(n).fbo||null),c.bindTexture(c.TEXTURE_2D,A),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(x){if(u[x])return o=u[x],c.useProgram((o?o.id:null)||null),o;if(o=new my(c,W9,x),!o)return K("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*A),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*A),u[x]=o,o}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?V9:B9,w=g(b);w&&(c.uniform1fv(w.uniform.m,A),f())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,S=.715,C=.072;y.colorMatrix([w+A*(1-w)+b*-w,S+A*-S+b*-S,C+A*-C+b*(1-C),0,0,w+A*-w+b*.143,S+A*(1-S)+b*.14,C+A*-C+b*-.283,0,0,w+A*-w+b*-(1-w),S+A*-S+b*S,C+A*(1-C)+b*C,0,0,0,0,0,1,0])},desaturateLuminance:()=>{y.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{y.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{y.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{y.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{y.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])},technicolor:()=>{y.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])},polaroid:()=>{y.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{y.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,S=g(H9);S&&(c.uniform1fv(S.uniform.m,A),c.uniform2f(S.uniform.px,b,w),f())},detectEdges:()=>{y.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{y.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{y.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(G9);w&&(c.uniform2f(w.uniform.px,0,b),f(d.INTERMEDIATE),c.uniform2f(w.uniform.px,A,0),f())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(U9);w&&(c.uniform2f(w.uniform.size,A,b),f())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];s.push({func:b,args:A})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(x){p(x.width,x.height),e=0,t||(t=c.createTexture()),c.bindTexture(c.TEXTURE_2D,t),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,x);for(let A=0;Ad.data())),i=Math.max(s[0][0],s[1][0],s[2][0]),l=(i>1?255:1)/i,u;if(l>1){let d=[xe(a[0],n[0]),xe(a[1],n[1]),xe(a[2],n[2])],c=[xe(r[0],n[0]),xe(r[1],n[1]),xe(r[2],n[2])],p=[te(d[0],l),te(d[1],l),te(d[2],l)],h=ca([p[0],p[1],p[2]],2);u=Q(h,[1,t.shape[0]||0,t.shape[1]||0,3]),J([...d,...c,...p,h])}else u=Bt(t,0);return J([...a,...n,...r,a,t,e]),u}var v0=3840,na=null,ra=null,ld=null,vt,wn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function fy(){wn.inputSum=0,wn.cacheDiff=1,wn.sumMethod=0,wn.inputTensor=void 0}function Dn(e,t){let a;if(ne.browser)if(ne.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");a=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")a=document.createElement("canvas"),a.width=e,a.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof ne.Canvas!="undefined")a=new ne.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")a=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function w0(e,t){let a=t||Dn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function k0(e,t,a=!0){var p,h,m;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof yt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof yt){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=Bt(e,0);else if(e.shape[2]===4){let g=Qp(e,[0,0,0],[-1,-1,3]);f=Bt(g,0),J(g)}}else e.shape.length===4&&(e.shape[3]===3?f=Ia(e):e.shape[3]===4&&(f=Kh(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let g=Ue(f,"float32");J(f),f=g}return{tensor:f,canvas:t.filter.return?ra:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:na};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&K("cannot determine input dimensions"),{tensor:null,canvas:na};let s=n,i=r;if(s>v0&&(s=v0,i=Math.trunc(s*r/n)),i>v0&&(i=v0,s=Math.trunc(i*n/r)),(((p=t.filter)==null?void 0:p.width)||0)>0?s=t.filter.width:(((h=t.filter)==null?void 0:h.height)||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?i=t.filter.height:(t.filter.width||0)>0&&(i=r*((t.filter.width||0)/n)),!s||!i)throw new Error("input error: cannot determine dimension");(!na||na.width!==s||na.height!==i)&&(na=Dn(s,i));let o=na.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?o.putImageData(e,0,0):t.filter.flip&&typeof o.translate!="undefined"?(o.translate(n,0),o.scale(-1,1),o.drawImage(e,0,0,n,r,0,0,na.width,na.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,na.width,na.height),(!ra||na.width!==ra.width||na.height!==ra.height)&&(ra=Dn(na.width,na.height)),t.filter.enabled&&ne.webgl.supported?(vt||(vt=ne.browser?new j9:null),ne.filter=!!vt,vt!=null&&vt.add?(vt.reset(),t.filter.brightness!==0&&vt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&vt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&vt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&vt.add("blur",t.filter.blur),t.filter.saturation!==0&&vt.add("saturation",t.filter.saturation),t.filter.hue!==0&&vt.add("hue",t.filter.hue),t.filter.negative&&vt.add("negative"),t.filter.sepia&&vt.add("sepia"),t.filter.vintage&&vt.add("brownie"),t.filter.sepia&&vt.add("sepia"),t.filter.kodachrome&&vt.add("kodachrome"),t.filter.technicolor&&vt.add("technicolor"),t.filter.polaroid&&vt.add("polaroid"),t.filter.pixelate!==0&&vt.add("pixelate",t.filter.pixelate),((m=vt.get())==null?void 0:m.length)>1?ra=vt.apply(na):ra=vt.draw(na)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,w0(na,ra))):(w0(na,ra),vt&&(vt=null),ne.filter=!!vt),!a)return{tensor:null,canvas:ra};if(!ra)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ne.browser&&Pr)l=Pr?Pr.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=Ve(f,[e.height,e.width,u],"int32")}else if((!ld||ra.width!==ld.width||ra.height!==ld.height)&&(ld=Dn(ra.width,ra.height)),Pr&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Pr.fromPixels(ra):(ld=w0(ra),l=Pr.fromPixels(ld));else{let y=w0(ra).getContext("2d").getImageData(0,0,s,i);u=y.data.length/s/i;let x=new Uint8Array(y.data.buffer);l=Ve(x,[s,i,u])}if(u===4){let f=Qp(l,[0,0,0],[-1,-1,3]);J(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let d=Ue(l,"float32"),c=t.filter.equalization?await b0(d):Bt(d,0);if(J([l,d]),t.filter.autoBrightness){let f=fa(c),g=await f.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],J(f)}return{tensor:c,canvas:t.filter.return?ra:null}}async function q9(e,t){let a=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return a;if(!wn.inputTensor)wn.inputTensor=Ia(t);else if(wn.inputTensor.shape[1]!==t.shape[1]||wn.inputTensor.shape[2]!==t.shape[2])J(wn.inputTensor),wn.inputTensor=Ia(t);else{let n={};n.diff=xe(t,wn.inputTensor),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;J([wn.inputTensor,n.diff,n.squared,n.sum]),wn.inputTensor=Ia(t),a=s<=(e.cacheSensitivity||0)}return a}async function X9(e,t,a){let n={};if(!t||!a||t.shape.length!==4||t.shape.length!==a.shape.length)return e.debug||K("invalid input tensor or tensor shapes do not match:",t.shape,a.shape),0;if(t.shape[0]!==1||a.shape[0]!==1||t.shape[3]!==3||a.shape[3]!==3)return e.debug||K("input tensors must be of shape [1, height, width, 3]:",t.shape,a.shape),0;n.input1=Ia(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?fe.resizeBilinear(a,[t.shape[1],t.shape[2]]):Ia(a),n.diff=xe(n.input1,n.input2),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return J([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var dc,pc,cc,uc=class{constructor(){he(this,"browser");he(this,"node");he(this,"worker");he(this,"platform","");he(this,"agent","");he(this,"backends",[]);he(this,"initial");he(this,"filter");he(this,"tfjs");he(this,"offscreen");he(this,"perfadd",!1);he(this,"tensorflow",{version:void 0,gpu:void 0});he(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});he(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});he(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});he(this,"cpu",{model:void 0,flags:[]});he(this,"kernels",[]);Yn(this,dc,void 0);Yn(this,pc,void 0);Yn(this,cc,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:lc["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",a=t.match(/\(([^()]+)\)/g);if(a!=null&&a[0]){let n=a[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=t.replace(a[0],""),this.platform[1]&&(this.agent=this.agent.replace(a[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Xa(this,dc)}set Canvas(t){wr(this,dc,t),globalThis.Canvas=t}get Image(){return Xa(this,pc)}set Image(t){wr(this,pc,t),globalThis.Image=t}get ImageData(){return Xa(this,cc)}set ImageData(t){wr(this,cc,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(St().registryFactory);try{this.tensorflow={version:Gn().binding?Gn().binding.TF_Version:void 0,gpu:Gn().binding?Gn().binding.isUsingGpuDevice():void 0}}catch(n){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Dn(100,100),a=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof a!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&a&&(this.webgl.version=a.getParameter(a.VERSION),this.webgl.vendor=a.getParameter(a.VENDOR),this.webgl.renderer=a.getParameter(a.RENDERER),this.webgl.shader=a.getParameter(a.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let n=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(n==null?void 0:n.requestAdapterInfo())}}catch(n){this.webgpu.supported=!1}try{this.kernels=tr(ea()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};dc=new WeakMap,pc=new WeakMap,cc=new WeakMap;var ne=new uc;var S0=class{constructor(){he(this,"config");he(this,"element");he(this,"stream");he(this,"devices",[]);he(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(a=>a.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});he(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let i=document.getElementById(t.element);if(i&&i instanceof HTMLVideoElement)this.element=i;else return this.config.debug&&K("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&K("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let a={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(a.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(a.video.height={ideal:this.config.height}),this.config.id&&(a.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&K("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&K("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&K("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(i){return K("webcam",i),`webcam error: ${i}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(i=>{this.element?this.element.onloadeddata=()=>i(!0):i(!1)}),await this.element.play(),this.config.debug&&K("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&K("webcam error","no stream"),"webcam error no stream")});he(this,"pause",()=>{this.element&&this.element.pause()});he(this,"play",async()=>{this.element&&await this.element.play()});he(this,"stop",()=>{this.config.debug&&K("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var gy={};vr(gy,{"affectnet-mobilenet":()=>Lge,age:()=>Wge,"anti-spoofing":()=>x3e,antispoof:()=>Cge,blazeface:()=>Nge,"blazeface-back":()=>Bge,"blazeface-front":()=>Vge,"blazepose-detector":()=>Uge,"blazepose-full":()=>Gge,"blazepose-heavy":()=>Hge,"blazepose-lite":()=>jge,centernet:()=>Rge,default:()=>M3e,efficientpose:()=>qge,"efficientpose-i-lite":()=>A3e,"efficientpose-ii-lite":()=>b3e,"efficientpose-iv":()=>v3e,emotion:()=>Ege,faceboxes:()=>Xge,facemesh:()=>Mge,"facemesh-attention":()=>Yge,"facemesh-attention-pinto":()=>Kge,"facemesh-detection-full":()=>Zge,"facemesh-detection-short":()=>Jge,faceres:()=>Fge,"faceres-deep":()=>Qge,gear:()=>a3e,"gear-e1":()=>e3e,"gear-e2":()=>t3e,gender:()=>r3e,"gender-ssrnet-imdb":()=>n3e,handdetect:()=>s3e,"handlandmark-full":()=>i3e,"handlandmark-lite":()=>$ge,"handlandmark-sparse":()=>o3e,handskeleton:()=>l3e,handtrack:()=>Dge,"insightface-efficientnet-b0":()=>w3e,"insightface-ghostnet-strides1":()=>k3e,"insightface-ghostnet-strides2":()=>I3e,"insightface-mobilenet-emore":()=>S3e,"insightface-mobilenet-swish":()=>T3e,iris:()=>Pge,liveness:()=>_ge,meet:()=>u3e,mobileface:()=>d3e,mobilefacenet:()=>p3e,models:()=>Oge,"movenet-lightning":()=>zge,"movenet-multipose":()=>c3e,"movenet-thunder":()=>h3e,nanodet:()=>m3e,"nanodet-e":()=>C3e,"nanodet-g":()=>N3e,"nanodet-m":()=>R3e,"nanodet-t":()=>E3e,posenet:()=>f3e,rvm:()=>g3e,selfie:()=>y3e});var Cge=853098,Nge=538928,Rge=4030290,Ege=820516,Mge=1477958,Fge=6978814,$ge=2023432,Dge=2964837,Pge=2599092,_ge=592976,Oge=0,zge=4650216,Lge=6920630,Wge=161240,Bge=538928,Vge=402048,Uge=5928856,Gge=6339202,Hge=27502466,jge=2726402,qge=5651240,Xge=2013002,Kge=2387598,Yge=2382414,Zge=1026192,Jge=201268,Qge=13957620,e3e=112438,t3e=112438,a3e=1498916,n3e=161236,r3e=201808,s3e=3515612,i3e=5431368,o3e=5286322,l3e=5502280,u3e=372228,d3e=2183192,p3e=5171976,c3e=9448838,h3e=12477112,m3e=7574558,f3e=5032780,g3e=3739355,y3e=212886,x3e=853098,A3e=2269064,b3e=5651240,v3e=25643252,w3e=13013224,k3e=8093408,I3e=8049584,S3e=6938536,T3e=12168584,C3e=12319156,N3e=7574558,R3e=1887474,E3e=5294216,M3e={antispoof:Cge,blazeface:Nge,centernet:Rge,emotion:Ege,facemesh:Mge,faceres:Fge,"handlandmark-lite":$ge,handtrack:Dge,iris:Pge,liveness:_ge,models:Oge,"movenet-lightning":zge,"affectnet-mobilenet":Lge,age:Wge,"blazeface-back":Bge,"blazeface-front":Vge,"blazepose-detector":Uge,"blazepose-full":Gge,"blazepose-heavy":Hge,"blazepose-lite":jge,efficientpose:qge,faceboxes:Xge,"facemesh-attention-pinto":Kge,"facemesh-attention":Yge,"facemesh-detection-full":Zge,"facemesh-detection-short":Jge,"faceres-deep":Qge,"gear-e1":e3e,"gear-e2":t3e,gear:a3e,"gender-ssrnet-imdb":n3e,gender:r3e,handdetect:s3e,"handlandmark-full":i3e,"handlandmark-sparse":o3e,handskeleton:l3e,meet:u3e,mobileface:d3e,mobilefacenet:p3e,"movenet-multipose":c3e,"movenet-thunder":h3e,nanodet:m3e,posenet:f3e,rvm:g3e,selfie:y3e,"anti-spoofing":x3e,"efficientpose-i-lite":A3e,"efficientpose-ii-lite":b3e,"efficientpose-iv":v3e,"insightface-efficientnet-b0":w3e,"insightface-ghostnet-strides1":k3e,"insightface-ghostnet-strides2":I3e,"insightface-mobilenet-emore":S3e,"insightface-mobilenet-swish":T3e,"nanodet-e":C3e,"nanodet-g":N3e,"nanodet-m":R3e,"nanodet-t":E3e};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ya={};async function F3e(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function K9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function $e(e){var u,d,c,p;let t=L9(Ea.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let a=t.includes("/")?t.split("/"):t.split("\\"),n=a[a.length-1].replace(".json",""),r="indexeddb://"+n;ya[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:gy[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Jn.listModels():{}}catch(h){Ea.cacheSupported=!1}ya[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ya[n].url=ya[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,m)=>F3e(h,m)},o=new ec(ya[n].url,i),l=!1;try{o.findIOHandler(),Ea.debug&&K("model load handler:",o.handler)}catch(h){K("error finding model i/o handler:",t,h)}try{let h=await((u=o.handler)==null?void 0:u.load())||null;ya[n].sizeFromManifest=((d=h==null?void 0:h.weightData)==null?void 0:d.byteLength)||0,h?o.loadSync(h):o=await x3(ya[n].inCache?r:t,i),ya[n].sizeLoadedWeights=((p=(c=o.artifacts)==null?void 0:c.weightData)==null?void 0:p.byteLength)||0,Ea.verbose&&K("load:",{model:n,url:o.modelUrl,bytes:ya[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ya[n].inCache)try{let h=await o.save(r);Ea.debug&&K("model saved:",r,h)}catch(h){K("error saving model:",t,h)}return o}var yy="3.2.1";var Tt={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function P3e(){let e=Tt.gl;e&&(Tt.extensions=e.getSupportedExtensions())}function Y9(e){var t;if(e.config.backend==="humangl"&&(Tt.name in St().registry&&!((t=Tt==null?void 0:Tt.gl)!=null&&t.getParameter(Tt.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!gg(Tt.name))){try{Tt.canvas=Dn(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(Tt.gl=Tt.canvas.getContext("webgl2",Tt.webGLattr),!Tt.gl){K("humangl error: cannot get webgl context");return}if(!Tt.gl.getParameter(Tt.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}Tt.canvas&&(Tt.canvas.addEventListener("webglcontextlost",s=>{throw K("humangl error:",s.type),K("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),Tt.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),Tt.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{u0(2,Tt.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Yl(Tt.gl);ll(Tt.name,()=>new rc(r),Tt.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{tr("webgl").forEach(s=>{let i={...s,backendName:Tt.name};bn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{B().flagRegistry.WEBGL_VERSION&&B().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}P3e();let a=Gn(),n=typeof a.gpgpu!="undefined"?a.getGPGPUContext().gl:null;n?e.config.debug&&K("humangl backend registered:",{webgl:n.getParameter(n.VERSION),renderer:n.getParameter(n.RENDERER)}):K("humangl error: no current gl context:",n,Tt.gl)}}var ze={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Z9(){ze.tf255=Ge(255,"float32"),ze.tf1=Ge(1,"float32"),ze.tf2=Ge(2,"float32"),ze.tf05=Ge(.5,"float32"),ze.tf127=Ge(127.5,"float32"),ze.rgb=Vt([.2989,.587,.114],"float32")}async function z3e(){var e;return await ne.updateBackend(),(e=ne.tensorflow)!=null&&e.version?"tensorflow":ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu"}function L3e(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:ea(),kernelFunc:n=>Pe(()=>xe(n.inputs.a,te(ve(n.inputs.a,n.inputs.b),n.inputs.b)))};bn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:ea(),kernelFunc:n=>Pe(()=>we(te(Gp(n.inputs.a,n.inputs.b),n.inputs.b),Ku(n.inputs.a,n.inputs.b)))};bn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:ea(),kernelFunc:n=>Pe(()=>{let r=ea();Bp("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Bp(r),s})};bn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var J9={};async function hc(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await z3e()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&ea()!==e.config.backend){let r=ae();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),typeof navigator!="undefined"&&((n=navigator==null?void 0:navigator.userAgent)!=null&&n.toLowerCase().includes("electron"))&&e.config.debug&&K("running inside electron");let s=Object.keys(St().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(Y9(e),s=Object.keys(St().registryFactory)),e.config.debug&&K("available backends:",s),ne.browser&&!ne.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&!ne.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&K(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ne.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")K("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let i=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",i),!i)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let o="requestAdapterInfo"in i?await i.requestAdapterInfo():void 0;K("webgpu adapter info:",o)}}if(s.includes(e.config.backend)||(K(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ne.node?"tensorflow":"webgl",e.config.debug&&K(`override: setting backend ${e.config.backend}`)),e.config.debug&&K("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(B().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&B().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof f0!="undefined")f0(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let i=!1,o=!1;try{i=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),o=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${o?"simd":"no simd"} ${i?"multithreaded":"singlethreaded"}`),e.config.debug&&!o&&K("warning: wasm simd support is not enabled")}catch(l){K("wasm detection failed")}}try{await Bp(e.config.backend),await Vp()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(J9=JSON.parse(JSON.stringify(B().flags)))}if((ea()==="humangl"||ea()==="webgl")&&(B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!0),B().flagRegistry.WEBGL_EXP_CONV&&B().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),B().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),ea(),e.config.debug){let s=B().flags,i={};for(let o of Object.keys(s))J9[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",ea(),"flags:",i)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[s,i]of Object.entries(e.config.flags))B().set(s,i)}mg(),Z9(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=ea(),await ne.updateBackend(),L3e(e.config)}return!0}function T0(e,t){for(let a of e){let n={kernelName:a,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&K("kernelFunc",a,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};bn(n)}ne.kernels=tr(ea()).map(a=>a.kernelName.toLowerCase())}var F0={};vr(F0,{all:()=>gye,body:()=>N0,canvas:()=>fye,face:()=>C0,gesture:()=>M0,hand:()=>R0,init:()=>Iy,object:()=>E0,options:()=>_t,person:()=>mye});var kn=e=>{if(!e)K("draw error: invalid canvas");else if(!e.getContext)K("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)K("draw error: cannot get canvas context");else return t}return null},xl=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),Al=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let a=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${a[0]}, ${a[1]}, ${a[2]}, ${t.alpha})`};function In(e,t,a,n,r){let s=t.replace(/\[.*\]/g,"").split(` -`).map(o=>o.trim()),i=Math.max(0,a);for(let o=s.length-1;o>=0;o--){let l=o*r.lineHeight+n;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[o],i+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[o],i+4,l+15)}}function cr(e,t,a,n,r){e.fillStyle=Al(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function hr(e,t,a,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let i=(t+t+n)/2,o=(a+a+r)/2;e.ellipse(i,o,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,a),e.lineTo(t+n-s.roundRect,a),e.quadraticCurveTo(t+n,a,t+n,a+s.roundRect),e.lineTo(t+n,a+r-s.roundRect),e.quadraticCurveTo(t+n,a+r,t+n-s.roundRect,a+r),e.lineTo(t+s.roundRect,a+r),e.quadraticCurveTo(t,a+r,t,a+r-s.roundRect),e.lineTo(t,a+s.roundRect),e.quadraticCurveTo(t,a,t+s.roundRect,a),e.closePath();e.stroke()}function xy(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=Al(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function eI(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){xy(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nmc[e]),L7e=B3e.map(e=>mc[e]),W7e=V3e.map(e=>mc[e]);function Us(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var U3e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],G3e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],H3e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],j3e=[[474,475],[475,476],[476,477],[477,474]],q3e=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],X3e=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],K3e=[[469,470],[470,471],[471,472],[472,469]],Y3e=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],B7e={lips:Us(U3e),leftEye:Us(G3e),leftEyebrow:Us(H3e),leftIris:Us(j3e),rightEye:Us(q3e),rightEyebrow:Us(X3e),rightIris:Us(K3e),faceOval:Us(Y3e)};var Z3e=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],J3e=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Q3e=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],eye=[[474,475],[475,476],[476,477],[477,474]],tye=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],aye=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],nye=[[469,470],[470,471],[471,472],[472,469]],rye=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Gs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var sye={lips:Gs(Z3e),leftEye:Gs(J3e),leftEyebrow:Gs(Q3e),leftIris:Gs(eye),rightEye:Gs(tye),rightEyebrow:Gs(aye),rightIris:Gs(nye),faceOval:Gs(rye)},iye=Object.entries(sye).map(([e,t])=>t.map(a=>[a,e])).flat(),V7e=new Map(iye),fc=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],wl=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],kl=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var rt;function oye(e,t){var n,r,s,i,o,l,u,d,c;if(!rt.drawLabels||((n=rt.faceLabels)==null?void 0:n.length)===0)return;let a=rt.faceLabels.slice();if(a=ut(a,"[id]",e.id.toFixed(0)),e.score&&(a=ut(a,"[score]",100*e.score)),e.gender&&(a=ut(a,"[gender]",e.gender)),e.genderScore&&(a=ut(a,"[genderScore]",100*e.genderScore)),e.age&&(a=ut(a,"[age]",e.age)),e.distance&&(a=ut(a,"[distance]",100*e.distance)),e.real&&(a=ut(a,"[real]",100*e.real)),e.live&&(a=ut(a,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let p=e.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);p.length>3&&(p.length=3),a=ut(a,"[emotions]",p.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=ut(a,"[roll]",xl(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",xl(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",xl(e.rotation.angle.pitch))),(c=(d=e.rotation)==null?void 0:d.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",xl(e.rotation.gaze.bearing))),In(t,a,e.box[0],e.box[1],rt)}function lye(e,t){var a,n,r,s;if((a=e.annotations)!=null&&a.leftEyeIris&&((n=e.annotations)!=null&&n.leftEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.color,t.beginPath();let i=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,o=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.color,t.beginPath();let i=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,o=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}}function uye(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*xl(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*xl(e.rotation.angle.pitch)/90,s=new Path2D(` +`;var ty=(e,t,a)=>{let n=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(n,(r,s)=>(a[s]=0,r))},ay=class{constructor(t,a,n){he(this,"uniform",{});he(this,"attribute",{});he(this,"gl");he(this,"id");he(this,"compile",(t,a)=>{let n=this.gl.createShader(a);return n?(this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)?n:(K(`filter: gl compile failed: ${this.gl.getShaderInfoLog(n)||"unknown"}`),null)):(K("filter: could not create shader"),null)});this.gl=t;let r=this.compile(a,this.gl.VERTEX_SHADER),s=this.compile(n,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){K("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){K(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),ty(a,"attribute",this.attribute);for(let i in this.attribute)this.attribute[i]=this.gl.getAttribLocation(this.id,i);ty(a,"uniform",this.uniform),ty(n,"uniform",this.uniform);for(let i in this.uniform)this.uniform[i]=this.gl.getUniformLocation(this.id,i)}}};function r9(){let e=0,t=null,a=!1,n=-1,r=[null,null],s=[],i=null,o=null,l=Mn(100,100),u={},p={INTERMEDIATE:1},c=l.getContext("webgl");if(!c){K("filter: cannot get webgl context");return}this.gl=c;function d(x,A){if(!(x===l.width&&A===l.height)){if(l.width=x,l.height=A,!i){let b=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]);i=c.createBuffer(),c.bindBuffer(c.ARRAY_BUFFER,i),c.bufferData(c.ARRAY_BUFFER,b,c.STATIC_DRAW),c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}c.viewport(0,0,l.width,l.height),r=[null,null]}}function h(x,A){let b=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,b);let w=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,w);let I=c.createTexture();return c.bindTexture(c.TEXTURE_2D,I),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,x,A,0,c.RGBA,c.UNSIGNED_BYTE,null),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.LINEAR),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,I,0),c.bindTexture(c.TEXTURE_2D,null),c.bindFramebuffer(c.FRAMEBUFFER,null),{fbo:b,texture:I}}function m(x){return r[x]=r[x]||h(l.width,l.height),r[x]}function f(x=0){if(!o)return;let A=null,b=null,w=!1;e===0?A=t:A=m(n).texture||null,e++,a&&!(x&p.INTERMEDIATE)?(b=null,w=e%2===0):(n=(n+1)%2,b=m(n).fbo||null),c.bindTexture(c.TEXTURE_2D,A),c.bindFramebuffer(c.FRAMEBUFFER,b),c.uniform1f(o.uniform.flipY,w?-1:1),c.drawArrays(c.TRIANGLES,0,6)}function g(x){if(u[x])return o=u[x],c.useProgram((o?o.id:null)||null),o;if(o=new ay(c,Jk,x),!o)return K("filter: could not get webgl program"),null;let A=Float32Array.BYTES_PER_ELEMENT,b=4*A;return c.enableVertexAttribArray(o.attribute.pos),c.vertexAttribPointer(o.attribute.pos,2,c.FLOAT,!1,b,0*A),c.enableVertexAttribArray(o.attribute.uv),c.vertexAttribPointer(o.attribute.uv,2,c.FLOAT,!1,b,2*A),u[x]=o,o}let y={colorMatrix:x=>{let A=new Float32Array(x);A[4]/=255,A[9]/=255,A[14]/=255,A[19]/=255;let b=A[18]===1&&A[3]===0&&A[8]===0&&A[13]===0&&A[15]===0&&A[16]===0&&A[17]===0&&A[19]===0?e9:Qk,w=g(b);w&&(c.uniform1fv(w.uniform.m,A),f())},brightness:x=>{let A=(x||0)+1;y.colorMatrix([A,0,0,0,0,0,A,0,0,0,0,0,A,0,0,0,0,0,1,0])},saturation:x=>{let A=(x||0)*2/3+1,b=(A-1)*-.5;y.colorMatrix([A,b,b,0,0,b,A,b,0,0,b,b,A,0,0,0,0,0,1,0])},desaturate:()=>{y.saturation(-1)},contrast:x=>{let A=(x||0)+1,b=-128*(A-1);y.colorMatrix([A,0,0,0,b,0,A,0,0,b,0,0,A,0,b,0,0,0,1,0])},negative:()=>{y.contrast(-2)},hue:x=>{x=(x||0)/180*Math.PI;let A=Math.cos(x),b=Math.sin(x),w=.213,I=.715,T=.072;y.colorMatrix([w+A*(1-w)+b*-w,I+A*-I+b*-I,T+A*-T+b*(1-T),0,0,w+A*-w+b*.143,I+A*(1-I)+b*.14,T+A*-T+b*-.283,0,0,w+A*-w+b*-(1-w),I+A*-I+b*I,T+A*(1-T)+b*T,0,0,0,0,0,1,0])},desaturateLuminance:()=>{y.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{y.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{y.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{y.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{y.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])},technicolor:()=>{y.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])},polaroid:()=>{y.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{y.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:x=>{let A=new Float32Array(x),b=1/l.width,w=1/l.height,I=g(n9);I&&(c.uniform1fv(I.uniform.m,A),c.uniform2f(I.uniform.px,b,w),f())},detectEdges:()=>{y.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{y.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{y.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:x=>{let A=x||1;y.convolution.call(this,[0,-1*A,0,-1*A,1+4*A,-1*A,0,-1*A,0])},emboss:x=>{let A=x||1;y.convolution.call(this,[-2*A,-1*A,0,-1*A,1,1*A,0,1*A,2*A])},blur:x=>{let A=x/7/l.width,b=x/7/l.height,w=g(a9);w&&(c.uniform2f(w.uniform.px,0,b),f(p.INTERMEDIATE),c.uniform2f(w.uniform.px,A,0),f())},pixelate:x=>{let A=x/l.width,b=x/l.height,w=g(t9);w&&(c.uniform2f(w.uniform.size,A,b),f())}};this.add=function(x){let A=Array.prototype.slice.call(arguments,1),b=y[x];s.push({func:b,args:A})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(x){d(x.width,x.height),e=0,t||(t=c.createTexture()),c.bindTexture(c.TEXTURE_2D,t),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST),c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST),c.texImage2D(c.TEXTURE_2D,0,c.RGBA,c.RGBA,c.UNSIGNED_BYTE,x);for(let A=0;Ap.data())),i=Math.max(s[0][0],s[1][0],s[2][0]),l=(i>1?255:1)/i,u;if(l>1){let p=[xe(a[0],n[0]),xe(a[1],n[1]),xe(a[2],n[2])],c=[xe(r[0],n[0]),xe(r[1],n[1]),xe(r[2],n[2])],d=[te(p[0],l),te(p[1],l),te(p[2],l)],h=ca([d[0],d[1],d[2]],2);u=Q(h,[1,t.shape[0]||0,t.shape[1]||0,3]),J([...p,...c,...d,h])}else u=Wt(t,0);return J([...a,...n,...r,a,t,e]),u}var f0=3840,aa=null,na=null,ad=null,vt,bn={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function ny(){bn.inputSum=0,bn.cacheDiff=1,bn.sumMethod=0,bn.inputTensor=void 0}function Mn(e,t){let a;if(ne.browser)if(ne.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");a=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")a=document.createElement("canvas"),a.width=e,a.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof ne.Canvas!="undefined")a=new ne.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")a=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof ne.Canvas!="undefined"?a=new ne.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(a=new globalThis.Canvas(e,t));return a}function g0(e,t){let a=t||Mn(e.width,e.height);return a.getContext("2d").drawImage(e,0,0),a}async function y0(e,t,a=!0){var d,h,m;if(!e)return t.debug&&K("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof yt)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof yt){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=Wt(e,0);else if(e.shape[2]===4){let g=qp(e,[0,0,0],[-1,-1,3]);f=Wt(g,0),J(g)}}else e.shape.length===4&&(e.shape[3]===3?f=Ia(e):e.shape[3]===4&&(f=Vh(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let g=Ue(f,"float32");J(f),f=g}return{tensor:f,canvas:t.filter.return?na:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&K("input stream is not ready"),{tensor:null,canvas:aa};let n=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!n||!r)return t.debug&&K("cannot determine input dimensions"),{tensor:null,canvas:aa};let s=n,i=r;if(s>f0&&(s=f0,i=Math.trunc(s*r/n)),i>f0&&(i=f0,s=Math.trunc(i*n/r)),(((d=t.filter)==null?void 0:d.width)||0)>0?s=t.filter.width:(((h=t.filter)==null?void 0:h.height)||0)>0&&(s=n*((t.filter.height||0)/r)),(t.filter.height||0)>0?i=t.filter.height:(t.filter.width||0)>0&&(i=r*((t.filter.width||0)/n)),!s||!i)throw new Error("input error: cannot determine dimension");(!aa||aa.width!==s||aa.height!==i)&&(aa=Mn(s,i));let o=aa.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?o.putImageData(e,0,0):t.filter.flip&&typeof o.translate!="undefined"?(o.translate(n,0),o.scale(-1,1),o.drawImage(e,0,0,n,r,0,0,aa.width,aa.height),o.setTransform(1,0,0,1,0,0)):o.drawImage(e,0,0,n,r,0,0,aa.width,aa.height),(!na||aa.width!==na.width||aa.height!==na.height)&&(na=Mn(aa.width,aa.height)),t.filter.enabled&&ne.webgl.supported?(vt||(vt=ne.browser?new r9:null),ne.filter=!!vt,vt!=null&&vt.add?(vt.reset(),t.filter.brightness!==0&&vt.add("brightness",t.filter.brightness),t.filter.contrast!==0&&vt.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&vt.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&vt.add("blur",t.filter.blur),t.filter.saturation!==0&&vt.add("saturation",t.filter.saturation),t.filter.hue!==0&&vt.add("hue",t.filter.hue),t.filter.negative&&vt.add("negative"),t.filter.sepia&&vt.add("sepia"),t.filter.vintage&&vt.add("brownie"),t.filter.sepia&&vt.add("sepia"),t.filter.kodachrome&&vt.add("kodachrome"),t.filter.technicolor&&vt.add("technicolor"),t.filter.polaroid&&vt.add("polaroid"),t.filter.pixelate!==0&&vt.add("pixelate",t.filter.pixelate),((m=vt.get())==null?void 0:m.length)>1?na=vt.apply(aa):na=vt.draw(aa)):(t.debug&&K("input process error: cannot initialize filters"),ne.webgl.supported=!1,t.filter.enabled=!1,g0(aa,na))):(g0(aa,na),vt&&(vt=null),ne.filter=!!vt),!a)return{tensor:null,canvas:na};if(!na)throw new Error("canvas error: cannot create output");let l,u=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(ne.browser&&Er)l=Er?Er.fromPixels(e):null;else{u=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=Ve(f,[e.height,e.width,u],"int32")}else if((!ad||na.width!==ad.width||na.height!==ad.height)&&(ad=Mn(na.width,na.height)),Er&&ne.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=Er.fromPixels(na):(ad=g0(na),l=Er.fromPixels(ad));else{let y=g0(na).getContext("2d").getImageData(0,0,s,i);u=y.data.length/s/i;let x=new Uint8Array(y.data.buffer);l=Ve(x,[s,i,u])}if(u===4){let f=qp(l,[0,0,0],[-1,-1,3]);J(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let p=Ue(l,"float32"),c=t.filter.equalization?await m0(p):Wt(p,0);if(J([l,p]),t.filter.autoBrightness){let f=fa(c),g=await f.data();t.filter.brightness=g[0]>1?1-g[0]/255:1-g[0],J(f)}return{tensor:c,canvas:t.filter.return?na:null}}async function s9(e,t){let a=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return a;if(!bn.inputTensor)bn.inputTensor=Ia(t);else if(bn.inputTensor.shape[1]!==t.shape[1]||bn.inputTensor.shape[2]!==t.shape[2])J(bn.inputTensor),bn.inputTensor=Ia(t);else{let n={};n.diff=xe(t,bn.inputTensor),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;J([bn.inputTensor,n.diff,n.squared,n.sum]),bn.inputTensor=Ia(t),a=s<=(e.cacheSensitivity||0)}return a}async function i9(e,t,a){let n={};if(!t||!a||t.shape.length!==4||t.shape.length!==a.shape.length)return e.debug||K("invalid input tensor or tensor shapes do not match:",t.shape,a.shape),0;if(t.shape[0]!==1||a.shape[0]!==1||t.shape[3]!==3||a.shape[3]!==3)return e.debug||K("input tensors must be of shape [1, height, width, 3]:",t.shape,a.shape),0;n.input1=Ia(t),n.input2=t.shape[1]!==a.shape[1]||t.shape[2]!==a.shape[2]?fe.resizeBilinear(a,[t.shape[1],t.shape[2]]):Ia(a),n.diff=xe(n.input1,n.input2),n.squared=te(n.diff,n.diff),n.sum=ot(n.squared);let s=(await n.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return J([n.input1,n.input2,n.diff,n.squared,n.sum]),s}var rc,sc,ic,nc=class{constructor(){he(this,"browser");he(this,"node");he(this,"worker");he(this,"platform","");he(this,"agent","");he(this,"backends",[]);he(this,"initial");he(this,"filter");he(this,"tfjs");he(this,"offscreen");he(this,"perfadd",!1);he(this,"tensorflow",{version:void 0,gpu:void 0});he(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});he(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});he(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});he(this,"cpu",{model:void 0,flags:[]});he(this,"kernels",[]);qn(this,rc,void 0);qn(this,sc,void 0);qn(this,ic,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:ac["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",a=t.match(/\(([^()]+)\)/g);if(a!=null&&a[0]){let n=a[0].match(/\(([^()]+)\)/g);this.platform=n!=null&&n[0]?n[0].replace(/\(|\)/g,""):"",this.agent=t.replace(a[0],""),this.platform[1]&&(this.agent=this.agent.replace(a[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return qa(this,rc)}set Canvas(t){xr(this,rc,t),globalThis.Canvas=t}get Image(){return qa(this,sc)}set Image(t){xr(this,sc,t),globalThis.Image=t}get ImageData(){return qa(this,ic)}set ImageData(t){xr(this,ic,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(It().registryFactory);try{this.tensorflow={version:Bn().binding?Bn().binding.TF_Version:void 0,gpu:Bn().binding?Bn().binding.isUsingGpuDevice():void 0}}catch(n){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Mn(100,100),a=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof a!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&a&&(this.webgl.version=a.getParameter(a.VERSION),this.webgl.vendor=a.getParameter(a.VENDOR),this.webgl.renderer=a.getParameter(a.RENDERER),this.webgl.shader=a.getParameter(a.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let n=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(n==null?void 0:n.requestAdapterInfo())}}catch(n){this.webgpu.supported=!1}try{this.kernels=Jn(Qt()).map(n=>n.kernelName.toLowerCase())}catch(n){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};rc=new WeakMap,sc=new WeakMap,ic=new WeakMap;var ne=new nc;var A0=class{constructor(){he(this,"config");he(this,"element");he(this,"stream");he(this,"devices",[]);he(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(a=>a.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});he(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let i=document.getElementById(t.element);if(i&&i instanceof HTMLVideoElement)this.element=i;else return this.config.debug&&K("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&K("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let a={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(a.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(a.video.height={ideal:this.config.height}),this.config.id&&(a.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&K("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&K("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&K("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(a)}catch(i){return K("webcam",i),`webcam error: ${i}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(i=>{this.element?this.element.onloadeddata=()=>i(!0):i(!1)}),await this.element.play(),this.config.debug&&K("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&K("webcam error","no stream"),"webcam error no stream")});he(this,"pause",()=>{this.element&&this.element.pause()});he(this,"play",async()=>{this.element&&await this.element.play()});he(this,"stop",()=>{this.config.debug&&K("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var ry={};yr(ry,{"affectnet-mobilenet":()=>u1e,age:()=>d1e,"anti-spoofing":()=>V1e,antispoof:()=>Z2e,blazeface:()=>J2e,"blazeface-back":()=>p1e,"blazeface-front":()=>c1e,"blazepose-detector":()=>h1e,"blazepose-full":()=>m1e,"blazepose-heavy":()=>f1e,"blazepose-lite":()=>g1e,centernet:()=>Q2e,default:()=>tge,efficientpose:()=>y1e,"efficientpose-i-lite":()=>U1e,"efficientpose-ii-lite":()=>G1e,"efficientpose-iv":()=>H1e,emotion:()=>e1e,faceboxes:()=>x1e,facemesh:()=>t1e,"facemesh-attention":()=>b1e,"facemesh-attention-pinto":()=>A1e,"facemesh-detection-full":()=>v1e,"facemesh-detection-short":()=>w1e,faceres:()=>a1e,"faceres-deep":()=>k1e,gear:()=>C1e,"gear-e1":()=>I1e,"gear-e2":()=>S1e,gender:()=>N1e,"gender-ssrnet-imdb":()=>T1e,handdetect:()=>R1e,"handlandmark-full":()=>E1e,"handlandmark-lite":()=>n1e,"handlandmark-sparse":()=>M1e,handskeleton:()=>$1e,handtrack:()=>r1e,"insightface-efficientnet-b0":()=>j1e,"insightface-ghostnet-strides1":()=>q1e,"insightface-ghostnet-strides2":()=>X1e,"insightface-mobilenet-emore":()=>K1e,"insightface-mobilenet-swish":()=>Y1e,iris:()=>s1e,liveness:()=>i1e,meet:()=>P1e,mobileface:()=>_1e,mobilefacenet:()=>F1e,models:()=>o1e,"movenet-lightning":()=>l1e,"movenet-multipose":()=>D1e,"movenet-thunder":()=>O1e,nanodet:()=>z1e,"nanodet-e":()=>Z1e,"nanodet-g":()=>J1e,"nanodet-m":()=>Q1e,"nanodet-t":()=>ege,posenet:()=>L1e,rvm:()=>W1e,selfie:()=>B1e});var Z2e=853098,J2e=538928,Q2e=4030290,e1e=820516,t1e=1477958,a1e=6978814,n1e=2023432,r1e=2964837,s1e=2599092,i1e=592976,o1e=0,l1e=4650216,u1e=6920630,d1e=161240,p1e=538928,c1e=402048,h1e=5928856,m1e=6339202,f1e=27502466,g1e=2726402,y1e=5651240,x1e=2013002,A1e=2387598,b1e=2382414,v1e=1026192,w1e=201268,k1e=13957620,I1e=112438,S1e=112438,C1e=1498916,T1e=161236,N1e=201808,R1e=3515612,E1e=5431368,M1e=5286322,$1e=5502280,P1e=372228,_1e=2183192,F1e=5171976,D1e=9448838,O1e=12477112,z1e=7574558,L1e=5032780,W1e=3739355,B1e=212886,V1e=853098,U1e=2269064,G1e=5651240,H1e=25643252,j1e=13013224,q1e=8093408,X1e=8049584,K1e=6938536,Y1e=12168584,Z1e=12319156,J1e=7574558,Q1e=1887474,ege=5294216,tge={antispoof:Z2e,blazeface:J2e,centernet:Q2e,emotion:e1e,facemesh:t1e,faceres:a1e,"handlandmark-lite":n1e,handtrack:r1e,iris:s1e,liveness:i1e,models:o1e,"movenet-lightning":l1e,"affectnet-mobilenet":u1e,age:d1e,"blazeface-back":p1e,"blazeface-front":c1e,"blazepose-detector":h1e,"blazepose-full":m1e,"blazepose-heavy":f1e,"blazepose-lite":g1e,efficientpose:y1e,faceboxes:x1e,"facemesh-attention-pinto":A1e,"facemesh-attention":b1e,"facemesh-detection-full":v1e,"facemesh-detection-short":w1e,"faceres-deep":k1e,"gear-e1":I1e,"gear-e2":S1e,gear:C1e,"gender-ssrnet-imdb":T1e,gender:N1e,handdetect:R1e,"handlandmark-full":E1e,"handlandmark-sparse":M1e,handskeleton:$1e,meet:P1e,mobileface:_1e,mobilefacenet:F1e,"movenet-multipose":D1e,"movenet-thunder":O1e,nanodet:z1e,posenet:L1e,rvm:W1e,selfie:B1e,"anti-spoofing":V1e,"efficientpose-i-lite":U1e,"efficientpose-ii-lite":G1e,"efficientpose-iv":H1e,"insightface-efficientnet-b0":j1e,"insightface-ghostnet-strides1":q1e,"insightface-ghostnet-strides2":X1e,"insightface-mobilenet-emore":K1e,"insightface-mobilenet-swish":Y1e,"nanodet-e":Z1e,"nanodet-g":J1e,"nanodet-m":Q1e,"nanodet-t":ege};var Ea={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},ya={};async function age(e,t){return Ea.debug&&K("load model fetch:",e,t),fetch(e,t)}function o9(e){Ea.cacheModels=e.cacheModels,Ea.verbose=e.debug,Ea.modelBasePath=e.modelBasePath}async function $e(e){var u,p,c,d;let t=Zk(Ea.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let a=t.includes("/")?t.split("/"):t.split("\\"),n=a[a.length-1].replace(".json",""),r="indexeddb://"+n;ya[n]={name:n,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:ry[n],inCache:!1,url:""},Ea.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=Ea.cacheSupported&&Ea.cacheModels?await Kn.listModels():{}}catch(h){Ea.cacheSupported=!1}ya[n].inCache=Ea.cacheSupported&&Ea.cacheModels&&Object.keys(s).includes(r),ya[n].url=ya[n].inCache?r:t;let i=typeof fetch=="undefined"?{}:{fetchFunc:(h,m)=>age(h,m)},o=new Xp(ya[n].url,i),l=!1;try{o.findIOHandler(),Ea.debug&&K("model load handler:",o.handler)}catch(h){K("error finding model i/o handler:",t,h)}try{let h=await((u=o.handler)==null?void 0:u.load())||null;ya[n].sizeFromManifest=((p=h==null?void 0:h.weightData)==null?void 0:p.byteLength)||0,h?o.loadSync(h):o=await d3(ya[n].inCache?r:t,i),ya[n].sizeLoadedWeights=((d=(c=o.artifacts)==null?void 0:c.weightData)==null?void 0:d.byteLength)||0,Ea.verbose&&K("load:",{model:n,url:o.modelUrl,bytes:ya[n].sizeLoadedWeights}),l=!0}catch(h){K("error loading model:",t,h)}if(l&&Ea.cacheModels&&Ea.cacheSupported&&!ya[n].inCache)try{let h=await o.save(r);Ea.debug&&K("model saved:",r,h)}catch(h){K("error saving model:",t,h)}return o}var sy="3.2.2";var St={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function sge(){let e=St.gl;e&&(St.extensions=e.getSupportedExtensions())}function l9(e){var t;if(e.config.backend==="humangl"&&(St.name in It().registry&&!((t=St==null?void 0:St.gl)!=null&&t.getParameter(St.gl.VERSION))&&(K("humangl error: backend invalid context"),e.models.reset()),!lg(St.name))){try{St.canvas=Mn(100,100)}catch(r){K("humangl error: cannot create canvas:",r);return}try{if(St.gl=St.canvas.getContext("webgl2",St.webGLattr),!St.gl){K("humangl error: cannot get webgl context");return}if(!St.gl.getParameter(St.gl.VERSION).includes("2.0")){K("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}St.canvas&&(St.canvas.addEventListener("webglcontextlost",s=>{throw K("humangl error:",s.type),K("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),St.canvas.addEventListener("webglcontextrestored",s=>{K("humangl error: context restored:",s)}),St.canvas.addEventListener("webglcontextcreationerror",s=>{K("humangl error: context create:",s)}))}catch(r){K("humangl error: cannot get webgl context:",r);return}try{n0(2,St.gl)}catch(r){K("humangl error: cannot set webgl context:",r);return}try{let r=new Gl(St.gl);tl(St.name,()=>new Jp(r),St.priority)}catch(r){K("humangl error: cannot register webgl backend:",r);return}try{Jn("webgl").forEach(s=>{let i={...s,backendName:St.name};xn(i)})}catch(r){K("humangl error: cannot update webgl backend registration:",r);return}try{B().flagRegistry.WEBGL_VERSION&&B().set("WEBGL_VERSION",2)}catch(r){K("humangl error: cannot set WebGL backend flags:",r);return}sge();let a=Bn(),n=typeof a.gpgpu!="undefined"?a.getGPGPUContext().gl:null;n?e.config.debug&&K("humangl backend registered:",{webgl:n.getParameter(n.VERSION),renderer:n.getParameter(n.RENDERER)}):K("humangl error: no current gl context:",n,St.gl)}}var ze={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function u9(){ze.tf255=Ge(255,"float32"),ze.tf1=Ge(1,"float32"),ze.tf2=Ge(2,"float32"),ze.tf05=Ge(.5,"float32"),ze.tf127=Ge(127.5,"float32"),ze.rgb=Bt([.2989,.587,.114],"float32")}async function lge(){var e;return await ne.updateBackend(),(e=ne.tensorflow)!=null&&e.version?"tensorflow":ne.webgpu.supported&&ne.webgpu.backend?"webgpu":ne.webgl.supported&&ne.webgl.backend?"webgl":ne.wasm.supported&&ne.wasm.backend?"wasm":"cpu"}function uge(e){let t=[];if(!ne.kernels.includes("mod")){let a={kernelName:"Mod",backendName:Qt(),kernelFunc:n=>De(()=>xe(n.inputs.a,te(ve(n.inputs.a,n.inputs.b),n.inputs.b)))};xn(a),ne.kernels.push("mod"),t.push("mod")}if(!ne.kernels.includes("floormod")){let a={kernelName:"FloorMod",backendName:Qt(),kernelFunc:n=>De(()=>we(te(zp(n.inputs.a,n.inputs.b),n.inputs.b),Uu(n.inputs.a,n.inputs.b)))};xn(a),ne.kernels.push("floormod"),t.push("floormod")}if(!ne.kernels.includes("rotatewithoffset")&&e.softwareKernels){let a={kernelName:"RotateWithOffset",backendName:Qt(),kernelFunc:n=>De(()=>{let r=Qt();Fp("cpu");let s=fe.rotateWithOffset(n.inputs.image,n.attrs.radians,n.attrs.fillValue,n.attrs.center);return Fp(r),s})};xn(a),ne.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&K("registered kernels:",t)}var d9={};async function oc(e,t=!1){var a,n;if(e.state="backend",((a=e.config.backend)==null?void 0:a.length)===0&&(e.config.backend=await lge()),t||ne.initial||e.config.backend&&e.config.backend.length>0&&Qt()!==e.config.backend){let r=ae();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&K("running inside web worker"),typeof navigator!="undefined"&&((n=navigator==null?void 0:navigator.userAgent)!=null&&n.toLowerCase().includes("electron"))&&e.config.debug&&K("running inside electron");let s=Object.keys(It().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(l9(e),s=Object.keys(It().registryFactory)),e.config.debug&&K("available backends:",s),ne.browser&&!ne.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&K("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),ne.node&&!ne.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&K(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),ne.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")K("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let i=await navigator.gpu.requestAdapter();if(e.config.debug&&K("enumerated webgpu adapter:",i),!i)K("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let o="requestAdapterInfo"in i?await i.requestAdapterInfo():void 0;K("webgpu adapter info:",o)}}if(s.includes(e.config.backend)||(K(`error: backend ${e.config.backend} not found in registry`),e.config.backend=ne.node?"tensorflow":"webgl",e.config.debug&&K(`override: setting backend ${e.config.backend}`)),e.config.debug&&K("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(B().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&B().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&K("wasm path:",e.config.wasmPath),typeof u0!="undefined")u0(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let i=!1,o=!1;try{i=await B().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),o=await B().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&K(`wasm execution: ${o?"simd":"no simd"} ${i?"multithreaded":"singlethreaded"}`),e.config.debug&&!o&&K("warning: wasm simd support is not enabled")}catch(l){K("wasm detection failed")}}try{await Fp(e.config.backend),await Dp()}catch(i){return K("error: cannot set backend:",e.config.backend,i),!1}e.config.debug&&(d9=JSON.parse(JSON.stringify(B().flags)))}if((Qt()==="humangl"||Qt()==="webgl")&&(B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!0),B().flagRegistry.WEBGL_EXP_CONV&&B().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(K("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),B().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),Qt(),e.config.debug){let s=B().flags,i={};for(let o of Object.keys(s))d9[o]!==s[o]&&(i[o]=s[o]);e.config.debug&&Object.keys(i).length>0&&K("backend:",Qt(),"flags:",i)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&K("flags:",e.config.flags);for(let[s,i]of Object.entries(e.config.flags))B().set(s,i)}ig(),u9(),e.performance.initBackend=Math.trunc(ae()-r),e.config.backend=Qt(),await ne.updateBackend(),uge(e.config)}return!0}function b0(e,t){for(let a of e){let n={kernelName:a,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&K("kernelFunc",a,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};xn(n)}ne.kernels=Jn(Qt()).map(a=>a.kernelName.toLowerCase())}var C0={};yr(C0,{all:()=>Wge,body:()=>w0,canvas:()=>Lge,face:()=>v0,gesture:()=>S0,hand:()=>k0,init:()=>cy,object:()=>I0,options:()=>Ft,person:()=>zge});var vn=e=>{if(!e)K("draw error: invalid canvas");else if(!e.getContext)K("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)K("draw error: cannot get canvas context");else return t}return null},pl=e=>Math.round(e*180/Math.PI),ut=(e,t,a)=>e.replace(t,typeof a=="number"?a.toFixed(1):a),cl=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let a=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${a[0]}, ${a[1]}, ${a[2]}, ${t.alpha})`};function wn(e,t,a,n,r){let s=t.replace(/\[.*\]/g,"").split(` +`).map(o=>o.trim()),i=Math.max(0,a);for(let o=s.length-1;o>=0;o--){let l=o*r.lineHeight+n;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[o],i+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[o],i+4,l+15)}}function lr(e,t,a,n,r){e.fillStyle=cl(n,r),e.beginPath(),e.arc(t,a,r.pointSize,0,2*Math.PI),e.fill()}function ur(e,t,a,n,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let i=(t+t+n)/2,o=(a+a+r)/2;e.ellipse(i,o,n/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,a),e.lineTo(t+n-s.roundRect,a),e.quadraticCurveTo(t+n,a,t+n,a+s.roundRect),e.lineTo(t+n,a+r-s.roundRect),e.quadraticCurveTo(t+n,a+r,t+n-s.roundRect,a+r),e.lineTo(t+s.roundRect,a+r),e.quadraticCurveTo(t,a+r,t,a+r-s.roundRect),e.lineTo(t,a+s.roundRect),e.quadraticCurveTo(t,a,t+s.roundRect,a),e.closePath();e.stroke()}function iy(e,t,a){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let n of t)e.strokeStyle=cl(n[2]||0,a),e.lineTo(Math.trunc(n[0]),Math.trunc(n[1]));e.stroke(),a.fillPolygons&&(e.closePath(),e.fill())}}function c9(e,t,a){if(!(t.length<2)){if(e.lineWidth=a.lineWidth,!a.useCurves||t.length<=2){iy(e,t,a);return}e.moveTo(t[0][0],t[0][1]);for(let n=0;nlc[e]),Lbe=pge.map(e=>lc[e]),Wbe=cge.map(e=>lc[e]);function xs(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var hge=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],mge=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],fge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],gge=[[474,475],[475,476],[476,477],[477,474]],yge=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],xge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Age=[[469,470],[470,471],[471,472],[472,469]],bge=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Bbe={lips:xs(hge),leftEye:xs(mge),leftEyebrow:xs(fge),leftIris:xs(gge),rightEye:xs(yge),rightEyebrow:xs(xge),rightIris:xs(Age),faceOval:xs(bge)};var vge=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],wge=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],kge=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ige=[[474,475],[475,476],[476,477],[477,474]],Sge=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Cge=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Tge=[[469,470],[470,471],[471,472],[472,469]],Nge=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function As(e){let t=e.map(a=>a[0]);return t.push(e[e.length-1][1]),t}var Rge={lips:As(vge),leftEye:As(wge),leftEyebrow:As(kge),leftIris:As(Ige),rightEye:As(Sge),rightEyebrow:As(Cge),rightIris:As(Tge),faceOval:As(Nge)},Ege=Object.entries(Rge).map(([e,t])=>t.map(a=>[a,e])).flat(),Vbe=new Map(Ege),uc=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],fl=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],gl=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var rt;function Mge(e,t){var n,r,s,i,o,l,u,p,c;if(!rt.drawLabels||((n=rt.faceLabels)==null?void 0:n.length)===0)return;let a=rt.faceLabels.slice();if(a=ut(a,"[id]",e.id.toFixed(0)),e.score&&(a=ut(a,"[score]",100*e.score)),e.gender&&(a=ut(a,"[gender]",e.gender)),e.genderScore&&(a=ut(a,"[genderScore]",100*e.genderScore)),e.age&&(a=ut(a,"[age]",e.age)),e.distance&&(a=ut(a,"[distance]",100*e.distance)),e.real&&(a=ut(a,"[real]",100*e.real)),e.live&&(a=ut(a,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let d=e.emotion.map(h=>`${Math.trunc(100*h.score)}% ${h.emotion}`);d.length>3&&(d.length=3),a=ut(a,"[emotions]",d.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(a=ut(a,"[roll]",pl(e.rotation.angle.roll))),(o=(i=e.rotation)==null?void 0:i.angle)!=null&&o.yaw&&(a=ut(a,"[yaw]",pl(e.rotation.angle.yaw))),(u=(l=e.rotation)==null?void 0:l.angle)!=null&&u.pitch&&(a=ut(a,"[pitch]",pl(e.rotation.angle.pitch))),(c=(p=e.rotation)==null?void 0:p.gaze)!=null&&c.bearing&&(a=ut(a,"[gaze]",pl(e.rotation.gaze.bearing))),wn(t,a,e.box[0],e.box[1],rt)}function $ge(e,t){var a,n,r,s;if((a=e.annotations)!=null&&a.leftEyeIris&&((n=e.annotations)!=null&&n.leftEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.color,t.beginPath();let i=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,o=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=rt.useDepth?"rgba(255, 200, 255, 0.3)":rt.color,t.beginPath();let i=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,o=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],i,o,0,0,2*Math.PI),t.stroke(),rt.fillPolygons&&(t.fillStyle=rt.useDepth?"rgba(255, 255, 200, 0.3)":rt.color,t.fill())}}function Pge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let n=e.box[0]+e.box[2]/2-e.box[3]*pl(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*pl(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C ${n} ${e.box[1]}, @@ -8628,7 +8628,7 @@ return a / b;`,fQ=` ${e.box[0]} ${r}, ${e.box[0]+e.box[2]} ${r}, ${e.box[0]+e.box[2]} ${e.box[1]+e.box[3]/2} - `);t.stroke(i),t.stroke(s)}}function dye(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let n=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Ay(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[n[0],n[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];Ay(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function pye(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);xy(t,n,rt)}lye(e,t)}}function cye(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(cye(r,n),pye(r,n),uye(r,n),dye(r,n))}}function N0(e,t,a){var s,i;let n=Mt(_t,a);if(!t||!e)return;let r=kn(e);if(r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=ut(l,"[id]",t[o].id.toFixed(0)),l=ut(l,"[score]",100*t[o].score),In(r,l,t[o].box[0],t[o].box[1],n)}if(n.drawPoints&&t[o].keypoints)for(let l=0;l0&&t[o].keypoints){r.font=n.font;for(let l of t[o].keypoints){if(!l.score||l.score===0)continue;let u=n.bodyPartLabels.slice();u=ut(u,"[label]",l.part),u=ut(u,"[score]",100*l.score),In(r,u,l.position[0],l.position[1],n)}}if(n.drawPolygons&&t[o].keypoints&&t[o].annotations)for(let l of Object.values(t[o].annotations))for(let u of l)eI(r,u,n)}}}function R0(e,t,a){var s,i;let n=Mt(_t,a);if(!t||!e)return;let r=kn(e);if(r){r.lineJoin="round",r.font=n.font;for(let o of t){if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,hr(r,o.box[0],o.box[1],o.box[2],o.box[3],n),n.drawLabels&&((s=n.handLabels)==null?void 0:s.length)>0){let l=n.handLabels.slice();l=ut(l,"[id]",o.id.toFixed(0)),l=ut(l,"[label]",o.label),l=ut(l,"[score]",100*o.score),In(r,l,o.box[0],o.box[1],n)}r.stroke()}if(n.drawPoints&&o.keypoints&&o.keypoints.length>0)for(let l of o.keypoints)r.fillStyle=Al(l[2],n),cr(r,l[0],l[1],0,n);if(n.drawLabels&&o.annotations&&((i=n.fingerLabels)==null?void 0:i.length)>0)for(let[l,u]of Object.entries(o.annotations)){let d=n.fingerLabels.slice();d=ut(d,"[label]",l),In(r,d,u[u.length-1][0],u[u.length-1][1],n)}if(n.drawPolygons&&o.annotations){let l=u=>{if(!(!u||u.length===0||!u[0]))for(let d=0;d0?d-1:0][0],u[d>0?d-1:0][1]),r.lineTo(u[d][0],u[d][1]),r.stroke()}};r.lineWidth=n.lineWidth,l(o.annotations.index),l(o.annotations.middle),l(o.annotations.ring),l(o.annotations.pinky),l(o.annotations.thumb)}}}}function E0(e,t,a){var s;let n=Mt(_t,a);if(!t||!e)return;let r=kn(e);if(r){r.lineJoin="round",r.font=n.font;for(let i of t)if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,hr(r,i.box[0],i.box[1],i.box[2],i.box[3],n),n.drawLabels&&((s=n.objectLabels)==null?void 0:s.length)>0){let o=n.objectLabels.slice();o=ut(o,"[id]",i.id.toFixed(0)),o=ut(o,"[label]",i.label),o=ut(o,"[score]",100*i.score),In(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function M0(e,t,a){var r;let n=Mt(_t,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=kn(e);if(!s)return;s.font=n.font,s.fillStyle=n.color;let i=1;for(let o=0;o1&&u[1].length>0){let d=l[1]>0?`#${l[1]}`:"",c=n.gestureLabels.slice();c=ut(c,"[where]",l[0]),c=ut(c,"[who]",d),c=ut(c,"[what]",u[1]),In(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var Hs={face:`face + `);t.stroke(i),t.stroke(s)}}function _ge(e,t){var a;if(rt.drawGaze&&((a=e.rotation)!=null&&a.gaze.strength)&&e.rotation.gaze.bearing&&e.annotations.leftEyeIris&&e.annotations.rightEyeIris&&e.annotations.leftEyeIris[0]&&e.annotations.rightEyeIris[0]){t.strokeStyle="pink",t.fillStyle="pink";let n=[e.annotations.leftEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.leftEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];oy(t,[e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1]],[n[0],n[1]],4);let r=[e.annotations.rightEyeIris[0][0]+Math.sin(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[3],e.annotations.rightEyeIris[0][1]+Math.cos(e.rotation.gaze.bearing)*e.rotation.gaze.strength*e.box[2]];oy(t,[e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1]],[r[0],r[1]],4)}}function Fge(e,t){if(rt.drawPolygons&&e.mesh.length>=468){t.lineWidth=1;for(let a=0;ae.mesh[r]);iy(t,n,rt)}$ge(e,t)}}function Dge(e,t){if(rt.drawPoints)if((e==null?void 0:e.mesh.length)>=468)for(let a=0;a0&&(Dge(r,n),Fge(r,n),Pge(r,n),_ge(r,n))}}function w0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round";for(let o=0;o0)){let l=n.bodyLabels.slice();l=ut(l,"[id]",t[o].id.toFixed(0)),l=ut(l,"[score]",100*t[o].score),wn(r,l,t[o].box[0],t[o].box[1],n)}if(n.drawPoints&&t[o].keypoints)for(let l=0;l0&&t[o].keypoints){r.font=n.font;for(let l of t[o].keypoints){if(!l.score||l.score===0)continue;let u=n.bodyPartLabels.slice();u=ut(u,"[label]",l.part),u=ut(u,"[score]",100*l.score),wn(r,u,l.position[0],l.position[1],n)}}if(n.drawPolygons&&t[o].keypoints&&t[o].annotations)for(let l of Object.values(t[o].annotations))for(let u of l)c9(r,u,n)}}}function k0(e,t,a){var s,i;let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let o of t){if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,ur(r,o.box[0],o.box[1],o.box[2],o.box[3],n),n.drawLabels&&((s=n.handLabels)==null?void 0:s.length)>0){let l=n.handLabels.slice();l=ut(l,"[id]",o.id.toFixed(0)),l=ut(l,"[label]",o.label),l=ut(l,"[score]",100*o.score),wn(r,l,o.box[0],o.box[1],n)}r.stroke()}if(n.drawPoints&&o.keypoints&&o.keypoints.length>0)for(let l of o.keypoints)r.fillStyle=cl(l[2],n),lr(r,l[0],l[1],0,n);if(n.drawLabels&&o.annotations&&((i=n.fingerLabels)==null?void 0:i.length)>0)for(let[l,u]of Object.entries(o.annotations)){let p=n.fingerLabels.slice();p=ut(p,"[label]",l),wn(r,p,u[u.length-1][0],u[u.length-1][1],n)}if(n.drawPolygons&&o.annotations){let l=u=>{if(!(!u||u.length===0||!u[0]))for(let p=0;p0?p-1:0][0],u[p>0?p-1:0][1]),r.lineTo(u[p][0],u[p][1]),r.stroke()}};r.lineWidth=n.lineWidth,l(o.annotations.index),l(o.annotations.middle),l(o.annotations.ring),l(o.annotations.pinky),l(o.annotations.thumb)}}}}function I0(e,t,a){var s;let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let i of t)if(n.drawBoxes){if(r.strokeStyle=n.color,r.fillStyle=n.color,ur(r,i.box[0],i.box[1],i.box[2],i.box[3],n),n.drawLabels&&((s=n.objectLabels)==null?void 0:s.length)>0){let o=n.objectLabels.slice();o=ut(o,"[id]",i.id.toFixed(0)),o=ut(o,"[label]",i.label),o=ut(o,"[score]",100*i.score),wn(r,o,i.box[0],i.box[1],n)}r.stroke()}}}function S0(e,t,a){var r;let n=Et(Ft,a);if(!(!t||!e)&&n.drawGestures&&((r=n.gestureLabels)==null?void 0:r.length)>0){let s=vn(e);if(!s)return;s.font=n.font,s.fillStyle=n.color;let i=1;for(let o=0;o1&&u[1].length>0){let p=l[1]>0?`#${l[1]}`:"",c=n.gestureLabels.slice();c=ut(c,"[where]",l[0]),c=ut(c,"[who]",p),c=ut(c,"[what]",u[1]),wn(s,c,8,2+i*n.lineHeight,n),i+=1}}}}var bs={face:`face confidence: [score]% [gender] [genderScore]% age: [age] years @@ -8637,7 +8637,7 @@ return a / b;`,fQ=` live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var ky=0;function mye(e,t,a){let n=Mt(_t,a);if(!t||!e)return;let r=kn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;sTy,kpt:()=>Sy});var Sy=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],Ty={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var Sn,Il=224,nI,yye=5,D0=[8,16,32,32,32];function xye(){let e=[],t=0;for(;ta.x)),y:Vt(e.map(a=>a.y))}}async function rI(e){if(ne.initial&&(Sn=null),!Sn&&e.body.detector&&e.body.detector.modelPath){Sn=await $e(e.body.detector.modelPath);let t=Sn!=null&&Sn.executor?Object.values(Sn.modelSignature.inputs):void 0;Il=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&Sn&&K("cached model:",Sn.modelUrl);return xye(),Sn}var aI=[5,5];function Aye(e,t){return Pe(()=>{let a=Sa(e,12,1),n=Oe(a[0]),r=Oe(a[1]),s=Oe(a[2]),i=Oe(a[3]);n=we(ve(n,Il),t.x),r=we(ve(r,Il),t.y),s=te(ve(s,Il),aI[0]),i=te(ve(i,Il),aI[1]);let o=xe(n,ve(s,2)),l=xe(r,ve(i,2)),u=we(o,s),d=we(l,i);return ca([o,l,u,d],1)})}async function bye(e,t,a,n){var u,d;let r=[],s={};s.boxes=Aye(e,nI),s.scores=za(t),s.nms=await fe.nonMaxSuppressionAsync(s.boxes,s.scores,1,((u=a.body.detector)==null?void 0:u.minConfidence)||.1,((d=a.body.detector)==null?void 0:d.iouThreshold)||.1);let i=await s.nms.data(),o=await s.scores.data(),l=await s.boxes.array();for(let c of Array.from(i)){let p=o[c],h=l[c],m=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],f={score:p,boxRaw:h,box:m};r.push(f)}return Object.keys(s).forEach(c=>J(s[c])),r}async function sI(e,t,a){let n={};n.res=Sn==null?void 0:Sn.execute(e,["Identity"]),n.logitsRaw=_e(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=_e(n.res,[0,0,1],[1,-1,-1]),n.logits=Oe(n.logitsRaw),n.boxes=Oe(n.boxesRaw);let r=await bye(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function js(e,t=[1,1]){let a=[e.map(o=>o[0]),e.map(o=>o[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function iI(e,t=[1,1]){let a=[e.map(u=>u[0]),e.map(u=>u[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],i=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function P0(e,t){let a=[e[2]*t,e[3]*t];return[e[0]-(a[0]-e[2])/2,e[1]-(a[1]-e[3])/2,a[0],a[1]]}var Ga,Ny=256,Cy=Number.MAX_SAFE_INTEGER,vye={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},O0=[],qs=[[0,0],[0,0],[0,0],[0,0]],oI=0,lI=e=>1-1/(1+Math.exp(e)),dI=e=>rI(e);async function pI(e){if(ne.initial&&(Ga=null),Ga)e.debug&&K("cached model:",Ga.modelUrl);else{Ga=await $e(e.body.modelPath);let t=Ga!=null&&Ga.executor?Object.values(Ga.modelSignature.inputs):void 0;Ny=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ga}function uI(e,t,a){var s,i;let n={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((i=e==null?void 0:e.shape)!=null&&i[2]))return e;let r;if(a&&(n.cropped=fe.cropAndResize(e,[a],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let o=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];qs=[[0,0],o,l,[0,0]],n.pad=ur(n.cropped||e,qs),n.resize=fe.resizeBilinear(n.pad,[t,t]),r=ve(n.resize,ze.tf255)}else e.shape[1]!==t?(n.resize=fe.resizeBilinear(n.cropped||e,[t,t]),r=ve(n.resize,ze.tf255)):r=ve(n.cropped||e,ze.tf255);return Object.keys(n).forEach(o=>J(n[o])),r}function wye(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+qs[2][0]+qs[2][1])/t[0]-qs[2][0]),Math.trunc(n.position[1]*(t[1]+qs[1][0]+qs[1][1])/t[1]-qs[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(a){let n=a[2]-a[0],r=a[3]-a[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+a[1],s.positionRaw[1]/n+a[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function kye(e){let t=e.find(o=>o.part==="leftPalm"),a=e.find(o=>o.part==="leftWrist"),n=e.find(o=>o.part==="leftIndex");t.position[2]=((a.position[2]||0)+(n.position[2]||0))/2;let r=e.find(o=>o.part==="rightPalm"),s=e.find(o=>o.part==="rightWrist"),i=e.find(o=>o.part==="rightIndex");r.position[2]=((s.position[2]||0)+(i.position[2]||0))/2}async function Iye(e,t,a){if(!(Ga!=null&&Ga.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ga==null?void 0:Ga.execute(e,vye.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(m=>J(n[m]));let o=[],l=5;for(let m=0;mm.position),c=js(d,[a[0],a[1]]),p={};for(let[m,f]of Object.entries(Ty)){let g=[];for(let y=0;yb.part===f[y]),A=u.find(b=>b.part===f[y+1]);x&&A&&g.push([x.position,A.position])}p[m]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:p}}async function Ry(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-oI,r=Cy<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&O0!==null)Cy++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=uI(e,224);l=await sI(u,t,a),J(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uJ(n[u])),r}async function Fy(e,t){if(!(Ha!=null&&Ha.executor))return[];let a=(t.object.skipTime||0)>ae()-hI,n=My<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&Ey.length>0?(My++,Ey):(My=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[Sl,Sl]),o=t.object.enabled?Ha==null?void 0:Ha.execute(i,["tower_0/detections"]):null;hI=ae(),J(i);let l=await Sye(o,s,t);Ey=l,r(l)}))}var z0={};vr(z0,{connected:()=>Dy,kpt:()=>$y});var $y=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],Dy={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ft,gI=0,Ma={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},Py=Number.MAX_SAFE_INTEGER;async function yI(e){return ne.initial&&(Ft=null),Ft?e.debug&&K("cached model:",Ft.modelUrl):Ft=await $e(e.body.modelPath),Ft}async function Tye(e,t){let[a,n]=e.shape,r=Q(e,[n*a]),s=fa(r,0),i=(await s.data())[0];if(i>t){let o=or(r,0),l=Ku(o,a),u=(await l.data())[0],d=ve(o,a),c=(await d.data())[0];return J([r,s,o,l,d]),[u,c,i]}return J([r,s]),[0,0,i]}async function _y(e,t){if(!(Ft!=null&&Ft.executor)||!(Ft!=null&&Ft.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-gI,n=Py<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ma.keypoints).length>0?(Py++,[Ma]):(Py=0,new Promise(async r=>{let s=Pe(()=>{var m,f;let c=fe.resizeBilinear(e,[((m=Ft==null?void 0:Ft.inputs[0].shape)==null?void 0:m[2])||0,((f=Ft==null?void 0:Ft.inputs[0].shape)==null?void 0:f[1])||0],!1),p=te(c,ze.tf2);return xe(p,ze.tf1)}),i;if(t.body.enabled&&(i=Ft==null?void 0:Ft.execute(s)),gI=ae(),J(s),i){Ma.keypoints.length=0;let c=Oe(i);J(i);let p=Na(c,2);J(c);for(let h=0;h(t.body.minConfidence||0)&&Ma.keypoints.push({score:Math.round(100*g)/100,part:$y[h],positionRaw:[m/Ft.inputs[0].shape[2],f/Ft.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Ft.inputs[0].shape[2]),Math.round(e.shape[1]*f/Ft.inputs[0].shape[1])]})}p.forEach(h=>J(h))}Ma.score=Ma.keypoints.reduce((c,p)=>p.score>c?p.score:c,0);let o=Ma.keypoints.map(c=>c.position[0]),l=Ma.keypoints.map(c=>c.position[1]);Ma.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ma.keypoints.map(c=>c.positionRaw[0]),d=Ma.keypoints.map(c=>c.positionRaw[1]);Ma.boxRaw=[Math.min(...u),Math.min(...d),Math.max(...u)-Math.min(...u),Math.max(...d)-Math.min(...d)];for(let[c,p]of Object.entries(Dy)){let h=[];for(let m=0;my.part===p[m]),g=Ma.keypoints.find(y=>y.part===p[m+1]);f&&g&&f.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([f.position,g.position])}Ma.annotations[c]=h}r([Ma])}))}var dd=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],L0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],W0=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],B0=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],vI=(e,t,a)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(i=>[(i[0]+a[0])*t[0],(i[1]+a[1])*t[1]]);return{startPoint:n,endPoint:r,landmarks:s,confidence:e.confidence}},Oy=(e,t,a)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],i=fe.cropAndResize(t,[s],[0],a),o=ve(i,ze.tf255);return J(i),o},V0=(e,t)=>{let a=L0(e),n=dd(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[a[0]-r[0],a[1]-r[1]],endPoint:[a[0]+r[0],a[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:n}},U0=e=>{let t=L0(e),a=dd(e),n=Math.max(...a)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(a[0]),Math.round(a[1])]}},wI=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...a)],endPoint:[Math.max(...t),Math.max(...a)],landmarks:e}},zy=[[1,0,0],[0,1,0],[0,0,1]],Cye=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Nye=(e,t)=>Cye(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var AI=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Tl=(e,t)=>{let a=0;for(let n=0;n{let a=[];for(let n=0;n{let a=[],n=e.length;for(let r=0;r{let a=Math.cos(e),n=Math.sin(e),r=[[a,-n,0],[n,a,0],[0,0,1]],s=AI(t[0],t[1]),i=bI(s,r),o=AI(-t[0],-t[1]);return bI(i,o)},Eye=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-Tl(t[0],a),-Tl(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},Mye=(e,t)=>[Tl(e,t[0]),Tl(e,t[1])];function II(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},a=[];for(let n=0;n[s[0]/r*(h[0]-r/2),s[1]/r*(h[1]-r/2),h[2]||0]),o=a&&a!==0&&Math.abs(a)>.2,l=o?kI(a,[0,0]):zy,u=o?i.map(h=>[...Mye(h,l),h[2]]):i,d=o?Eye(n):zy,c=L0(t),p=[Tl(c,d[0]),Tl(c,d[1])];return u.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2]||0)])}function TI(e,t,a,n){let r=t.landmarks.length>=by.count?by.symmetryLine:bl.symmetryLine,s=0,i=zy,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=Nye(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=L0(t),d=[u[0]/a.shape[2],u[1]/a.shape[1]],c=fe.rotateWithOffset(a,s,0,[d[0],d[1]]);i=kI(-s,u),o=Oy(t,c,[n,n]),J(c)}else o=Oy(t,a,[n,n]);else o=Oy(t,a,[n,n]);return[s,i,o]}var Fye=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...a)+(Math.max(...a)-Math.min(...a))/2]},CI=(e,t)=>{let a=Fye(e),n=dd(t);return{startPoint:[a[0]-n[0]/2,a[1]-n[1]/2],endPoint:[a[0]+n[0]/2,a[1]+n[1]/2]}};var NI=6,Hn,G0=null,Xs=0,pd=null,RI=()=>Xs;async function EI(e){var t;return ne.initial&&(Hn=null),Hn?e.debug&&K("cached model:",Hn.modelUrl):Hn=await $e((t=e.face.detector)==null?void 0:t.modelPath),Xs=Hn.executor&&Hn.inputs[0].shape?Hn.inputs[0].shape[2]:256,pd=Ge(Xs,"int32"),G0=er(II(Xs)),Hn}function $ye(e){if(!G0||!pd)return An([0,0]);let t={};t.boxStarts=_e(e,[0,1],[-1,2]),t.centers=we(t.boxStarts,G0),t.boxSizes=_e(e,[0,3],[-1,2]),t.boxSizesNormalized=ve(t.boxSizes,pd),t.centersNormalized=ve(t.centers,pd),t.halfBoxSize=ve(t.boxSizesNormalized,ze.tf2),t.starts=xe(t.centersNormalized,t.halfBoxSize),t.ends=we(t.centersNormalized,t.halfBoxSize),t.startNormalized=te(t.starts,pd),t.endNormalized=te(t.ends,pd);let a=Xu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function MI(e,t){var o,l,u,d,c,p,h;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[Xs,Xs]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf05);let n=Hn==null?void 0:Hn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let m=n.sort((f,g)=>f.size-g.size);a.concat384=lt([m[0],m[2]],2),a.concat512=lt([m[1],m[3]],2),a.concat=lt([a.concat512,a.concat384],1),a.batch=Oe(a.concat,[0])}else Array.isArray(n)?a.batch=Oe(n[0]):a.batch=Oe(n);J(n),a.boxes=$ye(a.batch),a.logits=_e(a.batch,[0,0],[-1,1]),a.sigmoid=za(a.logits),a.scores=Oe(a.sigmoid),a.nms=await fe.nonMaxSuppressionAsync(a.boxes,a.scores,((o=t.face.detector)==null?void 0:o.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await a.nms.array(),s=[],i=await a.scores.data();for(let m=0;m(((d=t.face.detector)==null?void 0:d.minConfidence)||0)){let g={};g.bbox=_e(a.boxes,[r[m],0],[1,-1]),g.slice=_e(a.batch,[r[m],NI-1],[1,-1]),g.squeeze=Oe(g.slice),g.landmarks=Q(g.squeeze,[NI,-1]);let y=await g.bbox.data(),x={startPoint:[y[0],y[1]],endPoint:[y[2],y[3]],landmarks:await g.landmarks.array(),confidence:f};g.anchor=_e(G0,[r[m],0],[1,2]);let A=await g.anchor.data(),b=vI(x,[(e.shape[2]||0)/Xs,(e.shape[1]||0)/Xs],A),w=V0(b,((c=t.face.detector)==null?void 0:c.scale)||1.4),S=U0(w);S.size[0]>(((p=t.face.detector)==null?void 0:p.minSize)||0)&&S.size[1]>(((h=t.face.detector)==null?void 0:h.minSize)||0)&&s.push(S),Object.keys(g).forEach(C=>J(g[C]))}}return Object.keys(a).forEach(m=>J(a[m])),s}var sn,Ks=0,Wy=Pn.leftEyeLower0,By=Pn.rightEyeLower0,cd={leftBounds:[Wy[0],Wy[Wy.length-1]],rightBounds:[By[0],By[By.length-1]]},hd={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function _I(e){var t,a;return ne.initial&&(sn=null),sn?e.debug&&K("cached model:",sn.modelUrl):sn=await $e((t=e.face.iris)==null?void 0:t.modelPath),Ks=sn!=null&&sn.executor&&((a=sn.inputs)!=null&&a[0].shape)?sn.inputs[0].shape[2]:0,Ks===-1&&(Ks=64),sn}function H0(e,t,a,n){for(let r=0;r{let t=e[cd.leftBounds[0]][2],a=e[cd.rightBounds[0]][2];return t-a},$I=(e,t,a,n,r,s=!1,i=2.3)=>{let o=U0(V0(wI([e[a],e[n]]),i)),l=dd(o),u=fe.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Ks,Ks]);if(s&&ne.kernels.includes("flipleftright")){let d=fe.flipLeftRight(u);J(u),u=d}return{box:o,boxSize:l,crop:u}},DI=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[Pn[`${a}EyeUpper0`][hd.upperCenter]][2],r=e[Pn[`${a}EyeLower0`][hd.lowerCenter]][2],s=(n+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=n:o===4&&(l=r),[i[0],i[1],l]})};async function OI(e,t,a,n){var C,N;if(!(sn!=null&&sn.executor))return e;let{box:r,boxSize:s,crop:i}=$I(e,t,cd.leftBounds[0],cd.leftBounds[1],a,!0,((C=n.face.iris)==null?void 0:C.scale)||2.3),{box:o,boxSize:l,crop:u}=$I(e,t,cd.rightBounds[0],cd.rightBounds[1],a,!0,((N=n.face.iris)==null?void 0:N.scale)||2.3),d=lt([i,u]);J(i),J(u);let c=sn.execute(d);J(d);let p=await c.data();J(c);let h=p.slice(0,hd.numCoordinates*3),{rawCoords:m,iris:f}=DI(h,r,s,!0),g=p.slice(hd.numCoordinates*3),{rawCoords:y,iris:x}=DI(g,o,l,!1),A=Dye(e);Math.abs(A)<30?(H0(e,m,"left",null),H0(e,y,"right",null)):A<1?H0(e,m,"left",["EyeUpper0","EyeLower0"]):H0(e,y,"right",["EyeUpper0","EyeLower0"]);let b=PI(e,f,"left"),w=PI(e,x,"right");return e.concat(b).concat(w)}async function LI(e,t){var s,i,o,l,u,d,c,p,h,m;let a={lips:await((i=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(f=>f.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((d=(u=t.filter(f=>f.size===142))==null?void 0:u[0])==null?void 0:d.data()),irisR:await((p=(c=t.filter(f=>f.size===10))==null?void 0:c[1])==null?void 0:p.data()),eyeR:await((m=(h=t.filter(f=>f.size===142))==null?void 0:h[1])==null?void 0:m.data())};for(let f of Object.values(a))if(!f)return e;let n=wl.reduce((f,g)=>f+=e[g][2],0)/wl.length;for(let f=0;ff+=e[g][2],0)/kl.length;for(let f=0;fae()-mr.timestamp,n=mr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||mr.boxes.length===0?(mr.boxes=await MI(e,t),mr.timestamp=ae(),mr.skipped=0):mr.skipped++;let r=[],s=[],i=0,o=gc;for(let x=0;x[C[0]/(e.shape[2]||0),C[1]/(e.shape[1]||0),(C[2]||0)/o]);for(let C of Object.keys(bl))S.annotations[C]=[S.mesh[bl[C]]]}else if(!Ct)t.debug&&K("face mesh detection requested, but model is not loaded");else{if((h=t.face.attention)!=null&&h.enabled&&!ne.kernels.includes("atan2"))return t.face.attention.enabled=!1,J(S.tensor),r;let C=Ct.execute(S.tensor),M=await C.find(F=>F.shape[F.shape.length-1]===1).data();if(S.faceScore=Math.round(100*M[0])/100,S.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(A.confidence=S.faceScore,t.face.mesh.keepInvalid){S.box=W0(A,e),S.boxRaw=B0(A,e),S.size=A.size,S.score=S.boxScore,S.mesh=A.landmarks,S.meshRaw=S.mesh.map(F=>[F[0]/(e.shape[2]||1),F[1]/(e.shape[1]||1),(F[2]||0)/o]);for(let F of Object.keys(bl))S.annotations[F]=[S.mesh[bl[F]]]}}else{let F=C.find(O=>O.shape[O.shape.length-1]===1404),E=Q(F,[-1,3]),T=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?T=await LI(T,C):(g=t.face.iris)!=null&&g.enabled&&(T=await OI(T,S.tensor,gc,t)),S.mesh=SI(T,A,b,w,gc),S.meshRaw=S.mesh.map(O=>[O[0]/(e.shape[2]||0),O[1]/(e.shape[1]||0),(O[2]||0)/o]);for(let O of Object.keys(Pn))S.annotations[O]=Pn[O].map(W=>S.mesh[W]);S.score=S.faceScore;let D={...CI(S.mesh,A),confidence:A.confidence,landmarks:A.landmarks,size:A.size};S.box=W0(D,e),S.boxRaw=B0(D,e),S.size=D.size,s.push(D)}J(C)}S.score>(((y=t.face.detector)==null?void 0:y.minConfidence)||1)?r.push(S):J(S.tensor)}return mr.boxes=s,r}async function BI(e){var t,a,n,r,s,i;return ne.initial&&(Ct=null),(t=e.face.attention)!=null&&t.enabled&&(Ct!=null&&Ct.signature)&&Object.keys(((a=Ct==null?void 0:Ct.signature)==null?void 0:a.outputs)||{}).length<6&&(Ct=null),Ct?e.debug&&K("cached model:",Ct.modelUrl):(n=e.face.attention)!=null&&n.enabled?Ct=await $e(e.face.attention.modelPath):Ct=await $e((r=e.face.mesh)==null?void 0:r.modelPath),gc=Ct.executor&&((s=Ct==null?void 0:Ct.inputs)!=null&&s[0].shape)?(i=Ct==null?void 0:Ct.inputs)==null?void 0:i[0].shape[2]:256,Ct}var VI=vl,UI=mc;var Gy=[],sa,j0=[],GI=0,HI=0,Uy=Number.MAX_SAFE_INTEGER,Hy=!1;async function jI(e){var t,a,n;return ne.initial&&(sa=null),sa?e.debug&&K("cached model:",sa.modelUrl):(sa=await $e((t=e.face.emotion)==null?void 0:t.modelPath),Hy=((n=(a=sa==null?void 0:sa.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Hy?Gy=["angry","disgust","fear","happy","neutral","sad","surprise"]:Gy=["angry","disgust","fear","happy","sad","surprise","neutral"]),sa}async function jy(e,t,a,n){var i,o;if(!sa)return[];let r=Uy<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-HI;return t.skipAllowed&&s&&r&&GI===n&&j0[a]&&j0[a].length>0?(Uy++,j0[a]):(Uy=0,new Promise(async l=>{var d,c,p;let u=[];if((d=t.face.emotion)!=null&&d.enabled){let h={},m=sa!=null&&sa.inputs[0].shape?sa.inputs[0].shape[2]:0;if(((c=t.face.emotion)==null?void 0:c.crop)>0){let g=(p=t.face.emotion)==null?void 0:p.crop,y=[[g,g,1-g,1-g]];h.resize=fe.cropAndResize(e,y,[0],[m,m])}else h.resize=fe.resizeBilinear(e,[m,m],!1);Hy?(h.mul=te(h.resize,255),h.normalize=xe(h.mul,[103.939,116.779,123.68]),h.emotion=sa==null?void 0:sa.execute(h.normalize)):(h.channels=te(h.resize,ze.rgb),h.grayscale=ot(h.channels,3,!0),h.grayscaleSub=xe(h.grayscale,ze.tf05),h.grayscaleMul=te(h.grayscaleSub,ze.tf2),h.emotion=sa==null?void 0:sa.execute(h.grayscaleMul)),HI=ae();let f=await h.emotion.data();for(let g=0;g(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[g])/100),emotion:Gy[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}j0[a]=u,GI=n,l(u)}))}var ia,Ys=[],XI=0,KI=0,qy=Number.MAX_SAFE_INTEGER;async function YI(e){var t;return ne.initial&&(ia=null),ia?e.debug&&K("cached model:",ia.modelUrl):ia=await $e((t=e.face.description)==null?void 0:t.modelPath),ia}function _ye(e,t){var s,i;let a=e.image||e.tensor||e;if(!(ia!=null&&ia.inputs[0].shape))return a;let n;if(((s=t.face.description)==null?void 0:s.crop)>0){let o=(i=t.face.description)==null?void 0:i.crop,l=[[o,o,1-o,1-o]];n=fe.cropAndResize(a,l,[0],[ia.inputs[0].shape[2],ia.inputs[0].shape[1]])}else n=fe.resizeBilinear(a,[ia.inputs[0].shape[2],ia.inputs[0].shape[1]],!1);let r=te(n,ze.tf255);return J(n),r}async function Xy(e,t,a,n){var o,l,u,d;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(ia!=null&&ia.executor))return r;let s=qy<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-XI;return t.skipAllowed&&s&&i&&KI===n&&((u=Ys==null?void 0:Ys[a])==null?void 0:u.age)>0&&((d=Ys==null?void 0:Ys[a])==null?void 0:d.genderScore)>0?(qy++,Ys[a]):(qy=0,new Promise(async c=>{var p;if((p=t.face.description)!=null&&p.enabled){let h=_ye(e,t),m=ia==null?void 0:ia.execute(h);XI=ae(),J(h);let g=await m.find(N=>N.shape[1]===1).data(),y=Math.trunc(200*Math.abs(g[0]-.5))/100;y>(t.face.description.minConfidence||0)&&(r.gender=g[0]<=.5?"female":"male",r.genderScore=Math.min(.99,y));let x=or(m.find(N=>N.shape[1]===100),1),A=(await x.data())[0];J(x);let w=await m.find(N=>N.shape[1]===100).data();r.age=Math.round(w[A-1]>w[A+1]?10*A-100*w[A-1]:10*A+100*w[A+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:ia,result:m});let S=m.find(N=>N.shape[1]===1024),C=S?await S.data():[];r.descriptor=Array.from(C),m.forEach(N=>J(N))}Ys[a]=r,KI=n,c(r)}))}var md=.1,Ky=.5;function Oye(e,t,a){let n=!1,r=a.length-1;for(let s=0;st!=a[r].y>t&&e<(a[r].x-a[s].x)*(t-a[s].y)/(a[r].y-a[s].y)+a[s].x&&(n=!n);return n}async function JI(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,a=e.tensor.shape[1]||0,n=await e.tensor.buffer(),r=[];for(let i of Pn.silhouette)r.push({x:(e.mesh[i][0]-e.box[0])/e.box[2],y:(e.mesh[i][1]-e.box[1])/e.box[3]});md&&md>0&&(r=r.map(i=>({x:i.x>.5?i.x+md:i.x-md,y:i.y>.5?i.y+md:i.y-md})));for(let i=0;iae()-eS,s=Yy<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&QI===n&&q0[a]?(Yy++,q0[a]):(Yy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[2]:0,oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[1]:0],!1),d=oa==null?void 0:oa.execute(u),c=(await d.data())[0];q0[a]=Math.round(100*c)/100,QI=n,eS=ae(),J([u,d]),l(q0[a])}))}var la,X0=[],Jy=Number.MAX_SAFE_INTEGER,nS=0,rS=0;async function sS(e){var t;return ne.initial&&(la=null),la?e.debug&&K("cached model:",la.modelUrl):la=await $e((t=e.face.liveness)==null?void 0:t.modelPath),la}async function Qy(e,t,a,n){var i,o;if(!(la!=null&&la.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>ae()-rS,s=Jy<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&nS===n&&X0[a]?(Jy++,X0[a]):(Jy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[la!=null&&la.inputs[0].shape?la.inputs[0].shape[2]:0,la!=null&&la.inputs[0].shape?la.inputs[0].shape[1]:0],!1),d=la==null?void 0:la.execute(u),c=(await d.data())[0];X0[a]=Math.round(100*c)/100,nS=n,rS=ae(),J([u,d]),l(X0[a])}))}var _n,ex=[],Lye=["white","black","asian","indian","other"],Wye=[15,23,28,35.5,45.5,55.5,65],oS=0,lS=0,tx=Number.MAX_SAFE_INTEGER;async function uS(e){var t;return ne.initial&&(_n=null),_n?e.debug&&K("cached model:",_n.modelUrl):_n=await $e((t=e.face.gear)==null?void 0:t.modelPath),_n}async function ax(e,t,a,n){var i,o;if(!_n)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=tx<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-lS;return t.skipAllowed&&s&&r&&oS===n&&ex[a]?(tx++,ex[a]):(tx=0,new Promise(async l=>{var y,x,A,b;if(!(_n!=null&&_n.inputs[0].shape))return;let u={},d=[[0,.1,.9,.9]];if(((y=t.face.gear)==null?void 0:y.crop)>0){let w=(x=t.face.gear)==null?void 0:x.crop;d=[[w,w,1-w,1-w]]}u.resize=fe.cropAndResize(e,d,[0],[_n.inputs[0].shape[2],_n.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(A=t.face.gear)!=null&&A.enabled&&([u.age,u.gender,u.race]=_n.execute(u.resize,["age_output","gender_output","race_output"]));let p=await u.gender.data();c.gender=p[0]>p[1]?"male":"female",c.genderScore=Math.round(100*(p[0]>p[1]?p[0]:p[1]))/100;let h=await u.race.data();for(let w=0;w(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[w])/100,race:Lye[w]});c.race.sort((w,S)=>S.score-w.score);let f=Array.from(await u.age.data()).map((w,S)=>[Wye[S],w]).sort((w,S)=>S[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),ex[a]=c,oS=n,lS=ae(),l(c)}))}var Fa,K0=[],pS=0,cS=0,nx=Number.MAX_SAFE_INTEGER;async function hS(e){return ne.initial&&(Fa=null),Fa?e.debug&&K("cached model:",Fa.modelUrl):Fa=await $e(e.face.ssrnet.modelPathAge),Fa}async function rx(e,t,a,n){var i,o,l,u;if(!Fa)return{age:0};let r=nx<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-cS;return t.skipAllowed&&r&&s&&pS===n&&((l=K0[a])!=null&&l.age)&&((u=K0[a])==null?void 0:u.age)>0?(nx++,K0[a]):(nx=0,new Promise(async d=>{var h,m,f;if(!(Fa!=null&&Fa.inputs)||!Fa.inputs[0]||!Fa.inputs[0].shape)return;let c={};if(((h=t.face.ssrnet)==null?void 0:h.crop)>0){let g=(m=t.face.ssrnet)==null?void 0:m.crop,y=[[g,g,1-g,1-g]];c.resize=fe.cropAndResize(e,y,[0],[Fa.inputs[0].shape[2],Fa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[Fa.inputs[0].shape[2],Fa.inputs[0].shape[1]],!1);c.enhance=te(c.resize,ze.tf255);let p={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(c.age=Fa.execute(c.enhance)),c.age){let g=await c.age.data();p.age=Math.trunc(10*g[0])/10}Object.keys(c).forEach(g=>J(c[g])),K0[a]=p,pS=n,cS=ae(),d(p)}))}var xa,Y0=[],fS=0,gS=0,sx=Number.MAX_SAFE_INTEGER,ix=[.2989,.587,.114];async function yS(e){var t;return ne.initial&&(xa=null),xa?e.debug&&K("cached model:",xa.modelUrl):xa=await $e((t=e.face.ssrnet)==null?void 0:t.modelPathGender),xa}async function ox(e,t,a,n){var i,o,l,u;if(!xa)return{gender:"unknown",genderScore:0};let r=sx<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-gS;return t.skipAllowed&&r&&s&&fS===n&&((l=Y0[a])!=null&&l.gender)&&((u=Y0[a])==null?void 0:u.genderScore)>0?(sx++,Y0[a]):(sx=0,new Promise(async d=>{var m,f,g;if(!(xa!=null&&xa.inputs[0].shape))return;let c={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let y=(f=t.face.ssrnet)==null?void 0:f.crop,x=[[y,y,1-y,1-y]];c.resize=fe.cropAndResize(e,x,[0],[xa.inputs[0].shape[2],xa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[xa.inputs[0].shape[2],xa.inputs[0].shape[1]],!1);c.enhance=Pe(()=>{var x,A;let y;if(((A=(x=xa==null?void 0:xa.inputs)==null?void 0:x[0].shape)==null?void 0:A[3])===1){let[b,w,S]=Sa(c.resize,3,3),C=te(b,ix[0]),N=te(w,ix[1]),M=te(S,ix[2]),F=Uh([C,N,M]);y=te(xe(F,ze.tf05),2)}else y=te(xe(c.resize,ze.tf05),2);return y});let p={gender:"unknown",genderScore:0};(g=t.face.ssrnet)!=null&&g.enabled&&(c.gender=xa.execute(c.enhance));let h=await c.gender.data();p.gender=h[0]>h[1]?"female":"male",p.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(c).forEach(y=>J(c[y])),Y0[a]=p,fS=n,gS=ae(),d(p)}))}var on,lx=[],AS=0,bS=0,vS=Number.MAX_SAFE_INTEGER;async function wS(e){var t;return ne.initial&&(on=null),on?e.debug&&K("cached model:",on.modelUrl):on=await $e((t=e.face.mobilefacenet)==null?void 0:t.modelPath),on}async function ux(e,t,a,n){var i,o;if(!(on!=null&&on.executor))return[];let r=vS<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-bS;return t.skipAllowed&&s&&r&&AS===n&&lx[a]?(vS++,lx[a]):new Promise(async l=>{var d;let u=[];if((d=t.face.mobilefacenet)!=null&&d.enabled&&(on!=null&&on.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[on.inputs[0].shape[2],on.inputs[0].shape[1]],!1),c.data=on.execute(c.crop);let p=await c.data.data();u=Array.from(p),Object.keys(c).forEach(h=>J(c[h]))}lx[a]=u,AS=n,bS=ae(),l(u)})}var ln,dx=[],IS=0,SS=0,TS=Number.MAX_SAFE_INTEGER;async function CS(e){return ne.initial&&(ln=null),ln?e.debug&&K("cached model:",ln.modelUrl):ln=await $e(e.face.insightface.modelPath),ln}async function px(e,t,a,n){var i,o;if(!(ln!=null&&ln.executor))return[];let r=TS<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-SS;return t.skipAllowed&&s&&r&&IS===n&&dx[a]?(TS++,dx[a]):new Promise(async l=>{var d;let u=[];if((d=t.face.insightface)!=null&&d.enabled&&(ln!=null&&ln.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[ln.inputs[0].shape[2],ln.inputs[0].shape[1]],!1),c.data=ln.execute(c.crop);let p=await c.data.data();u=Array.from(p),Object.keys(c).forEach(h=>J(c[h]))}dx[a]=u,IS=n,SS=ae(),l(u)})}var Bye=e=>{let t=(c,p)=>Math.atan2(c[1]-p[1],c[0]-p[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let a=[0,-.1],n=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],i=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],o=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(i[0]-s[0])/o[0]-a[0],n*(s[1]-i[1])/o[1]-a[1]],u=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return u=Math.min(u,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:u}},RS=(e,t)=>{let a=f=>{let g=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=g,f[1]/=g,f[2]/=g,f},n=(f,g)=>{let y=f[0]-g[0],x=f[1]-g[1],A=f[2]-g[2];return[y,x,A]},r=(f,g)=>{let y=f[1]*g[2]-f[2]*g[1],x=f[2]*g[0]-f[0]*g[2],A=f[0]*g[1]-f[1]*g[0];return[y,x,A]},s=f=>{let[g,y,x,A,b,w,S,C,N]=f,M,F,E;return A<1?A>-1?(E=Math.asin(A),F=Math.atan2(-S,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,F=-Math.atan2(C,N),M=0):(E=Math.PI/2,F=Math.atan2(C,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN(F)&&(F=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-F,roll:2*-E}},i=e.meshRaw;if(!i||i.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let o=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[i[10],i[152],i[234],i[454]].map(f=>[f[0]*t[0]/o,f[1]*t[1]/o,f[2]]),u=a(n(l[1],l[0])),d=a(n(l[3],l[2])),c=a(r(d,u));d=r(u,c);let p=[d[0],d[1],d[2],u[0],u[1],u[2],c[0],c[1],c[2]],h=s(p),m=i.length===478?Bye(e):{bearing:0,strength:0};return{angle:h,matrix:p,gaze:m}};function ES(e,t){let a=e==null?void 0:e.annotations;if(!(a!=null&&a.leftEyeIris)||!(a!=null&&a.rightEyeIris))return 0;let n=Math.max(Math.abs(a.leftEyeIris[3][0]-a.leftEyeIris[1][0]),Math.abs(a.rightEyeIris[3][0]-a.rightEyeIris[1][0]))/t;return Math.round(1.17/n)/100}var cx=async(e,t)=>{var m,f,g,y,x,A,b,w,S,C,N,M,F,E,T,D,O,W,$,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,d,c,p=[];e.state="run:face";let h=await WI(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(ae()-a):Math.trunc(ae()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let V=0;V200?RS(h[V],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(f=e.config.face.emotion)!=null&&f.enabled?jy(h[V].tensor||Ve([]),e.config,V,h.length):[]:(e.state="run:emotion",a=ae(),i=(g=e.config.face.emotion)!=null&&g.enabled?await jy(h[V].tensor||Ve([]),e.config,V,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(y=e.config.face.antispoof)!=null&&y.enabled?Zy(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:antispoof",a=ae(),u=(x=e.config.face.antispoof)!=null&&x.enabled?await Zy(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?d=(A=e.config.face.liveness)!=null&&A.enabled?Qy(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:liveness",a=ae(),d=(b=e.config.face.liveness)!=null&&b.enabled?await Qy(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?ax(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:gear",a=ae(),r=(S=e.config.face.gear)!=null&&S.enabled?await ax(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.gear=Math.trunc(ae()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(C=e.config.face.ssrnet)!=null&&C.enabled?rx(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?ox(h[V].tensor||Ve([]),e.config,V,h.length):null):(e.state="run:ssrnet",a=ae(),n=(M=e.config.face.ssrnet)!=null&&M.enabled?await rx(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(F=e.config.face.ssrnet)!=null&&F.enabled?await ox(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.ssrnet=Math.trunc(ae()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(E=e.config.face.mobilefacenet)!=null&&E.enabled?ux(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),o=(T=e.config.face.mobilefacenet)!=null&&T.enabled?await ux(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(D=e.config.face.insightface)!=null&&D.enabled?px(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),l=(O=e.config.face.insightface)!=null&&O.enabled?await px(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=Xy(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Xy(h[V].tensor||Ve([]),e.config,V,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Description:"),e.config.async&&([n,s,i,o,l,c,r,u,d]=await Promise.all([n,s,i,o,l,c,r,u,d])),e.analyze("Finish Face:"),(W=e.config.face.ssrnet)!=null&&W.enabled&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),($=e.config.face.gear)!=null&&$.enabled&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(U=e.config.face.mobilefacenet)!=null&&U.enabled&&o&&(c.descriptor=o),(G=e.config.face.insightface)!=null&&G.enabled&&l&&(c.descriptor=l);let X=(q=e.config.face.iris)!=null&&q.enabled?ES(h[V],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?Oe(h[V].tensor):null;J(h[V].tensor),h[V].tensor&&delete h[V].tensor;let ee={...h[V],id:V};c.age&&(ee.age=c.age),c.gender&&(ee.gender=c.gender),c.genderScore&&(ee.genderScore=c.genderScore),c.descriptor&&(ee.embedding=c.descriptor),c.race&&(ee.race=c.race),i&&(ee.emotion=i),u&&(ee.real=u),d&&(ee.live=d),X>0&&(ee.distance=X),Z&&(ee.rotation=Z),re&&(ee.tensor=re),p.push(ee),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),p};var $a={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>$a.nameMapping[e],getPoints:e=>$a.pointsMapping[e]},Js={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Js.nameMapping[e]},$t={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>$t.nameMapping[e]},Zs=class{constructor(t){he(this,"name");he(this,"curls");he(this,"directions");he(this,"weights");he(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,a,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([a,n])}direction(t,a,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([a,n])}weight(t,a){this.weights[t]=a;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,a){let n=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}for(let r in a){let s=a[r],i=this.directions[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:jn,index:zr,middle:Lr,ring:Cl,pinky:Nl}=$a,{none:qn,half:Uye,full:Xn}=Js,{verticalUp:fd,verticalDown:jve,horizontalLeft:hx,horizontalRight:Gye,diagonalUpRight:Hye,diagonalUpLeft:gd,diagonalDownRight:qve,diagonalDownLeft:Xve}=$t,Qs=new Zs("thumbs up");Qs.curl(jn,qn,1);Qs.direction(jn,fd,1);Qs.direction(jn,gd,.25);Qs.direction(jn,Hye,.25);for(let e of[$a.index,$a.middle,$a.ring,$a.pinky])Qs.curl(e,Xn,1),Qs.direction(e,hx,1),Qs.direction(e,Gye,1);var Ht=new Zs("victory");Ht.curl(jn,Uye,.5);Ht.curl(jn,qn,.5);Ht.direction(jn,fd,1);Ht.direction(jn,gd,1);Ht.curl(zr,qn,1);Ht.direction(zr,fd,.75);Ht.direction(zr,gd,1);Ht.curl(Lr,qn,1);Ht.direction(Lr,fd,1);Ht.direction(Lr,gd,.75);Ht.curl(Cl,Xn,1);Ht.direction(Cl,fd,.2);Ht.direction(Cl,gd,1);Ht.direction(Cl,hx,.2);Ht.curl(Nl,Xn,1);Ht.direction(Nl,fd,.2);Ht.direction(Nl,gd,1);Ht.direction(Nl,hx,.2);Ht.weight(zr,2);Ht.weight(Lr,2);var ei=new Zs("point");ei.curl(jn,Xn,1);ei.curl(zr,qn,.5);ei.curl(Lr,Xn,.5);ei.curl(Cl,Xn,.5);ei.curl(Nl,Xn,.5);ei.weight(zr,2);ei.weight(Lr,2);var ti=new Zs("middle finger");ti.curl(jn,qn,1);ti.curl(zr,Xn,.5);ti.curl(Lr,Xn,.5);ti.curl(Cl,Xn,.5);ti.curl(Nl,Xn,.5);ti.weight(zr,2);ti.weight(Lr,2);var yd=new Zs("open palm");yd.curl(jn,qn,.75);yd.curl(zr,qn,.75);yd.curl(Lr,qn,.75);yd.curl(Cl,qn,.75);yd.curl(Nl,qn,.75);var MS=[Qs,Ht,ei,ti,yd];var jye=.7,Rl={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function FS(e,t,a,n){let r=(t-n)/(e-a),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function DS(e,t){if(!e||!t)return[0,0];let a=FS(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=FS(e[1],e[2],t[1],t[2]);return[a,n]}function $S(e,t=1){let a=0,n=0,r=0;return e>=75&&e<=105?a=1*t:e>=25&&e<=155?n=1*t:r=1*t,[a,n,r]}function qye(e,t,a){let n=e[0]-t[0],r=e[0]-a[0],s=t[0]-a[0],i=e[1]-t[1],o=e[1]-a[1],l=t[1]-a[1],u=e[2]-t[2],d=e[2]-a[2],c=t[2]-a[2],p=Math.sqrt(n*n+i*i+u*u),h=Math.sqrt(r*r+o*o+d*d),m=Math.sqrt(s*s+l*l+c*c),f=(m*m+p*p-h*h)/(2*m*p);f>1?f=1:f<-1&&(f=-1);let g=Math.acos(f);g=57.2958*g%180;let y;return g>Rl.NO_CURL_START_LIMIT?y=Js.none:g>Rl.HALF_CURL_START_LIMIT?y=Js.half:y=Js.full,y}function PS(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=$t.horizontalLeft:r=$t.horizontalRight:n===Math.abs(t)?t>0?r=$t.horizontalLeft:r=$t.horizontalRight:a>0?r=$t.horizontalLeft:r=$t.horizontalRight,r}function _S(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=$t.verticalDown:r=$t.verticalUp:n===Math.abs(t)?t<0?r=$t.verticalDown:r=$t.verticalUp:a<0?r=$t.verticalDown:r=$t.verticalUp,r}function Xye(e,t,a,n,r,s,i,o){let l,u=_S(e,t,a,n),d=PS(r,s,i,o);return u===$t.verticalUp?d===$t.horizontalLeft?l=$t.diagonalUpLeft:l=$t.diagonalUpRight:d===$t.horizontalLeft?l=$t.diagonalDownLeft:l=$t.diagonalDownRight,l}function Kye(e,t,a,n){let r=e[0]-t[0],s=e[0]-a[0],i=t[0]-a[0],o=e[1]-t[1],l=e[1]-a[1],u=t[1]-a[1],d=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),c=Math.max(Math.abs(o),Math.abs(l),Math.abs(u)),p=0,h=0,m=0,f=c/(d+1e-5);f>1.5?p+=Rl.DISTANCE_VOTE_POWER:f>.66?h+=Rl.DISTANCE_VOTE_POWER:m+=Rl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),x=Math.sqrt(i*i+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],S=a[0],C=a[1];A===g?(S=a[0],C=a[1]):A===x&&(b=t[0],w=t[1]);let F=DS([b,w],[S,C]),E=$S(F,Rl.TOTAL_ANGLE_VOTE_POWER);p+=E[0],h+=E[1],m+=E[2];for(let D of n){let O=$S(D,Rl.SINGLE_ANGLE_VOTE_POWER);p+=O[0],h+=O[1],m+=O[2]}let T;return p===Math.max(p,h,m)?T=_S(l,o,u,c):m===Math.max(h,m)?T=PS(s,r,i,d):T=Xye(l,o,u,c,s,r,i,d),T}function OS(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of $a.all){let i=$a.getPoints(s),o=[],l=[];for(let u of i){let d=e[u[0]],c=e[u[1]],p=DS(d,c),h=p[0],m=p[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of $a.all){let i=s===$a.thumb?1:0,o=$a.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],d=e[o[3][1]],c=qye(l,u,d),p=Kye(l,u,d,t[s].slice(i));n[s]=c,r[s]=p}return{curls:n,directions:r}}function Z0(e){if(!e||e.length===0)return null;let t=OS(e),a={};for(let n of $a.all)a[$a.getName(n)]={curl:Js.getName(t.curls[n]),direction:$t.getName(t.directions[n])};return a}function zS(e){let t=[];if(!e||e.length===0)return t;let a=OS(e);for(let n of MS){let r=n.matchAgainst(a.curls,a.directions);r>=jye&&t.push({name:n.name,confidence:r})}return t}var LS=e=>{if(!e)return[];let t=[];for(let a=0;al.part==="leftWrist"),r=e[a].keypoints.find(l=>l.part==="rightWrist"),s=e[a].keypoints.find(l=>l.part==="nose");s&&n&&r&&n.position[1]l.part==="leftShoulder"),o=e[a].keypoints.find(l=>l.part==="rightShoulder");i&&o&&Math.abs(i.positionRaw[1]-o.positionRaw[1])>.1&&t.push({body:a,gesture:`leaning ${i.position[1]>o.position[1]?"left":"right"}`})}return t},WS=e=>{if(!e)return[];let t=[];for(let a=0;a450){let n=(e[a].mesh[33][2]||0)-(e[a].mesh[263][2]||0),r=e[a].mesh[33][0]-e[a].mesh[263][0];Math.abs(n/r)<=.15?t.push({face:a,gesture:"facing center"}):t.push({face:a,gesture:`facing ${n<0?"left":"right"}`}),Math.abs(e[a].mesh[374][1]-e[a].mesh[386][1])/Math.abs(e[a].mesh[443][1]-e[a].mesh[450][1])<.2&&t.push({face:a,gesture:"blink left eye"}),Math.abs(e[a].mesh[145][1]-e[a].mesh[159][1])/Math.abs(e[a].mesh[223][1]-e[a].mesh[230][1])<.2&&t.push({face:a,gesture:"blink right eye"});let o=Math.min(100,500*Math.abs(e[a].mesh[13][1]-e[a].mesh[14][1])/Math.abs(e[a].mesh[10][1]-e[a].mesh[152][1]));o>10&&t.push({face:a,gesture:`mouth ${Math.trunc(o)}% open`});let l=e[a].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:a,gesture:`head ${l<0?"up":"down"}`})}return t},BS=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),f>g?g>.04&&t.push({iris:i,gesture:"looking right"}):f>.04&&t.push({iris:i,gesture:"looking left"});let y=Math.abs(e[i].mesh[145][1]-e[i].annotations.rightEyeIris[0][1])/e[i].box[3],x=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(x<.01||y<.01||x>.022||y>.022)&&(h=!1),(x<.01||y<.01)&&t.push({iris:i,gesture:"looking down"}),(x>.022||y>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},VS=e=>{if(!e)return[];let t=[];for(let a=0;a0){let r=n.reduce((i,o)=>(i.position[2]||0)<(o.position[2]||0)?i:o);t.push({hand:a,gesture:`${r.name} forward`});let s=n.reduce((i,o)=>i.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:a,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function Q0(e,t=1.5){let a=yc(e),n=J0(e),r=[t*n[0]/2,t*n[1]/2],s=[a[0]-r[0],a[1]-r[1]],i=[a[0]+r[0],a[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function em(e){let t=yc(e),a=J0(e),r=Math.max(...a)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function Zye(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function qS(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Zye(a)}var US=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function ai(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=er(this.anchors),this.inputSize=((s=(r=(n=(a=this==null?void 0:this.model)==null?void 0:a.inputs)==null?void 0:n[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=Vt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Vt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=_e(t,[0,0],[-1,2]),a.boxSizes=_e(t,[0,2],[-1,2]),a.div=ve(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=we(a.div,this.anchorsTensor),a.halfBoxSizes=ve(a.boxSizes,this.doubleInputSizeTensor),a.sub=xe(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=te(a.sub,this.inputSizeTensor),a.add=we(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=te(a.add,this.inputSizeTensor);let n=Xu([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>J(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=Q(t,[-1,7,2]),n.div=ve(n.reshape,this.inputSizeTensor),n.landmarks=we(n.div,this.anchors[a]?this.anchors[a]:0);let r=te(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>J(n[s])),r}async predict(t,a){var o;let n={};n.resize=fe.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=ve(n.resize,ze.tf127),n.image=xe(n.div,ze.tf1),n.batched=this.model.execute(n.image),n.predictions=Oe(n.batched),n.slice=_e(n.predictions,[0,0],[-1,1]),n.sigmoid=za(n.slice),n.scores=Oe(n.sigmoid);let r=await n.scores.data();n.boxes=_e(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await fe.nonMaxSuppressionAsync(n.norm,n.scores,3*(((o=a.hand)==null?void 0:o.maxDetected)||1),a.hand.iouThreshold,a.hand.minConfidence);let s=await n.nms.array(),i=[];for(let l of s){let u={};u.box=_e(n.norm,[l,0],[1,-1]),u.slice=_e(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=Q(u.norm,[-1,2]);let d=await u.box.data(),c=d.slice(0,2),p=d.slice(2,4),h=await u.palmLandmarks.array(),m={startPoint:c,endPoint:p,palmLandmarks:h,confidence:r[l]},f=jS(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(f),Object.keys(u).forEach(g=>J(u[g]))}return Object.keys(n).forEach(l=>J(n[l])),i}};var txe=5,ZS=1.65,JS=[0,5,9,13,17,1,2],axe=0,nxe=2,QS=0,am=class{constructor(t,a){he(this,"handDetector");he(this,"handPoseModel");he(this,"inputSize");he(this,"storedBoxes");he(this,"skipped");he(this,"detectedHands");var n,r,s;this.handDetector=t,this.handPoseModel=a,this.inputSize=((s=(r=(n=this.handPoseModel)==null?void 0:n.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let a=t.map(i=>i[0]),n=t.map(i=>i[1]),r=[Math.min(...a),Math.min(...n)],s=[Math.max(...a),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,a){let n=t.map(s=>gx([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return Q0(em(r),txe)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=Q0(em(a),ZS);n.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=fx(n,[0,0]),u=o.map(h=>[...gx(h,l),h[2]]),d=XS(r),c=[...yc(a),1],p=[ai(c,d[0]),ai(c,d[1])];return u.map(h=>[Math.trunc(h[0]+p[0]),Math.trunc(h[1]+p[1]),Math.trunc(h[2])])}async estimateHands(t,a){let n=!1,r,s=(a.hand.skipTime||0)>ae()-QS,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i?this.skipped++:(r=await this.handDetector.predict(t,a),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==a.hand.maxDetected||!a.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let o=[];for(let l=0;l=a.hand.minConfidence/4){let w=Q(A,[-1,3]),S=await w.array();J(A),J(w);let C=this.transformRawCoords(S,f,d,m),N=this.getBoxForHandLandmarks(C);this.storedBoxes[l]={...N,confidence:b};let M={landmarks:C,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:N.startPoint,bottomRight:N.endPoint}};o.push(M)}else this.storedBoxes[l]=null;J(A)}else{let d=Q0(em(u),ZS),c={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:d.startPoint,bottomRight:d.endPoint},landmarks:[]};o.push(c)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>a.hand.maxDetected&&(o.length=a.hand.maxDetected),o}};var eT={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},El,Ml,yx;function sxe(){let e=El?new tm(El):void 0;e&&Ml&&(yx=new am(e,Ml))}async function xx(e,t){yx||sxe();let a=await yx.estimateHands(e,t);if(!a)return[];let n=[];for(let r=0;ra[r].landmarks[c]);let i=a[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let d of i)d[0]o[2]&&(o[2]=d[0]),d[1]>o[3]&&(o[3]=d[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=a[r].box?[Math.trunc(Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.max(0,a[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,a[r].box.bottomRight[0])-Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,a[r].box.bottomRight[1])-Math.max(0,a[r].box.topLeft[1]))]:[0,0,0,0],l=[a[r].box.topLeft[0]/(e.shape[2]||0),a[r].box.topLeft[1]/(e.shape[1]||0),(a[r].box.bottomRight[0]-a[r].box.topLeft[0])/(e.shape[2]||0),(a[r].box.bottomRight[1]-a[r].box.topLeft[1])/(e.shape[1]||0)];let u=Z0(i);n.push({id:r,score:Math.round(100*a[r].confidence)/100,boxScore:Math.round(100*a[r].boxConfidence)/100,fingerScore:Math.round(100*a[r].fingerConfidence)/100,label:"hand",box:o,boxRaw:l,keypoints:i,annotations:s,landmarks:u})}return n}async function tT(e){var t;return ne.initial&&(El=null),El?e.debug&&K("cached model:",El.modelUrl):El=await $e((t=e.hand.detector)==null?void 0:t.modelPath),El}async function aT(e){var t;return ne.initial&&(Ml=null),Ml?e.debug&&K("cached model:",Ml.modelUrl):Ml=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath),Ml}var zt=[null,null],ixe=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],ni=[[0,0],[0,0]],oxe=["hand","fist","pinch","point","face","tip","pinchtip"],rT=4,sT=1.6,lxe=512,uxe=1.4,nm=Number.MAX_SAFE_INTEGER,Ax=0,Wr=[0,0],Ot={boxes:[],hands:[]},iT={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function oT(e){var t;if(ne.initial&&(zt[0]=null),zt[0])e.debug&&K("cached model:",zt[0].modelUrl);else{T0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),zt[0]=await $e((t=e.hand.detector)==null?void 0:t.modelPath);let a=zt[0].executor?Object.values(zt[0].modelSignature.inputs):void 0;ni[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,ni[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return zt[0]}async function lT(e){var t;if(ne.initial&&(zt[1]=null),zt[1])e.debug&&K("cached model:",zt[1].modelUrl);else{zt[1]=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=zt[1].executor?Object.values(zt[1].modelSignature.inputs):void 0;ni[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,ni[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return zt[1]}async function dxe(e,t){let a=[];if(!e||!zt[0])return a;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,lxe),i=Math.round(s*r/8)*8;n.resize=fe.resizeBilinear(e,[s,i]),n.cast=Ue(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await zt[0].executeAsync(n.cast,ixe),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Na(n.scores,1);J(o[rT]),o.splice(rT,1),n.filtered=ca(o,1),J(o),n.max=fa(n.filtered,1),n.argmax=or(n.filtered,1);let l=0;n.nms=await fe.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await n.nms.data(),d=await n.max.data(),c=await n.argmax.data();for(let p of Array.from(u)){let h=_e(n.boxes,p,1),m=await h.data();J(h);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],g=P0(f,uxe),y=[Math.trunc(f[0]*Wr[0]),Math.trunc(f[1]*Wr[1]),Math.trunc(f[2]*Wr[0]),Math.trunc(f[3]*Wr[1])],x=d[p],A=oxe[c[p]],b={id:l++,score:x,box:y,boxRaw:g,label:A};a.push(b)}return Object.keys(n).forEach(p=>J(n[p])),a.sort((p,h)=>h.score-p.score),a.length>(t.hand.maxDetected||1)&&(a.length=t.hand.maxDetected||1),a}async function bx(e,t,a){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&zt[1]&&a.hand.landmarks&&t.score>(a.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=fe.cropAndResize(e,[s],[0],[ni[1][0],ni[1][1]],"bilinear"),r.div=ve(r.crop,ze.tf255),[r.score,r.keypoints]=zt[1].execute(r.div,["Identity_1","Identity"]);let i=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(i))))/100;if(o>=(a.hand.minConfidence||0)){n.fingerScore=o,r.reshaped=Q(r.keypoints,[-1,3]);let d=(await r.reshaped.array()).map(c=>[c[0]/ni[1][1],c[1]/ni[1][0],c[2]||0]).map(c=>[c[0]*t.boxRaw[2],c[1]*t.boxRaw[3],c[2]||0]);n.keypoints=d.map(c=>[Wr[0]*(c[0]+t.boxRaw[0]),Wr[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=Z0(n.keypoints);for(let c of Object.keys(iT))n.annotations[c]=iT[c].map(p=>n.landmarks&&n.keypoints[p]?n.keypoints[p]:null)}Object.keys(r).forEach(l=>J(r[l]))}return n}async function vx(e,t){var r,s;if(!((r=zt[0])!=null&&r.executor)||!((s=zt[1])!=null&&s.executor)||!zt[0].inputs[0].shape||!zt[1].inputs[0].shape)return[];Wr=[e.shape[2]||0,e.shape[1]||0],nm++;let a=(t.hand.skipTime||0)>ae()-Ax,n=nm<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Ot.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-Ax,l=nm<3*(t.hand.skipFrames||0);t.skipAllowed&&Ot.hands.length===t.hand.maxDetected?Ot.hands=await Promise.all(Ot.boxes.map(d=>bx(e,d,t))):t.skipAllowed&&o&&l&&Ot.hands.length>0?Ot.hands=await Promise.all(Ot.boxes.map(d=>bx(e,d,t))):(Ot.boxes=await dxe(e,t),Ax=ae(),Ot.hands=await Promise.all(Ot.boxes.map(d=>bx(e,d,t))),nm=0);let u=[...Ot.boxes];if(Ot.boxes.length=0,t.cacheSensitivity>0)for(let d=0;d.05&&c.box[3]/(e.shape[1]||1)>.05&&Ot.hands[d].fingerScore&&Ot.hands[d].fingerScore>(t.hand.minConfidence||0)){let p=P0(c.box,sT),h=P0(c.boxRaw,sT);Ot.boxes.push({...u[d],box:p,boxRaw:h})}}for(let d=0;d({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var xc={};vr(xc,{connected:()=>sm,horizontal:()=>wx,kpt:()=>rm,relative:()=>Ix,vertical:()=>kx});var rm=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],wx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],kx=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],Ix=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],sm={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ae=fr(),Sx=0;function dT(e,t){var i,o,l,u,d,c,p,h,m,f,g,y,x,A,b,w,S,C,N,M,F,E,T,D,O,W;let a=ae();if(!e)return fr();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(Ae.canvas=e.canvas),e.error&&(Ae.error=e.error),!Ae.body||e.body.length!==Ae.body.length)Ae.body=JSON.parse(JSON.stringify(e.body));else for(let $=0;$((r-1)*Ae.body[$].box[X]+Z)/r),G=e.body[$].boxRaw.map((Z,X)=>((r-1)*Ae.body[$].boxRaw[X]+Z)/r),q=e.body[$].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Ee,Le,qe;return{score:Z.score,part:Z.part,position:[Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[$].keypoints[X]?((r-1)*(Ae.body[$].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[$].keypoints[X]?((r-1)*(((re=Ae.body[$].keypoints[X].distance)==null?void 0:re[0])||0)+(((ee=Z.distance)==null?void 0:ee[0])||0))/r:(ge=Z.distance)==null?void 0:ge[0],Ae.body[$].keypoints[X]?((r-1)*(((ie=Ae.body[$].keypoints[X].distance)==null?void 0:ie[1])||0)+(((be=Z.distance)==null?void 0:be[1])||0))/r:(Ce=Z.distance)==null?void 0:Ce[1],Ae.body[$].keypoints[X]?((r-1)*(((Ee=Ae.body[$].keypoints[X].distance)==null?void 0:Ee[2])||0)+(((Le=Z.distance)==null?void 0:Le[2])||0))/r:(qe=Z.distance)==null?void 0:qe[2]]}}),H={},V={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?V=z0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?V=$0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(V=xc);for(let[Z,X]of Object.entries(V.connected)){let re=[];for(let ee=0;eebe.part===X[ee]),ie=q.find(be=>be.part===X[ee+1]);ge&&ie&&re.push([ge.position,ie.position])}H[Z]=re}Ae.body[$]={...e.body[$],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.hand||e.hand.length!==Ae.hand.length)Ae.hand=JSON.parse(JSON.stringify(e.hand));else for(let $=0;$((r-1)*Ae.hand[$].box[Z]+V)/r),G=e.hand[$].boxRaw.map((V,Z)=>((r-1)*Ae.hand[$].boxRaw[Z]+V)/r);Ae.hand[$].keypoints.length!==e.hand[$].keypoints.length&&(Ae.hand[$].keypoints=e.hand[$].keypoints);let q=e.hand[$].keypoints&&e.hand[$].keypoints.length>0?e.hand[$].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[$].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[$].annotations).length!==Object.keys(e.hand[$].annotations).length)Ae.hand[$].annotations=e.hand[$].annotations,H=Ae.hand[$].annotations;else if(e.hand[$].annotations)for(let V of Object.keys(e.hand[$].annotations))H[V]=(c=(d=(u=e.hand[$])==null?void 0:u.annotations)==null?void 0:d[V])!=null&&c[0]?e.hand[$].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[$].annotations[V][X][ee]+re)/r)):null;Ae.hand[$]={...e.hand[$],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.face||e.face.length!==Ae.face.length)Ae.face=JSON.parse(JSON.stringify(e.face));else for(let $=0;$((r-1)*Ae.face[$].box[V]+H)/r),G=e.face[$].boxRaw.map((H,V)=>((r-1)*Ae.face[$].boxRaw[V]+H)/r),q=e.face[$].annotations;if(Object.keys(Ae.face[$].annotations).length!==Object.keys(e.face[$].annotations).length)Ae.face[$].annotations=e.face[$].annotations,q=Ae.face[$].annotations;else if(e.face[$].annotations)for(let H of Object.keys(e.face[$].annotations))q[H]=(m=(h=(p=e.face[$])==null?void 0:p.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[$].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[$].annotations[H][Z][re]+X)/r)):null;if(e.face[$].rotation){let H={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};H.matrix=(f=e.face[$].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[$].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[$].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[$].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((C=(S=e.face[$].rotation)==null?void 0:S.angle)==null?void 0:C.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[$].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=(F=e.face[$].rotation)==null?void 0:F.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((T=Ae.face[$].rotation)==null?void 0:T.gaze.bearing)||0)+(((D=e.face[$].rotation)==null?void 0:D.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[$].rotation)==null?void 0:O.gaze.strength)||0)+(((W=e.face[$].rotation)==null?void 0:W.gaze.strength)||0))/r},Ae.face[$]={...e.face[$],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[$]={...e.face[$],box:U,boxRaw:G,annotations:q}}if(!Ae.object||e.object.length!==Ae.object.length)Ae.object=JSON.parse(JSON.stringify(e.object));else for(let $=0;$((r-1)*Ae.object[$].box[H]+q)/r),G=e.object[$].boxRaw.map((q,H)=>((r-1)*Ae.object[$].boxRaw[H]+q)/r);Ae.object[$]={...e.object[$],box:U,boxRaw:G}}if(e.persons){let $=e.persons;if(!Ae.persons||$.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify($));else for(let U=0;U<$.length;U++)Ae.persons[U].box=$[U].box.map((G,q)=>((r-1)*Ae.persons[U].box[q]+G)/r)}e.gesture&&(Ae.gesture=e.gesture),Ae.width=e.width,Ae.height=e.height;let s=ae();return Sx=ne.perfadd?Sx+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:Sx}),Ae}var Aa;async function Tx(e){return!Aa||ne.initial?Aa=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",Aa.modelUrl),Aa}async function pT(e,t){var r;if(Aa||(Aa=await Tx(t)),!(Aa!=null&&Aa.executor)||!((r=Aa==null?void 0:Aa.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[Aa.inputs[0].shape?Aa.inputs[0].shape[1]:0,Aa.inputs[0].shape?Aa.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=Aa.execute(a.norm),a.squeeze=Oe(a.res,[0]),[a.bgRaw,a.fgRaw]=Na(a.squeeze,2),a.fg=Yh(a.fgRaw),a.mul=te(a.fg,ze.tf255),a.expand=Bt(a.mul,2),a.output=fe.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.output],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.output,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}var im={};vr(im,{distance:()=>Cx,find:()=>hxe,similarity:()=>cxe});function Cx(e,t,a={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let n=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-a)/(n-a);return Math.max(Math.min(s,1),0)};function cxe(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=Cx(e,t,a);return hT(n,a.order||2,a.min||0,a.max||1)}function hxe(e,t,a={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let n=Number.MAX_SAFE_INTEGER,r=-1;for(let i=0;ivc,validateModel:()=>hm});var mT=.005,un={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function Nx(e){for(let t of wx){let a=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),s=e.keypoints.findIndex(u=>u&&u.part===a[0]),i=e.keypoints.findIndex(u=>u&&u.part===a[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let u=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=u}}}function fT(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],a.pad=ur(e,un.padding),a.resize=fe.resizeBilinear(a.pad,[t,t]);let n=Ue(a.resize,"int32");return Object.keys(a).forEach(i=>J(a[i])),n}function yT(e,t){e.keypoints=e.keypoints.filter(n=>n==null?void 0:n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+un.padding[2][0]+un.padding[2][1])/t[0]-un.padding[2][0],n.position[1]*(t[1]+un.padding[1][0]+un.padding[1][1])/t[1]-un.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=js(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var jt,om=0,Rx=Number.MAX_SAFE_INTEGER,Fl={boxes:[],bodies:[],last:0};async function xT(e){var t;return ne.initial&&(jt=null),jt?e.debug&&K("cached model:",jt.modelUrl):(T0(["size"],e),jt=await $e(e.body.modelPath)),om=jt!=null&&jt.executor&&((t=jt==null?void 0:jt.inputs)!=null&&t[0].shape)?jt.inputs[0].shape[2]:0,om<64&&(om=256),B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!1),jt}function fxe(e,t,a){let n=e[0][0],r=[],s=0;for(let d=0;dt.body.minConfidence){let c=[n[d][1],n[d][0]];r.push({score:Math.round(100*s)/100,part:rm[d],positionRaw:c,position:[Math.round((a.shape[2]||0)*c[0]),Math.round((a.shape[1]||0)*c[1])]})}s=r.reduce((d,c)=>c.score>d?c.score:d,0);let i=[],o=js(r.map(d=>d.position),[a.shape[2],a.shape[1]]),l={};for(let[d,c]of Object.entries(sm)){let p=[];for(let h=0;hg.part===c[h]),f=r.find(g=>g.part===c[h+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&p.push([m.position,f.position])}l[d]=p}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return Nx(u),i.push(u),i}function gxe(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let p=0;p<17;p++){let h=s[3*p+2];if(h>t.body.minConfidence){let m=[s[3*p+1],s[3*p+0]];o.push({part:rm[p],score:Math.round(100*h)/100,positionRaw:m,position:[Math.round((a.shape[2]||0)*m[0]),Math.round((a.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],u=[Math.trunc(l[0]*(a.shape[2]||0)),Math.trunc(l[1]*(a.shape[1]||0)),Math.trunc(l[2]*(a.shape[2]||0)),Math.trunc(l[3]*(a.shape[1]||0))],d={};for(let[p,h]of Object.entries(sm)){let m=[];for(let f=0;fx.part===h[f]),y=o.find(x=>x.part===h[f+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&m.push([g.position,y.position])}d[p]=m}let c={id:r,score:i,box:u,boxRaw:l,keypoints:[...o],annotations:d};Nx(c),n.push(c)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function Ex(e,t){var r;if(!(jt!=null&&jt.executor)||!((r=jt==null?void 0:jt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(Fl.boxes.length=0),Rx++;let a=(t.body.skipTime||0)>ae()-Fl.last,n=Rx<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?Fl.bodies:new Promise(async s=>{let i={};Rx=0,i.input=gT(e,om),i.res=jt==null?void 0:jt.execute(i.input),Fl.last=ae();let o=await i.res.array();Fl.bodies=i.res.shape[2]===17?fxe(o,t,e):gxe(o,t,e);for(let l of Fl.bodies)yT(l,[e.shape[2]||1,e.shape[1]||1]),fT(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(Fl.bodies)})}var On,lm=[],bT=0,Mx=Number.MAX_SAFE_INTEGER,dm=0,um=2.5;async function vT(e){if(!On||ne.initial){On=await $e(e.object.modelPath);let t=On!=null&&On.executor?Object.values(On.modelSignature.inputs):void 0;dm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",On.modelUrl);return On}async function yxe(e,t,a){var u,d;let n=0,r=[],s=dm;for(let c of[1,2,4]){let p=c*13,h=Oe(e.find(A=>A.shape[1]===p**2&&(A.shape[2]||0)===ud.length)),m=await h.array(),f=Oe(e.find(A=>A.shape[1]===p**2&&(A.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let S=(.5+Math.trunc(A%p))/p,C=(.5+Math.trunc(A/p))/p,N=x[A].map($=>$*(p/c/s)),[M,F]=[S-um/c*N[0],C-um/c*N[1]],[E,T]=[S+um/c*N[2]-M,C+um/c*N[3]-F],D=[M,F,E,T];D=D.map($=>Math.max(0,Math.min($,1)));let O=[D[0]*t[0],D[1]*t[1],D[2]*t[0],D[3]*t[1]],W={id:n++,score:Math.round(100*w)/100,class:b+1,label:ud[b].label,box:O.map($=>Math.trunc($)),boxRaw:D};r.push(W)}}J([h,f,g,y])}let i=r.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),o=r.map(c=>c.score),l=[];if(i&&i.length>0){let c=await fe.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),J(c)}return r=r.filter((c,p)=>l.includes(p)).sort((c,p)=>p.score-c.score),r}async function Fx(e,t){if(!(On!=null&&On.executor))return[];let a=(t.object.skipTime||0)>ae()-bT,n=Mx<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&lm.length>0?(Mx++,lm):(Mx=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?lm:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[dm,dm],!1),o=ve(i,ze.tf255),l=Si(o,[0,3,1,2]),u;t.object.enabled&&(u=On.execute(l)),bT=ae();let d=await yxe(u,s,t);lm=d,J([i,o,l,...u]),r(d)}))}var bc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],xxe=bc.length,Ac=bc.reduce((e,t,a)=>(e[t]=a,e),{}),Axe=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],Wwe=Axe.map(([e,t])=>[Ac[e],Ac[t]]),kT=[["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"]];function IT(e){let t=e.reduce(({maxX:a,maxY:n,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(a,i),maxY:Math.max(n,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function ST(e,[t,a],[n,r]){let s=t/n,i=a/r,o=(u,d)=>({id:d,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/n,u.box[2]/r,u.box[3]/n],box:[Math.trunc(u.box[0]*i),Math.trunc(u.box[1]*s),Math.trunc(u.box[2]*i),Math.trunc(u.box[3]*s)],keypoints:u.keypoints.map(({score:c,part:p,position:h})=>({score:c,part:p,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/n,h.y/n]})),annotations:{}});return e.map((u,d)=>o(u,d))}var pm=class{constructor(t,a){he(this,"priorityQueue");he(this,"numberOfElements");he(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=a}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let a=2*t;if(aa?a:e}function TT(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function _x(e,t){return{x:e.x+t.x,y:e.y+t.y}}var dn,vxe=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],cm=1,xd=16,wxe=50**2;function CT(e,t,a,n,r,s,i=2){let o=y=>({y:s.get(y.y,y.x,e),x:s.get(y.y,y.x,s.shape[2]/2+e)}),l=(y,x,A)=>({y:Px(Math.round(y.y/xd),0,x-1),x:Px(Math.round(y.x/xd),0,A-1)}),[u,d]=n.shape,c=l(t.position,u,d),p=o(c),m=_x(t.position,p);for(let y=0;y[Ac[p],Ac[h]]),i=s.map(([,p])=>p),o=s.map(([p])=>p),l=t.shape[2],u=i.length,d=new Array(l),c=Dx(e.part,xd,a);d[e.part.id]={score:e.score,part:bc[e.part.id],position:c};for(let p=u-1;p>=0;--p){let h=i[p],m=o[p];d[h]&&!d[m]&&(d[m]=CT(p,d[h],m,t,a,r))}for(let p=0;pt){o=!1;break}if(!o)break}return o}function Sxe(e,t){let[a,n,r]=t.shape,s=new pm(a*n*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[n])==null?void 0:i.position;return s?TT(a,t,s.y,s.x)<=wxe:!1})}function Txe(e,t){return t.reduce((n,{position:r,score:s},i)=>(NT(e,r,i)||(n+=s),n),0)/t.length}function Cxe(e,t,a,n,r,s){let i=[],o=Sxe(s,t);for(;i.lengthh.score>s);let c=Txe(i,d),p=IT(d);c>s&&i.push({keypoints:d,box:p,score:Math.round(100*c)/100})}return i}async function Ox(e,t){if(!(dn!=null&&dn.executor))return[];let a=Pe(()=>{if(!dn.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[dn.inputs[0].shape[2],dn.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=dn.execute(o,vxe).map(d=>Oe(d,[0]));return u[1]=za(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)J(i);let r=Cxe(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return dn.inputs[0].shape?ST(r,[e.shape[1],e.shape[2]],[dn.inputs[0].shape[2],dn.inputs[0].shape[1]]):[]}async function RT(e){return!dn||ne.initial?dn=await $e(e.body.modelPath):e.debug&&K("cached model:",dn.modelUrl),dn}var gr,Nxe=["fgr","pha","r1o","r2o","r3o","r4o"],qt={},Lx=0;function FT(e){J([qt.r1i,qt.r2i,qt.r3i,qt.r4i,qt.downsample_ratio]),qt.r1i=Ve(0),qt.r2i=Ve(0),qt.r3i=Ve(0),qt.r4i=Ve(0),Lx=e.segmentation.ratio||.5,qt.downsample_ratio=Ve(Lx)}async function Wx(e){return!gr||ne.initial?gr=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",gr.modelUrl),FT(e),gr}var MT=e=>Pe(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function zx(e,t){let a=e?MT(e):lr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?MT(t):lr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function Rxe(e){return Pe(()=>{let t={};return t.unstack=Na(e,-1),t.concat=lt(t.unstack,1),t.split=Sa(t.concat,4,1),t.stack=lt(t.split,2),t.squeeze=Oe(t.stack,[0]),t.expand=Bt(t.squeeze,-1),t.add=we(t.expand,1),t.mul=te(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=Qr(t.cast,[1,1,3]),t.alpha=lr([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),lt([t.tile,t.alpha],-1)})}async function $T(e,t){if(gr||(gr=await Wx(t)),!(gr!=null&&gr.executor))return null;qt.src=ve(e,255),Lx!==t.segmentation.ratio&&FT(t);let[a,n,r,s,i,o]=await gr.executeAsync(qt,Nxe),l;switch(t.segmentation.mode||"default"){case"default":l=zx(a,n);break;case"alpha":l=zx(null,n);break;case"foreground":l=zx(a,null);break;case"state":l=Rxe(r);break;default:l=Ve(0)}return J([qt.src,a,n,qt.r1i,qt.r2i,qt.r3i,qt.r4i]),[qt.r1i,qt.r2i,qt.r3i,qt.r4i]=[r,s,i,o],l}var ba;async function Bx(e){return!ba||ne.initial?ba=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function PT(e,t){var r;if(ba||(ba=await Bx(t)),!(ba!=null&&ba.executor)||!((r=ba==null?void 0:ba.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[ba.inputs[0].shape?ba.inputs[0].shape[1]:0,ba.inputs[0].shape?ba.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=ba.execute(a.norm),a.squeeze=Oe(a.res,[0]),a.alpha=fe.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=te(a.alpha,ze.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.mul],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.mul,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}function hm(e,t,a){var u,d;if(!t||!((u=e==null?void 0:e.config)!=null&&u.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],i=[],o=t.modelUrl,l=t.executor;if((d=l==null?void 0:l.graph)!=null&&d.nodes)for(let c of Object.values(l.graph.nodes)){let p=c.op.toLowerCase();s.includes(p)||s.push(p)}else!l&&e.config.debug&&K("model not loaded",a);for(let c of s)!n.includes(c)&&!r.includes(c)&&!e.env.kernels.includes(c)&&!e.env.kernels.includes(c.replace("_",""))&&!e.env.kernels.includes(c.replace("native",""))&&!e.env.kernels.includes(c.replace("v2",""))&&i.push(c);return e.config.debug&&i.length>0&&K("model validation failed:",a,i),i.length>0?{name:a,missing:i,ops:s,url:o}:null}var vc=class{constructor(t){he(this,"instance");he(this,"models",{});this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ya))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ya).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ya)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var n,r,s,i,o,l,u,d,c,p,h,m,f,g,y,x,A,b,w,S,C,N,M,F,E,T,D;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?EI(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?tS(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?sS(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?YI(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?jI(this.instance.config):null,a.iris=this.instance.config.face.enabled&&((o=this.instance.config.face.iris)!=null&&o.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?_I(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?BI(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((d=this.instance.config.face.gear)!=null&&d.enabled)&&!this.models.gear?uS(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?hS(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((p=this.instance.config.face.ssrnet)!=null&&p.enabled)&&!this.models.ssrnetgender?yS(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?wS(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?CS(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?pI(this.instance.config):null,a.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?dI(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?yI(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((y=this.instance.config.body.modelPath)!=null&&y.includes("movenet"))?xT(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((x=this.instance.config.body.modelPath)!=null&&x.includes("posenet"))?RT(this.instance.config):null,a.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(A=this.instance.config.hand.detector)==null?void 0:A.modelPath)!=null&&b.includes("handtrack"))?oT(this.instance.config):null,a.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((S=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)!=null&&S.includes("handtrack"))?lT(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((N=(C=this.instance.config.hand.detector)==null?void 0:C.modelPath)!=null&&N.includes("handdetect"))&&(a.handdetect=tT(this.instance.config),a.handskeleton=aT(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?mI(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((F=this.instance.config.object.modelPath)!=null&&F.includes("nanodet"))?vT(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?Bx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((T=this.instance.config.segmentation.modelPath)!=null&&T.includes("meet"))?Tx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((D=this.instance.config.segmentation.modelPath)!=null&&D.includes("rvm"))?Wx(this.instance.config):null;for(let[O,W]of Object.entries(a))W!=null&&W.then&&W.then($=>this.models[O]=$);await Promise.all(Object.values(a))}list(){let t=Object.keys(this.models).map(a=>{var n;return{name:a,loaded:this.models[a]!==null,size:0,url:this.models[a]?(n=this.models[a])==null?void 0:n.modelUrl:null}});for(let a of t){let n=Object.keys(ya).find(r=>r.startsWith(a.name));n&&(a.size=ya[n].sizeLoadedWeights,a.url=ya[n].url)}return t}loaded(){return this.list().filter(n=>n.loaded).map(n=>n.name)}validate(){let t=[];for(let a of Object.keys(this.models)){let n=this.models[a];if(!n)continue;let r=hm(this.instance,n,a);r&&t.push(r)}return t}};function OT(e,t,a,n,r){var o,l,u,d,c,p;let s=0,i=[];for(let h of e){let m={id:s++,face:h,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)h.box[0]>b.box[0]&&h.box[0]b.box[1]&&h.box[1]+h.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};y(m.face.box),y((d=m.body)==null?void 0:d.box),y((c=m.hands.left)==null?void 0:c.box),y((p=m.hands.right)==null?void 0:p.box);let x=Math.min(...f),A=Math.min(...g);m.box=[x,A,Math.max(...f)-x,Math.max(...g)-A],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),i.push(m)}return i}var mm=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var py=0;function zge(e,t,a){let n=Et(Ft,a);if(!t||!e)return;let r=vn(e);if(r){r.lineJoin="round",r.font=n.font;for(let s=0;smy,kpt:()=>hy});var hy=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],my={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var kn,yl=224,f9,Bge=5,N0=[8,16,32,32,32];function Vge(){let e=[],t=0;for(;ta.x)),y:Bt(e.map(a=>a.y))}}async function g9(e){if(ne.initial&&(kn=null),!kn&&e.body.detector&&e.body.detector.modelPath){kn=await $e(e.body.detector.modelPath);let t=kn!=null&&kn.executor?Object.values(kn.modelSignature.inputs):void 0;yl=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&kn&&K("cached model:",kn.modelUrl);return Vge(),kn}var m9=[5,5];function Uge(e,t){return De(()=>{let a=Sa(e,12,1),n=Oe(a[0]),r=Oe(a[1]),s=Oe(a[2]),i=Oe(a[3]);n=we(ve(n,yl),t.x),r=we(ve(r,yl),t.y),s=te(ve(s,yl),m9[0]),i=te(ve(i,yl),m9[1]);let o=xe(n,ve(s,2)),l=xe(r,ve(i,2)),u=we(o,s),p=we(l,i);return ca([o,l,u,p],1)})}async function Gge(e,t,a,n){var u,p;let r=[],s={};s.boxes=Uge(e,f9),s.scores=za(t),s.nms=await fe.nonMaxSuppressionAsync(s.boxes,s.scores,1,((u=a.body.detector)==null?void 0:u.minConfidence)||.1,((p=a.body.detector)==null?void 0:p.iouThreshold)||.1);let i=await s.nms.data(),o=await s.scores.data(),l=await s.boxes.array();for(let c of Array.from(i)){let d=o[c],h=l[c],m=[Math.round(h[0]*n[0]),Math.round(h[1]*n[1]),Math.round(h[2]*n[0]),Math.round(h[3]*n[1])],f={score:d,boxRaw:h,box:m};r.push(f)}return Object.keys(s).forEach(c=>J(s[c])),r}async function y9(e,t,a){let n={};n.res=kn==null?void 0:kn.execute(e,["Identity"]),n.logitsRaw=Fe(n.res,[0,0,0],[1,-1,1]),n.boxesRaw=Fe(n.res,[0,0,1],[1,-1,-1]),n.logits=Oe(n.logitsRaw),n.boxes=Oe(n.boxesRaw);let r=await Gge(n.boxes,n.logits,t,a);return Object.keys(n).forEach(s=>J(n[s])),r}function vs(e,t=[1,1]){let a=[e.map(o=>o[0]),e.map(o=>o[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[n[0],n[1],r[0]-n[0],r[1]-n[1]],i=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:i}}function x9(e,t=[1,1]){let a=[e.map(u=>u[0]),e.map(u=>u[1])],n=[Math.min(...a[0]),Math.min(...a[1])],r=[Math.max(...a[0]),Math.max(...a[1])],s=[(n[0]+r[0])/2,(n[1]+r[1])/2],i=Math.max(s[0]-n[0],s[1]-n[1],-s[0]+r[0],-s[1]+r[1]),o=[Math.trunc(s[0]-i),Math.trunc(s[1]-i),Math.trunc(2*i),Math.trunc(2*i)],l=[o[0]/t[0],o[1]/t[1],o[2]/t[0],o[3]/t[1]];return{box:o,boxRaw:l}}function R0(e,t){let a=[e[2]*t,e[3]*t];return[e[0]-(a[0]-e[2])/2,e[1]-(a[1]-e[3])/2,a[0],a[1]]}var Ua,gy=256,fy=Number.MAX_SAFE_INTEGER,Hge={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},M0=[],ws=[[0,0],[0,0],[0,0],[0,0]],A9=0,b9=e=>1-1/(1+Math.exp(e)),w9=e=>g9(e);async function k9(e){if(ne.initial&&(Ua=null),Ua)e.debug&&K("cached model:",Ua.modelUrl);else{Ua=await $e(e.body.modelPath);let t=Ua!=null&&Ua.executor?Object.values(Ua.modelSignature.inputs):void 0;gy=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Ua}function v9(e,t,a){var s,i;let n={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((i=e==null?void 0:e.shape)!=null&&i[2]))return e;let r;if(a&&(n.cropped=fe.cropAndResize(e,[a],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let o=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];ws=[[0,0],o,l,[0,0]],n.pad=ir(n.cropped||e,ws),n.resize=fe.resizeBilinear(n.pad,[t,t]),r=ve(n.resize,ze.tf255)}else e.shape[1]!==t?(n.resize=fe.resizeBilinear(n.cropped||e,[t,t]),r=ve(n.resize,ze.tf255)):r=ve(n.cropped||e,ze.tf255);return Object.keys(n).forEach(o=>J(n[o])),r}function jge(e,t,a){for(let n of e)n.position=[Math.trunc(n.position[0]*(t[0]+ws[2][0]+ws[2][1])/t[0]-ws[2][0]),Math.trunc(n.position[1]*(t[1]+ws[1][0]+ws[1][1])/t[1]-ws[1][0]),n.position[2]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1],2*n.position[2]/(t[0]+t[1])];if(a){let n=a[2]-a[0],r=a[3]-a[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+a[1],s.positionRaw[1]/n+a[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function qge(e){let t=e.find(o=>o.part==="leftPalm"),a=e.find(o=>o.part==="leftWrist"),n=e.find(o=>o.part==="leftIndex");t.position[2]=((a.position[2]||0)+(n.position[2]||0))/2;let r=e.find(o=>o.part==="rightPalm"),s=e.find(o=>o.part==="rightWrist"),i=e.find(o=>o.part==="rightIndex");r.position[2]=((s.position[2]||0)+(i.position[2]||0))/2}async function Xge(e,t,a){if(!(Ua!=null&&Ua.executor))return null;let n={};[n.ld,n.segmentation,n.heatmap,n.world,n.poseflag]=Ua==null?void 0:Ua.execute(e,Hge.landmarks);let r=(await n.poseflag.data())[0],s=await n.ld.data(),i=await n.world.data();Object.keys(n).forEach(m=>J(n[m]));let o=[],l=5;for(let m=0;mm.position),c=vs(p,[a[0],a[1]]),d={};for(let[m,f]of Object.entries(my)){let g=[];for(let y=0;yb.part===f[y]),A=u.find(b=>b.part===f[y+1]);x&&A&&g.push([x.position,A.position])}d[m]=g}return{id:0,score:Math.trunc(100*r)/100,box:c.box,boxRaw:c.boxRaw,keypoints:u,annotations:d}}async function yy(e,t){var s,i,o;let a=[e.shape[2]||0,e.shape[1]||0],n=(t.body.skipTime||0)>ae()-A9,r=fy<(t.body.skipFrames||0);if(t.skipAllowed&&n&&r&&M0!==null)fy++;else{let l=[];if((i=(s=t.body)==null?void 0:s.detector)!=null&&i.enabled){let u=v9(e,224);l=await y9(u,t,a),J(u)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let u=0;uJ(n[u])),r}async function by(e,t){if(!(Ga!=null&&Ga.executor))return[];let a=(t.object.skipTime||0)>ae()-S9,n=Ay<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&xy.length>0?(Ay++,xy):(Ay=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[xl,xl]),o=t.object.enabled?Ga==null?void 0:Ga.execute(i,["tower_0/detections"]):null;S9=ae(),J(i);let l=await Kge(o,s,t);xy=l,r(l)}))}var $0={};yr($0,{connected:()=>wy,kpt:()=>vy});var vy=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],wy={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Mt,N9=0,Ma={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},ky=Number.MAX_SAFE_INTEGER;async function R9(e){return ne.initial&&(Mt=null),Mt?e.debug&&K("cached model:",Mt.modelUrl):Mt=await $e(e.body.modelPath),Mt}async function Yge(e,t){let[a,n]=e.shape,r=Q(e,[n*a]),s=fa(r,0),i=(await s.data())[0];if(i>t){let o=rr(r,0),l=Uu(o,a),u=(await l.data())[0],p=ve(o,a),c=(await p.data())[0];return J([r,s,o,l,p]),[u,c,i]}return J([r,s]),[0,0,i]}async function Iy(e,t){if(!(Mt!=null&&Mt.executor)||!(Mt!=null&&Mt.inputs[0].shape))return[];let a=(t.body.skipTime||0)>ae()-N9,n=ky<(t.body.skipFrames||0);return t.skipAllowed&&a&&n&&Object.keys(Ma.keypoints).length>0?(ky++,[Ma]):(ky=0,new Promise(async r=>{let s=De(()=>{var m,f;let c=fe.resizeBilinear(e,[((m=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:m[2])||0,((f=Mt==null?void 0:Mt.inputs[0].shape)==null?void 0:f[1])||0],!1),d=te(c,ze.tf2);return xe(d,ze.tf1)}),i;if(t.body.enabled&&(i=Mt==null?void 0:Mt.execute(s)),N9=ae(),J(s),i){Ma.keypoints.length=0;let c=Oe(i);J(i);let d=Na(c,2);J(c);for(let h=0;h(t.body.minConfidence||0)&&Ma.keypoints.push({score:Math.round(100*g)/100,part:vy[h],positionRaw:[m/Mt.inputs[0].shape[2],f/Mt.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/Mt.inputs[0].shape[2]),Math.round(e.shape[1]*f/Mt.inputs[0].shape[1])]})}d.forEach(h=>J(h))}Ma.score=Ma.keypoints.reduce((c,d)=>d.score>c?d.score:c,0);let o=Ma.keypoints.map(c=>c.position[0]),l=Ma.keypoints.map(c=>c.position[1]);Ma.box=[Math.min(...o),Math.min(...l),Math.max(...o)-Math.min(...o),Math.max(...l)-Math.min(...l)];let u=Ma.keypoints.map(c=>c.positionRaw[0]),p=Ma.keypoints.map(c=>c.positionRaw[1]);Ma.boxRaw=[Math.min(...u),Math.min(...p),Math.max(...u)-Math.min(...u),Math.max(...p)-Math.min(...p)];for(let[c,d]of Object.entries(wy)){let h=[];for(let m=0;my.part===d[m]),g=Ma.keypoints.find(y=>y.part===d[m+1]);f&&g&&f.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&h.push([f.position,g.position])}Ma.annotations[c]=h}r([Ma])}))}var rd=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],P0=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],_0=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],F0=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],P9=(e,t,a)=>{let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(i=>[(i[0]+a[0])*t[0],(i[1]+a[1])*t[1]]);return{startPoint:n,endPoint:r,landmarks:s,confidence:e.confidence}},Sy=(e,t,a)=>{let n=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/n,e.startPoint[0]/r,e.endPoint[1]/n,e.endPoint[0]/r],i=fe.cropAndResize(t,[s],[0],a),o=ve(i,ze.tf255);return J(i),o},D0=(e,t)=>{let a=P0(e),n=rd(e),r=[t*n[0]/2,t*n[1]/2];return{startPoint:[a[0]-r[0],a[1]-r[1]],endPoint:[a[0]+r[0],a[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:n}},O0=e=>{let t=P0(e),a=rd(e),n=Math.max(...a)/2;return{startPoint:[Math.round(t[0]-n),Math.round(t[1]-n)],endPoint:[Math.round(t[0]+n),Math.round(t[1]+n)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(a[0]),Math.round(a[1])]}},_9=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return{startPoint:[Math.min(...t),Math.min(...a)],endPoint:[Math.max(...t),Math.max(...a)],landmarks:e}},Cy=[[1,0,0],[0,1,0],[0,0,1]],Zge=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),Jge=(e,t)=>Zge(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var M9=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],Al=(e,t)=>{let a=0;for(let n=0;n{let a=[];for(let n=0;n{let a=[],n=e.length;for(let r=0;r{let a=Math.cos(e),n=Math.sin(e),r=[[a,-n,0],[n,a,0],[0,0,1]],s=M9(t[0],t[1]),i=$9(s,r),o=M9(-t[0],-t[1]);return $9(i,o)},e3e=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],a=[e[0][2],e[1][2]],n=[-Al(t[0],a),-Al(t[1],a)];return[t[0].concat(n[0]),t[1].concat(n[1]),[0,0,1]]},t3e=(e,t)=>[Al(e,t[0]),Al(e,t[1])];function D9(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},a=[];for(let n=0;n[s[0]/r*(h[0]-r/2),s[1]/r*(h[1]-r/2),h[2]||0]),o=a&&a!==0&&Math.abs(a)>.2,l=o?F9(a,[0,0]):Cy,u=o?i.map(h=>[...t3e(h,l),h[2]]):i,p=o?e3e(n):Cy,c=P0(t),d=[Al(c,p[0]),Al(c,p[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2]||0)])}function z9(e,t,a,n){let r=t.landmarks.length>=ly.count?ly.symmetryLine:hl.symmetryLine,s=0,i=Cy,o;if(e&&ne.kernels.includes("rotatewithoffset"))if(s=Jge(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let u=P0(t),p=[u[0]/a.shape[2],u[1]/a.shape[1]],c=fe.rotateWithOffset(a,s,0,[p[0],p[1]]);i=F9(-s,u),o=Sy(t,c,[n,n]),J(c)}else o=Sy(t,a,[n,n]);else o=Sy(t,a,[n,n]);return[s,i,o]}var a3e=e=>{let t=e.map(n=>n[0]),a=e.map(n=>n[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...a)+(Math.max(...a)-Math.min(...a))/2]},L9=(e,t)=>{let a=a3e(e),n=rd(t);return{startPoint:[a[0]-n[0]/2,a[1]-n[1]/2],endPoint:[a[0]+n[0]/2,a[1]+n[1]/2]}};var W9=6,Vn,z0=null,ks=0,sd=null,B9=()=>ks;async function V9(e){var t;return ne.initial&&(Vn=null),Vn?e.debug&&K("cached model:",Vn.modelUrl):Vn=await $e((t=e.face.detector)==null?void 0:t.modelPath),ks=Vn.executor&&Vn.inputs[0].shape?Vn.inputs[0].shape[2]:256,sd=Ge(ks,"int32"),z0=Zn(D9(ks)),Vn}function n3e(e){if(!z0||!sd)return yn([0,0]);let t={};t.boxStarts=Fe(e,[0,1],[-1,2]),t.centers=we(t.boxStarts,z0),t.boxSizes=Fe(e,[0,3],[-1,2]),t.boxSizesNormalized=ve(t.boxSizes,sd),t.centersNormalized=ve(t.centers,sd),t.halfBoxSize=ve(t.boxSizesNormalized,ze.tf2),t.starts=xe(t.centersNormalized,t.halfBoxSize),t.ends=we(t.centersNormalized,t.halfBoxSize),t.startNormalized=te(t.starts,sd),t.endNormalized=te(t.ends,sd);let a=Vu([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(n=>J(t[n])),a}async function U9(e,t){var o,l,u,p,c,d,h;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let a={};a.resized=fe.resizeBilinear(e,[ks,ks]),a.div=ve(a.resized,ze.tf127),a.normalized=xe(a.div,ze.tf1);let n=Vn==null?void 0:Vn.execute(a.normalized);if(Array.isArray(n)&&n.length>2){let m=n.sort((f,g)=>f.size-g.size);a.concat384=lt([m[0],m[2]],2),a.concat512=lt([m[1],m[3]],2),a.concat=lt([a.concat512,a.concat384],1),a.batch=Oe(a.concat,[0])}else Array.isArray(n)?a.batch=Oe(n[0]):a.batch=Oe(n);J(n),a.boxes=n3e(a.batch),a.logits=Fe(a.batch,[0,0],[-1,1]),a.sigmoid=za(a.logits),a.scores=Oe(a.sigmoid),a.nms=await fe.nonMaxSuppressionAsync(a.boxes,a.scores,((o=t.face.detector)==null?void 0:o.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((u=t.face.detector)==null?void 0:u.minConfidence)||0);let r=await a.nms.array(),s=[],i=await a.scores.data();for(let m=0;m(((p=t.face.detector)==null?void 0:p.minConfidence)||0)){let g={};g.bbox=Fe(a.boxes,[r[m],0],[1,-1]),g.slice=Fe(a.batch,[r[m],W9-1],[1,-1]),g.squeeze=Oe(g.slice),g.landmarks=Q(g.squeeze,[W9,-1]);let y=await g.bbox.data(),x={startPoint:[y[0],y[1]],endPoint:[y[2],y[3]],landmarks:await g.landmarks.array(),confidence:f};g.anchor=Fe(z0,[r[m],0],[1,2]);let A=await g.anchor.data(),b=P9(x,[(e.shape[2]||0)/ks,(e.shape[1]||0)/ks],A),w=D0(b,((c=t.face.detector)==null?void 0:c.scale)||1.4),I=O0(w);I.size[0]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&I.size[1]>(((h=t.face.detector)==null?void 0:h.minSize)||0)&&s.push(I),Object.keys(g).forEach(T=>J(g[T]))}}return Object.keys(a).forEach(m=>J(a[m])),s}var nn,Is=0,Ny=$n.leftEyeLower0,Ry=$n.rightEyeLower0,id={leftBounds:[Ny[0],Ny[Ny.length-1]],rightBounds:[Ry[0],Ry[Ry.length-1]]},od={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function X9(e){var t,a;return ne.initial&&(nn=null),nn?e.debug&&K("cached model:",nn.modelUrl):nn=await $e((t=e.face.iris)==null?void 0:t.modelPath),Is=nn!=null&&nn.executor&&((a=nn.inputs)!=null&&a[0].shape)?nn.inputs[0].shape[2]:0,Is===-1&&(Is=64),nn}function L0(e,t,a,n){for(let r=0;r{let t=e[id.leftBounds[0]][2],a=e[id.rightBounds[0]][2];return t-a},H9=(e,t,a,n,r,s=!1,i=2.3)=>{let o=O0(D0(_9([e[a],e[n]]),i)),l=rd(o),u=fe.cropAndResize(t,[[o.startPoint[1]/r,o.startPoint[0]/r,o.endPoint[1]/r,o.endPoint[0]/r]],[0],[Is,Is]);if(s&&ne.kernels.includes("flipleftright")){let p=fe.flipLeftRight(u);J(u),u=p}return{box:o,boxSize:l,crop:u}},j9=(e,t,a,n=!1)=>{let r=[];for(let s=0;s{let n=e[$n[`${a}EyeUpper0`][od.upperCenter]][2],r=e[$n[`${a}EyeLower0`][od.lowerCenter]][2],s=(n+r)/2;return t.map((i,o)=>{let l=s;return o===2?l=n:o===4&&(l=r),[i[0],i[1],l]})};async function K9(e,t,a,n){var T,N;if(!(nn!=null&&nn.executor))return e;let{box:r,boxSize:s,crop:i}=H9(e,t,id.leftBounds[0],id.leftBounds[1],a,!0,((T=n.face.iris)==null?void 0:T.scale)||2.3),{box:o,boxSize:l,crop:u}=H9(e,t,id.rightBounds[0],id.rightBounds[1],a,!0,((N=n.face.iris)==null?void 0:N.scale)||2.3),p=lt([i,u]);J(i),J(u);let c=nn.execute(p);J(p);let d=await c.data();J(c);let h=d.slice(0,od.numCoordinates*3),{rawCoords:m,iris:f}=j9(h,r,s,!0),g=d.slice(od.numCoordinates*3),{rawCoords:y,iris:x}=j9(g,o,l,!1),A=r3e(e);Math.abs(A)<30?(L0(e,m,"left",null),L0(e,y,"right",null)):A<1?L0(e,m,"left",["EyeUpper0","EyeLower0"]):L0(e,y,"right",["EyeUpper0","EyeLower0"]);let b=q9(e,f,"left"),w=q9(e,x,"right");return e.concat(b).concat(w)}async function Z9(e,t){var s,i,o,l,u,p,c,d,h,m;let a={lips:await((i=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:i.data()),irisL:await((l=(o=t.filter(f=>f.size===10))==null?void 0:o[0])==null?void 0:l.data()),eyeL:await((p=(u=t.filter(f=>f.size===142))==null?void 0:u[0])==null?void 0:p.data()),irisR:await((d=(c=t.filter(f=>f.size===10))==null?void 0:c[1])==null?void 0:d.data()),eyeR:await((m=(h=t.filter(f=>f.size===142))==null?void 0:h[1])==null?void 0:m.data())};for(let f of Object.values(a))if(!f)return e;let n=fl.reduce((f,g)=>f+=e[g][2],0)/fl.length;for(let f=0;ff+=e[g][2],0)/gl.length;for(let f=0;fae()-dr.timestamp,n=dr.skipped<(((u=t.face.detector)==null?void 0:u.skipFrames)||0);!t.skipAllowed||!a||!n||dr.boxes.length===0?(dr.boxes=await U9(e,t),dr.timestamp=ae(),dr.skipped=0):dr.skipped++;let r=[],s=[],i=0,o=dc;for(let x=0;x[T[0]/(e.shape[2]||0),T[1]/(e.shape[1]||0),(T[2]||0)/o]);for(let T of Object.keys(hl))I.annotations[T]=[I.mesh[hl[T]]]}else if(!Ct)t.debug&&K("face mesh detection requested, but model is not loaded");else{if((h=t.face.attention)!=null&&h.enabled&&!ne.kernels.includes("atan2"))return t.face.attention.enabled=!1,J(I.tensor),r;let T=Ct.execute(I.tensor),M=await T.find($=>$.shape[$.shape.length-1]===1).data();if(I.faceScore=Math.round(100*M[0])/100,I.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(A.confidence=I.faceScore,t.face.mesh.keepInvalid){I.box=_0(A,e),I.boxRaw=F0(A,e),I.size=A.size,I.score=I.boxScore,I.mesh=A.landmarks,I.meshRaw=I.mesh.map($=>[$[0]/(e.shape[2]||1),$[1]/(e.shape[1]||1),($[2]||0)/o]);for(let $ of Object.keys(hl))I.annotations[$]=[I.mesh[hl[$]]]}}else{let $=T.find(O=>O.shape[O.shape.length-1]===1404),E=Q($,[-1,3]),S=await E.array();J(E),(f=t.face.attention)!=null&&f.enabled?S=await Z9(S,T):(g=t.face.iris)!=null&&g.enabled&&(S=await K9(S,I.tensor,dc,t)),I.mesh=O9(S,A,b,w,dc),I.meshRaw=I.mesh.map(O=>[O[0]/(e.shape[2]||0),O[1]/(e.shape[1]||0),(O[2]||0)/o]);for(let O of Object.keys($n))I.annotations[O]=$n[O].map(W=>I.mesh[W]);I.score=I.faceScore;let _={...L9(I.mesh,A),confidence:A.confidence,landmarks:A.landmarks,size:A.size};I.box=_0(_,e),I.boxRaw=F0(_,e),I.size=_.size,s.push(_)}J(T)}I.score>(((y=t.face.detector)==null?void 0:y.minConfidence)||1)?r.push(I):J(I.tensor)}return dr.boxes=s,r}async function Q9(e){var t,a,n,r,s,i;return ne.initial&&(Ct=null),(t=e.face.attention)!=null&&t.enabled&&(Ct!=null&&Ct.signature)&&Object.keys(((a=Ct==null?void 0:Ct.signature)==null?void 0:a.outputs)||{}).length<6&&(Ct=null),Ct?e.debug&&K("cached model:",Ct.modelUrl):(n=e.face.attention)!=null&&n.enabled?Ct=await $e(e.face.attention.modelPath):Ct=await $e((r=e.face.mesh)==null?void 0:r.modelPath),dc=Ct.executor&&((s=Ct==null?void 0:Ct.inputs)!=null&&s[0].shape)?(i=Ct==null?void 0:Ct.inputs)==null?void 0:i[0].shape[2]:256,Ct}var eI=ml,tI=lc;var $y=[],ra,W0=[],aI=0,nI=0,My=Number.MAX_SAFE_INTEGER,Py=!1;async function rI(e){var t,a,n;return ne.initial&&(ra=null),ra?e.debug&&K("cached model:",ra.modelUrl):(ra=await $e((t=e.face.emotion)==null?void 0:t.modelPath),Py=((n=(a=ra==null?void 0:ra.inputs)==null?void 0:a[0].shape)==null?void 0:n[3])===3,Py?$y=["angry","disgust","fear","happy","neutral","sad","surprise"]:$y=["angry","disgust","fear","happy","sad","surprise","neutral"]),ra}async function _y(e,t,a,n){var i,o;if(!ra)return[];let r=My<(((i=t.face.emotion)==null?void 0:i.skipFrames)||0),s=(((o=t.face.emotion)==null?void 0:o.skipTime)||0)>ae()-nI;return t.skipAllowed&&s&&r&&aI===n&&W0[a]&&W0[a].length>0?(My++,W0[a]):(My=0,new Promise(async l=>{var p,c,d;let u=[];if((p=t.face.emotion)!=null&&p.enabled){let h={},m=ra!=null&&ra.inputs[0].shape?ra.inputs[0].shape[2]:0;if(((c=t.face.emotion)==null?void 0:c.crop)>0){let g=(d=t.face.emotion)==null?void 0:d.crop,y=[[g,g,1-g,1-g]];h.resize=fe.cropAndResize(e,y,[0],[m,m])}else h.resize=fe.resizeBilinear(e,[m,m],!1);Py?(h.mul=te(h.resize,255),h.normalize=xe(h.mul,[103.939,116.779,123.68]),h.emotion=ra==null?void 0:ra.execute(h.normalize)):(h.channels=te(h.resize,ze.rgb),h.grayscale=ot(h.channels,3,!0),h.grayscaleSub=xe(h.grayscale,ze.tf05),h.grayscaleMul=te(h.grayscaleSub,ze.tf2),h.emotion=ra==null?void 0:ra.execute(h.grayscaleMul)),nI=ae();let f=await h.emotion.data();for(let g=0;g(t.face.emotion.minConfidence||0)&&u.push({score:Math.min(.99,Math.trunc(100*f[g])/100),emotion:$y[g]});u.sort((g,y)=>y.score-g.score),Object.keys(h).forEach(g=>J(h[g]))}W0[a]=u,aI=n,l(u)}))}var sa,Ss=[],iI=0,oI=0,Fy=Number.MAX_SAFE_INTEGER;async function lI(e){var t;return ne.initial&&(sa=null),sa?e.debug&&K("cached model:",sa.modelUrl):sa=await $e((t=e.face.description)==null?void 0:t.modelPath),sa}function i3e(e,t){var s,i;let a=e.image||e.tensor||e;if(!(sa!=null&&sa.inputs[0].shape))return a;let n;if(((s=t.face.description)==null?void 0:s.crop)>0){let o=(i=t.face.description)==null?void 0:i.crop,l=[[o,o,1-o,1-o]];n=fe.cropAndResize(a,l,[0],[sa.inputs[0].shape[2],sa.inputs[0].shape[1]])}else n=fe.resizeBilinear(a,[sa.inputs[0].shape[2],sa.inputs[0].shape[1]],!1);let r=te(n,ze.tf255);return J(n),r}async function Dy(e,t,a,n){var o,l,u,p;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(sa!=null&&sa.executor))return r;let s=Fy<(((o=t.face.description)==null?void 0:o.skipFrames)||0),i=(((l=t.face.description)==null?void 0:l.skipTime)||0)>ae()-iI;return t.skipAllowed&&s&&i&&oI===n&&((u=Ss==null?void 0:Ss[a])==null?void 0:u.age)>0&&((p=Ss==null?void 0:Ss[a])==null?void 0:p.genderScore)>0?(Fy++,Ss[a]):(Fy=0,new Promise(async c=>{var d;if((d=t.face.description)!=null&&d.enabled){let h=i3e(e,t),m=sa==null?void 0:sa.execute(h);iI=ae(),J(h);let g=await m.find(N=>N.shape[1]===1).data(),y=Math.trunc(200*Math.abs(g[0]-.5))/100;y>(t.face.description.minConfidence||0)&&(r.gender=g[0]<=.5?"female":"male",r.genderScore=Math.min(.99,y));let x=rr(m.find(N=>N.shape[1]===100),1),A=(await x.data())[0];J(x);let w=await m.find(N=>N.shape[1]===100).data();r.age=Math.round(w[A-1]>w[A+1]?10*A-100*w[A-1]:10*A+100*w[A+1])/10,(Number.isNaN(g[0])||Number.isNaN(w[0]))&&K("faceres error:",{model:sa,result:m});let I=m.find(N=>N.shape[1]===1024),T=I?await I.data():[];r.descriptor=Array.from(T),m.forEach(N=>J(N))}Ss[a]=r,oI=n,c(r)}))}var ld=.1,Oy=.5;function o3e(e,t,a){let n=!1,r=a.length-1;for(let s=0;st!=a[r].y>t&&e<(a[r].x-a[s].x)*(t-a[s].y)/(a[r].y-a[s].y)+a[s].x&&(n=!n);return n}async function dI(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,a=e.tensor.shape[1]||0,n=await e.tensor.buffer(),r=[];for(let i of $n.silhouette)r.push({x:(e.mesh[i][0]-e.box[0])/e.box[2],y:(e.mesh[i][1]-e.box[1])/e.box[3]});ld&&ld>0&&(r=r.map(i=>({x:i.x>.5?i.x+ld:i.x-ld,y:i.y>.5?i.y+ld:i.y-ld})));for(let i=0;iae()-cI,s=zy<(((o=t.face.antispoof)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&pI===n&&B0[a]?(zy++,B0[a]):(zy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[2]:0,ia!=null&&ia.inputs[0].shape?ia.inputs[0].shape[1]:0],!1),p=ia==null?void 0:ia.execute(u),c=(await p.data())[0];B0[a]=Math.round(100*c)/100,pI=n,cI=ae(),J([u,p]),l(B0[a])}))}var oa,V0=[],Wy=Number.MAX_SAFE_INTEGER,fI=0,gI=0;async function yI(e){var t;return ne.initial&&(oa=null),oa?e.debug&&K("cached model:",oa.modelUrl):oa=await $e((t=e.face.liveness)==null?void 0:t.modelPath),oa}async function By(e,t,a,n){var i,o;if(!(oa!=null&&oa.executor))return 0;let r=(((i=t.face.liveness)==null?void 0:i.skipTime)||0)>ae()-gI,s=Wy<(((o=t.face.liveness)==null?void 0:o.skipFrames)||0);return t.skipAllowed&&r&&s&&fI===n&&V0[a]?(Wy++,V0[a]):(Wy=0,new Promise(async l=>{let u=fe.resizeBilinear(e,[oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[2]:0,oa!=null&&oa.inputs[0].shape?oa.inputs[0].shape[1]:0],!1),p=oa==null?void 0:oa.execute(u),c=(await p.data())[0];V0[a]=Math.round(100*c)/100,fI=n,gI=ae(),J([u,p]),l(V0[a])}))}var Pn,Vy=[],u3e=["white","black","asian","indian","other"],d3e=[15,23,28,35.5,45.5,55.5,65],AI=0,bI=0,Uy=Number.MAX_SAFE_INTEGER;async function vI(e){var t;return ne.initial&&(Pn=null),Pn?e.debug&&K("cached model:",Pn.modelUrl):Pn=await $e((t=e.face.gear)==null?void 0:t.modelPath),Pn}async function Gy(e,t,a,n){var i,o;if(!Pn)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=Uy<(((i=t.face.gear)==null?void 0:i.skipFrames)||0),s=(((o=t.face.gear)==null?void 0:o.skipTime)||0)>ae()-bI;return t.skipAllowed&&s&&r&&AI===n&&Vy[a]?(Uy++,Vy[a]):(Uy=0,new Promise(async l=>{var y,x,A,b;if(!(Pn!=null&&Pn.inputs[0].shape))return;let u={},p=[[0,.1,.9,.9]];if(((y=t.face.gear)==null?void 0:y.crop)>0){let w=(x=t.face.gear)==null?void 0:x.crop;p=[[w,w,1-w,1-w]]}u.resize=fe.cropAndResize(e,p,[0],[Pn.inputs[0].shape[2],Pn.inputs[0].shape[1]]);let c={age:0,gender:"unknown",genderScore:0,race:[]};(A=t.face.gear)!=null&&A.enabled&&([u.age,u.gender,u.race]=Pn.execute(u.resize,["age_output","gender_output","race_output"]));let d=await u.gender.data();c.gender=d[0]>d[1]?"male":"female",c.genderScore=Math.round(100*(d[0]>d[1]?d[0]:d[1]))/100;let h=await u.race.data();for(let w=0;w(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&c.race.push({score:Math.round(100*h[w])/100,race:u3e[w]});c.race.sort((w,I)=>I.score-w.score);let f=Array.from(await u.age.data()).map((w,I)=>[d3e[I],w]).sort((w,I)=>I[1]-w[1]),g=f[0][0];for(let w=1;wJ(u[w])),Vy[a]=c,AI=n,bI=ae(),l(c)}))}var $a,U0=[],kI=0,II=0,Hy=Number.MAX_SAFE_INTEGER;async function SI(e){return ne.initial&&($a=null),$a?e.debug&&K("cached model:",$a.modelUrl):$a=await $e(e.face.ssrnet.modelPathAge),$a}async function jy(e,t,a,n){var i,o,l,u;if(!$a)return{age:0};let r=Hy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-II;return t.skipAllowed&&r&&s&&kI===n&&((l=U0[a])!=null&&l.age)&&((u=U0[a])==null?void 0:u.age)>0?(Hy++,U0[a]):(Hy=0,new Promise(async p=>{var h,m,f;if(!($a!=null&&$a.inputs)||!$a.inputs[0]||!$a.inputs[0].shape)return;let c={};if(((h=t.face.ssrnet)==null?void 0:h.crop)>0){let g=(m=t.face.ssrnet)==null?void 0:m.crop,y=[[g,g,1-g,1-g]];c.resize=fe.cropAndResize(e,y,[0],[$a.inputs[0].shape[2],$a.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[$a.inputs[0].shape[2],$a.inputs[0].shape[1]],!1);c.enhance=te(c.resize,ze.tf255);let d={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(c.age=$a.execute(c.enhance)),c.age){let g=await c.age.data();d.age=Math.trunc(10*g[0])/10}Object.keys(c).forEach(g=>J(c[g])),U0[a]=d,kI=n,II=ae(),p(d)}))}var xa,G0=[],TI=0,NI=0,qy=Number.MAX_SAFE_INTEGER,Xy=[.2989,.587,.114];async function RI(e){var t;return ne.initial&&(xa=null),xa?e.debug&&K("cached model:",xa.modelUrl):xa=await $e((t=e.face.ssrnet)==null?void 0:t.modelPathGender),xa}async function Ky(e,t,a,n){var i,o,l,u;if(!xa)return{gender:"unknown",genderScore:0};let r=qy<(((i=t.face.ssrnet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.ssrnet)==null?void 0:o.skipTime)||0)>ae()-NI;return t.skipAllowed&&r&&s&&TI===n&&((l=G0[a])!=null&&l.gender)&&((u=G0[a])==null?void 0:u.genderScore)>0?(qy++,G0[a]):(qy=0,new Promise(async p=>{var m,f,g;if(!(xa!=null&&xa.inputs[0].shape))return;let c={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let y=(f=t.face.ssrnet)==null?void 0:f.crop,x=[[y,y,1-y,1-y]];c.resize=fe.cropAndResize(e,x,[0],[xa.inputs[0].shape[2],xa.inputs[0].shape[1]])}else c.resize=fe.resizeBilinear(e,[xa.inputs[0].shape[2],xa.inputs[0].shape[1]],!1);c.enhance=De(()=>{var x,A;let y;if(((A=(x=xa==null?void 0:xa.inputs)==null?void 0:x[0].shape)==null?void 0:A[3])===1){let[b,w,I]=Sa(c.resize,3,3),T=te(b,Xy[0]),N=te(w,Xy[1]),M=te(I,Xy[2]),$=Dh([T,N,M]);y=te(xe($,ze.tf05),2)}else y=te(xe(c.resize,ze.tf05),2);return y});let d={gender:"unknown",genderScore:0};(g=t.face.ssrnet)!=null&&g.enabled&&(c.gender=xa.execute(c.enhance));let h=await c.gender.data();d.gender=h[0]>h[1]?"female":"male",d.genderScore=h[0]>h[1]?Math.trunc(100*h[0])/100:Math.trunc(100*h[1])/100,Object.keys(c).forEach(y=>J(c[y])),G0[a]=d,TI=n,NI=ae(),p(d)}))}var rn,Yy=[],MI=0,$I=0,PI=Number.MAX_SAFE_INTEGER;async function _I(e){var t;return ne.initial&&(rn=null),rn?e.debug&&K("cached model:",rn.modelUrl):rn=await $e((t=e.face.mobilefacenet)==null?void 0:t.modelPath),rn}async function Zy(e,t,a,n){var i,o;if(!(rn!=null&&rn.executor))return[];let r=PI<(((i=t.face.mobilefacenet)==null?void 0:i.skipFrames)||0),s=(((o=t.face.mobilefacenet)==null?void 0:o.skipTime)||0)>ae()-$I;return t.skipAllowed&&s&&r&&MI===n&&Yy[a]?(PI++,Yy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.mobilefacenet)!=null&&p.enabled&&(rn!=null&&rn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[rn.inputs[0].shape[2],rn.inputs[0].shape[1]],!1),c.data=rn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Yy[a]=u,MI=n,$I=ae(),l(u)})}var sn,Jy=[],DI=0,OI=0,zI=Number.MAX_SAFE_INTEGER;async function LI(e){return ne.initial&&(sn=null),sn?e.debug&&K("cached model:",sn.modelUrl):sn=await $e(e.face.insightface.modelPath),sn}async function Qy(e,t,a,n){var i,o;if(!(sn!=null&&sn.executor))return[];let r=zI<(((i=t.face.insightface)==null?void 0:i.skipFrames)||0),s=(((o=t.face.insightface)==null?void 0:o.skipTime)||0)>ae()-OI;return t.skipAllowed&&s&&r&&DI===n&&Jy[a]?(zI++,Jy[a]):new Promise(async l=>{var p;let u=[];if((p=t.face.insightface)!=null&&p.enabled&&(sn!=null&&sn.inputs[0].shape)){let c={};c.crop=fe.resizeBilinear(e,[sn.inputs[0].shape[2],sn.inputs[0].shape[1]],!1),c.data=sn.execute(c.crop);let d=await c.data.data();u=Array.from(d),Object.keys(c).forEach(h=>J(c[h]))}Jy[a]=u,DI=n,OI=ae(),l(u)})}var p3e=e=>{let t=(c,d)=>Math.atan2(c[1]-d[1],c[0]-d[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let a=[0,-.1],n=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],i=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],o=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(i[0]-s[0])/o[0]-a[0],n*(s[1]-i[1])/o[1]-a[1]],u=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return u=Math.min(u,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:u}},BI=(e,t)=>{let a=f=>{let g=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=g,f[1]/=g,f[2]/=g,f},n=(f,g)=>{let y=f[0]-g[0],x=f[1]-g[1],A=f[2]-g[2];return[y,x,A]},r=(f,g)=>{let y=f[1]*g[2]-f[2]*g[1],x=f[2]*g[0]-f[0]*g[2],A=f[0]*g[1]-f[1]*g[0];return[y,x,A]},s=f=>{let[g,y,x,A,b,w,I,T,N]=f,M,$,E;return A<1?A>-1?(E=Math.asin(A),$=Math.atan2(-I,g),M=Math.atan2(-w,b)):(E=-Math.PI/2,$=-Math.atan2(T,N),M=0):(E=Math.PI/2,$=Math.atan2(T,N),M=0),Number.isNaN(M)&&(M=0),Number.isNaN($)&&($=0),Number.isNaN(E)&&(E=0),{pitch:2*-M,yaw:2*-$,roll:2*-E}},i=e.meshRaw;if(!i||i.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let o=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[i[10],i[152],i[234],i[454]].map(f=>[f[0]*t[0]/o,f[1]*t[1]/o,f[2]]),u=a(n(l[1],l[0])),p=a(n(l[3],l[2])),c=a(r(p,u));p=r(u,c);let d=[p[0],p[1],p[2],u[0],u[1],u[2],c[0],c[1],c[2]],h=s(d),m=i.length===478?p3e(e):{bearing:0,strength:0};return{angle:h,matrix:d,gaze:m}};function VI(e,t){let a=e==null?void 0:e.annotations;if(!(a!=null&&a.leftEyeIris)||!(a!=null&&a.rightEyeIris))return 0;let n=Math.max(Math.abs(a.leftEyeIris[3][0]-a.leftEyeIris[1][0]),Math.abs(a.rightEyeIris[3][0]-a.rightEyeIris[1][0]))/t;return Math.round(1.17/n)/100}var ex=async(e,t)=>{var m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;let a=ae(),n,r,s,i,o,l,u,p,c,d=[];e.state="run:face";let h=await J9(t,e.config);if(e.performance.face=ne.perfadd?(e.performance.face||0)+Math.trunc(ae()-a):Math.trunc(ae()-a),!t.shape||t.shape.length!==4)return[];if(!h)return[];for(let V=0;V200?BI(h[V],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?i=(f=e.config.face.emotion)!=null&&f.enabled?_y(h[V].tensor||Ve([]),e.config,V,h.length):[]:(e.state="run:emotion",a=ae(),i=(g=e.config.face.emotion)!=null&&g.enabled?await _y(h[V].tensor||Ve([]),e.config,V,h.length):[],e.performance.emotion=ne.perfadd?(e.performance.emotion||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?u=(y=e.config.face.antispoof)!=null&&y.enabled?Ly(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:antispoof",a=ae(),u=(x=e.config.face.antispoof)!=null&&x.enabled?await Ly(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.antispoof=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?p=(A=e.config.face.liveness)!=null&&A.enabled?By(h[V].tensor||Ve([]),e.config,V,h.length):0:(e.state="run:liveness",a=ae(),p=(b=e.config.face.liveness)!=null&&b.enabled?await By(h[V].tensor||Ve([]),e.config,V,h.length):0,e.performance.liveness=ne.perfadd?(e.performance.antispoof||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(w=e.config.face.gear)!=null&&w.enabled?Gy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:gear",a=ae(),r=(I=e.config.face.gear)!=null&&I.enabled?await Gy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.gear=Math.trunc(ae()-a)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(n=(T=e.config.face.ssrnet)!=null&&T.enabled?jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=(N=e.config.face.ssrnet)!=null&&N.enabled?Ky(h[V].tensor||Ve([]),e.config,V,h.length):null):(e.state="run:ssrnet",a=ae(),n=(M=e.config.face.ssrnet)!=null&&M.enabled?await jy(h[V].tensor||Ve([]),e.config,V,h.length):null,s=($=e.config.face.ssrnet)!=null&&$.enabled?await Ky(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.ssrnet=Math.trunc(ae()-a)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?o=(E=e.config.face.mobilefacenet)!=null&&E.enabled?Zy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),o=(S=e.config.face.mobilefacenet)!=null&&S.enabled?await Zy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(_=e.config.face.insightface)!=null&&_.enabled?Qy(h[V].tensor||Ve([]),e.config,V,h.length):null:(e.state="run:mobilefacenet",a=ae(),l=(O=e.config.face.insightface)!=null&&O.enabled?await Qy(h[V].tensor||Ve([]),e.config,V,h.length):null,e.performance.mobilefacenet=Math.trunc(ae()-a)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?c=Dy(h[V].tensor||Ve([]),e.config,V,h.length):(e.state="run:description",a=ae(),c=await Dy(h[V].tensor||Ve([]),e.config,V,h.length),e.performance.description=ne.perfadd?(e.performance.description||0)+Math.trunc(ae()-a):Math.trunc(ae()-a)),e.analyze("End Description:"),e.config.async&&([n,s,i,o,l,c,r,u,p]=await Promise.all([n,s,i,o,l,c,r,u,p])),e.analyze("Finish Face:"),(W=e.config.face.ssrnet)!=null&&W.enabled&&n&&s&&(c={...c,age:n.age,gender:s.gender,genderScore:s.genderScore}),(P=e.config.face.gear)!=null&&P.enabled&&r&&(c={...c,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(U=e.config.face.mobilefacenet)!=null&&U.enabled&&o&&(c.descriptor=o),(G=e.config.face.insightface)!=null&&G.enabled&&l&&(c.descriptor=l);let X=(q=e.config.face.iris)!=null&&q.enabled?VI(h[V],t.shape[2]):0,re=(H=e.config.face.detector)!=null&&H.return?Oe(h[V].tensor):null;J(h[V].tensor),h[V].tensor&&delete h[V].tensor;let ee={...h[V],id:V};c.age&&(ee.age=c.age),c.gender&&(ee.gender=c.gender),c.genderScore&&(ee.genderScore=c.genderScore),c.descriptor&&(ee.embedding=c.descriptor),c.race&&(ee.race=c.race),i&&(ee.emotion=i),u&&(ee.real=u),p&&(ee.live=p),X>0&&(ee.distance=X),Z&&(ee.rotation=Z),re&&(ee.tensor=re),d.push(ee),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),d};var Pa={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>Pa.nameMapping[e],getPoints:e=>Pa.pointsMapping[e]},Ts={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>Ts.nameMapping[e]},$t={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>$t.nameMapping[e]},Cs=class{constructor(t){he(this,"name");he(this,"curls");he(this,"directions");he(this,"weights");he(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,a,n){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([a,n])}direction(t,a,n){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([a,n])}weight(t,a){this.weights[t]=a;let n=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/n)}matchAgainst(t,a){let n=0;for(let r in t){let s=t[r],i=this.curls[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}for(let r in a){let s=a[r],i=this.directions[r];if(typeof i=="undefined"){n+=this.weightsRelative[r];continue}for(let[o,l]of i)if(s===o){n+=l*this.weightsRelative[r];break}}return n/10}};var{thumb:Un,index:Pr,middle:_r,ring:bl,pinky:vl}=Pa,{none:Gn,half:h3e,full:Hn}=Ts,{verticalUp:ud,verticalDown:j7e,horizontalLeft:tx,horizontalRight:m3e,diagonalUpRight:f3e,diagonalUpLeft:dd,diagonalDownRight:q7e,diagonalDownLeft:X7e}=$t,Ns=new Cs("thumbs up");Ns.curl(Un,Gn,1);Ns.direction(Un,ud,1);Ns.direction(Un,dd,.25);Ns.direction(Un,f3e,.25);for(let e of[Pa.index,Pa.middle,Pa.ring,Pa.pinky])Ns.curl(e,Hn,1),Ns.direction(e,tx,1),Ns.direction(e,m3e,1);var Ht=new Cs("victory");Ht.curl(Un,h3e,.5);Ht.curl(Un,Gn,.5);Ht.direction(Un,ud,1);Ht.direction(Un,dd,1);Ht.curl(Pr,Gn,1);Ht.direction(Pr,ud,.75);Ht.direction(Pr,dd,1);Ht.curl(_r,Gn,1);Ht.direction(_r,ud,1);Ht.direction(_r,dd,.75);Ht.curl(bl,Hn,1);Ht.direction(bl,ud,.2);Ht.direction(bl,dd,1);Ht.direction(bl,tx,.2);Ht.curl(vl,Hn,1);Ht.direction(vl,ud,.2);Ht.direction(vl,dd,1);Ht.direction(vl,tx,.2);Ht.weight(Pr,2);Ht.weight(_r,2);var Rs=new Cs("point");Rs.curl(Un,Hn,1);Rs.curl(Pr,Gn,.5);Rs.curl(_r,Hn,.5);Rs.curl(bl,Hn,.5);Rs.curl(vl,Hn,.5);Rs.weight(Pr,2);Rs.weight(_r,2);var Es=new Cs("middle finger");Es.curl(Un,Gn,1);Es.curl(Pr,Hn,.5);Es.curl(_r,Hn,.5);Es.curl(bl,Hn,.5);Es.curl(vl,Hn,.5);Es.weight(Pr,2);Es.weight(_r,2);var pd=new Cs("open palm");pd.curl(Un,Gn,.75);pd.curl(Pr,Gn,.75);pd.curl(_r,Gn,.75);pd.curl(bl,Gn,.75);pd.curl(vl,Gn,.75);var UI=[Ns,Ht,Rs,Es,pd];var g3e=.7,wl={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function GI(e,t,a,n){let r=(t-n)/(e-a),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function jI(e,t){if(!e||!t)return[0,0];let a=GI(e[0],e[1],t[0],t[1]);if(e.length===2)return a;let n=GI(e[1],e[2],t[1],t[2]);return[a,n]}function HI(e,t=1){let a=0,n=0,r=0;return e>=75&&e<=105?a=1*t:e>=25&&e<=155?n=1*t:r=1*t,[a,n,r]}function y3e(e,t,a){let n=e[0]-t[0],r=e[0]-a[0],s=t[0]-a[0],i=e[1]-t[1],o=e[1]-a[1],l=t[1]-a[1],u=e[2]-t[2],p=e[2]-a[2],c=t[2]-a[2],d=Math.sqrt(n*n+i*i+u*u),h=Math.sqrt(r*r+o*o+p*p),m=Math.sqrt(s*s+l*l+c*c),f=(m*m+d*d-h*h)/(2*m*d);f>1?f=1:f<-1&&(f=-1);let g=Math.acos(f);g=57.2958*g%180;let y;return g>wl.NO_CURL_START_LIMIT?y=Ts.none:g>wl.HALF_CURL_START_LIMIT?y=Ts.half:y=Ts.full,y}function qI(e,t,a,n){let r;return n===Math.abs(e)?e>0?r=$t.horizontalLeft:r=$t.horizontalRight:n===Math.abs(t)?t>0?r=$t.horizontalLeft:r=$t.horizontalRight:a>0?r=$t.horizontalLeft:r=$t.horizontalRight,r}function XI(e,t,a,n){let r;return n===Math.abs(e)?e<0?r=$t.verticalDown:r=$t.verticalUp:n===Math.abs(t)?t<0?r=$t.verticalDown:r=$t.verticalUp:a<0?r=$t.verticalDown:r=$t.verticalUp,r}function x3e(e,t,a,n,r,s,i,o){let l,u=XI(e,t,a,n),p=qI(r,s,i,o);return u===$t.verticalUp?p===$t.horizontalLeft?l=$t.diagonalUpLeft:l=$t.diagonalUpRight:p===$t.horizontalLeft?l=$t.diagonalDownLeft:l=$t.diagonalDownRight,l}function A3e(e,t,a,n){let r=e[0]-t[0],s=e[0]-a[0],i=t[0]-a[0],o=e[1]-t[1],l=e[1]-a[1],u=t[1]-a[1],p=Math.max(Math.abs(r),Math.abs(s),Math.abs(i)),c=Math.max(Math.abs(o),Math.abs(l),Math.abs(u)),d=0,h=0,m=0,f=c/(p+1e-5);f>1.5?d+=wl.DISTANCE_VOTE_POWER:f>.66?h+=wl.DISTANCE_VOTE_POWER:m+=wl.DISTANCE_VOTE_POWER;let g=Math.sqrt(r*r+o*o),y=Math.sqrt(s*s+l*l),x=Math.sqrt(i*i+u*u),A=Math.max(g,y,x),b=e[0],w=e[1],I=a[0],T=a[1];A===g?(I=a[0],T=a[1]):A===x&&(b=t[0],w=t[1]);let $=jI([b,w],[I,T]),E=HI($,wl.TOTAL_ANGLE_VOTE_POWER);d+=E[0],h+=E[1],m+=E[2];for(let _ of n){let O=HI(_,wl.SINGLE_ANGLE_VOTE_POWER);d+=O[0],h+=O[1],m+=O[2]}let S;return d===Math.max(d,h,m)?S=XI(l,o,u,c):m===Math.max(h,m)?S=qI(s,r,i,p):S=x3e(l,o,u,c,s,r,i,p),S}function KI(e){let t=[],a=[],n=[],r=[];if(!e)return{curls:n,directions:r};for(let s of Pa.all){let i=Pa.getPoints(s),o=[],l=[];for(let u of i){let p=e[u[0]],c=e[u[1]],d=jI(p,c),h=d[0],m=d[1];o.push(h),l.push(m)}t.push(o),a.push(l)}for(let s of Pa.all){let i=s===Pa.thumb?1:0,o=Pa.getPoints(s),l=e[o[i][0]],u=e[o[i+1][1]],p=e[o[3][1]],c=y3e(l,u,p),d=A3e(l,u,p,t[s].slice(i));n[s]=c,r[s]=d}return{curls:n,directions:r}}function H0(e){if(!e||e.length===0)return null;let t=KI(e),a={};for(let n of Pa.all)a[Pa.getName(n)]={curl:Ts.getName(t.curls[n]),direction:$t.getName(t.directions[n])};return a}function YI(e){let t=[];if(!e||e.length===0)return t;let a=KI(e);for(let n of UI){let r=n.matchAgainst(a.curls,a.directions);r>=g3e&&t.push({name:n.name,confidence:r})}return t}var ZI=e=>{if(!e)return[];let t=[];for(let a=0;al.part==="leftWrist"),r=e[a].keypoints.find(l=>l.part==="rightWrist"),s=e[a].keypoints.find(l=>l.part==="nose");s&&n&&r&&n.position[1]l.part==="leftShoulder"),o=e[a].keypoints.find(l=>l.part==="rightShoulder");i&&o&&Math.abs(i.positionRaw[1]-o.positionRaw[1])>.1&&t.push({body:a,gesture:`leaning ${i.position[1]>o.position[1]?"left":"right"}`})}return t},JI=e=>{if(!e)return[];let t=[];for(let a=0;a450){let n=(e[a].mesh[33][2]||0)-(e[a].mesh[263][2]||0),r=e[a].mesh[33][0]-e[a].mesh[263][0];Math.abs(n/r)<=.15?t.push({face:a,gesture:"facing center"}):t.push({face:a,gesture:`facing ${n<0?"left":"right"}`}),Math.abs(e[a].mesh[374][1]-e[a].mesh[386][1])/Math.abs(e[a].mesh[443][1]-e[a].mesh[450][1])<.2&&t.push({face:a,gesture:"blink left eye"}),Math.abs(e[a].mesh[145][1]-e[a].mesh[159][1])/Math.abs(e[a].mesh[223][1]-e[a].mesh[230][1])<.2&&t.push({face:a,gesture:"blink right eye"});let o=Math.min(100,500*Math.abs(e[a].mesh[13][1]-e[a].mesh[14][1])/Math.abs(e[a].mesh[10][1]-e[a].mesh[152][1]));o>10&&t.push({face:a,gesture:`mouth ${Math.trunc(o)}% open`});let l=e[a].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:a,gesture:`head ${l<0?"up":"down"}`})}return t},QI=e=>{var a,n,r,s;if(!e)return[];let t=[];for(let i=0;i.06||g>.06)&&(h=!1),f>g?g>.04&&t.push({iris:i,gesture:"looking right"}):f>.04&&t.push({iris:i,gesture:"looking left"});let y=Math.abs(e[i].mesh[145][1]-e[i].annotations.rightEyeIris[0][1])/e[i].box[3],x=Math.abs(e[i].mesh[374][1]-e[i].annotations.leftEyeIris[0][1])/e[i].box[3];(x<.01||y<.01||x>.022||y>.022)&&(h=!1),(x<.01||y<.01)&&t.push({iris:i,gesture:"looking down"}),(x>.022||y>.022)&&t.push({iris:i,gesture:"looking up"}),h&&t.push({iris:i,gesture:"looking center"})}return t},eS=e=>{if(!e)return[];let t=[];for(let a=0;a0){let r=n.reduce((i,o)=>(i.position[2]||0)<(o.position[2]||0)?i:o);t.push({hand:a,gesture:`${r.name} forward`});let s=n.reduce((i,o)=>i.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:a,endPoint:n,palmLandmarks:r,confidence:e.confidence}}function q0(e,t=1.5){let a=pc(e),n=j0(e),r=[t*n[0]/2,t*n[1]/2],s=[a[0]-r[0],a[1]-r[1]],i=[a[0]+r[0],a[1]+r[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function X0(e){let t=pc(e),a=j0(e),r=Math.max(...a)/2,s=[t[0]-r,t[1]-r],i=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function v3e(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function sS(e,t){let a=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return v3e(a)}var tS=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Ms(e,t){let a=0;for(let n=0;n[i.x,i.y]),this.anchorsTensor=Zn(this.anchors),this.inputSize=((s=(r=(n=(a=this==null?void 0:this.model)==null?void 0:a.inputs)==null?void 0:n[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=Bt([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=Bt([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let a={};a.boxOffsets=Fe(t,[0,0],[-1,2]),a.boxSizes=Fe(t,[0,2],[-1,2]),a.div=ve(a.boxOffsets,this.inputSizeTensor),a.boxCenterPoints=we(a.div,this.anchorsTensor),a.halfBoxSizes=ve(a.boxSizes,this.doubleInputSizeTensor),a.sub=xe(a.boxCenterPoints,a.halfBoxSizes),a.startPoints=te(a.sub,this.inputSizeTensor),a.add=we(a.boxCenterPoints,a.halfBoxSizes),a.endPoints=te(a.add,this.inputSizeTensor);let n=Vu([a.startPoints,a.endPoints],1);return Object.keys(a).forEach(r=>J(a[r])),n}normalizeLandmarks(t,a){let n={};n.reshape=Q(t,[-1,7,2]),n.div=ve(n.reshape,this.inputSizeTensor),n.landmarks=we(n.div,this.anchors[a]?this.anchors[a]:0);let r=te(n.landmarks,this.inputSizeTensor);return Object.keys(n).forEach(s=>J(n[s])),r}async predict(t,a){var o;let n={};n.resize=fe.resizeBilinear(t,[this.inputSize,this.inputSize]),n.div=ve(n.resize,ze.tf127),n.image=xe(n.div,ze.tf1),n.batched=this.model.execute(n.image),n.predictions=Oe(n.batched),n.slice=Fe(n.predictions,[0,0],[-1,1]),n.sigmoid=za(n.slice),n.scores=Oe(n.sigmoid);let r=await n.scores.data();n.boxes=Fe(n.predictions,[0,1],[-1,4]),n.norm=this.normalizeBoxes(n.boxes),n.nms=await fe.nonMaxSuppressionAsync(n.norm,n.scores,3*(((o=a.hand)==null?void 0:o.maxDetected)||1),a.hand.iouThreshold,a.hand.minConfidence);let s=await n.nms.array(),i=[];for(let l of s){let u={};u.box=Fe(n.norm,[l,0],[1,-1]),u.slice=Fe(n.predictions,[l,5],[1,14]),u.norm=this.normalizeLandmarks(u.slice,l),u.palmLandmarks=Q(u.norm,[-1,2]);let p=await u.box.data(),c=p.slice(0,2),d=p.slice(2,4),h=await u.palmLandmarks.array(),m={startPoint:c,endPoint:d,palmLandmarks:h,confidence:r[l]},f=rS(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);i.push(f),Object.keys(u).forEach(g=>J(u[g]))}return Object.keys(n).forEach(l=>J(n[l])),i}};var S3e=5,uS=1.65,dS=[0,5,9,13,17,1,2],C3e=0,T3e=2,pS=0,Y0=class{constructor(t,a){he(this,"handDetector");he(this,"handPoseModel");he(this,"inputSize");he(this,"storedBoxes");he(this,"skipped");he(this,"detectedHands");var n,r,s;this.handDetector=t,this.handPoseModel=a,this.inputSize=((s=(r=(n=this.handPoseModel)==null?void 0:n.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let a=t.map(i=>i[0]),n=t.map(i=>i[1]),r=[Math.min(...a),Math.min(...n)],s=[Math.max(...a),Math.max(...n)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,a){let n=t.map(s=>rx([...s,1],a)),r=this.calculateLandmarksBoundingBox(n);return q0(X0(r),S3e)}getBoxForHandLandmarks(t){let a=this.calculateLandmarksBoundingBox(t),n=q0(X0(a),uS);n.palmLandmarks=[];for(let r=0;r[i[0]*(h[0]-this.inputSize/2),i[1]*(h[1]-this.inputSize/2),i[2]*h[2]]),l=nx(n,[0,0]),u=o.map(h=>[...rx(h,l),h[2]]),p=iS(r),c=[...pc(a),1],d=[Ms(c,p[0]),Ms(c,p[1])];return u.map(h=>[Math.trunc(h[0]+d[0]),Math.trunc(h[1]+d[1]),Math.trunc(h[2])])}async estimateHands(t,a){let n=!1,r,s=(a.hand.skipTime||0)>ae()-pS,i=this.skipped<(a.hand.skipFrames||0);a.skipAllowed&&s&&i?this.skipped++:(r=await this.handDetector.predict(t,a),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==a.hand.maxDetected||!a.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let o=[];for(let l=0;l=a.hand.minConfidence/4){let w=Q(A,[-1,3]),I=await w.array();J(A),J(w);let T=this.transformRawCoords(I,f,p,m),N=this.getBoxForHandLandmarks(T);this.storedBoxes[l]={...N,confidence:b};let M={landmarks:T,confidence:b,boxConfidence:u.confidence,fingerConfidence:b,box:{topLeft:N.startPoint,bottomRight:N.endPoint}};o.push(M)}else this.storedBoxes[l]=null;J(A)}else{let p=q0(X0(u),uS),c={confidence:u.confidence,boxConfidence:u.confidence,fingerConfidence:0,box:{topLeft:p.startPoint,bottomRight:p.endPoint},landmarks:[]};o.push(c)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=o.length,o.length>a.hand.maxDetected&&(o.length=a.hand.maxDetected),o}};var cS={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},kl,Il,sx;function R3e(){let e=kl?new K0(kl):void 0;e&&Il&&(sx=new Y0(e,Il))}async function ix(e,t){sx||R3e();let a=await sx.estimateHands(e,t);if(!a)return[];let n=[];for(let r=0;ra[r].landmarks[c]);let i=a[r].landmarks,o=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(i&&i.length>0){for(let p of i)p[0]o[2]&&(o[2]=p[0]),p[1]>o[3]&&(o[3]=p[1]);o[2]-=o[0],o[3]-=o[1],l=[o[0]/(e.shape[2]||0),o[1]/(e.shape[1]||0),o[2]/(e.shape[2]||0),o[3]/(e.shape[1]||0)]}else o=a[r].box?[Math.trunc(Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.max(0,a[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,a[r].box.bottomRight[0])-Math.max(0,a[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,a[r].box.bottomRight[1])-Math.max(0,a[r].box.topLeft[1]))]:[0,0,0,0],l=[a[r].box.topLeft[0]/(e.shape[2]||0),a[r].box.topLeft[1]/(e.shape[1]||0),(a[r].box.bottomRight[0]-a[r].box.topLeft[0])/(e.shape[2]||0),(a[r].box.bottomRight[1]-a[r].box.topLeft[1])/(e.shape[1]||0)];let u=H0(i);n.push({id:r,score:Math.round(100*a[r].confidence)/100,boxScore:Math.round(100*a[r].boxConfidence)/100,fingerScore:Math.round(100*a[r].fingerConfidence)/100,label:"hand",box:o,boxRaw:l,keypoints:i,annotations:s,landmarks:u})}return n}async function hS(e){var t;return ne.initial&&(kl=null),kl?e.debug&&K("cached model:",kl.modelUrl):kl=await $e((t=e.hand.detector)==null?void 0:t.modelPath),kl}async function mS(e){var t;return ne.initial&&(Il=null),Il?e.debug&&K("cached model:",Il.modelUrl):Il=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath),Il}var Ot=[null,null],E3e=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],$s=[[0,0],[0,0]],M3e=["hand","fist","pinch","point","face","tip","pinchtip"],gS=4,yS=1.6,$3e=512,P3e=1.4,Z0=Number.MAX_SAFE_INTEGER,ox=0,Fr=[0,0],Dt={boxes:[],hands:[]},xS={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function AS(e){var t;if(ne.initial&&(Ot[0]=null),Ot[0])e.debug&&K("cached model:",Ot[0].modelUrl);else{b0(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),Ot[0]=await $e((t=e.hand.detector)==null?void 0:t.modelPath);let a=Ot[0].executor?Object.values(Ot[0].modelSignature.inputs):void 0;$s[0][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[0][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[0]}async function bS(e){var t;if(ne.initial&&(Ot[1]=null),Ot[1])e.debug&&K("cached model:",Ot[1].modelUrl);else{Ot[1]=await $e((t=e.hand.skeleton)==null?void 0:t.modelPath);let a=Ot[1].executor?Object.values(Ot[1].modelSignature.inputs):void 0;$s[1][0]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[1].size):0,$s[1][1]=Array.isArray(a)?parseInt(a[0].tensorShape.dim[2].size):0}return Ot[1]}async function _3e(e,t){let a=[];if(!e||!Ot[0])return a;let n={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,$3e),i=Math.round(s*r/8)*8;n.resize=fe.resizeBilinear(e,[s,i]),n.cast=Ue(n.resize,"int32"),[n.rawScores,n.rawBoxes]=await Ot[0].executeAsync(n.cast,E3e),n.boxes=Oe(n.rawBoxes,[0,2]),n.scores=Oe(n.rawScores,[0]);let o=Na(n.scores,1);J(o[gS]),o.splice(gS,1),n.filtered=ca(o,1),J(o),n.max=fa(n.filtered,1),n.argmax=rr(n.filtered,1);let l=0;n.nms=await fe.nonMaxSuppressionAsync(n.boxes,n.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let u=await n.nms.data(),p=await n.max.data(),c=await n.argmax.data();for(let d of Array.from(u)){let h=Fe(n.boxes,d,1),m=await h.data();J(h);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],g=R0(f,P3e),y=[Math.trunc(f[0]*Fr[0]),Math.trunc(f[1]*Fr[1]),Math.trunc(f[2]*Fr[0]),Math.trunc(f[3]*Fr[1])],x=p[d],A=M3e[c[d]],b={id:l++,score:x,box:y,boxRaw:g,label:A};a.push(b)}return Object.keys(n).forEach(d=>J(n[d])),a.sort((d,h)=>h.score-d.score),a.length>(t.hand.maxDetected||1)&&(a.length=t.hand.maxDetected||1),a}async function lx(e,t,a){let n={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&Ot[1]&&a.hand.landmarks&&t.score>(a.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=fe.cropAndResize(e,[s],[0],[$s[1][0],$s[1][1]],"bilinear"),r.div=ve(r.crop,ze.tf255),[r.score,r.keypoints]=Ot[1].execute(r.div,["Identity_1","Identity"]);let i=(await r.score.data())[0],o=(100-Math.trunc(100/(1+Math.exp(i))))/100;if(o>=(a.hand.minConfidence||0)){n.fingerScore=o,r.reshaped=Q(r.keypoints,[-1,3]);let p=(await r.reshaped.array()).map(c=>[c[0]/$s[1][1],c[1]/$s[1][0],c[2]||0]).map(c=>[c[0]*t.boxRaw[2],c[1]*t.boxRaw[3],c[2]||0]);n.keypoints=p.map(c=>[Fr[0]*(c[0]+t.boxRaw[0]),Fr[1]*(c[1]+t.boxRaw[1]),c[2]||0]),n.landmarks=H0(n.keypoints);for(let c of Object.keys(xS))n.annotations[c]=xS[c].map(d=>n.landmarks&&n.keypoints[d]?n.keypoints[d]:null)}Object.keys(r).forEach(l=>J(r[l]))}return n}async function ux(e,t){var r,s;if(!((r=Ot[0])!=null&&r.executor)||!((s=Ot[1])!=null&&s.executor)||!Ot[0].inputs[0].shape||!Ot[1].inputs[0].shape)return[];Fr=[e.shape[2]||0,e.shape[1]||0],Z0++;let a=(t.hand.skipTime||0)>ae()-ox,n=Z0<(t.hand.skipFrames||0);return t.skipAllowed&&a&&n?Dt.hands:new Promise(async i=>{let o=3*(t.hand.skipTime||0)>ae()-ox,l=Z0<3*(t.hand.skipFrames||0);t.skipAllowed&&Dt.hands.length===t.hand.maxDetected?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):t.skipAllowed&&o&&l&&Dt.hands.length>0?Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))):(Dt.boxes=await _3e(e,t),ox=ae(),Dt.hands=await Promise.all(Dt.boxes.map(p=>lx(e,p,t))),Z0=0);let u=[...Dt.boxes];if(Dt.boxes.length=0,t.cacheSensitivity>0)for(let p=0;p.05&&c.box[3]/(e.shape[1]||1)>.05&&Dt.hands[p].fingerScore&&Dt.hands[p].fingerScore>(t.hand.minConfidence||0)){let d=R0(c.box,yS),h=R0(c.boxRaw,yS);Dt.boxes.push({...u[p],box:d,boxRaw:h})}}for(let p=0;p({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var cc={};yr(cc,{connected:()=>Q0,horizontal:()=>dx,kpt:()=>J0,relative:()=>cx,vertical:()=>px});var J0=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],dx=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],px=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],cx=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Q0={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var Ae=pr(),hx=0;function wS(e,t){var i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W;let a=ae();if(!e)return pr();let n=Date.now()-e.timestamp,r=n<1e3?8-Math.log(n+1):1;if(e.canvas&&(Ae.canvas=e.canvas),e.error&&(Ae.error=e.error),!Ae.body||e.body.length!==Ae.body.length)Ae.body=JSON.parse(JSON.stringify(e.body));else for(let P=0;P((r-1)*Ae.body[P].box[X]+Z)/r),G=e.body[P].boxRaw.map((Z,X)=>((r-1)*Ae.body[P].boxRaw[X]+Z)/r),q=e.body[P].keypoints.map((Z,X)=>{var re,ee,ge,ie,be,Ce,Re,Le,qe;return{score:Z.score,part:Z.part,position:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[0]||0)+(Z.position[0]||0))/r:Z.position[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[1]||0)+(Z.position[1]||0))/r:Z.position[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].position[2]||0)+(Z.position[2]||0))/r:Z.position[2]],positionRaw:[Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[0]||0)+(Z.positionRaw[0]||0))/r:Z.positionRaw[0],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[1]||0)+(Z.positionRaw[1]||0))/r:Z.positionRaw[1],Ae.body[P].keypoints[X]?((r-1)*(Ae.body[P].keypoints[X].positionRaw[2]||0)+(Z.positionRaw[2]||0))/r:Z.positionRaw[2]],distance:[Ae.body[P].keypoints[X]?((r-1)*(((re=Ae.body[P].keypoints[X].distance)==null?void 0:re[0])||0)+(((ee=Z.distance)==null?void 0:ee[0])||0))/r:(ge=Z.distance)==null?void 0:ge[0],Ae.body[P].keypoints[X]?((r-1)*(((ie=Ae.body[P].keypoints[X].distance)==null?void 0:ie[1])||0)+(((be=Z.distance)==null?void 0:be[1])||0))/r:(Ce=Z.distance)==null?void 0:Ce[1],Ae.body[P].keypoints[X]?((r-1)*(((Re=Ae.body[P].keypoints[X].distance)==null?void 0:Re[2])||0)+(((Le=Z.distance)==null?void 0:Le[2])||0))/r:(qe=Z.distance)==null?void 0:qe[2]]}}),H={},V={connected:{}};(i=t.body.modelPath)!=null&&i.includes("efficientpose")?V=$0:(o=t.body.modelPath)!=null&&o.includes("blazepose")?V=T0:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(V=cc);for(let[Z,X]of Object.entries(V.connected)){let re=[];for(let ee=0;eebe.part===X[ee]),ie=q.find(be=>be.part===X[ee+1]);ge&&ie&&re.push([ge.position,ie.position])}H[Z]=re}Ae.body[P]={...e.body[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.hand||e.hand.length!==Ae.hand.length)Ae.hand=JSON.parse(JSON.stringify(e.hand));else for(let P=0;P((r-1)*Ae.hand[P].box[Z]+V)/r),G=e.hand[P].boxRaw.map((V,Z)=>((r-1)*Ae.hand[P].boxRaw[Z]+V)/r);Ae.hand[P].keypoints.length!==e.hand[P].keypoints.length&&(Ae.hand[P].keypoints=e.hand[P].keypoints);let q=e.hand[P].keypoints&&e.hand[P].keypoints.length>0?e.hand[P].keypoints.map((V,Z)=>V.map((X,re)=>((r-1)*(Ae.hand[P].keypoints[Z][re]||1)+(X||0))/r)):[],H={};if(Object.keys(Ae.hand[P].annotations).length!==Object.keys(e.hand[P].annotations).length)Ae.hand[P].annotations=e.hand[P].annotations,H=Ae.hand[P].annotations;else if(e.hand[P].annotations)for(let V of Object.keys(e.hand[P].annotations))H[V]=(c=(p=(u=e.hand[P])==null?void 0:u.annotations)==null?void 0:p[V])!=null&&c[0]?e.hand[P].annotations[V].map((Z,X)=>Z.map((re,ee)=>((r-1)*Ae.hand[P].annotations[V][X][ee]+re)/r)):null;Ae.hand[P]={...e.hand[P],box:U,boxRaw:G,keypoints:q,annotations:H}}if(!Ae.face||e.face.length!==Ae.face.length)Ae.face=JSON.parse(JSON.stringify(e.face));else for(let P=0;P((r-1)*Ae.face[P].box[V]+H)/r),G=e.face[P].boxRaw.map((H,V)=>((r-1)*Ae.face[P].boxRaw[V]+H)/r),q=e.face[P].annotations;if(Object.keys(Ae.face[P].annotations).length!==Object.keys(e.face[P].annotations).length)Ae.face[P].annotations=e.face[P].annotations,q=Ae.face[P].annotations;else if(e.face[P].annotations)for(let H of Object.keys(e.face[P].annotations))q[H]=(m=(h=(d=e.face[P])==null?void 0:d.annotations)==null?void 0:h[H])!=null&&m[0]?e.face[P].annotations[H].map((V,Z)=>V.map((X,re)=>((r-1)*Ae.face[P].annotations[H][Z][re]+X)/r)):null;if(e.face[P].rotation){let H={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};H.matrix=(f=e.face[P].rotation)==null?void 0:f.matrix,H.angle={roll:((r-1)*(((y=(g=Ae.face[P].rotation)==null?void 0:g.angle)==null?void 0:y.roll)||0)+(((A=(x=e.face[P].rotation)==null?void 0:x.angle)==null?void 0:A.roll)||0))/r,yaw:((r-1)*(((w=(b=Ae.face[P].rotation)==null?void 0:b.angle)==null?void 0:w.yaw)||0)+(((T=(I=e.face[P].rotation)==null?void 0:I.angle)==null?void 0:T.yaw)||0))/r,pitch:((r-1)*(((M=(N=Ae.face[P].rotation)==null?void 0:N.angle)==null?void 0:M.pitch)||0)+(((E=($=e.face[P].rotation)==null?void 0:$.angle)==null?void 0:E.pitch)||0))/r},H.gaze={bearing:((r-1)*(((S=Ae.face[P].rotation)==null?void 0:S.gaze.bearing)||0)+(((_=e.face[P].rotation)==null?void 0:_.gaze.bearing)||0))/r,strength:((r-1)*(((O=Ae.face[P].rotation)==null?void 0:O.gaze.strength)||0)+(((W=e.face[P].rotation)==null?void 0:W.gaze.strength)||0))/r},Ae.face[P]={...e.face[P],rotation:H,box:U,boxRaw:G,annotations:q}}else Ae.face[P]={...e.face[P],box:U,boxRaw:G,annotations:q}}if(!Ae.object||e.object.length!==Ae.object.length)Ae.object=JSON.parse(JSON.stringify(e.object));else for(let P=0;P((r-1)*Ae.object[P].box[H]+q)/r),G=e.object[P].boxRaw.map((q,H)=>((r-1)*Ae.object[P].boxRaw[H]+q)/r);Ae.object[P]={...e.object[P],box:U,boxRaw:G}}if(e.persons){let P=e.persons;if(!Ae.persons||P.length!==Ae.persons.length)Ae.persons=JSON.parse(JSON.stringify(P));else for(let U=0;U((r-1)*Ae.persons[U].box[q]+G)/r)}e.gesture&&(Ae.gesture=e.gesture),Ae.width=e.width,Ae.height=e.height;let s=ae();return hx=ne.perfadd?hx+Math.round(s-a):Math.round(s-a),e.performance&&(Ae.performance={...e.performance,interpolate:hx}),Ae}var Aa;async function mx(e){return!Aa||ne.initial?Aa=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",Aa.modelUrl),Aa}async function kS(e,t){var r;if(Aa||(Aa=await mx(t)),!(Aa!=null&&Aa.executor)||!((r=Aa==null?void 0:Aa.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[Aa.inputs[0].shape?Aa.inputs[0].shape[1]:0,Aa.inputs[0].shape?Aa.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=Aa.execute(a.norm),a.squeeze=Oe(a.res,[0]),[a.bgRaw,a.fgRaw]=Na(a.squeeze,2),a.fg=Uh(a.fgRaw),a.mul=te(a.fg,ze.tf255),a.expand=Wt(a.mul,2),a.output=fe.resizeBilinear(a.expand,[e.shape[1]||0,e.shape[2]||0]);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.output],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.output,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}var em={};yr(em,{distance:()=>fx,find:()=>O3e,similarity:()=>D3e});function fx(e,t,a={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let n=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-a)/(n-a);return Math.max(Math.min(s,1),0)};function D3e(e,t,a={order:2,multiplier:25,min:.2,max:.8}){let n=fx(e,t,a);return SS(n,a.order||2,a.min||0,a.max||1)}function O3e(e,t,a={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let n=Number.MAX_SAFE_INTEGER,r=-1;for(let i=0;ifc,validateModel:()=>om});var CS=.005,on={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function gx(e){for(let t of dx){let a=e.keypoints.findIndex(r=>r.part===t[0]),n=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[0]r&&r.part===t[0]),n=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[a]&&e.keypoints[n]&&e.keypoints[a].position[1]u&&u.part===t[0]),r=e.keypoints.findIndex(u=>u&&u.part===t[1]),s=e.keypoints.findIndex(u=>u&&u.part===a[0]),i=e.keypoints.findIndex(u=>u&&u.part===a[1]);if(!e.keypoints[s]||!e.keypoints[i])continue;let o=e.keypoints[n]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[n].position[0]),Math.abs(e.keypoints[i].position[0]-e.keypoints[n].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[i].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(o[0]>o[1]||l[0]>l[1]){let u=e.keypoints[n];e.keypoints[n]=e.keypoints[r],e.keypoints[r]=u}}}function TS(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],a.pad=ir(e,on.padding),a.resize=fe.resizeBilinear(a.pad,[t,t]);let n=Ue(a.resize,"int32");return Object.keys(a).forEach(i=>J(a[i])),n}function RS(e,t){e.keypoints=e.keypoints.filter(n=>n==null?void 0:n.position);for(let n of e.keypoints)n.position=[n.position[0]*(t[0]+on.padding[2][0]+on.padding[2][1])/t[0]-on.padding[2][0],n.position[1]*(t[1]+on.padding[1][0]+on.padding[1][1])/t[1]-on.padding[1][0]],n.positionRaw=[n.position[0]/t[0],n.position[1]/t[1]];let a=vs(e.keypoints.map(n=>n.position),t);return e.box=a.box,e.boxRaw=a.boxRaw,e}var jt,tm=0,yx=Number.MAX_SAFE_INTEGER,Sl={boxes:[],bodies:[],last:0};async function ES(e){var t;return ne.initial&&(jt=null),jt?e.debug&&K("cached model:",jt.modelUrl):(b0(["size"],e),jt=await $e(e.body.modelPath)),tm=jt!=null&&jt.executor&&((t=jt==null?void 0:jt.inputs)!=null&&t[0].shape)?jt.inputs[0].shape[2]:0,tm<64&&(tm=256),B().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B().set("WEBGL_USE_SHAPES_UNIFORMS",!1),jt}function L3e(e,t,a){let n=e[0][0],r=[],s=0;for(let p=0;pt.body.minConfidence){let c=[n[p][1],n[p][0]];r.push({score:Math.round(100*s)/100,part:J0[p],positionRaw:c,position:[Math.round((a.shape[2]||0)*c[0]),Math.round((a.shape[1]||0)*c[1])]})}s=r.reduce((p,c)=>c.score>p?c.score:p,0);let i=[],o=vs(r.map(p=>p.position),[a.shape[2],a.shape[1]]),l={};for(let[p,c]of Object.entries(Q0)){let d=[];for(let h=0;hg.part===c[h]),f=r.find(g=>g.part===c[h+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&d.push([m.position,f.position])}l[p]=d}let u={id:0,score:s,box:o.box,boxRaw:o.boxRaw,keypoints:r,annotations:l};return gx(u),i.push(u),i}function W3e(e,t,a){let n=[];for(let r=0;rt.body.minConfidence){let o=[];for(let d=0;d<17;d++){let h=s[3*d+2];if(h>t.body.minConfidence){let m=[s[3*d+1],s[3*d+0]];o.push({part:J0[d],score:Math.round(100*h)/100,positionRaw:m,position:[Math.round((a.shape[2]||0)*m[0]),Math.round((a.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],u=[Math.trunc(l[0]*(a.shape[2]||0)),Math.trunc(l[1]*(a.shape[1]||0)),Math.trunc(l[2]*(a.shape[2]||0)),Math.trunc(l[3]*(a.shape[1]||0))],p={};for(let[d,h]of Object.entries(Q0)){let m=[];for(let f=0;fx.part===h[f]),y=o.find(x=>x.part===h[f+1]);g&&y&&g.score>(t.body.minConfidence||0)&&y.score>(t.body.minConfidence||0)&&m.push([g.position,y.position])}p[d]=m}let c={id:r,score:i,box:u,boxRaw:l,keypoints:[...o],annotations:p};gx(c),n.push(c)}}return n.sort((r,s)=>s.score-r.score),n.length>t.body.maxDetected&&(n.length=t.body.maxDetected),n}async function xx(e,t){var r;if(!(jt!=null&&jt.executor)||!((r=jt==null?void 0:jt.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(Sl.boxes.length=0),yx++;let a=(t.body.skipTime||0)>ae()-Sl.last,n=yx<(t.body.skipFrames||0);return t.skipAllowed&&a&&n?Sl.bodies:new Promise(async s=>{let i={};yx=0,i.input=NS(e,tm),i.res=jt==null?void 0:jt.execute(i.input),Sl.last=ae();let o=await i.res.array();Sl.bodies=i.res.shape[2]===17?L3e(o,t,e):W3e(o,t,e);for(let l of Sl.bodies)RS(l,[e.shape[2]||1,e.shape[1]||1]),TS(l.keypoints);Object.keys(i).forEach(l=>J(i[l])),s(Sl.bodies)})}var _n,am=[],$S=0,Ax=Number.MAX_SAFE_INTEGER,rm=0,nm=2.5;async function PS(e){if(!_n||ne.initial){_n=await $e(e.object.modelPath);let t=_n!=null&&_n.executor?Object.values(_n.modelSignature.inputs):void 0;rm=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&K("cached model:",_n.modelUrl);return _n}async function B3e(e,t,a){var u,p;let n=0,r=[],s=rm;for(let c of[1,2,4]){let d=c*13,h=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)===nd.length)),m=await h.array(),f=Oe(e.find(A=>A.shape[1]===d**2&&(A.shape[2]||0)(a.object.minConfidence||0)&&b!==61){let I=(.5+Math.trunc(A%d))/d,T=(.5+Math.trunc(A/d))/d,N=x[A].map(P=>P*(d/c/s)),[M,$]=[I-nm/c*N[0],T-nm/c*N[1]],[E,S]=[I+nm/c*N[2]-M,T+nm/c*N[3]-$],_=[M,$,E,S];_=_.map(P=>Math.max(0,Math.min(P,1)));let O=[_[0]*t[0],_[1]*t[1],_[2]*t[0],_[3]*t[1]],W={id:n++,score:Math.round(100*w)/100,class:b+1,label:nd[b].label,box:O.map(P=>Math.trunc(P)),boxRaw:_};r.push(W)}}J([h,f,g,y])}let i=r.map(c=>[c.boxRaw[1],c.boxRaw[0],c.boxRaw[3],c.boxRaw[2]]),o=r.map(c=>c.score),l=[];if(i&&i.length>0){let c=await fe.nonMaxSuppressionAsync(i,o,a.object.maxDetected||0,a.object.iouThreshold,a.object.minConfidence);l=Array.from(await c.data()),J(c)}return r=r.filter((c,d)=>l.includes(d)).sort((c,d)=>d.score-c.score),r}async function bx(e,t){if(!(_n!=null&&_n.executor))return[];let a=(t.object.skipTime||0)>ae()-$S,n=Ax<(t.object.skipFrames||0);return t.skipAllowed&&a&&n&&am.length>0?(Ax++,am):(Ax=0,!ne.kernels.includes("mod")||!ne.kernels.includes("sparsetodense")?am:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],i=fe.resizeBilinear(e,[rm,rm],!1),o=ve(i,ze.tf255),l=Qs(o,[0,3,1,2]),u;t.object.enabled&&(u=_n.execute(l)),$S=ae();let p=await B3e(u,s,t);am=p,J([i,o,l,...u]),r(p)}))}var mc=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],V3e=mc.length,hc=mc.reduce((e,t,a)=>(e[t]=a,e),{}),U3e=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],W6e=U3e.map(([e,t])=>[hc[e],hc[t]]),FS=[["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"]];function DS(e){let t=e.reduce(({maxX:a,maxY:n,minX:r,minY:s},{position:{x:i,y:o}})=>({maxX:Math.max(a,i),maxY:Math.max(n,o),minX:Math.min(r,i),minY:Math.min(s,o)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function OS(e,[t,a],[n,r]){let s=t/n,i=a/r,o=(u,p)=>({id:p,score:u.score,boxRaw:[u.box[0]/r,u.box[1]/n,u.box[2]/r,u.box[3]/n],box:[Math.trunc(u.box[0]*i),Math.trunc(u.box[1]*s),Math.trunc(u.box[2]*i),Math.trunc(u.box[3]*s)],keypoints:u.keypoints.map(({score:c,part:d,position:h})=>({score:c,part:d,position:[Math.trunc(h.x*i),Math.trunc(h.y*s)],positionRaw:[h.x/n,h.y/n]})),annotations:{}});return e.map((u,p)=>o(u,p))}var sm=class{constructor(t,a){he(this,"priorityQueue");he(this,"numberOfElements");he(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=a}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let a=2*t;if(aa?a:e}function zS(e,t,a,n){let r=a-e,s=n-t;return r*r+s*s}function Ix(e,t){return{x:e.x+t.x,y:e.y+t.y}}var ln,H3e=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],im=1,cd=16,j3e=50**2;function LS(e,t,a,n,r,s,i=2){let o=y=>({y:s.get(y.y,y.x,e),x:s.get(y.y,y.x,s.shape[2]/2+e)}),l=(y,x,A)=>({y:kx(Math.round(y.y/cd),0,x-1),x:kx(Math.round(y.x/cd),0,A-1)}),[u,p]=n.shape,c=l(t.position,u,p),d=o(c),m=Ix(t.position,d);for(let y=0;y[hc[d],hc[h]]),i=s.map(([,d])=>d),o=s.map(([d])=>d),l=t.shape[2],u=i.length,p=new Array(l),c=wx(e.part,cd,a);p[e.part.id]={score:e.score,part:mc[e.part.id],position:c};for(let d=u-1;d>=0;--d){let h=i[d],m=o[d];p[h]&&!p[m]&&(p[m]=LS(d,p[h],m,t,a,r))}for(let d=0;dt){o=!1;break}if(!o)break}return o}function K3e(e,t){let[a,n,r]=t.shape,s=new sm(a*n*r,({score:i})=>i);for(let i=0;i{var i;let s=(i=r[n])==null?void 0:i.position;return s?zS(a,t,s.y,s.x)<=j3e:!1})}function Y3e(e,t){return t.reduce((n,{position:r,score:s},i)=>(WS(e,r,i)||(n+=s),n),0)/t.length}function Z3e(e,t,a,n,r,s){let i=[],o=K3e(s,t);for(;i.lengthh.score>s);let c=Y3e(i,p),d=DS(p);c>s&&i.push({keypoints:p,box:d,score:Math.round(100*c)/100})}return i}async function Sx(e,t){if(!(ln!=null&&ln.executor))return[];let a=De(()=>{if(!ln.inputs[0].shape)return[];let i=fe.resizeBilinear(e,[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]),o=xe(ve(Ue(i,"float32"),127.5),1),u=ln.execute(o,H3e).map(p=>Oe(p,[0]));return u[1]=za(u[1]),u}),n=await Promise.all(a.map(i=>i.buffer()));for(let i of a)J(i);let r=Z3e(n[0],n[1],n[2],n[3],t.body.maxDetected,t.body.minConfidence);return ln.inputs[0].shape?OS(r,[e.shape[1],e.shape[2]],[ln.inputs[0].shape[2],ln.inputs[0].shape[1]]):[]}async function BS(e){return!ln||ne.initial?ln=await $e(e.body.modelPath):e.debug&&K("cached model:",ln.modelUrl),ln}var cr,J3e=["fgr","pha","r1o","r2o","r3o","r4o"],qt={},Tx=0;function GS(e){J([qt.r1i,qt.r2i,qt.r3i,qt.r4i,qt.downsample_ratio]),qt.r1i=Ve(0),qt.r2i=Ve(0),qt.r3i=Ve(0),qt.r4i=Ve(0),Tx=e.segmentation.ratio||.5,qt.downsample_ratio=Ve(Tx)}async function Nx(e){return!cr||ne.initial?cr=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",cr.modelUrl),GS(e),cr}var US=e=>De(()=>{let t=Oe(e,[0]),a=te(t,ze.tf255);return Ue(a,"int32")});function Cx(e,t){let a=e?US(e):sr([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),n=t?US(t):sr([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=lt([a,n],-1);return J([a,n]),r}function Q3e(e){return De(()=>{let t={};return t.unstack=Na(e,-1),t.concat=lt(t.unstack,1),t.split=Sa(t.concat,4,1),t.stack=lt(t.split,2),t.squeeze=Oe(t.stack,[0]),t.expand=Wt(t.squeeze,-1),t.add=we(t.expand,1),t.mul=te(t.add,127.5),t.cast=Ue(t.mul,"int32"),t.tile=Xr(t.cast,[1,1,3]),t.alpha=sr([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),lt([t.tile,t.alpha],-1)})}async function HS(e,t){if(cr||(cr=await Nx(t)),!(cr!=null&&cr.executor))return null;qt.src=ve(e,255),Tx!==t.segmentation.ratio&&GS(t);let[a,n,r,s,i,o]=await cr.executeAsync(qt,J3e),l;switch(t.segmentation.mode||"default"){case"default":l=Cx(a,n);break;case"alpha":l=Cx(null,n);break;case"foreground":l=Cx(a,null);break;case"state":l=Q3e(r);break;default:l=Ve(0)}return J([qt.src,a,n,qt.r1i,qt.r2i,qt.r3i,qt.r4i]),[qt.r1i,qt.r2i,qt.r3i,qt.r4i]=[r,s,i,o],l}var ba;async function Rx(e){return!ba||ne.initial?ba=await $e(e.segmentation.modelPath):e.debug&&K("cached model:",ba.modelUrl),ba}async function qS(e,t){var r;if(ba||(ba=await Rx(t)),!(ba!=null&&ba.executor)||!((r=ba==null?void 0:ba.inputs)!=null&&r[0].shape))return null;let a={};a.resize=fe.resizeBilinear(e,[ba.inputs[0].shape?ba.inputs[0].shape[1]:0,ba.inputs[0].shape?ba.inputs[0].shape[2]:0],!1),a.norm=ve(a.resize,ze.tf255),a.res=ba.execute(a.norm),a.squeeze=Oe(a.res,[0]),a.alpha=fe.resizeBilinear(a.squeeze,[e.shape[1]||0,e.shape[2]||0]),a.mul=te(a.alpha,ze.tf255);let n;switch(t.segmentation.mode||"default"){case"default":a.input=Oe(e),a.concat=lt([a.input,a.mul],-1),n=Ue(a.concat,"int32");break;case"alpha":n=Ue(a.mul,"int32");break;default:n=Ve(0)}return Object.keys(a).forEach(s=>J(a[s])),n}function om(e,t,a){var u,p;if(!t||!((u=e==null?void 0:e.config)!=null&&u.validateModels))return null;let n=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],i=[],o=t.modelUrl,l=t.executor;if((p=l==null?void 0:l.graph)!=null&&p.nodes)for(let c of Object.values(l.graph.nodes)){let d=c.op.toLowerCase();s.includes(d)||s.push(d)}else!l&&e.config.debug&&K("model not loaded",a);for(let c of s)!n.includes(c)&&!r.includes(c)&&!e.env.kernels.includes(c)&&!e.env.kernels.includes(c.replace("_",""))&&!e.env.kernels.includes(c.replace("native",""))&&!e.env.kernels.includes(c.replace("v2",""))&&i.push(c);return e.config.debug&&i.length>0&&K("model validation failed:",a,i),i.length>0?{name:a,missing:i,ops:s,url:o}:null}var fc=class{constructor(t){he(this,"instance");he(this,"models",{});this.models={},this.instance=t}stats(){let t=0,a=0,n=0;for(let s of Object.values(ya))t+=s.sizeFromManifest,a+=s.sizeLoadedWeights,n+=s.sizeDesired;let r=n>0?a/n:0;return{numLoadedModels:Object.values(ya).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:a,totalSizeLoading:n,modelStats:Object.values(ya)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var n,r,s,i,o,l,u,p,c,d,h,m,f,g,y,x,A,b,w,I,T,N,M,$,E,S,_;ne.initial&&this.reset(),t&&(this.instance=t);let a={};a.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?V9(this.instance.config):null,a.antispoof=this.instance.config.face.enabled&&((n=this.instance.config.face.antispoof)!=null&&n.enabled)&&!this.models.antispoof?hI(this.instance.config):null,a.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?yI(this.instance.config):null,a.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?lI(this.instance.config):null,a.emotion=this.instance.config.face.enabled&&((i=this.instance.config.face.emotion)!=null&&i.enabled)&&!this.models.emotion?rI(this.instance.config):null,a.iris=this.instance.config.face.enabled&&((o=this.instance.config.face.iris)!=null&&o.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?X9(this.instance.config):null,a.facemesh=this.instance.config.face.enabled&&((u=this.instance.config.face.mesh)!=null&&u.enabled)&&!this.models.facemesh?Q9(this.instance.config):null,a.gear=this.instance.config.face.enabled&&((p=this.instance.config.face.gear)!=null&&p.enabled)&&!this.models.gear?vI(this.instance.config):null,a.ssrnetage=this.instance.config.face.enabled&&((c=this.instance.config.face.ssrnet)!=null&&c.enabled)&&!this.models.ssrnetage?SI(this.instance.config):null,a.ssrnetgender=this.instance.config.face.enabled&&((d=this.instance.config.face.ssrnet)!=null&&d.enabled)&&!this.models.ssrnetgender?RI(this.instance.config):null,a.mobilefacenet=this.instance.config.face.enabled&&((h=this.instance.config.face.mobilefacenet)!=null&&h.enabled)&&!this.models.mobilefacenet?_I(this.instance.config):null,a.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?LI(this.instance.config):null,a.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?k9(this.instance.config):null,a.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?w9(this.instance.config):null,a.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((g=this.instance.config.body.modelPath)!=null&&g.includes("efficientpose"))?R9(this.instance.config):null,a.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((y=this.instance.config.body.modelPath)!=null&&y.includes("movenet"))?ES(this.instance.config):null,a.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((x=this.instance.config.body.modelPath)!=null&&x.includes("posenet"))?BS(this.instance.config):null,a.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(A=this.instance.config.hand.detector)==null?void 0:A.modelPath)!=null&&b.includes("handtrack"))?AS(this.instance.config):null,a.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((I=(w=this.instance.config.hand.detector)==null?void 0:w.modelPath)!=null&&I.includes("handtrack"))?bS(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((N=(T=this.instance.config.hand.detector)==null?void 0:T.modelPath)!=null&&N.includes("handdetect"))&&(a.handdetect=hS(this.instance.config),a.handskeleton=mS(this.instance.config)),a.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((M=this.instance.config.object.modelPath)!=null&&M.includes("centernet"))?C9(this.instance.config):null,a.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&(($=this.instance.config.object.modelPath)!=null&&$.includes("nanodet"))?PS(this.instance.config):null,a.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&((E=this.instance.config.segmentation.modelPath)!=null&&E.includes("selfie"))?Rx(this.instance.config):null,a.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((S=this.instance.config.segmentation.modelPath)!=null&&S.includes("meet"))?mx(this.instance.config):null,a.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((_=this.instance.config.segmentation.modelPath)!=null&&_.includes("rvm"))?Nx(this.instance.config):null;for(let[O,W]of Object.entries(a))W!=null&&W.then&&W.then(P=>this.models[O]=P);await Promise.all(Object.values(a))}list(){let t=Object.keys(this.models).map(a=>{var n;return{name:a,loaded:this.models[a]!==null,size:0,url:this.models[a]?(n=this.models[a])==null?void 0:n.modelUrl:null}});for(let a of t){let n=Object.keys(ya).find(r=>r.startsWith(a.name));n&&(a.size=ya[n].sizeLoadedWeights,a.url=ya[n].url)}return t}loaded(){return this.list().filter(n=>n.loaded).map(n=>n.name)}validate(){let t=[];for(let a of Object.keys(this.models)){let n=this.models[a];if(!n)continue;let r=om(this.instance,n,a);r&&t.push(r)}return t}};function KS(e,t,a,n,r){var o,l,u,p,c,d;let s=0,i=[];for(let h of e){let m={id:s++,face:h,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)h.box[0]>b.box[0]&&h.box[0]b.box[1]&&h.box[1]+h.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),g.push(b[1],b[1]+b[3]))};y(m.face.box),y((p=m.body)==null?void 0:p.box),y((c=m.hands.left)==null?void 0:c.box),y((d=m.hands.right)==null?void 0:d.box);let x=Math.min(...f),A=Math.min(...g);m.box=[x,A,Math.max(...f)-x,Math.max(...g)-A],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),i.push(m)}return i}var lm=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob @@ -8788,7 +8788,7 @@ PQ4GJ+ashuK0MhWaoWcA0AaOmASMK7jRNPWYBmHyiuepO2x10qfcv6vYxCzYqoGK4HVYVTJrmb5l c6oaM5TUJ8EgGsG4kLNUHT0M64OaqMMikSRsuKbnFMRLG3zVehOaGNE445NNlnVFpDMu6uie9Vo1 8z5mOAOST2pDK91cNN+5tsrH3PrW54a06KxT7fdrlh/q1Pc+tJ6IUdZGvHPLezMcnBOWbsPap5r3 ylFtbdT1xUWNWzU0/Zbwlgfmx8zGsHWtRHmMqE59aAMyNifvHPc1f0gtPdqkY5JosJHeNci2tktY -euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,fm=` +euPnNY+oXWZEVJNrZ9aun8SIq/CzodHuriIokhDIR1ronbKZr0o6o8ipoz//2Q==`,um=` /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAsICAoIBwsKCQoNDAsNERwSEQ8PESIZGhQcKSQrKigk JyctMkA3LTA9MCcnOEw5PUNFSElIKzZPVU5GVEBHSEX/2wBDAQwNDREPESESEiFFLicuRUVFRUVF RUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUX/wAARCASwBLADASIA @@ -9356,4 +9356,4 @@ AAAAAAJAAAAAAAAAAAAAABAJEAAAAAAAAAAAAAAAIEoBKAAAAAAAAAAAAAAABAlAAAAAAAIAAAAA BAkBAkBAkBAlACEgMZjdjbFW8bWrEx8YWANb6Fp+bfwab+vLDKMFK9qxH5L0bAr8OPRPKz2AY7J2 SbAjYZAI2E7AIEgIEgIEgMdkSy2NgY7MdlmyNoBXsxmFuyNgVTVjNV3KjlBRNTlXTVHKCrlIqt5T lBhEMohlFerLlBjEMohMVTEARDKCITsAk2AEgAAAkAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAD/ -2Q==`;async function Fxe(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(i=>i.blob()),a,n;switch(e.config.warmup){case"face":a=await t(mm);break;case"body":case"full":a=await t(fm);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function $xe(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+mm;break;case"full":case"body":a="data:image/jpeg;base64,"+fm;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else{t(void 0);return}n.onload=async()=>{let r=Dn(n.naturalWidth,n.naturalHeight);if(!r)K("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(n,0,0);let i=await e.image(r,!0),o=i.tensor?await e.detect(i.tensor,e.config):void 0;t(o)}},a?n.src=a:t(void 0)})}async function Dxe(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(mm):a=t(fm);let n;if("node"in Ye&&ea()==="tensorflow"){let r=py.decodeJpeg(a),s=Bt(r,0);e.tf.dispose(r),n=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&K("Warmup tfjs-node not loaded");return n}async function Pxe(e){let t;return typeof createImageBitmap=="function"?t=await Fxe(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await $xe(e):t=await Dxe(e),t}async function _xe(e){var o,l,u,d;if(!B().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=ea(),a=Gn();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;B().set("ENGINE_COMPILE_ONLY",!0);let n=St().state.numTensors,r=[];for(let[c,p]of Object.entries(e.models.models)){if(!p)continue;let h=p!=null&&p.modelSignature&&((l=(o=p==null?void 0:p.inputs)==null?void 0:o[0])!=null&&l.shape)?[...p.inputs[0].shape]:[1,64,64,3],m=p!=null&&p.modelSignature&&((d=(u=p==null?void 0:p.inputs)==null?void 0:u[0])!=null&&d.dtype)?p.inputs[0].dtype:"float32";for(let g=0;gJ(y)):J(g)}catch(g){e.config.debug&&K("compile fail model:",c)}J(f)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),B().set("ENGINE_COMPILE_ONLY",!1);let i=St().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function zT(e,t){await hc(e,!1);let a=ae();return e.state="warmup",t&&(e.config=Mt(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?fr():new Promise(async n=>{await e.models.load(),await _xe(e);let r=await Pxe(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var Ad,wc,kc,gm,ri,Ux=class{constructor(t){he(this,"version");he(this,"config");he(this,"result");he(this,"state");he(this,"process");he(this,"tf");he(this,"env",ne);he(this,"draw",F0);he(this,"match",im);he(this,"models");he(this,"events");he(this,"faceTriangulation");he(this,"faceUVMap");he(this,"performance");Yn(this,Ad,void 0);Yn(this,wc,void 0);Yn(this,kc,void 0);he(this,"analyze",(...t)=>{if(!Xa(this,wc))return;let a=this.tf.engine().state.numTensors,n=Xa(this,Ad);wr(this,Ad,a);let r=a-n;r!==0&&K(...t,r)});Yn(this,gm,t=>{if(!Xa(this,kc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof yt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});he(this,"webcam",new S0);he(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});Yn(this,ri,{});let a=(lc.tfjs||m3).replace(/-(.*)/,"");yl.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,yl.modelBasePath=ne.browser?"../models/":"file://models/",this.version=yy,Object.defineProperty(this,"version",{value:yy}),this.config=JSON.parse(JSON.stringify(yl)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Mt(this.config,t)),K9(this.config),this.tf=Ye,this.state="idle",wr(this,Ad,0),wr(this,wc,!1),wr(this,kc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new vc(this),Iy(),this.result=fr(),this.process={tensor:null,canvas:null},this.faceTriangulation=VI,this.faceUVMap=UI,hm(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&K(`version: ${this.version}`),this.config.debug&&K(`tfjs version: ${this.tf.version["tfjs-core"]}`);let n=JSON.parse(JSON.stringify(this.env));delete n.kernels,delete n.initial,delete n.perfadd,this.config.debug&&K("environment:",n)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(yl)),this.config.backend=t,fy(),ne.initial=!0}validate(t){let a=cy(yl,t||this.config);return a.length===0&&(this.config=Mt(this.config,t)),a}now(){return ae()}image(t,a=!1){return k0(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Mt(this.config,a)),!this.config.segmentation.enabled)return null;let n=await k0(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await $T(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await pT(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await PT(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return X9(this.config,t,a)}async init(){await hc(this,!0),await this.tf.ready(),fy()}async load(t){this.state="load";let a=ae(),n=Object.values(this.models.models).filter(i=>i).length;t&&(this.config=Mt(this.config,t)),this.env.initial&&(await hc(this,!1)||K("error: backend check failed"),await Vp(),this.env.browser&&(this.config.debug&&K("configuration:",this.config),this.config.debug&&K("tf flags:",this.tf.ENV.flags))),await this.models.load(this),this.env.initial&&this.config.debug&&K("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models.models).filter(i=>i).length!==n&&(this.models.validate(),this.emit("load"));let s=Math.trunc(ae()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return dT(t,this.config)}async warmup(t){let a=ae(),n=await zT(this,t),r=ae();return this.performance.warmup=Math.trunc(r-a),n}async profile(t,a){let n=await this.tf.profile(()=>this.detect(t,a)),r={},s=0;for(let o of n.kernels){let l=Number(o.kernelTimeMs)||0;r[o.name]?r[o.name]+=l:r[o.name]=l,s+=l}let i=[];Object.entries(r).forEach(o=>i.push({kernel:o[0],time:o[1],perc:0}));for(let o of i)o.perc=Math.round(1e3*o.time/s)/1e3,o.time=Math.round(1e3*o.time)/1e3;return i.sort((o,l)=>l.time-o.time),i.length=20,i}async detect(t,a){return this.state="detect",new Promise(async n=>{var g,y,x,A,b,w,S,C,N,M,F,E,T,D,O,W,$,U,G,q,H;this.state="config";let r;this.config=Mt(this.config,a),this.state="check";let s=Xa(this,gm).call(this,t);s&&(K(s,t),this.emit("error"),n(fr(s)));let i=ae();await this.load(),r=ae(),this.state="image";let o=await k0(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(fr("could not convert input to tensor"));return}this.emit("image"),r=ae(),this.config.skipAllowed=await q9(this.config,o.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Check Changed:");let l=[],u=[],d=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?cx(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await cx(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let p=this.config.body.maxDetected===-1?Mt(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((g=this.config.body.modelPath)!=null&&g.includes("posenet")?u=this.config.body.enabled?Ox(o.tensor,p):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?Ry(o.tensor,p):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?_y(o.tensor,p):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?Ex(o.tensor,p):[]),this.performance.body&&delete this.performance.body):(r=ae(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await Ox(o.tensor,p):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await Ry(o.tensor,p):[]:(S=this.config.body.modelPath)!=null&&S.includes("efficientpose")?u=this.config.body.enabled?await _y(o.tensor,p):[]:(C=this.config.body.modelPath)!=null&&C.includes("movenet")&&(u=this.config.body.enabled?await Ex(o.tensor,p):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Mt(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((M=(N=this.config.hand.detector)==null?void 0:N.modelPath)!=null&&M.includes("handdetect")?d=this.config.hand.enabled?xx(o.tensor,h):[]:(E=(F=this.config.hand.detector)==null?void 0:F.modelPath)!=null&&E.includes("handtrack")&&(d=this.config.hand.enabled?vx(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=ae(),(D=(T=this.config.hand.detector)==null?void 0:T.modelPath)!=null&&D.includes("handdetect")?d=this.config.hand.enabled?await xx(o.tensor,h):[]:(W=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&W.includes("handtrack")&&(d=this.config.hand.enabled?await vx(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?(($=this.config.object.modelPath)!=null&&$.includes("nanodet")?c=this.config.object.enabled?Fx(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?Fy(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=ae(),(G=this.config.object.modelPath)!=null&&G.includes("nanodet")?c=this.config.object.enabled?await Fx(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await Fy(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,u,d,c]=await Promise.all([l,u,d,c])),this.state="detect:gesture";let m=[];this.config.gesture.enabled&&(r=ae(),m=[...WS(l),...LS(u),...VS(d),...BS(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(ae()-i):Math.trunc(ae()-i);let f=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:d,gesture:m,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return OT(l,u,d,m,f)}},J(o.tensor),this.emit("detect"),this.state="idle",n(this.result)})}async sleep(t){return new Promise(a=>{setTimeout(a,t)})}async video(t,a=!0,n=0){a?(Xa(this,ri)[t.id]||(this.config.debug&&K("video start",t.id),Xa(this,ri)[t.id]=!0),!t.paused&&Xa(this,ri)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),Xa(this,ri)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),Xa(this,ri)[t.id]=!1)}};Ad=new WeakMap,wc=new WeakMap,kc=new WeakMap,gm=new WeakMap,ri=new WeakMap;return kC(zxe);})(); +2Q==`;async function aye(e){let t=(r,s="application/octet-stream")=>fetch(`data:${s};base64,${r}`).then(i=>i.blob()),a,n;switch(e.config.warmup){case"face":a=await t(lm);break;case"body":case"full":a=await t(um);break;default:a=null}if(a){let r=await createImageBitmap(a);n=await e.detect(r,e.config),r.close()}return n}async function nye(e){return new Promise(t=>{let a;switch(e.config.warmup){case"face":a="data:image/jpeg;base64,"+lm;break;case"full":case"body":a="data:image/jpeg;base64,"+um;break;default:a=""}let n;if(typeof Image!="undefined")n=new Image;else if(ne.Image)n=new ne.Image;else{t(void 0);return}n.onload=async()=>{let r=Mn(n.naturalWidth,n.naturalHeight);if(!r)K("Warmup: Canvas not found"),t(void 0);else{let s=r.getContext("2d");s&&s.drawImage(n,0,0);let i=await e.image(r,!0),o=i.tensor?await e.detect(i.tensor,e.config):void 0;t(o)}},a?n.src=a:t(void 0)})}async function rye(e){let t=r=>Buffer.from(r,"base64"),a;e.config.warmup==="face"?a=t(lm):a=t(um);let n;if("node"in Ke&&Qt()==="tensorflow"){let r=Q3.decodeJpeg(a),s=Wt(r,0);e.tf.dispose(r),n=await e.detect(s,e.config),e.tf.dispose(s)}else e.config.debug&&K("Warmup tfjs-node not loaded");return n}async function sye(e){let t;return typeof createImageBitmap=="function"?t=await aye(e):typeof Image!="undefined"||ne.Canvas!==void 0?t=await nye(e):t=await rye(e),t}async function iye(e){var o,l,u,p;if(!B().flagRegistry.ENGINE_COMPILE_ONLY)return;let t=Qt(),a=Bn();if(t!=="webgl"&&t!=="humangl"||!(a!=null&&a.checkCompileCompletion))return;B().set("ENGINE_COMPILE_ONLY",!0);let n=It().state.numTensors,r=[];for(let[c,d]of Object.entries(e.models.models)){if(!d)continue;let h=d!=null&&d.modelSignature&&((l=(o=d==null?void 0:d.inputs)==null?void 0:o[0])!=null&&l.shape)?[...d.inputs[0].shape]:[1,64,64,3],m=d!=null&&d.modelSignature&&((p=(u=d==null?void 0:d.inputs)==null?void 0:u[0])!=null&&p.dtype)?d.inputs[0].dtype:"float32";for(let g=0;gJ(y)):J(g)}catch(g){e.config.debug&&K("compile fail model:",c)}J(f)}let s=await a.checkCompileCompletionAsync();a.getUniformLocations(),e.config.debug&&K("compile pass:",{models:r,kernels:s.length}),B().set("ENGINE_COMPILE_ONLY",!1);let i=It().state.numTensors;i-n>0&&K("tensor leak:",i-n)}async function YS(e,t){await oc(e,!1);let a=ae();return e.state="warmup",t&&(e.config=Et(e.config,t)),!e.config.warmup||e.config.warmup.length===0||e.config.warmup==="none"?pr():new Promise(async n=>{await e.models.load(),await iye(e);let r=await sye(e),s=ae();e.config.debug&&K("warmup",e.config.warmup,Math.round(s-a),"ms"),e.emit("warmup"),n(r)})}var hd,gc,yc,dm,Ps,Mx=class{constructor(t){he(this,"version");he(this,"config");he(this,"result");he(this,"state");he(this,"process");he(this,"tf");he(this,"env",ne);he(this,"draw",C0);he(this,"match",em);he(this,"models");he(this,"events");he(this,"faceTriangulation");he(this,"faceUVMap");he(this,"performance");qn(this,hd,void 0);qn(this,gc,void 0);qn(this,yc,void 0);he(this,"analyze",(...t)=>{if(!qa(this,gc))return;let a=this.tf.engine().state.numTensors,n=qa(this,hd);xr(this,hd,a);let r=a-n;r!==0&&K(...t,r)});qn(this,dm,t=>{if(!qa(this,yc))return null;if(!t)return"input is not defined";if(this.env.node&&!(t instanceof yt))return"input must be a tensor";try{this.tf.getBackend()}catch(a){return"backend not loaded"}return null});he(this,"webcam",new A0);he(this,"emit",t=>{var a;(a=this.events)!=null&&a.dispatchEvent&&this.events.dispatchEvent(new Event(t))});qn(this,Ps,{});let a=(ac.tfjs||i3).replace(/-(.*)/,"");dl.wasmPath=`https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@${a}/dist/`,dl.modelBasePath=ne.browser?"../models/":"file://models/",this.version=sy,Object.defineProperty(this,"version",{value:sy}),this.config=JSON.parse(JSON.stringify(dl)),Object.seal(this.config),this.config.cacheModels=typeof indexedDB!="undefined",t&&(this.config=Et(this.config,t)),o9(this.config),this.tf=Ke,this.state="idle",xr(this,hd,0),xr(this,gc,!1),xr(this,yc,!1),this.performance={},this.events=typeof EventTarget!="undefined"?new EventTarget:void 0,this.models=new fc(this),cy(),this.result=pr(),this.process={tensor:null,canvas:null},this.faceTriangulation=eI,this.faceUVMap=tI,om(this,null,""),this.emit("create"),(this.config.debug||this.env.browser)&&K(`version: ${this.version}`),this.config.debug&&K(`tfjs version: ${this.tf.version["tfjs-core"]}`);let n=JSON.parse(JSON.stringify(this.env));delete n.kernels,delete n.initial,delete n.perfadd,this.config.debug&&K("environment:",n)}reset(){let t=this.config.backend;this.config=JSON.parse(JSON.stringify(dl)),this.config.backend=t,ny(),ne.initial=!0}validate(t){let a=ey(dl,t||this.config);return a.length===0&&(this.config=Et(this.config,t)),a}now(){return ae()}image(t,a=!1){return y0(t,this.config,a)}async segmentation(t,a){var s,i,o;if(a&&(this.config=Et(this.config,a)),!this.config.segmentation.enabled)return null;let n=await y0(t,this.config);if(!n.tensor)return null;let r=null;return(s=this.config.segmentation.modelPath)!=null&&s.includes("rvm")&&(r=await HS(n.tensor,this.config)),(i=this.config.segmentation.modelPath)!=null&&i.includes("meet")&&(r=await kS(n.tensor,this.config)),(o=this.config.segmentation.modelPath)!=null&&o.includes("selfie")&&(r=await qS(n.tensor,this.config)),J(n.tensor),r}compare(t,a){return i9(this.config,t,a)}async init(){await oc(this,!0),await this.tf.ready(),ny()}async load(t){this.state="load";let a=ae(),n=Object.values(this.models.models).filter(i=>i).length;t&&(this.config=Et(this.config,t)),this.env.initial&&(await oc(this,!1)||K("error: backend check failed"),await Dp(),this.env.browser&&(this.config.debug&&K("configuration:",this.config),this.config.debug&&K("tf flags:",this.tf.ENV.flags))),await this.models.load(this),this.env.initial&&this.config.debug&&K("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.env.initial=!1,Object.values(this.models.models).filter(i=>i).length!==n&&(this.models.validate(),this.emit("load"));let s=Math.trunc(ae()-a);s>(this.performance.loadModels||0)&&(this.performance.loadModels=this.env.perfadd?(this.performance.loadModels||0)+s:s)}next(t=this.result){return wS(t,this.config)}async warmup(t){let a=ae(),n=await YS(this,t),r=ae();return this.performance.warmup=Math.trunc(r-a),n}async profile(t,a){let n=await this.tf.profile(()=>this.detect(t,a)),r={},s=0;for(let o of n.kernels){let l=Number(o.kernelTimeMs)||0;r[o.name]?r[o.name]+=l:r[o.name]=l,s+=l}let i=[];Object.entries(r).forEach(o=>i.push({kernel:o[0],time:o[1],perc:0}));for(let o of i)o.perc=Math.round(1e3*o.time/s)/1e3,o.time=Math.round(1e3*o.time)/1e3;return i.sort((o,l)=>l.time-o.time),i.length=20,i}async detect(t,a){return this.state="detect",new Promise(async n=>{var g,y,x,A,b,w,I,T,N,M,$,E,S,_,O,W,P,U,G,q,H;this.state="config";let r;this.config=Et(this.config,a),this.state="check";let s=qa(this,dm).call(this,t);s&&(K(s,t),this.emit("error"),n(pr(s)));let i=ae();await this.load(),r=ae(),this.state="image";let o=await y0(t,this.config);if(this.process=o,this.performance.inputProcess=this.env.perfadd?(this.performance.inputProcess||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Get Image:"),!o.tensor){this.config.debug&&K("could not convert input to tensor"),this.emit("error"),n(pr("could not convert input to tensor"));return}this.emit("image"),r=ae(),this.config.skipAllowed=await s9(this.config,o.tensor),this.config.filter.autoBrightness=(this.config.filter.autoBrightness||!1)&&this.config.skipAllowed,this.performance.totalFrames||(this.performance.totalFrames=0),this.performance.cachedFrames||(this.performance.cachedFrames=0),this.performance.totalFrames++,this.config.skipAllowed&&this.performance.cachedFrames++,this.performance.cacheCheck=this.env.perfadd?(this.performance.cacheCheck||0)+Math.trunc(ae()-r):Math.trunc(ae()-r),this.analyze("Check Changed:");let l=[],u=[],p=[],c=[];this.state="detect:face",this.config.async?(l=this.config.face.enabled?ex(this,o.tensor):[],this.performance.face&&delete this.performance.face):(r=ae(),l=this.config.face.enabled?await ex(this,o.tensor):[],this.performance.face=this.env.perfadd?(this.performance.face||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.config.async&&(this.config.body.maxDetected===-1||this.config.hand.maxDetected===-1)&&(l=await l),this.analyze("Start Body:"),this.state="detect:body";let d=this.config.body.maxDetected===-1?Et(this.config,{body:{maxDetected:this.config.face.enabled?1*l.length:1}}):this.config;this.config.async?((g=this.config.body.modelPath)!=null&&g.includes("posenet")?u=this.config.body.enabled?Sx(o.tensor,d):[]:(y=this.config.body.modelPath)!=null&&y.includes("blazepose")?u=this.config.body.enabled?yy(o.tensor,d):[]:(x=this.config.body.modelPath)!=null&&x.includes("efficientpose")?u=this.config.body.enabled?Iy(o.tensor,d):[]:(A=this.config.body.modelPath)!=null&&A.includes("movenet")&&(u=this.config.body.enabled?xx(o.tensor,d):[]),this.performance.body&&delete this.performance.body):(r=ae(),(b=this.config.body.modelPath)!=null&&b.includes("posenet")?u=this.config.body.enabled?await Sx(o.tensor,d):[]:(w=this.config.body.modelPath)!=null&&w.includes("blazepose")?u=this.config.body.enabled?await yy(o.tensor,d):[]:(I=this.config.body.modelPath)!=null&&I.includes("efficientpose")?u=this.config.body.enabled?await Iy(o.tensor,d):[]:(T=this.config.body.modelPath)!=null&&T.includes("movenet")&&(u=this.config.body.enabled?await xx(o.tensor,d):[]),this.performance.body=this.env.perfadd?(this.performance.body||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.state="detect:hand";let h=this.config.hand.maxDetected===-1?Et(this.config,{hand:{maxDetected:this.config.face.enabled?2*l.length:1}}):this.config;this.config.async?((M=(N=this.config.hand.detector)==null?void 0:N.modelPath)!=null&&M.includes("handdetect")?p=this.config.hand.enabled?ix(o.tensor,h):[]:(E=($=this.config.hand.detector)==null?void 0:$.modelPath)!=null&&E.includes("handtrack")&&(p=this.config.hand.enabled?ux(o.tensor,h):[]),this.performance.hand&&delete this.performance.hand):(r=ae(),(_=(S=this.config.hand.detector)==null?void 0:S.modelPath)!=null&&_.includes("handdetect")?p=this.config.hand.enabled?await ix(o.tensor,h):[]:(W=(O=this.config.hand.detector)==null?void 0:O.modelPath)!=null&&W.includes("handtrack")&&(p=this.config.hand.enabled?await ux(o.tensor,h):[]),this.performance.hand=this.env.perfadd?(this.performance.hand||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Hand:"),this.analyze("Start Object:"),this.state="detect:object",this.config.async?((P=this.config.object.modelPath)!=null&&P.includes("nanodet")?c=this.config.object.enabled?bx(o.tensor,this.config):[]:(U=this.config.object.modelPath)!=null&&U.includes("centernet")&&(c=this.config.object.enabled?by(o.tensor,this.config):[]),this.performance.object&&delete this.performance.object):(r=ae(),(G=this.config.object.modelPath)!=null&&G.includes("nanodet")?c=this.config.object.enabled?await bx(o.tensor,this.config):[]:(q=this.config.object.modelPath)!=null&&q.includes("centernet")&&(c=this.config.object.enabled?await by(o.tensor,this.config):[]),this.performance.object=this.env.perfadd?(this.performance.object||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.analyze("End Object:"),this.state="detect:await",this.config.async&&([l,u,p,c]=await Promise.all([l,u,p,c])),this.state="detect:gesture";let m=[];this.config.gesture.enabled&&(r=ae(),m=[...JI(l),...ZI(u),...eS(p),...QI(l)],this.config.async?this.performance.gesture&&delete this.performance.gesture:this.performance.gesture=this.env.perfadd?(this.performance.gesture||0)+Math.trunc(ae()-r):Math.trunc(ae()-r)),this.performance.total=this.env.perfadd?(this.performance.total||0)+Math.trunc(ae()-i):Math.trunc(ae()-i);let f=((H=this.process.tensor)==null?void 0:H.shape)||[0,0,0,0];this.result={face:l,body:u,hand:p,gesture:m,object:c,performance:this.performance,canvas:this.process.canvas,timestamp:Date.now(),error:null,width:f[2],height:f[1],get persons(){return KS(l,u,p,m,f)}},J(o.tensor),this.emit("detect"),this.state="idle",n(this.result)})}async sleep(t){return new Promise(a=>{setTimeout(a,t)})}async video(t,a=!0,n=0){a?(qa(this,Ps)[t.id]||(this.config.debug&&K("video start",t.id),qa(this,Ps)[t.id]=!0),!t.paused&&qa(this,Ps)[t.id]&&t.readyState>=2&&await this.detect(t),n>0&&await this.sleep(n),qa(this,Ps)[t.id]&&requestAnimationFrame(()=>this.video(t,a,n))):(this.config.debug&&K("video stop",t.id),qa(this,Ps)[t.id]=!1)}};hd=new WeakMap,gc=new WeakMap,yc=new WeakMap,dm=new WeakMap,Ps=new WeakMap;return FC(lye);})(); diff --git a/dist/human.node-gpu.js b/dist/human.node-gpu.js index 3fba301a..1588e06c 100644 --- a/dist/human.node-gpu.js +++ b/dist/human.node-gpu.js @@ -4,7 +4,7 @@ author: ' */ -"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node-gpu"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.14.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());function h(...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)}function O1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var C1=` +"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node-gpu"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());function h(...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)}function O1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var C1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var Qt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Qt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Qt(n,"uniform",this.uniform),Qt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var z2,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.1";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` +`;var Qt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Qt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Qt(n,"uniform",this.uniform),Qt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var z2,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.2";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` `).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function n5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function J1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){n5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oN2[e]),Ga=Ts.map(e=>N2[e]),Va=vs.map(e=>N2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Is=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ls=[[474,475],[475,476],[476,477],[477,474]],Os=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Ls),rightEye:Ie(Os),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),Xa=new Map(Bs),L2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],e2=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],t2=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var q;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!q.drawLabels||((o=q.faceLabels)==null?void 0:o.length)===0)return;let n=q.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);y.length>3&&(y.length=3),n=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],q)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}}function Vs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C @@ -118,7 +118,7 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],c5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function n3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function st(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=X0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],dt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},yt=e=>{let t=lt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},h3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},R3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var M3=6,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function Y3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function zn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function Et(e,t=1.5){let n=C2(e),o=wt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function zt(e){let t=C2(e),n=wt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var _n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=kt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[no]),a.splice(no,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function r1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/qe[1][1],i[1]/qe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Nt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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"]];function Ro(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?Po(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],c5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function n3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function st(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=X0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],dt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},yt=e=>{let t=lt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},h3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},R3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var M3=6,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function Y3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function zn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function Et(e,t=1.5){let n=C2(e),o=wt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function zt(e){let t=C2(e),n=wt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var _n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=kt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[no]),a.splice(no,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function r1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/qe[1][1],i[1]/qe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Nt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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"]];function Ro(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?Po(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/human.node-wasm.js b/dist/human.node-wasm.js index faaddd78..d06dd9e5 100644 --- a/dist/human.node-wasm.js +++ b/dist/human.node-wasm.js @@ -4,7 +4,7 @@ author: ' */ -"use strict";var Fo=Object.create;var w2=Object.defineProperty;var Bo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var Go=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var Zo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var qo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},N1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ho(t))!Vo.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Bo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Fo(Go(e)):{},N1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>N1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Zo(e,typeof t!="symbol"?t+"":t,n),n),O1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(O1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(O1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=qo((ga,z2)=>{"use strict";var Kt=Object.defineProperty,Uo=Object.getOwnPropertyDescriptor,Yo=Object.getOwnPropertyNames,Ko=Object.prototype.hasOwnProperty,Jo=(e,t)=>{for(var n in t)Kt(e,n,{get:t[n],enumerable:!0})},Yt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Yo(t))!Ko.call(e,r)&&r!==n&&Kt(e,r,{get:()=>t[r],enumerable:!(o=Uo(t,r))||o.enumerable});return e},Jt=(e,t,n)=>(Yt(e,t,"default"),n&&Yt(n,t,"default")),Qo=e=>Yt(Kt({},"__esModule",{value:!0}),e),E2={};Jo(E2,{version:()=>or});z2.exports=Qo(E2);Jt(E2,require("@tensorflow/tfjs-core"),z2.exports);Jt(E2,require("@tensorflow/tfjs-converter"),z2.exports);Jt(E2,require("@tensorflow/tfjs-backend-wasm"),z2.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.14.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>S2,Human:()=>E1,default:()=>E1,defaults:()=>Ke,draw:()=>rt,empty:()=>Te,env:()=>R,match:()=>Wt,models:()=>w1});module.exports=Xo(ha);var de=V(G());function h(...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)}function C1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Qt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Qt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var W1=` +"use strict";var Fo=Object.create;var w2=Object.defineProperty;var Bo=Object.getOwnPropertyDescriptor;var Ho=Object.getOwnPropertyNames;var Go=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var Zo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var qo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},N1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ho(t))!Vo.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Bo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Fo(Go(e)):{},N1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>N1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Zo(e,typeof t!="symbol"?t+"":t,n),n),O1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(O1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(O1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=qo((ga,z2)=>{"use strict";var Kt=Object.defineProperty,Uo=Object.getOwnPropertyDescriptor,Yo=Object.getOwnPropertyNames,Ko=Object.prototype.hasOwnProperty,Jo=(e,t)=>{for(var n in t)Kt(e,n,{get:t[n],enumerable:!0})},Yt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Yo(t))!Ko.call(e,r)&&r!==n&&Kt(e,r,{get:()=>t[r],enumerable:!(o=Uo(t,r))||o.enumerable});return e},Jt=(e,t,n)=>(Yt(e,t,"default"),n&&Yt(n,t,"default")),Qo=e=>Yt(Kt({},"__esModule",{value:!0}),e),E2={};Jo(E2,{version:()=>or});z2.exports=Qo(E2);Jt(E2,require("@tensorflow/tfjs-core"),z2.exports);Jt(E2,require("@tensorflow/tfjs-converter"),z2.exports);Jt(E2,require("@tensorflow/tfjs-backend-wasm"),z2.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>S2,Human:()=>E1,default:()=>E1,defaults:()=>Ke,draw:()=>rt,empty:()=>Te,env:()=>R,match:()=>Wt,models:()=>w1});module.exports=Xo(ha);var de=V(G());function h(...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)}function C1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Qt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Qt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var W1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var _t=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},$t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),_t(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);_t(n,"uniform",this.uniform),_t(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function V1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new $t(i,W1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?F1:D1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(G1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(H1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var U2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function e5(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function Y2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function K2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>U2&&(s=U2,A=Math.trunc(s*r/o)),A>U2&&(A=U2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new V1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,Y2(R0,M0))):(Y2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=Y2(M0),l=N.browser.fromPixels(y2));else{let g=Y2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await X2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function Z1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function q1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var j2,I2,N2,S2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,j2,void 0);ue(this,I2,void 0);ue(this,N2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,j2)}set Canvas(t){Re(this,j2,t),globalThis.Canvas=t}get Image(){return Y0(this,I2)}set Image(t){Re(this,I2,t),globalThis.Image=t}get ImageData(){return Y0(this,N2)}set ImageData(t){Re(this,N2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};j2=new WeakMap,I2=new WeakMap,N2=new WeakMap;var R=new S2;var Q2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var t5={};ze(t5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Or,"gear-e2":()=>Lr,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>qr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>Xr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Or=112438,Lr=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,qr=5171976,Xr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Or,"gear-e2":Lr,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:qr,"movenet-multipose":Xr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function O(e){var c,x,i,y;let t=C1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:t5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var n5="3.2.1";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function U1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Y1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var K1={};async function O2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(U1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(K1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))K1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),Y1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function _2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var rt={};ze(rt,{all:()=>Js,body:()=>et,canvas:()=>Ks,face:()=>$2,gesture:()=>ot,hand:()=>tt,init:()=>l5,object:()=>nt,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` +`;var _t=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},$t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),_t(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);_t(n,"uniform",this.uniform),_t(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function V1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new $t(i,W1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?F1:D1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(G1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(H1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var U2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function e5(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function Y2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function K2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>U2&&(s=U2,A=Math.trunc(s*r/o)),A>U2&&(A=U2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new V1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,Y2(R0,M0))):(Y2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=Y2(M0),l=N.browser.fromPixels(y2));else{let g=Y2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await X2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function Z1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function q1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var j2,I2,N2,S2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,j2,void 0);ue(this,I2,void 0);ue(this,N2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,j2)}set Canvas(t){Re(this,j2,t),globalThis.Canvas=t}get Image(){return Y0(this,I2)}set Image(t){Re(this,I2,t),globalThis.Image=t}get ImageData(){return Y0(this,N2)}set ImageData(t){Re(this,N2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};j2=new WeakMap,I2=new WeakMap,N2=new WeakMap;var R=new S2;var Q2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var t5={};ze(t5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Or,"gear-e2":()=>Lr,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>qr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>Xr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Or=112438,Lr=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,qr=5171976,Xr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Or,"gear-e2":Lr,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:qr,"movenet-multipose":Xr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function O(e){var c,x,i,y;let t=C1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:t5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var n5="3.2.2";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function U1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function Y1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var K1={};async function O2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(U1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(K1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))K1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),Y1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function _2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var rt={};ze(rt,{all:()=>Js,body:()=>et,canvas:()=>Ks,face:()=>$2,gesture:()=>ot,hand:()=>tt,init:()=>l5,object:()=>nt,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` `).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function o5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function Q1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){o5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oL2[e]),Ga=Ts.map(e=>L2[e]),Va=vs.map(e=>L2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Is=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Os=[[474,475],[475,476],[476,477],[477,474]],Ls=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Os),rightEye:Ie(Ls),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),qa=new Map(Bs),C2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],e2=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],t2=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var X;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!X.drawLabels||((o=X.faceLabels)==null?void 0:o.length)===0)return;let n=X.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);y.length>3&&(y.length=3),n=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],X)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=X.useDepth?"rgba(255, 200, 255, 0.3)":X.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),X.fillPolygons&&(t.fillStyle=X.useDepth?"rgba(255, 255, 200, 0.3)":X.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=X.useDepth?"rgba(255, 200, 255, 0.3)":X.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),X.fillPolygons&&(t.fillStyle=X.useDepth?"rgba(255, 255, 200, 0.3)":X.color,t.fill())}}function Vs(e,t){var n;if(X.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C @@ -118,7 +118,7 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var i5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sd5,kpt:()=>c5});var c5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],d5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,e3,Qs=5,At=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function t3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await O(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var $1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),$1[0]),A=D.mul(D.div(A,n2),$1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,e3),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function n3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Oe(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function o3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function at(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,y5=256,x5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},lt=[],Le=[[0,0],[0,0],[0,0],[0,0]],r3=0,s3=e=>1-1/(1+Math.exp(e)),a3=e=>t3(e);async function i3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await O(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;y5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function A3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=q0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Le=[[0,0],a,l,[0,0]],o.pad=q0.pad(o.cropped||e,Le),o.resize=q0.image.resizeBilinear(o.pad,[t,t]),r=q0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=q0.image.resizeBilinear(o.cropped||e,[t,t]),r=q0.div(o.resize,C.tf255)):r=q0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>q0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Le[2][0]+Le[2][1])/t[0]-Le[2][0]),Math.trunc(o.position[1]*(t[1]+Le[1][0]+Le[1][1])/t[1]-Le[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>q0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Oe(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(d5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function f5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-r3,r=x5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&<!==null)x5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=A3(e,224);l=await n3(c,t,n),q0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function u5(e,t){if(!(X0!=null&&X0.executor))return[];let n=(t.object.skipTime||0)>v()-c3,o=p5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&m5.length>0?(p5++,m5):(p5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?X0==null?void 0:X0.execute(A,["tower_0/detections"]):null;c3=v(),F0.dispose(A);let l=await sA(a,s,t);m5=l,r(l)}))}var J=V(G());var ct={};ze(ct,{connected:()=>b5,kpt:()=>h5});var h5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],b5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,y3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},g5=Number.MAX_SAFE_INTEGER;async function f3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await O(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function T5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-y3,o=g5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(g5++,[B0]):(g5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),y3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:h5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(b5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var L=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],dt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],xt=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],yt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],h3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},v5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},ft=(e,t)=>{let n=dt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},mt=e=>{let t=dt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},b3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},R5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var p3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=p3(t[0],t[1]),A=u3(s,r),a=p3(-t[0],-t[1]);return u3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function T3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?g3(n,[0,0]):R5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):R5,i=dt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function R3(e,t,n,o){let r=t.landmarks.length>=s5.count?s5.symmetryLine:_e.symmetryLine,s=0,A=R5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=dt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=g3(-s,c),a=v5(t,i,[o,o]),Me.dispose(i)}else a=v5(t,n,[o,o]);else a=v5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},M3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var P3=6,xe,pt=null,Ce=0,u2=null,k3=()=>Ce;async function w3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await O((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=L.scalar(Ce,"int32"),pt=L.tensor2d(T3(Ce)),xe}function yA(e){if(!pt||!u2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,pt),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,u2),t.centersNormalized=L.div(t.centers,u2),t.halfBoxSize=L.div(t.boxSizesNormalized,C.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,u2),t.endNormalized=L.mul(t.ends,u2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function E3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=L.image.resizeBilinear(e,[Ce,Ce]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=L.concat([m[0],m[2]],2),n.concat512=L.concat([m[1],m[3]],2),n.concat=L.concat([n.concat512,n.concat384],1),n.batch=L.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=L.squeeze(o[0]):n.batch=L.squeeze(o);L.dispose(o),n.boxes=yA(n.batch),n.logits=L.slice(n.batch,[0,0],[-1,1]),n.sigmoid=L.sigmoid(n.logits),n.scores=L.squeeze(n.sigmoid),n.nms=await L.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=L.slice(n.boxes,[r[m],0],[1,-1]),u.slice=L.slice(n.batch,[r[m],P3-1],[1,-1]),u.squeeze=L.squeeze(u.slice),u.landmarks=L.reshape(u.squeeze,[P3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=L.slice(pt,[r[m],0],[1,2]);let p=await u.anchor.data(),b=h3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=ft(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=mt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>L.dispose(u[I]))}}return Object.keys(n).forEach(m=>L.dispose(n[m])),s}var ye=V(G());var K0,We=0,P5=ae.leftEyeLower0,k5=ae.rightEyeLower0,h2={leftBounds:[P5[0],P5[P5.length-1]],rightBounds:[k5[0],k5[k5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function N3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await O((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function ut(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},S3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=mt(ft(b3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},j3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function O3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=S3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=S3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=j3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=j3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(ut(e,m,"left",null),ut(e,g,"right",null)):p<1?ut(e,m,"left",["EyeUpper0","EyeLower0"]):ut(e,g,"right",["EyeUpper0","EyeLower0"]);let b=I3(e,f,"left"),k=I3(e,T,"right");return e.concat(b).concat(k)}async function C3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await E3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=W2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=xt(p,e),P.boxRaw=yt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await C3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await O3(A0,P.tensor,W2,t)),P.mesh=v3(A0,p,b,k,W2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...M3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=xt(t0,e),P.boxRaw=yt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function D3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await O(e.face.attention.modelPath):r0=await O((r=e.face.mesh)==null?void 0:r.modelPath),W2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var F3=$e,B3=L2;var J0=V(G());var z5=[],P0,ht=[],H3=0,G3=0,E5=Number.MAX_SAFE_INTEGER,S5=!1;async function V3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await O((t=e.face.emotion)==null?void 0:t.modelPath),S5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,S5?z5=["angry","disgust","fear","happy","neutral","sad","surprise"]:z5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function j5(e,t,n,o){var A,a;if(!P0)return[];let r=E5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-G3;return t.skipAllowed&&s&&r&&H3===o&&ht[n]&&ht[n].length>0?(E5++,ht[n]):(E5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);S5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),G3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:z5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}ht[n]=c,H3=o,l(c)}))}var ie=V(G());var k0,Fe=[],q3=0,X3=0,I5=Number.MAX_SAFE_INTEGER;async function U3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await O((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function N5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=I5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-q3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(I5++,Fe[n]):(I5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);q3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,O5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function K3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-Q3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&J3===o&&bt[n]?(L5++,bt[n]):(L5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,J3=o,Q3=v(),gt.dispose([c,x]),l(bt[n])}))}var vt=V(G());var E0,Tt=[],W5=Number.MAX_SAFE_INTEGER,en=0,tn=0;async function nn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await O((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function D5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-tn,s=W5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&en===o&&Tt[n]?(W5++,Tt[n]):(W5=0,new Promise(async l=>{let c=vt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];Tt[n]=Math.round(100*i)/100,en=o,tn=v(),vt.dispose([c,x]),l(Tt[n])}))}var Rt=V(G());var le,F5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],rn=0,sn=0,B5=Number.MAX_SAFE_INTEGER;async function An(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await O((t=e.face.gear)==null?void 0:t.modelPath),le}async function H5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=B5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-sn;return t.skipAllowed&&s&&r&&rn===o&&F5[n]?(B5++,F5[n]):(B5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Rt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kRt.dispose(c[k])),F5[n]=i,rn=o,sn=v(),l(i)}))}var s2=V(G());var H0,Mt=[],ln=0,cn=0,G5=Number.MAX_SAFE_INTEGER;async function dn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await O(e.face.ssrnet.modelPathAge),H0}async function V5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=G5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-cn;return t.skipAllowed&&r&&s&&ln===o&&((l=Mt[n])!=null&&l.age)&&((c=Mt[n])==null?void 0:c.age)>0?(G5++,Mt[n]):(G5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),Mt[n]=y,ln=o,cn=v(),x(y)}))}var v0=V(G());var N0,Pt=[],yn=0,fn=0,Z5=Number.MAX_SAFE_INTEGER,q5=[.2989,.587,.114];async function mn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=Z5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-fn;return t.skipAllowed&&r&&s&&yn===o&&((l=Pt[n])!=null&&l.gender)&&((c=Pt[n])==null?void 0:c.genderScore)>0?(Z5++,Pt[n]):(Z5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,q5[0]),B=v0.mul(k,q5[1]),_=v0.mul(P,q5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Pt[n]=y,yn=o,fn=v(),x(y)}))}var kt=V(G());var Q0,U5=[],un=0,hn=0,bn=Number.MAX_SAFE_INTEGER;async function gn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function Y5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=bn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-hn;return t.skipAllowed&&s&&r&&un===o&&U5[n]?(bn++,U5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=kt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>kt.dispose(i[d]))}U5[n]=c,un=o,hn=v(),l(c)})}var wt=V(G());var _0,K5=[],vn=0,Rn=0,Mn=Number.MAX_SAFE_INTEGER;async function Pn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await O(e.face.insightface.modelPath),_0}async function J5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Mn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-Rn;return t.skipAllowed&&s&&r&&vn===o&&K5[n]?(Mn++,K5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=wt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>wt.dispose(i[d]))}K5[n]=c,vn=o,Rn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},wn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function En(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var Q5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await W3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?wn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=N5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await N5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let q=(x0=e.config.face.iris)!=null&&x0.enabled?En(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),q>0&&(y0.distance=q),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:_5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,_5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,_5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,_5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var zn=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function Sn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function In(e,t){if(!e||!t)return[0,0];let n=Sn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=Sn(e[1],e[2],t[1],t[2]);return[n,o]}function jn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function On(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=On(e,t,n,o),x=Nn(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=In([b,k],[P,I]),$=jn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=jn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=On(l,a,c,i):m===Math.max(d,m)?A0=Nn(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=In(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function Et(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function Cn(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of zn){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Wn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Dn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Fn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Bn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function St(e,t=1.5){let n=D2(e),o=zt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jt(e){let t=D2(e),n=zt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Hn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function qe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=qn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var LA=5,Jn=1.65,Qn=[0,5,9,13,17,1,2],CA=0,WA=2,_n=0,Nt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>t1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return St(jt(r),LA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=St(jt(n),Jn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=e1(o,[0,0]),c=a.map(d=>[...t1(d,l),d[2]]),x=Un(r),i=[...D2(n),1],y=[qe(i,x[0]),qe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-_n,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=St(jt(c),Jn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var $n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,n1;function FA(){let e=l2?new It(l2):void 0;e&&c2&&(n1=new Nt(e,c2))}async function o1(e,t){n1||FA();let n=await n1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=Et(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function eo(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await O((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function to(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await O((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Xe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],oo=4,ro=1.6,GA=512,VA=1.4,Ot=Number.MAX_SAFE_INTEGER,r1=0,we=[0,0],m0={boxes:[],hands:[]},so={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Ao(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{_2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;Xe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;Xe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[oo]),a.splice(oo,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=at(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function s1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[Xe[1][0],Xe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Xe[1][1],i[1]/Xe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=Et(o.keypoints);for(let i of Object.keys(so))o.annotations[i]=so[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function A1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],Ot++;let n=(t.hand.skipTime||0)>v()-r1,o=Ot<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-r1,l=Ot<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):(m0.boxes=await ZA(e,t),r1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))),Ot=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=at(i.box,ro),d=at(i.boxRaw,ro);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var F2={};ze(F2,{connected:()=>Ct,horizontal:()=>a1,kpt:()=>Lt,relative:()=>l1,vertical:()=>i1});var Lt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],a1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],i1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],l1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Ct={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),c1=0;function lo(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[q]+H)/r),C0=e.body[M].boxRaw.map((H,q)=>((r-1)*z.body[M].boxRaw[q]+H)/r),x0=e.body[M].keypoints.map((H,q)=>{var U0,y0,Ee,k2,x2,z1,S1,j1,I1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[q]?((r-1)*(((U0=z.body[M].keypoints[q].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[q]?((r-1)*(((k2=z.body[M].keypoints[q].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(z1=H.distance)==null?void 0:z1[1],z.body[M].keypoints[q]?((r-1)*(((S1=z.body[M].keypoints[q].distance)==null?void 0:S1[2])||0)+(((j1=H.distance)==null?void 0:j1[2])||0))/r:(I1=H.distance)==null?void 0:I1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=ct:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=st:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=F2);for(let[H,q]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===q[y0]),k2=x0.find(x2=>x2.part===q[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((q,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(q||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,q)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][q][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((q,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+q)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return c1=R.perfadd?c1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:c1}),z}var s0=V(G());var O0;async function d1(e){return!O0||R.initial?O0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function co(e,t){var r;if(O0||(O0=await d1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Wt={};ze(Wt,{distance:()=>x1,find:()=>UA,similarity:()=>XA});function x1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function XA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=x1(e,t,n);return yo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AV2,validateModel:()=>Zt});var B2=V(G());var Ue=V(G());var fo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function y1(e){for(let t of a1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function mo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function uo(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Oe(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Dt=0,f1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function ho(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(_2(["size"],e),b0=await O(e.body.modelPath)),Dt=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Dt<64&&(Dt=256),B2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Lt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Oe(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Ct)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return y1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Lt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Ct)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};y1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function m1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),f1++;let n=(t.body.skipTime||0)>v()-d2.last,o=f1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};f1=0,A.input=po(e,Dt),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)uo(l,[e.shape[2]||1,e.shape[1]||1]),mo(l.keypoints);Object.keys(A).forEach(l=>B2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Ft=[],go=0,p1=Number.MAX_SAFE_INTEGER,Ht=0,Bt=2.5;async function To(e){if(!ce||R.initial){ce=await O(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ht=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ht;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Bt/i*B[0],I-Bt/i*B[1]],[$,A0]=[P+Bt/i*B[2]-_,I+Bt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function u1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-go,o=p1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Ft.length>0?(p1++,Ft):(p1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Ft:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ht,Ht],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),go=v();let x=await QA(c,s,t);Ft=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var G2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=G2.length,H2=G2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[H2[e],H2[t]]),Ro=[["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"]];function Mo(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Po(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Gt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function ko(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function T1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Vt=1,M2=16,na=50**2;function wo(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:g1(Math.round(g.y/M2),0,T-1),x:g1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=T1(t.position,y);for(let g=0;g[H2[y],H2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=b1(e.part,M2,n);x[e.part.id]={score:e.score,part:G2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=wo(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Gt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?ko(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(Eo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Mo(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function v1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Po(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function zo(e){return!te||R.initial?te=await O(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},M1=0;function Io(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),M1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(M1)}async function P1(e){return!ve||R.initial?ve=await O(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),Io(e),ve}var jo=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function R1(e,t){let n=e?jo(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?jo(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function No(e,t){if(ve||(ve=await P1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),M1!==t.segmentation.ratio&&Io(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=R1(n,o);break;case"alpha":l=R1(null,o);break;case"foreground":l=R1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var L0;async function k1(e){return!L0||R.initial?L0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function Lo(e,t){var r;if(L0||(L0=await k1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Zt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var V2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?w3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?_3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?nn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?U3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?V3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?N3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?D3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?An(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?dn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?mn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?gn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Pn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?i3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?a3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?f3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?ho(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?zo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?Ao(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=eo(this.instance.config),n.handskeleton=to(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?d3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?To(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?k1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?d1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?P1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Zt(this.instance,o,n);r&&t.push(r)}return t}};function Wo(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var qt=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var i5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sd5,kpt:()=>c5});var c5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],d5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,e3,Qs=5,At=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function t3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await O(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var $1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),$1[0]),A=D.mul(D.div(A,n2),$1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,e3),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function n3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Oe(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function o3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function at(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,y5=256,x5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},lt=[],Le=[[0,0],[0,0],[0,0],[0,0]],r3=0,s3=e=>1-1/(1+Math.exp(e)),a3=e=>t3(e);async function i3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await O(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;y5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function A3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=q0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Le=[[0,0],a,l,[0,0]],o.pad=q0.pad(o.cropped||e,Le),o.resize=q0.image.resizeBilinear(o.pad,[t,t]),r=q0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=q0.image.resizeBilinear(o.cropped||e,[t,t]),r=q0.div(o.resize,C.tf255)):r=q0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>q0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Le[2][0]+Le[2][1])/t[0]-Le[2][0]),Math.trunc(o.position[1]*(t[1]+Le[1][0]+Le[1][1])/t[1]-Le[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>q0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Oe(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(d5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function f5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-r3,r=x5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&<!==null)x5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=A3(e,224);l=await n3(c,t,n),q0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function u5(e,t){if(!(X0!=null&&X0.executor))return[];let n=(t.object.skipTime||0)>v()-c3,o=p5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&m5.length>0?(p5++,m5):(p5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?X0==null?void 0:X0.execute(A,["tower_0/detections"]):null;c3=v(),F0.dispose(A);let l=await sA(a,s,t);m5=l,r(l)}))}var J=V(G());var ct={};ze(ct,{connected:()=>b5,kpt:()=>h5});var h5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],b5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,y3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},g5=Number.MAX_SAFE_INTEGER;async function f3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await O(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function T5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-y3,o=g5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(g5++,[B0]):(g5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),y3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:h5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(b5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var L=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],dt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],xt=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],yt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],h3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},v5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},ft=(e,t)=>{let n=dt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},mt=e=>{let t=dt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},b3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},R5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var p3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=p3(t[0],t[1]),A=u3(s,r),a=p3(-t[0],-t[1]);return u3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function T3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?g3(n,[0,0]):R5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):R5,i=dt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function R3(e,t,n,o){let r=t.landmarks.length>=s5.count?s5.symmetryLine:_e.symmetryLine,s=0,A=R5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=dt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=g3(-s,c),a=v5(t,i,[o,o]),Me.dispose(i)}else a=v5(t,n,[o,o]);else a=v5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},M3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var P3=6,xe,pt=null,Ce=0,u2=null,k3=()=>Ce;async function w3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await O((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=L.scalar(Ce,"int32"),pt=L.tensor2d(T3(Ce)),xe}function yA(e){if(!pt||!u2)return L.zeros([0,0]);let t={};t.boxStarts=L.slice(e,[0,1],[-1,2]),t.centers=L.add(t.boxStarts,pt),t.boxSizes=L.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=L.div(t.boxSizes,u2),t.centersNormalized=L.div(t.centers,u2),t.halfBoxSize=L.div(t.boxSizesNormalized,C.tf2),t.starts=L.sub(t.centersNormalized,t.halfBoxSize),t.ends=L.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=L.mul(t.starts,u2),t.endNormalized=L.mul(t.ends,u2);let n=L.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>L.dispose(t[o])),n}async function E3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=L.image.resizeBilinear(e,[Ce,Ce]),n.div=L.div(n.resized,C.tf127),n.normalized=L.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=L.concat([m[0],m[2]],2),n.concat512=L.concat([m[1],m[3]],2),n.concat=L.concat([n.concat512,n.concat384],1),n.batch=L.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=L.squeeze(o[0]):n.batch=L.squeeze(o);L.dispose(o),n.boxes=yA(n.batch),n.logits=L.slice(n.batch,[0,0],[-1,1]),n.sigmoid=L.sigmoid(n.logits),n.scores=L.squeeze(n.sigmoid),n.nms=await L.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=L.slice(n.boxes,[r[m],0],[1,-1]),u.slice=L.slice(n.batch,[r[m],P3-1],[1,-1]),u.squeeze=L.squeeze(u.slice),u.landmarks=L.reshape(u.squeeze,[P3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=L.slice(pt,[r[m],0],[1,2]);let p=await u.anchor.data(),b=h3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=ft(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=mt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>L.dispose(u[I]))}}return Object.keys(n).forEach(m=>L.dispose(n[m])),s}var ye=V(G());var K0,We=0,P5=ae.leftEyeLower0,k5=ae.rightEyeLower0,h2={leftBounds:[P5[0],P5[P5.length-1]],rightBounds:[k5[0],k5[k5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function N3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await O((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function ut(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},S3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=mt(ft(b3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},j3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function O3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=S3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=S3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=j3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=j3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(ut(e,m,"left",null),ut(e,g,"right",null)):p<1?ut(e,m,"left",["EyeUpper0","EyeLower0"]):ut(e,g,"right",["EyeUpper0","EyeLower0"]);let b=I3(e,f,"left"),k=I3(e,T,"right");return e.concat(b).concat(k)}async function C3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await E3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=W2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=xt(p,e),P.boxRaw=yt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await C3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await O3(A0,P.tensor,W2,t)),P.mesh=v3(A0,p,b,k,W2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...M3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=xt(t0,e),P.boxRaw=yt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function D3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await O(e.face.attention.modelPath):r0=await O((r=e.face.mesh)==null?void 0:r.modelPath),W2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var F3=$e,B3=L2;var J0=V(G());var z5=[],P0,ht=[],H3=0,G3=0,E5=Number.MAX_SAFE_INTEGER,S5=!1;async function V3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await O((t=e.face.emotion)==null?void 0:t.modelPath),S5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,S5?z5=["angry","disgust","fear","happy","neutral","sad","surprise"]:z5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function j5(e,t,n,o){var A,a;if(!P0)return[];let r=E5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-G3;return t.skipAllowed&&s&&r&&H3===o&&ht[n]&&ht[n].length>0?(E5++,ht[n]):(E5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);S5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),G3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:z5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}ht[n]=c,H3=o,l(c)}))}var ie=V(G());var k0,Fe=[],q3=0,X3=0,I5=Number.MAX_SAFE_INTEGER;async function U3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await O((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function N5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=I5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-q3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(I5++,Fe[n]):(I5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);q3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,O5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function K3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-Q3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&J3===o&&bt[n]?(L5++,bt[n]):(L5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,J3=o,Q3=v(),gt.dispose([c,x]),l(bt[n])}))}var vt=V(G());var E0,Tt=[],W5=Number.MAX_SAFE_INTEGER,en=0,tn=0;async function nn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await O((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function D5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-tn,s=W5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&en===o&&Tt[n]?(W5++,Tt[n]):(W5=0,new Promise(async l=>{let c=vt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];Tt[n]=Math.round(100*i)/100,en=o,tn=v(),vt.dispose([c,x]),l(Tt[n])}))}var Rt=V(G());var le,F5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],rn=0,sn=0,B5=Number.MAX_SAFE_INTEGER;async function An(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await O((t=e.face.gear)==null?void 0:t.modelPath),le}async function H5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=B5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-sn;return t.skipAllowed&&s&&r&&rn===o&&F5[n]?(B5++,F5[n]):(B5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Rt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kRt.dispose(c[k])),F5[n]=i,rn=o,sn=v(),l(i)}))}var s2=V(G());var H0,Mt=[],ln=0,cn=0,G5=Number.MAX_SAFE_INTEGER;async function dn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await O(e.face.ssrnet.modelPathAge),H0}async function V5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=G5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-cn;return t.skipAllowed&&r&&s&&ln===o&&((l=Mt[n])!=null&&l.age)&&((c=Mt[n])==null?void 0:c.age)>0?(G5++,Mt[n]):(G5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),Mt[n]=y,ln=o,cn=v(),x(y)}))}var v0=V(G());var N0,Pt=[],yn=0,fn=0,Z5=Number.MAX_SAFE_INTEGER,q5=[.2989,.587,.114];async function mn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await O((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=Z5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-fn;return t.skipAllowed&&r&&s&&yn===o&&((l=Pt[n])!=null&&l.gender)&&((c=Pt[n])==null?void 0:c.genderScore)>0?(Z5++,Pt[n]):(Z5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,q5[0]),B=v0.mul(k,q5[1]),_=v0.mul(P,q5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Pt[n]=y,yn=o,fn=v(),x(y)}))}var kt=V(G());var Q0,U5=[],un=0,hn=0,bn=Number.MAX_SAFE_INTEGER;async function gn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await O((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function Y5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=bn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-hn;return t.skipAllowed&&s&&r&&un===o&&U5[n]?(bn++,U5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=kt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>kt.dispose(i[d]))}U5[n]=c,un=o,hn=v(),l(c)})}var wt=V(G());var _0,K5=[],vn=0,Rn=0,Mn=Number.MAX_SAFE_INTEGER;async function Pn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await O(e.face.insightface.modelPath),_0}async function J5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Mn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-Rn;return t.skipAllowed&&s&&r&&vn===o&&K5[n]?(Mn++,K5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=wt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>wt.dispose(i[d]))}K5[n]=c,vn=o,Rn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},wn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function En(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var Q5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await W3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?wn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await j5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await C5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await D5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await H5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await V5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await Y5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await J5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=N5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await N5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let q=(x0=e.config.face.iris)!=null&&x0.enabled?En(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),q>0&&(y0.distance=q),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:_5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,_5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,_5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,_5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var zn=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function Sn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function In(e,t){if(!e||!t)return[0,0];let n=Sn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=Sn(e[1],e[2],t[1],t[2]);return[n,o]}function jn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function On(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=On(e,t,n,o),x=Nn(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=In([b,k],[P,I]),$=jn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=jn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=On(l,a,c,i):m===Math.max(d,m)?A0=Nn(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=In(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function Et(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function Cn(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of zn){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Wn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Dn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Fn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Bn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function St(e,t=1.5){let n=D2(e),o=zt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jt(e){let t=D2(e),n=zt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Hn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function qe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=qn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var LA=5,Jn=1.65,Qn=[0,5,9,13,17,1,2],CA=0,WA=2,_n=0,Nt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>t1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return St(jt(r),LA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=St(jt(n),Jn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=e1(o,[0,0]),c=a.map(d=>[...t1(d,l),d[2]]),x=Un(r),i=[...D2(n),1],y=[qe(i,x[0]),qe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-_n,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=St(jt(c),Jn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var $n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,n1;function FA(){let e=l2?new It(l2):void 0;e&&c2&&(n1=new Nt(e,c2))}async function o1(e,t){n1||FA();let n=await n1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=Et(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function eo(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await O((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function to(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await O((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],Xe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],oo=4,ro=1.6,GA=512,VA=1.4,Ot=Number.MAX_SAFE_INTEGER,r1=0,we=[0,0],m0={boxes:[],hands:[]},so={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function Ao(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{_2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await O((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;Xe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await O((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;Xe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,Xe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[oo]),a.splice(oo,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=at(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function s1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[Xe[1][0],Xe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/Xe[1][1],i[1]/Xe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=Et(o.keypoints);for(let i of Object.keys(so))o.annotations[i]=so[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function A1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],Ot++;let n=(t.hand.skipTime||0)>v()-r1,o=Ot<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-r1,l=Ot<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))):(m0.boxes=await ZA(e,t),r1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>s1(e,x,t))),Ot=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=at(i.box,ro),d=at(i.boxRaw,ro);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var F2={};ze(F2,{connected:()=>Ct,horizontal:()=>a1,kpt:()=>Lt,relative:()=>l1,vertical:()=>i1});var Lt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],a1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],i1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],l1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Ct={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),c1=0;function lo(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[q]+H)/r),C0=e.body[M].boxRaw.map((H,q)=>((r-1)*z.body[M].boxRaw[q]+H)/r),x0=e.body[M].keypoints.map((H,q)=>{var U0,y0,Ee,k2,x2,z1,S1,j1,I1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[q]?((r-1)*(z.body[M].keypoints[q].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[q]?((r-1)*(((U0=z.body[M].keypoints[q].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[q]?((r-1)*(((k2=z.body[M].keypoints[q].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(z1=H.distance)==null?void 0:z1[1],z.body[M].keypoints[q]?((r-1)*(((S1=z.body[M].keypoints[q].distance)==null?void 0:S1[2])||0)+(((j1=H.distance)==null?void 0:j1[2])||0))/r:(I1=H.distance)==null?void 0:I1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=ct:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=st:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=F2);for(let[H,q]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===q[y0]),k2=x0.find(x2=>x2.part===q[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((q,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(q||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,q)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][q][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((q,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+q)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return c1=R.perfadd?c1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:c1}),z}var s0=V(G());var O0;async function d1(e){return!O0||R.initial?O0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function co(e,t){var r;if(O0||(O0=await d1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Wt={};ze(Wt,{distance:()=>x1,find:()=>UA,similarity:()=>XA});function x1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function XA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=x1(e,t,n);return yo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AV2,validateModel:()=>Zt});var B2=V(G());var Ue=V(G());var fo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function y1(e){for(let t of a1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function mo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function uo(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Oe(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Dt=0,f1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function ho(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(_2(["size"],e),b0=await O(e.body.modelPath)),Dt=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Dt<64&&(Dt=256),B2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&B2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Lt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Oe(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Ct)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return y1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Lt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Ct)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};y1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function m1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),f1++;let n=(t.body.skipTime||0)>v()-d2.last,o=f1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};f1=0,A.input=po(e,Dt),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)uo(l,[e.shape[2]||1,e.shape[1]||1]),mo(l.keypoints);Object.keys(A).forEach(l=>B2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Ft=[],go=0,p1=Number.MAX_SAFE_INTEGER,Ht=0,Bt=2.5;async function To(e){if(!ce||R.initial){ce=await O(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ht=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ht;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Bt/i*B[0],I-Bt/i*B[1]],[$,A0]=[P+Bt/i*B[2]-_,I+Bt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function u1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-go,o=p1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Ft.length>0?(p1++,Ft):(p1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Ft:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ht,Ht],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),go=v();let x=await QA(c,s,t);Ft=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var G2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=G2.length,H2=G2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[H2[e],H2[t]]),Ro=[["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"]];function Mo(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Po(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Gt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function ko(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function T1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Vt=1,M2=16,na=50**2;function wo(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:g1(Math.round(g.y/M2),0,T-1),x:g1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=T1(t.position,y);for(let g=0;g[H2[y],H2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=b1(e.part,M2,n);x[e.part.id]={score:e.score,part:G2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=wo(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Gt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?ko(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(Eo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Mo(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function v1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Po(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function zo(e){return!te||R.initial?te=await O(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},M1=0;function Io(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),M1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(M1)}async function P1(e){return!ve||R.initial?ve=await O(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),Io(e),ve}var jo=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function R1(e,t){let n=e?jo(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?jo(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function No(e,t){if(ve||(ve=await P1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),M1!==t.segmentation.ratio&&Io(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=R1(n,o);break;case"alpha":l=R1(null,o);break;case"foreground":l=R1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var L0;async function k1(e){return!L0||R.initial?L0=await O(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function Lo(e,t){var r;if(L0||(L0=await k1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Zt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var V2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?w3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?_3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?nn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?U3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?V3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?N3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?D3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?An(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?dn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?mn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?gn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Pn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?i3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?a3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?f3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?ho(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?zo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?Ao(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=eo(this.instance.config),n.handskeleton=to(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?d3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?To(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?k1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?d1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?P1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Zt(this.instance,o,n);r&&t.push(r)}return t}};function Wo(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var qt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/human.node.js b/dist/human.node.js index 730657f8..f7e8ef8c 100644 --- a/dist/human.node.js +++ b/dist/human.node.js @@ -4,7 +4,7 @@ author: ' */ -"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.14.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());function h(...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)}function O1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1.4,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var C1=` +"use strict";var Do=Object.create;var w2=Object.defineProperty;var Fo=Object.getOwnPropertyDescriptor;var Bo=Object.getOwnPropertyNames;var Ho=Object.getPrototypeOf,Go=Object.prototype.hasOwnProperty;var Vo=(e,t,n)=>t in e?w2(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Zo=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),ze=(e,t)=>{for(var n in t)w2(e,n,{get:t[n],enumerable:!0})},I1=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Bo(t))!Go.call(e,r)&&r!==n&&w2(e,r,{get:()=>t[r],enumerable:!(o=Fo(t,r))||o.enumerable});return e};var V=(e,t,n)=>(n=e!=null?Do(Ho(e)):{},I1(t||!e||!e.__esModule?w2(n,"default",{value:e,enumerable:!0}):n,e)),Xo=e=>I1(w2({},"__esModule",{value:!0}),e);var w=(e,t,n)=>(Vo(e,typeof t!="symbol"?t+"":t,n),n),N1=(e,t,n)=>{if(!t.has(e))throw TypeError("Cannot "+n)};var Y0=(e,t,n)=>(N1(e,t,"read from private field"),n?n.call(e):t.get(e)),ue=(e,t,n)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,n)},Re=(e,t,n,o)=>(N1(e,t,"write to private field"),o?o.call(e,n):t.set(e,n),n);var G=Zo((ga,Kt)=>{"use strict";var Ut=Object.defineProperty,qo=Object.getOwnPropertyDescriptor,Uo=Object.getOwnPropertyNames,Yo=Object.prototype.hasOwnProperty,Ko=(e,t)=>{for(var n in t)Ut(e,n,{get:t[n],enumerable:!0})},qt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Uo(t))!Yo.call(e,r)&&r!==n&&Ut(e,r,{get:()=>t[r],enumerable:!(o=qo(t,r))||o.enumerable});return e},Jo=(e,t,n)=>(qt(e,t,"default"),n&&qt(n,t,"default")),Qo=e=>qt(Ut({},"__esModule",{value:!0}),e),Yt={};Ko(Yt,{version:()=>or});Kt.exports=Qo(Yt);Jo(Yt,require("@tensorflow/tfjs-node"),Kt.exports);var L1="4.17.0",_o="4.17.0",$o="4.17.0",er="4.17.0",tr="4.17.0",nr="4.17.0",or={tfjs:L1,"tfjs-core":L1,"tfjs-converter":_o,"tfjs-backend-cpu":$o,"tfjs-backend-webgl":er,"tfjs-backend-wasm":tr,"tfjs-backend-webgpu":nr}});var ha={};ze(ha,{Env:()=>E2,Human:()=>w1,default:()=>w1,defaults:()=>Ke,draw:()=>nt,empty:()=>Te,env:()=>R,match:()=>Ot,models:()=>k1});module.exports=Xo(ha);var de=V(G());function h(...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)}function O1(e,t){let n=e.endsWith("/")?"":"/",r=t.startsWith(".")||t.startsWith("/")||t.startsWith("http:")||t.startsWith("https:")||t.startsWith("file:")?`${t}`:`${e}${n}${t}`;if(!r.toLocaleLowerCase().includes(".json"))throw new Error(`modelpath error: expecting json file: ${r}`);return r}var v=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function Jt(e,t,n="config",o=[]){for(let r of Object.keys(t))if(typeof t[r]=="object")Jt(e[r],t[r],r,o);else{let s=e&&typeof e[r]!="undefined";s||o.push({reason:"unknown property",where:`${n}.${r} = ${t[r]}`});let A=e&&typeof e[r]==typeof t[r];s&&!A&&o.push({reason:"property type mismatch",where:`${n}.${r} = ${t[r]}`,expected:typeof e[r]})}return t.debug&&n==="config"&&o.length>0&&h("invalid configuration",o),o}function a0(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,o)=>(Object.keys(o||{}).forEach(r=>{let s=n[r],A=o[r];Array.isArray(s)&&Array.isArray(A)?n[r]=s.concat(...A):t(s)&&t(A)?n[r]=a0(s,A):n[r]=A}),n),{})}var Ke={backend:"",modelBasePath:"",cacheModels:!0,validateModels:!0,wasmPath:"",wasmPlatformFetch:!1,debug:!1,async:!0,warmup:"full",cacheSensitivity:.7,skipAllowed:!1,deallocate:!1,flags:{},softwareKernels:!1,filter:{enabled:!0,equalization:!1,width:0,height:0,flip:!1,return:!0,autoBrightness:!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:"blazeface.json",rotation:!1,maxDetected:1,skipFrames:99,skipTime:2500,minConfidence:.2,minSize:0,iouThreshold:.1,scale:1,mask:!1,return:!1},mesh:{enabled:!0,modelPath:"facemesh.json",keepInvalid:!1},attention:{enabled:!1,modelPath:"facemesh-attention.json"},iris:{enabled:!0,scale:2.3,modelPath:"iris.json"},emotion:{enabled:!0,minConfidence:.1,skipFrames:99,skipTime:1500,modelPath:"emotion.json"},description:{enabled:!0,modelPath:"faceres.json",skipFrames:99,skipTime:3e3,minConfidence:.1},antispoof:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"antispoof.json"},liveness:{enabled:!1,skipFrames:99,skipTime:4e3,modelPath:"liveness.json"}},body:{enabled:!0,modelPath:"movenet-lightning.json",maxDetected:-1,minConfidence:.3,skipFrames:1,skipTime:200},hand:{enabled:!0,rotation:!0,skipFrames:99,skipTime:1e3,minConfidence:.5,iouThreshold:.2,maxDetected:-1,landmarks:!0,detector:{modelPath:"handtrack.json"},skeleton:{modelPath:"handlandmark-lite.json"}},object:{enabled:!1,modelPath:"centernet.json",minConfidence:.2,iouThreshold:.4,maxDetected:10,skipFrames:99,skipTime:2e3},segmentation:{enabled:!1,modelPath:"rvm.json",ratio:.5,mode:"default"}};var W0=V(G());var N=V(G());var C1=` precision highp float; attribute vec2 pos; attribute vec2 uv; @@ -96,7 +96,7 @@ c31 * m[6] + c32 * m[7] + c33 * m[8]; gl_FragColor.a = c22.a; } -`;var Qt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Qt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Qt(n,"uniform",this.uniform),Qt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var z2,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.1";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` +`;var Qt=(e,t,n)=>{let o=new RegExp("\\b"+t+" \\w+ (\\w+)","ig");e.replace(o,(r,s)=>(n[s]=0,r))},_t=class{constructor(t,n,o){w(this,"uniform",{});w(this,"attribute",{});w(this,"gl");w(this,"id");w(this,"compile",(t,n)=>{let o=this.gl.createShader(n);return o?(this.gl.shaderSource(o,t),this.gl.compileShader(o),this.gl.getShaderParameter(o,this.gl.COMPILE_STATUS)?o:(h(`filter: gl compile failed: ${this.gl.getShaderInfoLog(o)||"unknown"}`),null)):(h("filter: could not create shader"),null)});this.gl=t;let r=this.compile(n,this.gl.VERTEX_SHADER),s=this.compile(o,this.gl.FRAGMENT_SHADER);if(this.id=this.gl.createProgram(),!(!r||!s)){if(!this.id){h("filter: could not create webgl program");return}if(this.gl.attachShader(this.id,r),this.gl.attachShader(this.id,s),this.gl.linkProgram(this.id),!this.gl.getProgramParameter(this.id,this.gl.LINK_STATUS)){h(`filter: gl link failed: ${this.gl.getProgramInfoLog(this.id)||"unknown"}`);return}this.gl.useProgram(this.id),Qt(n,"attribute",this.attribute);for(let A in this.attribute)this.attribute[A]=this.gl.getAttribLocation(this.id,A);Qt(n,"uniform",this.uniform),Qt(o,"uniform",this.uniform);for(let A in this.uniform)this.uniform[A]=this.gl.getUniformLocation(this.id,A)}}};function G1(){let e=0,t=null,n=!1,o=-1,r=[null,null],s=[],A=null,a=null,l=Ae(100,100),c={},x={INTERMEDIATE:1},i=l.getContext("webgl");if(!i){h("filter: cannot get webgl context");return}this.gl=i;function y(T,p){if(!(T===l.width&&p===l.height)){if(l.width=T,l.height=p,!A){let b=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]);A=i.createBuffer(),i.bindBuffer(i.ARRAY_BUFFER,A),i.bufferData(i.ARRAY_BUFFER,b,i.STATIC_DRAW),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}i.viewport(0,0,l.width,l.height),r=[null,null]}}function d(T,p){let b=i.createFramebuffer();i.bindFramebuffer(i.FRAMEBUFFER,b);let k=i.createRenderbuffer();i.bindRenderbuffer(i.RENDERBUFFER,k);let P=i.createTexture();return i.bindTexture(i.TEXTURE_2D,P),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,T,p,0,i.RGBA,i.UNSIGNED_BYTE,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,P,0),i.bindTexture(i.TEXTURE_2D,null),i.bindFramebuffer(i.FRAMEBUFFER,null),{fbo:b,texture:P}}function m(T){return r[T]=r[T]||d(l.width,l.height),r[T]}function f(T=0){if(!a)return;let p=null,b=null,k=!1;e===0?p=t:p=m(o).texture||null,e++,n&&!(T&x.INTERMEDIATE)?(b=null,k=e%2===0):(o=(o+1)%2,b=m(o).fbo||null),i.bindTexture(i.TEXTURE_2D,p),i.bindFramebuffer(i.FRAMEBUFFER,b),i.uniform1f(a.uniform.flipY,k?-1:1),i.drawArrays(i.TRIANGLES,0,6)}function u(T){if(c[T])return a=c[T],i.useProgram((a?a.id:null)||null),a;if(a=new _t(i,C1,T),!a)return h("filter: could not get webgl program"),null;let p=Float32Array.BYTES_PER_ELEMENT,b=4*p;return i.enableVertexAttribArray(a.attribute.pos),i.vertexAttribPointer(a.attribute.pos,2,i.FLOAT,!1,b,0*p),i.enableVertexAttribArray(a.attribute.uv),i.vertexAttribPointer(a.attribute.uv,2,i.FLOAT,!1,b,2*p),c[T]=a,a}let g={colorMatrix:T=>{let p=new Float32Array(T);p[4]/=255,p[9]/=255,p[14]/=255,p[19]/=255;let b=p[18]===1&&p[3]===0&&p[8]===0&&p[13]===0&&p[15]===0&&p[16]===0&&p[17]===0&&p[19]===0?D1:W1,k=u(b);k&&(i.uniform1fv(k.uniform.m,p),f())},brightness:T=>{let p=(T||0)+1;g.colorMatrix([p,0,0,0,0,0,p,0,0,0,0,0,p,0,0,0,0,0,1,0])},saturation:T=>{let p=(T||0)*2/3+1,b=(p-1)*-.5;g.colorMatrix([p,b,b,0,0,b,p,b,0,0,b,b,p,0,0,0,0,0,1,0])},desaturate:()=>{g.saturation(-1)},contrast:T=>{let p=(T||0)+1,b=-128*(p-1);g.colorMatrix([p,0,0,0,b,0,p,0,0,b,0,0,p,0,b,0,0,0,1,0])},negative:()=>{g.contrast(-2)},hue:T=>{T=(T||0)/180*Math.PI;let p=Math.cos(T),b=Math.sin(T),k=.213,P=.715,I=.072;g.colorMatrix([k+p*(1-k)+b*-k,P+p*-P+b*-P,I+p*-I+b*(1-I),0,0,k+p*-k+b*.143,P+p*(1-P)+b*.14,I+p*-I+b*-.283,0,0,k+p*-k+b*-(1-k),P+p*-P+b*P,I+p*(1-I)+b*I,0,0,0,0,0,1,0])},desaturateLuminance:()=>{g.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},sepia:()=>{g.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},brownie:()=>{g.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},vintagePinhole:()=>{g.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},kodachrome:()=>{g.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])},technicolor:()=>{g.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])},polaroid:()=>{g.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},shiftToBGR:()=>{g.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},convolution:T=>{let p=new Float32Array(T),b=1/l.width,k=1/l.height,P=u(H1);P&&(i.uniform1fv(P.uniform.m,p),i.uniform2f(P.uniform.px,b,k),f())},detectEdges:()=>{g.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},sobelX:()=>{g.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},sobelY:()=>{g.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},sharpen:T=>{let p=T||1;g.convolution.call(this,[0,-1*p,0,-1*p,1+4*p,-1*p,0,-1*p,0])},emboss:T=>{let p=T||1;g.convolution.call(this,[-2*p,-1*p,0,-1*p,1,1*p,0,1*p,2*p])},blur:T=>{let p=T/7/l.width,b=T/7/l.height,k=u(B1);k&&(i.uniform2f(k.uniform.px,0,b),f(x.INTERMEDIATE),i.uniform2f(k.uniform.px,p,0),f())},pixelate:T=>{let p=T/l.width,b=T/l.height,k=u(F1);k&&(i.uniform2f(k.uniform.size,p,b),f())}};this.add=function(T){let p=Array.prototype.slice.call(arguments,1),b=g[T];s.push({func:b,args:p})},this.reset=function(){s=[]},this.get=function(){return s},this.apply=function(T){y(T.width,T.height),e=0,t||(t=i.createTexture()),i.bindTexture(i.TEXTURE_2D,t),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,T);for(let p=0;px.data())),A=Math.max(s[0][0],s[1][0],s[2][0]),l=(A>1?255:1)/A,c;if(l>1){let x=[U.sub(n[0],o[0]),U.sub(n[1],o[1]),U.sub(n[2],o[2])],i=[U.sub(r[0],o[0]),U.sub(r[1],o[1]),U.sub(r[2],o[2])],y=[U.mul(x[0],l),U.mul(x[1],l),U.mul(x[2],l)],d=U.stack([y[0],y[1],y[2]],2);c=U.reshape(d,[1,t.shape[0]||0,t.shape[1]||0,3]),U.dispose([...x,...i,...y,d])}else c=U.expandDims(t,0);return U.dispose([...n,...o,...r,n,t,e]),c}var X2=3840,R0=null,M0=null,y2=null,e0,ne={inputSum:0,cacheDiff:1,sumMethod:0,inputTensor:void 0};function $t(){ne.inputSum=0,ne.cacheDiff=1,ne.sumMethod=0,ne.inputTensor=void 0}function Ae(e,t){let n;if(R.browser)if(R.worker){if(typeof OffscreenCanvas=="undefined")throw new Error("canvas error: attempted to run in web worker but OffscreenCanvas is not supported");n=new OffscreenCanvas(e,t)}else if(typeof document!="undefined")n=document.createElement("canvas"),n.width=e,n.height=t;else if(typeof navigator!="undefined"&&navigator.product==="ReactNative")if(typeof R.Canvas!="undefined")n=new R.Canvas(e,t);else if(typeof globalThis.Canvas!="undefined")n=new globalThis.Canvas(e,t);else throw new Error("canvas error: attempted to use canvas in react-native without canvas support installed");else throw new Error("canvas error: attempted to run in browser but DOM is not defined");else typeof R.Canvas!="undefined"?n=new R.Canvas(e,t):typeof globalThis.Canvas!="undefined"&&(n=new globalThis.Canvas(e,t));return n}function q2(e,t){let n=t||Ae(e.width,e.height);return n.getContext("2d").drawImage(e,0,0),n}async function U2(e,t,n=!0){var y,d,m;if(!e)return t.debug&&h("input error: input is missing"),{tensor:null,canvas:null};if(!(e instanceof N.Tensor)&&!(typeof Image!="undefined"&&e instanceof Image)&&!(typeof globalThis.Canvas!="undefined"&&e instanceof globalThis.Canvas)&&!(typeof ImageData!="undefined"&&e instanceof ImageData)&&!(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)&&!(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)&&!(typeof HTMLMediaElement!="undefined"&&e instanceof HTMLMediaElement)&&!(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)&&!(typeof HTMLCanvasElement!="undefined"&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas!="undefined"&&e instanceof OffscreenCanvas))throw new Error("input error: type not recognized");if(e instanceof N.Tensor){let f=null;if(e.isDisposedInternal)throw new Error("input error: attempted to use tensor but it is disposed");if(!e.shape)throw new Error("input error: attempted to use tensor without a shape");if(e.shape.length===3){if(e.shape[2]===3)f=N.expandDims(e,0);else if(e.shape[2]===4){let u=N.slice3d(e,[0,0,0],[-1,-1,3]);f=N.expandDims(u,0),N.dispose(u)}}else e.shape.length===4&&(e.shape[3]===3?f=N.clone(e):e.shape[3]===4&&(f=N.slice4d(e,[0,0,0,0],[-1,-1,-1,3])));if(f==null||f.shape.length!==4||f.shape[0]!==1||f.shape[3]!==3)throw new Error(`input error: attempted to use tensor with unrecognized shape: ${e.shape.toString()}`);if(f.dtype==="int32"){let u=N.cast(f,"float32");N.dispose(f),f=u}return{tensor:f,canvas:t.filter.return?M0:null}}if(typeof e.readyState!="undefined"&&e.readyState<=2)return t.debug&&h("input stream is not ready"),{tensor:null,canvas:R0};let o=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,r=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0;if(!o||!r)return t.debug&&h("cannot determine input dimensions"),{tensor:null,canvas:R0};let s=o,A=r;if(s>X2&&(s=X2,A=Math.trunc(s*r/o)),A>X2&&(A=X2,s=Math.trunc(A*o/r)),(((y=t.filter)==null?void 0:y.width)||0)>0?s=t.filter.width:(((d=t.filter)==null?void 0:d.height)||0)>0&&(s=o*((t.filter.height||0)/r)),(t.filter.height||0)>0?A=t.filter.height:(t.filter.width||0)>0&&(A=r*((t.filter.width||0)/o)),!s||!A)throw new Error("input error: cannot determine dimension");(!R0||R0.width!==s||R0.height!==A)&&(R0=Ae(s,A));let a=R0.getContext("2d");if(typeof ImageData!="undefined"&&e instanceof ImageData?a.putImageData(e,0,0):t.filter.flip&&typeof a.translate!="undefined"?(a.translate(o,0),a.scale(-1,1),a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),a.setTransform(1,0,0,1,0,0)):a.drawImage(e,0,0,o,r,0,0,R0.width,R0.height),(!M0||R0.width!==M0.width||R0.height!==M0.height)&&(M0=Ae(R0.width,R0.height)),t.filter.enabled&&R.webgl.supported?(e0||(e0=R.browser?new G1:null),R.filter=!!e0,e0!=null&&e0.add?(e0.reset(),t.filter.brightness!==0&&e0.add("brightness",t.filter.brightness),t.filter.contrast!==0&&e0.add("contrast",t.filter.contrast),t.filter.sharpness!==0&&e0.add("sharpen",t.filter.sharpness),t.filter.blur!==0&&e0.add("blur",t.filter.blur),t.filter.saturation!==0&&e0.add("saturation",t.filter.saturation),t.filter.hue!==0&&e0.add("hue",t.filter.hue),t.filter.negative&&e0.add("negative"),t.filter.sepia&&e0.add("sepia"),t.filter.vintage&&e0.add("brownie"),t.filter.sepia&&e0.add("sepia"),t.filter.kodachrome&&e0.add("kodachrome"),t.filter.technicolor&&e0.add("technicolor"),t.filter.polaroid&&e0.add("polaroid"),t.filter.pixelate!==0&&e0.add("pixelate",t.filter.pixelate),((m=e0.get())==null?void 0:m.length)>1?M0=e0.apply(R0):M0=e0.draw(R0)):(t.debug&&h("input process error: cannot initialize filters"),R.webgl.supported=!1,t.filter.enabled=!1,q2(R0,M0))):(q2(R0,M0),e0&&(e0=null),R.filter=!!e0),!n)return{tensor:null,canvas:M0};if(!M0)throw new Error("canvas error: cannot create output");let l,c=3;if(typeof ImageData!="undefined"&&e instanceof ImageData||e.data&&e.width&&e.height)if(R.browser&&N.browser)l=N.browser?N.browser.fromPixels(e):null;else{c=e.data.length/e.height/e.width;let f=new Uint8Array(e.data.buffer);l=N.tensor(f,[e.height,e.width,c],"int32")}else if((!y2||M0.width!==y2.width||M0.height!==y2.height)&&(y2=Ae(M0.width,M0.height)),N.browser&&R.browser)t.backend==="webgl"||t.backend==="humangl"||t.backend==="webgpu"?l=N.browser.fromPixels(M0):(y2=q2(M0),l=N.browser.fromPixels(y2));else{let g=q2(M0).getContext("2d").getImageData(0,0,s,A);c=g.data.length/s/A;let T=new Uint8Array(g.data.buffer);l=N.tensor(T,[s,A,c])}if(c===4){let f=N.slice3d(l,[0,0,0],[-1,-1,3]);N.dispose(l),l=f}if(!l)throw new Error("input error: cannot create tensor");let x=N.cast(l,"float32"),i=t.filter.equalization?await Z2(x):N.expandDims(x,0);if(N.dispose([l,x]),t.filter.autoBrightness){let f=N.max(i),u=await f.data();t.filter.brightness=u[0]>1?1-u[0]/255:1-u[0],N.dispose(f)}return{tensor:i,canvas:t.filter.return?M0:null}}async function V1(e,t){let n=!1;if(e.cacheSensitivity===0||!t.shape||t.shape.length!==4||t.shape[1]>3840||t.shape[2]>2160)return n;if(!ne.inputTensor)ne.inputTensor=N.clone(t);else if(ne.inputTensor.shape[1]!==t.shape[1]||ne.inputTensor.shape[2]!==t.shape[2])N.dispose(ne.inputTensor),ne.inputTensor=N.clone(t);else{let o={};o.diff=N.sub(t,ne.inputTensor),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;N.dispose([ne.inputTensor,o.diff,o.squared,o.sum]),ne.inputTensor=N.clone(t),n=s<=(e.cacheSensitivity||0)}return n}async function Z1(e,t,n){let o={};if(!t||!n||t.shape.length!==4||t.shape.length!==n.shape.length)return e.debug||h("invalid input tensor or tensor shapes do not match:",t.shape,n.shape),0;if(t.shape[0]!==1||n.shape[0]!==1||t.shape[3]!==3||n.shape[3]!==3)return e.debug||h("input tensors must be of shape [1, height, width, 3]:",t.shape,n.shape),0;o.input1=N.clone(t),o.input2=t.shape[1]!==n.shape[1]||t.shape[2]!==n.shape[2]?N.image.resizeBilinear(n,[t.shape[1],t.shape[2]]):N.clone(n),o.diff=N.sub(o.input1,o.input2),o.squared=N.mul(o.diff,o.diff),o.sum=N.sum(o.squared);let s=(await o.sum.data())[0]/(t.shape[1]||1)/(t.shape[2]||1)/255/3;return N.dispose([o.input1,o.input2,o.diff,o.squared,o.sum]),s}var z2,S2,j2,E2=class{constructor(){w(this,"browser");w(this,"node");w(this,"worker");w(this,"platform","");w(this,"agent","");w(this,"backends",[]);w(this,"initial");w(this,"filter");w(this,"tfjs");w(this,"offscreen");w(this,"perfadd",!1);w(this,"tensorflow",{version:void 0,gpu:void 0});w(this,"wasm",{supported:void 0,backend:void 0,simd:void 0,multithread:void 0});w(this,"webgl",{supported:void 0,backend:void 0,version:void 0,renderer:void 0,shader:void 0,vendor:void 0});w(this,"webgpu",{supported:void 0,backend:void 0,adapter:void 0});w(this,"cpu",{model:void 0,flags:[]});w(this,"kernels",[]);ue(this,z2,void 0);ue(this,S2,void 0);ue(this,j2,void 0);if(this.browser=typeof navigator!="undefined"&&typeof navigator.appVersion!="undefined",this.node=typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined",this.tfjs={version:W0.version["tfjs-core"]},this.offscreen=typeof OffscreenCanvas!="undefined",this.initial=!0,this.worker=this.browser&&this.offscreen?typeof WorkerGlobalScope!="undefined":void 0,typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined"){let t=navigator.userAgent||"",n=t.match(/\(([^()]+)\)/g);if(n!=null&&n[0]){let o=n[0].match(/\(([^()]+)\)/g);this.platform=o!=null&&o[0]?o[0].replace(/\(|\)/g,""):"",this.agent=t.replace(n[0],""),this.platform[1]&&(this.agent=this.agent.replace(n[1],"")),this.agent=this.agent.replace(/ /g," ")}}else typeof process!="undefined"&&(this.platform=`${process.platform} ${process.arch}`,this.agent=`NodeJS ${process.version}`)}get Canvas(){return Y0(this,z2)}set Canvas(t){Re(this,z2,t),globalThis.Canvas=t}get Image(){return Y0(this,S2)}set Image(t){Re(this,S2,t),globalThis.Image=t}get ImageData(){return Y0(this,j2)}set ImageData(t){Re(this,j2,t),globalThis.ImageData=t}async updateBackend(){this.backends=Object.keys(W0.engine().registryFactory);try{this.tensorflow={version:W0.backend().binding?W0.backend().binding.TF_Version:void 0,gpu:W0.backend().binding?W0.backend().binding.isUsingGpuDevice():void 0}}catch(o){}this.wasm.supported=typeof WebAssembly!="undefined",this.wasm.backend=this.backends.includes("wasm"),this.wasm.supported&&this.wasm.backend&&(this.wasm.simd=await W0.env().getAsync("WASM_HAS_SIMD_SUPPORT"),this.wasm.multithread=await W0.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"));let t=Ae(100,100),n=t?t.getContext("webgl2"):void 0;this.webgl.supported=typeof n!="undefined",this.webgl.backend=this.backends.includes("webgl"),this.webgl.supported&&this.webgl.backend&&n&&(this.webgl.version=n.getParameter(n.VERSION),this.webgl.vendor=n.getParameter(n.VENDOR),this.webgl.renderer=n.getParameter(n.RENDERER),this.webgl.shader=n.getParameter(n.SHADING_LANGUAGE_VERSION)),this.webgpu.supported=this.browser&&typeof navigator!="undefined"&&typeof navigator.gpu!="undefined",this.webgpu.backend=this.backends.includes("webgpu");try{if(this.webgpu.supported){let o=await navigator.gpu.requestAdapter();this.webgpu.adapter=await(o==null?void 0:o.requestAdapterInfo())}}catch(o){this.webgpu.supported=!1}try{this.kernels=W0.getKernelsForBackend(W0.getBackend()).map(o=>o.kernelName.toLowerCase())}catch(o){}}updateCPU(){let t={model:"",flags:[]};this.node&&this.platform.startsWith("linux"),this.cpu?this.cpu=t:Object.defineProperty(this,"cpu",{value:t})}};z2=new WeakMap,S2=new WeakMap,j2=new WeakMap;var R=new E2;var K2=class{constructor(){w(this,"config");w(this,"element");w(this,"stream");w(this,"devices",[]);w(this,"enumerate",async()=>{try{let t=await navigator.mediaDevices.enumerateDevices();this.devices=t.filter(n=>n.kind==="videoinput")}catch(t){this.devices=[]}return this.devices});w(this,"start",async t=>{var r,s;if(t!=null&&t.debug&&(this.config.debug=t==null?void 0:t.debug),t!=null&&t.crop&&(this.config.crop=t==null?void 0:t.crop),t!=null&&t.mode&&(this.config.mode=t==null?void 0:t.mode),t!=null&&t.width&&(this.config.width=t==null?void 0:t.width),t!=null&&t.height&&(this.config.height=t==null?void 0:t.height),t!=null&&t.id&&(this.config.id=t==null?void 0:t.id),t!=null&&t.element)if(typeof t.element=="string"){let A=document.getElementById(t.element);if(A&&A instanceof HTMLVideoElement)this.element=A;else return this.config.debug&&h("webcam","cannot get dom element",t.element),`webcam error: cannot get dom element: ${t.element}`}else if(t.element instanceof HTMLVideoElement)this.element=t.element;else return this.config.debug&&h("webcam","unknown dom element",t.element),`webcam error: unknown dom element: ${t.element}`;else this.element=document.createElement("video");let n={audio:!1,video:{facingMode:this.config.mode==="front"?"user":"environment",resizeMode:this.config.crop?"crop-and-scale":"none"}};if(((r=this.config)==null?void 0:r.width)>0&&(n.video.width={ideal:this.config.width}),((s=this.config)==null?void 0:s.height)>0&&(n.video.height={ideal:this.config.height}),this.config.id&&(n.video.deviceId=this.config.id),this.element.addEventListener("play",()=>{this.config.debug&&h("webcam","play")}),this.element.addEventListener("pause",()=>{this.config.debug&&h("webcam","pause")}),this.element.addEventListener("click",async()=>{!this.element||!this.stream||(this.element.paused?await this.element.play():this.element.pause())}),!(navigator!=null&&navigator.mediaDevices))return this.config.debug&&h("webcam error","no devices"),"webcam error: no devices";try{this.stream=await navigator.mediaDevices.getUserMedia(n)}catch(A){return h("webcam",A),`webcam error: ${A}`}return this.stream?(this.element.srcObject=this.stream,await new Promise(A=>{this.element?this.element.onloadeddata=()=>A(!0):A(!1)}),await this.element.play(),this.config.debug&&h("webcam",{width:this.width,height:this.height,label:this.label,stream:this.stream,track:this.track,settings:this.settings,constraints:this.constraints,capabilities:this.capabilities}),`webcam: ${this.label}`):(this.config.debug&&h("webcam error","no stream"),"webcam error no stream")});w(this,"pause",()=>{this.element&&this.element.pause()});w(this,"play",async()=>{this.element&&await this.element.play()});w(this,"stop",()=>{this.config.debug&&h("webcam","stop"),this.track&&this.track.stop()});this.config={element:void 0,debug:!0,mode:"front",crop:!1,width:0,height:0}}get track(){if(this.stream)return this.stream.getVideoTracks()[0]}get capabilities(){if(this.track)return this.track.getCapabilities?this.track.getCapabilities():void 0}get constraints(){if(this.track)return this.track.getConstraints?this.track.getConstraints():void 0}get settings(){if(!this.stream)return;let t=this.stream.getVideoTracks()[0];return t.getSettings?t.getSettings():void 0}get label(){return this.track?this.track.label:""}get paused(){var t;return((t=this.element)==null?void 0:t.paused)||!1}get width(){var t;return((t=this.element)==null?void 0:t.videoWidth)||0}get height(){var t;return((t=this.element)==null?void 0:t.videoHeight)||0}};var f2=V(G());var e5={};ze(e5,{"affectnet-mobilenet":()=>br,age:()=>gr,"anti-spoofing":()=>_r,antispoof:()=>ar,blazeface:()=>ir,"blazeface-back":()=>Tr,"blazeface-front":()=>vr,"blazepose-detector":()=>Rr,"blazepose-full":()=>Mr,"blazepose-heavy":()=>Pr,"blazepose-lite":()=>kr,centernet:()=>lr,default:()=>ds,efficientpose:()=>wr,"efficientpose-i-lite":()=>$r,"efficientpose-ii-lite":()=>es,"efficientpose-iv":()=>ts,emotion:()=>cr,faceboxes:()=>Er,facemesh:()=>dr,"facemesh-attention":()=>Sr,"facemesh-attention-pinto":()=>zr,"facemesh-detection-full":()=>jr,"facemesh-detection-short":()=>Ir,faceres:()=>xr,"faceres-deep":()=>Nr,gear:()=>Cr,"gear-e1":()=>Lr,"gear-e2":()=>Or,gender:()=>Dr,"gender-ssrnet-imdb":()=>Wr,handdetect:()=>Fr,"handlandmark-full":()=>Br,"handlandmark-lite":()=>yr,"handlandmark-sparse":()=>Hr,handskeleton:()=>Gr,handtrack:()=>fr,"insightface-efficientnet-b0":()=>ns,"insightface-ghostnet-strides1":()=>os,"insightface-ghostnet-strides2":()=>rs,"insightface-mobilenet-emore":()=>ss,"insightface-mobilenet-swish":()=>As,iris:()=>mr,liveness:()=>pr,meet:()=>Vr,mobileface:()=>Zr,mobilefacenet:()=>Xr,models:()=>ur,"movenet-lightning":()=>hr,"movenet-multipose":()=>qr,"movenet-thunder":()=>Ur,nanodet:()=>Yr,"nanodet-e":()=>as,"nanodet-g":()=>is,"nanodet-m":()=>ls,"nanodet-t":()=>cs,posenet:()=>Kr,rvm:()=>Jr,selfie:()=>Qr});var ar=853098,ir=538928,lr=4030290,cr=820516,dr=1477958,xr=6978814,yr=2023432,fr=2964837,mr=2599092,pr=592976,ur=0,hr=4650216,br=6920630,gr=161240,Tr=538928,vr=402048,Rr=5928856,Mr=6339202,Pr=27502466,kr=2726402,wr=5651240,Er=2013002,zr=2387598,Sr=2382414,jr=1026192,Ir=201268,Nr=13957620,Lr=112438,Or=112438,Cr=1498916,Wr=161236,Dr=201808,Fr=3515612,Br=5431368,Hr=5286322,Gr=5502280,Vr=372228,Zr=2183192,Xr=5171976,qr=9448838,Ur=12477112,Yr=7574558,Kr=5032780,Jr=3739355,Qr=212886,_r=853098,$r=2269064,es=5651240,ts=25643252,ns=13013224,os=8093408,rs=8049584,ss=6938536,As=12168584,as=12319156,is=7574558,ls=1887474,cs=5294216,ds={antispoof:ar,blazeface:ir,centernet:lr,emotion:cr,facemesh:dr,faceres:xr,"handlandmark-lite":yr,handtrack:fr,iris:mr,liveness:pr,models:ur,"movenet-lightning":hr,"affectnet-mobilenet":br,age:gr,"blazeface-back":Tr,"blazeface-front":vr,"blazepose-detector":Rr,"blazepose-full":Mr,"blazepose-heavy":Pr,"blazepose-lite":kr,efficientpose:wr,faceboxes:Er,"facemesh-attention-pinto":zr,"facemesh-attention":Sr,"facemesh-detection-full":jr,"facemesh-detection-short":Ir,"faceres-deep":Nr,"gear-e1":Lr,"gear-e2":Or,gear:Cr,"gender-ssrnet-imdb":Wr,gender:Dr,handdetect:Fr,"handlandmark-full":Br,"handlandmark-sparse":Hr,handskeleton:Gr,meet:Vr,mobileface:Zr,mobilefacenet:Xr,"movenet-multipose":qr,"movenet-thunder":Ur,nanodet:Yr,posenet:Kr,rvm:Jr,selfie:Qr,"anti-spoofing":_r,"efficientpose-i-lite":$r,"efficientpose-ii-lite":es,"efficientpose-iv":ts,"insightface-efficientnet-b0":ns,"insightface-ghostnet-strides1":os,"insightface-ghostnet-strides2":rs,"insightface-mobilenet-emore":ss,"insightface-mobilenet-swish":As,"nanodet-e":as,"nanodet-g":is,"nanodet-m":ls,"nanodet-t":cs};var D0={cacheModels:!0,cacheSupported:!0,verbose:!0,debug:!1,modelBasePath:""},I0={};async function xs(e,t){return D0.debug&&h("load model fetch:",e,t),fetch(e,t)}function X1(e){D0.cacheModels=e.cacheModels,D0.verbose=e.debug,D0.modelBasePath=e.modelBasePath}async function L(e){var c,x,i,y;let t=O1(D0.modelBasePath,e||"");t.toLowerCase().endsWith(".json")||(t+=".json");let n=t.includes("/")?t.split("/"):t.split("\\"),o=n[n.length-1].replace(".json",""),r="indexeddb://"+o;I0[o]={name:o,sizeFromManifest:0,sizeLoadedWeights:0,sizeDesired:e5[o],inCache:!1,url:""},D0.cacheSupported=typeof indexedDB!="undefined";let s={};try{s=D0.cacheSupported&&D0.cacheModels?await f2.io.listModels():{}}catch(d){D0.cacheSupported=!1}I0[o].inCache=D0.cacheSupported&&D0.cacheModels&&Object.keys(s).includes(r),I0[o].url=I0[o].inCache?r:t;let A=typeof fetch=="undefined"?{}:{fetchFunc:(d,m)=>xs(d,m)},a=new f2.GraphModel(I0[o].url,A),l=!1;try{a.findIOHandler(),D0.debug&&h("model load handler:",a.handler)}catch(d){h("error finding model i/o handler:",t,d)}try{let d=await((c=a.handler)==null?void 0:c.load())||null;I0[o].sizeFromManifest=((x=d==null?void 0:d.weightData)==null?void 0:x.byteLength)||0,d?a.loadSync(d):a=await f2.loadGraphModel(I0[o].inCache?r:t,A),I0[o].sizeLoadedWeights=((y=(i=a.artifacts)==null?void 0:i.weightData)==null?void 0:y.byteLength)||0,D0.verbose&&h("load:",{model:o,url:a.modelUrl,bytes:I0[o].sizeLoadedWeights}),l=!0}catch(d){h("error loading model:",t,d)}if(l&&D0.cacheModels&&D0.cacheSupported&&!I0[o].inCache)try{let d=await a.save(r);D0.debug&&h("model saved:",r,d)}catch(d){h("error saving model:",t,d)}return a}var t5="3.2.2";var S=V(G());var u0=V(G());var o0={name:"humangl",priority:999,canvas:null,gl:null,extensions:[],webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function ms(){let e=o0.gl;e&&(o0.extensions=e.getSupportedExtensions())}function q1(e){var t;if(e.config.backend==="humangl"&&(o0.name in u0.engine().registry&&!((t=o0==null?void 0:o0.gl)!=null&&t.getParameter(o0.gl.VERSION))&&(h("humangl error: backend invalid context"),e.models.reset()),!u0.findBackend(o0.name))){try{o0.canvas=Ae(100,100)}catch(r){h("humangl error: cannot create canvas:",r);return}try{if(o0.gl=o0.canvas.getContext("webgl2",o0.webGLattr),!o0.gl){h("humangl error: cannot get webgl context");return}if(!o0.gl.getParameter(o0.gl.VERSION).includes("2.0")){h("backend override: using fallback webgl backend as webgl 2.0 is not detected"),e.config.backend="webgl";return}o0.canvas&&(o0.canvas.addEventListener("webglcontextlost",s=>{throw h("humangl error:",s.type),h("possible browser memory leak using webgl or conflict with multiple backend registrations"),e.emit("error"),new Error("backend error: webgl context lost")}),o0.canvas.addEventListener("webglcontextrestored",s=>{h("humangl error: context restored:",s)}),o0.canvas.addEventListener("webglcontextcreationerror",s=>{h("humangl error: context create:",s)}))}catch(r){h("humangl error: cannot get webgl context:",r);return}try{u0.setWebGLContext(2,o0.gl)}catch(r){h("humangl error: cannot set webgl context:",r);return}try{let r=new u0.GPGPUContext(o0.gl);u0.registerBackend(o0.name,()=>new u0.MathBackendWebGL(r),o0.priority)}catch(r){h("humangl error: cannot register webgl backend:",r);return}try{u0.getKernelsForBackend("webgl").forEach(s=>{let A={...s,backendName:o0.name};u0.registerKernel(A)})}catch(r){h("humangl error: cannot update webgl backend registration:",r);return}try{u0.env().flagRegistry.WEBGL_VERSION&&u0.env().set("WEBGL_VERSION",2)}catch(r){h("humangl error: cannot set WebGL backend flags:",r);return}ms();let n=u0.backend(),o=typeof n.gpgpu!="undefined"?n.getGPGPUContext().gl:null;o?e.config.debug&&h("humangl backend registered:",{webgl:o.getParameter(o.VERSION),renderer:o.getParameter(o.RENDERER)}):h("humangl error: no current gl context:",o,o0.gl)}}var Se=V(G()),C={tf255:255,tf1:1,tf2:2,tf05:.5,tf127:127.5,rgb:[.2989,.587,.114]};function U1(){C.tf255=Se.scalar(255,"float32"),C.tf1=Se.scalar(1,"float32"),C.tf2=Se.scalar(2,"float32"),C.tf05=Se.scalar(.5,"float32"),C.tf127=Se.scalar(127.5,"float32"),C.rgb=Se.tensor1d([.2989,.587,.114],"float32")}async function hs(){var e;return await R.updateBackend(),(e=R.tensorflow)!=null&&e.version?"tensorflow":R.webgpu.supported&&R.webgpu.backend?"webgpu":R.webgl.supported&&R.webgl.backend?"webgl":R.wasm.supported&&R.wasm.backend?"wasm":"cpu"}function bs(e){let t=[];if(!R.kernels.includes("mod")){let n={kernelName:"Mod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.sub(o.inputs.a,S.mul(S.div(o.inputs.a,o.inputs.b),o.inputs.b)))};S.registerKernel(n),R.kernels.push("mod"),t.push("mod")}if(!R.kernels.includes("floormod")){let n={kernelName:"FloorMod",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>S.add(S.mul(S.floorDiv(o.inputs.a,o.inputs.b),o.inputs.b),S.mod(o.inputs.a,o.inputs.b)))};S.registerKernel(n),R.kernels.push("floormod"),t.push("floormod")}if(!R.kernels.includes("rotatewithoffset")&&e.softwareKernels){let n={kernelName:"RotateWithOffset",backendName:S.getBackend(),kernelFunc:o=>S.tidy(()=>{let r=S.getBackend();S.setBackend("cpu");let s=S.image.rotateWithOffset(o.inputs.image,o.attrs.radians,o.attrs.fillValue,o.attrs.center);return S.setBackend(r),s})};S.registerKernel(n),R.kernels.push("rotatewithoffset"),t.push("rotatewithoffset")}t.length>0&&e.debug&&h("registered kernels:",t)}var Y1={};async function I2(e,t=!1){var n,o;if(e.state="backend",((n=e.config.backend)==null?void 0:n.length)===0&&(e.config.backend=await hs()),t||R.initial||e.config.backend&&e.config.backend.length>0&&S.getBackend()!==e.config.backend){let r=v();if(e.config.backend&&e.config.backend.length>0){typeof window=="undefined"&&typeof WorkerGlobalScope!="undefined"&&e.config.debug&&e.config.debug&&h("running inside web worker"),typeof navigator!="undefined"&&((o=navigator==null?void 0:navigator.userAgent)!=null&&o.toLowerCase().includes("electron"))&&e.config.debug&&h("running inside electron");let s=Object.keys(S.engine().registryFactory);if(e.config.backend==="humangl"&&!s.includes("humangl")&&(q1(e),s=Object.keys(S.engine().registryFactory)),e.config.debug&&h("available backends:",s),R.browser&&!R.node&&e.config.backend==="tensorflow"&&s.includes("webgl")&&(e.config.debug&&h("override: backend set to tensorflow while running in browser"),e.config.backend="webgl"),R.node&&!R.browser&&(e.config.backend==="webgl"||e.config.backend==="humangl")&&s.includes("tensorflow")&&(e.config.debug&&h(`override: backend set to ${e.config.backend} while running in nodejs`),e.config.backend="tensorflow"),R.browser&&e.config.backend==="webgpu")if(typeof navigator=="undefined"||typeof navigator.gpu=="undefined")h("override: backend set to webgpu but browser does not support webgpu"),e.config.backend="webgl";else{let A=await navigator.gpu.requestAdapter();if(e.config.debug&&h("enumerated webgpu adapter:",A),!A)h("override: backend set to webgpu but browser reports no available gpu"),e.config.backend="webgl";else{let a="requestAdapterInfo"in A?await A.requestAdapterInfo():void 0;h("webgpu adapter info:",a)}}if(s.includes(e.config.backend)||(h(`error: backend ${e.config.backend} not found in registry`),e.config.backend=R.node?"tensorflow":"webgl",e.config.debug&&h(`override: setting backend ${e.config.backend}`)),e.config.debug&&h("setting backend:",[e.config.backend]),e.config.backend==="wasm"){if(S.env().flagRegistry.CANVAS2D_WILL_READ_FREQUENTLY&&S.env().set("CANVAS2D_WILL_READ_FREQUENTLY",!0),e.config.debug&&h("wasm path:",e.config.wasmPath),typeof S.setWasmPaths!="undefined")S.setWasmPaths(e.config.wasmPath,e.config.wasmPlatformFetch);else throw new Error("backend error: attempting to use wasm backend but wasm path is not set");let A=!1,a=!1;try{A=await S.env().getAsync("WASM_HAS_MULTITHREAD_SUPPORT"),a=await S.env().getAsync("WASM_HAS_SIMD_SUPPORT"),e.config.debug&&h(`wasm execution: ${a?"simd":"no simd"} ${A?"multithreaded":"singlethreaded"}`),e.config.debug&&!a&&h("warning: wasm simd support is not enabled")}catch(l){h("wasm detection failed")}}try{await S.setBackend(e.config.backend),await S.ready()}catch(A){return h("error: cannot set backend:",e.config.backend,A),!1}e.config.debug&&(Y1=JSON.parse(JSON.stringify(S.env().flags)))}if((S.getBackend()==="humangl"||S.getBackend()==="webgl")&&(S.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&S.env().set("WEBGL_USE_SHAPES_UNIFORMS",!0),S.env().flagRegistry.WEBGL_EXP_CONV&&S.env().set("WEBGL_EXP_CONV",!0),e.config.debug&&typeof e.config.deallocate!="undefined"&&e.config.deallocate&&(h("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",!0),S.env().set("WEBGL_DELETE_TEXTURE_THRESHOLD",0))),S.getBackend(),e.config.debug){let s=S.env().flags,A={};for(let a of Object.keys(s))Y1[a]!==s[a]&&(A[a]=s[a]);e.config.debug&&Object.keys(A).length>0&&h("backend:",S.getBackend(),"flags:",A)}if(e.config.flags&&Object.keys(e.config.flags).length>0){e.config.debug&&h("flags:",e.config.flags);for(let[s,A]of Object.entries(e.config.flags))S.env().set(s,A)}S.enableProdMode(),U1(),e.performance.initBackend=Math.trunc(v()-r),e.config.backend=S.getBackend(),await R.updateBackend(),bs(e.config)}return!0}function J2(e,t){for(let n of e){let o={kernelName:n,backendName:t.backend,kernelFunc:r=>{var s;return t.debug&&h("kernelFunc",n,t.backend,r),(s=r==null?void 0:r.inputs)==null?void 0:s.info}};S.registerKernel(o)}R.kernels=S.getKernelsForBackend(S.getBackend()).map(n=>n.kernelName.toLowerCase())}var nt={};ze(nt,{all:()=>Js,body:()=>_2,canvas:()=>Ks,face:()=>Q2,gesture:()=>tt,hand:()=>$2,init:()=>i5,object:()=>et,options:()=>f0,person:()=>Ys});var oe=e=>{if(!e)h("draw error: invalid canvas");else if(!e.getContext)h("draw error: canvas context not defined");else{let t=e.getContext("2d",{willReadFrequently:!0});if(!t)h("draw error: cannot get canvas context");else return t}return null},Je=e=>Math.round(e*180/Math.PI),Y=(e,t,n)=>e.replace(t,typeof n=="number"?n.toFixed(1):n),Qe=(e,t)=>{if(!t.useDepth||typeof e=="undefined")return t.color;let n=Uint8ClampedArray.from([127+2*e,127-2*e,255]);return`rgba(${n[0]}, ${n[1]}, ${n[2]}, ${t.alpha})`};function re(e,t,n,o,r){let s=t.replace(/\[.*\]/g,"").split(` `).map(a=>a.trim()),A=Math.max(0,n);for(let a=s.length-1;a>=0;a--){let l=a*r.lineHeight+o;r.shadowColor&&r.shadowColor!==""&&(e.fillStyle=r.shadowColor,e.fillText(s[a],A+5,l+16)),e.fillStyle=r.labelColor,e.fillText(s[a],A+4,l+15)}}function he(e,t,n,o,r){e.fillStyle=Qe(o,r),e.beginPath(),e.arc(t,n,r.pointSize,0,2*Math.PI),e.fill()}function be(e,t,n,o,r,s){if(e.beginPath(),e.lineWidth=s.lineWidth,s.useCurves){let A=(t+t+o)/2,a=(n+n+r)/2;e.ellipse(A,a,o/2,r/2,0,0,2*Math.PI)}else e.moveTo(t+s.roundRect,n),e.lineTo(t+o-s.roundRect,n),e.quadraticCurveTo(t+o,n,t+o,n+s.roundRect),e.lineTo(t+o,n+r-s.roundRect),e.quadraticCurveTo(t+o,n+r,t+o-s.roundRect,n+r),e.lineTo(t+s.roundRect,n+r),e.quadraticCurveTo(t,n+r,t,n+r-s.roundRect),e.lineTo(t,n+s.roundRect),e.quadraticCurveTo(t,n,t+s.roundRect,n),e.closePath();e.stroke()}function n5(e,t,n){if(!(t.length<2)){e.beginPath(),e.moveTo(t[0][0],t[0][1]);for(let o of t)e.strokeStyle=Qe(o[2]||0,n),e.lineTo(Math.trunc(o[0]),Math.trunc(o[1]));e.stroke(),n.fillPolygons&&(e.closePath(),e.fill())}}function J1(e,t,n){if(!(t.length<2)){if(e.lineWidth=n.lineWidth,!n.useCurves||t.length<=2){n5(e,t,n);return}e.moveTo(t[0][0],t[0][1]);for(let o=0;oN2[e]),Ga=Ts.map(e=>N2[e]),Va=vs.map(e=>N2[e]);function je(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Rs=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Ms=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ps=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],ks=[[474,475],[475,476],[476,477],[477,474]],ws=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Es=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],zs=[[469,470],[470,471],[471,472],[472,469]],Ss=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],Za={lips:je(Rs),leftEye:je(Ms),leftEyebrow:je(Ps),leftIris:je(ks),rightEye:je(ws),rightEyebrow:je(Es),rightIris:je(zs),faceOval:je(Ss)};var js=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],Is=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],Ns=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],Ls=[[474,475],[475,476],[476,477],[477,474]],Os=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],Cs=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],Ws=[[469,470],[470,471],[471,472],[472,469]],Ds=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]];function Ie(e){let t=e.map(n=>n[0]);return t.push(e[e.length-1][1]),t}var Fs={lips:Ie(js),leftEye:Ie(Is),leftEyebrow:Ie(Ns),leftIris:Ie(Ls),rightEye:Ie(Os),rightEyebrow:Ie(Cs),rightIris:Ie(Ws),faceOval:Ie(Ds)},Bs=Object.entries(Fs).map(([e,t])=>t.map(n=>[n,e])).flat(),Xa=new Map(Bs),L2=[61,146,91,181,84,17,314,405,321,375,291,185,40,39,37,0,267,269,270,409,78,95,88,178,87,14,317,402,318,324,308,191,80,81,82,13,312,311,310,415,76,77,90,180,85,16,315,404,320,307,306,184,74,73,72,11,302,303,304,408,62,96,89,179,86,15,316,403,319,325,292,183,42,41,38,12,268,271,272,407],e2=[33,7,163,144,145,153,154,155,133,246,161,160,159,158,157,173,130,25,110,24,23,22,26,112,243,247,30,29,27,28,56,190,226,31,228,229,230,231,232,233,244,113,225,224,223,222,221,189,35,124,46,53,52,65,143,111,117,118,119,120,121,128,245,156,70,63,105,66,107,55,193],t2=[263,249,390,373,374,380,381,382,362,466,388,387,386,385,384,398,359,255,339,254,253,252,256,341,463,467,260,259,257,258,286,414,446,261,448,449,450,451,452,453,464,342,445,444,443,442,441,413,265,353,276,283,282,295,372,340,346,347,348,349,350,357,465,383,300,293,334,296,336,285,417];var q;function Hs(e,t){var o,r,s,A,a,l,c,x,i;if(!q.drawLabels||((o=q.faceLabels)==null?void 0:o.length)===0)return;let n=q.faceLabels.slice();if(n=Y(n,"[id]",e.id.toFixed(0)),e.score&&(n=Y(n,"[score]",100*e.score)),e.gender&&(n=Y(n,"[gender]",e.gender)),e.genderScore&&(n=Y(n,"[genderScore]",100*e.genderScore)),e.age&&(n=Y(n,"[age]",e.age)),e.distance&&(n=Y(n,"[distance]",100*e.distance)),e.real&&(n=Y(n,"[real]",100*e.real)),e.live&&(n=Y(n,"[live]",100*e.live)),e.emotion&&e.emotion.length>0){let y=e.emotion.map(d=>`${Math.trunc(100*d.score)}% ${d.emotion}`);y.length>3&&(y.length=3),n=Y(n,"[emotions]",y.join(" "))}(s=(r=e.rotation)==null?void 0:r.angle)!=null&&s.roll&&(n=Y(n,"[roll]",Je(e.rotation.angle.roll))),(a=(A=e.rotation)==null?void 0:A.angle)!=null&&a.yaw&&(n=Y(n,"[yaw]",Je(e.rotation.angle.yaw))),(c=(l=e.rotation)==null?void 0:l.angle)!=null&&c.pitch&&(n=Y(n,"[pitch]",Je(e.rotation.angle.pitch))),(i=(x=e.rotation)==null?void 0:x.gaze)!=null&&i.bearing&&(n=Y(n,"[gaze]",Je(e.rotation.gaze.bearing))),re(t,n,e.box[0],e.box[1],q)}function Gs(e,t){var n,o,r,s;if((n=e.annotations)!=null&&n.leftEyeIris&&((o=e.annotations)!=null&&o.leftEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.color,t.beginPath();let A=Math.abs(e.annotations.leftEyeIris[3][0]-e.annotations.leftEyeIris[1][0])/2,a=Math.abs(e.annotations.leftEyeIris[4][1]-e.annotations.leftEyeIris[2][1])/2;t.ellipse(e.annotations.leftEyeIris[0][0],e.annotations.leftEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}if((r=e.annotations)!=null&&r.rightEyeIris&&((s=e.annotations)!=null&&s.rightEyeIris[0])){t.strokeStyle=q.useDepth?"rgba(255, 200, 255, 0.3)":q.color,t.beginPath();let A=Math.abs(e.annotations.rightEyeIris[3][0]-e.annotations.rightEyeIris[1][0])/2,a=Math.abs(e.annotations.rightEyeIris[4][1]-e.annotations.rightEyeIris[2][1])/2;t.ellipse(e.annotations.rightEyeIris[0][0],e.annotations.rightEyeIris[0][1],A,a,0,0,2*Math.PI),t.stroke(),q.fillPolygons&&(t.fillStyle=q.useDepth?"rgba(255, 255, 200, 0.3)":q.color,t.fill())}}function Vs(e,t){var n;if(q.drawGaze&&((n=e.rotation)!=null&&n.angle)&&typeof Path2D!="undefined"){t.strokeStyle="pink";let o=e.box[0]+e.box[2]/2-e.box[3]*Je(e.rotation.angle.yaw)/90,r=e.box[1]+e.box[3]/2+e.box[2]*Je(e.rotation.angle.pitch)/90,s=new Path2D(` M ${e.box[0]+e.box[2]/2} ${e.box[1]} C @@ -118,7 +118,7 @@ live: [live]% [emotions] roll: [roll]\xB0 yaw:[yaw]\xB0 pitch:[pitch]\xB0 - gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],c5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function n3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function st(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=X0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],dt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},yt=e=>{let t=lt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},h3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},R3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var M3=6,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf05);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function Y3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function zn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function Et(e,t=1.5){let n=C2(e),o=wt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function zt(e){let t=C2(e),n=wt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var _n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=kt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[no]),a.splice(no,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function r1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/qe[1][1],i[1]/qe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Nt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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"]];function Ro(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?Po(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` + gaze: [gaze]\xB0`,body:"body [score]%",bodyPart:"[label] [score]%",object:"[label] [score]%",hand:"[label] [score]%",finger:"[label]",gesture:"[where] [who]: [what]"};var a5=0;function Ys(e,t,n){let o=a0(f0,n);if(!t||!e)return;let r=oe(e);if(r){r.lineJoin="round",r.font=o.font;for(let s=0;sc5,kpt:()=>l5});var l5=["nose","leftEyeInside","leftEye","leftEyeOutside","rightEyeInside","rightEye","rightEyeOutside","leftEar","rightEar","leftMouth","rightMouth","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftPinky","rightPinky","leftIndex","rightIndex","leftThumb","rightThumb","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle","leftHeel","rightHeel","leftFoot","rightFoot","bodyCenter","bodyTop","leftPalm","leftHand","rightPalm","rightHand"],c5={shoulders:["leftShoulder","rightShoulder"],hips:["rightHip","leftHip"],mouth:["leftMouth","rightMouth"],leftLegUpper:["leftHip","leftKnee"],leftLegLower:["leftKnee","leftAnkle"],leftFoot:["leftAnkle","leftHeel","leftFoot"],leftTorso:["leftShoulder","leftHip"],leftArmUpper:["leftShoulder","leftElbow"],leftArmLower:["leftElbow","leftWrist"],leftHand:["leftWrist","leftPalm"],leftHandPinky:["leftPalm","leftPinky"],leftHandIndex:["leftPalm","leftIndex"],leftHandThumb:["leftPalm","leftThumb"],leftEyeOutline:["leftEyeInside","leftEyeOutside"],rightLegUpper:["rightHip","rightKnee"],rightLegLower:["rightKnee","rightAnkle"],rightFoot:["rightAnkle","rightHeel","rightFoot"],rightTorso:["rightShoulder","rightHip"],rightArmUpper:["rightShoulder","rightElbow"],rightArmLower:["rightElbow","rightWrist"],rightHand:["rightWrist","rightPalm"],rightHandPinky:["rightPalm","rightPinky"],rightHandIndex:["rightPalm","rightIndex"],rightHandThumb:["rightPalm","rightThumb"],rightEyeOutline:["rightEyeInside","rightEyeOutside"]};var D=V(G());var se,n2=224,$1,Qs=5,rt=[8,16,32,32,32];function _s(){let e=[],t=0;for(;tn.x)),y:D.tensor1d(e.map(n=>n.y))}}async function e3(e){if(R.initial&&(se=null),!se&&e.body.detector&&e.body.detector.modelPath){se=await L(e.body.detector.modelPath);let t=se!=null&&se.executor?Object.values(se.modelSignature.inputs):void 0;n2=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}else e.debug&&se&&h("cached model:",se.modelUrl);return _s(),se}var _1=[5,5];function $s(e,t){return D.tidy(()=>{let n=D.split(e,12,1),o=D.squeeze(n[0]),r=D.squeeze(n[1]),s=D.squeeze(n[2]),A=D.squeeze(n[3]);o=D.add(D.div(o,n2),t.x),r=D.add(D.div(r,n2),t.y),s=D.mul(D.div(s,n2),_1[0]),A=D.mul(D.div(A,n2),_1[1]);let a=D.sub(o,D.div(s,2)),l=D.sub(r,D.div(A,2)),c=D.add(a,s),x=D.add(l,A);return D.stack([a,l,c,x],1)})}async function eA(e,t,n,o){var c,x;let r=[],s={};s.boxes=$s(e,$1),s.scores=D.sigmoid(t),s.nms=await D.image.nonMaxSuppressionAsync(s.boxes,s.scores,1,((c=n.body.detector)==null?void 0:c.minConfidence)||.1,((x=n.body.detector)==null?void 0:x.iouThreshold)||.1);let A=await s.nms.data(),a=await s.scores.data(),l=await s.boxes.array();for(let i of Array.from(A)){let y=a[i],d=l[i],m=[Math.round(d[0]*o[0]),Math.round(d[1]*o[1]),Math.round(d[2]*o[0]),Math.round(d[3]*o[1])],f={score:y,boxRaw:d,box:m};r.push(f)}return Object.keys(s).forEach(i=>D.dispose(s[i])),r}async function t3(e,t,n){let o={};o.res=se==null?void 0:se.execute(e,["Identity"]),o.logitsRaw=D.slice(o.res,[0,0,0],[1,-1,1]),o.boxesRaw=D.slice(o.res,[0,0,1],[1,-1,-1]),o.logits=D.squeeze(o.logitsRaw),o.boxes=D.squeeze(o.boxesRaw);let r=await eA(o.boxes,o.logits,t,n);return Object.keys(o).forEach(s=>D.dispose(o[s])),r}function Le(e,t=[1,1]){let n=[e.map(a=>a[0]),e.map(a=>a[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[o[0],o[1],r[0]-o[0],r[1]-o[1]],A=[s[0]/t[0],s[1]/t[1],s[2]/t[0],s[3]/t[1]];return{box:s,boxRaw:A}}function n3(e,t=[1,1]){let n=[e.map(c=>c[0]),e.map(c=>c[1])],o=[Math.min(...n[0]),Math.min(...n[1])],r=[Math.max(...n[0]),Math.max(...n[1])],s=[(o[0]+r[0])/2,(o[1]+r[1])/2],A=Math.max(s[0]-o[0],s[1]-o[1],-s[0]+r[0],-s[1]+r[1]),a=[Math.trunc(s[0]-A),Math.trunc(s[1]-A),Math.trunc(2*A),Math.trunc(2*A)],l=[a[0]/t[0],a[1]/t[1],a[2]/t[0],a[3]/t[1]];return{box:a,boxRaw:l}}function st(e,t){let n=[e[2]*t,e[3]*t];return[e[0]-(n[0]-e[2])/2,e[1]-(n[1]-e[3])/2,n[0],n[1]]}var Z0,x5=256,d5=Number.MAX_SAFE_INTEGER,tA={landmarks:["ld_3d","activation_segmentation","activation_heatmap","world_3d","output_poseflag"],detector:[]},at=[],Oe=[[0,0],[0,0],[0,0],[0,0]],o3=0,r3=e=>1-1/(1+Math.exp(e)),A3=e=>e3(e);async function a3(e){if(R.initial&&(Z0=null),Z0)e.debug&&h("cached model:",Z0.modelUrl);else{Z0=await L(e.body.modelPath);let t=Z0!=null&&Z0.executor?Object.values(Z0.modelSignature.inputs):void 0;x5=Array.isArray(t)?parseInt(t[0].tensorShape.dim[1].size):0}return Z0}function s3(e,t,n){var s,A;let o={};if(!((s=e==null?void 0:e.shape)!=null&&s[1])||!((A=e==null?void 0:e.shape)!=null&&A[2]))return e;let r;if(n&&(o.cropped=X0.image.cropAndResize(e,[n],[0],[e.shape[1],e.shape[2]])),e.shape[1]!==e.shape[2]){let a=[e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],l=[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0];Oe=[[0,0],a,l,[0,0]],o.pad=X0.pad(o.cropped||e,Oe),o.resize=X0.image.resizeBilinear(o.pad,[t,t]),r=X0.div(o.resize,C.tf255)}else e.shape[1]!==t?(o.resize=X0.image.resizeBilinear(o.cropped||e,[t,t]),r=X0.div(o.resize,C.tf255)):r=X0.div(o.cropped||e,C.tf255);return Object.keys(o).forEach(a=>X0.dispose(o[a])),r}function nA(e,t,n){for(let o of e)o.position=[Math.trunc(o.position[0]*(t[0]+Oe[2][0]+Oe[2][1])/t[0]-Oe[2][0]),Math.trunc(o.position[1]*(t[1]+Oe[1][0]+Oe[1][1])/t[1]-Oe[1][0]),o.position[2]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1],2*o.position[2]/(t[0]+t[1])];if(n){let o=n[2]-n[0],r=n[3]-n[1];for(let s of e)s.positionRaw=[s.positionRaw[0]/r+n[1],s.positionRaw[1]/o+n[0],s.positionRaw[2]],s.position=[Math.trunc(s.positionRaw[0]*t[0]),Math.trunc(s.positionRaw[1]*t[1]),s.positionRaw[2]]}return e}function oA(e){let t=e.find(a=>a.part==="leftPalm"),n=e.find(a=>a.part==="leftWrist"),o=e.find(a=>a.part==="leftIndex");t.position[2]=((n.position[2]||0)+(o.position[2]||0))/2;let r=e.find(a=>a.part==="rightPalm"),s=e.find(a=>a.part==="rightWrist"),A=e.find(a=>a.part==="rightIndex");r.position[2]=((s.position[2]||0)+(A.position[2]||0))/2}async function rA(e,t,n){if(!(Z0!=null&&Z0.executor))return null;let o={};[o.ld,o.segmentation,o.heatmap,o.world,o.poseflag]=Z0==null?void 0:Z0.execute(e,tA.landmarks);let r=(await o.poseflag.data())[0],s=await o.ld.data(),A=await o.world.data();Object.keys(o).forEach(m=>X0.dispose(o[m]));let a=[],l=5;for(let m=0;mm.position),i=Le(x,[n[0],n[1]]),y={};for(let[m,f]of Object.entries(c5)){let u=[];for(let g=0;gb.part===f[g]),p=c.find(b=>b.part===f[g+1]);T&&p&&u.push([T.position,p.position])}y[m]=u}return{id:0,score:Math.trunc(100*r)/100,box:i.box,boxRaw:i.boxRaw,keypoints:c,annotations:y}}async function y5(e,t){var s,A,a;let n=[e.shape[2]||0,e.shape[1]||0],o=(t.body.skipTime||0)>v()-o3,r=d5<(t.body.skipFrames||0);if(t.skipAllowed&&o&&r&&at!==null)d5++;else{let l=[];if((A=(s=t.body)==null?void 0:s.detector)!=null&&A.enabled){let c=s3(e,224);l=await t3(c,t,n),X0.dispose(c)}else l=[{box:[0,0,0,0],boxRaw:[0,0,1,1],score:0}];for(let c=0;cF0.dispose(o[c])),r}async function p5(e,t){if(!(q0!=null&&q0.executor))return[];let n=(t.object.skipTime||0)>v()-l3,o=m5<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&f5.length>0?(m5++,f5):(m5=0,new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=F0.image.resizeBilinear(e,[o2,o2]),a=t.object.enabled?q0==null?void 0:q0.execute(A,["tower_0/detections"]):null;l3=v(),F0.dispose(A);let l=await sA(a,s,t);f5=l,r(l)}))}var J=V(G());var it={};ze(it,{connected:()=>h5,kpt:()=>u5});var u5=["head","neck","rightShoulder","rightElbow","rightWrist","chest","leftShoulder","leftElbow","leftWrist","bodyCenter","rightHip","rightKnee","rightAnkle","leftHip","leftKnee","leftAnkle"],h5={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var i0,x3=0,B0={id:0,keypoints:[],box:[0,0,0,0],boxRaw:[0,0,0,0],score:0,annotations:{}},b5=Number.MAX_SAFE_INTEGER;async function y3(e){return R.initial&&(i0=null),i0?e.debug&&h("cached model:",i0.modelUrl):i0=await L(e.body.modelPath),i0}async function AA(e,t){let[n,o]=e.shape,r=J.reshape(e,[o*n]),s=J.max(r,0),A=(await s.data())[0];if(A>t){let a=J.argMax(r,0),l=J.mod(a,n),c=(await l.data())[0],x=J.div(a,n),i=(await x.data())[0];return J.dispose([r,s,a,l,x]),[c,i,A]}return J.dispose([r,s]),[0,0,A]}async function g5(e,t){if(!(i0!=null&&i0.executor)||!(i0!=null&&i0.inputs[0].shape))return[];let n=(t.body.skipTime||0)>v()-x3,o=b5<(t.body.skipFrames||0);return t.skipAllowed&&n&&o&&Object.keys(B0.keypoints).length>0?(b5++,[B0]):(b5=0,new Promise(async r=>{let s=J.tidy(()=>{var m,f;let i=J.image.resizeBilinear(e,[((m=i0==null?void 0:i0.inputs[0].shape)==null?void 0:m[2])||0,((f=i0==null?void 0:i0.inputs[0].shape)==null?void 0:f[1])||0],!1),y=J.mul(i,C.tf2);return J.sub(y,C.tf1)}),A;if(t.body.enabled&&(A=i0==null?void 0:i0.execute(s)),x3=v(),J.dispose(s),A){B0.keypoints.length=0;let i=J.squeeze(A);J.dispose(A);let y=J.unstack(i,2);J.dispose(i);for(let d=0;d(t.body.minConfidence||0)&&B0.keypoints.push({score:Math.round(100*u)/100,part:u5[d],positionRaw:[m/i0.inputs[0].shape[2],f/i0.inputs[0].shape[1]],position:[Math.round(e.shape[2]*m/i0.inputs[0].shape[2]),Math.round(e.shape[1]*f/i0.inputs[0].shape[1])]})}y.forEach(d=>J.dispose(d))}B0.score=B0.keypoints.reduce((i,y)=>y.score>i?y.score:i,0);let a=B0.keypoints.map(i=>i.position[0]),l=B0.keypoints.map(i=>i.position[1]);B0.box=[Math.min(...a),Math.min(...l),Math.max(...a)-Math.min(...a),Math.max(...l)-Math.min(...l)];let c=B0.keypoints.map(i=>i.positionRaw[0]),x=B0.keypoints.map(i=>i.positionRaw[1]);B0.boxRaw=[Math.min(...c),Math.min(...x),Math.max(...c)-Math.min(...c),Math.max(...x)-Math.min(...x)];for(let[i,y]of Object.entries(h5)){let d=[];for(let m=0;mg.part===y[m]),u=B0.keypoints.find(g=>g.part===y[m+1]);f&&u&&f.score>(t.body.minConfidence||0)&&u.score>(t.body.minConfidence||0)&&d.push([f.position,u.position])}B0.annotations[i]=d}r([B0])}))}var l0=V(G());var De=V(G());var O=V(G());var Me=V(G());var p2=e=>[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])],lt=e=>[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2,1],ct=(e,t)=>e?[Math.trunc(Math.max(0,e.startPoint[0])),Math.trunc(Math.max(0,e.startPoint[1])),Math.trunc(Math.min(t.shape[2]||0,e.endPoint[0])-Math.max(0,e.startPoint[0])),Math.trunc(Math.min(t.shape[1]||0,e.endPoint[1])-Math.max(0,e.startPoint[1]))]:[0,0,0,0],dt=(e,t)=>e?[e.startPoint[0]/(t.shape[2]||0),e.startPoint[1]/(t.shape[1]||0),(e.endPoint[0]-e.startPoint[0])/(t.shape[2]||0),(e.endPoint[1]-e.startPoint[1])/(t.shape[1]||0)]:[0,0,0,0],u3=(e,t,n)=>{let o=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],s=e.landmarks.map(A=>[(A[0]+n[0])*t[0],(A[1]+n[1])*t[1]]);return{startPoint:o,endPoint:r,landmarks:s,confidence:e.confidence}},T5=(e,t,n)=>{let o=t.shape[1],r=t.shape[2],s=[e.startPoint[1]/o,e.startPoint[0]/r,e.endPoint[1]/o,e.endPoint[0]/r],A=Me.image.cropAndResize(t,[s],[0],n),a=Me.div(A,C.tf255);return Me.dispose(A),a},xt=(e,t)=>{let n=lt(e),o=p2(e),r=[t*o[0]/2,t*o[1]/2];return{startPoint:[n[0]-r[0],n[1]-r[1]],endPoint:[n[0]+r[0],n[1]+r[1]],landmarks:e.landmarks,confidence:e.confidence,size:o}},yt=e=>{let t=lt(e),n=p2(e),o=Math.max(...n)/2;return{startPoint:[Math.round(t[0]-o),Math.round(t[1]-o)],endPoint:[Math.round(t[0]+o),Math.round(t[1]+o)],landmarks:e.landmarks,confidence:e.confidence,size:[Math.round(n[0]),Math.round(n[1])]}},h3=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return{startPoint:[Math.min(...t),Math.min(...n)],endPoint:[Math.max(...t),Math.max(...n)],landmarks:e}},v5=[[1,0,0],[0,1,0],[0,0,1]],aA=e=>e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI)),iA=(e,t)=>aA(Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]));var m3=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]],r2=(e,t)=>{let n=0;for(let o=0;o{let n=[];for(let o=0;o{let n=[],o=e.length;for(let r=0;r{let n=Math.cos(e),o=Math.sin(e),r=[[n,-o,0],[o,n,0],[0,0,1]],s=m3(t[0],t[1]),A=p3(s,r),a=m3(-t[0],-t[1]);return p3(A,a)},cA=e=>{let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],o=[-r2(t[0],n),-r2(t[1],n)];return[t[0].concat(o[0]),t[1].concat(o[1]),[0,0,1]]},dA=(e,t)=>[r2(e,t[0]),r2(e,t[1])];function g3(e){let t=e===192?{strides:[4],anchors:[1]}:{strides:[e/16,e/8],anchors:[2,6]},n=[];for(let o=0;o[s[0]/r*(d[0]-r/2),s[1]/r*(d[1]-r/2),d[2]||0]),a=n&&n!==0&&Math.abs(n)>.2,l=a?b3(n,[0,0]):v5,c=a?A.map(d=>[...dA(d,l),d[2]]):A,x=a?cA(o):v5,i=lt(t),y=[r2(i,x[0]),r2(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2]||0)])}function v3(e,t,n,o){let r=t.landmarks.length>=r5.count?r5.symmetryLine:_e.symmetryLine,s=0,A=v5,a;if(e&&R.kernels.includes("rotatewithoffset"))if(s=iA(t.landmarks[r[0]],t.landmarks[r[1]]),s&&s!==0&&Math.abs(s)>.2){let c=lt(t),x=[c[0]/n.shape[2],c[1]/n.shape[1]],i=Me.image.rotateWithOffset(n,s,0,[x[0],x[1]]);A=b3(-s,c),a=T5(t,i,[o,o]),Me.dispose(i)}else a=T5(t,n,[o,o]);else a=T5(t,n,[o,o]);return[s,A,a]}var xA=e=>{let t=e.map(o=>o[0]),n=e.map(o=>o[1]);return[Math.min(...t)+(Math.max(...t)-Math.min(...t))/2,Math.min(...n)+(Math.max(...n)-Math.min(...n))/2]},R3=(e,t)=>{let n=xA(e),o=p2(t);return{startPoint:[n[0]-o[0]/2,n[1]-o[1]/2],endPoint:[n[0]+o[0]/2,n[1]+o[1]/2]}};var M3=6,xe,ft=null,Ce=0,u2=null,P3=()=>Ce;async function k3(e){var t;return R.initial&&(xe=null),xe?e.debug&&h("cached model:",xe.modelUrl):xe=await L((t=e.face.detector)==null?void 0:t.modelPath),Ce=xe.executor&&xe.inputs[0].shape?xe.inputs[0].shape[2]:256,u2=O.scalar(Ce,"int32"),ft=O.tensor2d(g3(Ce)),xe}function yA(e){if(!ft||!u2)return O.zeros([0,0]);let t={};t.boxStarts=O.slice(e,[0,1],[-1,2]),t.centers=O.add(t.boxStarts,ft),t.boxSizes=O.slice(e,[0,3],[-1,2]),t.boxSizesNormalized=O.div(t.boxSizes,u2),t.centersNormalized=O.div(t.centers,u2),t.halfBoxSize=O.div(t.boxSizesNormalized,C.tf2),t.starts=O.sub(t.centersNormalized,t.halfBoxSize),t.ends=O.add(t.centersNormalized,t.halfBoxSize),t.startNormalized=O.mul(t.starts,u2),t.endNormalized=O.mul(t.ends,u2);let n=O.concat2d([t.startNormalized,t.endNormalized],1);return Object.keys(t).forEach(o=>O.dispose(t[o])),n}async function w3(e,t){var a,l,c,x,i,y,d;if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return[];let n={};n.resized=O.image.resizeBilinear(e,[Ce,Ce]),n.div=O.div(n.resized,C.tf127),n.normalized=O.sub(n.div,C.tf1);let o=xe==null?void 0:xe.execute(n.normalized);if(Array.isArray(o)&&o.length>2){let m=o.sort((f,u)=>f.size-u.size);n.concat384=O.concat([m[0],m[2]],2),n.concat512=O.concat([m[1],m[3]],2),n.concat=O.concat([n.concat512,n.concat384],1),n.batch=O.squeeze(n.concat,[0])}else Array.isArray(o)?n.batch=O.squeeze(o[0]):n.batch=O.squeeze(o);O.dispose(o),n.boxes=yA(n.batch),n.logits=O.slice(n.batch,[0,0],[-1,1]),n.sigmoid=O.sigmoid(n.logits),n.scores=O.squeeze(n.sigmoid),n.nms=await O.image.nonMaxSuppressionAsync(n.boxes,n.scores,((a=t.face.detector)==null?void 0:a.maxDetected)||0,((l=t.face.detector)==null?void 0:l.iouThreshold)||0,((c=t.face.detector)==null?void 0:c.minConfidence)||0);let r=await n.nms.array(),s=[],A=await n.scores.data();for(let m=0;m(((x=t.face.detector)==null?void 0:x.minConfidence)||0)){let u={};u.bbox=O.slice(n.boxes,[r[m],0],[1,-1]),u.slice=O.slice(n.batch,[r[m],M3-1],[1,-1]),u.squeeze=O.squeeze(u.slice),u.landmarks=O.reshape(u.squeeze,[M3,-1]);let g=await u.bbox.data(),T={startPoint:[g[0],g[1]],endPoint:[g[2],g[3]],landmarks:await u.landmarks.array(),confidence:f};u.anchor=O.slice(ft,[r[m],0],[1,2]);let p=await u.anchor.data(),b=u3(T,[(e.shape[2]||0)/Ce,(e.shape[1]||0)/Ce],p),k=xt(b,((i=t.face.detector)==null?void 0:i.scale)||1.4),P=yt(k);P.size[0]>(((y=t.face.detector)==null?void 0:y.minSize)||0)&&P.size[1]>(((d=t.face.detector)==null?void 0:d.minSize)||0)&&s.push(P),Object.keys(u).forEach(I=>O.dispose(u[I]))}}return Object.keys(n).forEach(m=>O.dispose(n[m])),s}var ye=V(G());var K0,We=0,M5=ae.leftEyeLower0,P5=ae.rightEyeLower0,h2={leftBounds:[M5[0],M5[M5.length-1]],rightBounds:[P5[0],P5[P5.length-1]]},b2={upperCenter:3,lowerCenter:4,index:71,numCoordinates:76};async function I3(e){var t,n;return R.initial&&(K0=null),K0?e.debug&&h("cached model:",K0.modelUrl):K0=await L((t=e.face.iris)==null?void 0:t.modelPath),We=K0!=null&&K0.executor&&((n=K0.inputs)!=null&&n[0].shape)?K0.inputs[0].shape[2]:0,We===-1&&(We=64),K0}function mt(e,t,n,o){for(let r=0;r{let t=e[h2.leftBounds[0]][2],n=e[h2.rightBounds[0]][2];return t-n},z3=(e,t,n,o,r,s=!1,A=2.3)=>{let a=yt(xt(h3([e[n],e[o]]),A)),l=p2(a),c=ye.image.cropAndResize(t,[[a.startPoint[1]/r,a.startPoint[0]/r,a.endPoint[1]/r,a.endPoint[0]/r]],[0],[We,We]);if(s&&R.kernels.includes("flipleftright")){let x=ye.image.flipLeftRight(c);ye.dispose(c),c=x}return{box:a,boxSize:l,crop:c}},S3=(e,t,n,o=!1)=>{let r=[];for(let s=0;s{let o=e[ae[`${n}EyeUpper0`][b2.upperCenter]][2],r=e[ae[`${n}EyeLower0`][b2.lowerCenter]][2],s=(o+r)/2;return t.map((A,a)=>{let l=s;return a===2?l=o:a===4&&(l=r),[A[0],A[1],l]})};async function N3(e,t,n,o){var I,B;if(!(K0!=null&&K0.executor))return e;let{box:r,boxSize:s,crop:A}=z3(e,t,h2.leftBounds[0],h2.leftBounds[1],n,!0,((I=o.face.iris)==null?void 0:I.scale)||2.3),{box:a,boxSize:l,crop:c}=z3(e,t,h2.rightBounds[0],h2.rightBounds[1],n,!0,((B=o.face.iris)==null?void 0:B.scale)||2.3),x=ye.concat([A,c]);ye.dispose(A),ye.dispose(c);let i=K0.execute(x);ye.dispose(x);let y=await i.data();ye.dispose(i);let d=y.slice(0,b2.numCoordinates*3),{rawCoords:m,iris:f}=S3(d,r,s,!0),u=y.slice(b2.numCoordinates*3),{rawCoords:g,iris:T}=S3(u,a,l,!1),p=fA(e);Math.abs(p)<30?(mt(e,m,"left",null),mt(e,g,"right",null)):p<1?mt(e,m,"left",["EyeUpper0","EyeLower0"]):mt(e,g,"right",["EyeUpper0","EyeLower0"]);let b=j3(e,f,"left"),k=j3(e,T,"right");return e.concat(b).concat(k)}async function O3(e,t){var s,A,a,l,c,x,i,y,d,m;let n={lips:await((A=(s=t.filter(f=>f.size===160))==null?void 0:s[0])==null?void 0:A.data()),irisL:await((l=(a=t.filter(f=>f.size===10))==null?void 0:a[0])==null?void 0:l.data()),eyeL:await((x=(c=t.filter(f=>f.size===142))==null?void 0:c[0])==null?void 0:x.data()),irisR:await((y=(i=t.filter(f=>f.size===10))==null?void 0:i[1])==null?void 0:y.data()),eyeR:await((m=(d=t.filter(f=>f.size===142))==null?void 0:d[1])==null?void 0:m.data())};for(let f of Object.values(n))if(!f)return e;let o=e2.reduce((f,u)=>f+=e[u][2],0)/e2.length;for(let f=0;ff+=e[u][2],0)/t2.length;for(let f=0;fv()-ge.timestamp,o=ge.skipped<(((c=t.face.detector)==null?void 0:c.skipFrames)||0);!t.skipAllowed||!n||!o||ge.boxes.length===0?(ge.boxes=await w3(e,t),ge.timestamp=v(),ge.skipped=0):ge.skipped++;let r=[],s=[],A=0,a=O2;for(let T=0;T[I[0]/(e.shape[2]||0),I[1]/(e.shape[1]||0),(I[2]||0)/a]);for(let I of Object.keys(_e))P.annotations[I]=[P.mesh[_e[I]]]}else if(!r0)t.debug&&h("face mesh detection requested, but model is not loaded");else{if((d=t.face.attention)!=null&&d.enabled&&!R.kernels.includes("atan2"))return t.face.attention.enabled=!1,De.dispose(P.tensor),r;let I=r0.execute(P.tensor),_=await I.find(Z=>Z.shape[Z.shape.length-1]===1).data();if(P.faceScore=Math.round(100*_[0])/100,P.faceScore<(((m=t.face.detector)==null?void 0:m.minConfidence)||1)){if(p.confidence=P.faceScore,t.face.mesh.keepInvalid){P.box=ct(p,e),P.boxRaw=dt(p,e),P.size=p.size,P.score=P.boxScore,P.mesh=p.landmarks,P.meshRaw=P.mesh.map(Z=>[Z[0]/(e.shape[2]||1),Z[1]/(e.shape[1]||1),(Z[2]||0)/a]);for(let Z of Object.keys(_e))P.annotations[Z]=[P.mesh[_e[Z]]]}}else{let Z=I.find(n0=>n0.shape[n0.shape.length-1]===1404),$=De.reshape(Z,[-1,3]),A0=await $.array();De.dispose($),(f=t.face.attention)!=null&&f.enabled?A0=await O3(A0,I):(u=t.face.iris)!=null&&u.enabled&&(A0=await N3(A0,P.tensor,O2,t)),P.mesh=T3(A0,p,b,k,O2),P.meshRaw=P.mesh.map(n0=>[n0[0]/(e.shape[2]||0),n0[1]/(e.shape[1]||0),(n0[2]||0)/a]);for(let n0 of Object.keys(ae))P.annotations[n0]=ae[n0].map(j0=>P.mesh[j0]);P.score=P.faceScore;let t0={...R3(P.mesh,p),confidence:p.confidence,landmarks:p.landmarks,size:p.size};P.box=ct(t0,e),P.boxRaw=dt(t0,e),P.size=t0.size,s.push(t0)}De.dispose(I)}P.score>(((g=t.face.detector)==null?void 0:g.minConfidence)||1)?r.push(P):De.dispose(P.tensor)}return ge.boxes=s,r}async function W3(e){var t,n,o,r,s,A;return R.initial&&(r0=null),(t=e.face.attention)!=null&&t.enabled&&(r0!=null&&r0.signature)&&Object.keys(((n=r0==null?void 0:r0.signature)==null?void 0:n.outputs)||{}).length<6&&(r0=null),r0?e.debug&&h("cached model:",r0.modelUrl):(o=e.face.attention)!=null&&o.enabled?r0=await L(e.face.attention.modelPath):r0=await L((r=e.face.mesh)==null?void 0:r.modelPath),O2=r0.executor&&((s=r0==null?void 0:r0.inputs)!=null&&s[0].shape)?(A=r0==null?void 0:r0.inputs)==null?void 0:A[0].shape[2]:256,r0}var D3=$e,F3=N2;var J0=V(G());var E5=[],P0,pt=[],B3=0,H3=0,w5=Number.MAX_SAFE_INTEGER,z5=!1;async function G3(e){var t,n,o;return R.initial&&(P0=null),P0?e.debug&&h("cached model:",P0.modelUrl):(P0=await L((t=e.face.emotion)==null?void 0:t.modelPath),z5=((o=(n=P0==null?void 0:P0.inputs)==null?void 0:n[0].shape)==null?void 0:o[3])===3,z5?E5=["angry","disgust","fear","happy","neutral","sad","surprise"]:E5=["angry","disgust","fear","happy","sad","surprise","neutral"]),P0}async function S5(e,t,n,o){var A,a;if(!P0)return[];let r=w5<(((A=t.face.emotion)==null?void 0:A.skipFrames)||0),s=(((a=t.face.emotion)==null?void 0:a.skipTime)||0)>v()-H3;return t.skipAllowed&&s&&r&&B3===o&&pt[n]&&pt[n].length>0?(w5++,pt[n]):(w5=0,new Promise(async l=>{var x,i,y;let c=[];if((x=t.face.emotion)!=null&&x.enabled){let d={},m=P0!=null&&P0.inputs[0].shape?P0.inputs[0].shape[2]:0;if(((i=t.face.emotion)==null?void 0:i.crop)>0){let u=(y=t.face.emotion)==null?void 0:y.crop,g=[[u,u,1-u,1-u]];d.resize=J0.image.cropAndResize(e,g,[0],[m,m])}else d.resize=J0.image.resizeBilinear(e,[m,m],!1);z5?(d.mul=J0.mul(d.resize,255),d.normalize=J0.sub(d.mul,[103.939,116.779,123.68]),d.emotion=P0==null?void 0:P0.execute(d.normalize)):(d.channels=J0.mul(d.resize,C.rgb),d.grayscale=J0.sum(d.channels,3,!0),d.grayscaleSub=J0.sub(d.grayscale,C.tf05),d.grayscaleMul=J0.mul(d.grayscaleSub,C.tf2),d.emotion=P0==null?void 0:P0.execute(d.grayscaleMul)),H3=v();let f=await d.emotion.data();for(let u=0;u(t.face.emotion.minConfidence||0)&&c.push({score:Math.min(.99,Math.trunc(100*f[u])/100),emotion:E5[u]});c.sort((u,g)=>g.score-u.score),Object.keys(d).forEach(u=>J0.dispose(d[u]))}pt[n]=c,B3=o,l(c)}))}var ie=V(G());var k0,Fe=[],Z3=0,X3=0,j5=Number.MAX_SAFE_INTEGER;async function q3(e){var t;return R.initial&&(k0=null),k0?e.debug&&h("cached model:",k0.modelUrl):k0=await L((t=e.face.description)==null?void 0:t.modelPath),k0}function pA(e,t){var s,A;let n=e.image||e.tensor||e;if(!(k0!=null&&k0.inputs[0].shape))return n;let o;if(((s=t.face.description)==null?void 0:s.crop)>0){let a=(A=t.face.description)==null?void 0:A.crop,l=[[a,a,1-a,1-a]];o=ie.image.cropAndResize(n,l,[0],[k0.inputs[0].shape[2],k0.inputs[0].shape[1]])}else o=ie.image.resizeBilinear(n,[k0.inputs[0].shape[2],k0.inputs[0].shape[1]],!1);let r=ie.mul(o,C.tf255);return ie.dispose(o),r}async function I5(e,t,n,o){var a,l,c,x;let r={age:0,gender:"unknown",genderScore:0,descriptor:[]};if(!(k0!=null&&k0.executor))return r;let s=j5<(((a=t.face.description)==null?void 0:a.skipFrames)||0),A=(((l=t.face.description)==null?void 0:l.skipTime)||0)>v()-Z3;return t.skipAllowed&&s&&A&&X3===o&&((c=Fe==null?void 0:Fe[n])==null?void 0:c.age)>0&&((x=Fe==null?void 0:Fe[n])==null?void 0:x.genderScore)>0?(j5++,Fe[n]):(j5=0,new Promise(async i=>{var y;if((y=t.face.description)!=null&&y.enabled){let d=pA(e,t),m=k0==null?void 0:k0.execute(d);Z3=v(),ie.dispose(d);let u=await m.find(B=>B.shape[1]===1).data(),g=Math.trunc(200*Math.abs(u[0]-.5))/100;g>(t.face.description.minConfidence||0)&&(r.gender=u[0]<=.5?"female":"male",r.genderScore=Math.min(.99,g));let T=ie.argMax(m.find(B=>B.shape[1]===100),1),p=(await T.data())[0];ie.dispose(T);let k=await m.find(B=>B.shape[1]===100).data();r.age=Math.round(k[p-1]>k[p+1]?10*p-100*k[p-1]:10*p+100*k[p+1])/10,(Number.isNaN(u[0])||Number.isNaN(k[0]))&&h("faceres error:",{model:k0,result:m});let P=m.find(B=>B.shape[1]===1024),I=P?await P.data():[];r.descriptor=Array.from(I),m.forEach(B=>ie.dispose(B))}Fe[n]=r,X3=o,i(r)}))}var g2=.1,N5=.5;function uA(e,t,n){let o=!1,r=n.length-1;for(let s=0;st!=n[r].y>t&&e<(n[r].x-n[s].x)*(t-n[s].y)/(n[r].y-n[s].y)+n[s].x&&(o=!o);return o}async function Y3(e){if(!e.tensor||!e.mesh||e.mesh.length<100)return e.tensor;let t=e.tensor.shape[2]||0,n=e.tensor.shape[1]||0,o=await e.tensor.buffer(),r=[];for(let A of ae.silhouette)r.push({x:(e.mesh[A][0]-e.box[0])/e.box[2],y:(e.mesh[A][1]-e.box[1])/e.box[3]});g2&&g2>0&&(r=r.map(A=>({x:A.x>.5?A.x+g2:A.x-g2,y:A.y>.5?A.y+g2:A.y-g2})));for(let A=0;Av()-J3,s=L5<(((a=t.face.antispoof)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&K3===o&&ut[n]?(L5++,ut[n]):(L5=0,new Promise(async l=>{let c=ht.image.resizeBilinear(e,[w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[2]:0,w0!=null&&w0.inputs[0].shape?w0.inputs[0].shape[1]:0],!1),x=w0==null?void 0:w0.execute(c),i=(await x.data())[0];ut[n]=Math.round(100*i)/100,K3=o,J3=v(),ht.dispose([c,x]),l(ut[n])}))}var gt=V(G());var E0,bt=[],C5=Number.MAX_SAFE_INTEGER,$3=0,en=0;async function tn(e){var t;return R.initial&&(E0=null),E0?e.debug&&h("cached model:",E0.modelUrl):E0=await L((t=e.face.liveness)==null?void 0:t.modelPath),E0}async function W5(e,t,n,o){var A,a;if(!(E0!=null&&E0.executor))return 0;let r=(((A=t.face.liveness)==null?void 0:A.skipTime)||0)>v()-en,s=C5<(((a=t.face.liveness)==null?void 0:a.skipFrames)||0);return t.skipAllowed&&r&&s&&$3===o&&bt[n]?(C5++,bt[n]):(C5=0,new Promise(async l=>{let c=gt.image.resizeBilinear(e,[E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[2]:0,E0!=null&&E0.inputs[0].shape?E0.inputs[0].shape[1]:0],!1),x=E0==null?void 0:E0.execute(c),i=(await x.data())[0];bt[n]=Math.round(100*i)/100,$3=o,en=v(),gt.dispose([c,x]),l(bt[n])}))}var Tt=V(G());var le,D5=[],bA=["white","black","asian","indian","other"],gA=[15,23,28,35.5,45.5,55.5,65],on=0,rn=0,F5=Number.MAX_SAFE_INTEGER;async function sn(e){var t;return R.initial&&(le=null),le?e.debug&&h("cached model:",le.modelUrl):le=await L((t=e.face.gear)==null?void 0:t.modelPath),le}async function B5(e,t,n,o){var A,a;if(!le)return{age:0,gender:"unknown",genderScore:0,race:[]};let r=F5<(((A=t.face.gear)==null?void 0:A.skipFrames)||0),s=(((a=t.face.gear)==null?void 0:a.skipTime)||0)>v()-rn;return t.skipAllowed&&s&&r&&on===o&&D5[n]?(F5++,D5[n]):(F5=0,new Promise(async l=>{var g,T,p,b;if(!(le!=null&&le.inputs[0].shape))return;let c={},x=[[0,.1,.9,.9]];if(((g=t.face.gear)==null?void 0:g.crop)>0){let k=(T=t.face.gear)==null?void 0:T.crop;x=[[k,k,1-k,1-k]]}c.resize=Tt.image.cropAndResize(e,x,[0],[le.inputs[0].shape[2],le.inputs[0].shape[1]]);let i={age:0,gender:"unknown",genderScore:0,race:[]};(p=t.face.gear)!=null&&p.enabled&&([c.age,c.gender,c.race]=le.execute(c.resize,["age_output","gender_output","race_output"]));let y=await c.gender.data();i.gender=y[0]>y[1]?"male":"female",i.genderScore=Math.round(100*(y[0]>y[1]?y[0]:y[1]))/100;let d=await c.race.data();for(let k=0;k(((b=t.face.gear)==null?void 0:b.minConfidence)||.2)&&i.race.push({score:Math.round(100*d[k])/100,race:bA[k]});i.race.sort((k,P)=>P.score-k.score);let f=Array.from(await c.age.data()).map((k,P)=>[gA[P],k]).sort((k,P)=>P[1]-k[1]),u=f[0][0];for(let k=1;kTt.dispose(c[k])),D5[n]=i,on=o,rn=v(),l(i)}))}var s2=V(G());var H0,vt=[],an=0,ln=0,H5=Number.MAX_SAFE_INTEGER;async function cn(e){return R.initial&&(H0=null),H0?e.debug&&h("cached model:",H0.modelUrl):H0=await L(e.face.ssrnet.modelPathAge),H0}async function G5(e,t,n,o){var A,a,l,c;if(!H0)return{age:0};let r=H5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-ln;return t.skipAllowed&&r&&s&&an===o&&((l=vt[n])!=null&&l.age)&&((c=vt[n])==null?void 0:c.age)>0?(H5++,vt[n]):(H5=0,new Promise(async x=>{var d,m,f;if(!(H0!=null&&H0.inputs)||!H0.inputs[0]||!H0.inputs[0].shape)return;let i={};if(((d=t.face.ssrnet)==null?void 0:d.crop)>0){let u=(m=t.face.ssrnet)==null?void 0:m.crop,g=[[u,u,1-u,1-u]];i.resize=s2.image.cropAndResize(e,g,[0],[H0.inputs[0].shape[2],H0.inputs[0].shape[1]])}else i.resize=s2.image.resizeBilinear(e,[H0.inputs[0].shape[2],H0.inputs[0].shape[1]],!1);i.enhance=s2.mul(i.resize,C.tf255);let y={age:0};if((f=t.face.ssrnet)!=null&&f.enabled&&(i.age=H0.execute(i.enhance)),i.age){let u=await i.age.data();y.age=Math.trunc(10*u[0])/10}Object.keys(i).forEach(u=>s2.dispose(i[u])),vt[n]=y,an=o,ln=v(),x(y)}))}var v0=V(G());var N0,Rt=[],xn=0,yn=0,V5=Number.MAX_SAFE_INTEGER,Z5=[.2989,.587,.114];async function fn(e){var t;return R.initial&&(N0=null),N0?e.debug&&h("cached model:",N0.modelUrl):N0=await L((t=e.face.ssrnet)==null?void 0:t.modelPathGender),N0}async function X5(e,t,n,o){var A,a,l,c;if(!N0)return{gender:"unknown",genderScore:0};let r=V5<(((A=t.face.ssrnet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.ssrnet)==null?void 0:a.skipTime)||0)>v()-yn;return t.skipAllowed&&r&&s&&xn===o&&((l=Rt[n])!=null&&l.gender)&&((c=Rt[n])==null?void 0:c.genderScore)>0?(V5++,Rt[n]):(V5=0,new Promise(async x=>{var m,f,u;if(!(N0!=null&&N0.inputs[0].shape))return;let i={};if(((m=t.face.ssrnet)==null?void 0:m.crop)>0){let g=(f=t.face.ssrnet)==null?void 0:f.crop,T=[[g,g,1-g,1-g]];i.resize=v0.image.cropAndResize(e,T,[0],[N0.inputs[0].shape[2],N0.inputs[0].shape[1]])}else i.resize=v0.image.resizeBilinear(e,[N0.inputs[0].shape[2],N0.inputs[0].shape[1]],!1);i.enhance=v0.tidy(()=>{var T,p;let g;if(((p=(T=N0==null?void 0:N0.inputs)==null?void 0:T[0].shape)==null?void 0:p[3])===1){let[b,k,P]=v0.split(i.resize,3,3),I=v0.mul(b,Z5[0]),B=v0.mul(k,Z5[1]),_=v0.mul(P,Z5[2]),Z=v0.addN([I,B,_]);g=v0.mul(v0.sub(Z,C.tf05),2)}else g=v0.mul(v0.sub(i.resize,C.tf05),2);return g});let y={gender:"unknown",genderScore:0};(u=t.face.ssrnet)!=null&&u.enabled&&(i.gender=N0.execute(i.enhance));let d=await i.gender.data();y.gender=d[0]>d[1]?"female":"male",y.genderScore=d[0]>d[1]?Math.trunc(100*d[0])/100:Math.trunc(100*d[1])/100,Object.keys(i).forEach(g=>v0.dispose(i[g])),Rt[n]=y,xn=o,yn=v(),x(y)}))}var Mt=V(G());var Q0,q5=[],pn=0,un=0,hn=Number.MAX_SAFE_INTEGER;async function bn(e){var t;return R.initial&&(Q0=null),Q0?e.debug&&h("cached model:",Q0.modelUrl):Q0=await L((t=e.face.mobilefacenet)==null?void 0:t.modelPath),Q0}async function U5(e,t,n,o){var A,a;if(!(Q0!=null&&Q0.executor))return[];let r=hn<(((A=t.face.mobilefacenet)==null?void 0:A.skipFrames)||0),s=(((a=t.face.mobilefacenet)==null?void 0:a.skipTime)||0)>v()-un;return t.skipAllowed&&s&&r&&pn===o&&q5[n]?(hn++,q5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.mobilefacenet)!=null&&x.enabled&&(Q0!=null&&Q0.inputs[0].shape)){let i={};i.crop=Mt.image.resizeBilinear(e,[Q0.inputs[0].shape[2],Q0.inputs[0].shape[1]],!1),i.data=Q0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Mt.dispose(i[d]))}q5[n]=c,pn=o,un=v(),l(c)})}var Pt=V(G());var _0,Y5=[],Tn=0,vn=0,Rn=Number.MAX_SAFE_INTEGER;async function Mn(e){return R.initial&&(_0=null),_0?e.debug&&h("cached model:",_0.modelUrl):_0=await L(e.face.insightface.modelPath),_0}async function K5(e,t,n,o){var A,a;if(!(_0!=null&&_0.executor))return[];let r=Rn<(((A=t.face.insightface)==null?void 0:A.skipFrames)||0),s=(((a=t.face.insightface)==null?void 0:a.skipTime)||0)>v()-vn;return t.skipAllowed&&s&&r&&Tn===o&&Y5[n]?(Rn++,Y5[n]):new Promise(async l=>{var x;let c=[];if((x=t.face.insightface)!=null&&x.enabled&&(_0!=null&&_0.inputs[0].shape)){let i={};i.crop=Pt.image.resizeBilinear(e,[_0.inputs[0].shape[2],_0.inputs[0].shape[1]],!1),i.data=_0.execute(i.crop);let y=await i.data.data();c=Array.from(y),Object.keys(i).forEach(d=>Pt.dispose(i[d]))}Y5[n]=c,Tn=o,vn=v(),l(c)})}var TA=e=>{let t=(i,y)=>Math.atan2(i[1]-y[1],i[0]-y[0]);if(!e.annotations.rightEyeIris||!e.annotations.leftEyeIris)return{bearing:0,strength:0};let n=[0,-.1],o=1,r=(e.mesh[33][2]||0)>(e.mesh[263][2]||0),s=r?e.mesh[473]:e.mesh[468],A=r?[(e.mesh[133][0]+e.mesh[33][0])/2,(e.mesh[133][1]+e.mesh[33][1])/2]:[(e.mesh[263][0]+e.mesh[362][0])/2,(e.mesh[263][1]+e.mesh[362][1])/2],a=r?[e.mesh[133][0]-e.mesh[33][0],e.mesh[23][1]-e.mesh[27][1]]:[e.mesh[263][0]-e.mesh[362][0],e.mesh[253][1]-e.mesh[257][1]],l=[(A[0]-s[0])/a[0]-n[0],o*(s[1]-A[1])/a[1]-n[1]],c=Math.sqrt(l[0]*l[0]+l[1]*l[1]);return c=Math.min(c,e.boxRaw[2]/2,e.boxRaw[3]/2),{bearing:(t([0,0],l)+Math.PI/2)%Math.PI,strength:c}},kn=(e,t)=>{let n=f=>{let u=Math.sqrt(f[0]*f[0]+f[1]*f[1]+f[2]*f[2]);return f[0]/=u,f[1]/=u,f[2]/=u,f},o=(f,u)=>{let g=f[0]-u[0],T=f[1]-u[1],p=f[2]-u[2];return[g,T,p]},r=(f,u)=>{let g=f[1]*u[2]-f[2]*u[1],T=f[2]*u[0]-f[0]*u[2],p=f[0]*u[1]-f[1]*u[0];return[g,T,p]},s=f=>{let[u,g,T,p,b,k,P,I,B]=f,_,Z,$;return p<1?p>-1?($=Math.asin(p),Z=Math.atan2(-P,u),_=Math.atan2(-k,b)):($=-Math.PI/2,Z=-Math.atan2(I,B),_=0):($=Math.PI/2,Z=Math.atan2(I,B),_=0),Number.isNaN(_)&&(_=0),Number.isNaN(Z)&&(Z=0),Number.isNaN($)&&($=0),{pitch:2*-_,yaw:2*-Z,roll:2*-$}},A=e.meshRaw;if(!A||A.length<300)return{angle:{pitch:0,yaw:0,roll:0},matrix:[1,0,0,0,1,0,0,0,1],gaze:{bearing:0,strength:0}};let a=Math.max(e.boxRaw[2]*t[0],e.boxRaw[3]*t[1])/1.5,l=[A[10],A[152],A[234],A[454]].map(f=>[f[0]*t[0]/a,f[1]*t[1]/a,f[2]]),c=n(o(l[1],l[0])),x=n(o(l[3],l[2])),i=n(r(x,c));x=r(c,i);let y=[x[0],x[1],x[2],c[0],c[1],c[2],i[0],i[1],i[2]],d=s(y),m=A.length===478?TA(e):{bearing:0,strength:0};return{angle:d,matrix:y,gaze:m}};function wn(e,t){let n=e==null?void 0:e.annotations;if(!(n!=null&&n.leftEyeIris)||!(n!=null&&n.rightEyeIris))return 0;let o=Math.max(Math.abs(n.leftEyeIris[3][0]-n.leftEyeIris[1][0]),Math.abs(n.rightEyeIris[3][0]-n.rightEyeIris[1][0]))/t;return Math.round(1.17/o)/100}var J5=async(e,t)=>{var m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0,M,T0,C0,x0,K;let n=v(),o,r,s,A,a,l,c,x,i,y=[];e.state="run:face";let d=await C3(t,e.config);if(e.performance.face=R.perfadd?(e.performance.face||0)+Math.trunc(v()-n):Math.trunc(v()-n),!t.shape||t.shape.length!==4)return[];if(!d)return[];for(let E=0;E200?kn(d[E],[t.shape[2],t.shape[1]]):null;e.analyze("Start Emotion:"),e.config.async?A=(f=e.config.face.emotion)!=null&&f.enabled?S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[]:(e.state="run:emotion",n=v(),A=(u=e.config.face.emotion)!=null&&u.enabled?await S5(d[E].tensor||l0.tensor([]),e.config,E,d.length):[],e.performance.emotion=R.perfadd?(e.performance.emotion||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Emotion:"),e.analyze("Start AntiSpoof:"),e.config.async?c=(g=e.config.face.antispoof)!=null&&g.enabled?O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:antispoof",n=v(),c=(T=e.config.face.antispoof)!=null&&T.enabled?await O5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.antispoof=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End AntiSpoof:"),e.analyze("Start Liveness:"),e.config.async?x=(p=e.config.face.liveness)!=null&&p.enabled?W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0:(e.state="run:liveness",n=v(),x=(b=e.config.face.liveness)!=null&&b.enabled?await W5(d[E].tensor||l0.tensor([]),e.config,E,d.length):0,e.performance.liveness=R.perfadd?(e.performance.antispoof||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Liveness:"),e.analyze("Start GEAR:"),e.config.async?r=(k=e.config.face.gear)!=null&&k.enabled?B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:gear",n=v(),r=(P=e.config.face.gear)!=null&&P.enabled?await B5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.gear=Math.trunc(v()-n)),e.analyze("End GEAR:"),e.analyze("Start SSRNet:"),e.config.async?(o=(I=e.config.face.ssrnet)!=null&&I.enabled?G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(B=e.config.face.ssrnet)!=null&&B.enabled?X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null):(e.state="run:ssrnet",n=v(),o=(_=e.config.face.ssrnet)!=null&&_.enabled?await G5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,s=(Z=e.config.face.ssrnet)!=null&&Z.enabled?await X5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.ssrnet=Math.trunc(v()-n)),e.analyze("End SSRNet:"),e.analyze("Start MobileFaceNet:"),e.config.async?a=($=e.config.face.mobilefacenet)!=null&&$.enabled?U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),a=(A0=e.config.face.mobilefacenet)!=null&&A0.enabled?await U5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End MobileFaceNet:"),e.analyze("Start InsightFace:"),e.config.async?l=(t0=e.config.face.insightface)!=null&&t0.enabled?K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null:(e.state="run:mobilefacenet",n=v(),l=(n0=e.config.face.insightface)!=null&&n0.enabled?await K5(d[E].tensor||l0.tensor([]),e.config,E,d.length):null,e.performance.mobilefacenet=Math.trunc(v()-n)),e.analyze("End InsightFace:"),e.analyze("Start Description:"),e.config.async?i=I5(d[E].tensor||l0.tensor([]),e.config,E,d.length):(e.state="run:description",n=v(),i=await I5(d[E].tensor||l0.tensor([]),e.config,E,d.length),e.performance.description=R.perfadd?(e.performance.description||0)+Math.trunc(v()-n):Math.trunc(v()-n)),e.analyze("End Description:"),e.config.async&&([o,s,A,a,l,i,r,c,x]=await Promise.all([o,s,A,a,l,i,r,c,x])),e.analyze("Finish Face:"),(j0=e.config.face.ssrnet)!=null&&j0.enabled&&o&&s&&(i={...i,age:o.age,gender:s.gender,genderScore:s.genderScore}),(M=e.config.face.gear)!=null&&M.enabled&&r&&(i={...i,age:r.age,gender:r.gender,genderScore:r.genderScore,race:r.race}),(T0=e.config.face.mobilefacenet)!=null&&T0.enabled&&a&&(i.descriptor=a),(C0=e.config.face.insightface)!=null&&C0.enabled&&l&&(i.descriptor=l);let X=(x0=e.config.face.iris)!=null&&x0.enabled?wn(d[E],t.shape[2]):0,U0=(K=e.config.face.detector)!=null&&K.return?l0.squeeze(d[E].tensor):null;l0.dispose(d[E].tensor),d[E].tensor&&delete d[E].tensor;let y0={...d[E],id:E};i.age&&(y0.age=i.age),i.gender&&(y0.gender=i.gender),i.genderScore&&(y0.genderScore=i.genderScore),i.descriptor&&(y0.embedding=i.descriptor),i.race&&(y0.race=i.race),A&&(y0.emotion=A),c&&(y0.real=c),x&&(y0.live=x),X>0&&(y0.distance=X),H&&(y0.rotation=H),U0&&(y0.tensor=U0),y.push(y0),e.analyze("End Face")}return e.analyze("End FaceMesh:"),e.config.async&&(e.performance.face&&delete e.performance.face,e.performance.age&&delete e.performance.age,e.performance.gender&&delete e.performance.gender,e.performance.emotion&&delete e.performance.emotion),y};var G0={thumb:0,index:1,middle:2,ring:3,pinky:4,all:[0,1,2,3,4],nameMapping:{0:"thumb",1:"index",2:"middle",3:"ring",4:"pinky"},pointsMapping:{0:[[0,1],[1,2],[2,3],[3,4]],1:[[0,5],[5,6],[6,7],[7,8]],2:[[0,9],[9,10],[10,11],[11,12]],3:[[0,13],[13,14],[14,15],[15,16]],4:[[0,17],[17,18],[18,19],[19,20]]},getName:e=>G0.nameMapping[e],getPoints:e=>G0.pointsMapping[e]},He={none:0,half:1,full:2,nameMapping:{0:"none",1:"half",2:"full"},getName:e=>He.nameMapping[e]},c0={verticalUp:0,verticalDown:1,horizontalLeft:2,horizontalRight:3,diagonalUpRight:4,diagonalUpLeft:5,diagonalDownRight:6,diagonalDownLeft:7,nameMapping:{0:"verticalUp",1:"verticalDown",2:"horizontalLeft",3:"horizontalRight",4:"diagonalUpRight",5:"diagonalUpLeft",6:"diagonalDownRight",7:"diagonalDownLeft"},getName:e=>c0.nameMapping[e]},Be=class{constructor(t){w(this,"name");w(this,"curls");w(this,"directions");w(this,"weights");w(this,"weightsRelative");this.name=t,this.curls={},this.directions={},this.weights=[1,1,1,1,1],this.weightsRelative=[1,1,1,1,1]}curl(t,n,o){typeof this.curls[t]=="undefined"&&(this.curls[t]=[]),this.curls[t].push([n,o])}direction(t,n,o){this.directions[t]||(this.directions[t]=[]),this.directions[t].push([n,o])}weight(t,n){this.weights[t]=n;let o=this.weights.reduce((r,s)=>r+s,0);this.weightsRelative=this.weights.map(r=>r*5/o)}matchAgainst(t,n){let o=0;for(let r in t){let s=t[r],A=this.curls[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}for(let r in n){let s=n[r],A=this.directions[r];if(typeof A=="undefined"){o+=this.weightsRelative[r];continue}for(let[a,l]of A)if(s===a){o+=l*this.weightsRelative[r];break}}return o/10}};var{thumb:fe,index:Pe,middle:ke,ring:A2,pinky:a2}=G0,{none:me,half:RA,full:pe}=He,{verticalUp:T2,verticalDown:Ki,horizontalLeft:Q5,horizontalRight:MA,diagonalUpRight:PA,diagonalUpLeft:v2,diagonalDownRight:Ji,diagonalDownLeft:Qi}=c0,Ge=new Be("thumbs up");Ge.curl(fe,me,1);Ge.direction(fe,T2,1);Ge.direction(fe,v2,.25);Ge.direction(fe,PA,.25);for(let e of[G0.index,G0.middle,G0.ring,G0.pinky])Ge.curl(e,pe,1),Ge.direction(e,Q5,1),Ge.direction(e,MA,1);var h0=new Be("victory");h0.curl(fe,RA,.5);h0.curl(fe,me,.5);h0.direction(fe,T2,1);h0.direction(fe,v2,1);h0.curl(Pe,me,1);h0.direction(Pe,T2,.75);h0.direction(Pe,v2,1);h0.curl(ke,me,1);h0.direction(ke,T2,1);h0.direction(ke,v2,.75);h0.curl(A2,pe,1);h0.direction(A2,T2,.2);h0.direction(A2,v2,1);h0.direction(A2,Q5,.2);h0.curl(a2,pe,1);h0.direction(a2,T2,.2);h0.direction(a2,v2,1);h0.direction(a2,Q5,.2);h0.weight(Pe,2);h0.weight(ke,2);var Ve=new Be("point");Ve.curl(fe,pe,1);Ve.curl(Pe,me,.5);Ve.curl(ke,pe,.5);Ve.curl(A2,pe,.5);Ve.curl(a2,pe,.5);Ve.weight(Pe,2);Ve.weight(ke,2);var Ze=new Be("middle finger");Ze.curl(fe,me,1);Ze.curl(Pe,pe,.5);Ze.curl(ke,pe,.5);Ze.curl(A2,pe,.5);Ze.curl(a2,pe,.5);Ze.weight(Pe,2);Ze.weight(ke,2);var R2=new Be("open palm");R2.curl(fe,me,.75);R2.curl(Pe,me,.75);R2.curl(ke,me,.75);R2.curl(A2,me,.75);R2.curl(a2,me,.75);var En=[Ge,h0,Ve,Ze,R2];var kA=.7,i2={HALF_CURL_START_LIMIT:60,NO_CURL_START_LIMIT:130,DISTANCE_VOTE_POWER:1.1,SINGLE_ANGLE_VOTE_POWER:.9,TOTAL_ANGLE_VOTE_POWER:1.6};function zn(e,t,n,o){let r=(t-o)/(e-n),s=Math.atan(r)*180/Math.PI;return s<=0?s=-s:s>0&&(s=180-s),s}function jn(e,t){if(!e||!t)return[0,0];let n=zn(e[0],e[1],t[0],t[1]);if(e.length===2)return n;let o=zn(e[1],e[2],t[1],t[2]);return[n,o]}function Sn(e,t=1){let n=0,o=0,r=0;return e>=75&&e<=105?n=1*t:e>=25&&e<=155?o=1*t:r=1*t,[n,o,r]}function wA(e,t,n){let o=e[0]-t[0],r=e[0]-n[0],s=t[0]-n[0],A=e[1]-t[1],a=e[1]-n[1],l=t[1]-n[1],c=e[2]-t[2],x=e[2]-n[2],i=t[2]-n[2],y=Math.sqrt(o*o+A*A+c*c),d=Math.sqrt(r*r+a*a+x*x),m=Math.sqrt(s*s+l*l+i*i),f=(m*m+y*y-d*d)/(2*m*y);f>1?f=1:f<-1&&(f=-1);let u=Math.acos(f);u=57.2958*u%180;let g;return u>i2.NO_CURL_START_LIMIT?g=He.none:u>i2.HALF_CURL_START_LIMIT?g=He.half:g=He.full,g}function In(e,t,n,o){let r;return o===Math.abs(e)?e>0?r=c0.horizontalLeft:r=c0.horizontalRight:o===Math.abs(t)?t>0?r=c0.horizontalLeft:r=c0.horizontalRight:n>0?r=c0.horizontalLeft:r=c0.horizontalRight,r}function Nn(e,t,n,o){let r;return o===Math.abs(e)?e<0?r=c0.verticalDown:r=c0.verticalUp:o===Math.abs(t)?t<0?r=c0.verticalDown:r=c0.verticalUp:n<0?r=c0.verticalDown:r=c0.verticalUp,r}function EA(e,t,n,o,r,s,A,a){let l,c=Nn(e,t,n,o),x=In(r,s,A,a);return c===c0.verticalUp?x===c0.horizontalLeft?l=c0.diagonalUpLeft:l=c0.diagonalUpRight:x===c0.horizontalLeft?l=c0.diagonalDownLeft:l=c0.diagonalDownRight,l}function zA(e,t,n,o){let r=e[0]-t[0],s=e[0]-n[0],A=t[0]-n[0],a=e[1]-t[1],l=e[1]-n[1],c=t[1]-n[1],x=Math.max(Math.abs(r),Math.abs(s),Math.abs(A)),i=Math.max(Math.abs(a),Math.abs(l),Math.abs(c)),y=0,d=0,m=0,f=i/(x+1e-5);f>1.5?y+=i2.DISTANCE_VOTE_POWER:f>.66?d+=i2.DISTANCE_VOTE_POWER:m+=i2.DISTANCE_VOTE_POWER;let u=Math.sqrt(r*r+a*a),g=Math.sqrt(s*s+l*l),T=Math.sqrt(A*A+c*c),p=Math.max(u,g,T),b=e[0],k=e[1],P=n[0],I=n[1];p===u?(P=n[0],I=n[1]):p===T&&(b=t[0],k=t[1]);let Z=jn([b,k],[P,I]),$=Sn(Z,i2.TOTAL_ANGLE_VOTE_POWER);y+=$[0],d+=$[1],m+=$[2];for(let t0 of o){let n0=Sn(t0,i2.SINGLE_ANGLE_VOTE_POWER);y+=n0[0],d+=n0[1],m+=n0[2]}let A0;return y===Math.max(y,d,m)?A0=Nn(l,a,c,i):m===Math.max(d,m)?A0=In(s,r,A,x):A0=EA(l,a,c,i,s,r,A,x),A0}function Ln(e){let t=[],n=[],o=[],r=[];if(!e)return{curls:o,directions:r};for(let s of G0.all){let A=G0.getPoints(s),a=[],l=[];for(let c of A){let x=e[c[0]],i=e[c[1]],y=jn(x,i),d=y[0],m=y[1];a.push(d),l.push(m)}t.push(a),n.push(l)}for(let s of G0.all){let A=s===G0.thumb?1:0,a=G0.getPoints(s),l=e[a[A][0]],c=e[a[A+1][1]],x=e[a[3][1]],i=wA(l,c,x),y=zA(l,c,x,t[s].slice(A));o[s]=i,r[s]=y}return{curls:o,directions:r}}function kt(e){if(!e||e.length===0)return null;let t=Ln(e),n={};for(let o of G0.all)n[G0.getName(o)]={curl:He.getName(t.curls[o]),direction:c0.getName(t.directions[o])};return n}function On(e){let t=[];if(!e||e.length===0)return t;let n=Ln(e);for(let o of En){let r=o.matchAgainst(n.curls,n.directions);r>=kA&&t.push({name:o.name,confidence:r})}return t}var Cn=e=>{if(!e)return[];let t=[];for(let n=0;nl.part==="leftWrist"),r=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&o&&r&&o.position[1]l.part==="leftShoulder"),a=e[n].keypoints.find(l=>l.part==="rightShoulder");A&&a&&Math.abs(A.positionRaw[1]-a.positionRaw[1])>.1&&t.push({body:n,gesture:`leaning ${A.position[1]>a.position[1]?"left":"right"}`})}return t},Wn=e=>{if(!e)return[];let t=[];for(let n=0;n450){let o=(e[n].mesh[33][2]||0)-(e[n].mesh[263][2]||0),r=e[n].mesh[33][0]-e[n].mesh[263][0];Math.abs(o/r)<=.15?t.push({face:n,gesture:"facing center"}):t.push({face:n,gesture:`facing ${o<0?"left":"right"}`}),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 l=e[n].mesh[152][2]||0;Math.abs(l)>10&&t.push({face:n,gesture:`head ${l<0?"up":"down"}`})}return t},Dn=e=>{var n,o,r,s;if(!e)return[];let t=[];for(let A=0;A.06||u>.06)&&(d=!1),f>u?u>.04&&t.push({iris:A,gesture:"looking right"}):f>.04&&t.push({iris:A,gesture:"looking left"});let g=Math.abs(e[A].mesh[145][1]-e[A].annotations.rightEyeIris[0][1])/e[A].box[3],T=Math.abs(e[A].mesh[374][1]-e[A].annotations.leftEyeIris[0][1])/e[A].box[3];(T<.01||g<.01||T>.022||g>.022)&&(d=!1),(T<.01||g<.01)&&t.push({iris:A,gesture:"looking down"}),(T>.022||g>.022)&&t.push({iris:A,gesture:"looking up"}),d&&t.push({iris:A,gesture:"looking center"})}return t},Fn=e=>{if(!e)return[];let t=[];for(let n=0;n0){let r=o.reduce((A,a)=>(A.position[2]||0)<(a.position[2]||0)?A:a);t.push({hand:n,gesture:`${r.name} forward`});let s=o.reduce((A,a)=>A.position[1][s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:o,palmLandmarks:r,confidence:e.confidence}}function Et(e,t=1.5){let n=C2(e),o=wt(e),r=[t*o[0]/2,t*o[1]/2],s=[n[0]-r[0],n[1]-r[1]],A=[n[0]+r[0],n[1]+r[1]];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function zt(e){let t=C2(e),n=wt(e),r=Math.max(...n)/2,s=[t[0]-r,t[1]-r],A=[t[0]+r,t[1]+r];return{startPoint:s,endPoint:A,palmLandmarks:e.palmLandmarks}}function jA(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Xn(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return jA(n)}var Bn=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function Xe(e,t){let n=0;for(let o=0;o[A.x,A.y]),this.anchorsTensor=W.tensor2d(this.anchors),this.inputSize=((s=(r=(o=(n=this==null?void 0:this.model)==null?void 0:n.inputs)==null?void 0:o[0])==null?void 0:r.shape)==null?void 0:s[2])||0,this.inputSizeTensor=W.tensor1d([this.inputSize,this.inputSize]),this.doubleInputSizeTensor=W.tensor1d([this.inputSize*2,this.inputSize*2])}normalizeBoxes(t){let n={};n.boxOffsets=W.slice(t,[0,0],[-1,2]),n.boxSizes=W.slice(t,[0,2],[-1,2]),n.div=W.div(n.boxOffsets,this.inputSizeTensor),n.boxCenterPoints=W.add(n.div,this.anchorsTensor),n.halfBoxSizes=W.div(n.boxSizes,this.doubleInputSizeTensor),n.sub=W.sub(n.boxCenterPoints,n.halfBoxSizes),n.startPoints=W.mul(n.sub,this.inputSizeTensor),n.add=W.add(n.boxCenterPoints,n.halfBoxSizes),n.endPoints=W.mul(n.add,this.inputSizeTensor);let o=W.concat2d([n.startPoints,n.endPoints],1);return Object.keys(n).forEach(r=>W.dispose(n[r])),o}normalizeLandmarks(t,n){let o={};o.reshape=W.reshape(t,[-1,7,2]),o.div=W.div(o.reshape,this.inputSizeTensor),o.landmarks=W.add(o.div,this.anchors[n]?this.anchors[n]:0);let r=W.mul(o.landmarks,this.inputSizeTensor);return Object.keys(o).forEach(s=>W.dispose(o[s])),r}async predict(t,n){var a;let o={};o.resize=W.image.resizeBilinear(t,[this.inputSize,this.inputSize]),o.div=W.div(o.resize,C.tf127),o.image=W.sub(o.div,C.tf1),o.batched=this.model.execute(o.image),o.predictions=W.squeeze(o.batched),o.slice=W.slice(o.predictions,[0,0],[-1,1]),o.sigmoid=W.sigmoid(o.slice),o.scores=W.squeeze(o.sigmoid);let r=await o.scores.data();o.boxes=W.slice(o.predictions,[0,1],[-1,4]),o.norm=this.normalizeBoxes(o.boxes),o.nms=await W.image.nonMaxSuppressionAsync(o.norm,o.scores,3*(((a=n.hand)==null?void 0:a.maxDetected)||1),n.hand.iouThreshold,n.hand.minConfidence);let s=await o.nms.array(),A=[];for(let l of s){let c={};c.box=W.slice(o.norm,[l,0],[1,-1]),c.slice=W.slice(o.predictions,[l,5],[1,14]),c.norm=this.normalizeLandmarks(c.slice,l),c.palmLandmarks=W.reshape(c.norm,[-1,2]);let x=await c.box.data(),i=x.slice(0,2),y=x.slice(2,4),d=await c.palmLandmarks.array(),m={startPoint:i,endPoint:y,palmLandmarks:d,confidence:r[l]},f=Zn(m,[(t.shape[2]||1)/this.inputSize,(t.shape[1]||0)/this.inputSize]);A.push(f),Object.keys(c).forEach(u=>W.dispose(c[u]))}return Object.keys(o).forEach(l=>W.dispose(o[l])),A}};var $0=V(G());var OA=5,Kn=1.65,Jn=[0,5,9,13,17,1,2],CA=0,WA=2,Qn=0,jt=class{constructor(t,n){w(this,"handDetector");w(this,"handPoseModel");w(this,"inputSize");w(this,"storedBoxes");w(this,"skipped");w(this,"detectedHands");var o,r,s;this.handDetector=t,this.handPoseModel=n,this.inputSize=((s=(r=(o=this.handPoseModel)==null?void 0:o.inputs)==null?void 0:r[0].shape)==null?void 0:s[2])||0,this.storedBoxes=[],this.skipped=Number.MAX_SAFE_INTEGER,this.detectedHands=0}calculateLandmarksBoundingBox(t){let n=t.map(A=>A[0]),o=t.map(A=>A[1]),r=[Math.min(...n),Math.min(...o)],s=[Math.max(...n),Math.max(...o)];return{startPoint:r,endPoint:s}}getBoxForPalmLandmarks(t,n){let o=t.map(s=>e1([...s,1],n)),r=this.calculateLandmarksBoundingBox(o);return Et(zt(r),OA)}getBoxForHandLandmarks(t){let n=this.calculateLandmarksBoundingBox(t),o=Et(zt(n),Kn);o.palmLandmarks=[];for(let r=0;r[A[0]*(d[0]-this.inputSize/2),A[1]*(d[1]-this.inputSize/2),A[2]*d[2]]),l=$5(o,[0,0]),c=a.map(d=>[...e1(d,l),d[2]]),x=qn(r),i=[...C2(n),1],y=[Xe(i,x[0]),Xe(i,x[1])];return c.map(d=>[Math.trunc(d[0]+y[0]),Math.trunc(d[1]+y[1]),Math.trunc(d[2])])}async estimateHands(t,n){let o=!1,r,s=(n.hand.skipTime||0)>v()-Qn,A=this.skipped<(n.hand.skipFrames||0);n.skipAllowed&&s&&A?this.skipped++:(r=await this.handDetector.predict(t,n),this.skipped=0),r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==n.hand.maxDetected||!n.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(o=!0));let a=[];for(let l=0;l=n.hand.minConfidence/4){let k=$0.reshape(p,[-1,3]),P=await k.array();$0.dispose(p),$0.dispose(k);let I=this.transformRawCoords(P,f,x,m),B=this.getBoxForHandLandmarks(I);this.storedBoxes[l]={...B,confidence:b};let _={landmarks:I,confidence:b,boxConfidence:c.confidence,fingerConfidence:b,box:{topLeft:B.startPoint,bottomRight:B.endPoint}};a.push(_)}else this.storedBoxes[l]=null;$0.dispose(p)}else{let x=Et(zt(c),Kn),i={confidence:c.confidence,boxConfidence:c.confidence,fingerConfidence:0,box:{topLeft:x.startPoint,bottomRight:x.endPoint},landmarks:[]};a.push(i)}}return this.storedBoxes=this.storedBoxes.filter(l=>l!==null),this.detectedHands=a.length,a.length>n.hand.maxDetected&&(a.length=n.hand.maxDetected),a}};var _n={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],palm:[0]},l2,c2,t1;function FA(){let e=l2?new St(l2):void 0;e&&c2&&(t1=new jt(e,c2))}async function n1(e,t){t1||FA();let n=await t1.estimateHands(e,t);if(!n)return[];let o=[];for(let r=0;rn[r].landmarks[i]);let A=n[r].landmarks,a=[Number.MAX_SAFE_INTEGER,Number.MAX_SAFE_INTEGER,0,0],l=[0,0,0,0];if(A&&A.length>0){for(let x of A)x[0]a[2]&&(a[2]=x[0]),x[1]>a[3]&&(a[3]=x[1]);a[2]-=a[0],a[3]-=a[1],l=[a[0]/(e.shape[2]||0),a[1]/(e.shape[1]||0),a[2]/(e.shape[2]||0),a[3]/(e.shape[1]||0)]}else a=n[r].box?[Math.trunc(Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.max(0,n[r].box.topLeft[1])),Math.trunc(Math.min(e.shape[2]||0,n[r].box.bottomRight[0])-Math.max(0,n[r].box.topLeft[0])),Math.trunc(Math.min(e.shape[1]||0,n[r].box.bottomRight[1])-Math.max(0,n[r].box.topLeft[1]))]:[0,0,0,0],l=[n[r].box.topLeft[0]/(e.shape[2]||0),n[r].box.topLeft[1]/(e.shape[1]||0),(n[r].box.bottomRight[0]-n[r].box.topLeft[0])/(e.shape[2]||0),(n[r].box.bottomRight[1]-n[r].box.topLeft[1])/(e.shape[1]||0)];let c=kt(A);o.push({id:r,score:Math.round(100*n[r].confidence)/100,boxScore:Math.round(100*n[r].boxConfidence)/100,fingerScore:Math.round(100*n[r].fingerConfidence)/100,label:"hand",box:a,boxRaw:l,keypoints:A,annotations:s,landmarks:c})}return o}async function $n(e){var t;return R.initial&&(l2=null),l2?e.debug&&h("cached model:",l2.modelUrl):l2=await L((t=e.hand.detector)==null?void 0:t.modelPath),l2}async function eo(e){var t;return R.initial&&(c2=null),c2?e.debug&&h("cached model:",c2.modelUrl):c2=await L((t=e.hand.skeleton)==null?void 0:t.modelPath),c2}var Q=V(G());var p0=[null,null],BA=["StatefulPartitionedCall/Postprocessor/Slice","StatefulPartitionedCall/Postprocessor/ExpandDims_1"],qe=[[0,0],[0,0]],HA=["hand","fist","pinch","point","face","tip","pinchtip"],no=4,oo=1.6,GA=512,VA=1.4,It=Number.MAX_SAFE_INTEGER,o1=0,we=[0,0],m0={boxes:[],hands:[]},ro={thumb:[1,2,3,4],index:[5,6,7,8],middle:[9,10,11,12],ring:[13,14,15,16],pinky:[17,18,19,20],base:[0],palm:[0,17,13,9,5,1,0]};async function so(e){var t;if(R.initial&&(p0[0]=null),p0[0])e.debug&&h("cached model:",p0[0].modelUrl);else{J2(["tensorlistreserve","enter","tensorlistfromtensor","merge","loopcond","switch","exit","tensorliststack","nextiteration","tensorlistsetitem","tensorlistgetitem","reciprocal","shape","split","where"],e),p0[0]=await L((t=e.hand.detector)==null?void 0:t.modelPath);let n=p0[0].executor?Object.values(p0[0].modelSignature.inputs):void 0;qe[0][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[0][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[0]}async function Ao(e){var t;if(R.initial&&(p0[1]=null),p0[1])e.debug&&h("cached model:",p0[1].modelUrl);else{p0[1]=await L((t=e.hand.skeleton)==null?void 0:t.modelPath);let n=p0[1].executor?Object.values(p0[1].modelSignature.inputs):void 0;qe[1][0]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[1].size):0,qe[1][1]=Array.isArray(n)?parseInt(n[0].tensorShape.dim[2].size):0}return p0[1]}async function ZA(e,t){let n=[];if(!e||!p0[0])return n;let o={},r=(e.shape[2]||1)/(e.shape[1]||1),s=Math.min(Math.round((e.shape[1]||0)/8)*8,GA),A=Math.round(s*r/8)*8;o.resize=Q.image.resizeBilinear(e,[s,A]),o.cast=Q.cast(o.resize,"int32"),[o.rawScores,o.rawBoxes]=await p0[0].executeAsync(o.cast,BA),o.boxes=Q.squeeze(o.rawBoxes,[0,2]),o.scores=Q.squeeze(o.rawScores,[0]);let a=Q.unstack(o.scores,1);Q.dispose(a[no]),a.splice(no,1),o.filtered=Q.stack(a,1),Q.dispose(a),o.max=Q.max(o.filtered,1),o.argmax=Q.argMax(o.filtered,1);let l=0;o.nms=await Q.image.nonMaxSuppressionAsync(o.boxes,o.max,(t.hand.maxDetected||0)+1,t.hand.iouThreshold||0,t.hand.minConfidence||1);let c=await o.nms.data(),x=await o.max.data(),i=await o.argmax.data();for(let y of Array.from(c)){let d=Q.slice(o.boxes,y,1),m=await d.data();Q.dispose(d);let f=[m[1],m[0],m[3]-m[1],m[2]-m[0]],u=st(f,VA),g=[Math.trunc(f[0]*we[0]),Math.trunc(f[1]*we[1]),Math.trunc(f[2]*we[0]),Math.trunc(f[3]*we[1])],T=x[y],p=HA[i[y]],b={id:l++,score:T,box:g,boxRaw:u,label:p};n.push(b)}return Object.keys(o).forEach(y=>Q.dispose(o[y])),n.sort((y,d)=>d.score-y.score),n.length>(t.hand.maxDetected||1)&&(n.length=t.hand.maxDetected||1),n}async function r1(e,t,n){let o={id:t.id,score:Math.round(100*t.score)/100,boxScore:Math.round(100*t.score)/100,fingerScore:0,box:t.box,boxRaw:t.boxRaw,label:t.label,keypoints:[],landmarks:{},annotations:{}};if(e&&p0[1]&&n.hand.landmarks&&t.score>(n.hand.minConfidence||0)){let r={},s=[t.boxRaw[1],t.boxRaw[0],t.boxRaw[3]+t.boxRaw[1],t.boxRaw[2]+t.boxRaw[0]];r.crop=Q.image.cropAndResize(e,[s],[0],[qe[1][0],qe[1][1]],"bilinear"),r.div=Q.div(r.crop,C.tf255),[r.score,r.keypoints]=p0[1].execute(r.div,["Identity_1","Identity"]);let A=(await r.score.data())[0],a=(100-Math.trunc(100/(1+Math.exp(A))))/100;if(a>=(n.hand.minConfidence||0)){o.fingerScore=a,r.reshaped=Q.reshape(r.keypoints,[-1,3]);let x=(await r.reshaped.array()).map(i=>[i[0]/qe[1][1],i[1]/qe[1][0],i[2]||0]).map(i=>[i[0]*t.boxRaw[2],i[1]*t.boxRaw[3],i[2]||0]);o.keypoints=x.map(i=>[we[0]*(i[0]+t.boxRaw[0]),we[1]*(i[1]+t.boxRaw[1]),i[2]||0]),o.landmarks=kt(o.keypoints);for(let i of Object.keys(ro))o.annotations[i]=ro[i].map(y=>o.landmarks&&o.keypoints[y]?o.keypoints[y]:null)}Object.keys(r).forEach(l=>Q.dispose(r[l]))}return o}async function s1(e,t){var r,s;if(!((r=p0[0])!=null&&r.executor)||!((s=p0[1])!=null&&s.executor)||!p0[0].inputs[0].shape||!p0[1].inputs[0].shape)return[];we=[e.shape[2]||0,e.shape[1]||0],It++;let n=(t.hand.skipTime||0)>v()-o1,o=It<(t.hand.skipFrames||0);return t.skipAllowed&&n&&o?m0.hands:new Promise(async A=>{let a=3*(t.hand.skipTime||0)>v()-o1,l=It<3*(t.hand.skipFrames||0);t.skipAllowed&&m0.hands.length===t.hand.maxDetected?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):t.skipAllowed&&a&&l&&m0.hands.length>0?m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))):(m0.boxes=await ZA(e,t),o1=v(),m0.hands=await Promise.all(m0.boxes.map(x=>r1(e,x,t))),It=0);let c=[...m0.boxes];if(m0.boxes.length=0,t.cacheSensitivity>0)for(let x=0;x.05&&i.box[3]/(e.shape[1]||1)>.05&&m0.hands[x].fingerScore&&m0.hands[x].fingerScore>(t.hand.minConfidence||0)){let y=st(i.box,oo),d=st(i.boxRaw,oo);m0.boxes.push({...c[x],box:y,boxRaw:d})}}for(let x=0;x({face:[],body:[],hand:[],gesture:[],object:[],persons:[],performance:{},timestamp:0,width:0,height:0,error:e});var W2={};ze(W2,{connected:()=>Lt,horizontal:()=>A1,kpt:()=>Nt,relative:()=>i1,vertical:()=>a1});var Nt=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],A1=[["leftEye","rightEye"],["leftEar","rightEar"],["leftShoulder","rightShoulder"],["leftElbow","rightElbow"],["leftWrist","rightWrist"],["leftHip","rightHip"],["leftKnee","rightKnee"],["leftAnkle","rightAnkle"]],a1=[["leftKnee","leftShoulder"],["rightKnee","rightShoulder"],["leftAnkle","leftKnee"],["rightAnkle","rightKnee"]],i1=[[["leftHip","rightHip"],["leftShoulder","rightShoulder"]],[["leftElbow","rightElbow"],["leftShoulder","rightShoulder"]]],Lt={leftLeg:["leftHip","leftKnee","leftAnkle"],rightLeg:["rightHip","rightKnee","rightAnkle"],torso:["leftShoulder","rightShoulder","rightHip","leftHip","leftShoulder"],leftArm:["leftShoulder","leftElbow","leftWrist"],rightArm:["rightShoulder","rightElbow","rightWrist"],head:[]};var z=Te(),l1=0;function io(e,t){var A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0,n0,j0;let n=v();if(!e)return Te();let o=Date.now()-e.timestamp,r=o<1e3?8-Math.log(o+1):1;if(e.canvas&&(z.canvas=e.canvas),e.error&&(z.error=e.error),!z.body||e.body.length!==z.body.length)z.body=JSON.parse(JSON.stringify(e.body));else for(let M=0;M((r-1)*z.body[M].box[X]+H)/r),C0=e.body[M].boxRaw.map((H,X)=>((r-1)*z.body[M].boxRaw[X]+H)/r),x0=e.body[M].keypoints.map((H,X)=>{var U0,y0,Ee,k2,x2,E1,z1,S1,j1;return{score:H.score,part:H.part,position:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[0]||0)+(H.position[0]||0))/r:H.position[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[1]||0)+(H.position[1]||0))/r:H.position[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].position[2]||0)+(H.position[2]||0))/r:H.position[2]],positionRaw:[z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[0]||0)+(H.positionRaw[0]||0))/r:H.positionRaw[0],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[1]||0)+(H.positionRaw[1]||0))/r:H.positionRaw[1],z.body[M].keypoints[X]?((r-1)*(z.body[M].keypoints[X].positionRaw[2]||0)+(H.positionRaw[2]||0))/r:H.positionRaw[2]],distance:[z.body[M].keypoints[X]?((r-1)*(((U0=z.body[M].keypoints[X].distance)==null?void 0:U0[0])||0)+(((y0=H.distance)==null?void 0:y0[0])||0))/r:(Ee=H.distance)==null?void 0:Ee[0],z.body[M].keypoints[X]?((r-1)*(((k2=z.body[M].keypoints[X].distance)==null?void 0:k2[1])||0)+(((x2=H.distance)==null?void 0:x2[1])||0))/r:(E1=H.distance)==null?void 0:E1[1],z.body[M].keypoints[X]?((r-1)*(((z1=z.body[M].keypoints[X].distance)==null?void 0:z1[2])||0)+(((S1=H.distance)==null?void 0:S1[2])||0))/r:(j1=H.distance)==null?void 0:j1[2]]}}),K={},E={connected:{}};(A=t.body.modelPath)!=null&&A.includes("efficientpose")?E=it:(a=t.body.modelPath)!=null&&a.includes("blazepose")?E=ot:(l=t.body.modelPath)!=null&&l.includes("movenet")&&(E=W2);for(let[H,X]of Object.entries(E.connected)){let U0=[];for(let y0=0;y0x2.part===X[y0]),k2=x0.find(x2=>x2.part===X[y0+1]);Ee&&k2&&U0.push([Ee.position,k2.position])}K[H]=U0}z.body[M]={...e.body[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.hand||e.hand.length!==z.hand.length)z.hand=JSON.parse(JSON.stringify(e.hand));else for(let M=0;M((r-1)*z.hand[M].box[H]+E)/r),C0=e.hand[M].boxRaw.map((E,H)=>((r-1)*z.hand[M].boxRaw[H]+E)/r);z.hand[M].keypoints.length!==e.hand[M].keypoints.length&&(z.hand[M].keypoints=e.hand[M].keypoints);let x0=e.hand[M].keypoints&&e.hand[M].keypoints.length>0?e.hand[M].keypoints.map((E,H)=>E.map((X,U0)=>((r-1)*(z.hand[M].keypoints[H][U0]||1)+(X||0))/r)):[],K={};if(Object.keys(z.hand[M].annotations).length!==Object.keys(e.hand[M].annotations).length)z.hand[M].annotations=e.hand[M].annotations,K=z.hand[M].annotations;else if(e.hand[M].annotations)for(let E of Object.keys(e.hand[M].annotations))K[E]=(i=(x=(c=e.hand[M])==null?void 0:c.annotations)==null?void 0:x[E])!=null&&i[0]?e.hand[M].annotations[E].map((H,X)=>H.map((U0,y0)=>((r-1)*z.hand[M].annotations[E][X][y0]+U0)/r)):null;z.hand[M]={...e.hand[M],box:T0,boxRaw:C0,keypoints:x0,annotations:K}}if(!z.face||e.face.length!==z.face.length)z.face=JSON.parse(JSON.stringify(e.face));else for(let M=0;M((r-1)*z.face[M].box[E]+K)/r),C0=e.face[M].boxRaw.map((K,E)=>((r-1)*z.face[M].boxRaw[E]+K)/r),x0=e.face[M].annotations;if(Object.keys(z.face[M].annotations).length!==Object.keys(e.face[M].annotations).length)z.face[M].annotations=e.face[M].annotations,x0=z.face[M].annotations;else if(e.face[M].annotations)for(let K of Object.keys(e.face[M].annotations))x0[K]=(m=(d=(y=e.face[M])==null?void 0:y.annotations)==null?void 0:d[K])!=null&&m[0]?e.face[M].annotations[K].map((E,H)=>E.map((X,U0)=>((r-1)*z.face[M].annotations[K][H][U0]+X)/r)):null;if(e.face[M].rotation){let K={matrix:[0,0,0,0,0,0,0,0,0],angle:{roll:0,yaw:0,pitch:0},gaze:{bearing:0,strength:0}};K.matrix=(f=e.face[M].rotation)==null?void 0:f.matrix,K.angle={roll:((r-1)*(((g=(u=z.face[M].rotation)==null?void 0:u.angle)==null?void 0:g.roll)||0)+(((p=(T=e.face[M].rotation)==null?void 0:T.angle)==null?void 0:p.roll)||0))/r,yaw:((r-1)*(((k=(b=z.face[M].rotation)==null?void 0:b.angle)==null?void 0:k.yaw)||0)+(((I=(P=e.face[M].rotation)==null?void 0:P.angle)==null?void 0:I.yaw)||0))/r,pitch:((r-1)*(((_=(B=z.face[M].rotation)==null?void 0:B.angle)==null?void 0:_.pitch)||0)+((($=(Z=e.face[M].rotation)==null?void 0:Z.angle)==null?void 0:$.pitch)||0))/r},K.gaze={bearing:((r-1)*(((A0=z.face[M].rotation)==null?void 0:A0.gaze.bearing)||0)+(((t0=e.face[M].rotation)==null?void 0:t0.gaze.bearing)||0))/r,strength:((r-1)*(((n0=z.face[M].rotation)==null?void 0:n0.gaze.strength)||0)+(((j0=e.face[M].rotation)==null?void 0:j0.gaze.strength)||0))/r},z.face[M]={...e.face[M],rotation:K,box:T0,boxRaw:C0,annotations:x0}}else z.face[M]={...e.face[M],box:T0,boxRaw:C0,annotations:x0}}if(!z.object||e.object.length!==z.object.length)z.object=JSON.parse(JSON.stringify(e.object));else for(let M=0;M((r-1)*z.object[M].box[K]+x0)/r),C0=e.object[M].boxRaw.map((x0,K)=>((r-1)*z.object[M].boxRaw[K]+x0)/r);z.object[M]={...e.object[M],box:T0,boxRaw:C0}}if(e.persons){let M=e.persons;if(!z.persons||M.length!==z.persons.length)z.persons=JSON.parse(JSON.stringify(M));else for(let T0=0;T0((r-1)*z.persons[T0].box[x0]+C0)/r)}e.gesture&&(z.gesture=e.gesture),z.width=e.width,z.height=e.height;let s=v();return l1=R.perfadd?l1+Math.round(s-n):Math.round(s-n),e.performance&&(z.performance={...e.performance,interpolate:l1}),z}var s0=V(G());var L0;async function c1(e){return!L0||R.initial?L0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",L0.modelUrl),L0}async function lo(e,t){var r;if(L0||(L0=await c1(t)),!(L0!=null&&L0.executor)||!((r=L0==null?void 0:L0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=s0.image.resizeBilinear(e,[L0.inputs[0].shape?L0.inputs[0].shape[1]:0,L0.inputs[0].shape?L0.inputs[0].shape[2]:0],!1),n.norm=s0.div(n.resize,C.tf255),n.res=L0.execute(n.norm),n.squeeze=s0.squeeze(n.res,[0]),[n.bgRaw,n.fgRaw]=s0.unstack(n.squeeze,2),n.fg=s0.softmax(n.fgRaw),n.mul=s0.mul(n.fg,C.tf255),n.expand=s0.expandDims(n.mul,2),n.output=s0.image.resizeBilinear(n.expand,[e.shape[1]||0,e.shape[2]||0]);let o;switch(t.segmentation.mode||"default"){case"default":n.input=s0.squeeze(e),n.concat=s0.concat([n.input,n.output],-1),o=s0.cast(n.concat,"int32");break;case"alpha":o=s0.cast(n.output,"int32");break;default:o=s0.tensor(0)}return Object.keys(n).forEach(s=>s0.dispose(n[s])),o}var Ot={};ze(Ot,{distance:()=>d1,find:()=>UA,similarity:()=>qA});function d1(e,t,n={order:2,multiplier:25}){if(!e||!e)return Number.MAX_SAFE_INTEGER;let o=0;for(let r=0;r{if(e===0)return 1;let s=(1-(t===2?Math.sqrt(e):e**(1/t))/100-n)/(o-n);return Math.max(Math.min(s,1),0)};function qA(e,t,n={order:2,multiplier:25,min:.2,max:.8}){let o=d1(e,t,n);return xo(o,n.order||2,n.min||0,n.max||1)}function UA(e,t,n={order:2,multiplier:25,threshold:0,min:.2,max:.8}){if(!Array.isArray(e)||!Array.isArray(t)||e.length<64||t.length===0)return{index:-1,distance:Number.POSITIVE_INFINITY,similarity:0};let o=Number.MAX_SAFE_INTEGER,r=-1;for(let A=0;AH2,validateModel:()=>Gt});var D2=V(G());var Ue=V(G());var yo=.005,ee={keypoints:[],padding:[[0,0],[0,0],[0,0],[0,0]]};function x1(e){for(let t of A1){let n=e.keypoints.findIndex(r=>r.part===t[0]),o=e.keypoints.findIndex(r=>r.part===t[1]);if(e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[0]r&&r.part===t[0]),o=e.keypoints.findIndex(r=>r&&r.part===t[1]);e.keypoints[n]&&e.keypoints[o]&&e.keypoints[n].position[1]c&&c.part===t[0]),r=e.keypoints.findIndex(c=>c&&c.part===t[1]),s=e.keypoints.findIndex(c=>c&&c.part===n[0]),A=e.keypoints.findIndex(c=>c&&c.part===n[1]);if(!e.keypoints[s]||!e.keypoints[A])continue;let a=e.keypoints[o]?[Math.abs(e.keypoints[s].position[0]-e.keypoints[o].position[0]),Math.abs(e.keypoints[A].position[0]-e.keypoints[o].position[0])]:[0,0],l=e.keypoints[r]?[Math.abs(e.keypoints[A].position[0]-e.keypoints[r].position[0]),Math.abs(e.keypoints[s].position[0]-e.keypoints[r].position[0])]:[0,0];if(a[0]>a[1]||l[0]>l[1]){let c=e.keypoints[o];e.keypoints[o]=e.keypoints[r],e.keypoints[r]=c}}}function fo(e){for(let t=0;te.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0,e.shape[2]>e.shape[1]?Math.trunc((e.shape[2]-e.shape[1])/2):0],[e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0,e.shape[1]>e.shape[2]?Math.trunc((e.shape[1]-e.shape[2])/2):0],[0,0]],n.pad=Ue.pad(e,ee.padding),n.resize=Ue.image.resizeBilinear(n.pad,[t,t]);let o=Ue.cast(n.resize,"int32");return Object.keys(n).forEach(A=>Ue.dispose(n[A])),o}function po(e,t){e.keypoints=e.keypoints.filter(o=>o==null?void 0:o.position);for(let o of e.keypoints)o.position=[o.position[0]*(t[0]+ee.padding[2][0]+ee.padding[2][1])/t[0]-ee.padding[2][0],o.position[1]*(t[1]+ee.padding[1][0]+ee.padding[1][1])/t[1]-ee.padding[1][0]],o.positionRaw=[o.position[0]/t[0],o.position[1]/t[1]];let n=Le(e.keypoints.map(o=>o.position),t);return e.box=n.box,e.boxRaw=n.boxRaw,e}var b0,Ct=0,y1=Number.MAX_SAFE_INTEGER,d2={boxes:[],bodies:[],last:0};async function uo(e){var t;return R.initial&&(b0=null),b0?e.debug&&h("cached model:",b0.modelUrl):(J2(["size"],e),b0=await L(e.body.modelPath)),Ct=b0!=null&&b0.executor&&((t=b0==null?void 0:b0.inputs)!=null&&t[0].shape)?b0.inputs[0].shape[2]:0,Ct<64&&(Ct=256),D2.env().flagRegistry.WEBGL_USE_SHAPES_UNIFORMS&&D2.env().set("WEBGL_USE_SHAPES_UNIFORMS",!1),b0}function KA(e,t,n){let o=e[0][0],r=[],s=0;for(let x=0;xt.body.minConfidence){let i=[o[x][1],o[x][0]];r.push({score:Math.round(100*s)/100,part:Nt[x],positionRaw:i,position:[Math.round((n.shape[2]||0)*i[0]),Math.round((n.shape[1]||0)*i[1])]})}s=r.reduce((x,i)=>i.score>x?i.score:x,0);let A=[],a=Le(r.map(x=>x.position),[n.shape[2],n.shape[1]]),l={};for(let[x,i]of Object.entries(Lt)){let y=[];for(let d=0;du.part===i[d]),f=r.find(u=>u.part===i[d+1]);m&&f&&m.score>(t.body.minConfidence||0)&&f.score>(t.body.minConfidence||0)&&y.push([m.position,f.position])}l[x]=y}let c={id:0,score:s,box:a.box,boxRaw:a.boxRaw,keypoints:r,annotations:l};return x1(c),A.push(c),A}function JA(e,t,n){let o=[];for(let r=0;rt.body.minConfidence){let a=[];for(let y=0;y<17;y++){let d=s[3*y+2];if(d>t.body.minConfidence){let m=[s[3*y+1],s[3*y+0]];a.push({part:Nt[y],score:Math.round(100*d)/100,positionRaw:m,position:[Math.round((n.shape[2]||0)*m[0]),Math.round((n.shape[1]||0)*m[1])]})}}let l=[s[52],s[51],s[54]-s[52],s[53]-s[51]],c=[Math.trunc(l[0]*(n.shape[2]||0)),Math.trunc(l[1]*(n.shape[1]||0)),Math.trunc(l[2]*(n.shape[2]||0)),Math.trunc(l[3]*(n.shape[1]||0))],x={};for(let[y,d]of Object.entries(Lt)){let m=[];for(let f=0;fT.part===d[f]),g=a.find(T=>T.part===d[f+1]);u&&g&&u.score>(t.body.minConfidence||0)&&g.score>(t.body.minConfidence||0)&&m.push([u.position,g.position])}x[y]=m}let i={id:r,score:A,box:c,boxRaw:l,keypoints:[...a],annotations:x};x1(i),o.push(i)}}return o.sort((r,s)=>s.score-r.score),o.length>t.body.maxDetected&&(o.length=t.body.maxDetected),o}async function f1(e,t){var r;if(!(b0!=null&&b0.executor)||!((r=b0==null?void 0:b0.inputs)!=null&&r[0].shape))return[];t.skipAllowed||(d2.boxes.length=0),y1++;let n=(t.body.skipTime||0)>v()-d2.last,o=y1<(t.body.skipFrames||0);return t.skipAllowed&&n&&o?d2.bodies:new Promise(async s=>{let A={};y1=0,A.input=mo(e,Ct),A.res=b0==null?void 0:b0.execute(A.input),d2.last=v();let a=await A.res.array();d2.bodies=A.res.shape[2]===17?KA(a,t,e):JA(a,t,e);for(let l of d2.bodies)po(l,[e.shape[2]||1,e.shape[1]||1]),fo(l.keypoints);Object.keys(A).forEach(l=>D2.dispose(A[l])),s(d2.bodies)})}var S0=V(G());var ce,Wt=[],bo=0,m1=Number.MAX_SAFE_INTEGER,Ft=0,Dt=2.5;async function go(e){if(!ce||R.initial){ce=await L(e.object.modelPath);let t=ce!=null&&ce.executor?Object.values(ce.modelSignature.inputs):void 0;Ft=Array.isArray(t)?parseInt(t[0].tensorShape.dim[2].size):416}else e.debug&&h("cached model:",ce.modelUrl);return ce}async function QA(e,t,n){var c,x;let o=0,r=[],s=Ft;for(let i of[1,2,4]){let y=i*13,d=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)===m2.length)),m=await d.array(),f=S0.squeeze(e.find(p=>p.shape[1]===y**2&&(p.shape[2]||0)(n.object.minConfidence||0)&&b!==61){let P=(.5+Math.trunc(p%y))/y,I=(.5+Math.trunc(p/y))/y,B=T[p].map(M=>M*(y/i/s)),[_,Z]=[P-Dt/i*B[0],I-Dt/i*B[1]],[$,A0]=[P+Dt/i*B[2]-_,I+Dt/i*B[3]-Z],t0=[_,Z,$,A0];t0=t0.map(M=>Math.max(0,Math.min(M,1)));let n0=[t0[0]*t[0],t0[1]*t[1],t0[2]*t[0],t0[3]*t[1]],j0={id:o++,score:Math.round(100*k)/100,class:b+1,label:m2[b].label,box:n0.map(M=>Math.trunc(M)),boxRaw:t0};r.push(j0)}}S0.dispose([d,f,u,g])}let A=r.map(i=>[i.boxRaw[1],i.boxRaw[0],i.boxRaw[3],i.boxRaw[2]]),a=r.map(i=>i.score),l=[];if(A&&A.length>0){let i=await S0.image.nonMaxSuppressionAsync(A,a,n.object.maxDetected||0,n.object.iouThreshold,n.object.minConfidence);l=Array.from(await i.data()),S0.dispose(i)}return r=r.filter((i,y)=>l.includes(y)).sort((i,y)=>y.score-i.score),r}async function p1(e,t){if(!(ce!=null&&ce.executor))return[];let n=(t.object.skipTime||0)>v()-bo,o=m1<(t.object.skipFrames||0);return t.skipAllowed&&n&&o&&Wt.length>0?(m1++,Wt):(m1=0,!R.kernels.includes("mod")||!R.kernels.includes("sparsetodense")?Wt:new Promise(async r=>{let s=[e.shape[2]||0,e.shape[1]||0],A=S0.image.resizeBilinear(e,[Ft,Ft],!1),a=S0.div(A,C.tf255),l=S0.transpose(a,[0,3,1,2]),c;t.object.enabled&&(c=ce.execute(l)),bo=v();let x=await QA(c,s,t);Wt=x,S0.dispose([A,a,l,...c]),r(x)}))}var V0=V(G());var B2=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],_A=B2.length,F2=B2.reduce((e,t,n)=>(e[t]=n,e),{}),$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"]],V7=$A.map(([e,t])=>[F2[e],F2[t]]),vo=[["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"]];function Ro(e){let t=e.reduce(({maxX:n,maxY:o,minX:r,minY:s},{position:{x:A,y:a}})=>({maxX:Math.max(n,A),maxY:Math.max(o,a),minX:Math.min(r,A),minY:Math.min(s,a)}),{maxX:Number.NEGATIVE_INFINITY,maxY:Number.NEGATIVE_INFINITY,minX:Number.POSITIVE_INFINITY,minY:Number.POSITIVE_INFINITY});return[t.minX,t.minY,t.maxX-t.minX,t.maxY-t.minY]}function Mo(e,[t,n],[o,r]){let s=t/o,A=n/r,a=(c,x)=>({id:x,score:c.score,boxRaw:[c.box[0]/r,c.box[1]/o,c.box[2]/r,c.box[3]/o],box:[Math.trunc(c.box[0]*A),Math.trunc(c.box[1]*s),Math.trunc(c.box[2]*A),Math.trunc(c.box[3]*s)],keypoints:c.keypoints.map(({score:i,part:y,position:d})=>({score:i,part:y,position:[Math.trunc(d.x*A),Math.trunc(d.y*s)],positionRaw:[d.x/o,d.y/o]})),annotations:{}});return e.map((c,x)=>a(c,x))}var Bt=class{constructor(t,n){w(this,"priorityQueue");w(this,"numberOfElements");w(this,"getElementValue");this.priorityQueue=new Array(t),this.numberOfElements=-1,this.getElementValue=n}enqueue(t){this.priorityQueue[++this.numberOfElements]=t,this.swim(this.numberOfElements)}dequeue(){let t=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,t}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(t){for(;t>0&&this.less(Math.floor(t/2),t);)this.exchange(t,Math.floor(t/2)),t=Math.floor(t/2)}sink(t){for(;2*t<=this.numberOfElements;){let n=2*t;if(nn?n:e}function Po(e,t,n,o){let r=n-e,s=o-t;return r*r+s*s}function g1(e,t){return{x:e.x+t.x,y:e.y+t.y}}var te,ta=["MobilenetV1/offset_2/BiasAdd","MobilenetV1/heatmap_2/BiasAdd","MobilenetV1/displacement_fwd_2/BiasAdd","MobilenetV1/displacement_bwd_2/BiasAdd"],Ht=1,M2=16,na=50**2;function ko(e,t,n,o,r,s,A=2){let a=g=>({y:s.get(g.y,g.x,e),x:s.get(g.y,g.x,s.shape[2]/2+e)}),l=(g,T,p)=>({y:b1(Math.round(g.y/M2),0,T-1),x:b1(Math.round(g.x/M2),0,p-1)}),[c,x]=o.shape,i=l(t.position,c,x),y=a(i),m=g1(t.position,y);for(let g=0;g[F2[y],F2[d]]),A=s.map(([,y])=>y),a=s.map(([y])=>y),l=t.shape[2],c=A.length,x=new Array(l),i=h1(e.part,M2,n);x[e.part.id]={score:e.score,part:B2[e.part.id],position:i};for(let y=c-1;y>=0;--y){let d=A[y],m=a[y];x[d]&&!x[m]&&(x[m]=ko(y,x[d],m,t,n,r))}for(let y=0;yt){a=!1;break}if(!a)break}return a}function sa(e,t){let[n,o,r]=t.shape,s=new Bt(n*o*r,({score:A})=>A);for(let A=0;A{var A;let s=(A=r[o])==null?void 0:A.position;return s?Po(n,t,s.y,s.x)<=na:!1})}function Aa(e,t){return t.reduce((o,{position:r,score:s},A)=>(wo(e,r,A)||(o+=s),o),0)/t.length}function aa(e,t,n,o,r,s){let A=[],a=sa(s,t);for(;A.lengthd.score>s);let i=Aa(A,x),y=Ro(x);i>s&&A.push({keypoints:x,box:y,score:Math.round(100*i)/100})}return A}async function T1(e,t){if(!(te!=null&&te.executor))return[];let n=V0.tidy(()=>{if(!te.inputs[0].shape)return[];let A=V0.image.resizeBilinear(e,[te.inputs[0].shape[2],te.inputs[0].shape[1]]),a=V0.sub(V0.div(V0.cast(A,"float32"),127.5),1),c=te.execute(a,ta).map(x=>V0.squeeze(x,[0]));return c[1]=V0.sigmoid(c[1]),c}),o=await Promise.all(n.map(A=>A.buffer()));for(let A of n)V0.dispose(A);let r=aa(o[0],o[1],o[2],o[3],t.body.maxDetected,t.body.minConfidence);return te.inputs[0].shape?Mo(r,[e.shape[1],e.shape[2]],[te.inputs[0].shape[2],te.inputs[0].shape[1]]):[]}async function Eo(e){return!te||R.initial?te=await L(e.body.modelPath):e.debug&&h("cached model:",te.modelUrl),te}var F=V(G());var ve,ia=["fgr","pha","r1o","r2o","r3o","r4o"],g0={},R1=0;function jo(e){F.dispose([g0.r1i,g0.r2i,g0.r3i,g0.r4i,g0.downsample_ratio]),g0.r1i=F.tensor(0),g0.r2i=F.tensor(0),g0.r3i=F.tensor(0),g0.r4i=F.tensor(0),R1=e.segmentation.ratio||.5,g0.downsample_ratio=F.tensor(R1)}async function M1(e){return!ve||R.initial?ve=await L(e.segmentation.modelPath):e.debug&&h("cached model:",ve.modelUrl),jo(e),ve}var So=e=>F.tidy(()=>{let t=F.squeeze(e,[0]),n=F.mul(t,C.tf255);return F.cast(n,"int32")});function v1(e,t){let n=e?So(e):F.fill([t.shape[1]||0,t.shape[2]||0,3],255,"int32"),o=t?So(t):F.fill([e.shape[1]||0,e.shape[2]||0,1],255,"int32"),r=F.concat([n,o],-1);return F.dispose([n,o]),r}function la(e){return F.tidy(()=>{let t={};return t.unstack=F.unstack(e,-1),t.concat=F.concat(t.unstack,1),t.split=F.split(t.concat,4,1),t.stack=F.concat(t.split,2),t.squeeze=F.squeeze(t.stack,[0]),t.expand=F.expandDims(t.squeeze,-1),t.add=F.add(t.expand,1),t.mul=F.mul(t.add,127.5),t.cast=F.cast(t.mul,"int32"),t.tile=F.tile(t.cast,[1,1,3]),t.alpha=F.fill([t.tile.shape[0]||0,t.tile.shape[1]||0,1],255,"int32"),F.concat([t.tile,t.alpha],-1)})}async function Io(e,t){if(ve||(ve=await M1(t)),!(ve!=null&&ve.executor))return null;g0.src=F.div(e,255),R1!==t.segmentation.ratio&&jo(t);let[n,o,r,s,A,a]=await ve.executeAsync(g0,ia),l;switch(t.segmentation.mode||"default"){case"default":l=v1(n,o);break;case"alpha":l=v1(null,o);break;case"foreground":l=v1(n,null);break;case"state":l=la(r);break;default:l=F.tensor(0)}return F.dispose([g0.src,n,o,g0.r1i,g0.r2i,g0.r3i,g0.r4i]),[g0.r1i,g0.r2i,g0.r3i,g0.r4i]=[r,s,A,a],l}var z0=V(G());var O0;async function P1(e){return!O0||R.initial?O0=await L(e.segmentation.modelPath):e.debug&&h("cached model:",O0.modelUrl),O0}async function Lo(e,t){var r;if(O0||(O0=await P1(t)),!(O0!=null&&O0.executor)||!((r=O0==null?void 0:O0.inputs)!=null&&r[0].shape))return null;let n={};n.resize=z0.image.resizeBilinear(e,[O0.inputs[0].shape?O0.inputs[0].shape[1]:0,O0.inputs[0].shape?O0.inputs[0].shape[2]:0],!1),n.norm=z0.div(n.resize,C.tf255),n.res=O0.execute(n.norm),n.squeeze=z0.squeeze(n.res,[0]),n.alpha=z0.image.resizeBilinear(n.squeeze,[e.shape[1]||0,e.shape[2]||0]),n.mul=z0.mul(n.alpha,C.tf255);let o;switch(t.segmentation.mode||"default"){case"default":n.input=z0.squeeze(e),n.concat=z0.concat([n.input,n.mul],-1),o=z0.cast(n.concat,"int32");break;case"alpha":o=z0.cast(n.mul,"int32");break;default:o=z0.tensor(0)}return Object.keys(n).forEach(s=>z0.dispose(n[s])),o}function Gt(e,t,n){var c,x;if(!t||!((c=e==null?void 0:e.config)!=null&&c.validateModels))return null;let o=["const","placeholder","noop","pad","squeeze","add","sub","mul","div"],r=["biasadd","fusedbatchnormv3","matmul","switch","shape","merge","split","broadcastto"],s=[],A=[],a=t.modelUrl,l=t.executor;if((x=l==null?void 0:l.graph)!=null&&x.nodes)for(let i of Object.values(l.graph.nodes)){let y=i.op.toLowerCase();s.includes(y)||s.push(y)}else!l&&e.config.debug&&h("model not loaded",n);for(let i of s)!o.includes(i)&&!r.includes(i)&&!e.env.kernels.includes(i)&&!e.env.kernels.includes(i.replace("_",""))&&!e.env.kernels.includes(i.replace("native",""))&&!e.env.kernels.includes(i.replace("v2",""))&&A.push(i);return e.config.debug&&A.length>0&&h("model validation failed:",n,A),A.length>0?{name:n,missing:A,ops:s,url:a}:null}var H2=class{constructor(t){w(this,"instance");w(this,"models",{});this.models={},this.instance=t}stats(){let t=0,n=0,o=0;for(let s of Object.values(I0))t+=s.sizeFromManifest,n+=s.sizeLoadedWeights,o+=s.sizeDesired;let r=o>0?n/o:0;return{numLoadedModels:Object.values(I0).length,numDefinedModels:Object.keys(this.models).length,percentageLoaded:r,totalSizeFromManifest:t,totalSizeWeights:n,totalSizeLoading:o,modelStats:Object.values(I0)}}reset(){for(let t of Object.keys(this.models))this.models[t]=null}async load(t){var o,r,s,A,a,l,c,x,i,y,d,m,f,u,g,T,p,b,k,P,I,B,_,Z,$,A0,t0;R.initial&&this.reset(),t&&(this.instance=t);let n={};n.blazeface=this.instance.config.face.enabled&&!this.models.blazeface?k3(this.instance.config):null,n.antispoof=this.instance.config.face.enabled&&((o=this.instance.config.face.antispoof)!=null&&o.enabled)&&!this.models.antispoof?Q3(this.instance.config):null,n.liveness=this.instance.config.face.enabled&&((r=this.instance.config.face.liveness)!=null&&r.enabled)&&!this.models.liveness?tn(this.instance.config):null,n.faceres=this.instance.config.face.enabled&&((s=this.instance.config.face.description)!=null&&s.enabled)&&!this.models.faceres?q3(this.instance.config):null,n.emotion=this.instance.config.face.enabled&&((A=this.instance.config.face.emotion)!=null&&A.enabled)&&!this.models.emotion?G3(this.instance.config):null,n.iris=this.instance.config.face.enabled&&((a=this.instance.config.face.iris)!=null&&a.enabled)&&!((l=this.instance.config.face.attention)!=null&&l.enabled)&&!this.models.iris?I3(this.instance.config):null,n.facemesh=this.instance.config.face.enabled&&((c=this.instance.config.face.mesh)!=null&&c.enabled)&&!this.models.facemesh?W3(this.instance.config):null,n.gear=this.instance.config.face.enabled&&((x=this.instance.config.face.gear)!=null&&x.enabled)&&!this.models.gear?sn(this.instance.config):null,n.ssrnetage=this.instance.config.face.enabled&&((i=this.instance.config.face.ssrnet)!=null&&i.enabled)&&!this.models.ssrnetage?cn(this.instance.config):null,n.ssrnetgender=this.instance.config.face.enabled&&((y=this.instance.config.face.ssrnet)!=null&&y.enabled)&&!this.models.ssrnetgender?fn(this.instance.config):null,n.mobilefacenet=this.instance.config.face.enabled&&((d=this.instance.config.face.mobilefacenet)!=null&&d.enabled)&&!this.models.mobilefacenet?bn(this.instance.config):null,n.insightface=this.instance.config.face.enabled&&((m=this.instance.config.face.insightface)!=null&&m.enabled)&&!this.models.insightface?Mn(this.instance.config):null,n.blazepose=this.instance.config.body.enabled&&!this.models.blazepose&&((f=this.instance.config.body.modelPath)!=null&&f.includes("blazepose"))?a3(this.instance.config):null,n.blazeposedetect=this.instance.config.body.enabled&&!this.models.blazeposedetect&&this.instance.config.body.detector&&this.instance.config.body.detector.modelPath?A3(this.instance.config):null,n.efficientpose=this.instance.config.body.enabled&&!this.models.efficientpose&&((u=this.instance.config.body.modelPath)!=null&&u.includes("efficientpose"))?y3(this.instance.config):null,n.movenet=this.instance.config.body.enabled&&!this.models.movenet&&((g=this.instance.config.body.modelPath)!=null&&g.includes("movenet"))?uo(this.instance.config):null,n.posenet=this.instance.config.body.enabled&&!this.models.posenet&&((T=this.instance.config.body.modelPath)!=null&&T.includes("posenet"))?Eo(this.instance.config):null,n.handtrack=this.instance.config.hand.enabled&&!this.models.handtrack&&((b=(p=this.instance.config.hand.detector)==null?void 0:p.modelPath)!=null&&b.includes("handtrack"))?so(this.instance.config):null,n.handskeleton=this.instance.config.hand.enabled&&this.instance.config.hand.landmarks&&!this.models.handskeleton&&((P=(k=this.instance.config.hand.detector)==null?void 0:k.modelPath)!=null&&P.includes("handtrack"))?Ao(this.instance.config):null,this.instance.config.hand.enabled&&!this.models.handdetect&&((B=(I=this.instance.config.hand.detector)==null?void 0:I.modelPath)!=null&&B.includes("handdetect"))&&(n.handdetect=$n(this.instance.config),n.handskeleton=eo(this.instance.config)),n.centernet=this.instance.config.object.enabled&&!this.models.centernet&&((_=this.instance.config.object.modelPath)!=null&&_.includes("centernet"))?c3(this.instance.config):null,n.nanodet=this.instance.config.object.enabled&&!this.models.nanodet&&((Z=this.instance.config.object.modelPath)!=null&&Z.includes("nanodet"))?go(this.instance.config):null,n.selfie=this.instance.config.segmentation.enabled&&!this.models.selfie&&(($=this.instance.config.segmentation.modelPath)!=null&&$.includes("selfie"))?P1(this.instance.config):null,n.meet=this.instance.config.segmentation.enabled&&!this.models.meet&&((A0=this.instance.config.segmentation.modelPath)!=null&&A0.includes("meet"))?c1(this.instance.config):null,n.rvm=this.instance.config.segmentation.enabled&&!this.models.rvm&&((t0=this.instance.config.segmentation.modelPath)!=null&&t0.includes("rvm"))?M1(this.instance.config):null;for(let[n0,j0]of Object.entries(n))j0!=null&&j0.then&&j0.then(M=>this.models[n0]=M);await Promise.all(Object.values(n))}list(){let t=Object.keys(this.models).map(n=>{var o;return{name:n,loaded:this.models[n]!==null,size:0,url:this.models[n]?(o=this.models[n])==null?void 0:o.modelUrl:null}});for(let n of t){let o=Object.keys(I0).find(r=>r.startsWith(n.name));o&&(n.size=I0[o].sizeLoadedWeights,n.url=I0[o].url)}return t}loaded(){return this.list().filter(o=>o.loaded).map(o=>o.name)}validate(){let t=[];for(let n of Object.keys(this.models)){let o=this.models[n];if(!o)continue;let r=Gt(this.instance,o,n);r&&t.push(r)}return t}};function Co(e,t,n,o,r){var a,l,c,x,i,y;let s=0,A=[];for(let d of e){let m={id:s++,face:d,body:null,hands:{left:null,right:null},gestures:[],box:[0,0,0,0]};for(let b of t)d.box[0]>b.box[0]&&d.box[0]b.box[1]&&d.box[1]+d.box[3]m.body.box[0]&&b.box[0]+b.box[2]m.body.box[1]&&b.box[1]+b.box[3]m.body.box[0]&&b.box[1]+b.box[3]>m.body.box[1]&&b.box[1]+b.box[3]{b&&b.length===4&&(f.push(b[0],b[0]+b[2]),u.push(b[1],b[1]+b[3]))};g(m.face.box),g((x=m.body)==null?void 0:x.box),g((i=m.hands.left)==null?void 0:i.box),g((y=m.hands.right)==null?void 0:y.box);let T=Math.min(...f),p=Math.min(...u);m.box=[T,p,Math.max(...f)-T,Math.max(...u)-p],r!=null&&r[1]&&(r!=null&&r[2])&&(m.boxRaw=[m.box[0]/r[2],m.box[1]/r[1],m.box[2]/r[2],m.box[3]/r[1]]),A.push(m)}return A}var d0=V(G());var Vt=` /9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUA AAABAAAARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQu bmV0IDQuMi4xMwAA/9sAQwAGBAUGBQQGBgUGBwcGCAoQCgoJCQoUDg8MEBcUGBgXFBYWGh0lHxob diff --git a/dist/tfjs.esm.js b/dist/tfjs.esm.js index 422d8701..43b0458d 100644 --- a/dist/tfjs.esm.js +++ b/dist/tfjs.esm.js @@ -4,57 +4,57 @@ author: ' */ -var q4=Object.create;var lw=Object.defineProperty;var j4=Object.getOwnPropertyDescriptor;var X4=Object.getOwnPropertyNames;var Y4=Object.getPrototypeOf,Q4=Object.prototype.hasOwnProperty;var jt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)lw(r,t,{get:e[t],enumerable:!0})},Z4=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of X4(e))!Q4.call(r,n)&&n!==t&&lw(r,n,{get:()=>e[n],enumerable:!(o=j4(e,n))||o.enumerable});return r};var Kp=(r,e,t)=>(t=r!=null?q4(Y4(r)):{},Z4(e||!r||!r.__esModule?lw(t,"default",{value:r,enumerable:!0}):t,r));var _k=jt((Lme,Tk)=>{Tk.exports=Tt;var Yo=null;try{Yo=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function Tt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}Tt.prototype.__isLong__;Object.defineProperty(Tt.prototype,"__isLong__",{value:!0});function jr(r){return(r&&r.__isLong__)===!0}Tt.isLong=jr;var yk={},bk={};function zu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=bk[r],o)?o:(t=_t(r,(r|0)<0?-1:0,!0),n&&(bk[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=yk[r],o)?o:(t=_t(r,r<0?-1:0,!1),n&&(yk[r]=t),t))}Tt.fromInt=zu;function Qo(r,e){if(isNaN(r))return e?Bu:Zo;if(e){if(r<0)return Bu;if(r>=Ik)return Nk}else{if(r<=-wk)return qr;if(r+1>=wk)return kk}return r<0?Qo(-r,e).neg():_t(r%ol|0,r/ol|0,e)}Tt.fromNumber=Qo;function _t(r,e,t){return new Tt(r,e,t)}Tt.fromBits=_t;var ud=Math.pow;function Iw(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return Zo;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return Iw(r.substring(1),e,t).neg();for(var n=Qo(ud(t,8)),s=Zo,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*ol+(this.low>>>0):this.high*ol+(this.low>>>0)};de.toString=function(e){if(e=e||10,e<2||36>>0,l=u.toString(e);if(a=p,a.isZero())return l+i;for(;l.length<6;)l="0"+l;i=""+l+i}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(qr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return jr(e)||(e=Ws(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(jr(e)||(e=Ws(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(qr)?qr:this.not().add(rl)};de.neg=de.negate;de.add=function(e){jr(e)||(e=Ws(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,l=0,c=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,c+=m>>>16,m&=65535,c+=o+i,l+=c>>>16,c&=65535,l+=t+a,l&=65535,_t(m<<16|d,l<<16|c,this.unsigned)};de.subtract=function(e){return jr(e)||(e=Ws(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return Zo;if(jr(e)||(e=Ws(e)),Yo){var t=Yo.mul(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}if(e.isZero())return Zo;if(this.eq(qr))return e.isOdd()?qr:Zo;if(e.eq(qr))return this.isOdd()?qr:Zo;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(Sk)&&e.lt(Sk))return Qo(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,l=e.low&65535,c=0,m=0,d=0,f=0;return f+=a*l,d+=f>>>16,f&=65535,d+=s*l,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*l,c+=m>>>16,m&=65535,m+=s*u,c+=m>>>16,m&=65535,m+=a*p,c+=m>>>16,m&=65535,c+=o*l+n*u+s*p+a*i,c&=65535,_t(d<<16|f,c<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(jr(e)||(e=Ws(e)),e.isZero())throw Error("division by zero");if(Yo){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?Yo.div_u:Yo.div_s)(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Bu:Zo;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Bu;if(e.gt(this.shru(1)))return vk;s=Bu}else{if(this.eq(qr)){if(e.eq(rl)||e.eq(Sw))return qr;if(e.eq(qr))return rl;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(Zo)?e.isNegative()?rl:Sw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(qr))return this.unsigned?Bu:Zo;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=Zo}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:ud(2,i-48),u=Qo(o),l=u.mul(e);l.isNegative()||l.gt(n);)o-=p,u=Qo(o,this.unsigned),l=u.mul(e);u.isZero()&&(u=rl),s=s.add(u),n=n.sub(l)}return s};de.div=de.divide;de.modulo=function(e){if(jr(e)||(e=Ws(e)),Yo){var t=(this.unsigned?Yo.rem_u:Yo.rem_s)(this.low,this.high,e.low,e.high);return _t(t,Yo.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return _t(~this.low,~this.high,this.unsigned)};de.and=function(e){return jr(e)||(e=Ws(e)),_t(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return jr(e)||(e=Ws(e)),_t(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return jr(e)||(e=Ws(e)),_t(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return jr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?_t(this.low<>>32-e,this.unsigned):_t(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):_t(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(jr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return _t(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?_t(t,0,this.unsigned):_t(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?_t(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:_t(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};de.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};Tt.fromBytes=function(e,t,o){return o?Tt.fromBytesLE(e,t):Tt.fromBytesBE(e,t)};Tt.fromBytesLE=function(e,t){return new Tt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};Tt.fromBytesBE=function(e,t){return new Tt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var f1=jt(()=>{});var h1=jt(()=>{});var W2=jt((V2,tS)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var l=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=l-(p.c=l|0)},p.c=1,p.s0=u(" "),p.s1=u(" "),p.s2=u(" "),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),l=p&&p.state,c=u.next;return c.int32=function(){return u.next()*4294967296|0},c.double=function(){return c()+(c()*2097152|0)*11102230246251565e-32},c.quick=c,l&&(typeof l=="object"&&n(l,u),c.state=function(){return n(u,{})}),c}function a(){var i=4022871197,p=function(u){u=String(u);for(var l=0;l>>0,c-=i,c*=i,i=c>>>0,c-=i,i+=c*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(V2,typeof tS=="object"&&tS,typeof define=="function"&&define)});var G2=jt((U2,rS)=>{(function(r,e,t){function o(a){var i=this,p="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var l=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^l^l>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u=="object"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(U2,typeof rS=="object"&&rS,typeof define=="function"&&define)});var K2=jt((H2,oS)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var l=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(l^l<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u=="object"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(H2,typeof oS=="object"&&oS,typeof define=="function"&&define)});var j2=jt((q2,nS)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,l=i.i,c,m,d;return c=u[l],c^=c>>>7,m=c^c<<24,c=u[l+1&7],m^=c^c>>>10,c=u[l+3&7],m^=c^c>>>3,c=u[l+4&7],m^=c^c<<7,c=u[l+7&7],c=c^c<<13,m^=c^c<<9,u[l]=m,i.i=l+1&7,m};function p(u,l){var c,m,d=[];if(l===(l|0))m=d[0]=l;else for(l=""+l,c=0;c0;--c)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(u.x&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(q2,typeof nS=="object"&&nS,typeof define=="function"&&define)});var Y2=jt((X2,sS)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,l=i.X,c=i.i,m,d;return i.w=u=u+1640531527|0,d=l[c+34&127],m=l[c=c+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=l[c]=d^m,i.i=c,d+(u^u>>>16)|0};function p(u,l){var c,m,d,f,h,g=[],x=128;for(l===(l|0)?(m=l,l=null):(l=l+"\0",m=0,x=Math.max(x,l.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,c=g[f&127]^=m+h,d=c==0?d+1:0);for(d>=128&&(g[(l&&l.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],c=g[d=d+1&127],m^=m<<13,c^=c<<17,m^=m>>>15,c^=c>>>12,g[d]=m^c;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,l=function(){return(p.next()>>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(u.X&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(X2,typeof sS=="object"&&sS,typeof define=="function"&&define)});var Z2=jt((Q2,aS)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var l=i.b,c=i.c,m=i.d,d=i.a;return l=l<<25^l>>>7^c,c=c-m|0,m=m<<24^m>>>8^d,d=d-l|0,i.b=l=l<<20^l>>>12^c,i.c=c=c-m|0,i.d=m<<16^c>>>16^d,i.a=d-l|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return l.double=function(){do var c=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(c+m)/(1<<21);while(d===0);return d},l.int32=p.next,l.quick=l,u&&(typeof u=="object"&&n(u,p),l.state=function(){return n(p,{})}),l}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(Q2,typeof aS=="object"&&aS,typeof define=="function"&&define)});var J2=jt(()=>{});var tN=jt((eN,qd)=>{(function(r,e,t){var o=256,n=6,s=52,a="random",i=t.pow(o,n),p=t.pow(2,s),u=p*2,l=o-1,c;function m(w,S,k){var T=[];S=S==!0?{entropy:!0}:S||{};var E=g(h(S.entropy?[w,b(e)]:w==null?x():w,3),T),R=new d(T),D=function(){for(var F=R.g(n),O=i,M=0;F=u;)F/=2,O/=2,M>>>=1;return(F+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(F,O,M,L){return L&&(L.S&&f(L,R),F.state=function(){return f(R,{})}),M?(t[a]=F,O):F})(D,E,"global"in S?S.global:this==t,S.state)}function d(w){var S,k=w.length,T=this,E=0,R=T.i=T.j=0,D=T.S=[];for(k||(w=[k++]);E{var Q6=W2(),Z6=G2(),J6=K2(),ej=j2(),tj=Y2(),rj=Z2(),Zu=tN();Zu.alea=Q6;Zu.xor128=Z6;Zu.xorwow=J6;Zu.xorshift7=ej;Zu.xor4096=tj;Zu.tychei=rj;rN.exports=Zu});var ev=jt(()=>{});var tv=jt(()=>{});var Iz=jt(()=>{});var vz=jt(()=>{});var kz=jt(()=>{});var Nz=jt((Jg,ov)=>{var rv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};function t(){return oe.buffer!=Ke&&Et(oe.buffer),mt}function o(){return oe.buffer!=Ke&&Et(oe.buffer),ut}function n(){return oe.buffer!=Ke&&Et(oe.buffer),gt}function s(){return oe.buffer!=Ke&&Et(oe.buffer),Ur}function a(){return oe.buffer!=Ke&&Et(oe.buffer),Bt}function i(){return oe.buffer!=Ke&&Et(oe.buffer),io}function p(){return oe.buffer!=Ke&&Et(oe.buffer),sr}var u=typeof e!="undefined"?e:{},l,c;u.ready=new Promise(function(P,V){l=P,c=V});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var d=Object.assign({},u),f=[],h="./this.program",g=(P,V)=>{throw V},x=typeof window=="object",b=typeof importScripts=="function",w=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",S=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function T(P){return u.locateFile?u.locateFile(P,k):k+P}var E,R,D,F;function O(P){if(P instanceof Du)return;j("exiting due to exception: "+P)}if(w){var M=ev(),L=tv();b?k=L.dirname(k)+"/":k=__dirname+"/",E=(V,pe)=>(V=zp(V)?new URL(V):L.normalize(V),M.readFileSync(V,pe?void 0:"utf8")),D=V=>{var pe=E(V,!0);return pe.buffer||(pe=new Uint8Array(pe)),pe},R=(V,pe,$e)=>{V=zp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):pe(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(V){if(!(V instanceof Du))throw V}),process.on("unhandledRejection",function(V){throw V}),g=(V,pe)=>{if(cn())throw process.exitCode=V,pe;O(pe),process.exit(V)},u.inspect=function(){return"[Emscripten Module object]"};let P;try{P=Iz()}catch(V){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),V}global.Worker=P.Worker}else(x||b)&&(b?k=self.location.href:typeof document!="undefined"&&document.currentScript&&(k=document.currentScript.src),typeof r!="undefined"&&r&&(k=r),k.indexOf("blob:")!==0?k=k.substr(0,k.replace(/[?#].*/,"").lastIndexOf("/")+1):k="",w||(E=P=>{var V=new XMLHttpRequest;return V.open("GET",P,!1),V.send(null),V.responseText},b&&(D=P=>{var V=new XMLHttpRequest;return V.open("GET",P,!1),V.responseType="arraybuffer",V.send(null),new Uint8Array(V.response)}),R=(P,V,pe)=>{var $e=new XMLHttpRequest;$e.open("GET",P,!0),$e.responseType="arraybuffer",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}pe()},$e.onerror=pe,$e.send(null)}),F=P=>document.title=P);w&&typeof performance=="undefined"&&(global.performance=vz().performance);var B=console.log.bind(console),z=console.warn.bind(console);w&&(B=P=>M.writeSync(1,P+` -`),z=P=>M.writeSync(2,P+` -`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!="object"&&Ru("no native wasm support detected");var oe,ue,me=!1,be;function _e(P,V){P||Ru(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(P,V,pe){V>>>=0;for(var $e=V+pe,Be=V;P[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&P.buffer&&ve)return ve.decode(P.buffer instanceof SharedArrayBuffer?P.slice(V,Be):P.subarray(V,Be));for(var Le="";V>10,56320|co&1023)}}return Le}function Pe(P,V){return P>>>=0,P?Fe(o(),P,V):""}function at(P,V,pe,$e){if(pe>>>=0,!($e>0))return 0;for(var Be=pe,Le=pe+$e-1,ge=0;ge=55296&&Ne<=57343){var Ot=P.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ot&1023}if(Ne<=127){if(pe>=Le)break;V[pe++>>>0]=Ne}else if(Ne<=2047){if(pe+1>=Le)break;V[pe++>>>0]=192|Ne>>6,V[pe++>>>0]=128|Ne&63}else if(Ne<=65535){if(pe+2>=Le)break;V[pe++>>>0]=224|Ne>>12,V[pe++>>>0]=128|Ne>>6&63,V[pe++>>>0]=128|Ne&63}else{if(pe+3>=Le)break;V[pe++>>>0]=240|Ne>>18,V[pe++>>>0]=128|Ne>>12&63,V[pe++>>>0]=128|Ne>>6&63,V[pe++>>>0]=128|Ne&63}}return V[pe>>>0]=0,pe-Be}function ct(P,V,pe){return at(P,o(),V,pe)}var Ke,mt,ut,gt,xt,Ur,Bt,io,sr;S&&(Ke=u.buffer);function Et(P){Ke=P,u.HEAP8=mt=new Int8Array(P),u.HEAP16=gt=new Int16Array(P),u.HEAP32=Ur=new Int32Array(P),u.HEAPU8=ut=new Uint8Array(P),u.HEAPU16=xt=new Uint16Array(P),u.HEAPU32=Bt=new Uint32Array(P),u.HEAPF32=io=new Float32Array(P),u.HEAPF64=sr=new Float64Array(P)}var ar=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,Ke=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:ar/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j("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"),w&&j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");oe&&(Ke=oe.buffer),ar=Ke.byteLength,Et(Ke);var ir,uo=[],po=[],xr=[],ja=!1;function cn(){return ee}function ta(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)lc(u.preRun.shift());dc(uo)}function Zt(){ja=!0,!S&&dc(po)}function Xa(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)Zv(u.postRun.shift());dc(xr)}}function lc(P){uo.unshift(P)}function cc(P){po.unshift(P)}function Zv(P){xr.unshift(P)}var Pi=0,Bp=null,Ya=null;function Ay(P){Pi++,u.monitorRunDependencies&&u.monitorRunDependencies(Pi)}function Rm(P){if(Pi--,u.monitorRunDependencies&&u.monitorRunDependencies(Pi),Pi==0&&(Bp!==null&&(clearInterval(Bp),Bp=null),Ya)){var V=Ya;Ya=null,V()}}function Ru(P){u.onAbort&&u.onAbort(P),P="Aborted("+P+")",j(P),me=!0,be=1,P+=". Build with -sASSERTIONS for more info.";var V=new WebAssembly.RuntimeError(P);throw c(V),V}var Fy="data:application/octet-stream;base64,";function Dm(P){return P.startsWith(Fy)}function zp(P){return P.startsWith("file://")}var yr;yr="tfjs-backend-wasm-threaded-simd.wasm",Dm(yr)||(yr=T(yr));function Am(P){try{if(P==yr&&ne)return new Uint8Array(ne);if(D)return D(P);throw"both async and sync fetching of the wasm failed"}catch(V){Ru(V)}}function Py(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!zp(yr))return fetch(yr,{credentials:"same-origin"}).then(function(P){if(!P.ok)throw"failed to load wasm binary file at '"+yr+"'";return P.arrayBuffer()}).catch(function(){return Am(yr)});if(R)return new Promise(function(P,V){R(yr,function(pe){P(new Uint8Array(pe))},V)})}return Promise.resolve().then(function(){return Am(yr)})}function Oy(){var P={env:Km,wasi_snapshot_preview1:Km};function V(ge,Ne){var Ot=ge.exports;if(u.asm=Ot,Hy(u.asm._emscripten_tls_init),ir=u.asm.__indirect_function_table,cc(u.asm.__wasm_call_ctors),ue=Ne,!S){var co=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Za){Me.loadWasmModuleToWorker(Za,function(){--co||Rm("wasm-instantiate")})})}}S||Ay("wasm-instantiate");function pe(ge){V(ge.instance,ge.module)}function $e(ge){return Py().then(function(Ne){return WebAssembly.instantiate(Ne,P)}).then(function(Ne){return Ne}).then(ge,function(Ne){j("failed to asynchronously prepare wasm: "+Ne),Ru(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Dm(yr)&&!zp(yr)&&!w&&typeof fetch=="function"?fetch(yr,{credentials:"same-origin"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,P);return Ne.then(pe,function(Ot){return j("wasm streaming compile failed: "+Ot),j("falling back to ArrayBuffer instantiation"),$e(pe)})}):$e(pe)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(P,V);return Le}catch(ge){j("Module.instantiateWasm callback failed with error: "+ge),c(ge)}return Be().catch(c),{}}var Jv,ek,Fm={};function Du(P){this.name="ExitStatus",this.message="Program terminated with exit("+P+")",this.status=P}function My(P){var V=Me.pthreads[P];delete Me.pthreads[P],V.terminate(),iw(P),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function Ly(P){var V=Me.pthreads[P];V.postMessage({cmd:"cancel"})}function mc(P){var V=Me.pthreads[P];_e(V),Me.returnWorkerToPool(V)}function By(P){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[P.pthread_ptr]=V,V.pthread_ptr=P.pthread_ptr;var pe={cmd:"run",start_routine:P.startRoutine,arg:P.arg,pthread_ptr:P.pthread_ptr};return V.runPthread=()=>{w&&V.ref(),V.postMessage(pe,P.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var Pm={varargs:void 0,get:function(){Pm.varargs+=4;var P=s()[Pm.varargs-4>>>2];return P},getStr:function(P){var V=Pe(P);return V}};function Om(P){if(S)return Oi(1,1,P);be=P,cn()||(Me.terminateAllThreads(),u.onExit&&u.onExit(P),me=!0),g(P,new Du(P))}function zy(P,V){if(be=P,!V&&S)throw Lm(P),"unwind";Om(P)}var Mm=zy;function Vy(P){if(P instanceof Du||P=="unwind")return be;g(1,P)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var P=8;P--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(P){be=P},terminateAllThreads:function(){for(var P of Object.values(Me.pthreads))Me.returnWorkerToPool(P);for(var P of Me.unusedWorkers)P.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(P){var V=P.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(P),Me.runningWorkers.splice(Me.runningWorkers.indexOf(P),1),P.pthread_ptr=0,w&&P.unref(),iw(V)},receiveObjectTransfer:function(P){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(P=>P())},loadWasmModuleToWorker:function(P,V){P.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(P.pthread_ptr&&(Me.currentProxiedOperationCallerThread=P.pthread_ptr),ge.targetThread&&ge.targetThread!=Zm()){var Ot=Me.pthreads[ge.targetThread];Ot?Ot.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ge.targetThread+", but that thread no longer exists!"),Me.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?fc(ge.queue):Ne==="spawnThread"?By(ge):Ne==="cleanupThread"?mc(ge.thread):Ne==="killThread"?My(ge.thread):Ne==="cancelThread"?Ly(ge.thread):Ne==="loaded"?(P.loaded=!0,w&&P.unref(),V&&V(P),P.runPthread&&P.runPthread()):Ne==="print"?U("Thread "+ge.threadId+": "+ge.text):Ne==="printErr"?j("Thread "+ge.threadId+": "+ge.text):Ne==="alert"?alert("Thread "+ge.threadId+": "+ge.text):ge.target==="setimmediate"?P.postMessage(ge):Ne==="callHandler"?u[ge.handler](...ge.args):Ne&&j("worker sent an unknown command "+Ne),Me.currentProxiedOperationCallerThread=void 0},P.onerror=Le=>{var ge="worker sent an error!";throw j(ge+" "+Le.filename+":"+Le.lineno+": "+Le.message),Le},w&&(P.on("message",function(Le){P.onmessage({data:Le})}),P.on("error",function(Le){P.onerror(Le)}),P.on("detachedExit",function(){}));var pe=[],$e=["onExit","onAbort","print","printErr"];for(var Be of $e)u.hasOwnProperty(Be)&&pe.push(Be);P.postMessage({cmd:"load",handlers:pe,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ue})},allocateUnusedWorker:function(){var P,V=T("tfjs-backend-wasm-threaded-simd.worker.js");P=new Worker(V),Me.unusedWorkers.push(P)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function dc(P){for(;P.length>0;)P.shift()(u)}function Wy(){var P=Zm(),V=s()[P+52>>>2],pe=s()[P+56>>>2],$e=V-pe;ak(V,$e),Jm(V)}u.establishStackSpace=Wy;function Lm(P){if(S)return Oi(2,0,P);try{Mm(P)}catch(V){Vy(V)}}var Vp=[];function Uy(P){var V=Vp[P];return V||(P>=Vp.length&&(Vp.length=P+1),Vp[P]=V=ir.get(P)),V}function Gy(P,V){var pe=Uy(P)(V);cn()?Me.setExitStatus(pe):sk(pe)}u.invokeEntryPoint=Gy;function Hy(P){Me.tlsInitFunctions.push(P)}function Ky(P){rk(P,!b,1,!x),Me.threadInitTLS()}function qy(P){S?postMessage({cmd:"cleanupThread",thread:P}):mc(P)}function Bm(P,V,pe,$e){return S?Oi(3,1,P,V,pe,$e):zm(P,V,pe,$e)}function zm(P,V,pe,$e){if(typeof SharedArrayBuffer=="undefined")return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Bm(P,V,pe,$e);if(Le)return Le;var ge={startRoutine:pe,pthread_ptr:P,arg:$e,transferList:Be};return S?(ge.cmd="spawnThread",postMessage(ge,Be),0):By(ge)}function jy(){return 65536}var Xy=!0;function Yy(){return Xy}function fc(P){Atomics.store(s(),P>>2,1),Zm()&&nk(P),Atomics.compareExchange(s(),P>>2,1,0)}u.executeNotifiedProxyingQueue=fc;function Qy(P,V,pe,$e){if(P==V)setTimeout(()=>fc($e));else if(S)postMessage({targetThread:P,cmd:"processProxyingQueue",queue:$e});else{var Be=Me.pthreads[P];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:$e})}return 1}function Zy(P,V,pe){return-1}function Jy(){Ru("")}function Au(P){Au.shown||(Au.shown={}),Au.shown[P]||(Au.shown[P]=1,w&&(P="warning: "+P),j(P))}function eb(){w||b||Au("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function tb(){return Date.now()}function Vm(){return 4294901760}function rb(){return Vm()}var hc;w?hc=()=>{var P=process.hrtime();return P[0]*1e3+P[1]/1e6}:hc=()=>performance.timeOrigin+performance.now();function ob(P,V,pe){o().copyWithin(P>>>0,V>>>0,V+pe>>>0)}function nb(){return w?kz().cpus().length:navigator.hardwareConcurrency}function sb(P){var V=uw(),pe=P();return Jm(V),pe}function Oi(P,V){var pe=arguments.length-2,$e=arguments;return sb(()=>{for(var Be=pe,Le=ed(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ot}return ok(P,Be,Le,V)})}var gc=[];function ab(P,V,pe){gc.length=V;for(var $e=pe>>3,Be=0;Be>>0];var Le=P<0,ge=Le?Fm[-P-1]:hb[P];return ge.apply(null,gc)}function ib(P){try{return oe.grow(P-Ke.byteLength+65535>>>16),Et(oe.buffer),1}catch(V){}}function ub(P){var V=o().length;if(P=P>>>0,P<=V)return!1;var pe=Vm();if(P>pe)return!1;let $e=(Ot,co)=>Ot+(co-Ot%co)%co;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,P+100663296);var ge=Math.min(pe,$e(Math.max(P,Le),65536)),Ne=ib(ge);if(Ne)return!0}return!1}function pb(){throw"unwind"}function Wm(P){return S?Oi(4,1,P):52}function Um(P,V,pe,$e,Be){return S?Oi(5,1,P,V,pe,$e,Be):70}var lb=[null,[],[]];function cb(P,V){var pe=lb[P];V===0||V===10?((P===1?U:j)(Fe(pe,0)),pe.length=0):pe.push(V)}function Gm(P,V,pe,$e){if(S)return Oi(6,1,P,V,pe,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ot=0;Ot>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Hm(P){var V=u["_"+P];return V}function mb(P,V){t().set(P,V>>>0)}function db(P,V,pe,$e,Be){var Le={string:Gr=>{var Hp=0;if(Gr!=null&&Gr!==0){var pk=(Gr.length<<2)+1;Hp=ed(pk),ct(Gr,Hp,pk)}return Hp},array:Gr=>{var Hp=ed(Gr.length);return mb(Gr,Hp),Hp}};function ge(Gr){return V==="string"?Pe(Gr):V==="boolean"?!!Gr:Gr}var Ne=Hm(P),Ot=[],co=0;if($e)for(var Za=0;Za<$e.length;Za++){var uk=Le[pe[Za]];uk?(co===0&&(co=uw()),Ot[Za]=uk($e[Za])):Ot[Za]=$e[Za]}var pw=Ne.apply(null,Ot);function K4(Gr){return co!==0&&Jm(co),ge(Gr)}return pw=K4(pw),pw}function fb(P,V,pe,$e){pe=pe||[];var Be=pe.every(ge=>ge==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!$e?Hm(P):function(){return db(P,V,pe,arguments,$e)}}Me.init();var hb=[null,Om,Lm,Bm,Wm,Um,Gm],Km={__emscripten_init_main_thread_js:Ky,__emscripten_thread_cleanup:qy,__pthread_create_js:zm,_emscripten_default_pthread_stack_size:jy,_emscripten_get_now_is_monotonic:Yy,_emscripten_notify_task_queue:Qy,_emscripten_set_offscreencanvas_size:Zy,abort:Jy,emscripten_check_blocking_allowed:eb,emscripten_date_now:tb,emscripten_get_heap_max:rb,emscripten_get_now:hc,emscripten_memcpy_big:ob,emscripten_num_logical_cores:nb,emscripten_receive_on_main_thread_js:ab,emscripten_resize_heap:ub,emscripten_unwind_to_js_event_loop:pb,exit:Mm,fd_close:Wm,fd_seek:Um,fd_write:Gm,memory:oe||u.wasmMemory},tk=Oy(),gb=u.___wasm_call_ctors=function(){return(gb=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},xb=u._init=function(){return(xb=u._init=u.asm.init).apply(null,arguments)},yb=u._init_with_threads_count=function(){return(yb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},bb=u._get_threads_count=function(){return(bb=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},Cb=u._register_tensor=function(){return(Cb=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},wb=u._dispose_data=function(){return(wb=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},Sb=u._dispose=function(){return(Sb=u._dispose=u.asm.dispose).apply(null,arguments)},Ib=u._Abs=function(){return(Ib=u._Abs=u.asm.Abs).apply(null,arguments)},vb=u._Acos=function(){return(vb=u._Acos=u.asm.Acos).apply(null,arguments)},kb=u._Acosh=function(){return(kb=u._Acosh=u.asm.Acosh).apply(null,arguments)},Nb=u._Add=function(){return(Nb=u._Add=u.asm.Add).apply(null,arguments)},Tb=u._AddN=function(){return(Tb=u._AddN=u.asm.AddN).apply(null,arguments)},_b=u._All=function(){return(_b=u._All=u.asm.All).apply(null,arguments)},Eb=u._Any=function(){return(Eb=u._Any=u.asm.Any).apply(null,arguments)},$b=u._ArgMax=function(){return($b=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},Rb=u._ArgMin=function(){return(Rb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},Db=u._Asin=function(){return(Db=u._Asin=u.asm.Asin).apply(null,arguments)},Ab=u._Asinh=function(){return(Ab=u._Asinh=u.asm.Asinh).apply(null,arguments)},Fb=u._Atan=function(){return(Fb=u._Atan=u.asm.Atan).apply(null,arguments)},Pb=u._Atan2=function(){return(Pb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ob=u._Atanh=function(){return(Ob=u._Atanh=u.asm.Atanh).apply(null,arguments)},Mb=u._AvgPool=function(){return(Mb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},Lb=u._AvgPool3D=function(){return(Lb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Bb=u._AvgPool3DGrad=function(){return(Bb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},zb=u._AvgPoolGrad=function(){return(zb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},Vb=u._BatchMatMul=function(){return(Vb=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Wb=u._Bincount=function(){return(Wb=u._Bincount=u.asm.Bincount).apply(null,arguments)},Ub=u._BitwiseAnd=function(){return(Ub=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Gb=u._Ceil=function(){return(Gb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Hb=u._ClipByValue=function(){return(Hb=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Kb=u._Conv2D=function(){return(Kb=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},qb=u._Conv2DBackpropInput=function(){return(qb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},jb=u._Conv3D=function(){return(jb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Xb=u._Conv3DBackpropFilterV2=function(){return(Xb=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Yb=u._Conv3DBackpropInputV2=function(){return(Yb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Qb=u._Cos=function(){return(Qb=u._Cos=u.asm.Cos).apply(null,arguments)},Zb=u._Cosh=function(){return(Zb=u._Cosh=u.asm.Cosh).apply(null,arguments)},Jb=u._CropAndResize=function(){return(Jb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},eC=u._Cumprod=function(){return(eC=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},tC=u._Cumsum=function(){return(tC=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},rC=u._DenseBincount=function(){return(rC=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},oC=u._DepthToSpace=function(){return(oC=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},nC=u._DepthwiseConv2dNative=function(){return(nC=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},sC=u._Diag=function(){return(sC=u._Diag=u.asm.Diag).apply(null,arguments)},aC=u._Dilation2D=function(){return(aC=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},iC=u._Dilation2DBackpropFilter=function(){return(iC=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},uC=u._Dilation2DBackpropInput=function(){return(uC=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},pC=u._Elu=function(){return(pC=u._Elu=u.asm.Elu).apply(null,arguments)},lC=u._EluGrad=function(){return(lC=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},cC=u._Equal=function(){return(cC=u._Equal=u.asm.Equal).apply(null,arguments)},mC=u._Erf=function(){return(mC=u._Erf=u.asm.Erf).apply(null,arguments)},dC=u._Exp=function(){return(dC=u._Exp=u.asm.Exp).apply(null,arguments)},fC=u._Expm1=function(){return(fC=u._Expm1=u.asm.Expm1).apply(null,arguments)},hC=u._FlipLeftRight=function(){return(hC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},gC=u._Floor=function(){return(gC=u._Floor=u.asm.Floor).apply(null,arguments)},xC=u._FloorDiv=function(){return(xC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},yC=u._FusedBatchNorm=function(){return(yC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},bC=u._FusedConv2D=function(){return(bC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},CC=u._FusedDepthwiseConv2D=function(){return(CC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},wC=u._Gather=function(){return(wC=u._Gather=u.asm.Gather).apply(null,arguments)},SC=u._GatherNd=function(){return(SC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},IC=u._Greater=function(){return(IC=u._Greater=u.asm.Greater).apply(null,arguments)},vC=u._GreaterEqual=function(){return(vC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},kC=u._IsFinite=function(){return(kC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},NC=u._IsInf=function(){return(NC=u._IsInf=u.asm.IsInf).apply(null,arguments)},TC=u._IsNan=function(){return(TC=u._IsNan=u.asm.IsNan).apply(null,arguments)},_C=u._LRN=function(){return(_C=u._LRN=u.asm.LRN).apply(null,arguments)},EC=u._LRNGrad=function(){return(EC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},$C=u._LeakyRelu=function(){return($C=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},RC=u._Less=function(){return(RC=u._Less=u.asm.Less).apply(null,arguments)},DC=u._LessEqual=function(){return(DC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},AC=u._LinSpace=function(){return(AC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},FC=u._Log=function(){return(FC=u._Log=u.asm.Log).apply(null,arguments)},PC=u._Log1p=function(){return(PC=u._Log1p=u.asm.Log1p).apply(null,arguments)},OC=u._LogicalAnd=function(){return(OC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},MC=u._LogicalNot=function(){return(MC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},LC=u._LogicalOr=function(){return(LC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},BC=u._LogicalXor=function(){return(BC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},zC=u._Max=function(){return(zC=u._Max=u.asm.Max).apply(null,arguments)},VC=u._MaxPool=function(){return(VC=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},WC=u._MaxPool3D=function(){return(WC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},UC=u._MaxPool3DGrad=function(){return(UC=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},GC=u._MaxPoolGrad=function(){return(GC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},HC=u._MaxPoolWithArgmax=function(){return(HC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},KC=u._Maximum=function(){return(KC=u._Maximum=u.asm.Maximum).apply(null,arguments)},qC=u._Mean=function(){return(qC=u._Mean=u.asm.Mean).apply(null,arguments)},jC=u._Min=function(){return(jC=u._Min=u.asm.Min).apply(null,arguments)},XC=u._Minimum=function(){return(XC=u._Minimum=u.asm.Minimum).apply(null,arguments)},YC=u._MirrorPad=function(){return(YC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},QC=u._Mod=function(){return(QC=u._Mod=u.asm.Mod).apply(null,arguments)},ZC=u._Multinomial=function(){return(ZC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},JC=u._Multiply=function(){return(JC=u._Multiply=u.asm.Multiply).apply(null,arguments)},ew=u._Neg=function(){return(ew=u._Neg=u.asm.Neg).apply(null,arguments)},tw=u._NonMaxSuppressionV3=function(){return(tw=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},rw=u._NonMaxSuppressionV4=function(){return(rw=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},qm=u._NonMaxSuppressionV5=function(){return(qm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},jm=u._NotEqual=function(){return(jm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},xc=u._OneHot=function(){return(xc=u._OneHot=u.asm.OneHot).apply(null,arguments)},ow=u._PadV2=function(){return(ow=u._PadV2=u.asm.PadV2).apply(null,arguments)},nw=u._Pow=function(){return(nw=u._Pow=u.asm.Pow).apply(null,arguments)},Wp=u._Prelu=function(){return(Wp=u._Prelu=u.asm.Prelu).apply(null,arguments)},Xm=u._Prod=function(){return(Xm=u._Prod=u.asm.Prod).apply(null,arguments)},Up=u._RealDiv=function(){return(Up=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Gp=u._Reciprocal=function(){return(Gp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},sw=u._Relu=function(){return(sw=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},it=u._ResizeNearestNeighbor=function(){return(it=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},$t=u._ResizeNearestNeighborGrad=function(){return($t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Rt=u._Reverse=function(){return(Rt=u._Reverse=u.asm.Reverse).apply(null,arguments)},Ze=u._RotateWithOffset=function(){return(Ze=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},je=u._Round=function(){return(je=u._Round=u.asm.Round).apply(null,arguments)},Ht=u._Rsqrt=function(){return(Ht=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},lo=u._ScatterNd=function(){return(lo=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Qa=u._SearchSorted=function(){return(Qa=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},Ym=u._SelectV2=function(){return(Ym=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},yc=u._Selu=function(){return(yc=u._Selu=u.asm.Selu).apply(null,arguments)},aw=u._Sigmoid=function(){return(aw=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},wr=u._Sign=function(){return(wr=u._Sign=u.asm.Sign).apply(null,arguments)},Mi=u._Sin=function(){return(Mi=u._Sin=u.asm.Sin).apply(null,arguments)},Qm=u._Sinh=function(){return(Qm=u._Sinh=u.asm.Sinh).apply(null,arguments)},f4=u._Softmax=function(){return(f4=u._Softmax=u.asm.Softmax).apply(null,arguments)},h4=u._Softplus=function(){return(h4=u._Softplus=u.asm.Softplus).apply(null,arguments)},g4=u._SparseFillEmptyRows=function(){return(g4=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},x4=u._SparseReshape=function(){return(x4=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},y4=u._SparseSegmentReduction=function(){return(y4=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},b4=u._SparseToDense=function(){return(b4=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},C4=u._Sqrt=function(){return(C4=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},w4=u._Square=function(){return(w4=u._Square=u.asm.Square).apply(null,arguments)},S4=u._SquaredDifference=function(){return(S4=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},I4=u._Step=function(){return(I4=u._Step=u.asm.Step).apply(null,arguments)},v4=u._StridedSlice=function(){return(v4=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},k4=u._Sub=function(){return(k4=u._Sub=u.asm.Sub).apply(null,arguments)},N4=u._Sum=function(){return(N4=u._Sum=u.asm.Sum).apply(null,arguments)},T4=u._Tan=function(){return(T4=u._Tan=u.asm.Tan).apply(null,arguments)},_4=u._Tanh=function(){return(_4=u._Tanh=u.asm.Tanh).apply(null,arguments)},E4=u._TensorScatterUpdate=function(){return(E4=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},$4=u._Tile=function(){return($4=u._Tile=u.asm.Tile).apply(null,arguments)},R4=u._TopK=function(){return(R4=u._TopK=u.asm.TopK).apply(null,arguments)},D4=u._Transform=function(){return(D4=u._Transform=u.asm.Transform).apply(null,arguments)},A4=u._Transpose=function(){return(A4=u._Transpose=u.asm.Transpose).apply(null,arguments)},F4=u.__FusedMatMul=function(){return(F4=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},P4=u._malloc=function(){return(P4=u._malloc=u.asm.malloc).apply(null,arguments)},O4=u._free=function(){return(O4=u._free=u.asm.free).apply(null,arguments)},M4=u.__emscripten_tls_init=function(){return(M4=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Zm=u._pthread_self=function(){return(Zm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},L4=u.___errno_location=function(){return(L4=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},rk=u.__emscripten_thread_init=function(){return(rk=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},B4=u.__emscripten_thread_crashed=function(){return(B4=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},z4=u._emscripten_main_thread_process_queued_calls=function(){return(z4=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},V4=u._emscripten_main_browser_thread_id=function(){return(V4=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},ok=u._emscripten_run_in_main_runtime_thread_js=function(){return(ok=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},W4=u._emscripten_dispatch_to_thread_=function(){return(W4=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},nk=u.__emscripten_proxy_execute_task_queue=function(){return(nk=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},iw=u.__emscripten_thread_free_data=function(){return(iw=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},sk=u.__emscripten_thread_exit=function(){return(sk=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},ak=u._emscripten_stack_set_limits=function(){return(ak=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},uw=u.stackSave=function(){return(uw=u.stackSave=u.asm.stackSave).apply(null,arguments)},Jm=u.stackRestore=function(){return(Jm=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},ed=u.stackAlloc=function(){return(ed=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},U4=u.dynCall_iijjiiii=function(){return(U4=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},G4=u.dynCall_jiji=function(){return(G4=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=cn,u.wasmMemory=oe,u.cwrap=fb,u.ExitStatus=Du,u.PThread=Me;var td;Ya=function P(){td||ik(),td||(Ya=P)};function ik(P){if(P=P||f,Pi>0)return;if(S){l(u),Zt(),startWorker(u);return}if(ta(),Pi>0)return;function V(){td||(td=!0,u.calledRun=!0,!me&&(Zt(),l(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Xa()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();ik();var rd;m&&(rd={uncaughtException:process.listeners("uncaughtException").filter(function(P){return!m.uncaughtException.indexOf(P)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(P){return!m.unhandledRejection.indexOf(P)>-1})});var od;if(typeof WasmBackendModule!="undefined")od=WasmBackendModule;else if(typeof e!="undefined")od=e;else throw new Error("Could not find wasm module in post.js");if(rd){var H4=od._dispose;od._dispose=function(){H4(),rd.uncaughtException.forEach(function(P){process.removeListener("uncaughtException",P)}),rd.unhandledRejection.forEach(function(P){process.removeListener("unhandledRejection",P)})}}return e.ready}})();typeof Jg=="object"&&typeof ov=="object"?ov.exports=rv:typeof define=="function"&&define.amd?define([],function(){return rv}):typeof Jg=="object"&&(Jg.WasmBackendModuleThreadedSimd=rv)});var _z=jt((EPt,Tz)=>{Tz.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" -");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`});var Ez=jt((ex,sv)=>{var nv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!="undefined"?e:{},o,n;t.ready=new Promise(function(K,ae){o=K,n=ae});var s;typeof process!="undefined"&&process.listeners&&(s={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var a=Object.assign({},t),i=[],p="./this.program",u=(K,ae)=>{throw ae},l=typeof window=="object",c=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",d="";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function w(K){if(K instanceof Bp)return;E("exiting due to exception: "+K)}if(m){var S=ev(),k=tv();c?d=k.dirname(d)+"/":d=__dirname+"/",h=(K,ae)=>(K=ta(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:"utf8")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=ta(K)?new URL(K):k.normalize(K),S.readFile(K,function(it,$t){it?Ee(it):ae($t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Bp))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(ut())throw process.exitCode=K,ae;w(ae),process.exit(K)},t.inspect=function(){return"[Emscripten Module object]"}}else(l||c)&&(c?d=self.location.href:typeof document!="undefined"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf("blob:")!==0?d=d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):d="",h=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.send(null),ae.responseText},c&&(x=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.responseType="arraybuffer",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var it=new XMLHttpRequest;it.open("GET",K,!0),it.responseType="arraybuffer",it.onload=()=>{if(it.status==200||it.status==0&&it.response){ae(it.response);return}Ee()},it.onerror=Ee,it.send(null)},b=K=>document.title=K);var T=t.print||console.log.bind(console),E=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,D;t.wasmBinary&&(D=t.wasmBinary);var F=t.noExitRuntime||!0;typeof WebAssembly!="object"&&xr("no native wasm support detected");var O,M=!1,L;function B(K,ae){K||xr(ae)}var z=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(K,ae,Ee){ae>>>=0;for(var it=ae+Ee,$t=ae;K[$t]&&!($t>=it);)++$t;if($t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,$t));for(var Rt="";ae<$t;){var Ze=K[ae++];if(!(Ze&128)){Rt+=String.fromCharCode(Ze);continue}var je=K[ae++]&63;if((Ze&224)==192){Rt+=String.fromCharCode((Ze&31)<<6|je);continue}var Ht=K[ae++]&63;if((Ze&240)==224?Ze=(Ze&15)<<12|je<<6|Ht:Ze=(Ze&7)<<18|je<<12|Ht<<6|K[ae++]&63,Ze<65536)Rt+=String.fromCharCode(Ze);else{var lo=Ze-65536;Rt+=String.fromCharCode(55296|lo>>10,56320|lo&1023)}}return Rt}function j(K,ae){return K>>>=0,K?U(ne,K,ae):""}function q(K,ae,Ee,it){if(Ee>>>=0,!(it>0))return 0;for(var $t=Ee,Rt=Ee+it-1,Ze=0;Ze=55296&&je<=57343){var Ht=K.charCodeAt(++Ze);je=65536+((je&1023)<<10)|Ht&1023}if(je<=127){if(Ee>=Rt)break;ae[Ee++>>>0]=je}else if(je<=2047){if(Ee+1>=Rt)break;ae[Ee++>>>0]=192|je>>6,ae[Ee++>>>0]=128|je&63}else if(je<=65535){if(Ee+2>=Rt)break;ae[Ee++>>>0]=224|je>>12,ae[Ee++>>>0]=128|je>>6&63,ae[Ee++>>>0]=128|je&63}else{if(Ee+3>=Rt)break;ae[Ee++>>>0]=240|je>>18,ae[Ee++>>>0]=128|je>>12&63,ae[Ee++>>>0]=128|je>>6&63,ae[Ee++>>>0]=128|je&63}}return ae[Ee>>>0]=0,Ee-$t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ue,me,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ue=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=me=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,at=[],ct=[],Ke=[],mt=!1;function ut(){return F}function gt(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Bt(t.preRun.shift());Ya(at)}function xt(){mt=!0,Ya(ct)}function Ur(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)sr(t.postRun.shift());Ya(Ke)}function Bt(K){at.unshift(K)}function io(K){ct.unshift(K)}function sr(K){Ke.unshift(K)}var Et=0,ar=null,ir=null;function uo(K){Et++,t.monitorRunDependencies&&t.monitorRunDependencies(Et)}function po(K){if(Et--,t.monitorRunDependencies&&t.monitorRunDependencies(Et),Et==0&&(ar!==null&&(clearInterval(ar),ar=null),ir)){var ae=ir;ir=null,ae()}}function xr(K){t.onAbort&&t.onAbort(K),K="Aborted("+K+")",E(K),M=!0,L=1,K+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var ja="data:application/octet-stream;base64,";function cn(K){return K.startsWith(ja)}function ta(K){return K.startsWith("file://")}var Zt;Zt="tfjs-backend-wasm.wasm",cn(Zt)||(Zt=f(Zt));function Xa(K){try{if(K==Zt&&D)return new Uint8Array(D);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(ae){xr(ae)}}function lc(){if(!D&&(l||c)){if(typeof fetch=="function"&&!ta(Zt))return fetch(Zt,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Zt+"'";return K.arrayBuffer()}).catch(function(){return Xa(Zt)});if(g)return new Promise(function(K,ae){g(Zt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Xa(Zt)})}function cc(){var K={env:mc,wasi_snapshot_preview1:mc};function ae(Ze,je){var Ht=Ze.exports;t.asm=Ht,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,io(t.asm.__wasm_call_ctors),po("wasm-instantiate")}uo("wasm-instantiate");function Ee(Ze){ae(Ze.instance)}function it(Ze){return lc().then(function(je){return WebAssembly.instantiate(je,K)}).then(function(je){return je}).then(Ze,function(je){E("failed to asynchronously prepare wasm: "+je),xr(je)})}function $t(){return!D&&typeof WebAssembly.instantiateStreaming=="function"&&!cn(Zt)&&!ta(Zt)&&!m&&typeof fetch=="function"?fetch(Zt,{credentials:"same-origin"}).then(function(Ze){var je=WebAssembly.instantiateStreaming(Ze,K);return je.then(Ee,function(Ht){return E("wasm streaming compile failed: "+Ht),E("falling back to ArrayBuffer instantiation"),it(Ee)})}):it(Ee)}if(t.instantiateWasm)try{var Rt=t.instantiateWasm(K,ae);return Rt}catch(Ze){E("Module.instantiateWasm callback failed with error: "+Ze),n(Ze)}return $t().catch(n),{}}var Zv,Pi;function Bp(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ya(K){for(;K.length>0;)K.shift()(t)}function Ay(){xr("")}function Rm(){return 4294901760}function Ru(){return Rm()}function Fy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Dm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function zp(K){var ae=ne.length;K=K>>>0;var Ee=Rm();if(K>Ee)return!1;let it=(Ht,lo)=>Ht+(lo-Ht%lo)%lo;for(var $t=1;$t<=4;$t*=2){var Rt=ae*(1+.2/$t);Rt=Math.min(Rt,K+100663296);var Ze=Math.min(Ee,it(Math.max(K,Rt),65536)),je=Dm(Ze);if(je)return!0}return!1}var yr={varargs:void 0,get:function(){yr.varargs+=4;var K=ue[yr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Am(K){return 52}function Py(K,ae,Ee,it,$t){return 70}var Oy=[null,[],[]];function Jv(K,ae){var Ee=Oy[K];ae===0||ae===10?((K===1?T:E)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function ek(K,ae,Ee,it){for(var $t=0,Rt=0;Rt>>2],je=me[ae+4>>>2];ae+=8;for(var Ht=0;Ht>>0]);$t+=je}return me[it>>>2]=$t,0}function Fm(K){var ae=t["_"+K];return ae}function Du(K,ae){re.set(K,ae>>>0)}function My(K,ae,Ee,it,$t){var Rt={string:wr=>{var Mi=0;if(wr!=null&&wr!==0){var Qm=(wr.length<<2)+1;Mi=xc(Qm),Y(wr,Mi,Qm)}return Mi},array:wr=>{var Mi=xc(wr.length);return Du(wr,Mi),Mi}};function Ze(wr){return ae==="string"?j(wr):ae==="boolean"?!!wr:wr}var je=Fm(K),Ht=[],lo=0;if(it)for(var Qa=0;QaZe==="number"||Ze==="boolean"),Rt=ae!=="string";return Rt&&$t&&!it?Fm(K):function(){return My(K,ae,Ee,arguments,it)}}var mc={abort:Ay,emscripten_get_heap_max:Ru,emscripten_memcpy_big:Fy,emscripten_resize_heap:zp,fd_close:Am,fd_seek:Py,fd_write:ek},By=cc(),Pm=t.___wasm_call_ctors=function(){return(Pm=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Om=t._init=function(){return(Om=t._init=t.asm.init).apply(null,arguments)},zy=t._init_with_threads_count=function(){return(zy=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Mm=t._get_threads_count=function(){return(Mm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},Vy=t._register_tensor=function(){return(Vy=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},dc=t._dispose=function(){return(dc=t._dispose=t.asm.dispose).apply(null,arguments)},Wy=t._Abs=function(){return(Wy=t._Abs=t.asm.Abs).apply(null,arguments)},Lm=t._Acos=function(){return(Lm=t._Acos=t.asm.Acos).apply(null,arguments)},Vp=t._Acosh=function(){return(Vp=t._Acosh=t.asm.Acosh).apply(null,arguments)},Uy=t._Add=function(){return(Uy=t._Add=t.asm.Add).apply(null,arguments)},Gy=t._AddN=function(){return(Gy=t._AddN=t.asm.AddN).apply(null,arguments)},Hy=t._All=function(){return(Hy=t._All=t.asm.All).apply(null,arguments)},Ky=t._Any=function(){return(Ky=t._Any=t.asm.Any).apply(null,arguments)},qy=t._ArgMax=function(){return(qy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Bm=t._ArgMin=function(){return(Bm=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},zm=t._Asin=function(){return(zm=t._Asin=t.asm.Asin).apply(null,arguments)},jy=t._Asinh=function(){return(jy=t._Asinh=t.asm.Asinh).apply(null,arguments)},Xy=t._Atan=function(){return(Xy=t._Atan=t.asm.Atan).apply(null,arguments)},Yy=t._Atan2=function(){return(Yy=t._Atan2=t.asm.Atan2).apply(null,arguments)},fc=t._Atanh=function(){return(fc=t._Atanh=t.asm.Atanh).apply(null,arguments)},Qy=t._AvgPool=function(){return(Qy=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},Zy=t._AvgPool3D=function(){return(Zy=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},Jy=t._AvgPool3DGrad=function(){return(Jy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Au=t._AvgPoolGrad=function(){return(Au=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},eb=t._BatchMatMul=function(){return(eb=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},tb=t._Bincount=function(){return(tb=t._Bincount=t.asm.Bincount).apply(null,arguments)},Vm=t._BitwiseAnd=function(){return(Vm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},rb=t._Ceil=function(){return(rb=t._Ceil=t.asm.Ceil).apply(null,arguments)},hc=t._ClipByValue=function(){return(hc=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},ob=t._Conv2D=function(){return(ob=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},nb=t._Conv2DBackpropInput=function(){return(nb=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},sb=t._Conv3D=function(){return(sb=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Oi=t._Conv3DBackpropFilterV2=function(){return(Oi=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},gc=t._Conv3DBackpropInputV2=function(){return(gc=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},ab=t._Cos=function(){return(ab=t._Cos=t.asm.Cos).apply(null,arguments)},ib=t._Cosh=function(){return(ib=t._Cosh=t.asm.Cosh).apply(null,arguments)},ub=t._CropAndResize=function(){return(ub=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},pb=t._Cumprod=function(){return(pb=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Wm=t._Cumsum=function(){return(Wm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Um=t._DenseBincount=function(){return(Um=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},lb=t._DepthToSpace=function(){return(lb=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},cb=t._DepthwiseConv2dNative=function(){return(cb=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Gm=t._Diag=function(){return(Gm=t._Diag=t.asm.Diag).apply(null,arguments)},Hm=t._Dilation2D=function(){return(Hm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},mb=t._Dilation2DBackpropFilter=function(){return(mb=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},db=t._Dilation2DBackpropInput=function(){return(db=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},fb=t._Elu=function(){return(fb=t._Elu=t.asm.Elu).apply(null,arguments)},hb=t._EluGrad=function(){return(hb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Km=t._Equal=function(){return(Km=t._Equal=t.asm.Equal).apply(null,arguments)},tk=t._Erf=function(){return(tk=t._Erf=t.asm.Erf).apply(null,arguments)},gb=t._Exp=function(){return(gb=t._Exp=t.asm.Exp).apply(null,arguments)},xb=t._Expm1=function(){return(xb=t._Expm1=t.asm.Expm1).apply(null,arguments)},yb=t._FlipLeftRight=function(){return(yb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},bb=t._Floor=function(){return(bb=t._Floor=t.asm.Floor).apply(null,arguments)},Cb=t._FloorDiv=function(){return(Cb=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},wb=t._FusedBatchNorm=function(){return(wb=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},Sb=t._FusedConv2D=function(){return(Sb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},Ib=t._FusedDepthwiseConv2D=function(){return(Ib=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},vb=t._Gather=function(){return(vb=t._Gather=t.asm.Gather).apply(null,arguments)},kb=t._GatherNd=function(){return(kb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},Nb=t._Greater=function(){return(Nb=t._Greater=t.asm.Greater).apply(null,arguments)},Tb=t._GreaterEqual=function(){return(Tb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},_b=t._IsFinite=function(){return(_b=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},Eb=t._IsInf=function(){return(Eb=t._IsInf=t.asm.IsInf).apply(null,arguments)},$b=t._IsNan=function(){return($b=t._IsNan=t.asm.IsNan).apply(null,arguments)},Rb=t._LRN=function(){return(Rb=t._LRN=t.asm.LRN).apply(null,arguments)},Db=t._LRNGrad=function(){return(Db=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Ab=t._LeakyRelu=function(){return(Ab=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},Fb=t._Less=function(){return(Fb=t._Less=t.asm.Less).apply(null,arguments)},Pb=t._LessEqual=function(){return(Pb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ob=t._LinSpace=function(){return(Ob=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},Mb=t._Log=function(){return(Mb=t._Log=t.asm.Log).apply(null,arguments)},Lb=t._Log1p=function(){return(Lb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Bb=t._LogicalAnd=function(){return(Bb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},zb=t._LogicalNot=function(){return(zb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},Vb=t._LogicalOr=function(){return(Vb=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Wb=t._LogicalXor=function(){return(Wb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},Ub=t._Max=function(){return(Ub=t._Max=t.asm.Max).apply(null,arguments)},Gb=t._MaxPool=function(){return(Gb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Hb=t._MaxPool3D=function(){return(Hb=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Kb=t._MaxPool3DGrad=function(){return(Kb=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},qb=t._MaxPoolGrad=function(){return(qb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},jb=t._MaxPoolWithArgmax=function(){return(jb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Xb=t._Maximum=function(){return(Xb=t._Maximum=t.asm.Maximum).apply(null,arguments)},Yb=t._Mean=function(){return(Yb=t._Mean=t.asm.Mean).apply(null,arguments)},Qb=t._Min=function(){return(Qb=t._Min=t.asm.Min).apply(null,arguments)},Zb=t._Minimum=function(){return(Zb=t._Minimum=t.asm.Minimum).apply(null,arguments)},Jb=t._MirrorPad=function(){return(Jb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},eC=t._Mod=function(){return(eC=t._Mod=t.asm.Mod).apply(null,arguments)},tC=t._Multinomial=function(){return(tC=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},rC=t._Multiply=function(){return(rC=t._Multiply=t.asm.Multiply).apply(null,arguments)},oC=t._Neg=function(){return(oC=t._Neg=t.asm.Neg).apply(null,arguments)},nC=t._NonMaxSuppressionV3=function(){return(nC=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},sC=t._NonMaxSuppressionV4=function(){return(sC=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},aC=t._NonMaxSuppressionV5=function(){return(aC=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},iC=t._NotEqual=function(){return(iC=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},uC=t._OneHot=function(){return(uC=t._OneHot=t.asm.OneHot).apply(null,arguments)},pC=t._PadV2=function(){return(pC=t._PadV2=t.asm.PadV2).apply(null,arguments)},lC=t._Pow=function(){return(lC=t._Pow=t.asm.Pow).apply(null,arguments)},cC=t._Prelu=function(){return(cC=t._Prelu=t.asm.Prelu).apply(null,arguments)},mC=t._Prod=function(){return(mC=t._Prod=t.asm.Prod).apply(null,arguments)},dC=t._RealDiv=function(){return(dC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},fC=t._Reciprocal=function(){return(fC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},hC=t._Relu=function(){return(hC=t._Relu=t.asm.Relu).apply(null,arguments)},gC=t._Relu6=function(){return(gC=t._Relu6=t.asm.Relu6).apply(null,arguments)},xC=t._ResizeBilinear=function(){return(xC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},yC=t._ResizeBilinearGrad=function(){return(yC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},bC=t._ResizeNearestNeighbor=function(){return(bC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},CC=t._ResizeNearestNeighborGrad=function(){return(CC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},wC=t._Reverse=function(){return(wC=t._Reverse=t.asm.Reverse).apply(null,arguments)},SC=t._RotateWithOffset=function(){return(SC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},IC=t._Round=function(){return(IC=t._Round=t.asm.Round).apply(null,arguments)},vC=t._Rsqrt=function(){return(vC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},kC=t._ScatterNd=function(){return(kC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},NC=t._SearchSorted=function(){return(NC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},TC=t._SelectV2=function(){return(TC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},_C=t._Selu=function(){return(_C=t._Selu=t.asm.Selu).apply(null,arguments)},EC=t._Sigmoid=function(){return(EC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},$C=t._Sign=function(){return($C=t._Sign=t.asm.Sign).apply(null,arguments)},RC=t._Sin=function(){return(RC=t._Sin=t.asm.Sin).apply(null,arguments)},DC=t._Sinh=function(){return(DC=t._Sinh=t.asm.Sinh).apply(null,arguments)},AC=t._Softmax=function(){return(AC=t._Softmax=t.asm.Softmax).apply(null,arguments)},FC=t._Softplus=function(){return(FC=t._Softplus=t.asm.Softplus).apply(null,arguments)},PC=t._SparseFillEmptyRows=function(){return(PC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},OC=t._SparseReshape=function(){return(OC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},MC=t._SparseSegmentReduction=function(){return(MC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},LC=t._SparseToDense=function(){return(LC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},BC=t._Sqrt=function(){return(BC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},zC=t._Square=function(){return(zC=t._Square=t.asm.Square).apply(null,arguments)},VC=t._SquaredDifference=function(){return(VC=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},WC=t._Step=function(){return(WC=t._Step=t.asm.Step).apply(null,arguments)},UC=t._StridedSlice=function(){return(UC=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},GC=t._Sub=function(){return(GC=t._Sub=t.asm.Sub).apply(null,arguments)},HC=t._Sum=function(){return(HC=t._Sum=t.asm.Sum).apply(null,arguments)},KC=t._Tan=function(){return(KC=t._Tan=t.asm.Tan).apply(null,arguments)},qC=t._Tanh=function(){return(qC=t._Tanh=t.asm.Tanh).apply(null,arguments)},jC=t._TensorScatterUpdate=function(){return(jC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},XC=t._Tile=function(){return(XC=t._Tile=t.asm.Tile).apply(null,arguments)},YC=t._TopK=function(){return(YC=t._TopK=t.asm.TopK).apply(null,arguments)},QC=t._Transform=function(){return(QC=t._Transform=t.asm.Transform).apply(null,arguments)},ZC=t._Transpose=function(){return(ZC=t._Transpose=t.asm.Transpose).apply(null,arguments)},JC=t.__FusedMatMul=function(){return(JC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},ew=t._malloc=function(){return(ew=t._malloc=t.asm.malloc).apply(null,arguments)},tw=t._free=function(){return(tw=t._free=t.asm.free).apply(null,arguments)},rw=t.___errno_location=function(){return(rw=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},qm=t.stackSave=function(){return(qm=t.stackSave=t.asm.stackSave).apply(null,arguments)},jm=t.stackRestore=function(){return(jm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},xc=t.stackAlloc=function(){return(xc=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},ow=t.dynCall_iijjiiii=function(){return(ow=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},nw=t.dynCall_jiji=function(){return(nw=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=Ly;var Wp;ir=function K(){Wp||Xm(),Wp||(ir=K)};function Xm(K){if(K=K||i,Et>0||(gt(),Et>0))return;function ae(){Wp||(Wp=!0,t.calledRun=!0,!M&&(xt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Ur()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Xm();var Up;s&&(Up={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Gp;if(typeof e!="undefined")Gp=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Gp=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Up){var sw=Gp._dispose;Gp._dispose=function(){sw(),Up.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Up.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return e.ready}})();typeof ex=="object"&&typeof sv=="object"?sv.exports=nv:typeof define=="function"&&define.amd?define([],function(){return nv}):typeof ex=="object"&&(ex.WasmBackendModule=nv)});var mn=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}},mo=class{refCount(e){return Hr("refCount")}incRef(e){return Hr("incRef")}timerAvailable(){return!0}time(e){return Hr("time")}read(e){return Hr("read")}readSync(e){return Hr("readSync")}readToGPU(e,t){return Hr("readToGPU")}numDataIds(){return Hr("numDataIds")}disposeData(e,t){return Hr("disposeData")}write(e,t,o){return Hr("write")}move(e,t,o,n,s){return Hr("move")}createTensorFromGPUData(e,t,o){return Hr("createTensorFromGPUData")}memory(){return Hr("memory")}floatPrecision(){return Hr("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return Hr("dispose")}};function Hr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function lk(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,nd(r,e,t)}function J4(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,nd(r,t,o),nd(e,t,o)}function qp(r,e,t){return Math.max(r,Math.min(e,t))}function eH(r){return r%2===0?r:r+1}function nd(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function tH(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function fo(r){$(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function pH(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function Li(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),$(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),$(r.every(o=>Ja(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function mw(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:Li(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function dw(r,e){return sd(r,e)}function sd(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else if(r==="string")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function fw(r,e){for(let t=0;te+=t.length),e}function dn(r){return typeof r=="string"||r instanceof String}function ck(r){return typeof r=="boolean"}function mk(r){return typeof r=="number"}function Bi(r){return Array.isArray(r)?Bi(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":mk(r)?"float32":dn(r)?"string":ck(r)?"bool":"float32"}function ra(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Xp(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function dk(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?" for a complex tensor":""}.`);return dk(0,r,e,t)}function cH(r,e){if(Array.isArray(r))return r;if(e==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(e==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function bc(r,e){let t=Yp(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Fu(r,new Float32Array(t));if(e==="int32")return Fu(r,new Int32Array(t));if(e==="bool")return Fu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function St(r){r.forEach(e=>{$(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function dH(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=yH(n,s)})}};function gH(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(xH(e,o[0],o[1]),o.join("="))),e}function xH(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function yH(r,e){let t=e.toLowerCase();return t==="true"||t==="false"?t==="true":`${+t}`===t?+t:e}function A(){return xw}var xw=null;function hk(r){xw=r}var yw;function bw(){if(yw==null){let r;if(typeof window!="undefined")r=window;else if(typeof global!="undefined")r=global;else if(typeof process!="undefined")r=process;else if(typeof self!="undefined")r=self;else throw new Error("Could not find a global object");yw=r}return yw}function bH(){let r=bw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function wc(r,e){let t=bH();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var fn="Abs",hn="Acos",gn="Acosh",Rr="Add",xn="AddN",yn="All",bn="Any",na="ArgMax",sa="ArgMin",Cn="Asin",wn="Asinh",Sn="Atan",In="Atanh",vn="Atan2",kn="AvgPool",zi="AvgPoolGrad",aa="AvgPool3D",Vi="AvgPool3DGrad",Nn="BatchMatMul",ia="BatchToSpaceND",Tn="Bincount",_n="BitwiseAnd",Sme="BroadcastTo",ua="BroadcastArgs",ho="Cast",go="Ceil",Go="ClipByValue",ei="Complex",Wi="ComplexAbs",pa="Concat",En="Conv2D",Ui="Conv2DBackpropFilter",$n="Conv2DBackpropInput",Rn="Conv3D",ti="Conv3DBackpropFilterV2",Dn="Conv3DBackpropInputV2",An="Cos",Fn="Cosh",Pn="Cumprod",On="Cumsum",Mn="CropAndResize",la="DenseBincount",Ln="DepthToSpace",Bn="DepthwiseConv2dNative",Gi="DepthwiseConv2dNativeBackpropFilter",Hi="DepthwiseConv2dNativeBackpropInput",ca="Diag",zn="Dilation2D",Ki="Dilation2DBackpropInput",qi="Dilation2DBackpropFilter",Mu="Draw",Vn="RealDiv",ji="Einsum",Wn="Elu",ri="EluGrad",Un="Erf",xo="Equal",yo="Exp",ma="ExpandDims",bo="Expm1",Xi="FFT",da="Fill",Gn="FlipLeftRight",Co="Floor",wo="FloorDiv",Hn="FusedBatchNorm",fa="GatherV2",Kn="GatherNd",So="Greater",Io="GreaterEqual",vo="Identity",Yi="IFFT",Qi="Imag",qn="IsFinite",jn="IsInf",Xn="IsNan",Yn="LeakyRelu",ko="Less",No="LessEqual",Qn="LinSpace",To="Log",Zn="Log1p",Jn="LogicalAnd",es="LogicalNot",ts="LogicalOr",gk="LogicalXor",Ime="LogSoftmax",vme="LowerBound",rs="LRN",oi="LRNGrad",kme="MatrixBandPart",os="Max",_o="Maximum",ns="MaxPool",Zi="MaxPoolGrad",ha="MaxPool3D",Ji="MaxPool3DGrad",ga="MaxPoolWithArgmax",ss="Mean",as="Min",Eo="Minimum",is="MirrorPad",us="Mod",ps="Multinomial",$o="Multiply",ls="Neg",Ro="NotEqual",cs="NonMaxSuppressionV3",ni="NonMaxSuppressionV4",ms="NonMaxSuppressionV5",xa="OnesLike",ds="OneHot",ya="Pack",fs="PadV2",Nme="Pool",hs="Pow",gs="Prelu",Ho="Prod",Qp="RaggedGather",Zp="RaggedRange",Jp="RaggedTensorToTensor",ba="Range",si="Real",xs="Reciprocal",ys="Relu",Ca="Reshape",bs="ResizeNearestNeighbor",ai="ResizeNearestNeighborGrad",Cs="ResizeBilinear",ii="ResizeBilinearGrad",ws="Relu6",Ss="Reverse",Is="Round",Do="Rsqrt",vs="ScatterNd",ks="TensorScatterUpdate",Ns="SearchSorted",wa="Select",Ts="Selu",_s="Slice",Es="Sin",$s="Sinh",Rs="Sign",Ao="Sigmoid",Ds="Softplus",Fo="Sqrt",As="Sum",Sa="SpaceToBatchND",Ia="SplitV",Fs="Softmax",eu="SparseFillEmptyRows",ui="SparseReshape",va="SparseSegmentMean",ka="SparseSegmentSum",Ps="SparseToDense",Po="SquaredDifference",tu="Square",pi="StaticRegexReplace",Os="StridedSlice",Na="StringNGrams",ru="StringSplit",ou="StringToHashBucketFast",Oo="Sub",Ms="Tan",Ls="Tanh",Mo="Tile",Bs="TopK",zs="Transform",Kr="Transpose",nu="Unique",Ta="Unpack",su="UnsortedSegmentSum",Tme="UpperBound",_a="ZerosLike",Ko="Step",Lu="FromPixels",Vs="RotateWithOffset",qo="_FusedMatMul",jo="FusedConv2D",Xo="FusedDepthwiseConv2D";function Ea(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function CH(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var el=wc("kernelRegistry",()=>new Map),Sc=wc("gradRegistry",()=>new Map);function tl(r,e){let t=ww(r,e);return el.get(t)}function Cw(r){return Sc.get(r)}function ad(r){let e=el.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&t.push(a)}return t}function li(r){let{kernelName:e,backendName:t}=r,o=ww(e,t);el.has(o)&&Ea(`The kernel '${e}' for backend '${t}' is already registered`),el.set(o,r)}function Dme(r){let{kernelName:e}=r;Sc.has(e)&&A().getBool("DEBUG")&&Ea(`Overriding the gradient for '${e}'`),Sc.set(e,r)}function Ame(r,e){let t=ww(r,e);if(!el.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);el.delete(t)}function Fme(r){if(!Sc.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);Sc.delete(r)}function Pme(r,e){ad(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});li(n)})}function ww(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>Sr,arraysEqualWithNull:()=>cw,assert:()=>$,assertNonNegativeIntegerDimensions:()=>St,assertNonNull:()=>fo,assertShapesMatch:()=>yt,bytesFromStringArray:()=>gw,bytesPerElement:()=>jp,checkConversionForErrors:()=>fw,clamp:()=>qp,computeStrides:()=>oa,convertBackendValuesAndArrayBuffer:()=>cH,createScalarValue:()=>TH,createShuffledIndices:()=>iH,decodeString:()=>sl,distSquared:()=>oH,encodeString:()=>iu,fetch:()=>EH,fingerPrint64:()=>NH,flatten:()=>Us,getArrayFromDType:()=>sd,getTypedArrayFromDType:()=>dw,hasEncodingLoss:()=>lH,hexToLong:()=>Ic,indexToLoc:()=>fH,inferDtype:()=>Bi,inferFromImplicitShape:()=>pH,isBoolean:()=>ck,isFunction:()=>ra,isInt:()=>Ja,isNumber:()=>mk,isPromise:()=>Ou,isScalarShape:()=>nH,isString:()=>dn,isTypedArray:()=>Mt,isValidDtype:()=>hw,locToIndex:()=>dH,makeOnesTypedArray:()=>bc,makeZerosNestedTypedArray:()=>mH,makeZerosTypedArray:()=>Yp,nearestDivisor:()=>Xp,nearestLargerEven:()=>eH,now:()=>Uu,parseAxisParam:()=>Li,randUniform:()=>rH,repeatedTry:()=>uH,rightPad:()=>Pu,shuffle:()=>lk,shuffleCombo:()=>J4,sizeFromShape:()=>ze,sizeToSquarishShape:()=>aH,squeezeShape:()=>mw,sum:()=>tH,swap:()=>nd,tanh:()=>sH,toNestedArray:()=>Fu,toTypedArray:()=>nl});function id(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var kw=Kp(_k());var Wu=kw.default||kw;function Ic(r){return Wu.fromString(r,!0,16)}var $k=Ic("c3a5c85c97cb3127"),Vu=Ic("b492b66fbe98f273"),Ir=Ic("9ae16a3b2f90404f");function vw(r){return r.xor(r.shru(47))}function Rk(r,e,t){let o=r.slice(e,e+t);return Wu.fromBytes(Array.from(o),!0,!0)}function It(r,e){return Rk(r,e,8)}function Ek(r,e){return Rk(r,e,4)}function Jt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function au(r,e,t=Ic("9ddfea08eb382d69")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function SH(r,e,t,o,n,s){n=n.add(r),s=Jt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Jt(n,44)),[n.add(o),s.add(a)]}function pd(r,e,t,o){return SH(It(r,e),It(r,e+8),It(r,e+16),It(r,e+24),t,o)}function IH(r,e=r.length){if(e>=8){let t=Ir.add(e*2),o=It(r,0).add(Ir),n=It(r,e-8),s=Jt(n,37).mul(t).add(o),a=Jt(o,25).add(n).mul(t);return au(s,a,t)}if(e>=4){let t=Ir.add(e*2),o=Ek(r,0);return au(o.shl(3).add(e),Ek(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return vw(Ir.mul(s).xor($k.mul(a))).mul(Ir)}return Ir}function vH(r,e=r.length){let t=Ir.add(e*2),o=It(r,0).mul(Vu),n=It(r,8),s=It(r,e-8).mul(t),a=It(r,e-16).mul(Ir);return au(Jt(o.add(n),43).add(Jt(s,30)).add(a),o.add(Jt(n.add(Ir),18)).add(s),t)}function kH(r,e=r.length){let t=Ir.add(e*2),o=It(r,0).mul(Ir),n=It(r,8),s=It(r,e-8).mul(t),a=It(r,e-16).mul(Ir),i=Jt(o.add(n),43).add(Jt(s,30)).add(a),p=au(i,o.add(Jt(n.add(Ir),18)).add(s),t),u=It(r,16).mul(t),l=It(r,24),c=i.add(It(r,e-32)).mul(t),m=p.add(It(r,e-24)).mul(t);return au(Jt(u.add(l),43).add(Jt(c,30)).add(m),u.add(Jt(l.add(o),18)).add(c),t)}function NH(r,e=r.length){let t=Wu.fromNumber(81,!0);if(e<=32)return e<=16?IH(r,e):vH(r,e);if(e<=64)return kH(r,e);let o=t,n=t.mul(Vu).add(113),s=vw(n.mul(Ir).add(113)).mul(Ir),a=[Wu.UZERO,Wu.UZERO],i=[Wu.UZERO,Wu.UZERO];o=o.mul(Ir).add(It(r,0));let p=0,u=(e-1>>6)*64,l=u+(e-1&63)-63;do o=Jt(o.add(n).add(a[0]).add(It(r,p+8)),37).mul(Vu),n=Jt(n.add(a[1]).add(It(r,p+48)),42).mul(Vu),o=o.xor(i[1]),n=n.add(a[0]).add(It(r,p+40)),s=Jt(s.add(i[0]),33).mul(Vu),a=pd(r,p,a[1].mul(Vu),o.add(i[0])),i=pd(r,p+32,s.add(i[1]),n.add(It(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let c=Vu.add(s.and(255).shl(1));return p=l,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Jt(o.add(n).add(a[0]).add(It(r,p+8)),37).mul(c),n=Jt(n.add(a[1]).add(It(r,p+48)),42).mul(c),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(It(r,p+40))),s=Jt(s.add(i[0]),33).mul(c),a=pd(r,p,a[1].mul(c),o.add(i[0])),i=pd(r,p+32,s.add(i[1]),n.add(It(r,p+16))),[s,o]=[o,s],au(au(a[0],i[0],c).add(vw(n).mul($k)).add(s),au(a[1],i[1],c).add(o),c)}function TH(r,e){return e==="string"?iu(r):nl([r],e)}function _H(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function nl(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Us(r)),A().getBool("DEBUG")&&fw(r,e),_H(r,e))return r;if(e==null||e==="float32"||e==="complex64")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Uu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Uu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{$H(c,l.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function $H(r,e,t){if(e!=="float32")return!1;for(let o=0;o0?h:""} `}}console.log(`%c${p} %c${i} %c${u}D ${c} %c${l} %c${m} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function Dk(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],l=u.inputs;for(let c=0;c=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let l=s.inputs[p];if(!Sr(u.shape,l.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${l.shape}'`);if(r[l.id]==null)r[l.id]=u;else{let c=r[l.id];r[l.id]=o(c,u),c.dispose()}}}}var Fk=20,vc=3,Tw=7;function Pk(r,e,t,o){let n=oa(e),s=RH(r,e,t,n),a=e.length,i=cd(r,e,t,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(" values:")),p.push(i.map(u=>" "+u).join(` +var _G=Object.create;var QC=Object.defineProperty;var EG=Object.getOwnPropertyDescriptor;var $G=Object.getOwnPropertyNames;var RG=Object.getPrototypeOf,DG=Object.prototype.hasOwnProperty;var Kt=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),qe=(r,e)=>{for(var t in e)QC(r,t,{get:e[t],enumerable:!0})},AG=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of $G(e))!DG.call(r,n)&&n!==t&&QC(r,n,{get:()=>e[n],enumerable:!(o=EG(e,n))||o.enumerable});return r};var zp=(r,e,t)=>(t=r!=null?_G(RG(r)):{},AG(e||!r||!r.__esModule?QC(t,"default",{value:r,enumerable:!0}):t,r));var U0=Kt((ple,W0)=>{W0.exports=kt;var ko=null;try{ko=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(r){}function kt(r,e,t){this.low=r|0,this.high=e|0,this.unsigned=!!t}kt.prototype.__isLong__;Object.defineProperty(kt.prototype,"__isLong__",{value:!0});function Wr(r){return(r&&r.__isLong__)===!0}kt.isLong=Wr;var A0={},F0={};function Fu(r,e){var t,o,n;return e?(r>>>=0,(n=0<=r&&r<256)&&(o=F0[r],o)?o:(t=Nt(r,(r|0)<0?-1:0,!0),n&&(F0[r]=t),t)):(r|=0,(n=-128<=r&&r<128)&&(o=A0[r],o)?o:(t=Nt(r,r<0?-1:0,!1),n&&(A0[r]=t),t))}kt.fromInt=Fu;function No(r,e){if(isNaN(r))return e?Au:To;if(e){if(r<0)return Au;if(r>=L0)return V0}else{if(r<=-O0)return Vr;if(r+1>=O0)return z0}return r<0?No(-r,e).neg():Nt(r%Qp|0,r/Qp|0,e)}kt.fromNumber=No;function Nt(r,e,t){return new kt(r,e,t)}kt.fromBits=Nt;var Zm=Math.pow;function cw(r,e,t){if(r.length===0)throw Error("empty string");if(r==="NaN"||r==="Infinity"||r==="+Infinity"||r==="-Infinity")return To;if(typeof e=="number"?(t=e,e=!1):e=!!e,t=t||10,t<2||360)throw Error("interior hyphen");if(o===0)return cw(r.substring(1),e,t).neg();for(var n=No(Zm(t,8)),s=To,a=0;a>>0:this.low};de.toNumber=function(){return this.unsigned?(this.high>>>0)*Qp+(this.low>>>0):this.high*Qp+(this.low>>>0)};de.toString=function(e){if(e=e||10,e<2||36>>0,c=u.toString(e);if(a=p,a.isZero())return c+i;for(;c.length<6;)c="0"+c;i=""+c+i}};de.getHighBits=function(){return this.high};de.getHighBitsUnsigned=function(){return this.high>>>0};de.getLowBits=function(){return this.low};de.getLowBitsUnsigned=function(){return this.low>>>0};de.getNumBitsAbs=function(){if(this.isNegative())return this.eq(Vr)?64:this.neg().getNumBitsAbs();for(var e=this.high!=0?this.high:this.low,t=31;t>0&&!(e&1<=0};de.isOdd=function(){return(this.low&1)===1};de.isEven=function(){return(this.low&1)===0};de.equals=function(e){return Wr(e)||(e=As(e)),this.unsigned!==e.unsigned&&this.high>>>31===1&&e.high>>>31===1?!1:this.high===e.high&&this.low===e.low};de.eq=de.equals;de.notEquals=function(e){return!this.eq(e)};de.neq=de.notEquals;de.ne=de.notEquals;de.lessThan=function(e){return this.comp(e)<0};de.lt=de.lessThan;de.lessThanOrEqual=function(e){return this.comp(e)<=0};de.lte=de.lessThanOrEqual;de.le=de.lessThanOrEqual;de.greaterThan=function(e){return this.comp(e)>0};de.gt=de.greaterThan;de.greaterThanOrEqual=function(e){return this.comp(e)>=0};de.gte=de.greaterThanOrEqual;de.ge=de.greaterThanOrEqual;de.compare=function(e){if(Wr(e)||(e=As(e)),this.eq(e))return 0;var t=this.isNegative(),o=e.isNegative();return t&&!o?-1:!t&&o?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1};de.comp=de.compare;de.negate=function(){return!this.unsigned&&this.eq(Vr)?Vr:this.not().add(Yp)};de.neg=de.negate;de.add=function(e){Wr(e)||(e=As(e));var t=this.high>>>16,o=this.high&65535,n=this.low>>>16,s=this.low&65535,a=e.high>>>16,i=e.high&65535,p=e.low>>>16,u=e.low&65535,c=0,l=0,m=0,d=0;return d+=s+u,m+=d>>>16,d&=65535,m+=n+p,l+=m>>>16,m&=65535,l+=o+i,c+=l>>>16,l&=65535,c+=t+a,c&=65535,Nt(m<<16|d,c<<16|l,this.unsigned)};de.subtract=function(e){return Wr(e)||(e=As(e)),this.add(e.neg())};de.sub=de.subtract;de.multiply=function(e){if(this.isZero())return To;if(Wr(e)||(e=As(e)),ko){var t=ko.mul(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(e.isZero())return To;if(this.eq(Vr))return e.isOdd()?Vr:To;if(e.eq(Vr))return this.isOdd()?Vr:To;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(M0)&&e.lt(M0))return No(this.toNumber()*e.toNumber(),this.unsigned);var o=this.high>>>16,n=this.high&65535,s=this.low>>>16,a=this.low&65535,i=e.high>>>16,p=e.high&65535,u=e.low>>>16,c=e.low&65535,l=0,m=0,d=0,f=0;return f+=a*c,d+=f>>>16,f&=65535,d+=s*c,m+=d>>>16,d&=65535,d+=a*u,m+=d>>>16,d&=65535,m+=n*c,l+=m>>>16,m&=65535,m+=s*u,l+=m>>>16,m&=65535,m+=a*p,l+=m>>>16,m&=65535,l+=o*c+n*u+s*p+a*i,l&=65535,Nt(d<<16|f,l<<16|m,this.unsigned)};de.mul=de.multiply;de.divide=function(e){if(Wr(e)||(e=As(e)),e.isZero())throw Error("division by zero");if(ko){if(!this.unsigned&&this.high===-2147483648&&e.low===-1&&e.high===-1)return this;var t=(this.unsigned?ko.div_u:ko.div_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?Au:To;var o,n,s;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return Au;if(e.gt(this.shru(1)))return B0;s=Au}else{if(this.eq(Vr)){if(e.eq(Yp)||e.eq(pw))return Vr;if(e.eq(Vr))return Yp;var a=this.shr(1);return o=a.div(e).shl(1),o.eq(To)?e.isNegative()?Yp:pw:(n=this.sub(e.mul(o)),s=o.add(n.div(e)),s)}else if(e.eq(Vr))return this.unsigned?Au:To;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=To}for(n=this;n.gte(e);){o=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(o)/Math.LN2),p=i<=48?1:Zm(2,i-48),u=No(o),c=u.mul(e);c.isNegative()||c.gt(n);)o-=p,u=No(o,this.unsigned),c=u.mul(e);u.isZero()&&(u=Yp),s=s.add(u),n=n.sub(c)}return s};de.div=de.divide;de.modulo=function(e){if(Wr(e)||(e=As(e)),ko){var t=(this.unsigned?ko.rem_u:ko.rem_s)(this.low,this.high,e.low,e.high);return Nt(t,ko.get_high(),this.unsigned)}return this.sub(this.div(e).mul(e))};de.mod=de.modulo;de.rem=de.modulo;de.not=function(){return Nt(~this.low,~this.high,this.unsigned)};de.and=function(e){return Wr(e)||(e=As(e)),Nt(this.low&e.low,this.high&e.high,this.unsigned)};de.or=function(e){return Wr(e)||(e=As(e)),Nt(this.low|e.low,this.high|e.high,this.unsigned)};de.xor=function(e){return Wr(e)||(e=As(e)),Nt(this.low^e.low,this.high^e.high,this.unsigned)};de.shiftLeft=function(e){return Wr(e)&&(e=e.toInt()),(e&=63)===0?this:e<32?Nt(this.low<>>32-e,this.unsigned):Nt(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):Nt(this.high>>e-32,this.high>=0?0:-1,this.unsigned)};de.shr=de.shiftRight;de.shiftRightUnsigned=function(e){if(Wr(e)&&(e=e.toInt()),e&=63,e===0)return this;var t=this.high;if(e<32){var o=this.low;return Nt(o>>>e|t<<32-e,t>>>e,this.unsigned)}else return e===32?Nt(t,0,this.unsigned):Nt(t>>>e-32,0,this.unsigned)};de.shru=de.shiftRightUnsigned;de.shr_u=de.shiftRightUnsigned;de.toSigned=function(){return this.unsigned?Nt(this.low,this.high,!1):this};de.toUnsigned=function(){return this.unsigned?this:Nt(this.low,this.high,!0)};de.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()};de.toBytesLE=function(){var e=this.high,t=this.low;return[t&255,t>>>8&255,t>>>16&255,t>>>24,e&255,e>>>8&255,e>>>16&255,e>>>24]};de.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,e&255,t>>>24,t>>>16&255,t>>>8&255,t&255]};kt.fromBytes=function(e,t,o){return o?kt.fromBytesLE(e,t):kt.fromBytesBE(e,t)};kt.fromBytesLE=function(e,t){return new kt(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)};kt.fromBytesBE=function(e,t){return new kt(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}});var Ek=Kt(()=>{});var $k=Kt(()=>{});var o1=Kt((r1,Ww)=>{(function(r,e,t){function o(i){var p=this,u=a();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=u(" "),p.s1=u(" "),p.s2=u(" "),p.s0-=u(i),p.s0<0&&(p.s0+=1),p.s1-=u(i),p.s1<0&&(p.s1+=1),p.s2-=u(i),p.s2<0&&(p.s2+=1),u=null}function n(i,p){return p.c=i.c,p.s0=i.s0,p.s1=i.s1,p.s2=i.s2,p}function s(i,p){var u=new o(i),c=p&&p.state,l=u.next;return l.int32=function(){return u.next()*4294967296|0},l.double=function(){return l()+(l()*2097152|0)*11102230246251565e-32},l.quick=l,c&&(typeof c=="object"&&n(c,u),l.state=function(){return n(u,{})}),l}function a(){var i=4022871197,p=function(u){u=String(u);for(var c=0;c>>0,l-=i,l*=i,i=l>>>0,l-=i,i+=l*4294967296}return(i>>>0)*23283064365386963e-26};return p}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.alea=s})(r1,typeof Ww=="object"&&Ww,typeof define=="function"&&define)});var s1=Kt((n1,Uw)=>{(function(r,e,t){function o(a){var i=this,p="";i.x=0,i.y=0,i.z=0,i.w=0,i.next=function(){var c=i.x^i.x<<11;return i.x=i.y,i.y=i.z,i.z=i.w,i.w^=i.w>>>19^c^c>>>8},a===(a|0)?i.x=a:p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor128=s})(n1,typeof Uw=="object"&&Uw,typeof define=="function"&&define)});var i1=Kt((a1,Gw)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.x^i.x>>>2;return i.x=i.y,i.y=i.z,i.z=i.w,i.w=i.v,(i.d=i.d+362437|0)+(i.v=i.v^i.v<<4^(c^c<<1))|0},i.x=0,i.y=0,i.z=0,i.w=0,i.v=0,a===(a|0)?i.x=a:p+=a;for(var u=0;u>>4),i.next()}function n(a,i){return i.x=a.x,i.y=a.y,i.z=a.z,i.w=a.w,i.v=a.v,i.d=a.d,i}function s(a,i){var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorwow=s})(a1,typeof Gw=="object"&&Gw,typeof define=="function"&&define)});var p1=Kt((u1,Hw)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.x,c=i.i,l,m,d;return l=u[c],l^=l>>>7,m=l^l<<24,l=u[c+1&7],m^=l^l>>>10,l=u[c+3&7],m^=l^l>>>3,l=u[c+4&7],m^=l^l<<7,l=u[c+7&7],l=l^l<<13,m^=l^l<<9,u[c]=m,i.i=c+1&7,m};function p(u,c){var l,m,d=[];if(c===(c|0))m=d[0]=c;else for(c=""+c,l=0;l0;--l)u.next()}p(i,a)}function n(a,i){return i.x=a.x.slice(),i.i=a.i,i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.x&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xorshift7=s})(u1,typeof Hw=="object"&&Hw,typeof define=="function"&&define)});var l1=Kt((c1,Kw)=>{(function(r,e,t){function o(a){var i=this;i.next=function(){var u=i.w,c=i.X,l=i.i,m,d;return i.w=u=u+1640531527|0,d=c[l+34&127],m=c[l=l+1&127],d^=d<<13,m^=m<<17,d^=d>>>15,m^=m>>>12,d=c[l]=d^m,i.i=l,d+(u^u>>>16)|0};function p(u,c){var l,m,d,f,h,g=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),d=0,f=-32;f>>15,m^=m<<4,m^=m>>>13,f>=0&&(h=h+1640531527|0,l=g[f&127]^=m+h,d=l==0?d+1:0);for(d>=128&&(g[(c&&c.length||0)&127]=-1),d=127,f=4*128;f>0;--f)m=g[d+34&127],l=g[d=d+1&127],m^=m<<13,l^=l<<17,m^=m>>>15,l^=l>>>12,g[d]=m^l;u.w=h,u.X=g,u.i=d}p(i,a)}function n(a,i){return i.i=a.i,i.w=a.w,i.X=a.X.slice(),i}function s(a,i){a==null&&(a=+new Date);var p=new o(a),u=i&&i.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(u.X&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.xor4096=s})(c1,typeof Kw=="object"&&Kw,typeof define=="function"&&define)});var d1=Kt((m1,qw)=>{(function(r,e,t){function o(a){var i=this,p="";i.next=function(){var c=i.b,l=i.c,m=i.d,d=i.a;return c=c<<25^c>>>7^l,l=l-m|0,m=m<<24^m>>>8^d,d=d-c|0,i.b=c=c<<20^c>>>12^l,i.c=l=l-m|0,i.d=m<<16^l>>>16^d,i.a=d-c|0},i.a=0,i.b=0,i.c=-1640531527,i.d=1367130551,a===Math.floor(a)?(i.a=a/4294967296|0,i.b=a|0):p+=a;for(var u=0;u>>0)/4294967296};return c.double=function(){do var l=p.next()>>>11,m=(p.next()>>>0)/4294967296,d=(l+m)/(1<<21);while(d===0);return d},c.int32=p.next,c.quick=c,u&&(typeof u=="object"&&n(u,p),c.state=function(){return n(p,{})}),c}e&&e.exports?e.exports=s:t&&t.amd?t(function(){return s}):this.tychei=s})(m1,typeof qw=="object"&&qw,typeof define=="function"&&define)});var f1=Kt(()=>{});var g1=Kt((h1,Md)=>{(function(r,e,t){var o=256,n=6,s=52,a="random",i=t.pow(o,n),p=t.pow(2,s),u=p*2,c=o-1,l;function m(C,S,k){var _=[];S=S==!0?{entropy:!0}:S||{};var $=g(h(S.entropy?[C,b(e)]:C==null?x():C,3),_),R=new d(_),D=function(){for(var P=R.g(n),O=i,M=0;P=u;)P/=2,O/=2,M>>>=1;return(P+M)/O};return D.int32=function(){return R.g(4)|0},D.quick=function(){return R.g(4)/4294967296},D.double=D,g(b(R.S),e),(S.pass||k||function(P,O,M,L){return L&&(L.S&&f(L,R),P.state=function(){return f(R,{})}),M?(t[a]=P,O):P})(D,$,"global"in S?S.global:this==t,S.state)}function d(C){var S,k=C.length,_=this,$=0,R=_.i=_.j=0,D=_.S=[];for(k||(C=[k++]);${var Dq=o1(),Aq=s1(),Fq=i1(),Pq=p1(),Oq=l1(),Mq=d1(),Ku=g1();Ku.alea=Dq;Ku.xor128=Aq;Ku.xorwow=Fq;Ku.xorshift7=Pq;Ku.xor4096=Oq;Ku.tychei=Mq;x1.exports=Ku});var Vv=Kt(()=>{});var Wv=Kt(()=>{});var LB=Kt(()=>{});var BB=Kt(()=>{});var zB=Kt(()=>{});var VB=Kt((Wg,Gv)=>{var Uv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};function t(){return oe.buffer!=He&&Tt(oe.buffer),lt}function o(){return oe.buffer!=He&&Tt(oe.buffer),it}function n(){return oe.buffer!=He&&Tt(oe.buffer),ht}function s(){return oe.buffer!=He&&Tt(oe.buffer),Lr}function a(){return oe.buffer!=He&&Tt(oe.buffer),Mt}function i(){return oe.buffer!=He&&Tt(oe.buffer),to}function p(){return oe.buffer!=He&&Tt(oe.buffer),rr}var u=typeof e!="undefined"?e:{},c,l;u.ready=new Promise(function(F,V){c=F,l=V});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var d=Object.assign({},u),f=[],h="./this.program",g=(F,V)=>{throw V},x=typeof window=="object",b=typeof importScripts=="function",C=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",S=u.ENVIRONMENT_IS_PTHREAD||!1,k="";function _(F){return u.locateFile?u.locateFile(F,k):k+F}var $,R,D,P;function O(F){if(F instanceof ku)return;j("exiting due to exception: "+F)}if(C){var M=Vv(),L=Wv();b?k=L.dirname(k)+"/":k=__dirname+"/",$=(V,ue)=>(V=Fp(V)?new URL(V):L.normalize(V),M.readFileSync(V,ue?void 0:"utf8")),D=V=>{var ue=$(V,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},R=(V,ue,$e)=>{V=Fp(V)?new URL(V):L.normalize(V),M.readFile(V,function(Be,Le){Be?$e(Be):ue(Le.buffer)})},process.argv.length>1&&(h=process.argv[1].replace(/\\/g,"/")),f=process.argv.slice(2),process.on("uncaughtException",function(V){if(!(V instanceof ku))throw V}),process.on("unhandledRejection",function(V){throw V}),g=(V,ue)=>{if(Lo())throw process.exitCode=V,ue;O(ue),process.exit(V)},u.inspect=function(){return"[Emscripten Module object]"};let F;try{F=LB()}catch(V){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),V}global.Worker=F.Worker}else(x||b)&&(b?k=self.location.href:typeof document!="undefined"&&document.currentScript&&(k=document.currentScript.src),typeof r!="undefined"&&r&&(k=r),k.indexOf("blob:")!==0?k=k.substr(0,k.replace(/[?#].*/,"").lastIndexOf("/")+1):k="",C||($=F=>{var V=new XMLHttpRequest;return V.open("GET",F,!1),V.send(null),V.responseText},b&&(D=F=>{var V=new XMLHttpRequest;return V.open("GET",F,!1),V.responseType="arraybuffer",V.send(null),new Uint8Array(V.response)}),R=(F,V,ue)=>{var $e=new XMLHttpRequest;$e.open("GET",F,!0),$e.responseType="arraybuffer",$e.onload=()=>{if($e.status==200||$e.status==0&&$e.response){V($e.response);return}ue()},$e.onerror=ue,$e.send(null)}),P=F=>document.title=F);C&&typeof performance=="undefined"&&(global.performance=BB().performance);var B=console.log.bind(console),z=console.warn.bind(console);C&&(B=F=>M.writeSync(1,F+` +`),z=F=>M.writeSync(2,F+` +`));var U=u.print||B,j=u.printErr||z;Object.assign(u,d),d=null,u.arguments&&(f=u.arguments),u.thisProgram&&(h=u.thisProgram),u.quit&&(g=u.quit);var q=4,Y=Atomics.load,J=Atomics.store,re=Atomics.compareExchange,ne;u.wasmBinary&&(ne=u.wasmBinary);var ee=u.noExitRuntime||!0;typeof WebAssembly!="object"&&vu("no native wasm support detected");var oe,ie,le=!1,be;function _e(F,V){F||vu(V)}var ve=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Fe(F,V,ue){V>>>=0;for(var $e=V+ue,Be=V;F[Be]&&!(Be>=$e);)++Be;if(Be-V>16&&F.buffer&&ve)return ve.decode(F.buffer instanceof SharedArrayBuffer?F.slice(V,Be):F.subarray(V,Be));for(var Le="";V>10,56320|so&1023)}}return Le}function Pe(F,V){return F>>>=0,F?Fe(o(),F,V):""}function st(F,V,ue,$e){if(ue>>>=0,!($e>0))return 0;for(var Be=ue,Le=ue+$e-1,ge=0;ge=55296&&Ne<=57343){var Ft=F.charCodeAt(++ge);Ne=65536+((Ne&1023)<<10)|Ft&1023}if(Ne<=127){if(ue>=Le)break;V[ue++>>>0]=Ne}else if(Ne<=2047){if(ue+1>=Le)break;V[ue++>>>0]=192|Ne>>6,V[ue++>>>0]=128|Ne&63}else if(Ne<=65535){if(ue+2>=Le)break;V[ue++>>>0]=224|Ne>>12,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}else{if(ue+3>=Le)break;V[ue++>>>0]=240|Ne>>18,V[ue++>>>0]=128|Ne>>12&63,V[ue++>>>0]=128|Ne>>6&63,V[ue++>>>0]=128|Ne&63}}return V[ue>>>0]=0,ue-Be}function ct(F,V,ue){return st(F,o(),V,ue)}var He,lt,it,ht,gt,Lr,Mt,to,rr;S&&(He=u.buffer);function Tt(F){He=F,u.HEAP8=lt=new Int8Array(F),u.HEAP16=ht=new Int16Array(F),u.HEAP32=Lr=new Int32Array(F),u.HEAPU8=it=new Uint8Array(F),u.HEAPU16=gt=new Uint16Array(F),u.HEAPU32=Mt=new Uint32Array(F),u.HEAPF32=to=new Float32Array(F),u.HEAPF64=rr=new Float64Array(F)}var or=u.INITIAL_MEMORY||16777216;if(S)oe=u.wasmMemory,He=u.buffer;else if(u.wasmMemory)oe=u.wasmMemory;else if(oe=new WebAssembly.Memory({initial:or/65536,maximum:65536,shared:!0}),!(oe.buffer instanceof SharedArrayBuffer))throw j("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"),C&&j("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");oe&&(He=oe.buffer),or=He.byteLength,Tt(He);var nr,ro=[],oo=[],fr=[],Va=!1;function Lo(){return ee}function Ks(){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)ol(u.preRun.shift());al(ro)}function Xt(){Va=!0,!S&&al(oo)}function Wa(){if(!S){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)d0(u.postRun.shift());al(fr)}}function ol(F){ro.unshift(F)}function nl(F){oo.unshift(F)}function d0(F){fr.unshift(F)}var ki=0,Ap=null,Ua=null;function Cy(F){ki++,u.monitorRunDependencies&&u.monitorRunDependencies(ki)}function wm(F){if(ki--,u.monitorRunDependencies&&u.monitorRunDependencies(ki),ki==0&&(Ap!==null&&(clearInterval(Ap),Ap=null),Ua)){var V=Ua;Ua=null,V()}}function vu(F){u.onAbort&&u.onAbort(F),F="Aborted("+F+")",j(F),le=!0,be=1,F+=". Build with -sASSERTIONS for more info.";var V=new WebAssembly.RuntimeError(F);throw l(V),V}var wy="data:application/octet-stream;base64,";function Sm(F){return F.startsWith(wy)}function Fp(F){return F.startsWith("file://")}var hr;hr="tfjs-backend-wasm-threaded-simd.wasm",Sm(hr)||(hr=_(hr));function Im(F){try{if(F==hr&&ne)return new Uint8Array(ne);if(D)return D(F);throw"both async and sync fetching of the wasm failed"}catch(V){vu(V)}}function Sy(){if(!ne&&(x||b)){if(typeof fetch=="function"&&!Fp(hr))return fetch(hr,{credentials:"same-origin"}).then(function(F){if(!F.ok)throw"failed to load wasm binary file at '"+hr+"'";return F.arrayBuffer()}).catch(function(){return Im(hr)});if(R)return new Promise(function(F,V){R(hr,function(ue){F(new Uint8Array(ue))},V)})}return Promise.resolve().then(function(){return Im(hr)})}function Iy(){var F={env:Om,wasi_snapshot_preview1:Om};function V(ge,Ne){var Ft=ge.exports;if(u.asm=Ft,Dy(u.asm._emscripten_tls_init),nr=u.asm.__indirect_function_table,nl(u.asm.__wasm_call_ctors),ie=Ne,!S){var so=Me.unusedWorkers.length;Me.unusedWorkers.forEach(function(Ha){Me.loadWasmModuleToWorker(Ha,function(){--so||wm("wasm-instantiate")})})}}S||Cy("wasm-instantiate");function ue(ge){V(ge.instance,ge.module)}function $e(ge){return Sy().then(function(Ne){return WebAssembly.instantiate(Ne,F)}).then(function(Ne){return Ne}).then(ge,function(Ne){j("failed to asynchronously prepare wasm: "+Ne),vu(Ne)})}function Be(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Sm(hr)&&!Fp(hr)&&!C&&typeof fetch=="function"?fetch(hr,{credentials:"same-origin"}).then(function(ge){var Ne=WebAssembly.instantiateStreaming(ge,F);return Ne.then(ue,function(Ft){return j("wasm streaming compile failed: "+Ft),j("falling back to ArrayBuffer instantiation"),$e(ue)})}):$e(ue)}if(u.instantiateWasm)try{var Le=u.instantiateWasm(F,V);return Le}catch(ge){j("Module.instantiateWasm callback failed with error: "+ge),l(ge)}return Be().catch(l),{}}var f0,h0,vm={};function ku(F){this.name="ExitStatus",this.message="Program terminated with exit("+F+")",this.status=F}function vy(F){var V=Me.pthreads[F];delete Me.pthreads[F],V.terminate(),jC(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(V),1),V.pthread_ptr=0}function ky(F){var V=Me.pthreads[F];V.postMessage({cmd:"cancel"})}function sl(F){var V=Me.pthreads[F];_e(V),Me.returnWorkerToPool(V)}function Ny(F){var V=Me.getNewWorker();if(!V)return 6;Me.runningWorkers.push(V),Me.pthreads[F.pthread_ptr]=V,V.pthread_ptr=F.pthread_ptr;var ue={cmd:"run",start_routine:F.startRoutine,arg:F.arg,pthread_ptr:F.pthread_ptr};return V.runPthread=()=>{C&&V.ref(),V.postMessage(ue,F.transferList),delete V.runPthread},V.loaded&&V.runPthread(),0}var km={varargs:void 0,get:function(){km.varargs+=4;var F=s()[km.varargs-4>>>2];return F},getStr:function(F){var V=Pe(F);return V}};function Nm(F){if(S)return Ni(1,1,F);be=F,Lo()||(Me.terminateAllThreads(),u.onExit&&u.onExit(F),le=!0),g(F,new ku(F))}function Ty(F,V){if(be=F,!V&&S)throw _m(F),"unwind";Nm(F)}var Tm=Ty;function _y(F){if(F instanceof ku||F=="unwind")return be;g(1,F)}var Me={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){S?Me.initWorker():Me.initMainThread()},initMainThread:function(){for(var F=8;F--;)Me.allocateUnusedWorker()},initWorker:function(){ee=!1},setExitStatus:function(F){be=F},terminateAllThreads:function(){for(var F of Object.values(Me.pthreads))Me.returnWorkerToPool(F);for(var F of Me.unusedWorkers)F.terminate();Me.unusedWorkers=[]},returnWorkerToPool:function(F){var V=F.pthread_ptr;delete Me.pthreads[V],Me.unusedWorkers.push(F),Me.runningWorkers.splice(Me.runningWorkers.indexOf(F),1),F.pthread_ptr=0,C&&F.unref(),jC(V)},receiveObjectTransfer:function(F){},threadInitTLS:function(){Me.tlsInitFunctions.forEach(F=>F())},loadWasmModuleToWorker:function(F,V){F.onmessage=Le=>{var ge=Le.data,Ne=ge.cmd;if(F.pthread_ptr&&(Me.currentProxiedOperationCallerThread=F.pthread_ptr),ge.targetThread&&ge.targetThread!=Wm()){var Ft=Me.pthreads[ge.targetThread];Ft?Ft.postMessage(ge,ge.transferList):j('Internal error! Worker sent a message "'+Ne+'" to target pthread '+ge.targetThread+", but that thread no longer exists!"),Me.currentProxiedOperationCallerThread=void 0;return}Ne==="processProxyingQueue"?il(ge.queue):Ne==="spawnThread"?Ny(ge):Ne==="cleanupThread"?sl(ge.thread):Ne==="killThread"?vy(ge.thread):Ne==="cancelThread"?ky(ge.thread):Ne==="loaded"?(F.loaded=!0,C&&F.unref(),V&&V(F),F.runPthread&&F.runPthread()):Ne==="print"?U("Thread "+ge.threadId+": "+ge.text):Ne==="printErr"?j("Thread "+ge.threadId+": "+ge.text):Ne==="alert"?alert("Thread "+ge.threadId+": "+ge.text):ge.target==="setimmediate"?F.postMessage(ge):Ne==="callHandler"?u[ge.handler](...ge.args):Ne&&j("worker sent an unknown command "+Ne),Me.currentProxiedOperationCallerThread=void 0},F.onerror=Le=>{var ge="worker sent an error!";throw j(ge+" "+Le.filename+":"+Le.lineno+": "+Le.message),Le},C&&(F.on("message",function(Le){F.onmessage({data:Le})}),F.on("error",function(Le){F.onerror(Le)}),F.on("detachedExit",function(){}));var ue=[],$e=["onExit","onAbort","print","printErr"];for(var Be of $e)u.hasOwnProperty(Be)&&ue.push(Be);F.postMessage({cmd:"load",handlers:ue,urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:oe,wasmModule:ie})},allocateUnusedWorker:function(){var F,V=_("tfjs-backend-wasm-threaded-simd.worker.js");F=new Worker(V),Me.unusedWorkers.push(F)},getNewWorker:function(){return Me.unusedWorkers.length==0&&(Me.allocateUnusedWorker(),Me.loadWasmModuleToWorker(Me.unusedWorkers[0])),Me.unusedWorkers.pop()}};u.PThread=Me;function al(F){for(;F.length>0;)F.shift()(u)}function Ey(){var F=Wm(),V=s()[F+52>>>2],ue=s()[F+56>>>2],$e=V-ue;w0(V,$e),Um(V)}u.establishStackSpace=Ey;function _m(F){if(S)return Ni(2,0,F);try{Tm(F)}catch(V){_y(V)}}var Pp=[];function $y(F){var V=Pp[F];return V||(F>=Pp.length&&(Pp.length=F+1),Pp[F]=V=nr.get(F)),V}function Ry(F,V){var ue=$y(F)(V);Lo()?Me.setExitStatus(ue):C0(ue)}u.invokeEntryPoint=Ry;function Dy(F){Me.tlsInitFunctions.push(F)}function Ay(F){x0(F,!b,1,!x),Me.threadInitTLS()}function Fy(F){S?postMessage({cmd:"cleanupThread",thread:F}):sl(F)}function Em(F,V,ue,$e){return S?Ni(3,1,F,V,ue,$e):$m(F,V,ue,$e)}function $m(F,V,ue,$e){if(typeof SharedArrayBuffer=="undefined")return j("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Be=[],Le=0;if(S&&(Be.length===0||Le))return Em(F,V,ue,$e);if(Le)return Le;var ge={startRoutine:ue,pthread_ptr:F,arg:$e,transferList:Be};return S?(ge.cmd="spawnThread",postMessage(ge,Be),0):Ny(ge)}function Py(){return 65536}var Oy=!0;function My(){return Oy}function il(F){Atomics.store(s(),F>>2,1),Wm()&&b0(F),Atomics.compareExchange(s(),F>>2,1,0)}u.executeNotifiedProxyingQueue=il;function Ly(F,V,ue,$e){if(F==V)setTimeout(()=>il($e));else if(S)postMessage({targetThread:F,cmd:"processProxyingQueue",queue:$e});else{var Be=Me.pthreads[F];if(!Be)return;Be.postMessage({cmd:"processProxyingQueue",queue:$e})}return 1}function By(F,V,ue){return-1}function zy(){vu("")}function Nu(F){Nu.shown||(Nu.shown={}),Nu.shown[F]||(Nu.shown[F]=1,C&&(F="warning: "+F),j(F))}function Vy(){C||b||Nu("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Wy(){return Date.now()}function Rm(){return 4294901760}function Uy(){return Rm()}var ul;C?ul=()=>{var F=process.hrtime();return F[0]*1e3+F[1]/1e6}:ul=()=>performance.timeOrigin+performance.now();function Gy(F,V,ue){o().copyWithin(F>>>0,V>>>0,V+ue>>>0)}function Hy(){return C?zB().cpus().length:navigator.hardwareConcurrency}function Ky(F){var V=XC(),ue=F();return Um(V),ue}function Ni(F,V){var ue=arguments.length-2,$e=arguments;return Ky(()=>{for(var Be=ue,Le=Gm(Be*8),ge=Le>>3,Ne=0;Ne>>0]=Ft}return y0(F,Be,Le,V)})}var pl=[];function qy(F,V,ue){pl.length=V;for(var $e=ue>>3,Be=0;Be>>0];var Le=F<0,ge=Le?vm[-F-1]:rb[F];return ge.apply(null,pl)}function jy(F){try{return oe.grow(F-He.byteLength+65535>>>16),Tt(oe.buffer),1}catch(V){}}function Xy(F){var V=o().length;if(F=F>>>0,F<=V)return!1;var ue=Rm();if(F>ue)return!1;let $e=(Ft,so)=>Ft+(so-Ft%so)%so;for(var Be=1;Be<=4;Be*=2){var Le=V*(1+.2/Be);Le=Math.min(Le,F+100663296);var ge=Math.min(ue,$e(Math.max(F,Le),65536)),Ne=jy(ge);if(Ne)return!0}return!1}function Yy(){throw"unwind"}function Dm(F){return S?Ni(4,1,F):52}function Am(F,V,ue,$e,Be){return S?Ni(5,1,F,V,ue,$e,Be):70}var Qy=[null,[],[]];function Zy(F,V){var ue=Qy[F];V===0||V===10?((F===1?U:j)(Fe(ue,0)),ue.length=0):ue.push(V)}function Fm(F,V,ue,$e){if(S)return Ni(6,1,F,V,ue,$e);for(var Be=0,Le=0;Le>>2],Ne=a()[V+4>>>2];V+=8;for(var Ft=0;Ft>>0]);Be+=Ne}return a()[$e>>>2]=Be,0}function Pm(F){var V=u["_"+F];return V}function Jy(F,V){t().set(F,V>>>0)}function eb(F,V,ue,$e,Be){var Le={string:Br=>{var Bp=0;if(Br!=null&&Br!==0){var v0=(Br.length<<2)+1;Bp=Gm(v0),ct(Br,Bp,v0)}return Bp},array:Br=>{var Bp=Gm(Br.length);return Jy(Br,Bp),Bp}};function ge(Br){return V==="string"?Pe(Br):V==="boolean"?!!Br:Br}var Ne=Pm(F),Ft=[],so=0;if($e)for(var Ha=0;Ha<$e.length;Ha++){var I0=Le[ue[Ha]];I0?(so===0&&(so=XC()),Ft[Ha]=I0($e[Ha])):Ft[Ha]=$e[Ha]}var YC=Ne.apply(null,Ft);function TG(Br){return so!==0&&Um(so),ge(Br)}return YC=TG(YC),YC}function tb(F,V,ue,$e){ue=ue||[];var Be=ue.every(ge=>ge==="number"||ge==="boolean"),Le=V!=="string";return Le&&Be&&!$e?Pm(F):function(){return eb(F,V,ue,arguments,$e)}}Me.init();var rb=[null,Nm,_m,Em,Dm,Am,Fm],Om={__emscripten_init_main_thread_js:Ay,__emscripten_thread_cleanup:Fy,__pthread_create_js:$m,_emscripten_default_pthread_stack_size:Py,_emscripten_get_now_is_monotonic:My,_emscripten_notify_task_queue:Ly,_emscripten_set_offscreencanvas_size:By,abort:zy,emscripten_check_blocking_allowed:Vy,emscripten_date_now:Wy,emscripten_get_heap_max:Uy,emscripten_get_now:ul,emscripten_memcpy_big:Gy,emscripten_num_logical_cores:Hy,emscripten_receive_on_main_thread_js:qy,emscripten_resize_heap:Xy,emscripten_unwind_to_js_event_loop:Yy,exit:Tm,fd_close:Dm,fd_seek:Am,fd_write:Fm,memory:oe||u.wasmMemory},g0=Iy(),ob=u.___wasm_call_ctors=function(){return(ob=u.___wasm_call_ctors=u.asm.__wasm_call_ctors).apply(null,arguments)},nb=u._init=function(){return(nb=u._init=u.asm.init).apply(null,arguments)},sb=u._init_with_threads_count=function(){return(sb=u._init_with_threads_count=u.asm.init_with_threads_count).apply(null,arguments)},ab=u._get_threads_count=function(){return(ab=u._get_threads_count=u.asm.get_threads_count).apply(null,arguments)},ib=u._register_tensor=function(){return(ib=u._register_tensor=u.asm.register_tensor).apply(null,arguments)},ub=u._dispose_data=function(){return(ub=u._dispose_data=u.asm.dispose_data).apply(null,arguments)},pb=u._dispose=function(){return(pb=u._dispose=u.asm.dispose).apply(null,arguments)},cb=u._Abs=function(){return(cb=u._Abs=u.asm.Abs).apply(null,arguments)},lb=u._Acos=function(){return(lb=u._Acos=u.asm.Acos).apply(null,arguments)},mb=u._Acosh=function(){return(mb=u._Acosh=u.asm.Acosh).apply(null,arguments)},db=u._Add=function(){return(db=u._Add=u.asm.Add).apply(null,arguments)},fb=u._AddN=function(){return(fb=u._AddN=u.asm.AddN).apply(null,arguments)},hb=u._All=function(){return(hb=u._All=u.asm.All).apply(null,arguments)},gb=u._Any=function(){return(gb=u._Any=u.asm.Any).apply(null,arguments)},xb=u._ArgMax=function(){return(xb=u._ArgMax=u.asm.ArgMax).apply(null,arguments)},yb=u._ArgMin=function(){return(yb=u._ArgMin=u.asm.ArgMin).apply(null,arguments)},bb=u._Asin=function(){return(bb=u._Asin=u.asm.Asin).apply(null,arguments)},Cb=u._Asinh=function(){return(Cb=u._Asinh=u.asm.Asinh).apply(null,arguments)},wb=u._Atan=function(){return(wb=u._Atan=u.asm.Atan).apply(null,arguments)},Sb=u._Atan2=function(){return(Sb=u._Atan2=u.asm.Atan2).apply(null,arguments)},Ib=u._Atanh=function(){return(Ib=u._Atanh=u.asm.Atanh).apply(null,arguments)},vb=u._AvgPool=function(){return(vb=u._AvgPool=u.asm.AvgPool).apply(null,arguments)},kb=u._AvgPool3D=function(){return(kb=u._AvgPool3D=u.asm.AvgPool3D).apply(null,arguments)},Nb=u._AvgPool3DGrad=function(){return(Nb=u._AvgPool3DGrad=u.asm.AvgPool3DGrad).apply(null,arguments)},Tb=u._AvgPoolGrad=function(){return(Tb=u._AvgPoolGrad=u.asm.AvgPoolGrad).apply(null,arguments)},_b=u._BatchMatMul=function(){return(_b=u._BatchMatMul=u.asm.BatchMatMul).apply(null,arguments)},Eb=u._Bincount=function(){return(Eb=u._Bincount=u.asm.Bincount).apply(null,arguments)},$b=u._BitwiseAnd=function(){return($b=u._BitwiseAnd=u.asm.BitwiseAnd).apply(null,arguments)},Rb=u._Ceil=function(){return(Rb=u._Ceil=u.asm.Ceil).apply(null,arguments)},Db=u._ClipByValue=function(){return(Db=u._ClipByValue=u.asm.ClipByValue).apply(null,arguments)},Ab=u._Conv2D=function(){return(Ab=u._Conv2D=u.asm.Conv2D).apply(null,arguments)},Fb=u._Conv2DBackpropInput=function(){return(Fb=u._Conv2DBackpropInput=u.asm.Conv2DBackpropInput).apply(null,arguments)},Pb=u._Conv3D=function(){return(Pb=u._Conv3D=u.asm.Conv3D).apply(null,arguments)},Ob=u._Conv3DBackpropFilterV2=function(){return(Ob=u._Conv3DBackpropFilterV2=u.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Mb=u._Conv3DBackpropInputV2=function(){return(Mb=u._Conv3DBackpropInputV2=u.asm.Conv3DBackpropInputV2).apply(null,arguments)},Lb=u._Cos=function(){return(Lb=u._Cos=u.asm.Cos).apply(null,arguments)},Bb=u._Cosh=function(){return(Bb=u._Cosh=u.asm.Cosh).apply(null,arguments)},zb=u._CropAndResize=function(){return(zb=u._CropAndResize=u.asm.CropAndResize).apply(null,arguments)},Vb=u._Cumprod=function(){return(Vb=u._Cumprod=u.asm.Cumprod).apply(null,arguments)},Wb=u._Cumsum=function(){return(Wb=u._Cumsum=u.asm.Cumsum).apply(null,arguments)},Ub=u._DenseBincount=function(){return(Ub=u._DenseBincount=u.asm.DenseBincount).apply(null,arguments)},Gb=u._DepthToSpace=function(){return(Gb=u._DepthToSpace=u.asm.DepthToSpace).apply(null,arguments)},Hb=u._DepthwiseConv2dNative=function(){return(Hb=u._DepthwiseConv2dNative=u.asm.DepthwiseConv2dNative).apply(null,arguments)},Kb=u._Diag=function(){return(Kb=u._Diag=u.asm.Diag).apply(null,arguments)},qb=u._Dilation2D=function(){return(qb=u._Dilation2D=u.asm.Dilation2D).apply(null,arguments)},jb=u._Dilation2DBackpropFilter=function(){return(jb=u._Dilation2DBackpropFilter=u.asm.Dilation2DBackpropFilter).apply(null,arguments)},Xb=u._Dilation2DBackpropInput=function(){return(Xb=u._Dilation2DBackpropInput=u.asm.Dilation2DBackpropInput).apply(null,arguments)},Yb=u._Elu=function(){return(Yb=u._Elu=u.asm.Elu).apply(null,arguments)},Qb=u._EluGrad=function(){return(Qb=u._EluGrad=u.asm.EluGrad).apply(null,arguments)},Zb=u._Equal=function(){return(Zb=u._Equal=u.asm.Equal).apply(null,arguments)},Jb=u._Erf=function(){return(Jb=u._Erf=u.asm.Erf).apply(null,arguments)},eC=u._Exp=function(){return(eC=u._Exp=u.asm.Exp).apply(null,arguments)},tC=u._Expm1=function(){return(tC=u._Expm1=u.asm.Expm1).apply(null,arguments)},rC=u._FlipLeftRight=function(){return(rC=u._FlipLeftRight=u.asm.FlipLeftRight).apply(null,arguments)},oC=u._Floor=function(){return(oC=u._Floor=u.asm.Floor).apply(null,arguments)},nC=u._FloorDiv=function(){return(nC=u._FloorDiv=u.asm.FloorDiv).apply(null,arguments)},sC=u._FusedBatchNorm=function(){return(sC=u._FusedBatchNorm=u.asm.FusedBatchNorm).apply(null,arguments)},aC=u._FusedConv2D=function(){return(aC=u._FusedConv2D=u.asm.FusedConv2D).apply(null,arguments)},iC=u._FusedDepthwiseConv2D=function(){return(iC=u._FusedDepthwiseConv2D=u.asm.FusedDepthwiseConv2D).apply(null,arguments)},uC=u._Gather=function(){return(uC=u._Gather=u.asm.Gather).apply(null,arguments)},pC=u._GatherNd=function(){return(pC=u._GatherNd=u.asm.GatherNd).apply(null,arguments)},cC=u._Greater=function(){return(cC=u._Greater=u.asm.Greater).apply(null,arguments)},lC=u._GreaterEqual=function(){return(lC=u._GreaterEqual=u.asm.GreaterEqual).apply(null,arguments)},mC=u._IsFinite=function(){return(mC=u._IsFinite=u.asm.IsFinite).apply(null,arguments)},dC=u._IsInf=function(){return(dC=u._IsInf=u.asm.IsInf).apply(null,arguments)},fC=u._IsNan=function(){return(fC=u._IsNan=u.asm.IsNan).apply(null,arguments)},hC=u._LRN=function(){return(hC=u._LRN=u.asm.LRN).apply(null,arguments)},gC=u._LRNGrad=function(){return(gC=u._LRNGrad=u.asm.LRNGrad).apply(null,arguments)},xC=u._LeakyRelu=function(){return(xC=u._LeakyRelu=u.asm.LeakyRelu).apply(null,arguments)},yC=u._Less=function(){return(yC=u._Less=u.asm.Less).apply(null,arguments)},bC=u._LessEqual=function(){return(bC=u._LessEqual=u.asm.LessEqual).apply(null,arguments)},CC=u._LinSpace=function(){return(CC=u._LinSpace=u.asm.LinSpace).apply(null,arguments)},wC=u._Log=function(){return(wC=u._Log=u.asm.Log).apply(null,arguments)},SC=u._Log1p=function(){return(SC=u._Log1p=u.asm.Log1p).apply(null,arguments)},IC=u._LogicalAnd=function(){return(IC=u._LogicalAnd=u.asm.LogicalAnd).apply(null,arguments)},vC=u._LogicalNot=function(){return(vC=u._LogicalNot=u.asm.LogicalNot).apply(null,arguments)},kC=u._LogicalOr=function(){return(kC=u._LogicalOr=u.asm.LogicalOr).apply(null,arguments)},NC=u._LogicalXor=function(){return(NC=u._LogicalXor=u.asm.LogicalXor).apply(null,arguments)},TC=u._Max=function(){return(TC=u._Max=u.asm.Max).apply(null,arguments)},_C=u._MaxPool=function(){return(_C=u._MaxPool=u.asm.MaxPool).apply(null,arguments)},EC=u._MaxPool3D=function(){return(EC=u._MaxPool3D=u.asm.MaxPool3D).apply(null,arguments)},$C=u._MaxPool3DGrad=function(){return($C=u._MaxPool3DGrad=u.asm.MaxPool3DGrad).apply(null,arguments)},RC=u._MaxPoolGrad=function(){return(RC=u._MaxPoolGrad=u.asm.MaxPoolGrad).apply(null,arguments)},DC=u._MaxPoolWithArgmax=function(){return(DC=u._MaxPoolWithArgmax=u.asm.MaxPoolWithArgmax).apply(null,arguments)},AC=u._Maximum=function(){return(AC=u._Maximum=u.asm.Maximum).apply(null,arguments)},FC=u._Mean=function(){return(FC=u._Mean=u.asm.Mean).apply(null,arguments)},PC=u._Min=function(){return(PC=u._Min=u.asm.Min).apply(null,arguments)},OC=u._Minimum=function(){return(OC=u._Minimum=u.asm.Minimum).apply(null,arguments)},MC=u._MirrorPad=function(){return(MC=u._MirrorPad=u.asm.MirrorPad).apply(null,arguments)},LC=u._Mod=function(){return(LC=u._Mod=u.asm.Mod).apply(null,arguments)},BC=u._Multinomial=function(){return(BC=u._Multinomial=u.asm.Multinomial).apply(null,arguments)},zC=u._Multiply=function(){return(zC=u._Multiply=u.asm.Multiply).apply(null,arguments)},VC=u._Neg=function(){return(VC=u._Neg=u.asm.Neg).apply(null,arguments)},WC=u._NonMaxSuppressionV3=function(){return(WC=u._NonMaxSuppressionV3=u.asm.NonMaxSuppressionV3).apply(null,arguments)},UC=u._NonMaxSuppressionV4=function(){return(UC=u._NonMaxSuppressionV4=u.asm.NonMaxSuppressionV4).apply(null,arguments)},Mm=u._NonMaxSuppressionV5=function(){return(Mm=u._NonMaxSuppressionV5=u.asm.NonMaxSuppressionV5).apply(null,arguments)},Lm=u._NotEqual=function(){return(Lm=u._NotEqual=u.asm.NotEqual).apply(null,arguments)},cl=u._OneHot=function(){return(cl=u._OneHot=u.asm.OneHot).apply(null,arguments)},GC=u._PadV2=function(){return(GC=u._PadV2=u.asm.PadV2).apply(null,arguments)},HC=u._Pow=function(){return(HC=u._Pow=u.asm.Pow).apply(null,arguments)},Op=u._Prelu=function(){return(Op=u._Prelu=u.asm.Prelu).apply(null,arguments)},Bm=u._Prod=function(){return(Bm=u._Prod=u.asm.Prod).apply(null,arguments)},Mp=u._RealDiv=function(){return(Mp=u._RealDiv=u.asm.RealDiv).apply(null,arguments)},Lp=u._Reciprocal=function(){return(Lp=u._Reciprocal=u.asm.Reciprocal).apply(null,arguments)},KC=u._Relu=function(){return(KC=u._Relu=u.asm.Relu).apply(null,arguments)},K=u._Relu6=function(){return(K=u._Relu6=u.asm.Relu6).apply(null,arguments)},ae=u._ResizeBilinear=function(){return(ae=u._ResizeBilinear=u.asm.ResizeBilinear).apply(null,arguments)},Ee=u._ResizeBilinearGrad=function(){return(Ee=u._ResizeBilinearGrad=u.asm.ResizeBilinearGrad).apply(null,arguments)},at=u._ResizeNearestNeighbor=function(){return(at=u._ResizeNearestNeighbor=u.asm.ResizeNearestNeighbor).apply(null,arguments)},_t=u._ResizeNearestNeighborGrad=function(){return(_t=u._ResizeNearestNeighborGrad=u.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Et=u._Reverse=function(){return(Et=u._Reverse=u.asm.Reverse).apply(null,arguments)},Qe=u._RotateWithOffset=function(){return(Qe=u._RotateWithOffset=u.asm.RotateWithOffset).apply(null,arguments)},Ke=u._Round=function(){return(Ke=u._Round=u.asm.Round).apply(null,arguments)},Ut=u._Rsqrt=function(){return(Ut=u._Rsqrt=u.asm.Rsqrt).apply(null,arguments)},no=u._ScatterNd=function(){return(no=u._ScatterNd=u.asm.ScatterNd).apply(null,arguments)},Ga=u._SearchSorted=function(){return(Ga=u._SearchSorted=u.asm.SearchSorted).apply(null,arguments)},zm=u._SelectV2=function(){return(zm=u._SelectV2=u.asm.SelectV2).apply(null,arguments)},ll=u._Selu=function(){return(ll=u._Selu=u.asm.Selu).apply(null,arguments)},qC=u._Sigmoid=function(){return(qC=u._Sigmoid=u.asm.Sigmoid).apply(null,arguments)},yr=u._Sign=function(){return(yr=u._Sign=u.asm.Sign).apply(null,arguments)},Ti=u._Sin=function(){return(Ti=u._Sin=u.asm.Sin).apply(null,arguments)},Vm=u._Sinh=function(){return(Vm=u._Sinh=u.asm.Sinh).apply(null,arguments)},XU=u._Softmax=function(){return(XU=u._Softmax=u.asm.Softmax).apply(null,arguments)},YU=u._Softplus=function(){return(YU=u._Softplus=u.asm.Softplus).apply(null,arguments)},QU=u._SparseFillEmptyRows=function(){return(QU=u._SparseFillEmptyRows=u.asm.SparseFillEmptyRows).apply(null,arguments)},ZU=u._SparseReshape=function(){return(ZU=u._SparseReshape=u.asm.SparseReshape).apply(null,arguments)},JU=u._SparseSegmentReduction=function(){return(JU=u._SparseSegmentReduction=u.asm.SparseSegmentReduction).apply(null,arguments)},eG=u._SparseToDense=function(){return(eG=u._SparseToDense=u.asm.SparseToDense).apply(null,arguments)},tG=u._Sqrt=function(){return(tG=u._Sqrt=u.asm.Sqrt).apply(null,arguments)},rG=u._Square=function(){return(rG=u._Square=u.asm.Square).apply(null,arguments)},oG=u._SquaredDifference=function(){return(oG=u._SquaredDifference=u.asm.SquaredDifference).apply(null,arguments)},nG=u._Step=function(){return(nG=u._Step=u.asm.Step).apply(null,arguments)},sG=u._StridedSlice=function(){return(sG=u._StridedSlice=u.asm.StridedSlice).apply(null,arguments)},aG=u._Sub=function(){return(aG=u._Sub=u.asm.Sub).apply(null,arguments)},iG=u._Sum=function(){return(iG=u._Sum=u.asm.Sum).apply(null,arguments)},uG=u._Tan=function(){return(uG=u._Tan=u.asm.Tan).apply(null,arguments)},pG=u._Tanh=function(){return(pG=u._Tanh=u.asm.Tanh).apply(null,arguments)},cG=u._TensorScatterUpdate=function(){return(cG=u._TensorScatterUpdate=u.asm.TensorScatterUpdate).apply(null,arguments)},lG=u._Tile=function(){return(lG=u._Tile=u.asm.Tile).apply(null,arguments)},mG=u._TopK=function(){return(mG=u._TopK=u.asm.TopK).apply(null,arguments)},dG=u._Transform=function(){return(dG=u._Transform=u.asm.Transform).apply(null,arguments)},fG=u._Transpose=function(){return(fG=u._Transpose=u.asm.Transpose).apply(null,arguments)},hG=u.__FusedMatMul=function(){return(hG=u.__FusedMatMul=u.asm._FusedMatMul).apply(null,arguments)},gG=u._malloc=function(){return(gG=u._malloc=u.asm.malloc).apply(null,arguments)},xG=u._free=function(){return(xG=u._free=u.asm.free).apply(null,arguments)},yG=u.__emscripten_tls_init=function(){return(yG=u.__emscripten_tls_init=u.asm._emscripten_tls_init).apply(null,arguments)},Wm=u._pthread_self=function(){return(Wm=u._pthread_self=u.asm.pthread_self).apply(null,arguments)},bG=u.___errno_location=function(){return(bG=u.___errno_location=u.asm.__errno_location).apply(null,arguments)},x0=u.__emscripten_thread_init=function(){return(x0=u.__emscripten_thread_init=u.asm._emscripten_thread_init).apply(null,arguments)},CG=u.__emscripten_thread_crashed=function(){return(CG=u.__emscripten_thread_crashed=u.asm._emscripten_thread_crashed).apply(null,arguments)},wG=u._emscripten_main_thread_process_queued_calls=function(){return(wG=u._emscripten_main_thread_process_queued_calls=u.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},SG=u._emscripten_main_browser_thread_id=function(){return(SG=u._emscripten_main_browser_thread_id=u.asm.emscripten_main_browser_thread_id).apply(null,arguments)},y0=u._emscripten_run_in_main_runtime_thread_js=function(){return(y0=u._emscripten_run_in_main_runtime_thread_js=u.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IG=u._emscripten_dispatch_to_thread_=function(){return(IG=u._emscripten_dispatch_to_thread_=u.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},b0=u.__emscripten_proxy_execute_task_queue=function(){return(b0=u.__emscripten_proxy_execute_task_queue=u.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},jC=u.__emscripten_thread_free_data=function(){return(jC=u.__emscripten_thread_free_data=u.asm._emscripten_thread_free_data).apply(null,arguments)},C0=u.__emscripten_thread_exit=function(){return(C0=u.__emscripten_thread_exit=u.asm._emscripten_thread_exit).apply(null,arguments)},w0=u._emscripten_stack_set_limits=function(){return(w0=u._emscripten_stack_set_limits=u.asm.emscripten_stack_set_limits).apply(null,arguments)},XC=u.stackSave=function(){return(XC=u.stackSave=u.asm.stackSave).apply(null,arguments)},Um=u.stackRestore=function(){return(Um=u.stackRestore=u.asm.stackRestore).apply(null,arguments)},Gm=u.stackAlloc=function(){return(Gm=u.stackAlloc=u.asm.stackAlloc).apply(null,arguments)},vG=u.dynCall_iijjiiii=function(){return(vG=u.dynCall_iijjiiii=u.asm.dynCall_iijjiiii).apply(null,arguments)},kG=u.dynCall_jiji=function(){return(kG=u.dynCall_jiji=u.asm.dynCall_jiji).apply(null,arguments)};u.keepRuntimeAlive=Lo,u.wasmMemory=oe,u.cwrap=tb,u.ExitStatus=ku,u.PThread=Me;var Hm;Ua=function F(){Hm||S0(),Hm||(Ua=F)};function S0(F){if(F=F||f,ki>0)return;if(S){c(u),Xt(),startWorker(u);return}if(Ks(),ki>0)return;function V(){Hm||(Hm=!0,u.calledRun=!0,!le&&(Xt(),c(u),u.onRuntimeInitialized&&u.onRuntimeInitialized(),Wa()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),V()},1)):V()}if(u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();S0();var Km;m&&(Km={uncaughtException:process.listeners("uncaughtException").filter(function(F){return!m.uncaughtException.indexOf(F)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(F){return!m.unhandledRejection.indexOf(F)>-1})});var qm;if(typeof WasmBackendModule!="undefined")qm=WasmBackendModule;else if(typeof e!="undefined")qm=e;else throw new Error("Could not find wasm module in post.js");if(Km){var NG=qm._dispose;qm._dispose=function(){NG(),Km.uncaughtException.forEach(function(F){process.removeListener("uncaughtException",F)}),Km.unhandledRejection.forEach(function(F){process.removeListener("unhandledRejection",F)})}}return e.ready}})();typeof Wg=="object"&&typeof Gv=="object"?Gv.exports=Uv:typeof define=="function"&&define.amd?define([],function(){return Uv}):typeof Wg=="object"&&(Wg.WasmBackendModuleThreadedSimd=Uv)});var UB=Kt((e3t,WB)=>{WB.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" +");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}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)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`});var GB=Kt((Ug,Kv)=>{var Hv=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(e){e=e||{};var t=typeof e!="undefined"?e:{},o,n;t.ready=new Promise(function(K,ae){o=K,n=ae});var s;typeof process!="undefined"&&process.listeners&&(s={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var a=Object.assign({},t),i=[],p="./this.program",u=(K,ae)=>{throw ae},c=typeof window=="object",l=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",d="";function f(K){return t.locateFile?t.locateFile(K,d):d+K}var h,g,x,b;function C(K){if(K instanceof Ap)return;$("exiting due to exception: "+K)}if(m){var S=Vv(),k=Wv();l?d=k.dirname(d)+"/":d=__dirname+"/",h=(K,ae)=>(K=Ks(K)?new URL(K):k.normalize(K),S.readFileSync(K,ae?void 0:"utf8")),x=K=>{var ae=h(K,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},g=(K,ae,Ee)=>{K=Ks(K)?new URL(K):k.normalize(K),S.readFile(K,function(at,_t){at?Ee(at):ae(_t.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),i=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Ap))throw K}),process.on("unhandledRejection",function(K){throw K}),u=(K,ae)=>{if(it())throw process.exitCode=K,ae;C(ae),process.exit(K)},t.inspect=function(){return"[Emscripten Module object]"}}else(c||l)&&(l?d=self.location.href:typeof document!="undefined"&&document.currentScript&&(d=document.currentScript.src),r&&(d=r),d.indexOf("blob:")!==0?d=d.substr(0,d.replace(/[?#].*/,"").lastIndexOf("/")+1):d="",h=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.send(null),ae.responseText},l&&(x=K=>{var ae=new XMLHttpRequest;return ae.open("GET",K,!1),ae.responseType="arraybuffer",ae.send(null),new Uint8Array(ae.response)}),g=(K,ae,Ee)=>{var at=new XMLHttpRequest;at.open("GET",K,!0),at.responseType="arraybuffer",at.onload=()=>{if(at.status==200||at.status==0&&at.response){ae(at.response);return}Ee()},at.onerror=Ee,at.send(null)},b=K=>document.title=K);var _=t.print||console.log.bind(console),$=t.printErr||console.warn.bind(console);Object.assign(t,a),a=null,t.arguments&&(i=t.arguments),t.thisProgram&&(p=t.thisProgram),t.quit&&(u=t.quit);var R=4,D;t.wasmBinary&&(D=t.wasmBinary);var P=t.noExitRuntime||!0;typeof WebAssembly!="object"&&fr("no native wasm support detected");var O,M=!1,L;function B(K,ae){K||fr(ae)}var z=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function U(K,ae,Ee){ae>>>=0;for(var at=ae+Ee,_t=ae;K[_t]&&!(_t>=at);)++_t;if(_t-ae>16&&K.buffer&&z)return z.decode(K.subarray(ae,_t));for(var Et="";ae<_t;){var Qe=K[ae++];if(!(Qe&128)){Et+=String.fromCharCode(Qe);continue}var Ke=K[ae++]&63;if((Qe&224)==192){Et+=String.fromCharCode((Qe&31)<<6|Ke);continue}var Ut=K[ae++]&63;if((Qe&240)==224?Qe=(Qe&15)<<12|Ke<<6|Ut:Qe=(Qe&7)<<18|Ke<<12|Ut<<6|K[ae++]&63,Qe<65536)Et+=String.fromCharCode(Qe);else{var no=Qe-65536;Et+=String.fromCharCode(55296|no>>10,56320|no&1023)}}return Et}function j(K,ae){return K>>>=0,K?U(ne,K,ae):""}function q(K,ae,Ee,at){if(Ee>>>=0,!(at>0))return 0;for(var _t=Ee,Et=Ee+at-1,Qe=0;Qe=55296&&Ke<=57343){var Ut=K.charCodeAt(++Qe);Ke=65536+((Ke&1023)<<10)|Ut&1023}if(Ke<=127){if(Ee>=Et)break;ae[Ee++>>>0]=Ke}else if(Ke<=2047){if(Ee+1>=Et)break;ae[Ee++>>>0]=192|Ke>>6,ae[Ee++>>>0]=128|Ke&63}else if(Ke<=65535){if(Ee+2>=Et)break;ae[Ee++>>>0]=224|Ke>>12,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}else{if(Ee+3>=Et)break;ae[Ee++>>>0]=240|Ke>>18,ae[Ee++>>>0]=128|Ke>>12&63,ae[Ee++>>>0]=128|Ke>>6&63,ae[Ee++>>>0]=128|Ke&63}}return ae[Ee>>>0]=0,Ee-_t}function Y(K,ae,Ee){return q(K,ne,ae,Ee)}var J,re,ne,ee,oe,ie,le,be,_e;function ve(K){J=K,t.HEAP8=re=new Int8Array(K),t.HEAP16=ee=new Int16Array(K),t.HEAP32=ie=new Int32Array(K),t.HEAPU8=ne=new Uint8Array(K),t.HEAPU16=oe=new Uint16Array(K),t.HEAPU32=le=new Uint32Array(K),t.HEAPF32=be=new Float32Array(K),t.HEAPF64=_e=new Float64Array(K)}var Fe=t.INITIAL_MEMORY||16777216,Pe,st=[],ct=[],He=[],lt=!1;function it(){return P}function ht(){if(t.preRun)for(typeof t.preRun=="function"&&(t.preRun=[t.preRun]);t.preRun.length;)Mt(t.preRun.shift());Ua(st)}function gt(){lt=!0,Ua(ct)}function Lr(){if(t.postRun)for(typeof t.postRun=="function"&&(t.postRun=[t.postRun]);t.postRun.length;)rr(t.postRun.shift());Ua(He)}function Mt(K){st.unshift(K)}function to(K){ct.unshift(K)}function rr(K){He.unshift(K)}var Tt=0,or=null,nr=null;function ro(K){Tt++,t.monitorRunDependencies&&t.monitorRunDependencies(Tt)}function oo(K){if(Tt--,t.monitorRunDependencies&&t.monitorRunDependencies(Tt),Tt==0&&(or!==null&&(clearInterval(or),or=null),nr)){var ae=nr;nr=null,ae()}}function fr(K){t.onAbort&&t.onAbort(K),K="Aborted("+K+")",$(K),M=!0,L=1,K+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(K);throw n(ae),ae}var Va="data:application/octet-stream;base64,";function Lo(K){return K.startsWith(Va)}function Ks(K){return K.startsWith("file://")}var Xt;Xt="tfjs-backend-wasm.wasm",Lo(Xt)||(Xt=f(Xt));function Wa(K){try{if(K==Xt&&D)return new Uint8Array(D);if(x)return x(K);throw"both async and sync fetching of the wasm failed"}catch(ae){fr(ae)}}function ol(){if(!D&&(c||l)){if(typeof fetch=="function"&&!Ks(Xt))return fetch(Xt,{credentials:"same-origin"}).then(function(K){if(!K.ok)throw"failed to load wasm binary file at '"+Xt+"'";return K.arrayBuffer()}).catch(function(){return Wa(Xt)});if(g)return new Promise(function(K,ae){g(Xt,function(Ee){K(new Uint8Array(Ee))},ae)})}return Promise.resolve().then(function(){return Wa(Xt)})}function nl(){var K={env:sl,wasi_snapshot_preview1:sl};function ae(Qe,Ke){var Ut=Qe.exports;t.asm=Ut,O=t.asm.memory,ve(O.buffer),Pe=t.asm.__indirect_function_table,to(t.asm.__wasm_call_ctors),oo("wasm-instantiate")}ro("wasm-instantiate");function Ee(Qe){ae(Qe.instance)}function at(Qe){return ol().then(function(Ke){return WebAssembly.instantiate(Ke,K)}).then(function(Ke){return Ke}).then(Qe,function(Ke){$("failed to asynchronously prepare wasm: "+Ke),fr(Ke)})}function _t(){return!D&&typeof WebAssembly.instantiateStreaming=="function"&&!Lo(Xt)&&!Ks(Xt)&&!m&&typeof fetch=="function"?fetch(Xt,{credentials:"same-origin"}).then(function(Qe){var Ke=WebAssembly.instantiateStreaming(Qe,K);return Ke.then(Ee,function(Ut){return $("wasm streaming compile failed: "+Ut),$("falling back to ArrayBuffer instantiation"),at(Ee)})}):at(Ee)}if(t.instantiateWasm)try{var Et=t.instantiateWasm(K,ae);return Et}catch(Qe){$("Module.instantiateWasm callback failed with error: "+Qe),n(Qe)}return _t().catch(n),{}}var d0,ki;function Ap(K){this.name="ExitStatus",this.message="Program terminated with exit("+K+")",this.status=K}function Ua(K){for(;K.length>0;)K.shift()(t)}function Cy(){fr("")}function wm(){return 4294901760}function vu(){return wm()}function wy(K,ae,Ee){ne.copyWithin(K>>>0,ae>>>0,ae+Ee>>>0)}function Sm(K){try{return O.grow(K-J.byteLength+65535>>>16),ve(O.buffer),1}catch(ae){}}function Fp(K){var ae=ne.length;K=K>>>0;var Ee=wm();if(K>Ee)return!1;let at=(Ut,no)=>Ut+(no-Ut%no)%no;for(var _t=1;_t<=4;_t*=2){var Et=ae*(1+.2/_t);Et=Math.min(Et,K+100663296);var Qe=Math.min(Ee,at(Math.max(K,Et),65536)),Ke=Sm(Qe);if(Ke)return!0}return!1}var hr={varargs:void 0,get:function(){hr.varargs+=4;var K=ie[hr.varargs-4>>>2];return K},getStr:function(K){var ae=j(K);return ae}};function Im(K){return 52}function Sy(K,ae,Ee,at,_t){return 70}var Iy=[null,[],[]];function f0(K,ae){var Ee=Iy[K];ae===0||ae===10?((K===1?_:$)(U(Ee,0)),Ee.length=0):Ee.push(ae)}function h0(K,ae,Ee,at){for(var _t=0,Et=0;Et>>2],Ke=le[ae+4>>>2];ae+=8;for(var Ut=0;Ut>>0]);_t+=Ke}return le[at>>>2]=_t,0}function vm(K){var ae=t["_"+K];return ae}function ku(K,ae){re.set(K,ae>>>0)}function vy(K,ae,Ee,at,_t){var Et={string:yr=>{var Ti=0;if(yr!=null&&yr!==0){var Vm=(yr.length<<2)+1;Ti=cl(Vm),Y(yr,Ti,Vm)}return Ti},array:yr=>{var Ti=cl(yr.length);return ku(yr,Ti),Ti}};function Qe(yr){return ae==="string"?j(yr):ae==="boolean"?!!yr:yr}var Ke=vm(K),Ut=[],no=0;if(at)for(var Ga=0;GaQe==="number"||Qe==="boolean"),Et=ae!=="string";return Et&&_t&&!at?vm(K):function(){return vy(K,ae,Ee,arguments,at)}}var sl={abort:Cy,emscripten_get_heap_max:vu,emscripten_memcpy_big:wy,emscripten_resize_heap:Fp,fd_close:Im,fd_seek:Sy,fd_write:h0},Ny=nl(),km=t.___wasm_call_ctors=function(){return(km=t.___wasm_call_ctors=t.asm.__wasm_call_ctors).apply(null,arguments)},Nm=t._init=function(){return(Nm=t._init=t.asm.init).apply(null,arguments)},Ty=t._init_with_threads_count=function(){return(Ty=t._init_with_threads_count=t.asm.init_with_threads_count).apply(null,arguments)},Tm=t._get_threads_count=function(){return(Tm=t._get_threads_count=t.asm.get_threads_count).apply(null,arguments)},_y=t._register_tensor=function(){return(_y=t._register_tensor=t.asm.register_tensor).apply(null,arguments)},Me=t._dispose_data=function(){return(Me=t._dispose_data=t.asm.dispose_data).apply(null,arguments)},al=t._dispose=function(){return(al=t._dispose=t.asm.dispose).apply(null,arguments)},Ey=t._Abs=function(){return(Ey=t._Abs=t.asm.Abs).apply(null,arguments)},_m=t._Acos=function(){return(_m=t._Acos=t.asm.Acos).apply(null,arguments)},Pp=t._Acosh=function(){return(Pp=t._Acosh=t.asm.Acosh).apply(null,arguments)},$y=t._Add=function(){return($y=t._Add=t.asm.Add).apply(null,arguments)},Ry=t._AddN=function(){return(Ry=t._AddN=t.asm.AddN).apply(null,arguments)},Dy=t._All=function(){return(Dy=t._All=t.asm.All).apply(null,arguments)},Ay=t._Any=function(){return(Ay=t._Any=t.asm.Any).apply(null,arguments)},Fy=t._ArgMax=function(){return(Fy=t._ArgMax=t.asm.ArgMax).apply(null,arguments)},Em=t._ArgMin=function(){return(Em=t._ArgMin=t.asm.ArgMin).apply(null,arguments)},$m=t._Asin=function(){return($m=t._Asin=t.asm.Asin).apply(null,arguments)},Py=t._Asinh=function(){return(Py=t._Asinh=t.asm.Asinh).apply(null,arguments)},Oy=t._Atan=function(){return(Oy=t._Atan=t.asm.Atan).apply(null,arguments)},My=t._Atan2=function(){return(My=t._Atan2=t.asm.Atan2).apply(null,arguments)},il=t._Atanh=function(){return(il=t._Atanh=t.asm.Atanh).apply(null,arguments)},Ly=t._AvgPool=function(){return(Ly=t._AvgPool=t.asm.AvgPool).apply(null,arguments)},By=t._AvgPool3D=function(){return(By=t._AvgPool3D=t.asm.AvgPool3D).apply(null,arguments)},zy=t._AvgPool3DGrad=function(){return(zy=t._AvgPool3DGrad=t.asm.AvgPool3DGrad).apply(null,arguments)},Nu=t._AvgPoolGrad=function(){return(Nu=t._AvgPoolGrad=t.asm.AvgPoolGrad).apply(null,arguments)},Vy=t._BatchMatMul=function(){return(Vy=t._BatchMatMul=t.asm.BatchMatMul).apply(null,arguments)},Wy=t._Bincount=function(){return(Wy=t._Bincount=t.asm.Bincount).apply(null,arguments)},Rm=t._BitwiseAnd=function(){return(Rm=t._BitwiseAnd=t.asm.BitwiseAnd).apply(null,arguments)},Uy=t._Ceil=function(){return(Uy=t._Ceil=t.asm.Ceil).apply(null,arguments)},ul=t._ClipByValue=function(){return(ul=t._ClipByValue=t.asm.ClipByValue).apply(null,arguments)},Gy=t._Conv2D=function(){return(Gy=t._Conv2D=t.asm.Conv2D).apply(null,arguments)},Hy=t._Conv2DBackpropInput=function(){return(Hy=t._Conv2DBackpropInput=t.asm.Conv2DBackpropInput).apply(null,arguments)},Ky=t._Conv3D=function(){return(Ky=t._Conv3D=t.asm.Conv3D).apply(null,arguments)},Ni=t._Conv3DBackpropFilterV2=function(){return(Ni=t._Conv3DBackpropFilterV2=t.asm.Conv3DBackpropFilterV2).apply(null,arguments)},pl=t._Conv3DBackpropInputV2=function(){return(pl=t._Conv3DBackpropInputV2=t.asm.Conv3DBackpropInputV2).apply(null,arguments)},qy=t._Cos=function(){return(qy=t._Cos=t.asm.Cos).apply(null,arguments)},jy=t._Cosh=function(){return(jy=t._Cosh=t.asm.Cosh).apply(null,arguments)},Xy=t._CropAndResize=function(){return(Xy=t._CropAndResize=t.asm.CropAndResize).apply(null,arguments)},Yy=t._Cumprod=function(){return(Yy=t._Cumprod=t.asm.Cumprod).apply(null,arguments)},Dm=t._Cumsum=function(){return(Dm=t._Cumsum=t.asm.Cumsum).apply(null,arguments)},Am=t._DenseBincount=function(){return(Am=t._DenseBincount=t.asm.DenseBincount).apply(null,arguments)},Qy=t._DepthToSpace=function(){return(Qy=t._DepthToSpace=t.asm.DepthToSpace).apply(null,arguments)},Zy=t._DepthwiseConv2dNative=function(){return(Zy=t._DepthwiseConv2dNative=t.asm.DepthwiseConv2dNative).apply(null,arguments)},Fm=t._Diag=function(){return(Fm=t._Diag=t.asm.Diag).apply(null,arguments)},Pm=t._Dilation2D=function(){return(Pm=t._Dilation2D=t.asm.Dilation2D).apply(null,arguments)},Jy=t._Dilation2DBackpropFilter=function(){return(Jy=t._Dilation2DBackpropFilter=t.asm.Dilation2DBackpropFilter).apply(null,arguments)},eb=t._Dilation2DBackpropInput=function(){return(eb=t._Dilation2DBackpropInput=t.asm.Dilation2DBackpropInput).apply(null,arguments)},tb=t._Elu=function(){return(tb=t._Elu=t.asm.Elu).apply(null,arguments)},rb=t._EluGrad=function(){return(rb=t._EluGrad=t.asm.EluGrad).apply(null,arguments)},Om=t._Equal=function(){return(Om=t._Equal=t.asm.Equal).apply(null,arguments)},g0=t._Erf=function(){return(g0=t._Erf=t.asm.Erf).apply(null,arguments)},ob=t._Exp=function(){return(ob=t._Exp=t.asm.Exp).apply(null,arguments)},nb=t._Expm1=function(){return(nb=t._Expm1=t.asm.Expm1).apply(null,arguments)},sb=t._FlipLeftRight=function(){return(sb=t._FlipLeftRight=t.asm.FlipLeftRight).apply(null,arguments)},ab=t._Floor=function(){return(ab=t._Floor=t.asm.Floor).apply(null,arguments)},ib=t._FloorDiv=function(){return(ib=t._FloorDiv=t.asm.FloorDiv).apply(null,arguments)},ub=t._FusedBatchNorm=function(){return(ub=t._FusedBatchNorm=t.asm.FusedBatchNorm).apply(null,arguments)},pb=t._FusedConv2D=function(){return(pb=t._FusedConv2D=t.asm.FusedConv2D).apply(null,arguments)},cb=t._FusedDepthwiseConv2D=function(){return(cb=t._FusedDepthwiseConv2D=t.asm.FusedDepthwiseConv2D).apply(null,arguments)},lb=t._Gather=function(){return(lb=t._Gather=t.asm.Gather).apply(null,arguments)},mb=t._GatherNd=function(){return(mb=t._GatherNd=t.asm.GatherNd).apply(null,arguments)},db=t._Greater=function(){return(db=t._Greater=t.asm.Greater).apply(null,arguments)},fb=t._GreaterEqual=function(){return(fb=t._GreaterEqual=t.asm.GreaterEqual).apply(null,arguments)},hb=t._IsFinite=function(){return(hb=t._IsFinite=t.asm.IsFinite).apply(null,arguments)},gb=t._IsInf=function(){return(gb=t._IsInf=t.asm.IsInf).apply(null,arguments)},xb=t._IsNan=function(){return(xb=t._IsNan=t.asm.IsNan).apply(null,arguments)},yb=t._LRN=function(){return(yb=t._LRN=t.asm.LRN).apply(null,arguments)},bb=t._LRNGrad=function(){return(bb=t._LRNGrad=t.asm.LRNGrad).apply(null,arguments)},Cb=t._LeakyRelu=function(){return(Cb=t._LeakyRelu=t.asm.LeakyRelu).apply(null,arguments)},wb=t._Less=function(){return(wb=t._Less=t.asm.Less).apply(null,arguments)},Sb=t._LessEqual=function(){return(Sb=t._LessEqual=t.asm.LessEqual).apply(null,arguments)},Ib=t._LinSpace=function(){return(Ib=t._LinSpace=t.asm.LinSpace).apply(null,arguments)},vb=t._Log=function(){return(vb=t._Log=t.asm.Log).apply(null,arguments)},kb=t._Log1p=function(){return(kb=t._Log1p=t.asm.Log1p).apply(null,arguments)},Nb=t._LogicalAnd=function(){return(Nb=t._LogicalAnd=t.asm.LogicalAnd).apply(null,arguments)},Tb=t._LogicalNot=function(){return(Tb=t._LogicalNot=t.asm.LogicalNot).apply(null,arguments)},_b=t._LogicalOr=function(){return(_b=t._LogicalOr=t.asm.LogicalOr).apply(null,arguments)},Eb=t._LogicalXor=function(){return(Eb=t._LogicalXor=t.asm.LogicalXor).apply(null,arguments)},$b=t._Max=function(){return($b=t._Max=t.asm.Max).apply(null,arguments)},Rb=t._MaxPool=function(){return(Rb=t._MaxPool=t.asm.MaxPool).apply(null,arguments)},Db=t._MaxPool3D=function(){return(Db=t._MaxPool3D=t.asm.MaxPool3D).apply(null,arguments)},Ab=t._MaxPool3DGrad=function(){return(Ab=t._MaxPool3DGrad=t.asm.MaxPool3DGrad).apply(null,arguments)},Fb=t._MaxPoolGrad=function(){return(Fb=t._MaxPoolGrad=t.asm.MaxPoolGrad).apply(null,arguments)},Pb=t._MaxPoolWithArgmax=function(){return(Pb=t._MaxPoolWithArgmax=t.asm.MaxPoolWithArgmax).apply(null,arguments)},Ob=t._Maximum=function(){return(Ob=t._Maximum=t.asm.Maximum).apply(null,arguments)},Mb=t._Mean=function(){return(Mb=t._Mean=t.asm.Mean).apply(null,arguments)},Lb=t._Min=function(){return(Lb=t._Min=t.asm.Min).apply(null,arguments)},Bb=t._Minimum=function(){return(Bb=t._Minimum=t.asm.Minimum).apply(null,arguments)},zb=t._MirrorPad=function(){return(zb=t._MirrorPad=t.asm.MirrorPad).apply(null,arguments)},Vb=t._Mod=function(){return(Vb=t._Mod=t.asm.Mod).apply(null,arguments)},Wb=t._Multinomial=function(){return(Wb=t._Multinomial=t.asm.Multinomial).apply(null,arguments)},Ub=t._Multiply=function(){return(Ub=t._Multiply=t.asm.Multiply).apply(null,arguments)},Gb=t._Neg=function(){return(Gb=t._Neg=t.asm.Neg).apply(null,arguments)},Hb=t._NonMaxSuppressionV3=function(){return(Hb=t._NonMaxSuppressionV3=t.asm.NonMaxSuppressionV3).apply(null,arguments)},Kb=t._NonMaxSuppressionV4=function(){return(Kb=t._NonMaxSuppressionV4=t.asm.NonMaxSuppressionV4).apply(null,arguments)},qb=t._NonMaxSuppressionV5=function(){return(qb=t._NonMaxSuppressionV5=t.asm.NonMaxSuppressionV5).apply(null,arguments)},jb=t._NotEqual=function(){return(jb=t._NotEqual=t.asm.NotEqual).apply(null,arguments)},Xb=t._OneHot=function(){return(Xb=t._OneHot=t.asm.OneHot).apply(null,arguments)},Yb=t._PadV2=function(){return(Yb=t._PadV2=t.asm.PadV2).apply(null,arguments)},Qb=t._Pow=function(){return(Qb=t._Pow=t.asm.Pow).apply(null,arguments)},Zb=t._Prelu=function(){return(Zb=t._Prelu=t.asm.Prelu).apply(null,arguments)},Jb=t._Prod=function(){return(Jb=t._Prod=t.asm.Prod).apply(null,arguments)},eC=t._RealDiv=function(){return(eC=t._RealDiv=t.asm.RealDiv).apply(null,arguments)},tC=t._Reciprocal=function(){return(tC=t._Reciprocal=t.asm.Reciprocal).apply(null,arguments)},rC=t._Relu=function(){return(rC=t._Relu=t.asm.Relu).apply(null,arguments)},oC=t._Relu6=function(){return(oC=t._Relu6=t.asm.Relu6).apply(null,arguments)},nC=t._ResizeBilinear=function(){return(nC=t._ResizeBilinear=t.asm.ResizeBilinear).apply(null,arguments)},sC=t._ResizeBilinearGrad=function(){return(sC=t._ResizeBilinearGrad=t.asm.ResizeBilinearGrad).apply(null,arguments)},aC=t._ResizeNearestNeighbor=function(){return(aC=t._ResizeNearestNeighbor=t.asm.ResizeNearestNeighbor).apply(null,arguments)},iC=t._ResizeNearestNeighborGrad=function(){return(iC=t._ResizeNearestNeighborGrad=t.asm.ResizeNearestNeighborGrad).apply(null,arguments)},uC=t._Reverse=function(){return(uC=t._Reverse=t.asm.Reverse).apply(null,arguments)},pC=t._RotateWithOffset=function(){return(pC=t._RotateWithOffset=t.asm.RotateWithOffset).apply(null,arguments)},cC=t._Round=function(){return(cC=t._Round=t.asm.Round).apply(null,arguments)},lC=t._Rsqrt=function(){return(lC=t._Rsqrt=t.asm.Rsqrt).apply(null,arguments)},mC=t._ScatterNd=function(){return(mC=t._ScatterNd=t.asm.ScatterNd).apply(null,arguments)},dC=t._SearchSorted=function(){return(dC=t._SearchSorted=t.asm.SearchSorted).apply(null,arguments)},fC=t._SelectV2=function(){return(fC=t._SelectV2=t.asm.SelectV2).apply(null,arguments)},hC=t._Selu=function(){return(hC=t._Selu=t.asm.Selu).apply(null,arguments)},gC=t._Sigmoid=function(){return(gC=t._Sigmoid=t.asm.Sigmoid).apply(null,arguments)},xC=t._Sign=function(){return(xC=t._Sign=t.asm.Sign).apply(null,arguments)},yC=t._Sin=function(){return(yC=t._Sin=t.asm.Sin).apply(null,arguments)},bC=t._Sinh=function(){return(bC=t._Sinh=t.asm.Sinh).apply(null,arguments)},CC=t._Softmax=function(){return(CC=t._Softmax=t.asm.Softmax).apply(null,arguments)},wC=t._Softplus=function(){return(wC=t._Softplus=t.asm.Softplus).apply(null,arguments)},SC=t._SparseFillEmptyRows=function(){return(SC=t._SparseFillEmptyRows=t.asm.SparseFillEmptyRows).apply(null,arguments)},IC=t._SparseReshape=function(){return(IC=t._SparseReshape=t.asm.SparseReshape).apply(null,arguments)},vC=t._SparseSegmentReduction=function(){return(vC=t._SparseSegmentReduction=t.asm.SparseSegmentReduction).apply(null,arguments)},kC=t._SparseToDense=function(){return(kC=t._SparseToDense=t.asm.SparseToDense).apply(null,arguments)},NC=t._Sqrt=function(){return(NC=t._Sqrt=t.asm.Sqrt).apply(null,arguments)},TC=t._Square=function(){return(TC=t._Square=t.asm.Square).apply(null,arguments)},_C=t._SquaredDifference=function(){return(_C=t._SquaredDifference=t.asm.SquaredDifference).apply(null,arguments)},EC=t._Step=function(){return(EC=t._Step=t.asm.Step).apply(null,arguments)},$C=t._StridedSlice=function(){return($C=t._StridedSlice=t.asm.StridedSlice).apply(null,arguments)},RC=t._Sub=function(){return(RC=t._Sub=t.asm.Sub).apply(null,arguments)},DC=t._Sum=function(){return(DC=t._Sum=t.asm.Sum).apply(null,arguments)},AC=t._Tan=function(){return(AC=t._Tan=t.asm.Tan).apply(null,arguments)},FC=t._Tanh=function(){return(FC=t._Tanh=t.asm.Tanh).apply(null,arguments)},PC=t._TensorScatterUpdate=function(){return(PC=t._TensorScatterUpdate=t.asm.TensorScatterUpdate).apply(null,arguments)},OC=t._Tile=function(){return(OC=t._Tile=t.asm.Tile).apply(null,arguments)},MC=t._TopK=function(){return(MC=t._TopK=t.asm.TopK).apply(null,arguments)},LC=t._Transform=function(){return(LC=t._Transform=t.asm.Transform).apply(null,arguments)},BC=t._Transpose=function(){return(BC=t._Transpose=t.asm.Transpose).apply(null,arguments)},zC=t.__FusedMatMul=function(){return(zC=t.__FusedMatMul=t.asm._FusedMatMul).apply(null,arguments)},VC=t._malloc=function(){return(VC=t._malloc=t.asm.malloc).apply(null,arguments)},WC=t._free=function(){return(WC=t._free=t.asm.free).apply(null,arguments)},UC=t.___errno_location=function(){return(UC=t.___errno_location=t.asm.__errno_location).apply(null,arguments)},Mm=t.stackSave=function(){return(Mm=t.stackSave=t.asm.stackSave).apply(null,arguments)},Lm=t.stackRestore=function(){return(Lm=t.stackRestore=t.asm.stackRestore).apply(null,arguments)},cl=t.stackAlloc=function(){return(cl=t.stackAlloc=t.asm.stackAlloc).apply(null,arguments)},GC=t.dynCall_iijjiiii=function(){return(GC=t.dynCall_iijjiiii=t.asm.dynCall_iijjiiii).apply(null,arguments)},HC=t.dynCall_jiji=function(){return(HC=t.dynCall_jiji=t.asm.dynCall_jiji).apply(null,arguments)};t.cwrap=ky;var Op;nr=function K(){Op||Bm(),Op||(nr=K)};function Bm(K){if(K=K||i,Tt>0||(ht(),Tt>0))return;function ae(){Op||(Op=!0,t.calledRun=!0,!M&&(gt(),o(t),t.onRuntimeInitialized&&t.onRuntimeInitialized(),Lr()))}t.setStatus?(t.setStatus("Running..."),setTimeout(function(){setTimeout(function(){t.setStatus("")},1),ae()},1)):ae()}if(t.preInit)for(typeof t.preInit=="function"&&(t.preInit=[t.preInit]);t.preInit.length>0;)t.preInit.pop()();Bm();var Mp;s&&(Mp={uncaughtException:process.listeners("uncaughtException").filter(function(K){return!s.uncaughtException.indexOf(K)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(K){return!s.unhandledRejection.indexOf(K)>-1})});var Lp;if(typeof e!="undefined")Lp=e;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Lp=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Mp){var KC=Lp._dispose;Lp._dispose=function(){KC(),Mp.uncaughtException.forEach(function(K){process.removeListener("uncaughtException",K)}),Mp.unhandledRejection.forEach(function(K){process.removeListener("unhandledRejection",K)})}}return e.ready}})();typeof Ug=="object"&&typeof Kv=="object"?Kv.exports=Hv:typeof define=="function"&&define.amd?define([],function(){return Hv}):typeof Ug=="object"&&(Ug.WasmBackendModule=Hv)});var Bo=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}},ao=class{refCount(e){return zr("refCount")}incRef(e){return zr("incRef")}timerAvailable(){return!0}time(e){return zr("time")}read(e){return zr("read")}readSync(e){return zr("readSync")}readToGPU(e,t){return zr("readToGPU")}numDataIds(){return zr("numDataIds")}disposeData(e,t){return zr("disposeData")}write(e,t,o){return zr("write")}move(e,t,o,n,s){return zr("move")}createTensorFromGPUData(e,t,o){return zr("createTensorFromGPUData")}memory(){return zr("memory")}floatPrecision(){return zr("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return zr("dispose")}};function zr(r){throw new Error(`'${r}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function k0(r){let e=r.length,t=0;for(;e>0;)t=Math.random()*e|0,e--,jm(r,e,t)}function FG(r,e){if(r.length!==e.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${r.length}Second array length was ${e.length}`);let t=r.length,o=0;for(;t>0;)o=Math.random()*t|0,t--,jm(r,t,o),jm(e,t,o)}function Vp(r,e,t){return Math.max(r,Math.min(e,t))}function PG(r){return r%2===0?r:r+1}function jm(r,e,t){let o=r[e];r[e]=r[t],r[t]=o}function OG(r){let e=0;for(let t=0;tt+` Shapes ${r} and ${e} must match`)}function io(r){E(r!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ze(r){if(r.length===0)return 1;let e=r[0];for(let t=1;t0,t,o){return new Promise((n,s)=>{let a=0,i=()=>{if(r()){n();return}a++;let p=e(a);if(t!=null&&a>=t){s();return}o!=null?o(i,p):setTimeout(i,p)};i()})}function GG(r,e){let t=1,o=-1;for(let s=0;s=0)t*=r[s];else if(r[s]===-1){if(o!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${o} and dim ${s}`);o=s}else if(r[s]<0)throw Error(`Shapes can not be < 0. Found ${r[s]} at dim ${s}`);if(o===-1){if(e>0&&e!==t)throw Error(`Size(${e}) must match the product of shape ${r}`);return r}if(t===0)throw Error(`Cannot infer the missing size in [${r}] when there are 0 elements`);if(e%t!==0)throw Error(`The implicit shape can't be a fractional number. Got ${e} / ${t}`);let n=r.slice();return n[o]=e/t,n}function _i(r,e){let t=e.length;return r=r==null?e.map((o,n)=>n):[].concat(r),E(r.every(o=>o>=-t&&o`All values in axis param must be in range [-${t}, ${t}) but got axis ${r}`),E(r.every(o=>Ka(o)),()=>`All values in axis param must be integers but got axis ${r}`),r.map(o=>o<0?t+o:o)}function JC(r,e){let t=[],o=[],n=e!=null&&Array.isArray(e)&&e.length===0,s=e==null||n?null:_i(e,r).sort(),a=0;for(let i=0;ii)&&r[i]===1&&(t.push(r[i]),o.push(i)),s[a]<=i&&a++}r[i]!==1&&(t.push(r[i]),o.push(i))}return{newShape:t,keptDims:o}}function ew(r,e){return Xm(r,e)}function Xm(r,e){let t=null;if(r==null||r==="float32")t=new Float32Array(e);else if(r==="int32")t=new Int32Array(e);else if(r==="bool")t=new Uint8Array(e);else if(r==="string")t=new Array(e);else throw new Error(`Unknown data type ${r}`);return t}function tw(r,e){for(let t=0;te+=t.length),e}function zo(r){return typeof r=="string"||r instanceof String}function N0(r){return typeof r=="boolean"}function T0(r){return typeof r=="number"}function Ei(r){return Array.isArray(r)?Ei(r[0]):r instanceof Float32Array?"float32":r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray?"int32":T0(r)?"float32":zo(r)?"string":N0(r)?"bool":"float32"}function qs(r){return!!(r&&r.constructor&&r.call&&r.apply)}function Up(r,e){for(let t=e;t=0;--o)t[o]=t[o+1]*r[o+1];return t}function _0(r,e,t,o=!1){let n=new Array;if(e.length===1){let s=e[0]*(o?2:1);for(let a=0;ap*u)*(o?2:1);for(let p=0;pn*s)*(t?2:1);if(o===0)return[];if(o!==e.length)throw new Error(`[${r}] does not match the input size ${e.length}${t?" for a complex tensor":""}.`);return _0(0,r,e,t)}function KG(r,e){if(Array.isArray(r))return r;if(e==="float32")return r instanceof Float32Array?r:new Float32Array(r);if(e==="int32")return r instanceof Int32Array?r:new Int32Array(r);if(e==="bool"||e==="string")return Uint8Array.from(new Int32Array(r));throw new Error(`Unknown dtype ${e}`)}function ml(r,e){let t=Gp(r,e);for(let o=0;oo*n,1);if(e==null||e==="float32")return Tu(r,new Float32Array(t));if(e==="int32")return Tu(r,new Int32Array(t));if(e==="bool")return Tu(r,new Uint8Array(t));throw new Error(`Unknown data type ${e}`)}function Ct(r){r.forEach(e=>{E(Number.isInteger(e)&&e>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${r}].`)})}function jG(r,e,t){if(e===0)return 0;if(e===1)return r[0];let o=r[r.length-1];for(let n=0;n{let[n,s]=o.split(":");this.urlFlags[n]=JG(n,s)})}};function QG(r){let e={};return r.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(t,...o)=>(ZG(e,o[0],o[1]),o.join("="))),e}function ZG(r,e,t){r[decodeURIComponent(e)]=decodeURIComponent(t||"")}function JG(r,e){let t=e.toLowerCase();return t==="true"||t==="false"?t==="true":`${+t}`===t?+t:e}function A(){return nw}var nw=null;function $0(r){nw=r}var sw;function aw(){if(sw==null){let r;if(typeof window!="undefined")r=window;else if(typeof global!="undefined")r=global;else if(typeof process!="undefined")r=process;else if(typeof self!="undefined")r=self;else throw new Error("Could not find a global object");sw=r}return sw}function e4(){let r=aw();return r._tfGlobals==null&&(r._tfGlobals=new Map),r._tfGlobals}function fl(r,e){let t=e4();if(t.has(r))return t.get(r);{let o=e();return t.set(r,o),t.get(r)}}var Xs="Abs",Vo="Acos",Wo="Acosh",uo="Add",Uo="AddN",Go="All",Ho="Any",Ys="ArgMax",Qs="ArgMin",Ko="Asin",qo="Asinh",jo="Atan",Xo="Atanh",Yo="Atan2",Qo="AvgPool",$i="AvgPoolGrad",Zs="AvgPool3D",Ri="AvgPool3DGrad",Zo="BatchMatMul",Js="BatchToSpaceND",Jo="Bincount",qa="BitwiseAnd",qce="BroadcastTo",ea="BroadcastArgs",yo="Cast",en="Ceil",bo="ClipByValue",Di="Complex",Ai="ComplexAbs",ta="Concat",tn="Conv2D",Fi="Conv2DBackpropFilter",rn="Conv2DBackpropInput",on="Conv3D",ja="Conv3DBackpropFilterV2",nn="Conv3DBackpropInputV2",sn="Cos",an="Cosh",un="Cumprod",pn="Cumsum",cn="CropAndResize",ra="DenseBincount",ln="DepthToSpace",mn="DepthwiseConv2dNative",Pi="DepthwiseConv2dNativeBackpropFilter",Oi="DepthwiseConv2dNativeBackpropInput",oa="Diag",dn="Dilation2D",Mi="Dilation2DBackpropInput",Li="Dilation2DBackpropFilter",$u="Draw",fn="RealDiv",Bi="Einsum",hn="Elu",Xa="EluGrad",gn="Erf",xn="Equal",yn="Exp",na="ExpandDims",bn="Expm1",zi="FFT",sa="Fill",Cn="FlipLeftRight",wn="Floor",Sn="FloorDiv",In="FusedBatchNorm",aa="GatherV2",vn="GatherNd",kn="Greater",Nn="GreaterEqual",Co="Identity",Vi="IFFT",Wi="Imag",Tn="IsFinite",_n="IsInf",En="IsNan",$n="LeakyRelu",Rn="Less",Dn="LessEqual",An="LinSpace",Fn="Log",Pn="Log1p",On="LogicalAnd",Mn="LogicalNot",Ln="LogicalOr",R0="LogicalXor",jce="LogSoftmax",Xce="LowerBound",Bn="LRN",Ya="LRNGrad",Yce="MatrixBandPart",zn="Max",Vn="Maximum",Wn="MaxPool",Ui="MaxPoolGrad",ia="MaxPool3D",Gi="MaxPool3DGrad",ua="MaxPoolWithArgmax",Un="Mean",Gn="Min",Hn="Minimum",Kn="MirrorPad",qn="Mod",jn="Multinomial",Xn="Multiply",pa="Neg",Yn="NotEqual",Qn="NonMaxSuppressionV3",Qa="NonMaxSuppressionV4",Zn="NonMaxSuppressionV5",ca="OnesLike",Jn="OneHot",la="Pack",es="PadV2",Qce="Pool",ts="Pow",rs="Prelu",os="Prod",Hp="RaggedGather",Kp="RaggedRange",qp="RaggedTensorToTensor",ma="Range",Hi="Real",ns="Reciprocal",ss="Relu",da="Reshape",as="ResizeNearestNeighbor",Za="ResizeNearestNeighborGrad",is="ResizeBilinear",Ja="ResizeBilinearGrad",us="Relu6",ps="Reverse",cs="Round",ls="Rsqrt",ms="ScatterNd",ds="TensorScatterUpdate",fs="SearchSorted",fa="Select",hs="Selu",ha="Slice",gs="Sin",xs="Sinh",ys="Sign",bs="Sigmoid",Cs="Softplus",ws="Sqrt",Ss="Sum",ga="SpaceToBatchND",xa="SplitV",Is="Softmax",Ki="SparseFillEmptyRows",ei="SparseReshape",ya="SparseSegmentMean",ba="SparseSegmentSum",vs="SparseToDense",ks="SquaredDifference",qi="Square",Ru="StaticRegexReplace",Ns="StridedSlice",Ca="StringNGrams",ji="StringSplit",Xi="StringToHashBucketFast",Ts="Sub",_s="Tan",Es="Tanh",po="Tile",$s="TopK",Rs="Transform",co="Transpose",Yi="Unique",wa="Unpack",Qi="UnsortedSegmentSum",Zce="UpperBound",Sa="ZerosLike",wo="Step",Du="FromPixels",Ds="RotateWithOffset",So="_FusedMatMul",Io="FusedConv2D",vo="FusedDepthwiseConv2D";function Ia(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.warn(...r)}function t4(...r){A().getBool("IS_TEST")||A().getBool("PROD")||console.log(...r)}var jp=fl("kernelRegistry",()=>new Map),hl=fl("gradRegistry",()=>new Map);function Xp(r,e){let t=uw(r,e);return jp.get(t)}function iw(r){return hl.get(r)}function Ym(r){let e=jp.entries(),t=[];for(;;){let{done:o,value:n}=e.next();if(o)break;let[s,a]=n,[i]=s.split("_");i===r&&t.push(a)}return t}function ti(r){let{kernelName:e,backendName:t}=r,o=uw(e,t);jp.has(o)&&Ia(`The kernel '${e}' for backend '${t}' is already registered`),jp.set(o,r)}function ole(r){let{kernelName:e}=r;hl.has(e)&&A().getBool("DEBUG")&&Ia(`Overriding the gradient for '${e}'`),hl.set(e,r)}function nle(r,e){let t=uw(r,e);if(!jp.has(t))throw new Error(`The kernel '${r}' for backend '${e}' is not registered`);jp.delete(t)}function sle(r){if(!hl.has(r))throw new Error(`The gradient '${r}' for backend is not registered`);hl.delete(r)}function ale(r,e){Ym(r).forEach(o=>{let n=Object.assign({},o,{backendName:e});ti(n)})}function uw(r,e){return`${e}_${r}`}var y={};qe(y,{arraysEqual:()=>br,arraysEqualWithNull:()=>ZC,assert:()=>E,assertNonNegativeIntegerDimensions:()=>Ct,assertNonNull:()=>io,assertShapesMatch:()=>xt,bytesFromStringArray:()=>ow,bytesPerElement:()=>Wp,checkConversionForErrors:()=>tw,clamp:()=>Vp,computeStrides:()=>js,convertBackendValuesAndArrayBuffer:()=>KG,createScalarValue:()=>u4,createShuffledIndices:()=>WG,decodeString:()=>Jp,distSquared:()=>LG,encodeString:()=>Ji,fetch:()=>c4,fingerPrint64:()=>i4,flatten:()=>Fs,getArrayFromDType:()=>Xm,getTypedArrayFromDType:()=>ew,hasEncodingLoss:()=>HG,hexToLong:()=>gl,indexToLoc:()=>XG,inferDtype:()=>Ei,inferFromImplicitShape:()=>GG,isBoolean:()=>N0,isFunction:()=>qs,isInt:()=>Ka,isNumber:()=>T0,isPromise:()=>Eu,isScalarShape:()=>BG,isString:()=>zo,isTypedArray:()=>Pt,isValidDtype:()=>rw,locToIndex:()=>jG,makeOnesTypedArray:()=>ml,makeZerosNestedTypedArray:()=>qG,makeZerosTypedArray:()=>Gp,nearestDivisor:()=>Up,nearestLargerEven:()=>PG,now:()=>Mu,parseAxisParam:()=>_i,randUniform:()=>MG,repeatedTry:()=>UG,rightPad:()=>_u,shuffle:()=>k0,shuffleCombo:()=>FG,sizeFromShape:()=>ze,sizeToSquarishShape:()=>VG,squeezeShape:()=>JC,sum:()=>OG,swap:()=>jm,tanh:()=>zG,toNestedArray:()=>Tu,toTypedArray:()=>Zp});function Qm(r){return r instanceof Float32Array||r instanceof Int32Array||r instanceof Uint8Array||r instanceof Uint8ClampedArray}var mw=zp(U0());var Ou=mw.default||mw;function gl(r){return Ou.fromString(r,!0,16)}var H0=gl("c3a5c85c97cb3127"),Pu=gl("b492b66fbe98f273"),Cr=gl("9ae16a3b2f90404f");function lw(r){return r.xor(r.shru(47))}function K0(r,e,t){let o=r.slice(e,e+t);return Ou.fromBytes(Array.from(o),!0,!0)}function wt(r,e){return K0(r,e,8)}function G0(r,e){return K0(r,e,4)}function Yt(r,e){return e===0?r:r.shru(e).or(r.shl(64-e))}function Zi(r,e,t=gl("9ddfea08eb382d69")){let o=r.xor(e).mul(t);o=o.xor(o.shru(47));let n=e.xor(o).mul(t);return n=n.xor(n.shru(47)),n=n.mul(t),n}function o4(r,e,t,o,n,s){n=n.add(r),s=Yt(s.add(n).add(o),21);let a=n;return n=n.add(e),n=n.add(t),s=s.add(Yt(n,44)),[n.add(o),s.add(a)]}function Jm(r,e,t,o){return o4(wt(r,e),wt(r,e+8),wt(r,e+16),wt(r,e+24),t,o)}function n4(r,e=r.length){if(e>=8){let t=Cr.add(e*2),o=wt(r,0).add(Cr),n=wt(r,e-8),s=Yt(n,37).mul(t).add(o),a=Yt(o,25).add(n).mul(t);return Zi(s,a,t)}if(e>=4){let t=Cr.add(e*2),o=G0(r,0);return Zi(o.shl(3).add(e),G0(r,e-4),t)}if(e>0){let t=r[0],o=r[e>>1],n=r[e-1],s=t+(o<<8),a=e+(n<<2);return lw(Cr.mul(s).xor(H0.mul(a))).mul(Cr)}return Cr}function s4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Pu),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr);return Zi(Yt(o.add(n),43).add(Yt(s,30)).add(a),o.add(Yt(n.add(Cr),18)).add(s),t)}function a4(r,e=r.length){let t=Cr.add(e*2),o=wt(r,0).mul(Cr),n=wt(r,8),s=wt(r,e-8).mul(t),a=wt(r,e-16).mul(Cr),i=Yt(o.add(n),43).add(Yt(s,30)).add(a),p=Zi(i,o.add(Yt(n.add(Cr),18)).add(s),t),u=wt(r,16).mul(t),c=wt(r,24),l=i.add(wt(r,e-32)).mul(t),m=p.add(wt(r,e-24)).mul(t);return Zi(Yt(u.add(c),43).add(Yt(l,30)).add(m),u.add(Yt(c.add(o),18)).add(l),t)}function i4(r,e=r.length){let t=Ou.fromNumber(81,!0);if(e<=32)return e<=16?n4(r,e):s4(r,e);if(e<=64)return a4(r,e);let o=t,n=t.mul(Pu).add(113),s=lw(n.mul(Cr).add(113)).mul(Cr),a=[Ou.UZERO,Ou.UZERO],i=[Ou.UZERO,Ou.UZERO];o=o.mul(Cr).add(wt(r,0));let p=0,u=(e-1>>6)*64,c=u+(e-1&63)-63;do o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(Pu),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(Pu),o=o.xor(i[1]),n=n.add(a[0]).add(wt(r,p+40)),s=Yt(s.add(i[0]),33).mul(Pu),a=Jm(r,p,a[1].mul(Pu),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],p+=64;while(p!==u);let l=Pu.add(s.and(255).shl(1));return p=c,i[0]=i[0].add(e-1&63),a[0]=a[0].add(i[0]),i[0]=i[0].add(a[0]),o=Yt(o.add(n).add(a[0]).add(wt(r,p+8)),37).mul(l),n=Yt(n.add(a[1]).add(wt(r,p+48)),42).mul(l),o=o.xor(i[1].mul(9)),n=n.add(a[0].mul(9).add(wt(r,p+40))),s=Yt(s.add(i[0]),33).mul(l),a=Jm(r,p,a[1].mul(l),o.add(i[0])),i=Jm(r,p+32,s.add(i[1]),n.add(wt(r,p+16))),[s,o]=[o,s],Zi(Zi(a[0],i[0],l).add(lw(n).mul(H0)).add(s),Zi(a[1],i[1],l).add(o),l)}function u4(r,e){return e==="string"?Ji(r):Zp([r],e)}function p4(r,e){return r instanceof Float32Array&&e==="float32"||r instanceof Int32Array&&e==="int32"||r instanceof Uint8Array&&e==="bool"}function Zp(r,e){if(e==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(r)&&(r=Fs(r)),A().getBool("DEBUG")&&tw(r,e),p4(r,e))return r;if(e==null||e==="float32"||e==="complex64")return new Float32Array(r);if(e==="int32")return new Int32Array(r);if(e==="bool"){let t=new Uint8Array(r.length);for(let o=0;o{n=o()},a,i=Mu();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of n)u.dataSync();a=Promise.resolve({kernelMs:Mu()-i})}if(A().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{l4(l,c.dtype,e)})}return{kernelName:e,outputs:n,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:o,timeMs:n,inputs:s,extraInfo:a}=e;o.forEach(i=>{Promise.all([i.data(),n,a]).then(p=>{this.logger.logKernelProfile(t,i,p[0],p[1],s,p[2])})})}};function l4(r,e,t){if(e!=="float32")return!1;for(let o=0;o0?h:""} `}}console.log(`%c${p} %c${i} %c${u}D ${l} %c${c} %c${m} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function q0(r,e,t){let o={},n={};for(let p=0;po[h.id]=!0),d=!0,n[u.id]=!0;break}if(d)break}}let s={};s[t.id]=!0;let a={};for(let p=r.length-1;p>=0;p--){let u=r[p],c=u.inputs;for(let l=0;l=0;n--){let s=e[n],a=[];if(s.outputs.forEach(p=>{let u=r[p.id];u!=null?a.push(u):a.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let i=s.gradient(a);for(let p in s.inputs){if(!(p in i))throw new Error(`Cannot backprop through input ${p}. Available gradients found: ${Object.keys(i)}.`);let u=t(()=>i[p]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${p} must have 'float32' dtype, but has '${u.dtype}'`);let c=s.inputs[p];if(!br(u.shape,c.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${p}' has shape '${u.shape}', which does not match the shape of the input '${c.shape}'`);if(r[c.id]==null)r[c.id]=u;else{let l=r[c.id];r[c.id]=o(l,u),l.dispose()}}}}var X0=20,xl=3,fw=7;function Y0(r,e,t,o){let n=js(e),s=m4(r,e,t,n),a=e.length,i=td(r,e,t,n,s),p=["Tensor"];return o&&(p.push(` dtype: ${t}`),p.push(` rank: ${a}`),p.push(` shape: [${e}]`),p.push(" values:")),p.push(i.map(u=>" "+u).join(` `)),p.join(` -`)}function RH(r,e,t,o){let n=ze(e),s=o[o.length-1],a=new Array(s).fill(0),i=e.length,p=t==="complex64"?Nc(r):r;if(i>1)for(let u=0;uFk){let g=vc*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-vc)*a,i*a));return t==="complex64"&&(x=Nc(x),b=Nc(b)),["["+x.map((w,S)=>kc(w,n[S],t)).join(", ")+", ..., "+b.map((w,S)=>kc(w,n[i-vc+S],t)).join(", ")+"]"]}return["["+(t==="complex64"?Nc(r):Array.from(r)).map((g,x)=>kc(g,n[x],t)).join(", ")+"]"]}let u=e.slice(1),l=o.slice(1),c=o[0]*a,m=[];if(i>Fk){for(let h=0;h0?m[0]+d:"");for(let h=1;h1)for(let u=0;uX0){let g=xl*a,x=Array.from(r.slice(0,g)),b=Array.from(r.slice((i-xl)*a,i*a));return t==="complex64"&&(x=bl(x),b=bl(b)),["["+x.map((C,S)=>yl(C,n[S],t)).join(", ")+", ..., "+b.map((C,S)=>yl(C,n[i-xl+S],t)).join(", ")+"]"]}return["["+(t==="complex64"?bl(r):Array.from(r)).map((g,x)=>yl(g,n[x],t)).join(", ")+"]"]}let u=e.slice(1),c=o.slice(1),l=o[0]*a,m=[];if(i>X0){for(let h=0;h0?m[0]+d:"");for(let h=1;h`Length of values '${n}' 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=o||sd(t,this.size),this.strides=oa(e)}set(e,...t){t.length===0&&(t=[0]),$(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nsl(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Gs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Gs().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>sl(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 Gs().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Gs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return al.print(this,e)}clone(){return this.throwIfDisposed(),al.clone(this)}toString(e=!1){let t=this.dataSync();return Pk(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),al.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Gs().makeVariable(this,e,t,o)}};Object.defineProperty(dt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function _w(){return wc("Tensor",()=>dt)}_w();var ci=class extends dt{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}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(!Sr(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Gs().disposeTensor(this),this.dataId=e.dataId,Gs().incRef(this,null)}dispose(){Gs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ci,Symbol.hasInstance,{value:r=>r instanceof dt&&r.assign!=null&&r.assign instanceof Function});var Vk={};qe(Vk,{assertTypesMatch:()=>Fw,getTensorsInContainer:()=>Tc,isTensorInList:()=>FH,makeTypesMatch:()=>Oe});var Ew;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(Ew||(Ew={}));var $w;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})($w||($w={}));var Rw;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(Rw||(Rw={}));var Dw;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(Dw||(Dw={}));var Aw;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(Aw||(Aw={}));var AH={float32:Dw,int32:$w,bool:Rw,complex64:Aw};function pt(r,e){if(r==="string"||e==="string"){if(r==="string"&&e==="string")return"string";throw new Error(`Can not upcast ${r} with ${e}`)}return AH[r][e]}function mi(r){return pt(r,"int32")}function md(r){return r!=null&&typeof r=="object"&&"texture"in r&&r.texture instanceof WebGLTexture}function dd(r){return typeof GPUBuffer!="undefined"&&r!=null&&typeof r=="object"&&"buffer"in r&&r.buffer instanceof GPUBuffer}function Oe(r,e){if(r.dtype===e.dtype)return[r,e];let t=pt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function Fw(r,e){$(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function FH(r,e){return e.some(t=>t.id===r.id)}function Tc(r){let e=[];return zk(r,e,new Set),e}function zk(r,e,t){if(r==null)return;if(r instanceof dt){e.push(r);return}if(!PH(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),zk(s,e,t))}}function PH(r){return Array.isArray(r)||typeof r=="object"}function Pw(r){return r.kernelName!=null}var fd=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()}},_c=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new fd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){ad(e).forEach(o=>{o.disposeFunc!=null&&o.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 o=t.factory();if(o&&!(o instanceof mo)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=_.runKernel(vo,{x:e}),o={x:e},n=a=>({x:()=>{let i="float32",p={x:a},u={dtype:i};return _.runKernel(ho,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(tl(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Pw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Pw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=tl(f,this.backendName);$(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let w=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,w);let S=w.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}else{let{forwardFunc:f}=e,h=g=>{n&&(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:l,attrs:c}=e,m=Pw(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(u,l,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,l,t,m,o,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(f=>l[f]!=null?l[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=Cw(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?($(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,l)=>a[l]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=e;o==="string"&&dn(e[0])&&(s=e.map(p=>iu(p)));let a=n.write(s,t,o),i=new dt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o==="string"){let p=this.state.tensorInfo.get(a),u=gw(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||"float32";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new dt(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ci(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let o=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(o=e.size*jp(e.dtype)),this.state.numBytes+=o,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:o})),e instanceof ci||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 o=e.size*jp(e.dtype);this.state.numBytes-=o}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,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=Cw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((l,c)=>{if(l==null){let m=o[c],d=Yp(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return l}),n(u.length>1?u:u[0],s,a))),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=Tc(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if($(t.length>0,()=>"gradients() received an empty list of xs."),o!=null&&o.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));$(s instanceof dt,()=>"The result y returned by f() must be a tensor.");let a=Dk(this.state.activeTape,t,s);if(!n&&a.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[s.id]=o==null?OH(s.shape):o,Ak(i,a,u=>this.tidy(u),MH);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let l of u.saved)l.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return $(ra(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{$(t.every(i=>i instanceof dt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),$(o.value instanceof dt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),$(ra(o.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),l=Array.isArray(u)?u:[u];$(l.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(...)."),$(l.every(m=>m instanceof dt),()=>"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 c={};return l.forEach((m,d)=>{c[d]=()=>m}),c};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Uu(),o=await this.backend.time(e);return o.wallMs=Uu()-t,o}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 fd;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}};_c.nextTensorId=0;_c.nextVariableId=0;function OH(r){let e=bc(ze(r),"float32");return _.makeTensor(e,r,"float32")}function Ow(){let r=bw();if(r._tfengine==null){let e=new Cc(r);r._tfengine=new _c(e)}return hk(r._tfengine.ENV),Mk(()=>r._tfengine),r._tfengine}var _=Ow();function MH(r,e){let t={a:r,b:e};return _.runKernel(Rr,t)}var uu={};qe(uu,{isBrowser:()=>Lw,isMobile:()=>zH,mockIsMobile:()=>BH});function LH(){return typeof navigator!="undefined"&&navigator!=null}var Mw;function BH(r){Mw=r}function zH(r){if(Mw!==void 0)return Mw;if(r||LH()){if(r||(r=navigator),r.product==="ReactNative")return!0;let e=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}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 Lw(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Dr=A();Dr.registerFlag("DEBUG",()=>!1,r=>{r&&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",()=>Lw());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("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.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",()=>Dr.getBool("DEBUG"));Dr.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Dr.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Dr.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function ur(r,e){let t=r;if(Mt(r))return e==="string"?[]:[r.length];if(md(r)){let n=r.channels||"RGBA";return[r.height,r.width*n.length]}else if(dd(r))return[r.buffer.size/(e==null?4:jp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Mt(t)&&e!=="string";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&Uk(r,o,[]),o}function Uk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Mt(r)){$(e.length===0,()=>`Element arr[${t.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}$(e.length>0,()=>`Element arr[${t.join("][")}] should be a primitive, but is an array of ${r.length} elements`),$(r.length===e[0],()=>`Element arr[${t.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),Wk(o,n,e,t),r==null||!Mt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let p=r==null?"null":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=ur(r,n);!Mt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!=="string"?nl(r,n):Us(r,[],!0);return _.makeTensor(i,s,n)}function di(r,e,t,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Bw="__op";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith("_")&&(t=t.substring(0,t.length-1)),t=t+Bw;let n=(...s)=>{_.startScope(t);try{let a=o(...s);return Ou(a)&&console.error("Cannot return a Promise inside of tidy."),_.endScope(a),a}catch(a){throw _.endScope(null),a}};return Object.defineProperty(n,"name",{value:t,configurable:!0}),n}function VH(r,e){let t=v(r,"real","complex"),o=v(e,"imag","complex");yt(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return _.runKernel(ei,n)}var Ar=N({complex_:VH});function vr(r,e,t,o){if(o==null)o=Bi(r);else if(o==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(dd(r)||md(r)){if(o!=="float32"&&o!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return _.backend.createTensorFromGPUData(r,e||t,o)}if(!Mt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="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(e!=null){St(e);let n=ze(e),s=ze(t);$(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Mt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!=="string"?nl(r,o):Us(r,[],!0),_.makeTensor(r,e,o)}function pr(r,e,t){let o=ur(r,t);return vr(r,e,o,t)}var fi={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var lr=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Mt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=WH(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function WH(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function Gde(){A().set("PROD",!0)}function Hde(){A().set("DEBUG",!0)}function Kde(){A().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function zw(r){A().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}Bk(zw);function qde(){_.disposeVariables()}function cr(){return _}function jde(){return _.memory()}function Xde(r){return _.profile(r)}function De(r,e){return _.tidy(r,e)}function Lt(r){Tc(r).forEach(t=>t.dispose())}function Fr(r){return _.keep(r)}function Yde(r){return _.time(r)}function Qde(r){return _.setBackend(r)}function Zde(){return _.ready()}function Gk(){return _.backendName}function Jde(r){_.removeBackend(r)}function efe(r){return _.findBackend(r)}function tfe(r){return _.findBackendFactory(r)}function pu(r,e,t=1){return _.registerBackend(r,e,t)}function Hk(){return _.backend}function rfe(r,e){A().setPlatform(r,e)}var lu=4;async function jk(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+lu*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=Xk(s,t.slice(n,n+a)),n+=a}return o}function UH(r,e){let t=ze(r.shape),o;if("quantization"in r){let n=r.quantization;o=fi[n.dtype]}else if(r.dtype==="string"){let n=0;for(let s=0;s(n=await Kk(o,n,l),n.slice(u,l)));n=await Kk(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=Xk(s,i);if(t[s.name]=p,Gk()==="webgpu"){let u=Hk();"uploadToGPU"in u&&ze(p.shape)>=A().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(p.dataId)}}return t}function HH(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{if(e+=s.byteLength,t.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 o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var Vw=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function qk(r){return Vw?Buffer.byteLength(r,"utf8"):new Blob([r]).size}function Yk(r){if(Vw)return Buffer.from(r).toString("base64");let e=new Uint8Array(r),t="";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function qH(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function jH(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function XH(){let r=KH(),e=qH(),t=jH();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var Xt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,"save")}static getLoadHandlers(e,t){return r.getHandlers(e,"load",t)}static getHandlers(e,t,o){let n=[];return(t==="load"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},Jk=r=>Xt.registerSaveRouter(r),e1=r=>Xt.registerLoadRouter(r),t1=r=>Xt.getSaveHandlers(r),r1=(r,e)=>Xt.getLoadHandlers(r,e);var Gw="tensorflowjs",Hw=1,Gu="models_store",cu="model_info_store";function o1(){if(!A().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let r=typeof window=="undefined"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Kw(r){let e=r.result;e.createObjectStore(Gu,{keyPath:"modelPath"}),e.createObjectStore(cu,{keyPath:"modelPath"})}var Ra=class{constructor(e){if(this.indexedDB=o1(),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((o,n)=>{let s=this.indexedDB.open(Gw,Hw);s.onupgradeneeded=()=>Kw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Gu,"readonly"),u=i.objectStore(Gu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=l=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{t.weightData=lr.join(t.weightData);let i=$a(t),p=a.transaction(cu,"readwrite"),u=p.objectStore(cu),l;try{l=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let c;l.onsuccess=()=>{c=a.transaction(Gu,"readwrite");let m=c.objectStore(Gu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(cu);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},l.onerror=m=>(a.close(),n(l.error)),p.oncomplete=()=>{c==null?a.close():c.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};Ra.URL_SCHEME="indexeddb://";var n1=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Ra.URL_SCHEME)?YH(r.slice(Ra.URL_SCHEME.length)):null;Xt.registerSaveRouter(n1);Xt.registerLoadRouter(n1);function YH(r){return new Ra(r)}function QH(r){return r.startsWith(Ra.URL_SCHEME)?r.slice(Ra.URL_SCHEME.length):r}var yd=class{constructor(){this.indexedDB=o1()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Gw,Hw);o.onupgradeneeded=()=>Kw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(cu,"readonly"),i=s.objectStore(cu).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=QH(e),new Promise((t,o)=>{let n=this.indexedDB.open(Gw,Hw);n.onupgradeneeded=()=>Kw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(cu,"readwrite"),i=a.objectStore(cu),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let l=i.delete(e),c=()=>{u=s.transaction(Gu,"readwrite");let d=u.objectStore(Gu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};l.onsuccess=c,l.onerror=m=>(c(),s.close(),o(p.error))}},p.onerror=l=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var hi="/",ul="tensorflowjs_models",s1="info",ZH="model_topology",JH="weight_specs",eK="weight_data",tK="model_metadata";function a1(r){return{info:[ul,r,s1].join(hi),topology:[ul,r,ZH].join(hi),weightSpecs:[ul,r,JH].join(hi),weightData:[ul,r,eK].join(hi),modelMetadata:[ul,r,tK].join(hi)}}function i1(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function rK(r){let e=r.split(hi);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(hi)}function oK(r){return r.startsWith(Da.URL_SCHEME)?r.slice(Da.URL_SCHEME.length):r}var Da=class{constructor(e){if(!A().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=a1(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),o=JSON.stringify(e.weightSpecs),n=$a(e),s=lr.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,Yk(s));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw i1(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=Qk(a),t}};Da.URL_SCHEME="localstorage://";var u1=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Da.URL_SCHEME)?nK(r.slice(Da.URL_SCHEME.length)):null;Xt.registerSaveRouter(u1);Xt.registerLoadRouter(u1);function nK(r){return new Da(r)}var bd=class{constructor(){$(A().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),$(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=ul+hi,o=hi+s1;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(pl)&&(e=e.slice(0,e.indexOf(pl))),$(e.length>0,()=>"scheme must not be an empty string.");let o=r.getInstance();$(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function Cd(r){if(r.indexOf(pl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Hs.getSchemes().join(",")}`);return{scheme:r.split(pl)[0],path:r.split(pl)[1]}}async function p1(r,e,t=!1){$(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=Xt.getLoadHandlers(r);$(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),$(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=Xt.getSaveHandlers(e);$(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),$(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=Cd(r).scheme,p=Cd(r).path,u=i===Cd(r).scheme,l=await n.load();t&&u&&await Hs.getManager(i).removeModel(p);let c=await a.save(l);return t&&!u&&await Hs.getManager(i).removeModel(p),c.modelArtifactsInfo}async function l1(){let r=Hs.getSchemes(),e={};for(let t of r){let o=await Hs.getManager(t).listModels();for(let n in o){let s=t+pl+n;e[s]=o[n]}}return e}async function c1(r){let e=Cd(r);return Hs.getManager(e.scheme).removeModel(e.path)}async function m1(r,e){return p1(r,e,!1)}async function d1(r,e){return p1(r,e,!0)}var qw=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!A().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return id(e)}};if(A().get("IS_BROWSER")){A().setPlatform("browser",new qw);try{Hs.registerManager(Da.URL_SCHEME,new bd)}catch(r){}try{Hs.registerManager(Ra.URL_SCHEME,new yd)}catch(r){}}var sK={importFetch:()=>f1()},jw;var Xw=class{constructor(){this.util=h1(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(jw==null&&(jw=sK.importFetch()),jw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get("IS_NODE")&&!A().get("IS_BROWSER")&&A().setPlatform("node",new Xw);function ie(r,e="float32",t){return e=e||"float32",St(r),new Ge(r,e,t)}function aK(r,e){let t=v(r,"x","cast");if(!hw(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e==="string"&&t.dtype!=="string"||e!=="string"&&t.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:t},n={dtype:e};return _.runKernel(ho,o,n)}var Ue=N({cast_:aK});function iK(r){let t={x:v(r,"x","clone","string_or_numeric")};return _.runKernel(vo,t)}var Xr=N({clone_:iK});function wd(r,e=!1){console.log(r.toString(e))}Ow();var uK={buffer:ie,cast:Ue,clone:Xr,print:wd};Lk(uK);function pK(r,e){let t=v(r,"a","add"),o=v(e,"b","add");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(Rr,n)}var Ce=N({add_:pK});function lK(r,e){let t=v(r,"a","floorDiv"),o=v(e,"b","floorDiv");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(wo,n)}var Sd=N({floorDiv_:lK});function cK(r,e){let t=v(r,"a","div"),o=v(e,"b","div");if([t,o]=Oe(t,o),t.dtype==="int32"&&o.dtype==="int32")return Sd(t,o);let n={a:t,b:o},s={};return _.runKernel(Vn,n,s)}var Xe=N({div_:cK});function mK(r,e){let t=v(r,"a","mul"),o=v(e,"b","mul");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel($o,n)}var se=N({mul_:mK});function dK(r){let e=v(r,"x","abs");if(e.dtype==="complex64"){let t={x:e};return _.runKernel(Wi,t)}else{let t={x:e};return _.runKernel(fn,t)}}var er=N({abs_:dK});function fK(r){let t={x:v(r,"x","acos")};return _.runKernel(hn,t)}var g1=N({acos_:fK});function hK(r){let t={x:v(r,"x","acosh")};return _.runKernel(gn,t)}var x1=N({acosh_:hK});function gK(r){$(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),$(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,"addN")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(n=>{if(!Sr(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=e;return _.runKernel(xn,o)}var y1=N({addN_:gK});function xK(r,e=null,t=!1){let n={x:v(r,"x","all","bool")},s={axis:e,keepDims:t};return _.runKernel(yn,n,s)}var b1=N({all_:xK});function yK(r,e=null,t=!1){let n={x:v(r,"x","any","bool")},s={axis:e,keepDims:t};return _.runKernel(bn,n,s)}var C1=N({any_:yK});function bK(r,e=0){let o={x:v(r,"x","argMax")},n={axis:e};return _.runKernel(na,o,n)}var w1=N({argMax_:bK});function CK(r,e=0){let o={x:v(r,"x","argMin")},n={axis:e};return _.runKernel(sa,o,n)}var S1=N({argMin_:CK});function wK(r){let t={x:v(r,"x","asin")};return _.runKernel(Cn,t)}var I1=N({asin_:wK});function SK(r){let t={x:v(r,"x","asinh")};return _.runKernel(wn,t)}var v1=N({asinh_:SK});function IK(r){let t={x:v(r,"x","atan")};return _.runKernel(Sn,t)}var k1=N({atan_:IK});function vK(r,e){let t=v(r,"a","atan2"),o=v(e,"b","atan2");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(vn,n)}var N1=N({atan2_:vK});function kK(r){let t={x:v(r,"x","atanh")};return _.runKernel(In,t)}var T1=N({atanh_:kK});function NK(r,e,t,o,n="NHWC",s){let a=r[3],i=[...e,a],p=E1(n);return Ku(r,i,t,s,o,null,null,p)}function Qw(r,e,t,o,n,s,a="channelsLast"){let[i,p]=$c(e),u;if(a==="channelsLast")u=[i,p,r[3],r[3]];else if(a==="channelsFirst")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Ku(r,u,t,o,n,s,!1,a)}function TK(r,e,t,o,n,s,a="NDHWC"){let[i,p,u]=Yw(e),l,c;if(a==="NDHWC")c="channelsLast",l=[i,p,u,r[4],r[4]];else if(a==="NCDHW")c="channelsFirst",l=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return _1(r,l,t,o,n,!1,c,s)}function Ku(r,e,t,o,n,s,a=!1,i="channelsLast"){let[p,u,l,c]=[-1,-1,-1,-1];if(i==="channelsLast")[p,u,l,c]=r;else if(i==="channelsFirst")[p,c,u,l]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=$c(t),[x,b]=$c(o),w=ll(m,x),S=ll(d,b),{padInfo:k,outHeight:T,outWidth:E}=$K(n,u,l,h,g,w,S,s,i),R=a?f*c:f,D;return i==="channelsFirst"?D=[p,R,T,E]:i==="channelsLast"&&(D=[p,T,E,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:l,inChannels:c,outHeight:T,outWidth:E,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:w,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function _1(r,e,t,o,n,s=!1,a="channelsLast",i){let[p,u,l,c,m]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[p,u,l,c,m]=r;else if(a==="channelsFirst")[p,m,u,l,c]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,w]=Yw(t),[S,k,T]=Yw(o),E=ll(d,S),R=ll(f,k),D=ll(h,T),{padInfo:F,outDepth:O,outHeight:M,outWidth:L}=RK(n,u,l,c,x,b,w,E,R,D,i),B=s?g*m:g,z;return a==="channelsFirst"?z=[p,B,O,M,L]:a==="channelsLast"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:l,inWidth:c,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:F,strideDepth:x,strideHeight:b,strideWidth:w,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:E,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:T,inShape:r,outShape:z,filterShape:e}}function _K(r,e,t,o,n){o==null&&(o=Zw(r,e,t));let s=r[0],a=r[1],i=Rc((s-e+2*o)/t+1,n),p=Rc((a-e+2*o)/t+1,n);return[i,p]}function EK(r,e,t,o,n,s){n==null&&(n=Zw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=Rc((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Zw(r,e,t,o=1){let n=ll(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function $c(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Yw(r){return typeof r=="number"?[r,r,r]:r}function ll(r,e){return e<=1?r:r+(r-1)*(e-1)}function $K(r,e,t,o,n,s,a,i,p){let u,l,c;if(typeof r=="number"){u={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let d=_K([e,t],s,o,r,i);l=d[0],c=d[1]}else if(r==="same"){l=Math.ceil(e/o),c=Math.ceil(t/n);let m=Math.max(0,(l-1)*o+s-e),d=Math.max(0,(c-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:"SAME"}}else if(r==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},l=Math.ceil((e-s+1)/o),c=Math.ceil((t-a+1)/n);else if(typeof r=="object"){let m=p==="channelsLast"?r[1][0]:r[2][0],d=p==="channelsLast"?r[1][1]:r[2][1],f=p==="channelsLast"?r[2][0]:r[3][0],h=p==="channelsLast"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?"VALID":"EXPLICIT"},l=Rc((e-s+m+d)/o+1,i),c=Rc((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:l,outWidth:c}}function RK(r,e,t,o,n,s,a,i,p,u,l){let c,m,d,f;if(r==="valid"&&(r=0),typeof r=="number"){c={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?"VALID":"NUMBER"};let g=EK([e,t,o,1],[i,p,u],1,[n,s,a],r,l);m=g[0],d=g[1],f=g[2]}else if(r==="same"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),w=h-b,S=Math.floor(g/2),k=g-S,T=Math.floor(x/2),E=x-T;c={top:S,bottom:k,left:T,right:E,front:b,back:w,type:"SAME"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:c,outDepth:m,outHeight:d,outWidth:f}}function Rc(r,e){if(!e)return Math.trunc(r);switch(e){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function Hu(r){let[e,t,o]=$c(r);return e===1&&t===1&&o===1}function br(r,e){return Hu(r)||Hu(e)}function Aa(r){return $c(r).every(e=>e>0)}function E1(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function zt(r,e,t){if(t!=null){if(typeof e=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e=="number")$(Ja(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e=="object")e.forEach(o=>{o.forEach(n=>{$(Ja(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function DK(r,e){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:e};return _.runKernel(Ca,o,n)}var W=N({reshape_:DK});function AK(r,e,t,o,n){let s=v(r,"x","avgPool","float32"),a=1;$(br(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),zt("avgPool",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n},c=_.runKernel(kn,u,l);return c=Ue(c,s.dtype),p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Id=N({avgPool_:AK});function FK(r,e,t,o,n,s="NDHWC"){let a=v(r,"x","avgPool3d","float32"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),$(typeof t=="number"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),zt("avgPool3d",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},c=_.runKernel(aa,u,l);return c=Ue(c,i.dtype),p?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var $1=N({avgPool3d_:FK});function PK(r,e=0){$(r.length>=1,()=>"Pass at least one tensor to concat");let t=di(r,"tensors","concat","string_or_numeric");if(t[0].dtype==="complex64"&&t.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${s.dtype}. `)}),t.length===1)return Xr(t[0]);let o=t,n={axis:e};return _.runKernel(pa,o,n)}var bt=N({concat_:PK});function OK(r,e,t=!1,o=!1){let n=v(r,"a","matMul"),s=v(e,"b","matMul");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return _.runKernel(Nn,a,i)}var Je=N({matMul_:OK});function MK(r){let t={x:v(r,"x","sigmoid","float32")};return _.runKernel(Ao,t)}var Pa=N({sigmoid_:MK});function LK(r,e,t){let o=v(r,"x","slice","string_or_numeric");if(o.rank===0)throw new Error("Slicing scalar is not possible");let n={x:o},s={begin:e,size:t};return _.runKernel(_s,n,s)}var Ye=N({slice_:LK});function BK(r){let t={x:v(r,"x","tanh","float32")};return _.runKernel(Ls,t)}var Dc=N({tanh_:BK});function zK(r,e,t,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(e,"lstmKernel","basicLSTMCell"),p=v(t,"lstmBias","basicLSTMCell"),u=v(o,"data","basicLSTMCell"),l=v(n,"c","basicLSTMCell"),c=v(s,"h","basicLSTMCell"),m=bt([u,c],1),d=Je(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Ye(f,[0,0],x),w=Ye(f,[0,g],x),S=Ye(f,[0,g*2],x),k=Ye(f,[0,g*3],x),T=Ce(se(Pa(b),Dc(w)),se(l,Pa(Ce(a,S)))),E=se(Dc(T),Pa(k));return[T,E]}var R1=N({basicLSTMCell_:zK});function VK(r,e,t){let o=v(r,"x","batchToSpaceND"),n=e.reduce((i,p)=>i*p);$(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),$(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),$(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return _.runKernel(ia,s,a)}var vd=N({batchToSpaceND_:VK});function D1(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function WK(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let l;o!=null&&(l=v(o,"offset","batchNorm")),$(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),$(l==null||i.rank===l.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),$(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:D1(a),scale:u,offset:l,mean:i,variance:p},d={varianceEpsilon:s},f=_.runKernel(Hn,m,d);return W(f,a.shape)}var mu=N({batchNorm_:WK});function UK(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let l;return o!=null&&(l=v(o,"offset","batchNorm")),$(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),$(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),$(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var A1=N({batchNorm2d_:UK});function GK(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let l;return o!=null&&(l=v(o,"offset","batchNorm")),$(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),$(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),$(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var F1=N({batchNorm3d_:GK});function HK(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let l;return o!=null&&(l=v(o,"offset","batchNorm")),$(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),$(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),$(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&$(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),l!=null&&$(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${l.rank}.`),mu(a,i,p,l,u,s)}var P1=N({batchNorm4d_:HK});function KK(r,e,t){let o=v(r,"x","bincount"),n=v(e,"weights","bincount");$(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return _.runKernel(Tn,s,a)}var kd=N({bincount_:KK});function qK(r,e){let t=v(r,"x","bitwiseAnd"),o=v(e,"y","bitwiseAnd");if(!Sr(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!=="int32"||o.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return _.runKernel(_n,n)}var O1=N({bitwiseAnd_:qK});function jK(r,e){let t=v(r,"s0","broadcastArgs","int32"),o=v(e,"s1","broadcastArgs","int32");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return _.runKernel(ua,n)}var M1=N({broadcastArgs_:jK});function XK(r,e){let t=v(r,"broadcastTo","x"),o=t.shape;if(St(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,l)=>u>1?l:-1).filter(u=>u>=0).length===0)return Xr(t);let i={x:t},p={reps:s};return _.runKernel(Mo,i,p)}var Oa=N({broadcastTo_:XK});function YK(r){let t={x:v(r,"x","ceil","float32")};return _.runKernel(go,t)}var L1=N({ceil_:YK});function Ma(r,e,t){St(r),t=t||Bi(e);let o={shape:r,value:e,dtype:t};return _.runKernel(da,{},o)}function QK(r,e,t){let o=v(r,"x","clipByValue");if($(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return Ma(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return _.runKernel(Go,n,s)}var B1=N({clipByValue_:QK});function ZK(r){return bt(r,0)}var z1=N({concat1d_:ZK});function JK(r,e){return bt(r,e)}var V1=N({concat2d_:JK});function eq(r,e){return bt(r,e)}var W1=N({concat3d_:eq});function tq(r,e){return bt(r,e)}var U1=N({concat4d_:tq});function rq(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(e,"filter","conv2d","float32"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),zt("conv2d",o,a);let c=n==="NHWC"?u.shape[3]:u.shape[1];$(c===p.shape[2],()=>`Error in conv2d: depth of input (${c}) must match input depth for filter ${p.shape[2]}.`),$(br(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(Aa(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),$(Aa(t),()=>"Error in conv2D: Strides should be larger than 0.");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=_.runKernel(En,m,d);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var du=N({conv2d_:rq});function oq(r,e,t,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(e,"filter","conv1d"),u=i,l=!1;i.rank===2&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1]])),$(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),$(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),zt("conv1d",o,a),$(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),$(br(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),$(Aa(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),$(Aa(t),()=>"Error in conv1D: Stride should be larger than 0."),$(n==="NWC",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let c=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=du(m,c,[1,t],o,"NHWC",[1,s],a);return l?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var G1=N({conv1d_:oq});function nq(r,e,t,o,n,s="NHWC",a){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),$(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),$(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),$(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let l=s==="NHWC"?i[3]:i[1],c=s==="NHWC"?p.shape[3]:p.shape[1];$(l===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${l}) must match input depth for filter ${t.shape[2]}.`),$(c===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${c}) must match output depth for filter ${t.shape[3]}.`),zt("conv2dDerInput",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=_.runKernel($n,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Nd=N({conv2DBackpropInput_:nq});function sq(r,e,t,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(e,"filter","conv2dTranspose");return Nd(t,a,i,o,n,"NHWC",s)}var H1=N({conv2dTranspose_:sq});function aq(r,e,t,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(e,"filter","conv3d"),p=a,u=!1;a.rank===4&&(u=!0,p=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),$(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),$(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),$(br(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),$(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),$(Aa(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),$(Aa(t),()=>"Error in conv3D: Strides should be larger than 0.");let l={x:p,filter:i},c={strides:t,pad:o,dataFormat:n,dilations:s},m=_.runKernel(Rn,l,c);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var K1=N({conv3d_:aq});function iq(r,e,t,o,n){$(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];$(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),$(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),$(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),$(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),$(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let l={dy:a,filter:t},c={pad:n,strides:o,inputShape:s},m=_.runKernel(Dn,l,c);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var q1=N({conv3DBackpropInput_:iq});function uq(r,e,t,o,n){let s=v(r,"x","conv3dTranspose"),a=v(e,"filter","conv3dTranspose");return q1(t,s,a,o,n)}var j1=N({conv3dTranspose_:uq});function pq(r){let t={x:v(r,"x","cos","float32")};return _.runKernel(An,t)}var X1=N({cos_:pq});function lq(r){let t={x:v(r,"x","cosh","float32")};return _.runKernel(Fn,t)}var Y1=N({cosh_:lq});function cq(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:e,exclusive:t,reverse:o};return _.runKernel(Pn,s,a)}var Q1=N({cumprod_:cq});function mq(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:e,exclusive:t,reverse:o};return _.runKernel(On,s,a)}var Z1=N({cumsum_:mq});function dq(r,e,t,o=!1){let n=v(r,"x","denseBincount"),s=v(e,"weights","denseBincount");$(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),$(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),$(t>=0,()=>`size must be non-negative, but got ${t}.`),$(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return _.runKernel(la,a,i)}var J1=N({denseBincount_:dq});function fq(r,e,t="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=t==="NHWC"?o.shape[1]:o.shape[2],s=t==="NHWC"?o.shape[2]:o.shape[3],a=t==="NHWC"?o.shape[3]:o.shape[1];$(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),$(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying +`;return m[m.length-1]=" "+m[m.length-1]+"]"+(s?"":f),m}function bl(r){let e=[];for(let t=0;t`Length of values '${n}' 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=o||Xm(t,this.size),this.strides=js(e)}set(e,...t){t.length===0&&(t=[0]),E(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let o=this.locToIndex(t);this.values[o]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let o=e[e.length-1];for(let n=0;nJp(o))}catch(o){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Ps().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Ps().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Jp(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 Ps().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Ps().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return ec.print(this,e)}clone(){return this.throwIfDisposed(),ec.clone(this)}toString(e=!1){let t=this.dataSync();return Y0(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),ec.cast(this,e)}variable(e=!0,t,o){return this.throwIfDisposed(),Ps().makeVariable(this,e,t,o)}};Object.defineProperty(mt,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});function hw(){return fl("Tensor",()=>mt)}hw();var ri=class extends mt{constructor(e,t,o,n){super(e.shape,e.dtype,e.dataId,n),this.trainable=t,this.name=o}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(!br(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Ps().disposeTensor(this),this.dataId=e.dataId,Ps().incRef(this,null)}dispose(){Ps().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ri,Symbol.hasInstance,{value:r=>r instanceof mt&&r.assign!=null&&r.assign instanceof Function});var rk={};qe(rk,{assertTypesMatch:()=>ww,getTensorsInContainer:()=>Cl,isTensorInList:()=>h4,makeTypesMatch:()=>Oe});var gw;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(gw||(gw={}));var xw;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(xw||(xw={}));var yw;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(yw||(yw={}));var bw;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(bw||(bw={}));var Cw;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(Cw||(Cw={}));var f4={float32:bw,int32:xw,bool:yw,complex64:Cw};function dt(r,e){if(r==="string"||e==="string"){if(r==="string"&&e==="string")return"string";throw new Error(`Can not upcast ${r} with ${e}`)}return f4[r][e]}function oi(r){return dt(r,"int32")}function rd(r){return r!=null&&typeof r=="object"&&"texture"in r&&r.texture instanceof WebGLTexture}function od(r){return typeof GPUBuffer!="undefined"&&r!=null&&typeof r=="object"&&"buffer"in r&&r.buffer instanceof GPUBuffer}function Oe(r,e){if(r.dtype===e.dtype)return[r,e];let t=dt(r.dtype,e.dtype);return[r.cast(t),e.cast(t)]}function ww(r,e){E(r.dtype===e.dtype,()=>`The dtypes of the first(${r.dtype}) and second(${e.dtype}) input must match`)}function h4(r,e){return e.some(t=>t.id===r.id)}function Cl(r){let e=[];return tk(r,e,new Set),e}function tk(r,e,t){if(r==null)return;if(r instanceof mt){e.push(r);return}if(!g4(r))return;let o=r;for(let n in o){let s=o[n];t.has(s)||(t.add(s),tk(s,e,t))}}function g4(r){return Array.isArray(r)||typeof r=="object"}function Sw(r){return r.kernelName!=null}var nd=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()}},wl=class r{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new nd}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Ym(e).forEach(o=>{o.disposeFunc!=null&&o.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 o=t.factory();if(o&&!(o instanceof ao)&&typeof o.then=="function"){let n=++this.pendingBackendInitId,s=o.then(a=>n(nthis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.startScope(o),()=>this.endScope(n),()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n))}scopedRun(e,t,o){e();try{let n=o();return t(),n}catch(n){throw t(),n}}nextTensorId(){return r.nextTensorId++}nextVariableId(){return r.nextVariableId++}clone(e){let t=T.runKernel(Co,{x:e}),o={x:e},n=a=>({x:()=>{let i="float32",p={x:a},u={dtype:i};return T.runKernel(yo,p,u)}}),s=[];return this.addTapeNode(this.state.activeScope.name,o,[t],n,s,{}),t}runKernel(e,t,o){if(this.backendName==null&&this.backend,!(Xp(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:o})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,o){let n=this.backend.numDataIds(),s=0;o.forEach(p=>{s+=p.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=n-t-s-a;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,o=[],n=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let p,u=Sw(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Sw(e)){let{kernelName:f,inputs:h,attrs:g}=e;this.backendName==null&&this.backend;let x=Xp(f,this.backendName);E(x!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();p=x.kernelFunc({inputs:h,attrs:g,backend:this.backend});let C=Array.isArray(p)?p:[p];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,b,C);let S=C.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(n){let k=this.getTensorsForGradient(f,h,S);o=this.saveTensorsForBackwardMode(k)}return S}}else{let{forwardFunc:f}=e,h=g=>{n&&(o=g.map(x=>this.keep(this.clone(x))))};i=()=>{let g=this.backend.numDataIds();p=this.tidy(()=>f(this.backend,h));let x=Array.isArray(p)?p:[p];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(u,g,x),x}}let{inputs:c,attrs:l}=e,m=Sw(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(u,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),n&&this.addTapeNode(u,c,t,m,o,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:u,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(f=>c[f]!=null?c[f].shape:null),outputShapes:t.map(f=>f.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(p)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(o=>this.keep(this.clone(o)))}getTensorsForGradient(e,t,o){let n=iw(e);if(n!=null){let s=n.inputsToSave||[],a=n.outputsToSave||[],i;n.saveAllInputs?(E(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(u=>t[u])):i=s.map(u=>t[u]);let p=o.filter((u,c)=>a[c]);return i.concat(p)}return[]}makeTensor(e,t,o,n){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");o=o||"float32",n=n||this.backend;let s=e;o==="string"&&zo(e[0])&&(s=e.map(p=>Ji(p)));let a=n.write(s,t,o),i=new mt(t,o,a,this.nextTensorId());if(this.trackTensor(i,n),o==="string"){let p=this.state.tensorInfo.get(a),u=ow(s);this.state.numBytes+=u-p.bytes,p.bytes=u}return i}makeTensorFromDataId(e,t,o,n){o=o||"float32";let s={dataId:e,shape:t,dtype:o};return this.makeTensorFromTensorInfo(s,n)}makeTensorFromTensorInfo(e,t){let{dataId:o,shape:n,dtype:s}=e,a=new mt(n,s,o,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,o,n){o=o||this.nextVariableId().toString(),n!=null&&n!==e.dtype&&(e=e.cast(n));let s=new ri(e,t,o,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let o=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(o=e.size*Wp(e.dtype)),this.state.numBytes+=o,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:o})),e instanceof ri||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 o=e.size*Wp(e.dtype);this.state.numBytes-=o}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,o=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(n=>n.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-o;for(let n of this.state.activeProfile.kernels)n.kernelTimeMs=await n.kernelTimeMs,n.extraInfo=await n.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,o,n,s,a){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:o,saved:s},p=iw(e);p!=null&&(n=p.gradFunc),n!=null&&(i.gradient=u=>(u=u.map((c,l)=>{if(c==null){let m=o[l],d=Gp(m.size,m.dtype);return this.makeTensor(d,m.shape,m.dtype)}return c}),n(u.length>1?u:u[0],s,a))),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=Cl(e),o=new Set(t.map(s=>s.id));for(let s=0;s{!s.kept&&s.scopeId===n.id&&this.track(s)})}gradients(e,t,o,n=!1){if(E(t.length>0,()=>"gradients() received an empty list of xs."),o!=null&&o.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${o.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));E(s instanceof mt,()=>"The result y returned by f() must be a tensor.");let a=q0(this.state.activeTape,t,s);if(!n&&a.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[s.id]=o==null?x4(s.shape):o,j0(i,a,u=>this.tidy(u),y4);let p=t.map(u=>i[u.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(u=>{for(let c of u.saved)c.dispose()}),this.state.activeTape=null),{value:s,grads:p}})}customGrad(e){return E(qs(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{E(t.every(i=>i instanceof mt),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let o,n={};t.forEach((i,p)=>{n[p]=i});let s=(i,p)=>(o=e(...t,p),E(o.value instanceof mt,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),E(qs(o.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),o.value),a=(i,p)=>{let u=o.gradFunc(i,p),c=Array.isArray(u)?u:[u];E(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(...)."),E(c.every(m=>m instanceof mt),()=>"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 l={};return c.forEach((m,d)=>{l[d]=()=>m}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:n})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Mu(),o=await this.backend.time(e);return o.wallMs=Mu()-t,o}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 nd;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}};wl.nextTensorId=0;wl.nextVariableId=0;function x4(r){let e=ml(ze(r),"float32");return T.makeTensor(e,r,"float32")}function Iw(){let r=aw();if(r._tfengine==null){let e=new dl(r);r._tfengine=new wl(e)}return $0(r._tfengine.ENV),Z0(()=>r._tfengine),r._tfengine}var T=Iw();function y4(r,e){let t={a:r,b:e};return T.runKernel(uo,t)}var eu={};qe(eu,{isBrowser:()=>kw,isMobile:()=>w4,mockIsMobile:()=>C4});function b4(){return typeof navigator!="undefined"&&navigator!=null}var vw;function C4(r){vw=r}function w4(r){if(vw!==void 0)return vw;if(r||b4()){if(r||(r=navigator),r.product==="ReactNative")return!0;let e=r.userAgent||r.vendor||(typeof window!="undefined"?window.opera:"");if(!e){let t=r;return t.userAgentData&&t.userAgentData.mobile}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 kw(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var _r=A();_r.registerFlag("DEBUG",()=>!1,r=>{r&&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.")});_r.registerFlag("IS_BROWSER",()=>kw());_r.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");_r.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));_r.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));_r.registerFlag("PROD",()=>!1);_r.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>_r.getBool("DEBUG"));_r.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);_r.registerFlag("IS_TEST",()=>!1);_r.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>_r.getBool("DEBUG"));_r.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);_r.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);_r.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function sr(r,e){let t=r;if(Pt(r))return e==="string"?[]:[r.length];if(rd(r)){let n=r.channels||"RGBA";return[r.height,r.width*n.length]}else if(od(r))return[r.buffer.size/(e==null?4:Wp(e))];if(!Array.isArray(r))return[];let o=[];for(;Array.isArray(t)||Pt(t)&&e!=="string";)o.push(t.length),t=t[0];return Array.isArray(r)&&A().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&nk(r,o,[]),o}function nk(r,e,t){if(t=t||[],!Array.isArray(r)&&!Pt(r)){E(e.length===0,()=>`Element arr[${t.join("][")}] is a primitive, but should be an array/TypedArray of ${e[0]} elements`);return}E(e.length>0,()=>`Element arr[${t.join("][")}] should be a primitive, but is an array of ${r.length} elements`),E(r.length===e[0],()=>`Element arr[${t.join("][")}] should have ${e[0]} elements, but has ${r.length} elements`);let o=e.slice(1);for(let n=0;n=0&&(n=o),ok(o,n,e,t),r==null||!Pt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){let p=r==null?"null":r.constructor.name;throw new Error(`Argument '${e}' passed to '${t}' must be a Tensor or TensorLike, but got '${p}'`)}let s=sr(r,n);!Pt(r)&&!Array.isArray(r)&&(r=[r]);let i=n!=="string"?Zp(r,n):Fs(r,[],!0);return T.makeTensor(i,s,n)}function ni(r,e,t,o="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${e} passed to ${t} must be a \`Tensor[]\` or \`TensorLike[]\``);return r.map((s,a)=>v(s,`${e}[${a}]`,t,o))}var Nw="__op";function N(r){let e=Object.keys(r);if(e.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${e.length} keys.`);let t=e[0],o=r[t];t.endsWith("_")&&(t=t.substring(0,t.length-1)),t=t+Nw;let n=(...s)=>{T.startScope(t);try{let a=o(...s);return Eu(a)&&console.error("Cannot return a Promise inside of tidy."),T.endScope(a),a}catch(a){throw T.endScope(null),a}};return Object.defineProperty(n,"name",{value:t,configurable:!0}),n}function S4(r,e){let t=v(r,"real","complex"),o=v(e,"imag","complex");xt(t.shape,o.shape,`real and imag shapes, ${t.shape} and ${o.shape}, must match in call to tf.complex().`);let n={real:t,imag:o};return T.runKernel(Di,n)}var Er=N({complex_:S4});function wr(r,e,t,o){if(o==null)o=Ei(r);else if(o==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(od(r)||rd(r)){if(o!=="float32"&&o!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${o}.`);return T.backend.createTensorFromGPUData(r,e||t,o)}if(!Pt(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="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(e!=null){Ct(e);let n=ze(e),s=ze(t);E(n===s,()=>`Based on the provided shape, [${e}], the tensor should have ${n} values but has ${s}`);for(let a=0;a`Error creating a new Tensor. Inferred shape (${t}) does not match the provided shape (${e}). `)}}return!Pt(r)&&!Array.isArray(r)&&(r=[r]),e=e||t,r=o!=="string"?Zp(r,o):Fs(r,[],!0),T.makeTensor(r,e,o)}function ar(r,e,t){let o=sr(r,t);return wr(r,e,o,t)}var si={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};var ir=class r{static join(e){return new r(e).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,e==null||(e instanceof Array||(e=[e]),e=e.map(o=>Pt(o)?o.buffer:o),e.length===0))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let o=0;o=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(n){return e=n.end?1:0}if(t(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let o=I4(this.shards,t);return o===-1?-1:(this.previousShardIndex=o,this.previousShardIndex)}};function I4(r,e){let t=0,o=r.length;for(;t<=o;){let n=Math.floor((o-t)/2)+t,s=e(r[n]);if(s===0)return n;s<0?o=n:t=n+1}return-1}function hme(){A().set("PROD",!0)}function gme(){A().set("DEBUG",!0)}function xme(){A().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Tw(r){A().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}ek(Tw);function yme(){T.disposeVariables()}function ur(){return T}function bme(){return T.memory()}function Cme(r){return T.profile(r)}function De(r,e){return T.tidy(r,e)}function Ot(r){Cl(r).forEach(t=>t.dispose())}function $r(r){return T.keep(r)}function wme(r){return T.time(r)}function Sme(r){return T.setBackend(r)}function Ime(){return T.ready()}function sk(){return T.backendName}function vme(r){T.removeBackend(r)}function kme(r){return T.findBackend(r)}function Nme(r){return T.findBackendFactory(r)}function tu(r,e,t=1){return T.registerBackend(r,e,t)}function ak(){return T.backend}function Tme(r,e){A().setPlatform(r,e)}var ru=4;async function pk(r,e){let t=[],o=[],n=Array.isArray(r)?r.map(a=>a.name):Object.keys(r);for(let a=0;a{let m=await p.bytes(),d=m.reduce((g,x)=>g+x.length,0)+ru*m.length,f=new Uint8Array(d),h=0;for(let g=0;gt.slice(n+i,n+p));o[s.name]=ck(s,t.slice(n,n+a)),n+=a}return o}function v4(r,e){let t=ze(r.shape),o;if("quantization"in r){let n=r.quantization;o=si[n.dtype]}else if(r.dtype==="string"){let n=0;for(let s=0;s(n=await ik(o,n,c),n.slice(u,c)));n=await ik(o,n,a);let i=n.slice(0,a);n=n.slice(a);let p=ck(s,i);if(t[s.name]=p,sk()==="webgpu"){let u=ak();"uploadToGPU"in u&&ze(p.shape)>=A().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&u.uploadToGPU(p.dataId)}}return t}function N4(r){if(r===null)throw new Error(`Invalid input value: ${JSON.stringify(r)}`);let e=0,t=[];r.forEach(s=>{if(e+=s.byteLength,t.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 o=new Uint8Array(e),n=0;return t.forEach(s=>{o.set(new Uint8Array(s.buffer),n),n+=s.byteLength}),o.buffer}var _w=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function uk(r){return _w?Buffer.byteLength(r,"utf8"):new Blob([r]).size}function lk(r){if(_w)return Buffer.from(r).toString("base64");let e=new Uint8Array(r),t="";for(let o=0,n=e.length;o{let o=t<<13,n=0;for(;!(o&8388608);)n-=8388608,o<<=1;return o&=-8388609,n+=947912704,o|n},e=new Uint32Array(2048);e[0]=0;for(let t=1;t<1024;t++)e[t]=r(t);for(let t=1024;t<2048;t++)e[t]=939524096+(t-1024<<13);return e}function _4(){let r=new Uint32Array(64);r[0]=0,r[31]=1199570944,r[32]=2147483648,r[63]=3347054592;for(let e=1;e<31;e++)r[e]=e<<23;for(let e=33;e<63;e++)r[e]=2147483648+(e-32<<23);return r}function E4(){let r=new Uint32Array(64);for(let e=0;e<64;e++)r[e]=1024;return r[0]=r[32]=0,r}function $4(){let r=T4(),e=_4(),t=E4();return o=>{let n=new ArrayBuffer(4*o.length),s=new Uint32Array(n);for(let a=0;a>10]+(i&1023)]+e[i>>10];s[a]=p}return new Float32Array(n)}}var qt=class r{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return r.instance==null&&(r.instance=new r),r.instance}static registerSaveRouter(e){r.getInstance().saveRouters.push(e)}static registerLoadRouter(e){r.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return r.getHandlers(e,"save")}static getLoadHandlers(e,t){return r.getHandlers(e,"load",t)}static getHandlers(e,t,o){let n=[];return(t==="load"?r.getInstance().loadRouters:r.getInstance().saveRouters).forEach(a=>{let i=a(e,o);i!==null&&n.push(i)}),n}},fk=r=>qt.registerSaveRouter(r),hk=r=>qt.registerLoadRouter(r),gk=r=>qt.getSaveHandlers(r),xk=(r,e)=>qt.getLoadHandlers(r,e);var Rw="tensorflowjs",Dw=1,Lu="models_store",ou="model_info_store";function yk(){if(!A().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let r=typeof window=="undefined"?self:window,e=r.indexedDB||r.mozIndexedDB||r.webkitIndexedDB||r.msIndexedDB||r.shimIndexedDB;if(e==null)throw new Error("The current browser does not appear to support IndexedDB.");return e}function Aw(r){let e=r.result;e.createObjectStore(Lu,{keyPath:"modelPath"}),e.createObjectStore(ou,{keyPath:"modelPath"})}var ka=class{constructor(e){if(this.indexedDB=yk(),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((o,n)=>{let s=this.indexedDB.open(Rw,Dw);s.onupgradeneeded=()=>Aw(s),s.onsuccess=()=>{let a=s.result;if(t==null){let i=a.transaction(Lu,"readonly"),u=i.objectStore(Lu).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));o(u.result.modelArtifacts)},u.onerror=c=>(a.close(),n(u.error)),i.oncomplete=()=>a.close()}else{t.weightData=ir.join(t.weightData);let i=va(t),p=a.transaction(ou,"readwrite"),u=p.objectStore(ou),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(m){return n(m)}let l;c.onsuccess=()=>{l=a.transaction(Lu,"readwrite");let m=l.objectStore(Lu),d;try{d=m.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(f){return n(f)}d.onsuccess=()=>o({modelArtifactsInfo:i}),d.onerror=f=>{u=p.objectStore(ou);let h=u.delete(this.modelPath);h.onsuccess=()=>(a.close(),n(d.error)),h.onerror=g=>(a.close(),n(d.error))}},c.onerror=m=>(a.close(),n(c.error)),p.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>n(s.error)})}};ka.URL_SCHEME="indexeddb://";var bk=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(ka.URL_SCHEME)?R4(r.slice(ka.URL_SCHEME.length)):null;qt.registerSaveRouter(bk);qt.registerLoadRouter(bk);function R4(r){return new ka(r)}function D4(r){return r.startsWith(ka.URL_SCHEME)?r.slice(ka.URL_SCHEME.length):r}var ud=class{constructor(){this.indexedDB=yk()}async listModels(){return new Promise((e,t)=>{let o=this.indexedDB.open(Rw,Dw);o.onupgradeneeded=()=>Aw(o),o.onsuccess=()=>{let n=o.result,s=n.transaction(ou,"readonly"),i=s.objectStore(ou).getAll();i.onsuccess=()=>{let p={};for(let u of i.result)p[u.modelPath]=u.modelArtifactsInfo;e(p)},i.onerror=p=>(n.close(),t(i.error)),s.oncomplete=()=>n.close()},o.onerror=n=>t(o.error)})}async removeModel(e){return e=D4(e),new Promise((t,o)=>{let n=this.indexedDB.open(Rw,Dw);n.onupgradeneeded=()=>Aw(n),n.onsuccess=()=>{let s=n.result,a=s.transaction(ou,"readwrite"),i=a.objectStore(ou),p=i.get(e),u;p.onsuccess=()=>{if(p.result==null)return s.close(),o(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),l=()=>{u=s.transaction(Lu,"readwrite");let d=u.objectStore(Lu).delete(e);d.onsuccess=()=>t(p.result.modelArtifactsInfo),d.onerror=f=>o(p.error)};c.onsuccess=l,c.onerror=m=>(l(),s.close(),o(p.error))}},p.onerror=c=>(s.close(),o(p.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},n.onerror=s=>o(n.error)})}};var ai="/",rc="tensorflowjs_models",Ck="info",A4="model_topology",F4="weight_specs",P4="weight_data",O4="model_metadata";function wk(r){return{info:[rc,r,Ck].join(ai),topology:[rc,r,A4].join(ai),weightSpecs:[rc,r,F4].join(ai),weightData:[rc,r,P4].join(ai),modelMetadata:[rc,r,O4].join(ai)}}function Sk(r){for(let e of Object.values(r))window.localStorage.removeItem(e)}function M4(r){let e=r.split(ai);if(e.length<3)throw new Error(`Invalid key format: ${r}`);return e.slice(1,e.length-1).join(ai)}function L4(r){return r.startsWith(Na.URL_SCHEME)?r.slice(Na.URL_SCHEME.length):r}var Na=class{constructor(e){if(!A().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=wk(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),o=JSON.stringify(e.weightSpecs),n=va(e),s=ir.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(n)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,o),this.LS.setItem(this.keys.weightData,lk(s));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:n}}catch(a){throw Sk(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${n.modelTopologyBytes}, weightSpecsBytes=${n.weightSpecsBytes}, weightDataBytes=${n.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={},o=JSON.parse(this.LS.getItem(this.keys.topology));if(o==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=o;let n=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(n==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=n;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let i=JSON.parse(s);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),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=mk(a),t}};Na.URL_SCHEME="localstorage://";var Ik=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(Na.URL_SCHEME)?B4(r.slice(Na.URL_SCHEME.length)):null;qt.registerSaveRouter(Ik);qt.registerLoadRouter(Ik);function B4(r){return new Na(r)}var pd=class{constructor(){E(A().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),E(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=rc+ai,o=ai+Ck;for(let n=0;n"scheme must not be undefined or null."),e.endsWith(oc)&&(e=e.slice(0,e.indexOf(oc))),E(e.length>0,()=>"scheme must not be an empty string.");let o=r.getInstance();E(o.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),o.managers[e]=t}static getManager(e){let t=r.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(r.getInstance().managers)}};function cd(r){if(r.indexOf(oc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Os.getSchemes().join(",")}`);return{scheme:r.split(oc)[0],path:r.split(oc)[1]}}async function vk(r,e,t=!1){E(r!==e,()=>`Old path and new path are the same: '${r}'`);let o=qt.getLoadHandlers(r);E(o.length>0,()=>`Copying failed because no load handler is found for source URL ${r}.`),E(o.length<2,()=>`Copying failed because more than one (${o.length}) load handlers for source URL ${r}.`);let n=o[0],s=qt.getSaveHandlers(e);E(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${e}.`),E(s.length<2,()=>`Copying failed because more than one (${o.length}) save handlers for destination URL ${e}.`);let a=s[0],i=cd(r).scheme,p=cd(r).path,u=i===cd(r).scheme,c=await n.load();t&&u&&await Os.getManager(i).removeModel(p);let l=await a.save(c);return t&&!u&&await Os.getManager(i).removeModel(p),l.modelArtifactsInfo}async function kk(){let r=Os.getSchemes(),e={};for(let t of r){let o=await Os.getManager(t).listModels();for(let n in o){let s=t+oc+n;e[s]=o[n]}}return e}async function Nk(r){let e=cd(r);return Os.getManager(e.scheme).removeModel(e.path)}async function Tk(r,e){return vk(r,e,!1)}async function _k(r,e){return vk(r,e,!0)}var Fw=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}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)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!A().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",o=>{if(o.source===window&&o.data.name===this.messageName){o.stopPropagation();let n=this.functionRefs[o.data.index];n(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return Qm(e)}};if(A().get("IS_BROWSER")){A().setPlatform("browser",new Fw);try{Os.registerManager(Na.URL_SCHEME,new pd)}catch(r){}try{Os.registerManager(ka.URL_SCHEME,new ud)}catch(r){}}var z4={importFetch:()=>Ek()},Pw;var Ow=class{constructor(){this.util=$k(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return A().global.fetch!=null?A().global.fetch(e,t):(Pw==null&&(Pw=z4.importFetch()),Pw(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)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};A().get("IS_NODE")&&!A().get("IS_BROWSER")&&A().setPlatform("node",new Ow);function me(r,e="float32",t){return e=e||"float32",Ct(r),new tt(r,e,t)}function V4(r,e){let t=v(r,"x","cast");if(!rw(e))throw new Error(`Failed to cast to unknown dtype ${e}`);if(e==="string"&&t.dtype!=="string"||e!=="string"&&t.dtype==="string")throw new Error("Only strings can be casted to strings");let o={x:t},n={dtype:e};return T.runKernel(yo,o,n)}var Ue=N({cast_:V4});function W4(r){let t={x:v(r,"x","clone","string_or_numeric")};return T.runKernel(Co,t)}var Ur=N({clone_:W4});function ld(r,e=!1){console.log(r.toString(e))}Iw();var U4={buffer:me,cast:Ue,clone:Ur,print:ld};J0(U4);function G4(r,e){let t=v(r,"a","add"),o=v(e,"b","add");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(uo,n)}var Ce=N({add_:G4});function H4(r,e){let t=v(r,"a","floorDiv"),o=v(e,"b","floorDiv");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Sn,n)}var md=N({floorDiv_:H4});function K4(r,e){let t=v(r,"a","div"),o=v(e,"b","div");if([t,o]=Oe(t,o),t.dtype==="int32"&&o.dtype==="int32")return md(t,o);let n={a:t,b:o},s={};return T.runKernel(fn,n,s)}var je=N({div_:K4});function q4(r,e){let t=v(r,"a","mul"),o=v(e,"b","mul");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Xn,n)}var se=N({mul_:q4});function j4(r){let e=v(r,"x","abs");if(e.dtype==="complex64"){let t={x:e};return T.runKernel(Ai,t)}else{let t={x:e};return T.runKernel(Xs,t)}}var Qt=N({abs_:j4});function X4(r){let t={x:v(r,"x","acos")};return T.runKernel(Vo,t)}var Rk=N({acos_:X4});function Y4(r){let t={x:v(r,"x","acosh")};return T.runKernel(Wo,t)}var Dk=N({acosh_:Y4});function Q4(r){E(Array.isArray(r),()=>"The argument passed to tf.addN() must be a list of tensors"),E(r.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${r.length}`);let e=r.map((n,s)=>v(n,`tensors${s}`,"addN")),t=e[0];e.forEach(n=>{if(n.dtype!==t.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),e.forEach(n=>{if(!br(n.shape,t.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let o=e;return T.runKernel(Uo,o)}var Ak=N({addN_:Q4});function Z4(r,e=null,t=!1){let n={x:v(r,"x","all","bool")},s={axis:e,keepDims:t};return T.runKernel(Go,n,s)}var Fk=N({all_:Z4});function J4(r,e=null,t=!1){let n={x:v(r,"x","any","bool")},s={axis:e,keepDims:t};return T.runKernel(Ho,n,s)}var Pk=N({any_:J4});function eH(r,e=0){let o={x:v(r,"x","argMax")},n={axis:e};return T.runKernel(Ys,o,n)}var Ok=N({argMax_:eH});function tH(r,e=0){let o={x:v(r,"x","argMin")},n={axis:e};return T.runKernel(Qs,o,n)}var Mk=N({argMin_:tH});function rH(r){let t={x:v(r,"x","asin")};return T.runKernel(Ko,t)}var Lk=N({asin_:rH});function oH(r){let t={x:v(r,"x","asinh")};return T.runKernel(qo,t)}var Bk=N({asinh_:oH});function nH(r){let t={x:v(r,"x","atan")};return T.runKernel(jo,t)}var zk=N({atan_:nH});function sH(r,e){let t=v(r,"a","atan2"),o=v(e,"b","atan2");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Yo,n)}var Vk=N({atan2_:sH});function aH(r){let t={x:v(r,"x","atanh")};return T.runKernel(Xo,t)}var Wk=N({atanh_:aH});function iH(r,e,t,o,n="NHWC",s){let a=r[3],i=[...e,a],p=Gk(n);return zu(r,i,t,s,o,null,null,p)}function Lw(r,e,t,o,n,s,a="channelsLast"){let[i,p]=Il(e),u;if(a==="channelsLast")u=[i,p,r[3],r[3]];else if(a==="channelsFirst")u=[i,p,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return zu(r,u,t,o,n,s,!1,a)}function uH(r,e,t,o,n,s,a="NDHWC"){let[i,p,u]=Mw(e),c,l;if(a==="NDHWC")l="channelsLast",c=[i,p,u,r[4],r[4]];else if(a==="NCDHW")l="channelsFirst",c=[i,p,u,r[1],r[1]];else throw new Error(`Unknown dataFormat ${a}`);return Uk(r,c,t,o,n,!1,l,s)}function zu(r,e,t,o,n,s,a=!1,i="channelsLast"){let[p,u,c,l]=[-1,-1,-1,-1];if(i==="channelsLast")[p,u,c,l]=r;else if(i==="channelsFirst")[p,l,u,c]=r;else throw new Error(`Unknown dataFormat ${i}`);let[m,d,,f]=e,[h,g]=Il(t),[x,b]=Il(o),C=nc(m,x),S=nc(d,b),{padInfo:k,outHeight:_,outWidth:$}=lH(n,u,c,h,g,C,S,s,i),R=a?f*l:f,D;return i==="channelsFirst"?D=[p,R,_,$]:i==="channelsLast"&&(D=[p,_,$,R]),{batchSize:p,dataFormat:i,inHeight:u,inWidth:c,inChannels:l,outHeight:_,outWidth:$,outChannels:R,padInfo:k,strideHeight:h,strideWidth:g,filterHeight:m,filterWidth:d,effectiveFilterHeight:C,effectiveFilterWidth:S,dilationHeight:x,dilationWidth:b,inShape:r,outShape:D,filterShape:e}}function Uk(r,e,t,o,n,s=!1,a="channelsLast",i){let[p,u,c,l,m]=[-1,-1,-1,-1,-1];if(a==="channelsLast")[p,u,c,l,m]=r;else if(a==="channelsFirst")[p,m,u,c,l]=r;else throw new Error(`Unknown dataFormat ${a}`);let[d,f,h,,g]=e,[x,b,C]=Mw(t),[S,k,_]=Mw(o),$=nc(d,S),R=nc(f,k),D=nc(h,_),{padInfo:P,outDepth:O,outHeight:M,outWidth:L}=mH(n,u,c,l,x,b,C,$,R,D,i),B=s?g*m:g,z;return a==="channelsFirst"?z=[p,B,O,M,L]:a==="channelsLast"&&(z=[p,O,M,L,B]),{batchSize:p,dataFormat:a,inDepth:u,inHeight:c,inWidth:l,inChannels:m,outDepth:O,outHeight:M,outWidth:L,outChannels:B,padInfo:P,strideDepth:x,strideHeight:b,strideWidth:C,filterDepth:d,filterHeight:f,filterWidth:h,effectiveFilterDepth:$,effectiveFilterHeight:R,effectiveFilterWidth:D,dilationDepth:S,dilationHeight:k,dilationWidth:_,inShape:r,outShape:z,filterShape:e}}function pH(r,e,t,o,n){o==null&&(o=Bw(r,e,t));let s=r[0],a=r[1],i=vl((s-e+2*o)/t+1,n),p=vl((a-e+2*o)/t+1,n);return[i,p]}function cH(r,e,t,o,n,s){n==null&&(n=Bw(r,e[0],o[0]));let a=[0,0,0,t];for(let i=0;i<3;i++)r[i]+2*n>=e[i]&&(a[i]=vl((r[i]-e[i]+2*n)/o[i]+1,s));return a}function Bw(r,e,t,o=1){let n=nc(e,o);return Math.floor((r[0]*(t-1)-t+n)/2)}function Il(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function Mw(r){return typeof r=="number"?[r,r,r]:r}function nc(r,e){return e<=1?r:r+(r-1)*(e-1)}function lH(r,e,t,o,n,s,a,i,p){let u,c,l;if(typeof r=="number"){u={top:r,bottom:r,left:r,right:r,type:r===0?"VALID":"NUMBER"};let d=pH([e,t],s,o,r,i);c=d[0],l=d[1]}else if(r==="same"){c=Math.ceil(e/o),l=Math.ceil(t/n);let m=Math.max(0,(c-1)*o+s-e),d=Math.max(0,(l-1)*n+a-t),f=Math.floor(m/2),h=m-f,g=Math.floor(d/2),x=d-g;u={top:f,bottom:h,left:g,right:x,type:"SAME"}}else if(r==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((e-s+1)/o),l=Math.ceil((t-a+1)/n);else if(typeof r=="object"){let m=p==="channelsLast"?r[1][0]:r[2][0],d=p==="channelsLast"?r[1][1]:r[2][1],f=p==="channelsLast"?r[2][0]:r[3][0],h=p==="channelsLast"?r[2][1]:r[3][1];u={top:m,bottom:d,left:f,right:h,type:m===0&&d===0&&f===0&&h===0?"VALID":"EXPLICIT"},c=vl((e-s+m+d)/o+1,i),l=vl((t-a+f+h)/n+1,i)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:u,outHeight:c,outWidth:l}}function mH(r,e,t,o,n,s,a,i,p,u,c){let l,m,d,f;if(r==="valid"&&(r=0),typeof r=="number"){l={top:r,bottom:r,left:r,right:r,front:r,back:r,type:r===0?"VALID":"NUMBER"};let g=cH([e,t,o,1],[i,p,u],1,[n,s,a],r,c);m=g[0],d=g[1],f=g[2]}else if(r==="same"){m=Math.ceil(e/n),d=Math.ceil(t/s),f=Math.ceil(o/a);let h=(m-1)*n+i-e,g=(d-1)*s+p-t,x=(f-1)*a+u-o,b=Math.floor(h/2),C=h-b,S=Math.floor(g/2),k=g-S,_=Math.floor(x/2),$=x-_;l={top:S,bottom:k,left:_,right:$,front:b,back:C,type:"SAME"}}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:l,outDepth:m,outHeight:d,outWidth:f}}function vl(r,e){if(!e)return Math.trunc(r);switch(e){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${e}`)}}function Bu(r){let[e,t,o]=Il(r);return e===1&&t===1&&o===1}function gr(r,e){return Bu(r)||Bu(e)}function Ta(r){return Il(r).every(e=>e>0)}function Gk(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function Lt(r,e,t){if(t!=null){if(typeof e=="string")throw Error(`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);if(typeof e=="number")E(Ka(e),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${e}.`);else if(typeof e=="object")e.forEach(o=>{o.forEach(n=>{E(Ka(n),()=>`Error in ${r}: pad must be an integer when using dimRoundingMode ${t} but got pad ${n}.`)})});else throw Error(`Error in ${r}: Unknown padding parameter: ${e}`)}}function dH(r,e){let o={x:v(r,"x","reshape","string_or_numeric")},n={shape:e};return T.runKernel(da,o,n)}var W=N({reshape_:dH});function fH(r,e,t,o,n){let s=v(r,"x","avgPool","float32"),a=1;E(gr(t,a),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`);let i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),Lt("avgPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Qo,u,c);return l=Ue(l,s.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var dd=N({avgPool_:fH});function hH(r,e,t,o,n,s="NDHWC"){let a=v(r,"x","avgPool3d","float32"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),E(typeof t=="number"&&t>0||Array.isArray(t)&&t[0]>0&&t[1]>0&&t[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${t}'`),Lt("avgPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(Zs,u,c);return l=Ue(l,i.dtype),p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var Hk=N({avgPool3d_:hH});function gH(r,e=0){E(r.length>=1,()=>"Pass at least one tensor to concat");let t=ni(r,"tensors","concat","string_or_numeric");if(t[0].dtype==="complex64"&&t.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor + with dtype ${s.dtype}. `)}),t.length===1)return Ur(t[0]);let o=t,n={axis:e};return T.runKernel(ta,o,n)}var yt=N({concat_:gH});function xH(r,e,t=!1,o=!1){let n=v(r,"a","matMul"),s=v(e,"b","matMul");[n,s]=Oe(n,s);let a={a:n,b:s},i={transposeA:t,transposeB:o};return T.runKernel(Zo,a,i)}var Ze=N({matMul_:xH});function yH(r){let t={x:v(r,"x","sigmoid","float32")};return T.runKernel(bs,t)}var Ea=N({sigmoid_:yH});function bH(r,e,t){let o=v(r,"x","slice","string_or_numeric");if(o.rank===0)throw new Error("Slicing scalar is not possible");let n={x:o},s={begin:e,size:t};return T.runKernel(ha,n,s)}var Xe=N({slice_:bH});function CH(r){let t={x:v(r,"x","tanh","float32")};return T.runKernel(Es,t)}var kl=N({tanh_:CH});function wH(r,e,t,o,n,s){let a=v(r,"forgetBias","basicLSTMCell"),i=v(e,"lstmKernel","basicLSTMCell"),p=v(t,"lstmBias","basicLSTMCell"),u=v(o,"data","basicLSTMCell"),c=v(n,"c","basicLSTMCell"),l=v(s,"h","basicLSTMCell"),m=yt([u,l],1),d=Ze(m,i),f=Ce(d,p),h=f.shape[0],g=f.shape[1]/4,x=[h,g],b=Xe(f,[0,0],x),C=Xe(f,[0,g],x),S=Xe(f,[0,g*2],x),k=Xe(f,[0,g*3],x),_=Ce(se(Ea(b),kl(C)),se(c,Ea(Ce(a,S)))),$=se(kl(_),Ea(k));return[_,$]}var Kk=N({basicLSTMCell_:wH});function SH(r,e,t){let o=v(r,"x","batchToSpaceND"),n=e.reduce((i,p)=>i*p);E(o.rank>=1+e.length,()=>`input rank is ${o.rank} but should be > than blockShape.length ${e.length}`),E(t.length===e.length,()=>`crops.length is ${t.length} but should be equal to blockShape.length ${e.length}`),E(o.shape[0]%n===0,()=>`input tensor batch is ${o.shape[0]} but is not divisible by the product of the elements of blockShape ${e.join(" * ")} === ${n}`);let s={x:o},a={blockShape:e,crops:t};return T.runKernel(Js,s,a)}var fd=N({batchToSpaceND_:SH});function qk(r){let e;return r.rank===0||r.rank===1?e=W(r,[1,1,1,r.size]):r.rank===2?e=W(r,[1,1,r.shape[0],r.shape[1]]):r.rank===3?e=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]):e=r,e}function IH(r,e,t,o,n,s){s==null&&(s=.001);let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;o!=null&&(c=v(o,"offset","batchNorm")),E(i.rank===p.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),E(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),E(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let m={x:qk(a),scale:u,offset:c,mean:i,variance:p},d={varianceEpsilon:s},f=T.runKernel(In,m,d);return W(f,a.shape)}var nu=N({batchNorm_:IH});function vH(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${a.rank}.`),E(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),E(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var jk=N({batchNorm2d_:vH});function kH(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${a.rank}.`),E(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),E(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var Xk=N({batchNorm3d_:kH});function NH(r,e,t,o,n,s){let a=v(r,"x","batchNorm"),i=v(e,"mean","batchNorm"),p=v(t,"variance","batchNorm"),u;n!=null&&(u=v(n,"scale","batchNorm"));let c;return o!=null&&(c=v(o,"offset","batchNorm")),E(a.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${a.rank}.`),E(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),E(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${p.rank}.`),u!=null&&E(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&E(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`),nu(a,i,p,c,u,s)}var Yk=N({batchNorm4d_:NH});function TH(r,e,t){let o=v(r,"x","bincount"),n=v(e,"weights","bincount");E(o.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${o.dtype}`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(n.size===o.size||n.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${o.shape}, weights shape: ${n.shape}.`);let s={x:o,weights:n},a={size:t};return T.runKernel(Jo,s,a)}var hd=N({bincount_:TH});function _H(r,e){let t=v(r,"x","bitwiseAnd"),o=v(e,"y","bitwiseAnd");if(!br(t.shape,o.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${t.shape}, y: ${o.shape}`);if(t.dtype!=="int32"||o.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${t.dtype} and type of y: ${o.dtype}`);let n={a:t,b:o};return T.runKernel(qa,n)}var Qk=N({bitwiseAnd_:_H});function EH(r,e){let t=v(r,"s0","broadcastArgs","int32"),o=v(e,"s1","broadcastArgs","int32");if(t.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${t.rank}`);if(o.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${o.rank}`);let n={s0:t,s1:o};return T.runKernel(ea,n)}var Zk=N({broadcastArgs_:EH});function $H(r,e){let t=v(r,"broadcastTo","x"),o=t.shape;if(Ct(e),e.lengtht.rank){let u=t.shape.slice();for(;u.length=0;u--)if(n[u]===e[u])s[u]=1;else if(t.shape[u]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${e}].`);if(s.map((u,c)=>u>1?c:-1).filter(u=>u>=0).length===0)return Ur(t);let i={x:t},p={reps:s};return T.runKernel(po,i,p)}var su=N({broadcastTo_:$H});function RH(r){let t={x:v(r,"x","ceil","float32")};return T.runKernel(en,t)}var Jk=N({ceil_:RH});function $a(r,e,t){Ct(r),t=t||Ei(e);let o={shape:r,value:e,dtype:t};return T.runKernel(sa,{},o)}function DH(r,e,t){let o=v(r,"x","clipByValue");if(E(e<=t,()=>`Error in clip: min (${e}) must be less than or equal to max (${t}).`),e===t)return $a(o.shape,e,o.dtype);let n={x:o},s={clipValueMin:e,clipValueMax:t};return T.runKernel(bo,n,s)}var e2=N({clipByValue_:DH});function AH(r){return yt(r,0)}var t2=N({concat1d_:AH});function FH(r,e){return yt(r,e)}var r2=N({concat2d_:FH});function PH(r,e){return yt(r,e)}var o2=N({concat3d_:PH});function OH(r,e){return yt(r,e)}var n2=N({concat4d_:OH});function MH(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","conv2d","float32"),p=v(e,"filter","conv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${p.rank}.`),Lt("conv2d",o,a);let l=n==="NHWC"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in conv2d: depth of input (${l}) must match input depth for filter ${p.shape[2]}.`),E(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(Ta(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),E(Ta(t),()=>"Error in conv2D: Strides should be larger than 0.");let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(tn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var au=N({conv2d_:MH});function LH(r,e,t,o,n="NWC",s=1,a){let i=v(r,"x","conv1d"),p=v(e,"filter","conv1d"),u=i,c=!1;i.rank===2&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1]])),E(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),E(p.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${p.rank}.`),Lt("conv1d",o,a),E(u.shape[2]===p.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${p.shape[1]}.`),E(gr(t,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${t} and dilation '${s}'`),E(Ta(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),E(Ta(t),()=>"Error in conv1D: Stride should be larger than 0."),E(n==="NWC",()=>`Error in conv1d: got dataFormat of ${n} but only NWC is currently supported.`);let l=W(p,[1,p.shape[0],p.shape[1],p.shape[2]]),m=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=au(m,l,[1,t],o,"NHWC",[1,s],a);return c?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var s2=N({conv1d_:LH});function BH(r,e,t,o,n,s="NHWC",a){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let i=r,p=e,u=!1;e.rank===3&&(u=!0,p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]),i=[1,r[0],r[1],r[2]]),E(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),E(p.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${p.rank}`),E(t.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${t.rank}`);let c=s==="NHWC"?i[3]:i[1],l=s==="NHWC"?p.shape[3]:p.shape[1];E(c===t.shape[2],()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${t.shape[2]}.`),E(l===t.shape[3],()=>`Error in conv2dDerInput: depth of output (${l}) must match output depth for filter ${t.shape[3]}.`),Lt("conv2dDerInput",n,a);let m={dy:p,filter:t},d={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,inputShape:i},f=T.runKernel(rn,m,d);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var gd=N({conv2DBackpropInput_:BH});function zH(r,e,t,o,n,s){let a=v(r,"x","conv2dTranspose"),i=v(e,"filter","conv2dTranspose");return gd(t,a,i,o,n,"NHWC",s)}var a2=N({conv2dTranspose_:zH});function VH(r,e,t,o,n="NDHWC",s=[1,1,1]){let a=v(r,"x","conv3d"),i=v(e,"filter","conv3d"),p=a,u=!1;a.rank===4&&(u=!0,p=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(p.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${p.rank}.`),E(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),E(p.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${p.shape[4]}) must match input depth for filter ${i.shape[3]}.`),E(gr(t,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),E(n==="NDHWC",()=>`Error in conv3d: got dataFormat of ${n} but only NDHWC is currently supported.`),E(Ta(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),E(Ta(t),()=>"Error in conv3D: Strides should be larger than 0.");let c={x:p,filter:i},l={strides:t,pad:o,dataFormat:n,dilations:s},m=T.runKernel(on,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var i2=N({conv3d_:VH});function WH(r,e,t,o,n){E(r.length===e.rank,()=>`Length of inShape (${r.length}) and rank of dy (${e.rank}) must match`);let s=r,a=e,i=!1;e.rank===4&&(i=!0,a=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]),s=[1,r[0],r[1],r[2],r[3]]);let p=s[4],u=a.shape[4];E(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),E(a.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${a.rank}`),E(t.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${t.rank}`),E(p===t.shape[3],()=>`Error in conv3dDerInput: depth of input (${p}) must match input depth for filter ${t.shape[3]}.`),E(u===t.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${t.shape[4]}.`);let c={dy:a,filter:t},l={pad:n,strides:o,inputShape:s},m=T.runKernel(nn,c,l);return i?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var u2=N({conv3DBackpropInput_:WH});function UH(r,e,t,o,n){let s=v(r,"x","conv3dTranspose"),a=v(e,"filter","conv3dTranspose");return u2(t,s,a,o,n)}var p2=N({conv3dTranspose_:UH});function GH(r){let t={x:v(r,"x","cos","float32")};return T.runKernel(sn,t)}var c2=N({cos_:GH});function HH(r){let t={x:v(r,"x","cosh","float32")};return T.runKernel(an,t)}var l2=N({cosh_:HH});function KH(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumprod")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(un,s,a)}var m2=N({cumprod_:KH});function qH(r,e=0,t=!1,o=!1){let s={x:v(r,"x","cumsum")},a={axis:e,exclusive:t,reverse:o};return T.runKernel(pn,s,a)}var d2=N({cumsum_:qH});function jH(r,e,t,o=!1){let n=v(r,"x","denseBincount"),s=v(e,"weights","denseBincount");E(n.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${n.dtype}`),E(n.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${n.rank}.`),E(t>=0,()=>`size must be non-negative, but got ${t}.`),E(s.size===n.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${n.shape}, weights shape: ${s.shape}.`);let a={x:n,weights:s},i={size:t,binaryOutput:o};return T.runKernel(ra,a,i)}var f2=N({denseBincount_:jH});function XH(r,e,t="NHWC"){let o=v(r,"x","depthToSpace","float32"),n=t==="NHWC"?o.shape[1]:o.shape[2],s=t==="NHWC"?o.shape[2]:o.shape[3],a=t==="NHWC"?o.shape[3]:o.shape[1];E(e>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${e}`),E(n*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${n} and ${e} for depthToSpace with input shape - ${o.shape}`),$(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying + ${o.shape}`),E(s*e>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${e} for depthToSpace with input shape - ${o.shape}`),$(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return _.runKernel(Ln,i,p)}var e2=N({depthToSpace_:fq});function hq(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(e,"filter","depthwiseConv2d","float32"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),$(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let c=n==="NHWC"?u.shape[3]:u.shape[1];$(c===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c}) must match the inChannels dimension in filter ${p.shape[2]}.`),zt("depthwiseConv2d",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=_.runKernel(Bn,m,d);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var cl=N({depthwiseConv2d_:hq});function gq(r){let t={x:v(r,"x","diag")};return _.runKernel(ca,t)}var t2=N({diag_:gq});function xq(r,e,t,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(e,"filter","dilation2d");$(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),$(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),$(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),$(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let l={x:p,filter:i},c={strides:t,pad:o,dilations:n},m=_.runKernel(zn,l,c);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var r2=N({dilation2d_:xq});var kr={};qe(kr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>o2,getReductionAxes:()=>Td});function o2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function Td(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if($(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=W(t,[1,-1]),i=W(o,[-1,1]),p=Je(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Je(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Je(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Je(t,a)}}var s2=N({dot_:Sq});function Iq(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return _.runKernel(ji,t,o)}var fu=N({einsum_:Iq});function vq(r){let t={x:v(r,"x","elu","float32")};return _.runKernel(Wn,t)}var Ed=N({elu_:vq});function kq(r,e){let t=v(r,"x","ensureShape","string_or_numeric");if(!cw(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var a2=N({ensureShape_:kq});function Nq(r){let e=v(r,"x","erf");$(e.dtype==="int32"||e.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),e.dtype==="int32"&&(e=Ue(e,"float32"));let t={x:e};return _.runKernel(Un,t)}var i2=N({erf_:Nq});function Jw(r,e){for(let t=0;tr[s]);return[t,n]}function gi(r,e){let t=e.map(o=>1);return u2(r,t,e)}function _q(r,e,t){$(Jw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function Eq(r,e){if(Jw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function $q(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function Rq(r,e){let t=[];for(let o=e-r;o"Axis must be <= rank of the tensor");let o={input:t},n={dim:e};return _.runKernel(ma,o,n)}var Ks=N({expandDims_:Wq});function Uq(r){let t={x:v(r,"x","expm1")};return _.runKernel(bo,t)}var c2=N({expm1_:Uq});function Gq(r,e){let t=v(r,"x","tile","string_or_numeric");$(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return _.runKernel(Mo,o,n)}var hu=N({tile_:Gq});function Hq(r,e,t,o="float32"){e==null&&(e=r);let n=ie([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got - rank ${s.rank}.`),$(Ja(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},l=_.runKernel(rs,p,u);return i?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var g2=N({localResponseNormalization_:o6});function n6(r){let t={x:v(r,"x","log","float32")};return _.runKernel(To,t)}var yi=N({log_:n6});function s6(r){let t={x:v(r,"x","log1p")};return _.runKernel(Zn,t)}var Pd=N({log1p_:s6});function a6(r){return $(ra(r),()=>"The f passed in grad(f) must be a function"),(e,t)=>{let o=v(e,"x","tf.grad","string_or_numeric"),n=t!=null?v(t,"dy","tf.grad"):null;return _.tidy(()=>{let{value:s,grads:a}=_.gradients(()=>r(o),[o],n);return n!=null&&yt(s.shape,n.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Od(a),a[0]})}}function i6(r){return $(ra(r),()=>"The f passed in grads(f) must be a function"),(e,t)=>{$(Array.isArray(e),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=di(e,"args","tf.grads","string_or_numeric"),n=t!=null?v(t,"dy","tf.grads"):null;return _.tidy(()=>{let{value:s,grads:a}=_.gradients(()=>r(...o),o,n);return n!=null&&yt(s.shape,n.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Od(a),a})}}function u6(r){return $(ra(r),()=>"The f passed in valueAndGrad(f) must be a function"),(e,t)=>{$(e instanceof dt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),$(t==null||t instanceof dt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=_.gradients(()=>r(e),[e],t);return Od(o),{grad:o[0],value:n}}}function p6(r){return $(ra(r),()=>"The f passed in valueAndGrads(f) must be a function"),(e,t)=>{$(Array.isArray(e)&&e.every(n=>n instanceof dt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),$(t==null||t instanceof dt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=_.gradients(()=>r(...e),e,t);return t!=null&&yt(o.value.shape,t.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Od(o.grads),o}}function eS(r,e){$(ra(r),()=>"The f passed in variableGrads(f) must be a function"),$(e==null||Array.isArray(e)&&e.every(u=>u instanceof ci),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let t=e!=null;if(!t){e=[];for(let u in _.registeredVariables)e.push(_.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),$(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=_.gradients(r,e,null,s);$(i.some(u=>u!=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()."),$(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,l)=>{i[l]!=null&&(p[u.name]=i[l])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Nr(r){return _.customGrad(r)}function Od(r){if(r.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 l6(r){let t={x:v(r,"x","neg")};return _.runKernel(ls,t)}var mr=N({neg_:l6});function c6(r){let t={x:v(r,"x","softplus")};return _.runKernel(Ds,t)}var Md=N({softplus_:c6});function m6(r){let e=v(r,"x","logSigmoid");return Nr(o=>({value:mr(Md(mr(o))),gradFunc:a=>se(a,Pa(mr(o)))}))(e)}var x2=N({logSigmoid_:m6});function d6(r,e){let t=v(r,"a","sub"),o=v(e,"b","sub");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(Oo,n)}var Te=N({sub_:d6});function f6(r,e=-1){let t=v(r,"logits","logSoftmax");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Nr((n,s)=>{let i=La(n,e,!0),p=Te(n,i),u=Te(Ue(p,"float32"),yi(ot(Jo(p),e,!0)));return s([u]),{value:u,gradFunc:(c,m)=>{let[d]=m,f=!0,h=Jo(d);return Te(c,se(ot(c,e,f),h))}}})(t)}var y2=N({logSoftmax_:f6});function h6(r,e=null,t=!1){let o=v(r,"x","logSumExp"),n=Li(e,o.shape),s=La(o,n,!0),a=Te(o,s),i=Jo(a),p=ot(i,n),u=yi(p),l=Ce(W(s,u.shape),u);if(t){let c=gi(l.shape,n);return W(l,c)}return l}var Ld=N({logSumExp_:h6});function g6(r,e){let t=v(r,"a","logicalAnd","bool"),o=v(e,"b","logicalAnd","bool");rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Jn,n)}var Xu=N({logicalAnd_:g6});function x6(r){let t={x:v(r,"x","logicalNot","bool")};return _.runKernel(es,t)}var Bd=N({logicalNot_:x6});function y6(r,e){let t=v(r,"a","logicalOr","bool"),o=v(e,"b","logicalOr","bool");rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(ts,n)}var zd=N({logicalOr_:y6});function b6(r,e){let t=v(r,"a","logicalXor","bool"),o=v(e,"b","logicalXor","bool");return rt(t.shape,o.shape),Xu(zd(r,e),Bd(Xu(r,e)))}var b2=N({logicalXor_:b6});var Vd=2147483648;function C6(r,e,t="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(e,"values","searchSorted"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=W(o,[-1,s]),p=W(n,[-1,a]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==p.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(ze(p.shape)>=Vd)throw new Error(`values tensor size must less than ${Vd}`);if(i.shape[1]>=Vd)throw new Error(`trailing dim_size must less than ${Vd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},l={side:t};return _.runKernel(Ns,u,l)}var Pc=N({searchSorted_:C6});function C2(r,e){return Pc(r,e,"left")}function w6(r,e,t,o,n){let s=v(r,"x","maxPool"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),$(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),$(br(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),zt("maxPool",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n},c=_.runKernel(ns,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Wd=N({maxPool_:w6});function S6(r,e=[1,1,1],t,o,n,s="NDHWC"){let a=v(r,"x","maxPool3d"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),$(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),$(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),zt("maxPool3d",o,n);let u={x:i},l={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},c=_.runKernel(ha,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var w2=N({maxPool3d_:S6});function I6(r,e,t,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=_.runKernel(ga,a,i);return{result:p[0],indexes:p[1]}}var S2=N({maxPoolWithArgmax_:I6});function v6(r,e){let t=v(r,"a","maximum"),o=v(e,"b","maximum");[t,o]=Oe(t,o),t.dtype==="bool"&&(t=Ue(t,"int32"),o=Ue(o,"int32")),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(_o,n)}var Ud=N({maximum_:v6});function k6(r,e=null,t=!1){let n={x:v(r,"x","mean")},s={axis:e,keepDims:t};return _.runKernel(ss,n,s)}var Yu=N({mean_:k6});function Yr(r,e="float32"){if(St(r),e==="complex64"){let o=Yr(r,"float32"),n=Yr(r,"float32");return Ar(o,n)}let t=Yp(ze(r),e);return _.makeTensor(t,r,e)}function Ba(r,e="float32"){if(St(r),e==="complex64"){let o=Ba(r,"float32"),n=Yr(r,"float32");return Ar(o,n)}let t=bc(ze(r),e);return _.makeTensor(t,r,e)}function I2(r,e,{indexing:t="xy"}={}){if(t!=="xy"&&t!=="ij")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,"x","meshgrid",r instanceof dt?r.dtype:"float32");if(e===void 0)return[o];let n=v(e,"y","meshgrid",e instanceof dt?e.dtype:"float32"),s=ze(o.shape),a=ze(n.shape);return t==="xy"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Je(Ba([a,1],o.dtype),o),Je(n,Ba([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Je(o,Ba([1,a],o.dtype)),Je(Ba([s,1],n.dtype),n)])}function N6(r,e){let t=v(r,"a","minimum"),o=v(e,"b","minimum");[t,o]=Oe(t,o),t.dtype==="bool"&&(t=Ue(t,"int32"),o=Ue(o,"int32")),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Eo,n)}var Qu=N({minimum_:N6});function T6(r,e,t){$(t==="reflect"||t==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");$(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),$(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return _.runKernel(is,a,s)}var v2=N({mirrorPad_:T6});function _6(r,e){let t=v(r,"a","mod"),o=v(e,"b","mod");[t,o]=Oe(t,o);let n={a:t,b:o};return _.runKernel(us,n)}var k2=N({mod_:_6});function E6(r,e=null,t=!1){r=v(r,"x","moments");let o=Li(e,r.shape),n=Yu(r,o,t),s=n.shape;t||(s=gi(n.shape,o));let a=tr(Te(Ue(r,"float32"),W(n,s))),i=Yu(a,o,t);return{mean:n,variance:i}}var N2=N({moments_:E6});function $6(r,e,t,o){let n=v(e,"data","multiRNNCell"),s=di(t,"c","multiRNNCell"),a=di(o,"h","multiRNNCell"),i=n,p=[];for(let c=0;c2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},l=_.runKernel(ps,p,u);return a===1?W(l,[l.size]):l}var _2=N({multinomial_:R6});function D6(r,e){let t=v(r,"a","notEqual","string_or_numeric"),o=v(e,"b","notEqual","string_or_numeric");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return _.runKernel(Ro,n)}var Gd=N({notEqual_:D6});function A6(r,e,t=1,o=0,n="int32"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:e,onValue:t,offValue:o};return _.runKernel(ds,a,i)}var Oc=N({oneHot_:A6});function F6(r){let t={x:v(r,"x","onesLike")};return _.runKernel(xa,t)}var E2=N({onesLike_:F6});function P6(r,e){let t=v(r,"v1","outerProduct"),o=v(e,"v2","outerProduct");$(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=W(t,[-1,1]),s=W(o,[1,-1]);return Je(n,s)}var $2=N({outerProduct_:P6});function O6(r,e,t=0){let o=v(r,"x","pad");if(o.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let n={paddings:e,constantValue:t},s={x:o};return _.runKernel(fs,s,n)}var za=N({pad_:O6});function M6(r,e,t=0){return $(e.length===2,()=>"Invalid number of paddings. Must be length of 2."),za(r,[e],t)}var R2=N({pad1d_:M6});function L6(r,e,t=0){return $(e.length===2&&e[0].length===2&&e[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),za(r,e,t)}var D2=N({pad2d_:L6});function B6(r,e,t=0){return $(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),za(r,e,t)}var A2=N({pad3d_:B6});function z6(r,e,t=0){return $(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),za(r,e,t)}var F2=N({pad4d_:z6});function V6(r,e,t){let o=v(r,"x","spaceToBatchND");$(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),$(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),$(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return _.runKernel(Sa,n,s)}var Hd=N({spaceToBatchND_:V6});function W6(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o="valid");let i=v(r,"x","maxPool"),p=i,u=!1;i.rank===3&&(u=!0,p=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),$(br(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let l=Qw(p.shape,e,s,n,o),c=[l.dilationHeight,l.dilationWidth],m;o==="same"?m=G6([l.filterHeight,l.filterWidth],c):m=[[0,0],[0,0]];let d=c[0]===1&&c[1]===1,[f,h]=U6([l.inHeight,l.inWidth],c,m),g=d?o:"valid",x=d?p:Hd(p,c,f),w=(t==="avg"?()=>Id(x,e,s,g,a):()=>Wd(x,e,s,g,a))(),S=d?w:vd(w,c,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function U6(r,e,t){let o=t.map(l=>l[0]),n=t.map(l=>l[1]),s=r.concat(o,n),a=e.map((l,c)=>(l-s[c]%l)%l),i=n.map((l,c)=>l+a[c]),p=e.map((l,c)=>[o[c],i[c]]),u=e.map((l,c)=>[0,a[c]]);return[p,u]}function G6(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var P2=N({pool_:W6});function H6(r,e){let t=v(r,"x","prelu"),o=v(e,"alpha","prelu"),n={x:t,alpha:o};return _.runKernel(gs,n)}var Kd=N({prelu_:H6});function K6(r,e=null,t=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=Ue(o,"int32"));let n={x:o},s={axis:e,keepDims:t};return _.runKernel(Ho,n,s)}var O2=N({prod_:K6});function q6(r,e,t,o){let n=r.map((l,c)=>v(l,`tensors${c}`,"raggedGather","int32")),s=v(e,"paramsDenseValues","raggedGather"),a=v(t,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=_.runKernel(Qp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var M2=N({raggedGather_:q6});function j6(r,e,t){let o=v(r,"starts","raggedRange"),n=v(e,"limits","raggedRange",o.dtype),s=v(t,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=_.runKernel(Zp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var L2=N({raggedRange_:j6});function X6(r,e,t,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(e,"values","raggedTensorToTensor"),i=v(t,"defaultValue","raggedTensorToTensor",a.dtype),p=o.map((c,m)=>v(c,`tensors${m}`,"raggedTensorToTensor","int32")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},l={rowPartitionTypes:n};return _.runKernel(Jp,u,l)}var B2=N({raggedTensorToTensor_:X6});function Y6(r,e,t){St(r);let o=ze(r),n=null;if(t==null||t==="float32")n=new Float32Array(o);else if(t==="int32")n=new Int32Array(o);else if(t==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;soN,createVideoElement:()=>pj,encodeStrings:()=>sN,expectArrayBuffersEqual:()=>uj,expectArraysClose:()=>nj,expectArraysEqual:()=>aj,expectNumbersClose:()=>nN,expectPromiseToFail:()=>sj,expectValuesInRange:()=>ij,play:()=>lj,testEpsilon:()=>jd});var oj=.001,oN=.1;function nj(r,e,t){return t==null&&(t=jd()),uS(r,e,(o,n)=>pS(o,n,t))}function jd(){return _.backend.floatPrecision()===32?oj:oN}function uS(r,e,t){let o=!0;if((Mt(r)||Mt(e))&&(o=!1),Mt(r)&&Mt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=ur(r),i=ur(e);if(!Sr(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Mt(r)?r:Us(r),s=Mt(e)?e:Us(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. + ${o.shape}`),E(a%(e*e)===0,()=>`Dimension size must be evenly divisible by ${e*e} but is ${a} for depthToSpace with input shape ${o.shape}`);let i={x:o},p={blockSize:e,dataFormat:t};return T.runKernel(ln,i,p)}var h2=N({depthToSpace_:XH});function YH(r,e,t,o,n="NHWC",s=[1,1],a){let i=v(r,"x","depthwiseConv2d","float32"),p=v(e,"filter","depthwiseConv2d","float32"),u=i,c=!1;i.rank===3&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),E(p.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${p.rank}.`);let l=n==="NHWC"?u.shape[3]:u.shape[1];E(l===p.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${l}) must match the inChannels dimension in filter ${p.shape[2]}.`),Lt("depthwiseConv2d",o,a);let m={x:u,filter:p},d={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a},f=T.runKernel(mn,m,d);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var sc=N({depthwiseConv2d_:YH});function QH(r){let t={x:v(r,"x","diag")};return T.runKernel(oa,t)}var g2=N({diag_:QH});function ZH(r,e,t,o,n=[1,1],s="NHWC"){let a=v(r,"x","dilation2d"),i=v(e,"filter","dilation2d");E(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),E(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),E(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let p=a,u=!1;a.rank===3&&(p=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]),u=!0),E(p.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${p.shape[3]} vs ${i.shape[2]}`);let c={x:p,filter:i},l={strides:t,pad:o,dilations:n},m=T.runKernel(dn,c,l);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var x2=N({dilation2d_:ZH});var Sr={};qe(Sr,{assertAndGetBroadcastShape:()=>rt,getBroadcastDims:()=>y2,getReductionAxes:()=>xd});function y2(r,e){let t=r.length,o=[];for(let n=0;n1&&a===1&&o.unshift(s)}return o}function xd(r,e){let t=[];for(let o=0;o1)&&t.unshift(s)}return t}function rt(r,e){let t=Math.max(r.length,e.length),o=new Array(t);for(let n=0;n`Error in dot: inputs must all be rank 1 or 2, but got ranks ${t.rank} and ${o.rank}.`);let n=t.rank===1?t.size:t.shape[1],s=o.rank===1?o.size:o.shape[0];if(E(n===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${n} and ${s}.`),t.rank===1&&o.rank===1){let a=W(t,[1,-1]),i=W(o,[-1,1]),p=Ze(a,i);return W(p,[])}else if(t.rank===1&&o.rank===2){let a=W(t,[1,-1]),i=W(o,[o.shape[0],o.shape[1]]),p=Ze(a,i);return W(p,[p.size])}else if(t.rank===2&&o.rank===1){let a=W(o,[-1,1]),i=Ze(t,a);return W(i,[i.size])}else{let a=W(o,[o.shape[0],o.shape[1]]);return Ze(t,a)}}var C2=N({dot_:oK});function nK(r,...e){let t=e.map((n,s)=>v(n,`tensors${s}`,"einsum")),o={equation:r};return T.runKernel(Bi,t,o)}var iu=N({einsum_:nK});function sK(r){let t={x:v(r,"x","elu","float32")};return T.runKernel(hn,t)}var bd=N({elu_:sK});function aK(r,e){let t=v(r,"x","ensureShape","string_or_numeric");if(!ZC(t.shape,e))throw new Error(`EnsureShape: Shape of tensor ${t.shape} is not compatible with expected shape ${e}`);return r}var w2=N({ensureShape_:aK});function iK(r){let e=v(r,"x","erf");E(e.dtype==="int32"||e.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),e.dtype==="int32"&&(e=Ue(e,"float32"));let t={x:e};return T.runKernel(gn,t)}var S2=N({erf_:iK});function zw(r,e){for(let t=0;tr[s]);return[t,n]}function ii(r,e){let t=e.map(o=>1);return I2(r,t,e)}function pK(r,e,t){E(zw(e,t),()=>`${r} supports only inner-most axes for now. Got axes ${e} and rank-${t} input.`)}function cK(r,e){if(zw(r,e))return null;let t=[];for(let o=0;ot.push(o)),t}function lK(r){return r.map((e,t)=>[t,e]).sort((e,t)=>e[1]-t[1]).map(e=>e[0])}function mK(r,e){let t=[];for(let o=e-r;o"Axis must be <= rank of the tensor");let o={input:t},n={dim:e};return T.runKernel(na,o,n)}var Ms=N({expandDims_:IK});function vK(r){let t={x:v(r,"x","expm1")};return T.runKernel(bn,t)}var N2=N({expm1_:vK});function kK(r,e){let t=v(r,"x","tile","string_or_numeric");E(t.rank===e.length,()=>`Error in transpose: rank of input ${t.rank} must match length of reps ${e}.`);let o={x:t},n={reps:e};return T.runKernel(po,o,n)}var uu=N({tile_:kK});function NK(r,e,t,o="float32"){e==null&&(e=r);let n=me([r,e],o),s=r<=e?r:e;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got + rank ${s.rank}.`),E(Ka(e),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${e}.`);let a=s,i=!1;s.rank===3&&(i=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let p={x:a},u={depthRadius:e,bias:t,alpha:o,beta:n},c=T.runKernel(Bn,p,u);return i?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var R2=N({localResponseNormalization_:LK});function BK(r){let t={x:v(r,"x","log","float32")};return T.runKernel(Fn,t)}var pi=N({log_:BK});function zK(r){let t={x:v(r,"x","log1p")};return T.runKernel(Pn,t)}var kd=N({log1p_:zK});function VK(r){return E(qs(r),()=>"The f passed in grad(f) must be a function"),(e,t)=>{let o=v(e,"x","tf.grad","string_or_numeric"),n=t!=null?v(t,"dy","tf.grad"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(o),[o],n);return n!=null&&xt(s.shape,n.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Nd(a),a[0]})}}function WK(r){return E(qs(r),()=>"The f passed in grads(f) must be a function"),(e,t)=>{E(Array.isArray(e),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let o=ni(e,"args","tf.grads","string_or_numeric"),n=t!=null?v(t,"dy","tf.grads"):null;return T.tidy(()=>{let{value:s,grads:a}=T.gradients(()=>r(...o),o,n);return n!=null&&xt(s.shape,n.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Nd(a),a})}}function UK(r){return E(qs(r),()=>"The f passed in valueAndGrad(f) must be a function"),(e,t)=>{E(e instanceof mt,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),E(t==null||t instanceof mt,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:o,value:n}=T.gradients(()=>r(e),[e],t);return Nd(o),{grad:o[0],value:n}}}function GK(r){return E(qs(r),()=>"The f passed in valueAndGrads(f) must be a function"),(e,t)=>{E(Array.isArray(e)&&e.every(n=>n instanceof mt),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),E(t==null||t instanceof mt,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let o=T.gradients(()=>r(...e),e,t);return t!=null&&xt(o.value.shape,t.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Nd(o.grads),o}}function Vw(r,e){E(qs(r),()=>"The f passed in variableGrads(f) must be a function"),E(e==null||Array.isArray(e)&&e.every(u=>u instanceof ri),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let t=e!=null;if(!t){e=[];for(let u in T.registeredVariables)e.push(T.registeredVariables[u])}let o=t?e.filter(u=>!u.trainable):null,n=e.length;e=e.filter(u=>u.trainable),E(e.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${n} variables is trainable.`);let s=!0,{value:a,grads:i}=T.gradients(r,e,null,s);E(i.some(u=>u!=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()."),E(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);let p={};return e.forEach((u,c)=>{i[c]!=null&&(p[u.name]=i[c])}),o!=null&&o.forEach(u=>p[u.name]=null),{value:a,grads:p}}function Ir(r){return T.customGrad(r)}function Nd(r){if(r.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 HK(r){let t={x:v(r,"x","neg")};return T.runKernel(pa,t)}var pr=N({neg_:HK});function KK(r){let t={x:v(r,"x","softplus")};return T.runKernel(Cs,t)}var Td=N({softplus_:KK});function qK(r){let e=v(r,"x","logSigmoid");return Ir(o=>({value:pr(Td(pr(o))),gradFunc:a=>se(a,Ea(pr(o)))}))(e)}var D2=N({logSigmoid_:qK});function jK(r,e){let t=v(r,"a","sub"),o=v(e,"b","sub");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(Ts,n)}var Te=N({sub_:jK});function XK(r,e=-1){let t=v(r,"logits","logSoftmax");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and axis was ${e}`);return Ir((n,s)=>{let i=Ra(n,e,!0),p=Te(n,i),u=Te(Ue(p,"float32"),pi(ot(_o(p),e,!0)));return s([u]),{value:u,gradFunc:(l,m)=>{let[d]=m,f=!0,h=_o(d);return Te(l,se(ot(l,e,f),h))}}})(t)}var A2=N({logSoftmax_:XK});function YK(r,e=null,t=!1){let o=v(r,"x","logSumExp"),n=_i(e,o.shape),s=Ra(o,n,!0),a=Te(o,s),i=_o(a),p=ot(i,n),u=pi(p),c=Ce(W(s,u.shape),u);if(t){let l=ii(c.shape,n);return W(c,l)}return c}var _d=N({logSumExp_:YK});function QK(r,e){let t=v(r,"a","logicalAnd","bool"),o=v(e,"b","logicalAnd","bool");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(On,n)}var Uu=N({logicalAnd_:QK});function ZK(r){let t={x:v(r,"x","logicalNot","bool")};return T.runKernel(Mn,t)}var Ed=N({logicalNot_:ZK});function JK(r,e){let t=v(r,"a","logicalOr","bool"),o=v(e,"b","logicalOr","bool");rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Ln,n)}var $d=N({logicalOr_:JK});function eq(r,e){let t=v(r,"a","logicalXor","bool"),o=v(e,"b","logicalXor","bool");return rt(t.shape,o.shape),Uu($d(r,e),Ed(Uu(r,e)))}var F2=N({logicalXor_:eq});var Rd=2147483648;function tq(r,e,t="left"){let o=v(r,"sortedSequence","searchSorted"),n=v(e,"values","searchSorted"),s=o.shape[o.shape.length-1],a=n.shape[n.shape.length-1],i=W(o,[-1,s]),p=W(n,[-1,a]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==p.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(ze(p.shape)>=Rd)throw new Error(`values tensor size must less than ${Rd}`);if(i.shape[1]>=Rd)throw new Error(`trailing dim_size must less than ${Rd} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:p},c={side:t};return T.runKernel(fs,u,c)}var _l=N({searchSorted_:tq});function P2(r,e){return _l(r,e,"left")}function rq(r,e,t,o,n){let s=v(r,"x","maxPool"),a=1,i=s,p=!1;s.rank===3&&(p=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),E(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),E(gr(t,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${t} and dilations '${a}'`),Lt("maxPool",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n},l=T.runKernel(Wn,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Dd=N({maxPool_:rq});function oq(r,e=[1,1,1],t,o,n,s="NDHWC"){let a=v(r,"x","maxPool3d"),i=a,p=!1;a.rank===4&&(p=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2],a.shape[3]])),E(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),E(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Lt("maxPool3d",o,n);let u={x:i},c={filterSize:e,strides:t,pad:o,dimRoundingMode:n,dataFormat:s},l=T.runKernel(ia,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3],l.shape[4]]):l}var O2=N({maxPool3d_:oq});function nq(r,e,t,o,n=!1){let a={x:v(r,"x","maxPoolWithArgmax")},i={filterSize:e,strides:t,pad:o,includeBatchInIndex:n},p=T.runKernel(ua,a,i);return{result:p[0],indexes:p[1]}}var M2=N({maxPoolWithArgmax_:nq});function sq(r,e){let t=v(r,"a","maximum"),o=v(e,"b","maximum");[t,o]=Oe(t,o),t.dtype==="bool"&&(t=Ue(t,"int32"),o=Ue(o,"int32")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Vn,n)}var Ad=N({maximum_:sq});function aq(r,e=null,t=!1){let n={x:v(r,"x","mean")},s={axis:e,keepDims:t};return T.runKernel(Un,n,s)}var Gu=N({mean_:aq});function Gr(r,e="float32"){if(Ct(r),e==="complex64"){let o=Gr(r,"float32"),n=Gr(r,"float32");return Er(o,n)}let t=Gp(ze(r),e);return T.makeTensor(t,r,e)}function Da(r,e="float32"){if(Ct(r),e==="complex64"){let o=Da(r,"float32"),n=Gr(r,"float32");return Er(o,n)}let t=ml(ze(r),e);return T.makeTensor(t,r,e)}function L2(r,e,{indexing:t="xy"}={}){if(t!=="xy"&&t!=="ij")throw new TypeError(`${t} is not a valid third argument to meshgrid`);if(r===void 0)return[];let o=v(r,"x","meshgrid",r instanceof mt?r.dtype:"float32");if(e===void 0)return[o];let n=v(e,"y","meshgrid",e instanceof mt?e.dtype:"float32"),s=ze(o.shape),a=ze(n.shape);return t==="xy"?(o=W(o,[1,-1]),n=W(n,[-1,1]),[Ze(Da([a,1],o.dtype),o),Ze(n,Da([1,s],n.dtype))]):(o=W(o,[-1,1]),n=W(n,[1,-1]),[Ze(o,Da([1,a],o.dtype)),Ze(Da([s,1],n.dtype),n)])}function iq(r,e){let t=v(r,"a","minimum"),o=v(e,"b","minimum");[t,o]=Oe(t,o),t.dtype==="bool"&&(t=Ue(t,"int32"),o=Ue(o,"int32")),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Hn,n)}var Hu=N({minimum_:iq});function uq(r,e,t){E(t==="reflect"||t==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${t}.`);let o=v(r,"x","mirrorPad");if(o.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");E(e.length===o.rank,()=>`Padding doesn't match input. Must be ${o.rank}. Got ${e.length}.`);let n=t==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),E(e[i][0]>=0&&e[i][0]<=o.shape[i]-n&&e[i][1]>=0&&e[i][1]<=o.shape[i]-n,()=>`Padding in dimension ${i} cannot be greater than or equal to ${o.shape[i]-n} or less than 0 for input of shape ${o.shape}`);let s={paddings:e,mode:t},a={x:o};return T.runKernel(Kn,a,s)}var B2=N({mirrorPad_:uq});function pq(r,e){let t=v(r,"a","mod"),o=v(e,"b","mod");[t,o]=Oe(t,o);let n={a:t,b:o};return T.runKernel(qn,n)}var z2=N({mod_:pq});function cq(r,e=null,t=!1){r=v(r,"x","moments");let o=_i(e,r.shape),n=Gu(r,o,t),s=n.shape;t||(s=ii(n.shape,o));let a=Zt(Te(Ue(r,"float32"),W(n,s))),i=Gu(a,o,t);return{mean:n,variance:i}}var V2=N({moments_:cq});function lq(r,e,t,o){let n=v(e,"data","multiRNNCell"),s=ni(t,"c","multiRNNCell"),a=ni(o,"h","multiRNNCell"),i=n,p=[];for(let l=0;l2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);t=t||Math.random();let p={logits:a===1?W(n,[1,-1]):n},u={numSamples:e,seed:t,normalized:o},c=T.runKernel(jn,p,u);return a===1?W(c,[c.size]):c}var U2=N({multinomial_:mq});function dq(r,e){let t=v(r,"a","notEqual","string_or_numeric"),o=v(e,"b","notEqual","string_or_numeric");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o};return T.runKernel(Yn,n)}var Fd=N({notEqual_:dq});function fq(r,e,t=1,o=0,n="int32"){if(e<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${e}`);let a={indices:v(r,"indices","oneHot","int32")},i={dtype:n,depth:e,onValue:t,offValue:o};return T.runKernel(Jn,a,i)}var El=N({oneHot_:fq});function hq(r){let t={x:v(r,"x","onesLike")};return T.runKernel(ca,t)}var G2=N({onesLike_:hq});function gq(r,e){let t=v(r,"v1","outerProduct"),o=v(e,"v2","outerProduct");E(t.rank===1&&o.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${t.rank} and ${o.rank}.`);let n=W(t,[-1,1]),s=W(o,[1,-1]);return Ze(n,s)}var H2=N({outerProduct_:gq});function xq(r,e,t=0){let o=v(r,"x","pad");if(o.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let n={paddings:e,constantValue:t},s={x:o};return T.runKernel(es,s,n)}var Aa=N({pad_:xq});function yq(r,e,t=0){return E(e.length===2,()=>"Invalid number of paddings. Must be length of 2."),Aa(r,[e],t)}var K2=N({pad1d_:yq});function bq(r,e,t=0){return E(e.length===2&&e[0].length===2&&e[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Aa(r,e,t)}var q2=N({pad2d_:bq});function Cq(r,e,t=0){return E(e.length===3&&e[0].length===2&&e[1].length===2&&e[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Aa(r,e,t)}var j2=N({pad3d_:Cq});function wq(r,e,t=0){return E(e.length===4&&e[0].length===2&&e[1].length===2&&e[2].length===2&&e[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Aa(r,e,t)}var X2=N({pad4d_:wq});function Sq(r,e,t){let o=v(r,"x","spaceToBatchND");E(o.rank>=1+e.length,()=>`input rank ${o.rank} should be > than [blockShape] ${e.length}`),E(t.length===e.length,()=>`paddings.shape[0] ${t.length} must be equal to [blockShape] ${e.length}`),E(o.shape.reduce((a,i,p)=>p>0&&p<=e.length?a&&(i+t[p-1][0]+t[p-1][1])%e[p-1]===0:a,!0),()=>`input spatial dimensions ${o.shape.slice(1)} with paddings ${t.toString()} must be divisible by blockShapes ${e.toString()}`);let n={x:o},s={blockShape:e,paddings:t};return T.runKernel(ga,n,s)}var Pd=N({spaceToBatchND_:Sq});function Iq(r,e,t,o,n,s,a){n==null&&(n=[1,1]),s==null&&(s=1),o===0&&(o="valid");let i=v(r,"x","maxPool"),p=i,u=!1;i.rank===3&&(u=!0,p=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),E(gr(s,n),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${n}'`);let c=Lw(p.shape,e,s,n,o),l=[c.dilationHeight,c.dilationWidth],m;o==="same"?m=kq([c.filterHeight,c.filterWidth],l):m=[[0,0],[0,0]];let d=l[0]===1&&l[1]===1,[f,h]=vq([c.inHeight,c.inWidth],l,m),g=d?o:"valid",x=d?p:Pd(p,l,f),C=(t==="avg"?()=>dd(x,e,s,g,a):()=>Dd(x,e,s,g,a))(),S=d?C:fd(C,l,h);return u?W(S,[S.shape[1],S.shape[2],S.shape[3]]):S}function vq(r,e,t){let o=t.map(c=>c[0]),n=t.map(c=>c[1]),s=r.concat(o,n),a=e.map((c,l)=>(c-s[l]%c)%c),i=n.map((c,l)=>c+a[l]),p=e.map((c,l)=>[o[l],i[l]]),u=e.map((c,l)=>[0,a[l]]);return[p,u]}function kq(r,e){let o=r.map((a,i)=>a+(a-1)*(e[i]-1)).map(a=>a-1),n=o.map(a=>Math.floor(a/2)),s=o.map((a,i)=>a-n[i]);return o.map((a,i)=>[n[i],s[i]])}var Y2=N({pool_:Iq});function Nq(r,e){let t=v(r,"x","prelu"),o=v(e,"alpha","prelu"),n={x:t,alpha:o};return T.runKernel(rs,n)}var Od=N({prelu_:Nq});function Tq(r,e=null,t=!1){let o=v(r,"x","prod");o.dtype==="bool"&&(o=Ue(o,"int32"));let n={x:o},s={axis:e,keepDims:t};return T.runKernel(os,n,s)}var Q2=N({prod_:Tq});function _q(r,e,t,o){let n=r.map((c,l)=>v(c,`tensors${l}`,"raggedGather","int32")),s=v(e,"paramsDenseValues","raggedGather"),a=v(t,"indices","raggedGather","int32"),i={paramsNestedSplits:n,paramsDenseValues:s,indices:a},p={outputRaggedRank:o},u=T.runKernel(Hp,i,p);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var Z2=N({raggedGather_:_q});function Eq(r,e,t){let o=v(r,"starts","raggedRange"),n=v(e,"limits","raggedRange",o.dtype),s=v(t,"deltas","raggedRange",o.dtype),a={starts:o,limits:n,deltas:s},i=T.runKernel(Kp,a);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var J2=N({raggedRange_:Eq});function $q(r,e,t,o,n){let s=v(r,"shape","raggedTensorToTensor","int32"),a=v(e,"values","raggedTensorToTensor"),i=v(t,"defaultValue","raggedTensorToTensor",a.dtype),p=o.map((l,m)=>v(l,`tensors${m}`,"raggedTensorToTensor","int32")),u={shape:s,values:a,defaultValue:i,rowPartitionTensors:p},c={rowPartitionTypes:n};return T.runKernel(qp,u,c)}var e1=N({raggedTensorToTensor_:$q});function Rq(r,e,t){Ct(r);let o=ze(r),n=null;if(t==null||t==="float32")n=new Float32Array(o);else if(t==="int32")n=new Int32Array(o);else if(t==="bool")n=new Uint8Array(o);else throw new Error(`Unknown data type ${t}`);for(let s=0;sy1,createVideoElement:()=>Gq,encodeStrings:()=>C1,expectArrayBuffersEqual:()=>Uq,expectArraysClose:()=>Bq,expectArraysEqual:()=>Vq,expectNumbersClose:()=>b1,expectPromiseToFail:()=>zq,expectValuesInRange:()=>Wq,play:()=>Hq,testEpsilon:()=>Ld});var Lq=.001,y1=.1;function Bq(r,e,t){return t==null&&(t=Ld()),Xw(r,e,(o,n)=>Yw(o,n,t))}function Ld(){return T.backend.floatPrecision()===32?Lq:y1}function Xw(r,e,t){let o=!0;if((Pt(r)||Pt(e))&&(o=!1),Pt(r)&&Pt(e)&&(o=!0),o){let a=r.constructor.name,i=e.constructor.name;if(a!==i)throw new Error(`Arrays are of different type. Actual: ${a}. Expected: ${i}`)}if(Array.isArray(r)&&Array.isArray(e)){let a=sr(r),i=sr(e);if(!br(a,i))throw new Error(`Arrays have different shapes. Actual: [${a}]. Expected: [${i}]`)}let n=Pt(r)?r:Fs(r),s=Pt(e)?e:Fs(e);if(n.length!==s.length)throw new Error(`Arrays have different lengths actual: ${n.length} vs expected: ${s.length}. Actual: ${n}. Expected: ${s}.`);for(let a=0;ae.fail(),()=>e()),typeof expect!="undefined"&&expect().nothing()}function aj(r,e){let t=typeof e=="string"||typeof e=="number"||typeof e=="boolean"?[e]:e;return dn(r)||dn(r[0])||dn(e)||dn(e[0])?uS(r,t,(o,n)=>o==n):uS(r,e,(o,n)=>pS(o,n,0))}function nN(r,e,t){if(t==null&&(t=jd()),!pS(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!="undefined"&&expect().nothing()}function pS(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function ij(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function uj(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener("loadeddata",o=>t(e)),e.load()})}async function lj(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var Ju=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,this.dtype=o,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=s||Math.random();this.random=Qd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;for(;!o;){let n,s,a;do n=2*this.random()-1,s=2*this.random()-1,a=n*n+s*s;while(a>=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!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}},Xd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Qd.alea(s.toString()),this.randn=new Ju(0,1,o,!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,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Qd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function cj(r,e,t=1,o="float32",n){if(St(r),t==null&&(t=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new Xd(e,t,o,n),a=ie(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),Bo(e,0)}var cN=N({reverse1d_:wj});function Sj(r,e){let t=v(r,"x","reverse");return $(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),Bo(t,e)}var mN=N({reverse2d_:Sj});function Ij(r,e){let t=v(r,"x","reverse");return $(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),Bo(t,e)}var dN=N({reverse3d_:Ij});function vj(r,e){let t=v(r,"x","reverse");return $(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),Bo(t,e)}var fN=N({reverse4d_:vj});function kj(r){let t={x:v(r,"x","round")};return _.runKernel(Is,t)}var ef=N({round_:kj});function Nj(r){let t={x:v(r,"x","rsqrt","float32")};return _.runKernel(Do,t)}var hN=N({rsqrt_:Nj});function Tj(r){let t={x:v(r,"x","selu")};return _.runKernel(Ts,t)}var gN=N({selu_:Tj});function _j(r,e,t,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(e,"depthwiseFilter","separableConv2d"),u=v(t,"pointwiseFilter","separableConv2d"),l=i,c=!1;if(i.rank===3&&(c=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");$(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),$(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),$(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),$(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),$(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];$(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=cl(l,p,o,n,a,s),g=du(f,u,1,"valid",a);return c?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var xN=N({separableConv2d_:_j});async function Ej(r,e){let t=v(r,"x","setdiff1d"),o=v(e,"y","setdiff1d");$(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),$(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),$(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let l=0;l`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Ye(o,[e],[t])}var SN=N({slice1d_:Aj});function Fj(r,e,t){let o=v(r,"x","slice2d");return $(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var IN=N({slice2d_:Fj});function Pj(r,e,t){let o=v(r,"x","slice3d");return $(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var vN=N({slice3d_:Pj});function Oj(r,e,t){let o=v(r,"x","slice4d");return $(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Ye(o,e,t)}var kN=N({slice4d_:Oj});function Mj(r,e=-1){let t=v(r,"logits","softmax","float32");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return _.runKernel(Fs,o,n)}var NN=N({softmax_:Mj});function Lj(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return _.runKernel(Xi,e)}var fl=N({fft_:Lj});function Bj(r){$(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return _.runKernel(Yi,e)}var ep=N({ifft_:Bj});function zj(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ep(n)}else{let n=[t,2*(e-1)],s=W(bi(r),[t,e]),a=W(gu(r),[t,e]),i=Bo(Ye(s,[0,1],[t,e-2]),1),p=se(Bo(Ye(a,[0,1],[t,e-2]),1),ke(-1)),u=bt([s,i],1),l=bt([a,p],1),c=W(Ar(u,l),[n[0],n[1]]);o=ep(c)}if(o=bi(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var tf=N({irfft_:zj});function Vj(r,e,t=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:e,axis:t};return _.runKernel(Ia,n,s)}var Ci=N({split_:Vj});function Wj(r,e){$(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Ye(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=bt([r,Yr(f)],r.shape.length-1),t=e}else n=r;let s=Kt(n),a=W(Ar(n,s),[o,t]),i=fl(a),p=Math.floor(t/2)+1,u=bi(i),l=gu(i),c=Ci(u,[p,t-p],u.shape.length-1),m=Ci(l,[p,t-p],l.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Ar(c[0],m[0]),d)}var hl=N({rfft_:Wj});function Uj(r,e){let t=v(r,"a","squaredDifference"),o=v(e,"b","squaredDifference");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return _.runKernel(Po,n,s)}var rf=N({squaredDifference_:Uj});function Gj(r,e){let t=v(r,"x","squeeze","string_or_numeric");return W(t,mw(t.shape,e).newShape)}var gl=N({squeeze_:Gj});function Hj(r,e=0){let t=di(r,"tensors","stack","string_or_numeric");$(t.length>=1,()=>"Pass at least one tensor to tf.stack"),t.length>0&&$(e<=t[0].rank,()=>"Axis must be <= rank of the tensor");let o=t,n={axis:e};return _.runKernel(ya,o,n)}var Tr=N({stack_:Hj});function Kj(r,e=0){let o={x:v(r,"x","step")},n={alpha:e};return _.runKernel(Ko,o,n)}var of=N({step_:Kj});function qj(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let l={x:v(r,"x","stridedSlice","string_or_numeric")},c={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return _.runKernel(Os,l,c)}var TN=N({stridedSlice_:qj});function jj(r){let t={x:v(r,"x","tan","float32")};return _.runKernel(Ms,t)}var _N=N({tan_:jj});function rr(r,e){fo(r);let t=ur(r,e);if(t.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return vr(r,null,t,e)}function bu(r,e,t){if(fo(r),e!=null&&e.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=ur(r,t);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return vr(r,e,o,t)}function nf(r,e,t){if(fo(r),e!=null&&e.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=ur(r,t);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return vr(r,e,o,t)}function EN(r,e,t){if(fo(r),e!=null&&e.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=ur(r,t);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return vr(r,e,o,t)}function $N(r,e,t){if(fo(r),e!=null&&e.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=ur(r,t);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return vr(r,e,o,t)}function RN(r,e,t){if(fo(r),e!=null&&e.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=ur(r,t);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return e=e||o,vr(r,e,o,t)}var Cu={};qe(Cu,{calculateShapes:()=>DN,validateInput:()=>xl,validateUpdateShape:()=>lS});function lS(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let c=n;c= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=_.runKernel(Bs,s,a);return{values:i,indices:p}}var FN=N({topk_:Yj});function Qj(r,e=0,t=1,o,n){if(St(r),o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new Ju(e,t,o,!0,n),a=ie(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:t},n={axis:e},[s,a]=_.runKernel(nu,o,n);return{values:s,indices:a}}var ON=N({unique_:Zj});function Jj(r,e,t){let o=v(r,"x","unsortedSegmentSum"),n=v(e,"segmentIds","unsortedSegmentSum","int32");$(Ja(t),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:t};return _.runKernel(su,s,a)}var MN=N({unsortedSegmentSum_:Jj});function eX(r,e=0){let t=v(r,"x","unstack","string_or_numeric");$(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return _.runKernel(Ta,o,n)}var zo=N({unstack_:eX});function LN(r,e){return Pc(r,e,"right")}function BN(r,e=!0,t,o){return _.makeVariable(r,e,t,o)}function sf(r,e){let t=[];for(let s=0;s0,()=>"mask cannot be scalar"),yt(i.slice(s,s+a),n.shape,"mask's shape must match the first K dimensions of tensor's shape,");let p=1;for(let h=s;hi).reverse()),$(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{$(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype==="complex64"?De(()=>{let a=bi(o),i=gu(o);return a=_.runKernel(Kr,{x:a},s),i=_.runKernel(Kr,{x:i},s),t&&(i=mr(i)),Ar(a,i)}):_.runKernel(Kr,n,s)}var yl=N({transpose_:nX});function sX(r,e,t,o,n=!0){let s=v(r,"v","movingAverage"),a=v(e,"x","movingAverage"),i=v(t,"decay","movingAverage");Fw(s,a),$(Sr(s.shape,a.shape),()=>"Shape mismatch in v and x");let p=ke(1),u=Te(p,i),l=se(Te(a,s),u);if(n){$(o!=null,()=>"When using zeroDebias: true, step is required.");let c=v(o,"step","movingAverage");l=Xe(l,Te(p,xi(i,c)))}return Ce(s,l)}var aX=N({movingAverage_:sX});function iX(r,e,t){St(t);let o=v(r,"indices","scatterND","int32"),n=v(e,"updates","scatterND");xl(n,o,t);let s={indices:o,updates:n},a={shape:t};return _.runKernel(vs,s,a)}var uX=N({scatterND_:iX});function zN(r,e,t,o){if(r.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function lX(r,e,t,o=0){St(t);let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(e,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);zN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return _.runKernel(Ps,i,p)}var cX=N({sparseToDense_:lX});function mX(r,e){let t=v(e,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:t};return _.runKernel(Kn,n)}var dX=N({gatherND_:mX});function VN(r,e){if(e==null)return r.shape.slice();if(Sr(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),$(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof dt?n.clone():n;let s=VN(n,t),a=1-e,i=Xe(Rd(Ce(dl(s,0,1,"float32",o),a)),a);return se(n,i)}var hX=N({dropout_:fX});function cS(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Mc(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),$(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),yt(o.shape.slice(0,o.shape.length-1),n.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=o.shape[o.shape.length-1];$(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],l=dw("bool",p);for(let c=0;cg.value-h.value),l[c]=0;for(let h=0;hUN,depthwiseConv2d:()=>KN,matMul:()=>qN});function yX(r,e,t,o,n,s="NHWC",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]])),$(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),$(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),$(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],l=s==="NHWC"?p.shape[3]:p.shape[1];$(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),$(l===t[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${t[3]}).`),zt("conv2dDerFilter",n,a);let c={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return _.runKernel(Ui,c,m)}var WN=N({conv2DBackpropFilter_:yX});function tp(r,e,t){if(t==null||t==="linear")return r;if(t==="relu")return se(r,of(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function rp(r,e){let t=e,o=Td(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function op(r,e,t,o){if(e==="linear")return r;if(e==="relu")return yu(r);if(e==="elu")return Ed(r);if(e==="relu6")return Jd(r);if(e==="prelu")return Kd(r,t);if(e==="leakyrelu")return Fd(r,o);if(e==="sigmoid")return Pa(r);throw new Error(`Unknown fused activation ${e}.`)}var np=(r,e)=>!(r>0)||e==="linear";function bX({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:l}){if(p=p||"linear",np(_.state.gradientDepth,p)===!1){$(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let T=du(r,e,t,o,n,s,a);return i!=null&&(T=Ce(T,i)),op(T,p,u,l)}let c=v(r,"x","conv2d","float32"),m=v(e,"filter","conv2d","float32"),d=c,f=!1;c.rank===3&&(f=!0,d=W(c,[1,c.shape[0],c.shape[1],c.shape[2]])),$(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),zt("fused conv2d",o,a);let h=n==="NHWC"?d.shape[3]:d.shape[1];$(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),$(br(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=Ku(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,"bias","fused conv2d"),[x]=Oe(x,c),n==="NHWC"?rt(g.outShape,x.shape):($(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),$(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let T=u.shape;if($(T.length<=1||T.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${T.length}.`),T.length===1)$(T[0]===1||T[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the number of output channels (${g.outChannels}).`);else if(T.length===3)try{rt(T,g.outShape)}catch(E){let R=`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,"prelu weights","fused conv2d")}let w=(T,E)=>{$(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,F,O]=E,M=tp(T,F,p);$(Hu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=Nd(D.shape,M,R,t,o),B=WN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=rp(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:l};return i==null?Nr((E,R,D)=>{let F=_.runKernel(jo,S,k);return D([R,E,F]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:w}})(d,m):Nr((E,R,D,F)=>{let O=_.runKernel(jo,S,k);return F([R,E,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:w}})(d,m,x)}var UN=N({fusedConv2d_:bX});function CX(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},l={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return _.runKernel(Gi,u,l)}var GN=N({depthwiseConv2dNativeBackpropFilter_:CX});function wX(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},l={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},c=_.runKernel(Hi,u,l);return p?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var HN=N({depthwiseConv2dNativeBackpropInput_:wX});function SX({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:l}){if(np(_.state.gradientDepth,p)===!1){let k=cl(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),op(k,p,u,l)}let c=v(r,"x","depthwiseConv2d","float32"),m=v(e,"filter","depthwiseConv2d","float32"),d=c,f=!1;c.rank===3&&(f=!0,d=W(c,[1,c.shape[0],c.shape[1],c.shape[2]])),$(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),$(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),$(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),$(br(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),zt("fused depthwiseConv2d",o,a);let h=Ku(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Oe(g,c),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,"prelu weights","fused depthwiseConv2d"));let b=(k,T)=>{$(Hu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[E,R,D,F]=T,O=tp(k,D,p),M=HN(R.shape,O,E,t,o,s,a),L=GN(R,O,E.shape,t,o,s,a);if(F!=null){let B=rp(g,O);return[M,L,B]}return[M,L]},w={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:l};return i==null?Nr((T,E,R)=>{let D=_.runKernel(Xo,w,S);return R([E,T,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Nr((T,E,R,D)=>{let F=_.runKernel(Xo,w,S);return D([E,T,F,R]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:b}})(d,m,g)}var KN=N({fusedDepthwiseConv2d_:SX});function IX({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(np(_.state.gradientDepth,s)===!1){let O=Je(r,e,t,o);return n!=null&&(O=Ce(O,n)),op(O,s,a,i)}let p=v(r,"a","fused matMul"),u=v(e,"b","fused matMul");[p,u]=Oe(p,u);let l=t?p.shape[p.rank-2]:p.shape[p.rank-1],c=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);$(l===c,()=>`Error in fused matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let w=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,l,m]):W(p,[g,m,l]),k=o?W(u,[x,d,c]):W(u,[x,c,d]),T;n!=null&&(T=v(n,"bias","fused matMul"),[T]=Oe(T,p),rt(w,T.shape));let E;a!=null&&(E=v(a,"prelu weights","fused matMul"));let R=(O,M)=>{let[L,B,z,U]=M,j=tp(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Je(j,B,!1,!0),Y=Je(L,j,!0,!1)):!t&&o?(q=Je(j,B,!1,!1),Y=Je(j,L,!0,!1)):t&&!o?(q=Je(B,j,!1,!0),Y=Je(L,j,!1,!1)):(q=Je(B,j,!0,!0),Y=Je(j,L,!0,!0)),n!=null){let J=rp(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:T,preluActivationWeights:E},F={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Nr((M,L,B)=>{let z=_.runKernel(qo,D,F);return B([M,L,z]),{value:W(z,w),gradFunc:R}})(S,k):Nr((M,L,B,z)=>{let U=_.runKernel(qo,D,F);return z([M,L,U,B]),{value:W(U,w),gradFunc:R}})(S,k,T)}var qN=N({fusedMatMul_:IX});function vX(r){return Mc(r,.54,.46)}var jN=N({hammingWindow_:vX});function kX(r){return Mc(r,.5,.5)}var uf=N({hannWindow_:kX});function NX(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Ye(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),$(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),$(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),$(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),$(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let l={image:a,boxes:i,boxInd:p},c={method:n,extrapolationValue:s,cropSize:o};return _.runKernel(Mn,l,c)}var YN=N({cropAndResize_:_X});function EX(r){let e=v(r,"image","flipLeftRight","float32");$(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return _.runKernel(Gn,t,{})}var QN=N({flipLeftRight_:EX});function $X(r){let e=v(r,"image","grayscaleToRGB"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),$(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,hu(e,n)}var ZN=N({grayscaleToRGB_:$X});function RX(r){let e=v(r,"image","RGBToGrayscale"),t=e.rank-1,o=e.shape[t];$(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),$(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,"float32"),a=rr([.2989,.587,.114]),i;switch(e.rank){case 2:i=fu("ij,j->i",s,a);break;case 3:i=fu("ijk,k->ij",s,a);break;case 4:i=fu("ijkl,l->ijk",s,a);break;case 5:i=fu("ijklm,m->ijkl",s,a);break;case 6:i=fu("ijklmn,n->ijklm",s,a);break;default:throw new Error("Not a valid tensor rank.")}return i=Ks(i,-1),Ue(i,n)}var JN=N({rgbToGrayscale_:RX});function DX(r,e,t=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");$(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return _.runKernel(Vs,s,a)}var eT=N({rotateWithOffset_:DX});function en(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),$(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),$(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),$(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),$(e.rank===1,()=>"scores must be a 1D tensor"),$(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),$(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function AX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(e,"scores","nonMaxSuppression","float32"),i=en(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return _.runKernel(cs,{boxes:s,scores:a},p)}var tT=N({nonMaxSuppression_:AX});function rT(r,e,t){let o=FX(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function FX(r,e,t){return OX(r,e,t||PX)}function PX(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function lf(r,e,t,o,n){return dS(r,e,t,o,n,0)}function cf(r,e,t,o,n,s){return dS(r,e,t,o,n,0,!1,s,!0)}function mf(r,e,t,o,n,s){return dS(r,e,t,o,n,s,!0)}function dS(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(oT);let l=s>0?-.5/s:0,c=[],m=[];for(;c.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:w}=g;if(x=w;--k){let T=MX(r,b,c[k]);if(T>=o){S=!0;break}if(g.score=g.score*LX(o,l,T),g.score<=n)break}g.suppressBeginIndex=c.length,S||(g.score===x?(c.push(b),m.push(g.score)):g.score>n&&rT(u,g,oT))}let d=c.length,f=t-d;i&&f>0&&(c.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:c};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function MX(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),l=Math.min(n[1],n[3]),c=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(c-u)*(m-l);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,l),x=Math.min(i,c),b=Math.min(p,m),w=Math.max(x-h,0)*Math.max(b-g,0);return w/(d+f-w)}function LX(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function oT(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function BX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(e,"scores","nonMaxSuppressionAsync"),i=en(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],l=p[1],{selectedIndices:c}=lf(u,l,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),rr(c,"int32")}var nT=BX;function zX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=en(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},l={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},c=_.runKernel(ms,u,l);return{selectedIndices:c[0],selectedScores:c[1]}}var sT=N({nonMaxSuppressionWithScore_:zX});async function VX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=en(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),l=u[0],c=u[1],{selectedIndices:m,selectedScores:d}=mf(l,c,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:rr(m,"int32"),selectedScores:rr(d)}}var aT=VX;function WX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=en(a,i,t,o,n,null),u=p.maxOutputSize,l=p.iouThreshold,c=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:l,scoreThreshold:c,padToMaxOutputSize:s},f=_.runKernel(ni,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var iT=N({nonMaxSuppressionPadded_:WX});async function UX(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=en(a,i,t,o,n,null),u=p.maxOutputSize,l=p.iouThreshold,c=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=cf(m,d,u,l,c,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:rr(f,"int32"),validOutputs:ke(h,"int32")}}var uT=UX;function GX(r,e,t=!1,o=!1){let n=v(r,"images","resizeBilinear");$(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),$(o===!1||t===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=_.runKernel(Cs,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var pT=N({resizeBilinear_:GX});function HX(r,e,t=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");$(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),$(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),$(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),$(o===!1||t===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=_.runKernel(bs,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var lT=N({resizeNearestNeighbor_:HX});function KX(r,e="binary",t=!1,o=.5){let n=v(r,"image","threshold"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(rr([o]),255),l,c,m,d;if($(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),$(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),$(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),$(e==="otsu"||e==="binary",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[l,c,m]=Ci(n,[1,1,1],-1);let g=se(l,s),x=se(c,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e==="otsu"){let g=kd(Ue(ef(d),"int32"),pr([]),256);u=qX(g,p)}let f=t?ml(d,u):ju(d,u);return Ue(se(f,255),"int32")}function qX(r,e){let t=rr([-1]),o=rr([0]),n=rr([0]),s,a,i,p,u,l;for(let c=0;c`Error in transform: image must be rank 4,but got rank ${a.rank}.`),$(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),$(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return _.runKernel(zs,p,u)}var mT=N({transform_:jX});function XX(r,e,t){let o=v(r,"a","bandPart");$(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof e=="number"?($(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),$(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,"numLower","bandPart")):($(e.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),i=Lo(Fc(e,0),s,Qu(e,s))),typeof t=="number"?($(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),$(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,"numUpper","bandPart")):($(t.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),p=Lo(Fc(t,0),a,Qu(t,a)));let u=W(xu(0,s,1,"int32"),[-1,1]),l=xu(0,a,1,"int32"),c=Te(u,l),m=Xu(ml(c,i),Ad(c,mr(p))),d=Yr([s,a],o.dtype);return W(Tr(zo(W(o,[-1,s,a])).map(f=>Lo(m,f,d))),n)}var dT=N({bandPart_:XX});function YX(r){let e;if(Array.isArray(r)){e=!1,$(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=Ci(r,r.shape[0],0).map(n=>gl(n,[0]));$(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return hT(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=zo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,l]=hT(p,e);n.push(u),s.push(l)});let a=W(Tr(n,0),r.shape),i=W(Tr(s,0),r.shape);return[a,i]}}function hT(r,e=!1){return _.tidy(()=>{$(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=$d(t),s=Xr(r),a=bu([[1]],[1,1]),i=Xr(a),p=t>=o?o:t;for(let u=0;u{let d=Ye(s,[u,u],[t-u,1]),f=qu(d),h=Ye(s,[u,u],[1,1]),g=Lo(ju(h,0),bu([[-1]]),bu([[1]])),x=Te(h,se(g,f)),b=Xe(d,x);b.shape[0]===1?i=Xr(a):i=bt([a,Ye(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let w=mr(Xe(Je(g,x),f)),S=Ye(s,[u,0],[t-u,o]),k=se(w,i),T=yl(i);if(u===0)s=Te(S,Je(k,Je(T,S)));else{let D=Te(S,Je(k,Je(T,S)));s=bt([Ye(s,[0,0],[u,o]),D],0)}let E=yl(k),R=Ye(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Je(Je(R,i),E));else{let D=Te(R,Je(Je(R,i),E));n=bt([Ye(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Lt([l,c,m])}return!e&&t>o&&(n=Ye(n,[0,0],[t,o]),s=Ye(s,[0,0],[o,o])),[n,s]})}var gT=N({qr_:QX});var Dt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Dt||(Dt={}));function ZX(r,e,t=Dt.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;e!=null&&(n=v(e,"weights","computeWeightedLoss"));let s=n==null?o:se(o,n);if(t===Dt.NONE)return s;if(t===Dt.SUM)return ot(s);if(t===Dt.MEAN){if(n==null)return Yu(s);{let a=o.size/n.size,i=Xe(ot(s),ot(n));return a>1?Xe(i,ke(a)):i}}if(t===Dt.SUM_BY_NONZERO_WEIGHTS){if(n==null)return Xe(ot(s),ke(o.size));{let a=se(n,Ba(o.shape)),i=Ue(ot(Gd(a,ke(0))),"float32");return Xe(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var dr=N({computeWeightedLoss_:ZX});function JX(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(e,"predictions","absoluteDifference"),a=null;t!=null&&(a=v(t,"weights","absoluteDifference")),yt(n.shape,s.shape,"Error in absoluteDifference: ");let i=er(Te(n,s));return dr(i,a,o)}var xT=N({absoluteDifference_:JX});function e5(r,e,t,o,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(e,"predictions","cosineDistance"),i=null;o!=null&&(i=v(o,"weights","cosineDistance")),yt(s.shape,a.shape,"Error in cosineDistance: ");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return dr(u,i,n)}var yT=N({cosineDistance_:e5});function t5(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(e,"predictions","hingeLoss"),a=null;t!=null&&(a=v(t,"weights","hingeLoss")),yt(n.shape,s.shape,"Error in hingeLoss: ");let i=ke(1);n=Te(se(ke(2),n),i);let p=yu(Te(i,se(n,s)));return dr(p,a,o)}var bT=N({hingeLoss_:t5});function r5(r,e,t,o=1,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(e,"predictions","huberLoss"),i=null;t!=null&&(i=v(t,"weights","huberLoss")),yt(s.shape,a.shape,"Error in huberLoss: ");let p=ke(o),u=er(Te(a,s)),l=Qu(u,p),c=Te(u,l),m=Ce(se(ke(.5),tr(l)),se(p,c));return dr(m,i,n)}var CT=N({huberLoss_:r5});function o5(r,e,t,o=1e-7,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(e,"predictions","logLoss"),i=null;t!=null&&(i=v(t,"weights","logLoss")),yt(s.shape,a.shape,"Error in logLoss: ");let p=ke(1),u=ke(o),l=mr(se(s,yi(Ce(a,u)))),c=se(Te(p,s),yi(Ce(Te(p,a),u))),m=Te(l,c);return dr(m,i,n)}var wT=N({logLoss_:o5});function n5(r,e,t,o=Dt.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(e,"predictions","meanSquaredError"),a=null;t!=null&&(a=v(t,"weights","meanSquaredError")),yt(n.shape,s.shape,"Error in meanSquaredError: ");let i=rf(n,s);return dr(i,a,o)}var ST=N({meanSquaredError_:n5});function s5(r,e){let t=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(e,"logits","sigmoidCrossEntropyWithLogits");yt(t.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=yu(o),s=se(o,t),a=Pd(Jo(mr(er(o))));return Ce(Te(n,s),a)}function a5(r,e,t,o=0,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(e,"logits","sigmoidCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","sigmoidCrossEntropy")),yt(s.shape,a.shape,"Error in sigmoidCrossEntropy: "),o>0){let u=ke(o),l=ke(1),c=ke(.5);s=Ce(se(s,Te(l,u)),se(c,u))}let p=s5(s,a);return dr(p,i,n)}var IT=N({sigmoidCrossEntropy_:a5});function i5(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Nr((n,s,a)=>{let p=Ld(s,[t],!0),u=Te(Ue(s,"float32"),p);a([n,u]);let l=mr(se(u,n));return{value:ot(l,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=gi(d.shape,[t]);return[se(W(d,x),Te(Ue(h,"float32"),Jo(g))),se(W(d,x),Te(Jo(g),Ue(h,"float32")))]}}})(r,e)}function u5(r,e,t,o=0,n=Dt.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(e,"logits","softmaxCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","softmaxCrossEntropy")),yt(s.shape,a.shape,"Error in softmaxCrossEntropy: "),o>0){let u=ke(o),l=ke(1),c=ke(s.shape[1]);s=Ce(se(s,Te(l,u)),Xe(u,c))}let p=i5(s,a);return dr(p,i,n)}var vT=N({softmaxCrossEntropy_:u5});function p5(r,e,t,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(e,"values","sparseFillEmptyRows"),a=v(t,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape - ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=_.runKernel(eu,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var kT=N({sparseFillEmptyRows_:p5});function l5(r,e,t){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(e,"inputShape","sparseReshape","int32"),s=v(t,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape - ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=_.runKernel(ui,a);return{outputIndices:i[0],outputShape:i[1]}}var NT=N({sparseReshape_:l5});function c5(r,e,t){let o=v(r,"data","sparseSegmentMean"),n=v(e,"indices","sparseSegmentMean","int32"),s=v(t,"segmentIds","sparseSegmentMean","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape +Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function zq(r,e){r().then(()=>e.fail(),()=>e()),typeof expect!="undefined"&&expect().nothing()}function Vq(r,e){let t=typeof e=="string"||typeof e=="number"||typeof e=="boolean"?[e]:e;return zo(r)||zo(r[0])||zo(e)||zo(e[0])?Xw(r,t,(o,n)=>o==n):Xw(r,e,(o,n)=>Yw(o,n,0))}function b1(r,e,t){if(t==null&&(t=Ld()),!Yw(r,e,t))throw new Error(`Numbers differ: actual === ${r}, expected === ${e}`);typeof expect!="undefined"&&expect().nothing()}function Yw(r,e,t){return!isFinite(r)&&!isFinite(e)?!0:!(isNaN(r)||isNaN(e)||Math.abs(r-e)>t)}function Wq(r,e,t){for(let o=0;ot)throw new Error(`Value out of range:${r[o]} low: ${e}, high: ${t}`)}function Uq(r,e){let t=new Float32Array(r),o=new Float32Array(e);if(t.length!==o.length)throw new Error(`Expected ArrayBuffer to be of length ${o.length}, but it was ${t.length}`);for(let n=0;n{e.addEventListener("loadeddata",o=>t(e)),e.load()})}async function Hq(r){await r.play(),"requestVideoFrameCallback"in r&&await new Promise(e=>{r.requestVideoFrameCallback(e)})}var qu=class{constructor(e,t,o,n,s){this.mean=e,this.stdDev=t,this.dtype=o,this.nextVal=NaN,this.truncated=n,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=s||Math.random();this.random=Vd.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let n=this.nextVal;return this.nextVal=NaN,n}let e,t,o=!1;for(;!o;){let n,s,a;do n=2*this.random()-1,s=2*this.random()-1,a=n*n+s*s;while(a>=1||a===0);let i=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*n*i,t=this.mean+this.stdDev*s*i,(!this.truncated||this.isValidTruncated(e))&&(o=!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}},Bd=class{constructor(e,t,o,n){this.alpha=e,this.beta=1/t,this.dtype=o;let s=n||Math.random();this.randu=Vd.alea(s.toString()),this.randn=new qu(0,1,o,!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,o,n,s,a;for(;;){do n=this.randn.nextValue(),a=1+this.c*n;while(a<=0);if(a*=a*a,e=n*n,t=1-.331*e*e,o=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=o,n==null&&(n=Math.random()),typeof n=="number"&&(n=n.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Vd.alea(n)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function Kq(r,e,t=1,o="float32",n){if(Ct(r),t==null&&(t=1),o==null&&(o="float32"),o!=="float32"&&o!=="int32")throw new Error(`Unsupported data type ${o}`);let s=new Bd(e,t,o,n),a=me(r,o);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${e.rank}.`),mo(e,0)}var N1=N({reverse1d_:r6});function o6(r,e){let t=v(r,"x","reverse");return E(t.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${t.rank}.`),mo(t,e)}var T1=N({reverse2d_:o6});function n6(r,e){let t=v(r,"x","reverse");return E(t.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${t.rank}.`),mo(t,e)}var _1=N({reverse3d_:n6});function s6(r,e){let t=v(r,"x","reverse");return E(t.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${t.rank}.`),mo(t,e)}var E1=N({reverse4d_:s6});function a6(r){let t={x:v(r,"x","round")};return T.runKernel(cs,t)}var Gd=N({round_:a6});function i6(r){let t={x:v(r,"x","rsqrt","float32")};return T.runKernel(ls,t)}var $1=N({rsqrt_:i6});function u6(r){let t={x:v(r,"x","selu")};return T.runKernel(hs,t)}var R1=N({selu_:u6});function p6(r,e,t,o,n,s=[1,1],a="NHWC"){let i=v(r,"x","separableConv2d"),p=v(e,"depthwiseFilter","separableConv2d"),u=v(t,"pointwiseFilter","separableConv2d"),c=i,l=!1;if(i.rank===3&&(l=!0,c=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");E(c.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`),E(p.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${p.rank}.`),E(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${p.rank}.`),E(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),E(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let m=p.shape[2],d=p.shape[3];E(u.shape[2]===m*d,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${m*d}, but got ${u.shape[2]}.`);let f=sc(c,p,o,n,a,s),g=au(f,u,1,"valid",a);return l?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var D1=N({separableConv2d_:p6});async function c6(r,e){let t=v(r,"x","setdiff1d"),o=v(e,"y","setdiff1d");E(t.dtype===o.dtype,()=>`x and y should have the same dtype, but got x (${t.dtype}) and y (${o.dtype}).`),E(t.rank===1,()=>`x should be 1D tensor, but got x (${t.shape}).`),E(o.rank===1,()=>`y should be 1D tensor, but got y (${o.shape}).`);let n=await t.data(),s=await o.data(),a=new Set(s),i=0;for(let c=0;c`slice1d expects a rank-1 tensor, but got a rank-${o.rank} tensor`),Xe(o,[e],[t])}var M1=N({slice1d_:f6});function h6(r,e,t){let o=v(r,"x","slice2d");return E(o.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var L1=N({slice2d_:h6});function g6(r,e,t){let o=v(r,"x","slice3d");return E(o.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var B1=N({slice3d_:g6});function x6(r,e,t){let o=v(r,"x","slice4d");return E(o.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${o.rank} tensor`),Xe(o,e,t)}var z1=N({slice4d_:x6});function y6(r,e=-1){let t=v(r,"logits","softmax","float32");if(e===-1&&(e=t.rank-1),e!==t.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${t.rank} and dim was ${e}`);let o={logits:t},n={dim:e};return T.runKernel(Is,o,n)}var V1=N({softmax_:y6});function b6(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(zi,e)}var uc=N({fft_:b6});function C6(r){E(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);let e={input:r};return T.runKernel(Vi,e)}var ju=N({ifft_:C6});function w6(r){let e=r.shape[r.shape.length-1],t=r.size/e,o;if(e<=2){let n=W(r,[t,e]);o=ju(n)}else{let n=[t,2*(e-1)],s=W(ci(r),[t,e]),a=W(pu(r),[t,e]),i=mo(Xe(s,[0,1],[t,e-2]),1),p=se(mo(Xe(a,[0,1],[t,e-2]),1),ke(-1)),u=yt([s,i],1),c=yt([a,p],1),l=W(Er(u,c),[n[0],n[1]]);o=ju(l)}if(o=ci(o),r.rank===3&&r.shape[0]!==0){let n=o,s=r.shape[0];o=W(o,[s,o.shape[0]/s,o.shape[1]]),n.dispose()}return o}var Hd=N({irfft_:w6});function S6(r,e,t=0){let n={x:v(r,"x","split")},s={numOrSizeSplits:e,axis:t};return T.runKernel(xa,n,s)}var li=N({split_:S6});function I6(r,e){E(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let t=r.shape[r.shape.length-1],o=r.size/t,n;if(e!=null&&e0),h=r.shape.map(g=>g);h[r.shape.length-1]=e,n=Xe(r,f,h),t=e}else if(e!=null&&e>t){let f=r.shape.map(h=>h);f[r.shape.length-1]=e-t,n=yt([r,Gr(f)],r.shape.length-1),t=e}else n=r;let s=Gt(n),a=W(Er(n,s),[o,t]),i=uc(a),p=Math.floor(t/2)+1,u=ci(i),c=pu(i),l=li(u,[p,t-p],u.shape.length-1),m=li(c,[p,t-p],c.shape.length-1),d=n.shape.slice();return d[n.shape.length-1]=p,W(Er(l[0],m[0]),d)}var pc=N({rfft_:I6});function v6(r,e){let t=v(r,"a","squaredDifference"),o=v(e,"b","squaredDifference");[t,o]=Oe(t,o),rt(t.shape,o.shape);let n={a:t,b:o},s={};return T.runKernel(ks,n,s)}var Kd=N({squaredDifference_:v6});function k6(r,e){let t=v(r,"x","squeeze","string_or_numeric");return W(t,JC(t.shape,e).newShape)}var cc=N({squeeze_:k6});function N6(r,e=0){let t=ni(r,"tensors","stack","string_or_numeric");E(t.length>=1,()=>"Pass at least one tensor to tf.stack"),t.length>0&&E(e<=t[0].rank,()=>"Axis must be <= rank of the tensor");let o=t,n={axis:e};return T.runKernel(la,o,n)}var vr=N({stack_:N6});function T6(r,e=0){let o={x:v(r,"x","step")},n={alpha:e};return T.runKernel(wo,o,n)}var qd=N({step_:T6});function _6(r,e,t,o,n=0,s=0,a=0,i=0,p=0){let c={x:v(r,"x","stridedSlice","string_or_numeric")},l={begin:e,end:t,strides:o,beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};return T.runKernel(Ns,c,l)}var W1=N({stridedSlice_:_6});function E6(r){let t={x:v(r,"x","tan","float32")};return T.runKernel(_s,t)}var U1=N({tan_:E6});function Jt(r,e){io(r);let t=sr(r,e);if(t.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return wr(r,null,t,e)}function mu(r,e,t){if(io(r),e!=null&&e.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let o=sr(r,t);if(o.length!==2&&o.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return wr(r,e,o,t)}function jd(r,e,t){if(io(r),e!=null&&e.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let o=sr(r,t);if(o.length!==3&&o.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return wr(r,e,o,t)}function G1(r,e,t){if(io(r),e!=null&&e.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let o=sr(r,t);if(o.length!==4&&o.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return wr(r,e,o,t)}function H1(r,e,t){if(io(r),e!=null&&e.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let o=sr(r,t);if(o.length!==5&&o.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return wr(r,e,o,t)}function K1(r,e,t){if(io(r),e!=null&&e.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let o=sr(r,t);if(o.length!==6&&o.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(o.length===1&&e==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return e=e||o,wr(r,e,o,t)}var du={};qe(du,{calculateShapes:()=>q1,validateInput:()=>lc,validateUpdateShape:()=>Qw});function Qw(r,e,t){let o=e.rank>1?e.shape[e.rank-1]:1,n=e.rank>1?e.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${e.shape}, shape: ${r}, sliceDim: ${o}, and batchDim: ${n}.`;if(t.rank1?e.shape[o-1]:1,s=t.length,a=1;for(let l=n;l= 0 but got ${e}`);if(e>n)throw new Error(`'k' passed to topk() must be <= the last dimension (${n}) but got ${e}`);let s={x:o},a={k:e,sorted:t},[i,p]=T.runKernel($s,s,a);return{values:i,indices:p}}var X1=N({topk_:R6});function D6(r,e=0,t=1,o,n){if(Ct(r),o!=null&&o==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new qu(e,t,o,!0,n),a=me(r,o);for(let i=0;i0,()=>"The input tensor must be at least 1D");let o={x:t},n={axis:e},[s,a]=T.runKernel(Yi,o,n);return{values:s,indices:a}}var Q1=N({unique_:A6});function F6(r,e,t){let o=v(r,"x","unsortedSegmentSum"),n=v(e,"segmentIds","unsortedSegmentSum","int32");E(Ka(t),()=>"numSegments must be of dtype int");let s={x:o,segmentIds:n},a={numSegments:t};return T.runKernel(Qi,s,a)}var Z1=N({unsortedSegmentSum_:F6});function P6(r,e=0){let t=v(r,"x","unstack","string_or_numeric");E(e>=-t.shape.length&&e`Axis = ${e} is not in [-${t.shape.length}, ${t.shape.length})`);let o={value:t},n={axis:e};return T.runKernel(wa,o,n)}var fo=N({unstack_:P6});function J1(r,e){return _l(r,e,"right")}function eN(r,e=!0,t,o){return T.makeVariable(r,e,t,o)}function Xd(r,e){let t=[];for(let s=0;s0,()=>"mask cannot be scalar"),xt(i.slice(s,s+a),n.shape,"mask's shape must match the first K dimensions of tensor's shape,");let p=1;for(let h=s;hi).reverse()),E(o.rank===e.length,()=>`Error in transpose: rank of input ${o.rank} must match length of perm ${e}.`),e.forEach(a=>{E(a>=0&&a`All entries in 'perm' must be between 0 and ${o.rank-1} but got ${e}`)}),o.rank<=1)return o.clone();let n={x:o},s={perm:e};return o.dtype==="complex64"?De(()=>{let a=ci(o),i=pu(o);return a=T.runKernel(co,{x:a},s),i=T.runKernel(co,{x:i},s),t&&(i=pr(i)),Er(a,i)}):T.runKernel(co,n,s)}var mc=N({transpose_:B6});function z6(r,e,t,o,n=!0){let s=v(r,"v","movingAverage"),a=v(e,"x","movingAverage"),i=v(t,"decay","movingAverage");ww(s,a),E(br(s.shape,a.shape),()=>"Shape mismatch in v and x");let p=ke(1),u=Te(p,i),c=se(Te(a,s),u);if(n){E(o!=null,()=>"When using zeroDebias: true, step is required.");let l=v(o,"step","movingAverage");c=je(c,Te(p,ui(i,l)))}return Ce(s,c)}var V6=N({movingAverage_:z6});function W6(r,e,t){Ct(t);let o=v(r,"indices","scatterND","int32"),n=v(e,"updates","scatterND");lc(n,o,t);let s={indices:o,updates:n},a={shape:t};return T.runKernel(ms,s,a)}var U6=N({scatterND_:W6});function tN(r,e,t,o){if(r.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${r.dtype}.`);if(r.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${r.shape}.`);let n=r.rank>0?r.shape[0]:1,s=r.rank>1?r.shape[1]:1;if(t.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${t.length}, should be: ${s}.`);let a=e.size;if(!(e.rank===0||e.rank===1&&a===n))throw new Error(`sparseValues has incorrect shape ${e.shape}, should be [] or [${n}]`);if(e.dtype!==o.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function H6(r,e,t,o=0){Ct(t);let n=v(r,"sparseIndices","sparseToDense","int32"),s=v(e,"sparseValues","sparseToDense","string_or_numeric"),a=v(o,"defaultValue","sparseToDense",s.dtype);tN(n,s,t,a);let i={sparseIndices:n,sparseValues:s,defaultValue:a},p={outputShape:t};return T.runKernel(vs,i,p)}var K6=N({sparseToDense_:H6});function q6(r,e){let t=v(e,"indices","gatherND","int32"),n={params:v(r,"x","gatherND","string_or_numeric"),indices:t};return T.runKernel(vn,n)}var j6=N({gatherND_:q6});function rN(r,e){if(e==null)return r.shape.slice();if(br(r.shape,e))return e;if(r.shape.length===e.length){let t=[];for(let o=0;o`x has to be a floating point tensor since it's going to be scaled, but got a ${n.dtype} tensor instead.`),E(e>=0&&e<1,()=>`rate must be a float in the range [0, 1), but got ${e}.`),e===0)return r instanceof mt?n.clone():n;let s=rN(n,t),a=1-e,i=je(wd(Ce(ic(s,0,1,"float32",o),a)),a);return se(n,i)}var Y6=N({dropout_:X6});function Zw(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function $l(r,e,t){let o=1-r%2,n=new Float32Array(r);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${o.rank}`),E(o.rank-1===n.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${o.rank} and targets rank ${n.rank}`),xt(o.shape.slice(0,o.shape.length-1),n.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=o.shape[o.shape.length-1];E(t>0&&t<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${t}`);let a=await o.data(),i=await n.data(),[p,u]=[a.length/s,s],c=ew("bool",p);for(let l=0;lg.value-h.value),c[l]=0;for(let h=0;hnN,depthwiseConv2d:()=>iN,matMul:()=>uN});function J6(r,e,t,o,n,s="NHWC",a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]])),E(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),E(p.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${p.shape}.`),E(t.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${t}.`);let u=s==="NHWC"?i.shape[3]:i.shape[1],c=s==="NHWC"?p.shape[3]:p.shape[1];E(u===t[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${t[2]}.`),E(c===t[3],()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${t[3]}).`),Lt("conv2dDerFilter",n,a);let l={x:i,dy:p},m={strides:o,pad:n,dataFormat:s,dimRoundingMode:a,filterShape:t};return T.runKernel(Fi,l,m)}var oN=N({conv2DBackpropFilter_:J6});function Xu(r,e,t){if(t==null||t==="linear")return r;if(t==="relu")return se(r,qd(e));throw new Error(`Cannot compute gradient for fused activation ${t}.`)}function Yu(r,e){let t=e,o=xd(r.shape,e.shape);return o.length>0&&(t=ot(t,o)),W(t,r.shape)}function Qu(r,e,t,o){if(e==="linear")return r;if(e==="relu")return lu(r);if(e==="elu")return bd(r);if(e==="relu6")return Ud(r);if(e==="prelu")return Od(r,t);if(e==="leakyrelu")return vd(r,o);if(e==="sigmoid")return Ea(r);throw new Error(`Unknown fused activation ${e}.`)}var Zu=(r,e)=>!(r>0)||e==="linear";function ej({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(p=p||"linear",Zu(T.state.gradientDepth,p)===!1){E(n==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${n} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let _=au(r,e,t,o,n,s,a);return i!=null&&(_=Ce(_,i)),Qu(_,p,u,c)}let l=v(r,"x","conv2d","float32"),m=v(e,"filter","conv2d","float32"),d=l,f=!1;l.rank===3&&(f=!0,d=W(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${m.rank}.`),Lt("fused conv2d",o,a);let h=n==="NHWC"?d.shape[3]:d.shape[1];E(m.shape[2]===h,()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${m.shape[2]}.`),E(gr(t,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`);let g=zu(d.shape,m.shape,t,s,o,a),x;i!=null&&(x=v(i,"bias","fused conv2d"),[x]=Oe(x,l),n==="NHWC"?rt(g.outShape,x.shape):(E(x.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${x.shape.length}.`),E(x.shape.length===0||x.shape[0]===g.outChannels||x.shape[0]===1,()=>`Error in fused conv2d: bias shape (${x.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let _=u.shape;if(E(_.length<=1||_.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${_.length}.`),_.length===1)E(_[0]===1||_[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the number of output channels (${g.outChannels}).`);else if(_.length===3)try{rt(_,g.outShape)}catch($){let R=`Error in fused conv2d: PReLU activation weights (${_}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(R)}b=v(u,"prelu weights","fused conv2d")}let C=(_,$)=>{E(n==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${n} but only NHWC is currently supported.`);let[R,D,P,O]=$,M=Xu(_,P,p);E(Bu(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let L=gd(D.shape,M,R,t,o),B=oN(D,M,R.shape,t,o),z=[L,B];if(O!=null){let U=Yu(O,M);z.push(U)}return z},S={x:d,filter:m,bias:x,preluActivationWeights:b},k={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir(($,R,D)=>{let P=T.runKernel(Io,S,k);return D([R,$,P]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:C}})(d,m):Ir(($,R,D,P)=>{let O=T.runKernel(Io,S,k);return P([R,$,O,D]),f&&(O=W(O,[O.shape[1],O.shape[2],O.shape[3]])),{value:O,gradFunc:C}})(d,m,x)}var nN=N({fusedConv2d_:ej});function tj(r,e,t,o,n,s=[1,1],a){let i=r;r.rank===3&&(i=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let p=e;p.rank===3&&(p=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={x:i,dy:p},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,filterShape:t};return T.runKernel(Pi,u,c)}var sN=N({depthwiseConv2dNativeBackpropFilter_:tj});function rj(r,e,t,o,n,s=[1,1],a){let i=e,p=!1;e.rank===3&&(p=!0,i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u={dy:i,filter:t},c={strides:o,pad:n,dimRoundingMode:a,dilations:s,inputShape:r},l=T.runKernel(Oi,u,c);return p?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var aN=N({depthwiseConv2dNativeBackpropInput_:rj});function oj({x:r,filter:e,strides:t,pad:o,dataFormat:n="NHWC",dilations:s=[1,1],dimRoundingMode:a,bias:i,activation:p="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(Zu(T.state.gradientDepth,p)===!1){let k=sc(r,e,t,o,n,s,a);return i!=null&&(k=Ce(k,i)),Qu(k,p,u,c)}let l=v(r,"x","depthwiseConv2d","float32"),m=v(e,"filter","depthwiseConv2d","float32"),d=l,f=!1;l.rank===3&&(f=!0,d=W(l,[1,l.shape[0],l.shape[1],l.shape[2]])),E(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),E(m.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${m.rank}.`),E(d.shape[3]===m.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${m.shape[2]}.`),s==null&&(s=[1,1]),E(gr(t,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${t} and dilations '${s}'`),Lt("fused depthwiseConv2d",o,a);let h=zu(d.shape,m.shape,t,s,o,a,!0),g;i!=null&&(g=v(i,"bias","fused conv2d"),[g]=Oe(g,l),rt(h.outShape,g.shape));let x;u!=null&&(x=v(u,"prelu weights","fused depthwiseConv2d"));let b=(k,_)=>{E(Bu(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[$,R,D,P]=_,O=Xu(k,D,p),M=aN(R.shape,O,$,t,o,s,a),L=sN(R,O,$.shape,t,o,s,a);if(P!=null){let B=Yu(g,O);return[M,L,B]}return[M,L]},C={x:d,filter:m,bias:g,preluActivationWeights:x},S={strides:t,pad:o,dataFormat:n,dilations:s,dimRoundingMode:a,activation:p,leakyreluAlpha:c};return i==null?Ir((_,$,R)=>{let D=T.runKernel(vo,C,S);return R([$,_,D]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:b}})(d,m):Ir((_,$,R,D)=>{let P=T.runKernel(vo,C,S);return D([$,_,P,R]),f&&(P=W(P,[P.shape[1],P.shape[2],P.shape[3]])),{value:P,gradFunc:b}})(d,m,g)}var iN=N({fusedDepthwiseConv2d_:oj});function nj({a:r,b:e,transposeA:t=!1,transposeB:o=!1,bias:n,activation:s="linear",preluActivationWeights:a,leakyreluAlpha:i=.2}){if(Zu(T.state.gradientDepth,s)===!1){let O=Ze(r,e,t,o);return n!=null&&(O=Ce(O,n)),Qu(O,s,a,i)}let p=v(r,"a","fused matMul"),u=v(e,"b","fused matMul");[p,u]=Oe(p,u);let c=t?p.shape[p.rank-2]:p.shape[p.rank-1],l=o?u.shape[u.rank-1]:u.shape[u.rank-2],m=t?p.shape[p.rank-1]:p.shape[p.rank-2],d=o?u.shape[u.rank-2]:u.shape[u.rank-1],f=p.shape.slice(0,-2),h=u.shape.slice(0,-2),g=ze(f),x=ze(h);E(c===l,()=>`Error in fused matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${p.shape} and ${u.shape} and transposeA=${t} and transposeB=${o} must match.`);let C=rt(p.shape.slice(0,-2),u.shape.slice(0,-2)).concat([m,d]),S=t?W(p,[g,c,m]):W(p,[g,m,c]),k=o?W(u,[x,d,l]):W(u,[x,l,d]),_;n!=null&&(_=v(n,"bias","fused matMul"),[_]=Oe(_,p),rt(C,_.shape));let $;a!=null&&($=v(a,"prelu weights","fused matMul"));let R=(O,M)=>{let[L,B,z,U]=M,j=Xu(W(O,z.shape),z,s),q,Y;if(!t&&!o?(q=Ze(j,B,!1,!0),Y=Ze(L,j,!0,!1)):!t&&o?(q=Ze(j,B,!1,!1),Y=Ze(j,L,!0,!1)):t&&!o?(q=Ze(B,j,!1,!0),Y=Ze(L,j,!1,!1)):(q=Ze(B,j,!0,!0),Y=Ze(j,L,!0,!0)),n!=null){let J=Yu(U,j);return[q,Y,J]}else return[q,Y]},D={a:S,b:k,bias:_,preluActivationWeights:$},P={transposeA:t,transposeB:o,activation:s,leakyreluAlpha:i};return n==null?Ir((M,L,B)=>{let z=T.runKernel(So,D,P);return B([M,L,z]),{value:W(z,C),gradFunc:R}})(S,k):Ir((M,L,B,z)=>{let U=T.runKernel(So,D,P);return z([M,L,U,B]),{value:W(U,C),gradFunc:R}})(S,k,_)}var uN=N({fusedMatMul_:nj});function sj(r){return $l(r,.54,.46)}var pN=N({hammingWindow_:sj});function aj(r){return $l(r,.5,.5)}var Qd=N({hannWindow_:aj});function ij(r,e,t,o=!1,n=0){let s=0,a=[];for(;s+e<=r.size;)a.push(Xe(r,s,e)),s+=t;if(o)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),E(p.rank===1&&p.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),E(o.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${o.length}.`),E(o[0]>=1&&o[1]>=1,()=>`cropSize must be atleast [1,1], but was ${o}`),E(n==="bilinear"||n==="nearest",()=>`method must be bilinear or nearest, but was ${n}`);let c={image:a,boxes:i,boxInd:p},l={method:n,extrapolationValue:s,cropSize:o};return T.runKernel(cn,c,l)}var lN=N({cropAndResize_:pj});function cj(r){let e=v(r,"image","flipLeftRight","float32");E(e.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${e.rank}.`);let t={image:e};return T.runKernel(Cn,t,{})}var mN=N({flipLeftRight_:cj});function lj(r){let e=v(r,"image","grayscaleToRGB"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${e.rank}.`),E(o===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${o}.`);let n=new Array(e.rank);return n.fill(1,0,t),n[t]=3,uu(e,n)}var dN=N({grayscaleToRGB_:lj});function mj(r){let e=v(r,"image","RGBToGrayscale"),t=e.rank-1,o=e.shape[t];E(e.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${e.rank}.`),E(o===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${o}.`);let n=e.dtype,s=Ue(e,"float32"),a=Jt([.2989,.587,.114]),i;switch(e.rank){case 2:i=iu("ij,j->i",s,a);break;case 3:i=iu("ijk,k->ij",s,a);break;case 4:i=iu("ijkl,l->ijk",s,a);break;case 5:i=iu("ijklm,m->ijkl",s,a);break;case 6:i=iu("ijklmn,n->ijklm",s,a);break;default:throw new Error("Not a valid tensor rank.")}return i=Ms(i,-1),Ue(i,n)}var fN=N({rgbToGrayscale_:mj});function dj(r,e,t=0,o=.5){let n=v(r,"image","rotateWithOffset","float32");E(n.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${n.rank}.`);let s={image:n},a={radians:e,fillValue:t,center:o};return T.runKernel(Ds,s,a)}var hN=N({rotateWithOffset_:dj});function Eo(r,e,t,o,n,s){o==null&&(o=.5),n==null&&(n=Number.NEGATIVE_INFINITY),s==null&&(s=0);let a=r.shape[0];return t=Math.min(t,a),E(0<=o&&o<=1,()=>`iouThreshold must be in [0, 1], but was '${o}'`),E(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),E(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),E(e.rank===1,()=>"scores must be a 1D tensor"),E(e.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${e.shape[0]}`),E(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s}}function fj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppression","float32"),a=v(e,"scores","nonMaxSuppression","float32"),i=Eo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p={maxOutputSize:t,iouThreshold:o,scoreThreshold:n};return T.runKernel(Qn,{boxes:s,scores:a},p)}var gN=N({nonMaxSuppression_:fj});function xN(r,e,t){let o=hj(r,e,t),n=o<0?-(o+1):o;r.splice(n,0,e)}function hj(r,e,t){return xj(r,e,t||gj)}function gj(r,e){return r>e?1:r>>1);let i=t(e,r[s]);i>0?o=s+1:(n=s,a=!i)}return a?o:-o-1}function Jd(r,e,t,o,n){return eS(r,e,t,o,n,0)}function ef(r,e,t,o,n,s){return eS(r,e,t,o,n,0,!1,s,!0)}function tf(r,e,t,o,n,s){return eS(r,e,t,o,n,s,!0)}function eS(r,e,t,o,n,s,a=!1,i=!1,p=!1){let u=[];for(let g=0;gn&&u.push({score:e[g],boxIndex:g,suppressBeginIndex:0});u.sort(yN);let c=s>0?-.5/s:0,l=[],m=[];for(;l.length0;){let g=u.pop(),{score:x,boxIndex:b,suppressBeginIndex:C}=g;if(x=C;--k){let _=yj(r,b,l[k]);if(_>=o){S=!0;break}if(g.score=g.score*bj(o,c,_),g.score<=n)break}g.suppressBeginIndex=l.length,S||(g.score===x?(l.push(b),m.push(g.score)):g.score>n&&xN(u,g,yN))}let d=l.length,f=t-d;i&&f>0&&(l.push(...new Array(f).fill(0)),m.push(...new Array(f).fill(0)));let h={selectedIndices:l};return a&&(h.selectedScores=m),p&&(h.validOutputs=d),h}function yj(r,e,t){let o=r.subarray(e*4,e*4+4),n=r.subarray(t*4,t*4+4),s=Math.min(o[0],o[2]),a=Math.min(o[1],o[3]),i=Math.max(o[0],o[2]),p=Math.max(o[1],o[3]),u=Math.min(n[0],n[2]),c=Math.min(n[1],n[3]),l=Math.max(n[0],n[2]),m=Math.max(n[1],n[3]),d=(i-s)*(p-a),f=(l-u)*(m-c);if(d<=0||f<=0)return 0;let h=Math.max(s,u),g=Math.max(a,c),x=Math.min(i,l),b=Math.min(p,m),C=Math.max(x-h,0)*Math.max(b-g,0);return C/(d+f-C)}function bj(r,e,t){let o=Math.exp(e*t*t);return t<=r?o:0}function yN(r,e){return r.score-e.score||r.score===e.score&&e.boxIndex-r.boxIndex}async function Cj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY){let s=v(r,"boxes","nonMaxSuppressionAsync"),a=v(e,"scores","nonMaxSuppressionAsync"),i=Eo(s,a,t,o,n);t=i.maxOutputSize,o=i.iouThreshold,n=i.scoreThreshold;let p=await Promise.all([s.data(),a.data()]),u=p[0],c=p[1],{selectedIndices:l}=Jd(u,c,t,o,n);return s!==r&&s.dispose(),a!==e&&a.dispose(),Jt(l,"int32")}var bN=Cj;function wj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=Eo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u={boxes:a,scores:i},c={maxOutputSize:t,iouThreshold:o,scoreThreshold:n,softNmsSigma:s},l=T.runKernel(Zn,u,c);return{selectedIndices:l[0],selectedScores:l[1]}}var CN=N({nonMaxSuppressionWithScore_:wj});async function Sj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=0){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=Eo(a,i,t,o,n,s);t=p.maxOutputSize,o=p.iouThreshold,n=p.scoreThreshold,s=p.softNmsSigma;let u=await Promise.all([a.data(),i.data()]),c=u[0],l=u[1],{selectedIndices:m,selectedScores:d}=tf(c,l,t,o,n,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(m,"int32"),selectedScores:Jt(d)}}var wN=Sj;function Ij(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppression"),i=v(e,"scores","nonMaxSuppression"),p=Eo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,m={boxes:a,scores:i},d={maxOutputSize:u,iouThreshold:c,scoreThreshold:l,padToMaxOutputSize:s},f=T.runKernel(Qa,m,d);return{selectedIndices:f[0],validOutputs:f[1]}}var SN=N({nonMaxSuppressionPadded_:Ij});async function vj(r,e,t,o=.5,n=Number.NEGATIVE_INFINITY,s=!1){let a=v(r,"boxes","nonMaxSuppressionAsync"),i=v(e,"scores","nonMaxSuppressionAsync"),p=Eo(a,i,t,o,n,null),u=p.maxOutputSize,c=p.iouThreshold,l=p.scoreThreshold,[m,d]=await Promise.all([a.data(),i.data()]),{selectedIndices:f,validOutputs:h}=ef(m,d,u,c,l,s);return a!==r&&a.dispose(),i!==e&&i.dispose(),{selectedIndices:Jt(f,"int32"),validOutputs:ke(h,"int32")}}var IN=vj;function kj(r,e,t=!1,o=!1){let n=v(r,"images","resizeBilinear");E(n.rank===3||n.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${e}.`),E(o===!1||t===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(is,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var vN=N({resizeBilinear_:kj});function Nj(r,e,t=!1,o=!1){let n=v(r,"images","resizeNearestNeighbor");E(n.rank===3||n.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${n.rank}.`),E(e.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${e}.`),E(n.dtype==="float32"||n.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),E(o===!1||t===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=n,a=!1;n.rank===3&&(a=!0,s=W(n,[1,n.shape[0],n.shape[1],n.shape[2]]));let[]=e,i={images:s},p={alignCorners:t,halfPixelCenters:o,size:e},u=T.runKernel(as,i,p);return a?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var kN=N({resizeNearestNeighbor_:Nj});function Tj(r,e="binary",t=!1,o=.5){let n=v(r,"image","threshold"),s=.2989,a=.587,i=.114,p=n.shape[0]*n.shape[1],u=se(Jt([o]),255),c,l,m,d;if(E(n.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${n.rank}.`),E(n.shape[2]===3||n.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${n.shape[2]}.`),E(n.dtype==="int32"||n.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${n.dtype}.`),E(e==="otsu"||e==="binary",()=>`Method must be binary or otsu, but was ${e}`),n.shape[2]===3){[c,l,m]=li(n,[1,1,1],-1);let g=se(c,s),x=se(l,a),b=se(m,i);d=Ce(Ce(g,x),b)}else d=r;if(e==="otsu"){let g=hd(Ue(Gd(d),"int32"),ar([]),256);u=_j(g,p)}let f=t?ac(d,u):Wu(d,u);return Ue(se(f,255),"int32")}function _j(r,e){let t=Jt([-1]),o=Jt([0]),n=Jt([0]),s,a,i,p,u,c;for(let l=0;l`Error in transform: image must be rank 4,but got rank ${a.rank}.`),E(i.rank===2&&(i.shape[0]===a.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),E(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let p={image:a,transforms:i},u={interpolation:t,fillMode:o,fillValue:n,outputShape:s};return T.runKernel(Rs,p,u)}var TN=N({transform_:Ej});function $j(r,e,t){let o=v(r,"a","bandPart");E(o.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${o.rank}.`);let n=o.shape,[s,a]=o.shape.slice(-2),i,p;typeof e=="number"?(E(e%1===0,()=>`bandPart(): numLower must be an integer, got ${e}.`),E(e<=s,()=>`bandPart(): numLower (${e}) must not be greater than the number of rows (${s}).`),i=v(e<0?s:e,"numLower","bandPart")):(E(e.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),i=lo(Tl(e,0),s,Hu(e,s))),typeof t=="number"?(E(t%1===0,()=>`bandPart(): numUpper must be an integer, got ${t}.`),E(t<=a,()=>`bandPart(): numUpper (${t}) must not be greater than the number of columns (${a}).`),p=v(t<0?a:t,"numUpper","bandPart")):(E(t.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),p=lo(Tl(t,0),a,Hu(t,a)));let u=W(cu(0,s,1,"int32"),[-1,1]),c=cu(0,a,1,"int32"),l=Te(u,c),m=Uu(ac(l,i),Id(l,pr(p))),d=Gr([s,a],o.dtype);return W(vr(fo(W(o,[-1,s,a])).map(f=>lo(m,f,d))),n)}var _N=N({bandPart_:$j});function Rj(r){let e;if(Array.isArray(r)){e=!1,E(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let n=r[0].shape[0];for(let s=1;s`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[s].shape[0]} vs. ${n})`)}else e=!0,r=li(r,r.shape[0],0).map(n=>cc(n,[0]));E(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);let t=[],o=r;for(let n=0;n{let s=o[n];if(n>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return $N(r,e);{let t=r.shape.slice(0,r.shape.length-2).reduce((p,u)=>p*u),o=fo(W(r,[t,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),n=[],s=[];o.forEach(p=>{let[u,c]=$N(p,e);n.push(u),s.push(c)});let a=W(vr(n,0),r.shape),i=W(vr(s,0),r.shape);return[a,i]}}function $N(r,e=!1){return T.tidy(()=>{E(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);let t=r.shape[0],o=r.shape[1],n=Cd(t),s=Ur(r),a=mu([[1]],[1,1]),i=Ur(a),p=t>=o?o:t;for(let u=0;u{let d=Xe(s,[u,u],[t-u,1]),f=Vu(d),h=Xe(s,[u,u],[1,1]),g=lo(Wu(h,0),mu([[-1]]),mu([[1]])),x=Te(h,se(g,f)),b=je(d,x);b.shape[0]===1?i=Ur(a):i=yt([a,Xe(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let C=pr(je(Ze(g,x),f)),S=Xe(s,[u,0],[t-u,o]),k=se(C,i),_=mc(i);if(u===0)s=Te(S,Ze(k,Ze(_,S)));else{let D=Te(S,Ze(k,Ze(_,S)));s=yt([Xe(s,[0,0],[u,o]),D],0)}let $=mc(k),R=Xe(n,[0,u],[t,n.shape[1]-u]);if(u===0)n=Te(R,Ze(Ze(R,i),$));else{let D=Te(R,Ze(Ze(R,i),$));n=yt([Xe(n,[0,0],[t,u]),D],1)}return[i,s,n]}),Ot([c,l,m])}return!e&&t>o&&(n=Xe(n,[0,0],[t,o]),s=Xe(s,[0,0],[o,o])),[n,s]})}var RN=N({qr_:Dj});var $t;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})($t||($t={}));function Aj(r,e,t=$t.SUM_BY_NONZERO_WEIGHTS){let o=v(r,"losses","computeWeightedLoss"),n=null;e!=null&&(n=v(e,"weights","computeWeightedLoss"));let s=n==null?o:se(o,n);if(t===$t.NONE)return s;if(t===$t.SUM)return ot(s);if(t===$t.MEAN){if(n==null)return Gu(s);{let a=o.size/n.size,i=je(ot(s),ot(n));return a>1?je(i,ke(a)):i}}if(t===$t.SUM_BY_NONZERO_WEIGHTS){if(n==null)return je(ot(s),ke(o.size));{let a=se(n,Da(o.shape)),i=Ue(ot(Fd(a,ke(0))),"float32");return je(ot(s),i)}}throw Error(`Unknown reduction: ${t}`)}var cr=N({computeWeightedLoss_:Aj});function Fj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","absoluteDifference"),s=v(e,"predictions","absoluteDifference"),a=null;t!=null&&(a=v(t,"weights","absoluteDifference")),xt(n.shape,s.shape,"Error in absoluteDifference: ");let i=Qt(Te(n,s));return cr(i,a,o)}var DN=N({absoluteDifference_:Fj});function Pj(r,e,t,o,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","cosineDistance"),a=v(e,"predictions","cosineDistance"),i=null;o!=null&&(i=v(o,"weights","cosineDistance")),xt(s.shape,a.shape,"Error in cosineDistance: ");let p=ke(1),u=Te(p,ot(se(s,a),t,!0));return cr(u,i,n)}var AN=N({cosineDistance_:Pj});function Oj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","hingeLoss"),s=v(e,"predictions","hingeLoss"),a=null;t!=null&&(a=v(t,"weights","hingeLoss")),xt(n.shape,s.shape,"Error in hingeLoss: ");let i=ke(1);n=Te(se(ke(2),n),i);let p=lu(Te(i,se(n,s)));return cr(p,a,o)}var FN=N({hingeLoss_:Oj});function Mj(r,e,t,o=1,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","huberLoss"),a=v(e,"predictions","huberLoss"),i=null;t!=null&&(i=v(t,"weights","huberLoss")),xt(s.shape,a.shape,"Error in huberLoss: ");let p=ke(o),u=Qt(Te(a,s)),c=Hu(u,p),l=Te(u,c),m=Ce(se(ke(.5),Zt(c)),se(p,l));return cr(m,i,n)}var PN=N({huberLoss_:Mj});function Lj(r,e,t,o=1e-7,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"labels","logLoss"),a=v(e,"predictions","logLoss"),i=null;t!=null&&(i=v(t,"weights","logLoss")),xt(s.shape,a.shape,"Error in logLoss: ");let p=ke(1),u=ke(o),c=pr(se(s,pi(Ce(a,u)))),l=se(Te(p,s),pi(Ce(Te(p,a),u))),m=Te(c,l);return cr(m,i,n)}var ON=N({logLoss_:Lj});function Bj(r,e,t,o=$t.SUM_BY_NONZERO_WEIGHTS){let n=v(r,"labels","meanSquaredError"),s=v(e,"predictions","meanSquaredError"),a=null;t!=null&&(a=v(t,"weights","meanSquaredError")),xt(n.shape,s.shape,"Error in meanSquaredError: ");let i=Kd(n,s);return cr(i,a,o)}var MN=N({meanSquaredError_:Bj});function zj(r,e){let t=v(r,"labels","sigmoidCrossEntropyWithLogits"),o=v(e,"logits","sigmoidCrossEntropyWithLogits");xt(t.shape,o.shape,"Error in sigmoidCrossEntropyWithLogits: ");let n=lu(o),s=se(o,t),a=kd(_o(pr(Qt(o))));return Ce(Te(n,s),a)}function Vj(r,e,t,o=0,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"multiClassLabels","sigmoidCrossEntropy"),a=v(e,"logits","sigmoidCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","sigmoidCrossEntropy")),xt(s.shape,a.shape,"Error in sigmoidCrossEntropy: "),o>0){let u=ke(o),c=ke(1),l=ke(.5);s=Ce(se(s,Te(c,u)),se(l,u))}let p=zj(s,a);return cr(p,i,n)}var LN=N({sigmoidCrossEntropy_:Vj});function Wj(r,e,t=-1){if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${e.rank} and dim was ${t}`);return Ir((n,s,a)=>{let p=_d(s,[t],!0),u=Te(Ue(s,"float32"),p);a([n,u]);let c=pr(se(u,n));return{value:ot(c,[t]),gradFunc:(d,f)=>{let[h,g]=f,x=ii(d.shape,[t]);return[se(W(d,x),Te(Ue(h,"float32"),_o(g))),se(W(d,x),Te(_o(g),Ue(h,"float32")))]}}})(r,e)}function Uj(r,e,t,o=0,n=$t.SUM_BY_NONZERO_WEIGHTS){let s=v(r,"onehotLabels","softmaxCrossEntropy"),a=v(e,"logits","softmaxCrossEntropy"),i=null;if(t!=null&&(i=v(t,"weights","softmaxCrossEntropy")),xt(s.shape,a.shape,"Error in softmaxCrossEntropy: "),o>0){let u=ke(o),c=ke(1),l=ke(s.shape[1]);s=Ce(se(s,Te(c,u)),je(u,l))}let p=Wj(s,a);return cr(p,i,n)}var BN=N({softmaxCrossEntropy_:Uj});function Gj(r,e,t,o){let n=v(r,"indices","sparseFillEmptyRows","int32"),s=v(e,"values","sparseFillEmptyRows"),a=v(t,"denseShape","sparseFillEmptyRows","int32"),i=v(o,"defaultValue","sparseFillEmptyRows",s.dtype);if(n.rank!==2)throw new Error(`Indices should be Tensor2D but received shape + ${n.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${a.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let p={indices:n,values:s,denseShape:a,defaultValue:i},u=T.runKernel(Ki,p);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var zN=N({sparseFillEmptyRows_:Gj});function Hj(r,e,t){let o=v(r,"inputIndices","sparseReshape","int32"),n=v(e,"inputShape","sparseReshape","int32"),s=v(t,"newShape","sparseReshape","int32");if(o.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape + ${o.shape}`);if(n.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let a={inputIndices:o,inputShape:n,newShape:s},i=T.runKernel(ei,a);return{outputIndices:i[0],outputShape:i[1]}}var VN=N({sparseReshape_:Hj});function Kj(r,e,t){let o=v(r,"data","sparseSegmentMean"),n=v(e,"indices","sparseSegmentMean","int32"),s=v(t,"segmentIds","sparseSegmentMean","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return _.runKernel(va,a)}var TT=N({sparseSegmentMean_:c5});function m5(r,e,t){let o=v(r,"data","sparseSegmentSum"),n=v(e,"indices","sparseSegmentSum","int32"),s=v(t,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ya,a)}var WN=N({sparseSegmentMean_:Kj});function qj(r,e,t){let o=v(r,"data","sparseSegmentSum"),n=v(e,"indices","sparseSegmentSum","int32"),s=v(t,"segmentIds","sparseSegmentSum","int32");if(o.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${n.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape - ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return _.runKernel(ka,a)}var _T=N({sparseSegmentSum_:m5});function d5(r,e,t,o,n,s,a,i){let p=v(r,"data","stringNGrams","string");if(p.dtype!=="string")throw new Error("Data must be of datatype string");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let l={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},c={data:p,dataSplits:u},m=_.runKernel(Na,c,l);return{nGrams:m[0],nGramsSplits:m[1]}}var ET=N({stringNGrams_:d5});function f5(r,e,t=!0){let o=v(r,"input","stringSplit","string"),n=v(e,"delimiter","stringSplit","string");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=_.runKernel(ru,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var $T=N({stringSplit_:f5});function h5(r,e){let t=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:e};if(e<=0)throw new Error("Number of buckets must be at least 1");let n={input:t};return _.runKernel(ou,n,o)}var RT=N({stringToHashBucketFast_:h5});function g5(r,e,t,o=!0){let n=v(r,"input","staticRegexReplace","string"),s={pattern:e,rewrite:t,replaceGlobal:o};return _.runKernel(pi,{x:n},s)}var DT=N({staticRegexReplace_:g5});var x5={fft:fl,ifft:ep,rfft:hl,irfft:tf},y5={hammingWindow:jN,hannWindow:uf,frame:pf,stft:XN},b5={flipLeftRight:QN,grayscaleToRGB:ZN,resizeNearestNeighbor:lT,resizeBilinear:pT,rgbToGrayscale:JN,rotateWithOffset:eT,cropAndResize:YN,nonMaxSuppression:tT,nonMaxSuppressionAsync:nT,nonMaxSuppressionWithScore:sT,nonMaxSuppressionWithScoreAsync:aT,nonMaxSuppressionPadded:iT,nonMaxSuppressionPaddedAsync:uT,threshold:cT,transform:mT},C5={bandPart:dT,gramSchmidt:fT,qr:gT},w5={absoluteDifference:xT,computeWeightedLoss:dr,cosineDistance:yT,hingeLoss:bT,huberLoss:CT,logLoss:wT,meanSquaredError:ST,sigmoidCrossEntropy:IT,softmaxCrossEntropy:vT},S5={sparseFillEmptyRows:kT,sparseReshape:NT,sparseSegmentMean:TT,sparseSegmentSum:_T},I5={stringNGrams:ET,stringSplit:$T,stringToHashBucketFast:RT,staticRegexReplace:DT};var AT={};qe(AT,{Serializable:()=>Lc,SerializationMap:()=>df,getRegisteredName:()=>k5,registerClass:()=>hS});var v5=new Map,fS=new Map,Lc=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},df=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function hS(r,e,t){$(r.className!=null,()=>"Class being registered does not have the static className property defined."),$(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),$(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof e=="undefined"&&(e="Custom"),typeof t=="undefined"&&(t=r.className);let o=t,n=e+">"+o;return df.register(r),v5.set(n,r),fS.set(r,n),r}function k5(r){return fS.has(r)?fS.get(r):r.className}var _r=class extends Lc{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Lt(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return eS(e,t)}dispose(){this.iterations_!=null&&Lt(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ke(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(_r,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var sp=class extends _r{static get className(){return"Adadelta"}constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Kt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;De(()=>{let l=Ce(se(p,this.rho),se(tr(i),1-this.rho)),c=se(Xe(Pr(Ce(u,this.epsilon)),Pr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(tr(c),1-this.rho));p.assign(l),u.assign(m);let d=Ce(se(c,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Lt(this.accumulatedGrads.map(e=>e.variable)),Lt(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,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};var ap=class extends _r{static get className(){return"Adagrad"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>Ma(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,tr(a));i.assign(p);let u=Ce(se(Xe(a,Pr(Ce(p,_.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Lt(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(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};var ip=class extends _r{static get className(){return"Adam"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);t.forEach((s,a)=>{let i=_.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Kt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Kt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let l=this.accumulatedFirstMoment[a].variable,c=this.accumulatedSecondMoment[a].variable,m=Ce(se(l,this.beta1),se(u,1-this.beta1)),d=Ce(se(c,this.beta2),se(tr(u),1-this.beta2)),f=Xe(m,o),h=Xe(d,n);l.assign(m),c.assign(d);let g=Ce(se(Xe(f,Ce(Pr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Lt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Lt(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),De(()=>{this.accBeta1.assign(xi(this.beta1,this.iterations_+1)),this.accBeta2.assign(xi(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}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)}};var up=class extends _r{static get className(){return"Adamax"}constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=_.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Xe(-this.learningRate,Ce(se(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=_.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Kt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Kt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let l=this.accumulatedFirstMoment[a].variable,c=this.accumulatedWeightedInfNorm[a].variable,m=Ce(se(l,this.beta1),se(u,1-this.beta1)),d=se(c,this.beta2),f=er(u),h=Ud(d,f);l.assign(m),c.assign(h);let g=Ce(se(Xe(n,o),Xe(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Lt(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Lt(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)}};var wi=class extends _r{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=_.registeredVariables[o];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Fr(ke(-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)}};var pp=class extends wi{static get className(){return"Momentum"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Kt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Lt(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(o=>({originalName:o.name,variable:o.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)}};var lp=class extends _r{static get className(){return"RMSProp"}constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=_.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=_.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Kt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Kt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;De(()=>{let l=Ce(se(p,this.decay),se(tr(i),1-this.decay));if(this.centered){let c=this.accumulatedMeanGrads[n].variable,m=Ce(se(c,this.decay),se(i,1-this.decay)),d=Xe(se(i,this.learningRate),Pr(Te(l,Ce(tr(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(l),c.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let c=Ce(se(p,this.decay),se(tr(i),1-this.decay)),m=Ce(se(u,this.momentum),Xe(se(i,this.learningRate),Pr(Ce(c,this.epsilon))));p.assign(c),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Lt(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Lt(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Lt(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,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}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)}};var N5=[sp,ap,ip,up,pp,lp,wi];function FT(){for(let r of N5)hS(r)}var Si={};qe(Si,{CompositeArrayBuffer:()=>lr,browserFiles:()=>OT,browserHTTPRequest:()=>zT,concatenateArrayBuffers:()=>Zk,copyModel:()=>m1,decodeWeights:()=>hd,decodeWeightsStream:()=>gd,encodeWeights:()=>jk,fromMemory:()=>VT,fromMemorySync:()=>wS,getLoadHandlers:()=>r1,getModelArtifactsForJSON:()=>il,getModelArtifactsForJSONSync:()=>Uw,getModelArtifactsInfoForJSON:()=>$a,getSaveHandlers:()=>t1,getWeightSpecs:()=>Ec,http:()=>hf,isHTTPScheme:()=>ff,listModels:()=>l1,loadWeights:()=>LT,moveModel:()=>d1,registerLoadRouter:()=>e1,registerSaveRouter:()=>Jk,removeModel:()=>c1,weightsLoaderFactory:()=>bS,withSaveHandler:()=>WT,withSaveHandlerSync:()=>UT});var T5="model",_5=".json",E5=".weights.bin";function PT(r){return new Promise(e=>setTimeout(e)).then(r)}var bl=class r{constructor(e){if(!A().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=T5),this.modelJsonFileName=e+_5,this.weightDataFileName=e+E5}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=lr.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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}],s=xd(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await PT(()=>i.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await PT(()=>p.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:$a(e)}}}};bl.URL_SCHEME="downloads://";var gS=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=il(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,a])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Ww(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ww(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},$5=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(bl.URL_SCHEME)?R5(r.slice(bl.URL_SCHEME.length)):null;Xt.registerSaveRouter($5);function R5(r="model"){return new bl(r)}function OT(r){return new gS(r)}function xS(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let l=t+ ++n/r.length*(o-t);return e(l),u}),p);function a(p){$(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){$(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),$(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),$(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function yS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(c=>t(c,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await xS(o,e.onProgress,0,.5)).map(c=>c.arrayBuffer());return e.onProgress==null?await Promise.all(i):await xS(i,e.onProgress,.5,1)}function MT(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nyS(a,{requestInit:o}))(r,e,t)}function bS(r){return async(e,t="",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=fi[x]*ze(g.shape),w=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((S,k)=>{S===g.name&&(w(),a[k]=!0)}):w(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(", ")}. -Manifest JSON has weights with names: ${i.join(", ")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith("/")?"":"/")+f;u.push(h)})});let l=await r(u),c={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=new lr(l.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),w=hd(b,[x.manifestEntry]);for(let S in w)c[S]=w[S]}),m+=f}),c}}var D5="application/octet-stream",A5="application/json",Bc=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?($(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=A().platform.fetch,$(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&$(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||{},this.loadOptions=t}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 o=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=xd(e,o);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:A5}),"model.json"),e.weightData!=null){let a=lr.join(e.weightData);t.body.append("model.weights.bin",new Blob([a],{type:D5}),"model.weights.bin")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:$a(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" 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.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return il(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Ec(e.weightsManifest),n=()=>MT(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=F5(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Ec(e),n=await yS(t,this.loadOptions);return[o,n]}};Bc.URL_SCHEME_REGEX=/^https?:\/\//;function F5(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function ff(r){return r.match(Bc.URL_SCHEME_REGEX)!=null}var BT=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>ff(o)):t=ff(r),t)return hf(r,e)}return null};Xt.registerSaveRouter(BT);Xt.registerLoadRouter(BT);function hf(r,e){return new Bc(r,e)}function zT(r,e){return hf(r,e)}var zc=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},gf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},CS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function VT(r,e,t,o){let n=arguments;return new CS(wS(...n))}function wS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new zc(r):(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 zc({modelTopology:r})):(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 zc({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function WT(r){return new gf(r)}function UT(r){return new gf(r)}var HT={};qe(HT,{confusionMatrix:()=>GT});function P5(r,e,t){let o=v(r,"labels","confusionMatrix"),n=v(e,"predictions","confusionMatrix");$(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),$(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),$(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),$(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),$(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=Oc(Ue(o,"int32"),t),a=Oc(Ue(n,"int32"),t),i=yl(s),p=Je(i,a);return Ue(p,"int32")}var GT=N({confusionMatrix_:P5});var XT={};qe(XT,{draw:()=>U5,fromPixels:()=>G5,fromPixelsAsync:()=>z5,toPixels:()=>W5});var cp,KT=!1;function qT(r,e=3){if(e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)i=!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 ${r.constructor.name}`);if(tl(Lu,_.backendName)!=null){let f={pixels:r},h={numChannels:e};return _.runKernel(Lu,f,h)}let[u,l]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],c;if(a)c=r.getContext("2d").getImageData(0,0,u,l).data;else if(o||t)c=r.data;else if(s||n||i){if(cp==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")cp=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else cp=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});cp.canvas.width=u,cp.canvas.height=l,cp.drawImage(r,0,0,u,l),c=cp.getImageData(0,0,u,l).data}let m;if(e===4)m=new Int32Array(c);else{let f=u*l;m=new Int32Array(f*e);for(let h=0;h4||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function V5(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function W5(r,e){let t=v(r,"img","toPixels");if(!(r instanceof dt)){let u=t;t=Ue(u,"int32"),u.dispose()}jT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],a=await t.data(),i=t.dtype==="float32"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype==="int32"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(l[0]=d*i,l[1]=d*i,l[2]=d*i):l[m]=d*i}let c=u*4;p[c+0]=Math.round(l[0]),p[c+1]=Math.round(l[1]),p[c+2]=Math.round(l[2]),p[c+3]=Math.round(l[3])}if(e!=null){KT||tl(Mu,_.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),KT=!0),e.width=n,e.height=o;let u=e.getContext("2d"),l=new ImageData(p,n,o);u.putImageData(l,0,0)}return t!==r&&t.dispose(),p}function U5(r,e,t){let o=v(r,"img","draw");if(!(r instanceof dt)){let a=o;o=Ue(a,"int32"),a.dispose()}jT(o),V5(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};_.runKernel(Mu,n,s)}var G5=N({fromPixels_:qT});var xf={};qe(xf,{prepareAndValidate:()=>YT});function YT(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let c=0;cc/u),1].slice(0,s);return[p,a,u,l]}var nt={};qe(nt,{assertParamsValid:()=>K5,computeFlatOffset:()=>Q5,computeOutShape:()=>j5,getNormalizedAxes:()=>X5,isSliceContinous:()=>Y5,maskToAxes:()=>q5,parseSliceParams:()=>Z5,sliceInfo:()=>J5,startForAxis:()=>n_,startIndicesWithElidedDims:()=>t_,stopForAxis:()=>s_,stopIndicesWithElidedDims:()=>r_,stridesForAxis:()=>o_,stridesWithElidedDims:()=>ZT});var SS=-2,H5=-1;function K5(r,e,t){let o=r.shape.length;$(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),$(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function q5(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function j5(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;l=t_(a,d,f,o,r),c=r_(i,d,f,n,r),m=ZT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=JT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=JT(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=qp(0,a,p-1),a}function s_(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=qp(0,a,p):a=qp(-1,a,p-1),a}function Y5(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function Q5(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{$(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return t==null?s=new Array(n).fill(-1):typeof t=="number"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:($(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function J5(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&a&a-1)throw new Error("Multiple ellipses in slice is not allowed.");let l=!1,c={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let w=0;w0?0:-1,m.strides[w]>0?k:k-1];if(S&&m.strides[w]<=0)throw Error("only stride 1 allowed on non-range indexing.");h=h&&m.strides[w]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[w]} of dimension ${w} out of bounds.`)}else m.begin[w]=QT(m.begin[w],0,m.strides[w],k,T,E),m.end[w]=QT(m.end[w],1,m.strides[w],k,T,E);let O=m.strides[w]===1&&m.begin[w]===0&&m.end[w]===k;d=d&&O,f=f&&(w===0&&m.strides[w]===1||O)}else d=d&&m.strides[w]===1&&R,f=f&&(w===0&&m.strides[w]===1||R);let D,F=!1;if(m.beginValid&&m.endValid?(D=m.end[w]-m.begin[w],F=!0):S?(D=1,F=!0):R&&k>=0&&(m.strides[w]<0?D=-k:D=k,F=!0),F){let O;D===0||D<0!=m.strides[w]<0?O=0:O=Math.trunc(D/m.strides[w])+(D%m.strides[w]!==0?1:0),g.push(O)}else g.push(-1)}for(let w=0;w=0?x.push(g[S]):S===SS&&x.push(1)}return{finalShapeSparse:x.filter((w,S)=>m.finalShapeGatherIndices[S]!==SS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function e8(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var t8="4.17.0";var Vc=class{static sgd(e){return new wi(e)}static momentum(e,t,o=!1){return new pp(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new lp(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new ip(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new sp(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new up(e,t,o,n,s)}static adagrad(e,t=.1){return new ap(e,t)}};var cHe=Vc;var r8=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r();function IS(){return new Promise(r=>r8(()=>r()))}var C={};qe(C,{ERF_A1:()=>b8,ERF_A2:()=>C8,ERF_A3:()=>w8,ERF_A4:()=>S8,ERF_A5:()=>I8,ERF_P:()=>y8,PARALLELIZE_THRESHOLD:()=>yf,RowPartitionType:()=>Va,SELU_SCALE:()=>x8,SELU_SCALEALPHA:()=>g8,applyActivation:()=>op,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>_q,assertParamsConsistent:()=>o8,assignToTypedArray:()=>E8,axesAreInnerMostDims:()=>Jw,calculateShapes:()=>DN,checkEinsumDimSizes:()=>P8,checkPadOnDimRoundingMode:()=>zt,combineLocations:()=>u2,combineRaggedTensorToTensorShapes:()=>s8,complexWithEvenIndex:()=>N8,complexWithOddIndex:()=>T8,computeConv2DInfo:()=>Ku,computeConv3DInfo:()=>_1,computeDefaultPad:()=>Zw,computeDilation2DInfo:()=>NK,computeOptimalWindowSize:()=>p8,computeOutAndReduceShapes:()=>Tq,computeOutShape:()=>n8,computePool2DInfo:()=>Qw,computePool3DInfo:()=>TK,convertConv2DDataFormat:()=>E1,decodeEinsumEquation:()=>A8,eitherStridesOrDilationsAreOne:()=>br,expandShapeToKeepDim:()=>gi,exponent:()=>R8,exponents:()=>$8,fromStringArrayToUint8:()=>rY,fromUint8ToStringArray:()=>tY,getAxesPermutation:()=>Eq,getBroadcastDims:()=>o2,getComplexWithIndex:()=>_8,getEinsumComputePath:()=>O8,getEinsumPermutation:()=>F8,getFusedBiasGradient:()=>rp,getFusedDyActivation:()=>tp,getImageCenter:()=>l8,getInnerMostAxes:()=>Rq,getPermuted:()=>m8,getRaggedRank:()=>i8,getReductionAxes:()=>Td,getReshaped:()=>c8,getReshapedPermuted:()=>d8,getRowPartitionTypesHelper:()=>a8,getSliceBeginCoords:()=>f8,getSliceSize:()=>h8,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>z8,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>V8,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>W8,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>H8,getSparseReshapeInputOutputMismatchErrorMessage:()=>q8,getSparseReshapeInputOutputMultipleErrorMessage:()=>K8,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>U8,getSparseReshapeNegativeOutputDimErrorMessage:()=>G8,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>Q8,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>j8,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>X8,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>Y8,getUndoAxesPermutation:()=>$q,isIdentityPermutation:()=>M8,log:()=>CH,mergeRealAndImagArrays:()=>v8,prepareAndValidate:()=>YT,prepareSplitSize:()=>B8,segment_util:()=>kS,shouldFuse:()=>np,slice_util:()=>nt,splitRealAndImagArrays:()=>k8,stridesOrDilationsArePositive:()=>Aa,tupleValuesAreOne:()=>Hu,upcastType:()=>pt,validateDefaultValueShape:()=>u8,validateInput:()=>xl,validateUpdateShape:()=>lS,warn:()=>Ea});function o8(r,e){let t=r[0].length;r.forEach((n,s)=>{$(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),$(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function n8(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function a8(r){let e={FIRST_DIM_SIZE:Va.FIRST_DIM_SIZE,VALUE_ROWIDS:Va.VALUE_ROWIDS,ROW_LENGTHS:Va.ROW_LENGTHS,ROW_SPLITS:Va.ROW_SPLITS,ROW_LIMITS:Va.ROW_LIMITS,ROW_STARTS:Va.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function i8(r){return r.length===0?0:r[0]===Va.FIRST_DIM_SIZE?r.length-1:r.length}function u8(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var yf=30;function p8(r){return r<=yf?r:Xp(r,Math.floor(Math.sqrt(r)))}function l8(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function c8(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function d8(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,a_=",",i_="...";function A8(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(D8,"").length)/vS.length;if(t<1)throw new Error("Equations without an arrow are not supported.");if(t>1)throw new Error(`Equation must contain exactly one arrow ("${vS}").`);let[o,n]=r.split(vS);$(o.indexOf(i_)===-1,()=>`The ellipsis notation ("${i_}") is not supported yet.`);let s=o.split(a_),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function P8(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function O8(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function L8(r,e){let t=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);$(n<=1,()=>"There should be only one negative value in split array.");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}$(r.shape[t]===e.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=e}return o}function z8(r){return`Received SparseTensor with denseShape[0] = 0 but - indices.shape[0] = ${r}`}function V8(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function W8(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function U8(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function G8(r,e){return`size ${r} must be non-negative, not ${e}`}function H8(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function K8(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t} - dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function q8(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function j8(){return"segment ids must be >= 0"}function X8(){return"segment ids are not increasing"}function Y8(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function Q8(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var kS={};qe(kS,{collectGatherOpShapeInfo:()=>eY,computeOutShape:()=>J8,segOpComputeOptimalWindowSize:()=>Z8});function Z8(r,e){let t=!1,o;for(r<=yf?(o=r,t=!0):o=Xp(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Xp(r,o+1);return o}function J8(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) ( - ${s}).`);if(tsl(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function rY(r){return r.map(e=>iu(e))}var Ut={};qe(Ut,{nonMaxSuppressionV3Impl:()=>lf,nonMaxSuppressionV4Impl:()=>cf,nonMaxSuppressionV5Impl:()=>mf,whereImpl:()=>sf});FT();var oY=A();oY.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,r=>{r&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var Or;(function(r){r[r.DT_INVALID=0]="DT_INVALID",r[r.DT_FLOAT=1]="DT_FLOAT",r[r.DT_DOUBLE=2]="DT_DOUBLE",r[r.DT_INT32=3]="DT_INT32",r[r.DT_UINT8=4]="DT_UINT8",r[r.DT_INT16=5]="DT_INT16",r[r.DT_INT8=6]="DT_INT8",r[r.DT_STRING=7]="DT_STRING",r[r.DT_COMPLEX64=8]="DT_COMPLEX64",r[r.DT_INT64=9]="DT_INT64",r[r.DT_BOOL=10]="DT_BOOL",r[r.DT_QINT8=11]="DT_QINT8",r[r.DT_QUINT8=12]="DT_QUINT8",r[r.DT_QINT32=13]="DT_QINT32",r[r.DT_BFLOAT16=14]="DT_BFLOAT16",r[r.DT_QINT16=15]="DT_QINT16",r[r.DT_QUINT16=16]="DT_QUINT16",r[r.DT_UINT16=17]="DT_UINT16",r[r.DT_COMPLEX128=18]="DT_COMPLEX128",r[r.DT_HALF=19]="DT_HALF",r[r.DT_RESOURCE=20]="DT_RESOURCE",r[r.DT_VARIANT=21]="DT_VARIANT",r[r.DT_UINT32=22]="DT_UINT32",r[r.DT_UINT64=23]="DT_UINT64",r[r.DT_FLOAT_REF=101]="DT_FLOAT_REF",r[r.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",r[r.DT_INT32_REF=103]="DT_INT32_REF",r[r.DT_UINT8_REF=104]="DT_UINT8_REF",r[r.DT_INT16_REF=105]="DT_INT16_REF",r[r.DT_INT8_REF=106]="DT_INT8_REF",r[r.DT_STRING_REF=107]="DT_STRING_REF",r[r.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",r[r.DT_INT64_REF=109]="DT_INT64_REF",r[r.DT_BOOL_REF=110]="DT_BOOL_REF",r[r.DT_QINT8_REF=111]="DT_QINT8_REF",r[r.DT_QUINT8_REF=112]="DT_QUINT8_REF",r[r.DT_QINT32_REF=113]="DT_QINT32_REF",r[r.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",r[r.DT_QINT16_REF=115]="DT_QINT16_REF",r[r.DT_QUINT16_REF=116]="DT_QUINT16_REF",r[r.DT_UINT16_REF=117]="DT_UINT16_REF",r[r.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",r[r.DT_HALF_REF=119]="DT_HALF_REF",r[r.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",r[r.DT_VARIANT_REF=121]="DT_VARIANT_REF",r[r.DT_UINT32_REF=122]="DT_UINT32_REF",r[r.DT_UINT64_REF=123]="DT_UINT64_REF"})(Or||(Or={}));var u_;(function(r){let e;(function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(u_||(u_={}));var TS={};function sY(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};TS[r]=t}function bf(r){return TS[r]}function aY(r){delete TS[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd,u=i<0?e.inputNames.length+i:i;if(s.type==="tensor")return Vt(e.inputNames[u],t,o,n);if(s.type==="tensors"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!=="NoOp"}).map(f=>Vt(f,t,o,n))}let l=Vt(e.inputNames[u],t,o,n),c=l.dataSync();return s.type==="number"?c[0]:y.toNestedArray(l.shape,c)}let a=e.attrParams[r];return a&&a.value}function Vt(r,e,t,o){let[n,s]=Er(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[Cf(n,i)]);return a!==void 0?e[Cf(n,a)][s]:void 0}function _S(r,e,t){return e[Cf(r,t.currentContextId)]}function qs(r,e){let[t,o,n]=Er(r,e);return[Cf(t,e&&e.currentContextId),o,n]}function Cf(r,e){return e?`${r}-${e}`:r}function Er(r,e){if(r==="")return["",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(":"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Wc(r,e,t){let o=I("pad",r,e,t);if(o==="explicit"){o=I("explicitPaddings",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function js(r){return r.kept?r:Xr(r)}var ES={};qe(ES,{json:()=>iY});var iY=[{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}]}];var $S={};qe($S,{json:()=>uY});var uY=[{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:"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}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var RS={};qe(RS,{json:()=>pY});var pY=[{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:"TensorListConcatV2",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"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}];var DS={};qe(DS,{json:()=>lY});var lY=[{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",defaultValue:.2}]},{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"}]}];var AS={};qe(AS,{json:()=>cY});var cY=[{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"}]},{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:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{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:"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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}];var FS={};qe(FS,{json:()=>mY});var mY=[{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}]}];var PS={};qe(PS,{json:()=>dY});var dY=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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"}]}];var OS={};qe(OS,{json:()=>fY});var fY=[{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"}]}];var MS={};qe(MS,{json:()=>hY});var hY=[{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}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var LS={};qe(LS,{json:()=>gY});var gY=[{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"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}];var BS={};qe(BS,{json:()=>xY});var xY=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}];var zS={};qe(zS,{json:()=>yY});var yY=[{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:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{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}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}];var VS={};qe(VS,{json:()=>bY});var bY=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{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"}]}];var WS={};qe(WS,{json:()=>CY});var CY=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",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"}]},{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"}]}];var US={};qe(US,{json:()=>wY});var wY=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var GS={};qe(GS,{json:()=>SY});var SY=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var HS={};qe(HS,{json:()=>IY});var IY=[{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}]}];var KS={};qe(KS,{json:()=>vY});var vY=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var qS={};qe(qS,{json:()=>kY});var kY=[{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:"EnsureShape",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:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var Uc=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[ES,$S,RS,DS,AS,FS,PS,OS,MS,LS,BS,zS,VS,WS,US,GS,HS,KS,qS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?n.push(h[g.name]):g.op==="Const"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],l={},c={};t!=null&&(l=this.mapSignatureEntries(t.inputs),c=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[w,,S]=qs(x),k=i[w];if(k.outputs!=null){let T=k.outputs.indexOf(S);if(T!==-1){let E=`${w}:${T}`;g.inputNames[b]=E}}g.inputs.push(k),k.children.push(g)})}),Object.keys(c).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(c).forEach(h=>{let[g]=qs(h),x=i[g];x!=null&&(x.signatureKey=c[h],u.push(x))}),Object.keys(l).length>0?Object.keys(l).forEach(h=>{let[g]=qs(h),x=i[g];x&&(x.signatureKey=l[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=bf(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=wf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=wf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=_f(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=_f(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=If(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=If(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=Tf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Tf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=Sf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Sf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=$f(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=$f(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=Nf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Nf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=Ef(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Ef(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=vf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=kf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=kf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=p_(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=p_(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((c,m)=>(c[m.name]=this.mapNode(m),m.op==="Const"&&n.push(c[m.name]),c),{}));let a=[],i=[];e.signature.inputArg.forEach(c=>{let[m]=qs(c.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:jS(c.type),type:"dtype"}},children:[]};d.signatureKey=c.name,a.push(d),s[m]=d}),Object.keys(s).forEach(c=>{let m=s[c];m.inputNames.forEach((d,f)=>{let[h,,g]=qs(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let w=`${h}:${b}`;m.inputNames[f]=w}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(c=>{let[m,d]=qs(u[c.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let l=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function NY(r){let e=A().global;if(typeof e.atob!="undefined")return e.atob(r);if(typeof Buffer!="undefined")return new Buffer(r,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function l_(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):NY(r);return e?t:t.toLowerCase()}function wf(r,e,t,o=!1){let n=r[e];return n!=null?l_(n.s,o):t}function Sf(r,e,t){let o=r[e];return o?o.b:t}function If(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n=="number"?n:parseInt(n,10)}function jS(r){switch(typeof r=="string"&&(r=Or[r]),r){case Or.DT_FLOAT:case Or.DT_HALF:return"float32";case Or.DT_INT32:case Or.DT_INT64:case Or.DT_INT8:case Or.DT_UINT8:return"int32";case Or.DT_BOOL:return"bool";case Or.DT_DOUBLE:return"float32";case Or.DT_STRING:return"string";case Or.DT_COMPLEX64:case Or.DT_COMPLEX128:return"complex64";default:return null}}function p_(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function vf(r,e,t){let o=r[e];return o&&o.type?jS(o.type):t}function kf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>jS(n)):t}function c_(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function Nf(r,e,t){let o=r[e];return o&&o.shape?c_(o.shape):t}function Tf(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):t}function _f(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>l_(s,o)):t}function Ef(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>c_(n)):t}function $f(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var Rf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Vt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Vt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return If(this.node.rawAttrs,e,t);if(o.s!=null)return wf(this.node.rawAttrs,e,t);if(o.b!=null)return Sf(this.node.rawAttrs,e,t);if(o.shape!=null)return Nf(this.node.rawAttrs,e,t);if(o.type!=null)return vf(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return Tf(this.node.rawAttrs,e,t);if(o.list.s!=null)return _f(this.node.rawAttrs,e,t);if(o.list.shape!=null)return Ef(this.node.rawAttrs,e,t);if(o.list.b!=null)return $f(this.node.rawAttrs,e,t);if(o.list.type!=null)return kf(this.node.rawAttrs,e,t)}return t}};var et={};qe(et,{OP_SCOPE_SUFFIX:()=>Bw,abs:()=>er,acos:()=>g1,acosh:()=>x1,add:()=>Ce,addN:()=>y1,all:()=>b1,any:()=>C1,argMax:()=>w1,argMin:()=>S1,asin:()=>I1,asinh:()=>v1,atan:()=>k1,atan2:()=>N1,atanh:()=>T1,avgPool:()=>Id,avgPool3d:()=>$1,basicLSTMCell:()=>R1,batchNorm:()=>mu,batchNorm2d:()=>A1,batchNorm3d:()=>F1,batchNorm4d:()=>P1,batchToSpaceND:()=>vd,bincount:()=>kd,bitwiseAnd:()=>O1,booleanMaskAsync:()=>oX,broadcastArgs:()=>M1,broadcastTo:()=>Oa,buffer:()=>ie,cast:()=>Ue,ceil:()=>L1,clipByValue:()=>B1,clone:()=>Xr,complex:()=>Ar,concat:()=>bt,concat1d:()=>z1,concat2d:()=>V1,concat3d:()=>W1,concat4d:()=>U1,conv1d:()=>G1,conv2d:()=>du,conv2dTranspose:()=>H1,conv3d:()=>K1,conv3dTranspose:()=>j1,cos:()=>X1,cosh:()=>Y1,cosineWindow:()=>Mc,cumprod:()=>Q1,cumsum:()=>Z1,denseBincount:()=>J1,depthToSpace:()=>e2,depthwiseConv2d:()=>cl,diag:()=>t2,dilation2d:()=>r2,div:()=>Xe,divNoNan:()=>n2,dot:()=>s2,dropout:()=>hX,einsum:()=>fu,elu:()=>Ed,enclosingPowerOfTwo:()=>cS,ensureShape:()=>a2,equal:()=>_d,erf:()=>i2,euclideanNorm:()=>l2,exp:()=>Jo,expandDims:()=>Ks,expm1:()=>c2,eye:()=>$d,fft:()=>fl,fill:()=>Ma,floor:()=>Rd,floorDiv:()=>Sd,fused:()=>mS,gather:()=>Dd,gatherND:()=>dX,greater:()=>ju,greaterEqual:()=>Ad,ifft:()=>ep,imag:()=>gu,image:()=>b5,inTopKAsync:()=>xX,irfft:()=>tf,isFinite:()=>m2,isInf:()=>d2,isNaN:()=>f2,leakyRelu:()=>Fd,less:()=>Fc,lessEqual:()=>ml,linalg:()=>C5,linspace:()=>h2,localResponseNormalization:()=>g2,log:()=>yi,log1p:()=>Pd,logSigmoid:()=>x2,logSoftmax:()=>y2,logSumExp:()=>Ld,logicalAnd:()=>Xu,logicalNot:()=>Bd,logicalOr:()=>zd,logicalXor:()=>b2,losses:()=>w5,lowerBound:()=>C2,matMul:()=>Je,max:()=>La,maxPool:()=>Wd,maxPool3d:()=>w2,maxPoolWithArgmax:()=>S2,maximum:()=>Ud,mean:()=>Yu,meshgrid:()=>I2,min:()=>Ac,minimum:()=>Qu,mirrorPad:()=>v2,mod:()=>k2,moments:()=>N2,movingAverage:()=>aX,mul:()=>se,multiRNNCell:()=>T2,multinomial:()=>_2,neg:()=>mr,norm:()=>qu,notEqual:()=>Gd,oneHot:()=>Oc,ones:()=>Ba,onesLike:()=>E2,op:()=>N,outerProduct:()=>$2,pad:()=>za,pad1d:()=>R2,pad2d:()=>D2,pad3d:()=>A2,pad4d:()=>F2,pool:()=>P2,pow:()=>xi,prelu:()=>Kd,print:()=>wd,prod:()=>O2,raggedGather:()=>M2,raggedRange:()=>L2,raggedTensorToTensor:()=>B2,rand:()=>z2,randomGamma:()=>iN,randomNormal:()=>Zd,randomStandardNormal:()=>uN,randomUniform:()=>dl,randomUniformInt:()=>pN,range:()=>xu,real:()=>bi,reciprocal:()=>lN,relu:()=>yu,relu6:()=>Jd,reshape:()=>W,reverse:()=>Bo,reverse1d:()=>cN,reverse2d:()=>mN,reverse3d:()=>dN,reverse4d:()=>fN,rfft:()=>hl,round:()=>ef,rsqrt:()=>hN,scalar:()=>ke,scatterND:()=>uX,searchSorted:()=>Pc,selu:()=>gN,separableConv2d:()=>xN,setdiff1dAsync:()=>yN,sigmoid:()=>Pa,sign:()=>bN,signal:()=>y5,sin:()=>CN,sinh:()=>wN,slice:()=>Ye,slice1d:()=>SN,slice2d:()=>IN,slice3d:()=>vN,slice4d:()=>kN,softmax:()=>NN,softplus:()=>Md,spaceToBatchND:()=>Hd,sparse:()=>S5,sparseToDense:()=>cX,spectral:()=>x5,split:()=>Ci,sqrt:()=>Pr,square:()=>tr,squaredDifference:()=>rf,squeeze:()=>gl,stack:()=>Tr,step:()=>of,stridedSlice:()=>TN,string:()=>I5,sub:()=>Te,sum:()=>ot,tan:()=>_N,tanh:()=>Dc,tensor:()=>pr,tensor1d:()=>rr,tensor2d:()=>bu,tensor3d:()=>nf,tensor4d:()=>EN,tensor5d:()=>$N,tensor6d:()=>RN,tensorScatterUpdate:()=>AN,tile:()=>hu,topk:()=>FN,transpose:()=>yl,truncatedNormal:()=>PN,unique:()=>ON,unsortedSegmentSum:()=>MN,unstack:()=>zo,upperBound:()=>LN,variable:()=>BN,where:()=>Lo,whereAsync:()=>af,zeros:()=>Yr,zerosLike:()=>Kt});var m_=(r,e,t,o=et)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(I("a",r,e,t),I("b",r,e,t))];case"AddN":return[o.addN(I("tensors",r,e,t))];case"FloorMod":case"Mod":return[o.mod(I("a",r,e,t),I("b",r,e,t))];case"Mul":return[o.mul(I("a",r,e,t),I("b",r,e,t))];case"RealDiv":case"Div":return[o.div(I("a",r,e,t),I("b",r,e,t))];case"DivNoNan":return[o.divNoNan(I("a",r,e,t),I("b",r,e,t))];case"FloorDiv":return[o.floorDiv(I("a",r,e,t),I("b",r,e,t))];case"Sub":return[o.sub(I("a",r,e,t),I("b",r,e,t))];case"Minimum":return[o.minimum(I("a",r,e,t),I("b",r,e,t))];case"Maximum":return[o.maximum(I("a",r,e,t),I("b",r,e,t))];case"Pow":return[o.pow(I("a",r,e,t),I("b",r,e,t))];case"SquaredDifference":return[o.squaredDifference(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var d_=(r,e,t,o=et)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(I("x",r,e,t))];case"Acos":return[o.acos(I("x",r,e,t))];case"Acosh":return[o.acosh(I("x",r,e,t))];case"Asin":return[o.asin(I("x",r,e,t))];case"Asinh":return[o.asinh(I("x",r,e,t))];case"Atan":return[o.atan(I("x",r,e,t))];case"Atan2":return[o.atan2(I("x",r,e,t),I("y",r,e,t))];case"Atanh":return[o.atanh(I("x",r,e,t))];case"Ceil":return[o.ceil(I("x",r,e,t))];case"Complex":return[o.complex(I("real",r,e,t),I("imag",r,e,t))];case"Cos":return[o.cos(I("x",r,e,t))];case"Cosh":return[o.cosh(I("x",r,e,t))];case"Elu":return[o.elu(I("x",r,e,t))];case"Erf":return[o.erf(I("x",r,e,t))];case"Exp":return[o.exp(I("x",r,e,t))];case"Expm1":return[o.expm1(I("x",r,e,t))];case"Floor":return[o.floor(I("x",r,e,t))];case"Log":return[o.log(I("x",r,e,t))];case"Log1p":return[o.log1p(I("x",r,e,t))];case"Imag":return[o.imag(I("x",r,e,t))];case"Neg":return[o.neg(I("x",r,e,t))];case"Reciprocal":return[o.reciprocal(I("x",r,e,t))];case"Real":return[o.real(I("x",r,e,t))];case"Relu":return[o.relu(I("x",r,e,t))];case"Round":return[o.round(I("x",r,e,t))];case"Selu":return[o.selu(I("x",r,e,t))];case"Sigmoid":return[o.sigmoid(I("x",r,e,t))];case"Sin":return[o.sin(I("x",r,e,t))];case"Sign":return[o.sign(I("x",r,e,t))];case"Sinh":return[o.sinh(I("x",r,e,t))];case"Softplus":return[o.softplus(I("x",r,e,t))];case"Sqrt":return[o.sqrt(I("x",r,e,t))];case"Square":return[o.square(I("x",r,e,t))];case"Tanh":return[o.tanh(I("x",r,e,t))];case"Tan":return[o.tan(I("x",r,e,t))];case"ClipByValue":return[o.clipByValue(I("x",r,e,t),I("clipValueMin",r,e,t),I("clipValueMax",r,e,t))];case"Relu6":return[o.relu6(I("x",r,e,t))];case"Rsqrt":return[o.rsqrt(Vt(r.inputNames[0],e,t))];case"LeakyRelu":return[o.leakyRelu(I("x",r,e,t),I("alpha",r,e,t))];case"Prelu":return[o.prelu(I("x",r,e,t),I("alpha",r,e,t))];case"IsNan":return[o.isNaN(Vt(r.inputNames[0],e,t))];case"IsInf":return[o.isInf(Vt(r.inputNames[0],e,t))];case"IsFinite":return[o.isFinite(Vt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Qr(r,e,t=""){if(!(typeof r=="number"||typeof e=="number")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function f_(r){return!(typeof r=="number"||r.some(e=>e<0))}function Cl(r,e,t){let o=Df(r,t),n=!f_(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=Df(s.shape,o)}),!f_(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Df(r,e){if(typeof r=="number")return e;if(typeof e=="number")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var Af=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),Fr(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 o=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),Qr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,Fr(t),o.written=!0,this.tensors[e]=o}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((o,n)=>this.write(o,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,zo(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 o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${s.shape}`);let a={data:o,indices:n,segmentIds:s};return T.runKernel(ba,a)}var UN=N({sparseSegmentSum_:qj});function jj(r,e,t,o,n,s,a,i){let p=v(r,"data","stringNGrams","string");if(p.dtype!=="string")throw new Error("Data must be of datatype string");if(p.shape.length!==1)throw new Error(`Data must be a vector, saw: ${p.shape}`);let u=v(e,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let c={separator:t,nGramWidths:o,leftPad:n,rightPad:s,padWidth:a,preserveShortSequences:i},l={data:p,dataSplits:u},m=T.runKernel(Ca,l,c);return{nGrams:m[0],nGramsSplits:m[1]}}var GN=N({stringNGrams_:jj});function Xj(r,e,t=!0){let o=v(r,"input","stringSplit","string"),n=v(e,"delimiter","stringSplit","string");if(o.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${o.shape}`);if(n.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${n.shape}`);let s={skipEmpty:t},a={input:o,delimiter:n},i=T.runKernel(ji,a,s);return{indices:i[0],values:i[1],shape:i[2]}}var HN=N({stringSplit_:Xj});function Yj(r,e){let t=v(r,"input","stringToHashBucketFast","string"),o={numBuckets:e};if(e<=0)throw new Error("Number of buckets must be at least 1");let n={input:t};return T.runKernel(Xi,n,o)}var KN=N({stringToHashBucketFast_:Yj});function Qj(r,e,t,o=!0){let n=v(r,"input","staticRegexReplace","string"),s={pattern:e,rewrite:t,replaceGlobal:o};return T.runKernel(Ru,{x:n},s)}var qN=N({staticRegexReplace_:Qj});var Zj={fft:uc,ifft:ju,rfft:pc,irfft:Hd},Jj={hammingWindow:pN,hannWindow:Qd,frame:Zd,stft:cN},eX={flipLeftRight:mN,grayscaleToRGB:dN,resizeNearestNeighbor:kN,resizeBilinear:vN,rgbToGrayscale:fN,rotateWithOffset:hN,cropAndResize:lN,nonMaxSuppression:gN,nonMaxSuppressionAsync:bN,nonMaxSuppressionWithScore:CN,nonMaxSuppressionWithScoreAsync:wN,nonMaxSuppressionPadded:SN,nonMaxSuppressionPaddedAsync:IN,threshold:NN,transform:TN},tX={bandPart:_N,gramSchmidt:EN,qr:RN},rX={absoluteDifference:DN,computeWeightedLoss:cr,cosineDistance:AN,hingeLoss:FN,huberLoss:PN,logLoss:ON,meanSquaredError:MN,sigmoidCrossEntropy:LN,softmaxCrossEntropy:BN},oX={sparseFillEmptyRows:zN,sparseReshape:VN,sparseSegmentMean:WN,sparseSegmentSum:UN},nX={stringNGrams:GN,stringSplit:HN,stringToHashBucketFast:KN,staticRegexReplace:qN};var jN={};qe(jN,{Serializable:()=>Rl,SerializationMap:()=>rf,getRegisteredName:()=>aX,registerClass:()=>rS});var sX=new Map,tS=new Map,Rl=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class r{constructor(){this.classNameMap={}}static getMap(){return r.instance==null&&(r.instance=new r),r.instance}static register(e){r.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function rS(r,e,t){E(r.className!=null,()=>"Class being registered does not have the static className property defined."),E(typeof r.className=="string",()=>"className is required to be a string, but got type "+typeof r.className),E(r.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof e=="undefined"&&(e="Custom"),typeof t=="undefined"&&(t=r.className);let o=t,n=e+">"+o;return rf.register(r),sX.set(n,r),tS.set(r,n),r}function aX(r){return tS.has(r)?tS.get(r):r.className}var kr=class extends Rl{minimize(e,t=!1,o){let{value:n,grads:s}=this.computeGradients(e,o);if(o!=null){let a=o.map(i=>({name:i.name,tensor:s[i.name]}));this.applyGradients(a)}else this.applyGradients(s);return Ot(s),t?n:(n.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return Vw(e,t)}dispose(){this.iterations_!=null&&Ot(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ke(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(kr,Symbol.hasInstance,{value:r=>r.minimize!=null&&r.computeGradients!=null&&r.applyGradients!=null});var Ju=class extends kr{static get className(){return"Adadelta"}constructor(e,t,o=null){super(),this.learningRate=e,this.rho=t,this.epsilon=o,this.accumulatedGrads=[],this.accumulatedUpdates=[],o==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accum_grad`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${o}/accum_var`,variable:De(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedGrads[n].variable,u=this.accumulatedUpdates[n].variable;De(()=>{let c=Ce(se(p,this.rho),se(Zt(i),1-this.rho)),l=se(je(Rr(Ce(u,this.epsilon)),Rr(Ce(p,this.epsilon))),i),m=Ce(se(u,this.rho),se(Zt(l),1-this.rho));p.assign(c),u.assign(m);let d=Ce(se(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Ot(this.accumulatedGrads.map(e=>e.variable)),Ot(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,o=!1;this.accumulatedGrads=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedUpdates=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};var ep=class extends kr{static get className(){return"Adagrad"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${o}/accumulator`,variable:De(()=>$a(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[n].tensor:e[o];if(a==null)return;let i=this.accumulatedGrads[n].variable;De(()=>{let p=Ce(i,Zt(a));i.assign(p);let u=Ce(se(je(a,Rr(Ce(p,T.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Ot(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(o=>({originalName:o.name,variable:o.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};var tp=class extends kr{static get className(){return"Adam"}constructor(e,t,o,n=null){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],De(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(o).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=Te(1,this.accBeta2);t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:De(()=>Gt(i).variable(p))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:De(()=>Gt(i).variable(p))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,m=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=Ce(se(l,this.beta2),se(Zt(u),1-this.beta2)),f=je(m,o),h=je(d,n);c.assign(m),l.assign(d);let g=Ce(se(je(f,Ce(Rr(h),this.epsilon)),-this.learningRate),i);i.assign(g)}),this.accBeta1.assign(se(this.accBeta1,this.beta1)),this.accBeta2.assign(se(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Ot(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),De(()=>{this.accBeta1.assign(ui(this.beta1,this.iterations_+1)),this.accBeta2.assign(ui(this.beta2,this.iterations_+1))});let t=e.length/2,o=!1;this.accumulatedFirstMoment=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)}))}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)}};var rp=class extends kr{static get className(){return"Adamax"}constructor(e,t,o,n=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=o,this.epsilon=n,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],De(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),n==null&&(this.epsilon=T.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);De(()=>{let o=Te(1,this.accBeta1),n=je(-this.learningRate,Ce(se(this.iteration,this.decay),1));t.forEach((s,a)=>{let i=T.registeredVariables[s],p=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:Gt(i).variable(p)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:Gt(i).variable(p)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,m=Ce(se(c,this.beta1),se(u,1-this.beta1)),d=se(l,this.beta2),f=Qt(u),h=Ad(d,f);c.assign(m),l.assign(h);let g=Ce(se(je(n,o),je(m,Ce(h,this.epsilon))),i);i.assign(g)}),this.iteration.assign(Ce(this.iteration,1)),this.accBeta1.assign(se(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Ot(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Ot(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)}};var mi=class extends kr{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=Array.isArray(e)?e[n].tensor:e[o];if(s==null)return;let a=T.registeredVariables[o];De(()=>{let i=Ce(se(this.c,s),a);a.assign(i)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=$r(ke(-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)}};var op=class extends mi{static get className(){return"Momentum"}constructor(e,t,o=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=o,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(!1))});let a=this.accumulations[n].variable,i=Array.isArray(e)?e[n].tensor:e[o];i!=null&&De(()=>{let p,u=Ce(se(this.m,a),i);this.useNesterov?p=Ce(se(this.c,Ce(i,se(u,this.m))),s):p=Ce(se(this.c,u),s),a.assign(u),s.assign(p)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Ot(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(o=>({originalName:o.name,variable:o.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)}};var np=class extends kr{static get className(){return"RMSProp"}constructor(e,t=.9,o=0,n=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=o,this.epsilon=n,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,n==null&&(this.epsilon=T.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(o=>o.name):Object.keys(e)).forEach((o,n)=>{let s=T.registeredVariables[o],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${o}/rms`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${o}/momentum`,variable:De(()=>Gt(s).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${o}/mg`,variable:De(()=>Gt(s).variable(a))});let i=Array.isArray(e)?e[n].tensor:e[o];if(i==null)return;let p=this.accumulatedMeanSquares[n].variable,u=this.accumulatedMoments[n].variable;De(()=>{let c=Ce(se(p,this.decay),se(Zt(i),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[n].variable,m=Ce(se(l,this.decay),se(i,1-this.decay)),d=je(se(i,this.learningRate),Rr(Te(c,Ce(Zt(m),this.epsilon)))),f=Ce(se(u,this.momentum),d);p.assign(c),l.assign(m),u.assign(f);let h=Te(s,f);s.assign(h)}else{let l=Ce(se(p,this.decay),se(Zt(i),1-this.decay)),m=Ce(se(u,this.momentum),je(se(i,this.learningRate),Rr(Ce(l,this.epsilon))));p.assign(l),u.assign(m);let d=Te(s,m);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Ot(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Ot(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Ot(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,o=!1;this.accumulatedMeanSquares=e.slice(0,t).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.accumulatedMoments=e.slice(t,t*2).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(n=>({originalName:n.name,variable:n.tensor.variable(o)})))}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)}};var iX=[Ju,ep,tp,rp,op,np,mi];function XN(){for(let r of iX)rS(r)}var di={};qe(di,{CompositeArrayBuffer:()=>ir,browserFiles:()=>QN,browserHTTPRequest:()=>tT,concatenateArrayBuffers:()=>dk,copyModel:()=>Tk,decodeWeights:()=>sd,decodeWeightsStream:()=>ad,encodeWeights:()=>pk,fromMemory:()=>rT,fromMemorySync:()=>uS,getLoadHandlers:()=>xk,getModelArtifactsForJSON:()=>tc,getModelArtifactsForJSONSync:()=>$w,getModelArtifactsInfoForJSON:()=>va,getSaveHandlers:()=>gk,getWeightSpecs:()=>Sl,http:()=>nf,isHTTPScheme:()=>of,listModels:()=>kk,loadWeights:()=>JN,moveModel:()=>_k,registerLoadRouter:()=>hk,registerSaveRouter:()=>fk,removeModel:()=>Nk,weightsLoaderFactory:()=>aS,withSaveHandler:()=>oT,withSaveHandlerSync:()=>nT});var uX="model",pX=".json",cX=".weights.bin";function YN(r){return new Promise(e=>setTimeout(e)).then(r)}var dc=class r{constructor(e){if(!A().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(r.URL_SCHEME)&&(e=e.slice(r.URL_SCHEME.length)),(e==null||e.length===0)&&(e=uX),this.modelJsonFileName=e+pX,this.weightDataFileName=e+cX}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=ir.join(e.weightData),o=window.URL.createObjectURL(new Blob([t],{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}],s=id(e,n),a=window.URL.createObjectURL(new Blob([JSON.stringify(s)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=a,await YN(()=>i.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let p=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;p.download=this.weightDataFileName,p.href=o,await YN(()=>p.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:va(e)}}}};dc.URL_SCHEME="downloads://";var oS=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.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let o=new FileReader;o.onload=n=>{let s=JSON.parse(n.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let p=tc(s,u=>this.loadWeights(u));e(p)},o.onerror=n=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),o.readAsText(this.jsonFile)})}loadWeights(e){let t=[],o=[];for(let a of e)t.push(...a.weights),o.push(...a.paths);let n=this.checkManifestAndWeightFiles(e),s=o.map(a=>this.loadWeightsFile(a,n[a]));return Promise.all(s).then(a=>[t,a])}loadWeightsFile(e,t){return new Promise((o,n)=>{let s=new FileReader;s.onload=a=>{let i=a.target.result;o(i)},s.onerror=a=>n(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],o=this.weightsFiles.map(s=>Ew(s.name)),n={};for(let s of e)s.paths.forEach(a=>{let i=Ew(a);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),o.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);n[a]=this.weightsFiles[o.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return n}},lX=r=>A().getBool("IS_BROWSER")&&!Array.isArray(r)&&r.startsWith(dc.URL_SCHEME)?mX(r.slice(dc.URL_SCHEME.length)):null;qt.registerSaveRouter(lX);function mX(r="model"){return new dc(r)}function QN(r){return new oS(r)}function nS(r,e,t,o){a(r),t=t==null?0:t,o=o==null?1:o,i(t,o);let n=0,s=p=>(p.then(u=>{let c=t+ ++n/r.length*(o-t);return e(c),u}),p);function a(p){E(p!=null&&Array.isArray(p)&&p.length>0,()=>"promises must be a none empty array")}function i(p,u){E(p>=0&&p<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${p}`),E(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),E(u>=p,()=>`startFraction must be no more than endFraction, but got startFraction ${p} and endFraction ${u}`)}return Promise.all(r.map(s))}async function sS(r,e){e==null&&(e={});let t=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,o=r.map(l=>t(l,e.requestInit,{isBinary:!0})),i=(e.onProgress==null?await Promise.all(o):await nS(o,e.onProgress,0,.5)).map(l=>l.arrayBuffer());return e.onProgress==null?await Promise.all(i):await nS(i,e.onProgress,.5,1)}function ZN(r,e){var t;let o=e.fetchFunc==null?A().platform.fetch:e.fetchFunc,n=0,s;return(t=e.onProgress)===null||t===void 0||t.call(e,0),new ReadableStream({pull:async a=>{for(var i;nsS(a,{requestInit:o}))(r,e,t)}function aS(r){return async(e,t="",o)=>{let n=e.map(()=>!1),s={},a=o!=null?o.map(()=>!1):[],i=[];if(e.forEach((d,f)=>{let h=0;d.weights.forEach(g=>{let x="quantization"in g?g.quantization.dtype:g.dtype,b=si[x]*ze(g.shape),C=()=>{n[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:g,groupOffset:h,sizeBytes:b})};o!=null?o.forEach((S,k)=>{S===g.name&&(C(),a[k]=!0)}):C(),i.push(g.name),h+=b})}),!a.every(d=>d)){let d=o.filter((f,h)=>!a[h]);throw new Error(`Could not find weights in manifest with names: ${d.join(", ")}. +Manifest JSON has weights with names: ${i.join(", ")}.`)}let p=n.reduce((d,f,h)=>(f&&d.push(h),d),[]),u=[];p.forEach(d=>{e[d].paths.forEach(f=>{let h=t+(t.endsWith("/")?"":"/")+f;u.push(h)})});let c=await r(u),l={},m=0;return p.forEach(d=>{let f=e[d].paths.length,h=new ir(c.slice(m,m+f));s[d].forEach(x=>{let b=h.slice(x.groupOffset,x.groupOffset+x.sizeBytes),C=sd(b,[x.manifestEntry]);for(let S in C)l[S]=C[S]}),m+=f}),l}}var dX="application/octet-stream",fX="application/json",Dl=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(E(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=A().platform.fetch,E(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&E(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||{},this.loadOptions=t}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 o=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],n=id(e,o);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:fX}),"model.json"),e.weightData!=null){let a=ir.join(e.weightData);t.body.append("model.weights.bin",new Blob([a],{type:dX}),"model.weights.bin")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:va(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" 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.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let o=t.modelTopology,n=t.weightsManifest;if(o==null&&n==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return tc(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),o=Sl(e.weightsManifest),n=()=>ZN(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:o,getWeightStream:n})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[o,n]=hX(t),s=this.weightPathPrefix||o,a=[],i=[];for(let p of e)for(let u of p.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(u)):a.push(s+u+n);return this.weightUrlConverter&&a.push(...await Promise.all(i)),a}async loadWeights(e){let t=await this.getWeightUrls(e),o=Sl(e),n=await sS(t,this.loadOptions);return[o,n]}};Dl.URL_SCHEME_REGEX=/^https?:\/\//;function hX(r){let e=r.lastIndexOf("/"),t=r.lastIndexOf("?"),o=r.substring(0,e),n=t>e?r.substring(t):"";return[o+"/",n]}function of(r){return r.match(Dl.URL_SCHEME_REGEX)!=null}var eT=(r,e)=>{if(typeof fetch=="undefined"&&(e==null||e.fetchFunc==null))return null;{let t=!0;if(Array.isArray(r)?t=r.every(o=>of(o)):t=of(r),t)return nf(r,e)}return null};qt.registerSaveRouter(eT);qt.registerLoadRouter(eT);function nf(r,e){return new Dl(r,e)}function tT(r,e){return nf(r,e)}var Al=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},sf=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},iS=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function rT(r,e,t,o){let n=arguments;return new iS(uS(...n))}function uS(r,e,t,o){return arguments.length===1?r.modelTopology!=null||r.weightSpecs!=null?new Al(r):(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 Al({modelTopology:r})):(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 Al({modelTopology:r,weightSpecs:e,weightData:t,trainingConfig:o}))}function oT(r){return new sf(r)}function nT(r){return new sf(r)}var aT={};qe(aT,{confusionMatrix:()=>sT});function gX(r,e,t){let o=v(r,"labels","confusionMatrix"),n=v(e,"predictions","confusionMatrix");E(t==null||t>0&&Number.isInteger(t),()=>`If provided, numClasses must be a positive integer, but got ${t}`),E(o.rank===1,()=>`Expected the rank of labels to be 1, but got ${o.rank}`),E(n.rank===1,()=>`Expected the rank of predictions to be 1, but got ${n.rank}`),E(o.shape[0]===n.shape[0],()=>`Mismatch in the number of examples: ${o.shape[0]} vs. ${n.shape[0]}. Labels and predictions should have the same number of elements.`),E(t>0&&Number.isInteger(t),()=>`numClasses is required to be a positive integer, but got ${t}`);let s=El(Ue(o,"int32"),t),a=El(Ue(n,"int32"),t),i=mc(s),p=Ze(i,a);return Ue(p,"int32")}var sT=N({confusionMatrix_:gX});var cT={};qe(cT,{draw:()=>vX,fromPixels:()=>kX,fromPixelsAsync:()=>wX,toPixels:()=>IX});var sp,iT=!1;function uT(r,e=3){if(e>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let t=!1,o=!1,n=!1,s=!1,a=!1,i=!1;if(r.data instanceof Uint8Array)t=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)o=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)n=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)s=!0;else if(r.getContext!=null)a=!0;else if(typeof ImageBitmap!="undefined"&&r instanceof ImageBitmap)i=!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 ${r.constructor.name}`);if(Xp(Du,T.backendName)!=null){let f={pixels:r},h={numChannels:e};return T.runKernel(Du,f,h)}let[u,c]=n?[r.videoWidth,r.videoHeight]:[r.width,r.height],l;if(a)l=r.getContext("2d").getImageData(0,0,u,c).data;else if(o||t)l=r.data;else if(s||n||i){if(sp==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")sp=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else sp=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});sp.canvas.width=u,sp.canvas.height=c,sp.drawImage(r,0,0,u,c),l=sp.getImageData(0,0,u,c).data}let m;if(e===4)m=new Int32Array(l);else{let f=u*c;m=new Int32Array(f*e);for(let h=0;h4||e===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${e}`);if(r.dtype!=="float32"&&r.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${r.dtype}. Please use float32 or int32 tensors.`)}function SX(r){let e=(r==null?void 0:r.alpha)||1;if(e>1||e<0)throw new Error(`Alpha value ${e} is suppoed to be in range [0 - 1].`)}async function IX(r,e){let t=v(r,"img","toPixels");if(!(r instanceof mt)){let u=t;t=Ue(u,"int32"),u.dispose()}pT(t);let[o,n]=t.shape.slice(0,2),s=t.rank===2?1:t.shape[2],a=await t.data(),i=t.dtype==="float32"?255:1,p=new Uint8ClampedArray(n*o*4);for(let u=0;u1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${d}.`)}else if(t.dtype==="int32"&&(d<0||d>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${d}.`);s===1?(c[0]=d*i,c[1]=d*i,c[2]=d*i):c[m]=d*i}let l=u*4;p[l+0]=Math.round(c[0]),p[l+1]=Math.round(c[1]),p[l+2]=Math.round(c[2]),p[l+3]=Math.round(c[3])}if(e!=null){iT||Xp($u,T.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),iT=!0),e.width=n,e.height=o;let u=e.getContext("2d"),c=new ImageData(p,n,o);u.putImageData(c,0,0)}return t!==r&&t.dispose(),p}function vX(r,e,t){let o=v(r,"img","draw");if(!(r instanceof mt)){let a=o;o=Ue(a,"int32"),a.dispose()}pT(o),SX(t==null?void 0:t.imageOptions);let n={image:o},s={canvas:e,options:t};T.runKernel($u,n,s)}var kX=N({fromPixels_:uT});var af={};qe(af,{prepareAndValidate:()=>lT});function lT(r,e){let t=r.shape.length,o=e.shape.length;if(t<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${t}.`);if(o<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${o}.`);if(e.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.shape[o-1]>t)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${e.shape[o-1]} vs. ${t}`);if(ze(r.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${r.shape}.`);let n=e.shape,s=n[n.length-1],a=1;for(let l=0;ll/u),1].slice(0,s);return[p,a,u,c]}var pt={};qe(pt,{assertParamsValid:()=>TX,computeFlatOffset:()=>DX,computeOutShape:()=>EX,getNormalizedAxes:()=>$X,isSliceContinous:()=>RX,maskToAxes:()=>_X,parseSliceParams:()=>AX,sliceInfo:()=>FX,startForAxis:()=>bT,startIndicesWithElidedDims:()=>gT,stopForAxis:()=>CT,stopIndicesWithElidedDims:()=>xT,stridesForAxis:()=>yT,stridesWithElidedDims:()=>dT});var pS=-2,NX=-1;function TX(r,e,t){let o=r.shape.length;E(o===e.length,()=>`Error in slice${o}D: Length of begin ${e} must match the rank of the array (${o}).`),E(o===t.length,()=>`Error in slice${o}D: Length of size ${t} must match the rank of the array (${o}).`);for(let n=0;n`Error in slice${o}D: begin[${n}] + size[${n}] (${e[n]+t[n]}) would overflow input.shape[${n}] (${r.shape[n]})`)}function _X(r){let e=[],t=0;for(;r>0;)r&1&&e.push(t),r/=2,t++;return e}function EX(r,e,t){let o=[];for(let n=0;n0){let d=e[0],f=t+1;c=gT(a,d,f,o,r),l=xT(i,d,f,n,r),m=dT(s,d,f,r)}else for(let d=0;d-1)s[i]=0;else{let p=fT(e,t,i),u=o[p];r&1<-1)s[i]=Number.MAX_SAFE_INTEGER;else{let p=fT(e,t,i),u=o[p];r&1<0?a=Number.MIN_SAFE_INTEGER:a=Number.MAX_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),a=Vp(0,a,p-1),a}function CT(r,e,t,o,n,s){let a=e[n],i=t[n]||1;(r&1<0?a=Number.MAX_SAFE_INTEGER:a=Number.MIN_SAFE_INTEGER);let p=o[n];return a<0&&(a+=p),i>0?a=Vp(0,a,p):a=Vp(-1,a,p-1),a}function RX(r,e,t){let o=t.length;for(let n=0;n1){o=n;break}for(let n=o+1;n0||t[n]!==r[n])return!1;return!0}function DX(r,e){let t=r.length>0?r[r.length-1]:1;for(let o=0;o{E(a!==-1,()=>"slice() does not support negative begin indexing.")});let s;return t==null?s=new Array(n).fill(-1):typeof t=="number"?s=[t,...new Array(n-1).fill(-1)]:t.lengtha>=0?a:(E(a===-1,()=>`Negative size values should be exactly -1 but got ${a} for the slice() size at index ${i}.`),r.shape[i]-o[i])),[o,s]}function FX(r,e,t,o,n,s,a,i,p){let u;if(o==null?(u=new Array(e.length),u.fill(1)):u=o,a!=null&&a&a-1)throw new Error("Multiple ellipses in slice is not allowed.");let c=!1,l={dims:u.length,numAddAxisAfterEllipsis:0,begin:e.slice(),end:t.slice(),strides:u.slice(),beginMask:n,endMask:s,ellipsisMask:a,newAxisMask:i,shrinkAxisMask:p};for(let C=0;C0?0:-1,m.strides[C]>0?k:k-1];if(S&&m.strides[C]<=0)throw Error("only stride 1 allowed on non-range indexing.");h=h&&m.strides[C]===1;let R=!!(m.beginMask&1<=k)throw Error(`slice index ${m.begin[C]} of dimension ${C} out of bounds.`)}else m.begin[C]=mT(m.begin[C],0,m.strides[C],k,_,$),m.end[C]=mT(m.end[C],1,m.strides[C],k,_,$);let O=m.strides[C]===1&&m.begin[C]===0&&m.end[C]===k;d=d&&O,f=f&&(C===0&&m.strides[C]===1||O)}else d=d&&m.strides[C]===1&&R,f=f&&(C===0&&m.strides[C]===1||R);let D,P=!1;if(m.beginValid&&m.endValid?(D=m.end[C]-m.begin[C],P=!0):S?(D=1,P=!0):R&&k>=0&&(m.strides[C]<0?D=-k:D=k,P=!0),P){let O;D===0||D<0!=m.strides[C]<0?O=0:O=Math.trunc(D/m.strides[C])+(D%m.strides[C]!==0?1:0),g.push(O)}else g.push(-1)}for(let C=0;C=0?x.push(g[S]):S===pS&&x.push(1)}return{finalShapeSparse:x.filter((C,S)=>m.finalShapeGatherIndices[S]!==pS),finalShape:x,isIdentity:d,sliceDim0:f,isSimpleSlice:h,begin:m.begin,end:m.end,strides:m.strides}}function PX(r,e){e.beginMask=0,e.endMask=0,e.shrinkAxisMask=0;let t=0;e.beginValid=r.begin!=null,e.endValid=r.end!=null,e.begin=new Array(e.dims),e.end=new Array(e.dims),e.strides=new Array(e.dims),e.finalShapeGatherIndices=[],e.finalShapeGatherIndicesSparse=[],e.inputShapeGatherIndicesSparse=new Array(e.dims);for(let o=0;o0?s[e]:s[e+1&1];{let a=r<0?o+r:r;return as[1]?s[1]:a}}var OX="4.17.0";var Fl=class{static sgd(e){return new mi(e)}static momentum(e,t,o=!1){return new op(e,t,o)}static rmsprop(e,t=.9,o=0,n=null,s=!1){return new np(e,t,o,n,s)}static adam(e=.001,t=.9,o=.999,n=null){return new tp(e,t,o,n)}static adadelta(e=.001,t=.95,o=null){return new Ju(e,t,o)}static adamax(e=.002,t=.9,o=.999,n=null,s=0){return new rp(e,t,o,n,s)}static adagrad(e,t=.1){return new ep(e,t)}};var OGe=Fl;var MX=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:r=>r();function cS(){return new Promise(r=>MX(()=>r()))}var w={};qe(w,{ERF_A1:()=>e5,ERF_A2:()=>t5,ERF_A3:()=>r5,ERF_A4:()=>o5,ERF_A5:()=>n5,ERF_P:()=>JX,PARALLELIZE_THRESHOLD:()=>uf,RowPartitionType:()=>Fa,SELU_SCALE:()=>ZX,SELU_SCALEALPHA:()=>QX,applyActivation:()=>Qu,assertAndGetBroadcastShape:()=>rt,assertAxesAreInnerMostDims:()=>pK,assertParamsConsistent:()=>LX,assignToTypedArray:()=>c5,axesAreInnerMostDims:()=>zw,calculateShapes:()=>q1,checkEinsumDimSizes:()=>g5,checkPadOnDimRoundingMode:()=>Lt,combineLocations:()=>I2,combineRaggedTensorToTensorShapes:()=>zX,complexWithEvenIndex:()=>i5,complexWithOddIndex:()=>u5,computeConv2DInfo:()=>zu,computeConv3DInfo:()=>Uk,computeDefaultPad:()=>Bw,computeDilation2DInfo:()=>iH,computeOptimalWindowSize:()=>GX,computeOutAndReduceShapes:()=>uK,computeOutShape:()=>BX,computePool2DInfo:()=>Lw,computePool3DInfo:()=>uH,convertConv2DDataFormat:()=>Gk,decodeEinsumEquation:()=>f5,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>ii,exponent:()=>m5,exponents:()=>l5,fromStringArrayToUint8:()=>M5,fromUint8ToStringArray:()=>O5,getAxesPermutation:()=>cK,getBroadcastDims:()=>y2,getComplexWithIndex:()=>p5,getEinsumComputePath:()=>x5,getEinsumPermutation:()=>h5,getFusedBiasGradient:()=>Yu,getFusedDyActivation:()=>Xu,getImageCenter:()=>HX,getInnerMostAxes:()=>mK,getPermuted:()=>qX,getRaggedRank:()=>WX,getReductionAxes:()=>xd,getReshaped:()=>KX,getReshapedPermuted:()=>jX,getRowPartitionTypesHelper:()=>VX,getSliceBeginCoords:()=>XX,getSliceSize:()=>YX,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>w5,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>S5,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>I5,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>N5,getSparseReshapeInputOutputMismatchErrorMessage:()=>_5,getSparseReshapeInputOutputMultipleErrorMessage:()=>T5,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>v5,getSparseReshapeNegativeOutputDimErrorMessage:()=>k5,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>D5,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>E5,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>$5,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>R5,getUndoAxesPermutation:()=>lK,isIdentityPermutation:()=>y5,log:()=>t4,mergeRealAndImagArrays:()=>s5,prepareAndValidate:()=>lT,prepareSplitSize:()=>C5,segment_util:()=>mS,shouldFuse:()=>Zu,slice_util:()=>pt,splitRealAndImagArrays:()=>a5,stridesOrDilationsArePositive:()=>Ta,tupleValuesAreOne:()=>Bu,upcastType:()=>dt,validateDefaultValueShape:()=>UX,validateInput:()=>lc,validateUpdateShape:()=>Qw,warn:()=>Ia});function LX(r,e){let t=r[0].length;r.forEach((n,s)=>{E(n.length===t,()=>`Error in concat${t}D: rank of tensors[${s}] must be the same as the rank of the rest (${t})`)}),E(e>=0&&e`Error in concat${t}D: axis must be between 0 and ${t-1}.`);let o=r[0];r.forEach((n,s)=>{for(let a=0;a`Error in concat${t}D: Shape of tensors[${s}] (${n}) does not match the shape of the rest (${o}) along the non-concatenated axis ${s}.`)})}function BX(r,e){let t=r[0].slice();for(let o=1;o=0)if(i>=0){if(i!==s)throw new Error(`rt input.shape and shape=${e} are incompatible: rt input.shape[${n+r}] = ${s} but shape[${n+r}] = ${i}`)}else o[a]=s}return o}function VX(r){let e={FIRST_DIM_SIZE:Fa.FIRST_DIM_SIZE,VALUE_ROWIDS:Fa.VALUE_ROWIDS,ROW_LENGTHS:Fa.ROW_LENGTHS,ROW_SPLITS:Fa.ROW_SPLITS,ROW_LIMITS:Fa.ROW_LIMITS,ROW_STARTS:Fa.ROW_STARTS},t=[];for(let o of r)if(o in e)t.push(e[o]);else break;return t}function WX(r){return r.length===0?0:r[0]===Fa.FIRST_DIM_SIZE?r.length-1:r.length}function UX(r,e){if(r==null||e==null)return;let t=r.length,o=e.length;if(t>=o)throw new Error(`defaultValue.shape=${r} and ragged tensor flatValues.shape=${e}, are incompatible: defaultValue.rank = ${t} must be less than ragged tensor input flatValues.rank = ${o})`);for(let n=0;n=0&&a>=0&&s!==1&&s!==a)throw new Error(`defaultValue.shape=${r}, and ragged tensor input flatValues.shape=${e} are incompatible: defaultValue.shape[${n-r.length}] = ${s} but ragged tensor input.flatValues.shape[${n-r.length}] = ${a}`)}}var uf=30;function GX(r){return r<=uf?r:Up(r,Math.floor(Math.sqrt(r)))}function HX(r,e,t){let o=t*(typeof r=="number"?r:r[0]),n=e*(typeof r=="number"?r:r[1]);return[o,n]}function KX(r,e,t,o=!0){let n=[];if(o)n=n.concat(e.slice(0)),n.push(r[0]/t),n=n.concat(r.slice(1));else{n=n.concat(r[0]);let s=e.length;for(let a=0;a=e*2+1||a%2===1?s.push(a):n.push(a);o.push(...n),o.push(0),o.push(...s)}return o}function jX(r,e,t,o=!0){let n=[];o?n.push(r[0]/t):n.push(r[0]*t);for(let s=1;s/g,wT=",",ST="...";function f5(r,e){r=r.replace(/\s/g,"");let t=(r.length-r.replace(d5,"").length)/lS.length;if(t<1)throw new Error("Equations without an arrow are not supported.");if(t>1)throw new Error(`Equation must contain exactly one arrow ("${lS}").`);let[o,n]=r.split(lS);E(o.indexOf(ST)===-1,()=>`The ellipsis notation ("${ST}") is not supported yet.`);let s=o.split(wT),a=s.length;if(e!==a)throw new Error(`Expected ${a} input tensors, received ${e}`);if(a>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let m=0;mf.indexOf(d)!==-1))throw new Error(`Output subscripts contain the label ${d} not present in the input subscripts.`);i.indexOf(d)===-1&&i.push(d)}for(let m=0;mn!==-1),{permutationIndices:t,expandDims:o}}function g5(r,e,t){let o=new Array(r);for(let n=0;n`Expected dimension ${o[e[n][a]]} at axis ${a} of input shaped ${JSON.stringify(s)}, but got dimension ${s[a]}`)}}function x5(r,e){let t=r,o=[],n=0;r.length===0&&t.push(-1),n=r.length+1;for(let a=0;ae===t)}function b5(r,e){let t=[];for(let o=0;o"Number of splits must evenly divide the axis."),o=new Array(e).fill(r.shape[t]/e);else{let n=e.reduce((a,i)=>(i===-1&&(a+=1),a),0);E(n<=1,()=>"There should be only one negative value in split array.");let s=e.indexOf(-1);if(s!==-1){let a=e.reduce((i,p)=>p>0?i+p:i);e[s]=r.shape[t]-a}E(r.shape[t]===e.reduce((a,i)=>a+i),()=>"The sum of sizes must match the size of the axis dimension."),o=e}return o}function w5(r){return`Received SparseTensor with denseShape[0] = 0 but + indices.shape[0] = ${r}`}function S5(r,e){return`indices(${r}, 0) is invalid: ${e} < 0`}function I5(r,e,t){return`indices(${r}, 0) is invalid: ${e} >= ${t}`}function v5(r,e){return`only one output dimension may be -1, not both ${r} and ${e}`}function k5(r,e){return`size ${r} must be non-negative, not ${e}`}function N5(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function T5(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a SparseTensor with ${t} + dense values, but the requested shape requires a multiple of ${o}. inputShape=${r} outputShape= ${e}`}function _5(r,e){let t=ze(r),o=ze(e);return`Input to reshape is a tensor with ${t} dense values, but the requested shape has ${o}. inputShape=${r} outputShape=${e}`}function E5(){return"segment ids must be >= 0"}function $5(){return"segment ids are not increasing"}function R5(r,e){return`Segment id ${r} out of range [0, ${e}), possibly because segmentIds input is not sorted.`}function D5(r,e,t){return`Bad: indices[${r}] == ${e} out of range [0, ${t})`}var mS={};qe(mS,{collectGatherOpShapeInfo:()=>P5,computeOutShape:()=>F5,segOpComputeOptimalWindowSize:()=>A5});function A5(r,e){let t=!1,o;for(r<=uf?(o=r,t=!0):o=Up(r,Math.floor(Math.sqrt(r)));!t;)o>e||o===r?t=!0:o=Up(r,o+1);return o}function F5(r,e,t){let o=[],n=r.length;for(let s=0;sn))throw new Error(`Expect batchDims in the range of [-${n}, ${n}], but got ${o}`);if(o<0&&(o+=n),o>s)throw new Error(`batchDims (${o}) must be less than rank(x) ( + ${s}).`);if(tJp(e))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function M5(r){return r.map(e=>Ji(e))}var Vt={};qe(Vt,{nonMaxSuppressionV3Impl:()=>Jd,nonMaxSuppressionV4Impl:()=>ef,nonMaxSuppressionV5Impl:()=>tf,whereImpl:()=>Xd});XN();var L5=A();L5.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,r=>{r&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var Dr;(function(r){r[r.DT_INVALID=0]="DT_INVALID",r[r.DT_FLOAT=1]="DT_FLOAT",r[r.DT_DOUBLE=2]="DT_DOUBLE",r[r.DT_INT32=3]="DT_INT32",r[r.DT_UINT8=4]="DT_UINT8",r[r.DT_INT16=5]="DT_INT16",r[r.DT_INT8=6]="DT_INT8",r[r.DT_STRING=7]="DT_STRING",r[r.DT_COMPLEX64=8]="DT_COMPLEX64",r[r.DT_INT64=9]="DT_INT64",r[r.DT_BOOL=10]="DT_BOOL",r[r.DT_QINT8=11]="DT_QINT8",r[r.DT_QUINT8=12]="DT_QUINT8",r[r.DT_QINT32=13]="DT_QINT32",r[r.DT_BFLOAT16=14]="DT_BFLOAT16",r[r.DT_QINT16=15]="DT_QINT16",r[r.DT_QUINT16=16]="DT_QUINT16",r[r.DT_UINT16=17]="DT_UINT16",r[r.DT_COMPLEX128=18]="DT_COMPLEX128",r[r.DT_HALF=19]="DT_HALF",r[r.DT_RESOURCE=20]="DT_RESOURCE",r[r.DT_VARIANT=21]="DT_VARIANT",r[r.DT_UINT32=22]="DT_UINT32",r[r.DT_UINT64=23]="DT_UINT64",r[r.DT_FLOAT_REF=101]="DT_FLOAT_REF",r[r.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",r[r.DT_INT32_REF=103]="DT_INT32_REF",r[r.DT_UINT8_REF=104]="DT_UINT8_REF",r[r.DT_INT16_REF=105]="DT_INT16_REF",r[r.DT_INT8_REF=106]="DT_INT8_REF",r[r.DT_STRING_REF=107]="DT_STRING_REF",r[r.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",r[r.DT_INT64_REF=109]="DT_INT64_REF",r[r.DT_BOOL_REF=110]="DT_BOOL_REF",r[r.DT_QINT8_REF=111]="DT_QINT8_REF",r[r.DT_QUINT8_REF=112]="DT_QUINT8_REF",r[r.DT_QINT32_REF=113]="DT_QINT32_REF",r[r.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",r[r.DT_QINT16_REF=115]="DT_QINT16_REF",r[r.DT_QUINT16_REF=116]="DT_QUINT16_REF",r[r.DT_UINT16_REF=117]="DT_UINT16_REF",r[r.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",r[r.DT_HALF_REF=119]="DT_HALF_REF",r[r.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",r[r.DT_VARIANT_REF=121]="DT_VARIANT_REF",r[r.DT_UINT32_REF=122]="DT_UINT32_REF",r[r.DT_UINT64_REF=123]="DT_UINT64_REF"})(Dr||(Dr={}));var IT;(function(r){let e;(function(t){t[t.LEGACY=0]="LEGACY",t[t.V1=1]="V1",t[t.V2=2]="V2"})(e=r.CheckpointFormatVersion||(r.CheckpointFormatVersion={}))})(IT||(IT={}));var fS={};function z5(r,e){let t={tfOpName:r,category:"custom",inputs:[],attrs:[],customExecutor:e};fS[r]=t}function pf(r){return fS[r]}function V5(r){delete fS[r]}function I(r,e,t,o,n){let s=e.inputParams[r];if(s&&s.inputIndexStart!==void 0){let i=s.inputIndexStart,p=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?i+1:s.inputIndexEnd,u=i<0?e.inputNames.length+i:i;if(s.type==="tensor")return Bt(e.inputNames[u],t,o,n);if(s.type==="tensors"){let m=e.inputs.slice(i,p);return e.inputNames.slice(i,p).filter((f,h)=>{var g;return((g=m[h])===null||g===void 0?void 0:g.op)!=="NoOp"}).map(f=>Bt(f,t,o,n))}let c=Bt(e.inputNames[u],t,o,n),l=c.dataSync();return s.type==="number"?l[0]:y.toNestedArray(c.shape,l)}let a=e.attrParams[r];return a&&a.value}function Bt(r,e,t,o){let[n,s]=Nr(r,t);if(o!=null){let i=o.getHashTableHandleByName(n);if(i!=null)return i}let a=t.currentContextIds.find(i=>!!e[cf(n,i)]);return a!==void 0?e[cf(n,a)][s]:void 0}function hS(r,e,t){return e[cf(r,t.currentContextId)]}function Ls(r,e){let[t,o,n]=Nr(r,e);return[cf(t,e&&e.currentContextId),o,n]}function cf(r,e){return e?`${r}-${e}`:r}function Nr(r,e){if(r==="")return["",0,void 0];let t=e!=null&&e.parseNodeNameCache!=null;if(t){let s=e.parseNodeNameCache.get(r);if(s!=null)return s}let o=r.split(":"),n;if(o.length===1)n=[r,0,void 0];else{let s=o[0],a=o.length===3?o[1]:void 0,i=Number(o[o.length-1]);n=[s,i,a]}return t&&e.parseNodeNameCache.set(r,n),n}function Pl(r,e,t){let o=I("pad",r,e,t);if(o==="explicit"){o=I("explicitPaddings",r,e,t);let n=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)n[s][0]=o[s*2],n[s][1]=o[s*2+1];return n}return o}function Bs(r){return r.kept?r:Ur(r)}var gS={};qe(gS,{json:()=>W5});var W5=[{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}]}];var xS={};qe(xS,{json:()=>U5});var U5=[{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:"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}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}];var yS={};qe(yS,{json:()=>G5});var G5=[{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:"TensorListConcatV2",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"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}];var bS={};qe(bS,{json:()=>H5});var H5=[{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",defaultValue:.2}]},{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"}]}];var CS={};qe(CS,{json:()=>K5});var K5=[{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"}]},{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:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{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:"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:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,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"}]}];var wS={};qe(wS,{json:()=>q5});var q5=[{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}]}];var SS={};qe(SS,{json:()=>j5});var j5=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{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"}]}];var IS={};qe(IS,{json:()=>X5});var X5=[{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"}]}];var vS={};qe(vS,{json:()=>Y5});var Y5=[{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}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var kS={};qe(kS,{json:()=>Q5});var Q5=[{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"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}];var NS={};qe(NS,{json:()=>Z5});var Z5=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}];var TS={};qe(TS,{json:()=>J5});var J5=[{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:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{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}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}];var _S={};qe(_S,{json:()=>e8});var e8=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{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"}]}];var ES={};qe(ES,{json:()=>t8});var t8=[{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"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",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"}]},{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"}]}];var $S={};qe($S,{json:()=>r8});var r8=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}];var RS={};qe(RS,{json:()=>o8});var o8=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}];var DS={};qe(DS,{json:()=>n8});var n8=[{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}]}];var AS={};qe(AS,{json:()=>s8});var s8=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}];var FS={};qe(FS,{json:()=>a8});var a8=[{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:"EnsureShape",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:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}];var Ol=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[gS,xS,yS,bS,CS,wS,SS,IS,vS,kS,NS,TS,_S,ES,$S,RS,DS,AS,FS],t=[].concat(...e.map(o=>o.json));this.opMappers=t.reduce((o,n)=>(o[n.tfOpName]=n,o),{})}transformGraph(e,t={}){let o=e.node,n=[],s=[],a=[],i=o.reduce((h,g)=>(h[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?n.push(h[g.name]):g.op==="Const"?s.push(h[g.name]):(g.input==null||g.input.length===0)&&a.push(h[g.name]),h),{}),p=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let m=Object.keys(i);m.forEach(h=>{let g=i[h];g.inputNames.forEach((x,b)=>{let[C,,S]=Ls(x),k=i[C];if(k.outputs!=null){let _=k.outputs.indexOf(S);if(_!==-1){let $=`${C}:${_}`;g.inputNames[b]=$}}g.inputs.push(k),k.children.push(g)})}),Object.keys(l).length===0?m.forEach(h=>{let g=i[h];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(h=>{let[g]=Ls(h),x=i[g];x!=null&&(x.signatureKey=l[h],u.push(x))}),Object.keys(c).length>0?Object.keys(c).forEach(h=>{let[g]=Ls(h),x=i[g];x&&(x.signatureKey=c[h],p.push(x))}):p=n;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((h,g)=>(h[g.signature.name]=this.mapFunction(g),h),{}));let f={nodes:i,inputs:p,outputs:u,weights:s,placeholders:n,signature:t,functions:d};return a.length>0&&(f.initNodes=a),f}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,o)=>(t[e[o].name]=o,t),{})}mapNode(e){let t=pf(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let o={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(n=>n.startsWith("^")?n.slice(1):n),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(o.inputParams=t.inputs.reduce((n,s)=>(n[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},n),{})),t.attrs!=null&&(o.attrParams=t.attrs.reduce((n,s)=>{let a=s.type,i;switch(s.type){case"string":i=lf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=lf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":i=yf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=yf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":i=df(e.attr,s.tfName,s.defaultValue||0),i===void 0&&s.tfDeprecatedName&&(i=df(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":i=xf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=xf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":i=mf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=mf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":i=Cf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=Cf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":i=gf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=gf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":i=bf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=bf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":i=ff(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=ff(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":i=hf(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=hf(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":i=vT(e.attr,s.tfName,s.defaultValue),i===void 0&&s.tfDeprecatedName&&(i=vT(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return n[s.name]={value:i,type:a},n},{})),o}mapFunction(e){let t=e.nodeDef,o=[],n=[],s={};t!=null&&(s=t.reduce((l,m)=>(l[m.name]=this.mapNode(m),m.op==="Const"&&n.push(l[m.name]),l),{}));let a=[],i=[];e.signature.inputArg.forEach(l=>{let[m]=Ls(l.name),d={name:m,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:PS(l.type),type:"dtype"}},children:[]};d.signatureKey=l.name,a.push(d),s[m]=d}),Object.keys(s).forEach(l=>{let m=s[l];m.inputNames.forEach((d,f)=>{let[h,,g]=Ls(d),x=s[h];if(x.outputs!=null){let b=x.outputs.indexOf(g);if(b!==-1){let C=`${h}:${b}`;m.inputNames[f]=C}}m.inputs.push(x),x.children.push(m)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[m,d]=Ls(u[l.name]),f=s[m];f!=null&&(f.defaultOutput=d,i.push(f))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:i,weights:n,placeholders:o,signature:c}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o),t),{}),outputs:e.signature.outputArg.reduce((t,o)=>(t[o.name]=this.mapArgToTensorInfo(o,e.ret),t),{})}}mapArgToTensorInfo(e,t){let o=e.name;return t!=null&&(o=t[o]),{name:o,dtype:e.type}}};function i8(r){let e=A().global;if(typeof e.atob!="undefined")return e.atob(r);if(typeof Buffer!="undefined")return new Buffer(r,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function kT(r,e){let t=Array.isArray(r)?String.fromCharCode.apply(null,r):i8(r);return e?t:t.toLowerCase()}function lf(r,e,t,o=!1){let n=r[e];return n!=null?kT(n.s,o):t}function mf(r,e,t){let o=r[e];return o?o.b:t}function df(r,e,t){let o=r[e]||{},n=o.i!=null?o.i:o.f!=null?o.f:t;return typeof n=="number"?n:parseInt(n,10)}function PS(r){switch(typeof r=="string"&&(r=Dr[r]),r){case Dr.DT_FLOAT:case Dr.DT_HALF:return"float32";case Dr.DT_INT32:case Dr.DT_INT64:case Dr.DT_INT8:case Dr.DT_UINT8:return"int32";case Dr.DT_BOOL:return"bool";case Dr.DT_DOUBLE:return"float32";case Dr.DT_STRING:return"string";case Dr.DT_COMPLEX64:case Dr.DT_COMPLEX128:return"complex64";default:return null}}function vT(r,e,t){let o=r[e];return o&&o.func?o.func.name:t}function ff(r,e,t){let o=r[e];return o&&o.type?PS(o.type):t}function hf(r,e,t){let o=r[e];return o&&o.list&&o.list.type?o.list.type.map(n=>PS(n)):t}function NT(r){if(!r.unknownRank)return r.dim!=null?r.dim.map(e=>typeof e.size=="number"?e.size:parseInt(e.size,10)):[]}function gf(r,e,t){let o=r[e];return o&&o.shape?NT(o.shape):t}function xf(r,e,t){let o=r[e];return o?((o.list.f&&o.list.f.length?o.list.f:o.list.i)||[]).map(n=>typeof n=="number"?n:parseInt(n,10)):t}function yf(r,e,t,o=!1){let n=r[e];return n&&n.list&&n.list.s?n.list.s.map(s=>kT(s,o)):t}function bf(r,e,t){let o=r[e];return o&&o.list&&o.list.shape?o.list.shape.map(n=>NT(n)):t}function Cf(r,e,t){let o=r[e];return o&&o.list&&o.list.b?o.list.b:t}var wf=class{constructor(e,t,o){this.node=e,this.tensorMap=t,this.context=o,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(n=>this.getInput(n)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((n,s)=>(n[s]=this.getAttr(s),n),{}))}getInput(e){return Bt(e,this.tensorMap,this.context)}getAttr(e,t){let o=this.node.rawAttrs[e];if(o.tensor!=null)return Bt(e,this.tensorMap,this.context);if(o.i!=null||o.f!=null)return df(this.node.rawAttrs,e,t);if(o.s!=null)return lf(this.node.rawAttrs,e,t);if(o.b!=null)return mf(this.node.rawAttrs,e,t);if(o.shape!=null)return gf(this.node.rawAttrs,e,t);if(o.type!=null)return ff(this.node.rawAttrs,e,t);if(o.list!=null){if(o.list.i!=null||o.list.f!=null)return xf(this.node.rawAttrs,e,t);if(o.list.s!=null)return yf(this.node.rawAttrs,e,t);if(o.list.shape!=null)return bf(this.node.rawAttrs,e,t);if(o.list.b!=null)return Cf(this.node.rawAttrs,e,t);if(o.list.type!=null)return hf(this.node.rawAttrs,e,t)}return t}};var Je={};qe(Je,{OP_SCOPE_SUFFIX:()=>Nw,abs:()=>Qt,acos:()=>Rk,acosh:()=>Dk,add:()=>Ce,addN:()=>Ak,all:()=>Fk,any:()=>Pk,argMax:()=>Ok,argMin:()=>Mk,asin:()=>Lk,asinh:()=>Bk,atan:()=>zk,atan2:()=>Vk,atanh:()=>Wk,avgPool:()=>dd,avgPool3d:()=>Hk,basicLSTMCell:()=>Kk,batchNorm:()=>nu,batchNorm2d:()=>jk,batchNorm3d:()=>Xk,batchNorm4d:()=>Yk,batchToSpaceND:()=>fd,bincount:()=>hd,bitwiseAnd:()=>Qk,booleanMaskAsync:()=>L6,broadcastArgs:()=>Zk,broadcastTo:()=>su,buffer:()=>me,cast:()=>Ue,ceil:()=>Jk,clipByValue:()=>e2,clone:()=>Ur,complex:()=>Er,concat:()=>yt,concat1d:()=>t2,concat2d:()=>r2,concat3d:()=>o2,concat4d:()=>n2,conv1d:()=>s2,conv2d:()=>au,conv2dTranspose:()=>a2,conv3d:()=>i2,conv3dTranspose:()=>p2,cos:()=>c2,cosh:()=>l2,cosineWindow:()=>$l,cumprod:()=>m2,cumsum:()=>d2,denseBincount:()=>f2,depthToSpace:()=>h2,depthwiseConv2d:()=>sc,diag:()=>g2,dilation2d:()=>x2,div:()=>je,divNoNan:()=>b2,dot:()=>C2,dropout:()=>Y6,einsum:()=>iu,elu:()=>bd,enclosingPowerOfTwo:()=>Zw,ensureShape:()=>w2,equal:()=>yd,erf:()=>S2,euclideanNorm:()=>k2,exp:()=>_o,expandDims:()=>Ms,expm1:()=>N2,eye:()=>Cd,fft:()=>uc,fill:()=>$a,floor:()=>wd,floorDiv:()=>md,fused:()=>Jw,gather:()=>Sd,gatherND:()=>j6,greater:()=>Wu,greaterEqual:()=>Id,ifft:()=>ju,imag:()=>pu,image:()=>eX,inTopKAsync:()=>Z6,irfft:()=>Hd,isFinite:()=>T2,isInf:()=>_2,isNaN:()=>E2,leakyRelu:()=>vd,less:()=>Tl,lessEqual:()=>ac,linalg:()=>tX,linspace:()=>$2,localResponseNormalization:()=>R2,log:()=>pi,log1p:()=>kd,logSigmoid:()=>D2,logSoftmax:()=>A2,logSumExp:()=>_d,logicalAnd:()=>Uu,logicalNot:()=>Ed,logicalOr:()=>$d,logicalXor:()=>F2,losses:()=>rX,lowerBound:()=>P2,matMul:()=>Ze,max:()=>Ra,maxPool:()=>Dd,maxPool3d:()=>O2,maxPoolWithArgmax:()=>M2,maximum:()=>Ad,mean:()=>Gu,meshgrid:()=>L2,min:()=>Nl,minimum:()=>Hu,mirrorPad:()=>B2,mod:()=>z2,moments:()=>V2,movingAverage:()=>V6,mul:()=>se,multiRNNCell:()=>W2,multinomial:()=>U2,neg:()=>pr,norm:()=>Vu,notEqual:()=>Fd,oneHot:()=>El,ones:()=>Da,onesLike:()=>G2,op:()=>N,outerProduct:()=>H2,pad:()=>Aa,pad1d:()=>K2,pad2d:()=>q2,pad3d:()=>j2,pad4d:()=>X2,pool:()=>Y2,pow:()=>ui,prelu:()=>Od,print:()=>ld,prod:()=>Q2,raggedGather:()=>Z2,raggedRange:()=>J2,raggedTensorToTensor:()=>e1,rand:()=>t1,randomGamma:()=>S1,randomNormal:()=>Wd,randomStandardNormal:()=>I1,randomUniform:()=>ic,randomUniformInt:()=>v1,range:()=>cu,real:()=>ci,reciprocal:()=>k1,relu:()=>lu,relu6:()=>Ud,reshape:()=>W,reverse:()=>mo,reverse1d:()=>N1,reverse2d:()=>T1,reverse3d:()=>_1,reverse4d:()=>E1,rfft:()=>pc,round:()=>Gd,rsqrt:()=>$1,scalar:()=>ke,scatterND:()=>U6,searchSorted:()=>_l,selu:()=>R1,separableConv2d:()=>D1,setdiff1dAsync:()=>A1,sigmoid:()=>Ea,sign:()=>F1,signal:()=>Jj,sin:()=>P1,sinh:()=>O1,slice:()=>Xe,slice1d:()=>M1,slice2d:()=>L1,slice3d:()=>B1,slice4d:()=>z1,softmax:()=>V1,softplus:()=>Td,spaceToBatchND:()=>Pd,sparse:()=>oX,sparseToDense:()=>K6,spectral:()=>Zj,split:()=>li,sqrt:()=>Rr,square:()=>Zt,squaredDifference:()=>Kd,squeeze:()=>cc,stack:()=>vr,step:()=>qd,stridedSlice:()=>W1,string:()=>nX,sub:()=>Te,sum:()=>ot,tan:()=>U1,tanh:()=>kl,tensor:()=>ar,tensor1d:()=>Jt,tensor2d:()=>mu,tensor3d:()=>jd,tensor4d:()=>G1,tensor5d:()=>H1,tensor6d:()=>K1,tensorScatterUpdate:()=>j1,tile:()=>uu,topk:()=>X1,transpose:()=>mc,truncatedNormal:()=>Y1,unique:()=>Q1,unsortedSegmentSum:()=>Z1,unstack:()=>fo,upperBound:()=>J1,variable:()=>eN,where:()=>lo,whereAsync:()=>Yd,zeros:()=>Gr,zerosLike:()=>Gt});var TT=(r,e,t,o=Je)=>{switch(r.op){case"BiasAdd":case"AddV2":case"Add":return[o.add(I("a",r,e,t),I("b",r,e,t))];case"AddN":return[o.addN(I("tensors",r,e,t))];case"FloorMod":case"Mod":return[o.mod(I("a",r,e,t),I("b",r,e,t))];case"Mul":return[o.mul(I("a",r,e,t),I("b",r,e,t))];case"RealDiv":case"Div":return[o.div(I("a",r,e,t),I("b",r,e,t))];case"DivNoNan":return[o.divNoNan(I("a",r,e,t),I("b",r,e,t))];case"FloorDiv":return[o.floorDiv(I("a",r,e,t),I("b",r,e,t))];case"Sub":return[o.sub(I("a",r,e,t),I("b",r,e,t))];case"Minimum":return[o.minimum(I("a",r,e,t),I("b",r,e,t))];case"Maximum":return[o.maximum(I("a",r,e,t),I("b",r,e,t))];case"Pow":return[o.pow(I("a",r,e,t),I("b",r,e,t))];case"SquaredDifference":return[o.squaredDifference(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var _T=(r,e,t,o=Je)=>{switch(r.op){case"Abs":case"ComplexAbs":return[o.abs(I("x",r,e,t))];case"Acos":return[o.acos(I("x",r,e,t))];case"Acosh":return[o.acosh(I("x",r,e,t))];case"Asin":return[o.asin(I("x",r,e,t))];case"Asinh":return[o.asinh(I("x",r,e,t))];case"Atan":return[o.atan(I("x",r,e,t))];case"Atan2":return[o.atan2(I("x",r,e,t),I("y",r,e,t))];case"Atanh":return[o.atanh(I("x",r,e,t))];case"Ceil":return[o.ceil(I("x",r,e,t))];case"Complex":return[o.complex(I("real",r,e,t),I("imag",r,e,t))];case"Cos":return[o.cos(I("x",r,e,t))];case"Cosh":return[o.cosh(I("x",r,e,t))];case"Elu":return[o.elu(I("x",r,e,t))];case"Erf":return[o.erf(I("x",r,e,t))];case"Exp":return[o.exp(I("x",r,e,t))];case"Expm1":return[o.expm1(I("x",r,e,t))];case"Floor":return[o.floor(I("x",r,e,t))];case"Log":return[o.log(I("x",r,e,t))];case"Log1p":return[o.log1p(I("x",r,e,t))];case"Imag":return[o.imag(I("x",r,e,t))];case"Neg":return[o.neg(I("x",r,e,t))];case"Reciprocal":return[o.reciprocal(I("x",r,e,t))];case"Real":return[o.real(I("x",r,e,t))];case"Relu":return[o.relu(I("x",r,e,t))];case"Round":return[o.round(I("x",r,e,t))];case"Selu":return[o.selu(I("x",r,e,t))];case"Sigmoid":return[o.sigmoid(I("x",r,e,t))];case"Sin":return[o.sin(I("x",r,e,t))];case"Sign":return[o.sign(I("x",r,e,t))];case"Sinh":return[o.sinh(I("x",r,e,t))];case"Softplus":return[o.softplus(I("x",r,e,t))];case"Sqrt":return[o.sqrt(I("x",r,e,t))];case"Square":return[o.square(I("x",r,e,t))];case"Tanh":return[o.tanh(I("x",r,e,t))];case"Tan":return[o.tan(I("x",r,e,t))];case"ClipByValue":return[o.clipByValue(I("x",r,e,t),I("clipValueMin",r,e,t),I("clipValueMax",r,e,t))];case"Relu6":return[o.relu6(I("x",r,e,t))];case"Rsqrt":return[o.rsqrt(Bt(r.inputNames[0],e,t))];case"LeakyRelu":return[o.leakyRelu(I("x",r,e,t),I("alpha",r,e,t))];case"Prelu":return[o.prelu(I("x",r,e,t),I("alpha",r,e,t))];case"IsNan":return[o.isNaN(Bt(r.inputNames[0],e,t))];case"IsInf":return[o.isInf(Bt(r.inputNames[0],e,t))];case"IsFinite":return[o.isFinite(Bt(r.inputNames[0],e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function Hr(r,e,t=""){if(!(typeof r=="number"||typeof e=="number")){y.assert(r.length===e.length,()=>t+` Shapes ${r} and ${e} must match`);for(let o=0;ot+` Shapes ${r} and ${e} must match`)}}}function ET(r){return!(typeof r=="number"||r.some(e=>e<0))}function fc(r,e,t){let o=Sf(r,t),n=!ET(o);if(n&&e.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${o}`);if(n&&e.forEach(s=>{o=Sf(s.shape,o)}),!ET(o))throw new Error(`Non-fully-defined elementShape: ${o}`);return o}function Sf(r,e){if(typeof r=="number")return e;if(typeof e=="number")return r;if(r.length!==e.length)throw new Error(`Incompatible ranks during merge: ${r} vs. ${e}`);let t=[];for(let o=0;o=0&&s>=0&&n!==s)throw new Error(`Incompatible shape during merge: ${r} vs. ${e}`);t[o]=n>=0?n:s}return t}var If=class{constructor(e,t,o,n,s,a,i){this.name=e,this.dtype=t,this.maxSize=o,this.elementShape=n,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),$r(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 o=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),Hr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),o.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(o.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);o.tensor=t,$r(t),o.written=!0,this.tensors[e]=o}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((o,n)=>this.write(o,t[n]))}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 n=0;n=this.maxSize)throw new Error(`Max index must be < array size (${o} vs. ${this.maxSize})`);this.writeMany(e,fo(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 o=0,n=e.map(p=>(o+=p,o));if(o!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, 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 s=o===0?0:t.size/o,a=[];De(()=>{t=W(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Qr(t,s.shape,"TensorList shape mismatch: "),Fr(s)}),this.idTensor=ke(0),this.maxNumElements=n,Fr(this.idTensor)}copy(){return new r([...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,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Qr(e,this.elementShape,"TensorList shape mismatch: ");let n=Cl(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return Tr(s,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 o=Cl(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Qr(n.shape,e,"TensorList shape mismatch: "),W(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Qr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Fr(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}.`);let t=new r([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.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.`);Qr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=Cl(this.elementShape,this.tensors,t);return W(this.tensors[e],n)}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.`);Qr(this.elementShape,t.shape,"TensorList shape mismatch: "),Fr(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Qr(this.elementShape,o,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=Cl(this.elementShape,this.tensors,o);return e.length===0?pr([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return Tr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Qr(this.elementShape,t,"TensorList shape mismatch: ");let o=Cl(this.elementShape,this.tensors,t);return this.size()===0?pr([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return bt(n,0)})}};function h_(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Qr(n,e,"TensorList shape mismatch: ");let s=zo(r);return new wl(s,e,o)}function g_(r,e,t,o){return new wl([],r,e,o)}function x_(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new wl([],t,r.dtype,o),a=zo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function y_(r,e,t){let o=0,n=e.map(l=>(o+=l,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to + ${o}, 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 s=o===0?0:t.size/o,a=[];De(()=>{t=W(t,[1,o,s]);for(let p=0;p{if(o!==s.dtype)throw new Error(`Invalid data types; op elements ${o}, but list elements ${s.dtype}`);Hr(t,s.shape,"TensorList shape mismatch: "),$r(s)}),this.idTensor=ke(0),this.maxNumElements=n,$r(this.idTensor)}copy(){return new r([...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,o=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(o!==-1&&this.tensors.length!==o)throw new Error(`Operation expected a list with ${o} elements but got a list with ${this.tensors.length} elements.`);Hr(e,this.elementShape,"TensorList shape mismatch: ");let n=fc(this.elementShape,this.tensors,e);return De(()=>{let s=this.tensors.map(a=>W(a,n));return vr(s,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 o=fc(this.elementShape,this.tensors,e),n=this.tensors.pop();return n.kept=!1,Hr(n.shape,e,"TensorList shape mismatch: "),W(n,o)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Hr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");$r(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}.`);let t=new r([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let o=0;othis.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.`);Hr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let n=fc(this.elementShape,this.tensors,t);return W(this.tensors[e],n)}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.`);Hr(this.elementShape,t.shape,"TensorList shape mismatch: "),$r(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,o){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Hr(this.elementShape,o,"TensorList shape mismatch: "),e=e.slice(0,this.size());let n=fc(this.elementShape,this.tensors,o);return e.length===0?ar([],[0].concat(n)):De(()=>{let s=e.map(a=>W(this.tensors[a],n));return vr(s,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Hr(this.elementShape,t,"TensorList shape mismatch: ");let o=fc(this.elementShape,this.tensors,t);return this.size()===0?ar([],[0].concat(o)):De(()=>{let n=this.tensors.map(s=>W(s,o));return yt(n,0)})}};function $T(r,e,t){let o=r.dtype;if(r.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${r.shape}`);if(r.dtype!==t)throw new Error(`Invalid data types; op elements ${r.dtype}, but list elements ${t}`);let n=r.shape.slice(1);Hr(n,e,"TensorList shape mismatch: ");let s=fo(r);return new hc(s,e,o)}function RT(r,e,t,o){return new hc([],r,e,o)}function DT(r,e,t,o){if(e.length!==r.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${r.shape[0]}`);let n=Math.max(...e);if(o!=null&&o!==-1&&n>=o)throw new Error(`Max index must be < array size (${n} vs. ${o})`);let s=new hc([],t,r.dtype,o),a=fo(r,0);return e.forEach((i,p)=>{s.setItem(i,a[p])}),s}function AT(r,e,t){let o=0,n=e.map(c=>(o+=c,o));if(o!==r.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is - ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=Df(s,t),i=o===0?0:r.size/o,p=De(()=>{let l=[];r=W(r,[1,o,i]);for(let c=0;c{switch(r.op){case"If":case"StatelessIf":{let o=I("thenBranch",r,e,t),n=I("elseBranch",r,e,t),s=I("cond",r,e,t),a=I("args",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case"While":case"StatelessWhile":{let o=I("body",r,e,t),n=I("cond",r,e,t),s=I("args",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(l=>l.id),p=await a[0].data();a.forEach(l=>{!l.kept&&i.indexOf(l.id)===-1&&l.dispose()});let u=s;for(;p[0];){let l=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let c=u.map(d=>d.id);l.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&c.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&c.indexOf(d.id)===-1&&d.dispose()})}return u}case"LoopCond":{let o=I("pred",r,e,t);return[js(o)]}case"Switch":{let o=I("pred",r,e,t),n=I("data",r,e,t);return n.kept||(n=js(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Vt(n,e,t)!==void 0);if(o){let n=Vt(o,e,t);return[js(n)]}return}case"Enter":{let o=I("frameName",r,e,t),n=I("tensor",r,e,t);return t.enterFrame(o),[js(n)]}case"Exit":{let o=I("tensor",r,e,t);return t.exitFrame(),[js(o)]}case"NextIteration":{let o=I("tensor",r,e,t);return t.nextIteration(),[js(o)]}case"TensorArrayV3":{let o=I("size",r,e,t),n=I("dtype",r,e,t),s=I("elementShape",r,e,t),a=I("dynamicSize",r,e,t),i=I("clearAfterRead",r,e,t),p=I("identicalElementShapes",r,e,t),u=I("name",r,e,t),l=new Af(u,n,o,s,p,a,i);return t.addTensorArray(l),[l.idTensor,ke(1)]}case"TensorArrayWriteV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t);return[t.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("dtype",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id),s=I("dtype",r,e,t);return[n.concat(s)]}case"TensorArraySplitV3":{let o=I("tensorArrayId",r,e,t),n=I("tensor",r,e,t),s=I("lengths",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return[ke(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=I("indices",r,e,t),n=I("tensor",r,e,t),s=I("elementShape",r,e,t),a=I("numElements",r,e,t),i=x_(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=I("elementShape",r,e,t),n=I("elementDType",r,e,t),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=I(s,r,e,t),i=r.op==="TensorListReserve"?-1:a,p=g_(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=I("tensorListId",r,e,t),n=I("indices",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=I("numElements",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=h_(o,n,s);return t.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id),s=I("dtype",r,e,t),a=I("elementShape",r,e,t);return[n.concat(s,a)]}case"TensorListPushBack":{let o=I("tensorListId",r,e,t),n=I("tensor",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("lengths",r,e,t),a=y_(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id);return[ke(n.size(),"int32")]}case"TensorListResize":{let o=I("tensorListId",r,e,t),n=I("size",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function C_(r,e,t){let[o,n]=I("fusedOps",r,e,t),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=I("numArgs",r,e,t);if(s){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(p)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let l=I("strides",r,e,t),c=Wc(r,e,t),m=I("dataFormat",r,e,t).toUpperCase(),d=I("dilations",r,e,t),[f,h]=I("args",r,e,t);a&&(h=f,f=void 0);let g=I("leakyreluAlpha",r,e,t);return{stride:l,pad:c,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var w_=(r,e,t,o=et)=>{switch(r.op){case"Conv1D":{let n=I("stride",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilation",r,e,t);return[o.conv1d(I("x",r,e,t),I("filter",r,e,t),n,s,a,i)]}case"Conv2D":{let n=I("strides",r,e,t),s=Wc(r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv2d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:l,leakyreluAlpha:c}=C_(r,e,t);return[o.fused.conv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:l,preluActivationWeights:u,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:l,leakyreluAlpha:c}=C_(r,e,t);return[o.fused.depthwiseConv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:l,preluActivationWeights:u,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let n=I("outputShape",r,e,t),s=I("strides",r,e,t),a=Wc(r,e,t);return[o.conv2dTranspose(I("x",r,e,t),I("filter",r,e,t),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=I("strides",r,e,t),s=Wc(r,e,t),a=I("dilations",r,e,t),i=I("dataFormat",r,e,t).toUpperCase();return[o.depthwiseConv2d(I("input",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv3d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t),i=I("includeBatchInIndex",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dilations",r,e,t),i=n[1],p=n[2],u=a[1],l=a[2];return[o.dilation2d(I("x",r,e,t),I("filter",r,e,t),[i,p],s,[u,l],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var S_=(r,e,t,o=et)=>{switch(r.op){case"Fill":{let n=I("shape",r,e,t),s=I("dtype",r,e,t),a=I("value",r,e,t);return[o.fill(n,a,s)]}case"LinSpace":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("num",r,e,t);return[o.linspace(n,s,a)]}case"Multinomial":{let n=I("logits",r,e,t),s=I("numSamples",r,e,t),a=I("seed",r,e,t);return[o.multinomial(n,s,a)]}case"OneHot":{let n=I("indices",r,e,t),s=I("depth",r,e,t),a=I("onValue",r,e,t),i=I("offValue",r,e,t),p=I("dtype",r,e,t);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(I("shape",r,e,t),I("dtype",r,e,t))];case"OnesLike":return[o.onesLike(I("x",r,e,t))];case"RandomStandardNormal":return[o.randomStandardNormal(I("shape",r,e,t),I("dtype",r,e,t),I("seed",r,e,t))];case"RandomUniform":return[o.randomUniform(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("dtype",r,e,t))];case"RandomUniformInt":return[o.randomUniformInt(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("seed",r,e,t))];case"Range":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("step",r,e,t);return[o.range(n,s,a,I("dtype",r,e,t))]}case"TruncatedNormal":{let n=I("shape",r,e,t),s=I("mean",r,e,t),a=I("stdDev",r,e,t),i=I("seed",r,e,t);return[o.truncatedNormal(n,s,a,I("dtype",r,e,t),i)]}case"Zeros":return[o.zeros(I("shape",r,e,t),I("dtype",r,e,t))];case"ZerosLike":return[o.zerosLike(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function XS(r,e,t){let o=I("boxes",r,e,t),n=I("scores",r,e,t),s=I("maxOutputSize",r,e,t),a=I("iouThreshold",r,e,t),i=I("scoreThreshold",r,e,t),p=I("softNmsSigma",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var I_=async(r,e,t,o,n=et)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:l}=XS(r,e,t),c=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,l);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=XS(r,e,t),l=I("padToMaxOutputSize",r,e,t),c=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,l);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=XS(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(I("condition",r,e,t),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(I("x",r,e,t),I("y",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var v_=(r,e,t,o=et)=>{switch(r.op){case"LowerBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.lowerBound(n,s)]}case"TopKV2":{let n=I("x",r,e,t),s=I("k",r,e,t),a=I("sorted",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.upperBound(n,s)]}case"Unique":{let n=I("x",r,e,t),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=I("x",r,e,t),s=I("axis",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var k_=(r,e,t,o=et)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=I("default",r,e,t);return[Vt(r.name,e,t)||n];case"Placeholder":return[Vt(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let l=I("x",r,e,t);return[js(l)]}case"IdentityN":return I("x",r,e,t).map(l=>js(l));case"Snapshot":let s=I("x",r,e,t);return[js(s)];case"Shape":return[o.tensor1d(I("x",r,e,t).shape,"int32")];case"ShapeN":return I("x",r,e,t).map(l=>o.tensor1d(l.shape));case"Size":return[o.scalar(I("x",r,e,t).size,"int32")];case"Rank":return[o.scalar(I("x",r,e,t).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=I("x",r,e,t),i=I("data",r,e,t),p=I("message",r,e,t),u=I("summarize",r,e,t);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let l=0;le.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=zo(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case"HashTable":case"HashTableV2":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I("keyDType",r,e,t),a=I("valueDType",r,e,t),i=new Ff(s,a);return o.addHashTable(r.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("values",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("defaultValue",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=I("tableHandle",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var T_=(r,e,t,o=et)=>{switch(r.op){case"ResizeBilinear":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=I("image",r,e,t),s=I("boxes",r,e,t),a=I("boxInd",r,e,t),i=I("cropSize",r,e,t),p=I("method",r,e,t),u=I("extrapolationValue",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=I("images",r,e,t),s=I("transforms",r,e,t),a=I("outputShape",r,e,t),i=I("fillValue",r,e,t),p=I("interpolation",r,e,t),u=I("fillMode",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var __=(r,e,t,o=et)=>{switch(r.op){case"Equal":return[o.equal(I("a",r,e,t),I("b",r,e,t))];case"NotEqual":return[o.notEqual(I("a",r,e,t),I("b",r,e,t))];case"Greater":return[o.greater(I("a",r,e,t),I("b",r,e,t))];case"GreaterEqual":return[o.greaterEqual(I("a",r,e,t),I("b",r,e,t))];case"Less":return[o.less(I("a",r,e,t),I("b",r,e,t))];case"LessEqual":return[o.lessEqual(I("a",r,e,t),I("b",r,e,t))];case"LogicalAnd":return[o.logicalAnd(I("a",r,e,t),I("b",r,e,t))];case"LogicalNot":return[o.logicalNot(I("a",r,e,t))];case"LogicalOr":return[o.logicalOr(I("a",r,e,t),I("b",r,e,t))];case"Select":case"SelectV2":return[o.where(I("condition",r,e,t),I("a",r,e,t),I("b",r,e,t))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var E_=(r,e,t,o=et)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(I("a",r,e,t),I("b",r,e,t),I("transposeA",r,e,t),I("transposeB",r,e,t))];case"Einsum":return[o.einsum(I("equation",r,e,t),...I("tensors",r,e,t))];case"Transpose":return[o.transpose(I("x",r,e,t),I("perm",r,e,t))];case"_FusedMatMul":let[n,s]=I("fusedOps",r,e,t),a=n==="biasadd",i=s==="prelu",p=I("numArgs",r,e,t),u=I("leakyreluAlpha",r,e,t);if(a){if(i&&p!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&p!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[l,c]=I("args",r,e,t);return[o.fused.matMul({a:I("a",r,e,t),b:I("b",r,e,t),transposeA:I("transposeA",r,e,t),transposeB:I("transposeB",r,e,t),bias:l,activation:s,preluActivationWeights:c,leakyreluAlpha:u})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,e,t),I("numLower",r,e,t),I("numUpper",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var $_=(r,e,t,o=et)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(I("x",r,e,t),I("axis",r,e,t),I("keepDims",r,e,t))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"FusedBatchNormV3":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"LRN":return[o.localResponseNormalization(I("x",r,e,t),I("radius",r,e,t),I("bias",r,e,t),I("alpha",r,e,t),I("beta",r,e,t))];case"Softmax":return[o.softmax(I("x",r,e,t))];case"LogSoftmax":return[o.logSoftmax(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var R_=(r,e,t,o=et)=>{switch(r.op){case"RaggedGather":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I("paramsNestedSplits",r,e,t),I("paramsDenseValues",r,e,t),I("indices",r,e,t),I("outputRaggedRank",r,e,t));return n.concat(s)}case"RaggedRange":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I("starts",r,e,t),I("limits",r,e,t),I("splits",r,e,t));return[n,s]}case"RaggedTensorToTensor":return[o.raggedTensorToTensor(I("shape",r,e,t),I("values",r,e,t),I("defaultValue",r,e,t),I("rowPartitionTensors",r,e,t),I("rowPartitionTypes",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var D_=(r,e,t,o=et)=>{switch(r.op){case"Max":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.max(I("x",r,e,t),i,p)]}case"Mean":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.mean(I("x",r,e,t),i,p)]}case"Min":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.min(I("x",r,e,t),i,p)]}case"Sum":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.sum(I("x",r,e,t),i,p)]}case"All":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.all(I("x",r,e,t),i,p)]}case"Any":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.any(I("x",r,e,t),i,p)]}case"ArgMax":{let i=I("axis",r,e,t);return[o.argMax(I("x",r,e,t),i)]}case"ArgMin":{let i=I("axis",r,e,t);return[o.argMin(I("x",r,e,t),i)]}case"Prod":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.prod(I("x",r,e,t),i,p)]}case"Cumprod":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumprod(I("x",r,e,t),i,p,u)]}case"Cumsum":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumsum(I("x",r,e,t),i,p,u)]}case"Bincount":let n=I("x",r,e,t),s=I("weights",r,e,t),a=I("size",r,e,t);return[o.bincount(n,s,a)];case"DenseBincount":{let i=I("x",r,e,t),p=I("weights",r,e,t),u=I("size",r,e,t),l=I("binaryOutput",r,e,t);return[o.denseBincount(i,p,u,l)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var A_=(r,e,t,o=et)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=I("n",r,e,t),s=I("axis",r,e,t),a=I("tensors",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=I("axis",r,e,t),s=I("batchDims",r,e,t),a=I("x",r,e,t),i=I("indices",r,e,t);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=I("dims",r,e,t),s=[];for(let i=0;i{let n=I("axis",r,e,t),s=I("tensors",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let l=y.arraysEqual(u.shape,a);if(!l&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error("the input tensors shape does not match");return l?u:o.reshape(u,a)});return[o.stack(p,n)]});case"Unpack":{let n=I("axis",r,e,t),s=I("tensor",r,e,t);return o.unstack(s,n)}case"Tile":{let n=I("reps",r,e,t);return[o.tile(I("x",r,e,t),n)]}case"Split":case"SplitV":{let n=I("axis",r,e,t),s=I("numOrSizeSplits",r,e,t),a=I("x",r,e,t);return o.split(a,s,n)}case"ScatterNd":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("shape",r,e,t);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gatherND(n,s)]}case"SparseToDense":{let n=I("sparseIndices",r,e,t),s=I("outputShape",r,e,t),a=I("sparseValues",r,e,t),i=I("defaultValue",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case"TensorScatterUpdate":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("tensor",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var F_=(r,e,t,o=et)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I("indices",r,e,t),I("values",r,e,t),I("denseShape",r,e,t),I("defaultValue",r,e,t));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I("inputIndices",r,e,t),I("inputShape",r,e,t),I("newShape",r,e,t));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var P_=(r,e,t,o=et)=>{switch(r.op){case"FFT":return[o.fft(I("x",r,e,t))];case"IFFT":return[o.ifft(I("x",r,e,t))];case"RFFT":return[o.rfft(I("x",r,e,t))];case"IRFFT":return[o.irfft(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var O_=(r,e,t,o=et)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,e,t),I("pattern",r,e,t),I("rewrite",r,e,t),I("replaceGlobal",r,e,t))];case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I("data",r,e,t),I("dataSplits",r,e,t),I("separator",r,e,t),I("nGramWidths",r,e,t),I("leftPad",r,e,t),I("rightPad",r,e,t),I("padWidth",r,e,t),I("preserveShortSequences",r,e,t));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I("input",r,e,t),I("delimiter",r,e,t),I("skipEmpty",r,e,t));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(I("input",r,e,t),I("numBuckets",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var M_=(r,e,t,o=et)=>{switch(r.op){case"Cast":return[o.cast(I("x",r,e,t),I("dtype",r,e,t))];case"ExpandDims":{let n=I("axis",r,e,t);return[o.expandDims(I("x",r,e,t),n)]}case"Squeeze":{let n=I("axis",r,e,t);return[o.squeeze(I("x",r,e,t),n)]}case"Reshape":return[o.reshape(I("x",r,e,t),I("shape",r,e,t))];case"EnsureShape":return[o.ensureShape(I("x",r,e,t),I("shape",r,e,t))];case"MirrorPad":return[o.mirrorPad(I("x",r,e,t),I("padding",r,e,t),I("mode",r,e,t))];case"PadV2":case"Pad":return[o.pad(I("x",r,e,t),I("padding",r,e,t),I("constantValue",r,e,t))];case"SpaceToBatchND":{let n=I("blockShape",r,e,t),s=I("paddings",r,e,t);return[o.spaceToBatchND(I("x",r,e,t),n,s)]}case"BatchToSpaceND":{let n=I("blockShape",r,e,t),s=I("crops",r,e,t);return[o.batchToSpaceND(I("x",r,e,t),n,s)]}case"DepthToSpace":{let n=I("blockSize",r,e,t),s=I("dataFormat",r,e,t).toUpperCase();return[o.depthToSpace(I("x",r,e,t),n,s)]}case"BroadcastTo":return[o.broadcastTo(I("x",r,e,t),I("shape",r,e,t))];case"BroadcastArgs":return[o.broadcastArgs(I("s0",r,e,t),I("s1",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function YS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>m_(a,i,p));case"basic_math":return n(()=>d_(a,i,p));case"control":return b_(a,i,p);case"convolution":return n(()=>w_(a,i,p));case"creation":return n(()=>S_(a,i,p));case"dynamic":return I_(a,i,p);case"evaluation":return n(()=>v_(a,i,p));case"image":return n(()=>T_(a,i,p));case"graph":return n(()=>k_(a,i,p));case"logical":return n(()=>__(a,i,p));case"matrices":return n(()=>E_(a,i,p));case"normalization":return n(()=>$_(a,i,p));case"ragged":return n(()=>R_(a,i,p));case"reduction":return n(()=>D_(a,i,p));case"slice_join":return n(()=>A_(a,i,p));case"sparse":return n(()=>F_(a,i,p));case"spectral":return n(()=>P_(a,i,p));case"string":return n(()=>O_(a,i,p));case"transformation":return n(()=>M_(a,i,p));case"hash_table":return N_(a,i,p,o);case"custom":let u=bf(a.op);if(u&&u.customExecutor)return u.customExecutor(new Rf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Gc=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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;tt.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 QS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Er(m)[0]));o=o||[];let l=new Set(o.map(m=>Er(m.name)[0])),c=[...e];for(;c.length>0;){let m=c.pop();if((wu(m)||ZY(m)||JY(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&!u.has(m.name)&&!l.has(m.name)){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),c.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function L_(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Er(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g=="string"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),l=new Map(u.map(g=>[g.name,g])),c={};for(let g of u){c[g.name]=c[g.name]||0;for(let x of g.children)a(x)||(c[x.name]=Number.POSITIVE_INFINITY),c[x.name]=(c[x.name]||0)+1}let m=Object.entries(c).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=l.get(g);for(let b of x.children.filter(a))--c[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>l.get(g)),h=qY(f,p);return jY(h,p),h}function qY(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var Sl=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function jY(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i=="string"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i=="string"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new Sl(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new Sl(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new Sl(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new Sl(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function B_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>wu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,l)=>Math.max(u,l),o[p])),a=new Map;for(let i=0;ie[o].map(n=>n.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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,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(o=>{this._functionExecutorMap[o]=new r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(e,t){let o=QS(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let u=t.map(c=>c.name),l=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${l}]. Missing the following inputs: [${n}]`)}let i=L_(this.graph,o),p=B_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return Fr(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(m=>this.graph.nodes[Er(m)[0]]),s=t.map(m=>Er(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let l={},c={};return De(()=>{let m=new Gc(this.weightMap,l,c,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,w]=Er(x,m),S=[];S[w]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=YS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Vt(x,d,m))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){if(!(wu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(wu(p))continue;let u=_S(p.name,o,n);if(u!=null)for(let l of u){if(!l||l.kept||s.has(l.id))continue;let c=i[l.id];c===1?(l.dispose(),delete i[l.id]):c!=null&&i[l.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return wu(p)||s.has(p.name)}if(!(wu(e)||a==null))for(let p of a){if(i(p))continue;let u=_S(p.name,t,o);for(let l of u)!l||l.kept||n.has(l.id)||l.dispose()}}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Gc(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Vt(m,i,a)),u=p.map(m=>m.id),l=Object.keys(e).map(m=>e[m].id),c=new Set([...u,...l,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!c.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(c),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(S=>this.graph.nodes[Er(S)[0]]),i=o.map(S=>Er(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:l,missingInputs:c,dynamicNode:m,syncInputs:d}=QS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,T]=Er(S),E=[];E[T]=e[S],h[k]=E});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,l);await Promise.all(S)}m==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let w=u.filter(S=>!wu(S)&&!Vt(S.name,h,t)).map(S=>S.name);if(w.length>0){let S="";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${w}] from the provided inputs [${s}]. Consider providing the following inputs: [${c}]. ${S}`)}return h}processStack(e,t,o,n,s,a,i,p,u){let l=[];for(;t.length>0;){let c=t.pop();o.currentContext=c.contexts;let m="";if(c.node.op==="Enter"&&I("isConstant",c.node,n,o)&&([m]=qs(c.node.name,o)),n[c.node.name]==null){let d=YS(c.node,n,o,this._resourceManager);m||([m]=qs(c.node.name,o));let f=o.currentContext;y.isPromise(d)?l.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,c.node,n,o,a,i,p),this.processChildNodes(c.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,c.node,n,o,a,i,p),this.processChildNodes(c.node,t,o,n,s,u))}else this.processChildNodes(c.node,t,o,n,s,u)}return l}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=qs(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Vt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Vt(u,n,o))&&(s[p]=!0,t.push({contexts:o.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 o=e[t],[n]=Er(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Er(o);return this.graph.nodes[n]==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=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Er(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var Pf=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]}};var e7="?tfjs-format=file",t7="model.json",Kc=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},o=Si){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new Pf}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return y.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await gd(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Hc(Uc.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Uc.Instance.transformGraph(e.modelInitializer);this.initializer=new Hc(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof dt?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof dt)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let l=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return l!=null?s[a]=this.resourceIdToCapturedInput[l]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Lt(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function r7(r,e={},t=Si){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");e==null&&(e={}),e.fromTFHub&&typeof r=="string"&&(r=n7(r));let o=new Kc(r,e,t);return await o.load(),o}function o7(r){if(r==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error("modelJSON must be the first element of the array");if(!n||!(n instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in o))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in o))throw new Error("Model JSON is missing 'weightsManifest'");let s=Si.getWeightSpecs(o.weightsManifest),a=Si.getModelArtifactsForJSONSync(o,s,n);e=Si.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=Si.fromMemorySync(r);else throw new Error("Unknown model format");let t=new Kc(e);return t.load(),t}function n7(r){return r.endsWith("/")||(r=r+"/"),`${r}${t7}${e7}`}var s7="4.17.0";function Q(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var a7=Ut.whereImpl,Il=class r extends mo{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new mn(this,cr())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get("IS_NODE")&&C.warn(` + ${o}, and tensor's shape is: ${r.shape}`);let s=r.shape.slice(1),a=Sf(s,t),i=o===0?0:r.size/o,p=De(()=>{let c=[];r=W(r,[1,o,i]);for(let l=0;l{switch(r.op){case"If":case"StatelessIf":{let o=I("thenBranch",r,e,t),n=I("elseBranch",r,e,t),s=I("cond",r,e,t),a=I("args",r,e,t);return(await s.data())[0]?t.functionMap[o].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap):t.functionMap[n].executeFunctionAsync(a,t.tensorArrayMap,t.tensorListMap)}case"While":case"StatelessWhile":{let o=I("body",r,e,t),n=I("cond",r,e,t),s=I("args",r,e,t),a=await t.functionMap[n].executeFunctionAsync(s,t.tensorArrayMap,t.tensorListMap),i=s.map(c=>c.id),p=await a[0].data();a.forEach(c=>{!c.kept&&i.indexOf(c.id)===-1&&c.dispose()});let u=s;for(;p[0];){let c=u;u=await t.functionMap[o].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);let l=u.map(d=>d.id);c.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()});let m=await t.functionMap[n].executeFunctionAsync(u,t.tensorArrayMap,t.tensorListMap);p=await m[0].data(),m.forEach(d=>{!d.kept&&i.indexOf(d.id)===-1&&l.indexOf(d.id)===-1&&d.dispose()})}return u}case"LoopCond":{let o=I("pred",r,e,t);return[Bs(o)]}case"Switch":{let o=I("pred",r,e,t),n=I("data",r,e,t);return n.kept||(n=Bs(n)),(await o.data())[0]?[void 0,n]:[n,void 0]}case"Merge":{let o=r.inputNames.find(n=>Bt(n,e,t)!==void 0);if(o){let n=Bt(o,e,t);return[Bs(n)]}return}case"Enter":{let o=I("frameName",r,e,t),n=I("tensor",r,e,t);return t.enterFrame(o),[Bs(n)]}case"Exit":{let o=I("tensor",r,e,t);return t.exitFrame(),[Bs(o)]}case"NextIteration":{let o=I("tensor",r,e,t);return t.nextIteration(),[Bs(o)]}case"TensorArrayV3":{let o=I("size",r,e,t),n=I("dtype",r,e,t),s=I("elementShape",r,e,t),a=I("dynamicSize",r,e,t),i=I("clearAfterRead",r,e,t),p=I("identicalElementShapes",r,e,t),u=I("name",r,e,t),c=new If(u,n,o,s,p,a,i);return t.addTensorArray(c),[c.idTensor,ke(1)]}case"TensorArrayWriteV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.write(n,s),[a.idTensor]}case"TensorArrayReadV3":{let o=I("tensorArrayId",r,e,t),n=I("index",r,e,t);return[t.getTensorArray(o.id).read(n)]}case"TensorArrayGatherV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("dtype",r,e,t);return[t.getTensorArray(o.id).gather(n,s)]}case"TensorArrayScatterV3":{let o=I("tensorArrayId",r,e,t),n=I("indices",r,e,t),s=I("tensor",r,e,t),a=t.getTensorArray(o.id);return a.scatter(n,s),[a.idTensor]}case"TensorArrayConcatV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id),s=I("dtype",r,e,t);return[n.concat(s)]}case"TensorArraySplitV3":{let o=I("tensorArrayId",r,e,t),n=I("tensor",r,e,t),s=I("lengths",r,e,t),a=t.getTensorArray(o.id);return a.split(s,n),[a.idTensor]}case"TensorArraySizeV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return[ke(n.size(),"int32")]}case"TensorArrayCloseV3":{let o=I("tensorArrayId",r,e,t),n=t.getTensorArray(o.id);return n.clearAndClose(),[n.idTensor]}case"TensorListSetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("tensor",r,e,t),a=t.getTensorList(o.id);return a.setItem(n,s),[a.idTensor]}case"TensorListGetItem":{let o=I("tensorListId",r,e,t),n=I("index",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).getItem(n,s,a)]}case"TensorListScatterV2":case"TensorListScatter":{let o=I("indices",r,e,t),n=I("tensor",r,e,t),s=I("elementShape",r,e,t),a=I("numElements",r,e,t),i=DT(n,o,s,a);return t.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let o=I("elementShape",r,e,t),n=I("elementDType",r,e,t),s;r.op==="TensorListReserve"?s="numElements":s="maxNumElements";let a=I(s,r,e,t),i=r.op==="TensorListReserve"?-1:a,p=RT(o,n,a,i);return t.addTensorList(p),[p.idTensor]}case"TensorListGather":{let o=I("tensorListId",r,e,t),n=I("indices",r,e,t),s=I("elementShape",r,e,t),a=I("elementDType",r,e,t);return[t.getTensorList(o.id).gather(n,a,s)]}case"TensorListStack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=I("numElements",r,e,t);return[t.getTensorList(o.id).stack(n,s,a)]}case"TensorListFromTensor":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t),a=$T(o,n,s);return t.addTensorList(a),[a.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id),s=I("dtype",r,e,t),a=I("elementShape",r,e,t);return[n.concat(s,a)]}case"TensorListPushBack":{let o=I("tensorListId",r,e,t),n=I("tensor",r,e,t),s=t.getTensorList(o.id);return s.pushBack(n),[s.idTensor]}case"TensorListPopBack":{let o=I("tensorListId",r,e,t),n=I("elementShape",r,e,t),s=I("elementDType",r,e,t);return[t.getTensorList(o.id).popBack(n,s)]}case"TensorListSplit":{let o=I("tensor",r,e,t),n=I("elementShape",r,e,t),s=I("lengths",r,e,t),a=AT(o,s,n);return t.addTensorList(a),[a.idTensor]}case"TensorListLength":{let o=I("tensorListId",r,e,t),n=t.getTensorList(o.id);return[ke(n.size(),"int32")]}case"TensorListResize":{let o=I("tensorListId",r,e,t),n=I("size",r,e,t),a=t.getTensorList(o.id).resize(n);return t.addTensorList(a),[a.idTensor]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};function PT(r,e,t){let[o,n]=I("fusedOps",r,e,t),s=o==="biasadd",a=!s,i=n==="prelu",p=o==="fusedbatchnorm",u=I("numArgs",r,e,t);if(s){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(p)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let c=I("strides",r,e,t),l=Pl(r,e,t),m=I("dataFormat",r,e,t).toUpperCase(),d=I("dilations",r,e,t),[f,h]=I("args",r,e,t);a&&(h=f,f=void 0);let g=I("leakyreluAlpha",r,e,t);return{stride:c,pad:l,dataFormat:m,dilations:d,biasArg:f,preluArg:h,activationFunc:n,leakyreluAlpha:g}}var OT=(r,e,t,o=Je)=>{switch(r.op){case"Conv1D":{let n=I("stride",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilation",r,e,t);return[o.conv1d(I("x",r,e,t),I("filter",r,e,t),n,s,a,i)]}case"Conv2D":{let n=I("strides",r,e,t),s=Pl(r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv2d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,a,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PT(r,e,t);return[o.fused.conv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"FusedDepthwiseConv2dNative":{let{stride:n,pad:s,dataFormat:a,dilations:i,biasArg:p,preluArg:u,activationFunc:c,leakyreluAlpha:l}=PT(r,e,t);return[o.fused.depthwiseConv2d({x:I("x",r,e,t),filter:I("filter",r,e,t),strides:[n[1],n[2]],pad:s,dataFormat:a,dilations:[i[1],i[2]],bias:p,activation:c,preluActivationWeights:u,leakyreluAlpha:l})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let n=I("outputShape",r,e,t),s=I("strides",r,e,t),a=Pl(r,e,t);return[o.conv2dTranspose(I("x",r,e,t),I("filter",r,e,t),n,[s[1],s[2]],a)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let n=I("strides",r,e,t),s=Pl(r,e,t),a=I("dilations",r,e,t),i=I("dataFormat",r,e,t).toUpperCase();return[o.depthwiseConv2d(I("input",r,e,t),I("filter",r,e,t),[n[1],n[2]],s,i,[a[1],a[2]])]}case"Conv3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dataFormat",r,e,t).toUpperCase(),i=I("dilations",r,e,t);return[o.conv3d(I("x",r,e,t),I("filter",r,e,t),[n[1],n[2],n[3]],s,a,[i[1],i[2],i[3]])]}case"AvgPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPool":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s)]}case"MaxPoolWithArgmax":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t),i=I("includeBatchInIndex",r,e,t),{result:p,indexes:u}=o.maxPoolWithArgmax(I("x",r,e,t),[a[1],a[2]],[n[1],n[2]],s,i);return[p,u]}case"AvgPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.avgPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"MaxPool3D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("kernelSize",r,e,t);return[o.maxPool3d(I("x",r,e,t),[a[1],a[2],a[3]],[n[1],n[2],n[3]],s)]}case"Dilation2D":{let n=I("strides",r,e,t),s=I("pad",r,e,t),a=I("dilations",r,e,t),i=n[1],p=n[2],u=a[1],c=a[2];return[o.dilation2d(I("x",r,e,t),I("filter",r,e,t),[i,p],s,[u,c],"NHWC")]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var MT=(r,e,t,o=Je)=>{switch(r.op){case"Fill":{let n=I("shape",r,e,t),s=I("dtype",r,e,t),a=I("value",r,e,t);return[o.fill(n,a,s)]}case"LinSpace":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("num",r,e,t);return[o.linspace(n,s,a)]}case"Multinomial":{let n=I("logits",r,e,t),s=I("numSamples",r,e,t),a=I("seed",r,e,t);return[o.multinomial(n,s,a)]}case"OneHot":{let n=I("indices",r,e,t),s=I("depth",r,e,t),a=I("onValue",r,e,t),i=I("offValue",r,e,t),p=I("dtype",r,e,t);return[o.oneHot(n,s,a,i,p)]}case"Ones":return[o.ones(I("shape",r,e,t),I("dtype",r,e,t))];case"OnesLike":return[o.onesLike(I("x",r,e,t))];case"RandomStandardNormal":return[o.randomStandardNormal(I("shape",r,e,t),I("dtype",r,e,t),I("seed",r,e,t))];case"RandomUniform":return[o.randomUniform(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("dtype",r,e,t))];case"RandomUniformInt":return[o.randomUniformInt(I("shape",r,e,t),I("minval",r,e,t),I("maxval",r,e,t),I("seed",r,e,t))];case"Range":{let n=I("start",r,e,t),s=I("stop",r,e,t),a=I("step",r,e,t);return[o.range(n,s,a,I("dtype",r,e,t))]}case"TruncatedNormal":{let n=I("shape",r,e,t),s=I("mean",r,e,t),a=I("stdDev",r,e,t),i=I("seed",r,e,t);return[o.truncatedNormal(n,s,a,I("dtype",r,e,t),i)]}case"Zeros":return[o.zeros(I("shape",r,e,t),I("dtype",r,e,t))];case"ZerosLike":return[o.zerosLike(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function OS(r,e,t){let o=I("boxes",r,e,t),n=I("scores",r,e,t),s=I("maxOutputSize",r,e,t),a=I("iouThreshold",r,e,t),i=I("scoreThreshold",r,e,t),p=I("softNmsSigma",r,e,t);return{boxes:o,scores:n,maxOutputSize:s,iouThreshold:a,scoreThreshold:i,softNmsSigma:p}}var LT=async(r,e,t,o,n=Je)=>{switch(r.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u,softNmsSigma:c}=OS(r,e,t),l=await n.image.nonMaxSuppressionWithScoreAsync(s,a,i,p,u,c);return[l.selectedIndices,l.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=OS(r,e,t),c=I("padToMaxOutputSize",r,e,t),l=await n.image.nonMaxSuppressionPaddedAsync(s,a,i,p,u,c);return[l.selectedIndices,l.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:a,maxOutputSize:i,iouThreshold:p,scoreThreshold:u}=OS(r,e,t);return[await n.image.nonMaxSuppressionAsync(s,a,i,p,u)]}case"Where":{let s=n.cast(I("condition",r,e,t),"bool"),a=[await n.whereAsync(s)];return s.dispose(),a}case"ListDiff":return n.setdiff1dAsync(I("x",r,e,t),I("y",r,e,t));default:throw TypeError(`Node type ${r.op} is not implemented`)}};var BT=(r,e,t,o=Je)=>{switch(r.op){case"LowerBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.lowerBound(n,s)]}case"TopKV2":{let n=I("x",r,e,t),s=I("k",r,e,t),a=I("sorted",r,e,t),i=o.topk(n,s,a);return[i.values,i.indices]}case"UpperBound":{let n=I("sortedSequence",r,e,t),s=I("values",r,e,t);return[o.upperBound(n,s)]}case"Unique":{let n=I("x",r,e,t),s=o.unique(n);return[s.values,s.indices]}case"UniqueV2":{let n=I("x",r,e,t),s=I("axis",r,e,t),a=o.unique(n,s);return[a.values,a.indices]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var zT=(r,e,t,o=Je)=>{switch(r.op){case"Const":return e[r.name];case"PlaceholderWithDefault":let n=I("default",r,e,t);return[Bt(r.name,e,t)||n];case"Placeholder":return[Bt(r.name,e,t)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",r,e,t);return[Bs(c)]}case"IdentityN":return I("x",r,e,t).map(c=>Bs(c));case"Snapshot":let s=I("x",r,e,t);return[Bs(s)];case"Shape":return[o.tensor1d(I("x",r,e,t).shape,"int32")];case"ShapeN":return I("x",r,e,t).map(c=>o.tensor1d(c.shape));case"Size":return[o.scalar(I("x",r,e,t).size,"int32")];case"Rank":return[o.scalar(I("x",r,e,t).rank,"int32")];case"NoOp":return[o.scalar(1)];case"Print":let a=I("x",r,e,t),i=I("data",r,e,t),p=I("message",r,e,t),u=I("summarize",r,e,t);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(p);for(let c=0;ce.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let o=await e.data();return this.tensorMap.forEach(n=>n.dispose()),this.tensorMap.clear(),De(()=>{let n=fo(t),s=o.length,a=n.length;y.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let i=0;i{let n=[];for(let s=0;s{switch(r.op){case"HashTable":case"HashTableV2":{let n=o.getHashTableHandleByName(r.name);if(n!=null)return[n];{let s=I("keyDType",r,e,t),a=I("valueDType",r,e,t),i=new vf(s,a);return o.addHashTable(r.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("values",r,e,t);return[await o.getHashTableById(n.id).import(s,a)]}case"LookupTableFind":case"LookupTableFindV2":{let n=I("tableHandle",r,e,t,o),s=I("keys",r,e,t),a=I("defaultValue",r,e,t);return[await o.getHashTableById(n.id).find(s,a)]}case"LookupTableSize":case"LookupTableSizeV2":{let n=I("tableHandle",r,e,t,o);return[o.getHashTableById(n.id).tensorSize()]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var WT=(r,e,t,o=Je)=>{switch(r.op){case"ResizeBilinear":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeBilinear(n,[s[0],s[1]],a,i)]}case"ResizeNearestNeighbor":{let n=I("images",r,e,t),s=I("size",r,e,t),a=I("alignCorners",r,e,t),i=I("halfPixelCenters",r,e,t);return[o.image.resizeNearestNeighbor(n,[s[0],s[1]],a,i)]}case"CropAndResize":{let n=I("image",r,e,t),s=I("boxes",r,e,t),a=I("boxInd",r,e,t),i=I("cropSize",r,e,t),p=I("method",r,e,t),u=I("extrapolationValue",r,e,t);return[o.image.cropAndResize(n,s,a,i,p,u)]}case"ImageProjectiveTransformV3":{let n=I("images",r,e,t),s=I("transforms",r,e,t),a=I("outputShape",r,e,t),i=I("fillValue",r,e,t),p=I("interpolation",r,e,t),u=I("fillMode",r,e,t);return[o.image.transform(n,s,p.toLowerCase(),u.toLowerCase(),i,a)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var UT=(r,e,t,o=Je)=>{switch(r.op){case"Equal":return[o.equal(I("a",r,e,t),I("b",r,e,t))];case"NotEqual":return[o.notEqual(I("a",r,e,t),I("b",r,e,t))];case"Greater":return[o.greater(I("a",r,e,t),I("b",r,e,t))];case"GreaterEqual":return[o.greaterEqual(I("a",r,e,t),I("b",r,e,t))];case"Less":return[o.less(I("a",r,e,t),I("b",r,e,t))];case"LessEqual":return[o.lessEqual(I("a",r,e,t),I("b",r,e,t))];case"LogicalAnd":return[o.logicalAnd(I("a",r,e,t),I("b",r,e,t))];case"LogicalNot":return[o.logicalNot(I("a",r,e,t))];case"LogicalOr":return[o.logicalOr(I("a",r,e,t),I("b",r,e,t))];case"Select":case"SelectV2":return[o.where(I("condition",r,e,t),I("a",r,e,t),I("b",r,e,t))];case"BitwiseAnd":return[o.bitwiseAnd(I("a",r,e,t),I("b",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var GT=(r,e,t,o=Je)=>{switch(r.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[o.matMul(I("a",r,e,t),I("b",r,e,t),I("transposeA",r,e,t),I("transposeB",r,e,t))];case"Einsum":return[o.einsum(I("equation",r,e,t),...I("tensors",r,e,t))];case"Transpose":return[o.transpose(I("x",r,e,t),I("perm",r,e,t))];case"_FusedMatMul":let[n,s]=I("fusedOps",r,e,t),a=n==="biasadd",i=s==="prelu",p=I("numArgs",r,e,t),u=I("leakyreluAlpha",r,e,t);if(a){if(i&&p!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&p!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,l]=I("args",r,e,t);return[o.fused.matMul({a:I("a",r,e,t),b:I("b",r,e,t),transposeA:I("transposeA",r,e,t),transposeB:I("transposeB",r,e,t),bias:c,activation:s,preluActivationWeights:l,leakyreluAlpha:u})];case"MatrixBandPart":return[o.linalg.bandPart(I("a",r,e,t),I("numLower",r,e,t),I("numUpper",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var HT=(r,e,t,o=Je)=>{switch(r.op){case"EuclideanNorm":return[o.euclideanNorm(I("x",r,e,t),I("axis",r,e,t),I("keepDims",r,e,t))];case"FusedBatchNorm":case"FusedBatchNormV2":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"FusedBatchNormV3":return[o.batchNorm(I("x",r,e,t),I("mean",r,e,t),I("variance",r,e,t),I("offset",r,e,t),I("scale",r,e,t),I("epsilon",r,e,t))];case"LRN":return[o.localResponseNormalization(I("x",r,e,t),I("radius",r,e,t),I("bias",r,e,t),I("alpha",r,e,t),I("beta",r,e,t))];case"Softmax":return[o.softmax(I("x",r,e,t))];case"LogSoftmax":return[o.logSoftmax(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var KT=(r,e,t,o=Je)=>{switch(r.op){case"RaggedGather":{let{outputNestedSplits:n,outputDenseValues:s}=o.raggedGather(I("paramsNestedSplits",r,e,t),I("paramsDenseValues",r,e,t),I("indices",r,e,t),I("outputRaggedRank",r,e,t));return n.concat(s)}case"RaggedRange":{let{rtNestedSplits:n,rtDenseValues:s}=o.raggedRange(I("starts",r,e,t),I("limits",r,e,t),I("splits",r,e,t));return[n,s]}case"RaggedTensorToTensor":return[o.raggedTensorToTensor(I("shape",r,e,t),I("values",r,e,t),I("defaultValue",r,e,t),I("rowPartitionTensors",r,e,t),I("rowPartitionTypes",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var qT=(r,e,t,o=Je)=>{switch(r.op){case"Max":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.max(I("x",r,e,t),i,p)]}case"Mean":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.mean(I("x",r,e,t),i,p)]}case"Min":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.min(I("x",r,e,t),i,p)]}case"Sum":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.sum(I("x",r,e,t),i,p)]}case"All":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.all(I("x",r,e,t),i,p)]}case"Any":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.any(I("x",r,e,t),i,p)]}case"ArgMax":{let i=I("axis",r,e,t);return[o.argMax(I("x",r,e,t),i)]}case"ArgMin":{let i=I("axis",r,e,t);return[o.argMin(I("x",r,e,t),i)]}case"Prod":{let i=I("axis",r,e,t),p=I("keepDims",r,e,t);return[o.prod(I("x",r,e,t),i,p)]}case"Cumprod":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumprod(I("x",r,e,t),i,p,u)]}case"Cumsum":{let i=I("axis",r,e,t),p=I("exclusive",r,e,t),u=I("reverse",r,e,t);return[o.cumsum(I("x",r,e,t),i,p,u)]}case"Bincount":let n=I("x",r,e,t),s=I("weights",r,e,t),a=I("size",r,e,t);return[o.bincount(n,s,a)];case"DenseBincount":{let i=I("x",r,e,t),p=I("weights",r,e,t),u=I("size",r,e,t),c=I("binaryOutput",r,e,t);return[o.denseBincount(i,p,u,c)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var jT=(r,e,t,o=Je)=>{switch(r.op){case"ConcatV2":case"Concat":{let n=I("n",r,e,t),s=I("axis",r,e,t),a=I("tensors",r,e,t);return a=a.slice(0,n),[o.concat(a,s)]}case"Gather":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gather(n,o.cast(s,"int32"),0)]}case"GatherV2":{let n=I("axis",r,e,t),s=I("batchDims",r,e,t),a=I("x",r,e,t),i=I("indices",r,e,t);return[o.gather(a,o.cast(i,"int32"),n,s)]}case"Reverse":{let n=I("dims",r,e,t),s=[];for(let i=0;i{let n=I("axis",r,e,t),s=I("tensors",r,e,t),a=s[0].shape,i=o.squeeze(s[0]).shape,p=s.map(u=>{let c=y.arraysEqual(u.shape,a);if(!c&&!y.arraysEqual(o.squeeze(u).shape,i))throw new Error("the input tensors shape does not match");return c?u:o.reshape(u,a)});return[o.stack(p,n)]});case"Unpack":{let n=I("axis",r,e,t),s=I("tensor",r,e,t);return o.unstack(s,n)}case"Tile":{let n=I("reps",r,e,t);return[o.tile(I("x",r,e,t),n)]}case"Split":case"SplitV":{let n=I("axis",r,e,t),s=I("numOrSizeSplits",r,e,t),a=I("x",r,e,t);return o.split(a,s,n)}case"ScatterNd":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("shape",r,e,t);return[o.scatterND(n,s,a)]}case"GatherNd":{let n=I("x",r,e,t),s=I("indices",r,e,t);return[o.gatherND(n,s)]}case"SparseToDense":{let n=I("sparseIndices",r,e,t),s=I("outputShape",r,e,t),a=I("sparseValues",r,e,t),i=I("defaultValue",r,e,t);return[o.sparseToDense(n,a,s,a.dtype===i.dtype?i:o.cast(i,a.dtype))]}case"TensorScatterUpdate":{let n=I("indices",r,e,t),s=I("values",r,e,t),a=I("tensor",r,e,t);return[o.tensorScatterUpdate(a,n,s)]}default:throw TypeError(`Node type ${r.op} is not implemented`)}};var XT=(r,e,t,o=Je)=>{switch(r.op){case"SparseFillEmptyRows":{let{outputIndices:n,outputValues:s,emptyRowIndicator:a,reverseIndexMap:i}=o.sparse.sparseFillEmptyRows(I("indices",r,e,t),I("values",r,e,t),I("denseShape",r,e,t),I("defaultValue",r,e,t));return[n,s,a,i]}case"SparseReshape":{let{outputIndices:n,outputShape:s}=o.sparse.sparseReshape(I("inputIndices",r,e,t),I("inputShape",r,e,t),I("newShape",r,e,t));return[n,s]}case"SparseSegmentMean":return[o.sparse.sparseSegmentMean(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];case"SparseSegmentSum":return[o.sparse.sparseSegmentSum(I("data",r,e,t),I("indices",r,e,t),I("segmentIds",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var YT=(r,e,t,o=Je)=>{switch(r.op){case"FFT":return[o.fft(I("x",r,e,t))];case"IFFT":return[o.ifft(I("x",r,e,t))];case"RFFT":return[o.rfft(I("x",r,e,t))];case"IRFFT":return[o.irfft(I("x",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var QT=(r,e,t,o=Je)=>{switch(r.op){case"StaticRegexReplace":return[o.string.staticRegexReplace(I("input",r,e,t),I("pattern",r,e,t),I("rewrite",r,e,t),I("replaceGlobal",r,e,t))];case"StringNGrams":{let{nGrams:n,nGramsSplits:s}=o.string.stringNGrams(I("data",r,e,t),I("dataSplits",r,e,t),I("separator",r,e,t),I("nGramWidths",r,e,t),I("leftPad",r,e,t),I("rightPad",r,e,t),I("padWidth",r,e,t),I("preserveShortSequences",r,e,t));return[n,s]}case"StringSplit":{let{indices:n,values:s,shape:a}=o.string.stringSplit(I("input",r,e,t),I("delimiter",r,e,t),I("skipEmpty",r,e,t));return[n,s,a]}case"StringToHashBucketFast":return[o.string.stringToHashBucketFast(I("input",r,e,t),I("numBuckets",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};var ZT=(r,e,t,o=Je)=>{switch(r.op){case"Cast":return[o.cast(I("x",r,e,t),I("dtype",r,e,t))];case"ExpandDims":{let n=I("axis",r,e,t);return[o.expandDims(I("x",r,e,t),n)]}case"Squeeze":{let n=I("axis",r,e,t);return[o.squeeze(I("x",r,e,t),n)]}case"Reshape":return[o.reshape(I("x",r,e,t),I("shape",r,e,t))];case"EnsureShape":return[o.ensureShape(I("x",r,e,t),I("shape",r,e,t))];case"MirrorPad":return[o.mirrorPad(I("x",r,e,t),I("padding",r,e,t),I("mode",r,e,t))];case"PadV2":case"Pad":return[o.pad(I("x",r,e,t),I("padding",r,e,t),I("constantValue",r,e,t))];case"SpaceToBatchND":{let n=I("blockShape",r,e,t),s=I("paddings",r,e,t);return[o.spaceToBatchND(I("x",r,e,t),n,s)]}case"BatchToSpaceND":{let n=I("blockShape",r,e,t),s=I("crops",r,e,t);return[o.batchToSpaceND(I("x",r,e,t),n,s)]}case"DepthToSpace":{let n=I("blockSize",r,e,t),s=I("dataFormat",r,e,t).toUpperCase();return[o.depthToSpace(I("x",r,e,t),n,s)]}case"BroadcastTo":return[o.broadcastTo(I("x",r,e,t),I("shape",r,e,t))];case"BroadcastArgs":return[o.broadcastArgs(I("s0",r,e,t),I("s1",r,e,t))];default:throw TypeError(`Node type ${r.op} is not implemented`)}};function MS(r,e,t,o,n=De){let s=((a,i,p)=>{switch(a.category){case"arithmetic":return n(()=>TT(a,i,p));case"basic_math":return n(()=>_T(a,i,p));case"control":return FT(a,i,p);case"convolution":return n(()=>OT(a,i,p));case"creation":return n(()=>MT(a,i,p));case"dynamic":return LT(a,i,p);case"evaluation":return n(()=>BT(a,i,p));case"image":return n(()=>WT(a,i,p));case"graph":return n(()=>zT(a,i,p));case"logical":return n(()=>UT(a,i,p));case"matrices":return n(()=>GT(a,i,p));case"normalization":return n(()=>HT(a,i,p));case"ragged":return n(()=>KT(a,i,p));case"reduction":return n(()=>qT(a,i,p));case"slice_join":return n(()=>jT(a,i,p));case"sparse":return n(()=>XT(a,i,p));case"spectral":return n(()=>YT(a,i,p));case"string":return n(()=>QT(a,i,p));case"transformation":return n(()=>ZT(a,i,p));case"hash_table":return VT(a,i,p,o);case"custom":let u=pf(a.op);if(u&&u.customExecutor)return u.customExecutor(new wf(a,i,p));throw TypeError(`Custom op ${a.op} is not registered.`);default:throw TypeError(`Unknown op '${a.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(r,e,t);return y.isPromise(s)?s.then(a=>[].concat(a)):[].concat(s)}var Ml=class{constructor(e={},t={},o={},n={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=o,this.functionMap=n,this.parseNodeNameCache=s,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;tt.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 LS(r,e,t,o){let n=new Set,s=[],a=null,i=null,p=new Set,u=new Set(Object.keys(r).map(m=>Nr(m)[0]));o=o||[];let c=new Set(o.map(m=>Nr(m.name)[0])),l=[...e];for(;l.length>0;){let m=l.pop();if((fu(m)||A8(m)||F8(m))&&a==null&&(a=m,i=a.children.map(d=>d.name).filter(d=>n.has(d))),n.add(m.name),t[m.name]==null&&!u.has(m.name)&&!c.has(m.name)){if(m.inputs.length===0){s.push(m.name);continue}m.inputs.forEach(d=>{p.has(d.name)||(p.add(d.name),l.push(d))})}}return{inputs:r,outputs:e,usedNodes:n,missingInputs:s,dynamicNode:a,syncInputs:i}}function JT(r,e){let{usedNodes:t,inputs:o}=e,n=Object.keys(o).map(g=>Nr(g)[0]).map(g=>r.nodes[g]),s=r.initNodes||[],a=g=>t.has(typeof g=="string"?g:g.name);function i(g){return[...new Map(g.map(x=>[x.name,x])).values()]}let p=i([...n,...r.weights,...s]).filter(a),u=i([...p,...Object.values(r.nodes)]).filter(a),c=new Map(u.map(g=>[g.name,g])),l={};for(let g of u){l[g.name]=l[g.name]||0;for(let x of g.children)a(x)||(l[x.name]=Number.POSITIVE_INFINITY),l[x.name]=(l[x.name]||0)+1}let m=Object.entries(l).filter(([,g])=>g===0).map(([g])=>g),d=[...m];for(;m.length>0;){let g=m.pop(),x=c.get(g);for(let b of x.children.filter(a))--l[b.name]===0&&(d.push(b.name),m.push(b.name))}let f=d.map(g=>c.get(g)),h=_8(f,p);return E8(h,p),h}function _8(r,e){let t=new Map(r.map(a=>[a.name,a])),o=e.map(a=>a.name),n=new Set(o);for(;o.length>0;){let a=o.pop(),i=t.get(a);for(let p of i.children)!t.has(p.name)||n.has(p.name)||(n.add(p.name),o.push(p.name))}return r.filter(a=>n.has(a.name))}var gc=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function E8(r,e){let t=new Map(r.map((i,p)=>[i.name,p])),o=new Set(e.map(i=>i.name)),n=i=>o.has(typeof i=="string"?i:i.name),s=new Set(r.map(i=>i.name)),a=i=>s.has(typeof i=="string"?i:i.name);for(let i of r){for(let p of i.children.filter(a)){if(!t.has(p.name))throw new gc(`Child ${p.name} of node ${i.name} is unreachable.`);if(t.get(i.name)>t.get(p.name))throw new gc(`Node ${i.name} is scheduled to run after its child ${p.name}.`)}if(!n(i))for(let p of i.inputs){if(!t.has(p.name))throw new gc(`Input ${p.name} of node ${i.name} is unreachable.`);if(t.get(p.name)>t.get(i.name))throw new gc(`Node ${i.name} is scheduled to run before its input ${p.name}.`)}}}function e_(r){let e=new Map(r.map((i,p)=>[i.name,p])),t=Number.MAX_SAFE_INTEGER,o=r.map((i,p)=>fu(i)?t:p),n=i=>{let p=o[e.get(i.name)];return p==null?-1:p},s=r.map((i,p)=>i.children.map(n).reduce((u,c)=>Math.max(u,c),o[p])),a=new Map;for(let i=0;ie[o].map(n=>n.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),{})}constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,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(o=>{this._functionExecutorMap[o]=new r(e.functions[o],this)})}getCompilationKey(e,t){let o=e.map(s=>s.name).sort(),n=t.map(s=>s.name).sort();return o.join(this.SEPARATOR)+"--"+n.join(this.SEPARATOR)}compile(e,t){let o=LS(e,t,this.weightMap,this._initNodes),{missingInputs:n,dynamicNode:s,syncInputs:a}=o;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(n.length>0){let u=t.map(l=>l.name),c=Object.keys(e);throw new Error(`Cannot compute the outputs [${u}] from the provided inputs [${c}]. Missing the following inputs: [${n}]`)}let i=JT(this.graph,o),p=e_(i);return{orderedNodes:i,nodeLiveUntilMap:p}}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return $r(t),t}cloneTensorList(e){return e?e.map(o=>this.cloneAndKeepTensor(o)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,o])=>[t,this.cloneTensorList(o)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let o=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let n=o.map(m=>this.graph.nodes[Nr(m)[0]]),s=t.map(m=>Nr(m)[0]),a=new Set(s),i=s.map(m=>this.graph.nodes[m]);i.length===0&&(i=this._outputs);let p=this.getCompilationKey(n,i),u=this.compiledMap.get(p);u==null&&(u=this.compile(e,i),this.compiledMap.set(p,u));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let c={},l={};return De(()=>{let m=new Ml(this.weightMap,c,l,this.functionExecutorMap,this.parseNodeNameCache),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(x=>{let[b,C]=Nr(x,m),S=[];S[C]=e[x],d[b]=S,this.keepIntermediateTensors&&(this.clonedTensorsMap[b]=this.cloneTensorList(S))});let f=this.getFrozenTensorIds(d),{orderedNodes:h,nodeLiveUntilMap:g}=u;for(let x of h){if(d[x.name])continue;let b=MS(x,d,m,this._resourceManager);if(y.isPromise(b))throw new Error(`The execution of the op '${x.op}' returned a promise. Please use model.executeAsync() instead.`);d[x.name]=b,this.keepIntermediateTensors&&(this.clonedTensorsMap[x.name]=this.cloneTensorList(b)),this.checkTensorForDisposalWithNodeLiveUntilInfo(x,d,m,f,a,g.get(x.name))}return this.parent==null&&m.dispose(f),t.map(x=>Bt(x,d,m))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(o=>e[o]).map(o=>o.map(n=>n.id)));return new Set(t)}checkTensorForDisposal(e,t,o,n,s,a,i){if(!(fu(t)||a.has(e))){for(let p of o[e])p!=null&&(i[p.id]=(i[p.id]||0)+t.children.length);for(let p of t.inputs){if(fu(p))continue;let u=hS(p.name,o,n);if(u!=null)for(let c of u){if(!c||c.kept||s.has(c.id))continue;let l=i[c.id];l===1?(c.dispose(),delete i[c.id]):l!=null&&i[c.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,o,n,s,a){function i(p){return fu(p)||s.has(p.name)}if(!(fu(e)||a==null))for(let p of a){if(i(p))continue;let u=hS(p.name,t,o);for(let c of u)!c||c.kept||n.has(c.id)||c.dispose()}}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,o=!1,n={},s={}){this.disposeIntermediateTensors(),o||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=A().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(m){this.keepIntermediateTensors=!1,console.warn(m.message)}let a=new Ml(this.weightMap,n,s,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,a,t,o),p=t.map(m=>Bt(m,i,a)),u=p.map(m=>m.id),c=Object.keys(e).map(m=>e[m].id),l=new Set([...u,...c,...this.weightIds]);return Object.values(i).forEach(m=>{m.forEach(d=>{d&&!d.isDisposed&&!l.has(d.id)&&d.dispose()})}),this.parent==null&&a.dispose(l),p}async executeFunctionAsync(e,t,o){let n=e.reduce((s,a,i)=>(s[this.inputs[i].name]=a,s),{});return this._executeAsync(n,this.outputNodes,!0,t,o)}async executeWithControlFlow(e,t,o,n){let s=Object.keys(e),a=s.map(S=>this.graph.nodes[Nr(S)[0]]),i=o.map(S=>Nr(S)[0]),p=new Set(i),u=i.map(S=>this.graph.nodes[S]);u.length===0&&(u=this._outputs);let{usedNodes:c,missingInputs:l,dynamicNode:m,syncInputs:d}=LS(e,u,this.weightMap,this._initNodes),f=[...a,...this.graph.weights,...this._initNodes||[]].map(S=>({node:S,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(S=>{let[k,_]=Nr(S),$=[];$[_]=e[S],h[k]=$});let g={},x=this.getFrozenTensorIds(h),b={};for(;f.length>0;){let S=this.processStack(a,f,t,h,b,x,p,g,c);await Promise.all(S)}m==null&&!n&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let C=u.filter(S=>!fu(S)&&!Bt(S.name,h,t)).map(S=>S.name);if(C.length>0){let S="";throw m!=null&&(S=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${C}] from the provided inputs [${s}]. Consider providing the following inputs: [${l}]. ${S}`)}return h}processStack(e,t,o,n,s,a,i,p,u){let c=[];for(;t.length>0;){let l=t.pop();o.currentContext=l.contexts;let m="";if(l.node.op==="Enter"&&I("isConstant",l.node,n,o)&&([m]=Ls(l.node.name,o)),n[l.node.name]==null){let d=MS(l.node,n,o,this._resourceManager);m||([m]=Ls(l.node.name,o));let f=o.currentContext;y.isPromise(d)?c.push(d.then(h=>(n[m]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(h)),o.currentContext=f,this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u),h))):(n[m]=d,this.keepIntermediateTensors&&(this.clonedTensorsMap[m]=this.cloneTensorList(d)),this.checkTensorForDisposal(m,l.node,n,o,a,i,p),this.processChildNodes(l.node,t,o,n,s,u))}else this.processChildNodes(l.node,t,o,n,s,u)}return c}processChildNodes(e,t,o,n,s,a){e.children.forEach(i=>{let[p]=Ls(i.name,o);s[p]||!a.has(i.name)||(i.op==="Merge"?i.inputNames.some(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.currentContext,node:i})):i.inputNames.every(u=>!!Bt(u,n,o))&&(s[p]=!0,t.push({contexts:o.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 o=e[t],[n]=Nr(t),s=this.graph.nodes[n];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,i=a.length===o.shape.length&&o.shape.every((p,u)=>a[u]===-1||a[u]===p);y.assert(i,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${o.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&y.assert(o.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${o.dtype}`)})}mapInputs(e){var t,o;let n={};for(let s in e){let a=(o=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||o===void 0?void 0:o[s];a!=null?n[a.name]=e[s]:n[s]=e[s]}return n}checkInputs(e){let t=Object.keys(e).filter(o=>{let[n]=Nr(o);return this.graph.nodes[n]==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=>{var o,n;let s=(n=(o=this._signature)===null||o===void 0?void 0:o.outputs)===null||n===void 0?void 0:n[t];return s!=null?s.name:t},{})}checkOutputs(e){e.forEach(t=>{let[o]=Nr(t);if(!this.graph.nodes[o])throw new Error(`The output '${t}' is not found in the graph`)})}};var kf=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]}};var P8="?tfjs-format=file",O8="model.json",Bl=class{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}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},o=di){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=o,t==null&&(this.loadOptions={}),this.resourceManager=new kf}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.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]}}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=this.handler.load();return y.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await ad(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let o=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=n,this.version=`${o.versions.producer}.${o.versions.minConsumer}`,this.executor=new Ll(Ol.Instance.transformGraph(o,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Ol.Instance.transformGraph(e.modelInitializer);this.initializer=new Ll(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let o=this.io.getSaveHandlers(e);if(o.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(o.length>1)throw new Error(`Found more than one (${o.length}) save handlers for URL '${e}'`);e=o[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)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof mt?[e]:e,o={};return t.forEach((n,s)=>o[this.structuredOutputKeys[s]]=n),o}return e}predict(e,t){let o=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(o)}async predictAsync(e,t){let o=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(o)}normalizeInputs(e){var t;if(!(e instanceof mt)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let i=s[a];i.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let o=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+o!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-o} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((s,a)=>{var i,p,u;let c=(u=(p=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||p===void 0?void 0:p[a])===null||u===void 0?void 0:u.resourceId;return c!=null?s[a]=this.resourceIdToCapturedInput[c]:s[a]=e[n++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,o=Object.keys(t);for(let n=0;n1?o:o[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let o=await this.executor.executeAsync(e,t);return o.length>1?o:o[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,o)=>(t[o]=[e[o]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ot(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function M8(r,e={},t=di){if(r==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");e==null&&(e={}),e.fromTFHub&&typeof r=="string"&&(r=B8(r));let o=new Bl(r,e,t);return await o.load(),o}function L8(r){if(r==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let e;if(r instanceof Array){let[o,n]=r;if(!o)throw new Error("modelJSON must be the first element of the array");if(!n||!(n instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in o))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in o))throw new Error("Model JSON is missing 'weightsManifest'");let s=di.getWeightSpecs(o.weightsManifest),a=di.getModelArtifactsForJSONSync(o,s,n);e=di.fromMemorySync(a)}else if("load"in r)e=r;else if("modelTopology"in r&&"weightSpecs"in r&&"weightData"in r)e=di.fromMemorySync(r);else throw new Error("Unknown model format");let t=new Bl(e);return t.load(),t}function B8(r){return r.endsWith("/")||(r=r+"/"),`${r}${O8}${P8}`}var z8="4.17.0";function Q(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}var V8=Vt.whereImpl,xc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Bo(this,ur())}write(e,t,o){this.firstUse&&(this.firstUse=!1,A().get("IS_NODE")&&w.warn(` ============================ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. -============================`));let n={id:this.nextDataId()};return this.data.set(n,{values:e,dtype:o,refCount:1}),n}makeTensorInfo(e,t,o){let n;if(t==="string"&&o!=null&&o.length>0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,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,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t==="complex64"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return C.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ie(e.shape,e.dtype,t)}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),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:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.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){Q([e],"where");let t=this.readSync(e.dataId);return a7(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Il.nextDataId=0;var Xf={};qe(Xf,{addImpl:()=>eI,bincountImpl:()=>Nl,bincountReduceImpl:()=>Of,bitwiseAndImpl:()=>tI,castImpl:()=>JS,ceilImpl:()=>rI,concatImpl:()=>mp,equalImpl:()=>oI,expImpl:()=>sI,expm1Impl:()=>iI,floorDivImpl:()=>pI,floorImpl:()=>uI,gatherNdImpl:()=>Mf,gatherV2Impl:()=>Lf,greaterEqualImpl:()=>cI,greaterImpl:()=>lI,lessEqualImpl:()=>dI,lessImpl:()=>mI,linSpaceImpl:()=>Bf,logImpl:()=>fI,maxImpl:()=>zf,maximumImpl:()=>hI,minimumImpl:()=>gI,multiplyImpl:()=>qc,negImpl:()=>xI,notEqualImpl:()=>yI,prodImpl:()=>bI,raggedGatherImpl:()=>Vf,raggedRangeImpl:()=>Wf,raggedTensorToTensorImpl:()=>Uf,rangeImpl:()=>fp,rsqrtImpl:()=>wI,scatterImpl:()=>Xs,sigmoidImpl:()=>gE,simpleAbsImpl:()=>ZS,sliceImpl:()=>hp,sparseFillEmptyRowsImpl:()=>Gf,sparseReshapeImpl:()=>Hf,sparseSegmentReductionImpl:()=>_l,sqrtImpl:()=>bE,squaredDifferenceImpl:()=>II,staticRegexReplaceImpl:()=>vI,stridedSliceImpl:()=>Kf,stringNGramsImpl:()=>gp,stringSplitImpl:()=>xp,stringToHashBucketFastImpl:()=>yp,subImpl:()=>NI,tileImpl:()=>qf,topKImpl:()=>jf,transposeImpl:()=>Tl,uniqueImpl:()=>bp});function ZS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,"abs");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=ZS(n),t.makeOutput(o,e.shape,e.dtype)},z_={kernelName:fn,backendName:"cpu",kernelFunc:i7};function Ve(r){return(e,t,o,n,s)=>{let a=C.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),l=y.getTypedArrayFromDType(s,u),c=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=C.getBroadcastDims(e,a),g=C.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xw[E]=0);let S=y.locToIndex(w,c,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let T=y.locToIndex(k,m,f);l[x]=r(o[S],n[T])}return[l,a]}}function qt(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}var V_={kernelName:ei,backendName:"cpu",kernelFunc:qt};function vl(r,e,t="float32"){if(t==="complex64"){let n=vl(r,e,"float32"),s=vl(r,e,"float32");return qt({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function fr(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var W_={kernelName:vo,backendName:"cpu",kernelFunc:fr};function tn(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var U_={kernelName:si,backendName:"cpu",kernelFunc:tn};function JS(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],t),[s,a]=Ve((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function rn(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return fr({inputs:{x:n},backend:t});let l=vl(t,n.shape,n.dtype),c=rn({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=qt({inputs:{real:c,imag:l},backend:t});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),m}if(n.dtype==="complex64"){let l=tn({inputs:{input:n},backend:t}),c=rn({inputs:{x:l},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(l),c}if(!y.hasEncodingLoss(n.dtype,s)){let l=fr({inputs:{x:n},backend:t});return{dataId:l.dataId,shape:l.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=JS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var G_={kernelName:ho,backendName:"cpu",kernelFunc:rn};function Qe(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=a.dtype==="string"?C.fromUint8ToStringArray(u):u,m=a.dtype==="string"?C.fromUint8ToStringArray(l):l,d=o||a.dtype,[f,h]=e(a.shape,i.shape,c,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=rn({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),l=p.data.get(u.dataId),c=l.complexTensorInfos.real,m=l.complexTensorInfos.imag,d=p.data.get(c.dataId).values,f=p.data.get(m.dataId).values,h=rn({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,w=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,T,E]=t(a.shape,i.shape,d,f,w,S),R=p.makeTensorInfo(E,"float32",k),D=p.makeTensorInfo(E,"float32",T),F=qt({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),F}else{let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=o||a.dtype,[m,d]=e(a.shape,i.shape,u,l,c);return p.makeTensorInfo(d,c,m)}}}function kl(r){return(e,t,o,n,s,a)=>{let i=C.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,l=y.computeStrides(i),c=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=C.getBroadcastDims(e,i),f=C.getBroadcastDims(t,i),h=C.mergeRealAndImagArrays(o,n),g=C.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),w=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,x,b),D=T.slice(-w);f.forEach(M=>D[M]=0);let F=y.locToIndex(D,w,S),O=r(h[R*2],h[R*2+1],g[F*2],g[F*2+1]);c[k]=O.real,m[k]=O.imag}return[c,m,i]}}var eI=Ve((r,e)=>r+e),u7=kl((r,e,t,o)=>({real:r+t,imag:e+o})),Wa=Qe(Rr,eI,u7),H_={kernelName:Rr,backendName:"cpu",kernelFunc:Wa};function Nl(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function Of(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ie([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var tI=Ve((r,e)=>r&e),p7=Qe(_n,tI),K_={kernelName:_n,backendName:"cpu",kernelFunc:p7};function Yt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype==="string"){if(!Array.isArray(p))throw new Error("String tensor's value was not an instance of Array");u=C.fromUint8ToStringArray(p)}else u=p;let l=t||a.dtype,c=e(u,l,n);return i.makeTensorInfo(a.shape,l,c)}}var rI=Yt(r=>Math.ceil(r)),l7=Mr(go,rI),q_={kernelName:go,backendName:"cpu",kernelFunc:l7};function mp(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?C.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),nI=Qe(xo,oI,null,"bool"),j_={kernelName:xo,backendName:"cpu",kernelFunc:nI};var sI=Yt(r=>Math.exp(r)),aI=Mr(yo,sI,"float32"),X_={kernelName:yo,backendName:"cpu",kernelFunc:aI};var iI=Yt(r=>Math.expm1(r)),c7=Mr(bo,iI),Y_={kernelName:bo,backendName:"cpu",kernelFunc:c7};var uI=Yt(r=>Math.floor(r)),m7=Mr(Co,uI),Q_={kernelName:Co,backendName:"cpu",kernelFunc:m7};var pI=Ve((r,e)=>Math.floor(r/e)),d7=Qe(wo,pI,null,"int32"),Z_={kernelName:wo,backendName:"cpu",kernelFunc:d7};function Mf(r,e,t,o,n,s,a,i,p){let u=ie([o,s],t);for(let l=0;l=p/s)throw new Error(`Invalid indices: ${c} does not index into ${i}`);for(let d=0;dr>e?1:0),f7=Qe(So,lI,null,"bool"),J_={kernelName:So,backendName:"cpu",kernelFunc:f7};var cI=Ve((r,e)=>r>=e?1:0),h7=Qe(Io,cI,null,"bool"),eE={kernelName:Io,backendName:"cpu",kernelFunc:h7};var mI=Ve((r,e)=>rr<=e?1:0),x7=Qe(No,dI,null,"bool"),rE={kernelName:No,backendName:"cpu",kernelFunc:x7};function Bf(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),y7=Mr(To,fI),oE={kernelName:To,backendName:"cpu",kernelFunc:y7};function zf(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var hI=Ve((r,e)=>Math.max(r,e)),b7=Qe(_o,hI),nE={kernelName:_o,backendName:"cpu",kernelFunc:b7};var gI=Ve((r,e)=>Math.min(r,e)),C7=Qe(Eo,gI),sE={kernelName:Eo,backendName:"cpu",kernelFunc:C7};var qc=Ve((r,e)=>r*e),w7=kl((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),dp=Qe($o,qc,w7),aE={kernelName:$o,backendName:"cpu",kernelFunc:dp};function xI(r,e,t){let o=y.createScalarValue(-1,t);return qc([],e,o,r,t)}function S7(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=xI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var iE={kernelName:ls,backendName:"cpu",kernelFunc:S7};var yI=Ve((r,e)=>r!==e?1:0),I7=Qe(Ro,yI,null,"bool"),uE={kernelName:Ro,backendName:"cpu",kernelFunc:I7};function Tl(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let l=0;lt.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var lE={kernelName:Ho,backendName:"cpu",kernelFunc:v7};function k7(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function N7(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function T7(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);N7(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[l];for(let x=l;xn[a]=s)}return e}function cE(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error("starts must be a scalar or vector");if(n.length>1)throw new Error("limits must be a scalar or vector");if(a.length>1)throw new Error("deltas must be a scalar or vector");let i=e.length===0,p=n.length===0,u=a.length===0,l=[];i||l.push(e[0]),p||l.push(n[0]),u||l.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/w)),S>mE)throw new Error(`Requires ((limit - start) / delta) <= ${mE}`);m[g+1]=m[g]+S}let d=m[c],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let l=1;l=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${t.length}`);u=t[c]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case on.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case on.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${on[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case on.FIRST_DIM_SIZE:return e[0];case on.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case on.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${on[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=fE(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,l=this.defaultValue;if(l.length!==p&&l.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(l,f);l=Oa(h,i).dataSync()})}let c=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);dE(g,l,p),++d}h<0?(c=f+1,m=d):(c=f,m=d,d=m+1)}}};function dE(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function Uf(r,e,t,o,n,s,a,i,p,u){return new CI(r,e,t,o,n,s,a,i,p,u).compute()}function fp(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),R7=Mr(Do,wI),hE={kernelName:Do,backendName:"cpu",kernelFunc:R7};function Xs(r,e,t,o,n,s,a,i,p,u){let l=[o/n,n],c=r.values,m=e.values;if(o===0)return ie(t,e.dtype);let d=p instanceof Ge?p:ie(l,e.dtype);typeof p=="string"||typeof p=="number"?d.values.fill(p):typeof p=="boolean"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),SI=Ie(Ao,r=>1/(1+Math.exp(-r))),xE={kernelName:Ao,backendName:"cpu",kernelFunc:SI};function hp(r,e,t,o,n){let s=nt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let c=nt.computeFlatOffset(e,i);return n==="string"?r.slice(c,c+a):r.subarray(c,c+a)}let p=n==="string"?C.fromUint8ToStringArray(r):r,u=ie(o,n,p),l=ie(t,n);for(let c=0;cf+e[h]);l.set(u.get(...d),...m)}return n==="string"?C.fromStringArrayToUint8(l.values):l.values}function nn(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=nt.parseSliceParams(n,s,a);nt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,l=hp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,l)}var yE={kernelName:_s,backendName:"cpu",kernelFunc:nn};function Gf(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),l=new Array(i),c=e[1];if(p===0){if(i!==0)throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,c],x,u,l]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(c<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=c;let d=m.reduce((w,S)=>w*S,1),f=y.getArrayFromDType(t,d);if(i===0)return c>0&&f.fill(a),[f,m];if(c<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let w=0;if(g=w)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=c)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,c));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let T=0;Ti)break}return xMath.sqrt(r)),D7=Ie(Fo,r=>Math.sqrt(r)),CE={kernelName:Fo,backendName:"cpu",kernelFunc:D7};var II=Ve((r,e)=>{let t=r-e;return t*t}),A7=Qe(Po,II),wE={kernelName:Po,backendName:"cpu",kernelFunc:A7};var vI=Yt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?"g":""),n)}),F7=Mr(pi,vI),SE={kernelName:pi,backendName:"cpu",kernelFunc:F7};function Kf(r,e,t,o){let n=ie(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(w=>h[g++]=w);for(let b=0;b0){x(e[m+c-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(l=l&&t[u]<=o,!l)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],l=0;this.nGramWidths.forEach(c=>{l+=this.getNumNGrams(u,c)}),this.preserveShort&&u>0&&l===0&&(l=1),a[p]=a[p-1]+l}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,c);this.createNGrams(e,u,i,l,d,c),l+=d}),this.preserveShort&&l===a[p]){let c=t[p+1]-t[p];if(c===0)continue;let m=c+2*this.padWidth;this.createNGrams(e,u,i,l,1,m)}}return[i,a]}};function gp(r,e,t,o,n,s,a,i){return new kI(t,o,n,s,a,i).compute(r,e)}function P7(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),O7=kl((r,e,t,o)=>({real:r-t,imag:e-o})),jc=Qe(Oo,NI,O7),IE={kernelName:Oo,backendName:"cpu",kernelFunc:jc};function qf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function vE(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(i-l)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*l/i+c)),d=Math.min(o,Math.floor(e+(i-p)*l/i+c));vE(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Xc(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Xc(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function jf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let c=0;cf[w]={value:b,index:w}),o{for(let g=0;gnew Il,1);var TI=Ie(Wn,r=>r>=0?r:Math.exp(r)-1),kE={kernelName:Wn,backendName:"cpu",kernelFunc:TI};function _I(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([n],"leakyRelu");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?e*r:r);function EI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=L7(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var TE={kernelName:gs,backendName:"cpu",kernelFunc:EI};var $I=Ie(ys,r=>Math.max(0,r)),_E={kernelName:ys,backendName:"cpu",kernelFunc:$I};var RI=Ie(ws,r=>Math.min(Math.max(0,r),6)),EE={kernelName:ws,backendName:"cpu",kernelFunc:RI};function Cp(r,e,t,o,n){if(t==="linear")return fr({inputs:{x:e},backend:r});if(t==="relu")return $I({inputs:{x:e},backend:r});if(t==="elu")return TI({inputs:{x:e},backend:r});if(t==="relu6")return RI({inputs:{x:e},backend:r});if(t==="prelu")return EI({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return _I({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return SI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let l=u.complexTensorInfos.real,c=u.complexTensorInfos.imag;l.shape=i,c.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var $E={kernelName:Ca,backendName:"cpu",kernelFunc:We};function DI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([n,s],"matMul");let p=n.shape.length,u=s.shape.length,l=a?n.shape[p-2]:n.shape[p-1],c=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(l===c,()=>`Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,l,m]:[g,m,l],k=i?[x,d,c]:[x,c,d],T=We({inputs:{x:n},backend:t,attrs:{shape:S}}),E=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?T.shape[1]:T.shape[2],D=a?T.shape[2]:T.shape[1],F=i?E.shape[1]:E.shape[2],O=Math.max(g,x),M=t.data.get(T.dataId).values,L=t.data.get(E.dataId).values,B=y.computeStrides(T.shape),z=y.computeStrides(E.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*F,ee=ie([O,D,F],T.dtype),oe=ee.values,ue=t.blockSize;for(let me=0;meMath.acos(r)),AE={kernelName:hn,backendName:"cpu",kernelFunc:z7};var V7=Ie(gn,r=>Math.acosh(r)),FE={kernelName:gn,backendName:"cpu",kernelFunc:V7};function W7(r){let{inputs:e,backend:t}=r,o=e;Q(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=ie(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,w=S)}d[g]=w}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(l,"int32",d)}var LE={kernelName:na,backendName:"cpu",kernelFunc:H7};function K7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,"argMin");let a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=vt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],C.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[l,c]=C.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(l),d=y.makeZerosTypedArray(m,"int32"),f=y.sizeFromShape(c),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(l,"int32",d)}var BE={kernelName:sa,backendName:"cpu",kernelFunc:K7};var q7=Ie(Cn,r=>Math.asin(r)),zE={kernelName:Cn,backendName:"cpu",kernelFunc:q7};var j7=Ie(wn,r=>Math.asinh(r)),VE={kernelName:wn,backendName:"cpu",kernelFunc:j7};var X7=Ie(Sn,r=>Math.atan(r)),WE={kernelName:Sn,backendName:"cpu",kernelFunc:X7};var Y7=Ve((r,e)=>Math.atan2(r,e)),Q7=Qe(vn,Y7),UE={kernelName:vn,backendName:"cpu",kernelFunc:Q7};var Z7=Ie(In,r=>Math.atanh(r)),GE={kernelName:In,backendName:"cpu",kernelFunc:Z7};function El(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,l=n.effectiveFilterHeight,c=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=ie(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],w=n.outShape[3];for(let S=0;Sj?j=ue:s==="avg"&&(q+=ue,Y++)}if(isNaN(j))break}let J=M+L*w+E;g[J]=s==="avg"?q/Y:j}}}return h}function Yf(r,e,t,o,n=!1,s=!1){let a=ie(o.outShape,"int32"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,l=o.dilationWidth,c=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=ie(e,t,r);for(let g=0;gF&&(F=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,T,x)}}return a}function Qf(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,l=n.dilationHeight,c=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,w=ie(n.outShape,t),S=w.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],T=n.outShape[2]*n.outShape[3]*n.outShape[4],E=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=xt:s==="avg"&&(ve+=xt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s==="avg"?ve/Math.max(Fe,1):_e}}}}return w}function HE(r,e){let t=ie(e.outShape,"int32"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=re,B=U*l*c+q*l+J)}}}t.set(B,h,x,k,D,g)}}}return t}function J7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p),c;if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))c=fr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=El(m,n.shape,n.dtype,d,l,"avg");c=t.makeTensorInfo(l.outShape,n.dtype,f.values)}return c}var KE={kernelName:kn,backendName:"cpu",kernelFunc:J7};function eQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"avgPool3d");let l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.data.get(n.dataId).values,m=Qf(c,n.shape,n.dtype,y.computeStrides(n.shape),l,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var qE={kernelName:aa,backendName:"cpu",kernelFunc:eQ};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"avgPool3DGrad");let l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=l.strideDepth,m=l.strideHeight,d=l.strideWidth,f=l.filterDepth,h=l.filterHeight,g=l.filterWidth,x=l.dilationDepth,b=l.dilationHeight,w=l.dilationWidth,S=l.effectiveFilterDepth,k=l.effectiveFilterHeight,T=l.effectiveFilterWidth,E=S-1-l.padInfo.front,R=T-1-l.padInfo.left,D=k-1-l.padInfo.top,F=ie(s.shape,"float32"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=l.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=l.outHeight||Math.floor(ue)!==ue))for(let me=0;me=l.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ue,be,B);re+=_e}}}F.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(F.shape,F.dtype,F.values)}var jE={kernelName:Vi,backendName:"cpu",kernelFunc:tQ};function rQ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=l.strideHeight,m=l.strideWidth,d=l.filterHeight,f=l.filterWidth,h=l.dilationHeight,g=l.dilationWidth,x=l.effectiveFilterHeight,b=l.effectiveFilterWidth,w=b-1-l.padInfo.left,S=x-1-l.padInfo.top,k=ie(a.shape,"float32"),T=1/(d*f),E=t.data.get(n.dataId).values,R=ie(n.shape,"float32",E);for(let D=0;D=l.outHeight||Math.floor(j)!==j))for(let q=0;q=l.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,F);z+=J}}k.set(z*T,D,O,M,F)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var XE={kernelName:zi,backendName:"cpu",kernelFunc:rQ};function oQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(s==null||i.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Q([n,i,p,s,a],"batchNorm");let{varianceEpsilon:u}=o;u==null&&(u=.001);let l=t.data.get(n.dataId).values,c=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(l.length),g=f.length,x=d.length,b=m.length,w=c.length,S=0,k=0,T=0,E=0;for(let R=0;R=g&&(S=0),k>=w&&(k=0),T>=x&&(T=0),E>=b&&(E=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var YE={kernelName:Hn,backendName:"cpu",kernelFunc:oQ};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],"batchToSpaceND");let i=s.reduce((x,b)=>x*b),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=vt({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:l}}),g=nn({inputs:{x:h},backend:t,attrs:{begin:c,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var QE={kernelName:ia,backendName:"cpu",kernelFunc:nQ};function sQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Nl(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var ZE={kernelName:Tn,backendName:"cpu",kernelFunc:sQ};function aQ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var JE={kernelName:ua,backendName:"cpu",kernelFunc:aQ};var iQ=Ie(Go,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return fr({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(S=>tn({inputs:{input:S},backend:t})),g=p.map(S=>Ua({inputs:{input:S},backend:t})),x=Su({inputs:h,backend:t,attrs:{axis:s}}),b=Su({inputs:g,backend:t,attrs:{axis:s}}),w=qt({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),w}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),l=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=C.computeOutShape(u.map(h=>h.shape),1);let c=u[0].shape[0]===1,m=mp(l,i,e[0].dtype,c),d=C.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var o$={kernelName:pa,backendName:"cpu",kernelFunc:Su};function AI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o;Q([n,s],"conv2d");let c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,w=m.dataFormat==="channelsLast",S=new Ge(m.outShape,n.dtype),k=y.computeStrides(n.shape),T=y.computeStrides(s.shape),E=k[0],R=w?k[1]:k[2],D=w?k[2]:1,F=w?1:k[1],O=S.strides[0],M=w?S.strides[1]:S.strides[2],L=w?S.strides[2]:1,B=w?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let me=oe*T[0],be=Y+ue*R;for(let _e=0;_e=m.inWidth)continue;let ct=me+Pe*T[1],Ke=be+at*D,mt=ct;for(let ut=0;ut=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ue=q+ee*D[1],me=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let at=ue+Fe*D[2],ct=me+Pe*u.inChannels,Ke=at;for(let mt=0;mtMath.cos(r)),l$={kernelName:An,backendName:"cpu",kernelFunc:fQ};var hQ=Ie(Fn,r=>Math.cosh(r)),c$={kernelName:Fn,backendName:"cpu",kernelFunc:hQ};function gQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[l,c,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=ie([f,h,g,d],"float32"),b=t.data.get(s.dataId).values,w=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),T=y.computeStrides(x.shape);for(let E=0;E=l)continue;let B=h>1?(O-D)*(c-1)/(h-1):0,z=g>1?(M-F)*(m-1)/(g-1):0;for(let U=0;U1?D*(c-1)+U*B:.5*(D+O)*(c-1);if(j<0||j>c-1){for(let q=0;q1?F*(m-1)+re*z:.5*(F+M)*(m-1);if(ne<0||ne>m-1){for(let me=0;me1?F*(m-1)+q*z:.5*(F+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],l=n.shape[3],c=p*s,m=u*s,d=l/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*c*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=C.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,w=b.left,S=b.top,k=d.outChannels/d.inChannels,T=new Ge(d.outShape,n.dtype),E=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=T.values;for(let F=0;F=d.inHeight)continue;let q=U*c[0],Y=O+j*l[1];for(let J=0;J=d.inWidth)continue;let ue=q+ee*c[1],me=Y+oe*d.inChannels,be=re,_e=ue;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,l=o.shape.length,c=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:w,strideHeight:S,strideWidth:k,filterHeight:T,filterWidth:E,dilationHeight:R,dilationWidth:D,outShape:F}=C.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),O=y.sizeFromShape(F),M=F.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&mere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(F));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),F,o.dtype),shape:F,dtype:o.dtype}}};var S$={kernelName:qi,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,l=y.toNestedArray(o.shape,u.data.get(o.dataId).values),c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:S,filterHeight:k,filterWidth:T,dilationHeight:E,dilationWidth:R,outShape:D}=C.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${qi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let F=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ueY&&(Y=me,J=ne,re=oe)}}}O[J][re][q]+=F[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var I$={kernelName:Ki,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,l=y.toNestedArray(o.shape,u.data.get(o.dataId).values),c=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:w,strideWidth:S,filterHeight:k,filterWidth:T,dilationHeight:E,dilationWidth:R,outShape:D}=C.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Ki}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let F=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ueY&&(Y=me,J=ee,re=ue)}}}O[L][J][re][q]+=F[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function vQ(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,l=(i==null?void 0:i.contextType)||"2d";if(l!=="2d")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let c=s.getContext(l,(i==null?void 0:i.contextAttributes)||{});if(c==null)throw new Error(`Could not get the context with ${l} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype==="float32"?255:1,x=new Uint8ClampedArray(d*m*4);for(let w=0;w1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${E}.`)}else if(n.dtype==="int32"&&(E<0||E>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${E}.`);f===1?(S[0]=E*g,S[1]=E*g,S[2]=E*g):S[T]=E*g}let k=w*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return c.putImageData(b,0,0),n}var v$={kernelName:Mu,backendName:"cpu",kernelFunc:vQ};function Ii(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=rn({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=fr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),l=C.getAxesPermutation(u,p),c=u,m=i;l!=null&&(m=vt({inputs:{x:i},backend:t,attrs:{perm:l}}),c=C.getInnerMostAxes(c.length,p)),C.assertAxesAreInnerMostDims("sum",c,m.shape.length);let[d,f]=C.computeOutAndReduceShapes(m.shape,c),h=C.upcastType(m.dtype,"int32"),g=vl(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,w=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=Ii({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var N$={kernelName:ji,backendName:"cpu",kernelFunc:kQ};function NQ(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([o,n],"eluGrad");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var T$={kernelName:ri,backendName:"cpu",kernelFunc:NQ};var TQ=C.ERF_P,_Q=C.ERF_A1,EQ=C.ERF_A2,$Q=C.ERF_A3,RQ=C.ERF_A4,DQ=C.ERF_A5,AQ=Ie(Un,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+TQ*t);return e*(1-((((DQ*o+RQ)*o+$Q)*o+EQ)*o+_Q)*o*Math.exp(-t*t))}),_$={kernelName:Un,backendName:"cpu",kernelFunc:AQ};function $l(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var E$={kernelName:ma,backendName:"cpu",kernelFunc:$l};var FQ=Ve((r,e)=>r/e),Yc=Qe(Vn,FQ),Qc={kernelName:Vn,backendName:"cpu",kernelFunc:Yc};function Zf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],l=y.sizeFromShape(u),c=y.getTypedArrayFromDType("float32",l),m=y.getTypedArrayFromDType("float32",l);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,l=n.data.get(o.dataId).values;for(let m=0;m=0&&w=0,()=>`GatherV2: the index value ${k} is not in [0, ${l-1}]`)}let c=i;i==null&&(c=0);let m=y.sizeFromShape(s.shape),d=C.segment_util.collectGatherOpShapeInfo(n,s,p,c),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),w=Lf(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,w.dtype,w.values)}var O$={kernelName:fa,backendName:"cpu",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Zf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var M$={kernelName:Yi,backendName:"cpu",kernelFunc:GQ};var HQ=Ie(qn,r=>Number.isFinite(r)?1:0,"bool"),L$={kernelName:qn,backendName:"cpu",kernelFunc:HQ};var KQ=Ie(jn,r=>Math.abs(r)===1/0?1:0,"bool"),B$={kernelName:jn,backendName:"cpu",kernelFunc:KQ};var qQ=Ie(Xn,r=>Number.isNaN(r)?1:0,"bool"),z$={kernelName:Xn,backendName:"cpu",kernelFunc:qQ};function jQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Bf(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var V$={kernelName:Qn,backendName:"cpu",kernelFunc:jQ};var XQ=Ie(Zn,r=>Math.log1p(r)),W$={kernelName:Zn,backendName:"cpu",kernelFunc:XQ};var YQ=Ve((r,e)=>r&&e),QQ=Qe(Jn,YQ,null,"bool"),U$={kernelName:Jn,backendName:"cpu",kernelFunc:QQ};var ZQ=Ie(es,r=>r?0:1,"bool"),G$={kernelName:es,backendName:"cpu",kernelFunc:ZQ};var JQ=Ve((r,e)=>r||e),eZ=Qe(ts,JQ,null,"bool"),H$={kernelName:ts,backendName:"cpu",kernelFunc:eZ};function tZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,"LRN");let u=n.shape[3],l=u-1,c=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,l),w=0;for(;x<=b;x++){let S=c[x];w+=S*S}return w}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p),c;if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))c=fr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=El(m,n.shape,n.dtype,d,l,"max");c=t.makeTensorInfo(l.outShape,n.dtype,f.values)}return c}var X$={kernelName:ns,backendName:"cpu",kernelFunc:oZ};function nZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"maxPool3d");let l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.data.get(n.dataId).values,m=Qf(c,n.shape,n.dtype,y.computeStrides(n.shape),l,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var Y$={kernelName:ha,backendName:"cpu",kernelFunc:nZ};function sZ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"maxPool3DGrad");let l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=t.bufferSync(s),m=HE(c,l),d=l.strideDepth,f=l.strideHeight,h=l.strideWidth,g=l.dilationDepth,x=l.dilationHeight,b=l.dilationWidth,w=l.effectiveFilterDepth,S=l.effectiveFilterHeight,k=l.effectiveFilterWidth,T=w-1-l.padInfo.front,E=k-1-l.padInfo.left,R=S-1-l.padInfo.top,D=ie(s.shape,"float32"),F=t.bufferSync(n);for(let O=0;O=l.outDepth||Math.floor(re)!==re))for(let ne=0;ne=l.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=l.outWidth||Math.floor(ue)!==ue)continue;let me=w*S*k-1-m.get(O,re,ee,ue,M),be=J*S*k+ne*k+oe,_e=me===be?1:0;if(_e===0)continue;let ve=F.get(O,re,ee,ue,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var Q$={kernelName:Ji,backendName:"cpu",kernelFunc:sZ};function aZ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=t.data.get(i.dataId).values,f=ie(m.outShape,i.dtype,Yf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,w=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,T=w-1-m.padInfo.top,E=ie(i.shape,"float32"),R=t.data.get(n.dataId).values,D=ie(n.shape,"float32",R);for(let F=0;F=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=w*S-1-f.get(F,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(F,q,J,O);U+=oe*ee}}E.set(U,F,M,L,O)}return t.makeTensorInfo(E.shape,E.dtype,E.values)}var Z$={kernelName:Zi,backendName:"cpu",kernelFunc:aZ};function J$(r,e,t,o,n){let s=y.computeStrides(e),a=El(r,e,t,s,n,"max"),i=Yf(r,e,t,n,!0,o);return[a.values,i.values]}var eR={kernelName:ga,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,l=C.computePool2DInfo(o.shape,n,s,[1,1],a),[c,m]=J$(u,o.shape,o.dtype,i,l),d=p.write(c,l.outShape,o.dtype),f=p.write(m,l.outShape,o.dtype);return[{dataId:d,shape:l.outShape,dtype:o.dtype},{dataId:f,shape:l.outShape,dtype:"int32"}]}};function iZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=C.computeOutAndReduceShapes(n.shape,i)[1],l=y.sizeFromShape(u),c=[],m=t.makeTensorInfo([],"float32",new Float32Array([l]));c.push(m);let d=rn({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});c.push(d);let f=Yc({inputs:{a:d,b:m},backend:t});c.push(f);let h=Ii({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return c.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var tR={kernelName:ss,backendName:"cpu",kernelFunc:iZ};function uZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"min");let i=y.parseAxisParam(s,n.shape),p=i,u=C.getAxesPermutation(p,n.shape.length),l=n;u!=null&&(l=vt({inputs:{x:n},backend:t,attrs:{perm:u}}),p=C.getInnerMostAxes(p.length,n.shape.length)),C.assertAxesAreInnerMostDims("min",p,l.shape.length);let[c,m]=C.computeOutAndReduceShapes(l.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(c),l.dtype),h=t.data.get(l.dataId).values;for(let x=0;xw[0]+n.shape[S]+w[1]),p=s.map(w=>w[0]),u=s.map((w,S)=>w[0]+n.shape[S]),l=a==="reflect"?0:1,c=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let w=0;w=u[T]&&(S[T]=(u[T]-1)*2-S[T]+l);S=S.map((T,E)=>T-p[E]);let k=y.locToIndex(S,m,d);x[w]=c[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var oR={kernelName:is,backendName:"cpu",kernelFunc:pZ};var lZ=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),cZ=Qe(us,lZ),nR={kernelName:us,backendName:"cpu",kernelFunc:cZ};var aR=Kp(iS());function MI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=OI({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),l=C.expandShapeToKeepDim(u.shape,p),c=We({inputs:{x:u},backend:t,attrs:{shape:l}}),m=jc({inputs:{a:n,b:c},backend:t}),d=aI({inputs:{x:m},backend:t}),f=Ii({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:l}}),g=Yc({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var sR={kernelName:Fs,backendName:"cpu",kernelFunc:MI};function mZ(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:MI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],l=p.shape[1],c=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),"int32");for(let f=0;f=0&&c[m]{y.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(l=>{let c=$l({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=Su({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeIntermediateTensorInfo(l)),u}var hR={kernelName:ya,backendName:"cpu",kernelFunc:LI};function CZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(n,"pad");let i=s.map((b,w)=>b[0]+n.shape[w]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,l=y.sizeFromShape(n.shape),c=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;bT+p[E]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Jf={kernelName:fs,backendName:"cpu",kernelFunc:CZ};var wZ=Ve((r,e)=>Math.pow(r,e)),SZ=Qe(hs,wZ),gR={kernelName:hs,backendName:"cpu",kernelFunc:SZ};function IZ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),l=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values,[m,d,f]=Vf(p,u,l,s.shape,s.dtype,c,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var xR={kernelName:Qp,backendName:"cpu",kernelFunc:IZ};function vZ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=Wf(a,o.shape,o.dtype,i,n.shape,p,s.shape),c=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([l.length],o.dtype,l);return[c,m]}var yR={kernelName:Zp,backendName:"cpu",kernelFunc:vZ};function kZ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,l=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Uf(u,n.shape,l,s.shape,s.dtype,c,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var bR={kernelName:Jp,backendName:"cpu",kernelFunc:kZ};function NZ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=fp(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var CR={kernelName:ba,backendName:"cpu",kernelFunc:NZ};var TZ=Ie(xs,r=>1/r),wR={kernelName:xs,backendName:"cpu",kernelFunc:TZ};function _Z(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(n,"resizeBilinear");let p=y.computeStrides(n.shape),[u,l]=i,[c,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([c,u,l,f])),x=[s&&u>1?m-1:m,s&&l>1?d-1:d],b=[s&&u>1?u-1:u,s&&l>1?l-1:l],w=0,S=x[0]/b[0],k=x[1]/b[1];for(let T=0;T1?u-1:u,a&&d>1?l-1:l],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],w=t.data.get(s.dataId).values,S=0;for(let k=0;k1?m-1:m,s&&l>1?d-1:d],b=[s&&u>1?u-1:u,s&&l>1?l-1:l],w=x[0]/b[0],S=x[1]/b[1],k=0;for(let T=0;T1?l-1:l,a&&f>1?c-1:c],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],w=x[0]/b[0],S=x[1]/b[1],k=1/w,T=1/S,E=Math.ceil(k)*2+2,R=Math.ceil(T)*2+2;for(let D=0;D=d)continue;let ee=F+ne*p[1],oe=ne*w,ue=Math.min(l-1,a?Math.round(oe):Math.floor(oe));if(O===ue)for(let me=0;me=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(c-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var kR={kernelName:ai,backendName:"cpu",kernelFunc:RZ};function DZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return fr({inputs:{x:n},backend:t});let p=new Ge(n.shape,n.dtype),u=t.bufferSync(n);for(let l=0;lm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...c)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var NR={kernelName:Ss,backendName:"cpu",kernelFunc:DZ};var TR={kernelName:Vs,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,l,c,m]=o.shape,[d,f]=C.getImageCenter(a,l,c),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),_R={kernelName:Is,backendName:"cpu",kernelFunc:AZ};function FZ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=Xs(d,f,a,c,u,p,i,l,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var ER={kernelName:vs,backendName:"cpu",kernelFunc:FZ};function PZ(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?zZ*r:BZ*(Math.exp(r)-1)),AR={kernelName:Ts,backendName:"cpu",kernelFunc:VZ};var WZ=Ie(Rs,r=>r<0?-1:r>0?1:0),FR={kernelName:Rs,backendName:"cpu",kernelFunc:WZ};var UZ=Ie(Es,r=>Math.sin(r)),PR={kernelName:Es,backendName:"cpu",kernelFunc:UZ};var GZ=Ie($s,r=>Math.sinh(r)),OR={kernelName:$s,backendName:"cpu",kernelFunc:GZ};var HZ=11920928955078125e-23,MR=Math.log(HZ)+2,KZ=Ie(Ds,r=>{let e=r>-MR,t=r0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return{dataId:n,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,o,n,s){this.data.set(e,{values:t,dtype:n,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:o}=this.data.get(e);if(t==="complex64"){let n=this.readSync(o.real.dataId),s=this.readSync(o.imag.dataId);return w.mergeRealAndImagArrays(n,s)}return y.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(e.shape,e.dtype,t)}makeOutput(e,t,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(t,o,e),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:o}=this.data.get(e);o!=null&&(this.disposeData(o.real.dataId,!0),this.disposeData(o.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=y.now();return e(),{kernelMs:y.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){Q([e],"where");let t=this.readSync(e.dataId);return V8(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};xc.nextDataId=0;var Ic={};qe(Ic,{addImpl:()=>VS,bincountImpl:()=>Cc,bincountReduceImpl:()=>Nf,bitwiseAndImpl:()=>WS,castImpl:()=>zS,ceilImpl:()=>US,concatImpl:()=>ap,equalImpl:()=>GS,expImpl:()=>KS,expm1Impl:()=>jS,floorDivImpl:()=>YS,floorImpl:()=>XS,gatherNdImpl:()=>Tf,gatherV2Impl:()=>_f,greaterEqualImpl:()=>ZS,greaterImpl:()=>QS,lessEqualImpl:()=>eI,lessImpl:()=>JS,linSpaceImpl:()=>Ef,logImpl:()=>tI,maxImpl:()=>$f,maximumImpl:()=>rI,minimumImpl:()=>oI,multiplyImpl:()=>zl,negImpl:()=>nI,notEqualImpl:()=>sI,prodImpl:()=>aI,raggedGatherImpl:()=>Rf,raggedRangeImpl:()=>Df,raggedTensorToTensorImpl:()=>Af,rangeImpl:()=>up,rsqrtImpl:()=>uI,scatterImpl:()=>zs,sigmoidImpl:()=>R_,simpleAbsImpl:()=>BS,sliceImpl:()=>pp,sparseFillEmptyRowsImpl:()=>Ff,sparseReshapeImpl:()=>Pf,sparseSegmentReductionImpl:()=>Sc,sqrtImpl:()=>F_,squaredDifferenceImpl:()=>cI,staticRegexReplaceImpl:()=>lI,stridedSliceImpl:()=>Of,stringNGramsImpl:()=>cp,stringSplitImpl:()=>lp,stringToHashBucketFastImpl:()=>mp,subImpl:()=>dI,tileImpl:()=>Mf,topKImpl:()=>Lf,transposeImpl:()=>wc,uniqueImpl:()=>dp});function BS(r){let e=new Float32Array(r.length);for(let t=0;t{let{x:e}=r.inputs,t=r.backend;Q(e,"abs");let o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId).values;return o=BS(n),t.makeOutput(o,e.shape,e.dtype)},t_={kernelName:Xs,backendName:"cpu",kernelFunc:W8};function Ve(r){return(e,t,o,n,s)=>{let a=w.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),c=y.getTypedArrayFromDType(s,u),l=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=w.getBroadcastDims(e,a),g=w.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xC[$]=0);let S=y.locToIndex(C,l,d),k=b.slice(-m);g.forEach($=>k[$]=0);let _=y.locToIndex(k,m,f);c[x]=r(o[S],n[_])}return[c,a]}}function Ht(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}var r_={kernelName:Di,backendName:"cpu",kernelFunc:Ht};function yc(r,e,t="float32"){if(t==="complex64"){let n=yc(r,e,"float32"),s=yc(r,e,"float32");return Ht({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function lr(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var o_={kernelName:Co,backendName:"cpu",kernelFunc:lr};function $o(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}var n_={kernelName:Hi,backendName:"cpu",kernelFunc:$o};function zS(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],t),[s,a]=Ve((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function Ro(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return lr({inputs:{x:n},backend:t});let c=yc(t,n.shape,n.dtype),l=Ro({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=Ht({inputs:{real:l,imag:c},backend:t});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),m}if(n.dtype==="complex64"){let c=$o({inputs:{input:n},backend:t}),l=Ro({inputs:{x:c},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(c),l}if(!y.hasEncodingLoss(n.dtype,s)){let c=lr({inputs:{x:n},backend:t});return{dataId:c.dataId,shape:c.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=zS(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}var s_={kernelName:yo,backendName:"cpu",kernelFunc:Ro};function Ye(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Q([a,i],r);let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=a.dtype==="string"?w.fromUint8ToStringArray(u):u,m=a.dtype==="string"?w.fromUint8ToStringArray(c):c,d=o||a.dtype,[f,h]=e(a.shape,i.shape,l,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=Ro({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),c=p.data.get(u.dataId),l=c.complexTensorInfos.real,m=c.complexTensorInfos.imag,d=p.data.get(l.dataId).values,f=p.data.get(m.dataId).values,h=Ro({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,C=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,_,$]=t(a.shape,i.shape,d,f,C,S),R=p.makeTensorInfo($,"float32",k),D=p.makeTensorInfo($,"float32",_),P=Ht({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),P}else{let u=p.data.get(a.dataId).values,c=p.data.get(i.dataId).values,l=o||a.dtype,[m,d]=e(a.shape,i.shape,u,c,l);return p.makeTensorInfo(d,l,m)}}}function bc(r){return(e,t,o,n,s,a)=>{let i=w.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,c=y.computeStrides(i),l=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=w.getBroadcastDims(e,i),f=w.getBroadcastDims(t,i),h=w.mergeRealAndImagArrays(o,n),g=w.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),C=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;k$[M]=0);let R=y.locToIndex($,x,b),D=_.slice(-C);f.forEach(M=>D[M]=0);let P=y.locToIndex(D,C,S),O=r(h[R*2],h[R*2+1],g[P*2],g[P*2+1]);l[k]=O.real,m[k]=O.imag}return[l,m,i]}}var VS=Ve((r,e)=>r+e),U8=bc((r,e,t,o)=>({real:r+t,imag:e+o})),Pa=Ye(uo,VS,U8),a_={kernelName:uo,backendName:"cpu",kernelFunc:Pa};function Cc(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function Nf(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=me([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var WS=Ve((r,e)=>r&e),G8=Ye(qa,WS),i_={kernelName:qa,backendName:"cpu",kernelFunc:G8};function jt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Q(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype==="string"){if(!Array.isArray(p))throw new Error("String tensor's value was not an instance of Array");u=w.fromUint8ToStringArray(p)}else u=p;let c=t||a.dtype,l=e(u,c,n);return i.makeTensorInfo(a.shape,c,l)}}var US=jt(r=>Math.ceil(r)),H8=Ar(en,US),u_={kernelName:en,backendName:"cpu",kernelFunc:H8};function ap(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?w.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),HS=Ye(xn,GS,null,"bool"),p_={kernelName:xn,backendName:"cpu",kernelFunc:HS};var KS=jt(r=>Math.exp(r)),qS=Ar(yn,KS,"float32"),c_={kernelName:yn,backendName:"cpu",kernelFunc:qS};var jS=jt(r=>Math.expm1(r)),K8=Ar(bn,jS),l_={kernelName:bn,backendName:"cpu",kernelFunc:K8};var XS=jt(r=>Math.floor(r)),q8=Ar(wn,XS),m_={kernelName:wn,backendName:"cpu",kernelFunc:q8};var YS=Ve((r,e)=>Math.floor(r/e)),j8=Ye(Sn,YS,null,"int32"),d_={kernelName:Sn,backendName:"cpu",kernelFunc:j8};function Tf(r,e,t,o,n,s,a,i,p){let u=me([o,s],t);for(let c=0;c=p/s)throw new Error(`Invalid indices: ${l} does not index into ${i}`);for(let d=0;dr>e?1:0),X8=Ye(kn,QS,null,"bool"),f_={kernelName:kn,backendName:"cpu",kernelFunc:X8};var ZS=Ve((r,e)=>r>=e?1:0),Y8=Ye(Nn,ZS,null,"bool"),h_={kernelName:Nn,backendName:"cpu",kernelFunc:Y8};var JS=Ve((r,e)=>rr<=e?1:0),Z8=Ye(Dn,eI,null,"bool"),x_={kernelName:Dn,backendName:"cpu",kernelFunc:Z8};function Ef(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),J8=Ar(Fn,tI),y_={kernelName:Fn,backendName:"cpu",kernelFunc:J8};function $f(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var rI=Ve((r,e)=>Math.max(r,e)),eY=Ye(Vn,rI),b_={kernelName:Vn,backendName:"cpu",kernelFunc:eY};var oI=Ve((r,e)=>Math.min(r,e)),tY=Ye(Hn,oI),C_={kernelName:Hn,backendName:"cpu",kernelFunc:tY};var zl=Ve((r,e)=>r*e),rY=bc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),ip=Ye(Xn,zl,rY),w_={kernelName:Xn,backendName:"cpu",kernelFunc:ip};function nI(r,e,t){let o=y.createScalarValue(-1,t);return zl([],e,o,r,t)}function oY(r){let{inputs:e,backend:t}=r,{x:o}=e;Q(o,"neg");let n=t.data.get(o.dataId).values,[s,a]=nI(n,o.shape,o.dtype);return t.makeTensorInfo(a,o.dtype,s)}var S_={kernelName:pa,backendName:"cpu",kernelFunc:oY};var sI=Ve((r,e)=>r!==e?1:0),nY=Ye(Yn,sI,null,"bool"),I_={kernelName:Yn,backendName:"cpu",kernelFunc:nY};function wc(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let c=0;ct.disposeIntermediateTensorInfo(b)),t.makeTensorInfo(x,g,f)}var k_={kernelName:os,backendName:"cpu",kernelFunc:sY};function aY(r,e,t){r.forEach((o,n)=>{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function iY(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function uY(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);iY(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[c];for(let x=c;xn[a]=s)}return e}function N_(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error("starts must be a scalar or vector");if(n.length>1)throw new Error("limits must be a scalar or vector");if(a.length>1)throw new Error("deltas must be a scalar or vector");let i=e.length===0,p=n.length===0,u=a.length===0,c=[];i||c.push(e[0]),p||c.push(n[0]),u||c.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/C)),S>T_)throw new Error(`Requires ((limit - start) / delta) <= ${T_}`);m[g+1]=m[g]+S}let d=m[l],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let c=1;c=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);u=t[l]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case Do.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case Do.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${Do[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case Do.FIRST_DIM_SIZE:return e[0];case Do.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Do.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Do[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=E_(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,c=this.defaultValue;if(c.length!==p&&c.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(c,f);c=su(h,i).dataSync()})}let l=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);__(g,c,p),++d}h<0?(l=f+1,m=d):(l=f,m=d,d=m+1)}}};function __(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function Af(r,e,t,o,n,s,a,i,p,u){return new iI(r,e,t,o,n,s,a,i,p,u).compute()}function up(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),mY=Ar(ls,uI),$_={kernelName:ls,backendName:"cpu",kernelFunc:mY};function zs(r,e,t,o,n,s,a,i,p,u){let c=[o/n,n],l=r.values,m=e.values;if(o===0)return me(t,e.dtype);let d=p instanceof tt?p:me(c,e.dtype);typeof p=="string"||typeof p=="number"?d.values.fill(p):typeof p=="boolean"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),pI=Ie(bs,r=>1/(1+Math.exp(-r))),D_={kernelName:bs,backendName:"cpu",kernelFunc:pI};function pp(r,e,t,o,n){let s=pt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let l=pt.computeFlatOffset(e,i);return n==="string"?r.slice(l,l+a):r.subarray(l,l+a)}let p=n==="string"?w.fromUint8ToStringArray(r):r,u=me(o,n,p),c=me(t,n);for(let l=0;lf+e[h]);c.set(u.get(...d),...m)}return n==="string"?w.fromStringArrayToUint8(c.values):c.values}function Ao(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o;Q(n,"slice");let[i,p]=pt.parseSliceParams(n,s,a);pt.assertParamsValid(n,i,p);let u=t.data.get(n.dataId).values,c=pp(u,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,c)}var A_={kernelName:ha,backendName:"cpu",kernelFunc:Ao};function Ff(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),c=new Array(i),l=e[1];if(p===0){if(i!==0)throw new Error(w.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,l],x,u,c]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(w.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(l<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=l;let d=m.reduce((C,S)=>C*S,1),f=y.getArrayFromDType(t,d);if(i===0)return l>0&&f.fill(a),[f,m];if(l<=0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let C=0;if(g=C)throw new Error(w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=l)throw new Error(w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,l));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let _=0;_i)break}return xMath.sqrt(r)),dY=Ie(ws,r=>Math.sqrt(r)),P_={kernelName:ws,backendName:"cpu",kernelFunc:dY};var cI=Ve((r,e)=>{let t=r-e;return t*t}),fY=Ye(ks,cI),O_={kernelName:ks,backendName:"cpu",kernelFunc:fY};var lI=jt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?"g":""),n)}),hY=Ar(Ru,lI),M_={kernelName:Ru,backendName:"cpu",kernelFunc:hY};function Of(r,e,t,o){let n=me(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(C=>h[g++]=C);for(let b=0;b0){x(e[m+l-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(c=c&&t[u]<=o,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[p]=a[p-1]+c}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,l);this.createNGrams(e,u,i,c,d,l),c+=d}),this.preserveShort&&c===a[p]){let l=t[p+1]-t[p];if(l===0)continue;let m=l+2*this.padWidth;this.createNGrams(e,u,i,c,1,m)}}return[i,a]}};function cp(r,e,t,o,n,s,a,i){return new mI(t,o,n,s,a,i).compute(r,e)}function gY(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),xY=bc((r,e,t,o)=>({real:r-t,imag:e-o})),Vl=Ye(Ts,dI,xY),L_={kernelName:Ts,backendName:"cpu",kernelFunc:Vl};function Mf(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function B_(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),c=.5*Math.exp(2*u/3),l=.5*Math.sqrt(u*c*(i-c)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*c/i+l)),d=Math.min(o,Math.floor(e+(i-p)*c/i+l));B_(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Wl(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Wl(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function Lf(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let l=0;lf[C]={value:b,index:C}),o{for(let g=0;gnew xc,1);var fI=Ie(hn,r=>r>=0?r:Math.exp(r)-1),z_={kernelName:hn,backendName:"cpu",kernelFunc:fI};function hI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o;Q([n],"leakyRelu");let a=y.sizeFromShape(n.shape),i=t.data.get(n.dataId).values,p=y.getTypedArrayFromDType("float32",a);for(let u=0;ur<0?e*r:r);function gI(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e;Q([o,n],"prelu");let s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,[i,p]=bY(o.shape,n.shape,s,a,"float32");return t.makeTensorInfo(p,"float32",i)}var W_={kernelName:rs,backendName:"cpu",kernelFunc:gI};var xI=Ie(ss,r=>Math.max(0,r)),U_={kernelName:ss,backendName:"cpu",kernelFunc:xI};var yI=Ie(us,r=>Math.min(Math.max(0,r),6)),G_={kernelName:us,backendName:"cpu",kernelFunc:yI};function fp(r,e,t,o,n){if(t==="linear")return lr({inputs:{x:e},backend:r});if(t==="relu")return xI({inputs:{x:e},backend:r});if(t==="elu")return fI({inputs:{x:e},backend:r});if(t==="relu6")return yI({inputs:{x:e},backend:r});if(t==="prelu")return gI({inputs:{x:e,alpha:o},backend:r});if(t==="leakyrelu")return hI({inputs:{x:e},backend:r,attrs:{alpha:n}});if(t==="sigmoid")return pI({inputs:{x:e},backend:r});throw new Error(`Activation ${t} has not been implemented for the CPU backend.`)}function We(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=y.sizeFromShape(n.shape),i=y.inferFromImplicitShape(s,a),p=y.sizeFromShape(i);y.assert(a===p,()=>`The new shape (${i}) has ${p} elements and the old shape (${n.shape}) has ${a} elements. The new shape and old shape must have the same number of elements.`),t.incRef(n.dataId);let u=t.data.get(n.dataId);if(u.complexTensorInfos!=null){let c=u.complexTensorInfos.real,l=u.complexTensorInfos.imag;c.shape=i,l.shape=i}return{dataId:n.dataId,shape:i,dtype:n.dtype}}var H_={kernelName:da,backendName:"cpu",kernelFunc:We};function bI(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;Q([n,s],"matMul");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=We({inputs:{x:n},backend:t,attrs:{shape:S}}),$=We({inputs:{x:s},backend:t,attrs:{shape:k}}),R=a?_.shape[1]:_.shape[2],D=a?_.shape[2]:_.shape[1],P=i?$.shape[1]:$.shape[2],O=Math.max(g,x),M=t.data.get(_.dataId).values,L=t.data.get($.dataId).values,B=y.computeStrides(_.shape),z=y.computeStrides($.shape),[U,j,q]=a?[B[0],1,B[1]]:[B[0],B[1],1],[Y,J,re]=i?[1,z[1],z[0]]:[z[1],1,z[0]],ne=D*P,ee=me([O,D,P],_.dtype),oe=ee.values,ie=t.blockSize;for(let le=0;leMath.acos(r)),j_={kernelName:Vo,backendName:"cpu",kernelFunc:wY};var SY=Ie(Wo,r=>Math.acosh(r)),X_={kernelName:Wo,backendName:"cpu",kernelFunc:SY};function IY(r){let{inputs:e,backend:t}=r,o=e;Q(e,"addN");let n=o.map(i=>t.data.get(i.dataId).values),s=me(o[0].shape,o[0].dtype),a=s.values;for(let i=0;ib&&(b=k,C=S)}d[g]=C}return u.forEach(g=>t.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var J_={kernelName:Ys,backendName:"cpu",kernelFunc:NY};function TY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o;Q(n,"argMin");let a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=St({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),a=[a[0]],w.assertAxesAreInnerMostDims("argMin",a,p.shape.length);let[c,l]=w.computeOutAndReduceShapes(p.shape,a),m=y.sizeFromShape(c),d=y.makeZerosTypedArray(m,"int32"),f=y.sizeFromShape(l),h=t.data.get(p.dataId).values;for(let g=0;gt.disposeIntermediateTensorInfo(g)),t.makeTensorInfo(c,"int32",d)}var eE={kernelName:Qs,backendName:"cpu",kernelFunc:TY};var _Y=Ie(Ko,r=>Math.asin(r)),tE={kernelName:Ko,backendName:"cpu",kernelFunc:_Y};var EY=Ie(qo,r=>Math.asinh(r)),rE={kernelName:qo,backendName:"cpu",kernelFunc:EY};var $Y=Ie(jo,r=>Math.atan(r)),oE={kernelName:jo,backendName:"cpu",kernelFunc:$Y};var RY=Ve((r,e)=>Math.atan2(r,e)),DY=Ye(Yo,RY),nE={kernelName:Yo,backendName:"cpu",kernelFunc:DY};var AY=Ie(Xo,r=>Math.atanh(r)),sE={kernelName:Xo,backendName:"cpu",kernelFunc:AY};function vc(r,e,t,o,n,s){let a=n.strideHeight,i=n.strideWidth,p=n.dilationHeight,u=n.dilationWidth,c=n.effectiveFilterHeight,l=n.effectiveFilterWidth,m=n.padInfo.top,d=n.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,h=me(n.outShape,t),g=h.values,x=n.outShape[1]*n.outShape[2]*n.outShape[3],b=n.outShape[2]*n.outShape[3],C=n.outShape[3];for(let S=0;Sj?j=ie:s==="avg"&&(q+=ie,Y++)}if(isNaN(j))break}let J=M+L*C+$;g[J]=s==="avg"?q/Y:j}}}return h}function Bf(r,e,t,o,n=!1,s=!1){let a=me(o.outShape,"int32"),i=o.strideHeight,p=o.strideWidth,u=o.dilationHeight,c=o.dilationWidth,l=o.effectiveFilterHeight,m=o.effectiveFilterWidth,d=o.padInfo.top,f=o.padInfo.left,h=me(e,t,r);for(let g=0;gP&&(P=U,n?O=s?((g*o.inHeight+M)*o.inWidth+B)*o.inChannels+x:(M*o.inWidth+B)*o.inChannels+x:O=L*m+z)}}a.set(O,g,b,_,x)}}return a}function zf(r,e,t,o,n,s){let a=n.strideDepth,i=n.strideHeight,p=n.strideWidth,u=n.dilationDepth,c=n.dilationHeight,l=n.dilationWidth,m=n.effectiveFilterDepth,d=n.effectiveFilterHeight,f=n.effectiveFilterWidth,h=n.padInfo.front,g=n.padInfo.top,x=n.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,C=me(n.outShape,t),S=C.values,k=n.outShape[1]*n.outShape[2]*n.outShape[3]*n.outShape[4],_=n.outShape[2]*n.outShape[3]*n.outShape[4],$=n.outShape[3]*n.outShape[4],R=n.outShape[4];for(let D=0;D_e?_e=gt:s==="avg"&&(ve+=gt,Fe++),isNaN(_e))break}if(isNaN(_e))break}if(isNaN(_e))break}let Pe=be+M;S[Pe]=s==="avg"?ve/Math.max(Fe,1):_e}}}}return C}function aE(r,e){let t=me(e.outShape,"int32"),o=e.strideDepth,n=e.strideHeight,s=e.strideWidth,a=e.dilationDepth,i=e.dilationHeight,p=e.dilationWidth,u=e.effectiveFilterDepth,c=e.effectiveFilterHeight,l=e.effectiveFilterWidth,m=e.padInfo.front,d=e.padInfo.top,f=e.padInfo.left;for(let h=0;h=L&&(L=re,B=U*c*l+q*c+J)}}}t.set(B,h,x,k,D,g)}}}return t}function FY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Q(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"avg");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var iE={kernelName:Qo,backendName:"cpu",kernelFunc:FY};function PY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"avgPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"avg");return t.makeTensorInfo(m.shape,"float32",m.values)}var uE={kernelName:Zs,backendName:"cpu",kernelFunc:PY};function OY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"avgPool3DGrad");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=c.strideDepth,m=c.strideHeight,d=c.strideWidth,f=c.filterDepth,h=c.filterHeight,g=c.filterWidth,x=c.dilationDepth,b=c.dilationHeight,C=c.dilationWidth,S=c.effectiveFilterDepth,k=c.effectiveFilterHeight,_=c.effectiveFilterWidth,$=S-1-c.padInfo.front,R=_-1-c.padInfo.left,D=k-1-c.padInfo.top,P=me(s.shape,"float32"),O=1/(f*h*g),M=t.bufferSync(n);for(let L=0;L=c.outDepth||Math.floor(ee)!==ee))for(let oe=0;oe=c.outHeight||Math.floor(ie)!==ie))for(let le=0;le<_;le+=C){let be=(J+le)/d;if(be<0||be>=c.outWidth||Math.floor(be)!==be)continue;let _e=M.get(L,ee,ie,be,B);re+=_e}}}P.set(re*O,L,z,U,j,B)}return t.makeTensorInfo(P.shape,P.dtype,P.values)}var pE={kernelName:Ri,backendName:"cpu",kernelFunc:OY};function MY(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Q([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=c.strideHeight,m=c.strideWidth,d=c.filterHeight,f=c.filterWidth,h=c.dilationHeight,g=c.dilationWidth,x=c.effectiveFilterHeight,b=c.effectiveFilterWidth,C=b-1-c.padInfo.left,S=x-1-c.padInfo.top,k=me(a.shape,"float32"),_=1/(d*f),$=t.data.get(n.dataId).values,R=me(n.shape,"float32",$);for(let D=0;D=c.outHeight||Math.floor(j)!==j))for(let q=0;q=c.outWidth||Math.floor(Y)!==Y)continue;let J=R.get(D,j,Y,P);z+=J}}k.set(z*_,D,O,M,P)}return t.makeTensorInfo(k.shape,k.dtype,k.values)}var cE={kernelName:$i,backendName:"cpu",kernelFunc:MY};function LY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,scale:s,offset:a,mean:i,variance:p}=e;y.assert(i.shape.length===p.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(s==null||i.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),Q([n,i,p,s,a],"batchNorm");let{varianceEpsilon:u}=o;u==null&&(u=.001);let c=t.data.get(n.dataId).values,l=t.data.get(i.dataId).values,m=t.data.get(p.dataId).values,d=s?t.data.get(s.dataId).values:new Float32Array([1]),f=a?t.data.get(a.dataId).values:new Float32Array([0]),h=new Float32Array(c.length),g=f.length,x=d.length,b=m.length,C=l.length,S=0,k=0,_=0,$=0;for(let R=0;R=g&&(S=0),k>=C&&(k=0),_>=x&&(_=0),$>=b&&($=0);return t.makeTensorInfo(n.shape,n.dtype,h)}var lE={kernelName:In,backendName:"cpu",kernelFunc:LY};function BY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;Q([n],"batchToSpaceND");let i=s.reduce((x,b)=>x*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=We({inputs:{x:n},backend:t,attrs:{shape:p}}),f=St({inputs:{x:d},backend:t,attrs:{perm:u}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ao({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var mE={kernelName:Js,backendName:"cpu",kernelFunc:BY};function zY(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,u=Cc(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var dE={kernelName:Jo,backendName:"cpu",kernelFunc:zY};function VY(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var fE={kernelName:ea,backendName:"cpu",kernelFunc:VY};var WY=Ie(bo,(r,e)=>{let t=e;return r>t.clipValueMax?t.clipValueMax:r{let{x:e}=r.inputs,t=r.backend,o=new Float32Array(y.sizeFromShape(e.shape)),n=t.data.get(e.dataId),s=n.complexTensorInfos.real,a=n.complexTensorInfos.imag,i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values;for(let u=0;uh.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(h=>h.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(h=>y.sizeFromShape(h.shape)>0);if(p.length===1)return lr({inputs:{x:p[0]},backend:t});if(p[0].dtype==="complex64"){let h=p.map(S=>$o({inputs:{input:S},backend:t})),g=p.map(S=>Oa({inputs:{input:S},backend:t})),x=hu({inputs:h,backend:t,attrs:{axis:s}}),b=hu({inputs:g,backend:t,attrs:{axis:s}}),C=Ht({inputs:{real:x,imag:b},backend:t});return h.forEach(S=>t.disposeIntermediateTensorInfo(S)),g.forEach(S=>t.disposeIntermediateTensorInfo(S)),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(b),C}let u=p.map(h=>{let x=[-1,y.sizeFromShape(h.shape.slice(s))];return We({inputs:{x:h},backend:t,attrs:{shape:x}})}),c=u.map(h=>({vals:t.data.get(h.dataId).values,shape:h.shape}));i=w.computeOutShape(u.map(h=>h.shape),1);let l=u[0].shape[0]===1,m=ap(c,i,e[0].dtype,l),d=w.computeOutShape(p.map(h=>h.shape),s),f=t.makeTensorInfo(d,e[0].dtype,m);return u.forEach(h=>t.disposeIntermediateTensorInfo(h)),f}var yE={kernelName:ta,backendName:"cpu",kernelFunc:hu};function CI(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o;Q([n,s],"conv2d");let l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d=m.filterHeight,f=m.filterWidth,h=m.dilationHeight,g=m.dilationWidth,x=m.padInfo.left,b=m.padInfo.top,C=m.dataFormat==="channelsLast",S=new tt(m.outShape,n.dtype),k=y.computeStrides(n.shape),_=y.computeStrides(s.shape),$=k[0],R=C?k[1]:k[2],D=C?k[2]:1,P=C?1:k[1],O=S.strides[0],M=C?S.strides[1]:S.strides[2],L=C?S.strides[2]:1,B=C?1:S.strides[1],z=t.data.get(n.dataId).values,U=t.data.get(s.dataId).values,j=S.values;for(let q=0;q=m.inHeight)continue;let le=oe*_[0],be=Y+ie*R;for(let _e=0;_e=m.inWidth)continue;let ct=le+Pe*_[1],He=be+st*D,lt=ct;for(let it=0;it=u.inDepth)continue;let q=U*D[0],Y=O+j*R[1];for(let J=0;J=u.inHeight)continue;let ie=q+ee*D[1],le=Y+oe*R[2];for(let be=0;be=u.inWidth)continue;let st=ie+Fe*D[2],ct=le+Pe*u.inChannels,He=st;for(let lt=0;ltMath.cos(r)),kE={kernelName:sn,backendName:"cpu",kernelFunc:XY};var YY=Ie(an,r=>Math.cosh(r)),NE={kernelName:an,backendName:"cpu",kernelFunc:YY};function QY(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,[c,l,m,d]=n.shape,f=s.shape[0],[h,g]=i,x=me([f,h,g,d],"float32"),b=t.data.get(s.dataId).values,C=t.data.get(a.dataId).values,S=t.data.get(n.dataId).values,k=y.computeStrides(n.shape),_=y.computeStrides(x.shape);for(let $=0;$=c)continue;let B=h>1?(O-D)*(l-1)/(h-1):0,z=g>1?(M-P)*(m-1)/(g-1):0;for(let U=0;U1?D*(l-1)+U*B:.5*(D+O)*(l-1);if(j<0||j>l-1){for(let q=0;q1?P*(m-1)+re*z:.5*(P+M)*(m-1);if(ne<0||ne>m-1){for(let le=0;le1?P*(m-1)+q*z:.5*(P+M)*(m-1);if(Y<0||Y>m-1){for(let ne=0;nex+f-b-1:(x,b)=>x+b;for(let x=0;xx+f-b-1:(x,b)=>x+b;for(let x=0;x`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${a}`);let i=n.shape[0],p=n.shape[1],u=n.shape[2],c=n.shape[3],l=p*s,m=u*s,d=c/(s*s),f=t.data.get(n.dataId).values,h=new Float32Array(i*l*m*d),g=0;for(let x=0;x`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${m}'`);let d=w.computeConv2DInfo(n.shape,s.shape,a,m,i,u,!0),{filterHeight:f,filterWidth:h,dilationHeight:g,dilationWidth:x,padInfo:b}=d,C=b.left,S=b.top,k=d.outChannels/d.inChannels,_=new tt(d.outShape,n.dtype),$=t.data.get(n.dataId).values,R=t.data.get(s.dataId).values,D=_.values;for(let P=0;P=d.inHeight)continue;let q=U*l[0],Y=O+j*c[1];for(let J=0;J=d.inWidth)continue;let ie=q+ee*l[1],le=Y+oe*d.inChannels,be=re,_e=ie;for(let ve=0;ve{let{x:o,filter:n}=r,{strides:s,pad:a,dilations:i}=t,p=e,u=p.data.get(o.dataId).values,c=o.shape.length,l=p.data.get(n.dataId).values,m=n.shape.length,{batchSize:d,inHeight:f,inWidth:h,inChannels:g,outHeight:x,outWidth:b,padInfo:C,strideHeight:S,strideWidth:k,filterHeight:_,filterWidth:$,dilationHeight:R,dilationWidth:D,outShape:P}=w.computeDilation2DInfo(o.shape,n.shape,s,a,"NHWC",i),O=y.sizeFromShape(P),M=P.length,L=y.getArrayFromDType(o.dtype,O);for(let z=0;z=0&&oe=0&&lere&&(re=ve)}}}let ne=y.locToIndex([z,U,q,J],M,y.computeStrides(P));L[ne]=re}}}return{dataId:p.write(y.toTypedArray(L,o.dtype),P,o.dtype),shape:P,dtype:o.dtype}}};var ME={kernelName:Li,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Li}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(n.shape,n.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ne,re=oe)}}}O[J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}};var LE={kernelName:Mi,backendName:"cpu",kernelFunc:({inputs:r,backend:e,attrs:t})=>{let{x:o,filter:n,dy:s}=r,{strides:a,pad:i,dilations:p}=t,u=e,c=y.toNestedArray(o.shape,u.data.get(o.dataId).values),l=y.toNestedArray(n.shape,u.data.get(n.dataId).values),{batchSize:m,inHeight:d,inWidth:f,inChannels:h,outHeight:g,outWidth:x,padInfo:b,strideHeight:C,strideWidth:S,filterHeight:k,filterWidth:_,dilationHeight:$,dilationWidth:R,outShape:D}=w.computeDilation2DInfo(o.shape,n.shape,a,i,"NHWC",p);y.assert(s.rank===D.length,()=>`Error in ${Mi}, dy must have the same rank as output ${D.length}, but got ${s.rank}`);let P=y.toNestedArray(D,u.data.get(s.dataId).values),O=y.makeZerosNestedTypedArray(o.shape,o.dtype);for(let L=0;L=0&&ee=0&&ieY&&(Y=le,J=ee,re=ie)}}}O[L][J][re][q]+=P[L][B][U][q]}}}return{dataId:u.write(y.toTypedArray(O,o.dtype),o.shape,o.dtype),shape:o.shape,dtype:o.dtype}}};function s7(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,{contextOptions:i,imageOptions:p}=a||{},u=(p==null?void 0:p.alpha)||1,c=(i==null?void 0:i.contextType)||"2d";if(c!=="2d")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let l=s.getContext(c,(i==null?void 0:i.contextAttributes)||{});if(l==null)throw new Error(`Could not get the context with ${c} type.`);let[m,d]=n.shape.slice(0,2),f=n.shape.length===2?1:n.shape[2],h=t.data.get(n.dataId).values,g=n.dtype==="float32"?255:1,x=new Uint8ClampedArray(d*m*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${$}.`)}else if(n.dtype==="int32"&&($<0||$>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${$}.`);f===1?(S[0]=$*g,S[1]=$*g,S[2]=$*g):S[_]=$*g}let k=C*4;x[k+0]=Math.round(S[0]),x[k+1]=Math.round(S[1]),x[k+2]=Math.round(S[2]),x[k+3]=Math.round(S[3])}s.width=d,s.height=m;let b=new ImageData(x,d,m);return l.putImageData(b,0,0),n}var BE={kernelName:$u,backendName:"cpu",kernelFunc:s7};function fi(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"sum");let i;n.dtype==="bool"?i=Ro({inputs:{x:n},backend:t,attrs:{dtype:"int32"}}):i=lr({inputs:{x:n},backend:t});let p=i.shape.length,u=y.parseAxisParam(s,i.shape),c=w.getAxesPermutation(u,p),l=u,m=i;c!=null&&(m=St({inputs:{x:i},backend:t,attrs:{perm:c}}),l=w.getInnerMostAxes(l.length,p)),w.assertAxesAreInnerMostDims("sum",l,m.shape.length);let[d,f]=w.computeOutAndReduceShapes(m.shape,l),h=w.upcastType(m.dtype,"int32"),g=yc(t,d,h),x=y.sizeFromShape(f),b=t.data.get(g.dataId).values,C=t.data.get(m.dataId).values;for(let S=0;S=0&&(m=fi({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var VE={kernelName:Bi,backendName:"cpu",kernelFunc:a7};function i7(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e;Q([o,n],"eluGrad");let s=new Float32Array(y.sizeFromShape(n.shape)),a=t.data.get(n.dataId).values,i=t.data.get(o.dataId).values;for(let p=0;p=0?s[p]=i[p]:s[p]=i[p]*(u+1)}return t.makeTensorInfo(n.shape,"float32",s)}var WE={kernelName:Xa,backendName:"cpu",kernelFunc:i7};var u7=w.ERF_P,p7=w.ERF_A1,c7=w.ERF_A2,l7=w.ERF_A3,m7=w.ERF_A4,d7=w.ERF_A5,f7=Ie(gn,r=>{let e=Math.sign(r),t=Math.abs(r),o=1/(1+u7*t);return e*(1-((((d7*o+m7)*o+l7)*o+c7)*o+p7)*o*Math.exp(-t*t))}),UE={kernelName:gn,backendName:"cpu",kernelFunc:f7};function kc(r){let{inputs:e,backend:t,attrs:o}=r,{input:n}=e,{dim:s}=o,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),We({inputs:{x:n},backend:t,attrs:{shape:i}})}var GE={kernelName:na,backendName:"cpu",kernelFunc:kc};var h7=Ve((r,e)=>r/e),Ul=Ye(fn,h7),Gl={kernelName:fn,backendName:"cpu",kernelFunc:Ul};function Vf(r,e,t){let o=r.shape,n=o[0],s=o[1],a=t.data.get(r.dataId),i=a.complexTensorInfos.real,p=a.complexTensorInfos.imag,u=[n,s],c=y.sizeFromShape(u),l=y.getTypedArrayFromDType("float32",c),m=y.getTypedArrayFromDType("float32",c);for(let g=0;g{let{image:o}=r,n=t,s=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[a,i,p,u]=o.shape,c=n.data.get(o.dataId).values;for(let m=0;m=0&&C=0,()=>`GatherV2: the index value ${k} is not in [0, ${c-1}]`)}let l=i;i==null&&(l=0);let m=y.sizeFromShape(s.shape),d=w.segment_util.collectGatherOpShapeInfo(n,s,p,l),f=We({inputs:{x:n},backend:t,attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]}}),h=We({inputs:{x:s},backend:t,attrs:{shape:[d.batchSize,m/d.batchSize]}}),g=[d.batchSize,d.outerSize,m/d.batchSize,d.sliceSize],x=t.bufferSync(h),b=t.bufferSync(f),C=_f(b,x,g);return t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.makeTensorInfo(d.outputShape,C.dtype,C.values)}var QE={kernelName:aa,backendName:"cpu",kernelFunc:v7};function k7(r){let{inputs:e,backend:t}=r,{input:o}=e,n=y.sizeFromShape(o.shape),s=o.shape[o.shape.length-1],a=n/s,i=We({inputs:{x:o},backend:t,attrs:{shape:[a,s]}}),p=Vf(i,!0,t),u=We({inputs:{x:p},backend:t,attrs:{shape:o.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(p),u}var ZE={kernelName:Vi,backendName:"cpu",kernelFunc:k7};var N7=Ie(Tn,r=>Number.isFinite(r)?1:0,"bool"),JE={kernelName:Tn,backendName:"cpu",kernelFunc:N7};var T7=Ie(_n,r=>Math.abs(r)===1/0?1:0,"bool"),e$={kernelName:_n,backendName:"cpu",kernelFunc:T7};var _7=Ie(En,r=>Number.isNaN(r)?1:0,"bool"),t$={kernelName:En,backendName:"cpu",kernelFunc:_7};function E7(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=Ef(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var r$={kernelName:An,backendName:"cpu",kernelFunc:E7};var $7=Ie(Pn,r=>Math.log1p(r)),o$={kernelName:Pn,backendName:"cpu",kernelFunc:$7};var R7=Ve((r,e)=>r&&e),D7=Ye(On,R7,null,"bool"),n$={kernelName:On,backendName:"cpu",kernelFunc:D7};var A7=Ie(Mn,r=>r?0:1,"bool"),s$={kernelName:Mn,backendName:"cpu",kernelFunc:A7};var F7=Ve((r,e)=>r||e),P7=Ye(Ln,F7,null,"bool"),a$={kernelName:Ln,backendName:"cpu",kernelFunc:P7};function O7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;Q(n,"LRN");let u=n.shape[3],c=u-1,l=t.data.get(n.dataId).values,m=y.sizeFromShape(n.shape),d=new Float32Array(m);function f(h){let g=h%u,x=h-g+Math.max(0,g-s),b=h-g+Math.min(g+s,c),C=0;for(;x<=b;x++){let S=l[x];C+=S*S}return C}for(let h=0;h`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p),l;if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))l=lr({inputs:{x:n},backend:t});else{let m=t.data.get(n.dataId).values,d=y.computeStrides(n.shape),f=vc(m,n.shape,n.dtype,d,c,"max");l=t.makeTensorInfo(c.outShape,n.dtype,f.values)}return l}var c$={kernelName:Wn,backendName:"cpu",kernelFunc:L7};function B7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o;Q(n,"maxPool3d");let c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.data.get(n.dataId).values,m=zf(l,n.shape,n.dtype,y.computeStrides(n.shape),c,"max");return t.makeTensorInfo(m.shape,"float32",m.values)}var l$={kernelName:ia,backendName:"cpu",kernelFunc:B7};function z7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o;Q([n,s],"maxPool3DGrad");let c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.bufferSync(s),m=aE(l,c),d=c.strideDepth,f=c.strideHeight,h=c.strideWidth,g=c.dilationDepth,x=c.dilationHeight,b=c.dilationWidth,C=c.effectiveFilterDepth,S=c.effectiveFilterHeight,k=c.effectiveFilterWidth,_=C-1-c.padInfo.front,$=k-1-c.padInfo.left,R=S-1-c.padInfo.top,D=me(s.shape,"float32"),P=t.bufferSync(n);for(let O=0;O=c.outDepth||Math.floor(re)!==re))for(let ne=0;ne=c.outHeight||Math.floor(ee)!==ee))for(let oe=0;oe=c.outWidth||Math.floor(ie)!==ie)continue;let le=C*S*k-1-m.get(O,re,ee,ie,M),be=J*S*k+ne*k+oe,_e=le===be?1:0;if(_e===0)continue;let ve=P.get(O,re,ee,ie,M);Y+=ve*_e}}}D.set(Y,O,L,B,z,M)}return t.makeTensorInfo(D.shape,D.dtype,D.values)}var m$={kernelName:Gi,backendName:"cpu",kernelFunc:z7};function V7(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Q([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=t.data.get(i.dataId).values,f=me(m.outShape,i.dtype,Bf(d,i.shape,i.dtype,m).values),h=m.strideHeight,g=m.strideWidth,x=m.dilationHeight,b=m.dilationWidth,C=m.effectiveFilterHeight,S=m.effectiveFilterWidth,k=S-1-m.padInfo.left,_=C-1-m.padInfo.top,$=me(i.shape,"float32"),R=t.data.get(n.dataId).values,D=me(n.shape,"float32",R);for(let P=0;P=m.outHeight||Math.floor(q)!==q))for(let Y=0;Y=m.outWidth||Math.floor(J)!==J)continue;let re=C*S-1-f.get(P,q,J,O),ne=j*S+Y,ee=re===ne?1:0;if(ee===0)continue;let oe=D.get(P,q,J,O);U+=oe*ee}}$.set(U,P,M,L,O)}return t.makeTensorInfo($.shape,$.dtype,$.values)}var d$={kernelName:Ui,backendName:"cpu",kernelFunc:V7};function f$(r,e,t,o,n){let s=y.computeStrides(e),a=vc(r,e,t,s,n,"max"),i=Bf(r,e,t,n,!0,o);return[a.values,i.values]}var h$={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;Q(o,"MaxPoolWithArgmax");let u=p.data.get(o.dataId).values,c=w.computePool2DInfo(o.shape,n,s,[1,1],a),[l,m]=f$(u,o.shape,o.dtype,i,c),d=p.write(l,c.outShape,o.dtype),f=p.write(m,c.outShape,o.dtype);return[{dataId:d,shape:c.outShape,dtype:o.dtype},{dataId:f,shape:c.outShape,dtype:"int32"}]}};function W7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=y.parseAxisParam(s,n.shape),u=w.computeOutAndReduceShapes(n.shape,i)[1],c=y.sizeFromShape(u),l=[],m=t.makeTensorInfo([],"float32",new Float32Array([c]));l.push(m);let d=Ro({inputs:{x:n},backend:t,attrs:{dtype:"float32"}});l.push(d);let f=Ul({inputs:{a:d,b:m},backend:t});l.push(f);let h=fi({inputs:{x:f},backend:t,attrs:{axis:s,keepDims:a}});return l.forEach(g=>t.disposeIntermediateTensorInfo(g)),h}var g$={kernelName:Un,backendName:"cpu",kernelFunc:W7};function U7(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;Q(n,"min");let i=y.parseAxisParam(s,n.shape),p=i,u=w.getAxesPermutation(p,n.shape.length),c=n;u!=null&&(c=St({inputs:{x:n},backend:t,attrs:{perm:u}}),p=w.getInnerMostAxes(p.length,n.shape.length)),w.assertAxesAreInnerMostDims("min",p,c.shape.length);let[l,m]=w.computeOutAndReduceShapes(c.shape,p),d=y.sizeFromShape(m),f=y.makeZerosTypedArray(y.sizeFromShape(l),c.dtype),h=t.data.get(c.dataId).values;for(let x=0;xC[0]+n.shape[S]+C[1]),p=s.map(C=>C[0]),u=s.map((C,S)=>C[0]+n.shape[S]),c=a==="reflect"?0:1,l=t.data.get(n.dataId).values,m=n.shape.length,d=y.computeStrides(n.shape),f=y.sizeFromShape(i),h=i.length,g=y.computeStrides(i),x=y.getTypedArrayFromDType(n.dtype,f);for(let C=0;C=u[_]&&(S[_]=(u[_]-1)*2-S[_]+c);S=S.map((_,$)=>_-p[$]);let k=y.locToIndex(S,m,d);x[C]=l[k]}return{dataId:t.write(x,i,n.dtype),shape:i,dtype:n.dtype}}var y$={kernelName:Kn,backendName:"cpu",kernelFunc:G7};var H7=Ve((r,e)=>{let t=r%e;return r<0&&e<0||r>=0&&e>=0?t:(t+e)%e}),K7=Ye(qn,H7),b$={kernelName:qn,backendName:"cpu",kernelFunc:K7};var w$=zp(jw());function vI(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=n.shape.length,i=s;if(i===-1&&(i=a-1),i!==a-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${a} and dim was ${i}`);let p=y.parseAxisParam([i],n.shape),u=II({inputs:{x:n},backend:t,attrs:{reductionIndices:p,keepDims:!1}}),c=w.expandShapeToKeepDim(u.shape,p),l=We({inputs:{x:u},backend:t,attrs:{shape:c}}),m=Vl({inputs:{a:n,b:l},backend:t}),d=qS({inputs:{x:m},backend:t}),f=fi({inputs:{x:d},backend:t,attrs:{axis:p,keepDims:!1}}),h=We({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Ul({inputs:{a:d,b:h},backend:t});return t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),g}var C$={kernelName:Is,backendName:"cpu",kernelFunc:vI};function q7(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;Q(n,"multinomial");let p=i?n:vI({inputs:{logits:n},backend:t,attrs:{dim:-1}}),u=p.shape[0],c=p.shape[1],l=t.data.get(p.dataId).values,m=[u,s],d=y.makeZerosTypedArray(y.sizeFromShape(m),"int32");for(let f=0;f=0&&l[m]{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=kc({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=hu({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var $$={kernelName:la,backendName:"cpu",kernelFunc:kI};function tQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;Q(n,"pad");let i=s.map((b,C)=>b[0]+n.shape[C]+b[1]),p=s.map(b=>b[0]),u=t.data.get(n.dataId).values,c=y.sizeFromShape(n.shape),l=n.shape.length,m=y.computeStrides(n.shape),d=y.sizeFromShape(i),f=i.length,h=y.computeStrides(i),g=y.getTypedArrayFromDType(n.dtype,d);a!==0&&g.fill(a);for(let b=0;b_+p[$]),k=y.locToIndex(S,f,h);g[k]=u[b]}return{dataId:t.write(g,i,n.dtype),shape:i,dtype:n.dtype}}var Wf={kernelName:es,backendName:"cpu",kernelFunc:tQ};var rQ=Ve((r,e)=>Math.pow(r,e)),oQ=Ye(ts,rQ),R$={kernelName:ts,backendName:"cpu",kernelFunc:oQ};function nQ(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.data.get(x.dataId).values),u=n.map(x=>x.shape),c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,[m,d,f]=Rf(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var D$={kernelName:Hp,backendName:"cpu",kernelFunc:nQ};function sQ(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Df(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var A$={kernelName:Kp,backendName:"cpu",kernelFunc:sQ};function aQ(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.data.get(n.dataId).values,c=t.data.get(s.dataId).values,l=t.data.get(a.dataId).values,m=i.map(g=>t.data.get(g.dataId).values),d=i.map(g=>g.shape),[f,h]=Af(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var F$={kernelName:qp,backendName:"cpu",kernelFunc:aQ};function iQ(r){let{backend:e,attrs:t}=r,{start:o,stop:n,dtype:s,step:a}=t,i=up(o,n,a,s);return e.makeTensorInfo([i.length],s,i)}var P$={kernelName:ma,backendName:"cpu",kernelFunc:iQ};var uQ=Ie(ns,r=>1/r),O$={kernelName:ns,backendName:"cpu",kernelFunc:uQ};function pQ(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o;Q(n,"resizeBilinear");let p=y.computeStrides(n.shape),[u,c]=i,[l,m,d,f]=n.shape,h=t.data.get(n.dataId).values,g=new Float32Array(y.sizeFromShape([l,u,c,f])),x=[s&&u>1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=0,S=x[0]/b[0],k=x[1]/b[1];for(let _=0;_1?u-1:u,a&&d>1?c-1:c],g=[a&&m>1?m-1:m,a&&d>1?d-1:d],x=h[0]/g[0],b=h[1]/g[1],C=t.data.get(s.dataId).values,S=0;for(let k=0;k1?m-1:m,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],C=x[0]/b[0],S=x[1]/b[1],k=0;for(let _=0;_1?c-1:c,a&&f>1?l-1:l],b=[a&&d>1?d-1:d,a&&f>1?f-1:f],C=x[0]/b[0],S=x[1]/b[1],k=1/C,_=1/S,$=Math.ceil(k)*2+2,R=Math.ceil(_)*2+2;for(let D=0;D=d)continue;let ee=P+ne*p[1],oe=ne*C,ie=Math.min(c-1,a?Math.round(oe):Math.floor(oe));if(O===ie)for(let le=0;le=f)continue;let _e=ee+be*p[2],ve=be*S,Fe=Math.min(l-1,a?Math.round(ve):Math.floor(ve));z===Fe&&(J+=g[_e+Y])}}h[U+Y]=J}}}}return t.makeTensorInfo(n.shape,n.dtype,h)}var z$={kernelName:Za,backendName:"cpu",kernelFunc:mQ};function dQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o;Q(n,"reverse");let a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return lr({inputs:{x:n},backend:t});let p=new tt(n.shape,n.dtype),u=t.bufferSync(n);for(let c=0;cm[d]=n.shape[d]-1-m[d]),p.set(u.get(...m),...l)}return t.makeTensorInfo(p.shape,p.dtype,p.values)}var V$={kernelName:ps,backendName:"cpu",kernelFunc:dQ};var W$={kernelName:Ds,backendName:"cpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=y.getTypedArrayFromDType(o.dtype,y.sizeFromShape(o.shape)),[u,c,l,m]=o.shape,[d,f]=w.getImageCenter(a,c,l),h=255,g=Math.sin(n),x=Math.cos(n),b=i.data.get(o.dataId).values;for(let S=0;S=0&&B=0&&z{let e=Math.floor(r);return r-e<.5?Math.floor(r):r-e>.5?Math.ceil(r):e%2===0?e:e+1}),U$={kernelName:cs,backendName:"cpu",kernelFunc:fQ};function hQ(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=!0,d=t.bufferSync(n),f=t.bufferSync(s),h=zs(d,f,a,l,u,p,i,c,0,m);return t.makeTensorInfo(a,h.dtype,h.values)}var G$={kernelName:ms,backendName:"cpu",kernelFunc:hQ};function gQ(r,e){let t=0,o=r.length,n=0;for(;t1||n.shape.length===1?1:y.sizeFromShape(n.shape.slice(1));for(let f=0;fr>=0?wQ*r:CQ*(Math.exp(r)-1)),j$={kernelName:hs,backendName:"cpu",kernelFunc:SQ};var IQ=Ie(ys,r=>r<0?-1:r>0?1:0),X$={kernelName:ys,backendName:"cpu",kernelFunc:IQ};var vQ=Ie(gs,r=>Math.sin(r)),Y$={kernelName:gs,backendName:"cpu",kernelFunc:vQ};var kQ=Ie(xs,r=>Math.sinh(r)),Q$={kernelName:xs,backendName:"cpu",kernelFunc:kQ};var NQ=11920928955078125e-23,Z$=Math.log(NQ)+2,TQ=Ie(Cs,r=>{let e=r>-Z$,t=rNumber(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var zR={kernelName:eu,backendName:"cpu",kernelFunc:jZ};function XZ(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape + ${a.shape}`);let i=t.data.get(o.dataId).values,p=t.data.get(n.dataId).values,u=t.data.get(s.dataId).values,c=t.data.get(a.dataId).values[0],[l,m,d,f,h]=Ff(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var tR={kernelName:Ki,backendName:"cpu",kernelFunc:EQ};function $Q(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape - ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,l,c]=Hf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(l,o.dtype,u),t.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var VR={kernelName:ui,backendName:"cpu",kernelFunc:XZ};function YZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.data.get(n.dataId).values),i=t.data.get(o.dataId).values,p=Array.from(t.data.get(s.dataId).values),[u,c,l]=Pf(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var rR={kernelName:ei,backendName:"cpu",kernelFunc:$Q};function RQ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=_l(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(l,o.dtype,u)}var WR={kernelName:va,backendName:"cpu",kernelFunc:YZ};function QZ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,c]=Sc(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var oR={kernelName:ya,backendName:"cpu",kernelFunc:RQ};function DQ(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);if(n.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let a=t.data.get(o.dataId).values,i=t.data.get(n.dataId).values,p=t.data.get(s.dataId).values,[u,l]=_l(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(l,o.dtype,u)}var UR={kernelName:ka,backendName:"cpu",kernelFunc:QZ};function ZZ(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1,f=t.bufferSync(n),h;switch(s.dtype){case"bool":{let g=t.bufferSync(s),x=!!t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case"float32":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case"int32":{let g=t.bufferSync(s),x=t.data.get(a.dataId).values[0];h=Xs(f,g,i,m,l,u,p,c,x,d);break}case"string":{let g=t.bufferSync(s),x=y.decodeString(t.data.get(a.dataId).values[0]);h=Xs(f,g,i,m,l,u,p,c,x,d);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return t.makeTensorInfo(i,h.dtype,h.values)}var GR={kernelName:Ps,backendName:"cpu",kernelFunc:ZZ};function JZ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),l=n.shape.slice();return p.map(c=>{let m=[...l];m[i]=c;let d=nn({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=c,d})}var HR={kernelName:Ia,backendName:"cpu",kernelFunc:JZ};var KR={kernelName:tu,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(t,"square");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),qR={kernelName:Ko,backendName:"cpu",kernelFunc:e9};function t9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o;Q(n,"stridedSlice");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=We({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=nn({inputs:{x:n},backend:t,attrs:{begin:b,size:T}});k=We({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(E)}else{let T=t.bufferSync(n),E=Kf(d,T,S,b);k=t.makeTensorInfo(f,E.dtype,E.values)}return k}var jR={kernelName:Os,backendName:"cpu",kernelFunc:t9};function r9(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.data.get(l.dataId).values,d=t.data.get(c.dataId).values,[f,h]=gp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(c.shape,"int32",h)]}var XR={kernelName:Na,backendName:"cpu",kernelFunc:r9};function o9(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,l,c]=xp(i,p,n),m=l.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",l),t.makeTensorInfo([2],"int32",new Int32Array(c))]}var YR={kernelName:ru,backendName:"cpu",kernelFunc:o9};function n9(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.data.get(s.dataId).values,i=yp(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var QR={kernelName:ou,backendName:"cpu",kernelFunc:n9};var s9=Ie(Ms,r=>Math.tan(r)),ZR={kernelName:Ms,backendName:"cpu",kernelFunc:s9};var a9=Ie(Ls,r=>Math.tanh(r)),JR={kernelName:Ls,backendName:"cpu",kernelFunc:a9};function i9(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:l}=C.calculateShapes(s,n,o.shape),c=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=Xs(m,d,o.shape,l,p,i,a,u,f,c);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var eD={kernelName:ks,backendName:"cpu",kernelFunc:i9};function u9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,"tile");let a=qf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var tD={kernelName:Mo,backendName:"cpu",kernelFunc:u9};function p9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=jf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var rD={kernelName:Bs,backendName:"cpu",kernelFunc:p9};function l9(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=y.computeStrides(n.shape),b=x[0],w=x[1],S=x[2],k=y.computeStrides(g),T=k[0],E=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let F=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function m9(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function d9(r,e){return r}function f9(r,e){return y.clamp(0,r,e-1)}function em(r,e,t,o,n,s,a,i,p,u,l){let c=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var iD={kernelName:su,backendName:"cpu",kernelFunc:b9};var C9=[DE,z_,AE,FE,H_,PE,OE,ME,LE,BE,zE,VE,WE,UE,GE,KE,qE,jE,XE,RE,YE,QE,ZE,K_,JE,G_,q_,e$,V_,t$,o$,n$,s$,a$,i$,u$,p$,l$,c$,m$,d$,f$,h$,g$,x$,y$,b$,C$,w$,S$,I$,v$,N$,kE,T$,j_,_$,X_,E$,Y_,$$,R$,D$,Q_,Z_,A$,F$,P$,O$,J_,eE,W_,M$,r$,L$,B$,z$,NE,tE,rE,V$,oE,W$,U$,G$,H$,K$,q$,j$,nE,X$,Y$,Q$,Z$,eR,tR,rR,sE,oR,nR,iR,aE,iE,uR,pR,lR,uE,cR,fR,hR,Jf,gR,TE,lE,xR,yR,bR,CR,U_,Qc,wR,_E,EE,$E,SR,IR,vR,kR,NR,TR,_R,hE,ER,RR,DR,AR,xE,FR,PR,OR,yE,sR,LR,BR,zR,VR,WR,UR,GR,HR,CE,KR,wE,SE,qR,jR,XR,YR,QR,IE,k$,ZR,JR,eD,tD,rD,nD,pE,sD,aD,iD,mR];for(let r of C9)li(r);var Fl={};qe(Fl,{assertNotComplex:()=>Ys,bindCanvasToFramebuffer:()=>E9,bindColorTextureToFramebuffer:()=>nm,bindTextureToProgramUniformSampler:()=>e0,bindTextureUnit:()=>cD,bindVertexBufferToProgramAttribute:()=>sh,callAndCheck:()=>ce,canBeRepresented:()=>WI,createFragmentShader:()=>GI,createFramebuffer:()=>QI,createProgram:()=>HI,createStaticIndexBuffer:()=>jI,createStaticVertexBuffer:()=>qI,createTexture:()=>XI,createVertexShader:()=>UI,getBatchDim:()=>ki,getExtensionOrThrow:()=>Rl,getFramebufferErrorMessage:()=>mD,getMaxTexturesInShader:()=>o0,getNumChannels:()=>T9,getProgramUniformLocation:()=>JI,getProgramUniformLocationOrThrow:()=>ZI,getRowsCols:()=>Ni,getShapeAs3D:()=>Al,getTextureShapeFromLogicalShape:()=>t0,getWebGLDisjointQueryTimerVersion:()=>n0,getWebGLErrorMessage:()=>lD,getWebGLMaxTextureSize:()=>r0,hasExtension:()=>Jr,isCapableOfRenderingToFloatTexture:()=>s0,isDownloadFloatTextureEnabled:()=>a0,isReshapeFree:()=>vu,isWebGLFenceEnabled:()=>i0,isWebGLVersionEnabled:()=>ih,linkProgram:()=>KI,logShaderSourceAndInfoLog:()=>nh,resetMaxTextureSize:()=>$9,resetMaxTexturesInShader:()=>R9,unbindColorTextureFromFramebuffer:()=>ah,unbindTextureUnit:()=>_9,validateFramebuffer:()=>Dl,validateProgram:()=>om,validateTextureSize:()=>YI});var wp={},eh={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function BI(r,e){wp[r]=e}function Zr(r,e){if(!(r in wp)||e!=null){let o=S9(r,e);if(o!==null)wp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=wp[r];return t==null||t.isContextLost()?(delete wp[r],Zr(r)):(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),wp[r])}function w9(r){if(!A().getBool("IS_SAFARI")&&typeof OffscreenCanvas!="undefined"&&r===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 S9(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?w9(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete wp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(eh.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",eh)||t.getContext("experimental-webgl",eh):t.getContext("webgl2",eh)}var Iu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(Iu||(Iu={}));var hr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(hr||(hr={}));var or;(function(r){r[r.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",r[r.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",r[r.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",r[r.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",r[r.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(or||(or={}));function Sp(r,e){return[e,r]}function uD(r,e){return r*e}function tm(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ga(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function pD(r,e){let[t,o]=Ga(r,e);return t*o*4}function rm(r,e){let t=r,o,n,s,a,i,p,u,l,c,m;return A().getNumber("WEBGL_VERSION")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,l=1,c=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,l=4,c=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:l,textureTypeHalfFloat:c,textureTypeFloat:m}}function ce(r,e){let t=e();return A().getBool("DEBUG")&&I9(r),t}function I9(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+lD(r,e))}var v9=596e-10,k9=65504;function WI(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||v9r.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function UI(r,e){let t=vi(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error("Failed to compile vertex shader.");return t}function GI(r,e){let t=vi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw nh(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var N9=/ERROR: [0-9]+:([0-9]+):/g;function nh(r,e){let t=N9.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(` -`),s=n.length.toString().length+2,a=n.map((c,m)=>y.rightPad((m+1).toString(),s)+c),i=0;for(let c=0;c{let m=[...c];m[i]=l;let d=Ao({inputs:{x:n},backend:t,attrs:{begin:u,size:m}});return u[i]+=l,d})}var aR={kernelName:xa,backendName:"cpu",kernelFunc:FQ};var iR={kernelName:qi,backendName:"cpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e;Q(t,"square");let n=o.data.get(t.dataId).values,s=new Float32Array(n.length);for(let i=0;i{let t=e;return isNaN(r)?NaN:r>0?1:t.alpha}),uR={kernelName:wo,backendName:"cpu",kernelFunc:PQ};function OQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o;Q(n,"stridedSlice");let{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=We({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Ao({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=We({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo($)}else{let _=t.bufferSync(n),$=Of(d,_,S,b);k=t.makeTensorInfo(f,$.dtype,$.values)}return k}var pR={kernelName:Ns,backendName:"cpu",kernelFunc:OQ};function MQ(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.data.get(c.dataId).values,d=t.data.get(l.dataId).values,[f,h]=cp(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var cR={kernelName:Ca,backendName:"cpu",kernelFunc:MQ};function LQ(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.data.get(s.dataId).values,p=t.data.get(a.dataId).values[0],[u,c,l]=lp(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var lR={kernelName:ji,backendName:"cpu",kernelFunc:LQ};function BQ(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.data.get(s.dataId).values,i=mp(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var mR={kernelName:Xi,backendName:"cpu",kernelFunc:BQ};var zQ=Ie(_s,r=>Math.tan(r)),dR={kernelName:_s,backendName:"cpu",kernelFunc:zQ};var VQ=Ie(Es,r=>Math.tanh(r)),fR={kernelName:Es,backendName:"cpu",kernelFunc:VQ};function WQ(r){let{inputs:e,backend:t}=r,{tensor:o,indices:n,updates:s}=e,{sliceRank:a,numUpdates:i,sliceSize:p,strides:u,outputSize:c}=w.calculateShapes(s,n,o.shape),l=!1,m=t.bufferSync(n),d=t.bufferSync(s),f=t.bufferSync(o),h=zs(m,d,o.shape,c,p,i,a,u,f,l);return t.makeTensorInfo(o.shape,h.dtype,h.values)}var hR={kernelName:ds,backendName:"cpu",kernelFunc:WQ};function UQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reps:s}=o;Q(n,"tile");let a=Mf(t.bufferSync(n),s);return t.makeTensorInfo(a.shape,a.dtype,a.values)}var gR={kernelName:po,backendName:"cpu",kernelFunc:UQ};function GQ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{k:s,sorted:a}=o;Q(n,"topk");let i=t.data.get(n.dataId).values,[p,u]=Lf(i,n.shape,n.dtype,s,a);return[t.makeTensorInfo(p.shape,p.dtype,p.values),t.makeTensorInfo(u.shape,u.dtype,u.values)]}var xR={kernelName:$s,backendName:"cpu",kernelFunc:GQ};function HQ(r){let{inputs:e,attrs:t,backend:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=t,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=y.computeStrides(n.shape),b=x[0],C=x[1],S=x[2],k=y.computeStrides(g),_=k[0],$=k[1],R=k[2],D=y.getTypedArrayFromDType(n.dtype,y.sizeFromShape(g));D.fill(p);let P=o.data.get(n.dataId).values,O=o.data.get(s.dataId).values;for(let L=0;Le-1)if(e<=1)t=0;else{let o=2*e;t-=o*Math.trunc(t/o),t>=e&&(t=o-t-1)}return y.clamp(0,t,e-1)}function qQ(r,e){let t=r;if(t<0)if(e<=1)t=0;else{let o=e-1;t+=e*(Math.trunc(-t/o)+1)}else if(t>e-1)if(e<=1)t=0;else{let o=e-1;t-=e*Math.trunc(t/o)}return y.clamp(0,t,e-1)}function jQ(r,e){return r}function XQ(r,e){return y.clamp(0,r,e-1)}function ql(r,e,t,o,n,s,a,i,p,u,c){let l=a*o+i*n+p*s+u;return 0<=i&&it.disposeIntermediateTensorInfo(f)),d}var SR={kernelName:Qi,backendName:"cpu",kernelFunc:eZ};var tZ=[q_,t_,j_,X_,a_,Y_,Q_,Z_,J_,eE,tE,rE,oE,nE,sE,iE,uE,pE,cE,K_,lE,mE,dE,i_,fE,s_,u_,hE,r_,gE,yE,bE,CE,wE,SE,IE,vE,kE,NE,TE,_E,EE,$E,RE,DE,AE,FE,PE,OE,ME,LE,BE,VE,z_,WE,p_,UE,c_,GE,l_,HE,KE,qE,m_,d_,jE,XE,YE,QE,f_,h_,o_,ZE,xE,JE,e$,t$,V_,g_,x_,r$,y_,o$,n$,s$,a$,i$,u$,p$,b_,c$,l$,m$,d$,h$,g$,x$,C_,y$,b$,S$,w_,S_,I$,v$,k$,I_,N$,E$,$$,Wf,R$,W_,k_,D$,A$,F$,P$,n_,Gl,O$,U_,G_,H_,M$,L$,B$,z$,V$,W$,U$,$_,G$,K$,q$,j$,D_,X$,Y$,Q$,A_,C$,J$,eR,tR,rR,oR,nR,sR,aR,P_,iR,O_,M_,uR,pR,cR,lR,mR,L_,zE,dR,fR,hR,gR,xR,bR,v_,CR,wR,SR,T$];for(let r of tZ)ti(r);var Ec={};qe(Ec,{assertNotComplex:()=>Vs,bindCanvasToFramebuffer:()=>cZ,bindColorTextureToFramebuffer:()=>Ql,bindTextureToProgramUniformSampler:()=>VI,bindTextureUnit:()=>NR,bindVertexBufferToProgramAttribute:()=>jf,callAndCheck:()=>ce,canBeRepresented:()=>EI,createFragmentShader:()=>RI,createFramebuffer:()=>LI,createProgram:()=>DI,createStaticIndexBuffer:()=>PI,createStaticVertexBuffer:()=>FI,createTexture:()=>OI,createVertexShader:()=>$I,getBatchDim:()=>gi,getExtensionOrThrow:()=>Nc,getFramebufferErrorMessage:()=>TR,getMaxTexturesInShader:()=>GI,getNumChannels:()=>uZ,getProgramUniformLocation:()=>zI,getProgramUniformLocationOrThrow:()=>BI,getRowsCols:()=>xi,getShapeAs3D:()=>_c,getTextureShapeFromLogicalShape:()=>WI,getWebGLDisjointQueryTimerVersion:()=>HI,getWebGLErrorMessage:()=>kR,getWebGLMaxTextureSize:()=>UI,hasExtension:()=>qr,isCapableOfRenderingToFloatTexture:()=>KI,isDownloadFloatTextureEnabled:()=>qI,isReshapeFree:()=>xu,isWebGLFenceEnabled:()=>jI,isWebGLVersionEnabled:()=>Yf,linkProgram:()=>AI,logShaderSourceAndInfoLog:()=>qf,resetMaxTextureSize:()=>lZ,resetMaxTexturesInShader:()=>mZ,unbindColorTextureFromFramebuffer:()=>Xf,unbindTextureUnit:()=>pZ,validateFramebuffer:()=>Tc,validateProgram:()=>Yl,validateTextureSize:()=>MI});var hp={},Uf={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function NI(r,e){hp[r]=e}function Kr(r,e){if(!(r in hp)||e!=null){let o=oZ(r,e);if(o!==null)hp[r]=o;else return console.log("Could not get context for WebGL version",r),null}let t=hp[r];return t==null||t.isContextLost()?(delete hp[r],Kr(r)):(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),hp[r])}function rZ(r){if(!A().getBool("IS_SAFARI")&&typeof OffscreenCanvas!="undefined"&&r===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 oZ(r,e){if(r!==1&&r!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=e==null?rZ(r):e;return t.addEventListener("webglcontextlost",o=>{o.preventDefault(),delete hp[r]},!1),A().getBool("SOFTWARE_WEBGL_ENABLED")&&(Uf.failIfMajorPerformanceCaveat=!1),r===1?t.getContext("webgl",Uf)||t.getContext("experimental-webgl",Uf):t.getContext("webgl2",Uf)}var gu;(function(r){r[r.DENSE=0]="DENSE",r[r.SHARED_BATCH=1]="SHARED_BATCH"})(gu||(gu={}));var mr;(function(r){r[r.RENDER=0]="RENDER",r[r.UPLOAD=1]="UPLOAD",r[r.PIXELS=2]="PIXELS",r[r.DOWNLOAD=3]="DOWNLOAD"})(mr||(mr={}));var er;(function(r){r[r.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",r[r.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",r[r.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",r[r.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",r[r.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(er||(er={}));function gp(r,e){return[e,r]}function IR(r,e){return r*e}function jl(r){let e=y.sizeFromShape(r),t=Math.ceil(e/4);return y.sizeToSquarishShape(t)}function Ma(r,e){return[Math.max(1,Math.ceil(e/2)),Math.max(1,Math.ceil(r/2))]}function vR(r,e){let[t,o]=Ma(r,e);return t*o*4}function Xl(r,e){let t=r,o,n,s,a,i,p,u,c,l,m;return A().getNumber("WEBGL_VERSION")===2?(o=t.R32F,n=t.R16F,s=t.RGBA16F,a=t.RGBA32F,i=t.RED,u=4,c=1,l=t.HALF_FLOAT,m=t.FLOAT,p=t.RGBA8):(o=r.RGBA,n=r.RGBA,s=r.RGBA,a=t.RGBA,i=r.RGBA,u=4,c=4,l=e!=null?e.HALF_FLOAT_OES:null,m=r.FLOAT,p=r.RGBA),{internalFormatFloat:o,internalFormatHalfFloat:n,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:a,textureFormatFloat:i,downloadTextureFormat:p,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:l,textureTypeFloat:m}}function ce(r,e){let t=e();return A().getBool("DEBUG")&&nZ(r),t}function nZ(r){let e=r.getError();if(e!==r.NO_ERROR)throw new Error("WebGL Error: "+kR(r,e))}var sZ=596e-10,aZ=65504;function EI(r){return!!(A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||r===0||sZr.getExtension(e),'Extension "'+e+'" not supported on this browser.')}function $I(r,e){let t=hi(r,()=>r.createShader(r.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw console.log(r.getShaderInfoLog(t)),new Error("Failed to compile vertex shader.");return t}function RI(r,e){let t=hi(r,()=>r.createShader(r.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(r,()=>r.shaderSource(t,e)),ce(r,()=>r.compileShader(t)),A().get("ENGINE_COMPILE_ONLY"))return t;if(r.getShaderParameter(t,r.COMPILE_STATUS)===!1)throw qf(e,r.getShaderInfoLog(t)),new Error("Failed to compile fragment shader.");return t}var iZ=/ERROR: [0-9]+:([0-9]+):/g;function qf(r,e){let t=iZ.exec(e);if(t==null){console.log(`Couldn't parse line number in error: ${e}`),console.log(r);return}let o=+t[1],n=r.split(` +`),s=n.length.toString().length+2,a=n.map((l,m)=>y.rightPad((m+1).toString(),s)+l),i=0;for(let l=0;lr.createProgram(),"Unable to create WebGLProgram.")}function KI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Failed to link vertex and fragment shaders.")}function om(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function qI(r,e){let t=vi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function jI(r,e){let t=vi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function T9(){return A().getNumber("WEBGL_VERSION")===2?1:4}function XI(r){return vi(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function YI(r,e){let t=A().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function QI(r){return vi(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function sh(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function cD(r,e,t){dD(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function _9(r,e){dD(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function ZI(r,e,t){return vi(r,()=>r.getUniformLocation(e,t),'uniform "'+t+'" not present in program.')}function JI(r,e,t){return r.getUniformLocation(e,t)}function e0(r,e,t,o){ce(r,()=>cD(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function E9(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function nm(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function ah(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Dl(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+mD(r,e))}function mD(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${e}`}}function vi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function dD(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function ki(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function Ni(r){if(r.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function Al(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[ki(r),...Ni(r)]),e}function t0(r,e=!1){let t=A().getNumber("WEBGL_MAX_TEXTURE_SIZE"),o=A().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");o===1/0&&A().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=ki(r),p=2,u=2;r.length&&([p,u]=Ni(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(l=>l*2)}else s=y.sizeToSquarishShape(n);return s}function th(r){return r%2===0}function vu(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r[r.length-1],o=e[e.length-1];if(t===o||th(t)&&th(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&th(r[0])&&th(e[0])}var rh,oh;function r0(r){if(rh==null){let e=Zr(r);rh=e.getParameter(e.MAX_TEXTURE_SIZE)}return rh}function $9(){rh=null}function R9(){oh=null}function o0(r){if(oh==null){let e=Zr(r);oh=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,oh)}function n0(r){if(r===0)return 0;let e,t=Zr(r);return Jr(t,"EXT_disjoint_timer_query_webgl2")&&r===2?e=2:Jr(t,"EXT_disjoint_timer_query")?e=1:e=0,e}function Jr(r,e){return r.getExtension(e)!=null}function ih(r){try{if(Zr(r)!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function s0(r){if(r===0)return!1;let e=Zr(r);if(r===1){if(!Jr(e,"OES_texture_float"))return!1}else if(!Jr(e,"EXT_color_buffer_float"))return!1;return VI(e)}function a0(r){if(r===0)return!1;let e=Zr(r);if(r===1){if(!Jr(e,"OES_texture_float")||!Jr(e,"WEBGL_color_buffer_float"))return!1}else{if(Jr(e,"EXT_color_buffer_float"))return VI(e);let o="EXT_color_buffer_half_float";if(Jr(e,o)){let n=e.getExtension(o);return D9(e,n)}return!1}return VI(e)}function VI(r){let e=rm(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function D9(r,e){let t=rm(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function i0(r){return r!==2?!1:Zr(r).fenceSync!=null}function Ys(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Se=A();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>ih(2)?2:ih(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>r0(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>o0(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Se.getNumber("WEBGL_VERSION");return r===0?0:n0(r)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!uu.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>s0(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>a0(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>i0(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,r=>{if(typeof r!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>uu.isMobile()?1:-1,r=>{if(typeof r!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function kt(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",e="in",t="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=A().getBool("WEBGL2_ISNAN_CUSTOM")?` +`)[0]),console.log(`%c ${y.rightPad(u[0],i)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(c.join(` +`))}function DI(r){return hi(r,()=>r.createProgram(),"Unable to create WebGLProgram.")}function AI(r,e){if(ce(r,()=>r.linkProgram(e)),!A().get("ENGINE_COMPILE_ONLY")&&r.getProgramParameter(e,r.LINK_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Failed to link vertex and fragment shaders.")}function Yl(r,e){if(ce(r,()=>r.validateProgram(e)),r.getProgramParameter(e,r.VALIDATE_STATUS)===!1)throw console.log(r.getProgramInfoLog(e)),new Error("Shader program validation failed.")}function FI(r,e){let t=hi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function PI(r,e){let t=hi(r,()=>r.createBuffer(),"Unable to create WebGLBuffer");return ce(r,()=>r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t)),ce(r,()=>r.bufferData(r.ELEMENT_ARRAY_BUFFER,e,r.STATIC_DRAW)),t}function uZ(){return A().getNumber("WEBGL_VERSION")===2?1:4}function OI(r){return hi(r,()=>r.createTexture(),"Unable to create WebGLTexture.")}function MI(r,e){let t=A().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(r<=0||e<=0){let o=`[${r}x${e}]`;throw new Error("Requested texture size "+o+" is invalid.")}if(r>t||e>t){let o=`[${r}x${e}]`,n=`[${t}x${t}]`;throw new Error("Requested texture size "+o+" greater than WebGL maximum on this browser / GPU "+n+".")}}function LI(r){return hi(r,()=>r.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function jf(r,e,t,o,n,s,a){let i=r.getAttribLocation(e,t);return i===-1?!1:(ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,o)),ce(r,()=>r.vertexAttribPointer(i,n,r.FLOAT,!1,s,a)),ce(r,()=>r.enableVertexAttribArray(i)),!0)}function NR(r,e,t){_R(r,t),ce(r,()=>r.activeTexture(r.TEXTURE0+t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,e))}function pZ(r,e){_R(r,e),ce(r,()=>r.activeTexture(r.TEXTURE0+e)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function BI(r,e,t){return hi(r,()=>r.getUniformLocation(e,t),'uniform "'+t+'" not present in program.')}function zI(r,e,t){return r.getUniformLocation(e,t)}function VI(r,e,t,o){ce(r,()=>NR(r,e,o)),ce(r,()=>r.uniform1i(t,o))}function cZ(r){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,null)),ce(r,()=>r.viewport(0,0,r.canvas.width,r.canvas.height)),ce(r,()=>r.scissor(0,0,r.canvas.width,r.canvas.height))}function Ql(r,e,t){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,t)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,e,0))}function Xf(r,e){ce(r,()=>r.bindFramebuffer(r.FRAMEBUFFER,e)),ce(r,()=>r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,null,0))}function Tc(r){let e=r.checkFramebufferStatus(r.FRAMEBUFFER);if(e!==r.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+TR(r,e))}function TR(r,e){switch(e){case r.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case r.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case r.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${e}`}}function hi(r,e,t){let o=ce(r,()=>e());if(o==null)throw new Error(t);return o}function _R(r,e){let t=r.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,o=e+r.TEXTURE0;if(ot){let n=`[gl.TEXTURE0, gl.TEXTURE${t}]`;throw new Error(`textureUnit must be in ${n}.`)}}function gi(r,e=2){return y.sizeFromShape(r.slice(0,r.length-e))}function xi(r){if(r.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[r.length>1?r[r.length-2]:1,r[r.length-1]]}function _c(r){let e=[1,1,1];return r.length===0||r.length===1&&r[0]===1||(e=[gi(r),...xi(r)]),e}function WI(r,e=!1){let t=A().getNumber("WEBGL_MAX_TEXTURE_SIZE"),o=A().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");o===1/0&&A().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(o=t/2),e&&(t=t*2,o=o*2,r=r.map((i,p)=>p>=r.length-2?y.nearestLargerEven(r[p]):r[p]),r.length===1&&(r=[2,r[0]])),r.length!==2&&(r=y.squeezeShape(r).newShape);let n=y.sizeFromShape(r),s=null;r.length<=1&&n<=t?s=[1,n]:r.length===2&&r[0]<=t&&r[1]<=t?s=r:r.length===3&&r[0]*r[1]<=t&&r[2]<=t?s=[r[0]*r[1],r[2]]:r.length===3&&r[0]<=t&&r[1]*r[2]<=t?s=[r[0],r[1]*r[2]]:r.length===4&&r[0]*r[1]*r[2]<=t&&r[3]<=t?s=[r[0]*r[1]*r[2],r[3]]:r.length===4&&r[0]<=t&&r[1]*r[2]*r[3]<=t&&(s=[r[0],r[1]*r[2]*r[3]]);let a=s!=null&&Math.max(...s)>o&&Math.min(...s)<=(e?2:1)&&Math.min(...s)>0;if(s==null||a)if(e){let i=gi(r),p=2,u=2;r.length&&([p,u]=xi(r)),n=i*(p/2)*(u/2),s=y.sizeToSquarishShape(n).map(c=>c*2)}else s=y.sizeToSquarishShape(n);return s}function Gf(r){return r%2===0}function xu(r,e){if(r=r.slice(-2),e=e.slice(-2),y.arraysEqual(r,e)||!r.length||!e.length||r[0]===0||r[1]===0||e[0]===0||e[1]===0)return!0;if(r.length!==e.length){let t=r[r.length-1],o=e[e.length-1];if(t===o||Gf(t)&&Gf(o)&&(r[0]===1||e[0]===1))return!0}return r[1]===e[1]&&Gf(r[0])&&Gf(e[0])}var Hf,Kf;function UI(r){if(Hf==null){let e=Kr(r);Hf=e.getParameter(e.MAX_TEXTURE_SIZE)}return Hf}function lZ(){Hf=null}function mZ(){Kf=null}function GI(r){if(Kf==null){let e=Kr(r);Kf=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Kf)}function HI(r){if(r===0)return 0;let e,t=Kr(r);return qr(t,"EXT_disjoint_timer_query_webgl2")&&r===2?e=2:qr(t,"EXT_disjoint_timer_query")?e=1:e=0,e}function qr(r,e){return r.getExtension(e)!=null}function Yf(r){try{if(Kr(r)!=null)return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function KI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,"OES_texture_float"))return!1}else if(!qr(e,"EXT_color_buffer_float"))return!1;return _I(e)}function qI(r){if(r===0)return!1;let e=Kr(r);if(r===1){if(!qr(e,"OES_texture_float")||!qr(e,"WEBGL_color_buffer_float"))return!1}else{if(qr(e,"EXT_color_buffer_float"))return _I(e);let o="EXT_color_buffer_half_float";if(qr(e,o)){let n=e.getExtension(o);return dZ(e,n)}return!1}return _I(e)}function _I(r){let e=Xl(r),t=r.createTexture();r.bindTexture(r.TEXTURE_2D,t),r.texImage2D(r.TEXTURE_2D,0,e.internalFormatFloat,1,1,0,e.textureFormatFloat,e.textureTypeFloat,null);let s=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,s),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t,0);let a=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(t),r.deleteFramebuffer(s),a}function dZ(r,e){let t=Xl(r,e),o=r.createTexture();r.bindTexture(r.TEXTURE_2D,o),r.texImage2D(r.TEXTURE_2D,0,t.internalFormatHalfFloat,1,1,0,t.textureFormatFloat,t.textureTypeHalfFloat,null);let a=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,a),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,o,0);let i=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(o),r.deleteFramebuffer(a),i}function jI(r){return r!==2?!1:Kr(r).fenceSync!=null}function Vs(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGL backend.`)})}var Se=A();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>Yf(2)?2:Yf(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>UI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>GI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let r=Se.getNumber("WEBGL_VERSION");return r===0?0:HI(r)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!eu.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>KI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>qI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>jI(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,r=>{if(typeof r!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${r}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>eu.isMobile()?1:-1,r=>{if(typeof r!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${r}.`);if(r<0&&r!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${r}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));Se.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);Se.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);Se.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);Se.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function It(){let r,e,t,o,n,s,a,i,p,u;return A().getNumber("WEBGL_VERSION")===2?(r="#version 300 es",e="in",t="out",o="in",n="texture",s="outputColor",a="out vec4 outputColor;",i=A().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; @@ -100,15 +100,15 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } - `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Qs(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function Ip(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function A9(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function fD(r,e,t="index"){let o=r.map((s,a)=>a),n=A9(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function Pl(r){let e=y.computeStrides(r).map(t=>t.toString());return` + `),{version:r,attribute:e,varyingVs:t,varyingFs:o,texture2D:n,output:s,defineOutput:a,defineSpecialNaN:i,defineSpecialInf:p,defineRound:u}}function Ws(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / ${n}`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * ${n}`:`index -= ${r[s]} * ${n}`;return`${a}; ${i};`}).join("")}function xp(r,e,t="index"){let o=y.computeStrides(e);return o.map((n,s)=>{let a=`int ${r[s]} = ${t} / outShapeStrides[${s}]`,i=s===o.length-1?`int ${r[s+1]} = ${t} - ${r[s]} * outShapeStrides[${s}]`:`index -= ${r[s]} * outShapeStrides[${s}]`;return`${a}; ${i};`}).join("")}function fZ(r,e){let t=r.length,o=r.map(s=>`${e}[${s}]`),n=new Array(t-1);n[t-2]=o[t-1];for(let s=t-3;s>=0;--s)n[s]=`(${n[s+1]} * ${o[s+1]})`;return n}function ER(r,e,t="index"){let o=r.map((s,a)=>a),n=fZ(o,e);return n.map((s,a)=>{let i=`int ${r[a]} = ${t} / ${n[a]}`,p=a===n.length-1?`int ${r[a+1]} = ${t} - ${r[a]} * ${n[a]}`:`index -= ${r[a]} * ${n[a]}`;return`${i}; ${p};`}).join("")}function $c(r){let e=y.computeStrides(r).map(t=>t.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${e[0]} + coords.y * ${e[1]} + coords.z; } -`}function Ol(){return` +`}function Rc(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } -`}var uh=` +`}var Qf=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; @@ -147,22 +147,22 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return c / 255.0; } -`;var{getBroadcastDims:hD}=C;function gD(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:""};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=ph(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push("uniform int outShape;");break;case 2:o.push("uniform ivec2 outShape;"),o.push("uniform int outShapeStrides;");break;case 3:o.push("uniform ivec3 outShape;"),o.push("uniform ivec2 outShapeStrides;");break;case 4:o.push("uniform ivec4 outShape;"),o.push("uniform ivec3 outShapeStrides;");break;default:break}o.push("uniform ivec2 outTexShape;")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let n=o.join(` -`),s=r.map(d=>F9(d,e,t.packedInputs,t.enableShapeUniforms)).join(` -`),a=e.texShape,i=kt(),p=M9(i),u,l,c=z9(i);return e.isPacked?(u=P9(e.logicalShape,a,t.enableShapeUniforms),l=B9(i)):(u=O9(e.logicalShape,a,t.enableShapeUniforms),l=L9(i)),t.packedInputs&&(c+=G9),[c,p,l,n,u,s,t.userCode].join(` -`)}function Ll(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return rJ(r,e);case 1:return nJ(r,e);case 2:return aJ(r,e);case 3:return uJ(r,e);case 4:return lJ(r,e);case 5:return cJ(r);case 6:return mJ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function xD(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return tJ(r);case 1:return oJ(r,e);case 2:return sJ(r,e);case 3:return iJ(r,e);default:return pJ(r,e)}}function F9(r,e,t=!1,o){let n="";t?n+=xD(r,o):n+=Ll(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=dJ(r,e):n+=fJ(r,e)),n}function P9(r,e,t){switch(r.length){case 0:return yD();case 1:return H9(r,e,t);case 2:return J9(r,e,t);case 3:return q9(r,e,t);default:return X9(r,e,t)}}function O9(r,e,t){switch(r.length){case 0:return yD();case 1:return K9(r,e,t);case 2:return eJ(r,e,t);case 3:return j9(r,e,t);case 4:return Y9(r,e,t);case 5:return Q9(r,e);case 6:return Z9(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function M9(r){return` +`;var{getBroadcastDims:$R}=w;function RR(r,e,t){let o=[];if(r.forEach(d=>{let f=y.sizeFromShape(d.shapeInfo.logicalShape);if(d.shapeInfo.isUniform?o.push(`uniform float ${d.name}${f>1?`[${f}]`:""};`):(o.push(`uniform sampler2D ${d.name};`),o.push(`uniform int offset${d.name};`)),t.enableShapeUniforms){let{uniformShape:h}=Zf(t.packedInputs,d.shapeInfo.logicalShape,d.shapeInfo.texShape);switch(h.length){case 1:o.push(`uniform int ${d.name}Shape;`);break;case 2:o.push(`uniform ivec2 ${d.name}Shape;`);break;case 3:o.push(`uniform ivec3 ${d.name}Shape;`);break;case 4:o.push(`uniform ivec4 ${d.name}Shape;`);break;default:break}o.push(`uniform ivec2 ${d.name}TexShape;`)}}),t.enableShapeUniforms){switch(e.logicalShape.length){case 1:o.push("uniform int outShape;");break;case 2:o.push("uniform ivec2 outShape;"),o.push("uniform int outShapeStrides;");break;case 3:o.push("uniform ivec3 outShape;"),o.push("uniform ivec2 outShapeStrides;");break;case 4:o.push("uniform ivec4 outShape;"),o.push("uniform ivec3 outShapeStrides;");break;default:break}o.push("uniform ivec2 outTexShape;")}t.customUniforms&&t.customUniforms.forEach(d=>{o.push(`uniform ${d.type} ${d.name}${d.arrayIndex?`[${d.arrayIndex}]`:""};`)});let n=o.join(` +`),s=r.map(d=>hZ(d,e,t.packedInputs,t.enableShapeUniforms)).join(` +`),a=e.texShape,i=It(),p=yZ(i),u,c,l=wZ(i);return e.isPacked?(u=gZ(e.logicalShape,a,t.enableShapeUniforms),c=CZ(i)):(u=xZ(e.logicalShape,a,t.enableShapeUniforms),c=bZ(i)),t.packedInputs&&(l+=kZ),[l,p,c,n,u,s,t.userCode].join(` +`)}function Ac(r,e=!1){let t=r.shapeInfo.logicalShape;switch(t.length){case 0:return MZ(r,e);case 1:return BZ(r,e);case 2:return VZ(r,e);case 3:return UZ(r,e);case 4:return HZ(r,e);case 5:return KZ(r);case 6:return qZ(r);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function DR(r,e){switch(r.shapeInfo.logicalShape.length){case 0:return OZ(r);case 1:return LZ(r,e);case 2:return zZ(r,e);case 3:return WZ(r,e);default:return GZ(r,e)}}function hZ(r,e,t=!1,o){let n="";t?n+=DR(r,o):n+=Ac(r,o);let s=r.shapeInfo.logicalShape,a=e.logicalShape;return s.length<=a.length&&(t?n+=jZ(r,e):n+=XZ(r,e)),n}function gZ(r,e,t){switch(r.length){case 0:return AR();case 1:return NZ(r,e,t);case 2:return FZ(r,e,t);case 3:return _Z(r,e,t);default:return $Z(r,e,t)}}function xZ(r,e,t){switch(r.length){case 0:return AR();case 1:return TZ(r,e,t);case 2:return PZ(r,e,t);case 3:return EZ(r,e,t);case 4:return RZ(r,e,t);case 5:return DZ(r,e);case 6:return AZ(r,e);default:throw new Error(`${r.length}-D output sampling is not yet supported`)}}function yZ(r){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${r.texture2D}(textureSampler, uv).r; } - `}function L9(r){return` + `}function bZ(r){return` void setOutput(float val) { ${r.output} = vec4(val, 0, 0, 0); } - `}function B9(r){return` + `}function CZ(r){return` void setOutput(vec4 val) { ${r.output} = val; } - `}function z9(r){return`${r.version} + `}function wZ(r){return`${r.version} precision highp float; precision highp int; precision highp sampler2D; @@ -217,10 +217,10 @@ Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dram return fract((p3.x + p3.y) * p3.z); } - ${V9} - ${W9} - ${U9} - `}var V9=` + ${SZ} + ${IZ} + ${vZ} + `}var SZ=` vec2 uvFromFlat(int texNumR, int texNumC, int index) { int texR = index / texNumC; int texC = index - texR * texNumC; @@ -232,7 +232,7 @@ vec2 packedUVfrom1D(int texNumR, int texNumC, int index) { int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,W9=` +`,IZ=` vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texNumC, int row, int col) { int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2); @@ -240,7 +240,7 @@ vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR, int texC = texelIndex - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,U9=` +`,vZ=` vec2 packedUVfrom3D(int texNumR, int texNumC, int texelsInBatch, int texelsInLogicalRow, int b, int row, int col) { @@ -249,7 +249,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int texC = index - texR * texNumC; return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR); } -`,G9=` +`,kZ=` float getChannel(vec4 frag, vec2 innerDims) { vec2 modCoord = mod(innerDims, 2.); return modCoord.x == 0. ? @@ -260,11 +260,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float modCoord = mod(float(dim), 2.); return modCoord == 0. ? frag.r : frag.g; } -`;function yD(){return` +`;function AR(){return` int getOutputCoords() { return 0; } - `}function H9(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?` + `}function NZ(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];return o[0]===1?t?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } @@ -293,7 +293,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${o[0]}, ${o[1]})); return 2 * (resTexRC.x * ${o[1]} + resTexRC.y); } - `}function K9(r,e,t){return e[0]===1?t?` + `}function TZ(r,e,t){return e[0]===1?t?` int getOutputCoords() { return int(resultUV.x * float(outTexShape[1])); } @@ -321,7 +321,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2(${e[0]}, ${e[1]})); return resTexRC.x * ${e[1]} + resTexRC.y; } - `}function q9(r,e,t){if(t)return` + `}function _Z(r,e,t){if(t)return` ivec3 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0)); @@ -352,15 +352,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec3(b, r, c); } - `}function j9(r,e,t){if(t)return` + `}function EZ(r,e,t){if(t)return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r","c","d"],r)} + ${xp(["r","c","d"],r)} return ivec3(r, c, d); } -`;let o=Qs(["r","c","d"],r);return` +`;let o=Ws(["r","c","d"],r);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -368,7 +368,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${o} return ivec3(r, c, d); } - `}function X9(r,e,t){if(t)return` + `}function $Z(r,e,t){if(t)return` ivec4 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); ivec2 resTexRC = ivec2(resultUV.yx * @@ -409,15 +409,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec${r.length}(${p}); } - `}function Y9(r,e,t){if(t)return` + `}function RZ(r,e,t){if(t)return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); int index = resTexRC.x * outTexShape[1] + resTexRC.y; - ${Ip(["r","c","d","d2"],r)} + ${xp(["r","c","d","d2"],r)} return ivec4(r, c, d, d2); } - `;let o=Qs(["r","c","d","d2"],r);return` + `;let o=Ws(["r","c","d","d2"],r);return` ivec4 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -425,7 +425,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${o} return ivec4(r, c, d, d2); } - `}function Q9(r,e){let t=Qs(["r","c","d","d2","d3"],r);return` + `}function DZ(r,e){let t=Ws(["r","c","d","d2","d3"],r);return` ivec5 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -437,7 +437,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec5 outShape = ivec5(r, c, d, d2, d3); return outShape; } - `}function Z9(r,e){let t=Qs(["r","c","d","d2","d3","d4"],r);return` + `}function AZ(r,e){let t=Ws(["r","c","d","d2","d3","d4"],r);return` ivec6 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${e[0]}, ${e[1]})); @@ -448,7 +448,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ivec6 result = ivec6(r, c, d, d2, d3, d4); return result; } - `}function J9(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(y.arraysEqual(r,e))return t?` + `}function FZ(r,e,t){let o=[Math.ceil(e[0]/2),Math.ceil(e[1]/2)];if(y.arraysEqual(r,e))return t?` ivec2 getOutputCoords() { ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0)); return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1])); @@ -481,7 +481,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, return ivec2(r, c); } - `}function eJ(r,e,t){return y.arraysEqual(r,e)?t?` + `}function PZ(r,e,t){return y.arraysEqual(r,e)?t?` ivec2 getOutputCoords() { return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1])); } @@ -535,15 +535,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, int c = index - r * ${r[1]}; return ivec2(r, c); } - `}function vp(r){return`offset${r}`}function tJ(r){let e=r.name,t="get"+e.charAt(0).toUpperCase()+e.slice(1),o=kt();return` + `}function yp(r){return`offset${r}`}function OZ(r){let e=r.name,t="get"+e.charAt(0).toUpperCase()+e.slice(1),o=It();return` vec4 ${t}() { return ${o.texture2D}(${e}, halfCR); } - `}function rJ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return`float ${o}() {return ${t};}`;let[n,s]=r.shapeInfo.texShape;if(n===1&&s===1)return` + `}function MZ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return`float ${o}() {return ${t};}`;let[n,s]=r.shapeInfo.texShape;if(n===1&&s===1)return` float ${o}() { return sampleTexture(${t}, halfCR); } - `;let a=vp(t);if(e)return` + `;let a=yp(t);if(e)return` float ${o}() { vec2 uv = uvFromFlat(${t}TexShape[0], ${t}TexShape[1], ${a}); return sampleTexture(${t}, uv); @@ -553,7 +553,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${i}, ${p}, ${a}); return sampleTexture(${t}, uv); } - `}function oJ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1),n=r.shapeInfo.texShape,s=kt();if(e)return` + `}function LZ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1),n=r.shapeInfo.texShape,s=It();if(e)return` vec4 ${o}(int index) { ivec2 packedTexShape = ivec2(ceil(float(${t}TexShape[0]) / 2.0), ceil(float(${t}TexShape[1]) / 2.0)); vec2 uv = packedUVfrom1D( @@ -566,15 +566,15 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${a[0]}, ${a[1]}, index); return ${s.texture2D}(${t}, uv); } - `}function nJ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return` + `}function BZ(r,e){let t=r.name,o="get"+t.charAt(0).toUpperCase()+t.slice(1);if(r.shapeInfo.isUniform)return` float ${o}(int index) { - ${Bl(r)} + ${Fc(r)} } `;let n=r.shapeInfo.texShape,s=n[0],a=n[1];if(a===1&&s===1)return` float ${o}(int index) { return sampleTexture(${t}, halfCR); } - `;let i=vp(t);return a===1?e?` + `;let i=yp(t);return a===1?e?` float ${o}(int index) { vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${t}TexShape[0])); return sampleTexture(${t}, uv); @@ -604,7 +604,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = uvFromFlat(${s}, ${a}, index + ${i}); return sampleTexture(${t}, uv); } - `}function sJ(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=kt();if(s!=null&&y.arraysEqual(t,s))return e?` + `}function zZ(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape,a=s[0],i=s[1],p=It();if(s!=null&&y.arraysEqual(t,s))return e?` vec4 ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); @@ -623,12 +623,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col); return ${p.texture2D}(${o}, uv); } - `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],l=Math.ceil(t[1]/2);return` + `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],c=Math.ceil(t[1]/2);return` vec4 ${n}(int row, int col) { - vec2 uv = packedUVfrom2D(${l}, ${u[0]}, ${u[1]}, row, col); + vec2 uv = packedUVfrom2D(${c}, ${u[0]}, ${u[1]}, row, col); return ${p.texture2D}(${o}, uv); } - `}function aJ(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape;if(s!=null&&y.arraysEqual(t,s)){if(e)return` + `}function VZ(r,e){let t=r.shapeInfo.logicalShape,o=r.name,n="get"+o.charAt(0).toUpperCase()+o.slice(1),s=r.shapeInfo.texShape;if(s!=null&&y.arraysEqual(t,s)){if(e)return` float ${n}(int row, int col) { vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}TexShape[1], ${o}TexShape[0]); return sampleTexture(${o}, uv); @@ -638,60 +638,60 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${m}.0); return sampleTexture(${o}, uv); } - `}let{newShape:a,keptDims:i}=y.squeezeShape(t),p=a;if(p.length=1?l="coords = 0;":l=i.map(b=>`coords.${c[b+u]} = 0;`).join(` -`);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,w)=>`coords.${c[w+u]}`).join(", ");let d="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=` + `}function jZ(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=r.shapeInfo.logicalShape.length,a=e.logicalShape.length,i=$R(r.shapeInfo.logicalShape,e.logicalShape),p=Re(a),u=a-s,c,l=["x","y","z","w","u","v"];s===0?c="":a<2&&i.length>=1?c="coords = 0;":c=i.map(b=>`coords.${l[b+u]} = 0;`).join(` +`);let m="";a<2&&s>0?m="coords":m=r.shapeInfo.logicalShape.map((b,C)=>`coords.${l[C+u]}`).join(", ");let d="return outputValue;",h=y.sizeFromShape(r.shapeInfo.logicalShape)===1,x=y.sizeFromShape(e.logicalShape)===1;if(s===1&&!h&&!x)d=` return vec4(outputValue.xy, outputValue.xy); `;else if(h&&!x)a===1?d=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:d=` return vec4(outputValue.x); - `;else if(i.length){let b=s-2,w=s-1;i.indexOf(b)>-1&&i.indexOf(w)>-1?d="return vec4(outputValue.x);":i.indexOf(b)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(w)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);")}return` + `;else if(i.length){let b=s-2,C=s-1;i.indexOf(b)>-1&&i.indexOf(C)>-1?d="return vec4(outputValue.x);":i.indexOf(b)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(C)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${n}() { ${p} coords = getOutputCoords(); - ${l} + ${c} vec4 outputValue = get${o}(${m}); ${d} } - `}function fJ(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return` + `}function XZ(r,e){let t=r.name,o=t.charAt(0).toUpperCase()+t.slice(1),n="get"+o+"AtOutCoords",s=e.texShape,a=r.shapeInfo.texShape,i=r.shapeInfo.logicalShape.length,p=e.logicalShape.length;if(!r.shapeInfo.isUniform&&i===p&&r.shapeInfo.flatOffset==null&&y.arraysEqual(a,s))return` float ${n}() { return sampleTexture(${t}, resultUV); } - `;let u=Re(p),l=hD(r.shapeInfo.logicalShape,e.logicalShape),c=p-i,m,d=["x","y","z","w","u","v"];i===0?m="":p<2&&l.length>=1?m="coords = 0;":m=l.map(h=>`coords.${d[h+c]} = 0;`).join(` -`);let f="";return p<2&&i>0?f="coords":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+c]}`).join(", "),` + `;let u=Re(p),c=$R(r.shapeInfo.logicalShape,e.logicalShape),l=p-i,m,d=["x","y","z","w","u","v"];i===0?m="":p<2&&c.length>=1?m="coords = 0;":m=c.map(h=>`coords.${d[h+l]} = 0;`).join(` +`);let f="";return p<2&&i>0?f="coords":f=r.shapeInfo.logicalShape.map((h,g)=>`coords.${d[g+l]}`).join(", "),` float ${n}() { ${u} coords = getOutputCoords(); ${m} return get${o}(${f}); } - `}function Re(r){if(r<=1)return"int";if(r===2)return"ivec2";if(r===3)return"ivec3";if(r===4)return"ivec4";if(r===5)return"ivec5";if(r===6)return"ivec6";throw Error(`GPU for rank ${r} is not yet supported`)}function ph(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(", ")}function CD(r,e,t,o){let n=t.map((l,c)=>{let m={logicalShape:l.shape,texShape:l.isUniform?null:l.texData.texShape,isUniform:l.isUniform,isPacked:l.isUniform?!1:l.texData.isPacked,flatOffset:null};return l.texData!=null&&l.texData.slice!=null&&l.texData.slice.flatOffset>0&&(m.flatOffset=l.texData.slice.flatOffset),{name:e.variableNames[c],shapeInfo:m}}),s=n.map(l=>l.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=gD(n,a,e),p=GI(r.gl,i),u=r.createProgram(p);return A().get("ENGINE_COMPILE_ONLY")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},u0(r,e,u)))}function u0(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,"NAN",!1),A().getNumber("WEBGL_VERSION")===1&&(p=r.getUniformLocation(t,"INFINITY",!1));let l=!1;for(let c of e.variableNames){let m={name:c,uniform:r.getUniformLocation(t,c,l),offset:r.getUniformLocation(t,`offset${c}`,l)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${c}Shape`,l),m.texShape=r.getUniformLocation(t,`${c}TexShape`,l)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,"outShape",l),i=r.getUniformLocation(t,"outShapeStrides",l),a=r.getUniformLocation(t,"outTexShape",l)),e.customUniforms)for(let c of e.customUniforms)n.push(r.getUniformLocation(t,c.name,l));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function bD(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function wD(r,e,t,o,n){e.program.enableShapeUniforms||(bD(e.inShapeInfos,t),bD([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),r.bindVertexArray(e.webGLProgram.vao),A().getNumber("WEBGL_VERSION")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:l,keptDims:c}=ph(r.packedInputs,a.shape,p),m="",d="",f="";if(l.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(l.length===2&&!r.packedInputs)d=`${l[0]>1}_${l[1]>1}`;else if(l.length>2&&!r.packedInputs){let k=y.computeStrides(l);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=l.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=C.getBroadcastDims(a.shape,t.shape),w=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||l.length>2?"":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${w}_${u?c:""}_${l.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`}else{let p=a.isUniform?"uniform":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+="_"+o+"_"+n+`${A().getNumber("WEBGL_VERSION")}`,s}function lt(r){return A().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var lh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Iu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}function Re(r){if(r<=1)return"int";if(r===2)return"ivec2";if(r===3)return"ivec3";if(r===4)return"ivec4";if(r===5)return"ivec5";if(r===6)return"ivec6";throw Error(`GPU for rank ${r} is not yet supported`)}function Zf(r,e,t){let{newShape:o,keptDims:n}=y.squeezeShape(e),s=e.length,a=r&&s===3&&e[0]===1,i=a?e.slice(1):o,p=!r&&s>1&&!y.arraysEqual(e,t)&&o.lengthr[t]).join(", ")}function PR(r,e,t,o){let n=t.map((c,l)=>{let m={logicalShape:c.shape,texShape:c.isUniform?null:c.texData.texShape,isUniform:c.isUniform,isPacked:c.isUniform?!1:c.texData.isPacked,flatOffset:null};return c.texData!=null&&c.texData.slice!=null&&c.texData.slice.flatOffset>0&&(m.flatOffset=c.texData.slice.flatOffset),{name:e.variableNames[l],shapeInfo:m}}),s=n.map(c=>c.shapeInfo),a={logicalShape:o.shape,texShape:o.texData.texShape,isUniform:!1,isPacked:o.texData.isPacked,flatOffset:null},i=RR(n,a,e),p=RI(r.gl,i),u=r.createProgram(p);return A().get("ENGINE_COMPILE_ONLY")?{program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(r.buildVao(u),Object.assign({program:e,fragmentShader:p,source:i,webGLProgram:u,inShapeInfos:s,outShapeInfo:a},XI(r,e,u)))}function XI(r,e,t){let o=[],n=[],s,a,i,p=null,u=null;u=r.getUniformLocation(t,"NAN",!1),A().getNumber("WEBGL_VERSION")===1&&(p=r.getUniformLocation(t,"INFINITY",!1));let c=!1;for(let l of e.variableNames){let m={name:l,uniform:r.getUniformLocation(t,l,c),offset:r.getUniformLocation(t,`offset${l}`,c)};e.enableShapeUniforms&&(m.shape=r.getUniformLocation(t,`${l}Shape`,c),m.texShape=r.getUniformLocation(t,`${l}TexShape`,c)),o.push(m)}if(e.enableShapeUniforms&&(s=r.getUniformLocation(t,"outShape",c),i=r.getUniformLocation(t,"outShapeStrides",c),a=r.getUniformLocation(t,"outTexShape",c)),e.customUniforms)for(let l of e.customUniforms)n.push(r.getUniformLocation(t,l.name,c));return{variablesLocations:o,customUniformLocations:n,infLoc:p,nanLoc:u,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:a}}function FR(r,e){if(r.length!==e.length)throw Error(`Binary was compiled with ${r.length} inputs, but was executed with ${e.length} inputs`);r.forEach((t,o)=>{let n=t.logicalShape,s=e[o],a=s.shape;if(!y.arraysEqual(n,a))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${n} and ${a} must match`);if(t.isUniform&&s.isUniform)return;let i=t.texShape,p=s.isUniform?null:s.texData.texShape;if(!y.arraysEqual(i,p))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${p} must match`)})}function OR(r,e,t,o,n){e.program.enableShapeUniforms||(FR(e.inShapeInfos,t),FR([e.outShapeInfo],[o]));let s=o.texData.texture,a=o.texData.texShape;o.texData.isPacked?r.setOutputPackedMatrixTexture(s.texture,a[0],a[1]):r.setOutputMatrixTexture(s.texture,a[0],a[1]),r.setProgram(e.webGLProgram),r.bindVertexArray(e.webGLProgram.vao),A().getNumber("WEBGL_VERSION")===1&&e.infLoc!==null&&r.gl.uniform1f(e.infLoc,1/0),e.nanLoc!==null&&r.gl.uniform1f(e.nanLoc,NaN);for(let p=0;p{let i=a.texData!=null&&a.texData.slice!=null&&a.texData.slice.flatOffset>0;if(r.enableShapeUniforms&&!a.isUniform){let p=a.texData.texShape,{useSqueezeShape:u,uniformShape:c,keptDims:l}=Zf(r.packedInputs,a.shape,p),m="",d="",f="";if(c.length===1&&r.packedInputs){let k=[Math.ceil(p[0]/2),Math.ceil(p[1]/2)];m=`${k[0]>1}_${k[1]>1}`}else if(c.length===2&&!r.packedInputs)d=`${c[0]>1}_${c[1]>1}`;else if(c.length>2&&!r.packedInputs){let k=y.computeStrides(c);f=`${k[0]===p[1]}_${k[k.length-1]===p[1]}`}let h=a.shape.length,g=c.length===2&&y.arraysEqual(a.shape,p),x=y.sizeFromShape(a.shape)===1,b=w.getBroadcastDims(a.shape,t.shape),C=!r.packedInputs&&h===t.shape.length&&y.arraysEqual(p,t.texData.texShape),S=r.packedInputs||c.length>2?"":`${p[0]>1}_${p[1]>1}`;o+=`${h}_${C}_${u?l:""}_${c.length}_${x}_${b}_${g}_${m}_${d}_${f}_${S}_${i}`}else{let p=a.isUniform?"uniform":a.texData.texShape;o+=`${a.shape}_${p}_${i}`}});let n=r.userCode,s=r.constructor.name;return s+="_"+o+"_"+n+`${A().getNumber("WEBGL_VERSION")}`,s}function ut(r){return A().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&r<=4}var Jf=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ip(["r","c","d"],e):Qs(["r","c","d"],e)} + ${this.enableShapeUniforms?xp(["r","c","d"],e):Ws(["r","c","d"],e)} return ivec3(r, c, d); } @@ -996,9 +996,9 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}};var ch=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Iu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}};var eh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=gu.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=It();this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { - ${this.enableShapeUniforms?Ip(["r","c","d"],e):Qs(["r","c","d"],e)} + ${this.enableShapeUniforms?xp(["r","c","d"],e):Ws(["r","c","d"],e)} return ivec3(r, c, d); } @@ -1016,26 +1016,26 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${t.output} = result; } - `}};var mh=class{constructor(e){this.variableNames=["A"],this.outTexUsage=hr.DOWNLOAD;let t=kt();this.outputShape=e,this.userCode=` - ${uh} + `}};var th=class{constructor(e){this.variableNames=["A"],this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=` + ${Qf} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } - `}};var dh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=hr.DOWNLOAD;let t=kt();this.outputShape=e,this.userCode=` - ${uh} + `}};var rh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=mr.DOWNLOAD;let t=It();this.outputShape=e,this.userCode=` + ${Qf} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } - `}};var xJ={R:0,G:1,B:2,A:3},sm=class{constructor(e,t=!1,o="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=kt();this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let s="result";t&&(s="floor(result * 255. + 0.5)");let a="";for(let i=0;ix0,createBufferFromOutputTexture:()=>C0,createFloat16MatrixTexture:()=>d0,createFloat16PackedMatrixTexture:()=>g0,createFloat32MatrixTexture:()=>m0,createIndexBuffer:()=>c0,createPackedMatrixTexture:()=>h0,createUnsignedBytesMatrixTexture:()=>f0,createVertexBuffer:()=>l0,createVertexShader:()=>p0,downloadByteEncodedFloatMatrixFromOutputTexture:()=>S0,downloadFloat32MatrixFromBuffer:()=>w0,downloadMatrixFromPackedOutputTexture:()=>v0,downloadPackedMatrixFromBuffer:()=>I0,getInternalFormatForFloat16MatrixTexture:()=>gh,getInternalFormatForFloat16PackedMatrixTexture:()=>bh,getInternalFormatForFloat32MatrixTexture:()=>hh,getInternalFormatForPackedMatrixTexture:()=>yh,getInternalFormatForUnsignedBytesMatrixTexture:()=>xh,uploadDenseMatrixToTexture:()=>y0,uploadPixelDataToTexture:()=>b0});function p0(r){let e=kt(),t=`${e.version} + `}};var mv={};qe(mv,{bindVertexProgramAttributeStreams:()=>nv,createBufferFromOutputTexture:()=>iv,createFloat16MatrixTexture:()=>ev,createFloat16PackedMatrixTexture:()=>ov,createFloat32MatrixTexture:()=>JI,createIndexBuffer:()=>ZI,createPackedMatrixTexture:()=>rv,createUnsignedBytesMatrixTexture:()=>tv,createVertexBuffer:()=>QI,createVertexShader:()=>YI,downloadByteEncodedFloatMatrixFromOutputTexture:()=>pv,downloadFloat32MatrixFromBuffer:()=>uv,downloadMatrixFromPackedOutputTexture:()=>lv,downloadPackedMatrixFromBuffer:()=>cv,getInternalFormatForFloat16MatrixTexture:()=>sh,getInternalFormatForFloat16PackedMatrixTexture:()=>uh,getInternalFormatForFloat32MatrixTexture:()=>nh,getInternalFormatForPackedMatrixTexture:()=>ih,getInternalFormatForUnsignedBytesMatrixTexture:()=>ah,uploadDenseMatrixToTexture:()=>sv,uploadPixelDataToTexture:()=>av});function YI(r){let e=It(),t=`${e.version} precision highp float; ${e.attribute} vec3 clipSpacePos; ${e.attribute} vec2 uv; @@ -1107,11 +1107,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; - }`;return UI(r,t)}function l0(r){let e=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return qI(r,e)}function c0(r){let e=new Uint16Array([0,1,2,2,1,3]);return jI(r,e)}function am(r,e,t,o,n,s){YI(e,t);let a=XI(r),i=r.TEXTURE_2D;return ce(r,()=>r.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),A().getNumber("WEBGL_VERSION")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function hh(r){return r.internalFormatFloat}function m0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,hh(o),o.textureFormatFloat,r.FLOAT)}function gh(r){return r.internalFormatHalfFloat}function d0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,gh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function xh(r){return r.downloadTextureFormat}function f0(r,e,t,o){let[n,s]=Sp(e,t);return am(r,n,s,xh(o),r.RGBA,r.UNSIGNED_BYTE)}function yh(r){return r.internalFormatPackedFloat}function h0(r,e,t,o){let[n,s]=Ga(e,t);return am(r,n,s,yh(o),r.RGBA,r.FLOAT)}function bh(r){return r.internalFormatPackedHalfFloat}function g0(r,e,t,o){let[n,s]=Ga(e,t);return am(r,n,s,bh(o),r.RGBA,o.textureTypeHalfFloat)}function x0(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),sh(r,e,"clipSpacePos",t,3,20,0)&&sh(r,e,"uv",t,2,20,12)}function y0(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function b0(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function C0(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function w0(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function S0(r,e,t,o){let[n,s]=Sp(e,t),a=4,i=new Uint8Array(uD(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function I0(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(pD(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function v0(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var kp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,BI(t,e)):this.gl=Zr(t),e=this.gl,A().getNumber("WEBGL_VERSION")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension("OES_vertex_array_object");if(s==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),A().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=Rl(this.gl,s),Jr(this.gl,a))this.textureHalfFloatExtension=Rl(this.gl,a);else if(A().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(o),Jr(this.gl,n))this.colorBufferHalfFloatExtension=Rl(this.gl,n);else if(A().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(o="EXT_color_buffer_float",Jr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(Jr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=l0(this.gl),this.indexBuffer=c0(this.gl),this.framebuffer=QI(this.gl),this.textureConfig=rm(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),m0(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),d0(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),f0(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),b0(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),y0(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),g0(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),h0(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(ah(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>S0(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return I0(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return w0(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=C0(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(A().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>v0(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=p0(t));let o=HI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),KI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&om(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),x0(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&om(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?ZI(this.gl,e,t):JI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),e0(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ga(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&om(this.gl,this.program),Dl(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Rl(this.gl,A().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(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=yJ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;"setTimeoutCustom"in A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),nm(this.gl,e,this.framebuffer),this.debug&&Dl(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(nm(this.gl,this.outputTexture,this.framebuffer),this.debug&&Dl(this.gl)):ah(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;nm(n,e,this.framebuffer),this.debug&&Dl(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}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 yJ(r){let e=0;for(;e`${r}.${t}`)}function At(r,e){return e===1?[r]:N0(r,e)}function fA(r,e){if(r===1)return"rc";let t="";for(let o=0;or.bindTexture(i,a)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MIN_FILTER,r.NEAREST)),ce(r,()=>r.texParameteri(i,r.TEXTURE_MAG_FILTER,r.NEAREST)),A().getNumber("WEBGL_VERSION")===1?ce(r,()=>r.texImage2D(i,0,o,e,t,0,n,s,null)):ce(r,()=>r.texStorage2D(i,1,o,e,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null)),{texture:a,texShape:[t,e]}}function nh(r){return r.internalFormatFloat}function JI(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,nh(o),o.textureFormatFloat,r.FLOAT)}function sh(r){return r.internalFormatHalfFloat}function ev(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,sh(o),o.textureFormatFloat,o.textureTypeHalfFloat)}function ah(r){return r.downloadTextureFormat}function tv(r,e,t,o){let[n,s]=gp(e,t);return Jl(r,n,s,ah(o),r.RGBA,r.UNSIGNED_BYTE)}function ih(r){return r.internalFormatPackedFloat}function rv(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,ih(o),r.RGBA,r.FLOAT)}function uh(r){return r.internalFormatPackedHalfFloat}function ov(r,e,t,o){let[n,s]=Ma(e,t);return Jl(r,n,s,uh(o),r.RGBA,o.textureTypeHalfFloat)}function nv(r,e,t){return ce(r,()=>r.bindBuffer(r.ARRAY_BUFFER,t)),jf(r,e,"clipSpacePos",t,3,20,0)&&jf(r,e,"uv",t,2,20,12)}function sv(r,e,t,o,n,s){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e));let a,i,p;n instanceof Uint8Array?(a=new Uint8Array(t*o*4),i=r.UNSIGNED_BYTE,p=r.RGBA):(a=new Float32Array(t*o*4),i=r.FLOAT,p=s.internalFormatPackedFloat),a.set(n),A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t,o,r.RGBA,i,a)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,p,t,o,0,r.RGBA,i,a)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function av(r,e,t){ce(r,()=>r.bindTexture(r.TEXTURE_2D,e)),t.data instanceof Uint8Array?A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,t.width,t.height,r.RGBA,r.UNSIGNED_BYTE,t.data)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,t.width,t.height,0,r.RGBA,r.UNSIGNED_BYTE,t.data)):A().getNumber("WEBGL_VERSION")===2?ce(r,()=>r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,t)):ce(r,()=>r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,t)),ce(r,()=>r.bindTexture(r.TEXTURE_2D,null))}function iv(r,e,t,o){let n=r.createBuffer();ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,n));let i=4*4*e*t;return ce(r,()=>r.bufferData(r.PIXEL_PACK_BUFFER,i,r.STREAM_READ)),ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,0)),ce(r,()=>r.bindBuffer(r.PIXEL_PACK_BUFFER,null)),n}function uv(r,e,t){let o=r,n=new Float32Array(t);return o.bindBuffer(o.PIXEL_PACK_BUFFER,e),o.getBufferSubData(o.PIXEL_PACK_BUFFER,0,n),o.bindBuffer(o.PIXEL_PACK_BUFFER,null),n}function pv(r,e,t,o){let[n,s]=gp(e,t),a=4,i=new Uint8Array(IR(e*t,a));return ce(r,()=>r.readPixels(0,0,n,s,o.downloadTextureFormat,r.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function cv(r,e,t,o,n,s,a,i){let p=r,u=new Float32Array(vR(s,a));return p.bindBuffer(p.PIXEL_PACK_BUFFER,e),p.getBufferSubData(p.PIXEL_PACK_BUFFER,0,u),p.bindBuffer(p.PIXEL_PACK_BUFFER,null),u}function lv(r,e,t){let o=new Float32Array(e*t*4);return ce(r,()=>r.readPixels(0,0,t,e,r.RGBA,r.FLOAT,o)),o}var bp=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=A().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,NI(t,e)):this.gl=Kr(t),e=this.gl,A().getNumber("WEBGL_VERSION")===2){let s=e;this.createVertexArray=()=>ce(s,()=>s.createVertexArray()),this.bindVertexArray=a=>ce(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>ce(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>ce(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension("OES_vertex_array_object");if(s==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>ce(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>ce(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>ce(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let o="WEBGL_color_buffer_float",n="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),A().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=Nc(this.gl,s),qr(this.gl,a))this.textureHalfFloatExtension=Nc(this.gl,a);else if(A().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(o),qr(this.gl,n))this.colorBufferHalfFloatExtension=Nc(this.gl,n);else if(A().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(o="EXT_color_buffer_float",qr(this.gl,o))this.colorBufferFloatExtension=this.gl.getExtension(o);else if(qr(this.gl,n))this.colorBufferHalfFloatExtension=this.gl.getExtension(n);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=QI(this.gl),this.indexBuffer=ZI(this.gl),this.framebuffer=LI(this.gl),this.textureConfig=Xl(this.gl,this.textureHalfFloatExtension)}get debug(){return A().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;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),JI(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),ev(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),tv(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),av(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,o,n){this.throwIfDisposed(),sv(this.gl,e,t,o,n,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),ov(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),rv(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Xf(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,o){return this.downloadMatrixDriver(e,()=>pv(this.gl,t,o,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,o,n,s,a){return cv(this.gl,e,t,o,n,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return uv(this.gl,e,t)}createBufferFromTexture(e,t,o){this.bindTextureToFrameBuffer(e);let n=iv(this.gl,t,o,this.textureConfig);return this.unbindTextureToFrameBuffer(),n}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,o;if(A().getBool("WEBGL_FENCE_API_ENABLED")){let n=e,s=n.fenceSync(n.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),o=()=>{let a=n.clientWaitSync(s,0,0);return a===n.ALREADY_SIGNALED||a===n.CONDITION_SATISFIED},t=s}else A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),o=()=>this.isQueryAvailable(t,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):o=()=>!0;return{query:t,isFencePassed:o}}downloadMatrixFromPackedTexture(e,t,o){return this.downloadMatrixDriver(e,()=>lv(this.gl,t,o))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=YI(t));let o=DI(t);ce(t,()=>t.attachShader(o,this.vertexShader)),ce(t,()=>t.attachShader(o,e)),AI(t,o);let n=Object.assign(o,{vao:this.createVertexArray()});return this.debug&&Yl(t,n),n}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),nv(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Yl(this.gl,this.program),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,o=!0){return this.throwIfDisposed(),o?BI(this.gl,e,t):zI(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,o){this.throwIfDisposed(),this.throwIfNoProgram(),VI(this.gl,e,t,o)}setOutputMatrixTexture(e,t,o){this.setOutputMatrixTextureDriver(e,o,t)}setOutputPackedMatrixTexture(e,t,o){this.throwIfDisposed();let[n,s]=Ma(t,o);this.setOutputMatrixTextureDriver(e,n,s)}setOutputMatrixWriteRegion(e,t,o,n){this.setOutputMatrixWriteRegionDriver(o,e,n,t)}setOutputPackedMatrixWriteRegion(e,t,o,n){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&Yl(this.gl,this.program),Tc(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Nc(this.gl,A().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(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.createQuery();return o.beginQuery(n.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,o=this.getQueryTimerExtensionWebGL2();t.endQuery(o.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await y.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let o=this.gl;return o.getQueryParameter(e,o.QUERY_RESULT)/1e6}else{let o=this.getQueryTimerExtensionWebGL1();return o.getQueryObjectEXT(e,o.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let o=this.gl,n=this.getQueryTimerExtensionWebGL2(),s=o.getQueryParameter(e,o.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let o=this.getQueryTimerExtensionWebGL1(),n=o.getQueryObjectEXT(e,o.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(o.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=JZ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:o}=this.itemsToPoll[t];o()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let o;"setTimeoutCustom"in A().platform&&(o=A().platform.setTimeoutCustom.bind(A().platform)),y.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,o)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Ql(this.gl,e,this.framebuffer),this.debug&&Tc(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Ql(this.gl,this.outputTexture,this.framebuffer),this.debug&&Tc(this.gl)):Xf(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let o=t();return this.unbindTextureToFrameBuffer(),o}setOutputMatrixTextureDriver(e,t,o){this.throwIfDisposed();let n=this.gl;Ql(n,e,this.framebuffer),this.debug&&Tc(n),this.outputTexture=e,ce(n,()=>n.viewport(0,0,t,o)),ce(n,()=>n.scissor(0,0,t,o))}setOutputMatrixWriteRegionDriver(e,t,o,n){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,o,n))}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 JZ(r){let e=0;for(;e`${r}.${t}`)}function Rt(r,e){return e===1?[r]:dv(r,e)}function ED(r,e){if(r===1)return"rc";let t="";for(let o=0;o= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}), cEdge ? 0. : getA(${t[1]}), rEdge ? 0. : getA(${t[2]}), - rEdge || cEdge ? 0. : getA(${t[3]})`}};var Wl=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let o="";for(let n=0;n<4;n++){let s="thisRC = rc;";n%2===1&&(s+="thisRC.z += 1;"),n>1&&(s+="thisRC.y += 1;"),o+=` + rEdge || cEdge ? 0. : getA(${t[3]})`}};var Mc=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let o="";for(let n=0;n<4;n++){let s="thisRC = rc;";n%2===1&&(s+="thisRC.z += 1;"),n>1&&(s+="thisRC.y += 1;"),o+=` ${s} ${n>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); @@ -1146,8 +1146,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${n>0?"}":""} `}this.userCode=` - ${bJ(t,this.enableShapeUniforms)} - ${this.enableShapeUniforms?Ol():Pl(e)} + ${e9(t,this.enableShapeUniforms)} + ${this.enableShapeUniforms?Rc():$c(e)} void main() { ivec3 rc = getOutputCoords(); @@ -1162,12 +1162,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function bJ(r,e){return` + `}};function e9(r,e){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { - ${e?fD(["r","c","d"],"inputShape"):Qs(["r","c","d"],r)} + ${e?ER(["r","c","d"],"inputShape"):Ws(["r","c","d"],r)} return ivec3(r, c, d); } - `}var vh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=gA(t,o),s=xA(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=hA(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].pop();return this.usedTextures[s].push(p),p}let i;return n===or.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===or.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===or.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===or.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===or.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=gA(o,n),a=xA(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=hA(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],l=u&&u.indexOf(e);if(l==null||l<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u[l]=u[u.length-1],u.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function CJ(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function hA(r,e,t,o,n){let s=wJ(e,o),a;if(n){let[p,u]=Ga(r[0],r[1]);a=p*u}else{let[p,u]=Sp(r[0],r[1]);a=p*u}let i=CJ(t,s);return a*i}function wJ(r,e){switch(r){case or.PACKED_2X2_FLOAT32:return yh(e);case or.PACKED_2X2_FLOAT16:return bh(e);case or.UNPACKED_FLOAT32:return hh(e);case or.UNPACKED_FLOAT16:return gh(e);case or.PACKED_4X1_UNSIGNED_BYTE:return xh(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function SJ(r){return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?or.PACKED_2X2_FLOAT32:or.UNPACKED_FLOAT32:r?or.PACKED_2X2_FLOAT16:or.UNPACKED_FLOAT16}function gA(r,e){if(r===hr.UPLOAD)return or.PACKED_2X2_FLOAT32;if(r===hr.RENDER||r==null)return SJ(e);if(r===hr.DOWNLOAD||r===hr.PIXELS)return or.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function xA(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var nr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` + `}var dh=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,o){let n=RD(t,o),s=DD(e,n,o);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=$D(e,n,this.gpgpu.gl,this.gpgpu.textureConfig,o);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let p=this.freeTextures[s].pop();return this.usedTextures[s].push(p),p}let i;return n===er.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):n===er.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):n===er.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):n===er.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(i),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),i}releaseTexture(e,t,o,n){if(this.freeTextures==null)return;let s=RD(o,n),a=DD(t,s,n);a in this.freeTextures||(this.freeTextures[a]=[]);let i=$D(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,n),p=A().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");p!==-1&&this._numBytesAllocated>p?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(e);if(c==null||c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u[c]=u[u.length-1],u.pop(),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.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function t9(r,e){let t=r;if(e===t.R32F)return 4;if(e===t.R16F)return 2;if(e===t.RGBA32F)return 16;if(e===r.RGBA)return 16;if(e===t.RGBA16F)return 8;if(e===t.RGBA8)return 4;throw new Error(`Unknown internal format ${e}`)}function $D(r,e,t,o,n){let s=r9(e,o),a;if(n){let[p,u]=Ma(r[0],r[1]);a=p*u}else{let[p,u]=gp(r[0],r[1]);a=p*u}let i=t9(t,s);return a*i}function r9(r,e){switch(r){case er.PACKED_2X2_FLOAT32:return ih(e);case er.PACKED_2X2_FLOAT16:return uh(e);case er.UNPACKED_FLOAT32:return nh(e);case er.UNPACKED_FLOAT16:return sh(e);case er.PACKED_4X1_UNSIGNED_BYTE:return ah(e);default:throw new Error(`Unknown physical texture type ${r}`)}}function o9(r){return A().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?r?er.PACKED_2X2_FLOAT32:er.UNPACKED_FLOAT32:r?er.PACKED_2X2_FLOAT16:er.UNPACKED_FLOAT16}function RD(r,e){if(r===mr.UPLOAD)return er.PACKED_2X2_FLOAT32;if(r===mr.RENDER||r==null)return o9(e);if(r===mr.DOWNLOAD||r===mr.PIXELS)return er.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${r}`)}function DD(r,e,t){return`${r[0]}_${r[1]}_${e}_${t}`}var tr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } @@ -1178,11 +1178,11 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}},Gt="if (isnan(x)) return x;",yA="return x;",T0="return abs(x);";var bA="return (x >= 0.0) ? x : (exp(x) - 1.0);",CA=Gt+` + `}},Wt="if (isnan(x)) return x;",AD="return x;",fv="return abs(x);";var FD="return (x >= 0.0) ? x : (exp(x) - 1.0);",PD=Wt+` return (x < 0.0) ? 0.0 : x; -`,wA=Gt+` +`,OD=Wt+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Ha="return x;",SA="return 1.0 / (1.0 + exp(-1.0 * x));";var vA="return x;",kA=` +`,La="return x;",MD="return 1.0 / (1.0 + exp(-1.0 * x));";var BD="return x;",zD=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -1191,7 +1191,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,NA=` +`,VD=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1201,7 +1201,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,TA=` +`,WD=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -1211,7 +1211,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.a = isNaN.a ? x.a : result.a; return result; -`,_A="return 1.0 / (1.0 + exp(-1.0 * x));",Lr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` +`,UD="return 1.0 / (1.0 + exp(-1.0 * x));",Fr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } @@ -1222,17 +1222,17 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(y); } - `}};var kh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.length,o=At("rc",t),n=Re(t),s=fA(t,o),a=o.slice(-2),i=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` + `}};var fh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.length,o=Rt("rc",t),n=Re(t),s=ED(t,o),a=o.slice(-2),i=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${n} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${i})); } - `}};var vJ=Ut.whereImpl,kJ=1e-7,NJ=1e-4,Nh={};function TJ(r){return r in Nh||(Nh[r]={}),Nh[r]}var _J=A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),EJ=600;function $J(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*EJ/1024/1024}var Ul=class r extends mo{nextDataId(){return r.nextDataId++}constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!A().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof kp)t=e;else{let o=Zr(A().getNumber("WEBGL_VERSION"),e);t=new kp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Zr(A().getNumber("WEBGL_VERSION"));t=new kp(o),this.binaryCache=TJ(A().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new vh(this.gpgpu),this.numMBBeforeWarning=$J(),this.texData=new mn(this,cr())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=Al(t),l=new sm(u,!1,a),c=this.runWebGLProgram(l,[i],o,[[n,s]]);return c.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),c.dataId}write(e,t,o){if((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||A().getBool("DEBUG"))&&this.checkNumericalProblems(e),o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:hr.UPLOAD,refCount:1}),n}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,o,n,s){if(A().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:o,dtype:n,values:t,usage:hr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Lr(i,Ha):m=new nr(i,Ha);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return o;let u=this.activeTimers!=null,l;u&&(l=y.now());let c;if(n==="complex64"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);c=C.mergeRealAndImagArrays(m,d)}else c=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-l),this.convertAndCacheOnCPU(e,c)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Lr(n,Ha):f=new nr(n,Ha);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(A().getBool("DEBUG")&&!A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&A().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,l;if(a!=="complex64"&&A().get("WEBGL_BUFFER_SUPPORTED")){l=this.decode(e);let f=this.texData.get(l.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...tm(n))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let c;if(a==="complex64"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];c=C.mergeRealAndImagArrays(h,g)}else if(u==null)c=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);c=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(l!=null&&this.disposeIntermediateTensorInfo(l),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,c),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&cr().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let d;p?d=new Lr(s,Ha):d=new nr(s,Ha);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let l=this.decode(e,t.customTexShape),c=cr().makeTensorFromTensorInfo(l),m=this.texData.get(l.dataId);return Object.assign({tensorRef:c},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ie(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,l)=>({name:a[l],ms:u})).map(u=>`${u.name}: ${u.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 A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));let l=this.texData.get(e);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=_J){return A().getBool("WEBGL_CPU_FORWARD")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return cr().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new kh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new Ih(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[ki(e.shape),...Ni(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[ki(t),...Ni(t)],a=new Wl(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Al(s),p;n?p=new ch(i):p=new lh(i);let u=!0,l=[t!=null?t:tm(i)],c=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,l,u,t);return{dtype:a,shape:s,dataId:c.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===Iu.DENSE){let x=a!=null?a:tm(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],l=t.map(x=>{if(x.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!vu(b.shape,x.shape)){let w=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),w.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let c={shape:i.shape,texData:p,isUniform:!1},m=SD(e,l,c),d=this.getAndSaveBinary(m,()=>CD(this.gpgpu,e,l,c)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||wD(this.gpgpu,d,l,c,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=A().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().getBool("WEBGL_LAZILY_UNPACK")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=A().getBool("DEBUG");A().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?kJ:NJ}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,l;u&&(l=y.now());let c=t.texShape;if(c==null&&(c=t0(o,p),t.texShape=c),s!=null){let m=Al(o),d,f=c[1],h=c[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ga(c[0],c[1])),p?d=new fh(m,g):d=new sm(m,g);let x=g?[h,f]:c,b=this.makeTensorInfo(x,n),w=this.texData.get(b.dataId);g?w.usage=hr.PIXELS:w.usage=hr.UPLOAD,w.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],T=this.runWebGLProgram(d,[b],n,S,!0),E=this.texData.get(T.dataId);t.texShape=E.texShape,t.isPacked=E.isPacked,t.usage=E.usage,A().get("ENGINE_COMPILE_ONLY")?this.disposeData(T.dataId):(t.texture=E.texture,t.values=null,this.texData.delete(T.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-l)}else{let m=this.acquireTexture(c,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=RJ(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await IS(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(nh(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let e of Object.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=u0(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=e,p=cr().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=p.writeTexture(n,t,o,s,a,i);return cr().makeTensorFromDataId(u,t,o,p)}};Ul.nextDataId=0;function RJ(r,e){if(e==="float32"||e==="complex64")return r;if(e==="int32"||e==="bool"){let t=e==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Ul,2);var sut={forceHalfFloat:EA};var Gl=` + `}};var s9=Vt.whereImpl,a9=1e-7,i9=1e-4,hh={};function u9(r){return r in hh||(hh[r]={}),hh[r]}var p9=A().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),c9=600;function l9(){return A().global.screen==null?1024:A().global.screen.height*A().global.screen.width*window.devicePixelRatio*c9/1024/1024}var Lc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!A().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof bp)t=e;else{let o=Kr(A().getNumber("WEBGL_VERSION"),e);t=new bp(o)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let o=Kr(A().getNumber("WEBGL_VERSION"));t=new bp(o),this.binaryCache=u9(A().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new dh(this.gpgpu),this.numMBBeforeWarning=l9(),this.texData=new Bo(this,ur())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,o,n,s,a){let i=this.makeTensorInfo(t,o),p=this.texData.get(i.dataId);p.isPacked=!1,p.texture={texture:e,texShape:[n,s]},p.texShape=[n,s];let u=_c(t),c=new Zl(u,!1,a),l=this.runWebGLProgram(c,[i],o,[[n,s]]);return l.shape=t,p.texture=null,this.disposeIntermediateTensorInfo(i),l.dataId}write(e,t,o){if((A().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||A().getBool("DEBUG"))&&this.checkNumericalProblems(e),o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.texData.set(n,{shape:t,dtype:o,values:e,usage:mr.UPLOAD,refCount:1}),n}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,o,n,s){if(A().getBool("DEBUG")&&this.checkNumericalProblems(t),n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:o,dtype:n,values:t,usage:mr.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:o,dtype:n,complexTensorInfos:s,slice:a,shape:i,isPacked:p}=t;if(a!=null){let m;p?m=new Fr(i,La):m=new tr(i,La);let d=this.runWebGLProgram(m,[{dataId:e,shape:i,dtype:n}],n),f=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),f}if(o!=null)return this.convertAndCacheOnCPU(e);if(n==="string")return o;let u=this.activeTimers!=null,c;u&&(c=y.now());let l;if(n==="complex64"){let m=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);l=w.mergeRealAndImagArrays(m,d)}else l=this.getValuesFromTexture(e);return u&&(this.downloadWaitMs+=y.now()-c),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let f=this.pendingRead.get(e);return new Promise(h=>f.push(h))}let t=this.texData.get(e),{values:o,shape:n,slice:s,dtype:a,complexTensorInfos:i,isPacked:p}=t;if(s!=null){let f;p?f=new Fr(n,La):f=new tr(n,La);let h=this.runWebGLProgram(f,[{dataId:e,shape:n,dtype:a}],a),g=this.read(h.dataId);return this.disposeIntermediateTensorInfo(h),g}if(o!=null)return this.convertAndCacheOnCPU(e);if(A().getBool("DEBUG")&&!A().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&A().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let u=null,c;if(a!=="complex64"&&A().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let f=this.texData.get(c.dataId);u=this.gpgpu.createBufferFromTexture(f.texture.texture,...jl(n))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let l;if(a==="complex64"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),h=f[0],g=f[1];l=w.mergeRealAndImagArrays(h,g)}else if(u==null)l=this.getValuesFromTexture(e);else{let f=y.sizeFromShape(n);l=this.gpgpu.downloadFloat32MatrixFromBuffer(u,f)}if(c!=null&&this.disposeIntermediateTensorInfo(c),u!=null){let f=this.gpgpu.gl;ce(f,()=>f.deleteBuffer(u))}let m=this.convertAndCacheOnCPU(e,l),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(f=>f(m)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&ur().removeDataId(e,this),this.pendingDeletes--),m}readToGPU(e,t={}){let o=this.texData.get(e),{values:n,shape:s,slice:a,dtype:i,isPacked:p,texture:u}=o;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let d;p?d=new Fr(s,La):d=new tr(s,La);let f=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:i}],i),h=this.readToGPU(f,t);return this.disposeIntermediateTensorInfo(f),h}if(u==null)throw n!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let c=this.decode(e,t.customTexShape),l=ur().makeTensorFromTensorInfo(c),m=this.texData.get(c.dataId);return Object.assign({tensorRef:l},m.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let o=t.map(n=>y.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}time(e){let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(p=>p.query)).filter(p=>p!=null),a=y.flatten(this.activeTimers.map(p=>p.name)).filter(p=>p!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let p=await Promise.all(s);i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.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 A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:y.now(),endMs:null}}endTimer(e){return A().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=y.now(),e)}async getQueryTime(e){if(A().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:o}=this.texData.get(e);return o!=null&&(this.disposeData(o.real.dataId,t),this.disposeData(o.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:o,texShape:n,usage:s,isPacked:a,slice:i}=this.texData.get(e),p=i&&i.origDataId||e,u=this.dataRefCount.get(p);u>1?this.dataRefCount.set(p,u-1):(this.dataRefCount.delete(p),t!=null&&(this.numBytesInGPU-=this.computeBytes(n,o),this.textureManager.releaseTexture(t,n,s,a)));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.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=p9){return A().getBool("WEBGL_CPU_FORWARD")&&e.every(o=>this.texData.get(o.dataId).texture==null&&y.sizeFromShape(o.shape)0&&y.isString(o[0])){let s=o.map(a=>y.encodeString(a));n=this.write(s,e,t)}else n=this.write(o,e,t);return this.texData.get(n).usage=null,{dataId:n,shape:e,dtype:t}}makeOutput(e,t,o){return ur().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,o),this)}unpackTensor(e){let t=new fh(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new mh(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let o=[gi(e.shape),...xi(e.shape)],n={dtype:e.dtype,shape:o,dataId:e.dataId},s=[gi(t),...xi(t)],a=new Mc(s,o),i=!0,p=[o],u=this.runWebGLProgram(a,[n],e.dtype,p,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}decode(e,t){let o=this.texData.get(e),{isPacked:n,shape:s,dtype:a}=o;if(t!=null){let m=y.sizeFromShape(s),d=t[0]*t[1]*4;y.assert(m<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=_c(s),p;n?p=new eh(i):p=new Jf(i);let u=!0,c=[t!=null?t:jl(i)],l=this.runWebGLProgram(p,[{shape:i,dtype:a,dataId:e}],a,c,u,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,o,n,s=!1,a){let i=this.makeTensorInfo(e.outputShape,o),p=this.texData.get(i.dataId);if(e.packedOutput&&(p.isPacked=!0),e.outPackingScheme===gu.DENSE){let x=a!=null?a:jl(e.outputShape);p.texShape=x.map(b=>b*2)}if(e.outTexUsage!=null&&(p.usage=e.outTexUsage),y.sizeFromShape(i.shape)===0)return p.values=y.getTypedArrayFromDType(i.dtype,0),i;let u=[],c=t.map(x=>{if(x.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(x.dataId);if(b.texture==null){if(!e.packedInputs&&y.sizeFromShape(x.shape)<=A().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:x.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=x.shape)}if(this.uploadToGPU(x.dataId),!!b.isPacked!=!!e.packedInputs)x=b.isPacked?this.unpackTensor(x):this.packTensor(x),u.push(x),b=this.texData.get(x.dataId);else if(b.isPacked&&!xu(b.shape,x.shape)){let C=x,S=x.shape;x.shape=b.shape,x=this.packedReshape(x,S),u.push(x),b=this.texData.get(x.dataId),C.shape=S}return{shape:x.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let l={shape:i.shape,texData:p,isUniform:!1},m=MR(e,c,l),d=this.getAndSaveBinary(m,()=>PR(this.gpgpu,e,c,l)),f=this.activeTimers!=null,h;f&&(h=this.startTimer()),A().get("ENGINE_COMPILE_ONLY")||OR(this.gpgpu,d,c,l,n),u.forEach(x=>this.disposeIntermediateTensorInfo(x)),f&&(h=this.endTimer(h),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(h)}));let g=A().getNumber("WEBGL_FLUSH_THRESHOLD");if(g>0){let x=y.now();x-this.lastGlFlushTime>g&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=x)}if(!A().getBool("WEBGL_LAZILY_UNPACK")&&p.isPacked&&s===!1){let x=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),x}return i}compileAndRun(e,t,o,n,s=!1){return o=o||t[0].dtype,this.runWebGLProgram(e,t,o,n,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(A().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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=De(()=>{if(!A().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=A().getBool("DEBUG");A().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(A().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?a9:i9}uploadToGPU(e){let t=this.texData.get(e),{shape:o,dtype:n,values:s,texture:a,usage:i,isPacked:p}=t;if(a!=null)return;let u=this.activeTimers!=null,c;u&&(c=y.now());let l=t.texShape;if(l==null&&(l=WI(o,p),t.texShape=l),s!=null){let m=_c(o),d,f=l[1],h=l[0],g=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(p||!g)&&([f,h]=Ma(l[0],l[1])),p?d=new oh(m,g):d=new Zl(m,g);let x=g?[h,f]:l,b=this.makeTensorInfo(x,n),C=this.texData.get(b.dataId);g?C.usage=mr.PIXELS:C.usage=mr.UPLOAD,C.texShape=x,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),f,h,s);let S=[[h,f]],_=this.runWebGLProgram(d,[b],n,S,!0),$=this.texData.get(_.dataId);t.texShape=$.texShape,t.isPacked=$.isPacked,t.usage=$.usage,A().get("ENGINE_COMPILE_ONLY")?this.disposeData(_.dataId):(t.texture=$.texture,t.values=null,this.texData.delete(_.dataId)),this.disposeIntermediateTensorInfo(b),u&&(this.uploadWaitMs+=y.now()-c)}else{let m=this.acquireTexture(l,i,n,p);t.texture=m}}convertAndCacheOnCPU(e,t){let o=this.texData.get(e),{dtype:n}=o;return t!=null&&(o.values=m9(t,n)),o.values}acquireTexture(e,t,o,n){if(this.numBytesInGPU+=this.computeBytes(e,o),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,n)}computeBytes(e,t){return e[0]*e[1]*y.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let o=new Promise(n=>{try{this.checkCompletion_(t),n(!0)}catch(s){throw s}});e.push(o)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await cS(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(qf(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let e of Object.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:o,infLoc:n,nanLoc:s,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:p}=XI(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=o,e.infLoc=n,e.nanLoc=s,e.outShapeLocation=a,e.outShapeStridesLocation=i,e.outTexShapeLocation=p}}createTensorFromGPUData(e,t,o){e.channels=e.channels||"RGBA";let{texture:n,height:s,width:a,channels:i}=e,p=ur().backend;if(!p.gpgpu.gl.isTexture(n))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let u=p.writeTexture(n,t,o,s,a,i);return ur().makeTensorFromDataId(u,t,o,p)}};Lc.nextDataId=0;function m9(r,e){if(e==="float32"||e==="complex64")return r;if(e==="int32"||e==="bool"){let t=e==="int32"?new Int32Array(r.length):new Uint8Array(r.length);for(let o=0;onew Lc,2);var $at={forceHalfFloat:GD};var Bc=` if (isnan(a)) return a; if (isnan(b)) return b; -`;var Br=class{constructor(e,t,o){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=lt(this.outputShape.length),this.userCode=` +`;var Pr=class{constructor(e,t,o){this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.enableShapeUniforms=ut(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } @@ -1242,12 +1242,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } - `}};var to=` + `}};var Xr=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; -`;var eo=class{constructor(e,t,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=lt(s);let a="";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` +`;var jr=class{constructor(e,t,o,n=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o);let s=this.outputShape.length;this.enableShapeUniforms=ut(s);let a="";if(n)if(s===0||y.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; @@ -1261,7 +1261,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; - `;else{let p=At("coords",s);this.enableShapeUniforms?a+=` + `;else{let p=Rt("coords",s);this.enableShapeUniforms?a+=` bool nextRowOutOfBounds = (${p[s-2]} + 1) >= outShape[${s} - 2]; bool nextColOutOfBounds = @@ -1291,13 +1291,13 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, setOutput(result); } - `}};function Ft(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var $A={kernelName:vo,backendName:"webgl",kernelFunc:Ft};function zr(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.texData.get(s.dataId),i=Ft({inputs:{x:o},backend:t}),p=Ft({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var RA={kernelName:ei,backendName:"webgl",kernelFunc:zr};var _0="return (a < 0.) ? b * a : a;",E0=` + `}};function Dt(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}var HD={kernelName:Co,backendName:"webgl",kernelFunc:Dt};function Or(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.texData.get(s.dataId),i=Dt({inputs:{x:o},backend:t}),p=Dt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var KD={kernelName:Di,backendName:"webgl",kernelFunc:Or};var hv="return (a < 0.) ? b * a : a;",gv=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function AJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new eo(E0,n.shape,a.shape):new Br(_0,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],"float32");return t.disposeIntermediateTensorInfo(a),p}var DA={kernelName:Yn,backendName:"webgl",kernelFunc:AJ};var $0="return (a < 0.) ? b * a : a;",R0=` +`;function f9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=t.makeTensorInfo([],"float32",y.createScalarValue(s,"float32")),i=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(gv,n.shape,a.shape):new Pr(hv,n.shape,a.shape),p=t.runWebGLProgram(i,[n,a],"float32");return t.disposeIntermediateTensorInfo(a),p}var qD={kernelName:$n,backendName:"webgl",kernelFunc:f9};var xv="return (a < 0.) ? b * a : a;",yv=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`;function FJ(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new eo(R0,o.shape,n.shape):new Br($0,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],"float32")}var AA={kernelName:gs,backendName:"webgl",kernelFunc:FJ};var sn="if (isnan(x)) return x;";function xe({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let c=i.texData.get(a.dataId),m=t(c.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&e!=null,l;return u?l=new Lr(a.shape,e):l=new nr(a.shape,r),i.runWebGLProgram(l,[a],p)}}function st({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,l=i;if(o&&p.dtype==="complex64"){let f=l.texData.get(p.dataId),h=l.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(w=>{let[S,k]=w,T={dataId:S.dataId,dtype:S.dtype,shape:p.shape},E={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Br(r,p.shape,u.shape);return l.runWebGLProgram(R,[T,E],pt(S.dtype,k.dtype))}),b=zr({inputs:{real:g,imag:x},backend:l});return l.disposeIntermediateTensorInfo(g),l.disposeIntermediateTensorInfo(x),b}let c=s||pt(p.dtype,u.dtype);if((p.dtype==="string"||u.dtype==="string"||l.shouldExecuteOnCPU([p,u]))&&n!=null){let f=l.texData.get(p.dataId).values,h=l.texData.get(u.dataId).values,g=p.dtype==="string"?C.fromUint8ToStringArray(f):f,x=p.dtype==="string"?C.fromUint8ToStringArray(h):h,[b,w]=n(p.shape,u.shape,g,x,c),S=l.makeTensorInfo(w,c),k=l.texData.get(S.dataId);return k.values=b,S}let m=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&e!=null,d;return m?d=new eo(e,p.shape,u.shape,t):d=new Br(r,p.shape,u.shape),l.runWebGLProgram(d,[p,u],c)}}function Ti(r,e=!1){if(r==="linear")return e?vA:yA;if(r==="relu")return e?NA:CA;if(r==="elu")return e?kA:bA;if(r==="relu6")return e?TA:wA;if(r==="prelu")return e?R0:$0;if(r==="leakyrelu")return e?E0:_0;if(r==="sigmoid")return e?_A:SA;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var Hl=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=lt(this.outputShape.length);let l=n?e[1]:e[2],c=Math.ceil(l/2),m=n?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",f=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";i&&(p?g=`vec4 activation(vec4 a) { +`;function h9(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(yv,o.shape,n.shape):new Pr(xv,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],"float32")}var jD={kernelName:rs,backendName:"webgl",kernelFunc:h9};var Fo="if (isnan(x)) return x;";function xe({opSnippet:r,packedOpSnippet:e,cpuKernelImpl:t,dtype:o}){return({inputs:n,backend:s})=>{let{x:a}=n,i=s,p=o||a.dtype;if(i.shouldExecuteOnCPU([a])&&t!=null){let l=i.texData.get(a.dataId),m=t(l.values,p);return i.makeTensorInfo(a.shape,p,m)}let u=A().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&e!=null,c;return u?c=new Fr(a.shape,e):c=new tr(a.shape,r),i.runWebGLProgram(c,[a],p)}}function nt({opSnippet:r,packedOpSnippet:e,checkOutOfBounds:t=!1,supportsComplex:o=!1,cpuKernelImpl:n,dtype:s}){return({inputs:a,backend:i})=>{let{a:p,b:u}=a,c=i;if(o&&p.dtype==="complex64"){let f=c.texData.get(p.dataId),h=c.texData.get(u.dataId),[g,x]=[[f.complexTensorInfos.real,h.complexTensorInfos.real],[f.complexTensorInfos.imag,h.complexTensorInfos.imag]].map(C=>{let[S,k]=C,_={dataId:S.dataId,dtype:S.dtype,shape:p.shape},$={dataId:k.dataId,dtype:k.dtype,shape:u.shape},R=new Pr(r,p.shape,u.shape);return c.runWebGLProgram(R,[_,$],dt(S.dtype,k.dtype))}),b=Or({inputs:{real:g,imag:x},backend:c});return c.disposeIntermediateTensorInfo(g),c.disposeIntermediateTensorInfo(x),b}let l=s||dt(p.dtype,u.dtype);if((p.dtype==="string"||u.dtype==="string"||c.shouldExecuteOnCPU([p,u]))&&n!=null){let f=c.texData.get(p.dataId).values,h=c.texData.get(u.dataId).values,g=p.dtype==="string"?w.fromUint8ToStringArray(f):f,x=p.dtype==="string"?w.fromUint8ToStringArray(h):h,[b,C]=n(p.shape,u.shape,g,x,l),S=c.makeTensorInfo(C,l),k=c.texData.get(S.dataId);return k.values=b,S}let m=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&e!=null,d;return m?d=new jr(e,p.shape,u.shape,t):d=new Pr(r,p.shape,u.shape),c.runWebGLProgram(d,[p,u],l)}}function yi(r,e=!1){if(r==="linear")return e?BD:AD;if(r==="relu")return e?VD:PD;if(r==="elu")return e?zD:FD;if(r==="relu6")return e?WD:OD;if(r==="prelu")return e?yv:xv;if(r==="leakyrelu")return e?gv:hv;if(r==="sigmoid")return e?UD:MD;throw new Error(`Activation ${r} has not been implemented for the WebGL backend.`)}var zc=class{constructor(e,t,o,n=!1,s=!1,a=!1,i=null,p=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=o,this.enableShapeUniforms=ut(this.outputShape.length);let c=n?e[1]:e[2],l=Math.ceil(c/2),m=n?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",f=n?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],h=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",x="";i&&(p?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${i} }`:u?g=`vec4 activation(vec4 a) { @@ -1305,16 +1305,16 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${i} }`:g=`vec4 activation(vec4 x) { ${i} - }`,x="result = activation(result);");let b=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),u&&this.variableNames.push("leakyreluAlpha");let w="rc.x",S="rc.x";e[0]`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let l=a.texData.get(n.dataId);return l.isPacked&&!vu(n.shape,p)&&!(l.texture!==null&&vu(l.shape,p))?OA(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var MA={kernelName:Ca,backendName:"webgl",kernelFunc:te};var pm=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(t!=null){let c=1/t;u=`sumValue += dot(values * ${y.isInt(c)?c.toPrecision(2):c}, ones);`}let l="";s%o>0&&(l=` + `}};var XD="return a * b;";function tm(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=w.upcastType(o.dtype,n.dtype);if(o.dtype==="complex64"){let i=t.texData.get(o.dataId),p=t.texData.get(n.dataId),u=new em(bv.REAL,o.shape,n.shape),c=new em(bv.IMAG,o.shape,n.shape),l=[{dataId:i.complexTensorInfos.real.dataId,dtype:i.complexTensorInfos.real.dtype,shape:o.shape},{dataId:i.complexTensorInfos.imag.dataId,dtype:i.complexTensorInfos.imag.dtype,shape:o.shape},{dataId:p.complexTensorInfos.real.dataId,dtype:p.complexTensorInfos.real.dtype,shape:n.shape},{dataId:p.complexTensorInfos.imag.dataId,dtype:p.complexTensorInfos.imag.dtype,shape:n.shape}],m=t.runWebGLProgram(u,l,"float32"),d=t.runWebGLProgram(c,l,"float32"),f=Or({inputs:{real:m,imag:d},backend:t});return t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}if(t.shouldExecuteOnCPU([o,n])){let i=t.texData.get(o.dataId),p=t.texData.get(n.dataId),[u,c]=sD(o.shape,n.shape,i.values,p.values,s),l=t.makeTensorInfo(c,s),m=t.texData.get(l.dataId);return m.values=u,l}let a;return A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?a=new jr(XD,o.shape,n.shape):a=new Pr(XD,o.shape,n.shape),t.runWebGLProgram(a,[o,n],s)}var YD={kernelName:Xn,backendName:"webgl",kernelFunc:tm};function QD(r,e,t){let o=[gi(r.shape),...xi(r.shape)],n={dtype:r.dtype,shape:o,dataId:r.dataId},s=[gi(e),...xi(e)],a=new Mc(s,o),i=!0,p=[o],u=t.runWebGLProgram(a,[n],r.dtype,p,i);return{dataId:u.dataId,shape:e,dtype:u.dtype}}function te(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{shape:s}=o,a=t,i=y.sizeFromShape(n.shape),p=y.inferFromImplicitShape(s,i),u=y.sizeFromShape(p);y.assert(i===u,()=>`The new shape (${p}) has ${u} elements and the old shape (${n.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let c=a.texData.get(n.dataId);return c.isPacked&&!xu(n.shape,p)&&!(c.texture!==null&&xu(c.shape,p))?QD(n,p,a):(a.incRef(n.dataId),{dataId:n.dataId,shape:p,dtype:n.dtype})}var ZD={kernelName:da,backendName:"webgl",kernelFunc:te};var rm=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i=Math.floor(o/4)*4,p=o%4,u="sumValue += dot(values, ones);";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${y.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%o>0&&(c=` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } @@ -1357,7 +1357,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { - ${l} + ${c} return getX(batch, inIdx); } @@ -1402,7 +1402,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(sumValue); } - `}};var Th=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i="0.0",p="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",p="min"):t==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let l=Math.floor(o/4)*4,c=o%4,m=` + `}};var gh=class{constructor(e,t){this.variableNames=["x"];let{windowSize:o,batchSize:n,inSize:s,outSize:a}=e;this.outputShape=[n,a];let i="0.0",p="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",p="min"):t==="max"&&(i="-1.0 / 1e-20",p="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let c=Math.floor(o/4)*4,l=o%4,m=` if (${t==="sum"}) { sumValue += dot(values, ones); } else if (${t==="prod"}) { @@ -1451,7 +1451,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, float allValue = 1.0; float anyValue = 0.0; - for (int i = 0; i < ${l}; i += 4) { + for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; ${d} values = ${d}( getValue(batch, inIdx), @@ -1463,8 +1463,8 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ${m} } - int inIdx = inOffset + ${l}; - if (${c===1}) { + int inIdx = inOffset + ${c}; + if (${l===1}) { ${d} values = ${d}( getValue(batch, inIdx), initializationValue, @@ -1473,7 +1473,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${m} - } else if (${c===2}) { + } else if (${l===2}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -1482,7 +1482,7 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, ); ${m} - } else if (${c===3}) { + } else if (${l===3}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -1494,12 +1494,12 @@ vec2 packedUVfrom3D(int texNumR, int texNumC, } setOutput(${u}); } - `}};function OJ(r){let e=[];for(;e.length===0||e[e.length-1].outSize!==1;){let t=e.length?e[e.length-1].outSize:r[1],o=C.computeOptimalWindowSize(t);e.push({inSize:t,windowSize:o,outSize:Math.ceil(t/o)})}return e}function ro(r,e,t,o){let n=OJ(r.shape),s=r;for(let a=0;a6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=N0("rc",this.rank),a=new Array(this.rank);for(let l=0;l6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],o=new Array(e);for(let n=0;n6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let n=Re(this.rank),s=dv("rc",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,c,d]:[x,d,c],T=o?[b,f,m]:[b,m,f],E=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:e},backend:n,attrs:{shape:T}}),D=[E,R],F=Math.max(x,b),O=t?E.shape[1]:E.shape[2],M=s!=null,L=a!=null,B=p==="leakyrelu",z=p!=null?Ti(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>A0&&U===!1){let Y=E,J=R;t&&(Y=Ct({inputs:{x:E},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=Ct({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[F,O,1]}}),D.push(ee));let oe=f===1?2:1,ue=J;ne&&(ue=te({inputs:{x:J},backend:n,attrs:{shape:[F,1,O]}}),D.push(ue));let me=um({inputs:{a:ee,b:ue},backend:n});j=Tp({inputs:{x:me},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(me)}else{let Y=pt(r.dtype,e.dtype),J=new Hl(k,T,[F,d,f],t,o,M,z,L,B),re=[E,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],"float32",y.createScalarValue(i,"float32"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function LJ(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o;return _p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:c,activation:l})}var VA={kernelName:qo,backendName:"webgl",kernelFunc:LJ};var WA="return abs(x);";function BJ(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=t.texData.get(o.dataId),a=wh(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Lr(o.shape,WA):n=new nr(o.shape,WA),t.runWebGLProgram(n,[o],o.dtype)}var UA={kernelName:fn,backendName:"webgl",kernelFunc:BJ};var zJ=Gt+` + `}};function yu(r,e,t){let o=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new yh(r.shape,e):new xh(r.shape,e);return t.runWebGLProgram(o,[r],r.dtype)}function JD(r,e,t,o){let n=e,s=r.shape.length,a=y.parseAxisParam(n,r.shape),i=a,p=w.getAxesPermutation(i,s),u=p!=null,c=r;u&&(c=yu(r,p,o),i=w.getInnerMostAxes(i.length,s)),w.assertAxesAreInnerMostDims("sum",i,s);let[l,m]=w.computeOutAndReduceShapes(c.shape,i),d=l;t&&(d=w.expandShapeToKeepDim(l,a));let f=y.sizeFromShape(m),g=y.sizeFromShape(r.shape)/f,x=te({inputs:{x:c},attrs:{shape:[g,f]},backend:o}),b=oi(r.dtype),C=Yr(x,b,"sum",o),S=te({inputs:{x:C},attrs:{shape:d},backend:o});return o.disposeIntermediateTensorInfo(x),o.disposeIntermediateTensorInfo(C),u&&o.disposeIntermediateTensorInfo(c),S}function wp(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return JD(n,s,a,t)}var eA={kernelName:Ss,backendName:"webgl",kernelFunc:wp};function bt(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{perm:s}=o,a=t,i=n.shape.length,p=new Array(i);for(let c=0;c`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=te({inputs:{x:r},backend:n,attrs:{shape:k}}),R=te({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=t?$.shape[1]:$.shape[2],M=s!=null,L=a!=null,B=p==="leakyrelu",z=p!=null?yi(p,!0):null,U=M||L||B||z!=null,j;if((d===1||f===1)&&O>Cv&&U===!1){let Y=$,J=R;t&&(Y=bt({inputs:{x:$},backend:n,attrs:{perm:[0,2,1]}}),D.push(Y)),o&&(J=bt({inputs:{x:R},backend:n,attrs:{perm:[0,2,1]}}),D.push(J));let re=f!==1,ne=f===1,ee=Y;re&&(ee=te({inputs:{x:Y},backend:n,attrs:{shape:[P,O,1]}}),D.push(ee));let oe=f===1?2:1,ie=J;ne&&(ie=te({inputs:{x:J},backend:n,attrs:{shape:[P,1,O]}}),D.push(ie));let le=tm({inputs:{a:ee,b:ie},backend:n});j=wp({inputs:{x:le},backend:n,attrs:{axis:oe,keepDims:!0}}),D.push(le)}else{let Y=dt(r.dtype,e.dtype),J=new zc(k,_,[P,d,f],t,o,M,z,L,B),re=[$,R];if(s!=null&&re.push(s),L&&re.push(a),B){let ne=n.makeTensorInfo([],"float32",y.createScalarValue(i,"float32"));re.push(ne),D.push(ne)}j=n.runWebGLProgram(J,re,Y)}let q=te({inputs:{x:j},backend:n,attrs:{shape:S}});D.push(j);for(let Y of D)n.disposeIntermediateTensorInfo(Y);return q}function b9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return Sp({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var rA={kernelName:So,backendName:"webgl",kernelFunc:b9};var oA="return abs(x);";function C9(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])&&o.dtype!=="complex64"){let s=t.texData.get(o.dataId),a=ch(s.values);return t.makeTensorInfo(o.shape,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Fr(o.shape,oA):n=new tr(o.shape,oA),t.runWebGLProgram(n,[o],o.dtype)}var nA={kernelName:Xs,backendName:"webgl",kernelFunc:C9};var w9=Wt+` if (abs(x) > 1.) { return NAN; } return acos(x); -`,VJ=xe({opSnippet:zJ}),GA={kernelName:hn,backendName:"webgl",kernelFunc:VJ};var WJ=Gt+` +`,S9=xe({opSnippet:w9}),sA={kernelName:Vo,backendName:"webgl",kernelFunc:S9};var I9=Wt+` if (x < 1.0) return NAN; -return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,backendName:"webgl",kernelFunc:UJ};var KA="return a + b;",GJ=st({opSnippet:KA,packedOpSnippet:KA,supportsComplex:!0,cpuKernelImpl:ID}),qA={kernelName:Rr,backendName:"webgl",kernelFunc:GJ};var $h=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` +return log(x + sqrt(x * x - 1.0));`,v9=xe({opSnippet:I9}),aA={kernelName:Wo,backendName:"webgl",kernelFunc:v9};var iA="return a + b;",k9=nt({opSnippet:iA,packedOpSnippet:iA,supportsComplex:!0,cpuKernelImpl:LR}),uA={kernelName:uo,backendName:"webgl",kernelFunc:k9};var bh=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`float v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1531,7 +1531,7 @@ return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,back float result = ${n}; setOutput(result); } - `}};var Rh=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` + `}};var Ch=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let o=[];this.variableNames.forEach(s=>{o.push(`vec4 v${s} = get${s}AtOutCoords();`)});let n=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${o.join(` `)} @@ -1539,7 +1539,7 @@ return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,back vec4 result = ${n}; setOutput(result); } - `}};function Dh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Ft({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(o.length/2),u=Dh({inputs:o.slice(0,p),backend:t}),l=Dh({inputs:o.slice(p),backend:t});return Dh({inputs:[u,l],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>pt(p,u)),s=o.map(p=>p.shape),i=A().getBool("WEBGL_PACK")?new Rh(o[0].shape,s):new $h(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var jA={kernelName:xn,backendName:"webgl",kernelFunc:Dh};function HJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),u=C.getInnerMostAxes(u.length,i)),C.assertAxesAreInnerMostDims("all",u,i);let[m,d]=C.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:c},backend:t,attrs:{shape:[-1,f]}}),g=ro(h,h.dtype,"all",t),x;if(a){let b=C.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),l!=null&&t.disposeIntermediateTensorInfo(c),x}var XA={kernelName:yn,backendName:"webgl",kernelFunc:HJ};function KJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),u=C.getInnerMostAxes(u.length,i)),C.assertAxesAreInnerMostDims("any",u,i);let[m,d]=C.computeOutAndReduceShapes(c.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:c},backend:t,attrs:{shape:[-1,f]}}),g=ro(h,h.dtype,"any",t),x;if(a){let b=C.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),l!=null&&t.disposeIntermediateTensorInfo(c),x}var YA={kernelName:bn,backendName:"webgl",kernelFunc:KJ};var Ah=class{constructor(e,t,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=t==="max"?">":"<",p=o?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` + `}};function wh(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Dt({inputs:{x:o[0]},backend:t});if(o.length>A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(o.length/2),u=wh({inputs:o.slice(0,p),backend:t}),c=wh({inputs:o.slice(p),backend:t});return wh({inputs:[u,c],backend:t})}let n=o.map(p=>p.dtype).reduce((p,u)=>dt(p,u)),s=o.map(p=>p.shape),i=A().getBool("WEBGL_PACK")?new Ch(o[0].shape,s):new bh(o[0].shape,s);return t.runWebGLProgram(i,o,n)}var pA={kernelName:Uo,backendName:"webgl",kernelFunc:wh};function N9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims("all",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,"all",t),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var cA={kernelName:Go,backendName:"webgl",kernelFunc:N9};function T9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=n;c!=null&&(l=bt({inputs:{x:n},backend:t,attrs:{perm:c}}),u=w.getInnerMostAxes(u.length,i)),w.assertAxesAreInnerMostDims("any",u,i);let[m,d]=w.computeOutAndReduceShapes(l.shape,u),f=y.sizeFromShape(d),h=te({inputs:{x:l},backend:t,attrs:{shape:[-1,f]}}),g=Yr(h,h.dtype,"any",t),x;if(a){let b=w.expandShapeToKeepDim(m,p);x=te({inputs:{x:g},backend:t,attrs:{shape:b}})}else x=te({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),c!=null&&t.disposeIntermediateTensorInfo(l),x}var lA={kernelName:Ho,backendName:"webgl",kernelFunc:T9};var Sh=class{constructor(e,t,o){this.variableNames=["A"];let{windowSize:n,batchSize:s,outSize:a}=e;o||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let i=t==="max"?">":"<",p=o?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -1559,31 +1559,31 @@ return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,back } setOutput(float(bestIndex)); } - `}};var Fh=class{constructor(e,t,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,p=i.length,u=Re(p),l=At("coords",p),c,m;if(a===1){m=p+1;let R=Re(m);c=` - ${R} sourceLocR = ${R}(${l.join()}, 0); - ++${l[p-1]}; - ${R} sourceLocG = ${R}(${l.join()}, 0); - ++${l[p-2]}; - ${R} sourceLocA = ${R}(${l.join()}, 0); - --${l[p-1]}; - ${R} sourceLocB = ${R}(${l.join()}, 0); - --${l[p-2]};`}else m=p,c=` + `}};var Ih=class{constructor(e,t,o,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,y.assert(e.length>2,()=>`Packed arg${o.charAt(0).toUpperCase()+o.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),n||this.variableNames.push("bestIndicesA");let i=this.outputShape,p=i.length,u=Re(p),c=Rt("coords",p),l,m;if(a===1){m=p+1;let R=Re(m);l=` + ${R} sourceLocR = ${R}(${c.join()}, 0); + ++${c[p-1]}; + ${R} sourceLocG = ${R}(${c.join()}, 0); + ++${c[p-2]}; + ${R} sourceLocA = ${R}(${c.join()}, 0); + --${c[p-1]}; + ${R} sourceLocB = ${R}(${c.join()}, 0); + --${c[p-2]};`}else m=p,l=` ${u} sourceLocR = coords; - ++${l[p-1]}; + ++${c[p-1]}; ${u} sourceLocG = coords; - ++${l[p-2]}; + ++${c[p-2]}; ${u} sourceLocA = coords; - --${l[p-1]}; + --${c[p-1]}; ${u} sourceLocB = coords; - --${l[p-2]};`;let d=["x","y","z","w","u","v"].slice(0,m),f="."+d[m-1],h=d.map(R=>"int "+R),g=At("sourceLocR",m-1).concat("inIdx.r"),x=At("sourceLocG",m-1).concat("inIdx.g"),b=At("sourceLocB",m-1).concat("inIdx.b"),w=At("sourceLocA",m-1).concat("inIdx.a"),S=o==="max"?"greaterThan":"lessThan",k=n?"":` + --${c[p-2]};`;let d=["x","y","z","w","u","v"].slice(0,m),f="."+d[m-1],h=d.map(R=>"int "+R),g=Rt("sourceLocR",m-1).concat("inIdx.r"),x=Rt("sourceLocG",m-1).concat("inIdx.g"),b=Rt("sourceLocB",m-1).concat("inIdx.b"),C=Rt("sourceLocA",m-1).concat("inIdx.a"),S=o==="max"?"greaterThan":"lessThan",k=n?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${x.join()}), getBestIndicesAChannel(${b.join()}), - getBestIndicesAChannel(${w.join()})));`,T=`vec4( + getBestIndicesAChannel(${C.join()})));`,_=`vec4( getAChannel(${g.join()}), hasNextCol ? getAChannel(${x.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., - hasNextRow && hasNextCol ? getAChannel(${w.join()}) : 0.)`,E=n?"":` + hasNextRow && hasNextCol ? getAChannel(${C.join()}) : 0.)`,$=n?"":` float getBestIndicesAChannel(${h.join()}) { return getChannel(getBestIndicesA(${d.join()}), vec2(${d.slice(-2).join()})); @@ -1592,22 +1592,22 @@ return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,back return getChannel(getA(${d.join()}), vec2(${d.slice(-2).join()})); } - ${E} + ${$} void main() { ${u} coords = getOutputCoords(); - bool hasNextCol = ${l[p-1]} < ${i[p-1]-1}; - bool hasNextRow = ${l[p-2]} < ${i[p-2]-1}; - ${c} + bool hasNextCol = ${c[p-1]} < ${i[p-1]-1}; + bool hasNextRow = ${c[p-2]} < ${i[p-2]-1}; + ${l} ivec4 srcIdx = ivec4(sourceLocR${f}, sourceLocG${f}, sourceLocB${f}, sourceLocA${f}) * ${t}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); - vec4 bestValue = ${T}; + vec4 bestValue = ${_}; for (int i = 0; i < ${t}; i++) { inIdx = srcIdx; ${k} - vec4 candidate = ${T}; + vec4 candidate = ${_}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${S}(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); @@ -1621,25 +1621,25 @@ return log(x + sqrt(x * x - 1.0));`,UJ=xe({opSnippet:WJ}),HA={kernelName:gn,back } setOutput(bestIndex); } - `}};function QA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=C.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new Ah(i,t,o==null),u=[e];o!=null&&u.push(o);let l=r.runWebGLProgram(p,u,"int32");if(l.shape[1]===1)return l;let c=QA(r,e,t,l);return r.disposeIntermediateTensorInfo(l),c}function ZA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=C.computeOptimalWindowSize(s),i=new Fh(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===e.shape.length){let l=ZA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),l}return u}function Ph(r,e,t,o){let n=[t];if(C.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().getBool("WEBGL_PACK_REDUCE")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,l]=C.computeOutAndReduceShapes(p.shape,n),c=y.sizeFromShape(l),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,c]}});s.push(m);let d=QA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return ZA(r,e,o)}function qJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let l=Ph(t,p,a[0],"max");return u.forEach(c=>t.disposeIntermediateTensorInfo(c)),l}var JA={kernelName:na,backendName:"webgl",kernelFunc:qJ};function jJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Ct({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let l=Ph(t,p,a[0],"min");return u.forEach(c=>t.disposeIntermediateTensorInfo(c)),l}var eF={kernelName:sa,backendName:"webgl",kernelFunc:jJ};var XJ=Gt+` + `}};function mA(r,e,t,o=null){let n=e.shape[0],s=e.shape[1];o!=null&&(n=o.shape[0],s=o.shape[1]);let a=w.computeOptimalWindowSize(s),i={windowSize:a,inSize:s,batchSize:n,outSize:Math.ceil(s/a)},p=new Sh(i,t,o==null),u=[e];o!=null&&u.push(o);let c=r.runWebGLProgram(p,u,"int32");if(c.shape[1]===1)return c;let l=mA(r,e,t,c);return r.disposeIntermediateTensorInfo(c),l}function dA(r,e,t,o=null){let n=o!=null?o.shape:e.shape,s=n[n.length-1],a=w.computeOptimalWindowSize(s),i=new Ih(n,a,t,o==null),p=o==null?[e]:[e,o],u=r.runWebGLProgram(i,p,"int32");if(u.shape.length===e.shape.length){let c=dA(r,e,t,u);return r.disposeIntermediateTensorInfo(u),c}return u}function vh(r,e,t,o){let n=[t];if(w.assertAxesAreInnerMostDims("arg"+o.charAt(0).toUpperCase()+o.slice(1),n,e.shape.length),!A().getBool("WEBGL_PACK_REDUCE")||e.shape.length<=2){let s=[],a=r.texData.get(e.dataId),i=a!==null&&a.isPacked,p=e;i&&(p=r.unpackTensor(e),s.push(p));let[u,c]=w.computeOutAndReduceShapes(p.shape,n),l=y.sizeFromShape(c),m=te({inputs:{x:p},backend:r,attrs:{shape:[-1,l]}});s.push(m);let d=mA(r,m,o);s.push(d);let f=te({inputs:{x:d},backend:r,attrs:{shape:u}});return s.forEach(h=>r.disposeIntermediateTensorInfo(h)),f}return dA(r,e,o)}function _9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=vh(t,p,a[0],"max");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var fA={kernelName:Ys,backendName:"webgl",kernelFunc:_9};function E9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=bt({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=vh(t,p,a[0],"min");return u.forEach(l=>t.disposeIntermediateTensorInfo(l)),c}var hA={kernelName:Qs,backendName:"webgl",kernelFunc:E9};var $9=Wt+` if (abs(x) > 1.) { return NAN; } return asin(x); -`,YJ=xe({opSnippet:XJ}),tF={kernelName:Cn,backendName:"webgl",kernelFunc:YJ};var QJ=Gt+"return log(x + sqrt(x * x + 1.0));",ZJ=xe({opSnippet:QJ}),rF={kernelName:wn,backendName:"webgl",kernelFunc:ZJ};var JJ=Gt+` +`,R9=xe({opSnippet:$9}),gA={kernelName:Ko,backendName:"webgl",kernelFunc:R9};var D9=Wt+"return log(x + sqrt(x * x + 1.0));",A9=xe({opSnippet:D9}),xA={kernelName:qo,backendName:"webgl",kernelFunc:A9};var F9=Wt+` return atan(x); -`,eee=xe({opSnippet:JJ}),oF={kernelName:Sn,backendName:"webgl",kernelFunc:eee};var tee=Gl+` +`,P9=xe({opSnippet:F9}),yA={kernelName:jo,backendName:"webgl",kernelFunc:P9};var O9=Bc+` return atan(a, b); -`,ree=` +`,M9=` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); - `+to+` + `+Xr+` return result; -`,oee=st({opSnippet:tee,packedOpSnippet:ree}),nF={kernelName:vn,backendName:"webgl",kernelFunc:oee};var nee=Gt+` +`,L9=nt({opSnippet:O9,packedOpSnippet:M9}),bA={kernelName:Yo,backendName:"webgl",kernelFunc:L9};var B9=Wt+` if ((x < -1.0) || (x > 1.0)) return NAN; -return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelName:In,backendName:"webgl",kernelFunc:see};var Zs=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,l=e.dilationWidth,c=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let R=">=";this.userCode=` +return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,z9=xe({opSnippet:B9}),CA={kernelName:Xo,backendName:"webgl",kernelFunc:z9};var Us=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideHeight,p=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,m=e.effectiveFilterWidth,d=e.padInfo.top,f=e.padInfo.left;this.outputShape=e.outShape;let h=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,x=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(h||(b="-1.0 / 1e-20"),o){let R=">=";this.userCode=` const ivec2 strides = ivec2(${i}, ${p}); const ivec2 pads = ivec2(${d}, ${f}); @@ -1659,7 +1659,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN int minMaxPosition = 0; float avgValue = 0.0; - for (int wR = 0; wR < ${c}; + for (int wR = 0; wR < ${l}; wR += ${u}) { int xR = xRCorner + wR; @@ -1668,7 +1668,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } for (int wC = 0; wC < ${m}; - wC += ${l}) { + wC += ${c}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { @@ -1690,11 +1690,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(float(minMaxPosition)); } - `;return}let w="max",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(S="avgValue / max(count, 1.0)");let k=Math.floor(a/4)*4,T=a%4,E=` + `;return}let C="max",S=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(S="avgValue / max(count, 1.0)");let k=Math.floor(a/4)*4,_=a%4,$=` if (${h}) { avgValue += dot(values, ones); } else { - minMaxValue = ${w}(values, minMaxValue); + minMaxValue = ${C}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${p}); @@ -1727,7 +1727,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float avgValue = 0.0; count = 0.0; - for (int wR = 0; wR < ${c}; + for (int wR = 0; wR < ${l}; wR += ${u}) { int xR = xRCorner + wR; @@ -1736,20 +1736,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } for (int wC = 0; wC < ${k}; wC += 4) { - int xC = xCCorner + wC * ${l}; + int xC = xCCorner + wC * ${c}; vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), - getValue(batch, xR, xC + 2 * ${l}, d), - getValue(batch, xR, xC + 3 * ${l}, d) + getValue(batch, xR, xC + ${c}, d), + getValue(batch, xR, xC + 2 * ${c}, d), + getValue(batch, xR, xC + 3 * ${c}, d) ); - ${E} + ${$} } int xC = xCCorner + ${k}; - if (${T===1}) { + if (${_===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, @@ -1757,30 +1757,30 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN initializationValue ); - ${E} - } else if (${T===2}) { + ${$} + } else if (${_===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), + getValue(batch, xR, xC + ${c}, d), initializationValue, initializationValue ); - ${E} - } else if (${T===3}) { + ${$} + } else if (${_===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), - getValue(batch, xR, xC + ${l}, d), - getValue(batch, xR, xC + 2 * ${l}, d), + getValue(batch, xR, xC + ${c}, d), + getValue(batch, xR, xC + 2 * ${c}, d), initializationValue ); - ${E} + ${$} } } setOutput(${S}); } - `}},Nu=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,l=e.dilationDepth,c=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let w=t==="avg",S="0.0";if(w||(S="-1.0 / 1e-20"),o){let F=">=";this.userCode=` + `}},bu=class{constructor(e,t,o,n=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,i=e.strideDepth,p=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,m=e.dilationWidth,d=e.effectiveFilterDepth,f=e.effectiveFilterHeight,h=e.effectiveFilterWidth,g=e.padInfo.front,x=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let C=t==="avg",S="0.0";if(C||(S="-1.0 / 1e-20"),o){let P=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${p}, ${u}); const ivec3 pads = ivec3(${g}, ${x}, ${b}); @@ -1802,7 +1802,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN int minMaxPosition = 0; for (int wD = 0; wD < ${d}; - wD += ${l}) { + wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { @@ -1810,7 +1810,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } for (int wR = 0; wR < ${f}; - wR += ${c}) { + wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { @@ -1831,7 +1831,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); - if (value ${F} currMinMaxValue) { + if (value ${P} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${n?s?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${f} * ${h} + @@ -1842,8 +1842,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(float(minMaxPosition)); } - `;return}let k="max",T=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(T="avgValue / max(count, 1.0)");let E=Math.floor(a/4)*4,R=a%4,D=` - if (${w}) { + `;return}let k="max",_=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(_="avgValue / max(count, 1.0)");let $=Math.floor(a/4)*4,R=a%4,D=` + if (${C}) { avgValue += dot(values, ones); } else { minMaxValue = ${k}(values, minMaxValue); @@ -1882,7 +1882,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN count = 0.0; for (int wD = 0; wD < ${d}; - wD += ${l}) { + wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { @@ -1890,14 +1890,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } for (int wR = 0; wR < ${f}; - wR += ${c}) { + wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } - for (int wC = 0; wC < ${E}; wC += 4) { + for (int wC = 0; wC < ${$}; wC += 4) { int xC = xCCorner + wC * ${m}; vec4 values = vec4( @@ -1910,7 +1910,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${D} } - int xC = xCCorner + ${E}; + int xC = xCCorner + ${$}; if (${R===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), @@ -1941,10 +1941,10 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } } } - setOutput(${T}); + setOutput(${_}); } - `}};function aee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Ys(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p);if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))return Ft({inputs:{x:n},backend:t});let c=new Zs(l,"avg",!1);return t.runWebGLProgram(c,[n],"float32")}var aF={kernelName:kn,backendName:"webgl",kernelFunc:aee};function iee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,p,u),m=new Nu(c,"avg",!1);return t.runWebGLProgram(m,[n],"float32")}var iF={kernelName:aa,backendName:"webgl",kernelFunc:iee};var Oh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=p-1-e.padInfo.top,c=u-1-e.padInfo.left,m=1/(t*o);this.userCode=` - const ivec2 pads = ivec2(${l}, ${c}); + `}};function V9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Vs(n,"avgPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,"avg",!1);return t.runWebGLProgram(l,[n],"float32")}var wA={kernelName:Qo,backendName:"webgl",kernelFunc:V9};function W9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,p,u),m=new bu(l,"avg",!1);return t.runWebGLProgram(m,[n],"float32")}var SA={kernelName:Zs,backendName:"webgl",kernelFunc:W9};var kh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=p-1-e.padInfo.top,l=u-1-e.padInfo.left,m=1/(t*o);this.userCode=` + const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${m}); void main() { @@ -1985,7 +1985,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},Mh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,l=e.dilationWidth,c=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=c-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=` + `}},Nh=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,m=e.effectiveFilterHeight,d=e.effectiveFilterWidth,f=l-1-e.padInfo.front,h=m-1-e.padInfo.top,g=d-1-e.padInfo.left,x=1/(t*o*n);this.userCode=` const ivec3 pads = ivec3(${f}, ${h}, ${g}); const float avgMultiplier = float(${x}); @@ -2004,7 +2004,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; - for (int wD = 0; wD < ${c}; + for (int wD = 0; wD < ${l}; wD += ${p}) { float dyD = float(dyDCorner + wD) / ${s}.0; @@ -2024,7 +2024,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN int idyR = int(dyR); for (int wC = 0; wC < ${d}; - wC += ${l}) { + wC += ${c}) { float dyC = float(dyCCorner + wC) / ${i}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || @@ -2041,7 +2041,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}};function uee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new Mh(m);return t.runWebGLProgram(d,[n],a.dtype)}var uF={kernelName:Vi,backendName:"webgl",kernelFunc:uee};function pee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Ys([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=new Oh(l);return t.runWebGLProgram(c,[n],a.dtype)}var pF={kernelName:zi,backendName:"webgl",kernelFunc:pee};function lee(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return _p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var lF={kernelName:Nn,backendName:"webgl",kernelFunc:lee};var Lh=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,o);let i="0.0";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(C.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};function U9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Nh(m);return t.runWebGLProgram(d,[n],a.dtype)}var IA={kernelName:Ri,backendName:"webgl",kernelFunc:U9};function G9(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;Vs([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new kh(c);return t.runWebGLProgram(l,[n],a.dtype)}var vA={kernelName:$i,backendName:"webgl",kernelFunc:G9};function H9(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Sp({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var kA={kernelName:Zo,backendName:"webgl",kernelFunc:H9};var Th=class{constructor(e,t,o,n,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i="0.0";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="1.0";s!=null&&(w.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); @@ -2051,7 +2051,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } - `}};var Bh=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,o);let i="vec4(0.0)";n!=null&&(C.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(C.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` + `}};var _h=class{constructor(e,t,o,n,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],w.assertAndGetBroadcastShape(e,t),w.assertAndGetBroadcastShape(e,o);let i="vec4(0.0)";n!=null&&(w.assertAndGetBroadcastShape(e,n),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let p="vec4(1.0)";s!=null&&(w.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),p="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${i}; vec4 scale = ${p}; @@ -2064,7 +2064,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN setOutput((x - mean) * inv + offset); } - `}};var cee=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||n.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(i==null||n.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],l=null;a!=null&&(l=a.shape,u.push(a));let c=null;i!=null&&(c=i.shape,u.push(i));let m=A().getBool("WEBGL_PACK_NORMALIZATION")?new Bh(o.shape,n.shape,s.shape,l,c,p):new Lh(o.shape,n.shape,s.shape,l,c,p);return e.runWebGLProgram(m,u,u[0].dtype)},cF={kernelName:Hn,backendName:"webgl",kernelFunc:cee};var zh=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=mee(this.rank),n,s=e.map((a,i)=>`sourceLoc.${F0[i]} = start[${i}] + coords.${F0[i]};`);n=` + `}};var K9=({inputs:r,backend:e,attrs:t})=>{let{x:o,mean:n,variance:s,offset:a,scale:i}=r;y.assert(n.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),y.assert(a==null||n.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),y.assert(i==null||n.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:p}=t;p==null&&(p=.001);let u=[o,n,s],c=null;a!=null&&(c=a.shape,u.push(a));let l=null;i!=null&&(l=i.shape,u.push(i));let m=A().getBool("WEBGL_PACK_NORMALIZATION")?new _h(o.shape,n.shape,s.shape,c,l,p):new Th(o.shape,n.shape,s.shape,c,l,p);return e.runWebGLProgram(m,u,u[0].dtype)},NA={kernelName:In,backendName:"webgl",kernelFunc:K9};var Eh=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=Re(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let o=q9(this.rank),n,s=e.map((a,i)=>`sourceLoc.${wv[i]} = start[${i}] + coords.${wv[i]};`);n=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${s.join(` @@ -2074,7 +2074,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${n} setOutput(getSource(${o})); } - `}},F0=["x","y","z","w","u","v"];function mee(r){if(r===1)return"sourceLoc";if(r<=6)return F0.slice(0,r).map(e=>"sourceLoc."+e).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var Vh=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=Re(this.rank),o=At("coords",this.rank),n=At("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=` + `}},wv=["x","y","z","w","u","v"];function q9(r){if(r===1)return"sourceLoc";if(r<=6)return wv.slice(0,r).map(e=>"sourceLoc."+e).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}var $h=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=Re(this.rank),o=Rt("coords",this.rank),n=Rt("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${n.slice(-2).join()})`,a=`getChannel(getSource(${n.join()}), ${s})`,i=` result.x = ${a}; if (++${o[this.rank-1]} < ${e[this.rank-1]}) { ++${n[this.rank-1]}; @@ -2092,7 +2092,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } } `,u=this.rank<=4?`sourceLoc = coords + - ${t}(${e.map((l,c)=>`start[${c}]`).join()});`:e.map((l,c)=>`${n[c]} = ${o[c]} + start[${c}];`).join(` + ${t}(${e.map((c,l)=>`start[${l}]`).join()});`:e.map((c,l)=>`${n[l]} = ${o[l]} + start[${l}];`).join(` `);this.userCode=` void main() { ${t} coords = getOutputCoords(); @@ -2103,15 +2103,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${p} setOutput(result); } - `}};function dee(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=nt.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function Js(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=nt.parseSliceParams(n,s,a);if(nt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype==="string"){let c=t.texData.get(n.dataId),m=tA(c.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),l=nt.isSliceContinous(n.shape,i,p);if(u||!l){let c=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Vh(p):new zh(p),m=[i];return t.runWebGLProgram(c,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),dee(n,i,p,t)}var mF={kernelName:_s,backendName:"webgl",kernelFunc:Js};var fee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((b,w)=>b*w),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Ct({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:l}}),x=Js({inputs:{x:g},backend:t,attrs:{begin:c,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},dF={kernelName:ia,backendName:"webgl",kernelFunc:fee};function hee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=Ch(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var fF={kernelName:Tn,backendName:"webgl",kernelFunc:hee};var gee=` + `}};function j9(r,e,t,o){let n=o.texData.get(r.dataId),s=o.makeTensorInfo(t,r.dtype),a=o.texData.get(s.dataId);Object.assign(a,n),a.refCount=1,a.shape=t,a.dtype=r.dtype;let i=pt.computeFlatOffset(e,y.computeStrides(r.shape));n.slice&&(i+=n.slice.flatOffset),a.slice={flatOffset:i,origDataId:n.slice&&n.slice.origDataId||r.dataId};let p=o.dataRefCount.get(a.slice.origDataId)||1;return o.dataRefCount.set(a.slice.origDataId,p+1),s}function Gs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);if(t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.texData.get(n.dataId),m=gD(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}let{isPacked:u}=t.texData.get(n.dataId),c=pt.isSliceContinous(n.shape,i,p);if(u||!c){let l=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new $h(p):new Eh(p),m=[i];return t.runWebGLProgram(l,[n],n.dtype,m)}return t.uploadToGPU(n.dataId),j9(n,i,p,t)}var TA={kernelName:ha,backendName:"webgl",kernelFunc:Gs};var X9=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=te({inputs:{x:n},backend:t,attrs:{shape:p}}),h=bt({inputs:{x:f},backend:t,attrs:{perm:u}}),g=te({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Gs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeIntermediateTensorInfo(b)),x},_A={kernelName:Js,backendName:"webgl",kernelFunc:X9};function Y9(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=t.readSync(n.dataId),p=t.readSync(s.dataId),u=ph(i,p,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,u)}var EA={kernelName:Jo,backendName:"webgl",kernelFunc:Y9};var Q9=` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); int ra = int(a.a) & int(b.a); return vec4(r, g, rb, ra); -`,xee=` +`,Z9=` return float(int(a.r) & int(b.r)); -`;function yee(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS"),a=A().getNumber("WEBGL_VERSION");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[l,c]=kD(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(c,o.dtype),d=t.texData.get(m.dataId);return d.values=l,m}let i;return s?i=new eo(gee,o.shape,n.shape,!1):i=new Br(xee,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var hF={kernelName:_n,backendName:"webgl",kernelFunc:yee};function bee(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var gF={kernelName:ua,backendName:"webgl",kernelFunc:bee};var Cee="return float(a != b);",P0=st({opSnippet:Cee,cpuKernelImpl:KD,dtype:"bool"}),xF={kernelName:Ro,backendName:"webgl",kernelFunc:P0};function _i(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.real},backend:t})}var yF={kernelName:si,backendName:"webgl",kernelFunc:_i};var wee="return float(int(x));";function bF(r,e){let t=new nr(r.shape,wee),o=e.runWebGLProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function O0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Ft({inputs:{x:n},backend:t});let a=Yr(n.shape),i=O0({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=zr({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=_i({inputs:{input:n},backend:t}),i=O0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Ft({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=ND(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return bF(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=P0({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var CF={kernelName:ho,backendName:"webgl",kernelFunc:O0};var wF="return ceil(x);",See=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:TD}),SF={kernelName:go,backendName:"webgl",kernelFunc:See};var Wh=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` +`;function J9(r){let{inputs:e,backend:t}=r,{a:o,b:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS"),a=A().getNumber("WEBGL_VERSION");if(t.shouldExecuteOnCPU([o,n])||a===1){let p=t.texData.get(o.dataId).values,u=t.texData.get(n.dataId).values,[c,l]=zR(o.shape,n.shape,p,u,o.dtype),m=t.makeTensorInfo(l,o.dtype),d=t.texData.get(m.dataId);return d.values=c,m}let i;return s?i=new jr(Q9,o.shape,n.shape,!1):i=new Pr(Z9,o.shape,n.shape),t.runWebGLProgram(i,[o,n],o.dtype)}var $A={kernelName:qa,backendName:"webgl",kernelFunc:J9};function eJ(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.readSync(o.dataId),a=t.readSync(n.dataId),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var RA={kernelName:ea,backendName:"webgl",kernelFunc:eJ};var tJ="return float(a != b);",Sv=nt({opSnippet:tJ,cpuKernelImpl:iD,dtype:"bool"}),DA={kernelName:Yn,backendName:"webgl",kernelFunc:Sv};function bi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.real},backend:t})}var AA={kernelName:Hi,backendName:"webgl",kernelFunc:bi};var rJ="return float(int(x));";function FA(r,e){let t=new tr(r.shape,rJ),o=e.runWebGLProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Iv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Dt({inputs:{x:n},backend:t});let a=Gr(n.shape),i=Iv({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=Or({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeIntermediateTensorInfo(i),p}if(n.dtype==="complex64"){let a=bi({inputs:{input:n},backend:t}),i=Iv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(a),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Dt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.texData.get(n.dataId).values,[i,p,u]=VR(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return FA(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=Sv({inputs:{a:n,b:a},backend:t});return t.disposeIntermediateTensorInfo(a),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var PA={kernelName:yo,backendName:"webgl",kernelFunc:Iv};var OA="return ceil(x);",oJ=xe({opSnippet:OA,packedOpSnippet:OA,cpuKernelImpl:WR}),MA={kernelName:en,backendName:"webgl",kernelFunc:oJ};var Rh=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { float value = getAAtOutCoords(); @@ -2122,7 +2122,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN setOutput(clamp(value, minVal, maxVal)); } - `}};var Uh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` + `}};var Dh=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=` void main() { vec4 value = getAAtOutCoords(); @@ -2133,7 +2133,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } - `}};function Iee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool("WEBGL_PACK_CLIP")?i=new Uh(n.shape):i=new Wh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var IF={kernelName:Go,backendName:"webgl",kernelFunc:Iee};var Gh=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` + `}};function nJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i;A().getBool("WEBGL_PACK_CLIP")?i=new Dh(n.shape):i=new Rh(n.shape);let p=[[s],[a]];return t.runWebGLProgram(i,[n],n.dtype,p)}var LA={kernelName:bo,backendName:"webgl",kernelFunc:nJ};var Ah=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); @@ -2146,7 +2146,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } - `}};function vF(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function vee(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.texData.get(o.dataId),s=new Gh(o.shape),a=[vF(o,n.complexTensorInfos.real),vF(o,n.complexTensorInfos.imag)];return t.runWebGLProgram(s,a,a[0].dtype)}var kF={kernelName:Wi,backendName:"webgl",kernelFunc:vee};var Hh=class{constructor(e){this.outputShape=[],this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((a,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h`T${g}`);let p=new Array(e.length-1);p[0]=e[0][t];for(let h=1;h= ${p[h-1]}) { return getChannel( - getT${h}(${Kh(i,u,g)}), - vec2(${Kh(l,u,g)})); + getT${h}(${Ph(i,u,g)}), + vec2(${Ph(c,u,g)})); }`}let d=p.length,f=p[p.length-1];m+=` return getChannel( - getT${d}(${Kh(i,u,f)}), - vec2(${Kh(l,u,f)}));`,this.userCode=` + getT${d}(${Ph(i,u,f)}), + vec2(${Ph(c,u,f)}));`,this.userCode=` float getValue(${i.map(h=>"int "+h)}) { ${m} } @@ -2192,7 +2192,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(result); } - `}};function Kh(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ep(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Ft({inputs:{x:n.complexTensorInfos.imag},backend:t})}var NF={kernelName:Qi,backendName:"webgl",kernelFunc:Ep};function Kl(r,e,t){let o=r[0].dtype;if(o==="complex64"){let d=r.map(b=>_i({inputs:{input:b},backend:t})),f=r.map(b=>Ep({inputs:{input:b},backend:t})),h=Kl(d,e,t),g=Kl(f,e,t),x=zr({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(S=>{let T=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:T}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=C.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=_D(f,h,o,g),b=C.computeOutShape(r.map(S=>S.shape),e),w=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),w}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let d=a?new nr(r[0].shape,Ha):new Lr(r[0].shape,Ha);return t.runWebGLProgram(d,r,o)}let i=A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=kee(s,e,t),l=new Hh(p.map(d=>d.shape)),c=t.runWebGLProgram(l,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:c},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(c),m}function kee(r,e,t){let o=C.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function M0(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Ft({inputs:{x:p[0]},backend:t}):Kl(p,s,t)}var TF={kernelName:pa,backendName:"webgl",kernelFunc:M0};var ql=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,l=e.dilationHeight,c=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,w=g?3:1,S="",k="";o&&(n?S=`float activation(float a) { + `}};function Ph(r,e,t){let o=r.indexOf(e);return r.map((s,a)=>a===o?`${s} - ${t}`:s).join()}function Ip(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.texData.get(o.dataId);return Dt({inputs:{x:n.complexTensorInfos.imag},backend:t})}var VA={kernelName:Wi,backendName:"webgl",kernelFunc:Ip};function Vc(r,e,t){let o=r[0].dtype;if(o==="complex64"){let d=r.map(b=>bi({inputs:{input:b},backend:t})),f=r.map(b=>Ip({inputs:{input:b},backend:t})),h=Vc(d,e,t),g=Vc(f,e,t),x=Or({inputs:{real:h,imag:g},backend:t});return d.forEach(b=>t.disposeIntermediateTensorInfo(b)),f.forEach(b=>t.disposeIntermediateTensorInfo(b)),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(g),x}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let d=r.map(S=>{let _=[-1,y.sizeFromShape(S.shape.slice(e))];return te({inputs:{x:S},backend:t,attrs:{shape:_}})}),f=d.map(S=>({vals:t.readSync(S.dataId),shape:S.shape})),h=w.computeOutShape(d.map(S=>S.shape),1),g=d[0].shape[0]===1,x=UR(f,h,o,g),b=w.computeOutShape(r.map(S=>S.shape),e),C=t.makeTensorInfo(b,o,x);return d.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}let s=r.filter(d=>y.sizeFromShape(d.shape)>0),a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let d=a?new tr(r[0].shape,La):new Fr(r[0].shape,La);return t.runWebGLProgram(d,r,o)}let i=A().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>i){let d=[];for(let h=0;hf.shape),e);return t.runWebGLProgram(d,s,o)}let{tensors2D:p,outShape:u}=aJ(s,e,t),c=new Fh(p.map(d=>d.shape)),l=t.runWebGLProgram(c,p,o);p.forEach(d=>t.disposeIntermediateTensorInfo(d));let m=te({inputs:{x:l},attrs:{shape:u},backend:t});return t.disposeIntermediateTensorInfo(l),m}function aJ(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>te({inputs:{x:s},attrs:{shape:[-1,y.sizeFromShape(s.shape.slice(e))]},backend:t})),outShape:o}}function vv(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Dt({inputs:{x:p[0]},backend:t}):Vc(p,s,t)}var WA={kernelName:ta,backendName:"webgl",kernelFunc:vv};var Wc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,i=e.padInfo.left,p=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4,g=e.dataFormat==="channelsLast",x=g?1:2,b=g?2:3,C=g?3:1,S="",k="";o&&(n?S=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?S=`float activation(float a) { @@ -2202,7 +2202,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float activation(float x) { ${o} } - `,k="result = activation(result);");let T=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` + `,k="result = activation(result);");let _=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${S} const ivec2 strides = ivec2(${p}, ${u}); @@ -2211,7 +2211,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d2 = coords[${w}]; + int d2 = coords[${C}]; ivec2 xRCCorner = ivec2(coords[${x}], coords[${b}]) * strides - pads; @@ -2222,14 +2222,14 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${m}; wR++) { - int xR = xRCorner + wR * ${l}; + int xR = xRCorner + wR * ${c}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { - int xC = xCCorner + wC * ${c}; + int xC = xCCorner + wC * ${l}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -2322,11 +2322,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } float result = dotProd; - ${T} + ${_} ${k} setOutput(result); } - `}},jh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,l=e.dilationWidth,c=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` + `}},Mh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,o=e.padInfo.top,n=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,m=e.filterHeight,d=e.filterWidth,f=Math.floor(e.inChannels/4)*4,h=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${a}, ${i}); const ivec3 pads = ivec3(${t}, ${o}, ${n}); @@ -2344,7 +2344,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; - for (int wF = 0; wF < ${c}; wF++) { + for (int wF = 0; wF < ${l}; wF++) { int xF = xFCorner + wF * ${p}; if (xF < 0 || xF >= ${e.inDepth}) { @@ -2359,7 +2359,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } for (int wC = 0; wC < ${d}; wC++) { - int xC = xCCorner + wC * ${l}; + int xC = xCCorner + wC * ${c}; if (xC < 0 || xC >= ${e.inWidth}) { continue; @@ -2414,9 +2414,9 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}};var jl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,l=e.filterWidth,c=l,m=` + `}};var Uc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.padInfo.left,i=e.strideWidth,p=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,m=` int xR; int xC; int xCOffset; - vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g=0 && xR < inDims[0]) { - `;for(let g=0;g<(c+1)/2;g++){let x=g*2;if(m+=` + `;for(let g=0;g<(l+1)/2;g++){let x=g*2;if(m+=` xC = xCCorner + ${x*p}; - `,i===1){if(x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { xTexelC${x} = getX(batch, xR, xCOffset, d1); @@ -2474,7 +2474,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${x} = xTexelC${x}; - `,x+1= 0 && xCOffset < inDims[1] && xTexelC${x+1}Ready == 0) { @@ -2511,7 +2511,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${x+1} = xTexelC${x+1}; - `}}else x= 0 && xCOffset < inDims[1] && xTexelC${x}Ready == 0) { xTexelC${x} = getX(batch, xR, xCOffset, d1); @@ -2534,7 +2534,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${x} = vec4(xTexelC${x}.zw, xTexelC${x+1}.zw); - `,x+1= 0 && xCOffset < inDims[1]) { @@ -2561,15 +2561,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN xC${x} = vec4( xTexelC${x}.xy, xTexelC${x+1}.xy); - `,x+1=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function Qh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),l=t.inChannels,c=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat==="channelsLast",f=!1,h=!1,g,x=[];if(s!=null){let S=Yh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Yh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((c===1||m===1)&&l>A0)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},T=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(vu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let E=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push(E);let R=_p({a:k,b:E,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=T,D.shape=t.outShape,g=Ft({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),T=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),E=_p({a:d?k:T,b:d?T:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:E},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(T),x.push(E)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Zh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:l,outWidth:c,outHeight:m,dataFormat:d}=t,f=d==="channelsLast",h=p*u*l,g=m*c,x=[t.batchSize,h,g],b=!0,w=!1,S=[];if(s!=null){let q=Yh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Yh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let T=new Xh(x,t),E=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(T,[r],"float32",E),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let F=n!=null,O=s!=null,M=i==="leakyrelu",L=i?Ti(i,!0):null,B=new Hl(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,w,F,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],"float32",y.createScalarValue(a,"float32"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,"float32"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function Nee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))d=Qh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&c==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let h=new jl(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],"float32",g)}else if(A().getBool("WEBGL_CONV_IM2COL"))d=Zh({x:n,filter:s,convInfo:m,backend:t});else{let h=new ql(m);d=t.runWebGLProgram(h,[n,s],"float32")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var _F={kernelName:En,backendName:"webgl",kernelFunc:Nee};var Jh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat==="channelsLast";this.userCode=` + `}};function Bh(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function zh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=r.shape,u=o.texData.get(r.dataId),c=t.inChannels,l=p[0]*p[1]*p[2],m=t.outChannels,d=t.dataFormat==="channelsLast",f=!1,h=!1,g,x=[];if(s!=null){let S=Bh(s.shape,d);S!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:S}}),x.push(s))}if(n!=null){let S=Bh(n.shape,d);S!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:S}}),x.push(n))}if(!((l===1||m===1)&&c>Cv)&&u.isPacked&&d&&u.texture!=null&&p[2]%2!==0&&y.arraysEqual(u.shape.slice(-3),p.slice(-3))){let S=p[0]*p[1]*(p[2]+1),k={dataId:r.dataId,shape:[1,S,t.inChannels],dtype:r.dtype},_=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,y.assert(xu(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let $=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});x.push($);let R=Sp({a:k,b:$,backend:o,transposeA:f,transposeB:h,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),D=o.texData.get(R.dataId);y.assert(D.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=_,D.shape=t.outShape,g=Dt({inputs:{x:R},backend:o}),g.shape=t.outShape,x.push(R)}else{let S=t.outHeight*t.outWidth,k=te({inputs:{x:r},backend:o,attrs:{shape:d?[t.batchSize,S,t.inChannels]:[t.batchSize,t.inChannels,S]}}),_=te({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}}),$=Sp({a:d?k:_,b:d?_:k,transposeA:!d,transposeB:h,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});g=te({inputs:{x:$},backend:o,attrs:{shape:t.outShape}}),x.push(k),x.push(_),x.push($)}for(let S of x)o.disposeIntermediateTensorInfo(S);return g}function Vh({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,outWidth:l,outHeight:m,dataFormat:d}=t,f=d==="channelsLast",h=p*u*c,g=m*l,x=[t.batchSize,h,g],b=!0,C=!1,S=[];if(s!=null){let q=Bh(s.shape,f);q!=null&&(s=te({inputs:{x:s},backend:o,attrs:{shape:q}}),S.push(s))}if(n!=null){let q=Bh(n.shape,f);q!=null&&(n=te({inputs:{x:n},backend:o,attrs:{shape:q}}),S.push(n))}let k=te({inputs:{x:e},backend:o,attrs:{shape:[1,h,y.sizeFromShape(e.shape)/h]}});S.push(k);let _=new Lh(x,t),$=[r.shape,[t.padInfo.top,t.padInfo.left],[t.strideHeight,t.strideWidth],[t.dilationHeight,t.dilationWidth],[t.inChannels],[t.filterWidth*t.inChannels],[t.outWidth]],R=o.runWebGLProgram(_,[r],"float32",$),D=te({inputs:{x:R},backend:o,attrs:{shape:x}});S.push(R),S.push(D);let P=n!=null,O=s!=null,M=i==="leakyrelu",L=i?yi(i,!0):null,B=new zc(f?D.shape:k.shape,f?k.shape:D.shape,f?[t.batchSize,g,t.outChannels]:[t.batchSize,t.outChannels,g],b,C,P,L,O,M),z=f?[D,k]:[k,D];if(n&&z.push(n),O&&z.push(s),M){let q=o.makeTensorInfo([],"float32",y.createScalarValue(a,"float32"));z.push(q),S.push(q)}let U=o.runWebGLProgram(B,z,"float32"),j=te({inputs:{x:U},backend:o,attrs:{shape:t.outShape}});S.push(U);for(let q of S)o.disposeIntermediateTensorInfo(q);return j}function iJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l),d;if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))d=zh({x:n,filter:s,convInfo:m,backend:t});else if(m.strideWidth<=2&&l==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let h=new Uc(m),g=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]];d=t.runWebGLProgram(h,[n,s],"float32",g)}else if(A().getBool("WEBGL_CONV_IM2COL"))d=Vh({x:n,filter:s,convInfo:m,backend:t});else{let h=new Wc(m);d=t.runWebGLProgram(h,[n,s],"float32")}let f=te({inputs:{x:d},backend:t,attrs:{shape:m.outShape}});return t.disposeIntermediateTensorInfo(d),f}var UA={kernelName:tn,backendName:"webgl",kernelFunc:iJ};var Wh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -2694,15 +2694,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},eg=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,l=a?2:3,c=a?3:1;this.userCode=` + `}},Uh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,p=o-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; - int d1 = coords[${c}]; + int d1 = coords[${l}]; - ivec2 dyCorner = ivec2(coords[${u}], coords[${l}]) - pads; + ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; @@ -2747,7 +2747,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},tg=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=` + `}},Gh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,i=e.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; @@ -2789,8 +2789,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},rg=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,l=n-1-e.padInfo.left;this.userCode=` - const ivec3 pads = ivec3(${p}, ${u}, ${l}); + `}},Hh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,o=e.filterHeight,n=e.filterWidth,s=e.strideDepth,a=e.strideHeight,i=e.strideWidth,p=t-1-e.padInfo.front,u=o-1-e.padInfo.top,c=n-1-e.padInfo.left;this.userCode=` + const ivec3 pads = ivec3(${p}, ${u}, ${c}); void main() { ivec5 coords = getOutputCoords(); @@ -2846,7 +2846,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}};function Tee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,l,a,1,i,u,!1,c),d=new Jh(m);return t.runWebGLProgram(d,[n,s],"float32")}var EF={kernelName:Ui,backendName:"webgl",kernelFunc:Tee};var og=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=lt(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=` + `}};function uJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new Wh(m);return t.runWebGLProgram(d,[n,s],"float32")}var GA={kernelName:Fi,backendName:"webgl",kernelFunc:uJ};var Kh=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=ut(this.outputShape.length);let t=e.filterHeight,o=e.filterWidth,n=t-1-e.padInfo.top,s=o-1-e.padInfo.left;this.userCode=` const ivec2 pads = ivec2(${n}, ${s}); void main() { @@ -2920,19 +2920,19 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(result); } - `}};function _ee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(u),m=C.computeConv2DInfo(a,s.shape,i,1,p,l,!1,c);if(A().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&c==="channelsLast"){let d=[[m.strideHeight,m.strideWidth]],f=new og(m);return t.runWebGLProgram(f,[n,s],"float32",d)}else{let d=new eg(m);return t.runWebGLProgram(d,[n,s],"float32")}}var $F={kernelName:$n,backendName:"webgl",kernelFunc:_ee};function Eee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeConv3DInfo(n.shape,s.shape,a,p,i),l=new jh(u);return t.runWebGLProgram(l,[n,s],"float32")}var RF={kernelName:Rn,backendName:"webgl",kernelFunc:Eee};function $ee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=C.computeConv3DInfo(n.shape,p,a,1,i),l=new tg(u);return t.runWebGLProgram(l,[n,s],"float32")}var DF={kernelName:ti,backendName:"webgl",kernelFunc:$ee};function Ree(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=C.computeConv3DInfo(p,s.shape,i,1,a),l=new rg(u);return t.runWebGLProgram(l,[n,s],"float32")}var AF={kernelName:Dn,backendName:"webgl",kernelFunc:Ree};var Dee=sn+` + `}};function pJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l);if(A().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&l==="channelsLast"){let d=[[m.strideHeight,m.strideWidth]],f=new Kh(m);return t.runWebGLProgram(f,[n,s],"float32",d)}else{let d=new Uh(m);return t.runWebGLProgram(d,[n,s],"float32")}}var HA={kernelName:rn,backendName:"webgl",kernelFunc:pJ};function cJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=new Mh(u);return t.runWebGLProgram(c,[n,s],"float32")}var KA={kernelName:on,backendName:"webgl",kernelFunc:cJ};function lJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Gh(u);return t.runWebGLProgram(c,[n,s],"float32")}var qA={kernelName:ja,backendName:"webgl",kernelFunc:lJ};function mJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{pad:a,strides:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,i,1,a),c=new Hh(u);return t.runWebGLProgram(c,[n,s],"float32")}var jA={kernelName:nn,backendName:"webgl",kernelFunc:mJ};var dJ=Fo+` return cos(x); -`,Aee=` +`,fJ=` vec4 result = cos(x); bvec4 isNaN = isnan(x); - ${to} + ${Xr} return result; -`,Fee=xe({opSnippet:Dee,packedOpSnippet:Aee}),FF={kernelName:An,backendName:"webgl",kernelFunc:Fee};var Pee=` +`,hJ=xe({opSnippet:dJ,packedOpSnippet:fJ}),XA={kernelName:sn,backendName:"webgl",kernelFunc:hJ};var gJ=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; -`,Oee=xe({opSnippet:Pee}),PF={kernelName:Fn,backendName:"webgl",kernelFunc:Oee};var ng=class{constructor(e,t,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=e,[l]=t,[c,m]=o;this.outputShape=[l,c,m,u];let d=n==="bilinear"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=c>1?[`${(i-1)/(c-1)}`,"(y2-y1) * height_ratio",`y1*${f} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${f}`],[w,S,k]=m>1?[`${(p-1)/(m-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=` +`,xJ=xe({opSnippet:gJ}),YA={kernelName:an,backendName:"webgl",kernelFunc:xJ};var qh=class{constructor(e,t,o,n,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,i,p,u]=e,[c]=t,[l,m]=o;this.outputShape=[c,l,m,u];let d=n==="bilinear"?1:0,[f,h]=[`${i-1}.0`,`${p-1}.0`],[g,x,b]=l>1?[`${(i-1)/(l-1)}`,"(y2-y1) * height_ratio",`y1*${f} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${f}`],[C,S,k]=m>1?[`${(p-1)/(m-1)}`,"(x2-x1) * width_ratio",`x1*${h} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${h}`];this.userCode=` const float height_ratio = float(${g}); - const float width_ratio = float(${w}); + const float width_ratio = float(${C}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -2991,20 +2991,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN setOutput(newValue); } } - `}};var Mee=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,l=new ng(n.shape,s.shape,i,p,u);return t.runWebGLProgram(l,[n,s,a],"float32")},OF={kernelName:Mn,backendName:"webgl",kernelFunc:Mee};var $p;(function(r){r.Prod="*",r.Sum="+"})($p||($p={}));var lm=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===$p.Prod?"1.0":"0.0",i=o?a:`getX(${MF(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",l="";o?(u=n?`end != ${p-1}`:"end != 0",l=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",l=n?"end + pow2":"end - pow2"),this.userCode=` + `}};var yJ=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new qh(n.shape,s.shape,i,p,u);return t.runWebGLProgram(c,[n,s,a],"float32")},QA={kernelName:cn,backendName:"webgl",kernelFunc:yJ};var vp;(function(r){r.Prod="*",r.Sum="+"})(vp||(vp={}));var om=class{constructor(e,t,o,n){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===vp.Prod?"1.0":"0.0",i=o?a:`getX(${ZA(s,"coords",this.op)})`,p=this.outputShape[this.outputShape.length-1],u="",c="";o?(u=n?`end != ${p-1}`:"end != 0",c=n?"end + 1":"end - 1"):(u=n?`end + pow2 < ${p}`:"end >= pow2",c=n?"end + pow2":"end - pow2"),this.userCode=` void main() { ${Re(s)} coords = getOutputCoords(); - int end = ${LF(s,"coords",this.op)}; + int end = ${JA(s,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${u}) { - int idx = ${l}; - ${LF(s,"coords",this.op)} = idx; - val ${this.op}= getX(${MF(s,"coords",this.op)}); + int idx = ${c}; + ${JA(s,"coords",this.op)} = idx; + val ${this.op}= getX(${ZA(s,"coords",this.op)}); } setOutput(val); } - `}};function MF(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function LF(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function sg(r,e,t,o,n,s){let a=e.shape.length,i=C.getAxesPermutation([o],a),p=e;i!=null&&(p=Ct({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=C.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let l=p.shape[u],c=Ft({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(l))-1;m++){let d=new lm(r,p.shape,!1,s),f=[[m]],h=c;c=t.runWebGLProgram(d,[c],c.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new lm(r,p.shape,n,s),d=c;c=t.runWebGLProgram(m,[c],c.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=C.getUndoAxesPermutation(i),d=Ct({inputs:{x:c},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(p),d}return c}function Lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return sg($p.Prod,n,t,s,a,i)}var BF={kernelName:Pn,backendName:"webgl",kernelFunc:Lee};function Bee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return sg($p.Sum,n,t,s,a,i)}var zF={kernelName:On,backendName:"webgl",kernelFunc:Bee};function zee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),l=Ch(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,l)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),l=vD(p,u,a,i);return t.makeTensorInfo(l.shape,s.dtype,l.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var VF={kernelName:la,backendName:"webgl",kernelFunc:zee};var ag=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=` + `}};function ZA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function JA(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw new Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function jh(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=bt({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=Dt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new om(r,p.shape,!1,s),f=[[m]],h=l;l=t.runWebGLProgram(d,[l],l.dtype,f),t.disposeIntermediateTensorInfo(h)}if(n){let m=new om(r,p.shape,n,s),d=l;l=t.runWebGLProgram(m,[l],l.dtype),t.disposeIntermediateTensorInfo(d)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=bt({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(p),d}return l}function bJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Prod,n,t,s,a,i)}var eF={kernelName:un,backendName:"webgl",kernelFunc:bJ};function CJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return jh(vp.Sum,n,t,s,a,i)}var tF={kernelName:pn,backendName:"webgl",kernelFunc:CJ};function wJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o;if(n.shape.length===1){let p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=ph(p,u,s.dtype,s.shape,a);return t.makeTensorInfo([a],s.dtype,c)}else if(n.shape.length===2){let p=t.bufferSync(n),u=t.bufferSync(s),c=BR(p,u,a,i);return t.makeTensorInfo(c.shape,s.dtype,c.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${n.shape.length}.`)}var rF={kernelName:ra,backendName:"webgl",kernelFunc:wJ};var Xh=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=o,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3023,7 +3023,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN 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 Vee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],l=a==="NHWC"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a==="NHWC"?[i,c,m,d]:[i,d,c,m],h=new ag(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var WF={kernelName:Ln,backendName:"webgl",kernelFunc:Vee};var Xl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u="",l="";o&&(n?u=`float activation(float a) { + `}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 SJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=new Xh(f,s,a);return t.runWebGLProgram(h,[n],n.dtype)}var oF={kernelName:ln,backendName:"webgl",kernelFunc:SJ};var Gc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.filterHeight,i=e.filterWidth,p=e.outChannels/e.inChannels,u="",c="";o&&(n?u=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${o} }`:s?u=`float activation(float a) { @@ -3033,7 +3033,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float activation(float x) { ${o} } - `,l="result = activation(result);");let c=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` + `,c="result = activation(result);");let l=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${u} void main() { @@ -3072,20 +3072,20 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } float result = dotProd; - ${c} ${l} + ${c} setOutput(result); } - `}};var Yl=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=lt(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,l=e.filterHeight,c=e.filterWidth,m=c,d=` + `}};var Hc=class{constructor(e,t=!1,o=null,n=!1,s=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=ut(this.outputShape.length);let a=e.outChannels/e.inChannels,i=e.padInfo.left,p=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,m=l,d=` int xR; int xC; int xCOffset; - vec4 wTexel; vec4 previous; vec4 final;`;for(let x=0;x=0 && xR < inDims[0]) { `;for(let x=0;x<(m+1)/2;x++){let b=x*2;if(d+=` xC = xCCorner + ${b*u}; - `,p===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -3135,8 +3135,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${b} = xTexelC${b}; - `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); @@ -3158,10 +3158,10 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } `:d+=` xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy); - `):w===1?d+=` + `):C===1?d+=` xC${b+1} = xTexelC${b}; `:d+=` - xCOffset = xC + ${w}; + xCOffset = xC + ${C}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); @@ -3172,7 +3172,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${b+1} = xTexelC${b+1}; - `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xCOffset, d1); @@ -3195,7 +3195,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw); - `,b+1= 0 && xCOffset < inDims[1]) { @@ -3222,12 +3222,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN xC${b} = vec4( xTexelC${b}.xy, xTexelC${b+1}.xy); - `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${l}'`);let c=C.computeConv2DInfo(n.shape,s.shape,a,l,i,u,!0),m;A().getBool("WEBGL_PACK_DEPTHWISECONV")&&c.strideWidth<=2&&c.outChannels/c.inChannels===1?m=new Yl(c):m=new Xl(c);let d=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];return t.runWebGLProgram(m,[n,s],"float32",d)}var UF={kernelName:Bn,backendName:"webgl",kernelFunc:Wee};var ig=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=` + `}};function IJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p,dimRoundingMode:u}=o,c=p;c==null&&(c=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(a,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=w.computeConv2DInfo(n.shape,s.shape,a,c,i,u,!0),m;A().getBool("WEBGL_PACK_DEPTHWISECONV")&&l.strideWidth<=2&&l.outChannels/l.inChannels===1?m=new Hc(l):m=new Gc(l);let d=[[l.padInfo.top,l.padInfo.left],[l.strideHeight,l.strideWidth],[l.dilationHeight,l.dilationWidth],[l.inHeight,l.inWidth]];return t.runWebGLProgram(m,[n,s],"float32",d)}var nF={kernelName:mn,backendName:"webgl",kernelFunc:IJ};var Yh=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,o=e.strideWidth,n=e.padInfo.top,s=e.padInfo.left,a=e.outChannels/e.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; @@ -3300,7 +3300,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},ug=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=` + `}},Qh=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,o=e.filterWidth,n=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,i=o-1-e.padInfo.left,p=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${i}); void main() { @@ -3345,15 +3345,15 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}};function Uee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:l}=o,c=C.computeConv2DInfo(n.shape,l,a,i,p,u,!0),m=new ig(c);return t.runWebGLProgram(m,[n,s],"float32")}var GF={kernelName:Gi,backendName:"webgl",kernelFunc:Uee};function Gee(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:l}=o,c=C.computeConv2DInfo(l,s.shape,a,i,p,u,!0),m=new ug(c);return t.runWebGLProgram(m,[n,s],"float32")}var HF={kernelName:Hi,backendName:"webgl",kernelFunc:Gee};var pg=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=` + `}};function vJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new Yh(l);return t.runWebGLProgram(m,[n,s],"float32")}var sF={kernelName:Pi,backendName:"webgl",kernelFunc:vJ};function kJ(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Qh(l);return t.runWebGLProgram(m,[n,s],"float32")}var aF={kernelName:Oi,backendName:"webgl",kernelFunc:kJ};var Zh=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 Hee(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new pg(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var KF={kernelName:ca,backendName:"webgl",kernelFunc:Hee};var lg=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:l}=e,{top:c,left:m}=n;this.userCode=` + `}};function NJ(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=te({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Zh(s),p=t.runWebGLProgram(i,[a],a.dtype),u=te({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(p),u}var iF={kernelName:oa,backendName:"webgl",kernelFunc:NJ};var Jh=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:o,padInfo:n,strideHeight:s,strideWidth:a,filterHeight:i,filterWidth:p,dilationHeight:u,dilationWidth:c}=e,{top:l,left:m}=n;this.userCode=` const ivec2 strides = ivec2(${s}, ${a}); - const ivec2 pads = ivec2(${c}, ${m}); + const ivec2 pads = ivec2(${l}, ${m}); const float neg_infinity = -3.4e38; void main() { @@ -3371,7 +3371,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN if (hIn >= 0 && hIn < ${t}) { for (int w = 0; w < ${p}; w++) { - int wIn = wBeg + w * ${l}; + int wIn = wBeg + w * ${c}; if (wIn >= 0 && wIn < ${o}) { float xVal = getX(batch, hIn, wIn, d1); @@ -3389,7 +3389,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float result = curVal; setOutput(result); } - `}};function Kee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),l,c=new lg(u);l=t.runWebGLProgram(c,[n,s],"float32");let m=te({inputs:{x:l},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(l),m}var qF={kernelName:zn,backendName:"webgl",kernelFunc:Kee};function qee(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=C.decodeEinsumEquation(n,s.length);C.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:l}=C.getEinsumComputePath(i,p),c=l.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=Tp({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var jF={kernelName:ji,backendName:"webgl",kernelFunc:qee};var jee="return (x >= 0.0) ? x : (exp(x) - 1.0);",Xee=` + `}};function TJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c,l=new Jh(u);c=t.runWebGLProgram(l,[n,s],"float32");let m=te({inputs:{x:c},backend:t,attrs:{shape:u.outShape}});return t.disposeIntermediateTensorInfo(c),m}var uF={kernelName:dn,backendName:"webgl",kernelFunc:TJ};function _J(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=wp({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeIntermediateTensorInfo(h);return m}var pF={kernelName:Bi,backendName:"webgl",kernelFunc:_J};var EJ="return (x >= 0.0) ? x : (exp(x) - 1.0);",$J=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); @@ -3398,29 +3398,29 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; -`,Yee=xe({opSnippet:jee,packedOpSnippet:Xee}),XF={kernelName:Wn,backendName:"webgl",kernelFunc:Yee};var Qee="return (b >= 0.0) ? a : a * (b + 1.0);",Zee=` +`,RJ=xe({opSnippet:EJ,packedOpSnippet:$J}),cF={kernelName:hn,backendName:"webgl",kernelFunc:RJ};var DJ="return (b >= 0.0) ? a : a * (b + 1.0);",AJ=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); -`,Jee=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new eo(Zee,o.shape,n.shape):new Br(Qee,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},YF={kernelName:ri,backendName:"webgl",kernelFunc:Jee};var ete=` +`,FJ=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=A().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new jr(AJ,o.shape,n.shape):new Pr(DJ,o.shape,n.shape);return t.runWebGLProgram(s,[o,n],o.dtype)},lF={kernelName:Xa,backendName:"webgl",kernelFunc:FJ};var PJ=` return vec4(equal(a, b)); -`,tte="return float(a == b);",rte=st({opSnippet:tte,packedOpSnippet:ete,dtype:"bool",cpuKernelImpl:ED}),QF={kernelName:xo,backendName:"webgl",kernelFunc:rte};var ote=` +`,OJ="return float(a == b);",MJ=nt({opSnippet:OJ,packedOpSnippet:PJ,dtype:"bool",cpuKernelImpl:GR}),mF={kernelName:xn,backendName:"webgl",kernelFunc:MJ};var LJ=` // 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 p = ${w.ERF_P}; + float a1 = ${w.ERF_A1}; + float a2 = ${w.ERF_A2}; + float a3 = ${w.ERF_A3}; + float a4 = ${w.ERF_A4}; + float a5 = ${w.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)); -`,nte=xe({opSnippet:ote}),ZF={kernelName:Un,backendName:"webgl",kernelFunc:nte};var ste=sn+` +`,BJ=xe({opSnippet:LJ}),dF={kernelName:gn,backendName:"webgl",kernelFunc:BJ};var zJ=Fo+` return exp(x); -`,ate=` +`,VJ=` vec4 result = exp(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; @@ -3429,7 +3429,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN result.a = isNaN.a ? x.a : result.a; return result; -`,L0=xe({opSnippet:ste,packedOpSnippet:ate,cpuKernelImpl:$D,dtype:"float32"}),JF={kernelName:yo,backendName:"webgl",kernelFunc:L0};function cg(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var e3={kernelName:ma,backendName:"webgl",kernelFunc:cg};var t3="return exp(x) - 1.0;",ite=xe({opSnippet:t3,packedOpSnippet:t3,cpuKernelImpl:RD}),r3={kernelName:bo,backendName:"webgl",kernelFunc:ite};var cm=class{constructor(e,t,o){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.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=` +`,kv=xe({opSnippet:zJ,packedOpSnippet:VJ,cpuKernelImpl:HR,dtype:"float32"}),fF={kernelName:yn,backendName:"webgl",kernelFunc:kv};function eg(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),te({inputs:{x:s},backend:o,attrs:{shape:i}})}var hF={kernelName:na,backendName:"webgl",kernelFunc:eg};var gF="return exp(x) - 1.0;",WJ=xe({opSnippet:gF,packedOpSnippet:gF,cpuKernelImpl:KR}),xF={kernelName:bn,backendName:"webgl",kernelFunc:WJ};var nm=class{constructor(e,t,o){this.variableNames=["real","imag"];let n=t[1];this.outputShape=t;let s=o?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=o?`${n}.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 = ${s}; float unaryOpComplex(float real, float expR, float imag, float expI) { @@ -3462,12 +3462,12 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } - `}};function mg(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new cm("real",p,e),l=new cm("imag",p,e),c=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,c,"float32"),d=t.runWebGLProgram(l,c,"float32"),f=zr({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function ute(r){let{inputs:e,backend:t}=r,{input:o}=e;return mg(o,!1,t)}var o3={kernelName:Xi,backendName:"webgl",kernelFunc:ute};var dg=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` + `}};function tg(r,e,t){let o=t.texData.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=te({inputs:{x:r},backend:t,attrs:{shape:[a,s]}}),p=i.shape,u=new nm("real",p,e),c=new nm("imag",p,e),l=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:p},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:p}],m=t.runWebGLProgram(u,l,"float32"),d=t.runWebGLProgram(c,l,"float32"),f=Or({inputs:{real:m,imag:d},backend:t});t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d);let h=te({inputs:{x:f},backend:t,attrs:{shape:r.shape}});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(f),h}function UJ(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!1,t)}var yF={kernelName:zi,backendName:"webgl",kernelFunc:UJ};var rg=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=` void main() { // Input can be obtained from uniform value. setOutput(value); } - `}};function Ei(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new dg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var n3={kernelName:da,backendName:"webgl",kernelFunc:Ei};var fg=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=` + `}};function Ci(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new rg(o,n),i=[[n]];return e.runWebGLProgram(a,[],s,i)}}var bF={kernelName:sa,backendName:"webgl",kernelFunc:Ci};var og=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]; @@ -3481,7 +3481,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(outputValue); } - `}};var s3={kernelName:Gn,backendName:"webgl",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new fg(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var a3="return floor(x);",pte=xe({opSnippet:a3,packedOpSnippet:a3,cpuKernelImpl:DD}),i3={kernelName:Co,backendName:"webgl",kernelFunc:pte};var lte=` + `}};var CF={kernelName:Cn,backendName:"webgl",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new og(t.shape);return o.runWebGLProgram(n,[t],t.dtype)}};var wF="return floor(x);",GJ=xe({opSnippet:wF,packedOpSnippet:wF,cpuKernelImpl:qR}),SF={kernelName:wn,backendName:"webgl",kernelFunc:GJ};var HJ=` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); @@ -3491,7 +3491,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } else { return NAN; } -`,cte=` +`,KJ=` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); @@ -3512,7 +3512,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); -`,mte=st({opSnippet:lte,packedOpSnippet:cte,dtype:"int32"}),u3={kernelName:wo,backendName:"webgl",kernelFunc:mte};var hg=class{constructor(e){this.variableNames=["A"];let t=kt(),[o,n]=e;this.outputShape=e,this.userCode=` +`,qJ=nt({opSnippet:HJ,packedOpSnippet:KJ,dtype:"int32"}),IF={kernelName:Sn,backendName:"webgl",kernelFunc:qJ};var ng=class{constructor(e){this.variableNames=["A"];let t=It(),[o,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3534,7 +3534,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN setOutput(floor(value * 255.0 + 0.5)); } - `}};var gg=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=kt(),[o,n]=e;this.outputShape=e,this.userCode=` + `}};var sg=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=It(),[o,n]=e;this.outputShape=e,this.userCode=` void main() { ivec3 coords = getOutputCoords(); int texR = coords[0]; @@ -3568,7 +3568,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${t.output} = result; } - `}};var p3={kernelName:Lu,backendName:"webgl",kernelFunc:dte},Ql,B0=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function dte(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],l=[u,p],c=[u,p,s];if(i||a){let h=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ql==null||h!==B0)&&(B0=h,Ql=document.createElement("canvas").getContext("2d",{willReadFrequently:B0})),Ql.canvas.width=p,Ql.canvas.height=u,Ql.drawImage(n,0,0,p,u),n=Ql.canvas}let m=t.makeTensorInfo(l,"int32");t.texData.get(m.dataId).usage=hr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool("WEBGL_PACK")?new gg(c):new hg(c),f=t.runWebGLProgram(d,[m],"int32");return t.disposeData(m.dataId),f}function fte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:l,dilations:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=C.convertConv2DDataFormat(l),g=C.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!1,h),x,b=[],w=a!=null,S=i!=null,k=d==="leakyrelu",T=()=>{let R=[n,s],D=(F,O)=>{if(O==="NCHW"&&F.shape.length===1&&F.shape[0]!==1){let M=te({inputs:{x:F},backend:t,attrs:{shape:[F.shape[0],1,1]}});return b.push(M),M}return F};if(w&&R.push(D(a,l)),S&&R.push(D(i,l)),k){let F=t.makeTensorInfo([],"float32",y.createScalarValue(f,"float32"));R.push(F),b.push(F)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=Qh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let R=d?Ti(d,!0):null,D=new jl(g,w,R,S,k),F=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=T();x=t.runWebGLProgram(D,O,"float32",F)}else if(A().getBool("WEBGL_CONV_IM2COL"))x=Zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?Ti(d,!1):null,D=new ql(g,w,R,S,k),F=T();x=t.runWebGLProgram(D,F,"float32")}let E=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),E}var l3={kernelName:jo,backendName:"webgl",kernelFunc:fte};function hte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dimRoundingMode:c,activation:m,leakyreluAlpha:d}=o,f=[],h=l;h==null&&(h=[1,1]),y.assert(C.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=C.computeConv2DInfo(n.shape,s.shape,p,h,u,c,!0),x=A().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?Ti(m,x):null,w=[n,s],S=a!=null,k=i!=null,T=m==="leakyrelu";if(S&&w.push(a),k&&w.push(i),T){let F=t.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));w.push(F),f.push(F)}let E;x?E=new Yl(g,S,b,k,T):E=new Xl(g,S,b,k,T);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram(E,w,"float32",R);return f.forEach(F=>t.disposeIntermediateTensorInfo(F)),D}var c3={kernelName:Xo,backendName:"webgl",kernelFunc:hte};var xg=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=Re(o.length),a=` + `}};var vF={kernelName:Du,backendName:"webgl",kernelFunc:jJ},Kc,Nv=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function jJ(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o,a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,[p,u]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],c=[u,p],l=[u,p,s];if(i||a){let h=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Kc==null||h!==Nv)&&(Nv=h,Kc=document.createElement("canvas").getContext("2d",{willReadFrequently:Nv})),Kc.canvas.width=p,Kc.canvas.height=u,Kc.drawImage(n,0,0,p,u),n=Kc.canvas}let m=t.makeTensorInfo(c,"int32");t.texData.get(m.dataId).usage=mr.PIXELS,t.gpgpu.uploadPixelDataToTexture(t.getTexture(m.dataId),n);let d=A().getBool("WEBGL_PACK")?new sg(l):new ng(l),f=t.runWebGLProgram(d,[m],"int32");return t.disposeData(m.dataId),f}function XJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h),x,b=[],C=a!=null,S=i!=null,k=d==="leakyrelu",_=()=>{let R=[n,s],D=(P,O)=>{if(O==="NCHW"&&P.shape.length===1&&P.shape[0]!==1){let M=te({inputs:{x:P},backend:t,attrs:{shape:[P.shape[0],1,1]}});return b.push(M),M}return P};if(C&&R.push(D(a,c)),S&&R.push(D(i,c)),k){let P=t.makeTensorInfo([],"float32",y.createScalarValue(f,"float32"));R.push(P),b.push(P)}return R};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))x=zh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&h==="channelsLast"&&A().getBool("WEBGL_EXP_CONV")){let R=d?yi(d,!0):null,D=new Uc(g,C,R,S,k),P=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],O=_();x=t.runWebGLProgram(D,O,"float32",P)}else if(A().getBool("WEBGL_CONV_IM2COL"))x=Vh({x:n,filter:s,convInfo:g,backend:t,bias:a,activation:d,preluActivationWeights:i,leakyreluAlpha:f});else{let R=d?yi(d,!1):null,D=new Wc(g,C,R,S,k),P=_();x=t.runWebGLProgram(D,P,"float32")}let $=te({inputs:{x},backend:t,attrs:{shape:g.outShape}});return b.push(x),b.forEach(R=>t.disposeIntermediateTensorInfo(R)),$}var kF={kernelName:Io,backendName:"webgl",kernelFunc:XJ};function YJ(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=[],h=c;h==null&&(h=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(p,h),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${h}'`);let g=w.computeConv2DInfo(n.shape,s.shape,p,h,u,l,!0),x=A().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=m?yi(m,x):null,C=[n,s],S=a!=null,k=i!=null,_=m==="leakyrelu";if(S&&C.push(a),k&&C.push(i),_){let P=t.makeTensorInfo([],"float32",y.createScalarValue(d,"float32"));C.push(P),f.push(P)}let $;x?$=new Hc(g,S,b,k,_):$=new Gc(g,S,b,k,_);let R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=t.runWebGLProgram($,C,"float32",R);return f.forEach(P=>t.disposeIntermediateTensorInfo(P)),D}var NF={kernelName:vo,backendName:"webgl",kernelFunc:YJ};var ag=class{constructor(e,t,o,n){this.sliceDim=e,this.strides=t,this.paramsShape=n,this.variableNames=["x","indices"],this.outputShape=o;let s=Re(o.length),a=` int index;`;for(let i=0;i= 0) && (index < ${e[2]}) ? 1.0 : 0.0; setOutput(inBounds * getA(${n})); } - `}};function xte(r,e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${w-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(n,s,p,i),l=y.sizeFromShape(s.shape),c=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,l/u.batchSize]}});c.push(m),c.push(d);let f=[u.batchSize,u.outerSize,l/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=t.bufferSync(d),w=t.bufferSync(m),S=FD(w,b,f);return c.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new yg(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);c.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return c.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var d3={kernelName:fa,backendName:"webgl",kernelFunc:z0};var yte="return float(a > b);",bte=` + `}};function ZJ(r,e){let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=0,()=>`GatherV2: the index value ${k} is not in [0, ${C-1}]`)}}let u=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),c=y.sizeFromShape(s.shape),l=[],m=te({inputs:{x:n},backend:t,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),d=te({inputs:{x:s},backend:t,attrs:{shape:[u.batchSize,c/u.batchSize]}});l.push(m),l.push(d);let f=[u.batchSize,u.outerSize,c/u.batchSize,u.sliceSize];if(t.shouldExecuteOnCPU([n,s])||n.dtype==="string"){let b=t.bufferSync(d),C=t.bufferSync(m),S=XR(C,b,f);return l.forEach(k=>t.disposeIntermediateTensorInfo(k)),t.makeTensorInfo(u.outputShape,S.dtype,S.values)}let h=new ig(m.shape,f),g=t.runWebGLProgram(h,[m,d],m.dtype);l.push(g);let x=te({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeIntermediateTensorInfo(b)),x}var _F={kernelName:aa,backendName:"webgl",kernelFunc:Tv};var JJ="return float(a > b);",eee=` return vec4(greaterThan(a, b)); -`,Cte=st({opSnippet:yte,packedOpSnippet:bte,cpuKernelImpl:PD,dtype:"bool"}),f3={kernelName:So,backendName:"webgl",kernelFunc:Cte};var wte="return float(a >= b);",Ste=` +`,tee=nt({opSnippet:JJ,packedOpSnippet:eee,cpuKernelImpl:YR,dtype:"bool"}),EF={kernelName:kn,backendName:"webgl",kernelFunc:tee};var ree="return float(a >= b);",oee=` return vec4(greaterThanEqual(a, b)); -`,Ite=st({opSnippet:wte,packedOpSnippet:Ste,dtype:"bool",cpuKernelImpl:OD}),h3={kernelName:Io,backendName:"webgl",kernelFunc:Ite};function vte(r){let{inputs:e,backend:t}=r,{input:o}=e;return mg(o,!0,t)}var g3={kernelName:Yi,backendName:"webgl",kernelFunc:vte};var kte="return float(!isnan(x) && !isinf(x));",Nte=xe({opSnippet:kte,dtype:"bool"}),x3={kernelName:qn,backendName:"webgl",kernelFunc:Nte};var Tte="return float(isinf(x));",_te=xe({opSnippet:Tte,dtype:"bool"}),y3={kernelName:jn,backendName:"webgl",kernelFunc:_te};var Ete="return float(isnan(x));",$te=xe({opSnippet:Ete,dtype:"bool"}),b3={kernelName:Xn,backendName:"webgl",kernelFunc:$te};var Rte="return float(a < b);",Dte=` +`,nee=nt({opSnippet:ree,packedOpSnippet:oee,dtype:"bool",cpuKernelImpl:QR}),$F={kernelName:Nn,backendName:"webgl",kernelFunc:nee};function see(r){let{inputs:e,backend:t}=r,{input:o}=e;return tg(o,!0,t)}var RF={kernelName:Vi,backendName:"webgl",kernelFunc:see};var aee="return float(!isnan(x) && !isinf(x));",iee=xe({opSnippet:aee,dtype:"bool"}),DF={kernelName:Tn,backendName:"webgl",kernelFunc:iee};var uee="return float(isinf(x));",pee=xe({opSnippet:uee,dtype:"bool"}),AF={kernelName:_n,backendName:"webgl",kernelFunc:pee};var cee="return float(isnan(x));",lee=xe({opSnippet:cee,dtype:"bool"}),FF={kernelName:En,backendName:"webgl",kernelFunc:lee};var mee="return float(a < b);",dee=` return vec4(lessThan(a, b)); -`,Ate=st({opSnippet:Rte,packedOpSnippet:Dte,cpuKernelImpl:MD,dtype:"bool"}),C3={kernelName:ko,backendName:"webgl",kernelFunc:Ate};var Fte="return float(a <= b);",Pte=` +`,fee=nt({opSnippet:mee,packedOpSnippet:dee,cpuKernelImpl:ZR,dtype:"bool"}),PF={kernelName:Rn,backendName:"webgl",kernelFunc:fee};var hee="return float(a <= b);",gee=` return vec4(lessThanEqual(a, b)); -`,Ote=st({opSnippet:Fte,packedOpSnippet:Pte,cpuKernelImpl:LD,dtype:"bool"}),w3={kernelName:No,backendName:"webgl",kernelFunc:Ote};function Mte(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=BD(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var S3={kernelName:Qn,backendName:"webgl",kernelFunc:Mte};var Lte=sn+` +`,xee=nt({opSnippet:hee,packedOpSnippet:gee,cpuKernelImpl:JR,dtype:"bool"}),OF={kernelName:Dn,backendName:"webgl",kernelFunc:xee};function yee(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=eD(o,n,s);return e.makeTensorInfo([a.length],"float32",a)}var MF={kernelName:An,backendName:"webgl",kernelFunc:yee};var bee=Fo+` return x < 0.0 ? 0./0. : log(x); -`,Bte=` +`,Cee=` vec4 result = log(x); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r); @@ -3608,18 +3608,18 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b); result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a); return result; -`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:zD}),I3={kernelName:To,backendName:"webgl",kernelFunc:zte};var Vte=sn+` +`,wee=xe({opSnippet:bee,packedOpSnippet:Cee,cpuKernelImpl:tD}),LF={kernelName:Fn,backendName:"webgl",kernelFunc:wee};var See=Fo+` return log(1.0 + x); -`,Wte=xe({opSnippet:Vte}),v3={kernelName:Zn,backendName:"webgl",kernelFunc:Wte};var Ute="return float(a >= 1.0 && b >= 1.0);",Gte=` +`,Iee=xe({opSnippet:See}),BF={kernelName:Pn,backendName:"webgl",kernelFunc:Iee};var vee="return float(a >= 1.0 && b >= 1.0);",kee=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); -`,Hte=st({opSnippet:Ute,packedOpSnippet:Gte,dtype:"bool"}),k3={kernelName:Jn,backendName:"webgl",kernelFunc:Hte};var Kte="return float(!(x >= 1.0));",qte=xe({opSnippet:Kte}),N3={kernelName:es,backendName:"webgl",kernelFunc:qte};var jte="return float(a >= 1.0 || b >= 1.0);",Xte=` +`,Nee=nt({opSnippet:vee,packedOpSnippet:kee,dtype:"bool"}),zF={kernelName:On,backendName:"webgl",kernelFunc:Nee};var Tee="return float(!(x >= 1.0));",_ee=xe({opSnippet:Tee}),VF={kernelName:Mn,backendName:"webgl",kernelFunc:_ee};var Eee="return float(a >= 1.0 || b >= 1.0);",$ee=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); -`,Yte=st({opSnippet:jte,packedOpSnippet:Xte,dtype:"bool"}),T3={kernelName:ts,backendName:"webgl",kernelFunc:Yte};var bg=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` +`,Ree=nt({opSnippet:Eee,packedOpSnippet:$ee,dtype:"bool"}),WF={kernelName:Ln,backendName:"webgl",kernelFunc:Ree};var ug=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[];let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3638,7 +3638,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN float val = x * ${p}; setOutput(val); } - `}};var Cg=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` + `}};var pg=class{constructor(e,t,o,n,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,i=e[3]-1;this.outputShape=e;let p,u=`float(${o}) + float(${n}) * sum`;s===.5?p=`inversesqrt(${u})`:s===1?p=`1.0/(${u})`:p=`exp(log(${u}) * float(-${s}));`,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; @@ -3700,7 +3700,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN vec4 result = xAtOutputCoords * ${p}; setOutput(result); } - `}};var Qte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool("WEBGL_PACK_NORMALIZATION")?new Cg(n.shape,s,a,i,p):new bg(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},_3={kernelName:rs,backendName:"webgl",kernelFunc:Qte};var wg=class{constructor(e,t,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=` + `}};var Dee=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u=A().getBool("WEBGL_PACK_NORMALIZATION")?new pg(n.shape,s,a,i,p):new ug(n.shape,s,a,i,p);return t.runWebGLProgram(u,[n],n.dtype)},UF={kernelName:Bn,backendName:"webgl",kernelFunc:Dee};var cg=class{constructor(e,t,o,n,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=o,this.alpha=n,this.beta=s,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -3755,16 +3755,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(result); } - `}};var Zte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o,c=new wg(n.shape,i,p,u,l);return t.runWebGLProgram(c,[n,s,a],n.dtype)},E3={kernelName:oi,backendName:"webgl",kernelFunc:Zte};function $3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=ro(i,r.dtype,"max",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function V0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,l=C.getAxesPermutation(u,i),c=l!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(c){if(m){let w=t.texData.get(d.dataId).values,S=new Array(i);for(let E=0;E{let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new cg(n.shape,i,p,u,c);return t.runWebGLProgram(l,[n,s,a],n.dtype)},GF={kernelName:Ya,backendName:"webgl",kernelFunc:Aee};function HF(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Yr(i,r.dtype,"max",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}function _v(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o,i=n.shape.length,p=y.parseAxisParam(s,n.shape),u=p,c=w.getAxesPermutation(u,i),l=c!=null,m=t.shouldExecuteOnCPU([n]),d=n;if(l){if(m){let C=t.texData.get(d.dataId).values,S=new Array(i);for(let $=0;$`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,u,i,p);if(l.filterWidth===1&&l.filterHeight===1&&y.arraysEqual(l.inShape,l.outShape))return Ft({inputs:{x:n},backend:t});let c=new Zs(l,"max",!1);return t.runWebGLProgram(c,[n],n.dtype)}var A3={kernelName:ns,backendName:"webgl",kernelFunc:rre};function ore(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new Nu(c,"max",!1);return t.runWebGLProgram(m,[n],n.dtype)}var F3={kernelName:ha,backendName:"webgl",kernelFunc:ore};var Sg=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=` +`,Oee=nt({opSnippet:Fee,packedOpSnippet:Pee,cpuKernelImpl:oD}),qF={kernelName:Vn,backendName:"webgl",kernelFunc:Oee};function Mee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;Vs(n,"maxPool");let{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,u=1;y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,u,i,p);if(c.filterWidth===1&&c.filterHeight===1&&y.arraysEqual(c.inShape,c.outShape))return Dt({inputs:{x:n},backend:t});let l=new Us(c,"max",!1);return t.runWebGLProgram(l,[n],n.dtype)}var jF={kernelName:Wn,backendName:"webgl",kernelFunc:Mee};function Lee(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new bu(l,"max",!1);return t.runWebGLProgram(m,[n],n.dtype)}var XF={kernelName:ia,backendName:"webgl",kernelFunc:Lee};var lg=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,o=e.strideWidth,n=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,i=s-1-e.padInfo.top,p=a-1-e.padInfo.left,u=s*a-1;this.userCode=` const ivec2 pads = ivec2(${i}, ${p}); void main() { @@ -3810,8 +3810,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}},Ig=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,l=e.effectiveFilterWidth,c=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=l-1-e.padInfo.left,f=p*u*l-1;this.userCode=` - const ivec3 pads = ivec3(${c}, ${m}, ${d}); + `}},mg=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,o=e.strideHeight,n=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,i=e.dilationWidth,p=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=p-1-e.padInfo.front,m=u-1-e.padInfo.top,d=c-1-e.padInfo.left,f=p*u*c-1;this.userCode=` + const ivec3 pads = ivec3(${l}, ${m}, ${d}); void main() { ivec5 coords = getOutputCoords(); @@ -3847,7 +3847,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } int idyR = int(dyR); - for (int wC = 0; wC < ${l}; + for (int wC = 0; wC < ${c}; wC += ${i}) { float dyC = float(dyCCorner + wC) / ${n}.0; @@ -3864,8 +3864,8 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // Get the current value, check it against the value from the // position matrix. int curPosValue = - wD * ${u} * ${l} + - wR * ${l} + wC; + wD * ${u} * ${c} + + wR * ${c} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; @@ -3874,16 +3874,16 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN } setOutput(dotProd); } - `}};function nre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new Nu(m,"max",!0),f=t.runWebGLProgram(d,[a],a.dtype),h=new Ig(m),g=t.runWebGLProgram(h,[n,f],a.dtype);return t.disposeIntermediateTensorInfo(f),g}var P3={kernelName:Ji,backendName:"webgl",kernelFunc:nre};function sre(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;Ys([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=!0,f=new Zs(m,"max",d),h=t.runWebGLProgram(f,[i],i.dtype),g=new Sg(m),x=t.runWebGLProgram(g,[n,h],i.dtype);return t.disposeIntermediateTensorInfo(h),x}var O3={kernelName:Zi,backendName:"webgl",kernelFunc:sre};function M3(r,e,t,o){let n=new Zs(t,"max",!1),s=o.runWebGLProgram(n,[r],"float32");n=new Zs(t,"max",!0,!0,e);let a=o.runWebGLProgram(n,[r],"float32");return[s,a]}var L3={kernelName:ga,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let l=C.computePool2DInfo(o.shape,n,s,u,a),[c,m]=M3(o,i,l,p);return[c,m]}};function B3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=ro(i,"float32","mean",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var z3={kernelName:ss,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,l=C.getAxesPermutation(u,i),c=l!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(c){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;R{let{x:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=e,p=t;y.assert(o.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(o.shape,n,s,u,a),[l,m]=ZF(o,i,c,p);return[l,m]}};function e3(r,e,t,o){let n=y.sizeFromShape(e),a=y.sizeFromShape(r.shape)/n,i=te({inputs:{x:r},attrs:{shape:[a,n]},backend:o}),p=Yr(i,"float32","mean",o),u=te({inputs:{x:p},attrs:{shape:t},backend:o});return o.disposeIntermediateTensorInfo(i),o.disposeIntermediateTensorInfo(p),u}var t3={kernelName:Un,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{keepDims:n,axis:s}=e,a=t,i=o.shape.length,p=y.parseAxisParam(s,o.shape),u=p,c=w.getAxesPermutation(u,i),l=c!=null,m=a.shouldExecuteOnCPU([o]),d=[],f=o;if(l){if(m){let S=a.texData.get(f.dataId).values,k=new Array(i);for(let R=0;Rl[0]+e[c]+l[1]);let n=e.length,s=Re(n),a=t.map(l=>l[0]).join(","),i=t.map((l,c)=>l[0]+e[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` +`,Gee=nt({opSnippet:Wee,packedOpSnippet:Uee,cpuKernelImpl:nD}),o3={kernelName:Hn,backendName:"webgl",kernelFunc:Gee};var dg=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=t.map((c,l)=>c[0]+e[l]+c[1]);let n=e.length,s=Re(n),a=t.map(c=>c[0]).join(","),i=t.map((c,l)=>c[0]+e[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n),u=o==="reflect"?0:1;if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -3912,7 +3912,7 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${s} coords = outC - start; setOutput(getX(${p})); } - `}};var kg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=Re(n),a=t.map(f=>f[0]).join(","),i=t.map((f,h)=>f[0]+e[h]).join(","),p=At("rc",n),u=At("source",n),l=`${p[n-1]} < ${this.outputShape[n-1]}`,c=n===1?"source":`vec2(${u.slice(-2).join()})`,m=o==="reflect"?0:1,d="";if(n===1){let f=` + `}};var fg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,h)=>f[0]+e[h]+f[1]);let n=e.length,s=Re(n),a=t.map(f=>f[0]).join(","),i=t.map((f,h)=>f[0]+e[h]).join(","),p=Rt("rc",n),u=Rt("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=o==="reflect"?0:1,d="";if(n===1){let f=` ${s} source = rc; if (source < start) { source = start * 2 - source - ${m}; @@ -3923,11 +3923,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN `;d=` ${s} rc = outputLoc; ${f} - result[0] = getChannel(getX(${u.join()}), ${c}); + result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[1] = getChannel(getX(${u.join()}), ${c}); + result[1] = getChannel(getX(${u.join()}), ${l}); } `}else{let f=` ${s} source = rc; @@ -3941,21 +3941,21 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN `;d=` ${s} rc = outputLoc; ${f} - result[0] = getChannel(getX(${u.join()}), ${c}); + result[0] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[1] = getChannel(getX(${u.join()}), ${c}); + result[1] = getChannel(getX(${u.join()}), ${l}); } rc = outputLoc; ${p[n-2]} += 1; if(${p[n-2]} < ${this.outputShape[n-2]}) { ${f} - result[2] = getChannel(getX(${u.join()}), ${c}); + result[2] = getChannel(getX(${u.join()}), ${l}); ${p[n-1]} += 1; - if(${l}) { + if(${c}) { ${f} - result[3] = getChannel(getX(${u.join()}), ${c}); + result[3] = getChannel(getX(${u.join()}), ${l}); } } `}this.userCode=` @@ -3968,13 +3968,13 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN ${d} setOutput(result); } - `}};var lre=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new kg(o.shape,n,s):new vg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},U3={kernelName:is,backendName:"webgl",kernelFunc:lre};var cre=`if (b == 0.0) return NAN; - return mod(a, b);`,mre=` + `}};var Hee=({inputs:r,backend:e,attrs:t})=>{let{x:o}=r,{paddings:n,mode:s}=t,a=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new fg(o.shape,n,s):new dg(o.shape,n,s);return e.runWebGLProgram(a,[o],o.dtype)},n3={kernelName:Kn,backendName:"webgl",kernelFunc:Hee};var Kee=`if (b == 0.0) return NAN; + return mod(a, b);`,qee=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); - `+to+` + `+Xr+` return result; -`,dre=st({opSnippet:cre,packedOpSnippet:mre}),G3={kernelName:us,backendName:"webgl",kernelFunc:dre};var Ng=class{constructor(e,t,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,o],this.userCode=` +`,jee=nt({opSnippet:Kee,packedOpSnippet:qee}),s3={kernelName:qn,backendName:"webgl",kernelFunc:jee};var hg=class{constructor(e,t,o){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,o],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -3994,11 +3994,11 @@ return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,see=xe({opSnippet:nee}),sF={kernelN // If no other event happened, last event happened. setOutput(float(${t-1})); } - `}};var fre=` + `}};var Xee=` if (a == b) { return 1.0; }; -return a / b;`,hre=` +return a / b;`,Yee=` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; @@ -4016,9 +4016,9 @@ return a / b;`,hre=` } return result; -`,W0=st({opSnippet:fre,packedOpSnippet:hre,checkOutOfBounds:!0}),H3={kernelName:Vn,backendName:"webgl",kernelFunc:W0};var K3="return a - b;",U0=st({opSnippet:K3,packedOpSnippet:K3,supportsComplex:!0,cpuKernelImpl:lA}),q3={kernelName:Oo,backendName:"webgl",kernelFunc:U0};function G0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=V0({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=C.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),l=U0({inputs:{a:n,b:u},backend:t}),c=L0({inputs:{x:l},backend:t}),m=Tp({inputs:{x:c},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=W0({inputs:{a:c,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var j3={kernelName:Fs,backendName:"webgl",kernelFunc:G0};function gre(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:G0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],l=p.shape[1],c=new Ng(u,l,s),m=[[a]],d=t.runWebGLProgram(c,[p],"int32",m);return i||t.disposeIntermediateTensorInfo(p),d}var X3={kernelName:ps,backendName:"webgl",kernelFunc:gre};var xre=Gt+` +`,Ev=nt({opSnippet:Xee,packedOpSnippet:Yee,checkOutOfBounds:!0}),a3={kernelName:fn,backendName:"webgl",kernelFunc:Ev};var i3="return a - b;",$v=nt({opSnippet:i3,packedOpSnippet:i3,supportsComplex:!0,cpuKernelImpl:kD}),u3={kernelName:Ts,backendName:"webgl",kernelFunc:$v};function Rv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=y.parseAxisParam([s],n.shape),i=_v({inputs:{x:n},backend:t,attrs:{reductionIndices:a,keepDims:!1}}),p=w.expandShapeToKeepDim(i.shape,a),u=te({inputs:{x:i},backend:t,attrs:{shape:p}}),c=$v({inputs:{a:n,b:u},backend:t}),l=kv({inputs:{x:c},backend:t}),m=wp({inputs:{x:l},backend:t,attrs:{axis:a,keepDims:!1}}),d=te({inputs:{x:m},backend:t,attrs:{shape:p}}),f=Ev({inputs:{a:l,b:d},backend:t});return t.disposeIntermediateTensorInfo(i),t.disposeIntermediateTensorInfo(u),t.disposeIntermediateTensorInfo(c),t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(m),t.disposeIntermediateTensorInfo(d),f}var p3={kernelName:Is,backendName:"webgl",kernelFunc:Rv};function Qee(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Rv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new hg(u,c,s),m=[[a]],d=t.runWebGLProgram(l,[p],"int32",m);return i||t.disposeIntermediateTensorInfo(p),d}var c3={kernelName:jn,backendName:"webgl",kernelFunc:Qee};var Zee=Wt+` return -x; -`,yre=` +`,Jee=` vec4 result = -x; bvec4 isNaN = isnan(x); @@ -4028,14 +4028,14 @@ return a / b;`,hre=` result.a = isNaN.a ? x.a : result.a; return result; -`;function bre(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=HD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Lr(o.shape,yre):n=new nr(o.shape,xre),t.runWebGLProgram(n,[o],o.dtype)}var Y3={kernelName:ls,backendName:"webgl",kernelFunc:bre};var Cre=Ut.nonMaxSuppressionV3Impl;function wre(r){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:c}=Cre(u,l,a,i,p);return t.makeTensorInfo([c.length],"int32",new Int32Array(c))}var Q3={kernelName:cs,backendName:"webgl",kernelFunc:wre};var Sre=Ut.nonMaxSuppressionV4Impl;function Ire(r){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=Sre(l,c,a,i,p,u);return[t.makeTensorInfo([m.length],"int32",new Int32Array(m)),t.makeTensorInfo([],"int32",new Int32Array([d]))]}var Z3={kernelName:ni,backendName:"webgl",kernelFunc:Ire};var vre=Ut.nonMaxSuppressionV5Impl;function kre(r){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=vre(l,c,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var J3={kernelName:ms,backendName:"webgl",kernelFunc:kre};var Tg=class{constructor(e,t,o,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` +`;function ete(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.texData.get(o.dataId),[a,i]=aD(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n;return A().getBool("WEBGL_PACK_UNARY_OPERATIONS")?n=new Fr(o.shape,Jee):n=new tr(o.shape,Zee),t.runWebGLProgram(n,[o],o.dtype)}var l3={kernelName:pa,backendName:"webgl",kernelFunc:ete};var tte=Vt.nonMaxSuppressionV3Impl;function rte(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=tte(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var m3={kernelName:Qn,backendName:"webgl",kernelFunc:rte};var ote=Vt.nonMaxSuppressionV4Impl;function nte(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,padToMaxOutputSize:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:m,validOutputs:d}=ote(c,l,a,i,p,u);return[t.makeTensorInfo([m.length],"int32",new Int32Array(m)),t.makeTensorInfo([],"int32",new Int32Array([d]))]}var d3={kernelName:Qa,backendName:"webgl",kernelFunc:nte};var ste=Vt.nonMaxSuppressionV5Impl;function ate(r){w.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=ste(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var f3={kernelName:Zn,backendName:"webgl",kernelFunc:ate};var gg=class{constructor(e,t,o,n){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${n}), float(${o}), float(index == coords.y))); } - `}};var Nre=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),l=new Tg(u,a,i,p),c=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(l,[c],s);t.disposeIntermediateTensorInfo(c);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},eP={kernelName:ds,backendName:"webgl",kernelFunc:Nre};function mm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=_i({inputs:{input:o},backend:t}),s=mm({inputs:{x:n},backend:t}),a=Ep({inputs:{input:o},backend:t}),i=mm({inputs:{x:a},backend:t}),p=zr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ei({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var tP={kernelName:_a,backendName:"webgl",kernelFunc:mm};function rP(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=_i({inputs:{input:o},backend:t}),s=rP({inputs:{x:n},backend:t}),a=Ep({inputs:{input:o},backend:t}),i=mm({inputs:{x:a},backend:t}),p=zr({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ei({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var oP={kernelName:xa,backendName:"webgl",kernelFunc:rP};function Tre(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return cg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(l=>{let c=cg({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=M0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeIntermediateTensorInfo(l)),u}var nP={kernelName:ya,backendName:"webgl",kernelFunc:Tre};var _g=class{constructor(e,t,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((u,l)=>u[0]+e[l]+u[1]);let n=e.length,s=Re(n),a=t.map(u=>u[0]).join(","),i=t.map((u,l)=>u[0]+e[l]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` + `}};var ite=r=>{let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new gg(u,a,i,p),l=te({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=t.runWebGLProgram(c,[l],s);t.disposeIntermediateTensorInfo(l);let d=[...n.shape,a],f=te({inputs:{x:m},backend:t,attrs:{shape:d}});return t.disposeIntermediateTensorInfo(m),f},h3={kernelName:Jn,backendName:"webgl",kernelFunc:ite};function sm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=bi({inputs:{input:o},backend:t}),s=sm({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var g3={kernelName:Sa,backendName:"webgl",kernelFunc:sm};function x3(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=bi({inputs:{input:o},backend:t}),s=x3({inputs:{x:n},backend:t}),a=Ip({inputs:{input:o},backend:t}),i=sm({inputs:{x:a},backend:t}),p=Or({inputs:{real:s,imag:i},backend:t});return t.disposeIntermediateTensorInfo(n),t.disposeIntermediateTensorInfo(s),t.disposeIntermediateTensorInfo(a),t.disposeIntermediateTensorInfo(i),p}else return Ci({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var y3={kernelName:ca,backendName:"webgl",kernelFunc:x3};function ute(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return eg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=eg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=vv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeIntermediateTensorInfo(c)),u}var b3={kernelName:la,backendName:"webgl",kernelFunc:ute};var xg=class{constructor(e,t,o){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let n=e.length,s=Re(n),a=t.map(u=>u[0]).join(","),i=t.map((u,c)=>u[0]+e[c]).join(","),p=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,n);if(n===1){this.userCode=` int start = ${a}; int end = ${i}; @@ -4060,19 +4060,19 @@ return a / b;`,hre=` setOutput(getX(${p})); } } - `}};var Eg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=Re(n),a=t.map(h=>h[0]).join(","),i=t.map((h,g)=>h[0]+e[g]).join(","),p=At("rc",n),u=At("source",n),l=`${p[n-1]} < ${this.outputShape[n-1]}`,c=n===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1; - if(${l}) { + `}};var yg=class{constructor(e,t,o){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((h,g)=>h[0]+e[g]+h[1]);let n=e.length,s=Re(n),a=t.map(h=>h[0]).join(","),i=t.map((h,g)=>h[0]+e[g]).join(","),p=Rt("rc",n),u=Rt("source",n),c=`${p[n-1]} < ${this.outputShape[n-1]}`,l=n===1?"source":`vec2(${u.slice(-2).join()})`,m=[`${s} rc = outputLoc;`,`${p[n-1]} += 1; + if(${c}) { `,n===1?"":`} rc = outputLoc; ${p[n-2]} += 1; if(${p[n-2]} < ${this.outputShape[n-2]}) {`,n===1?"":` ${p[n-1]} += 1; - if(${l}) {`],d=n===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="";for(let h=0,g=n===1?2:4;h= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",f="";for(let h=0,g=n===1?2:4;h{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((l,c)=>l[0]+n.shape[c]+l[1]);return Ei({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Eg(n.shape,s,a):new _g(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},sP={kernelName:fs,backendName:"webgl",kernelFunc:H0};var _re=` + `}};var Dv=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return Ci({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new yg(n.shape,s,a):new xg(n.shape,s,a),p=[[a]];return t.runWebGLProgram(i,[n],n.dtype,p)},C3={kernelName:es,backendName:"webgl",kernelFunc:Dv};var pte=` if(a < 0.0 && floor(b) < b){ return NAN; } @@ -4093,7 +4093,7 @@ return a / b;`,hre=` } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); -`,Ere=` +`,cte=` // 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); @@ -4109,11 +4109,11 @@ return a / b;`,hre=` bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); - `+to+` + `+Xr+` return result; -`,$re=st({opSnippet:_re,packedOpSnippet:Ere}),aP={kernelName:hs,backendName:"webgl",kernelFunc:$re};function Rre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),l=u,c=C.getAxesPermutation(l,i),m=n;c!=null&&(m=Ct({inputs:{x:n},backend:t,attrs:{perm:c}}),l=C.getInnerMostAxes(l.length,i),p.push(m)),C.assertAxesAreInnerMostDims("prod",l,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=qD(m.shape,m.dtype,f,l);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=C.computeOutAndReduceShapes(m.shape,l),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=mi(n.dtype),w=ro(x,b,"prod",t);d=te({inputs:{x:w},backend:t,attrs:{shape:f}}),p.push(x),p.push(w)}if(a){p.push(d);let f=C.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var iP={kernelName:Ho,backendName:"webgl",kernelFunc:Rre};function Dre(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),l=t.readSync(s.dataId),c=t.readSync(a.dataId),[m,d,f]=jD(p,u,l,s.shape,s.dtype,c,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var uP={kernelName:Qp,backendName:"webgl",kernelFunc:Dre};function Are(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=XD(a,o.shape,o.dtype,i,n.shape,p,s.shape),c=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([l.length],o.dtype,l);return[c,m]}var pP={kernelName:Zp,backendName:"webgl",kernelFunc:Are};function Fre(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),c=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=YD(u,n.shape,l,s.shape,s.dtype,c,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var lP={kernelName:Jp,backendName:"webgl",kernelFunc:Fre};var K0=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=QD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},cP={kernelName:ba,backendName:"webgl",kernelFunc:K0};var Pre="return 1.0 / x;",Ore=xe({opSnippet:Pre}),mP={kernelName:xs,backendName:"webgl",kernelFunc:Ore};var Mre=Gt+` +`,lte=nt({opSnippet:pte,packedOpSnippet:cte}),w3={kernelName:ts,backendName:"webgl",kernelFunc:lte};function mte(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o,i=n.shape.length,p=[],u=y.parseAxisParam(s,n.shape),c=u,l=w.getAxesPermutation(c,i),m=n;l!=null&&(m=bt({inputs:{x:n},backend:t,attrs:{perm:l}}),c=w.getInnerMostAxes(c.length,i),p.push(m)),w.assertAxesAreInnerMostDims("prod",c,i);let d;if(t.shouldExecuteOnCPU([m])){let f=t.texData.get(m.dataId).values,{outVals:h,outShape:g,outDtype:x}=uD(m.shape,m.dtype,f,c);d=t.makeTensorInfo(g,x,h)}else{let[f,h]=w.computeOutAndReduceShapes(m.shape,c),g=y.sizeFromShape(h),x=te({inputs:{x:m},backend:t,attrs:{shape:[-1,g]}}),b=oi(n.dtype),C=Yr(x,b,"prod",t);d=te({inputs:{x:C},backend:t,attrs:{shape:f}}),p.push(x),p.push(C)}if(a){p.push(d);let f=w.expandShapeToKeepDim(d.shape,u);d=te({inputs:{x:d},backend:t,attrs:{shape:f}})}return p.forEach(f=>t.disposeIntermediateTensorInfo(f)),d}var S3={kernelName:os,backendName:"webgl",kernelFunc:mte};function dte(r){let{inputs:e,backend:t,attrs:o}=r,{paramsNestedSplits:n,paramsDenseValues:s,indices:a}=e,{outputRaggedRank:i}=o,p=n.map(x=>t.readSync(x.dataId)),u=n.map(x=>x.shape),c=t.readSync(s.dataId),l=t.readSync(a.dataId),[m,d,f]=pD(p,u,c,s.shape,s.dtype,l,a.shape,i),h=m.map(x=>t.makeTensorInfo([x.length],"int32",x)),g=t.makeTensorInfo(f,s.dtype,d);return h.concat([g])}var I3={kernelName:Hp,backendName:"webgl",kernelFunc:dte};function fte(r){let{inputs:e,backend:t}=r,{starts:o,limits:n,deltas:s}=e,a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=cD(a,o.shape,o.dtype,i,n.shape,p,s.shape),l=t.makeTensorInfo([u.length],"int32",u),m=t.makeTensorInfo([c.length],o.dtype,c);return[l,m]}var v3={kernelName:Kp,backendName:"webgl",kernelFunc:fte};function hte(r){let{inputs:e,backend:t,attrs:o}=r,{shape:n,values:s,defaultValue:a,rowPartitionTensors:i}=e,{rowPartitionTypes:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),l=t.readSync(a.dataId),m=i.map(g=>t.readSync(g.dataId)),d=i.map(g=>g.shape),[f,h]=lD(u,n.shape,c,s.shape,s.dtype,l,a.shape,m,d,p);return t.makeTensorInfo(f,s.dtype,h)}var k3={kernelName:qp,backendName:"webgl",kernelFunc:hte};var Av=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=mD(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},N3={kernelName:ma,backendName:"webgl",kernelFunc:Av};var gte="return 1.0 / x;",xte=xe({opSnippet:gte}),T3={kernelName:ns,backendName:"webgl",kernelFunc:xte};var yte=Wt+` return (x < 0.0) ? 0.0 : x; -`,Lre=` +`,bte=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4123,9 +4123,9 @@ return a / b;`,hre=` result.a = isNaN.a ? x.a : result.a; return result; -`,Bre=xe({opSnippet:Mre,packedOpSnippet:Lre}),dP={kernelName:ys,backendName:"webgl",kernelFunc:Bre};var zre=Gt+` +`,Cte=xe({opSnippet:yte,packedOpSnippet:bte}),_3={kernelName:ss,backendName:"webgl",kernelFunc:Cte};var wte=Wt+` return (x < 0.0) ? 0.0 : min(6.0, x); -`,Vre=` +`,Ste=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); @@ -4135,10 +4135,10 @@ return a / b;`,hre=` result.a = isNaN.a ? x.a : result.a; return result; -`,Wre=xe({opSnippet:zre,packedOpSnippet:Vre}),fP={kernelName:ws,backendName:"webgl",kernelFunc:Wre};var $g=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` +`,Ite=xe({opSnippet:wte,packedOpSnippet:Ste}),E3={kernelName:us,backendName:"webgl",kernelFunc:Ite};var bg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":m="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${l[0]/c[0]}, - ${l[1]/c[1]}); + ${c[0]/l[0]}, + ${c[1]/l[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${p}.0); void main() { @@ -4168,11 +4168,11 @@ return a / b;`,hre=` setOutput(newValue); } - `}};var Rg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};var Cg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m;s?m="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":m="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${l[0]/c[0]}, - ${l[1]/c[1]}, - ${l[1]/c[1]}); + ${c[0]/l[0]}, + ${c[1]/l[1]}, + ${c[1]/l[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${p}.0, ${p}.0); @@ -4245,7 +4245,7 @@ return a / b;`,hre=` setOutput(newValue); } - `}};function Ure(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Rg(n.shape,p,u,s,a):new $g(n.shape,p,u,s,a);return t.runWebGLProgram(l,[n],"float32")}var hP={kernelName:Cs,backendName:"webgl",kernelFunc:Ure};var Dg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],l=p[0]/u[0],c=p[1]/u[1],m=1/l,d=1/c,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` + `}};function vte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Cg(n.shape,p,u,s,a):new bg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],"float32")}var $3={kernelName:is,backendName:"webgl",kernelFunc:vte};var wg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4255,8 +4255,8 @@ return a / b;`,hre=` float accumulator = 0.0; - const float heightScale = float(${l}); - const float widthScale = float(${c}); + const float heightScale = float(${c}); + const float widthScale = float(${l}); const float invHeightScale = float(${m}); const float invWidthScale = float(${d}); @@ -4326,10 +4326,10 @@ return a / b;`,hre=` setOutput(accumulator); } - `}};function Gre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new Dg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var gP={kernelName:ii,backendName:"webgl",kernelFunc:Gre};var Ag=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};function kte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new wg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var R3={kernelName:Ja,backendName:"webgl",kernelFunc:kte};var Sg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( - ${l[0]/c[0]}, - ${l[1]/c[1]}); + ${c[0]/l[0]}, + ${c[1]/l[1]}); const vec2 inputShapeRC = vec2(${i}.0, ${p}.0); void main() { @@ -4348,11 +4348,11 @@ return a / b;`,hre=` setOutput(newValue); } - `}};var Fg=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let l=[n&&t>1?i-1:i,n&&o>1?p-1:p],c=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` + `}};var Ig=class{constructor(e,t,o,n,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,i,p,u]=e;this.outputShape=[a,t,o,u];let c=[n&&t>1?i-1:i,n&&o>1?p-1:p],l=[n&&t>1?t-1:t,n&&o>1?o-1:o],m=n?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( - ${l[0]/c[0]}, - ${l[1]/c[1]}, - ${l[1]/c[1]}); + ${c[0]/l[0]}, + ${c[1]/l[1]}, + ${c[1]/l[1]}); const vec3 inputShapeRC = vec3(${i}.0, ${p}.0, ${p}.0); @@ -4389,7 +4389,7 @@ return a / b;`,hre=` setOutput(newValue); } - `}};function Hre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Fg(n.shape,p,u,s,a):new Ag(n.shape,p,u,s,a);return t.runWebGLProgram(l,[n],n.dtype)}var xP={kernelName:bs,backendName:"webgl",kernelFunc:Hre};var Pg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],l=p[0]/u[0],c=p[1]/u[1],m=1/l,d=1/c,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` + `}};function Nte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=A().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Ig(n.shape,p,u,s,a):new Sg(n.shape,p,u,s,a);return t.runWebGLProgram(c,[n],n.dtype)}var D3={kernelName:as,backendName:"webgl",kernelFunc:Nte};var vg=class{constructor(e,t,o){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,n,s]=t,[,a,i]=e,p=[o&&a>1?n-1:n,o&&i>1?s-1:s],u=[o&&a>1?a-1:a,o&&i>1?i-1:i],c=p[0]/u[0],l=p[1]/u[1],m=1/c,d=1/l,f=Math.ceil(m)*2+2,h=Math.ceil(d)*2+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; @@ -4399,8 +4399,8 @@ return a / b;`,hre=` float accumulator = 0.0; - const float heightScale = float(${l}); - const float widthScale = float(${c}); + const float heightScale = float(${c}); + const float widthScale = float(${l}); const float invHeightScale = float(${m}); const float invWidthScale = float(${d}); @@ -4459,7 +4459,7 @@ return a / b;`,hre=` setOutput(accumulator); } - `}};function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new Pg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var yP={kernelName:ai,backendName:"webgl",kernelFunc:Kre};var Og=class{constructor(e,t){this.variableNames=["x"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=` + `}};function Tte(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=new vg(s.shape,n.shape,a);return t.runWebGLProgram(i,[s],s.dtype)}var A3={kernelName:Za,backendName:"webgl",kernelFunc:Tte};var kg=class{constructor(e,t){this.variableNames=["x"];let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);if(this.outputShape=e,o===1){this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(${e[0]} - coord - 1)); @@ -4469,7 +4469,7 @@ return a / b;`,hre=` ${a} coords = getOutputCoords(); setOutput(getX(${s})); } - `}};var Mg=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=At("rc",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(o);o===1?this.userCode=` + `}};var Ng=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let o=e.length;if(o>4)throw new Error(`WebGL backend: Reverse of rank-${o} tensor is not yet supported`);this.outputShape=e;let n=Rt("rc",o),s=`${n[o-1]} + 1 < ${this.outputShape[o-1]}`,a=`${n[o-2]} + 1 < ${this.outputShape[o-2]}`,i=Re(o);o===1?this.userCode=` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); @@ -4490,14 +4490,14 @@ return a / b;`,hre=` result.g = ${u(n.slice())}; } if(${a}) { - result.b = ${l(n.slice())}; + result.b = ${c(n.slice())}; if(${s}) { - result.a = ${c(n.slice())}; + result.a = ${l(n.slice())}; } } setOutput(result); } - `;function p(f){return m(f)}function u(f){return f[o-1]="("+f[o-1]+" + 1)",m(f)}function l(f){return f[o-2]="("+f[o-2]+" + 1)",m(f)}function c(f){return f[o-1]="("+f[o-1]+" + 1)",f[o-2]="("+f[o-2]+" + 1)",m(f)}function m(f){let h=e.map((b,w)=>d(w,f)),g=h.join(","),x=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function qre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Ft({inputs:{x:n},backend:t});let p=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Mg(n.shape,i):new Og(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var bP={kernelName:Ss,backendName:"webgl",kernelFunc:qre};var Lg=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=e[1],n=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` + `;function p(f){return m(f)}function u(f){return f[o-1]="("+f[o-1]+" + 1)",m(f)}function c(f){return f[o-2]="("+f[o-2]+" + 1)",m(f)}function l(f){return f[o-1]="("+f[o-1]+" + 1)",f[o-2]="("+f[o-2]+" + 1)",m(f)}function m(f){let h=e.map((b,C)=>d(C,f)),g=h.join(","),x=h.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${x}))`}function d(f,h){return t.indexOf(f)!==-1&&e[f]!==1?`${e[f]} - ${h[f]} - 1`:`${h[f]}`}}};function _te(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length,i=y.parseAxisParam(s,n.shape);if(a===0)return Dt({inputs:{x:n},backend:t});let p=A().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Ng(n.shape,i):new kg(n.shape,i);return t.runWebGLProgram(p,[n],n.dtype)}var F3={kernelName:ps,backendName:"webgl",kernelFunc:_te};var Tg=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let o=e[1],n=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` vec3 fill = vec3(${t.join(",")}); float outputValue = fill[coords[3]];`,this.userCode=` void main() { @@ -4516,7 +4516,7 @@ return a / b;`,hre=` } setOutput(outputValue); } - `}};var CP={kernelName:Vs,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Lg(o.shape,s),[u,l]=C.getImageCenter(a,o.shape[1],o.shape[2]),c=[[u,l,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,c)}};var jre=` + `}};var P3={kernelName:Ds,backendName:"webgl",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new Tg(o.shape,s),[u,c]=w.getImageCenter(a,o.shape[1],o.shape[2]),l=[[u,c,Math.sin(n),Math.cos(n)]];return i.runWebGLProgram(p,[o],o.dtype,l)}};var Ete=` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); @@ -4531,11 +4531,11 @@ return a / b;`,hre=` return base + 1.0; } } -`,Xre=xe({opSnippet:jre}),wP={kernelName:Is,backendName:"webgl",kernelFunc:Xre};var Yre="return inversesqrt(x);",Qre=xe({opSnippet:Yre,cpuKernelImpl:ZD}),SP={kernelName:Do,backendName:"webgl",kernelFunc:Qre};var Tu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let u=Re(s.length),l=Re(a.length),c="";o===1?c="i":o===2&&(c="i, j");let m=`getIndices(${c})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let f=`getUpdates(${d})`,h="";p&&(h="coords[0], coords[1]");let g=`getDefaultValue(${h})`,x=t>1?"strides[j]":"strides";this.userCode=` +`,$te=xe({opSnippet:Ete}),O3={kernelName:cs,backendName:"webgl",kernelFunc:$te};var Rte="return inversesqrt(x);",Dte=xe({opSnippet:Rte,cpuKernelImpl:dD}),M3={kernelName:ls,backendName:"webgl",kernelFunc:Dte};var Cu=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let u=Re(s.length),c=Re(a.length),l="";o===1?l="i":o===2&&(l="i, j");let m=`getIndices(${l})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let f=`getUpdates(${d})`,h="";p&&(h="coords[0], coords[1]");let g=`getDefaultValue(${h})`,x=t>1?"strides[j]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { - ${l} coords = getOutputCoords(); + ${c} coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < ${e}; i++) { @@ -4551,11 +4551,11 @@ return a / b;`,hre=` } setOutput(mix(${g}, sum, float(found))); } - `}};var Bg=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),l=Re(a.length),c="";o===1?c="i":o===2&&(c="i, j");let m=`getIndices(${c})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let f=`getUpdates(${d})`,h="";p&&(h="coords[0], coords[1]");let g=`getDefaultValue(${h})`,x=t>1?"strides[j]":"strides",b=t>1?"strides[j + 1]":"strides";this.userCode=` + `}};var _g=class{constructor(e,t,o,n,s,a,i=!0,p=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=Re(s.length),c=Re(a.length),l="";o===1?l="i":o===2&&(l="i, j");let m=`getIndices(${l})`,d="";n===1?d="i":n===2&&(d="i, coords[1]");let f=`getUpdates(${d})`,h="";p&&(h="coords[0], coords[1]");let g=`getDefaultValue(${h})`,x=t>1?"strides[j]":"strides",b=t>1?"strides[j + 1]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { - ${l} coords = getOutputCoords(); + ${c} coords = getOutputCoords(); vec4 sum = vec4(0.); vec4 found = vec4(0.); for (int i = 0; i < ${e}; i+=2) { @@ -4588,7 +4588,7 @@ return a / b;`,hre=` } setOutput(mix(${g}, sum, found)); } - `}};function Zre(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=[c/u,u];if(c===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],"float32",new Float32Array([0])),g;A().getBool("WEBGL_PACK")?g=new Bg(p,i,d.shape.length,f.shape.length,l,m):g=new Tu(p,i,d.shape.length,f.shape.length,l,m);let x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var IP={kernelName:vs,backendName:"webgl",kernelFunc:Zre};var zg=class{constructor(e,t,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=A().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` + `}};function Ate(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=te({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=t.makeTensorInfo([],"float32",new Float32Array([0])),g;A().getBool("WEBGL_PACK")?g=new _g(p,i,d.shape.length,f.shape.length,c,m):g=new Cu(p,i,d.shape.length,f.shape.length,c,m);let x=t.runWebGLProgram(g,[f,d,h],f.dtype),b=te({inputs:{x},backend:t,attrs:{shape:a}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(x),t.disposeIntermediateTensorInfo(h),b}var L3={kernelName:ms,backendName:"webgl",kernelFunc:Ate};var Eg=class{constructor(e,t,o,n){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,o];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=A().getNumber("WEBGL_VERSION")===2?s:a,p=n==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; @@ -4613,7 +4613,7 @@ return a / b;`,hre=` setOutput(float(findBound(batch, value))); } - `}};function Jre(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new zg(n.shape[0],n.shape[1],s.shape[1],a),p=[[n.shape[1]]];return t.runWebGLProgram(i,[n,s],"int32",p)}var vP={kernelName:Ns,backendName:"webgl",kernelFunc:Jre};var Vg=class{constructor(e,t,o){this.variableNames=["c","a","b"],this.outputShape=t;let n,s;if(o>4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let l=0;l4)throw Error(`Where for rank ${o} is not yet supported`);if(o===1)s="resRC",n="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],p=[],u=[];for(let c=0;c= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); -`,roe=xe({opSnippet:toe}),NP={kernelName:Ts,backendName:"webgl",kernelFunc:roe};var ooe=sn+` +`,Mte=xe({opSnippet:Ote}),V3={kernelName:hs,backendName:"webgl",kernelFunc:Mte};var Lte=Fo+` return 1.0 / (1.0 + exp(-1.0 * x)); -`,noe=` +`,Bte=` vec4 result = 1.0 / (1.0 + exp(-1.0 * x)); bvec4 isNaN = isnan(x); @@ -4641,20 +4641,20 @@ return a / b;`,hre=` result.a = isNaN.a ? x.a : result.a; return result; -`,soe=xe({opSnippet:ooe,packedOpSnippet:noe,cpuKernelImpl:eA}),TP={kernelName:Ao,backendName:"webgl",kernelFunc:soe};var aoe=` +`,zte=xe({opSnippet:Lte,packedOpSnippet:Bte,cpuKernelImpl:hD}),W3={kernelName:bs,backendName:"webgl",kernelFunc:zte};var Vte=` if (isnan(x)) { return 0.0; } return sign(x); -`,ioe=xe({opSnippet:aoe}),_P={kernelName:Rs,backendName:"webgl",kernelFunc:ioe};var uoe=sn+` +`,Wte=xe({opSnippet:Vte}),U3={kernelName:ys,backendName:"webgl",kernelFunc:Wte};var Ute=Fo+` return sin(x); -`,poe=` +`,Gte=` vec4 result = sin(x); bvec4 isNaN = isnan(x); - ${to} + ${Xr} return result; -`,loe=xe({opSnippet:uoe,packedOpSnippet:poe}),EP={kernelName:Es,backendName:"webgl",kernelFunc:loe};var coe=` +`,Hte=xe({opSnippet:Ute,packedOpSnippet:Gte}),G3={kernelName:gs,backendName:"webgl",kernelFunc:Hte};var Kte=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; -`,moe=xe({opSnippet:coe}),$P={kernelName:$s,backendName:"webgl",kernelFunc:moe};var doe=` +`,qte=xe({opSnippet:Kte}),H3={kernelName:xs,backendName:"webgl",kernelFunc:qte};var jte=` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; @@ -4674,17 +4674,17 @@ return a / b;`,hre=` result = log(exp_x + 1.0); } return result; -`,foe=xe({opSnippet:doe}),RP={kernelName:Ds,backendName:"webgl",kernelFunc:foe};var hoe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},DP={kernelName:Sa,backendName:"webgl",kernelFunc:hoe};function goe(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: +`,Xte=xe({opSnippet:jte}),K3={kernelName:Cs,backendName:"webgl",kernelFunc:Xte};var Yte=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=s.reduce((x,b)=>x*b),p=[[0,0]];p.push(...a);for(let x=1+s.length;xt.disposeIntermediateTensorInfo(x)),g},q3={kernelName:ga,backendName:"webgl",kernelFunc:Yte};function Qte(r){let{inputs:e,backend:t}=r,{indices:o,values:n,denseShape:s,defaultValue:a}=e;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${s.shape}`);if(o.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${o.shape}`);if(n.shape.length!==1)throw new Error(`Values must be a vector, saw: ${n.shape}`);if(a.shape.length!==0)throw new Error(`Default value must be a scalar, saw: - ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),l=t.readSync(a.dataId)[0],[c,m,d,f,h]=rA(i,o.shape,o.dtype,p,n.dtype,u,l);return[t.makeTensorInfo(m,o.dtype,c),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var AP={kernelName:eu,backendName:"webgl",kernelFunc:goe};function xoe(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,l,c]=oA(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(l,o.dtype,u),t.makeTensorInfo([c.length],s.dtype,new Int32Array(c))]}var FP={kernelName:ui,backendName:"webgl",kernelFunc:xoe};function yoe(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${a.shape}`);let i=t.readSync(o.dataId),p=t.readSync(n.dataId),u=t.readSync(s.dataId),c=t.readSync(a.dataId)[0],[l,m,d,f,h]=xD(i,o.shape,o.dtype,p,n.dtype,u,c);return[t.makeTensorInfo(m,o.dtype,l),t.makeTensorInfo([m[0]],n.dtype,d),t.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),t.makeTensorInfo([h.length],o.dtype,new Int32Array(h))]}var j3={kernelName:Ki,backendName:"webgl",kernelFunc:Qte};function Zte(r){let{inputs:e,backend:t}=r,{inputIndices:o,inputShape:n,newShape:s}=e;if(o.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${o.shape}`);if(n.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=Array.from(t.readSync(n.dataId)),i=t.readSync(o.dataId),p=Array.from(t.readSync(s.dataId)),[u,c,l]=yD(i,o.shape,o.dtype,a,p);return[t.makeTensorInfo(c,o.dtype,u),t.makeTensorInfo([l.length],s.dtype,new Int32Array(l))]}var X3={kernelName:ei,backendName:"webgl",kernelFunc:Zte};function Jte(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=Sh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(l,o.dtype,u)}var PP={kernelName:va,backendName:"webgl",kernelFunc:yoe};function boe(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape + ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p,!0);return t.makeTensorInfo(c,o.dtype,u)}var Y3={kernelName:ya,backendName:"webgl",kernelFunc:Jte};function ere(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;if(o.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(n.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${n.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape - ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,l]=Sh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(l,o.dtype,u)}var OP={kernelName:ka,backendName:"webgl",kernelFunc:boe};function Coe(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let x=t.bufferSync(n),b=t.bufferSync(s),w=y.decodeString(t.readSync(a.dataId)[0]),S=JD(x,b,i,m,l,u,p,c,w,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Tu(u,p,n.shape.length,s.shape.length,c,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var MP={kernelName:Ps,backendName:"webgl",kernelFunc:Coe};function woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=n.shape.length,l=new Array(u).fill(0),c=n.shape.slice();return p.map(m=>{let d=[...c];d[i]=m;let f=Js({inputs:{x:n},backend:t,attrs:{begin:l,size:d}});return l[i]+=m,f})}var LP={kernelName:Ia,backendName:"webgl",kernelFunc:woe};var BP="return sqrt(x);",Soe=xe({opSnippet:BP,packedOpSnippet:BP,cpuKernelImpl:nA}),zP={kernelName:Fo,backendName:"webgl",kernelFunc:Soe};var Ioe="return x * x;",voe=xe({opSnippet:Ioe}),VP={kernelName:tu,backendName:"webgl",kernelFunc:voe};var WP="return (a - b) * (a - b);",koe=st({opSnippet:WP,packedOpSnippet:WP}),UP={kernelName:Po,backendName:"webgl",kernelFunc:koe};function Noe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!=="string")throw new Error("Input must be of datatype string");let s=t.readSync(n.dataId),a=C.fromUint8ToStringArray(s),i=sA(a,"string",o);return t.makeTensorInfo(n.shape,"string",i)}var GP={kernelName:pi,backendName:"webgl",kernelFunc:Noe};function Toe({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Gt+` + ${s.shape}`);let a=t.readSync(o.dataId),i=t.readSync(n.dataId),p=t.readSync(s.dataId),[u,c]=lh(a,o.shape,o.dtype,i,p);return t.makeTensorInfo(c,o.dtype,u)}var Q3={kernelName:ba,backendName:"webgl",kernelFunc:ere};function tre(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let x=t.bufferSync(n),b=t.bufferSync(s),C=y.decodeString(t.readSync(a.dataId)[0]),S=fD(x,b,i,m,c,u,p,l,C,d);return t.makeTensorInfo(i,S.dtype,S.values)}let f=new Cu(u,p,n.shape.length,s.shape.length,l,[m,1],d),h=t.runWebGLProgram(f,[s,n,a],s.dtype),g=te({inputs:{x:h},backend:t,attrs:{shape:i}});return t.disposeIntermediateTensorInfo(h),g}var Z3={kernelName:vs,backendName:"webgl",kernelFunc:tre};function rre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=Gs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var J3={kernelName:xa,backendName:"webgl",kernelFunc:rre};var eP="return sqrt(x);",ore=xe({opSnippet:eP,packedOpSnippet:eP,cpuKernelImpl:bD}),tP={kernelName:ws,backendName:"webgl",kernelFunc:ore};var nre="return x * x;",sre=xe({opSnippet:nre}),rP={kernelName:qi,backendName:"webgl",kernelFunc:sre};var oP="return (a - b) * (a - b);",are=nt({opSnippet:oP,packedOpSnippet:oP}),nP={kernelName:ks,backendName:"webgl",kernelFunc:are};function ire(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e;if(n.dtype!=="string")throw new Error("Input must be of datatype string");let s=t.readSync(n.dataId),a=w.fromUint8ToStringArray(s),i=CD(a,"string",o);return t.makeTensorInfo(n.shape,"string",i)}var sP={kernelName:Ru,backendName:"webgl",kernelFunc:ire};function ure({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=Wt+` return x > 0.0 ? 1.0 : float(${e.alpha}); - `,s=new nr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var HP={kernelName:Ko,backendName:"webgl",kernelFunc:Toe};var Wg=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(o.length),i="";if(n===1)i="coords * strides + begin";else{let p=0;i=o.map((u,l)=>(p++,o.length===1?`coords * strides[${l}] + begin[${l}]`:`coords[${p-1}] * strides[${l}] + begin[${l}]`)).join(",")}this.userCode=` + `,s=new tr(o.shape,n);return t.runWebGLProgram(s,[o],o.dtype)}var aP={kernelName:wo,backendName:"webgl",kernelFunc:ure};var Rg=class{constructor(e,t,o){this.variableNames=["x"],this.outputShape=o;let n=o.length,s=Re(o.length),a=Re(o.length),i="";if(n===1)i="coords * strides + begin";else{let p=0;i=o.map((u,c)=>(p++,o.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${p-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` ${s} begin = ${s}(${e}); ${s} strides = ${s}(${t}); @@ -4692,15 +4692,15 @@ return a / b;`,hre=` ${a} coords = getOutputCoords(); setOutput(getX(${i})); } - `}};function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let E=nt.computeOutShape(b,w,S),R=Js({inputs:{x:n},backend:t,attrs:{begin:b,size:E}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=ie(n.shape,n.dtype,R),F=aA(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,F.values)}else{let R=new Wg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let T=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),T}var KP={kernelName:Os,backendName:"webgl",kernelFunc:_oe};function Eoe(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.readSync(l.dataId),d=t.readSync(c.dataId),[f,h]=iA(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(c.shape,"int32",h)]}var qP={kernelName:Na,backendName:"webgl",kernelFunc:Eoe};function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,l,c]=uA(i,p,n),m=l.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",l),t.makeTensorInfo([2],"int32",new Int32Array(c))]}var jP={kernelName:ru,backendName:"webgl",kernelFunc:$oe};function Roe(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.readSync(s.dataId),i=pA(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var XP={kernelName:ou,backendName:"webgl",kernelFunc:Roe};var Doe="return tan(x);",Aoe=xe({opSnippet:Doe}),YP={kernelName:Ms,backendName:"webgl",kernelFunc:Aoe};var Foe=` + `}};function pre(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=te({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let $=pt.computeOutShape(b,C,S),R=Gs({inputs:{x:n},backend:t,attrs:{begin:b,size:$}});k=te({inputs:{x:R},backend:t,attrs:{shape:f}}),t.disposeIntermediateTensorInfo(R)}else if(t.shouldExecuteOnCPU([n])){let R=t.readSync(n.dataId),D=me(n.shape,n.dtype,R),P=wD(d,D,S,b);k=t.makeTensorInfo(f,n.dtype,P.values)}else{let R=new Rg(b,S,d);k=t.runWebGLProgram(R,[n],n.dtype)}let _=te({inputs:{x:k},backend:t,attrs:{shape:f}});return t.disposeIntermediateTensorInfo(k),_}var iP={kernelName:Ns,backendName:"webgl",kernelFunc:pre};function cre(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=SD(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var uP={kernelName:Ca,backendName:"webgl",kernelFunc:cre};function lre(r){let{inputs:e,backend:t,attrs:o}=r,{skipEmpty:n}=o,{input:s,delimiter:a}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(a.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${a.shape}`);let i=t.readSync(s.dataId),p=t.readSync(a.dataId)[0],[u,c,l]=ID(i,p,n),m=c.length;return[t.makeTensorInfo([m,2],"int32",u),t.makeTensorInfo([m],"string",c),t.makeTensorInfo([2],"int32",new Int32Array(l))]}var pP={kernelName:ji,backendName:"webgl",kernelFunc:lre};function mre(r){let{inputs:e,backend:t,attrs:o}=r,{numBuckets:n}=o,{input:s}=e;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(n<=0)throw new Error("Number of buckets must be at least 1");let a=t.readSync(s.dataId),i=vD(a,n);return t.makeTensorInfo(s.shape,"int32",i)}var cP={kernelName:Xi,backendName:"webgl",kernelFunc:mre};var dre="return tan(x);",fre=xe({opSnippet:dre}),lP={kernelName:_s,backendName:"webgl",kernelFunc:fre};var hre=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); -`,Poe=xe({opSnippet:Foe}),QP={kernelName:Ls,backendName:"webgl",kernelFunc:Poe};function Ooe(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(a,s,n.shape),m=[c/u,u];if(c===0)return t.makeTensorInfo(n.shape,s.dtype);let d=te({inputs:{x:s},backend:t,attrs:{shape:[p,i]}}),f=te({inputs:{x:a},backend:t,attrs:{shape:[p,u]}}),h=te({inputs:{x:n},backend:t,attrs:{shape:m}}),g=new Tu(p,i,d.shape.length,f.shape.length,l,m,!1,!0),x=t.runWebGLProgram(g,[f,d,h],h.dtype),b=te({inputs:{x},backend:t,attrs:{shape:n.shape}});return t.disposeIntermediateTensorInfo(d),t.disposeIntermediateTensorInfo(f),t.disposeIntermediateTensorInfo(h),t.disposeIntermediateTensorInfo(x),b}var ZP={kernelName:ks,backendName:"webgl",kernelFunc:Ooe};var Ug=class{constructor(e,t){this.variableNames=["A"];let o=new Array(e.length);for(let a=0;a5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,l=ie(n.shape,n.dtype,u),c=cA(l,s);return t.makeTensorInfo(c.shape,c.dtype,c.values)}let a=new Ug(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var JP={kernelName:Mo,backendName:"webgl",kernelFunc:q0};var Gg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` + `}};function yre(r){let e=r.length;if(e>5)throw Error(`Tile for rank ${e} is not yet supported`);if(e===1)return`imod(resRC, ${r[0]})`;let t=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],o=[];for(let n=0;n5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=ND(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new Dg(n.shape,s);return t.runWebGLProgram(a,[n],n.dtype)}var fP={kernelName:po,backendName:"webgl",kernelFunc:Fv};var Ag=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; @@ -4740,7 +4740,7 @@ return a / b;`,hre=` setOutput(float(i1)); } } - `}},Hg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` + `}},Fg=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=` void main() { // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ... ivec2 coords = getOutputCoords(); @@ -4774,7 +4774,7 @@ return a / b;`,hre=` setOutput(x0 >= x1 ? float(i0) : float(i1)); } - `}};function Rp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function eO(r){let e=1;for(;ep){let F=t.readSync(n.dataId),[O,M]=mA(F,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,"int32",[])];if(l===1)return[n,Ei({attrs:{shape:u,dtype:"int32",value:0},backend:t})];let c=t.texData.get(n.dataId),m=c!==null&&c.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/l,g=te({inputs:{x:d},attrs:{shape:[h,l]},backend:t});m&&Rp(t,d);let x=eO(s),b=eO(l),w=null,S=()=>w===null?[g,g]:[g,w],k=(F,O,M)=>{let L=S(),B=new Gg(M),U=[[l],[w===null?1:0],[Number.NEGATIVE_INFINITY],[F],[O]],j=w;w=t.runWebGLProgram(B,L,"int32",U),Rp(t,j)};for(let F=1;F=1;M/=2)k(O,M,[h,b])}for(let F=b;F>x;F/=2){let O=S(),M=new Hg([h,F/2]),B=[[l],[w===null?1:0],[x]],z=w;w=t.runWebGLProgram(M,O,"int32",B),Rp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,w.shape)}let T=w;w=Js({inputs:{x:w},backend:t,attrs:{begin:0,size:[h,s]}}),Rp(t,T);let E=z0({inputs:{x:g,indices:w},backend:t,attrs:{axis:1,batchDims:1}});Rp(t,g);let R=u.slice(0,-1);R.push(s),T=w,w=te({inputs:{x:w},attrs:{shape:R},backend:t}),Rp(t,T);let D=E;return E=te({inputs:{x:E},attrs:{shape:R},backend:t}),Rp(t,D),[E,w]}var tO={kernelName:Bs,backendName:"webgl",kernelFunc:Loe};var Kg=class{constructor(e,t,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` + `}};function kp(r,e){e!==null&&r.disposeIntermediateTensorInfo(e)}function hP(r){let e=1;for(;ep){let P=t.readSync(n.dataId),[O,M]=TD(P,u,n.dtype,s,a);return[t.makeTensorInfo(O.shape,O.dtype,O.values),t.makeTensorInfo(M.shape,M.dtype,M.values)]}if(s===0)return u[u.length-1]=0,[t.makeTensorInfo(u,n.dtype,[]),t.makeTensorInfo(u,"int32",[])];if(c===1)return[n,Ci({attrs:{shape:u,dtype:"int32",value:0},backend:t})];let l=t.texData.get(n.dataId),m=l!==null&&l.isPacked,d=m?t.unpackTensor(n):n,h=y.sizeFromShape(u)/c,g=te({inputs:{x:d},attrs:{shape:[h,c]},backend:t});m&&kp(t,d);let x=hP(s),b=hP(c),C=null,S=()=>C===null?[g,g]:[g,C],k=(P,O,M)=>{let L=S(),B=new Ag(M),U=[[c],[C===null?1:0],[Number.NEGATIVE_INFINITY],[P],[O]],j=C;C=t.runWebGLProgram(B,L,"int32",U),kp(t,j)};for(let P=1;P=1;M/=2)k(O,M,[h,b])}for(let P=b;P>x;P/=2){let O=S(),M=new Fg([h,P/2]),B=[[c],[C===null?1:0],[x]],z=C;C=t.runWebGLProgram(M,O,"int32",B),kp(t,z);let U=x/2,j=U*2;for(let q=U;q>=1;q/=2)k(j,q,C.shape)}let _=C;C=Gs({inputs:{x:C},backend:t,attrs:{begin:0,size:[h,s]}}),kp(t,_);let $=Tv({inputs:{x:g,indices:C},backend:t,attrs:{axis:1,batchDims:1}});kp(t,g);let R=u.slice(0,-1);R.push(s),_=C,C=te({inputs:{x:C},attrs:{shape:R},backend:t}),kp(t,_);let D=$;return $=te({inputs:{x:$},attrs:{shape:R},backend:t}),kp(t,D),[$,C]}var gP={kernelName:$s,backendName:"webgl",kernelFunc:bre};var Pg=class{constructor(e,t,o,n,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let i=o==="nearest"?1:2,p;switch(n){case"constant":p=1;break;case"reflect":p=2;break;case"wrap":p=3;break;case"nearest":p=4;break;default:p=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${p} == 2) { @@ -4886,7 +4886,7 @@ return a / b;`,hre=` } setOutput(outputValue); } - `}};function Boe(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Kg(c,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],"float32")}var rO={kernelName:zs,backendName:"webgl",kernelFunc:Boe};function zoe(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Ys(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=dA(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var oO={kernelName:nu,backendName:"webgl",kernelFunc:zoe};function Voe(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),l=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var nO={kernelName:Ta,backendName:"webgl",kernelFunc:Voe};var qg=class{constructor(e,t){this.variableNames=["x","segmentIds"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",l=Math.floor(o/4)*4,c=o%4,m=` + `}};function Cre(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Pg(l,m,a,i,p,g);return t.runWebGLProgram(x,[n,s],"float32")}var xP={kernelName:Rs,backendName:"webgl",kernelFunc:Cre};function wre(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e;Vs(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let a=o.readSync(s.dataId),{outputValues:i,outputShape:p,indices:u}=_D(a,n,s.shape,s.dtype);return[o.makeTensorInfo(p,s.dtype,i),o.makeTensorInfo([u.length],"int32",u)]}var yP={kernelName:Yi,backendName:"webgl",kernelFunc:wre};function Sre(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeIntermediateTensorInfo(h)),f}var bP={kernelName:wa,backendName:"webgl",kernelFunc:Sre};var Og=class{constructor(e,t){this.variableNames=["x","segmentIds"];let o=e.windowSize,n=e.batchSize,s=e.inSize,a=e.numSegments,i=a*Math.ceil(s/o);this.outputShape=[n,i];let p="0.0",u="sumValue",c=Math.floor(o/4)*4,l=o%4,m=` sumValue += dot(values, segFilter); `,d="";s%o>0&&(d=` if (inIdx < 0 || inIdx >= ${s}) { @@ -4919,7 +4919,7 @@ return a / b;`,hre=` float sumValue = 0.0; - for (int i = 0; i < ${l}; i += 4) { + for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), @@ -4938,8 +4938,8 @@ return a / b;`,hre=` ${m} } - int inIdx = inOffset + ${l}; - if (${c===1}) { + int inIdx = inOffset + ${c}; + if (${l===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, @@ -4957,7 +4957,7 @@ return a / b;`,hre=` ); ${m} - } else if (${c===2}) { + } else if (${l===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4973,7 +4973,7 @@ return a / b;`,hre=` ); ${m} - } else if (${c===3}) { + } else if (${l===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), @@ -4992,9 +4992,9 @@ return a / b;`,hre=` } setOutput(${u}); } - `}};function Woe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,l=C.getAxesPermutation([u],i),c=n;l!=null&&(c=Ct({inputs:{x:n},backend:t,attrs:{perm:l}}),p.push(c),u=C.getInnerMostAxes(1,i)[0]);let m=C.segment_util.computeOutShape(c.shape,u,a),d=y.sizeFromShape([c.shape[u]]),f=te({inputs:{x:c},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=mi(n.dtype),g=(S,k,T,E,R)=>{let D=S.shape[0],F=S.shape[1],O=C.segment_util.segOpComputeOptimalWindowSize(F,R),M={windowSize:O,inSize:F,batchSize:D,numSegments:R},L=new qg(M,k),B=t.compileAndRun(L,[S,T],E);if(p.push(B),B.shape[1]===R)return B;let z=K0({backend:t,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),U=q0({inputs:{x:z},backend:t,attrs:{reps:[F/O]}});return p.push(z),p.push(U),g(B,k,U,E,R)},x=g(f,"unsortedSegmentSum",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),w=b;if(l!=null){p.push(b);let S=C.getUndoAxesPermutation(l);w=Ct({inputs:{x:w},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),w}var sO={kernelName:su,backendName:"webgl",kernelFunc:Woe};var Uoe=[VA,UA,GA,HA,qA,jA,XA,YA,JA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,lF,cF,dF,fF,hF,gF,CF,SF,IF,RA,kF,TF,_F,EF,$F,RF,DF,AF,FF,PF,OF,BF,zF,VF,WF,UF,GF,HF,KF,qF,jF,XF,YF,QF,ZF,JF,e3,r3,o3,n3,s3,i3,u3,p3,l3,c3,m3,d3,f3,h3,$A,g3,NF,x3,y3,b3,DA,C3,w3,S3,I3,v3,k3,N3,T3,_3,E3,R3,D3,A3,F3,P3,O3,L3,z3,V3,W3,U3,G3,X3,PA,Y3,Q3,Z3,J3,xF,eP,oP,nP,sP,aP,AA,iP,uP,pP,lP,cP,yF,H3,mP,dP,fP,MA,hP,gP,xP,yP,bP,CP,wP,SP,IP,vP,kP,NP,TP,_P,EP,$P,mF,j3,RP,DP,AP,FP,PP,OP,MP,LP,zP,VP,UP,GP,HP,KP,qP,jP,XP,q3,BA,YP,QP,ZP,JP,tO,rO,zA,oO,nO,sO,tP];for(let r of Uoe)li(r);var we;(function(r){r[r.float32=0]="float32",r[r.int32=1]="int32",r[r.bool=2]="bool",r[r.string=3]="string",r[r.complex64=4]="complex64"})(we||(we={}));var _u;(function(r){r[r.linear=0]="linear",r[r.relu=1]="relu",r[r.relu6=2]="relu6",r[r.prelu=3]="prelu",r[r.leakyrelu=4]="leakyrelu",r[r.sigmoid=5]="sigmoid",r[r.elu=6]="elu"})(_u||(_u={}));var aO;function Goe(r){aO=r.wasm.cwrap(qo,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Hoe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=_u[l];if(g==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...w,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,T=new Uint8Array(new Int32Array(n.shape).buffer),E=new Uint8Array(new Int32Array(s.shape).buffer);return aO(m,T,n.shape.length,d,E,s.shape.length,p,u,g,f,h,c||0,k),S}var iO={kernelName:qo,backendName:"wasm",setupFunc:Goe,kernelFunc:Hoe};function he(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,["number","number","number"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),l=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,we[i.dtype],l),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var uO=he(fn);var pO=he(hn);var lO=he(gn);function He(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:l}=p,c=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(l.dataId).id,d=t!=null?t:u.dtype,f=C.assertAndGetBroadcastShape(u.shape,l.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(l.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return o(c,g,u.shape.length,m,x,l.shape.length,we[u.dtype],b),h}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:s}}var Koe=!0,cO=He(Rr,Koe);var mO;function qoe(r){mO=r.wasm.cwrap(xn,null,["array","number","number","number"])}function joe(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return mO(s,n.length,we[o.dtype],a),o}var dO={kernelName:xn,backendName:"wasm",setupFunc:qoe,kernelFunc:joe};function Dp(r){let{inputs:{x:e},backend:t}=r;if(e.dtype==="string")return pr(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var fO={kernelName:vo,backendName:"wasm",kernelFunc:Dp};var hO;function Xoe(r){hO=r.wasm.cwrap(Kr,null,["number","array","number","number","number","array","number"])}function Vo(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Qoe(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var gO={kernelName:Kr,backendName:"wasm",kernelFunc:Vo,setupFunc:Xoe};function $r(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=C.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let l=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var OO={kernelName:Ca,backendName:"wasm",kernelFunc:Wt};var MO;function lne(r){MO=r.wasm.cwrap(Nn,null,["number","array","number","number","array","number","number","number","number"])}function cne(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let p=n.shape.length,u=s.shape.length,l=a?n.shape[p-2]:n.shape[p-1],c=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),w=kr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(l===c,()=>`Error in matMul: inner shapes (${l}) and (${c}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,l,m]:[g,m,l],k=i?[x,d,c]:[x,c,d],T=Wt({inputs:{x:n},backend:t,attrs:{shape:S}}),E=Wt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(T.dataId).id,D=t.dataIdMap.get(E.dataId).id,F=a?T.shape[2]:T.shape[1],O=i?E.shape[1]:E.shape[2],M=Math.max(g,x),L=t.makeOutput([M,F,O],T.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(T.shape).buffer),U=new Uint8Array(new Int32Array(E.shape).buffer);return MO(R,z,T.shape.length,D,U,E.shape.length,a,i,B),t.disposeData(T.dataId),t.disposeData(E.dataId),L.shape=w,L}var LO={kernelName:Nn,backendName:"wasm",setupFunc:lne,kernelFunc:cne};function an(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=nt.parseSliceParams(e,t,o),i=nt.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),l=y.computeStrides(e.shape),c=n.dataIdMap.get(u.dataId);if(i){let f=nt.computeFlatOffset(s,l);return e.dtype==="string"?c.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype==="string"){let f=hp(p,s,a,e.shape,e.dtype);return c.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)mne(p,l[0],m,s,a);else if(d===3)dne(p,l[0],l[1],m,s,a);else if(d===4)fne(p,l[0],l[1],l[2],m,s,a);else{let f=hp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function mne(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=Wt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=Vo({inputs:{x:d},backend:t,attrs:{perm:u}}),h=Wt({inputs:{x:f},backend:t,attrs:{shape:l}}),g=an({inputs:{x:h},backend:t,attrs:{begin:c,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var zO={kernelName:ia,backendName:"wasm",kernelFunc:hne};var VO;function gne(r){VO=r.wasm.cwrap(Tn,null,["number","number","boolean","number","number","number"])}function xne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((c,m)=>c*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function l(c){return e.dataIdMap.get(c.dataId).id}return VO(l(n),a,i,l(s),we[s.dtype],l(u)),u}var WO={kernelName:Tn,backendName:"wasm",setupFunc:gne,kernelFunc:xne};var yne=!0,UO=He(_n,yne);function bne(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=C.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var GO={kernelName:ua,backendName:"wasm",kernelFunc:bne};function Vr(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var HO={kernelName:ho,backendName:"wasm",kernelFunc:Vr};var KO=he(go);var qO;function Cne(r){qO=r.wasm.cwrap(Go,null,["number","number","number","number"])}function wne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return qO(i,s,a,u),p}var jO={kernelName:Go,backendName:"wasm",setupFunc:Cne,kernelFunc:wne};function j0(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);C.assertParamsConsistent(n,o);let s=C.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Dp({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype==="string"){let d=a.map(w=>{let k=[-1,y.sizeFromShape(w.shape.slice(o))];return Wt({inputs:{x:w},backend:t,attrs:{shape:k}})}),f=d.map(w=>({vals:t.readSync(w.dataId),shape:w.shape}));s=C.computeOutShape(d.map(w=>w.shape),1);let h=d[0].shape[0]===1,g=mp(f,s,e[0].dtype,h),x=C.computeOutShape(a.map(w=>w.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=C.fromStringArrayToUint8(g),d.forEach(w=>t.disposeData(w.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,l=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),c=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],p),l=n;u!==null&&(l=Vo({inputs:{x:n},attrs:{perm:u},backend:t}));let c=C.getInnerMostAxes(1,p)[0];C.assertAxesAreInnerMostDims("cumprod",[c],p);let m=t.makeOutput(l.shape,l.dtype),d=l.shape[c],f=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(m.dataId).id;lM(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=C.getUndoAxesPermutation(u);g=Vo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(l.dataId),t.disposeData(m.dataId)}return g}var cM={kernelName:Pn,backendName:"wasm",setupFunc:Fne,kernelFunc:Pne};var mM;function One(r){mM=r.wasm.cwrap(On,null,["number","number","number","number","number","number"])}function Mne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype==="float32"||n.dtype==="int32",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],p),l=n;u!==null&&(l=Vo({inputs:{x:n},attrs:{perm:u},backend:t}));let c=C.getInnerMostAxes(1,p)[0];C.assertAxesAreInnerMostDims("cumsum",[c],p);let m=t.makeOutput(l.shape,l.dtype),d=l.shape[c],f=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(m.dataId).id;mM(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=C.getUndoAxesPermutation(u);g=Vo({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(l.dataId),t.disposeData(m.dataId)}return g}var dM={kernelName:On,backendName:"wasm",setupFunc:One,kernelFunc:Mne};var fM;function Lne(r){fM=r.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function Bne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],l=e.makeOutput(u,s.dtype);function c(m){return e.dataIdMap.get(m.dataId).id}return fM(c(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,c(s),we[s.dtype],i,c(l)),l}var hM={kernelName:la,backendName:"wasm",setupFunc:Lne,kernelFunc:Bne};var gM;function zne(r){gM=r.wasm.cwrap(Ln,null,["number","number","number","array","number","array","array","number","number"])}function Vne(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],l=a==="NHWC"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a==="NHWC"?[i,c,m,d]:[i,d,c,m],h=e.makeOutput(f,"float32"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),w=new Uint8Array(new Int32Array(f).buffer),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return gM(x,s,a==="NHWC"?1:0,b,n.shape.length-1,w,S,f.length,k),h}var xM={kernelName:Ln,backendName:"wasm",setupFunc:zne,kernelFunc:Vne};var yM;function Wne(r){yM=r.wasm.cwrap(Bn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Une(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:l,dimRoundingMode:c}=t,m=u==null?[1,1]:u,d=C.computeConv2DInfo(n.shape,s.shape,p,m,l,c,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,w=d.padInfo.left,S=d.dilationHeight,k=d.dilationWidth,T=d.strideHeight,E=d.strideWidth,R=d.inChannels,D=d.outChannels,F=d.padInfo.type==="SAME"?1:0;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(d.outShape,"float32"),M=o.dataIdMap.get(O.dataId).id;return yM(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,w,F,S,k,T,E,R,D,M),O}var bM={kernelName:Bn,backendName:"wasm",setupFunc:Wne,kernelFunc:Une};var CM;function Gne(r){CM=r.wasm.cwrap("Diag",null,["number","number","number","number"])}function Hne(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return CM(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var wM={kernelName:ca,backendName:"wasm",setupFunc:Gne,kernelFunc:Hne};var SM;function Kne(r){SM=r.wasm.cwrap(zn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function qne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=C.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),l=t.makeOutput(u.outShape,n.dtype);return SM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),l}var IM={kernelName:zn,backendName:"wasm",setupFunc:Kne,kernelFunc:qne};var vM;function jne(r){vM=r.wasm.cwrap(qi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Xne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let l=C.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),c=t.makeOutput(s.shape,s.dtype);return vM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),c}var kM={kernelName:qi,backendName:"wasm",setupFunc:jne,kernelFunc:Xne};var NM;function Yne(r){NM=r.wasm.cwrap(Ki,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let l=C.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),c=t.makeOutput(n.shape,n.dtype);return NM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),c}var TM={kernelName:Ki,backendName:"wasm",setupFunc:Yne,kernelFunc:Qne};var _M=he(Wn);var EM;function Zne(r){EM=r.wasm.cwrap(ri,null,["number","number","number"])}function Jne(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,"float32"),a=i=>t.dataIdMap.get(i.dataId).id;return EM(a(n),a(o),a(s)),s}var $M={kernelName:ri,backendName:"wasm",setupFunc:Zne,kernelFunc:Jne};var ese=!1,RM=He(xo,ese,"bool");var DM=he(Un);var AM=he(yo,"float32");function Xg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),Wt({inputs:{x:n},backend:o,attrs:{shape:i}})}var FM={kernelName:ma,backendName:"wasm",kernelFunc:Xg};var PM=he(bo,"float32");function Y0(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var OM={kernelName:da,backendName:"wasm",kernelFunc:Y0};var MM;function tse(r){MM=r.wasm.cwrap(Gn,null,["number","number","number","number","number","number"])}function rse(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,l]=o.shape;return MM(s,i,p,u,l,a),n}var LM={kernelName:Gn,backendName:"wasm",kernelFunc:rse,setupFunc:tse};var BM=he(Co);var ose=!1,zM=He(wo,ose);var VM;function nse(r){VM=r.wasm.cwrap(Hn,null,["number","number","number","number","number","number","number"])}function sse(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,l=e.dataIdMap.get(s.dataId).id,c=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return VM(l,c,m,d,f,n,g),h}var WM={kernelName:Hn,backendName:"wasm",setupFunc:nse,kernelFunc:sse};var UM;function ase(r){UM=r.wasm.cwrap(jo,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 ise(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dataFormat:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=C.computeConv2DInfo(n.shape,s.shape,p,l,u,m),g=_u[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,w=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==w)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`);S=ee.id}let k=h.filterHeight,T=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,F=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return UM(x,j,q,Y,b,k,T,S,E,R,D,F,U,O,M,L,B,z,w,g,ne,f||0,re),J}var GM={kernelName:jo,backendName:"wasm",setupFunc:ase,kernelFunc:ise};var HM;function use(r){HM=r.wasm.cwrap(Xo,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 pse(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dataFormat:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=C.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!0),g=_u[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,w=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==w)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${w})`);S=ee.id}let k=h.filterHeight,T=h.filterWidth,E=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,F=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(c!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${c}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return HM(x,j,q,Y,b,k,T,S,E,R,D,F,U,O,M,L,B,z,w,g,ne,f||0,re),J}var KM={kernelName:Xo,backendName:"wasm",setupFunc:use,kernelFunc:pse};var qM;function lse(r){qM=r.wasm.cwrap(Kn,null,["number","number","number","number","number","number","array","number"])}function cse(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=xf.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let l=n.shape,c=l[l.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return qM(d,we[o.dtype],h,a,c,i,g,x),u}var jM={kernelName:Kn,backendName:"wasm",setupFunc:lse,kernelFunc:cse};var XM;function mse(r){XM=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function dse(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),l=n.shape[p];for(let D=0;D=0,()=>`GatherV2: the index value ${F} is not in [0, ${l-1}]`)}let c=C.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=Wt({inputs:{x:n},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=Wt({inputs:{x:s},attrs:{shape:[c.batchSize,d/c.batchSize]},backend:e}),h=[c.batchSize,c.outerSize,d/c.batchSize,c.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,w=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,T=e.dataIdMap.get(g.dataId).id,E=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return XM(w,we[n.dtype],E,x,k,c.batchSize,R,T),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=c.outputShape,g}var YM={kernelName:fa,backendName:"wasm",setupFunc:mse,kernelFunc:dse};var fse=!1,QM=He(So,fse,"bool");var hse=!1,ZM=He(Io,hse,"bool");var JM=he(qn,"bool");var eL=he(jn,"bool");var tL=he(Xn,"bool");var rL;function gse(r){rL=r.wasm.cwrap(Yn,null,["number","number","number","number"])}function xse(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,"float32");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;rL(n,we[e.dtype],t,a)}return s}var oL={kernelName:Yn,backendName:"wasm",setupFunc:gse,kernelFunc:xse};var yse=!1,nL=He(ko,yse,"bool");var bse=!1,sL=He(No,bse,"bool");var aL;function Cse(r){aL=r.wasm.cwrap(Qn,null,["number","number","number","number"])}function wse(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],"float32");return aL(t.dataIdMap.get(i.dataId).id,o,n,a),i}var iL={kernelName:Qn,backendName:"wasm",setupFunc:Cse,kernelFunc:wse};var uL=he(To);var pL=he(Zn);var Sse=!1,lL=He(Jn,Sse,"bool");var cL=he(es);var Ise=!1,mL=He(ts,Ise,"bool");var vse=!1,dL=He(gk,vse,"bool");var fL;function kse(r){fL=r.wasm.cwrap(rs,null,["number","number","number","number","number","number","number"])}function Nse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=t.makeOutput(n.shape,n.dtype);return fL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var hL={kernelName:rs,backendName:"wasm",setupFunc:kse,kernelFunc:Nse};var gL;function Tse(r){gL=r.wasm.cwrap(oi,null,["number","number","number","number","number","number","number","number","number"])}function _se(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o;if(n.dtype!=="float32"||s.dtype!=="float32"||a.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let c=t.makeOutput(n.shape,n.dtype);return gL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(c.dataId).id,a.shape[3],i,p,u,l),c}var xL={kernelName:oi,backendName:"wasm",setupFunc:Tse,kernelFunc:_se};var yL;function Ese(r){yL=r.wasm.cwrap(os,null,["number","number","number","number"])}function $se(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e);if(d){let w=e.dataIdMap.get(l.dataId).id;u=l,p=w}let f=u.shape.length;C.assertAxesAreInnerMostDims("max",c,f);let[h,g]=C.computeOutAndReduceShapes(u.shape,c),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;yL(p,we[a.dtype],x,w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var bL={kernelName:os,backendName:"wasm",setupFunc:Ese,kernelFunc:$se};var Rse=!1,CL=He(_o,Rse);var wL;function Dse(r){wL=r.wasm.cwrap(ns,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ase(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,l=C.computePool2DInfo(n.shape,a,i,1,p,u),c=l.filterHeight,m=l.filterWidth,d=l.padInfo.top,f=l.padInfo.right,h=l.padInfo.bottom,g=l.padInfo.left,x=l.dilationHeight,b=l.dilationWidth,w=l.strideHeight,S=l.strideWidth,k=l.inChannels,T=l.outChannels;if(l.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);let E=o.makeOutput(l.outShape,"float32"),R=o.dataIdMap.get(E.dataId).id;return wL(s,n.shape[0],n.shape[1],n.shape[2],c,m,d,f,h,g,x,b,w,S,k,T,R),E}var SL={kernelName:ns,backendName:"wasm",setupFunc:Dse,kernelFunc:Ase};var IL;function Fse(r){IL=r.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Pse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,l=C.computePool3DInfo(n.shape,s,a,1,i,p,u),c=t.makeOutput(l.outShape,n.dtype);return IL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),c}var vL={kernelName:ha,backendName:"wasm",setupFunc:Fse,kernelFunc:Pse};var kL;function Ose(r){kL=r.wasm.cwrap("MaxPool3DGrad",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 Mse(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,l=C.computePool3DInfo(s.shape,a,i,1,p,u),c=t.makeOutput(s.shape,s.dtype);return kL(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),c}var NL={kernelName:Ji,backendName:"wasm",setupFunc:Ose,kernelFunc:Mse};var TL;function Lse(r){TL=r.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bse(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,l=C.computePool2DInfo(s.shape,a,i,1,p,u),c=t.makeOutput(s.shape,s.dtype);return TL(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),c}var _L={kernelName:Zi,backendName:"wasm",setupFunc:Lse,kernelFunc:Bse};var EL;function zse(r){EL=r.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Vse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=C.computePool2DInfo(n.shape,s,a,[1,1],i),c=t.makeOutput(l.outShape,n.dtype),m=t.makeOutput(l.outShape,"int32");return EL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(c.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),[c,m]}var $L={kernelName:ga,backendName:"wasm",setupFunc:zse,kernelFunc:Vse};var RL;function Wse(r){RL=r.wasm.cwrap(ss,null,["number, number, number"])}function Use(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let S=e.dataIdMap.get(l.dataId).id;S!==i&&(u=l,p=S,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=Vr({backend:e,inputs:{x:u},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(b.dataId).id);let w=e.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let S=e.dataIdMap.get(w.dataId).id;RL(p,x,S)}if(d&&e.disposeData(l.dataId),s){let S=C.expandShapeToKeepDim(w.shape,m);w.shape=S}return u.dtype!=="float32"&&e.disposeData(b.dataId),w}var DL={kernelName:ss,backendName:"wasm",setupFunc:Wse,kernelFunc:Use};var AL;function Gse(r){AL=r.wasm.cwrap(as,null,["number","number","number","number"])}function Hse(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e);if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w)}let f=u.shape.length;C.assertAxesAreInnerMostDims("min",c,f);let[h,g]=C.computeOutAndReduceShapes(u.shape,c),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;AL(p,we[a.dtype],x,w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var FL={kernelName:as,backendName:"wasm",setupFunc:Gse,kernelFunc:Hse};var Kse=!1,PL=He(Eo,Kse);var Q0;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Q0||(Q0={}));var OL;function qse(r){OL=r.wasm.cwrap(is,null,["number","array","number","number","array","array","number","number"])}function jse(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(f=>f[0]),c=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(l).buffer),d=new Uint8Array(new Int32Array(c).buffer);return OL(a,u,e.shape.length,we[e.dtype],m,d,Q0[n],p),i}var ML={kernelName:is,backendName:"wasm",kernelFunc:jse,setupFunc:qse};var LL;function Xse(r){LL=r.wasm.cwrap(Fs,null,["number","number","number","number"])}function Z0(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||LL(n,a,i,p),s}var BL={kernelName:Fs,backendName:"wasm",setupFunc:Xse,kernelFunc:Z0};var zL;function Yse(r){zL=r.wasm.cwrap(ps,null,["number","number","number","number","number","number"])}function Qse(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Z0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,l]=p.shape,c=t.makeOutput([u,s],"int32");return zL(t.dataIdMap.get(p.dataId).id,u,l,s,a,t.dataIdMap.get(c.dataId).id),i||t.disposeData(p.dataId),c}var VL={kernelName:ps,backendName:"wasm",setupFunc:Yse,kernelFunc:Qse};var WL=He(us,!0);var Zse=!0,UL=He($o,Zse);var GL=he(ls);function Zl(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var HL;function Jse(r){HL=r.wasm.cwrap(cs,"number",["number","number","number","number","number"])}function eae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,l=e.dataIdMap.get(p.dataId).id,c=HL(u,l,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=Zl(e,c);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],"int32",m)}var KL={kernelName:cs,backendName:"wasm",setupFunc:Jse,kernelFunc:eae};var qL;function tae(r){qL=r.wasm.cwrap(ni,"number",["number","number","number","number","number","bool"])}function rae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,l=e.dataIdMap.get(p.dataId).id,c=e.dataIdMap.get(u.dataId).id,m=qL(l,c,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Zl(e,m);e.wasm._free(h);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([],"int32",g);return[x,b]}var jL={kernelName:ni,backendName:"wasm",setupFunc:tae,kernelFunc:rae};var XL;function oae(r){XL=r.wasm.cwrap(ms,"number",["number","number","number","number","number","number"])}function nae(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,l=e.dataIdMap.get(p.dataId).id,c=e.dataIdMap.get(u.dataId).id,m=XL(l,c,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=Zl(e,m);e.wasm._free(g);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([f],"float32",h);return[x,b]}var YL={kernelName:ms,backendName:"wasm",setupFunc:oae,kernelFunc:nae};var sae=!1,QL=He(Ro,sae,"bool");var ZL;function aae(r){ZL=r.wasm.cwrap(ds,null,["number","number","number","number","number"])}function iae(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),l=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return ZL(m,a,i,p,l),u}var JL={kernelName:ds,backendName:"wasm",setupFunc:aae,kernelFunc:iae};function uae(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var eB={kernelName:xa,backendName:"wasm",kernelFunc:uae};function pae(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Xg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(l=>{let c=Xg({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=j0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeData(l.dataId)),u}var tB={kernelName:ya,backendName:"wasm",kernelFunc:pae};var rB;function lae(r){rB=r.wasm.cwrap(fs,null,["number","array","number","number","array","array","number","number"])}function cae(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Y0({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(c).buffer),f=new Uint8Array(new Int32Array(m).buffer);return rB(a,l,e.shape.length,we[e.dtype],d,f,n,u),i}var Yg={kernelName:fs,backendName:"wasm",kernelFunc:cae,setupFunc:lae};var mae=!1,oB=He(hs,mae);var nB;function dae(r){nB=r.wasm.cwrap(gs,null,["number","number","number"])}function fae(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=Vr({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),i=t.dataIdMap.get(u.dataId).id);let l=t.makeOutput(o.shape,"float32"),c=t.dataIdMap.get(l.dataId).id;return nB(i,a,c),p.dtype!=="float32"&&t.disposeData(u.dataId),l}var sB={kernelName:gs,backendName:"wasm",setupFunc:dae,kernelFunc:fae};var aB;function hae(r){aB=r.wasm.cwrap(Ho,null,["number","number","number","number"])}function gae(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;aB(p,x,we[b.dtype],w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var iB={kernelName:Ho,backendName:"wasm",setupFunc:hae,kernelFunc:gae};var xae=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=fp(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},uB={kernelName:ba,backendName:"wasm",kernelFunc:xae};var yae=!0,pB=He(Vn,yae);var lB=he(xs);var cB=he(ys);var mB=he(ws);var dB;function bae(r){dB=r.wasm.cwrap(Cs,null,["number","number","number","number","number","number","number","number","number","number"])}function Cae(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[l,c,m,d]=n.shape,f=[l,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=Vr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return b;let w=e.dataIdMap.get(b.dataId).id;return dB(x,l,c,m,d,p,u,s?1:0,a?1:0,w),g!=null&&e.disposeData(g.dataId),b}var fB={kernelName:Cs,backendName:"wasm",setupFunc:bae,kernelFunc:Cae};var hB;function wae(r){hB=r.wasm.cwrap(ii,null,["number","number","number","array","array","boolean"])}function Sae(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Vr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),hB(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var gB={kernelName:ii,backendName:"wasm",setupFunc:wae,kernelFunc:Sae};var xB;function Iae(r){xB=r.wasm.cwrap(bs,null,["number","number","number","number","number","number","number","number","number","number"])}function vae(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[l,c,m,d]=n.shape,f=[l,p,u,d],h=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!=="float32"&&(x=Vr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,w=e.dataIdMap.get(h.dataId).id;return xB(b,l,c,m,d,p,u,s?1:0,a?1:0,w),x!=null&&e.disposeData(x.dataId),h}var yB={kernelName:bs,backendName:"wasm",setupFunc:Iae,kernelFunc:vae};var bB;function kae(r){bB=r.wasm.cwrap(ai,null,["number","number","number","array","array","boolean"])}function Nae(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Vr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),bB(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var CB={kernelName:ai,backendName:"wasm",setupFunc:kae,kernelFunc:Nae};var wB;function Tae(r){wB=r.wasm.cwrap(Ss,null,["number","array","number","array","number","number"])}function _ae(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Dp({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(a).buffer),c=new Uint8Array(new Int32Array(n.shape).buffer);wB(p,l,a.length,c,n.shape.length,u);let m=Wt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var SB={kernelName:Ss,backendName:"wasm",kernelFunc:_ae,setupFunc:Tae};var IB;function Eae(r){IB=r.wasm.cwrap(Vs,null,["number","number","number","number","number","number","number","number","array","number","number"])}function $ae(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,l=t.dataIdMap.get(p.dataId).id,[c,m,d,f]=n.shape,[h,g]=C.getImageCenter(i,m,d),x=a===0,b=255,w=typeof a=="number"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(w).buffer);return IB(u,c,m,d,f,s,h,g,S,w.length,l),p}var vB={kernelName:Vs,backendName:"wasm",kernelFunc:$ae,setupFunc:Eae};var kB=he(Is);var NB=he(Do);var TB;function Rae(r){TB=r.wasm.cwrap(vs,null,["number","number","number","number","number","number","array","number","number"])}function Dae(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=Cu.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(c).buffer),b=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[s.dtype],p,u,l,x,m,b),i}var _B={kernelName:vs,backendName:"wasm",setupFunc:Rae,kernelFunc:Dae};var EB;function Aae(r){EB=r.wasm.cwrap(Ns,null,["number","number","number","number","number","number","bool","number"])}function Fae(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,"int32");function p(u){return t.dataIdMap.get(u.dataId).id}return EB(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a==="left",p(i)),i}var $B={kernelName:Ns,backendName:"wasm",setupFunc:Aae,kernelFunc:Fae};var RB;function Pae(r){RB=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Oae(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),l=t.dataIdMap.get(u.dataId).id,c=o.shape.length,m=n.shape.length,d=c===0||c>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return RB(a,i,p,d,l),u}var DB={kernelName:wa,backendName:"wasm",kernelFunc:Oae,setupFunc:Pae};var AB=he(Ts);var FB;function Mae(r){FB=r.wasm.cwrap(Ao,null,["number","number"])}function Lae(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||FB(o,s),n}var PB={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Mae,kernelFunc:Lae};var OB=he(Rs);var MB=he(Es);var LB=he($s);var BB=he(Ds);function Bae(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let T=1+s.length;T{let D=S.shape[0],P=S.shape[1],O=w.segment_util.segOpComputeOptimalWindowSize(P,R),M={windowSize:O,inSize:P,batchSize:D,numSegments:R},L=new Og(M,k),B=t.compileAndRun(L,[S,_],$);if(p.push(B),B.shape[1]===R)return B;let z=Av({backend:t,attrs:{start:0,stop:R,step:1,dtype:"float32"}}),U=Fv({inputs:{x:z},backend:t,attrs:{reps:[P/O]}});return p.push(z),p.push(U),g(B,k,U,$,R)},x=g(f,"unsortedSegmentSum",s,h,a),b=te({inputs:{x},backend:t,attrs:{shape:m}}),C=b;if(c!=null){p.push(b);let S=w.getUndoAxesPermutation(c);C=bt({inputs:{x:C},backend:t,attrs:{perm:S}})}return p.forEach(S=>t.disposeIntermediateTensorInfo(S)),C}var CP={kernelName:Qi,backendName:"webgl",kernelFunc:Ire};var vre=[rA,nA,sA,aA,uA,pA,cA,lA,fA,hA,gA,xA,yA,bA,CA,wA,SA,IA,vA,kA,NA,_A,EA,$A,RA,PA,MA,LA,KD,zA,WA,UA,GA,HA,KA,qA,jA,XA,YA,QA,eF,tF,rF,oF,nF,sF,aF,iF,uF,pF,cF,lF,mF,dF,fF,hF,xF,yF,bF,CF,SF,IF,vF,kF,NF,TF,_F,EF,$F,HD,RF,VA,DF,AF,FF,qD,PF,OF,MF,LF,BF,zF,VF,WF,UF,GF,KF,qF,jF,XF,YF,QF,JF,t3,r3,o3,n3,s3,c3,YD,l3,m3,d3,f3,DA,h3,y3,b3,C3,w3,jD,S3,I3,v3,k3,N3,AA,a3,T3,_3,E3,ZD,$3,R3,D3,A3,F3,P3,O3,M3,L3,B3,z3,V3,W3,U3,G3,H3,TA,p3,K3,q3,j3,X3,Y3,Q3,Z3,J3,tP,rP,nP,sP,aP,iP,uP,pP,cP,u3,eA,lP,mP,dP,fP,gP,xP,tA,yP,bP,CP,g3];for(let r of vre)ti(r);var we;(function(r){r[r.float32=0]="float32",r[r.int32=1]="int32",r[r.bool=2]="bool",r[r.string=3]="string",r[r.complex64=4]="complex64"})(we||(we={}));var wu;(function(r){r[r.linear=0]="linear",r[r.relu=1]="relu",r[r.relu6=2]="relu6",r[r.prelu=3]="prelu",r[r.leakyrelu=4]="leakyrelu",r[r.sigmoid=5]="sigmoid",r[r.elu=6]="elu"})(wu||(wu={}));var wP;function kre(r){wP=r.wasm.cwrap(So,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Nre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o,m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=0;if(a!=null){let R=t.dataIdMap.get(a.dataId);if(R.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${R.shape.length}.`);f=R.id}let h=i==null?0:t.dataIdMap.get(i.dataId).id,g=wu[c];if(g==null)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let x=p?n.shape[2]:n.shape[1],b=u?s.shape[1]:s.shape[2],C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)),S=t.makeOutput([...C,x,b],n.dtype),k=t.dataIdMap.get(S.dataId).id,_=new Uint8Array(new Int32Array(n.shape).buffer),$=new Uint8Array(new Int32Array(s.shape).buffer);return wP(m,_,n.shape.length,d,$,s.shape.length,p,u,g,f,h,l||0,k),S}var SP={kernelName:So,backendName:"wasm",setupFunc:kre,kernelFunc:Nre};function he(r,e){let t;function o(s){t=s.wasm.cwrap(r,null,["number","number","number"])}function n(s){let{backend:a,inputs:{x:i}}=s,p=a.dataIdMap.get(i.dataId).id,u=a.makeOutput(i.shape,e||i.dtype),c=a.dataIdMap.get(u.dataId).id;return y.sizeFromShape(u.shape)===0||t(p,we[i.dtype],c),u}return{kernelName:r,backendName:"wasm",setupFunc:o,kernelFunc:n}}var IP=he(Xs);var vP=he(Vo);var kP=he(Wo);function Ge(r,e,t){let o;function n(a){o=a.wasm.cwrap(r,null,["number","array","number","number","array","number","number","number"])}function s(a){let{backend:i,inputs:p}=a,{a:u,b:c}=p,l=i.dataIdMap.get(u.dataId).id,m=i.dataIdMap.get(c.dataId).id,d=t!=null?t:u.dtype,f=w.assertAndGetBroadcastShape(u.shape,c.shape),h=i.makeOutput(f,d);if(y.sizeFromShape(f)===0)return h;let g=new Uint8Array(new Int32Array(u.shape).buffer),x=new Uint8Array(new Int32Array(c.shape).buffer),b=i.dataIdMap.get(h.dataId).id;return o(l,g,u.shape.length,m,x,c.shape.length,we[u.dtype],b),h}return{kernelName:r,backendName:"wasm",setupFunc:n,kernelFunc:s}}var Tre=!0,NP=Ge(uo,Tre);var TP;function _re(r){TP=r.wasm.cwrap(Uo,null,["array","number","number","number"])}function Ere(r){let{inputs:e,backend:t}=r,o=t.makeOutput(e[0].shape,e[0].dtype);if(y.sizeFromShape(o.shape)===0)return o;let n=e.map(i=>t.dataIdMap.get(i.dataId).id),s=new Uint8Array(new Int32Array(n).buffer),a=t.dataIdMap.get(o.dataId).id;return TP(s,n.length,we[o.dtype],a),o}var _P={kernelName:Uo,backendName:"wasm",setupFunc:_re,kernelFunc:Ere};function Np(r){let{inputs:{x:e},backend:t}=r;if(e.dtype==="string")return ar(t.readSync(e.dataId),e.shape,e.dtype);let o=t.makeOutput(e.shape,e.dtype),n=t.typedArrayFromHeap(e);return t.typedArrayFromHeap(o).set(n),o}var EP={kernelName:Co,backendName:"wasm",kernelFunc:Np};var $P;function $re(r){$P=r.wasm.cwrap(co,null,["number","array","number","number","number","array","number"])}function ho(r){let{inputs:e,backend:t,attrs:o}=r,[n,s]=Dre(e.x.shape,o.perm),a=!0;for(let f=0;f=n&&(s===-1||o[s]>o[a])&&(s=a);o[s]=n}return[t,o]}var RP={kernelName:co,backendName:"wasm",kernelFunc:ho,setupFunc:$re};function Tr(r,e,t){let o=r.shape,n=r.shape.length,s=y.parseAxisParam(e,o),a=s,i=w.getAxesPermutation(a,n),p=null,u=!1;if(i!=null){let c=new Array(n);for(let d=0;d`new shape: ${a}, old shape: ${o.shape}. New shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var QP={kernelName:da,backendName:"wasm",kernelFunc:zt};var ZP;function Hre(r){ZP=r.wasm.cwrap(Zo,null,["number","array","number","number","array","number","number","number","number"])}function Kre(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;if(n.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let p=n.shape.length,u=s.shape.length,c=a?n.shape[p-2]:n.shape[p-1],l=i?s.shape[u-1]:s.shape[u-2],m=a?n.shape[p-1]:n.shape[p-2],d=i?s.shape[u-2]:s.shape[u-1],f=n.shape.slice(0,-2),h=s.shape.slice(0,-2),g=y.sizeFromShape(f),x=y.sizeFromShape(h),C=Sr.assertAndGetBroadcastShape(n.shape.slice(0,-2),s.shape.slice(0,-2)).concat([m,d]);y.assert(c===l,()=>`Error in matMul: inner shapes (${c}) and (${l}) of Tensors with shapes ${n.shape} and ${s.shape} and transposeA=${a} and transposeB=${i} must match.`);let S=a?[g,c,m]:[g,m,c],k=i?[x,d,l]:[x,l,d],_=zt({inputs:{x:n},backend:t,attrs:{shape:S}}),$=zt({inputs:{x:s},backend:t,attrs:{shape:k}}),R=t.dataIdMap.get(_.dataId).id,D=t.dataIdMap.get($.dataId).id,P=a?_.shape[2]:_.shape[1],O=i?$.shape[1]:$.shape[2],M=Math.max(g,x),L=t.makeOutput([M,P,O],_.dtype),B=t.dataIdMap.get(L.dataId).id,z=new Uint8Array(new Int32Array(_.shape).buffer),U=new Uint8Array(new Int32Array($.shape).buffer);return ZP(R,z,_.shape.length,D,U,$.shape.length,a,i,B),t.disposeData(_.dataId),t.disposeData($.dataId),L.shape=C,L}var JP={kernelName:Zo,backendName:"wasm",setupFunc:Hre,kernelFunc:Kre};function Po(r){let{inputs:{x:e},attrs:{begin:t,size:o},backend:n}=r,[s,a]=pt.parseSliceParams(e,t,o),i=pt.isSliceContinous(e.shape,s,a),p=n.readSync(e.dataId),u=n.makeOutput(a,e.dtype),c=y.computeStrides(e.shape),l=n.dataIdMap.get(u.dataId);if(i){let f=pt.computeFlatOffset(s,c);return e.dtype==="string"?l.stringBytes=p.slice(f,f+y.sizeFromShape(a)):n.typedArrayFromHeap(u).set(p.subarray(f,f+y.sizeFromShape(a))),u}if(e.dtype==="string"){let f=pp(p,s,a,e.shape,e.dtype);return l.stringBytes=f,u}let m=n.typedArrayFromHeap(u),d=e.shape.length;if(d===2)qre(p,c[0],m,s,a);else if(d===3)jre(p,c[0],c[1],m,s,a);else if(d===4)Xre(p,c[0],c[1],c[2],m,s,a);else{let f=pp(p,s,a,e.shape,e.dtype);m.set(f)}return u}function qre(r,e,t,o,n){let s=0,a=o[0],i=o[1],p=a+n[0];for(let u=a;ux*b),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=zt({inputs:{x:n},backend:t,attrs:{shape:p}}),f=ho({inputs:{x:d},backend:t,attrs:{perm:u}}),h=zt({inputs:{x:f},backend:t,attrs:{shape:c}}),g=Po({inputs:{x:h},backend:t,attrs:{begin:l,size:m}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(h.dataId),g}var tO={kernelName:Js,backendName:"wasm",kernelFunc:Yre};var rO;function Qre(r){rO=r.wasm.cwrap(Jo,null,["number","number","boolean","number","number","number"])}function Zre(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a}=o,i=s.shape.reduce((l,m)=>l*m,1)!==0,p=n.shape.length===1?[a]:[n.shape[0],a],u=e.makeOutput(p,s.dtype);function c(l){return e.dataIdMap.get(l.dataId).id}return rO(c(n),a,i,c(s),we[s.dtype],c(u)),u}var oO={kernelName:Jo,backendName:"wasm",setupFunc:Qre,kernelFunc:Zre};var Jre=!0,nO=Ge(qa,Jre);function eoe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e,s=t.typedArrayFromHeap(o),a=t.typedArrayFromHeap(n),i=w.assertAndGetBroadcastShape(Array.from(s),Array.from(a));return t.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var sO={kernelName:ea,backendName:"wasm",kernelFunc:eoe};function Mr(r){let{inputs:{x:e},attrs:{dtype:t},backend:o}=r,n=o.makeOutput(e.shape,t),s=o.typedArrayFromHeap(e);return o.typedArrayFromHeap(n).set(s),n}var aO={kernelName:yo,backendName:"wasm",kernelFunc:Mr};var iO=he(en);var uO;function toe(r){uO=r.wasm.cwrap(bo,null,["number","number","number","number"])}function roe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i=t.dataIdMap.get(n.dataId).id,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(p.dataId).id;return uO(i,s,a,u),p}var pO={kernelName:bo,backendName:"wasm",setupFunc:toe,kernelFunc:roe};function Pv(r){let{inputs:e,backend:t}=r,o=y.parseAxisParam(r.attrs.axis,e[0].shape)[0],n=e.map(d=>d.shape);w.assertParamsConsistent(n,o);let s=w.computeOutShape(e.map(d=>d.shape),o),a=e.filter(d=>y.sizeFromShape(d.shape)>0);if(a.length===1)return Np({inputs:{x:a[0]},backend:t});let i=t.makeOutput(s,e[0].dtype);if(y.sizeFromShape(s)===0)return i;if(a[0].dtype==="string"){let d=a.map(C=>{let k=[-1,y.sizeFromShape(C.shape.slice(o))];return zt({inputs:{x:C},backend:t,attrs:{shape:k}})}),f=d.map(C=>({vals:t.readSync(C.dataId),shape:C.shape}));s=w.computeOutShape(d.map(C=>C.shape),1);let h=d[0].shape[0]===1,g=ap(f,s,e[0].dtype,h),x=w.computeOutShape(a.map(C=>C.shape),o);i.shape=x;let b=t.dataIdMap.get(i.dataId);return b.stringBytes=w.fromStringArrayToUint8(g),d.forEach(C=>t.disposeData(C.dataId)),i}let p=y.sizeFromShape(a[0].shape.slice(0,o)),u=0,c=a.map(d=>{let f=y.sizeFromShape(d.shape.slice(o));return u+=f,f}),l=a.map(d=>t.typedArrayFromHeap(d)),m=t.typedArrayFromHeap(i);for(let d=0;d`cumprod does not support ${n.dtype} tensors in the WASM backend`);let u=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumprod",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;kO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var NO={kernelName:un,backendName:"wasm",setupFunc:hoe,kernelFunc:goe};var TO;function xoe(r){TO=r.wasm.cwrap(pn,null,["number","number","number","number","number","number"])}function yoe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o,p=n.shape.length;y.assert(n.dtype==="float32"||n.dtype==="int32",()=>`cumsum does not support ${n.dtype} tensors in the WASM backend`);let u=w.getAxesPermutation([s],p),c=n;u!==null&&(c=ho({inputs:{x:n},attrs:{perm:u},backend:t}));let l=w.getInnerMostAxes(1,p)[0];w.assertAxesAreInnerMostDims("cumsum",[l],p);let m=t.makeOutput(c.shape,c.dtype),d=c.shape[l],f=t.dataIdMap.get(c.dataId).id,h=t.dataIdMap.get(m.dataId).id;TO(f,a?1:0,i?1:0,d,h,we[n.dtype]);let g=m;if(u!==null){let x=w.getUndoAxesPermutation(u);g=ho({inputs:{x:m},attrs:{perm:x},backend:t}),t.disposeData(c.dataId),t.disposeData(m.dataId)}return g}var _O={kernelName:pn,backendName:"wasm",setupFunc:xoe,kernelFunc:yoe};var EO;function boe(r){EO=r.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function Coe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,weights:s}=t,{size:a,binaryOutput:i}=o,p=s.shape.reduce((m,d)=>m*d,1)!==0,u=n.shape.length===1?[a]:[n.shape[0],a],c=e.makeOutput(u,s.dtype);function l(m){return e.dataIdMap.get(m.dataId).id}return EO(l(n),new Uint8Array(new Int32Array(n.shape).buffer),n.shape.length,a,p,l(s),we[s.dtype],i,l(c)),c}var $O={kernelName:ra,backendName:"wasm",setupFunc:boe,kernelFunc:Coe};var RO;function woe(r){RO=r.wasm.cwrap(ln,null,["number","number","number","array","number","array","array","number","number"])}function Soe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=e.makeOutput(f,"float32"),x=e.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),C=new Uint8Array(new Int32Array(f).buffer),S=new Uint8Array(new Int32Array(y.computeStrides(f)).buffer),k=e.dataIdMap.get(h.dataId).id;return RO(x,s,a==="NHWC"?1:0,b,n.shape.length-1,C,S,f.length,k),h}var DO={kernelName:ln,backendName:"wasm",setupFunc:woe,kernelFunc:Soe};var AO;function Ioe(r){AO=r.wasm.cwrap(mn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function voe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,a=o.dataIdMap.get(n.dataId).id,i=o.dataIdMap.get(s.dataId).id,{strides:p,dilations:u,pad:c,dimRoundingMode:l}=t,m=u==null?[1,1]:u,d=w.computeConv2DInfo(n.shape,s.shape,p,m,c,l,!0),f=d.filterHeight,h=d.filterWidth,g=d.padInfo.top,x=d.padInfo.right,b=d.padInfo.bottom,C=d.padInfo.left,S=d.dilationHeight,k=d.dilationWidth,_=d.strideHeight,$=d.strideWidth,R=d.inChannels,D=d.outChannels,P=d.padInfo.type==="SAME"?1:0;if(d.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let O=o.makeOutput(d.outShape,"float32"),M=o.dataIdMap.get(O.dataId).id;return AO(a,n.shape[0],n.shape[1],n.shape[2],i,f,h,g,x,b,C,P,S,k,_,$,R,D,M),O}var FO={kernelName:mn,backendName:"wasm",setupFunc:Ioe,kernelFunc:voe};var PO;function koe(r){PO=r.wasm.cwrap("Diag",null,["number","number","number","number"])}function Noe(r){let{inputs:e,backend:t}=r,{x:o}=e,n=y.sizeFromShape(o.shape),s=t.makeOutput([...o.shape,...o.shape],o.dtype);return PO(t.dataIdMap.get(o.dataId).id,we[o.dtype],n,t.dataIdMap.get(s.dataId).id),s}var OO={kernelName:oa,backendName:"wasm",setupFunc:koe,kernelFunc:Noe};var MO;function Toe(r){MO=r.wasm.cwrap(dn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o;if(n.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${n.dtype} and ${s.dtype}`);let u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c=t.makeOutput(u.outShape,n.dtype);return MO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(c.dataId).id,we[n.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),c}var LO={kernelName:dn,backendName:"wasm",setupFunc:Toe,kernelFunc:_oe};var BO;function Eoe(r){BO=r.wasm.cwrap(Li,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function $oe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=t.makeOutput(s.shape,s.dtype);return BO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var zO={kernelName:Li,backendName:"wasm",setupFunc:Eoe,kernelFunc:$oe};var VO;function Roe(r){VO=r.wasm.cwrap(Mi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Doe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o;if(n.dtype!==s.dtype||n.dtype!==a.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${n.dtype}, ${s.dtype}, and ${a.dtype}`);let c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=t.makeOutput(n.shape,n.dtype);return VO(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,we[n.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var WO={kernelName:Mi,backendName:"wasm",setupFunc:Roe,kernelFunc:Doe};var UO=he(hn);var GO;function Aoe(r){GO=r.wasm.cwrap(Xa,null,["number","number","number"])}function Foe(r){let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=t.makeOutput(n.shape,"float32"),a=i=>t.dataIdMap.get(i.dataId).id;return GO(a(n),a(o),a(s)),s}var HO={kernelName:Xa,backendName:"wasm",setupFunc:Aoe,kernelFunc:Foe};var Poe=!1,KO=Ge(xn,Poe,"bool");var qO=he(gn);var jO=he(yn,"float32");function Lg(r){let{inputs:e,attrs:t,backend:o}=r,{input:n}=e,{dim:s}=t,a=n.shape.length,i=n.shape.slice(),p=s;return s<0&&(y.assert(-(a+1)<=s,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+s+1),i.splice(p,0,1),zt({inputs:{x:n},backend:o,attrs:{shape:i}})}var XO={kernelName:na,backendName:"wasm",kernelFunc:Lg};var YO=he(bn,"float32");function Mv(r){let{attrs:{shape:e,value:t},backend:o}=r,{attrs:{dtype:n}}=r;n=n||y.inferDtype(t);let s=o.makeOutput(e,n);return o.typedArrayFromHeap(s).fill(t),s}var QO={kernelName:sa,backendName:"wasm",kernelFunc:Mv};var ZO;function Ooe(r){ZO=r.wasm.cwrap(Cn,null,["number","number","number","number","number","number"])}function Moe(r){let{inputs:e,backend:t}=r,{image:o}=e,n=t.makeOutput(o.shape,o.dtype),s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,[i,p,u,c]=o.shape;return ZO(s,i,p,u,c,a),n}var JO={kernelName:Cn,backendName:"wasm",kernelFunc:Moe,setupFunc:Ooe};var eM=he(wn);var Loe=!1,tM=Ge(Sn,Loe);var rM;function Boe(r){rM=r.wasm.cwrap(In,null,["number","number","number","number","number","number","number"])}function zoe(r){let{backend:e,inputs:t,attrs:o}=r,{varianceEpsilon:n}=o,{x:s,mean:a,variance:i,offset:p,scale:u}=t,c=e.dataIdMap.get(s.dataId).id,l=e.dataIdMap.get(a.dataId).id,m=e.dataIdMap.get(i.dataId).id,d=p!=null?e.dataIdMap.get(p.dataId).id:0,f=u!=null?e.dataIdMap.get(u.dataId).id:0,h=e.makeOutput(s.shape,s.dtype);if(y.sizeFromShape(s.shape)===0)return h;let g=e.dataIdMap.get(h.dataId).id;return rM(c,l,m,d,f,n,g),h}var oM={kernelName:In,backendName:"wasm",setupFunc:Boe,kernelFunc:zoe};var nM;function Voe(r){nM=r.wasm.cwrap(Io,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 Woe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m),g=wu[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return nM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var sM={kernelName:Io,backendName:"wasm",setupFunc:Voe,kernelFunc:Woe};var aM;function Uoe(r){aM=r.wasm.cwrap(vo,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 Goe(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dataFormat:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=t,h=w.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!0),g=wu[d];if(g==null)throw new Error(`${d} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let x=o.dataIdMap.get(n.dataId).id,b=o.dataIdMap.get(s.dataId).id,C=h.outChannels,S=0;if(a!=null){let ee=o.dataIdMap.get(a.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==C)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${C})`);S=ee.id}let k=h.filterHeight,_=h.filterWidth,$=h.padInfo.top,R=h.padInfo.right,D=h.padInfo.bottom,P=h.padInfo.left,O=h.dilationHeight,M=h.dilationWidth,L=h.strideHeight,B=h.strideWidth,z=h.inChannels,U=h.padInfo.type==="SAME"?1:0,j=h.batchSize,q=h.inHeight,Y=h.inWidth;if(l!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${l}'. Please use 'NHWC'.`);let J=o.makeOutput(h.outShape,"float32"),re=o.dataIdMap.get(J.dataId).id,ne=i==null?0:o.dataIdMap.get(i.dataId).id;return aM(x,j,q,Y,b,k,_,S,$,R,D,P,U,O,M,L,B,z,C,g,ne,f||0,re),J}var iM={kernelName:vo,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe};var uM;function Hoe(r){uM=r.wasm.cwrap(vn,null,["number","number","number","number","number","number","array","number"])}function Koe(r){let{backend:e,inputs:t}=r,{params:o,indices:n}=t,[s,a,i,p]=af.prepareAndValidate(o,n),u=e.makeOutput(s,o.dtype);if(a===0)return u;let c=n.shape,l=c[c.length-1],d=e.dataIdMap.get(o.dataId).id,h=e.dataIdMap.get(n.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),x=e.dataIdMap.get(u.dataId).id;return uM(d,we[o.dtype],h,a,l,i,g,x),u}var pM={kernelName:vn,backendName:"wasm",setupFunc:Hoe,kernelFunc:Koe};var cM;function qoe(r){cM=r.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function joe(r){let{backend:e,inputs:t,attrs:o}=r,{x:n,indices:s}=t,{axis:a,batchDims:i}=o,p=y.parseAxisParam(a,n.shape)[0],u=e.readSync(s.dataId),c=n.shape[p];for(let D=0;D=0,()=>`GatherV2: the index value ${P} is not in [0, ${c-1}]`)}let l=w.segment_util.collectGatherOpShapeInfo(n,s,p,i),m=zt({inputs:{x:n},attrs:{shape:[l.batchSize,l.outerSize,l.dimSize,l.sliceSize]},backend:e}),d=y.sizeFromShape(s.shape),f=zt({inputs:{x:s},attrs:{shape:[l.batchSize,d/l.batchSize]},backend:e}),h=[l.batchSize,l.outerSize,d/l.batchSize,l.sliceSize],g=e.makeOutput(h,n.dtype);if(y.sizeFromShape(n.shape)===0)return g;let x=m.shape.length-1,C=e.dataIdMap.get(m.dataId).id,k=e.dataIdMap.get(f.dataId).id,_=e.dataIdMap.get(g.dataId).id,$=new Uint8Array(new Int32Array(y.computeStrides(m.shape)).buffer),R=new Uint8Array(new Int32Array(y.computeStrides(h)).buffer);return cM(C,we[n.dtype],$,x,k,l.batchSize,R,_),e.disposeData(m.dataId),e.disposeData(f.dataId),g.shape=l.outputShape,g}var lM={kernelName:aa,backendName:"wasm",setupFunc:qoe,kernelFunc:joe};var Xoe=!1,mM=Ge(kn,Xoe,"bool");var Yoe=!1,dM=Ge(Nn,Yoe,"bool");var fM=he(Tn,"bool");var hM=he(_n,"bool");var gM=he(En,"bool");var xM;function Qoe(r){xM=r.wasm.cwrap($n,null,["number","number","number","number"])}function Zoe(r){let{inputs:{x:e},attrs:{alpha:t},backend:o}=r,n=o.dataIdMap.get(e.dataId).id,s=o.makeOutput(e.shape,"float32");if(y.sizeFromShape(e.shape)!==0){let a=o.dataIdMap.get(s.dataId).id;xM(n,we[e.dtype],t,a)}return s}var yM={kernelName:$n,backendName:"wasm",setupFunc:Qoe,kernelFunc:Zoe};var Joe=!1,bM=Ge(Rn,Joe,"bool");var ene=!1,CM=Ge(Dn,ene,"bool");var wM;function tne(r){wM=r.wasm.cwrap(An,null,["number","number","number","number"])}function rne(r){let{attrs:e,backend:t}=r,{start:o,stop:n,num:s}=e,a=Math.floor(s),i=t.makeOutput([a],"float32");return wM(t.dataIdMap.get(i.dataId).id,o,n,a),i}var SM={kernelName:An,backendName:"wasm",setupFunc:tne,kernelFunc:rne};var IM=he(Fn);var vM=he(Pn);var one=!1,kM=Ge(On,one,"bool");var NM=he(Mn);var nne=!1,TM=Ge(Ln,nne,"bool");var sne=!1,_M=Ge(R0,sne,"bool");var EM;function ane(r){EM=r.wasm.cwrap(Bn,null,["number","number","number","number","number","number","number"])}function ine(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o;if(n.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let u=t.makeOutput(n.shape,n.dtype);return EM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(u.dataId).id,n.shape[3],s,a,i,p),u}var $M={kernelName:Bn,backendName:"wasm",setupFunc:ane,kernelFunc:ine};var RM;function une(r){RM=r.wasm.cwrap(Ya,null,["number","number","number","number","number","number","number","number","number"])}function pne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o;if(n.dtype!=="float32"||s.dtype!=="float32"||a.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let l=t.makeOutput(n.shape,n.dtype);return RM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(a.dataId).id,t.dataIdMap.get(l.dataId).id,a.shape[3],i,p,u,c),l}var DM={kernelName:Ya,backendName:"wasm",setupFunc:une,kernelFunc:pne};var AM;function cne(r){AM=r.wasm.cwrap(zn,null,["number","number","number","number"])}function lne(r){let{backend:e,inputs:t,attrs:o}=r,{reductionIndices:n,keepDims:s}=o,{x:a}=t,p=e.dataIdMap.get(a.dataId).id,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;u=c,p=C}let f=u.shape.length;w.assertAxesAreInnerMostDims("max",l,f);let[h,g]=w.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,a.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;AM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var FM={kernelName:zn,backendName:"wasm",setupFunc:cne,kernelFunc:lne};var mne=!1,PM=Ge(Vn,mne);var OM;function dne(r){OM=r.wasm.cwrap(Wn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function fne(r){let{inputs:e,attrs:t,backend:o}=r,n=e.x,s=o.dataIdMap.get(n.dataId).id;y.assert(n.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${n.dtype}.`);let{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=t,c=w.computePool2DInfo(n.shape,a,i,1,p,u),l=c.filterHeight,m=c.filterWidth,d=c.padInfo.top,f=c.padInfo.right,h=c.padInfo.bottom,g=c.padInfo.left,x=c.dilationHeight,b=c.dilationWidth,C=c.strideHeight,S=c.strideWidth,k=c.inChannels,_=c.outChannels;if(c.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let $=o.makeOutput(c.outShape,"float32"),R=o.dataIdMap.get($.dataId).id;return OM(s,n.shape[0],n.shape[1],n.shape[2],l,m,d,f,h,g,x,b,C,S,k,_,R),$}var MM={kernelName:Wn,backendName:"wasm",setupFunc:dne,kernelFunc:fne};var LM;function hne(r){LM=r.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function gne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p,dataFormat:u}=o,c=w.computePool3DInfo(n.shape,s,a,1,i,p,u),l=t.makeOutput(c.outShape,n.dtype);return LM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var BM={kernelName:ia,backendName:"wasm",setupFunc:hne,kernelFunc:gne};var zM;function xne(r){zM=r.wasm.cwrap("MaxPool3DGrad",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 yne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool3DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return zM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inDepth,c.inHeight,c.inWidth,c.outDepth,c.outHeight,c.outWidth,c.strideDepth,c.strideHeight,c.strideWidth,c.dilationDepth,c.dilationHeight,c.dilationWidth,c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.front,c.padInfo.top,c.padInfo.left),l}var VM={kernelName:Gi,backendName:"wasm",setupFunc:xne,kernelFunc:yne};var WM;function bne(r){WM=r.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Cne(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,{filterSize:a,strides:i,pad:p,dimRoundingMode:u}=o,c=w.computePool2DInfo(s.shape,a,i,1,p,u),l=t.makeOutput(s.shape,s.dtype);return WM(t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),l}var UM={kernelName:Ui,backendName:"wasm",setupFunc:bne,kernelFunc:Cne};var GM;function wne(r){GM=r.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Sne(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,includeBatchInIndex:p}=o;y.assert(n.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${n.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let c=w.computePool2DInfo(n.shape,s,a,[1,1],i),l=t.makeOutput(c.outShape,n.dtype),m=t.makeOutput(c.outShape,"int32");return GM(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(l.dataId).id,t.dataIdMap.get(m.dataId).id,we[n.dtype],p,c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.effectiveFilterHeight,c.effectiveFilterWidth,c.padInfo.top,c.padInfo.left),[l,m]}var HM={kernelName:ua,backendName:"wasm",setupFunc:wne,kernelFunc:Sne};var KM;function Ine(r){KM=r.wasm.cwrap(Un,null,["number, number, number"])}function vne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let S=e.dataIdMap.get(c.dataId).id;S!==i&&(u=c,p=S,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=Mr({backend:e,inputs:{x:u},attrs:{dtype:"float32"}}),p=e.dataIdMap.get(b.dataId).id);let C=e.makeOutput(h,"float32");if(y.sizeFromShape(u.shape)!==0){let S=e.dataIdMap.get(C.dataId).id;KM(p,x,S)}if(d&&e.disposeData(c.dataId),s){let S=w.expandShapeToKeepDim(C.shape,m);C.shape=S}return u.dtype!=="float32"&&e.disposeData(b.dataId),C}var qM={kernelName:Un,backendName:"wasm",setupFunc:Ine,kernelFunc:vne};var jM;function kne(r){jM=r.wasm.cwrap(Gn,null,["number","number","number","number"])}function Nne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e);if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C)}let f=u.shape.length;w.assertAxesAreInnerMostDims("min",l,f);let[h,g]=w.computeOutAndReduceShapes(u.shape,l),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;jM(p,we[a.dtype],x,C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var XM={kernelName:Gn,backendName:"wasm",setupFunc:kne,kernelFunc:Nne};var Tne=!1,YM=Ge(Hn,Tne);var Lv;(function(r){r[r.reflect=0]="reflect",r[r.symmetric=1]="symmetric"})(Lv||(Lv={}));var QM;function _ne(r){QM=r.wasm.cwrap(Kn,null,["number","array","number","number","array","array","number","number"])}function Ene(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,mode:n}}=r,s=o.map((f,h)=>f[0]+e.shape[h]+f[1]),a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),p=t.dataIdMap.get(i.dataId).id,u=new Uint8Array(new Int32Array(e.shape).buffer),c=o.map(f=>f[0]),l=o.map(f=>f[1]),m=new Uint8Array(new Int32Array(c).buffer),d=new Uint8Array(new Int32Array(l).buffer);return QM(a,u,e.shape.length,we[e.dtype],m,d,Lv[n],p),i}var ZM={kernelName:Kn,backendName:"wasm",kernelFunc:Ene,setupFunc:_ne};var JM;function $ne(r){JM=r.wasm.cwrap(Is,null,["number","number","number","number"])}function Bv(r){let{backend:e,inputs:{logits:t},attrs:{dim:o}}=r,n=e.dataIdMap.get(t.dataId).id,s=e.makeOutput(t.shape,t.dtype),a=e.dataIdMap.get(s.dataId).id,i=t.shape[o],p=y.sizeFromShape(t.shape)/i;return y.sizeFromShape(s.shape)===0||JM(n,a,i,p),s}var eL={kernelName:Is,backendName:"wasm",setupFunc:$ne,kernelFunc:Bv};var tL;function Rne(r){tL=r.wasm.cwrap(jn,null,["number","number","number","number","number","number"])}function Dne(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o;if(n.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${n.dtype}`);let p=i?n:Bv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),[u,c]=p.shape,l=t.makeOutput([u,s],"int32");return tL(t.dataIdMap.get(p.dataId).id,u,c,s,a,t.dataIdMap.get(l.dataId).id),i||t.disposeData(p.dataId),l}var rL={kernelName:jn,backendName:"wasm",setupFunc:Rne,kernelFunc:Dne};var oL=Ge(qn,!0);var Ane=!0,nL=Ge(Xn,Ane);var sL=he(pa);function qc(r,e){let t=new Int32Array(r.wasm.HEAPU8.buffer,e,4),o=t[0],n=t[1],s=t[2],a=t[3];return r.wasm._free(e),{pSelectedIndices:o,selectedSize:n,pSelectedScores:s,pValidOutputs:a}}var aL;function Fne(r){aL=r.wasm.cwrap(Qn,"number",["number","number","number","number","number"])}function Pne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a}=o,{boxes:i,scores:p}=t,u=e.dataIdMap.get(i.dataId).id,c=e.dataIdMap.get(p.dataId).id,l=aL(u,c,s,n,a),{pSelectedIndices:m,selectedSize:d,pSelectedScores:f,pValidOutputs:h}=qc(e,l);return e.wasm._free(f),e.wasm._free(h),e.makeOutput([d],"int32",m)}var iL={kernelName:Qn,backendName:"wasm",setupFunc:Fne,kernelFunc:Pne};var uL;function One(r){uL=r.wasm.cwrap(Qa,"number",["number","number","number","number","number","bool"])}function Mne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,padToMaxOutputSize:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=uL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(h);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([],"int32",g);return[x,b]}var pL={kernelName:Qa,backendName:"wasm",setupFunc:One,kernelFunc:Mne};var cL;function Lne(r){cL=r.wasm.cwrap(Zn,"number",["number","number","number","number","number","number"])}function Bne(r){let{backend:e,inputs:t,attrs:o}=r,{iouThreshold:n,maxOutputSize:s,scoreThreshold:a,softNmsSigma:i}=o,{boxes:p,scores:u}=t,c=e.dataIdMap.get(p.dataId).id,l=e.dataIdMap.get(u.dataId).id,m=cL(c,l,s,n,a,i),{pSelectedIndices:d,selectedSize:f,pSelectedScores:h,pValidOutputs:g}=qc(e,m);e.wasm._free(g);let x=e.makeOutput([f],"int32",d),b=e.makeOutput([f],"float32",h);return[x,b]}var lL={kernelName:Zn,backendName:"wasm",setupFunc:Lne,kernelFunc:Bne};var zne=!1,mL=Ge(Yn,zne,"bool");var dL;function Vne(r){dL=r.wasm.cwrap(Jn,null,["number","number","number","number","number"])}function Wne(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=t.makeOutput([...n.shape,a],s),c=t.dataIdMap.get(u.dataId).id,m=t.dataIdMap.get(n.dataId).id;return dL(m,a,i,p,c),u}var fL={kernelName:Jn,backendName:"wasm",setupFunc:Vne,kernelFunc:Wne};function Une(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(1),o}var hL={kernelName:ca,backendName:"wasm",kernelFunc:Une};function Gne(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Lg({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Lg({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=Pv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var gL={kernelName:la,backendName:"wasm",kernelFunc:Gne};var xL;function Hne(r){xL=r.wasm.cwrap(es,null,["number","array","number","number","array","array","number","number"])}function Kne(r){let{inputs:{x:e},backend:t,attrs:{paddings:o,constantValue:n}}=r,s=o.map((h,g)=>h[0]+e.shape[g]+h[1]);if(y.sizeFromShape(e.shape)===0)return Mv({backend:t,attrs:{shape:s,value:n,dtype:e.dtype}});let a=t.dataIdMap.get(e.dataId).id,i=t.makeOutput(s,e.dtype),u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(e.shape).buffer),l=o.map(h=>h[0]),m=o.map(h=>h[1]),d=new Uint8Array(new Int32Array(l).buffer),f=new Uint8Array(new Int32Array(m).buffer);return xL(a,c,e.shape.length,we[e.dtype],d,f,n,u),i}var Bg={kernelName:es,backendName:"wasm",kernelFunc:Kne,setupFunc:Hne};var qne=!1,yL=Ge(ts,qne);var bL;function jne(r){bL=r.wasm.cwrap(rs,null,["number","number","number"])}function Xne(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=t.dataIdMap.get(o.dataId).id,a=t.dataIdMap.get(n.dataId).id,i=s,p=o,u=p;p.dtype!=="float32"&&(u=Mr({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),i=t.dataIdMap.get(u.dataId).id);let c=t.makeOutput(o.shape,"float32"),l=t.dataIdMap.get(c.dataId).id;return bL(i,a,l),p.dtype!=="float32"&&t.disposeData(u.dataId),c}var CL={kernelName:rs,backendName:"wasm",setupFunc:jne,kernelFunc:Xne};var wL;function Yne(r){wL=r.wasm.cwrap(os,null,["number","number","number","number"])}function Qne(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;wL(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var SL={kernelName:os,backendName:"wasm",setupFunc:Yne,kernelFunc:Qne};var Zne=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=up(o,n,s,a),p=e.makeOutput([i.length],a);return e.typedArrayFromHeap(p).set(i),p},IL={kernelName:ma,backendName:"wasm",kernelFunc:Zne};var Jne=!0,vL=Ge(fn,Jne);var kL=he(ns);var NL=he(ss);var TL=he(us);var _L;function ese(r){_L=r.wasm.cwrap(is,null,["number","number","number","number","number","number","number","number","number","number"])}function tse(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.dataIdMap.get(n.dataId),g;h.dtype!=="float32"&&(g=Mr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),h=e.dataIdMap.get(g.dataId));let x=h.id,b=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return b;let C=e.dataIdMap.get(b.dataId).id;return _L(x,c,l,m,d,p,u,s?1:0,a?1:0,C),g!=null&&e.disposeData(g.dataId),b}var EL={kernelName:is,backendName:"wasm",setupFunc:ese,kernelFunc:tse};var $L;function rse(r){$L=r.wasm.cwrap(Ja,null,["number","number","number","array","array","boolean"])}function ose(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),$L(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var RL={kernelName:Ja,backendName:"wasm",setupFunc:rse,kernelFunc:ose};var DL;function nse(r){DL=r.wasm.cwrap(as,null,["number","number","number","number","number","number","number","number","number","number"])}function sse(r){let{backend:e,inputs:t,attrs:o}=r,{images:n}=t,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,[c,l,m,d]=n.shape,f=[c,p,u,d],h=e.makeOutput(f,"float32");if(y.sizeFromShape(n.shape)===0)return h;let g=e.dataIdMap.get(n.dataId),x;g.dtype!=="float32"&&(x=Mr({backend:e,inputs:{x:n},attrs:{dtype:"float32"}}),g=e.dataIdMap.get(x.dataId));let b=g.id,C=e.dataIdMap.get(h.dataId).id;return DL(b,c,l,m,d,p,u,s?1:0,a?1:0,C),x!=null&&e.disposeData(x.dataId),h}var AL={kernelName:as,backendName:"wasm",setupFunc:nse,kernelFunc:sse};var FL;function ase(r){FL=r.wasm.cwrap(Za,null,["number","number","number","array","array","boolean"])}function ise(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,i=t.makeOutput(n.shape,"float32"),p=t.dataIdMap.get(n.dataId),u;return p.dtype!=="float32"&&(u=Mr({backend:t,inputs:{x:n},attrs:{dtype:"float32"}}),p=t.dataIdMap.get(u.dataId)),FL(t.dataIdMap.get(n.dataId).id,t.dataIdMap.get(s.dataId).id,t.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(n.shape).buffer),new Uint8Array(new Int32Array(s.shape).buffer),a),u!=null&&t.disposeData(u.dataId),i}var PL={kernelName:Za,backendName:"wasm",setupFunc:ase,kernelFunc:ise};var OL;function use(r){OL=r.wasm.cwrap(ps,null,["number","array","number","array","number","number"])}function pse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=y.parseAxisParam(s,n.shape);if(n.shape.length===0)return Np({inputs:{x:n},backend:t});let i=t.makeOutput(n.shape,n.dtype),p=t.dataIdMap.get(n.dataId).id,u=t.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(a).buffer),l=new Uint8Array(new Int32Array(n.shape).buffer);OL(p,c,a.length,l,n.shape.length,u);let m=zt({inputs:{x:i},attrs:{shape:n.shape},backend:t});return t.disposeData(i.dataId),m}var ML={kernelName:ps,backendName:"wasm",kernelFunc:pse,setupFunc:use};var LL;function cse(r){LL=r.wasm.cwrap(Ds,null,["number","number","number","number","number","number","number","number","array","number","number"])}function lse(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{radians:s,fillValue:a,center:i}=o,p=t.makeOutput(n.shape,n.dtype),u=t.dataIdMap.get(n.dataId).id,c=t.dataIdMap.get(p.dataId).id,[l,m,d,f]=n.shape,[h,g]=w.getImageCenter(i,m,d),x=a===0,b=255,C=typeof a=="number"?[a,a,a,x?0:b]:[...a,b],S=new Uint8Array(new Int32Array(C).buffer);return LL(u,l,m,d,f,s,h,g,S,C.length,c),p}var BL={kernelName:Ds,backendName:"wasm",kernelFunc:lse,setupFunc:cse};var zL=he(cs);var VL=he(ls);var WL;function mse(r){WL=r.wasm.cwrap(ms,null,["number","number","number","number","number","number","array","number","number"])}function dse(r){let{backend:e,inputs:t,attrs:o}=r,{indices:n,updates:s}=t,{shape:a}=o,i=e.makeOutput(a,s.dtype);if(y.sizeFromShape(a)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(s,n,a),f=e.dataIdMap.get(n.dataId).id,g=e.dataIdMap.get(s.dataId).id,x=new Uint8Array(new Int32Array(l).buffer),b=e.dataIdMap.get(i.dataId).id;return WL(f,g,we[s.dtype],p,u,c,x,m,b),i}var UL={kernelName:ms,backendName:"wasm",setupFunc:mse,kernelFunc:dse};var GL;function fse(r){GL=r.wasm.cwrap(fs,null,["number","number","number","number","number","number","bool","number"])}function hse(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o;if(n.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${n.dtype} and ${s.dtype}`);let i=t.makeOutput(s.shape,"int32");function p(u){return t.dataIdMap.get(u.dataId).id}return GL(p(n),p(s),n.shape[0],n.shape[1],s.shape[1],we[n.dtype],a==="left",p(i)),i}var HL={kernelName:fs,backendName:"wasm",setupFunc:fse,kernelFunc:hse};var KL;function gse(r){KL=r.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function xse(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=t.dataIdMap.get(o.dataId).id,i=t.dataIdMap.get(n.dataId).id,p=t.dataIdMap.get(s.dataId).id,u=t.makeOutput(n.shape,n.dtype),c=t.dataIdMap.get(u.dataId).id,l=o.shape.length,m=n.shape.length,d=l===0||l>1||m===1?1:y.sizeFromShape(n.shape.slice(1));return KL(a,i,p,d,c),u}var qL={kernelName:fa,backendName:"wasm",kernelFunc:xse,setupFunc:gse};var jL=he(hs);var XL;function yse(r){XL=r.wasm.cwrap(bs,null,["number","number"])}function bse(r){let{backend:e,inputs:{x:t}}=r,o=e.dataIdMap.get(t.dataId).id,n=e.makeOutput(t.shape,t.dtype),s=e.dataIdMap.get(n.dataId).id;return y.sizeFromShape(n.shape)===0||XL(o,s),n}var YL={kernelName:"Sigmoid",backendName:"wasm",setupFunc:yse,kernelFunc:bse};var QL=he(ys);var ZL=he(gs);var JL=he(xs);var eB=he(Cs);function Cse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o,i=y.sizeFromShape(s),p=[[0,0]];p.push(...a);for(let _=1+s.length;_0?p+1:0;if(l<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let c=n.shape.slice();c[0]=l;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(c,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],"int32"),b=t.dataIdMap.get(x.dataId).id;HB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let w=t.readSync(x.dataId),S;switch(w[0]){case 0:{S=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(w[1],w[2]);break;case 3:S=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(w[1],w[2],w[3]);break;default:S=""}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function Gae(r){return Zg(r,!0)}var KB={kernelName:va,backendName:"wasm",setupFunc:Qg,kernelFunc:Gae};function Hae(r){return Zg(r,!1)}var qB={kernelName:ka,backendName:"wasm",setupFunc:Qg,kernelFunc:Hae};var jB;function Kae(r){jB=r.wasm.cwrap(Ps,null,["number","number","number","number","number","number","number","number","array","number","number"])}function qae(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:l,sliceSize:c,strides:m,outputSize:d}=C.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return jB(f,h,s.shape.length,g,we[a.dtype],u,l,c,x,d,b),p}var XB={kernelName:Ps,backendName:"wasm",setupFunc:Kae,kernelFunc:qae};function jae(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),l=n.shape.slice();return p.map(c=>{let m=[...l];m[i]=c;let d=an({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=c,d})}var YB={kernelName:Ia,backendName:"wasm",kernelFunc:jae};var QB=he(Fo);var ZB=he(tu);var Xae=!0,JB=He(Po,Xae);var ez;function Yae(r){ez=r.wasm.cwrap(Ko,null,["number","number","number","number"])}function Qae(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return ez(a,n,we[s.dtype],p),i}var tz={kernelName:Ko,backendName:"wasm",setupFunc:Yae,kernelFunc:Qae};var rz;function Zae(r){rz=r.wasm.cwrap(Os,null,["number","array","number","array","array","array","array","array","number","number"])}function Jae(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=Wt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=an({inputs:{x:n},backend:e,attrs:{begin:b,size:T}});k=Wt({inputs:{x:E},backend:e,attrs:{shape:f}}),e.disposeData(E.dataId)}else{let T=e.makeOutput(d,"float32"),E=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),F=new Uint8Array(new Int32Array(w).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(T.dataId).id;rz(E,R,n.shape.length,D,F,O,M,L,d.length,B),k=Wt({inputs:{x:T},backend:e,attrs:{shape:f}}),e.disposeData(T.dataId)}return k}var oz={kernelName:Os,backendName:"wasm",setupFunc:Zae,kernelFunc:Jae};function eie(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:l,preserveShortSequences:c}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=gp(m,d,a,i,p,u,l,c),g=e.makeOutput([f.length],"string"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,"int32");return e.typedArrayFromHeap(b).set(h),[g,b]}var nz={kernelName:Na,backendName:"wasm",kernelFunc:eie};function tie(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,l,c]=xp(i,p[0],a),m=l.length,d=e.makeOutput([m,2],"int32");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],"string"),g=e.dataIdMap.get(h.dataId);g.stringBytes=l;let x=e.makeOutput([2],"int32");return e.typedArrayFromHeap(x).set(c),[d,h,x]}var sz={kernelName:ru,backendName:"wasm",kernelFunc:tie};function rie(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=yp(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var az={kernelName:ou,backendName:"wasm",kernelFunc:rie};var oie=!0,iz=He(Oo,oie);var uz;function nie(r){uz=r.wasm.cwrap(As,null,["number","number","number","number"])}function sie(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:l,axes:c,originalAxes:m,inputWasTransposed:d}=$r(a,n,e),f=c;if(d){let w=e.dataIdMap.get(l.dataId).id;w!==i&&(u=l,p=w,f=C.getInnerMostAxes(f.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[h,g]=C.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let w=e.dataIdMap.get(b.dataId).id;uz(p,x,we[b.dtype],w)}if(d&&e.disposeData(l.dataId),s){let w=C.expandShapeToKeepDim(b.shape,m);b.shape=w}return b}var pz={kernelName:As,backendName:"wasm",setupFunc:nie,kernelFunc:sie};var lz=he(Ms);var cz=he(Ls);var mz;function aie(r){mz=r.wasm.cwrap(ks,null,["number","number","number","number","number","number","array","number","number","number"])}function iie(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=Cu.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,w=new Uint8Array(new Int32Array(c).buffer),S=e.dataIdMap.get(i.dataId).id;return mz(f,g,we[a.dtype],p,u,l,w,m,S,b),i}var dz={kernelName:ks,backendName:"wasm",setupFunc:aie,kernelFunc:iie};var fz;function uie(r){fz=r.wasm.cwrap(Mo,null,["number","array","number","array","number","number"])}function pie(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),l=e.dataIdMap.get(u.dataId).id,c=e.makeOutput(p,"int32"),m=e.dataIdMap.get(c.dataId).id;return gz(a,i,o.shape.length,we[o.dtype],n,s,l,m),[u,c]},xz={kernelName:Bs,backendName:"wasm",setupFunc:lie,kernelFunc:cie};var yz;function mie(r){yz=r.wasm.cwrap(zs,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function die(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),w=e.makeOutput(g,n.dtype),S=e.dataIdMap.get(w.dataId).id,T=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a==="nearest"?1:2,F;switch(i){case"constant":F=1;break;case"reflect":F=2;break;case"wrap":F=3;break;case"nearest":F=4;break;default:F=1;break}return yz(T,R,s.shape[0]>1,l,f,h,d,m,c,x,n.shape.length-1,b,g.length-1,D,F,p,S),w}var bz={kernelName:zs,backendName:"wasm",setupFunc:mie,kernelFunc:die};function fie(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=bp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],"int32",void 0,p)]}var Cz={kernelName:nu,backendName:"wasm",kernelFunc:fie};function hie(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var wz={kernelName:Ta,backendName:"wasm",kernelFunc:hie};function gie(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var Sz={kernelName:_a,backendName:"wasm",kernelFunc:gie};var xie=[iO,uO,pO,lO,cO,dO,yO,CO,wO,SO,IO,vO,kO,NO,TO,EO,PO,RO,AO,LO,zO,WO,UO,GO,HO,KO,jO,XO,QO,JO,tM,oM,sM,aM,iM,pM,cM,dM,hM,xM,bM,wM,IM,kM,TM,_M,$M,RM,DM,AM,FM,PM,OM,LM,BM,zM,WM,GM,KM,jM,YM,QM,ZM,fO,JM,eL,tL,oL,nL,sL,iL,pL,uL,lL,cL,mL,dL,hL,xL,bL,CL,SL,vL,NL,_L,$L,DL,FL,PL,ML,VL,WL,UL,GL,KL,jL,YL,QL,JL,eB,tB,Yg,oB,sB,iB,uB,pB,lB,cB,mB,OO,fB,gB,yB,CB,SB,vB,kB,NB,_B,$B,DB,AB,PB,OB,MB,LB,BO,BL,BB,zB,WB,GB,KB,qB,XB,YB,QB,ZB,JB,tz,oz,nz,sz,az,iz,pz,lz,cz,dz,hz,xz,bz,gO,Cz,wz,Sz];for(let r of xie)li(r);var J0=A();J0.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return 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]))}catch(r){return!1}});J0.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(J0.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(r){return!1}});var iv=Kp(Nz()),Dz=Kp(_z()),uv=Kp(Ez());var $z=iv.default||iv,yie=uv.default||uv,gm=class extends mo{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(Fz),av=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new mn(this,cr())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let l=t;this.dataIdMap.set(e,{id:a,stringBytes:l,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p)>>>0;this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s==="string")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return Cie(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.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(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,s,a);case"int32":return new Int32Array(n,s,a);case"bool":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function bie(r){return(e,t)=>(y.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function Rz(r,e,t){if(tx!=null)return tx;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),fm!=null&&fm[o]!=null?fm[o]:t+o}async function Az(){let[r,e]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=Dz.wasmWorkerContents.replace(/\n/g,"\\n"),l=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(l)}return i.endsWith(".wasm")?Rz(r,e,dm!=null?dm:p):p+i},pv&&(n.instantiateWasm=bie(Rz(r,e,dm!=null?dm:"")));let s=!1;n.onAbort=()=>{if(s||hm)return;hm=!0,o({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"})};let a;e&&r&&tx==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+$z.toString()],{type:"text/javascript"}),a=$z(n)):a=yie(n),a.then(i=>{s=!0,hm=!1;let p=null;i.tfjs={init:i.cwrap("init",null,[]),initWithThreadsCount:i.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:i.cwrap("get_threads_count","number",[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",p,["number"]),dispose:i.cwrap("dispose",p,[])},t({wasm:i})}).catch(o)})}function Cie(r,e){switch(e){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var wie=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],tx=null,dm=null,fm={},hm=!1,pv=!1;function Sie(r,e=!1){if(zw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),hm)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");tx=r,pv=e}function Iie(r,e=!1){if(hm)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof r=="string")dm=r;else{fm=r;let t=wie.filter(o=>fm[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.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.`)}pv=e}var Fz=-1,av=-1;function vie(r){Fz=r}function kie(){if(av===-1)throw new Error("WASM backend not initialized.");return av}var Nie="4.17.0";var Tie=2;pu("wasm",async()=>{let{wasm:r}=await Az();return new gm(r)},Tie);var Wo=A();Wo.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);Wo.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);Wo.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);Wo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);Wo.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);Wo.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);Wo.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);Wo.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);Wo.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);Wo.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);Wo.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);Wo.registerFlag("WEBGPU_PRINT_SHADER",()=>"");Wo.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var rx=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}};var ox=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,o=!1,n=!0){let s,a=Pz(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=Pz(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Pz(r,e){return`${r}_${e}`}var nx=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=Mz(o),a=e*t*s,i=Oz(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=Oz(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=Mz(n),l=t*o*u;this.numBytesUsed-=l}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function Oz(r,e,t,o){return`${r}_${e}_${t}_${o}`}function Mz(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function Lz(r,e){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let t=r.length,o="xyzwuv",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var oo=(r,e,t)=>t==="int32"?`atomicAdd(${r}, bitcast(${e}));`:` + ${n.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let a=e.dataIdMap.get(o.dataId).id,i=e.dataIdMap.get(n.dataId).id,p=e.dataIdMap.get(s.dataId).id,u=o.shape[0],c=y.sizeFromShape(s.shape),l=e.makeOutput([u,c],o.dtype),m=e.dataIdMap.get(l.dataId).id,d=e.makeOutput([c],s.dtype),f=e.dataIdMap.get(d.dataId).id,h=e.makeOutput([3],"int32"),g=e.dataIdMap.get(h.dataId).id;nB(a,i,p,u,m,f,g);let x=e.readSync(h.dataId),b;switch(x[0]){case 0:{b=w.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(x[1],x[2]);break}case 1:{b=w.getSparseReshapeNegativeOutputDimErrorMessage(x[1],x[2]);break}case 2:b=w.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let C=Array.from(e.readSync(n.dataId)),S=Array.from(e.readSync(d.dataId));b=w.getSparseReshapeInputOutputMultipleErrorMessage(C,S);break}case 4:{let C=Array.from(e.readSync(n.dataId)),S=Array.from(e.readSync(d.dataId));b=w.getSparseReshapeInputOutputMismatchErrorMessage(C,S);break}default:b=""}if(e.disposeData(h.dataId),b)throw e.disposeData(l.dataId),e.disposeData(d.dataId),new Error(b);return[l,d]}var sB={kernelName:ei,backendName:"wasm",setupFunc:Ise,kernelFunc:vse};var aB;function zg(r){aB=r.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function Vg(r,e){let{backend:t,inputs:o}=r,{data:n,indices:s,segmentIds:a}=o,i=s.shape[0],p=t.readSync(a.dataId,i-1,i)[0],c=i>0?p+1:0;if(c<0)throw new Error(w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let l=n.shape.slice();l[0]=c;let m=t.dataIdMap.get(n.dataId).id,d=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(a.dataId).id,h=t.makeOutput(l,n.dtype),g=t.dataIdMap.get(h.dataId).id,x=t.makeOutput([4],"int32"),b=t.dataIdMap.get(x.dataId).id;aB(m,we[n.dtype],n.shape[0],d,f,g,b,e,0);let C=t.readSync(x.dataId),S;switch(C[0]){case 0:{S=w.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{S=w.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:S=w.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(C[1],C[2]);break;case 3:S=w.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(C[1],C[2],C[3]);break;default:S=""}if(t.disposeData(x.dataId),S)throw t.disposeData(h.dataId),new Error(S);return h}function kse(r){return Vg(r,!0)}var iB={kernelName:ya,backendName:"wasm",setupFunc:zg,kernelFunc:kse};function Nse(r){return Vg(r,!1)}var uB={kernelName:ba,backendName:"wasm",setupFunc:zg,kernelFunc:Nse};var pB;function Tse(r){pB=r.wasm.cwrap(vs,null,["number","number","number","number","number","number","number","number","array","number","number"])}function _se(r){let{backend:e,inputs:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=t,{outputShape:i}=o,p=e.makeOutput(i,a.dtype);if(y.sizeFromShape(i)===0)return p;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:m,outputSize:d}=w.calculateShapes(s,n,i),f=e.dataIdMap.get(n.dataId).id,h=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,x=new Uint8Array(new Int32Array(m).buffer),b=e.dataIdMap.get(p.dataId).id;return pB(f,h,s.shape.length,g,we[a.dtype],u,c,l,x,d,b),p}var cB={kernelName:vs,backendName:"wasm",setupFunc:Tse,kernelFunc:_se};function Ese(r){let{inputs:e,attrs:t,backend:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=t,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=new Array(n.shape.length).fill(0),c=n.shape.slice();return p.map(l=>{let m=[...c];m[i]=l;let d=Po({inputs:{x:n},attrs:{begin:u,size:m},backend:o});return u[i]+=l,d})}var lB={kernelName:xa,backendName:"wasm",kernelFunc:Ese};var mB=he(ws);var dB=he(qi);var $se=!0,fB=Ge(ks,$se);var hB;function Rse(r){hB=r.wasm.cwrap(wo,null,["number","number","number","number"])}function Dse(r){let{backend:e,inputs:t,attrs:o}=r,{alpha:n}=o,{x:s}=t,a=e.dataIdMap.get(s.dataId).id,i=e.makeOutput(s.shape,s.dtype),p=e.dataIdMap.get(i.dataId).id;return hB(a,n,we[s.dtype],p),i}var gB={kernelName:wo,backendName:"wasm",setupFunc:Rse,kernelFunc:Dse};var xB;function Ase(r){xB=r.wasm.cwrap(Ns,null,["number","array","number","array","array","array","array","array","number","number"])}function Fse(r){let{backend:e,inputs:t,attrs:o}=r,{x:n}=t,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=zt({inputs:{x:n},backend:e,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Po({inputs:{x:n},backend:e,attrs:{begin:b,size:_}});k=zt({inputs:{x:$},backend:e,attrs:{shape:f}}),e.disposeData($.dataId)}else{let _=e.makeOutput(d,"float32"),$=e.dataIdMap.get(n.dataId).id,R=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),D=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(C).buffer),O=new Uint8Array(new Int32Array(S).buffer),M=new Uint8Array(new Int32Array(d).buffer),L=new Uint8Array(new Int32Array(y.computeStrides(d)).buffer),B=e.dataIdMap.get(_.dataId).id;xB($,R,n.shape.length,D,P,O,M,L,d.length,B),k=zt({inputs:{x:_},backend:e,attrs:{shape:f}}),e.disposeData(_.dataId)}return k}var yB={kernelName:Ns,backendName:"wasm",setupFunc:Ase,kernelFunc:Fse};function Pse(r){let{backend:e,inputs:t,attrs:o}=r,{data:n,dataSplits:s}=t,{separator:a,nGramWidths:i,leftPad:p,rightPad:u,padWidth:c,preserveShortSequences:l}=o,m=e.readSync(n.dataId),d=e.readSync(s.dataId),[f,h]=cp(m,d,a,i,p,u,c,l),g=e.makeOutput([f.length],"string"),x=e.dataIdMap.get(g.dataId);x.stringBytes=f;let b=e.makeOutput(s.shape,"int32");return e.typedArrayFromHeap(b).set(h),[g,b]}var bB={kernelName:Ca,backendName:"wasm",kernelFunc:Pse};function Ose(r){let{backend:e,inputs:t,attrs:o}=r,{input:n,delimiter:s}=t,{skipEmpty:a}=o,i=e.readSync(n.dataId),p=e.readSync(s.dataId),[u,c,l]=lp(i,p[0],a),m=c.length,d=e.makeOutput([m,2],"int32");e.typedArrayFromHeap(d).set(u);let h=e.makeOutput([m],"string"),g=e.dataIdMap.get(h.dataId);g.stringBytes=c;let x=e.makeOutput([2],"int32");return e.typedArrayFromHeap(x).set(l),[d,h,x]}var CB={kernelName:ji,backendName:"wasm",kernelFunc:Ose};function Mse(r){let{backend:e,inputs:t,attrs:o}=r,{input:n}=t,{numBuckets:s}=o,a=e.readSync(n.dataId),i=mp(a,s),p=e.makeOutput(n.shape,"int32");return e.typedArrayFromHeap(p).set(i),p}var wB={kernelName:Xi,backendName:"wasm",kernelFunc:Mse};var Lse=!0,SB=Ge(Ts,Lse);var IB;function Bse(r){IB=r.wasm.cwrap(Ss,null,["number","number","number","number"])}function zse(r){let{backend:e,inputs:t,attrs:o}=r,{axis:n,keepDims:s}=o,{x:a}=t,i=e.dataIdMap.get(a.dataId).id,p=i,u=a,{transposed:c,axes:l,originalAxes:m,inputWasTransposed:d}=Tr(a,n,e),f=l;if(d){let C=e.dataIdMap.get(c.dataId).id;C!==i&&(u=c,p=C,f=w.getInnerMostAxes(f.length,u.shape.length))}w.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[h,g]=w.computeOutAndReduceShapes(u.shape,f),x=y.sizeFromShape(g),b=e.makeOutput(h,u.dtype);if(y.sizeFromShape(u.shape)!==0){let C=e.dataIdMap.get(b.dataId).id;IB(p,x,we[b.dtype],C)}if(d&&e.disposeData(c.dataId),s){let C=w.expandShapeToKeepDim(b.shape,m);b.shape=C}return b}var vB={kernelName:Ss,backendName:"wasm",setupFunc:Bse,kernelFunc:zse};var kB=he(_s);var NB=he(Es);var TB;function Vse(r){TB=r.wasm.cwrap(ds,null,["number","number","number","number","number","number","array","number","number","number"])}function Wse(r){let{backend:e,inputs:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=t,{}=o,i=e.makeOutput(n.shape,n.dtype);if(y.sizeFromShape(n.shape)===0)return i;let{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=du.calculateShapes(a,s,n.shape),f=e.dataIdMap.get(s.dataId).id,g=e.dataIdMap.get(a.dataId).id,b=e.dataIdMap.get(n.dataId).id,C=new Uint8Array(new Int32Array(l).buffer),S=e.dataIdMap.get(i.dataId).id;return TB(f,g,we[a.dtype],p,u,c,C,m,S,b),i}var _B={kernelName:ds,backendName:"wasm",setupFunc:Vse,kernelFunc:Wse};var EB;function Use(r){EB=r.wasm.cwrap(po,null,["number","array","number","array","number","number"])}function Gse(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,s=t.dataIdMap.get(n.dataId).id,{reps:a}=o,i=new Array(n.shape.length);for(let m=0;m{let{x:o}=r,{k:n,sorted:s}=t,a=e.dataIdMap.get(o.dataId).id,i=new Uint8Array(new Int32Array(o.shape).buffer),p=o.shape.slice();p[p.length-1]=n;let u=e.makeOutput(p,o.dtype),c=e.dataIdMap.get(u.dataId).id,l=e.makeOutput(p,"int32"),m=e.dataIdMap.get(l.dataId).id;return RB(a,i,o.shape.length,we[o.dtype],n,s,c,m),[u,l]},DB={kernelName:$s,backendName:"wasm",setupFunc:Hse,kernelFunc:Kse};var AB;function qse(r){AB=r.wasm.cwrap(Rs,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function jse(r){let{backend:e,inputs:t,attrs:o}=r,{image:n,transforms:s}=t,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new Uint8Array(new Int32Array(y.computeStrides(n.shape)).buffer),b=new Uint8Array(new Int32Array(y.computeStrides(g)).buffer),C=e.makeOutput(g,n.dtype),S=e.dataIdMap.get(C.dataId).id,_=e.dataIdMap.get(n.dataId).id,R=e.dataIdMap.get(s.dataId).id,D=a==="nearest"?1:2,P;switch(i){case"constant":P=1;break;case"reflect":P=2;break;case"wrap":P=3;break;case"nearest":P=4;break;default:P=1;break}return AB(_,R,s.shape[0]>1,c,f,h,d,m,l,x,n.shape.length-1,b,g.length-1,D,P,p,S),C}var FB={kernelName:Rs,backendName:"wasm",setupFunc:qse,kernelFunc:jse};function Xse(r){let{inputs:e,attrs:t,backend:o}=r,{axis:n}=t,{x:s}=e,{outputValues:a,outputShape:i,indices:p}=dp(o.readSync(s.dataId),n,s.shape,s.dtype);return[o.makeOutput(i,s.dtype,void 0,a),o.makeOutput([p.length],"int32",void 0,p)]}var PB={kernelName:Yi,backendName:"wasm",kernelFunc:Xse};function Yse(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n.shape[s],i=n.shape.length,p=new Array(i-1),u=0;for(let d=0;d({dataId:d,dtype:f,shape:p}))}var OB={kernelName:wa,backendName:"wasm",kernelFunc:Yse};function Qse(r){let{inputs:{x:e},backend:t}=r,o=t.makeOutput(e.shape,e.dtype);return t.typedArrayFromHeap(o).fill(0),o}var MB={kernelName:Sa,backendName:"wasm",kernelFunc:Qse};var Zse=[SP,IP,vP,kP,NP,_P,AP,PP,OP,MP,LP,BP,zP,VP,WP,GP,YP,KP,jP,JP,tO,oO,nO,sO,aO,iO,pO,cO,mO,fO,gO,yO,CO,wO,SO,vO,NO,_O,$O,DO,FO,OO,LO,zO,WO,UO,HO,KO,qO,jO,XO,YO,QO,JO,eM,tM,oM,sM,iM,pM,lM,mM,dM,EP,fM,hM,gM,yM,bM,CM,SM,vM,IM,kM,NM,TM,_M,$M,DM,FM,PM,MM,BM,VM,UM,HM,qM,XM,YM,ZM,rL,oL,nL,sL,iL,pL,lL,mL,fL,hL,gL,Bg,yL,CL,SL,IL,vL,kL,NL,TL,QP,EL,RL,AL,PL,ML,BL,zL,VL,UL,HL,qL,jL,YL,QL,ZL,JL,eO,eL,eB,tB,oB,sB,iB,uB,cB,lB,mB,dB,fB,gB,yB,bB,CB,wB,SB,vB,kB,NB,_B,$B,DB,FB,RP,PB,OB,MB];for(let r of Zse)ti(r);var zv=A();zv.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return 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]))}catch(r){return!1}});zv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(zv.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(r){return!1}});var jv=zp(VB()),qB=zp(UB()),Xv=zp(GB());var HB=jv.default||jv,Jse=Xv.default||Xv,pm=class extends ao{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(XB),qv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Bo(this,ur())}write(e,t,o){let n={id:this.dataIdNextNumber++};return this.move(n,e,t,o,1),n}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=y.now();return e(),{kernelMs:y.now()-t}}move(e,t,o,n,s){let a=this.dataIdNextNumber++;if(n==="string"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:o,dtype:n,memoryOffset:null,refCount:s});return}let i=y.sizeFromShape(o),p=i*y.bytesPerElement(n),u=this.wasm._malloc(p)>>>0;this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:o,dtype:n,refCount:s}),this.wasm.tfjs.registerTensor(a,i,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,p),u)}async read(e){return this.readSync(e)}readSync(e,t,o){let{memoryOffset:n,dtype:s,shape:a,stringBytes:i}=this.dataIdMap.get(e);if(s==="string")return(t==null||t===0)&&(o==null||o>=i.length)?i:i.slice(t,o);t=t||0,o=o||y.sizeFromShape(a);let p=y.bytesPerElement(s),u=this.wasm.HEAPU8.slice(n+t*p,n+o*p);return tae(u.buffer,s)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let o=this.dataIdMap.get(e);if(o.refCount--,!t&&o.refCount>0)return!1;this.wasm._free(o.memoryOffset),this.wasm.tfjs.disposeData(o.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(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,o,n){let s;if(o==null)s=this.write(n!=null?n:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:o,shape:e,dtype:t,refCount:1});let i=y.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,i,o)}return{dataId:s,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:o}){let n=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(o),a=y.sizeFromShape(e);switch(t){case"float32":return new Float32Array(n,s,a);case"int32":return new Int32Array(n,s,a);case"bool":return new Uint8Array(n,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function eae(r){return(e,t)=>(y.fetch(r,{credentials:"same-origin"}).then(o=>{o.ok||e.env.a(`failed to load wasm binary file at '${r}'`),o.arrayBuffer().then(n=>{WebAssembly.instantiate(n,e).then(s=>{t(s.instance,s.module)})})}),{})}function KB(r,e,t){if(Gg!=null)return Gg;let o="tfjs-backend-wasm.wasm";return r&&e?o="tfjs-backend-wasm-threaded-simd.wasm":r&&(o="tfjs-backend-wasm-simd.wasm"),im!=null&&im[o]!=null?im[o]:t+o}async function jB(){let[r,e]=await Promise.all([A().getAsync("WASM_HAS_SIMD_SUPPORT"),A().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((t,o)=>{let n={};n.locateFile=(i,p)=>{if(i.endsWith(".worker.js")){let u=qB.wasmWorkerContents.replace(/\n/g,"\\n"),c=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(c)}return i.endsWith(".wasm")?KB(r,e,am!=null?am:p):p+i},Yv&&(n.instantiateWasm=eae(KB(r,e,am!=null?am:"")));let s=!1;n.onAbort=()=>{if(s||um)return;um=!0,o({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"})};let a;e&&r&&Gg==null?(n.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+HB.toString()],{type:"text/javascript"}),a=HB(n)):a=Jse(n),a.then(i=>{s=!0,um=!1;let p=null;i.tfjs={init:i.cwrap("init",null,[]),initWithThreadsCount:i.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:i.cwrap("get_threads_count","number",[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",p,["number"]),dispose:i.cwrap("dispose",p,[])},t({wasm:i})}).catch(o)})}function tae(r,e){switch(e){case"float32":return new Float32Array(r);case"int32":return new Int32Array(r);case"bool":return new Uint8Array(r);default:throw new Error(`Unknown dtype ${e}`)}}var rae=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Gg=null,am=null,im={},um=!1,Yv=!1;function oae(r,e=!1){if(Tw("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),um)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Gg=r,Yv=e}function nae(r,e=!1){if(um)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof r=="string")am=r;else{im=r;let t=rae.filter(o=>im[o]==null);if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.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.`)}Yv=e}var XB=-1,qv=-1;function sae(r){XB=r}function aae(){if(qv===-1)throw new Error("WASM backend not initialized.");return qv}var iae="4.17.0";var uae=2;tu("wasm",async()=>{let{wasm:r}=await jB();return new pm(r)},uae);var go=A();go.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15);go.registerFlag("WEBGPU_CPU_FORWARD",()=>!0);go.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0);go.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1);go.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3);go.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1);go.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0);go.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1);go.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1);go.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1);go.registerFlag("WEBGPU_PRINT_SHADER",()=>"");go.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Hg=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}};var Kg=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,t,o=!1,n=!0){let s,a=YB(e,t);return n?(this.freeBuffers.has(a)||this.freeBuffers.set(a,[]),this.freeBuffers.get(a).length>0?(s=this.freeBuffers.get(a).pop(),this.numFreeBuffers--):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e)):(s=this.device.createBuffer({size:e,usage:t,mappedAtCreation:o}),this.numBytesAllocated+=e),this.usedBuffers.has(a)||this.usedBuffers.set(a,[]),this.usedBuffers.get(a).push(s),this.numUsedBuffers++,this.numBytesUsed+=e,s}releaseBuffer(e,t=!0){if(this.freeBuffers.size===0)return;let o=e.size,n=e.usage,s=YB(o,n),a=this.usedBuffers.get(s),i=a.indexOf(e);if(i<0)throw new Error("Cannot find the buffer in buffer manager");a[i]=a[a.length-1],a.pop(),this.numUsedBuffers--,this.numBytesUsed-=o,t?(this.freeBuffers.get(s).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=o)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedBuffers.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function YB(r,e){return`${r}_${e}`}var qg=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,t,o,n){let s=ZB(o),a=e*t*s,i=QB(e,t,o,n);if(this.freeTextures.has(i)||this.freeTextures.set(i,[]),this.usedTextures.has(i)||this.usedTextures.set(i,[]),this.numBytesUsed+=a,this.numUsedTextures++,this.freeTextures.get(i).length>0){this.numFreeTextures--;let u=this.freeTextures.get(i).shift();return this.usedTextures.get(i).push(u),u}this.numBytesAllocated+=a;let p=this.device.createTexture({size:[e,t],format:o,usage:n});return this.usedTextures.get(i).push(p),p}releaseTexture(e){if(this.freeTextures.size===0)return;let t=e.width,o=e.height,n=e.format,s=e.usage,a=QB(t,o,n,s);this.freeTextures.has(a)||this.freeTextures.set(a,[]),this.freeTextures.get(a).push(e),this.numFreeTextures++,this.numUsedTextures--;let i=this.usedTextures.get(a),p=i.indexOf(e);if(p<0)throw new Error("Cannot release a texture that was never provided by this texture manager");i.splice(p,1);let u=ZB(n),c=t*o*u;this.numBytesUsed-=c}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.usedTextures.forEach((e,t)=>{e.forEach(o=>{o.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function QB(r,e,t,o){return`${r}_${e}_${t}_${o}`}function ZB(r){if(r==="rgba8unorm")return 16;throw new Error(`${r} is not supported!`)}function JB(r,e){if(Math.max(...r)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");let t=r.length,o="xyzwuv",n=r.map(a=>`${e}.${o[a]}`),s=new Array(t-1);s[t-2]=n[t-1];for(let a=t-3;a>=0;--a)s[a]=`(${s[a+1]} * ${n[a+1]})`;return s}var Qr=(r,e,t)=>t==="int32"?`atomicAdd(${r}, bitcast(${e}));`:` { var oldValue = 0; loop { @@ -5006,12 +5006,12 @@ return a / b;`,hre=` } oldValue = res.old_value; } - }`;var $i;(function(r){r[r.FROM_PIXELS=0]="FROM_PIXELS",r[r.DRAW=1]="DRAW"})($i||($i={}));var Wz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=Eie(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get("WEBGPU_PRINT_SHADER");if(p!==""){p=p.toLowerCase();let u=p.split(",");(p==="all"||u.some(l=>e.shaderKey.toLowerCase().includes(l)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:"_start"},label:e.constructor.name,layout:"auto"}):r.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:e.constructor.name,layout:"auto"})},Ae=(r,e="f32")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(r){if(r<=1)return"i32";if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4";if(r===5)return"vec5";if(r===6)return"vec6";throw Error(`GPU for rank ${r} is not yet supported`)}function un(r){if(r===0)return"x";if(r===1)return"y";if(r===2)return"z";if(r===3)return"w";if(r===4)return"u";if(r===5)return"v";throw Error(`Index ${r} is not yet supported`)}function G(...r){let e;switch(r.length){case 0:e=` + }`;var wi;(function(r){r[r.FROM_PIXELS=0]="FROM_PIXELS",r[r.DRAW=1]="DRAW"})(wi||(wi={}));var oz=(r,e,t,o,n)=>{let s={dtype:o.dtype,shape:o.shape},a=cae(t,s,e),i=r.createShaderModule({code:a,label:e.constructor.name}),p=A().get("WEBGPU_PRINT_SHADER");if(p!==""){p=p.toLowerCase();let u=p.split(",");(p==="all"||u.some(c=>e.shaderKey.toLowerCase().includes(c)))&&(console.group(e.shaderKey),console.debug(a),console.groupEnd())}return n?r.createComputePipelineAsync({compute:{module:i,entryPoint:"_start"},label:e.constructor.name,layout:"auto"}):r.createComputePipeline({compute:{module:i,entryPoint:"_start"},label:e.constructor.name,layout:"auto"})},Ae=(r,e="f32")=>{switch(r){case 1:return`${e}`;case 2:return`vec2<${e}>`;case 3:return`vec3<${e}>`;case 4:return`vec4<${e}>`;default:throw new Error(`${r}-component ${e} is not supported.`)}};function ft(r){if(r<=1)return"i32";if(r===2)return"vec2";if(r===3)return"vec3";if(r===4)return"vec4";if(r===5)return"vec5";if(r===6)return"vec6";throw Error(`GPU for rank ${r} is not yet supported`)}function Oo(r){if(r===0)return"x";if(r===1)return"y";if(r===2)return"z";if(r===3)return"w";if(r===4)return"u";if(r===5)return"v";throw Error(`Index ${r} is not yet supported`)}function G(...r){let e;switch(r.length){case 0:e=` fn main() `;break;case 1:e=` fn main(${r[0]} : i32) - `;break;default:throw Error("Unreachable")}return e}function Bz(r,e){let t;return t=` - ${_ie(e)} + `;break;default:throw Error("Unreachable")}return e}function ez(r,e){let t;return t=` + ${pae(e)} fn _start(@builtin(local_invocation_id) LocalId : vec3, @builtin(global_invocation_id) GlobalId : vec3, @builtin(local_invocation_index) LocalIndex: u32, @@ -5024,9 +5024,9 @@ return a / b;`,hre=` workgroupId = WorkgroupId; ${r?"main(getGlobalIndex());":"main();"}; } - `,t}function _ie(r){return` + `,t}function pae(r){return` @compute @workgroup_size(${r.workgroupSize[0]}, ${r.workgroupSize[1]}, ${r.workgroupSize[2]}) -`}function Eie(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(` +`}function cae(r,e,t){let o=[],n=t.workgroupSize[0]*t.workgroupSize[1]*t.workgroupSize[2];if(t.outputComponent=t.outputComponent?t.outputComponent:1,o.push(` var localId: vec3; var localIndex: u32; @@ -5036,12 +5036,12 @@ return a / b;`,hre=` // Only used when the y/z dimension of workgroup size is 1. fn getGlobalIndex() -> i32 { - ${Gz(t)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + + ${sz(t)?" return i32(globalId.x);":` return i32((workgroupId.z * numWorkgroups.x * numWorkgroups.y + workgroupId.y * numWorkgroups.x + workgroupId.x) * ${n}u + localIndex); `} } - `),t.pixelsOpType!=null){let f=t.pixelsOpType===$i.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Eu(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Eu(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?"vec2":"i32";o.push(` + `),t.pixelsOpType!=null){let f=t.pixelsOpType===wi.FROM_PIXELS?`@group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>;`:`@group(0) @binding(1) var inBuf : array<${Su(r[0].dtype,t.outputComponent)}>;`,h=e.shape.length===3?"vec2":"i32";o.push(` struct Uniform { outShapeStrides : ${h}, size : i32, @@ -5051,21 +5051,21 @@ return a / b;`,hre=` ${f} @group(0) @binding(2) var uniforms: Uniform; - `);let g=Vz(t);return[zz,o.join(` -`),xm(e.shape),t.getUserCode(),Bz(g,t)].join(` + `);let g=rz(t);return[tz,o.join(` +`),cm(e.shape),t.getUserCode(),ez(g,t)].join(` `)}let s,a,i="struct Uniforms { NAN : f32, INFINITY : f32, ";t.variableNames.forEach((f,h)=>{let g=ft(r[h].shape.length);i+=`${f.charAt(0).toLowerCase()+f.slice(1)}Shape : ${g}, `,s=r[h].shape.length-1,a=ft(s),i+=`${f.charAt(0).toLowerCase()+f.slice(1)}ShapeStrides: ${a}, `});let p=ft(e.shape.length);i+=`outShape : ${p}, `,s=e.shape.length-1,a=ft(s),i+=` - outShapeStrides: ${a}, `,t.size&&(i+="size : i32, "),t.uniforms&&(i+=t.uniforms),i+="};",i=Mie(i),o.push(i),t.atomic?o.push(` + outShapeStrides: ${a}, `,t.size&&(i+="size : i32, "),t.uniforms&&(i+=t.uniforms),i+="};",i=yae(i),o.push(i),t.atomic?o.push(` @group(0) @binding(0) var result: array>; `):o.push(` - @group(0) @binding(0) var result: array<${Eu(e.dtype,t.outputComponent)}>; + @group(0) @binding(0) var result: array<${Su(e.dtype,t.outputComponent)}>; `),t.variableNames.forEach((f,h)=>{o.push(` - @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Eu(r[h].dtype,t.variableComponents[h]):Eu(r[h].dtype,t.outputComponent)}>; + @group(0) @binding(${1+h}) var ${f}: array<${t.variableComponents?Su(r[h].dtype,t.variableComponents[h]):Su(r[h].dtype,t.outputComponent)}>; `)}),i!==""&&o.push(` @group(0) @binding(${1+t.variableNames.length}) var uniforms: Uniforms; - `);let u=Fie(e.shape,t.dispatchLayout),l=[zz,o.join(` -`)+$ie,xm(e.shape),u,Pie(e.shape.length)];t.atomic||l.push(Oie(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{l.push(`${xm(r[h].shape,f)}`)});let c=r.map((f,h)=>Aie(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(` -`);l.push(c),l.push(t.getUserCode());let m=Vz(t);return l.push(Bz(m,t)),l.join(` -`)}function Uz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(l=>{n.push(l.shape),s.push(l.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(l=>C.getBroadcastDims(l.shape,t.shape)),i=e.map(l=>y.arraysEqual(l.shape,t.shape)).join("_"),p=a.map(l=>l.join("_")).join(";"),u=Gz(r)?"flatDispatch":"";return o+="_"+(r.workgroupSize?r.workgroupSize.join(","):"")+n.map(l=>l.length).join(",")+s.join(",")+r.variableNames.join(",")+p+i+u,o}var zz=` + `);let u=hae(e.shape,t.dispatchLayout),c=[tz,o.join(` +`)+lae,cm(e.shape),u,gae(e.shape.length)];t.atomic||c.push(xae(e.shape,e.dtype,t.outputComponent)),t.variableNames.forEach((f,h)=>{c.push(`${cm(r[h].shape,f)}`)});let l=r.map((f,h)=>fae(f,e.shape,t.variableComponents?t.variableComponents[h]:t.outputComponent,t.dispatchLayout.x.length===e.shape.length)).join(` +`);c.push(l),c.push(t.getUserCode());let m=rz(t);return c.push(ez(m,t)),c.join(` +`)}function nz(r,e,t){let o=r.shaderKey;if(r.pixelsOpType!=null)return o;let n=[],s=[];e.forEach(c=>{n.push(c.shape),s.push(c.dtype)}),n.push(t.shape),s.push(t.dtype);let a=e.map(c=>w.getBroadcastDims(c.shape,t.shape)),i=e.map(c=>y.arraysEqual(c.shape,t.shape)).join("_"),p=a.map(c=>c.join("_")).join(";"),u=sz(r)?"flatDispatch":"";return o+="_"+(r.workgroupSize?r.workgroupSize.join(","):"")+n.map(c=>c.length).join(",")+s.join(",")+r.variableNames.join(",")+p+i+u,o}var tz=` struct vec5 {x: i32, y: i32, z: i32, w: i32, u: i32}; struct vec6 {x: i32, y: i32, z: i32, w: i32, u: i32, v: i32}; @@ -5115,19 +5115,19 @@ return a / b;`,hre=` let floatToUint: vec4 = bitcast>(val); return (floatToUint & vec4(0x7fffffffu)) > vec4(0x7f800000u); } -`,$ie=` +`,lae=` fn isinf(val: f32) -> bool { return abs(val) == uniforms.INFINITY; } -`;function xm(r,e=""){let t=r.length,o=e!==""?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",n=e!==""?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:"outShapeStrides";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 { +`;function cm(r,e=""){let t=r.length,o=e!==""?`get${e.charAt(0).toUpperCase()+e.slice(1)}CoordsFromIndex`:"getCoordsFromIndex",n=e!==""?`${e.charAt(0).toLowerCase()+e.slice(1)}ShapeStrides`:"outShapeStrides";if(t<=1)return`fn ${o}(index : i32) -> i32 { return index; }`;let s=y.computeStrides(r),a=ft(t),i=[];for(let u=0;u vec2 { let d0 = index / uniforms.${n}; let d1 = index - d0 * uniforms.${n}; return vec2(d0, d1); - }`;let p;return p="var index2 = index;"+s.map((u,l)=>{let c=`let ${i[l]} = index2 / uniforms.${n}.${un(l)}`,m=l===s.length-1?`let ${i[l+1]} = index2 - ${i[l]} * uniforms.${n}.${un(l)}`:`index2 = index2 - ${i[l]} * uniforms.${n}.${un(l)}`;return`${c}; ${m};`}).join(""),` + }`;let p;return p="var index2 = index;"+s.map((u,c)=>{let l=`let ${i[c]} = index2 / uniforms.${n}.${Oo(c)}`,m=c===s.length-1?`let ${i[c+1]} = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`:`index2 = index2 - ${i[c]} * uniforms.${n}.${Oo(c)}`;return`${l}; ${m};`}).join(""),` fn ${o}(index : i32) -> ${a} { ${p} return ${a}(${i.join(",")}); } - `}function Rie(r,e){let t=r.name,o=r.shape.length,n=ft(o),s="get"+t.charAt(0).toUpperCase()+t.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(l=>`${l} : i32`).join(", ");if(o<1)return` + `}function mae(r,e){let t=r.name,o=r.shape.length,n=ft(o),s="get"+t.charAt(0).toUpperCase()+t.slice(1),a=["d0","d1","d2","d3","d4","d5"].slice(0,o),i=a.map(c=>`${c} : i32`).join(", ");if(o<1)return` fn ${s}() -> ${Ae(e)} { return ${Ae(e)}(${t}[0]); } @@ -5136,7 +5136,7 @@ return a / b;`,hre=` return ${Ae(e)}(${t}[getIndexFromCoords${u}(${n}(${a.join(",")}), ${p})${e===1?"":` / ${e}`}]); } - `}function Die(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=e.length,u=ft(p);if(y.arraysEqual(r.shape,e)&&o)return` + `}function dae(r,e,t,o){let n=r.name,s=n.charAt(0).toUpperCase()+n.slice(1),a="get"+s+"ByOutput",i=r.shape.length,p=e.length,u=ft(p);if(y.arraysEqual(r.shape,e)&&o)return` fn ${a}Index(globalIndex : i32) -> ${Ae(t)} { return ${Ae(t)}(${n}[globalIndex]); } @@ -5144,7 +5144,7 @@ return a / b;`,hre=` fn ${a}Coords(coords : ${u}) -> ${Ae(t)} { return ${Ae(t)}(${n}[${p>1?"getOutputIndexFromCoords(coords)":"coords"}${t===1?"":` / ${t}`}]); } - `;let l=C.getBroadcastDims(r.shape,e),c=p-i,m="";if(i===0)return` + `;let c=w.getBroadcastDims(r.shape,e),l=p-i,m="";if(i===0)return` fn ${a}Index(globalIndex : i32) -> ${Ae(t)}{ return get${s}(); } @@ -5152,8 +5152,8 @@ return a / b;`,hre=` fn ${a}Coords(coords : ${u}) -> ${Ae(t)}{ return get${s}(); } - `;p<2&&l.length>=1?m="coords = 0;":m=l.map(g=>`coords.${un(g+c)} = 0;`).join(` -`);let d="";if(p<2&&i>0)d="coords";else if(p>1){let g=ft(i),x=r.shape.map((b,w)=>`coords.${un(w+c)}`).join(", ");d=`${g}(${x})`}else d="coords";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return` + `;p<2&&c.length>=1?m="coords = 0;":m=c.map(g=>`coords.${Oo(g+l)} = 0;`).join(` +`);let d="";if(p<2&&i>0)d="coords";else if(p>1){let g=ft(i),x=r.shape.map((b,C)=>`coords.${Oo(C+l)}`).join(", ");d=`${g}(${x})`}else d="coords";let f=`uniforms.${n.charAt(0).toLowerCase()+n.slice(1)}Shape`,h=`${i}D`;return` fn ${a}Index(globalIndex : i32) -> ${Ae(t)} { var coords = getCoordsFromIndex(globalIndex); ${m} @@ -5165,13 +5165,13 @@ return a / b;`,hre=` ${m} return ${Ae(t)}(${n}[getIndexFromCoords${h}(${d}, ${f})${t===1?"":` / ${t}`}]); } -`}function Aie(r,e,t,o){let n=Rie(r,t);return r.shape.length<=e.length&&(n+=Die(r,e,t,o)),n}function Fie(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return"";if(t.length===s)return`fn getOutputCoords() -> ${ft(s)}{ +`}function fae(r,e,t,o){let n=mae(r,t);return r.shape.length<=e.length&&(n+=dae(r,e,t,o)),n}function hae(r,e){let{x:t,y:o=[],z:n=[]}=e,s=r.length,a=t.length+o.length+n.length;if(a!==s)return"";if(t.length===s)return`fn getOutputCoords() -> ${ft(s)}{ let globalIndex = getGlobalIndex(); return getCoordsFromIndex(globalIndex); } - `;let i="",p=[t,o,n];for(let m=0;m ${l} { + `;let i="",p=[t,o,n];for(let m=0;m ${c} { ${i} -`;return u.length===0?c+=`return ${l}(0); }`:c+=`return ${l}(${u.join(",")}); }`,c}function Pie(r){let e="";switch(r){case 0:case 1:e+=` +`;return u.length===0?l+=`return ${c}(0); }`:l+=`return ${c}(${u.join(",")}); }`,l}function gae(r){let e="";switch(r){case 0:case 1:e+=` fn getOutputIndexFromCoords(coords : i32) -> i32 { return coords; } @@ -5205,7 +5205,7 @@ return a / b;`,hre=` coords.u * uniforms.outShapeStrides.u + coords.v; } - `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function Gz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Eu(r,e=1){if(r==="float32")return Ae(e,"f32");if(r==="int32"||r==="bool")return Ae(e,"i32");throw new Error(`type ${r} is not supported.`)}function Oie(r,e,t){let o=r.length,n=Eu(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) { + `;break;default:y.assert(!1,()=>`Unsupported ${r}D shape`);break}return e}function sz(r){return r.dispatch[1]===1&&r.dispatch[2]===1}function Su(r,e=1){if(r==="float32")return Ae(e,"f32");if(r==="int32"||r==="bool")return Ae(e,"i32");throw new Error(`type ${r} is not supported.`)}function xae(r,e,t){let o=r.length,n=Su(e,t),s=`fn setOutputAtIndex(flatIndex : i32, value : ${Ae(t)}) { result[flatIndex] = ${n}(value); } @@ -5221,40 +5221,40 @@ return a / b;`,hre=` let flatIndex = getOutputIndexFromCoords(${i}(${a.join(", ")})); setOutputAtIndexI32(flatIndex${t===1?"":` / ${t}`}, value); } - `}return s}function Mie(r){let e=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(e,o=>"@align(16) "+o);let t=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function Vz(r){return!(r.dispatchLayout.hasOwnProperty("y")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty("z")&&r.dispatchLayout.z.length!==0)}var cv={};qe(cv,{GPUBytesPerElement:()=>sx,MatMulProgramType:()=>pn,assertNotComplex:()=>wm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>bm,computeWorkgroupInfoForMatMul:()=>lv,computeWorkgroupSizeForConv2d:()=>ym,flatDispatchLayout:()=>X,isWebGPUSupported:()=>Cm,tilesFitEvenlyIntoShape:()=>Bie});var Ap=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Ap(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Ap(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Ap(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function lv(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function ym(r,e,t=!1){if(t)return[8,8,1];let o=Ap(r.x.map(s=>e[s])),n=Ap(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function bm(r,e,t=!1){if(t)return[4,4,1];let o=Ap(r.x.map(s=>e[s])),n=Ap(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function sx(r){if(r==="float32"||r==="int32"||r==="bool"||r==="string")return 4;if(r==="complex64")return 8;throw new Error(`Unknown dtype ${r}`)}function Cm(){return!!(globalThis&&globalThis.navigator&&globalThis.navigator.gpu)}function wm(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGPU backend.`)})}var pn;(function(r){r[r.MatMulReduceProgram=0]="MatMulReduceProgram",r[r.MatMulSplitKProgram=1]="MatMulSplitKProgram",r[r.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",r[r.MatMulPackedProgram=3]="MatMulPackedProgram",r[r.MatMulMax=4]="MatMulMax"})(pn||(pn={}));var zie=A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Vie=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},Jl=class r extends mo{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!Cm())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new rx(t),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new ox(this.device),this.textureManager=new nx(this.device),this.tensorMap=new mn(this,cr()),A().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(this.releaseResource(e),this.tensorMap.delete(e),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o),A().getBool("WEBGPU_USE_PROFILE_TOOL")&&(y.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype==="string")return o;if(t.dtype==="complex64"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(C.mergeRealAndImagArrays(h,g).buffer,"float32");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],a=t.resource,i=a.size;y.assert(i%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let p=i/4,u=new ArrayBuffer(i),l=256,c=256,m=s.map(h=>new OffscreenCanvas(l,c)),d=new OffscreenCanvas(l,c);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext("webgpu");return x.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=l*4,b=(R,D,F)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:F},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext("2d",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,F,R*D*4);for(let z=0;z0&&(b(S,k,T),T+=k*(l*4)),S=E%l,S>0&&b(S,1,T)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return o;let n;if(t.dtype==="complex64"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=C.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=sx(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return ie(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return ie(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,l)=>({name:a[l],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t==="string"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=sx(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState==="unmapped"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let l=n[u];p.type==="int32"?new Int32Array(a,l,p.data.length).set(p.data):p.type==="uint32"?new Uint32Array(a,l,p.data.length).set(p.data):new Float32Array(a,l,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Vie(this.device,e);let a=t.map((p,u)=>{if(p.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=Uz(e,a,s);let i=A().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=Wz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],a=[],i="int32";if(e.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m="int32";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),l=this.activeTimers!=null;this.ensureCommandEncoderReady();let c={};l&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),c.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(c)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(c)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(l||A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||e.pixelsOpType===$i.DRAW)&&(this.endComputePassEncoder(),l?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=zie){return A().getBool("WEBGPU_CPU_FORWARD")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has("timestamp-query")&&o.push("timestamp-query"),e.features.has("bgra8unorm-storage")&&o.push(["bgra8unorm-storage"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new Jl(s,a)},3);var fe;(function(r){r[r.ADD=0]="ADD",r[r.ATAN2=1]="ATAN2",r[r.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",r[r.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",r[r.DIV=4]="DIV",r[r.ELU_DER=5]="ELU_DER",r[r.EQUAL=6]="EQUAL",r[r.FLOOR_DIV=7]="FLOOR_DIV",r[r.GREATER=8]="GREATER",r[r.GREATER_EQUAL=9]="GREATER_EQUAL",r[r.LESS=10]="LESS",r[r.LESS_EQUAL=11]="LESS_EQUAL",r[r.LOGICAL_AND=12]="LOGICAL_AND",r[r.LOGICAL_OR=13]="LOGICAL_OR",r[r.MAX=14]="MAX",r[r.MIN=15]="MIN",r[r.MOD=16]="MOD",r[r.MUL=17]="MUL",r[r.NOT_EQUAL=18]="NOT_EQUAL",r[r.POW=19]="POW",r[r.PRELU=20]="PRELU",r[r.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",r[r.SUB=22]="SUB"})(fe||(fe={}));var Wie="let resultTemp = a + b;",Uie="let resultTemp = atan2(a, b);",Gie="let resultTemp = areal * breal - aimag * bimag;",Hie="let resultTemp = areal * bimag + aimag * breal;",Kie="let resultTemp = a / b;",qie="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",jie=` + `}return s}function yae(r){let e=/(\w+)\s*:\s*vec(5|6)/g;r=r.replace(e,o=>"@align(16) "+o);let t=/vec(5|6)\s*,\s*(\w+)/g;return r=r.replace(t,(o,n,s)=>`vec${n}, @align(16) ${s}`),r}function rz(r){return!(r.dispatchLayout.hasOwnProperty("y")&&r.dispatchLayout.y.length!==0||r.dispatchLayout.hasOwnProperty("z")&&r.dispatchLayout.z.length!==0)}var Zv={};qe(Zv,{GPUBytesPerElement:()=>jg,MatMulProgramType:()=>Mo,assertNotComplex:()=>fm,computeDispatch:()=>H,computeWorkPerThreadForConv2d:()=>mm,computeWorkgroupInfoForMatMul:()=>Qv,computeWorkgroupSizeForConv2d:()=>lm,flatDispatchLayout:()=>X,isWebGPUSupported:()=>dm,tilesFitEvenlyIntoShape:()=>Cae});var Tp=r=>{let e=1;for(let t=0;tt%r[o]===0)}function H(r,e,t=[1,1,1],o=[1,1,1]){let[n,s,a]=[Math.ceil(Tp(r.x.map(i=>e[i]))/(t[0]*o[0])),r.y?Math.ceil(Tp(r.y.map(i=>e[i]))/(t[1]*o[1])):1,r.z?Math.ceil(Tp(r.z.map(i=>e[i]))/(t[2]*o[2])):1];return[n,s,a]}function Qv(r,e,t,o=!1){let n=[8,8,1],s=[4,4,1];return o||(r<=8&&(s[1]=1),e<=16&&t<=16&&(n[0]=4)),{workgroupSize:n,elementsPerThread:s}}function lm(r,e,t=!1){if(t)return[8,8,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[4,16,1]:n<=4?[16,4,1]:[16,16,1]}function mm(r,e,t=!1){if(t)return[4,4,1];let o=Tp(r.x.map(s=>e[s])),n=Tp(r.y.map(s=>e[s]));return o<=4?[1,2,1]:n<=4?[2,1,1]:[2,2,1]}function X(r){return{x:r.map((e,t)=>t)}}function jg(r){if(r==="float32"||r==="int32"||r==="bool"||r==="string")return 4;if(r==="complex64")return 8;throw new Error(`Unknown dtype ${r}`)}function dm(){return!!(typeof globalThis!="undefined"&&globalThis.navigator&&globalThis.navigator.gpu)}function fm(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the WebGPU backend.`)})}var Mo;(function(r){r[r.MatMulReduceProgram=0]="MatMulReduceProgram",r[r.MatMulSplitKProgram=1]="MatMulSplitKProgram",r[r.MatMulSmallOutputSizeProgram=2]="MatMulSmallOutputSizeProgram",r[r.MatMulPackedProgram=3]="MatMulPackedProgram",r[r.MatMulMax=4]="MatMulMax"})(Mo||(Mo={}));var wae=A().getNumber("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD"),Sae=(r,e)=>{let t=r.limits.maxComputeWorkgroupsPerDimension,o=e.dispatchLayout,n=e.dispatch;if(n.every(a=>a<=t))return n;y.assert(n[0]>t&&o.y===void 0&&o.z===void 0,()=>"Dispatch size exceeds WebGPU limits in Y or Z dimension.");let s=Math.ceil(Math.sqrt(n[0]));return s>t?(s=Math.ceil(Math.cbrt(n[0])),y.assert(s<=t,()=>"Total dispatch size exceeds WebGPU maximum."),[s,s,s]):[s,s,1]},jc=class r extends ao{nextDataId(){return r.nextDataId++}constructor(e,t){if(super(),this.commandQueueOwnedIds=new WeakSet,this.dispatchCountInPass=0,this.disposed=!1,this.downloadWaitMs=0,this.tensorDataPendingDisposal=[],this.queryResolveBuffer=null,this.querySet=null,this.querySetCount=2,this.stagingPendingDisposal=[],this.uniformPendingDisposal=[],this.uploadWaitMs=0,this.hasReadSyncWarned=!1,this.hasTimestampQueryWarned=!1,!dm())throw new Error("WebGPU is not supported on this device");this.pipelineCache={},this.device=e,this.queue=e.queue,this.commandEncoder=null,this.computePassEncoder=null,this.adapterInfo=new Hg(t),this.supportTimestampQuery=this.device.features.has("timestamp-query"),this.thresholdToIncreaseWorkgroups=this.adapterInfo.intelGPUGeneration>=12?16:8,this.bufferManager=new Kg(this.device),this.textureManager=new qg(this.device),this.tensorMap=new Bo(this,ur()),A().getBool("WEBGPU_USE_PROFILE_TOOL")&&(this.dummyCanvas=document.createElement("canvas"),this.dummyCanvas.width=1,this.dummyCanvas.height=1,this.dummyContext=this.dummyCanvas.getContext("webgpu"),this.dummyContext.configure({device:e,format:"bgra8unorm"}),document.body.appendChild(this.dummyCanvas))}floatPrecision(){return 32}disposeData(e,t=!1){if(!this.tensorMap.has(e))return!0;let o=this.tensorMap.get(e);return t?o.refCount=0:o.refCount--,o.refCount>0?!1:(o.complexTensorInfos!=null&&(this.disposeData(o.complexTensorInfos.real.dataId),this.disposeData(o.complexTensorInfos.imag.dataId)),this.commandQueueOwnedIds.has(e)?(this.tensorDataPendingDisposal.push(e),!0):(this.releaseResource(e),this.tensorMap.delete(e),!0))}memory(){return{numBytesInGPU:this.bufferManager.numBytesUsed,numBytesAllocatedInGPU:this.bufferManager.numBytesAllocated,unreliable:!1}}releaseResource(e){let t=this.tensorMap.get(e);if(!(!t||!t.resource)){if(t.external){t.resource=null;return}t.resource instanceof GPUBuffer?this.bufferManager.releaseBuffer(t.resource):t.resource instanceof GPUTexture&&this.textureManager.releaseTexture(t.resource),t.resource=null}}refCount(e){return this.tensorMap.has(e)?this.tensorMap.get(e).refCount:0}incRef(e){let t=this.tensorMap.get(e);t.refCount++}decRef(e){if(this.tensorMap.has(e)){let t=this.tensorMap.get(e);t.refCount--}}write(e,t,o){if(o==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let n={id:this.nextDataId()};return this.tensorMap.set(n,{dtype:o,shape:t,values:e,refCount:1}),n}move(e,t,o,n,s){if(n==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.tensorMap.set(e,{dtype:n,shape:o,values:t,refCount:s})}submitQueue(){this.queue.submit([this.commandEncoder.finish()]),this.commandEncoder=null,this.dispatchCountInPass=0,this.commandQueueOwnedIds=new WeakSet,this.tensorDataPendingDisposal.forEach(e=>{this.releaseResource(e),this.tensorMap.delete(e)}),this.uniformPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e)),this.stagingPendingDisposal.forEach(e=>this.bufferManager.releaseBuffer(e,!1)),this.tensorDataPendingDisposal=[],this.uniformPendingDisposal=[],this.stagingPendingDisposal=[]}ensureCommandEncoderReady(){this.commandEncoder||(this.commandEncoder=this.device.createCommandEncoder())}endComputePassEncoder(){this.computePassEncoder&&(this.computePassEncoder.end(),this.computePassEncoder=null)}async checkCompileCompletionAsync(){let e;try{e=await Promise.all(Object.values(this.pipelineCache))}catch(t){throw new Error(t.message)}Object.keys(this.pipelineCache).map((t,o)=>{this.pipelineCache[t]=e[o]})}async getBufferData(e){if(A().getBool("WEBGPU_ENGINE_COMPILE_ONLY"))return console.warn("The data may be invalid since WEBGPU_ENGINE_COMPILE_ONLY is true, this can only be called when WEBGPU_ENGINE_COMPILE_ONLY is false"),null;let t=e.size,o=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ);this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,o,0,t),this.submitQueue(),await o.mapAsync(GPUMapMode.READ);let n=o.getMappedRange().slice(0);return o.unmap(),o!=null&&this.bufferManager.releaseBuffer(o),A().getBool("WEBGPU_USE_PROFILE_TOOL")&&(y.assert(this.dummyContext!==void 0,()=>"Fail to get context for profiling tool"),this.dummyContext.getCurrentTexture()),n}convertAndCacheOnCPU(e,t){let o=this.tensorMap.get(e);return o.values=t,o.values}readSync(e){let t=this.tensorMap.get(e),{values:o,complexTensorInfos:n}=t;if(o!=null||t.dtype==="string")return o;if(t.dtype==="complex64"){let h=this.readSync(n.real.dataId),g=this.readSync(n.imag.dataId),x=y.convertBackendValuesAndArrayBuffer(w.mergeRealAndImagArrays(h,g).buffer,"float32");return this.convertAndCacheOnCPU(e,x),x}this.hasReadSyncWarned||(this.hasReadSyncWarned=!0,console.warn("The performance of synchronously reading data from GPU to CPU is poor on the webgpu backend, please use asynchronous APIs instead."));let s=["opaque","premultiplied"],a=t.resource,i=a.size;y.assert(i%4===0,()=>"Because there is 4 bytes for one pixel, buffer size must be multiple of 4.");let p=i/4,u=new ArrayBuffer(i),c=256,l=256,m=s.map(h=>new OffscreenCanvas(c,l)),d=new OffscreenCanvas(c,l);this.endComputePassEncoder(),m.map((h,g)=>{let x=h.getContext("webgpu");return x.configure({device:this.device,format:"bgra8unorm",usage:GPUTextureUsage.COPY_DST,alphaMode:s[g]}),x.getCurrentTexture()}).map((h,g)=>{let x=c*4,b=(R,D,P)=>{this.ensureCommandEncoderReady(),this.commandEncoder.copyBufferToTexture({buffer:a,bytesPerRow:x,offset:P},{texture:h},{width:R,height:D}),this.submitQueue();let O=d.getContext("2d",{willReadFrequently:!0});O.clearRect(0,0,R,D),O.drawImage(m[g],0,0);let M=O.getImageData(0,0,R,D).data,L=s[g],B=new Uint8ClampedArray(u,P,R*D*4);for(let z=0;z0&&(b(S,k,_),_+=k*(c*4)),S=$%c,S>0&&b(S,1,_)});let f=y.convertBackendValuesAndArrayBuffer(u,t.dtype);return this.convertAndCacheOnCPU(e,f),f}async read(e){if(!this.tensorMap.has(e))throw new Error(`Tensor ${e} was not registered!`);let t=this.tensorMap.get(e),{values:o}=t;if(o!=null)return o;let n;if(t.dtype==="complex64"){let s=await Promise.all([this.read(t.complexTensorInfos.real.dataId),this.read(t.complexTensorInfos.imag.dataId)]),a=s[0],i=s[1];n=w.mergeRealAndImagArrays(a,i)}else{let s=await this.getBufferData(t.resource);n=y.convertBackendValuesAndArrayBuffer(s,t.dtype)}return this.convertAndCacheOnCPU(e,n),n}copyBuffer(e){let t=e.size,o=e.usage,n=this.bufferManager.acquireBuffer(t,o);return this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(e,0,n,0,t),this.submitQueue(),n}createTensorFromGPUData(e,t,o){let n=e.buffer;if(o==="complex64")throw new Error("Cannot write to a complex64 dtype. ");let s={id:this.nextDataId()};this.tensorMap.set(s,{dtype:o,shape:t,values:null,refCount:1,external:e.zeroCopy});let a=this.tensorMap.get(s),i=jg(a.dtype)*y.sizeFromShape(a.shape);if(e.buffer.sizey.decodeString(n));return me(e.shape,e.dtype,o)}catch(o){throw new Error("Failed to decode encoded string bytes into utf-8")}return me(e.shape,e.dtype,t)}async time(e){!this.supportTimestampQuery&&!this.hasTimestampQueryWarned&&(console.warn("This device doesn't support timestamp-query extension. Start Chrome browser with flag --enable-dawn-features=allow_unsafe_apis to try it again. Otherwise, zero will be shown for the kernel time when profiling mode is enabled."),this.hasTimestampQueryWarned=!0);let t=this.activeTimers,o=[],n=!1;this.programTimersStack==null?(this.programTimersStack=o,n=!0):this.activeTimers.push(o),this.activeTimers=o,e();let s=y.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),a=y.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=t,n&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null},p=await Promise.all(s);return i.kernelMs=y.sum(p),i.getExtraProfileInfo=()=>p.map((u,c)=>({name:a[c],ms:u})).map(u=>`${u.name}: ${u.ms}`).join(", "),this.uploadWaitMs=0,this.downloadWaitMs=0,i}makeTensorInfo(e,t,o){return t==="string"&&o!=null&&o.length>0&&y.isString(o[0])&&(o=o.map(s=>y.encodeString(s))),{dataId:this.write(o,e,t),shape:e,dtype:t}}tensorToBinding(e){if(!e)return null;let o=this.tensorMap.get(e.dataId).resource;return o instanceof GPUBuffer?{buffer:o}:o instanceof GPUTexture?o.createView():o}uploadToGPU(e){let t=this.tensorMap.get(e);if(t.resource!=null)return;let o=jg(t.dtype)*y.sizeFromShape(t.shape),n,s=GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST;if(t.values){if(n=this.bufferManager.acquireBuffer(o,s,!0),n.mapState==="unmapped"){let a=this.bufferManager.acquireBuffer(o,GPUBufferUsage.MAP_WRITE|GPUBufferUsage.COPY_SRC,!0,!1),i=a.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(i).set(t.values):new Float32Array(i).set(t.values),a.unmap(),this.ensureCommandEncoderReady(),this.endComputePassEncoder(),this.commandEncoder.copyBufferToBuffer(a,0,n,0,o),this.stagingPendingDisposal.push(a)}else{let a=n.getMappedRange();t.dtype==="int32"||t.dtype==="bool"?new Int32Array(a).set(t.values):new Float32Array(a).set(t.values),n.unmap()}t.values=null}else n=this.bufferManager.acquireBuffer(o,s);t.resource=n}makeUniforms(e){let t=0,o=0,n=[],s=1;e.forEach(p=>{p.data.length===0&&(p.data=[1]);let u;switch(p.data.length){case 1:u=4;break;case 2:u=8;break;case 3:u=16;break;case 4:u=16;break;case 5:u=16;break;case 6:u=16;break;default:y.assert(!1,()=>`Unsupported ${p.data.length}D shape`)}(o===5||o===6)&&(u=16),u>s&&(s=u),t=Math.ceil(t/u)*u,o=p.data.length,n.push(t),t+=p.data.length*4}),t=Math.ceil(t/s)*s;let a=new ArrayBuffer(t);e.forEach((p,u)=>{let c=n[u];p.type==="int32"?new Int32Array(a,c,p.data.length).set(p.data):p.type==="uint32"?new Uint32Array(a,c,p.data.length).set(p.data):new Float32Array(a,c,p.data.length).set(p.data)});let i=this.bufferManager.acquireBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.UNIFORM);return this.queue.writeBuffer(i,0,a,0,t),this.uniformPendingDisposal.push(i),{offset:0,size:t,buffer:i}}runWebGPUProgram(e,t,o,n,s){if(s||(s=this.makeTensorInfo(e.outputShape,o)),y.sizeFromShape(s.shape)===0)return this.tensorMap.get(s.dataId).values=y.getTypedArrayFromDType(s.dtype,0),s;this.uploadToGPU(s.dataId),e.dispatch=Sae(this.device,e);let a=t.map((p,u)=>{if(p.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");return this.uploadToGPU(p.dataId),{dtype:this.tensorMap.get(p.dataId).dtype,shape:p.shape,name:e.variableNames[u]}});e.shaderKey=nz(e,a,s);let i=A().getBool("WEBGPU_ENGINE_COMPILE_ONLY");return e.shaderKey in this.pipelineCache||(this.pipelineCache[e.shaderKey]=oz(this.device,e,a,s,i)),e.pipeline=this.pipelineCache[e.shaderKey],i||this.recordAndSubmit(e,s,t,n),s}recordAndSubmit(e,t,o,n){if(e.pipeline instanceof Promise)throw new Error("Please call checkCompileCompletionAsync to ensure parallel compilation is done!");let s=[],a=[],i="int32";if(e.pixelsOpType==null){s.push({type:"float32",data:[NaN]},{type:"float32",data:[1/0]}),a=o.concat(t).map(d=>d.shape);let m="int32";a.map(d=>{s.push({type:m,data:d});let f=y.computeStrides(d);s.push({type:m,data:f})})}else{let m=y.computeStrides(t.shape);s.push({type:i,data:m})}if(e.size){let m=y.sizeFromShape(e.outputShape);s.push({type:i,data:[e.outputComponent?m/e.outputComponent:m]})}n&&(s=[...s,...n]);let p=[this.tensorToBinding(t),...o.map(m=>this.tensorToBinding(m)),this.makeUniforms(s)];o.forEach(m=>{this.commandQueueOwnedIds.add(m.dataId)}),this.commandQueueOwnedIds.add(t.dataId);let u=this.device.createBindGroup({layout:e.pipeline.getBindGroupLayout(0),entries:p.map((m,d)=>({binding:d,resource:m}))}),c=this.activeTimers!=null;this.ensureCommandEncoderReady();let l={};c&&this.supportTimestampQuery?(this.endComputePassEncoder(),this.querySet==null&&(this.querySet=this.device.createQuerySet({type:"timestamp",count:this.querySetCount})),l.timestampWrites={querySet:this.querySet,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1},this.computePassEncoder=this.commandEncoder.beginComputePass(l)):this.computePassEncoder||(this.computePassEncoder=this.commandEncoder.beginComputePass(l)),this.computePassEncoder.setPipeline(e.pipeline),this.computePassEncoder.setBindGroup(0,u),this.computePassEncoder.dispatchWorkgroups(e.dispatch[0],e.dispatch[1],e.dispatch[2]),this.dispatchCountInPass++,(c||A().get("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE")<=this.dispatchCountInPass||e.pixelsOpType===wi.DRAW)&&(this.endComputePassEncoder(),c?this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime()}):this.submitQueue())}async getQueryTime(){if(!this.supportTimestampQuery)return 0;this.queryResolveBuffer==null&&(this.queryResolveBuffer=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.COPY_SRC|GPUBufferUsage.COPY_DST|GPUBufferUsage.QUERY_RESOLVE)),this.commandEncoder.resolveQuerySet(this.querySet,0,this.querySetCount,this.queryResolveBuffer,0);let e=this.bufferManager.acquireBuffer(this.querySetCount*8,GPUBufferUsage.MAP_READ|GPUBufferUsage.COPY_DST);this.commandEncoder.copyBufferToBuffer(this.queryResolveBuffer,0,e,0,this.querySetCount*8),this.submitQueue(),await e.mapAsync(GPUMapMode.READ);let t=new BigUint64Array(e.getMappedRange()),o=Number(t[1]-t[0])/1e6;return e.unmap(),this.bufferManager.releaseBuffer(e),o}shouldExecuteOnCPU(e,t=wae){return A().getBool("WEBGPU_CPU_FORWARD")&&e.every(o=>this.tensorMap.get(o.dataId).resource==null&&y.sizeFromShape(o.shape){let r={powerPreference:A().get("WEBGPU_USE_LOW_POWER_GPU")?"low-power":"high-performance"},e=await navigator.gpu.requestAdapter(r),t={},o=[];e.features.has("timestamp-query")&&o.push("timestamp-query"),e.features.has("bgra8unorm-storage")&&o.push(["bgra8unorm-storage"]),t.requiredFeatures=o;let n=e.limits;t.requiredLimits={maxComputeWorkgroupStorageSize:n.maxComputeWorkgroupStorageSize,maxComputeWorkgroupsPerDimension:n.maxComputeWorkgroupsPerDimension,maxStorageBufferBindingSize:n.maxStorageBufferBindingSize,maxBufferSize:n.maxBufferSize,maxComputeWorkgroupSizeX:n.maxComputeWorkgroupSizeX,maxComputeInvocationsPerWorkgroup:n.maxComputeInvocationsPerWorkgroup};let s=await e.requestDevice(t),a=await e.requestAdapterInfo();return new jc(s,a)},3);var fe;(function(r){r[r.ADD=0]="ADD",r[r.ATAN2=1]="ATAN2",r[r.COMPLEX_MULTIPLY_IMAG=2]="COMPLEX_MULTIPLY_IMAG",r[r.COMPLEX_MULTIPLY_REAL=3]="COMPLEX_MULTIPLY_REAL",r[r.DIV=4]="DIV",r[r.ELU_DER=5]="ELU_DER",r[r.EQUAL=6]="EQUAL",r[r.FLOOR_DIV=7]="FLOOR_DIV",r[r.GREATER=8]="GREATER",r[r.GREATER_EQUAL=9]="GREATER_EQUAL",r[r.LESS=10]="LESS",r[r.LESS_EQUAL=11]="LESS_EQUAL",r[r.LOGICAL_AND=12]="LOGICAL_AND",r[r.LOGICAL_OR=13]="LOGICAL_OR",r[r.MAX=14]="MAX",r[r.MIN=15]="MIN",r[r.MOD=16]="MOD",r[r.MUL=17]="MUL",r[r.NOT_EQUAL=18]="NOT_EQUAL",r[r.POW=19]="POW",r[r.PRELU=20]="PRELU",r[r.SQUARED_DIFFERENCE=21]="SQUARED_DIFFERENCE",r[r.SUB=22]="SUB"})(fe||(fe={}));var Iae="let resultTemp = a + b;",vae="let resultTemp = atan2(a, b);",kae="let resultTemp = areal * breal - aimag * bimag;",Nae="let resultTemp = areal * bimag + aimag * breal;",Tae="let resultTemp = a / b;",_ae="let resultTemp = select(a * (b + 1.0), a, b >= b - b);",Eae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a == b); -`,Xie=` +`,$ae=` let remainder = select(a % b, round(a % b), (round(a) == a) & (round(b) == b)); let quotient = (a - remainder) / b; let resultTemp = round(select(quotient, quotient - 1, sign(remainder) == -sign(b))); -`,Yie=` +`,Rae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a > b); -`,Qie=` +`,Dae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a >= b); -`,Zie=` +`,Aae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a < b); -`,Jie=` +`,Fae=` let zero = sign(a) * 0 + 0; let one = sign(b) * 0 + 1; let resultTemp = select(zero, one, a <= b); -`,eue="return f32(a >= 1.0 && b >= 1.0);",tue=`return (vec4(a >= vec4(1.0)) * - vec4(b >= vec4(1.0)));`,rue="return f32(a >= 1.0 || b >= 1.0);",oue=`return min(vec4(a >= vec4(1.0)) + - vec4(b >= vec4(1.0)), vec4(1.0));`,nue="let resultTemp = max(a, b);",sue="let resultTemp = min(a, b);",aue=` +`,Pae="return f32(a >= 1.0 && b >= 1.0);",Oae=`return (vec4(a >= vec4(1.0)) * + vec4(b >= vec4(1.0)));`,Mae="return f32(a >= 1.0 || b >= 1.0);",Lae=`return min(vec4(a >= vec4(1.0)) + + vec4(b >= vec4(1.0)), vec4(1.0));`,Bae="let resultTemp = max(a, b);",zae="let resultTemp = min(a, b);",Vae=` let isNaN = b == 0.; var resultTemp = a % b; resultTemp = select((resultTemp + b) % b, resultTemp, (a < 0. && b < 0.) || (a >= 0. && b > 0.)); -`,iue=` +`,Wae=` let isNaN = !vec4(b); var resultTemp = vec4(a % b); if (!((a[0] < 0. && b[0] < 0.) || (a[0] >= 0. && b[0] > 0.))) { @@ -5269,20 +5269,20 @@ return a / b;`,hre=` if (!((a[3] < 0. && b[3] < 0.) || (a[3] >= 0. && b[3] > 0.))) { resultTemp[3] = (resultTemp[3] + b[3]) % b[3]; } -`,uue="let resultTemp = a * b;",pue=` +`,Uae="let resultTemp = a * b;",Gae=` var resultTemp = f32(a != b); let valueForNaN = 1.0; -`,lue=` +`,Hae=` var resultTemp = vec4(a != b); let valueForNaN = 1.0; -`,cue=` +`,Kae=` let isNaN = a < 0.0 && floor(b) < b; if (b == 0.0) { return 1.0; } var resultTemp = select(sign(a) * pow(abs(a), b), pow(abs(a), b), round(abs(b) % 2.0) != 1.0); -`,mue=` +`,qae=` let isModRound1Bool = vec4(round(abs(b) % vec4(2.0))) == vec4(1); let isModRound1 = vec4(isModRound1Bool); let multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); @@ -5303,10 +5303,10 @@ return a / b;`,hre=` resultTemp.a = 1.0; } let isNaN = (a < vec4(0.0)) & (floor(b) < b); -`,due="if (a < 0.0) { return b * a; } return a;",fue=` +`,jae="if (a < 0.0) { return b * a; } return a;",Xae=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,hue="let resultTemp = (a - b) * (a - b);",gue="let resultTemp = a - b;";function ec(r,e){let t;do{switch(r){case fe.ATAN2:t=Uie;break;case fe.MAX:t=nue;break;case fe.MIN:t=sue;break;case fe.MOD:t=e?iue:aue;break;case fe.NOT_EQUAL:t=e?lue:pue;break;case fe.POW:t=e?mue:cue;break;default:continue}let o,n,s;return e?(o="isnanVec4",n="vec4",s="vec4"):(o="isnan",n="f32",s="bool"),` +`,Yae="let resultTemp = (a - b) * (a - b);",Qae="let resultTemp = a - b;";function Xc(r,e){let t;do{switch(r){case fe.ATAN2:t=vae;break;case fe.MAX:t=Bae;break;case fe.MIN:t=zae;break;case fe.MOD:t=e?Wae:Vae;break;case fe.NOT_EQUAL:t=e?Hae:Gae;break;case fe.POW:t=e?qae:Kae;break;default:continue}let o,n,s;return e?(o="isnanVec4",n="vec4",s="vec4"):(o="isnan",n="f32",s="bool"),` let aIsNaN = ${o}(a); let aPostLegalization = select(a, ${n}(42), aIsNaN); let bIsNaN = ${o}(b); @@ -5321,30 +5321,30 @@ return a / b;`,hre=` resultTemp, ${n}(valueForNaN), ${s}(isNaN) | aIsNaN | bIsNaN); } - `}while(!1);switch(r){case fe.ADD:t=Wie;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Hie;break;case fe.COMPLEX_MULTIPLY_REAL:t=Gie;break;case fe.DIV:t=Kie;break;case fe.ELU_DER:t=qie;break;case fe.EQUAL:t=jie;break;case fe.FLOOR_DIV:t=Xie;break;case fe.GREATER:t=Yie;break;case fe.GREATER_EQUAL:t=Qie;break;case fe.LESS:t=Zie;break;case fe.LESS_EQUAL:t=Jie;break;case fe.LOGICAL_AND:return e?tue:eue;case fe.LOGICAL_OR:return e?oue:rue;case fe.MUL:t=uue;break;case fe.PRELU:return e?fue:due;case fe.SQUARED_DIFFERENCE:t=hue;break;case fe.SUB:t=gue;break;default:}return` + `}while(!1);switch(r){case fe.ADD:t=Iae;break;case fe.COMPLEX_MULTIPLY_IMAG:t=Nae;break;case fe.COMPLEX_MULTIPLY_REAL:t=kae;break;case fe.DIV:t=Tae;break;case fe.ELU_DER:t=_ae;break;case fe.EQUAL:t=Eae;break;case fe.FLOOR_DIV:t=$ae;break;case fe.GREATER:t=Rae;break;case fe.GREATER_EQUAL:t=Dae;break;case fe.LESS:t=Aae;break;case fe.LESS_EQUAL:t=Fae;break;case fe.LOGICAL_AND:return e?Oae:Pae;case fe.LOGICAL_OR:return e?Lae:Mae;case fe.MUL:t=Uae;break;case fe.PRELU:return e?Xae:jae;case fe.SQUARED_DIFFERENCE:t=Yae;break;case fe.SUB:t=Qae;break;default:}return` ${t} return resultTemp; - `}var Z;(function(r){r[r.ABS=0]="ABS",r[r.ACOS=1]="ACOS",r[r.ACOSH=2]="ACOSH",r[r.ASIN=3]="ASIN",r[r.ASINH=4]="ASINH",r[r.ATAN=5]="ATAN",r[r.ATANH=6]="ATANH",r[r.CEIL=7]="CEIL",r[r.COS=8]="COS",r[r.COSH=9]="COSH",r[r.ELU=10]="ELU",r[r.ERF=11]="ERF",r[r.EXP=12]="EXP",r[r.EXPM1=13]="EXPM1",r[r.FLOOR=14]="FLOOR",r[r.IS_FINITE=15]="IS_FINITE",r[r.IS_INF=16]="IS_INF",r[r.IS_NAN=17]="IS_NAN",r[r.LINEAR=18]="LINEAR",r[r.LOG=19]="LOG",r[r.LOG1P=20]="LOG1P",r[r.LOGICAL_NOT=21]="LOGICAL_NOT",r[r.NEG=22]="NEG",r[r.RELU=23]="RELU",r[r.RELU6=24]="RELU6",r[r.LEAKYRELU=25]="LEAKYRELU",r[r.RECIPROCAL=26]="RECIPROCAL",r[r.ROUND=27]="ROUND",r[r.RSQRT=28]="RSQRT",r[r.SELU=29]="SELU",r[r.SIGMOID=30]="SIGMOID",r[r.SIGN=31]="SIGN",r[r.SIN=32]="SIN",r[r.SINH=33]="SINH",r[r.SOFTPLUS=34]="SOFTPLUS",r[r.SQRT=35]="SQRT",r[r.SQUARE=36]="SQUARE",r[r.STEP=37]="STEP",r[r.TAN=38]="TAN",r[r.TANH=39]="TANH",r[r.TO_INT=40]="TO_INT"})(Z||(Z={}));var xue="return abs(a);",yue=` + `}var Z;(function(r){r[r.ABS=0]="ABS",r[r.ACOS=1]="ACOS",r[r.ACOSH=2]="ACOSH",r[r.ASIN=3]="ASIN",r[r.ASINH=4]="ASINH",r[r.ATAN=5]="ATAN",r[r.ATANH=6]="ATANH",r[r.CEIL=7]="CEIL",r[r.COS=8]="COS",r[r.COSH=9]="COSH",r[r.ELU=10]="ELU",r[r.ERF=11]="ERF",r[r.EXP=12]="EXP",r[r.EXPM1=13]="EXPM1",r[r.FLOOR=14]="FLOOR",r[r.IS_FINITE=15]="IS_FINITE",r[r.IS_INF=16]="IS_INF",r[r.IS_NAN=17]="IS_NAN",r[r.LINEAR=18]="LINEAR",r[r.LOG=19]="LOG",r[r.LOG1P=20]="LOG1P",r[r.LOGICAL_NOT=21]="LOGICAL_NOT",r[r.NEG=22]="NEG",r[r.RELU=23]="RELU",r[r.RELU6=24]="RELU6",r[r.LEAKYRELU=25]="LEAKYRELU",r[r.RECIPROCAL=26]="RECIPROCAL",r[r.ROUND=27]="ROUND",r[r.RSQRT=28]="RSQRT",r[r.SELU=29]="SELU",r[r.SIGMOID=30]="SIGMOID",r[r.SIGN=31]="SIGN",r[r.SIN=32]="SIN",r[r.SINH=33]="SINH",r[r.SOFTPLUS=34]="SOFTPLUS",r[r.SQRT=35]="SQRT",r[r.SQUARE=36]="SQUARE",r[r.STEP=37]="STEP",r[r.TAN=38]="TAN",r[r.TANH=39]="TANH",r[r.TO_INT=40]="TO_INT"})(Z||(Z={}));var Zae="return abs(a);",Jae=` if (abs(a) > 1.) { return uniforms.NAN; } return acos(a); -`,bue=` +`,eie=` if (a < 1.) { return uniforms.NAN; } return acosh(a); -`,Cue=` +`,tie=` if (abs(a) > 1.) { return uniforms.NAN; } return asin(a); -`,wue="return asinh(a);",Sue=` +`,rie="return asinh(a);",oie=` if (isnan(a)) { return uniforms.NAN; } return atan(a); -`,Iue=` +`,nie=` if (abs(a) > 1.) { return uniforms.NAN; } @@ -5355,10 +5355,10 @@ return a / b;`,hre=` return -uniforms.INFINITY; } return atanh(a); -`,vue="return ceil(a);",kue="return cos(a);",Nue=` +`,sie="return ceil(a);",aie="return cos(a);",iie=` let e2x = exp(-a); return (e2x + 1.0 / e2x) / 2.0; -`,Tue="return exp(a) - 1.0;",_ue="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",Eue=` +`,uie="return exp(a) - 1.0;",pie="if (a >= 0.0) { return a; } return (exp(a) - 1.0);",cie=` var resFloat = exp(a) - vec4(1.0); if (a.r >= 0.0) { resFloat.r = a.r; @@ -5373,40 +5373,40 @@ return a / b;`,hre=` resFloat.a = a.a; } return resFloat; -`,$ue=` +`,lie=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. - let p = ${C.ERF_P}; - let a1 = ${C.ERF_A1}; - let a2 = ${C.ERF_A2}; - let a3 = ${C.ERF_A3}; - let a4 = ${C.ERF_A4}; - let a5 = ${C.ERF_A5}; + let p = ${w.ERF_P}; + let a1 = ${w.ERF_A1}; + let a2 = ${w.ERF_A2}; + let a3 = ${w.ERF_A3}; + let a4 = ${w.ERF_A4}; + let a5 = ${w.ERF_A5}; let sign = sign(a); let absA = abs(a); let t = 1.0 / (1.0 + p * absA); return sign * (1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * exp(-absA * absA)); -`,Rue="return exp(a);",Due="return floor(a);",Aue="return f32(!isnan(a) && !isinf(a));",Fue="return f32(isinf(a));",Pue="return f32(isnan(a));",Oue="return a;",Mue=`if (a < 0.0) { return uniforms.NAN; } - return log(a);`,Lue=` +`,mie="return exp(a);",die="return floor(a);",fie="return f32(!isnan(a) && !isinf(a));",hie="return f32(isinf(a));",gie="return f32(isnan(a));",xie="return a;",yie=`if (a < 0.0) { return uniforms.NAN; } + return log(a);`,bie=` if (isnan(a)) { return a; } return log(1.0 + a); -`,Bue="return f32(!(a >= 1.0));",zue="return -a;",Vue="if (a < 0.0) { return uniforms.alpha * a; } return a;",Wue=` +`,Cie="return f32(!(a >= 1.0));",wie="return -a;",Sie="if (a < 0.0) { return uniforms.alpha * a; } return a;",Iie=` let aLessThanZero = vec4(a < vec4(0.0)); return (aLessThanZero * (uniforms.alpha * a)) + ((vec4(1.0) - aLessThanZero) * a); -`,Uue="return 1.0 / a;",Gue="return select(a, 0.0, a < 0.0);",Hue="return clamp(a, 0.0, 6.0);",Kue="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",que=` +`,vie="return 1.0 / a;",kie="return select(a, 0.0, a < 0.0);",Nie="return clamp(a, 0.0, 6.0);",Tie="return clamp(a, vec4(0.0, 0.0, 0.0, 0.0), vec4(6.0, 6.0, 6.0, 6.0));",_ie=` return select(a, vec4(0.0), a < vec4(0.0)); -`,jue="return round(a);",Xue="return inverseSqrt(a);",Yue=` +`,Eie="return round(a);",$ie="return inverseSqrt(a);",Rie=` if (a >= 0.0) { - return ${C.SELU_SCALE} * a; + return ${w.SELU_SCALE} * a; } else { - return ${C.SELU_SCALEALPHA} * (exp(a) - 1.0); + return ${w.SELU_SCALEALPHA} * (exp(a) - 1.0); } -`,Que="return 1.0 / (1.0 + exp(-1.0 * a));",Zue="return sign(a);",Jue="return sin(a);",epe=` +`,Die="return 1.0 / (1.0 + exp(-1.0 * a));",Aie="return sign(a);",Fie="return sin(a);",Pie=` let e2x = exp(a); return (e2x - 1.0 / e2x) / 2.0; -`,tpe=` +`,Oie=` let epsilon = 1.1920928955078125e-7; let threshold = log(epsilon) + 2.0; @@ -5421,26 +5421,26 @@ return a / b;`,hre=` } else { return log(exp_a + 1.0); } -`,rpe="return sqrt(a);",ope="return a * a;",npe=` +`,Mie="return sqrt(a);",Lie="return a * a;",Bie=` if (isnan(a)) { return a; } return select(uniforms.stepAlpha, 1.0, a > 0.0); -`,spe="return tan(a);",ape=` +`,zie="return tan(a);",Vie=` let e2x = exp(-2.0 * abs(a)); return sign(a) * (1.0 - e2x) / (1.0 + e2x); -`,ipe="return f32(i32((a)));";function Ri(r,e){switch(r){case Z.ABS:return xue;case Z.ACOS:return yue;case Z.ACOSH:return bue;case Z.ASIN:return Cue;case Z.ASINH:return wue;case Z.ATAN:return Sue;case Z.ATANH:return Iue;case Z.COS:return kue;case Z.COSH:return Nue;case Z.CEIL:return vue;case Z.ELU:return e?Eue:_ue;case Z.ERF:return $ue;case Z.EXP:return Rue;case Z.EXPM1:return Tue;case Z.FLOOR:return Due;case Z.IS_FINITE:return Aue;case Z.IS_INF:return Fue;case Z.IS_NAN:return Pue;case Z.LINEAR:return Oue;case Z.LOG:return Mue;case Z.LOG1P:return Lue;case Z.LOGICAL_NOT:return Bue;case Z.NEG:return zue;case Z.LEAKYRELU:return e?Wue:Vue;case Z.RECIPROCAL:return Uue;case Z.RELU:return e?que:Gue;case Z.RELU6:return e?Kue:Hue;case Z.ROUND:return jue;case Z.RSQRT:return Xue;case Z.SELU:return Yue;case Z.SIGMOID:return Que;case Z.SIGN:return Zue;case Z.SIN:return Jue;case Z.SINH:return epe;case Z.SOFTPLUS:return tpe;case Z.SQRT:return rpe;case Z.SQUARE:return ope;case Z.STEP:return npe;case Z.TAN:return spe;case Z.TANH:return ape;case Z.TO_INT:return ipe;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function gr(r,e=!1,t=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=Ri(Z.LINEAR);else if(r==="relu")n=Ri(Z.RELU,t);else if(r==="elu")n=Ri(Z.ELU,t);else if(r==="relu6")n=Ri(Z.RELU6,t);else if(r==="prelu")n=ec(fe.PRELU,t);else if(r==="sigmoid")n=Ri(Z.SIGMOID,t);else if(r==="leakyrelu")n=Ri(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(t?4:1),i="";return e?i=` +`,Wie="return f32(i32((a)));";function Si(r,e){switch(r){case Z.ABS:return Zae;case Z.ACOS:return Jae;case Z.ACOSH:return eie;case Z.ASIN:return tie;case Z.ASINH:return rie;case Z.ATAN:return oie;case Z.ATANH:return nie;case Z.COS:return aie;case Z.COSH:return iie;case Z.CEIL:return sie;case Z.ELU:return e?cie:pie;case Z.ERF:return lie;case Z.EXP:return mie;case Z.EXPM1:return uie;case Z.FLOOR:return die;case Z.IS_FINITE:return fie;case Z.IS_INF:return hie;case Z.IS_NAN:return gie;case Z.LINEAR:return xie;case Z.LOG:return yie;case Z.LOG1P:return bie;case Z.LOGICAL_NOT:return Cie;case Z.NEG:return wie;case Z.LEAKYRELU:return e?Iie:Sie;case Z.RECIPROCAL:return vie;case Z.RELU:return e?_ie:kie;case Z.RELU6:return e?Tie:Nie;case Z.ROUND:return Eie;case Z.RSQRT:return $ie;case Z.SELU:return Rie;case Z.SIGMOID:return Die;case Z.SIGN:return Aie;case Z.SIN:return Fie;case Z.SINH:return Pie;case Z.SOFTPLUS:return Oie;case Z.SQRT:return Mie;case Z.SQUARE:return Lie;case Z.STEP:return Bie;case Z.TAN:return zie;case Z.TANH:return Vie;case Z.TO_INT:return Wie;default:throw new Error(`BinaryType ${r} is not implemented!`)}}function dr(r,e=!1,t=!1,o=3){if(r===null)return"";let n="";if(r==="linear")n=Si(Z.LINEAR);else if(r==="relu")n=Si(Z.RELU,t);else if(r==="elu")n=Si(Z.ELU,t);else if(r==="relu6")n=Si(Z.RELU6,t);else if(r==="prelu")n=Xc(fe.PRELU,t);else if(r==="sigmoid")n=Si(Z.SIGMOID,t);else if(r==="leakyrelu")n=Si(Z.LEAKYRELU,t);else throw new Error(`Activation ${r} has not been implemented for the WebGPU backend.`);let a=Ae(t?4:1),i="";return e?i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { let b = getPreluActivationWeightsByOutputCoords(coords); ${n} }`:i=` fn activation(a : ${a}, coords : vec${o}) -> ${a} { ${n} - }`,i}function no(r,e){return` + }`,i}function Zr(r,e){return` ${r?"value = value + getBiasByOutputCoords(coords);":""} ${e?"value = activation(value, coords);":""} - `}function mv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=` + `}function Jv(r,e,t=!1,o=!1,n=!1,s=1){y.assert(r&&s===1||!r,()=>`transposeA ${r} is not compatible with component size ${s}`);let a=` ${r?"value = getA(batch, col, row);":"value = getA(batch, row, col);"} `,i=e?"value = getB(batch, col, row);":"value = getB(batch, row, col);";return` @@ -5460,18 +5460,18 @@ return a / b;`,hre=` ${i} return value; } - `}function Sm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return` - ${mv(t,o,n,s,a,i)} + `}function hm(r,e,t,o,n=!1,s=!1,a=!1,i=1){return` + ${Jv(t,o,n,s,a,i)} fn mm_write(batch: i32, row: i32, col: i32, valueIn: ${Ae(i)}) { ${n&&s?"":"if (row < uniforms.dimAOuter && col < uniforms.dimBOuter)"} { var value = valueIn; let coords = vec3(batch, row, col); - ${no(r,e)} + ${Zr(r,e)} setOutputAtCoords(coords[0], coords[1], coords[2], value); } } - `}var upe=(r,e)=>r?` + `}var Uie=(r,e)=>r?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol * ${e}); @@ -5479,7 +5479,7 @@ return a / b;`,hre=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRow + innerRow, kStart + inputCol * ${e}); - `,ppe=(r,e,t,o)=>{if(r)return` + `,Gie=(r,e,t,o)=>{if(r)return` for (var k = 0; k < ${o}; k++) { let BCached0 = mm_Bsub[k][tileCol]; let ACached0 = mm_Asub[k][localRow]; @@ -5493,10 +5493,10 @@ return a / b;`,hre=` let ACached = mm_Asub[tileRow + i][k]; ${s} } - }`}};function Fp(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,l=t?o:i,c=u/e[0],m=o/e[1],d=r[1],f=r[0];return y.assert((t&&c===4&&r[1]===4||!t&&(c===3||c===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${c} and workPerThread[1] ${r[1]} must be 4. - Otherwise, innerElementSize ${c} must be 3 or 4. + }`}};function _p(r,e,t=!1,o=32,n=!1,s=32,a=!1){let i=e[1]*r[1],p=e[0]*r[0],u=t?i:o,c=t?o:i,l=u/e[0],m=o/e[1],d=r[1],f=r[0];return y.assert((t&&l===4&&r[1]===4||!t&&(l===3||l===4))&&u%e[0]===0&&o%e[1]===0&&r[0]===4,()=>`If transposeA ${t} is true, innerElementSize ${l} and workPerThread[1] ${r[1]} must be 4. + Otherwise, innerElementSize ${l} must be 3 or 4. tileAWidth ${u} must be divisible by workgroupSize[0]${e[0]}. tileInner ${o} must be divisible by workgroupSize[1] ${e[1]}. colPerThread ${r[0]} must be 4.`),` - var mm_Asub : array, ${u/c}>, ${l}>; + var mm_Asub : array, ${u/l}>, ${c}>; var mm_Bsub : array, ${p/r[0]}>, ${o}>; ${G()} { @@ -5523,7 +5523,7 @@ return a / b;`,hre=` for (var innerRow = 0; innerRow < ${d}; innerRow++) { let inputRow = tileRow + innerRow; let inputCol = tileCol; - ${upe(t,c)} + ${Uie(t,l)} } // Load one tile of B into local memory. @@ -5536,14 +5536,14 @@ return a / b;`,hre=` workgroupBarrier(); // Compute acc values for a single thread. - ${ppe(t,c,d,o)} + ${Gie(t,l,d,o)} workgroupBarrier(); } for (var innerRow = 0; innerRow < ${d}; innerRow++) { mm_write(batch, globalRow + innerRow, globalCol, acc[innerRow]); } - }`}var Hz=r=>r?` + }`}var az=r=>r?` mm_Asub[inputRow][inputCol] = mm_readA(batchA, kStart + inputRow, globalRowStart + inputCol); @@ -5551,7 +5551,7 @@ return a / b;`,hre=` mm_Asub[inputRow][inputCol] = mm_readA(batchA, globalRowStart + inputRow, kStart + inputCol); - `,lpe=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Pp(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],l=t?p:o,c=t?o:p;y.assert(c%e[1]===0&&l%e[0]===0&&o%e[1]===0,()=>`tileAHight ${c} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${l} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=c/e[1],d=l/e[0],f=o/e[1],h=r[1],g=r[0],x=a?` + `,Hie=r=>r?"let ACached = mm_Asub[k][tileRow + innerRow];":"let ACached = mm_Asub[tileRow + innerRow][k];";function Ep(r,e,t=!1,o=32,n=!1,s=32,a=!1,i=!1){let p=r[1]*e[1],u=r[0]*e[0],c=t?p:o,l=t?o:p;y.assert(l%e[1]===0&&c%e[0]===0&&o%e[1]===0,()=>`tileAHight ${l} must be divisible by workgroupSize[1]${e[1]}, tileAWidth ${c} must be divisible by workgroupSize[0]${e[0]}, tileInner ${o} must be divisible by workgroupSize[1]${e[1]}`);let m=l/e[1],d=c/e[0],f=o/e[1],h=r[1],g=r[0],x=a?` let localRow = i32(localId.y); let localCol = i32(localId.x); let globalRowStart = i32(workgroupId.y) * ${p}; @@ -5560,9 +5560,9 @@ return a / b;`,hre=` // Loop over shared dimension. for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. - for (var inputRow = localRow; inputRow < ${c}; inputRow = inputRow + ${e[1]}) { - for (var inputCol = localCol; inputCol < ${l}; inputCol = inputCol + ${e[0]}) { - ${Hz(t)} + for (var inputRow = localRow; inputRow < ${l}; inputRow = inputRow + ${e[1]}) { + for (var inputCol = localCol; inputCol < ${c}; inputCol = inputCol + ${e[0]}) { + ${az(t)} } } // Load one tile of B into local memory. @@ -5617,7 +5617,7 @@ return a / b;`,hre=` for (var innerCol = 0; innerCol < ${d}; innerCol++) { let inputRow = tileRowA + innerRow; let inputCol = tileColA + innerCol; - ${Hz(t)} + ${az(t)} } } @@ -5642,7 +5642,7 @@ return a / b;`,hre=` } for (var innerRow = 0; innerRow < ${h}; innerRow++) { - ${lpe(t)} + ${Hie(t)} for (var innerCol = 0; innerCol < ${g}; innerCol++) { acc[innerRow][innerCol] = fma(ACached, BCached[innerCol], acc[innerRow][innerCol]); @@ -5660,7 +5660,7 @@ return a / b;`,hre=` } } `;return` - var mm_Asub : array, ${c}>; + var mm_Asub : array, ${l}>; var mm_Bsub : array, ${o}>; ${G()} { @@ -5680,7 +5680,7 @@ return a / b;`,hre=` } ${x} } - `}var cpe=r=>r?` + `}var Kie=r=>r?` mm_readA(batchA, colA, globalRow), mm_readA(batchA, colA + 1, globalRow), mm_readA(batchA, colA + 2, globalRow), @@ -5690,7 +5690,7 @@ return a / b;`,hre=` mm_readA(batchA, globalRow, colA + 1), mm_readA(batchA, globalRow, colA + 2), mm_readA(batchA, globalRow, colA + 3) - `;function mpe(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return` + `;function qie(r,e=!1){y.assert(r[1]===1&&r[2]===1,()=>`A linear work group size is required. But got ${r}.`);let t=r[0]*4;return` var mm_Asub : array, ${r[0]}>; ${G()} { @@ -5709,7 +5709,7 @@ return a / b;`,hre=` for (var t = 0; t < numTiles; t++) { // Load one tile of A into local memory. let colA = t * ${t} + tileCol * 4; - mm_Asub[tileCol] = vec4(${cpe(e)}); + mm_Asub[tileCol] = vec4(${Kie(e)}); workgroupBarrier(); // Compute acc values for a single thread. @@ -5729,11 +5729,11 @@ return a / b;`,hre=` mm_write(batch, globalRow, globalCol, acc); } - `}var ax=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=lv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let l=s!=null,c=i!=null;l&&this.variableNames.push("bias"),c&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=l,this.activation=a,this.hasPreluActivationWeights=c,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` - ${gr(this.activation,this.hasPreluActivationWeights,this.isVec4)} - ${Sm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} - ${this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?mpe(this.workgroupSize,this.transposeA):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} - `}};function dpe(r){return` + `}var Xg=class{constructor(e,t,o=!1,n=!1,s=null,a=null,i=null,p=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=t,this.dispatchLayout={x:[2],y:[1],z:[0]};let u=o?e[1]:e[2];if(this.isVec4=(u%4===0&&!o||t[1]%4===0&&o)&&t[2]%4===0&&!n,this.outputComponent=this.isVec4?4:1,this.isVectorA=t[1]===1&&!o,!this.isVec4&&this.isVectorA)this.elementsPerThread=[1,1,1],this.workgroupSize=[32,1,1];else{let m=Qv(t[1],u,t[2],o);this.workgroupSize=m.workgroupSize,this.elementsPerThread=m.elementsPerThread}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread);let c=s!=null,l=i!=null;c&&this.variableNames.push("bias"),l&&this.variableNames.push("preluActivationWeights"),this.sequentialAccessByThreads=p,this.transposeA=o,this.transposeB=n,this.addBias=c,this.activation=a,this.hasPreluActivationWeights=l,[this.fitAOuter,this.fitBOuter,this.fitInner]=this.getShapeFit(t[1],t[2],u),this.shaderKey=`matMulPacked_${this.elementsPerThread}_${o}_${n}_${this.activation}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.isVectorA}_${this.sequentialAccessByThreads}`}getShapeFit(e,t,o){let n=this.workgroupSize[1]*this.elementsPerThread[1],s=this.workgroupSize[0]*this.elementsPerThread[0];!this.isVec4&&this.isVectorA?this.tileInner=this.workgroupSize[0]*4:this.tileInner=s;let a=e%n===0,i=t%s===0,p=o%this.tileInner===0;return[a,i,p]}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights,this.isVec4)} + ${hm(this.addBias,this.activation,!1,this.transposeB,this.fitAOuter,this.fitBOuter,this.fitInner,this.isVec4?4:1)} + ${this.isVec4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,!0):this.isVectorA?qie(this.workgroupSize,this.transposeA):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,this.tileInner,!1,null,this.sequentialAccessByThreads,!0)} + `}};function jie(r){return` var sumValues : array; ${G()} { let coords = getOutputCoords(); @@ -5766,11 +5766,11 @@ return a / b;`,hre=` mm_write(batch, row, col, sum); } } - `}var ix=class{constructor(e,t=!1,o=!1,n=null,s=null,a=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return` - ${gr(this.activation,this.hasPreluActivationWeights)} - ${Sm(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${dpe(this.workgroupSize[0])} - `}};function fpe(r){let e=r[1],t=r[0],o=e>t?e:t;return` + `}var Yg=class{constructor(e,t=!1,o=!1,n=null,s=null,a=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout={x:[],y:[1,2],z:[0]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize);let i=n!=null,p=a!=null;i&&this.variableNames.push("bias"),p&&this.variableNames.push("preluActivationWeights"),this.transposeA=t,this.transposeB=o,this.addBias=i,this.activation=s,this.hasPreluActivationWeights=p,this.shaderKey=`matMulReduce_${this.activation}_${t}_${o}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights)} + ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${jie(this.workgroupSize[0])} + `}};function Xie(r){let e=r[1],t=r[0],o=e>t?e:t;return` var mm_Asub : array, ${e}>; var mm_Bsub : array, ${o}>; @@ -5822,12 +5822,12 @@ return a / b;`,hre=` mm_write(batch, globalRow, globalCol, acc); } - `}var ux=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push("bias");let l=p!=null;l&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=l,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return` - ${gr(this.activation,this.hasPreluActivationWeights)} - ${Sm(this.addBias,this.activation,this.transposeA,this.transposeB)} - ${fpe(this.workgroupSize)} - `}};var px=class{constructor(e,t,o=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,y.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` - ${mv(!1,this.transposeB,!1,!1,!1,e)} + `}var Qg=class{constructor(e,t,o,n=!1,s=!1,a=null,i=null,p=null){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[16,8,1],this.outputShape=o,this.dispatchLayout={x:[2],y:[1],z:[0]},this.dispatch=[Math.ceil(o[2]/this.workgroupSize[0]),Math.ceil(o[1]/this.workgroupSize[1]),o[0]];let u=a!=null;u&&this.variableNames.push("bias");let c=p!=null;c&&this.variableNames.push("preluActivationWeights"),this.transposeA=n,this.transposeB=s,this.addBias=u,this.activation=i,this.hasPreluActivationWeights=c,this.shaderKey=`matMulSmallOutputSize_${this.activation}_${n}_${s}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights)} + ${hm(this.addBias,this.activation,this.transposeA,this.transposeB)} + ${Xie(this.workgroupSize)} + `}};var Zg=class{constructor(e,t,o=!1,n=!1){this.variableNames=["A","B"],this.uniforms="dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.workgroupSize=[8,8,1],this.atomic=!0,this.splitedDimInner=128,y.assert(e[0]===1,()=>"MatMulSplitKProgram only supports batch = 1."),this.outputShape=e,this.dispatchLayout={x:[2],y:[1],z:[0,3]};let s=(o&&this.outputShape[1]%4===0||!o&&t%4===0)&&this.outputShape[2]%4===0;this.elementsPerThread=[4,4,this.splitedDimInner],this.outputComponent=s?4:1,s||(this.outputShape[1]<16&&(this.elementsPerThread[1]=1),this.outputShape[2]<16&&(this.elementsPerThread[0]=1)),this.dispatch=H(this.dispatchLayout,[this.outputShape[0],this.outputShape[1],this.outputShape[2],t],this.workgroupSize,this.elementsPerThread),this.transposeA=o,this.transposeB=n,this.shaderKey=`matMulSplitK_${o}_${n}_${this.elementsPerThread}_${this.outputComponent}`}getUserCode(){let e=this.outputComponent;return` + ${Jv(!1,this.transposeB,!1,!1,!1,e)} fn mm_write(batch: i32, row : i32, col : i32, value : ${Ae(e)}) { if (row < uniforms.dimAOuter && col < uniforms.dimBOuter) { let coords = vec3(batch, row, col); @@ -5835,31 +5835,31 @@ return a / b;`,hre=` // The problem is that we should initialize output to zero before using. // Otherwise, the original value will be added to the result. for (var i = 0; i < ${e}; i = i + 1) { - ${oo("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} + ${Qr("&result[flatIndex + i]",`${e>1?"value[i]":"value"}`,"float32")} } } } - ${e===4?Fp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Pp(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} - `}},lx=class{constructor(e,t=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return` - ${gr(this.activation,this.hasPreluActivationWeights)} + ${e===4?_p(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner):Ep(this.elementsPerThread,this.workgroupSize,this.transposeA,32,!0,this.splitedDimInner)} + `}},Jg=class{constructor(e,t=null,o=null,n=null){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t!=null,this.hasPreluActivationWeights=n!=null,this.activation=o,this.addBias&&this.variableNames.push("bias"),this.hasPreluActivationWeights&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`biasActivation_${o}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights)} ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); var value = getXByOutputIndex(index); - ${no(this.addBias,this.activation)} + ${Zr(this.addBias,this.activation)} setOutputAtIndex(index, value); } } - `}};var cx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` + `}};var ex=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="value : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="fill"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.value); } } - `}};function Nt(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new cx(o),i=[{type:"float32",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var Kz={kernelName:da,backendName:"webgpu",kernelFunc:Nt};function le(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var qz={kernelName:Ca,backendName:"webgpu",kernelFunc:le};function Op({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,l=e.shape.length,c=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[l-1]:e.shape[l-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[l-2]:e.shape[l-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=kr.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(c===m,()=>`Error in matMul: inner shapes (${c}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,c,d]:[x,d,c],T=o?[b,f,m]:[b,m,f],E=le({inputs:{x:r},backend:n,attrs:{shape:k}}),R=le({inputs:{x:e},backend:n,attrs:{shape:T}}),D=[E,R],F=Math.max(x,b),O=[E,R],M=[{type:"int32",data:[d]},{type:"int32",data:[f]},{type:"int32",data:[c]}],L,B,z=[F,d,f],U=A().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(U<0){let q=A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=F*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?F*d*f<=128?U=pn.MatMulReduceProgram:F===1&&m>=2e3?U=pn.MatMulSplitKProgram:U=pn.MatMulSmallOutputSizeProgram:U=pn.MatMulPackedProgram}switch(U){case pn.MatMulReduceProgram:L=new ix(z,t,o,s,p,a);break;case pn.MatMulSplitKProgram:{if(B=Nt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new px(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new lx(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p==="leakyrelu"&&(J=[{type:"float32",data:[i]}],Y.uniforms+=" alpha : f32,");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=le({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case pn.MatMulSmallOutputSizeProgram:L=new ux(k,T,z,t,o,s,p,a);break;case pn.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new ax(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p==="leakyrelu"&&(M.push({type:"float32",data:[i]}),L.uniforms+=" alpha : f32,"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=le({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function hpe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:l,leakyreluAlpha:c}=o;return Op({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:c,activation:l})}var jz={kernelName:qo,backendName:"webgpu",kernelFunc:hpe};var Im=class{constructor(e,t,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=C.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` + `}};function vt(r){let{backend:e,attrs:t}=r,{shape:o,value:n}=t,{dtype:s}=t;if(s=s||y.inferDtype(n),s==="string"){let a=y.getArrayFromDType(s,y.sizeFromShape(o));return a.fill(n),e.makeTensorInfo(o,s,a)}else{let a=new ex(o),i=[{type:"float32",data:[n]}];return e.runWebGPUProgram(a,[],s,i)}}var iz={kernelName:sa,backendName:"webgpu",kernelFunc:vt};function pe(r){let{inputs:e,attrs:t}=r,{x:o}=e,{shape:n}=t,s=y.sizeFromShape(o.shape),a=y.inferFromImplicitShape(n,s),i=y.sizeFromShape(a);return y.assert(s===i,()=>`The new shape (${a}) has ${i} elements and the old shape (${o.shape}) has ${s} elements. The new shape and old shape must have the same number of elements.`),r.backend.incRef(o.dataId),{dataId:o.dataId,shape:a,dtype:o.dtype}}var uz={kernelName:da,backendName:"webgpu",kernelFunc:pe};function $p({a:r,b:e,transposeA:t,transposeB:o,backend:n,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:i=0,activation:p=null}){let u=r.shape.length,c=e.shape.length,l=t?r.shape[u-2]:r.shape[u-1],m=o?e.shape[c-1]:e.shape[c-2],d=t?r.shape[u-1]:r.shape[u-2],f=o?e.shape[c-2]:e.shape[c-1],h=r.shape.slice(0,-2),g=e.shape.slice(0,-2),x=y.sizeFromShape(h),b=y.sizeFromShape(g),S=Sr.assertAndGetBroadcastShape(r.shape.slice(0,-2),e.shape.slice(0,-2)).concat([d,f]);y.assert(l===m,()=>`Error in matMul: inner shapes (${l}) and (${m}) of Tensors with shapes ${r.shape} and ${e.shape} and transposeA=${t} and transposeB=${o} must match.`);let k=t?[x,l,d]:[x,d,l],_=o?[b,f,m]:[b,m,f],$=pe({inputs:{x:r},backend:n,attrs:{shape:k}}),R=pe({inputs:{x:e},backend:n,attrs:{shape:_}}),D=[$,R],P=Math.max(x,b),O=[$,R],M=[{type:"int32",data:[d]},{type:"int32",data:[f]},{type:"int32",data:[l]}],L,B,z=[P,d,f],U=A().get("WEBGPU_MATMUL_PROGRAM_TYPE");if(U<0){let q=A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),Y=q>0?q:n.thresholdToIncreaseWorkgroups,J=P*Math.ceil(d/32)*Math.ceil(f/32);J<=Y||d<=8&&J<=Y*2?P*d*f<=128?U=Mo.MatMulReduceProgram:P===1&&m>=2e3?U=Mo.MatMulSplitKProgram:U=Mo.MatMulSmallOutputSizeProgram:U=Mo.MatMulPackedProgram}switch(U){case Mo.MatMulReduceProgram:L=new Yg(z,t,o,s,p,a);break;case Mo.MatMulSplitKProgram:{if(B=vt({backend:n,attrs:{shape:z,value:0,dtype:r.dtype}}),L=new Zg(z,m,t,o),s||p){B=n.runWebGPUProgram(L,O,r.dtype,M,B);let Y=new Jg(B.shape,s,p,a),J=null,re=[B];s&&re.push(s),a&&re.push(a),p==="leakyrelu"&&(J=[{type:"float32",data:[i]}],Y.uniforms+=" alpha : f32,");let ne=n.runWebGPUProgram(Y,re,B.dtype,J);D.push(B);let ee=pe({inputs:{x:ne},backend:n,attrs:{shape:S}});D.push(ne);for(let oe of D)n.disposeData(oe.dataId);return ee}break}case Mo.MatMulSmallOutputSizeProgram:L=new Qg(k,_,z,t,o,s,p,a);break;case Mo.MatMulPackedProgram:let q=n.adapterInfo.isIntel();L=new Xg(k,z,t,o,s,p,a,q);break;default:throw new Error(`Unsupported MatMulProgramType ${U}.`)}s&&O.push(s),a&&O.push(a),p==="leakyrelu"&&(M.push({type:"float32",data:[i]}),L.uniforms+=" alpha : f32,"),B=n.runWebGPUProgram(L,O,r.dtype,M,B);let j=pe({inputs:{x:B},backend:n,attrs:{shape:S}});D.push(B);for(let q of D)n.disposeData(q.dataId);return j}function Yie(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s,bias:a,preluActivationWeights:i}=e,{transposeA:p,transposeB:u,activation:c,leakyreluAlpha:l}=o;return $p({a:n,b:s,transposeA:p,transposeB:u,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:l,activation:c})}var pz={kernelName:So,backendName:"webgpu",kernelFunc:Yie};var gm=class{constructor(e,t,o){this.variableNames=["AReal","AImag","BReal","BImag"],this.workgroupSize=[128,1,1],this.size=!0,this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`binaryOpComplex_${e}`,this.op=e}getUserCode(){return` fn binaryOpComplex( areal : f32, aimag : f32, breal : f32, bimag : f32) -> f32 { - ${ec(this.op,!1)} + ${Xc(this.op,!1)} } ${G("index")} { @@ -5871,9 +5871,9 @@ return a / b;`,hre=` setOutputAtIndex(index, binaryOpComplex(areal, aimag, breal, bimag)); } } - `}};var Di=class{constructor(e,t,o){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type="nonshared",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",o=` + `}};var Ii=class{constructor(e,t,o){if(this.size=!0,this.variableNames=["A","B"],this.outputShape=w.assertAndGetBroadcastShape(t,o),this.dispatchLayout=X(this.outputShape),this.op=e,this.useSharedMemoryWithA=t.length<=1&&o.length>1&&t[0]<128,this.useSharedMemoryWithB=o.length<=1&&t.length>1&&o[0]<128,this.useSharedMemoryWithA||this.useSharedMemoryWithB)this.outputComponent=1,this.variableComponents=[1,1],this.lastDimensionSize=this.useSharedMemoryWithB?o[0]:t[0],this.shaderKey=`binary_${e}_${this.lastDimensionSize}`,this.type="shared",this.workgroupSize=[256,1,1];else{let n=t.length>0&&t[t.length-1]%4===0,s=o.length>0&&o[o.length-1]%4===0;n&&s?(this.outputComponent=4,this.variableComponents=[4,4]):n&&(y.isScalarShape(o)||o[o.length-1]===1)||s&&(y.isScalarShape(t)||t[t.length-1]===1)?(this.outputComponent=4,this.variableComponents=n?[4,1]:[1,4]):(this.outputComponent=1,this.variableComponents=[1,1]),this.type="nonshared",this.shaderKey=`binary_${e}_${this.variableComponents}`,this.workgroupSize=[128,1,1]}this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.outputComponent,1,1])}getUserCode(){let e,t=this.outputComponent===4?"vec4":"f32",o=` fn binaryOperation(a : ${t}, b : ${t}) -> ${t} { - ${ec(this.op,this.outputComponent===4)} + ${Xc(this.op,this.outputComponent===4)} }; `;if(this.type==="shared"){let n=this.lastDimensionSize>1?`coords[${this.outputShape.length-1}]`:"0",s=this.useSharedMemoryWithB?`let a = getAByOutputIndex(index); let b = sharedBuf[${n}];`:`let a = sharedBuf[${n}]; @@ -5904,9 +5904,9 @@ return a / b;`,hre=` setOutputAtIndex(index, binaryOperation(a, b)); } } - `;return e}};function Pt(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var Xz={kernelName:vo,backendName:"webgpu",kernelFunc:Pt};function Uo(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.tensorMap.get(s.dataId),i=Pt({inputs:{x:o},backend:t}),p=Pt({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var Yz={kernelName:ei,backendName:"webgpu",kernelFunc:Uo};var so=class{constructor(e,t,o=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==""&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return` + `;return e}};function At(r){let{inputs:e}=r,{x:t}=e;return r.backend.incRef(t.dataId),{dataId:t.dataId,shape:t.shape,dtype:t.dtype}}var cz={kernelName:Co,backendName:"webgpu",kernelFunc:At};function xo(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.makeTensorInfo(o.shape,"complex64"),a=t.tensorMap.get(s.dataId),i=At({inputs:{x:o},backend:t}),p=At({inputs:{x:n},backend:t});return a.complexTensorInfos={real:i,imag:p},s}var lz={kernelName:Di,backendName:"webgpu",kernelFunc:xo};var Jr=class{constructor(e,t,o=""){this.variableNames=["A"],this.size=!0;let n=128;this.workgroupSize=[n,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.op=t,o!==""&&(this.uniforms=o),this.shaderKey=`unary_${t}`}getUserCode(){return` fn unaryOperation(a : f32) -> f32 { - ${Ri(this.op,!1)} + ${Si(this.op,!1)} } ${G("index")} { if (index < uniforms.size) { @@ -5914,7 +5914,7 @@ return a / b;`,hre=` setOutputAtIndex(index, unaryOperation(a)); } } - `}};function ye({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),l=e(u.values,i);return a.makeTensorInfo(s.shape,i,l)}let p=new so(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function tt({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype==="complex64"){let c=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==fe.MUL)[d,f]=[[c.complexTensorInfos.real,m.complexTensorInfos.real],[c.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,w={dataId:x.dataId,dtype:x.dtype,shape:a.shape},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Di(r,a.shape,i.shape);return p.runWebGPUProgram(k,[w,S],pt(x.dtype,b.dtype))});else{let g=new Im(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new Im(fe.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:a.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,"float32"),f=p.runWebGPUProgram(x,b,"float32")}let h=Uo({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||pt(a.dtype,i.dtype);if((a.dtype==="string"||i.dtype==="string"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let c=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype==="string"?C.fromUint8ToStringArray(c):c,f=a.dtype==="string"?C.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let l=new Di(r,a.shape,i.shape);return p.runWebGPUProgram(l,[a,i],u)}}var Lv={};qe(Lv,{addImpl:()=>hv,bincountImpl:()=>Jz,bincountReduceImpl:()=>eV,bitwiseAndImpl:()=>gv,castImpl:()=>fv,ceilImpl:()=>xv,concatImpl:()=>tV,equalImpl:()=>yv,expImpl:()=>bv,expm1Impl:()=>Cv,floorDivImpl:()=>Sv,floorImpl:()=>wv,gatherNdImpl:()=>rV,gatherV2Impl:()=>oV,greaterEqualImpl:()=>vv,greaterImpl:()=>Iv,lessEqualImpl:()=>Nv,lessImpl:()=>kv,linSpaceImpl:()=>nV,logImpl:()=>Tv,maxImpl:()=>sV,maximumImpl:()=>_v,minimumImpl:()=>Ev,multiplyImpl:()=>km,negImpl:()=>aV,notEqualImpl:()=>$v,prodImpl:()=>iV,raggedGatherImpl:()=>pV,raggedRangeImpl:()=>cV,raggedTensorToTensorImpl:()=>fV,rangeImpl:()=>hV,rsqrtImpl:()=>Av,scatterImpl:()=>gV,sigmoidImpl:()=>xV,simpleAbsImpl:()=>Qz,sliceImpl:()=>yV,sparseFillEmptyRowsImpl:()=>bV,sparseReshapeImpl:()=>CV,sparseSegmentReductionImpl:()=>wV,sqrtImpl:()=>SV,squaredDifferenceImpl:()=>Fv,staticRegexReplaceImpl:()=>Pv,stridedSliceImpl:()=>IV,stringNGramsImpl:()=>vV,stringSplitImpl:()=>kV,stringToHashBucketFastImpl:()=>NV,subImpl:()=>Mv,tileImpl:()=>TV,topKImpl:()=>EV,transposeImpl:()=>Rv,uniqueImpl:()=>$V});function Ai(r,e){Array.isArray(r)||(r=[r]),r.forEach(t=>{t!=null&&y.assert(t.dtype!=="complex64",()=>`${e} does not support complex64 tensors in the CPU backend.`)})}function Qz(r){let e=new Float32Array(r.length);for(let t=0;t{let a=C.assertAndGetBroadcastShape(e,t),i=a.length,p=y.computeStrides(a),u=y.sizeFromShape(a),l=y.getTypedArrayFromDType(s,u),c=e.length,m=t.length,d=y.computeStrides(e),f=y.computeStrides(t),h=C.getBroadcastDims(e,a),g=C.getBroadcastDims(t,a);if(h.length+g.length===0)for(let x=0;xw[E]=0);let S=y.locToIndex(w,c,d),k=b.slice(-m);g.forEach(E=>k[E]=0);let T=y.locToIndex(k,m,f);l[x]=r(o[S],n[T])}return[l,a]}}function tc(r){let{inputs:e,backend:t}=r,{real:o,imag:n}=e,s=t.data.get(o.dataId).values,a=t.data.get(n.dataId).values,i=t.makeTensorInfo(o.shape,"complex64"),p=t.data.get(i.dataId);return p.complexTensorInfos={real:t.makeTensorInfo(o.shape,"float32",s),imag:t.makeTensorInfo(n.shape,"float32",a)},i}function mx(r,e,t="float32"){if(t==="complex64"){let n=mx(r,e,"float32"),s=mx(r,e,"float32");return tc({inputs:{real:n,imag:s},backend:r})}let o=y.makeZerosTypedArray(y.sizeFromShape(e),t);return r.makeTensorInfo(e,t,o)}function dv(r){let{inputs:e,backend:t}=r,{x:o}=e;return t.incRef(o.dataId),{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Zz(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.data.get(o.dataId).complexTensorInfos.real,s=t.data.get(n.dataId).values;return t.makeTensorInfo(n.shape,n.dtype,s)}function fv(r,e,t,o){if(o==="int32"){let n=Int32Array.from(r);return[e,"int32",n]}if(o==="bool"){let n=y.toTypedArray([0],t),[s,a]=ht((i,p)=>i!==p?1:0)(e,[],r,n,"bool");return[a,"bool",s]}throw new Error(`Error in Cast: failed to cast ${t} to ${o}`)}function vm(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return dv({inputs:{x:n},backend:t});let l=mx(t,n.shape,n.dtype),c=vm({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),m=tc({inputs:{real:c,imag:l},backend:t});return t.disposeIntermediateTensorInfo(l),t.disposeIntermediateTensorInfo(c),m}if(n.dtype==="complex64"){let l=Zz({inputs:{input:n},backend:t}),c=vm({inputs:{x:l},backend:t,attrs:{dtype:s}});return t.disposeIntermediateTensorInfo(l),c}if(!y.hasEncodingLoss(n.dtype,s)){let l=dv({inputs:{x:n},backend:t});return{dataId:l.dataId,shape:l.shape,dtype:s}}let a=t.data.get(n.dataId).values,[i,p,u]=fv(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}function wt(r,e,t,o){return t==null?({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;Ai([a,i],r);let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=a.dtype==="string"?C.fromUint8ToStringArray(u):u,m=a.dtype==="string"?C.fromUint8ToStringArray(l):l,d=o||a.dtype,[f,h]=e(a.shape,i.shape,c,m,d);return p.makeTensorInfo(h,d,f)}:({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(a.dtype==="complex64"||i.dtype==="complex64"){let u=vm({inputs:{x:a},backend:p,attrs:{dtype:"complex64"}}),l=p.data.get(u.dataId),c=l.complexTensorInfos.real,m=l.complexTensorInfos.imag,d=p.data.get(c.dataId).values,f=p.data.get(m.dataId).values,h=vm({inputs:{x:i},backend:p,attrs:{dtype:"complex64"}}),g=p.data.get(h.dataId),x=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,w=p.data.get(x.dataId).values,S=p.data.get(b.dataId).values,[k,T,E]=t(a.shape,i.shape,d,f,w,S),R=p.makeTensorInfo(E,"float32",k),D=p.makeTensorInfo(E,"float32",T),F=tc({inputs:{real:R,imag:D},backend:p});return p.disposeIntermediateTensorInfo(u),p.disposeIntermediateTensorInfo(h),p.disposeIntermediateTensorInfo(R),p.disposeIntermediateTensorInfo(D),F}else{let u=p.data.get(a.dataId).values,l=p.data.get(i.dataId).values,c=o||a.dtype,[m,d]=e(a.shape,i.shape,u,l,c);return p.makeTensorInfo(d,c,m)}}}function rc(r){return(e,t,o,n,s,a)=>{let i=C.assertAndGetBroadcastShape(e,t),p=y.sizeFromShape(i),u=i.length,l=y.computeStrides(i),c=y.getTypedArrayFromDType("float32",p),m=y.getTypedArrayFromDType("float32",p),d=C.getBroadcastDims(e,i),f=C.getBroadcastDims(t,i),h=C.mergeRealAndImagArrays(o,n),g=C.mergeRealAndImagArrays(s,a),x=e.length,b=y.computeStrides(e),w=t.length,S=y.computeStrides(t);if(d.length+f.length===0)for(let k=0;kE[M]=0);let R=y.locToIndex(E,x,b),D=T.slice(-w);f.forEach(M=>D[M]=0);let F=y.locToIndex(D,w,S),O=r(h[R*2],h[R*2+1],g[F*2],g[F*2+1]);c[k]=O.real,m[k]=O.imag}return[c,m,i]}}var hv=ht((r,e)=>r+e),gpe=rc((r,e,t,o)=>({real:r+t,imag:e+o})),uLt=wt(Rr,hv,gpe);function Jz(r,e,t,o,n){let s=y.sizeFromShape(o),a=y.makeZerosTypedArray(n,t);for(let i=0;i=n||(s>0?a[p]+=e[i]:a[p]+=1)}return a}function eV(r,e,t,o=!1){let n=r.shape[0],s=r.shape[1],a=ie([n,t],e.dtype);for(let i=0;i=t||(o?a.set(1,i,u):e.size>0?a.set(a.get(i,u)+e.get(i,p),i,u):a.set(a.get(i,u)+1,i,u))}return a}var gv=ht((r,e)=>r&e),hLt=wt(_n,gv);function Qt(r){return(e,t,o)=>{let n=y.getArrayFromDType(t,e.length);for(let s=0;s{let{x:a}=o;Ai(a,r);let i=s,p=i.data.get(a.dataId).values,u;if(a.dtype==="string"){if(!Array.isArray(p))throw new Error("String tensor's value was not an instance of Array");u=C.fromUint8ToStringArray(p)}else u=p;let l=t||a.dtype,c=e(u,l,n);return i.makeTensorInfo(a.shape,l,c)}}var xv=Qt(r=>Math.ceil(r)),NLt=Wr(go,xv);function tV(r,e,t,o){let n=y.getArrayFromDType(t,y.sizeFromShape(e));if(o&&t!=="string"){let s=0;r.forEach(a=>{let i=y.sizeFromShape(a.shape);n.set(a.vals,s),s+=i})}else{let s=0;r.forEach(a=>{let i=t==="string"?C.fromUint8ToStringArray(a.vals):a.vals,p=0;for(let u=0;ur===e?1:0),ALt=wt(xo,yv,null,"bool");var bv=Qt(r=>Math.exp(r)),LLt=Wr(yo,bv,"float32");var Cv=Qt(r=>Math.expm1(r)),ULt=Wr(bo,Cv);var wv=Qt(r=>Math.floor(r)),jLt=Wr(Co,wv);var Sv=ht((r,e)=>Math.floor(r/e)),JLt=wt(wo,Sv,null,"int32");function rV(r,e,t,o,n,s,a,i,p){let u=ie([o,s],t);for(let l=0;l=p/s)throw new Error(`Invalid indices: ${c} does not index into ${i}`);for(let d=0;dr>e?1:0),uBt=wt(So,Iv,null,"bool");var vv=ht((r,e)=>r>=e?1:0),dBt=wt(Io,vv,null,"bool");var kv=ht((r,e)=>rr<=e?1:0),IBt=wt(No,Nv,null,"bool");function nV(r,e,t){let o=(e-r)/(t-1),n=y.makeZerosTypedArray(t,"float32");n[0]=r;for(let s=1;sMath.log(r)),$Bt=Wr(To,Tv);function sV(r,e,t,o){let n=y.getTypedArrayFromDType(o,y.sizeFromShape(t));for(let s=0;si)&&(i=u)}n[s]=i}return n}var _v=ht((r,e)=>Math.max(r,e)),MBt=wt(_o,_v);var Ev=ht((r,e)=>Math.min(r,e)),WBt=wt(Eo,Ev);var km=ht((r,e)=>r*e),xpe=rc((r,e,t,o)=>({real:r*t-e*o,imag:r*o+e*t})),qBt=wt($o,km,xpe);function aV(r,e,t){let o=y.createScalarValue(-1,t);return km([],e,o,r,t)}var $v=ht((r,e)=>r!==e?1:0),rzt=wt(Ro,$v,null,"bool");function Rv(r,e,t,o,n){let s=e.length,a=y.sizeFromShape(e),i=y.computeStrides(e),p=y.computeStrides(n),u=y.getTypedArrayFromDType(t,y.sizeFromShape(n));for(let l=0;l{if(o<0||o>=t){let s=y.indexToLoc(n,e.length,y.computeStrides(e)).join(",");throw new Error(`indices[${s}] = ${o} is not in [0, ${t})`)}})}function bpe(r,e){for(let t=0;tn)throw new Error("Ragged splits must not point past values");for(let s=1;so[s])throw new Error("Ragged splits must be sorted in ascending order")}}function Cpe(r,e,t,o){let n=[],s=0,a=e.length-1+t.length,i=new Array(a).fill(null).map(()=>[0]);bpe(t,o);let p=1;for(let u=0;u=0){let h=i[f],g=h[h.length-1]-d[l];for(let x=l;xn[a]=s)}return e}function uV(r,e){let t=r.slice(0,e);for(;t.length1)throw new Error("starts must be a scalar or vector");if(n.length>1)throw new Error("limits must be a scalar or vector");if(a.length>1)throw new Error("deltas must be a scalar or vector");let i=e.length===0,p=n.length===0,u=a.length===0,l=[];i||l.push(e[0]),p||l.push(n[0]),u||l.push(a[0]);for(let g=1;g0&&bx)S=0;else if(S=Math.ceil(Math.abs((b-x)/w)),S>lV)throw new Error(`Requires ((limit - start) / delta) <= ${lV}`);m[g+1]=m[g]+S}let d=m[c],f=y.getArrayFromDType(t,d),h=0;for(let g=0;go&&(o=s)}return o}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let o=0,n=e[0],s=0;for(let a=1;a"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,o,n){let s=e.length,a=[];for(let i=0;i0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,o,n){let s=e.length,a=[];if(s===0)return[];let i=0,p=e[0];if(p>=t.length)throw new Error(`Got currentValueRowId=${p}, which is not less than ${t.length}`);let u=t[p];a.push(u);for(let l=1;l=0&&(++i,i=t.length)throw new Error(`Got nextValueRowId=${c} which is not less than ${t.length}`);u=t[c]}a.push(u)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,o,n){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case ln.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,o,n);case ln.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,o,n);default:throw new Error(`Unsupported partition type: ${ln[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case ln.FIRST_DIM_SIZE:return e[0];case ln.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case ln.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${ln[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),o=this.calculateOutputSize(t),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let p=n.length-2;p>=0;--p)n[p]=n[p+1]*o[p+1];let s=dV(o,!1),a=y.getArrayFromDType(this.valuesDType,y.sizeFromShape(s));if(n[0]*o[0]>0){let p=this.calculateFirstParentOutputIndex(t,n[0],o[0]);for(let u=1;u<=this.raggedRank;++u)p=this.calculateOutputIndex(u-1,p,n[u],o[u]);this.setOutput(this.raggedRank,p,a,s)}return[s,a]}setOutput(e,t,o,n){if(o.length===0)return;let s=this.values,a=o,i=n.slice();i=i.slice(e+1);let p=y.sizeFromShape(i),u=t.length,l=this.defaultValue;if(l.length!==p&&l.length!==1){let f=this.defaultValueShape;De(()=>{let h=W(l,f);l=Oa(h,i).dataSync()})}let c=0,m=0,d=0;for(let f=0;f<=u;++f){let h=f=u){let g=o.length;h=Math.floor(g/p)}if(h>d)if(this.defaultValue.length===1)a.subarray(d*p,h*p).fill(this.defaultValue[0]),d=h;else for(;h>d;){let g=a.slice(d*p);mV(g,l,p),++d}h<0?(c=f+1,m=d):(c=f,m=d,d=m+1)}}};function mV(r,e,t){for(let o=0;o= 0`);if(o<-1)throw new Error(`Dimension ${o} must be >= -1`);o=-1}t.push(o)}return t}function fV(r,e,t,o,n,s,a,i,p,u){return new Dv(r,e,t,o,n,s,a,i,p,u).compute()}function hV(r,e,t,o){let n=r===e,s=r1;if(n||s||a)return y.makeZerosTypedArray(0,o);let i=Math.abs(Math.ceil((e-r)/t)),p=y.makeZerosTypedArray(i,o);e1/Math.sqrt(r)),Nzt=Wr(Do,Av);function gV(r,e,t,o,n,s,a,i,p,u){let l=[o/n,n],c=r.values,m=e.values;if(o===0)return ie(t,e.dtype);let d=p instanceof Ge?p:ie(l,e.dtype);typeof p=="string"||typeof p=="number"?d.values.fill(p):typeof p=="boolean"&&d.values.fill(+p);for(let f=0;f=o/n)throw new Error(`Invalid indices: ${h} does not index into ${t}`);for(let x=0;x1/(1+Math.exp(-r))),Azt=dx(Ao,r=>1/(1+Math.exp(-r)));function yV(r,e,t,o,n){let s=nt.isSliceContinous(o,e,t),a=y.sizeFromShape(t),i=y.computeStrides(o);if(s){let c=nt.computeFlatOffset(e,i);return n==="string"?r.slice(c,c+a):r.subarray(c,c+a)}let p=n==="string"?C.fromUint8ToStringArray(r):r,u=ie(o,n,p),l=ie(t,n);for(let c=0;cf+e[h]);l.set(u.get(...d),...m)}return n==="string"?C.fromStringArrayToUint8(l.values):l.values}function bV(r,e,t,o,n,s,a){let i=e[0],p=s[0],u=new Array(p),l=new Array(i),c=e[1];if(p===0){if(i!==0)throw new Error(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=y.getArrayFromDType(t,0),x=y.getArrayFromDType(n,0);return[g,[0,c],x,u,l]}let m=!0,d=0,f=new Array(p).fill(0);for(let g=0;g=p)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,x,p));++f[x],m=m&&x>=d,d=x}let h=!0;for(let g=0;g0&&(f[g]+=f[g-1])}if(h&&m){let g=r,x=o;for(let b=0;b0){d[m-1]=1;for(let g=m-2;g>=0;--g)d[g]=d[g+1]*o[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*p[g+1]}let h=y.getArrayFromDType(t,a*i);for(let g=0;g0?n[i-1]+1:0;if(c<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=e.slice();m[0]=c;let d=m.reduce((w,S)=>w*S,1),f=y.getArrayFromDType(t,d);if(i===0)return c>0&&f.fill(a),[f,m];if(c<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let h=0,g=1,x=0,b=n[h];for(;;){let w=0;if(g=w)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=c)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,c));b>x&&f.fill(a,x*u,b*u);for(let S=h;S=p[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(S,o[S],p[0]));for(let T=0;Ti)break}return xMath.sqrt(r)),qzt=dx(Fo,r=>Math.sqrt(r));var Fv=ht((r,e)=>{let t=r-e;return t*t}),Zzt=wt(Po,Fv);var Pv=Qt((r,e)=>{let{pattern:t,replaceGlobal:o,rewrite:n}=e;return r.replace(new RegExp(t,o?"g":""),n)}),oVt=Wr(pi,Pv);function IV(r,e,t,o){let n=ie(r,e.dtype);for(let s=0;s0?0:i-p),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(w=>h[g++]=w);for(let b=0;b0){x(e[m+c-1]);for(let b=0;b0){let p=t[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let u=1;u=p;if(l=l&&t[u]<=o,!l)throw new Error(`Invalid split value ${t[u]}, must be in [${p}, ${o}]`);p=t[u]}if(p!==o)throw new Error(`Last split value must be data size. Expected ${o}, got ${p}`)}let s=n-1,a=y.getArrayFromDType("int32",n);if(o===0||n===0){let p=new Array(o);for(let u=0;u<=s;++u)a[u]=0;return[p,a]}a[0]=0;for(let p=1;p<=s;++p){let u=t[p]-t[p-1],l=0;this.nGramWidths.forEach(c=>{l+=this.getNumNGrams(u,c)}),this.preserveShort&&u>0&&l===0&&(l=1),a[p]=a[p-1]+l}let i=new Array(a[s]);for(let p=0;p{let m=t[p+1]-t[p],d=this.getNumNGrams(m,c);this.createNGrams(e,u,i,l,d,c),l+=d}),this.preserveShort&&l===a[p]){let c=t[p+1]-t[p];if(c===0)continue;let m=c+2*this.padWidth;this.createNGrams(e,u,i,l,1,m)}}return[i,a]}};function vV(r,e,t,o,n,s,a,i){return new Ov(t,o,n,s,a,i).compute(r,e)}function vpe(r,e,t,o){if(!r.length)return;if(e.length===0){for(let s=0;sr-e),kpe=rc((r,e,t,o)=>({real:r-t,imag:e-o})),gVt=wt(Oo,Mv,kpe);function TV(r,e){let t=new Array(r.rank);for(let n=0;n{let t=e.value-r.value;return t===0?r.index-e.index:t};function _V(r,e,t=0,o=r.length-1){for(;o>t;){if(o-t>600){let i=o-t+1,p=e-t+1,u=Math.log(i),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(i-l)/i)*Math.sign(p-i/2),m=Math.max(t,Math.floor(e-p*l/i+c)),d=Math.min(o,Math.floor(e+(i-p)*l/i+c));_V(r,e,m,d)}let n=r[e],s=t,a=o;for(y.swap(r,t,e),Nm(r[o],n)>0&&y.swap(r,t,o);s0;)a=a-1}Nm(r[t],n)===0?y.swap(r,t,a):(a=a+1,y.swap(r,a,o)),a<=e&&(t=a+1),e<=a&&(o=a-1)}}function EV(r,e,t,o,n){let s=e[e.length-1],[a,i]=[r.length/s,s],p=y.getTypedArrayFromDType(t,a*o),u=y.getTypedArrayFromDType("int32",a*o);for(let c=0;cf[w]={value:b,index:w}),o{for(let g=0;g`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(" + ");return` + `}};function ye({opType:r,cpuKernelImpl:e,dtype:t}){return({inputs:o,backend:n})=>{let{x:s}=o,a=n,i=t||s.dtype;if(a.shouldExecuteOnCPU([s])&&e!=null){let u=a.tensorMap.get(s.dataId),c=e(u.values,i);return a.makeTensorInfo(s.shape,i,c)}let p=new Jr(s.shape,r);return a.runWebGPUProgram(p,[s],i)}}function et({opType:r,cpuKernelImpl:e,supportsComplex:t=!1,dtype:o}){return({inputs:n,backend:s})=>{let{a,b:i}=n,p=s;if(t&&a.dtype==="complex64"){let l=p.tensorMap.get(a.dataId),m=p.tensorMap.get(i.dataId),d,f;if(r!==fe.MUL)[d,f]=[[l.complexTensorInfos.real,m.complexTensorInfos.real],[l.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(g=>{let[x,b]=g,C={dataId:x.dataId,dtype:x.dtype,shape:a.shape},S={dataId:b.dataId,dtype:b.dtype,shape:i.shape},k=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(k,[C,S],dt(x.dtype,b.dtype))});else{let g=new gm(fe.COMPLEX_MULTIPLY_REAL,a.shape,i.shape),x=new gm(fe.COMPLEX_MULTIPLY_IMAG,a.shape,i.shape),b=[{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},{dataId:m.complexTensorInfos.real.dataId,dtype:m.complexTensorInfos.real.dtype,shape:i.shape},{dataId:m.complexTensorInfos.imag.dataId,dtype:m.complexTensorInfos.imag.dtype,shape:i.shape}];d=p.runWebGPUProgram(g,b,"float32"),f=p.runWebGPUProgram(x,b,"float32")}let h=xo({inputs:{real:d,imag:f},backend:p});return p.disposeData(d.dataId),p.disposeData(f.dataId),h}let u=o||dt(a.dtype,i.dtype);if((a.dtype==="string"||i.dtype==="string"||p.shouldExecuteOnCPU([a,i]))&&e!=null){let l=p.tensorMap.get(a.dataId).values,m=p.tensorMap.get(i.dataId).values,d=a.dtype==="string"?w.fromUint8ToStringArray(l):l,f=a.dtype==="string"?w.fromUint8ToStringArray(m):m,[h,g]=e(a.shape,i.shape,d,f,u);return p.makeTensorInfo(g,u,h)}let c=new Ii(r,a.shape,i.shape);return p.runWebGPUProgram(c,[a,i],u)}}var{addImpl:mz,castImpl:dz,ceilImpl:fz,concatImpl:hz,equalImpl:gz,expImpl:xz,expm1Impl:yz,floorImpl:bz,floorDivImpl:Cz,gatherNdImpl:wz,gatherV2Impl:Sz,greaterEqualImpl:Iz,greaterImpl:vz,lessEqualImpl:kz,lessImpl:Nz,logImpl:Tz,maxImpl:_z,maximumImpl:Ez,minimumImpl:$z,multiplyImpl:Rz,negImpl:Dz,notEqualImpl:Az,prodImpl:Fz,rangeImpl:Pz,rsqrtImpl:Oz,scatterImpl:Mz,simpleAbsImpl:Lz,sliceImpl:Bz,stridedSliceImpl:zz,stringNGramsImpl:Vz,subImpl:Wz,tileImpl:Uz,topKImpl:Gz,transposeImpl:Hz,uniqueImpl:rOt}=Ic;var Qie=ye({opType:Z.ABS,cpuKernelImpl:Lz}),Kz={kernelName:Xs,backendName:"webgpu",kernelFunc:Qie};var Zie=ye({opType:Z.ACOS}),qz={kernelName:Vo,backendName:"webgpu",kernelFunc:Zie};var Jie=ye({opType:Z.ACOSH}),jz={kernelName:Wo,backendName:"webgpu",kernelFunc:Jie};var eue=et({opType:fe.ADD,cpuKernelImpl:mz,supportsComplex:!0}),Xz={kernelName:uo,backendName:"webgpu",kernelFunc:eue};var tx=class{constructor(e){this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e[0],this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="addN"}getUserCode(){let e=[];this.variableNames.forEach(n=>{e.push(`let v${n} = get${n}ByOutputCoords(coords);`)});let t=this.variableNames.map(n=>`v${n}`).join(" + ");return` ${G("index")} { for (var i = 0; i < ${this.workPerThread}; i = i + 1) { let flatIndex = index * ${this.workPerThread} + i; @@ -5926,7 +5926,7 @@ return a / b;`,hre=` } } } - `}};function $pe(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return Pt({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>pt(i,p)),s=o.map(i=>i.shape),a=new fx(s);return t.runWebGPUProgram(a,o,n)}var hW={kernelName:xn,backendName:"webgpu",kernelFunc:$pe};var hx=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return` + `}};function tue(r){let{inputs:e,backend:t}=r,o=e;if(o.length===1)return At({inputs:{x:o[0]},backend:t});let n=o.map(i=>i.dtype).reduce((i,p)=>dt(i,p)),s=o.map(i=>i.shape),a=new tx(s);return t.runWebGPUProgram(a,o,n)}var Yz={kernelName:Uo,backendName:"webgpu",kernelFunc:tue};var rx=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[16,16,1];let o=new Array(e.length);for(let n=0;n`Must be a square tile, current tile shape is ${this.workgroupSize[0]} x ${this.workgroupSize[1]}`);let e=this.workgroupSize[0];return` var tile : array, ${this.workgroupSize[0]}>; ${G()} { var x = i32(workgroupId.x) * ${e} + i32(localId.x); @@ -5945,7 +5945,7 @@ return a / b;`,hre=` [localId.y]); } } - `}};var gx=class{constructor(e,t){this.variableNames=["A"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",o=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` + `}};function e0(r){let e=r.length;if(e>6)throw Error(`Transpose for rank ${e} is not yet supported`);let t=new Array(e);for(let o=0;o=32768&&o>=512?this.workgroupSize=[512,1,1]:e.inSize>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1]),this.reduceType=t,this.shaderKey=`reduce_${t}`}getUserCode(){let e="",t="0.0",o=this.workgroupSize[0];this.reduceType==="min"||this.reduceType==="max"?(e=` if (isnan(candidate)) { bestValue = uniforms.NAN; } else if (!isnan(bestValue) && candidate ${this.reduceType==="min"?"<":">"} bestValue) @@ -6004,7 +6004,7 @@ return a / b;`,hre=` ${n} } } - `}};var Rpe={mean:"float32",all:"bool",any:"bool"};function ao(r,e,t,o,n){let s=r.shape.length,a=[],i=y.parseAxisParam(e,r.shape),p=i,u=C.getAxesPermutation(p,s),l=r;u!=null&&(l=Cr({inputs:{x:r},attrs:{perm:u},backend:n}),p=C.getInnerMostAxes(p.length,s),a.push(l)),C.assertAxesAreInnerMostDims(o,p,s);let[c,m]=C.computeOutAndReduceShapes(l.shape,p),d=c;t&&(d=C.expandShapeToKeepDim(c,i));let f;if((o==="max"||o==="prod")&&n.shouldExecuteOnCPU([l])){let h=n.tensorMap.get(l.dataId).values;switch(o){case"max":let g=qV(h,y.sizeFromShape(m),d,r.dtype);f=n.makeTensorInfo(d,r.dtype,g);break;case"prod":let{outVals:x,outShape:b,outDtype:w}=JV(l.shape,l.dtype,h,p);f=n.makeTensorInfo(b,w,x);break;default:throw new Error(`${o} CPU implementation is not yet supported.`)}}else{let h=y.sizeFromShape(m),x=y.sizeFromShape(l.shape)/h,b={windowSize:h,inSize:h,batchSize:x,outSize:1},w=Rpe[o]||mi(r.dtype),S=[{type:"int32",data:[h]}],k=new xx(b,o,n.device.limits.maxComputeWorkgroupSizeX),T=n.runWebGPUProgram(k,[l],w,S);a.push(T),f=le({inputs:{x:T},attrs:{shape:d},backend:n})}return a.forEach(h=>n.disposeData(h.dataId)),f}function Dpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,"all",t)}var xW={kernelName:yn,backendName:"webgpu",kernelFunc:Dpe};function Ape(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,"any",t)}var yW={kernelName:bn,backendName:"webgpu",kernelFunc:Ape};var oc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=o==="min"?"<":">";let[s,a]=C.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type="plain",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${un(this.inputShape.length-1)}`,o=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let s=0;sn.disposeData(h.dataId)),f}function oue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,"all",t)}var Zz={kernelName:Go,backendName:"webgpu",kernelFunc:oue};function nue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,"any",t)}var Jz={kernelName:Ho,backendName:"webgpu",kernelFunc:nue};var Yc=class{constructor(e,t,o){this.workgroupSize=[64,1,1],this.variableNames=["x"],this.uniforms="infinityValue : f32,",this.size=!0;let n=[t];this.op=o==="min"?"<":">";let[s,a]=w.computeOutAndReduceShapes(e,n);this.outputShape=s.length===0?[1]:s,this.dispatchLayout=X(this.outputShape),y.sizeFromShape(a)<32?(this.type="plain",this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)):(this.type="shared",this.dispatch=H(this.dispatchLayout,this.outputShape,[1,1,1])),this.inputShape=e,this.shaderKey=`argMinMax_${this.op}_${this.type}`}getUserCode(){let e=this.workgroupSize[0],t=()=>this.inputShape.length===1?"uniforms.xShape":`uniforms.xShape.${Oo(this.inputShape.length-1)}`,o=()=>{let n="";if(this.outputShape.length===1)this.inputShape.length!==1&&(n+="outputCoords,");else for(let s=0;s u32 { return ((a - 1u) / b + 1u); } @@ -6070,7 +6070,7 @@ return a / b;`,hre=` setOutputAtIndexI32(index, bestIndex); } } - `}};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Cr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let l=new oc(p.shape,a[0],"max"),c=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(l,[p],"int32",c);return u.forEach(d=>t.disposeData(d.dataId)),m}var bW={kernelName:na,backendName:"webgpu",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=C.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=Cr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=C.getInnerMostAxes(a.length,p.shape.length)),C.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let l=new oc(p.shape,a[0],"min"),c=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(l,[p],"int32",c);return u.forEach(d=>t.disposeData(d.dataId)),m}var CW={kernelName:sa,backendName:"webgpu",kernelFunc:Ppe};var Ope=ye({opType:Z.ASIN}),wW={kernelName:Cn,backendName:"webgpu",kernelFunc:Ope};var Mpe=ye({opType:Z.ASINH}),SW={kernelName:wn,backendName:"webgpu",kernelFunc:Mpe};var Lpe=ye({opType:Z.ATAN}),IW={kernelName:Sn,backendName:"webgpu",kernelFunc:Lpe};var Bpe=tt({opType:fe.ATAN2}),vW={kernelName:vn,backendName:"webgpu",kernelFunc:Bpe};var zpe=ye({opType:Z.ATANH}),kW={kernelName:In,backendName:"webgpu",kernelFunc:zpe};var yx=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` + `}};function sue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMax",[a[0]],p.shape.length);let c=new Yc(p.shape,a[0],"max"),l=[{type:"float32",data:[Number.NEGATIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var eV={kernelName:Ys,backendName:"webgpu",kernelFunc:sue};function aue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s}=o,a=y.parseAxisParam(s,n.shape),i=w.getAxesPermutation(a,n.shape.length),p=n,u=[];i!=null&&(p=xr({inputs:{x:n},backend:t,attrs:{perm:i}}),u.push(p),a=w.getInnerMostAxes(a.length,p.shape.length)),w.assertAxesAreInnerMostDims("argMin",[a[0]],p.shape.length);let c=new Yc(p.shape,a[0],"min"),l=[{type:"float32",data:[Number.POSITIVE_INFINITY]}],m=t.runWebGPUProgram(c,[p],"int32",l);return u.forEach(d=>t.disposeData(d.dataId)),m}var tV={kernelName:Qs,backendName:"webgpu",kernelFunc:aue};var iue=ye({opType:Z.ASIN}),rV={kernelName:Ko,backendName:"webgpu",kernelFunc:iue};var uue=ye({opType:Z.ASINH}),oV={kernelName:qo,backendName:"webgpu",kernelFunc:uue};var pue=ye({opType:Z.ATAN}),nV={kernelName:jo,backendName:"webgpu",kernelFunc:pue};var cue=et({opType:fe.ATAN2}),sV={kernelName:Yo,backendName:"webgpu",kernelFunc:cue};var lue=ye({opType:Z.ATANH}),aV={kernelName:Xo,backendName:"webgpu",kernelFunc:lue};var sx=class{constructor(e){this.variableNames=["x"],this.uniforms="strides : vec2,",this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="poolWithFilterSizeEqualsOne"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6085,7 +6085,7 @@ return a / b;`,hre=` setOutputAtIndex(index, value); } } - `}};var Ka=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=["x"],this.uniforms="strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}};var Ba=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=["x"],this.uniforms="strides : vec2, pads : vec2, dilations : vec2, convDims : vec2, filterDims : vec2,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool2D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue = resultValue + value; count = count + 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6126,7 +6126,7 @@ return a / b;`,hre=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}},$u=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=["x"],this.uniforms="strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); + `}},Iu=class{constructor(e,t,o=!1,n=!1,s=!1){if(this.variableNames=["x"],this.uniforms="strides : vec3, pads : vec3, convDims : vec3, filterDims : vec3,",this.workgroupSize=[128,1,1],this.size=!0,t==="avg"&&o)throw new Error("Cannot compute positions for average pool.");this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.poolType=t,this.computePositions=o,this.flattenPositions=n,this.includeBatchIndex=s,this.shaderKey=`pool3D_${t}_${o}_${n}_${s}`}getUserCode(){let e;this.poolType==="avg"?e="resultValue += value; count += 1.0;":this.computePositions?e=`let currMaxValue = mix(value, maxValue, maxValueFound); if (value >= currMaxValue) { maxValue = value; maxValueFound = 1.0; @@ -6175,7 +6175,7 @@ return a / b;`,hre=` ${this.computePositions?"setOutputAtIndexI32(index, maxPosition);":`setOutputAtIndex(index, ${t});`} } } - `}};function zv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return ao(n,s,a,"max",t)}var NW={kernelName:os,backendName:"webgpu",kernelFunc:zv};function Vv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return ao(n,a,s,"mean",t)}var TW={kernelName:ss,backendName:"webgpu",kernelFunc:Vv};function bx(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return Pt({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type==="VALID"){let a=r.shape.length,i=le({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t==="avg"?p=Vv({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t==="max",()=>`Invalid pool type ${t}`),p=zv({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=le({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new yx(e):(t==="avg"?n=new Ka(e,"avg"):(y.assert(t==="max",()=>`Invalid pool type ${t}`),n=new Ka(e,"max")),s.push({type:"int32",data:[e.padInfo.top,e.padInfo.left]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]},{type:"int32",data:[e.inHeight,e.inWidth]},{type:"int32",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function Vpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,l=C.computePool2DInfo(n.shape,s,a,1,i,p);return bx(n,l,"avg",t)}var _W={kernelName:kn,backendName:"webgpu",kernelFunc:Vpe};function Wpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new $u(c,"avg"),d=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var EW={kernelName:aa,backendName:"webgpu",kernelFunc:Wpe};var Cx=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function t0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{reductionIndices:s,keepDims:a}=o;return eo(n,s,a,"max",t)}var iV={kernelName:zn,backendName:"webgpu",kernelFunc:t0};function r0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{keepDims:s,axis:a}=o;return eo(n,a,s,"mean",t)}var uV={kernelName:Un,backendName:"webgpu",kernelFunc:r0};function ax(r,e,t,o){if(e.filterWidth===1&&e.filterHeight===1&&y.arraysEqual(e.inShape,e.outShape))return At({inputs:{x:r},backend:o});if(e.filterWidth===e.inWidth&&e.filterHeight===e.inHeight&&e.batchSize===1&&e.padInfo.type==="VALID"){let a=r.shape.length,i=pe({inputs:{x:r},backend:o,attrs:{shape:[r.shape[a-3]*r.shape[a-2],r.shape[a-1]]}}),p;t==="avg"?p=r0({inputs:{x:i},backend:o,attrs:{axis:0,keepDims:!1}}):(y.assert(t==="max",()=>`Invalid pool type ${t}`),p=t0({inputs:{x:i},backend:o,attrs:{reductionIndices:0,keepDims:!1}}));let u=pe({inputs:{x:p},backend:o,attrs:{shape:e.outShape}});return o.disposeData(i.dataId),o.disposeData(p.dataId),u}let n,s=[{type:"int32",data:[e.strideHeight,e.strideWidth]}];return e.filterHeight===1&&e.filterWidth===1?n=new sx(e):(t==="avg"?n=new Ba(e,"avg"):(y.assert(t==="max",()=>`Invalid pool type ${t}`),n=new Ba(e,"max")),s.push({type:"int32",data:[e.padInfo.top,e.padInfo.left]},{type:"int32",data:[e.dilationHeight,e.dilationWidth]},{type:"int32",data:[e.inHeight,e.inWidth]},{type:"int32",data:[e.effectiveFilterHeight,e.effectiveFilterWidth]})),o.runWebGPUProgram(n,[r],r.dtype,s)}function mue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,"avg",t)}var pV={kernelName:Qo,backendName:"webgpu",kernelFunc:mue};function due(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,"avg"),d=[{type:"int32",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:"int32",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.inDepth,l.inHeight,l.inWidth]},{type:"int32",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var cV={kernelName:Zs,backendName:"webgpu",kernelFunc:due};var ix=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool2DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -6214,7 +6214,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},wx=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},ux=class{constructor(e){this.variableNames=["dy"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32, avgMultiplier : f32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="avgPool3DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -6263,7 +6263,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}};function Upe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=C.computePool3DInfo(a.shape,i,p,1,u,l),m=new wx(c),d=1/(c.filterDepth*c.filterHeight*c.filterWidth),f=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterDepth-1-c.padInfo.front,c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outDepth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var $W={kernelName:Vi,backendName:"webgpu",kernelFunc:Upe};function Gpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;wm([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,l=C.computePool2DInfo(a.shape,i,p,1,u),c=new Cx(l),m=1/(l.filterHeight*l.filterWidth),d=[{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:"int32",data:[l.dilationHeight,l.dilationWidth]},{type:"int32",data:[l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:"int32",data:[l.outHeight]},{type:"int32",data:[l.outWidth]},{type:"float32",data:[m]}];return t.runWebGPUProgram(c,[n],a.dtype,d)}var RW={kernelName:zi,backendName:"webgpu",kernelFunc:Gpe};function Hpe(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return Op({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var DW={kernelName:Nn,backendName:"webgpu",kernelFunc:Hpe};var Sx=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=ft(this.rank),t=Kpe(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>"sourceLoc = uniforms.start + coords;"):o=this.outputShape.map((s,a)=>`sourceLoc.${Wv[a]} = uniforms.start.${un(a)} + coords.${Wv[a]};`),` + `}};function fue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=w.computePool3DInfo(a.shape,i,p,1,u,c),m=new ux(l),d=1/(l.filterDepth*l.filterHeight*l.filterWidth),f=[{type:"int32",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:"int32",data:[l.effectiveFilterDepth-1-l.padInfo.front,l.effectiveFilterHeight-1-l.padInfo.top,l.effectiveFilterWidth-1-l.padInfo.left]},{type:"int32",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]},{type:"int32",data:[l.outDepth]},{type:"int32",data:[l.outHeight]},{type:"int32",data:[l.outWidth]},{type:"float32",data:[d]}];return t.runWebGPUProgram(m,[n],a.dtype,f)}var lV={kernelName:Ri,backendName:"webgpu",kernelFunc:fue};function hue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s;fm([n,s],"avgPoolGrad");let{filterSize:i,strides:p,pad:u}=o,c=w.computePool2DInfo(a.shape,i,p,1,u),l=new ix(c),m=1/(c.filterHeight*c.filterWidth),d=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.effectiveFilterHeight-1-c.padInfo.top,c.effectiveFilterWidth-1-c.padInfo.left]},{type:"int32",data:[c.dilationHeight,c.dilationWidth]},{type:"int32",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"float32",data:[m]}];return t.runWebGPUProgram(l,[n],a.dtype,d)}var mV={kernelName:$i,backendName:"webgpu",kernelFunc:hue};function gue(r){let{inputs:e,backend:t,attrs:o}=r,{a:n,b:s}=e,{transposeA:a,transposeB:i}=o;return $p({a:n,b:s,transposeA:a,transposeB:i,backend:t})}var dV={kernelName:Zo,backendName:"webgpu",kernelFunc:gue};var px=class{constructor(e,t){this.variableNames=["source"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.rank=t.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.start=e,this.uniforms=`start : ${ft(e.length)}, `,this.shaderKey="slice"}getUserCode(){let e=ft(this.rank),t=xue(this.rank),o;return this.start.length===1?o=this.outputShape.map((s,a)=>"sourceLoc = uniforms.start + coords;"):o=this.outputShape.map((s,a)=>`sourceLoc.${o0[a]} = uniforms.start.${Oo(a)} + coords.${o0[a]};`),` ${G("index")} { if (index < uniforms.size) { var sourceLoc : ${e}; @@ -6273,16 +6273,16 @@ return a / b;`,hre=` setOutputAtIndex(index, getSource(${t})); } } - `}},Wv=["x","y","z","w","u","v"];function Kpe(r){if(r===1)return"sourceLoc";if(r<=6)return Wv.slice(0,r).map(e=>`sourceLoc.${e}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function ea(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=nt.parseSliceParams(n,s,a);if(nt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype==="string"){let c=t.tensorMap.get(n.dataId),m=nW(c.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new Sx(i,p),l=[{type:"int32",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,l)}var AW={kernelName:_s,backendName:"webgpu",kernelFunc:ea};var qpe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,w)=>b*w),p=C.getReshaped(n.shape,s,i),u=C.getPermuted(p.length,s.length),l=C.getReshapedPermuted(n.shape,s,i),c=C.getSliceBeginCoords(a,s.length),m=C.getSliceSize(l,a,s.length),d=[],f=le({inputs:{x:n},backend:t,attrs:{shape:p}}),h=Cr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=le({inputs:{x:h},backend:t,attrs:{shape:l}}),x=ea({inputs:{x:g},backend:t,attrs:{begin:c,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},FW={kernelName:ia,backendName:"webgpu",kernelFunc:qpe};var jpe=` + `}},o0=["x","y","z","w","u","v"];function xue(r){if(r===1)return"sourceLoc";if(r<=6)return o0.slice(0,r).map(e=>`sourceLoc.${e}`).join(",");throw Error(`Slicing for rank ${r} is not yet supported`)}function Hs(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,size:a}=o,[i,p]=pt.parseSliceParams(n,s,a);if(pt.assertParamsValid(n,i,p),t.shouldExecuteOnCPU([n])||n.dtype==="string"){let l=t.tensorMap.get(n.dataId),m=Bz(l.values,i,p,n.shape,n.dtype);return t.makeTensorInfo(p,n.dtype,m)}if(y.sizeFromShape(p)===0)return t.makeTensorInfo(p,n.dtype,[]);let u=new px(i,p),c=[{type:"int32",data:i}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var fV={kernelName:ha,backendName:"webgpu",kernelFunc:Hs};var yue=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,crops:a}=o;y.assert(n.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=w.getReshaped(n.shape,s,i),u=w.getPermuted(p.length,s.length),c=w.getReshapedPermuted(n.shape,s,i),l=w.getSliceBeginCoords(a,s.length),m=w.getSliceSize(c,a,s.length),d=[],f=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),h=xr({inputs:{x:f},backend:t,attrs:{perm:u}}),g=pe({inputs:{x:h},backend:t,attrs:{shape:c}}),x=Hs({inputs:{x:g},backend:t,attrs:{begin:l,size:m}});return d.push(f),d.push(h),d.push(g),d.forEach(b=>t.disposeData(b.dataId)),x},hV={kernelName:Js,backendName:"webgpu",kernelFunc:yue};var bue=` fn bincount_write(index: i32, value: f32) { - ${oo("&result[index]","value","float32")} + ${Qr("&result[index]","value","float32")} } -`,Xpe=` +`,Cue=` fn bincount_write(index: i32, value: f32) { atomicStore(&result[index], bitcast(value)); } -`,nc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` - ${this.binaryOutput?Xpe:jpe} +`,Qc=class{constructor(e,t,o=!1){this.outputShape=[],this.variableNames=["x"],this.uniforms="binCountSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.hasWeights=!0,this.binaryOutput=!1,this.outputShape=e,this.rank=e.length,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.binaryOutput=o,o&&(this.atomic=!1),this.hasWeights=t,this.hasWeights&&this.variableNames.push("w"),this.shaderKey=`bincount_${this.hasWeights}_${this.binaryOutput}_${this.rank}`}getUserCode(){return` + ${this.binaryOutput?Cue:bue} ${G("index")} { ${this.rank===1?`if (index < uniforms.xShape) { let indexVal = i32(getX(index)); @@ -6299,7 +6299,7 @@ return a / b;`,hre=` } }`} } - `}};function Ype(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,l=[a],c=s.dtype,m=Nt({backend:t,attrs:{shape:l,value:0,dtype:c}}),d=new nc([i],u),f=[{type:"int32",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,c,f,m)}var PW={kernelName:Tn,backendName:"webgpu",kernelFunc:Ype};var Ix=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` + `}};function wue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a}=o,i=y.sizeFromShape(n.shape),u=y.sizeFromShape(s.shape)>0,c=[a],l=s.dtype,m=vt({backend:t,attrs:{shape:c,value:0,dtype:l}}),d=new Qc([i],u),f=[{type:"int32",data:[a]}],h=u?[n,s]:[n];return t.runWebGPUProgram(d,h,l,f,m)}var gV={kernelName:Jo,backendName:"webgpu",kernelFunc:wue};var cx=class{constructor(e){this.outputShape=[],this.variableNames=["s0","s1"],this.uniforms="s0Size : i32, s1Size : i32, ",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="broadcastArgs"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { var s0 = 1.0; @@ -6324,7 +6324,7 @@ return a / b;`,hre=` } } } - `}};function Qpe(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let l=t.tensorMap.get(o.dataId),c=t.tensorMap.get(n.dataId),m=l.values,d=c.values,f=C.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],"int32",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new Ix(i),u=[{type:"int32",data:[s]},{type:"int32",data:[a]}];return t.runWebGPUProgram(p,[o,n],"int32",u)}var OW={kernelName:ua,backendName:"webgpu",kernelFunc:Qpe};var Uv=tt({opType:fe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:ZV}),MW={kernelName:Ro,backendName:"webgpu",kernelFunc:Uv};function Fi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return Pt({inputs:{x:n.complexTensorInfos.real},backend:t})}var LW={kernelName:si,backendName:"webgpu",kernelFunc:Fi};function BW(r,e){let t=new so(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function Gv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return Pt({inputs:{x:n},backend:t});let a=Yr(n.shape),i=Gv({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=Uo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=Fi({inputs:{input:n},backend:t}),i=Gv({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=Pt({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=DV(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return BW(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=Uv({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var zW={kernelName:ho,backendName:"webgpu",kernelFunc:Gv};var Zpe=ye({opType:Z.CEIL,cpuKernelImpl:AV}),VW={kernelName:go,backendName:"webgpu",kernelFunc:Zpe};var vx=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` + `}};function Sue(r){let{inputs:e,backend:t}=r,{s0:o,s1:n}=e;if(t.shouldExecuteOnCPU([o,n])){let c=t.tensorMap.get(o.dataId),l=t.tensorMap.get(n.dataId),m=c.values,d=l.values,f=w.assertAndGetBroadcastShape(Array.from(m),Array.from(d));return t.makeTensorInfo([f.length],"int32",Int32Array.from(f))}let s=y.sizeFromShape(o.shape),a=y.sizeFromShape(n.shape),i=Math.max(s,a),p=new cx(i),u=[{type:"int32",data:[s]},{type:"int32",data:[a]}];return t.runWebGPUProgram(p,[o,n],"int32",u)}var xV={kernelName:ea,backendName:"webgpu",kernelFunc:Sue};var n0=et({opType:fe.NOT_EQUAL,dtype:"bool",cpuKernelImpl:Az}),yV={kernelName:Yn,backendName:"webgpu",kernelFunc:n0};function vi(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.real},backend:t})}var bV={kernelName:Hi,backendName:"webgpu",kernelFunc:vi};function CV(r,e){let t=new Jr(r.shape,Z.TO_INT),o=e.runWebGPUProgram(t,[r],"int32");return{dataId:o.dataId,shape:o.shape,dtype:o.dtype}}function s0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dtype:s}=o;if(s==="complex64"){if(n.dtype==="complex64")return At({inputs:{x:n},backend:t});let a=Gr(n.shape),i=s0({inputs:{x:n},backend:t,attrs:{dtype:"float32"}}),p=xo({inputs:{real:i,imag:a},backend:t});return a.dispose(),t.disposeData(i.dataId),p}if(n.dtype==="complex64"){let a=vi({inputs:{input:n},backend:t}),i=s0({inputs:{x:a},backend:t,attrs:{dtype:s}});return t.disposeData(a.dataId),i}if(!y.hasEncodingLoss(n.dtype,s)){let a=At({inputs:{x:n},backend:t});return{dataId:a.dataId,shape:a.shape,dtype:s}}if(t.shouldExecuteOnCPU([n])){let a=t.tensorMap.get(n.dataId).values,[i,p,u]=dz(a,n.shape,n.dtype,s);return t.makeTensorInfo(i,p,u)}if(s==="int32")return CV(n,t);if(s==="bool"){let a=t.makeTensorInfo([],"bool",y.getTypedArrayFromDType("bool",1)),p=n0({inputs:{a:n,b:a},backend:t});return t.disposeData(a.dataId),p}throw new Error(`Error in Cast: failed to cast ${n.dtype} to ${s}`)}var wV={kernelName:yo,backendName:"webgpu",kernelFunc:s0};var Iue=ye({opType:Z.CEIL,cpuKernelImpl:fz}),SV={kernelName:en,backendName:"webgpu",kernelFunc:Iue};var lx=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workPerThread=4,this.workgroupSize=[64,1,1],this.outputComponent=4,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.shaderKey="clipVec4"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6334,7 +6334,7 @@ return a / b;`,hre=` setOutputAtIndex(index, clampedValue); } } - `}};var kx=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` + `}};var mx=class{constructor(e){this.variableNames=["A"],this.uniforms="minVal : f32, maxVal : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="clip"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let value = getAByOutputIndex(index); @@ -6345,7 +6345,7 @@ return a / b;`,hre=` setOutputAtIndex(index, clamp(value, uniforms.minVal, uniforms.maxVal)); } } - `}};function Jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:"float32",data:[s]},{type:"float32",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new vx(n.shape):i=new kx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var WW={kernelName:Go,backendName:"webgpu",kernelFunc:Jpe};var Nx=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` + `}};function vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{clipValueMin:s,clipValueMax:a}=o,i,p=[{type:"float32",data:[s]},{type:"float32",data:[a]}];return y.sizeFromShape(n.shape)%4===0?i=new lx(n.shape):i=new mx(n.shape),t.runWebGPUProgram(i,[n],n.dtype,p)}var IV={kernelName:bo,backendName:"webgpu",kernelFunc:vue};var dx=class{constructor(e){this.outputShape=[],this.variableNames=["real","imag"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="complexAbs"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let re = abs(getRealByOutputIndex(index)); @@ -6357,7 +6357,7 @@ return a / b;`,hre=` setOutputAtIndex(index, select(mx * length(vec2(1, min(re, im)/mx)), 0.0, mx == 0.0)); } } - `}};function UW(r,e){return{dataId:e.dataId,dtype:e.dtype,shape:r.shape}}function ele(r){let{inputs:e,backend:t}=r,{x:o}=e,n=t.tensorMap.get(o.dataId),s=new Nx(o.shape),a=[UW(o,n.complexTensorInfos.real),UW(o,n.complexTensorInfos.imag)];return t.runWebGPUProgram(s,a,a[0].dtype)}var GW={kernelName:Wi,backendName:"webgpu",kernelFunc:ele};var Tx=class{constructor(e){this.uniforms="",this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((t,o)=>`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;s`T${o}`),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]),this.offsetLength=e.length-1;for(let t=0;t0){e.push("if (yC < uniforms.offset0){ setOutputAtCoords(coords.x, coords.y, getT0(yR, yC)); }");for(let s=1;sFi({inputs:{input:w},backend:t})),h=r.map(w=>Mp({inputs:{input:w},backend:t})),g=sc(f,e,t),x=sc(h,e,t),b=Uo({inputs:{real:g,imag:x},backend:t});return f.forEach(w=>t.disposeData(w.dataId)),h.forEach(w=>t.disposeData(w.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let f=r.map(k=>{let E=[-1,y.sizeFromShape(k.shape.slice(e))];return le({inputs:{x:k},backend:t,attrs:{shape:E}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=C.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=FV(h,g,o,x),w=C.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(w,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new Tx(p),l=[],c=new Array(p.length-1);if(c.length>0){c[0]=p[0][1],l.push({type:"int32",data:[c[0]]});for(let f=1;ft.disposeData(f.dataId));let d=le({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function tle(r,e,t){let o=C.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>le({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function Hv(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);C.assertParamsConsistent(a,s);let i=C.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?Pt({inputs:{x:p[0]},backend:t}):sc(p,s,t)}var KW={kernelName:pa,backendName:"webgpu",kernelFunc:Hv};function rle(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let l=D=>{switch(D){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${D} is not supported.`)}},c=D=>{switch(D){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${D} is not supported.`)}},m=r?` + `}};function Rp(r){let{inputs:e,backend:t}=r,{input:o}=e,n=t.tensorMap.get(o.dataId);return At({inputs:{x:n.complexTensorInfos.imag},backend:t})}var NV={kernelName:Wi,backendName:"webgpu",kernelFunc:Rp};function Zc(r,e,t){let o=r[0].dtype;if(o==="complex64"){let f=r.map(C=>vi({inputs:{input:C},backend:t})),h=r.map(C=>Rp({inputs:{input:C},backend:t})),g=Zc(f,e,t),x=Zc(h,e,t),b=xo({inputs:{real:g,imag:x},backend:t});return f.forEach(C=>t.disposeData(C.dataId)),h.forEach(C=>t.disposeData(C.dataId)),t.disposeData(g.dataId),t.disposeData(x.dataId),b}let n=t.shouldExecuteOnCPU(r);if(o==="string"&&(n=!0),n){let f=r.map(k=>{let $=[-1,y.sizeFromShape(k.shape.slice(e))];return pe({inputs:{x:k},backend:t,attrs:{shape:$}})}),h=f.map(k=>({vals:t.readSync(k.dataId),shape:k.shape})),g=w.computeOutShape(f.map(k=>k.shape),1),x=f[0].shape[0]===1,b=hz(h,g,o,x),C=w.computeOutShape(r.map(k=>k.shape),e),S=t.makeTensorInfo(C,o,b);return f.forEach(k=>t.disposeData(k.dataId)),S}let s=t.device.limits.maxStorageBuffersPerShaderStage-1;if(r.length>s){let f=[];for(let g=0;gf.shape),u=new fx(p),c=[],l=new Array(p.length-1);if(l.length>0){l[0]=p[0][1],c.push({type:"int32",data:[l[0]]});for(let f=1;ft.disposeData(f.dataId));let d=pe({inputs:{x:m},backend:t,attrs:{shape:i}});return t.disposeData(m.dataId),d}function Nue(r,e,t){let o=w.computeOutShape(r.map(s=>s.shape),e);return{tensors2D:r.map(s=>pe({inputs:{x:s},backend:t,attrs:{shape:[y.sizeFromShape(s.shape.slice(0,e)),y.sizeFromShape(s.shape.slice(e))]}})),outShape:o}}function a0(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o,s=y.parseAxisParam(n,e[0].shape)[0],a=e.map(u=>u.shape);w.assertParamsConsistent(a,s);let i=w.computeOutShape(e.map(u=>u.shape),s);if(y.sizeFromShape(i)===0)return t.makeTensorInfo(i,e[0].dtype,[]);let p=e.filter(u=>y.sizeFromShape(u.shape)>0);return p.length===1?At({inputs:{x:p[0]},backend:t}):Zc(p,s,t)}var TV={kernelName:ta,backendName:"webgpu",kernelFunc:a0};function Tue(r,e,t,o,n=!1,s=null,a=!1,i=4,p=4,u=4){let c=D=>{switch(D){case 1:return"resData = f32(x[xIndex]);";case 3:return"resData = vec3(x[xIndex], x[xIndex + 1], x[xIndex + 2]);";case 4:return"resData = vec4(x[xIndex / 4]);";default:throw new Error(`innerElementSize ${D} is not supported.`)}},l=D=>{switch(D){case 1:return"return f32(W[row * uniforms.wShape[3] + col]);";case 4:return"return vec4(W[(row * uniforms.wShape[3] + col) / 4]);";default:throw new Error(`innerElementSize ${D} is not supported.`)}},m=r?` let coord = vec4(batch, xRow, xCol, xCh); `:` let coord = vec4(batch, xCh, xRow, xCol); @@ -6404,9 +6404,9 @@ return a / b;`,hre=` if (xRow >= 0 && xRow < ${f} && xCol >= 0 && xCol < ${h}) { ${m} let xIndex = getIndexFromCoords4D(coord, uniforms.xShape); - ${l(i)} + ${c(i)} } - return resData;`,w=r?e&&o?` + return resData;`,C=r?e&&o?` ${b}`:` if (row < uniforms.dimAOuter && col < uniforms.dimInner) { ${b} @@ -6416,14 +6416,14 @@ return a / b;`,hre=` if (row < uniforms.dimInner && col < uniforms.dimBOuter) { ${b} } - return ${Ae(i)}(0.0);`,S=`${c(p)}`,k=Ae(u),T=r?Ae(i):Ae(p),E=r?Ae(p):Ae(i);return` - ${gr(s,a,u===4,4)} - fn mm_readA(batch: i32, row : i32, col : i32) -> ${T} { - ${r?w:S} + return ${Ae(i)}(0.0);`,S=`${l(p)}`,k=Ae(u),_=r?Ae(i):Ae(p),$=r?Ae(p):Ae(i);return` + ${dr(s,a,u===4,4)} + fn mm_readA(batch: i32, row : i32, col : i32) -> ${_} { + ${r?C:S} } - fn mm_readB(batch: i32, row : i32, col : i32) -> ${E} { - ${r?S:w} + fn mm_readB(batch: i32, row : i32, col : i32) -> ${$} { + ${r?S:C} } fn mm_write(batch: i32, row : i32, col : i32, valueIn : ${k}) { @@ -6432,14 +6432,14 @@ return a / b;`,hre=` var value = valueIn; let outWidth = ${r?"uniforms.outShape[2]":"uniforms.outShape[3]"}; ${d} - ${no(n,s)} + ${Zr(n,s)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } - }`}var _x=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=ym(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=bm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Pp(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` - ${rle(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} + }`}var hx=class{constructor(e,t,o,n,s=!1,a=null,i=!1,p=!1){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, dilations : vec2, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=((e.inChannels%4===0||e.inChannels%3===0)&&this.isChannelsLast||e.outWidth%4===0&&!this.isChannelsLast)&&e.outChannels%4===0,this.dispatchLayout=this.isChannelsLast?{x:[3],y:[1,2],z:[0]}:{x:[2,3],y:[1],z:[0]},this.workgroupSize=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4?(this.outputComponent=4,this.isChannelsLast&&e.inChannels%4!==0?(this.innerElementSize=3,this.variableComponents=[1,4]):(this.innerElementSize=4,this.variableComponents=[4,4]),s&&(this.variableNames.push("bias"),this.variableComponents.push(4)),i&&(this.variableNames.push("preluActivationWeights"),this.variableComponents.push(4))):(this.innerElementSize=this.elementsPerThread[0],s&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights")),this.sequentialAccessByThreads=p,this.addBias=s,this.activation=a,this.hasPreluActivationWeights=i,this.tileAOuter=this.workgroupSize[1]*this.elementsPerThread[1],this.tileBOuter=this.workgroupSize[0]*this.elementsPerThread[0],this.tileInner=Math.max(this.workgroupSize[0]*this.innerElementSize,this.workgroupSize[1]),this.fitAOuter=t%this.tileAOuter===0,this.fitBOuter=o%this.tileBOuter===0,this.fitInner=n%this.tileInner===0,this.shaderKey=`conv2DMM_${this.elementsPerThread}_${this.activation}}_${this.fitAOuter}_${this.fitBOuter}_${this.fitInner}_${this.isVec4}_${this.innerElementSize}_${this.isChannelsLast}_${this.sequentialAccessByThreads}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner):Ep(this.elementsPerThread,this.workgroupSize,!this.isChannelsLast,this.tileInner,!1,null,this.sequentialAccessByThreads),t=this.isVec4?[this.innerElementSize,4,4]:[1,1,1];return` + ${Tue(this.isChannelsLast,this.fitAOuter,this.fitBOuter,this.fitInner,this.addBias,this.activation,this.hasPreluActivationWeights,t[0],t[1],t[2])} ${e} - `}};var Ex=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` - ${gr(this.activation,this.hasPreluActivationWeights,!1,4)} + `}};var gx=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2,",this.workgroupSize=[4,4,8],this.outputShape=e.outShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.dispatchLayout=this.isChannelsLast?{x:[2],y:[1],z:[0,3]}:{x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.addBias=t,this.activation=o,this.hasPreluActivationWeights=n,t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.shaderKey=`conv2dnaive_${this.activation}_${this.isChannelsLast}`}getUserCode(){return` + ${dr(this.activation,this.hasPreluActivationWeights,!1,4)} fn readInp(batch : i32, row : i32, col : i32, chan : i32) -> f32{ let coords = vec4(batch, row, col, chan); if (coordsInBounds4D(coords, uniforms.xShape)) { @@ -6460,7 +6460,7 @@ return a / b;`,hre=` let coords = ${this.isChannelsLast?"vec4(batch, row, col, chan);":"vec4(batch, chan, row, col);"} if (coordsInBounds4D(coords, uniforms.outShape)) { var value = valueIn; - ${no(this.addBias,this.activation)} + ${Zr(this.addBias,this.activation)} setOutputAtCoords(coords.x, coords.y, coords.z, coords.w, value); } } @@ -6484,7 +6484,7 @@ return a / b;`,hre=` } writeResult(batch, outRow, outCol, outChannel, acc); } - `}};var $x=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, + `}};var xx=class{constructor(e,t){this.variableNames=["x"],this.uniforms=`pads : vec2, strides : vec2, dilations : vec2, outWidth : i32, itemsPerBlockRow : i32, inChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=t,this.shaderKey=`im2col_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?"coords[1]":"coords[2]",n=this.isChannelsLast?"coords[2]":"coords[1]",s=this.isChannelsLast?"getX(batch, xRow, xCol, ch)":"getX(batch, ch, xRow, xCol)";return` ${G("index")} { let coords = getCoordsFromIndex(index); @@ -6508,7 +6508,7 @@ return a / b;`,hre=` setOutputAtIndex(index, value); } } - `}};function Rx(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function ole({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat==="channelsLast",u=!p,l=!1,c=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=[],d,f;if(c){let x=t.inHeight*t.inWidth*t.inChannels;d=le({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=le({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=le({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=le({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=Rx(s.shape,p);x!=null&&(s=le({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=Rx(n.shape,p);x!=null&&(n=le({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=Op({a:p?d:f,b:p?f:d,transposeA:u,transposeB:l,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=le({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function nle({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:l,strideWidth:c,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,w=b==="channelsLast",S=p*u*l,k=h*f,T=w?[t.batchSize,k,S]:[t.batchSize,S,k],E=new $x(T,w),R=[{type:"int32",data:[d.top,d.left]},{type:"int32",data:[m,c]},{type:"int32",data:[x,g]},{type:"int32",data:[f]},{type:"int32",data:[l*p]},{type:"int32",data:[l]}],D=o.runWebGPUProgram(E,[r],r.dtype,R),F=[];F.push(D);let O=le({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(F.push(O),s!=null){let U=Rx(s.shape,w);U!=null&&(s=le({inputs:{x:s},backend:o,attrs:{shape:U}}),F.push(s))}if(n!=null){let U=Rx(n.shape,w);U!=null&&(n=le({inputs:{x:n},backend:o,attrs:{shape:U}}),F.push(n))}let B=Op({a:w?D:O,b:w?O:D,transposeA:!w,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=le({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});F.push(B);for(let U of F)o.disposeData(U.dataId);return z}function Dx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,l=t.dataFormat==="channelsLast",c=l&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(c||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type==="SAME"||t.padInfo.type==="VALID")))return ole({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||h<=f)return nle({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:"int32",data:[t.filterHeight,t.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[t.strideHeight,t.strideWidth]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new Ex(t,p,i,u);else{let T=l?t.outHeight*t.outWidth:t.outChannels,E=l?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:"int32",data:[T]},{type:"int32",data:[E]},{type:"int32",data:[R]});let D=o.adapterInfo.isIntel();g=new _x(t,T,E,R,p,i,u,D)}let w=[],S=[r,e];p&&(!l&&n.shape.length===1&&(n=le({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),w.push(n)),S.push(n)),u&&(!l&&s.shape.length===1&&(s=le({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),w.push(s)),S.push(s)),i==="leakyrelu"&&(b.push({type:"float32",data:[a]}),g.uniforms+=" alpha : f32,");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let T of w)o.disposeData(T.dataId);return k}function sle(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=t,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,s.shape,a,u,i,l,!1,c);return Dx({x:n,filter:s,convInfo:m,backend:o})}var qW={kernelName:En,backendName:"webgpu",kernelFunc:sle};var Ax=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=` + `}};function yx(r,e){let t=r.length;return t>=3?e?[...r.slice(0,-3),r[t-3]*r[t-2],r[t-1]]:[...r.slice(0,-3),r[t-3],r[t-2]*r[t-1]]:!e&&t===1&&r[0]>1?[r[0],1]:null}function _ue({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=t.dataFormat==="channelsLast",u=!p,c=!1,l=p&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=[],d,f;if(l){let x=t.inHeight*t.inWidth*t.inChannels;d=pe({inputs:{x:r},backend:o,attrs:{shape:[1,t.batchSize,x]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,x,t.outChannels]}})}else d=pe({inputs:{x:r},backend:o,attrs:{shape:p?[t.batchSize,t.inHeight*t.inWidth,t.inChannels]:[t.batchSize,t.inChannels,t.inHeight*t.inWidth]}}),f=pe({inputs:{x:e},backend:o,attrs:{shape:[1,t.inChannels,t.outChannels]}});if(m.push(d),m.push(f),s!=null){let x=yx(s.shape,p);x!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:x}}),m.push(s))}if(n!=null){let x=yx(n.shape,p);x!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:x}}),m.push(n))}let h=$p({a:p?d:f,b:p?f:d,transposeA:u,transposeB:c,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),g=pe({inputs:{x:h},backend:o,attrs:{shape:t.outShape}});m.push(h);for(let x of m)o.disposeData(x.dataId);return g}function Eue({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let{filterWidth:p,filterHeight:u,inChannels:c,strideWidth:l,strideHeight:m,padInfo:d,outWidth:f,outHeight:h,dilationWidth:g,dilationHeight:x,dataFormat:b}=t,C=b==="channelsLast",S=p*u*c,k=h*f,_=C?[t.batchSize,k,S]:[t.batchSize,S,k],$=new xx(_,C),R=[{type:"int32",data:[d.top,d.left]},{type:"int32",data:[m,l]},{type:"int32",data:[x,g]},{type:"int32",data:[f]},{type:"int32",data:[c*p]},{type:"int32",data:[c]}],D=o.runWebGPUProgram($,[r],r.dtype,R),P=[];P.push(D);let O=pe({inputs:{x:e},backend:o,attrs:{shape:[1,S,-1]}});if(P.push(O),s!=null){let U=yx(s.shape,C);U!=null&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:U}}),P.push(s))}if(n!=null){let U=yx(n.shape,C);U!=null&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:U}}),P.push(n))}let B=$p({a:C?D:O,b:C?O:D,transposeA:!C,transposeB:!1,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a}),z=pe({inputs:{x:B},backend:o,attrs:{shape:t.outShape}});P.push(B);for(let U of P)o.disposeData(U.dataId);return z}function bx({x:r,filter:e,convInfo:t,backend:o,bias:n=null,preluActivationWeights:s=null,leakyreluAlpha:a=0,activation:i=null}){let p=n!=null,u=s!=null,c=t.dataFormat==="channelsLast",l=c&&t.filterHeight===t.inHeight&&t.filterWidth===t.inWidth&&t.padInfo.type==="VALID",m=A().getBool("WEBGPU_USE_NAIVE_CONV2D_DEBUG");if(!m&&(l||t.filterHeight===1&&t.filterWidth===1&&t.dilationHeight===1&&t.dilationWidth===1&&t.strideHeight===1&&t.strideWidth===1&&(t.padInfo.type==="SAME"||t.padInfo.type==="VALID")))return _ue({x:r,filter:e,convInfo:t,backend:o,bias:n,activation:i,preluActivationWeights:s,leakyreluAlpha:a});let d=A().getNumber("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL"),f=d>-1?d:o.thresholdToIncreaseWorkgroups,h=t.batchSize*Math.ceil(t.outHeight*t.outWidth/32)*Math.ceil(t.outChannels/32);if(A().getBool("WEBGPU_CONV_SEPARATE_IM2COL_SHADER")||h<=f)return Eue({x:r,filter:e,convInfo:t,backend:o,bias:n,preluActivationWeights:s,leakyreluAlpha:a,activation:i});let g,x=[t.padInfo.top,t.padInfo.left],b=[{type:"int32",data:[t.filterHeight,t.filterWidth]},{type:"int32",data:[...x]},{type:"int32",data:[t.strideHeight,t.strideWidth]},{type:"int32",data:[t.dilationHeight,t.dilationWidth]}];if(m)g=new gx(t,p,i,u);else{let _=c?t.outHeight*t.outWidth:t.outChannels,$=c?t.outChannels:t.outHeight*t.outWidth,R=t.filterHeight*t.filterWidth*t.inChannels;b.push({type:"int32",data:[_]},{type:"int32",data:[$]},{type:"int32",data:[R]});let D=o.adapterInfo.isIntel();g=new hx(t,_,$,R,p,i,u,D)}let C=[],S=[r,e];p&&(!c&&n.shape.length===1&&(n=pe({inputs:{x:n},backend:o,attrs:{shape:[n.shape[0],1,1]}}),C.push(n)),S.push(n)),u&&(!c&&s.shape.length===1&&(s=pe({inputs:{x:s},backend:o,attrs:{shape:[s.shape[0],1,1]}}),C.push(s)),S.push(s)),i==="leakyrelu"&&(b.push({type:"float32",data:[a]}),g.uniforms+=" alpha : f32,");let k=o.runWebGPUProgram(g,S,r.dtype,b);for(let _ of C)o.disposeData(_.dataId);return k}function $ue(r){let{inputs:e,attrs:t,backend:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=t,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,s.shape,a,u,i,c,!1,l);return bx({x:n,filter:s,convInfo:m,backend:o})}var _V={kernelName:tn,backendName:"webgpu",kernelFunc:$ue};var Cx=class{constructor(e){this.variableNames=["dy","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4,",this.workgroupSize=[64,1,1],this.size=!1,this.isVec4=!1,this.workPerThread=1,this.outputShape=e.inShape,this.isChannelsLast=e.dataFormat==="channelsLast",this.isVec4=this.isChannelsLast&&e.outChannels%4===0&&e.inChannels%4===0,this.isVec4?(this.workPerThread=2,this.outputComponent=4,this.workgroupSize=[4,4,4],this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[4,this.workPerThread,1])):(this.size=!0,this.workPerThread=1,this.workgroupSize=[64,1,1],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize)),this.shaderKey=`conv2DDerInput_${this.isChannelsLast}_${this.isVec4}_${this.workPerThread}`}getUserCode(){let e=this.isChannelsLast?1:2,t=this.isChannelsLast?2:3,o=this.isChannelsLast?3:1,n=` ${G()} { let batch = i32(globalId.z) / uniforms.outShape[1]; let r = i32(globalId.z) % uniforms.outShape[1]; @@ -6651,7 +6651,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},Fx=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` + `}},wx=class{constructor(e){this.variableNames=["x","dy"],this.uniforms="pads : vec2, strides : vec2, batchSize : i32, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",this.shaderKey=`conv2DDerFilter_${this.isChannelsLast}`}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6692,7 +6692,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},Px=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, + `}},Sx=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`pads : vec3, strides : vec3, batchSize : i32, outDepth : i32, outHeight : i32, outWidth : i32, inDepth : i32, inHeight : i32, inWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerFilter"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { @@ -6733,7 +6733,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},Ox=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, + `}},Ix=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`filterDims : vec3, pads : vec3, strides : vec3, outDepth : i32, outHeight : i32, outWidth : i32, outChannels : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3DDerInput"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { @@ -6787,7 +6787,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}};function ale(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:l}=o,c=C.convertConv2DDataFormat(p),m=C.computeConv2DInfo(n.shape,l,a,1,i,u,!1,c),d=new Fx(m),f=[{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]},{type:"int32",data:[m.inHeight]},{type:"int32",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var jW={kernelName:Ui,backendName:"webgpu",kernelFunc:ale};function ile(r=4){let e=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` + `}};function Rue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,dataFormat:p,dimRoundingMode:u,filterShape:c}=o,l=w.convertConv2DDataFormat(p),m=w.computeConv2DInfo(n.shape,c,a,1,i,u,!1,l),d=new wx(m),f=[{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]},{type:"int32",data:[m.inHeight]},{type:"int32",data:[m.inWidth]}];return t.runWebGPUProgram(d,[n,s],n.dtype,f)}var EV={kernelName:Fi,backendName:"webgpu",kernelFunc:Rue};function Due(r=4){let e=s=>{switch(s){case 1:return"return W[getIndexFromCoords4D(coord, uniforms.wShape)];";case 4:return` let coord1 = vec4(coordX, coordY, col + 1, rowInner); let coord2 = vec4(coordX, coordY, col + 2, rowInner); let coord3 = vec4(coordX, coordY, col + 3, rowInner); @@ -6847,10 +6847,10 @@ return a / b;`,hre=` col); result[getIndexFromCoords4D(outCoord, uniforms.outShape)/${r}] = value; } - }`}var Mx=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=ym(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=bm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?Fp(this.elementsPerThread,this.workgroupSize):Pp(this.elementsPerThread,this.workgroupSize);return` - ${ile(this.isVec4?4:1)} + }`}var vx=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims : vec2, pads : vec2, strides : vec2, outBackprop : vec4, dimAOuter : i32, dimBOuter : i32, dimInner : i32,",this.outputShape=e.inShape,y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),this.isVec4=e.inChannels%4===0&&e.outChannels%4===0,this.dispatchLayout={x:[3],y:[1,2],z:[0]},this.workgroupSize=lm(this.dispatchLayout,this.outputShape,this.isVec4),this.elementsPerThread=mm(this.dispatchLayout,this.outputShape,this.isVec4),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,this.elementsPerThread),this.isVec4&&(this.outputComponent=4,this.variableComponents=[4,1]),this.shaderKey=`conv2DDerInputMM_${this.isVec4}_${this.elementsPerThread}`}getUserCode(){let e=this.isVec4?_p(this.elementsPerThread,this.workgroupSize):Ep(this.elementsPerThread,this.workgroupSize);return` + ${Due(this.isVec4?4:1)} ${e} - `}};function ule(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(u),m=C.computeConv2DInfo(a,s.shape,i,1,p,l,!1,c),d=[{type:"int32",data:[m.filterHeight,m.filterWidth]},{type:"int32",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(A().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||m.dataFormat!=="channelsLast")f=new Ax(m);else{f=new Mx(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:"uint32",data:[h]},{type:"uint32",data:[g]},{type:"uint32",data:[x]})}return t.runWebGPUProgram(f,[n,s],"float32",d)}var XW={kernelName:$n,backendName:"webgpu",kernelFunc:ule};var Lx=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` + `}};function Aue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{inputShape:a,strides:i,pad:p,dataFormat:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(u),m=w.computeConv2DInfo(a,s.shape,i,1,p,c,!1,l),d=[{type:"int32",data:[m.filterHeight,m.filterWidth]},{type:"int32",data:[m.filterHeight-1-m.padInfo.top,m.filterWidth-1-m.padInfo.left]},{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.batchSize,m.outHeight,m.outWidth,m.outChannels]}],f;if(A().getBool("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE")||m.dataFormat!=="channelsLast")f=new Cx(m);else{f=new vx(m);let h=m.inHeight*m.inWidth,g=m.inChannels,x=m.filterHeight*m.filterWidth*m.outChannels;d.push({type:"uint32",data:[h]},{type:"uint32",data:[g]},{type:"uint32",data:[x]})}return t.runWebGPUProgram(f,[n,s],"float32",d)}var $V={kernelName:rn,backendName:"webgpu",kernelFunc:Aue};var kx=class{constructor(e){this.variableNames=["x","W"],this.uniforms="filterDims: vec3, pads: vec3, strides: vec3, dilations: vec3,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="conv3dnaive"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -6932,7 +6932,7 @@ return a / b;`,hre=` } setOutputAtIndex(index, dotProd); } - }`}};function ple(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeConv3DInfo(n.shape,s.shape,a,p,i),l=[u.padInfo.front,u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...l]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new Lx(u),d=pt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,c)}var YW={kernelName:Rn,backendName:"webgpu",kernelFunc:ple};function lle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=C.computeConv3DInfo(n.shape,p,a,1,i),l=new Px(u),c=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return t.runWebGPUProgram(l,[n,s],s.dtype,c)}var QW={kernelName:ti,backendName:"webgpu",kernelFunc:lle};function cle(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=C.computeConv3DInfo(p,s.shape,a,1,i),l=new Ox(u),c=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return t.runWebGPUProgram(l,[n,s],n.dtype,c)}var ZW={kernelName:Dn,backendName:"webgpu",kernelFunc:cle};var mle=ye({opType:Z.COS}),JW={kernelName:An,backendName:"webgpu",kernelFunc:mle};var dle=ye({opType:Z.COSH}),eU={kernelName:Fn,backendName:"webgpu",kernelFunc:dle};var Bx=class{constructor(e,t,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` + }`}};function Fue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeConv3DInfo(n.shape,s.shape,a,p,i),c=[u.padInfo.front,u.padInfo.top,u.padInfo.left],l=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[...c]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationDepth,u.dilationHeight,u.dilationWidth]}],m=new kx(u),d=dt(n.dtype,s.dtype);return t.runWebGPUProgram(m,[n,s],d,l)}var RV={kernelName:on,backendName:"webgpu",kernelFunc:Fue};function Pue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,pad:i,filterShape:p}=o,u=w.computeConv3DInfo(n.shape,p,a,1,i),c=new Sx(u),l=[{type:"int32",data:[u.padInfo.front,u.padInfo.top,u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.batchSize]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.inDepth]},{type:"int32",data:[u.inHeight]},{type:"int32",data:[u.inWidth]}];return t.runWebGPUProgram(c,[n,s],s.dtype,l)}var DV={kernelName:ja,backendName:"webgpu",kernelFunc:Pue};function Oue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,pad:i,inputShape:p}=o,u=w.computeConv3DInfo(p,s.shape,a,1,i),c=new Ix(u),l=[{type:"int32",data:[u.filterDepth,u.filterHeight,u.filterWidth]},{type:"int32",data:[u.filterDepth-1-u.padInfo.front,u.filterHeight-1-u.padInfo.top,u.filterWidth-1-u.padInfo.left]},{type:"int32",data:[u.strideDepth,u.strideHeight,u.strideWidth]},{type:"int32",data:[u.outDepth]},{type:"int32",data:[u.outHeight]},{type:"int32",data:[u.outWidth]},{type:"int32",data:[u.outChannels]}];return t.runWebGPUProgram(c,[n,s],n.dtype,l)}var AV={kernelName:nn,backendName:"webgpu",kernelFunc:Oue};var Mue=ye({opType:Z.COS}),FV={kernelName:sn,backendName:"webgpu",kernelFunc:Mue};var Lue=ye({opType:Z.COSH}),PV={kernelName:an,backendName:"webgpu",kernelFunc:Lue};var Nx=class{constructor(e,t,o,n){this.variableNames=["Image","Boxes","BoxInd"],this.uniforms="extrapolationValue : f32,",this.workgroupSize=[64,1,1],this.size=!0;let[s]=t;this.outputShape=[s,o[0],o[1],e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.methodId=n==="bilinear"?1:0,this.cropHeightBiggerThan1=this.outputShape[1]>1,this.cropWidthBiggerThan1=this.outputShape[2]>1,this.shaderKey=`cropAndResize_${this.methodId}_${this.cropHeightBiggerThan1}_${this.cropWidthBiggerThan1}`}getUserCode(){let[e,t]=["f32(uniforms.imageShape[1] - 1)","f32(uniforms.imageShape[2] - 1)"],[o,n,s]=this.cropHeightBiggerThan1?[`(${e} / f32(uniforms.outShape[1] - 1))`,"(y2-y1) * height_ratio",`y1*${e} + f32(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${e}`],[a,i,p]=this.cropWidthBiggerThan1?[`(${t} / f32(uniforms.outShape[2] - 1))`,"(x2-x1) * width_ratio",`x1*${t} + f32(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${t}`];return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -6988,23 +6988,23 @@ return a / b;`,hre=` } } } - `}};var fle=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,l=new Bx(n.shape[3],s.shape,i,p),c=[{type:"float32",data:[u]}];return t.runWebGPUProgram(l,[n,s,a],"float32",c)},tU={kernelName:Mn,backendName:"webgpu",kernelFunc:fle};var Lp;(function(r){r.Prod="*",r.Sum="+"})(Lp||(Lp={}));var Tm=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Lp.Prod?"1.0":"0.0",o=this.exclusive?t:`getX(${rU(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],s="",a="";return this.exclusive?(s=this.reverse?`end != ${n-1}`:"end != 0",a=this.reverse?"end + 1":"end - 1"):(s=this.reverse?`end + pow2 < ${n}`:"end >= pow2",a=this.reverse?"end + pow2":"end - pow2"),` + `}};var Bue=r=>{let{inputs:e,backend:t,attrs:o}=r,{image:n,boxes:s,boxInd:a}=e,{cropSize:i,method:p,extrapolationValue:u}=o,c=new Nx(n.shape[3],s.shape,i,p),l=[{type:"float32",data:[u]}];return t.runWebGPUProgram(c,[n,s,a],"float32",l)},OV={kernelName:cn,backendName:"webgpu",kernelFunc:Bue};var Dp;(function(r){r.Prod="*",r.Sum="+"})(Dp||(Dp={}));var xm=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="index : f32,",this.size=!0,this.workgroupSize=[128,1,1],this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.exclusive=o,this.reverse=n,this.op=e,this.shaderKey=`cum_${this.op}_${this.exclusive}_${this.reverse}`}getUserCode(){let e=this.outputShape.length,t=this.op===Dp.Prod?"1.0":"0.0",o=this.exclusive?t:`getX(${MV(e,"coords",this.op)})`,n=this.outputShape[this.outputShape.length-1],s="",a="";return this.exclusive?(s=this.reverse?`end != ${n-1}`:"end != 0",a=this.reverse?"end + 1":"end - 1"):(s=this.reverse?`end + pow2 < ${n}`:"end >= pow2",a=this.reverse?"end + pow2":"end - pow2"),` ${G("index")} { if (index < uniforms.size) { var coords = getCoordsFromIndex(index); - let end = ${oU(e,"coords",this.op)}; + let end = ${LV(e,"coords",this.op)}; var val = ${o}; let pow2 = i32(pow(2.0, uniforms.index)); if (${s}) { let idx = ${a}; - ${oU(e,"coords",this.op)} = idx; - val ${this.op}= getX(${rU(e,"coords",this.op)}); + ${LV(e,"coords",this.op)} = idx; + val ${this.op}= getX(${MV(e,"coords",this.op)}); } setOutputAtIndex(index, val); } } - `}};function rU(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function oU(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function zx(r,e,t,o,n,s){let a=e.shape.length,i=C.getAxesPermutation([o],a),p=e;i!=null&&(p=Cr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=C.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let l=p.shape[u],c=Pt({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(l))-1;m++){let d=new Tm(r,p.shape,!1,s),f=c,h=[{type:"float32",data:[m]}];c=t.runWebGPUProgram(d,[c],c.dtype,h),t.disposeData(f.dataId)}if(n){let m=new Tm(r,p.shape,n,s),d=c,f=[{type:"float32",data:[0]}];c=t.runWebGPUProgram(m,[c],c.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=C.getUndoAxesPermutation(i),d=Cr({inputs:{x:c},backend:t,attrs:{perm:m}});return t.disposeData(c.dataId),t.disposeData(p.dataId),d}return c}function hle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zx(Lp.Prod,n,t,s,a,i)}var nU={kernelName:Pn,backendName:"webgpu",kernelFunc:hle};function gle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return zx(Lp.Sum,n,t,s,a,i)}var sU={kernelName:On,backendName:"webgpu",kernelFunc:gle};function xle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,l=y.sizeFromShape(s.shape)>0,c=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=Nt({backend:t,attrs:{shape:d,value:0,dtype:c}}),h=new nc(m,l,i),g=[{type:"int32",data:[a]}],x=l?[n,s]:[n];return t.runWebGPUProgram(h,x,c,g,f)}var aU={kernelName:la,backendName:"webgpu",kernelFunc:xle};var Vx=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` + `}};function MV(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.x, ${e}.y`;if(r===3)return`${e}.x, ${e}.y, ${e}.z`;if(r===4)return`${e}.x, ${e}.y, ${e}.z, ${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function LV(r,e,t){if(r===1)return`${e}`;if(r===2)return`${e}.y`;if(r===3)return`${e}.z`;if(r===4)return`${e}.w`;throw Error(`Cumulative ${t} for rank ${r} is not yet supported`)}function Tx(r,e,t,o,n,s){let a=e.shape.length,i=w.getAxesPermutation([o],a),p=e;i!=null&&(p=xr({inputs:{x:e},backend:t,attrs:{perm:i}}));let u=w.getInnerMostAxes(1,a)[0];if(u!==a-1)throw new Error(`WebGPU cumprod shader expects an inner-most axis=${e.shape.length-1} but got axis=${o}`);let c=p.shape[u],l=At({inputs:{x:p},backend:t});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let d=new xm(r,p.shape,!1,s),f=l,h=[{type:"float32",data:[m]}];l=t.runWebGPUProgram(d,[l],l.dtype,h),t.disposeData(f.dataId)}if(n){let m=new xm(r,p.shape,n,s),d=l,f=[{type:"float32",data:[0]}];l=t.runWebGPUProgram(m,[l],l.dtype,f),t.disposeData(d.dataId)}if(i!=null){let m=w.getUndoAxesPermutation(i),d=xr({inputs:{x:l},backend:t,attrs:{perm:m}});return t.disposeData(l.dataId),t.disposeData(p.dataId),d}return l}function zue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Prod,n,t,s,a,i)}var BV={kernelName:un,backendName:"webgpu",kernelFunc:zue};function Vue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,exclusive:a,reverse:i}=o;return Tx(Dp.Sum,n,t,s,a,i)}var zV={kernelName:pn,backendName:"webgpu",kernelFunc:Vue};function Wue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,weights:s}=e,{size:a,binaryOutput:i}=o,p=n.shape.length===1,c=y.sizeFromShape(s.shape)>0,l=s.dtype,m=p?[n.shape[0]]:[n.shape[0],n.shape[1]],d=p?[a]:[n.shape[0],a],f=vt({backend:t,attrs:{shape:d,value:0,dtype:l}}),h=new Qc(m,c,i),g=[{type:"int32",data:[a]}],x=c?[n,s]:[n];return t.runWebGPUProgram(h,x,l,g,f)}var VV={kernelName:ra,backendName:"webgpu",kernelFunc:Wue};var _x=class{constructor(e,t){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.uniforms="blockSize : i32,",this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`depthToSpace_${t}`,this.dataFormat=t}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7024,8 +7024,8 @@ return a / b;`,hre=` let rlt = ${this.getInputSamplingString()}; setOutputAtIndex(index, rlt); } - }`}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"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function yle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],l=a==="NHWC"?n.shape[3]:n.shape[1],c=p*s,m=u*s,d=l/(s*s),f=a==="NHWC"?[i,c,m,d]:[i,d,c,m],h=[{type:"int32",data:[s]}],g=new Vx(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var iU={kernelName:Ln,backendName:"webgpu",kernelFunc:yle};var Wx=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` - ${gr(this.activation,this.hasPreluActivation,!1,4)} + }`}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"?"uniforms.outShape[3]":"uniforms.outShape[1]"}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function Uue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockSize:s,dataFormat:a}=o,i=n.shape[0],p=a==="NHWC"?n.shape[1]:n.shape[2],u=a==="NHWC"?n.shape[2]:n.shape[3],c=a==="NHWC"?n.shape[3]:n.shape[1],l=p*s,m=u*s,d=c/(s*s),f=a==="NHWC"?[i,l,m,d]:[i,d,l,m],h=[{type:"int32",data:[s]}],g=new _x(f,a);return t.runWebGPUProgram(g,[n],n.dtype,h)}var WV={kernelName:ln,backendName:"webgpu",kernelFunc:Uue};var Ex=class{constructor(e,t,o,n=!1,s=null,a=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2,",this.workgroupSize=[16,16,1],this.outputShape=e,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),n&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),this.addBias=n,this.activation=s,this.hasPreluActivation=a,this.filterHeight=t,this.filterWidth=o,this.shaderKey=`depthwiseNCHW_${this.activation}_${this.filterHeight}_${this.filterWidth}`}getUserCode(){let e=this.filterWidth*this.filterHeight,t=this.workgroupSize[0]*this.workgroupSize[1]*this.workgroupSize[2],o=this.workgroupSize[1]+this.filterHeight-1,n=this.workgroupSize[0]+this.filterWidth-1;return` + ${dr(this.activation,this.hasPreluActivation,!1,4)} var mm_Asub : array, ${o}>; var mm_Bsub : array, ${this.filterHeight}>; @@ -7081,13 +7081,13 @@ return a / b;`,hre=` value = fma(xVal, wVal, value); } } - ${no(this.addBias,this.activation)} + ${Zr(this.addBias,this.activation)} if (coordsInBounds4D(coords, uniforms.outShape)) { setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};var ac=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return` - ${gr(this.activation,this.hasPreluActivation,!0,4)} + `}};var Jc=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms="pads : vec2, inDims : vec2, virtualWidth : i32,",this.workgroupSize=[64,1,1],this.workPerThread=4,this.outputComponent=4,this.outputShape=e.outShape,this.virtualWidth=Math.ceil(this.outputShape[2]/this.workPerThread)*this.workPerThread;let s=[this.outputShape[0],this.outputShape[1],this.virtualWidth,this.outputShape[3]];this.dispatchLayout=X(s),this.dispatch=H(this.dispatchLayout,s,this.workgroupSize,[this.outputComponent*this.workPerThread,1,1]),y.assert(e.dataFormat==="channelsLast",()=>"TODO: NCHW is unimplemented"),t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwiseVec4_${o}_${this.convInfo.filterHeight}_${this.convInfo.filterWidth}_${this.convInfo.strideHeight}_${this.convInfo.strideWidth}_${this.workPerThread}`}getUserCode(){let e=(this.workPerThread-1)*this.convInfo.strideWidth+this.convInfo.filterWidth,t=this.convInfo.strideHeight,o=this.convInfo.strideWidth;return` + ${dr(this.activation,this.hasPreluActivation,!0,4)} fn readX(batch : i32, row : i32, col : i32, channel : i32) -> vec4 { var value = vec4(0.0); if (col >=0 && col < uniforms.inDims[1]) { @@ -7136,14 +7136,14 @@ return a / b;`,hre=` let coords = vec4(batch, r, c + i, d1); if (coordsInBounds4D(coords, uniforms.outShape)) { var value = dotProd[i]; - ${no(this.addBias,this.activation)} + ${Zr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } } - `}};var ic=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, + `}};var el=class{constructor(e,t=!1,o=null,n=!1){this.variableNames=["x","W"],this.uniforms=`pads : vec2, inDims : vec2, filterHeight : i32, filterWidth : i32, strides : vec2, dilations : vec2,`,this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.isChannelsLast=e.dataFormat==="channelsLast",t&&this.variableNames.push("bias"),n&&this.variableNames.push("preluActivationWeights"),this.convInfo=e,this.addBias=t,this.activation=o,this.hasPreluActivation=n,this.shaderKey=`depthwise_${this.activation}_${this.isChannelsLast}`}getUserCode(){let e=this.isChannelsLast?"getX(batch, xR, xC, d1);":"getX(batch, d1, xR, xC);";return` - ${gr(this.activation,this.hasPreluActivation,!1,4)} + ${dr(this.activation,this.hasPreluActivation,!1,4)} ${G("index")} { if (index < uniforms.size) { @@ -7204,11 +7204,11 @@ return a / b;`,hre=` } } } - ${no(this.addBias,this.activation)} + ${Zr(this.addBias,this.activation)} setOutputAtCoords(coords[0], coords[1], coords[2], coords[3], value); } } - `}};function ble(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:l}=o,c=C.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=C.computeConv2DInfo(n.shape,s.shape,a,m,i,l,!0,c),f=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inHeight,d.inWidth]}],h=d.dataFormat==="channelsLast",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new Wx(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?(g=new ac(d),f.push({type:"int32",data:[g.virtualWidth]})):(g=new ic(d),f.push({type:"int32",data:[d.filterHeight]},{type:"int32",data:[d.filterWidth]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var uU={kernelName:Bn,backendName:"webgpu",kernelFunc:ble};var Ux=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, + `}};function Gue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dataFormat:p,dilations:u,dimRoundingMode:c}=o,l=w.convertConv2DDataFormat(p),m=u;m==null&&(m=[1,1]);let d=w.computeConv2DInfo(n.shape,s.shape,a,m,i,c,!0,l),f=[{type:"int32",data:[d.padInfo.top,d.padInfo.left]},{type:"int32",data:[d.inHeight,d.inWidth]}],h=d.dataFormat==="channelsLast",g;return!h&&d.inHeight>16&&d.inWidth>16&&d.strideHeight===1&&d.strideWidth===1&&d.dilationWidth===1&&d.dilationHeight===1&&d.inChannels===d.outChannels?g=new Ex(d.outShape,d.filterHeight,d.filterWidth):h&&d.outHeight>4&&d.outWidth>4&&d.strideWidth<=2&&d.inChannels===d.outChannels&&d.dilationHeight===1&&d.dilationWidth===1&&d.inChannels%4===0?(g=new Jc(d),f.push({type:"int32",data:[g.virtualWidth]})):(g=new el(d),f.push({type:"int32",data:[d.filterHeight]},{type:"int32",data:[d.filterWidth]},{type:"int32",data:[d.strideHeight,d.strideWidth]},{type:"int32",data:[d.dilationHeight,d.dilationWidth]})),t.runWebGPUProgram(g,[n,s],n.dtype,f)}var UV={kernelName:mn,backendName:"webgpu",kernelFunc:Gue};var $x=class{constructor(e){this.variableNames=["x","dy"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, inHeight : i32, inWidth : i32, batchSize : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_filter"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7244,7 +7244,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},Gx=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, + `}},Rx=class{constructor(e){this.variableNames=["dy","W"],this.uniforms=`strides : vec2, pads : vec2, filterDims : vec2, outHeight : i32, outWidth : i32, channelMul : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="depthwise_conv2d_backprop_input"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7287,7 +7287,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}};function Cle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:l}=o,c=C.computeConv2DInfo(n.shape,l,a,i,p,u,!0),m=new Ux(c),d=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.inHeight]},{type:"int32",data:[c.inWidth]},{type:"int32",data:[c.batchSize]},{type:"int32",data:[c.outChannels/c.inChannels]}];return t.runWebGPUProgram(m,[n,s],"float32",d)}var pU={kernelName:Gi,backendName:"webgpu",kernelFunc:Cle};function wle(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:l}=o,c=C.computeConv2DInfo(l,s.shape,a,i,p,u,!0),m=new Gx(c),d=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.filterHeight-1-c.padInfo.top,c.filterWidth-1-c.padInfo.left]},{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.outHeight]},{type:"int32",data:[c.outWidth]},{type:"int32",data:[c.outChannels/c.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var lU={kernelName:Hi,backendName:"webgpu",kernelFunc:wle};var Hx=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` + `}};function Hue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,dy:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,filterShape:c}=o,l=w.computeConv2DInfo(n.shape,c,a,i,p,u,!0),m=new $x(l),d=[{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.filterHeight,l.filterWidth]},{type:"int32",data:[l.outHeight]},{type:"int32",data:[l.outWidth]},{type:"int32",data:[l.inHeight]},{type:"int32",data:[l.inWidth]},{type:"int32",data:[l.batchSize]},{type:"int32",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],"float32",d)}var GV={kernelName:Pi,backendName:"webgpu",kernelFunc:Hue};function Kue(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,filter:s}=e,{strides:a,dilations:i,pad:p,dimRoundingMode:u,inputShape:c}=o,l=w.computeConv2DInfo(c,s.shape,a,i,p,u,!0),m=new Rx(l),d=[{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.filterHeight-1-l.padInfo.top,l.filterWidth-1-l.padInfo.left]},{type:"int32",data:[l.filterHeight,l.filterWidth]},{type:"int32",data:[l.outHeight]},{type:"int32",data:[l.outWidth]},{type:"int32",data:[l.outChannels/l.inChannels]}];return t.runWebGPUProgram(m,[n,s],n.dtype,d)}var HV={kernelName:Oi,backendName:"webgpu",kernelFunc:Kue};var Dx=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="diag"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7295,7 +7295,7 @@ return a / b;`,hre=` setOutputAtIndex(index, value); } } - `}};function Sle(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=le({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Hx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=le({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var cU={kernelName:ca,backendName:"webgpu",kernelFunc:Sle};var Kx=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` + `}};function que(r){let{inputs:e,backend:t}=r,{x:o}=e,n=[...o.shape,...o.shape],s=y.sizeFromShape(o.shape),a=pe({inputs:{x:o},backend:t,attrs:{shape:[s]}}),i=new Dx(s),p=t.runWebGPUProgram(i,[a],a.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var KV={kernelName:oa,backendName:"webgpu",kernelFunc:que};var Ax=class{constructor(e){this.variableNames=["x","w"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.outShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="dilation2d"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let neg_infinity = -3.4e38; @@ -7327,7 +7327,7 @@ return a / b;`,hre=` setOutputAtIndex(index, curVal); } } - `}};function Ile(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=C.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),l=[u.padInfo.top,u.padInfo.left],c=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...l]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],m=new Kx(u);return t.runWebGPUProgram(m,[n,s],n.dtype,c)}var mU={kernelName:zn,backendName:"webgpu",kernelFunc:Ile};var qx=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 + `}};function jue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s}=e,{strides:a,pad:i,dilations:p}=o,u=w.computeDilation2DInfo(n.shape,s.shape,a,i,"NHWC",p),c=[u.padInfo.top,u.padInfo.left],l=[{type:"int32",data:[u.filterHeight,u.filterWidth]},{type:"int32",data:[...c]},{type:"int32",data:[u.strideHeight,u.strideWidth]},{type:"int32",data:[u.dilationHeight,u.dilationWidth]}],m=new Ax(u);return t.runWebGPUProgram(m,[n,s],n.dtype,l)}var qV={kernelName:dn,backendName:"webgpu",kernelFunc:jue};var Fx=class{constructor(e,t){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.inShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),t!=="float32"&&t!=="int32")throw new Error(`Dilation2DBackpropInput only supports float32 and int32 types, does not support ${t} type.`);this.type=t,this.shaderKey="dilation2DBackpropInput"}getUserCode(){return` ${G("index")} { if (index < uniforms.dySize) { @@ -7368,10 +7368,10 @@ return a / b;`,hre=` let flatIndexIn = d + uniforms.xShape[3] * (xCMax + uniforms.xShape[2] * (xRMax + uniforms.xShape[1] * b)); let value = getDy(b, r, c, d); - ${oo("&result[flatIndexIn]","value",this.type)} + ${Qr("&result[flatIndexIn]","value",this.type)} } } - `}},jx=class{constructor(e,t,o){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 + `}},Px=class{constructor(e,t,o){if(this.variableNames=["x","w","dy"],this.uniforms="filterDims: vec2, pads: vec2, strides: vec2, dilations: vec2, dySize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e.filterShape,this.dispatchLayout=X(e.outShape),this.dispatch=H(this.dispatchLayout,e.outShape,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`Dilation2DBackpropFilter only supports float32 and int32 types, does not support ${o} type.`);this.type=o,this.shaderKey="dilation2DBackpropFilter"}getUserCode(){return` ${G("index")} { if (index < uniforms.dySize) { @@ -7411,10 +7411,10 @@ return a / b;`,hre=` let flatIndexIn = d + uniforms.wShape[2] * (wCMax + wRMax * uniforms.wShape[1]); let value = getDy(b, r, c, d); - ${oo("&result[flatIndexIn]","value",this.type)} + ${Qr("&result[flatIndexIn]","value",this.type)} } } - `}};function vle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,l=C.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),c=s.dtype,m=new jx(l,s.shape,c),d=[{type:"int32",data:[l.filterHeight,l.filterWidth]},{type:"int32",data:[l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.dilationHeight,l.dilationWidth]},{type:"int32",data:[y.sizeFromShape(l.outShape)]}],f=Nt({backend:t,attrs:{shape:s.shape,value:0,dtype:c}});return t.runWebGPUProgram(m,[n,s,a],c,d,f)}var dU={kernelName:qi,backendName:"webgpu",kernelFunc:vle};function kle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,l=C.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),c=n.dtype,m=new qx(l,c),d=[{type:"int32",data:[l.filterHeight,l.filterWidth]},{type:"int32",data:[l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.dilationHeight,l.dilationWidth]},{type:"int32",data:[y.sizeFromShape(l.outShape)]}],f=Nt({backend:t,attrs:{shape:l.inShape,value:0,dtype:c}});return t.runWebGPUProgram(m,[n,s,a],c,d,f)}var fU={kernelName:Ki,backendName:"webgpu",kernelFunc:kle};var Xx=class{constructor(e,t,o){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=$i.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` + `}};function Xue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=s.dtype,m=new Px(c,s.shape,l),d=[{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.dilationHeight,c.dilationWidth]},{type:"int32",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:s.shape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var jV={kernelName:Li,backendName:"webgpu",kernelFunc:Xue};function Yue(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,dy:a}=e,{strides:i,pad:p,dilations:u}=o,c=w.computeDilation2DInfo(n.shape,s.shape,i,p,"NHWC",u),l=n.dtype,m=new Fx(c,l),d=[{type:"int32",data:[c.filterHeight,c.filterWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.dilationHeight,c.dilationWidth]},{type:"int32",data:[y.sizeFromShape(c.outShape)]}],f=vt({backend:t,attrs:{shape:c.inShape,value:0,dtype:l}});return t.runWebGPUProgram(m,[n,s,a],l,d,f)}var XV={kernelName:Mi,backendName:"webgpu",kernelFunc:Yue};var Ox=class{constructor(e,t,o){this.variableNames=["Image"],this.uniforms="alpha: f32,",this.workgroupSize=[64,1,1],this.pixelsOpType=wi.DRAW,this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.type=t,this.textureFormat=o,this.shaderKey=`draw_${t}_${o}`}getUserCode(){let e,t=this.type==="float32"?"value":"value / 255.0";return e=` if (uniforms.numChannels == 1) { rgba[0] = ${t}; rgba[1] = ${t}; @@ -7437,7 +7437,7 @@ return a / b;`,hre=` textureStore(outImage, vec2(coords.yx), rgba); } } - `}};function Nle(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},l=(u==null?void 0:u.alpha)||1,c=t.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",m=[i,p],d=new Xx(m,n.dtype,c);s.width=p,s.height=i;let f="webgpu",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:c,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let b="int32",w=t.makeTensorInfo(m,b),S=t.tensorMap.get(w.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:"uint32",data:[x]},{type:"float32",data:[l]}];if(t.runWebGPUProgram(d,[n],b,k,w),g){let T=s.getContext("2d");if(!T)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");T.drawImage(g,0,0)}return t.disposeData(w.dataId),n}var hU={kernelName:Mu,backendName:"webgpu",kernelFunc:Nle};var Kv=tt({opType:fe.MUL,cpuKernelImpl:YV,supportsComplex:!0}),gU={kernelName:$o,backendName:"webgpu",kernelFunc:Kv};function qv(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,"sum",t)}var xU={kernelName:As,backendName:"webgpu",kernelFunc:qv};function Tle(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=C.decodeEinsumEquation(n,s.length);C.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:l}=C.getEinsumComputePath(i,p),c=l.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=qv({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var yU={kernelName:ji,backendName:"webgpu",kernelFunc:Tle};var _le=ye({opType:Z.ELU}),bU={kernelName:Wn,backendName:"webgpu",kernelFunc:_le};var Ele=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Di(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},CU={kernelName:ri,backendName:"webgpu",kernelFunc:Ele};var $le=tt({opType:fe.EQUAL,dtype:"bool",cpuKernelImpl:PV}),wU={kernelName:xo,backendName:"webgpu",kernelFunc:$le};var Rle=ye({opType:Z.ERF}),SU={kernelName:Un,backendName:"webgpu",kernelFunc:Rle};var Dle=ye({opType:Z.EXP,cpuKernelImpl:OV,dtype:"float32"}),IU={kernelName:yo,backendName:"webgpu",kernelFunc:Dle};function Yx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),le({inputs:{x:s},backend:o,attrs:{shape:i}})}var vU={kernelName:ma,backendName:"webgpu",kernelFunc:Yx};var Ale=ye({opType:Z.EXPM1,cpuKernelImpl:MV}),kU={kernelName:bo,backendName:"webgpu",kernelFunc:Ale};var _m=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` + `}};function Que(r){let{inputs:e,backend:t,attrs:o}=r,{image:n}=e,{canvas:s,options:a}=o,[i,p]=n.shape.slice(0,2),{imageOptions:u}=a||{},c=(u==null?void 0:u.alpha)||1,l=t.device.features.has("bgra8unorm-storage")?"bgra8unorm":"rgba8unorm",m=[i,p],d=new Ox(m,n.dtype,l);s.width=p,s.height=i;let f="webgpu",h=s.getContext(f),g;h||(g=new OffscreenCanvas(p,i),h=g.getContext(f));let x=n.shape.length===3?n.shape[2]:1;h.configure({device:t.device,format:l,usage:GPUTextureUsage.STORAGE_BINDING,alphaMode:"premultiplied"});let b="int32",C=t.makeTensorInfo(m,b),S=t.tensorMap.get(C.dataId);S.resource=h.getCurrentTexture(),S.external=!0;let k=[{type:"uint32",data:[x]},{type:"float32",data:[c]}];if(t.runWebGPUProgram(d,[n],b,k,C),g){let _=s.getContext("2d");if(!_)throw new Error("Please make sure this canvas has only been used for 2d or webgpu context!");_.drawImage(g,0,0)}return t.disposeData(C.dataId),n}var YV={kernelName:$u,backendName:"webgpu",kernelFunc:Que};var i0=et({opType:fe.MUL,cpuKernelImpl:Rz,supportsComplex:!0}),QV={kernelName:Xn,backendName:"webgpu",kernelFunc:i0};function u0(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,"sum",t)}var ZV={kernelName:Ss,backendName:"webgpu",kernelFunc:u0};function Zue(r){let{inputs:e,backend:t,attrs:o}=r,{equation:n}=o,s=e,{allDims:a,summedDims:i,idDims:p}=w.decodeEinsumEquation(n,s.length);w.checkEinsumDimSizes(a.length,p,s);let{path:u,steps:c}=w.getEinsumComputePath(i,p),l=c.length,m=null,d=a.length,f=[];for(let h=0;h=0&&(m=u0({inputs:{x:m},backend:t,attrs:{axis:u[h]-(a.length-d),keepDims:!1}}),f.push(m)),d--)}for(let h of f)h!==m&&t.disposeData(h.dataId);return m}var JV={kernelName:Bi,backendName:"webgpu",kernelFunc:Zue};var Jue=ye({opType:Z.ELU}),eW={kernelName:hn,backendName:"webgpu",kernelFunc:Jue};var epe=r=>{let{inputs:e,backend:t}=r,{dy:o,y:n}=e,s=new Ii(fe.ELU_DER,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],o.dtype)},tW={kernelName:Xa,backendName:"webgpu",kernelFunc:epe};var tpe=et({opType:fe.EQUAL,dtype:"bool",cpuKernelImpl:gz}),rW={kernelName:xn,backendName:"webgpu",kernelFunc:tpe};var rpe=ye({opType:Z.ERF}),oW={kernelName:gn,backendName:"webgpu",kernelFunc:rpe};var ope=ye({opType:Z.EXP,cpuKernelImpl:xz,dtype:"float32"}),nW={kernelName:yn,backendName:"webgpu",kernelFunc:ope};function Mx(r){let{inputs:e,attrs:t,backend:o}=r,{dim:n}=t,{input:s}=e,a=s.shape.length,i=s.shape.slice(),p=n;return n<0&&(y.assert(-(a+1)<=n,()=>`Axis must be in the interval [${-(a+1)}, ${a}]`),p=a+n+1),i.splice(p,0,1),pe({inputs:{x:s},backend:o,attrs:{shape:i}})}var sW={kernelName:na,backendName:"webgpu",kernelFunc:Mx};var npe=ye({opType:Z.EXPM1,cpuKernelImpl:yz}),aW={kernelName:bn,backendName:"webgpu",kernelFunc:npe};var ym=class{constructor(e,t){this.variableNames=["real","imag"],this.outputShape=[],this.uniforms="exponentMultiplier : f32, denominator: f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.component=e,this.shaderKey=`fft_${e}`}getUserCode(){return` fn unaryOpComplex(real: f32, expR: f32, imag: f32, expI: f32) -> f32 { ${this.component==="real"?"return real * expR - imag * expI;":"return real * expI + imag * expR;"} } @@ -7470,7 +7470,7 @@ return a / b;`,hre=` setOutputAtIndex(index, mulMatDFT(coords[0], coords[1])); } } - `}};function Qx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=le({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,l=new _m("real",u),c=new _m("imag",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:"float32",data:[d]},{type:"float32",data:[f]}],g=t.runWebGPUProgram(l,m,"float32",h);i.push(g);let x=t.runWebGPUProgram(c,m,"float32",h);i.push(x);let b=Uo({inputs:{real:g,imag:x},backend:t});i.push(b);let w=le({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),w}function Fle(r){let{inputs:e,backend:t}=r,{input:o}=e;return Qx(o,!1,t)}var NU={kernelName:Xi,backendName:"webgpu",kernelFunc:Fle};var Zx=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` + `}};function Lx(r,e,t){let o=t.tensorMap.get(r.dataId),n=y.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],a=n/s,i=[],p=pe({inputs:{x:r},backend:t,attrs:{shape:[a,s]}});i.push(p);let u=p.shape,c=new ym("real",u),l=new ym("imag",u),m=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:u},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:u}],d=e?2*Math.PI:-2*Math.PI,f=e?u[1]:1,h=[{type:"float32",data:[d]},{type:"float32",data:[f]}],g=t.runWebGPUProgram(c,m,"float32",h);i.push(g);let x=t.runWebGPUProgram(l,m,"float32",h);i.push(x);let b=xo({inputs:{real:g,imag:x},backend:t});i.push(b);let C=pe({inputs:{x:b},backend:t,attrs:{shape:r.shape}});return i.forEach(S=>t.disposeData(S.dataId)),C}function spe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!1,t)}var iW={kernelName:zi,backendName:"webgpu",kernelFunc:spe};var Bx=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="flipLeftRight"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7479,7 +7479,7 @@ return a / b;`,hre=` setOutputAtIndex(index, outputValue); } } - `}};var TU={kernelName:Gn,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Zx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ple=ye({opType:Z.FLOOR,cpuKernelImpl:LV}),_U={kernelName:Co,backendName:"webgpu",kernelFunc:Ple};var Ole=tt({opType:fe.FLOOR_DIV,cpuKernelImpl:BV,dtype:"int32"}),EU={kernelName:wo,backendName:"webgpu",kernelFunc:Ole};var Jx=class{constructor(e,t,o=!1){this.pixelsOpType=$i.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` + `}};var uW={kernelName:Cn,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{image:t}=r,o=e,n=new Bx(t.shape);return o.runWebGPUProgram(n,[t],t.dtype)}};var ape=ye({opType:Z.FLOOR,cpuKernelImpl:bz}),pW={kernelName:wn,backendName:"webgpu",kernelFunc:ape};var ipe=et({opType:fe.FLOOR_DIV,cpuKernelImpl:Cz,dtype:"int32"}),cW={kernelName:Sn,backendName:"webgpu",kernelFunc:ipe};var zx=class{constructor(e,t,o=!1){this.pixelsOpType=wi.FROM_PIXELS,this.outputShape=[0],this.variableNames=[],this.workgroupSize=[256,1,1],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[t,1,1]),this.importVideo=o,this.shaderKey=`fromPixels_${this.importVideo}`}getUserCode(){let e=this.importVideo?"textureLoad(src, vec2(coords.yx));":"textureLoad(src, vec2(coords.yx), 0)";return` @binding(1) @group(0) var src: ${this.importVideo?"texture_external":"texture_2d"}; ${G("index")} { let flatIndex = index * uniforms.numChannels; @@ -7491,7 +7491,7 @@ return a / b;`,hre=` } } } - `}};var $U={kernelName:Lu,backendName:"webgpu",kernelFunc:Mle},uc,jv=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Mle(r){let{inputs:e,backend:t,attrs:o}=r,{pixels:n}=e,{numChannels:s}=o;if(n==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let a=typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement,p=typeof HTMLCanvasElement!="undefined"&&n instanceof HTMLCanvasElement||typeof OffscreenCanvas!="undefined"&&n instanceof OffscreenCanvas,u=typeof ImageBitmap!="undefined"&&n instanceof ImageBitmap,[l,c]=a?[n.videoWidth,n.videoHeight]:[n.width,n.height],m=[c,l,s],d=A().getBool("WEBGPU_IMPORT_EXTERNAL_TEXTURE")&&a,f=a||i;if(u||p||f){let b;if(d)b=t.device.importExternalTexture({source:n});else{if(f){let L=A().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(uc==null||L!==jv)&&(jv=L,uc=document.createElement("canvas").getContext("2d",{willReadFrequently:jv})),uc.canvas.width=l,uc.canvas.height=c,uc.drawImage(n,0,0,l,c),n=uc.canvas}let F=GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING,M=t.textureManager.acquireTexture(m[1],m[0],"rgba8unorm",F);t.queue.copyExternalImageToTexture({source:n},{texture:M},[m[1],m[0]]),b=M}let w=y.sizeFromShape(m),S=y.computeStrides(m),k=new Jx(m,s,d),T=[{type:"uint32",data:[w]},{type:"uint32",data:[s]},{type:"uint32",data:[...S]}],E=t.makeTensorInfo([c,l],"int32"),R=t.tensorMap.get(E.dataId);R.resource=b;let D=t.runWebGPUProgram(k,[E],"int32",T);return t.disposeData(E.dataId),D}let h=n.data,g=h;if(s!=null&&s!==4){g=new Uint8Array(n.width*n.height*s);let b=h.length,w=0;for(let S=0;S(xValue, -meanValue, offsetValue), vec3(inv, inv, 1.0))); } } - `}};var RU={kernelName:Hn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,l=[o,a,i],c=null;s!=null&&(c=s.shape,l.push(s));let m=null;n!=null&&(m=n.shape,l.push(n));let d=new ey(o.shape,a.shape,i.shape,c,m),f=[{type:"float32",data:[p]}];return u.runWebGPUProgram(d,l,o.dtype,f)}};function Lle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:l,dilations:c,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=C.convertConv2DDataFormat(l),g=C.computeConv2DInfo(n.shape,s.shape,p,c,u,m,!1,h);return Dx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var DU={kernelName:jo,backendName:"webgpu",kernelFunc:Lle};function Ble(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:l,dimRoundingMode:c,activation:m,leakyreluAlpha:d}=o,f=l;f==null&&(f=[1,1]),y.assert(C.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=C.computeConv2DInfo(n.shape,s.shape,p,f,u,c,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let w=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new ac(h,x,m,b),w.push({type:"int32",data:[S.virtualWidth]})):(S=new ic(h,x,m,b),w.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),m==="leakyrelu"&&(w.push({type:"float32",data:[d]}),S.uniforms+=" alpha : f32,"),t.runWebGPUProgram(S,g,"float32",w)}var AU={kernelName:Xo,backendName:"webgpu",kernelFunc:Ble};var ty=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` + `}};var mW={kernelName:In,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o,scale:n,offset:s,mean:a,variance:i}=r,{varianceEpsilon:p}=e,u=t,c=[o,a,i],l=null;s!=null&&(l=s.shape,c.push(s));let m=null;n!=null&&(m=n.shape,c.push(n));let d=new Vx(o.shape,a.shape,i.shape,l,m),f=[{type:"float32",data:[p]}];return u.runWebGPUProgram(d,c,o.dtype,f)}};function ppe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dataFormat:c,dilations:l,dimRoundingMode:m,activation:d,leakyreluAlpha:f}=o,h=w.convertConv2DDataFormat(c),g=w.computeConv2DInfo(n.shape,s.shape,p,l,u,m,!1,h);return bx({x:n,filter:s,convInfo:g,backend:t,bias:a,preluActivationWeights:i,leakyreluAlpha:f,activation:d})}var dW={kernelName:Io,backendName:"webgpu",kernelFunc:ppe};function cpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,filter:s,bias:a,preluActivationWeights:i}=e,{strides:p,pad:u,dilations:c,dimRoundingMode:l,activation:m,leakyreluAlpha:d}=o,f=c;f==null&&(f=[1,1]),y.assert(w.eitherStridesOrDilationsAreOne(p,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${p} and dilations '${f}'`);let h=w.computeConv2DInfo(n.shape,s.shape,p,f,u,l,!0),g=[n,s],x=a!=null,b=i!=null;x&&g.push(a),b&&g.push(i);let C=[{type:"int32",data:[h.padInfo.top,h.padInfo.left]},{type:"int32",data:[h.inHeight,h.inWidth]}],S;return h.outHeight>4&&h.outWidth>4&&h.strideWidth<=2&&h.inChannels===h.outChannels&&h.dilationHeight===1&&h.dilationWidth===1&&h.inChannels%4===0?(S=new Jc(h,x,m,b),C.push({type:"int32",data:[S.virtualWidth]})):(S=new el(h,x,m,b),C.push({type:"int32",data:[h.filterHeight]},{type:"int32",data:[h.filterWidth]},{type:"int32",data:[h.strideHeight,h.strideWidth]},{type:"int32",data:[h.dilationHeight,h.dilationWidth]})),m==="leakyrelu"&&(C.push({type:"float32",data:[d]}),S.uniforms+=" alpha : f32,"),t.runWebGPUProgram(S,g,"float32",C)}var fW={kernelName:vo,backendName:"webgpu",kernelFunc:cpe};var Wx=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey=`gathernd_${e}`,this.sliceDim=e,this.uniforms=`sliceDim : i32, strides : ${ft(e)},`}getUserCode(){let e;return this.sliceDim>1?e="uniforms.strides[j]":e="uniforms.strides",` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7518,7 +7518,7 @@ return a / b;`,hre=` setOutputAtIndex(index, getA(flattenIndex, coords[1])); } } - `}};function zle(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,l,c]=C.prepareAndValidate(o,n),m=le({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=le({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/l,l]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=t.readSync(n.dataId),w=t.bufferSync(o),S=zV(b,w,o.dtype,u,a,l,c,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new ty(a,[u,l]),h=[{type:"int32",data:[a]},{type:"int32",data:c}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=le({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var FU={kernelName:Kn,backendName:"webgpu",kernelFunc:zle};var ry=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=Vle(this.aShape);return` + `}};function lpe(r){let{inputs:e,backend:t}=r,{params:o,indices:n}=e,s=n.shape,a=s[s.length-1],i=y.sizeFromShape(o.shape),[p,u,c,l]=w.prepareAndValidate(o,n),m=pe({inputs:{x:n},backend:t,attrs:{shape:[u,a]}}),d=pe({inputs:{x:o},backend:t,attrs:{shape:[y.sizeFromShape(o.shape)/c,c]}});if(t.shouldExecuteOnCPU([o,n])||o.dtype==="string"){let b=t.readSync(n.dataId),C=t.bufferSync(o),S=wz(b,C,o.dtype,u,a,c,l,o.shape,i);return t.makeTensorInfo(p,o.dtype,S.values)}let f=new Wx(a,[u,c]),h=[{type:"int32",data:[a]},{type:"int32",data:l}],g=t.runWebGPUProgram(f,[d,m],d.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:p}});return t.disposeData(m.dataId),t.disposeData(d.dataId),t.disposeData(g.dataId),x}var hW={kernelName:vn,backendName:"webgpu",kernelFunc:lpe};var Ux=class{constructor(e,t){this.variableNames=["A","indices"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.slice(),this.aShape=e,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="gather"}getUserCode(){let e=mpe(this.aShape);return` ${G("index")} { if (index < uniforms.size) { let resRC = getCoordsFromIndex(index); @@ -7527,13 +7527,13 @@ return a / b;`,hre=` setOutputAtIndex(index, inBounds * getA(${e})); } } - `}};function Vle(r){let e=["resRC.x","resRC.y","resRC.z","resRC.w"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new ry(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);c.push(g);let x=le({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return c.forEach(b=>t.disposeData(b.dataId)),x}var PU={kernelName:fa,backendName:"webgpu",kernelFunc:Xv};var Wle=tt({opType:fe.GREATER,cpuKernelImpl:UV,dtype:"bool"}),OU={kernelName:So,backendName:"webgpu",kernelFunc:Wle};var Ule=tt({opType:fe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:WV}),MU={kernelName:Io,backendName:"webgpu",kernelFunc:Ule};function Gle(r){let{inputs:e,backend:t}=r,{input:o}=e;return Qx(o,!0,t)}var LU={kernelName:Yi,backendName:"webgpu",kernelFunc:Gle};var Hle=ye({opType:Z.IS_FINITE,dtype:"bool"}),BU={kernelName:qn,backendName:"webgpu",kernelFunc:Hle};var Kle=ye({opType:Z.IS_INF,dtype:"bool"}),zU={kernelName:jn,backendName:"webgpu",kernelFunc:Kle};var qle=ye({opType:Z.IS_NAN,dtype:"bool"}),VU={kernelName:Xn,backendName:"webgpu",kernelFunc:qle};function jle(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new so(n.shape,Z.LEAKYRELU,"alpha : f32,");return t.runWebGPUProgram(i,[n],"float32",a)}var WU={kernelName:Yn,backendName:"webgpu",kernelFunc:jle};var Xle=tt({opType:fe.LESS,dtype:"bool",cpuKernelImpl:HV}),UU={kernelName:ko,backendName:"webgpu",kernelFunc:Xle};var Yle=tt({opType:fe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:GV}),GU={kernelName:No,backendName:"webgpu",kernelFunc:Yle};var oy=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` + `}};function mpe(r){let e=["resRC.x","resRC.y","resRC.z","resRC.w"],t=[];for(let o=0;ot.disposeData(D.dataId)),t.makeTensorInfo(u.outputShape,R.dtype,R.values)}let h=new Ux(m.shape,f),g=t.runWebGPUProgram(h,[m,d],m.dtype);l.push(g);let x=pe({inputs:{x:g},backend:t,attrs:{shape:u.outputShape}});return l.forEach(b=>t.disposeData(b.dataId)),x}var gW={kernelName:aa,backendName:"webgpu",kernelFunc:c0};var dpe=et({opType:fe.GREATER,cpuKernelImpl:vz,dtype:"bool"}),xW={kernelName:kn,backendName:"webgpu",kernelFunc:dpe};var fpe=et({opType:fe.GREATER_EQUAL,dtype:"bool",cpuKernelImpl:Iz}),yW={kernelName:Nn,backendName:"webgpu",kernelFunc:fpe};function hpe(r){let{inputs:e,backend:t}=r,{input:o}=e;return Lx(o,!0,t)}var bW={kernelName:Vi,backendName:"webgpu",kernelFunc:hpe};var gpe=ye({opType:Z.IS_FINITE,dtype:"bool"}),CW={kernelName:Tn,backendName:"webgpu",kernelFunc:gpe};var xpe=ye({opType:Z.IS_INF,dtype:"bool"}),wW={kernelName:_n,backendName:"webgpu",kernelFunc:xpe};var ype=ye({opType:Z.IS_NAN,dtype:"bool"}),SW={kernelName:En,backendName:"webgpu",kernelFunc:ype};function bpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{alpha:s}=o,a=[{type:"float32",data:[s]}],i=new Jr(n.shape,Z.LEAKYRELU,"alpha : f32,");return t.runWebGPUProgram(i,[n],"float32",a)}var IW={kernelName:$n,backendName:"webgpu",kernelFunc:bpe};var Cpe=et({opType:fe.LESS,dtype:"bool",cpuKernelImpl:Nz}),vW={kernelName:Rn,backendName:"webgpu",kernelFunc:Cpe};var wpe=et({opType:fe.LESS_EQUAL,dtype:"bool",cpuKernelImpl:kz}),kW={kernelName:Dn,backendName:"webgpu",kernelFunc:wpe};var Gx=class{constructor(e){this.variableNames=[],this.outputShape=[],this.uniforms="start : f32, step : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="linSpace"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { setOutputAtIndex(index, uniforms.start + f32(index) * uniforms.step); } } - `}};function Qle(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new oy(s),p=[{type:"float32",data:[o]},{type:"float32",data:[a]}];return e.runWebGPUProgram(i,[],"float32",p)}var HU={kernelName:Qn,backendName:"webgpu",kernelFunc:Qle};var Zle=ye({opType:Z.LOG,cpuKernelImpl:KV}),KU={kernelName:To,backendName:"webgpu",kernelFunc:Zle};var Jle=ye({opType:Z.LOG1P}),qU={kernelName:Zn,backendName:"webgpu",kernelFunc:Jle};var ece=tt({opType:fe.LOGICAL_AND,dtype:"bool"}),jU={kernelName:Jn,backendName:"webgpu",kernelFunc:ece};var tce=ye({opType:Z.LOGICAL_NOT}),XU={kernelName:es,backendName:"webgpu",kernelFunc:tce};var rce=tt({opType:fe.LOGICAL_OR}),YU={kernelName:ts,backendName:"webgpu",kernelFunc:rce};var QU=` + `}};function Spe(r){let{backend:e,attrs:t}=r,{start:o,stop:n,num:s}=t,a=(n-o)/(s-1),i=new Gx(s),p=[{type:"float32",data:[o]},{type:"float32",data:[a]}];return e.runWebGPUProgram(i,[],"float32",p)}var NW={kernelName:An,backendName:"webgpu",kernelFunc:Spe};var Ipe=ye({opType:Z.LOG,cpuKernelImpl:Tz}),TW={kernelName:Fn,backendName:"webgpu",kernelFunc:Ipe};var vpe=ye({opType:Z.LOG1P}),_W={kernelName:Pn,backendName:"webgpu",kernelFunc:vpe};var kpe=et({opType:fe.LOGICAL_AND,dtype:"bool"}),EW={kernelName:On,backendName:"webgpu",kernelFunc:kpe};var Npe=ye({opType:Z.LOGICAL_NOT}),$W={kernelName:Mn,backendName:"webgpu",kernelFunc:Npe};var Tpe=et({opType:fe.LOGICAL_OR}),RW={kernelName:Ln,backendName:"webgpu",kernelFunc:Tpe};var DW=` var powValue = 0.0; let basis = uniforms.bias + uniforms.alpha * sum; if (uniforms.beta == 0.5) { @@ -7543,7 +7543,7 @@ return a / b;`,hre=` } else { powValue = exp(log(basis) * (-uniforms.beta)); } -`,ny=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` +`,Hx=class{constructor(e){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7561,12 +7561,12 @@ return a / b;`,hre=` sum = sum + z * z; } } - ${QU} + ${DW} setOutputAtIndex(index, x * powValue); } } - `}},sy=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` + `}},Kx=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.uniforms="radius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[256,1,1],this.maxAllowRadius=16,y.assert(t<=this.maxAllowRadius,()=>`Radius must be less than or equal to ${this.maxAllowRadius}, current radius is ${t}`),this.outputShape=e,this.elementsPerWorkgroup=this.workgroupSize[0]-2*this.maxAllowRadius,this.dispatchLayout={x:[3],y:[2],z:[0,1]},this.dispatch=H(this.dispatchLayout,this.outputShape,[this.elementsPerWorkgroup,this.workgroupSize[1],this.workgroupSize[2]]),this.shaderKey="lrn_shared"}getUserCode(){return` var lrnSub: array; const elementsPerWorkgroup = ${this.elementsPerWorkgroup}; const maxAllowRadius = ${this.maxAllowRadius}; @@ -7594,11 +7594,11 @@ return a / b;`,hre=` let z = lrnSub[index + i]; sum = sum + z * z; } - ${QU} + ${DW} setOutputAtCoords(b, r, c, d, lrnSub[index] * powValue); } - } `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new ny(n.shape):u=new sy(n.shape,s);let l=[{type:"int32",data:[s]},{type:"float32",data:[a]},{type:"float32",data:[i]},{type:"float32",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,l)}var ZU={kernelName:rs,backendName:"webgpu",kernelFunc:oce};var ay=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` + } `}};function _pe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{depthRadius:s,bias:a,alpha:i,beta:p}=o,u;s>16?u=new Hx(n.shape):u=new Kx(n.shape,s);let c=[{type:"int32",data:[s]},{type:"float32",data:[a]},{type:"float32",data:[i]},{type:"float32",data:[p]}];return t.runWebGPUProgram(u,[n],n.dtype,c)}var AW={kernelName:Bn,backendName:"webgpu",kernelFunc:_pe};var qx=class{constructor(e){this.outputShape=[],this.variableNames=["inputImage","outputImage","dy"],this.uniforms="depthRadius : i32, bias : f32, alpha : f32, beta : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="lrn_grad"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getOutputCoords(); @@ -7648,7 +7648,7 @@ return a / b;`,hre=` setOutputAtIndex(index, result); } } - `}};function nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:l}=o,c=new ay(n.shape),m=[{type:"int32",data:[i]},{type:"float32",data:[p]},{type:"float32",data:[u]},{type:"float32",data:[l]}];return t.runWebGPUProgram(c,[n,s,a],n.dtype,m)}var JU={kernelName:oi,backendName:"webgpu",kernelFunc:nce};var sce=tt({opType:fe.MAX,cpuKernelImpl:jV}),eG={kernelName:_o,backendName:"webgpu",kernelFunc:sce};function ace(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,l=C.computePool2DInfo(n.shape,s,a,1,i,p);return bx(n,l,"max",t)}var tG={kernelName:ns,backendName:"webgpu",kernelFunc:ace};function ice(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,l=[1,1,1],c=C.computePool3DInfo(n.shape,s,a,l,i,u,p),m=new $u(c,"max"),d=[{type:"int32",data:[c.strideDepth,c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.front,c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.inDepth,c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterDepth,c.effectiveFilterHeight,c.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var rG={kernelName:ha,backendName:"webgpu",kernelFunc:ice};var iy=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, + `}};function Epe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,y:s,dy:a}=e,{depthRadius:i,bias:p,alpha:u,beta:c}=o,l=new qx(n.shape),m=[{type:"int32",data:[i]},{type:"float32",data:[p]},{type:"float32",data:[u]},{type:"float32",data:[c]}];return t.runWebGPUProgram(l,[n,s,a],n.dtype,m)}var FW={kernelName:Ya,backendName:"webgpu",kernelFunc:Epe};var $pe=et({opType:fe.MAX,cpuKernelImpl:Ez}),PW={kernelName:Vn,backendName:"webgpu",kernelFunc:$pe};function Rpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dimRoundingMode:p}=o,c=w.computePool2DInfo(n.shape,s,a,1,i,p);return ax(n,c,"max",t)}var OW={kernelName:Wn,backendName:"webgpu",kernelFunc:Rpe};function Dpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{filterSize:s,strides:a,pad:i,dataFormat:p,dimRoundingMode:u}=o,c=[1,1,1],l=w.computePool3DInfo(n.shape,s,a,c,i,u,p),m=new Iu(l,"max"),d=[{type:"int32",data:[l.strideDepth,l.strideHeight,l.strideWidth]},{type:"int32",data:[l.padInfo.front,l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.inDepth,l.inHeight,l.inWidth]},{type:"int32",data:[l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth]}];return t.runWebGPUProgram(m,[n],n.dtype,d)}var MW={kernelName:ia,backendName:"webgpu",kernelFunc:Dpe};var jx=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec2, pads : vec2, dilations : vec2, filterDims : vec2, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool2DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7693,7 +7693,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}},uy=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, + `}},Xx=class{constructor(e){this.variableNames=["dy","maxPos"],this.uniforms=`strides : vec3, pads : vec3, filterDims : vec3, outDepth : i32, outHeight : i32, outWidth : i32`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e.inShape,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="maxPool3DBackprop"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -7751,7 +7751,7 @@ return a / b;`,hre=` setOutputAtIndex(index, dotProd); } } - `}};function uce(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:l}=o,c=[1,1,1],m=C.computePool3DInfo(a.shape,i,p,c,u,l),d=new $u(m,"max",!0),f=[{type:"int32",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:"int32",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.inDepth,m.inHeight,m.inWidth]},{type:"int32",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],"int32",f),g=new uy(m);f=[{type:"int32",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:"int32",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:"int32",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:"int32",data:[m.outDepth]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var oG={kernelName:Ji,backendName:"webgpu",kernelFunc:uce};function pce(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;wm([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:l,dimRoundingMode:c}=o,m=C.computePool2DInfo(i.shape,p,u,1,l,c),d=new Ka(m,"max",!0),f=[{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]},{type:"int32",data:[m.inHeight,m.inWidth]},{type:"int32",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],"int32",f),g=new iy(m);f=[{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]},{type:"int32",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var nG={kernelName:Zi,backendName:"webgpu",kernelFunc:pce};function lce(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let l=C.computePool2DInfo(p.shape,n,s,u,a),c=[{type:"int32",data:[l.strideHeight,l.strideWidth]},{type:"int32",data:[l.padInfo.top,l.padInfo.left]},{type:"int32",data:[l.dilationHeight,l.dilationWidth]},{type:"int32",data:[l.inHeight,l.inWidth]},{type:"int32",data:[l.effectiveFilterHeight,l.effectiveFilterWidth]}],m=new Ka(l,"max",!1),d=t.runWebGPUProgram(m,[p],p.dtype,c);m=new Ka(l,"max",!0,!0,i);let f=t.runWebGPUProgram(m,[p],"int32",c);return[d,f]}var sG={kernelName:ga,backendName:"webgpu",kernelFunc:lce};function cce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,"min",t)}var aG={kernelName:as,backendName:"webgpu",kernelFunc:cce};var mce=tt({opType:fe.MIN,cpuKernelImpl:XV}),iG={kernelName:Eo,backendName:"webgpu",kernelFunc:mce};var py=class{constructor(e,t,o){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,l)=>`uniforms.pad${l}[0]`).join(","),o=this.xShape.map((u,l)=>`uniforms.pad${l}[0] + uniforms.xShape${e>1?`[${l}]`:""}`).join(","),n=e===1?"start":"start[i]",s=e===1?"end":"end[i]",a=e===1?"outC":"outC[i]",i=ft(e),p=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` + `}};function Ape(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s}=e,a=s,{filterSize:i,strides:p,pad:u,dimRoundingMode:c}=o,l=[1,1,1],m=w.computePool3DInfo(a.shape,i,p,l,u,c),d=new Iu(m,"max",!0),f=[{type:"int32",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:"int32",data:[m.padInfo.front,m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.inDepth,m.inHeight,m.inWidth]},{type:"int32",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[a],"int32",f),g=new Xx(m);f=[{type:"int32",data:[m.strideDepth,m.strideHeight,m.strideWidth]},{type:"int32",data:[m.effectiveFilterDepth-1-m.padInfo.front,m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:"int32",data:[m.effectiveFilterDepth,m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:"int32",data:[m.outDepth]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],a.dtype,f);return t.disposeData(h.dataId),x}var LW={kernelName:Gi,backendName:"webgpu",kernelFunc:Ape};function Fpe(r){let{inputs:e,backend:t,attrs:o}=r,{dy:n,input:s,output:a}=e,i=s;fm([s,a],"maxPoolGrad");let{filterSize:p,strides:u,pad:c,dimRoundingMode:l}=o,m=w.computePool2DInfo(i.shape,p,u,1,c,l),d=new Ba(m,"max",!0),f=[{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.padInfo.top,m.padInfo.left]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]},{type:"int32",data:[m.inHeight,m.inWidth]},{type:"int32",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]}],h=t.runWebGPUProgram(d,[i],"int32",f),g=new jx(m);f=[{type:"int32",data:[m.strideHeight,m.strideWidth]},{type:"int32",data:[m.effectiveFilterHeight-1-m.padInfo.top,m.effectiveFilterWidth-1-m.padInfo.left]},{type:"int32",data:[m.dilationHeight,m.dilationWidth]},{type:"int32",data:[m.effectiveFilterHeight,m.effectiveFilterWidth]},{type:"int32",data:[m.outHeight]},{type:"int32",data:[m.outWidth]}];let x=t.runWebGPUProgram(g,[n,h],i.dtype,f);return t.disposeData(h.dataId),x}var BW={kernelName:Ui,backendName:"webgpu",kernelFunc:Fpe};function Ppe(r){let{inputs:e,backend:t,attrs:o}=r,{filterSize:n,strides:s,pad:a,includeBatchInIndex:i}=o,{x:p}=e;y.assert(p.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${p.shape.length}.`);let u=[1,1];y.assert(w.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let c=w.computePool2DInfo(p.shape,n,s,u,a),l=[{type:"int32",data:[c.strideHeight,c.strideWidth]},{type:"int32",data:[c.padInfo.top,c.padInfo.left]},{type:"int32",data:[c.dilationHeight,c.dilationWidth]},{type:"int32",data:[c.inHeight,c.inWidth]},{type:"int32",data:[c.effectiveFilterHeight,c.effectiveFilterWidth]}],m=new Ba(c,"max",!1),d=t.runWebGPUProgram(m,[p],p.dtype,l);m=new Ba(c,"max",!0,!0,i);let f=t.runWebGPUProgram(m,[p],"int32",l);return[d,f]}var zW={kernelName:ua,backendName:"webgpu",kernelFunc:Ppe};function Ope(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,"min",t)}var VW={kernelName:Gn,backendName:"webgpu",kernelFunc:Ope};var Mpe=et({opType:fe.MIN,cpuKernelImpl:$z}),WW={kernelName:Hn,backendName:"webgpu",kernelFunc:Mpe};var Yx=class{constructor(e,t,o){this.uniforms="",this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((n,s)=>n[0]+e[s]+n[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.xShape=e,t.map((n,s)=>{this.uniforms+=` pad${s} : vec2,`}),this.offset=o==="reflect"?0:1,this.shaderKey=`mirrorPad_${o}`}getUserCode(){let e=this.xShape.length,t=this.xShape.map((u,c)=>`uniforms.pad${c}[0]`).join(","),o=this.xShape.map((u,c)=>`uniforms.pad${c}[0] + uniforms.xShape${e>1?`[${c}]`:""}`).join(","),n=e===1?"start":"start[i]",s=e===1?"end":"end[i]",a=e===1?"outC":"outC[i]",i=ft(e),p=e>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,e):"coords";return` ${G("index")} { if (index < uniforms.size) { let start = ${i}(${t}); @@ -7768,7 +7768,7 @@ return a / b;`,hre=` setOutputAtIndex(index, getX(${p})); } } - `}};var uG={kernelName:is,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(l=>({type:"int32",data:[l[0],l[1]]})),p=new py(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var dce=tt({opType:fe.MOD}),pG={kernelName:us,backendName:"webgpu",kernelFunc:dce};var ly=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` + `}};var UW={kernelName:Kn,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{x:o}=r,{paddings:n,mode:s}=e,a=t,i=n.map(c=>({type:"int32",data:[c[0],c[1]]})),p=new Yx(o.shape,n,s);return a.runWebGPUProgram(p,[o],o.dtype,i)}};var Lpe=et({opType:fe.MOD}),GW={kernelName:qn,backendName:"webgpu",kernelFunc:Lpe};var Qx=class{constructor(e,t){this.variableNames=["probs"],this.outputShape=[],this.uniforms="seed : f32, numOutcomes: i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="multinomial"}getUserCode(){return` //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW fn random (seed : f32, resultUV : vec2) -> f32 { @@ -7801,7 +7801,7 @@ return a / b;`,hre=` setOutputAtIndexI32(index, uniforms.numOutcomes - 1); } } - `}};var cy=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` + `}};var Zx=class{constructor(e){this.variableNames=["logits"],this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=[this.outputShape[0],1,1],this.outputShape[1]>=4096?this.workgroupSize=[256,1,1]:this.workgroupSize=[64,1,1],this.shaderKey="softmax"}getUserCode(){return` var buf : array; var rowMaxShared : f32; var rowSumShared : f32; @@ -7860,7 +7860,7 @@ return a / b;`,hre=` setOutputAtCoords(row, col, value); } } - `}};function Yv(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=le({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new cy(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=le({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var lG={kernelName:Fs,backendName:"webgpu",kernelFunc:Yv};function fce(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:Yv({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],l=p.shape[1],c=new ly(u,s),m=[{type:"float32",data:[a]},{type:"int32",data:[l]}],d=t.runWebGPUProgram(c,[p],"int32",m);return i||t.disposeData(p.dataId),d}var cG={kernelName:ps,backendName:"webgpu",kernelFunc:fce};function hce(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=QV(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new so(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var mG={kernelName:ls,backendName:"webgpu",kernelFunc:hce};function gce(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),l=t.readSync(s.dataId),{selectedIndices:c}=Ut.nonMaxSuppressionV3Impl(u,l,a,i,p);return t.makeTensorInfo([c.length],"int32",new Int32Array(c))}var dG={kernelName:cs,backendName:"webgpu",kernelFunc:gce};function xce(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,l=t.readSync(n.dataId),c=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Ut.nonMaxSuppressionV5Impl(l,c,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var fG={kernelName:ms,backendName:"webgpu",kernelFunc:xce};var my=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` + `}};function l0(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{dim:s}=o,a=pe({inputs:{x:n},backend:t,attrs:{shape:[y.sizeFromShape(n.shape)/n.shape[s],n.shape[s]]}}),i=new Zx(a.shape),p=t.runWebGPUProgram(i,[a],n.dtype),u=pe({inputs:{x:p},backend:t,attrs:{shape:n.shape}});return t.disposeData(a.dataId),t.disposeData(p.dataId),u}var HW={kernelName:Is,backendName:"webgpu",kernelFunc:l0};function Bpe(r){let{inputs:e,backend:t,attrs:o}=r,{logits:n}=e,{numSamples:s,seed:a,normalized:i}=o,p=i?n:l0({inputs:{logits:n},backend:t,attrs:{dim:n.shape.length-1}}),u=p.shape[0],c=p.shape[1],l=new Qx(u,s),m=[{type:"float32",data:[a]},{type:"int32",data:[c]}],d=t.runWebGPUProgram(l,[p],"int32",m);return i||t.disposeData(p.dataId),d}var KW={kernelName:jn,backendName:"webgpu",kernelFunc:Bpe};function zpe(r){let{inputs:e,backend:t}=r,{x:o}=e;if(t.shouldExecuteOnCPU([o])){let s=t.tensorMap.get(o.dataId),[a,i]=Dz(s.values,o.shape,o.dtype);return t.makeTensorInfo(i,o.dtype,a)}let n=new Jr(o.shape,Z.NEG);return t.runWebGPUProgram(n,[o],o.dtype)}var qW={kernelName:pa,backendName:"webgpu",kernelFunc:zpe};function Vpe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p}=o,u=t.readSync(n.dataId),c=t.readSync(s.dataId),{selectedIndices:l}=Vt.nonMaxSuppressionV3Impl(u,c,a,i,p);return t.makeTensorInfo([l.length],"int32",new Int32Array(l))}var jW={kernelName:Qn,backendName:"webgpu",kernelFunc:Vpe};function Wpe(r){console.warn("tf.nonMaxSuppression() in webgpu locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:e,backend:t,attrs:o}=r,{boxes:n,scores:s}=e,{maxOutputSize:a,iouThreshold:i,scoreThreshold:p,softNmsSigma:u}=o,c=t.readSync(n.dataId),l=t.readSync(s.dataId),m=a,d=i,f=p,h=u,{selectedIndices:g,selectedScores:x}=Vt.nonMaxSuppressionV5Impl(c,l,m,d,f,h);return[t.makeTensorInfo([g.length],"int32",new Int32Array(g)),t.makeTensorInfo([x.length],"float32",new Float32Array(x))]}var XW={kernelName:Zn,backendName:"webgpu",kernelFunc:Wpe};var Jx=class{constructor(e,t){this.variableNames=["x"],this.uniforms="onValue : f32, offValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e,t],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="onehot"}getUserCode(){return` ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7868,23 +7868,23 @@ return a / b;`,hre=` f32(i32(round(getX(coords.x))) == coords.y))); } } - `}};function yce(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),l=new my(u,a),c=le({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:"float32",data:[i]},{type:"float32",data:[p]}],d=t.runWebGPUProgram(l,[c],s,m);t.disposeData(c.dataId);let f=[...n.shape,a],h=le({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var hG={kernelName:ds,backendName:"webgpu",kernelFunc:yce};function Em(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=Fi({inputs:{input:o},backend:t}),s=Em({inputs:{x:n},backend:t}),a=Mp({inputs:{input:o},backend:t}),i=Em({inputs:{x:a},backend:t}),p=Uo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return Nt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var gG={kernelName:_a,backendName:"webgpu",kernelFunc:Em};function xG(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=Fi({inputs:{input:o},backend:t}),s=xG({inputs:{x:n},backend:t}),a=Mp({inputs:{input:o},backend:t}),i=Em({inputs:{x:a},backend:t}),p=Uo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return Nt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var yG={kernelName:xa,backendName:"webgpu",kernelFunc:xG};function bce(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Yx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(l=>{y.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(l=>{let c=Yx({inputs:{input:l},backend:t,attrs:{dim:n}});return i.push(c),c}),u=Hv({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(l=>t.disposeData(l.dataId)),u}var bG={kernelName:ya,backendName:"webgpu",kernelFunc:bce};function Qv(r,e=!1){let t=r.length,o=ft(t),n=r.map((c,m)=>`uniforms.pad${m}[0]`).join(","),s=r.map((c,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:""}`).join(","),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?"any(paddedCoords < start)":"paddedCoords < start",u=t>1?"any(paddedCoords >= end)":"paddedCoords >= end",l=t>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,t):"coords";return` + `}};function Upe(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n}=e,{dtype:s,depth:a,onValue:i,offValue:p}=o,u=y.sizeFromShape(n.shape),c=new Jx(u,a),l=pe({inputs:{x:n},backend:t,attrs:{shape:[u]}}),m=[{type:"float32",data:[i]},{type:"float32",data:[p]}],d=t.runWebGPUProgram(c,[l],s,m);t.disposeData(l.dataId);let f=[...n.shape,a],h=pe({inputs:{x:d},backend:t,attrs:{shape:f}});return t.disposeData(d.dataId),h}var YW={kernelName:Jn,backendName:"webgpu",kernelFunc:Upe};function bm(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="complex64"){let n=vi({inputs:{input:o},backend:t}),s=bm({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:o.dtype==="string"?"":0},backend:t})}var QW={kernelName:Sa,backendName:"webgpu",kernelFunc:bm};function ZW(r){let{inputs:e,backend:t}=r,{x:o}=e;if(o.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(o.dtype==="complex64"){let n=vi({inputs:{input:o},backend:t}),s=ZW({inputs:{x:n},backend:t}),a=Rp({inputs:{input:o},backend:t}),i=bm({inputs:{x:a},backend:t}),p=xo({inputs:{real:s,imag:i},backend:t});return t.disposeData(n.dataId),t.disposeData(s.dataId),t.disposeData(a.dataId),t.disposeData(i.dataId),p}else return vt({attrs:{shape:o.shape,dtype:o.dtype,value:1},backend:t})}var JW={kernelName:ca,backendName:"webgpu",kernelFunc:ZW};function Gpe(r){let{inputs:e,backend:t,attrs:o}=r,{axis:n}=o;if(e.length===1)return Mx({inputs:{input:e[0]},backend:t,attrs:{dim:n}});let s=e[0].shape,a=e[0].dtype;e.forEach(c=>{y.assertShapesMatch(s,c.shape,"All tensors passed to stack must have matching shapes"),y.assert(a===c.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],p=e.map(c=>{let l=Mx({inputs:{input:c},backend:t,attrs:{dim:n}});return i.push(l),l}),u=a0({inputs:p,backend:t,attrs:{axis:n}});return i.forEach(c=>t.disposeData(c.dataId)),u}var eU={kernelName:la,backendName:"webgpu",kernelFunc:Gpe};function m0(r,e=!1){let t=r.length,o=ft(t),n=r.map((l,m)=>`uniforms.pad${m}[0]`).join(","),s=r.map((l,m)=>`uniforms.pad${m}[0] + uniforms.xShape${t>1?`[${m}]`:""}`).join(","),a=t>1?`${o}(${n})`:`${n}`,i=t>1?`${o}(${s})`:`${s}`,p=t>1?"any(paddedCoords < start)":"paddedCoords < start",u=t>1?"any(paddedCoords >= end)":"paddedCoords >= end",c=t>1?["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,t):"coords";return` let start = ${a}; let end = ${i}; if (${p} || ${u}) { setOutputAtIndex(index, ${e?0:"uniforms.constantValue"}); } else { let coords = paddedCoords - start; - setOutputAtIndex(index, getX(${l})); + setOutputAtIndex(index, getX(${c})); } - `}var dy=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` + `}var ey=class{constructor(e,t){this.variableNames=["x"],this.uniforms="constantValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t.map((o,n)=>o[0]+e[n]+o[1]),this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),t.map((o,n)=>{this.uniforms+=` pad${n} : vec2,`}),this.xShape=e,this.shaderKey="pad"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let paddedCoords = getCoordsFromIndex(index); - ${Qv(this.xShape)} + ${m0(this.xShape)} } } - `}};var Cce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return Pt({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((l,c)=>l[0]+n.shape[c]+l[1]);return Nt({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:"float32",data:[a]}];s.map(u=>i.push({type:"int32",data:[u[0],u[1]]}));let p=new dy(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},CG={kernelName:fs,backendName:"webgpu",kernelFunc:Cce};var wce=tt({opType:fe.POW}),wG={kernelName:hs,backendName:"webgpu",kernelFunc:wce};function Sce(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Di(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],"float32")}var SG={kernelName:gs,backendName:"webgpu",kernelFunc:Sce};function Ice(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return ao(n,s,a,"prod",t)}var IG={kernelName:Ho,backendName:"webgpu",kernelFunc:Ice};var vce=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=eW(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},vG={kernelName:ba,backendName:"webgpu",kernelFunc:vce};var kce=tt({opType:fe.DIV}),kG={kernelName:Vn,backendName:"webgpu",kernelFunc:kce};var Nce=ye({opType:Z.RECIPROCAL}),NG={kernelName:xs,backendName:"webgpu",kernelFunc:Nce};var Tce=ye({opType:Z.RELU}),TG={kernelName:ys,backendName:"webgpu",kernelFunc:Tce};var _ce=ye({opType:Z.RELU6}),_G={kernelName:ws,backendName:"webgpu",kernelFunc:_ce};var fy=class{constructor(e,t,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` + `}};var Hpe=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{paddings:s,constantValue:a}=o;if(s.every(u=>y.arraysEqual(u,[0,0])))return At({inputs:{x:n},backend:t});if(y.sizeFromShape(n.shape)===0){let u=s.map((c,l)=>c[0]+n.shape[l]+c[1]);return vt({backend:t,attrs:{shape:u,value:a,dtype:n.dtype}})}let i=[{type:"float32",data:[a]}];s.map(u=>i.push({type:"int32",data:[u[0],u[1]]}));let p=new ey(n.shape,s);return t.runWebGPUProgram(p,[n],n.dtype,i)},tU={kernelName:es,backendName:"webgpu",kernelFunc:Hpe};var Kpe=et({opType:fe.POW}),rU={kernelName:ts,backendName:"webgpu",kernelFunc:Kpe};function qpe(r){let{inputs:e,backend:t}=r,{x:o,alpha:n}=e,s=new Ii(fe.PRELU,o.shape,n.shape);return t.runWebGPUProgram(s,[o,n],"float32")}var oU={kernelName:rs,backendName:"webgpu",kernelFunc:qpe};function jpe(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{axis:s,keepDims:a}=o;return eo(n,s,a,"prod",t)}var nU={kernelName:os,backendName:"webgpu",kernelFunc:jpe};var Xpe=r=>{let{backend:e,attrs:t}=r,{start:o,stop:n,step:s,dtype:a}=t,i=Pz(o,n,s,a);return e.makeTensorInfo([i.length],a,i)},sU={kernelName:ma,backendName:"webgpu",kernelFunc:Xpe};var Ype=et({opType:fe.DIV}),aU={kernelName:fn,backendName:"webgpu",kernelFunc:Ype};var Qpe=ye({opType:Z.RECIPROCAL}),iU={kernelName:ns,backendName:"webgpu",kernelFunc:Qpe};var Zpe=ye({opType:Z.RELU}),uU={kernelName:ss,backendName:"webgpu",kernelFunc:Zpe};var Jpe=ye({opType:Z.RELU6}),pU={kernelName:us,backendName:"webgpu",kernelFunc:Jpe};var ty=class{constructor(e,t,o){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, halfPixelCenters : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="resizeBilinear"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -7927,7 +7927,7 @@ return a / b;`,hre=` setOutputAtIndex(index, newValue); } } - `}};function Ece(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,l=s&&p>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[l,c]},{type:"float32",data:[i?.5:0]}],f=new fy(n.shape,p,u);return t.runWebGPUProgram(f,[n],"float32",d)}var EG={kernelName:Cs,backendName:"webgpu",kernelFunc:Ece};var hy=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, + `}};function ece(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,size:a,halfPixelCenters:i}=o,[p,u]=a,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:"float32",data:[c,l]},{type:"float32",data:[i?.5:0]}],f=new ty(n.shape,p,u);return t.runWebGPUProgram(f,[n],"float32",d)}var cU={kernelName:is,backendName:"webgpu",kernelFunc:ece};var ry=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, heightScale : f32, widthScale : f32, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeBilinearBackprop_${t}`}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8002,7 +8002,7 @@ return a / b;`,hre=` setOutputAtIndex(index, accumulator); } } - `}};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,l]=s.shape,c=[a&&u>1?i-1:i,a&&l>1?p-1:p],m=[a&&u>1?u-1:u,a&&l>1?l-1:l],d=c[0]/m[0],f=c[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,w=new hy(n.shape,a),S=[{type:"int32",data:c},{type:"int32",data:m},{type:"float32",data:[d]},{type:"float32",data:[f]},{type:"float32",data:[h]},{type:"float32",data:[g]},{type:"int32",data:[x]},{type:"int32",data:[b]}];return t.runWebGPUProgram(w,[s],s.dtype,S)}var $G={kernelName:ii,backendName:"webgpu",kernelFunc:$ce};var gy=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` + `}};function tce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ry(n.shape,a),S=[{type:"int32",data:l},{type:"int32",data:m},{type:"float32",data:[d]},{type:"float32",data:[f]},{type:"float32",data:[h]},{type:"float32",data:[g]},{type:"int32",data:[x]},{type:"int32",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var lU={kernelName:Ja,backendName:"webgpu",kernelFunc:tce};var oy=class{constructor(e,t,o,n){this.variableNames=["x"],this.uniforms="adjustHeightWidth : vec2, roundBase : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=[e[0],t,o,e[3]],this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.halfPixelCenters=n,this.shaderKey=`resizeNearest_${n}`}getUserCode(){let e;return this.halfPixelCenters?e="max((vec2(rc) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":e="vec2(rc) * effectiveInputOverOutputRatioRC",` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); @@ -8033,7 +8033,7 @@ return a / b;`,hre=` setOutputAtIndex(index, newValue); } } - `}};function Rce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,l=s&&p>1?1:0,c=s&&u>1?1:0,d=[{type:"float32",data:[l,c]},{type:"float32",data:[s?.5:0]}],f=new gy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var RG={kernelName:bs,backendName:"webgpu",kernelFunc:Rce};var xy=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, + `}};function rce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n}=e,{alignCorners:s,halfPixelCenters:a,size:i}=o,[p,u]=i,c=s&&p>1?1:0,l=s&&u>1?1:0,d=[{type:"float32",data:[c,l]},{type:"float32",data:[s?.5:0]}],f=new oy(n.shape,p,u,a);return t.runWebGPUProgram(f,[n],n.dtype,d)}var mU={kernelName:as,backendName:"webgpu",kernelFunc:rce};var ny=class{constructor(e,t){this.variableNames=["dy"],this.uniforms=`effectiveXSize : vec2, effectiveYSize : vec2, invHeightScale : f32, invWidthScale : f32, winHeight : i32, winWidth : i32,`,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.alignCorners=t,this.shaderKey=`resizeNearestNeigborBackprop_${t}`}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8093,7 +8093,7 @@ return a / b;`,hre=` setOutputAtIndex(index, accumulator); } } - `}};function Dce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,l]=s.shape,c=[a&&u>1?i-1:i,a&&l>1?p-1:p],m=[a&&u>1?u-1:u,a&&l>1?l-1:l],d=c[0]/m[0],f=c[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,w=new xy(n.shape,a),S=[{type:"int32",data:c},{type:"int32",data:m},{type:"float32",data:[h]},{type:"float32",data:[g]},{type:"int32",data:[x]},{type:"int32",data:[b]}];return t.runWebGPUProgram(w,[s],s.dtype,S)}var DG={kernelName:ai,backendName:"webgpu",kernelFunc:Dce};var yy=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` + `}};function oce(r){let{inputs:e,backend:t,attrs:o}=r,{images:n,dy:s}=e,{alignCorners:a}=o,[,i,p]=n.shape,[,u,c]=s.shape,l=[a&&u>1?i-1:i,a&&c>1?p-1:p],m=[a&&u>1?u-1:u,a&&c>1?c-1:c],d=l[0]/m[0],f=l[1]/m[1],h=1/d,g=1/f,x=Math.ceil(h)*2+2,b=Math.ceil(g)*2+2,C=new ny(n.shape,a),S=[{type:"int32",data:l},{type:"int32",data:m},{type:"float32",data:[h]},{type:"float32",data:[g]},{type:"int32",data:[x]},{type:"int32",data:[b]}];return t.runWebGPUProgram(C,[s],s.dtype,S)}var dU={kernelName:Za,backendName:"webgpu",kernelFunc:oce};var sy=class{constructor(e){this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=" axis : vec4,",this.shaderKey="reverse"}getUserCode(){return` // Using uniform variables as judging conditions, so the function has // coherent execution within all threads. @@ -8123,7 +8123,7 @@ return a / b;`,hre=` reverseCoords[1], reverseCoords[2], reverseCoords[3])); } } - `}};function Ace(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return Pt({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),l=[0,0,0,0];u.forEach(g=>{let x=g+4-a;l[x]=1});let c=[{type:"int32",data:l}],m=le({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new yy(p),f=t.runWebGPUProgram(d,[m],m.dtype,c);t.disposeData(m.dataId);let h=le({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var AG={kernelName:Ss,backendName:"webgpu",kernelFunc:Ace};var by=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, + `}};function nce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{dims:s}=o,a=n.shape.length;if(a===0)return At({inputs:{x:n},backend:t});let i=n.shape,p=[1,1,1,1];i.forEach((g,x)=>{let b=x+4-a;p[b]=g});let u=y.parseAxisParam(s,n.shape),c=[0,0,0,0];u.forEach(g=>{let x=g+4-a;c[x]=1});let l=[{type:"int32",data:c}],m=pe({inputs:{x:n},backend:t,attrs:{shape:p}}),d=new sy(p),f=t.runWebGPUProgram(d,[m],m.dtype,l);t.disposeData(m.dataId);let h=pe({inputs:{x:f},backend:t,attrs:{shape:i}});return t.disposeData(f.dataId),h}var fU={kernelName:ps,backendName:"webgpu",kernelFunc:nce};var ay=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`centerX : f32, centerY : f32, sinRadians : f32, cosRadians : f32,`,this.shaderKey="rotate",this.outputShape=e,typeof t=="number"?(this.uniforms+=" fillValue : f32,",this.fillSnippet="var outputValue = uniforms.fillValue;",this.shaderKey+="_float"):(this.uniforms+=" fillValue : vec3,",this.fillSnippet="var outputValue = uniforms.fillValue[coords[3]];",this.shaderKey+="_vec3")}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8144,7 +8144,7 @@ return a / b;`,hre=` setOutputAtIndex(index, outputValue); } } - `}};var FG={kernelName:Vs,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new by(o.shape,s),[u,l]=C.getImageCenter(a,o.shape[1],o.shape[2]),c=[{type:"float32",data:[u]},{type:"float32",data:[l]},{type:"float32",data:[Math.sin(n)]},{type:"float32",data:[Math.cos(n)]}];return typeof s=="number"?c.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):c.push({type:"float32",data:s}),i.runWebGPUProgram(p,[o],o.dtype,c)}};var Fce=ye({opType:Z.ROUND}),PG={kernelName:Is,backendName:"webgpu",kernelFunc:Fce};var Pce=ye({opType:Z.RSQRT,cpuKernelImpl:tW}),OG={kernelName:Do,backendName:"webgpu",kernelFunc:Pce};var qa=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` + `}};var hU={kernelName:Ds,backendName:"webgpu",kernelFunc:({inputs:r,attrs:e,backend:t})=>{let{image:o}=r,{radians:n,fillValue:s,center:a}=e,i=t,p=new ay(o.shape,s),[u,c]=w.getImageCenter(a,o.shape[1],o.shape[2]),l=[{type:"float32",data:[u]},{type:"float32",data:[c]},{type:"float32",data:[Math.sin(n)]},{type:"float32",data:[Math.cos(n)]}];return typeof s=="number"?l.push({type:"float32",data:[Number.parseFloat(s.toFixed(2))]}):l.push({type:"float32",data:s}),i.runWebGPUProgram(p,[o],o.dtype,l)}};var sce=ye({opType:Z.ROUND}),gU={kernelName:cs,backendName:"webgpu",kernelFunc:sce};var ace=ye({opType:Z.RSQRT,cpuKernelImpl:Oz}),xU={kernelName:ls,backendName:"webgpu",kernelFunc:ace};var za=class{constructor(e,t,o,n,s,a,i,p=!0){this.variableNames=["updates","indices"],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=a,this.type=i,this.sumDupeIndices=p,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.sliceDimGreaterThanOne=t>1,this.shaderKey=`scatter_${o}_${n}_${this.sliceDimGreaterThanOne}_${i}_${p}_${s.length}`;let u=ft(s.length);this.uniforms=`sliceDim : i32, strides: ${u}, updatesSize: i32,`,this.updatesRank=n,this.indicesRank=o}getUserCode(){let e="";this.indicesRank===1?e="coords[0]":this.indicesRank===2&&(e="coords[0], j");let t=`getIndices(${e})`,o=this.sliceDimGreaterThanOne?"uniforms.strides[j]":"uniforms.strides",n="",s="";this.dispatchLayout.x.length===1?(n="flattenedIndex",s=` fn getUpdatesCoordsFromFlatIndex(index : i32) -> i32 { return index; } @@ -8159,7 +8159,7 @@ return a / b;`,hre=` let d1 = index - d0 * sliceSize; return vec2(d0, d1); } - `);let i=`getUpdates(${Array.from({length:this.updatesRank},(u,l)=>`coords[${l}]`).join(", ")})`;return` + `);let i=`getUpdates(${Array.from({length:this.updatesRank},(u,c)=>`coords[${c}]`).join(", ")})`;return` ${s} ${G("index")} { if (index < uniforms.updatesSize) { @@ -8170,12 +8170,12 @@ return a / b;`,hre=` flattenedIndex = flattenedIndex + indexInside * ${o}; } let updateValue = - ${Eu(this.type)}(${i}); + ${Su(this.type)}(${i}); let flatIndex = getOutputIndexFromCoords(${n}); - ${this.sumDupeIndices?oo("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} + ${this.sumDupeIndices?Qr("&result[flatIndex]","updateValue",this.type):"atomicStore(&result[flatIndex], bitcast(updateValue));"} } - }`}};function Oce(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(s,n,a),m=[c/u,u];if(c===0)return t.makeTensorInfo(a,n.dtype);let d=le({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=le({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=Nt({backend:t,attrs:{shape:m,value:0,dtype:h}}),x=y.sizeFromShape(f.shape),b=[{type:"int32",data:[i]},{type:"int32",data:l},{type:"int32",data:[x]}],w=new qa(f.shape,i,d.shape.length,f.shape.length,l,m,h),S=t.runWebGPUProgram(w,[f,d],h,b,g),k=le({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var MG={kernelName:vs,backendName:"webgpu",kernelFunc:Oce};var Cy=class{constructor(e,t){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` + }`}};function ice(r){let{inputs:e,backend:t,attrs:o}=r,{indices:n,updates:s}=e,{shape:a}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(s,n,a),m=[l/u,u];if(l===0)return t.makeTensorInfo(a,n.dtype);let d=pe({inputs:{x:n},backend:t,attrs:{shape:[p,i]}}),f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,u]}}),h=f.dtype,g=vt({backend:t,attrs:{shape:m,value:0,dtype:h}}),x=y.sizeFromShape(f.shape),b=[{type:"int32",data:[i]},{type:"int32",data:c},{type:"int32",data:[x]}],C=new za(f.shape,i,d.shape.length,f.shape.length,c,m,h),S=t.runWebGPUProgram(C,[f,d],h,b,g),k=pe({inputs:{x:S},backend:t,attrs:{shape:a}});return t.disposeData(d.dataId),t.disposeData(f.dataId),t.disposeData(S.dataId),k}var yU={kernelName:ms,backendName:"webgpu",kernelFunc:ice};var iy=class{constructor(e,t){this.outputShape=[],this.variableNames=["sortedSequence","values"],this.uniforms="numInputs : i32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.side=t,this.shaderKey=`search_sorted_${t}`}getUserCode(){return` fn findBound(batch: i32, value: f32) -> i32 { var left = i32(0); var right = uniforms.numInputs; @@ -8197,7 +8197,7 @@ return a / b;`,hre=` setOutputAtIndexI32(index, findBound(coords[0], value)); } } - `}};function Mce(r){let{inputs:e,backend:t,attrs:o}=r,{sortedSequence:n,values:s}=e,{side:a}=o,i=new Cy([s.shape[0],s.shape[1]],a),p=[{type:"int32",data:[n.shape[1]]}];return t.runWebGPUProgram(i,[n,s],"int32",p)}var LG={kernelName:Ns,backendName:"webgpu",kernelFunc:Mce};var wy=class{constructor(e,t,o){this.variableNames=["c","a","b"],this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=t,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.cRank=e,this.rank=o,this.shaderKey="select"}getUserCode(){let e,t;if(this.rank>4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i4)throw Error(`Where for rank ${this.rank} is not yet supported`);if(this.rank===1)t="resRC",e="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],a=[];for(let i=0;i{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=Bv(this.newDim);return` - ${xm(this.paddedXShape,"PaddedX")} + `}};function pce(r){let{inputs:e,backend:t}=r,{condition:o,t:n,e:s}=e,a=new uy(o.shape.length,n.shape,n.shape.length);return t.runWebGPUProgram(a,[o,n,s],dt(n.dtype,s.dtype))}var CU={kernelName:fa,backendName:"webgpu",kernelFunc:pce};var cce=ye({opType:Z.SELU}),wU={kernelName:hs,backendName:"webgpu",kernelFunc:cce};var lce=ye({opType:Z.SIGMOID}),SU={kernelName:bs,backendName:"webgpu",kernelFunc:lce};var mce=ye({opType:Z.SIGN}),IU={kernelName:ys,backendName:"webgpu",kernelFunc:mce};var dce=ye({opType:Z.SIN}),vU={kernelName:gs,backendName:"webgpu",kernelFunc:dce};var fce=ye({opType:Z.SINH}),kU={kernelName:xs,backendName:"webgpu",kernelFunc:fce};var hce=ye({opType:Z.SOFTPLUS}),NU={kernelName:Cs,backendName:"webgpu",kernelFunc:hce};var py=class{constructor(e,t,o,n,s,a){this.variableNames=["x"],this.outputShape=[],this.uniforms="",this.workgroupSize=[64,1,1],this.size=!0;let i=new Array(n.length);for(let p=0;p{this.uniforms+=` pad${u} : vec2,`}),this.shaderKey=`spaceToBatchND_${s}`}getUserCode(){let e=ft(this.outputShape.length),t=e0(this.newDim);return` + ${cm(this.paddedXShape,"PaddedX")} ${G("index")} { if(index < uniforms.size) { let coords = getCoordsFromIndex(index); let switchedIndex = getIndexFromCoords${this.outputShape.length}D(${e}(${t}), uniforms.reshapedPaddedXShape); let paddedCoords = getPaddedXCoordsFromIndex(switchedIndex); - ${Qv(this.xShape,!0)} + ${m0(this.xShape,!0)} } } - `}};var Hce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,w)=>b*w),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[w]+b[1]),l=C.getReshaped(u,s,i,!1),c=C.getPermuted(l.length,s.length,!1),m=C.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new Sy(n.shape,u,p,l,c,d.length),h=[{type:"int32",data:l},{type:"int32",data:d}];p.map(b=>h.push({type:"int32",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=le({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},KG={kernelName:Sa,backendName:"webgpu",kernelFunc:Hce};var Iy=class{constructor(e,t,o){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` + `}};var gce=r=>{let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{blockShape:s,paddings:a}=o;y.assert(n.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGPU backend not implemented yet");let i=s.reduce((b,C)=>b*C),p=[[0,0]];p.push(...a);for(let b=1+s.length;bb[0]+n.shape[C]+b[1]),c=w.getReshaped(u,s,i,!1),l=w.getPermuted(c.length,s.length,!1),m=w.getReshapedPermuted(u,s,i,!1),d=y.computeStrides(u),f=new py(n.shape,u,p,c,l,d.length),h=[{type:"int32",data:c},{type:"int32",data:d}];p.map(b=>h.push({type:"int32",data:[b[0],b[1]]}));let g=t.runWebGPUProgram(f,[n],n.dtype,h),x=pe({inputs:{x:g},backend:t,attrs:{shape:m}});return t.disposeData(g.dataId),x},TU={kernelName:ga,backendName:"webgpu",kernelFunc:gce};var cy=class{constructor(e,t,o){this.variableNames=["input","indices","segmentIds"],this.outputShape=[],this.uniforms="segmentSize : i32, sparseSize : i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=e,this.type=o,this.dispatchLayout=X([t]),this.dispatch=H(this.dispatchLayout,[t],this.workgroupSize),this.shaderKey="sparseSegmentSum"}getUserCode(){return` ${G("index")} { if (index < uniforms.sparseSize) { let indexInSegmentIds = index / uniforms.segmentSize; @@ -8229,17 +8229,17 @@ return a / b;`,hre=` let value = input[indexInInput * uniforms.segmentSize + indexInSegment]; let outIndex = segmentId * uniforms.segmentSize + indexInSegment; - ${oo("&result[outIndex]","value",this.type)} + ${Qr("&result[outIndex]","value",this.type)} } } - `}},vy=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` + `}},ly=class{constructor(e,t){this.variableNames=["segmentIds"],this.outputShape=[],this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=[e],this.dispatchLayout=X(t),this.dispatch=H(this.dispatchLayout,t,this.workgroupSize),this.shaderKey="sparseSegmentIdCountProgram"}getUserCode(){return` ${G("index")} { if (index < uniforms.segmentIdsShape) { let segmentId = segmentIds[index]; - ${oo("&result[segmentId]","1","int32")} + ${Qr("&result[segmentId]","1","int32")} } } - `}},ky=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` + `}},my=class{constructor(e,t){this.variableNames=["segmentSum","sameSegmentIdCount"],this.outputShape=[],this.uniforms="segmentSize : i32",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.type=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),this.shaderKey="sparseSegmentMean"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let segmentId = index / uniforms.segmentSize; @@ -8249,21 +8249,21 @@ return a / b;`,hre=` } } } - `}};function Ny(r,e,t,o=!1,n){let a=y.sizeFromShape(r.shape)/r.shape[0],i=r.dtype,p=y.sizeFromShape(e.shape),u=n.readSync(t.dataId),c=p>0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=c;let f=p*a,h=Nt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new Iy(d,f,i);let g=[{type:"int32",data:[a]},{type:"int32",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=Nt({backend:n,attrs:{shape:[c],value:0,dtype:"int32"}});m=new vy(c,t.shape);let w=n.runWebGPUProgram(m,[t],"int32",null,b),S=Nt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new ky(d,i),g=[{type:"int32",data:[a]}];let k=n.runWebGPUProgram(m,[x,w],i,g,S);return n.disposeData(x.dataId),n.disposeData(w.dataId),k}function Kce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return Ny(o,n,s,!1,t)}var qG={kernelName:va,backendName:"webgpu",kernelFunc:Kce};function qce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return Ny(o,n,s,!0,t)}var jG={kernelName:ka,backendName:"webgpu",kernelFunc:qce};var Ty=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n0?u[p-1]+1:0,m,d=r.shape.slice();d[0]=l;let f=p*a,h=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new cy(d,f,i);let g=[{type:"int32",data:[a]},{type:"int32",data:[f]}],x=n.runWebGPUProgram(m,[r,e,t],i,g,h);if(o)return x;let b=vt({backend:n,attrs:{shape:[l],value:0,dtype:"int32"}});m=new ly(l,t.shape);let C=n.runWebGPUProgram(m,[t],"int32",null,b),S=vt({backend:n,attrs:{shape:d,value:0,dtype:i}});m=new my(d,i),g=[{type:"int32",data:[a]}];let k=n.runWebGPUProgram(m,[x,C],i,g,S);return n.disposeData(x.dataId),n.disposeData(C.dataId),k}function xce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!1,t)}var _U={kernelName:ya,backendName:"webgpu",kernelFunc:xce};function yce(r){let{inputs:e,backend:t}=r,{data:o,indices:n,segmentIds:s}=e;return dy(o,n,s,!0,t)}var EU={kernelName:ba,backendName:"webgpu",kernelFunc:yce};var fy=class{constructor(e,t){this.variableNames=["A"],this.workgroupSize=[64,1,1],this.size=!0;let o=new Array(e.length);for(let n=0;n=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,l=ie(n.shape,n.dtype,u),c=uW(l,s);return t.makeTensorInfo(c.shape,c.dtype,c.values)}let a=new Ty(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var XG={kernelName:Mo,backendName:"webgpu",kernelFunc:$m};function Xce(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:l,strides:c,outputSize:m}=C.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let R=t.bufferSync(n),D=t.bufferSync(s),F=y.decodeString(t.readSync(a.dataId)[0]),O=rW(R,D,i,m,l,u,p,c,F,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/l,l],h=le({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?le({inputs:{x:s},backend:t,attrs:{shape:[u,l]}}):Pt({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),w=le({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=$m({inputs:{x:w},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,l]),T=[{type:"int32",data:[p]},{type:"int32",data:c},{type:"int32",data:[k]}];switch(u){case 0:break;case 1:{let R=new qa([u,l],p,h.shape.length,g.shape.length,c,f,x,d);t.runWebGPUProgram(R,[g,h],x,T,S)}break;default:{let R=new qa([u,l],p,h.shape.length,b.shape.length,c,f,x,d);t.runWebGPUProgram(R,[b,h],x,T,S)}{let R=new qa([u,l],p,h.shape.length,g.shape.length,c,f,x);t.runWebGPUProgram(R,[g,h],x,T,S)}}let E=le({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(w.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),E}var YG={kernelName:Ps,backendName:"webgpu",kernelFunc:Xce};function Yce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=C.prepareSplitSize(n,s,i),u=n.shape.length,l=new Array(u).fill(0),c=n.shape.slice();return p.map(m=>{let d=[...c];d[i]=m;let f=ea({inputs:{x:n},backend:t,attrs:{begin:l,size:d}});return l[i]+=m,f})}var QG={kernelName:Ia,backendName:"webgpu",kernelFunc:Yce};var Qce=ye({opType:Z.SQRT}),ZG={kernelName:Fo,backendName:"webgpu",kernelFunc:Qce};var JG={kernelName:tu,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new so(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Zce=tt({opType:fe.SQUARED_DIFFERENCE}),e4={kernelName:Po,backendName:"webgpu",kernelFunc:Zce};function Jce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new so(o.shape,Z.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var t4={kernelName:Ko,backendName:"webgpu",kernelFunc:Jce};var _y=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(",")}return` + `}};function bce(r,e=""){if(r>=5)throw Error(`Tile for rank ${r} is not yet supported`);if(r===1)return`(resRC % ${e}aShape)`;let t=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[];for(let n=0;n=5){let p=t.readSync(n.dataId),u=n.dtype==="string"?p.map(m=>y.decodeString(m)):p,c=me(n.shape,n.dtype,u),l=Uz(c,s);return t.makeTensorInfo(l.shape,l.dtype,l.values)}let a=new fy(n.shape,s);return t.runWebGPUProgram(a,[n],n.dtype)}var $U={kernelName:po,backendName:"webgpu",kernelFunc:Cm};function Cce(r){let{inputs:e,backend:t,attrs:o}=r,{sparseIndices:n,sparseValues:s,defaultValue:a}=e,{outputShape:i}=o,{sliceRank:p,numUpdates:u,sliceSize:c,strides:l,outputSize:m}=w.calculateShapes(s,n,i),d=!1;if(s.dtype==="string"){let R=t.bufferSync(n),D=t.bufferSync(s),P=y.decodeString(t.readSync(a.dataId)[0]),O=Mz(R,D,i,m,c,u,p,l,P,d);return t.makeTensorInfo(i,O.dtype,O.values)}let f=[m/c,c],h=pe({inputs:{x:n},backend:t,attrs:{shape:[u,p]}}),g=s.shape.length?pe({inputs:{x:s},backend:t,attrs:{shape:[u,c]}}):At({inputs:{x:s},backend:t}),x=g.dtype,b=t.makeTensorInfo([],x,y.makeZerosTypedArray(1,x)),C=pe({inputs:{x:a},backend:t,attrs:{shape:Array(f.length).fill(1)}}),S=Cm({inputs:{x:C},backend:t,attrs:{reps:f}}),k=y.sizeFromShape([u,c]),_=[{type:"int32",data:[p]},{type:"int32",data:l},{type:"int32",data:[k]}];switch(u){case 0:break;case 1:{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x,d);t.runWebGPUProgram(R,[g,h],x,_,S)}break;default:{let R=new za([u,c],p,h.shape.length,b.shape.length,l,f,x,d);t.runWebGPUProgram(R,[b,h],x,_,S)}{let R=new za([u,c],p,h.shape.length,g.shape.length,l,f,x);t.runWebGPUProgram(R,[g,h],x,_,S)}}let $=pe({inputs:{x:S},backend:t,attrs:{shape:i}});return t.disposeData(h.dataId),t.disposeData(g.dataId),t.disposeData(C.dataId),t.disposeData(b.dataId),t.disposeData(S.dataId),$}var RU={kernelName:vs,backendName:"webgpu",kernelFunc:Cce};function wce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{numOrSizeSplits:s,axis:a}=o,i=y.parseAxisParam(a,n.shape)[0],p=w.prepareSplitSize(n,s,i),u=n.shape.length,c=new Array(u).fill(0),l=n.shape.slice();return p.map(m=>{let d=[...l];d[i]=m;let f=Hs({inputs:{x:n},backend:t,attrs:{begin:c,size:d}});return c[i]+=m,f})}var DU={kernelName:xa,backendName:"webgpu",kernelFunc:wce};var Sce=ye({opType:Z.SQRT}),AU={kernelName:ws,backendName:"webgpu",kernelFunc:Sce};var FU={kernelName:qi,backendName:"webgpu",kernelFunc:({inputs:r,backend:e})=>{let{x:t}=r,o=e,n=new Jr(t.shape,Z.SQUARE);return o.runWebGPUProgram(n,[t],t.dtype)}};var Ice=et({opType:fe.SQUARED_DIFFERENCE}),PU={kernelName:ks,backendName:"webgpu",kernelFunc:Ice};function vce({inputs:r,attrs:e,backend:t}){let{x:o}=r,n=new Jr(o.shape,Z.STEP,"stepAlpha : f32,"),s=[{type:"float32",data:[e.alpha]}];return t.runWebGPUProgram(n,[o],o.dtype,s)}var OU={kernelName:wo,backendName:"webgpu",kernelFunc:vce};var hy=class{constructor(e){this.variableNames=["x"],this.workPerThread=1,this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize,[this.workPerThread,1,1]);let t=ft(this.outputShape.length);this.uniforms=`begin : ${t}, strides : ${t}, `,this.shaderKey="stridedSlice"}getUserCode(){let e=this.outputShape.length,t="";if(e===1)t="coords * uniforms.strides + uniforms.begin";else{let n=0;t=this.outputShape.map((s,a)=>(n++,this.outputShape.length===1?`coords * uniforms.strides[${a}] + uniforms.begin[${a}]`:`coords[${n-1}] * uniforms.strides[${a}] + uniforms.begin[${a}]`)).join(",")}return` ${G("index")} { if (index < uniforms.size) { let coords = getCoordsFromIndex(index); setOutputAtIndex(index, getX(${t})); } } - `}};function eme(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:l,newAxisMask:c,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:w,strides:S}=nt.sliceInfo(n.shape,s,a,i,p,u,l,c,m),k;if(h)k=le({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let T=nt.computeOutShape(b,w,S),E=ea({inputs:{x:n},backend:t,attrs:{begin:b,size:T}});k=le({inputs:{x:E},backend:t,attrs:{shape:f}}),t.disposeData(E.dataId)}else if(t.shouldExecuteOnCPU([n])){let E=t.readSync(n.dataId),R=ie(n.shape,n.dtype,E),D=sW(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let E=new _y(d),R=[{type:"int32",data:b},{type:"int32",data:S}],D=t.runWebGPUProgram(E,[n],n.dtype,R);k=le({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var r4={kernelName:Os,backendName:"webgpu",kernelFunc:eme};function tme(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:l,dataSplits:c}=e,m=t.readSync(l.dataId),d=t.readSync(c.dataId),[f,h]=aW(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(c.shape,"int32",h)]}var o4={kernelName:Na,backendName:"webgpu",kernelFunc:tme};var rme=tt({opType:fe.SUB,cpuKernelImpl:iW,supportsComplex:!0}),n4={kernelName:Oo,backendName:"webgpu",kernelFunc:rme};var ome=ye({opType:Z.TAN}),s4={kernelName:Ms,backendName:"webgpu",kernelFunc:ome};var nme=ye({opType:Z.TANH}),a4={kernelName:Ls,backendName:"webgpu",kernelFunc:nme};function sme(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:l,outputSize:c}=C.calculateShapes(a,s,n.shape),m=[c/u,u];if(c===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=le({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=le({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=le({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=$m({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new qa([p,u],i,f.shape.length,h.shape.length,l,m,n.dtype,!1),w=y.sizeFromShape([p,u]),S=[{type:"int32",data:[i]},{type:"int32",data:l},{type:"int32",data:[w]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let T=le({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach(E=>t.disposeData(E.dataId)),T}var i4={kernelName:ks,backendName:"webgpu",kernelFunc:sme};var Ey=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, + `}};function kce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n}=e,{begin:s,end:a,strides:i,beginMask:p,endMask:u,ellipsisMask:c,newAxisMask:l,shrinkAxisMask:m}=o,{finalShapeSparse:d,finalShape:f,isIdentity:h,sliceDim0:g,isSimpleSlice:x,begin:b,end:C,strides:S}=pt.sliceInfo(n.shape,s,a,i,p,u,c,l,m),k;if(h)k=pe({inputs:{x:n},backend:t,attrs:{shape:f}});else if(g||x){y.assert(n.shape.length>=1,()=>`Input must have rank at least 1, got: ${n.shape.length}`);let _=pt.computeOutShape(b,C,S),$=Hs({inputs:{x:n},backend:t,attrs:{begin:b,size:_}});k=pe({inputs:{x:$},backend:t,attrs:{shape:f}}),t.disposeData($.dataId)}else if(t.shouldExecuteOnCPU([n])){let $=t.readSync(n.dataId),R=me(n.shape,n.dtype,$),D=zz(d,R,S,b);k=t.makeTensorInfo(f,n.dtype,D.values)}else{let $=new hy(d),R=[{type:"int32",data:b},{type:"int32",data:S}],D=t.runWebGPUProgram($,[n],n.dtype,R);k=pe({inputs:{x:D},backend:t,attrs:{shape:f}}),t.disposeData(D.dataId)}return k}var MU={kernelName:Ns,backendName:"webgpu",kernelFunc:kce};function Nce(r){let{inputs:e,backend:t,attrs:o}=r,{separator:n,nGramWidths:s,leftPad:a,rightPad:i,padWidth:p,preserveShortSequences:u}=o,{data:c,dataSplits:l}=e,m=t.readSync(c.dataId),d=t.readSync(l.dataId),[f,h]=Vz(m,d,n,s,a,i,p,u);return[t.makeTensorInfo([f.length],"string",f),t.makeTensorInfo(l.shape,"int32",h)]}var LU={kernelName:Ca,backendName:"webgpu",kernelFunc:Nce};var Tce=et({opType:fe.SUB,cpuKernelImpl:Wz,supportsComplex:!0}),BU={kernelName:Ts,backendName:"webgpu",kernelFunc:Tce};var _ce=ye({opType:Z.TAN}),zU={kernelName:_s,backendName:"webgpu",kernelFunc:_ce};var Ece=ye({opType:Z.TANH}),VU={kernelName:Es,backendName:"webgpu",kernelFunc:Ece};function $ce(r){let{inputs:e,backend:t,attrs:o}=r,{tensor:n,indices:s,updates:a}=e,{}=o,{sliceRank:i,numUpdates:p,sliceSize:u,strides:c,outputSize:l}=w.calculateShapes(a,s,n.shape),m=[l/u,u];if(l===0)return t.makeTensorInfo(n.shape,s.dtype);let d=[],f=pe({inputs:{x:s},backend:t,attrs:{shape:[p,i]}});d.push(f);let h=pe({inputs:{x:a},backend:t,attrs:{shape:[p,u]}});d.push(h);let g=pe({inputs:{x:n},backend:t,attrs:{shape:m}});d.push(g);let x=Cm({inputs:{x:g},backend:t,attrs:{reps:Array(m.length).fill(1)}}),b=new za([p,u],i,f.shape.length,h.shape.length,c,m,n.dtype,!1),C=y.sizeFromShape([p,u]),S=[{type:"int32",data:[i]},{type:"int32",data:c},{type:"int32",data:[C]}],k=t.runWebGPUProgram(b,[h,f],g.dtype,S,x);d.push(k);let _=pe({inputs:{x:k},backend:t,attrs:{shape:n.shape}});return d.forEach($=>t.disposeData($.dataId)),_}var WU={kernelName:ds,backendName:"webgpu",kernelFunc:$ce};var gy=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms=`inputSize : i32, firstPass : i32, negativeInf : f32, dir : i32, inc : i32,`,this.shaderKey="swap"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { @@ -8331,7 +8331,7 @@ return a / b;`,hre=` } } } - `}},$y=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` + `}},xy=class{constructor(e){this.variableNames=["x","indices"],this.workgroupSize=[256,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.uniforms="inputSize : i32, firstPass : i32, k : i32,",this.shaderKey="merge"}getUserCode(){return` ${G("index")} { if (index < uniforms.size) { let outC = getCoordsFromIndex(index); @@ -8390,7 +8390,7 @@ return a / b;`,hre=` } } } - `}};function pc(r,e){e!==null&&r.disposeData(e.dataId)}function u4(r){let e=1;for(;ef===null?[c,c]:[c,f],g=(k,T,E)=>{let R=h(),D=new Ey(E),O=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[k]},{type:"int32",data:[T]}],M=f;f=t.runWebGPUProgram(D,R,"int32",O),pc(t,M)};for(let k=1;k=1;E/=2)g(T,E,[l,d])}for(let k=d;k>m;k/=2){let T=h(),E=new $y([l,k/2]),D=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"int32",data:[m]}],F=f;f=t.runWebGPUProgram(E,T,"int32",D),pc(t,F);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=ea({inputs:{x:f},backend:t,attrs:{begin:0,size:[l,s]}}),pc(t,x);let b=Xv({inputs:{x:c,indices:f},backend:t,attrs:{axis:1,batchDims:1}});pc(t,c);let w=i.slice(0,-1);w.push(s),x=f,f=le({inputs:{x:f},attrs:{shape:w},backend:t}),pc(t,x);let S=b;return b=le({inputs:{x:b},attrs:{shape:w},backend:t}),pc(t,S),[b,f]}var p4={kernelName:Bs,backendName:"webgpu",kernelFunc:ame};var Ry=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` + `}};function rl(r,e){e!==null&&r.disposeData(e.dataId)}function UU(r){let e=1;for(;ef===null?[l,l]:[l,f],g=(k,_,$)=>{let R=h(),D=new gy($),O=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"float32",data:[Number.NEGATIVE_INFINITY]},{type:"int32",data:[k]},{type:"int32",data:[_]}],M=f;f=t.runWebGPUProgram(D,R,"int32",O),rl(t,M)};for(let k=1;k=1;$/=2)g(_,$,[c,d])}for(let k=d;k>m;k/=2){let _=h(),$=new xy([c,k/2]),D=[{type:"int32",data:[p]},{type:"int32",data:[f===null?1:0]},{type:"int32",data:[m]}],P=f;f=t.runWebGPUProgram($,_,"int32",D),rl(t,P);let O=m/2,M=O*2;for(let L=O;L>=1;L/=2)g(M,L,f.shape)}let x=f;f=Hs({inputs:{x:f},backend:t,attrs:{begin:0,size:[c,s]}}),rl(t,x);let b=c0({inputs:{x:l,indices:f},backend:t,attrs:{axis:1,batchDims:1}});rl(t,l);let C=i.slice(0,-1);C.push(s),x=f,f=pe({inputs:{x:f},attrs:{shape:C},backend:t}),rl(t,x);let S=b;return b=pe({inputs:{x:b},attrs:{shape:C},backend:t}),rl(t,S),[b,f]}var GU={kernelName:$s,backendName:"webgpu",kernelFunc:Rce};var yy=class{constructor(e){this.variableNames=["Image","Transforms"],this.uniforms="interpolationModeId : i32, fillModeId : i32, fillValue : f32,",this.workgroupSize=[64,1,1],this.size=!0,this.outputShape=e,this.dispatchLayout=X(this.outputShape),this.dispatch=H(this.dispatchLayout,this.outputShape,this.workgroupSize),this.shaderKey="transform"}getUserCode(){return` fn mapCoord(outCoord : f32, len : f32) -> f32{ var inCoord = outCoord; if(uniforms.fillModeId == 2) { @@ -8506,7 +8506,7 @@ return a / b;`,hre=` setOutputAtIndex(index, outputValue); } } - `}};function ime(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[l,c,m,d]=n.shape,[f,h]=u!=null?u:[c,m],g=[l,f,h,d],x=new Ry(g),b=a==="nearest"?1:2,w;switch(i){case"constant":w=1;break;case"reflect":w=2;break;case"wrap":w=3;break;case"nearest":w=4;break;default:w=1;break}let S=[{type:"int32",data:[b]},{type:"int32",data:[w]},{type:"float32",data:[p]}];return t.runWebGPUProgram(x,[n,s],"float32",S)}var l4={kernelName:zs,backendName:"webgpu",kernelFunc:ime};function ume(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),l=0;for(let h=0;ht.disposeData(h.dataId)),f}var c4={kernelName:Ta,backendName:"webgpu",kernelFunc:ume};var Dy=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 + `}};function Dce(r){let{inputs:e,backend:t,attrs:o}=r,{image:n,transforms:s}=e,{interpolation:a,fillMode:i,fillValue:p,outputShape:u}=o,[c,l,m,d]=n.shape,[f,h]=u!=null?u:[l,m],g=[c,f,h,d],x=new yy(g),b=a==="nearest"?1:2,C;switch(i){case"constant":C=1;break;case"reflect":C=2;break;case"wrap":C=3;break;case"nearest":C=4;break;default:C=1;break}let S=[{type:"int32",data:[b]},{type:"int32",data:[C]},{type:"float32",data:[p]}];return t.runWebGPUProgram(x,[n,s],"float32",S)}var HU={kernelName:Rs,backendName:"webgpu",kernelFunc:Dce};function Ace(r){let{inputs:e,backend:t,attrs:o}=r,{value:n}=e,{axis:s}=o;s<0&&(s+=n.shape.length);let a=n,i=a.shape.length,p=n.shape[s],u=new Array(i-1),c=0;for(let h=0;ht.disposeData(h.dataId)),f}var KU={kernelName:wa,backendName:"webgpu",kernelFunc:Ace};var by=class{constructor(e,t,o){if(this.outputShape=[],this.variableNames=["x","segmentIds"],this.uniforms="numSegments : i32, xSize: i32,",this.workgroupSize=[64,1,1],this.atomic=!0,this.outputShape=t,this.dispatchLayout=X(e),this.dispatch=H(this.dispatchLayout,e,this.workgroupSize),o!=="float32"&&o!=="int32")throw new Error(`UnsortedSegmentSum only supports float32 and int32 types, does not support ${o} type.`);this.type=o,this.shaderKey="unsortedSegmentSum"}getUserCode(){return` ${G("index")} { if (index < uniforms.xSize) { @@ -8519,8 +8519,8 @@ return a / b;`,hre=` let flatIndex = b * uniforms.numSegments + segmentId % uniforms.numSegments; let value = getX(b, inCol); - ${oo("&result[flatIndex]","value",this.type)} + ${Qr("&result[flatIndex]","value",this.type)} } } } - `}};function pme(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,l=C.getAxesPermutation([u],i),c=n;l!=null&&(c=Cr({inputs:{x:n},backend:t,attrs:{perm:l}}),p.push(c),u=C.getInnerMostAxes(1,i)[0]);let m=C.segment_util.computeOutShape(c.shape,u,a),d=y.sizeFromShape([c.shape[u]]),f=le({inputs:{x:c},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=Nt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new Dy(f.shape,g,h),w=[{type:"int32",data:[a]},{type:"int32",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,w,x),k=le({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let T=k;if(l!=null){p.push(k);let E=C.getUndoAxesPermutation(l);T=Cr({inputs:{x:T},backend:t,attrs:{perm:E}})}return p.forEach(E=>t.disposeData(E.dataId)),T}var m4={kernelName:su,backendName:"webgpu",kernelFunc:pme};var lme=[jz,cW,mW,dW,fW,hW,xW,yW,bW,CW,wW,SW,IW,vW,kW,_W,EW,$W,RW,DW,FW,PW,OW,zW,VW,WW,Yz,GW,KW,qW,jW,XW,YW,QW,ZW,JW,eU,tU,nU,sU,aU,iU,pU,lU,uU,cU,mU,dU,fU,hU,yU,bU,CU,wU,SU,IU,vU,kU,NU,Kz,TU,$U,_U,EU,RU,DU,AU,FU,PU,OU,MU,Xz,LU,HW,BU,zU,VU,WU,UU,GU,HU,qU,KU,jU,XU,YU,ZU,JU,NW,eG,tG,nG,rG,oG,sG,TW,aG,iG,uG,pG,cG,gU,mG,dG,fG,MW,hG,yG,bG,CG,wG,SG,IG,vG,LW,kG,NG,TG,_G,qz,EG,$G,RG,DG,AG,FG,PG,OG,MG,LG,BG,zG,VG,WG,UG,GG,AW,t4,r4,o4,lG,HG,KG,qG,jG,YG,QG,ZG,JG,e4,n4,xU,s4,a4,i4,XG,p4,l4,gW,c4,m4,gG];for(let r of lme)li(r);var d4="4.17.0",cme="4.17.0",mme="4.17.0",dme="4.17.0",fme="4.17.0",hme="4.14.0",gme={tfjs:d4,"tfjs-core":d4,"tfjs-converter":cme,"tfjs-backend-cpu":mme,"tfjs-backend-webgl":dme,"tfjs-backend-wasm":fme,"tfjs-backend-webgpu":hme};var qtr=void 0;export{fn as Abs,hn as Acos,gn as Acosh,sp as AdadeltaOptimizer,ap as AdagradOptimizer,ip as AdamOptimizer,up as AdamaxOptimizer,Rr as Add,xn as AddN,yn as All,bn as Any,na as ArgMax,sa as ArgMin,Cn as Asin,wn as Asinh,Sn as Atan,vn as Atan2,In as Atanh,kn as AvgPool,aa as AvgPool3D,Vi as AvgPool3DGrad,zi as AvgPoolGrad,gm as BackendWasm,Nn as BatchMatMul,ia as BatchToSpaceND,Tn as Bincount,_n as BitwiseAnd,ua as BroadcastArgs,Sme as BroadcastTo,ho as Cast,go as Ceil,Go as ClipByValue,ei as Complex,Wi as ComplexAbs,pa as Concat,En as Conv2D,Ui as Conv2DBackpropFilter,$n as Conv2DBackpropInput,Rn as Conv3D,ti as Conv3DBackpropFilterV2,Dn as Conv3DBackpropInputV2,An as Cos,Fn as Cosh,Mn as CropAndResize,Pn as Cumprod,On as Cumsum,mn as DataStorage,la as DenseBincount,Ln as DepthToSpace,Bn as DepthwiseConv2dNative,Gi as DepthwiseConv2dNativeBackpropFilter,Hi as DepthwiseConv2dNativeBackpropInput,ca as Diag,zn as Dilation2D,qi as Dilation2DBackpropFilter,Ki as Dilation2DBackpropInput,Mu as Draw,xw as ENV,ji as Einsum,Wn as Elu,ri as EluGrad,Cc as Environment,xo as Equal,Un as Erf,yo as Exp,ma as ExpandDims,bo as Expm1,Xi as FFT,da as Fill,Gn as FlipLeftRight,Co as Floor,wo as FloorDiv,Lu as FromPixels,Hn as FusedBatchNorm,jo as FusedConv2D,Xo as FusedDepthwiseConv2D,kp as GPGPUContext,Kn as GatherNd,fa as GatherV2,Kc as GraphModel,So as Greater,Io as GreaterEqual,Yi as IFFT,vo as Identity,Qi as Imag,qn as IsFinite,jn as IsInf,Xn as IsNan,mo as KernelBackend,rs as LRN,oi as LRNGrad,Yn as LeakyRelu,ko as Less,No as LessEqual,Qn as LinSpace,To as Log,Zn as Log1p,Ime as LogSoftmax,Jn as LogicalAnd,es as LogicalNot,ts as LogicalOr,gk as LogicalXor,vme as LowerBound,Il as MathBackendCPU,Ul as MathBackendWebGL,kme as MatrixBandPart,os as Max,ns as MaxPool,ha as MaxPool3D,Ji as MaxPool3DGrad,Zi as MaxPoolGrad,ga as MaxPoolWithArgmax,_o as Maximum,ss as Mean,as as Min,Eo as Minimum,is as MirrorPad,us as Mod,pp as MomentumOptimizer,ps as Multinomial,$o as Multiply,ls as Neg,cs as NonMaxSuppressionV3,ni as NonMaxSuppressionV4,ms as NonMaxSuppressionV5,Ro as NotEqual,Bw as OP_SCOPE_SUFFIX,ds as OneHot,xa as OnesLike,_r as Optimizer,Vc as OptimizerConstructors,ya as Pack,fs as PadV2,Nme as Pool,hs as Pow,gs as Prelu,Ho as Prod,lp as RMSPropOptimizer,Qp as RaggedGather,Zp as RaggedRange,Jp as RaggedTensorToTensor,ba as Range,Ew as Rank,si as Real,Vn as RealDiv,xs as Reciprocal,Dt as Reduction,ys as Relu,ws as Relu6,Ca as Reshape,Cs as ResizeBilinear,ii as ResizeBilinearGrad,bs as ResizeNearestNeighbor,ai as ResizeNearestNeighborGrad,Ss as Reverse,Vs as RotateWithOffset,Is as Round,Do as Rsqrt,wi as SGDOptimizer,vs as ScatterNd,Ns as SearchSorted,wa as Select,Ts as Selu,Ao as Sigmoid,Rs as Sign,Es as Sin,$s as Sinh,_s as Slice,Fs as Softmax,Ds as Softplus,Sa as SpaceToBatchND,eu as SparseFillEmptyRows,ui as SparseReshape,va as SparseSegmentMean,ka as SparseSegmentSum,Ps as SparseToDense,Ia as SplitV,Fo as Sqrt,tu as Square,Po as SquaredDifference,pi as StaticRegexReplace,Ko as Step,Os as StridedSlice,Na as StringNGrams,ru as StringSplit,ou as StringToHashBucketFast,Oo as Sub,As as Sum,Ms as Tan,Ls as Tanh,dt as Tensor,Ge as TensorBuffer,ks as TensorScatterUpdate,Mo as Tile,Bs as TopK,zs as Transform,Kr as Transpose,nu as Unique,Ta as Unpack,su as UnsortedSegmentSum,Tme as UpperBound,ci as Variable,Jl as WebGPUBackend,_a as ZerosLike,qo as _FusedMatMul,er as abs,g1 as acos,x1 as acosh,Ce as add,y1 as addN,b1 as all,C1 as any,w1 as argMax,S1 as argMin,I1 as asin,v1 as asinh,k1 as atan,N1 as atan2,T1 as atanh,Id as avgPool,$1 as avgPool3d,Hk as backend,C as backend_util,R1 as basicLSTMCell,mu as batchNorm,A1 as batchNorm2d,F1 as batchNorm3d,P1 as batchNorm4d,vd as batchToSpaceND,kd as bincount,O1 as bitwiseAnd,oX as booleanMaskAsync,M1 as broadcastArgs,Oa as broadcastTo,kr as broadcast_util,XT as browser,ie as buffer,Ue as cast,L1 as ceil,B1 as clipByValue,Xr as clone,Ar as complex,bt as concat,z1 as concat1d,V1 as concat2d,W1 as concat3d,U1 as concat4d,G1 as conv1d,du as conv2d,H1 as conv2dTranspose,K1 as conv3d,j1 as conv3dTranspose,Pme as copyRegisteredKernels,X1 as cos,Y1 as cosh,Mc as cosineWindow,Q1 as cumprod,Z1 as cumsum,Nr as customGrad,J1 as denseBincount,zw as deprecationWarn,e2 as depthToSpace,cl as depthwiseConv2d,aY as deregisterOp,uu as device_util,t2 as diag,r2 as dilation2d,Kde as disableDeprecationWarnings,Lt as dispose,qde as disposeVariables,Xe as div,n2 as divNoNan,s2 as dot,hX as dropout,fu as einsum,Ed as elu,Hde as enableDebugMode,Gde as enableProdMode,cS as enclosingPowerOfTwo,cr as engine,a2 as ensureShape,A as env,_d as equal,i2 as erf,l2 as euclideanNorm,Jo as exp,Ks as expandDims,c2 as expm1,$d as eye,fl as fft,Ma as fill,efe as findBackend,tfe as findBackendFactory,Rd as floor,Sd as floorDiv,EA as forceHalfFloat,mS as fused,Dd as gather,dX as gatherND,xf as gather_util,Gk as getBackend,Cw as getGradient,tl as getKernel,ad as getKernelsForBackend,kie as getThreadsCount,k0 as gpgpu_util,a6 as grad,i6 as grads,ju as greater,Ad as greaterEqual,ep as ifft,gu as imag,b5 as image,xX as inTopKAsync,Si as io,tf as irfft,m2 as isFinite,d2 as isInf,f2 as isNaN,Fr as keep,Ut as kernel_impls,Fd as leakyRelu,Fc as less,ml as lessEqual,C5 as linalg,h2 as linspace,r7 as loadGraphModel,o7 as loadGraphModelSync,g2 as localResponseNormalization,yi as log,Pd as log1p,x2 as logSigmoid,y2 as logSoftmax,Ld as logSumExp,Xu as logicalAnd,Bd as logicalNot,zd as logicalOr,b2 as logicalXor,w5 as losses,C2 as lowerBound,Je as matMul,HT as math,La as max,Wd as maxPool,w2 as maxPool3d,S2 as maxPoolWithArgmax,Ud as maximum,Yu as mean,jde as memory,I2 as meshgrid,Ac as min,Qu as minimum,v2 as mirrorPad,k2 as mod,N2 as moments,aX as movingAverage,se as mul,T2 as multiRNNCell,_2 as multinomial,mr as neg,IS as nextFrame,qtr as node,qu as norm,Gd as notEqual,Oc as oneHot,Ba as ones,E2 as onesLike,N as op,$2 as outerProduct,za as pad,R2 as pad1d,D2 as pad2d,A2 as pad3d,F2 as pad4d,P2 as pool,xi as pow,Kd as prelu,wd as print,O2 as prod,Xde as profile,M2 as raggedGather,L2 as raggedRange,B2 as raggedTensorToTensor,z2 as rand,iN as randomGamma,Zd as randomNormal,uN as randomStandardNormal,dl as randomUniform,pN as randomUniformInt,xu as range,Zde as ready,bi as real,lN as reciprocal,pu as registerBackend,Dme as registerGradient,li as registerKernel,sY as registerOp,yu as relu,Jd as relu6,Jde as removeBackend,W as reshape,Bo as reverse,cN as reverse1d,mN as reverse2d,dN as reverse3d,fN as reverse4d,hl as rfft,ef as round,hN as rsqrt,ke as scalar,uX as scatterND,Cu as scatter_util,Pc as searchSorted,gN as selu,xN as separableConv2d,AT as serialization,Qde as setBackend,rfe as setPlatform,vie as setThreadsCount,Sie as setWasmPath,Iie as setWasmPaths,BI as setWebGLContext,yN as setdiff1dAsync,Xf as shared,Pa as sigmoid,bN as sign,y5 as signal,CN as sin,wN as sinh,Ye as slice,SN as slice1d,IN as slice2d,vN as slice3d,kN as slice4d,nt as slice_util,NN as softmax,Md as softplus,Hd as spaceToBatchND,S5 as sparse,cX as sparseToDense,x5 as spectral,Ci as split,Pr as sqrt,tr as square,rf as squaredDifference,gl as squeeze,Tr as stack,of as step,TN as stridedSlice,I5 as string,Te as sub,ot as sum,mi as sumOutType,_N as tan,Dc as tanh,pr as tensor,rr as tensor1d,bu as tensor2d,nf as tensor3d,EN as tensor4d,$N as tensor5d,RN as tensor6d,AN as tensorScatterUpdate,Vk as tensor_util,aN as test_util,De as tidy,hu as tile,Yde as time,FN as topk,cHe as train,yl as transpose,PN as truncatedNormal,ON as unique,Fme as unregisterGradient,Ame as unregisterKernel,MN as unsortedSegmentSum,zo as unstack,pt as upcastType,LN as upperBound,y as util,u6 as valueAndGrad,p6 as valueAndGrads,BN as variable,eS as variableGrads,gme as version,s7 as version_converter,t8 as version_core,M7 as version_cpu,Nie as version_wasm,DJ as version_webgl,sut as webgl,Fl as webgl_util,cv as webgpu_util,Lo as where,af as whereAsync,Yr as zeros,Kt as zerosLike}; + `}};function Fce(r){let{inputs:e,backend:t,attrs:o}=r,{x:n,segmentIds:s}=e,{numSegments:a}=o,i=n.shape.length,p=[],u=0,c=w.getAxesPermutation([u],i),l=n;c!=null&&(l=xr({inputs:{x:n},backend:t,attrs:{perm:c}}),p.push(l),u=w.getInnerMostAxes(1,i)[0]);let m=w.segment_util.computeOutShape(l.shape,u,a),d=y.sizeFromShape([l.shape[u]]),f=pe({inputs:{x:l},backend:t,attrs:{shape:[-1,d]}});p.push(f);let h=n.dtype,g=[f.shape[0],a],x=vt({backend:t,attrs:{shape:g,value:0,dtype:h}}),b=new by(f.shape,g,h),C=[{type:"int32",data:[a]},{type:"int32",data:[y.sizeFromShape(f.shape)]}],S=t.runWebGPUProgram(b,[f,s],h,C,x),k=pe({inputs:{x:S},backend:t,attrs:{shape:m}});p.push(S);let _=k;if(c!=null){p.push(k);let $=w.getUndoAxesPermutation(c);_=xr({inputs:{x:_},backend:t,attrs:{perm:$}})}return p.forEach($=>t.disposeData($.dataId)),_}var qU={kernelName:Qi,backendName:"webgpu",kernelFunc:Fce};var Pce=[pz,Kz,qz,jz,Xz,Yz,Zz,Jz,eV,tV,rV,oV,nV,sV,aV,pV,cV,lV,mV,dV,hV,gV,xV,wV,SV,IV,lz,kV,TV,_V,EV,$V,RV,DV,AV,FV,PV,OV,BV,zV,VV,WV,GV,HV,UV,KV,qV,jV,XV,YV,JV,eW,tW,rW,oW,nW,sW,aW,iW,iz,uW,lW,pW,cW,mW,dW,fW,hW,gW,xW,yW,cz,bW,NV,CW,wW,SW,IW,vW,kW,NW,_W,TW,EW,$W,RW,AW,FW,iV,PW,OW,BW,MW,LW,zW,uV,VW,WW,UW,GW,KW,QV,qW,jW,XW,yV,YW,JW,eU,tU,rU,oU,nU,sU,bV,aU,iU,uU,pU,uz,cU,lU,mU,dU,fU,hU,gU,xU,yU,bU,CU,wU,SU,IU,vU,kU,fV,OU,MU,LU,HW,NU,TU,_U,EU,RU,DU,AU,FU,PU,BU,ZV,zU,VU,WU,$U,GU,HU,Qz,KU,qU,QW];for(let r of Pce)ti(r);var jU="4.17.0",Oce="4.17.0",Mce="4.17.0",Lce="4.17.0",Bce="4.17.0",zce="4.17.0",Vce={tfjs:jU,"tfjs-core":jU,"tfjs-converter":Oce,"tfjs-backend-cpu":Mce,"tfjs-backend-webgl":Lce,"tfjs-backend-wasm":Bce,"tfjs-backend-webgpu":zce};var E7t=void 0;export{Xs as Abs,Vo as Acos,Wo as Acosh,Ju as AdadeltaOptimizer,ep as AdagradOptimizer,tp as AdamOptimizer,rp as AdamaxOptimizer,uo as Add,Uo as AddN,Go as All,Ho as Any,Ys as ArgMax,Qs as ArgMin,Ko as Asin,qo as Asinh,jo as Atan,Yo as Atan2,Xo as Atanh,Qo as AvgPool,Zs as AvgPool3D,Ri as AvgPool3DGrad,$i as AvgPoolGrad,pm as BackendWasm,Zo as BatchMatMul,Js as BatchToSpaceND,Jo as Bincount,qa as BitwiseAnd,ea as BroadcastArgs,qce as BroadcastTo,yo as Cast,en as Ceil,bo as ClipByValue,Di as Complex,Ai as ComplexAbs,ta as Concat,tn as Conv2D,Fi as Conv2DBackpropFilter,rn as Conv2DBackpropInput,on as Conv3D,ja as Conv3DBackpropFilterV2,nn as Conv3DBackpropInputV2,sn as Cos,an as Cosh,cn as CropAndResize,un as Cumprod,pn as Cumsum,Bo as DataStorage,ra as DenseBincount,ln as DepthToSpace,mn as DepthwiseConv2dNative,Pi as DepthwiseConv2dNativeBackpropFilter,Oi as DepthwiseConv2dNativeBackpropInput,oa as Diag,dn as Dilation2D,Li as Dilation2DBackpropFilter,Mi as Dilation2DBackpropInput,$u as Draw,nw as ENV,Bi as Einsum,hn as Elu,Xa as EluGrad,dl as Environment,xn as Equal,gn as Erf,yn as Exp,na as ExpandDims,bn as Expm1,zi as FFT,sa as Fill,Cn as FlipLeftRight,wn as Floor,Sn as FloorDiv,Du as FromPixels,In as FusedBatchNorm,Io as FusedConv2D,vo as FusedDepthwiseConv2D,bp as GPGPUContext,vn as GatherNd,aa as GatherV2,Bl as GraphModel,kn as Greater,Nn as GreaterEqual,Vi as IFFT,Co as Identity,Wi as Imag,Tn as IsFinite,_n as IsInf,En as IsNan,ao as KernelBackend,Bn as LRN,Ya as LRNGrad,$n as LeakyRelu,Rn as Less,Dn as LessEqual,An as LinSpace,Fn as Log,Pn as Log1p,jce as LogSoftmax,On as LogicalAnd,Mn as LogicalNot,Ln as LogicalOr,R0 as LogicalXor,Xce as LowerBound,xc as MathBackendCPU,Lc as MathBackendWebGL,Yce as MatrixBandPart,zn as Max,Wn as MaxPool,ia as MaxPool3D,Gi as MaxPool3DGrad,Ui as MaxPoolGrad,ua as MaxPoolWithArgmax,Vn as Maximum,Un as Mean,Gn as Min,Hn as Minimum,Kn as MirrorPad,qn as Mod,op as MomentumOptimizer,jn as Multinomial,Xn as Multiply,pa as Neg,Qn as NonMaxSuppressionV3,Qa as NonMaxSuppressionV4,Zn as NonMaxSuppressionV5,Yn as NotEqual,Nw as OP_SCOPE_SUFFIX,Jn as OneHot,ca as OnesLike,kr as Optimizer,Fl as OptimizerConstructors,la as Pack,es as PadV2,Qce as Pool,ts as Pow,rs as Prelu,os as Prod,np as RMSPropOptimizer,Hp as RaggedGather,Kp as RaggedRange,qp as RaggedTensorToTensor,ma as Range,gw as Rank,Hi as Real,fn as RealDiv,ns as Reciprocal,$t as Reduction,ss as Relu,us as Relu6,da as Reshape,is as ResizeBilinear,Ja as ResizeBilinearGrad,as as ResizeNearestNeighbor,Za as ResizeNearestNeighborGrad,ps as Reverse,Ds as RotateWithOffset,cs as Round,ls as Rsqrt,mi as SGDOptimizer,ms as ScatterNd,fs as SearchSorted,fa as Select,hs as Selu,bs as Sigmoid,ys as Sign,gs as Sin,xs as Sinh,ha as Slice,Is as Softmax,Cs as Softplus,ga as SpaceToBatchND,Ki as SparseFillEmptyRows,ei as SparseReshape,ya as SparseSegmentMean,ba as SparseSegmentSum,vs as SparseToDense,xa as SplitV,ws as Sqrt,qi as Square,ks as SquaredDifference,Ru as StaticRegexReplace,wo as Step,Ns as StridedSlice,Ca as StringNGrams,ji as StringSplit,Xi as StringToHashBucketFast,Ts as Sub,Ss as Sum,_s as Tan,Es as Tanh,mt as Tensor,tt as TensorBuffer,ds as TensorScatterUpdate,po as Tile,$s as TopK,Rs as Transform,co as Transpose,Yi as Unique,wa as Unpack,Qi as UnsortedSegmentSum,Zce as UpperBound,ri as Variable,jc as WebGPUBackend,Sa as ZerosLike,So as _FusedMatMul,Qt as abs,Rk as acos,Dk as acosh,Ce as add,Ak as addN,Fk as all,Pk as any,Ok as argMax,Mk as argMin,Lk as asin,Bk as asinh,zk as atan,Vk as atan2,Wk as atanh,dd as avgPool,Hk as avgPool3d,ak as backend,w as backend_util,Kk as basicLSTMCell,nu as batchNorm,jk as batchNorm2d,Xk as batchNorm3d,Yk as batchNorm4d,fd as batchToSpaceND,hd as bincount,Qk as bitwiseAnd,L6 as booleanMaskAsync,Zk as broadcastArgs,su as broadcastTo,Sr as broadcast_util,cT as browser,me as buffer,Ue as cast,Jk as ceil,e2 as clipByValue,Ur as clone,Er as complex,yt as concat,t2 as concat1d,r2 as concat2d,o2 as concat3d,n2 as concat4d,s2 as conv1d,au as conv2d,a2 as conv2dTranspose,i2 as conv3d,p2 as conv3dTranspose,ale as copyRegisteredKernels,c2 as cos,l2 as cosh,$l as cosineWindow,m2 as cumprod,d2 as cumsum,Ir as customGrad,f2 as denseBincount,Tw as deprecationWarn,h2 as depthToSpace,sc as depthwiseConv2d,V5 as deregisterOp,eu as device_util,g2 as diag,x2 as dilation2d,xme as disableDeprecationWarnings,Ot as dispose,yme as disposeVariables,je as div,b2 as divNoNan,C2 as dot,Y6 as dropout,iu as einsum,bd as elu,gme as enableDebugMode,hme as enableProdMode,Zw as enclosingPowerOfTwo,ur as engine,w2 as ensureShape,A as env,yd as equal,S2 as erf,k2 as euclideanNorm,_o as exp,Ms as expandDims,N2 as expm1,Cd as eye,uc as fft,$a as fill,kme as findBackend,Nme as findBackendFactory,wd as floor,md as floorDiv,GD as forceHalfFloat,Jw as fused,Sd as gather,j6 as gatherND,af as gather_util,sk as getBackend,iw as getGradient,Xp as getKernel,Ym as getKernelsForBackend,aae as getThreadsCount,mv as gpgpu_util,VK as grad,WK as grads,Wu as greater,Id as greaterEqual,ju as ifft,pu as imag,eX as image,Z6 as inTopKAsync,di as io,Hd as irfft,T2 as isFinite,_2 as isInf,E2 as isNaN,$r as keep,Vt as kernel_impls,vd as leakyRelu,Tl as less,ac as lessEqual,tX as linalg,$2 as linspace,M8 as loadGraphModel,L8 as loadGraphModelSync,R2 as localResponseNormalization,pi as log,kd as log1p,D2 as logSigmoid,A2 as logSoftmax,_d as logSumExp,Uu as logicalAnd,Ed as logicalNot,$d as logicalOr,F2 as logicalXor,rX as losses,P2 as lowerBound,Ze as matMul,aT as math,Ra as max,Dd as maxPool,O2 as maxPool3d,M2 as maxPoolWithArgmax,Ad as maximum,Gu as mean,bme as memory,L2 as meshgrid,Nl as min,Hu as minimum,B2 as mirrorPad,z2 as mod,V2 as moments,V6 as movingAverage,se as mul,W2 as multiRNNCell,U2 as multinomial,pr as neg,cS as nextFrame,E7t as node,Vu as norm,Fd as notEqual,El as oneHot,Da as ones,G2 as onesLike,N as op,H2 as outerProduct,Aa as pad,K2 as pad1d,q2 as pad2d,j2 as pad3d,X2 as pad4d,Y2 as pool,ui as pow,Od as prelu,ld as print,Q2 as prod,Cme as profile,Z2 as raggedGather,J2 as raggedRange,e1 as raggedTensorToTensor,t1 as rand,S1 as randomGamma,Wd as randomNormal,I1 as randomStandardNormal,ic as randomUniform,v1 as randomUniformInt,cu as range,Ime as ready,ci as real,k1 as reciprocal,tu as registerBackend,ole as registerGradient,ti as registerKernel,z5 as registerOp,lu as relu,Ud as relu6,vme as removeBackend,W as reshape,mo as reverse,N1 as reverse1d,T1 as reverse2d,_1 as reverse3d,E1 as reverse4d,pc as rfft,Gd as round,$1 as rsqrt,ke as scalar,U6 as scatterND,du as scatter_util,_l as searchSorted,R1 as selu,D1 as separableConv2d,jN as serialization,Sme as setBackend,Tme as setPlatform,sae as setThreadsCount,oae as setWasmPath,nae as setWasmPaths,NI as setWebGLContext,A1 as setdiff1dAsync,Ic as shared,Ea as sigmoid,F1 as sign,Jj as signal,P1 as sin,O1 as sinh,Xe as slice,M1 as slice1d,L1 as slice2d,B1 as slice3d,z1 as slice4d,pt as slice_util,V1 as softmax,Td as softplus,Pd as spaceToBatchND,oX as sparse,K6 as sparseToDense,Zj as spectral,li as split,Rr as sqrt,Zt as square,Kd as squaredDifference,cc as squeeze,vr as stack,qd as step,W1 as stridedSlice,nX as string,Te as sub,ot as sum,oi as sumOutType,U1 as tan,kl as tanh,ar as tensor,Jt as tensor1d,mu as tensor2d,jd as tensor3d,G1 as tensor4d,H1 as tensor5d,K1 as tensor6d,j1 as tensorScatterUpdate,rk as tensor_util,w1 as test_util,De as tidy,uu as tile,wme as time,X1 as topk,OGe as train,mc as transpose,Y1 as truncatedNormal,Q1 as unique,sle as unregisterGradient,nle as unregisterKernel,Z1 as unsortedSegmentSum,fo as unstack,dt as upcastType,J1 as upperBound,y as util,UK as valueAndGrad,GK as valueAndGrads,eN as variable,Vw as variableGrads,Vce as version,z8 as version_converter,OX as version_core,yY as version_cpu,iae as version_wasm,d9 as version_webgl,$at as webgl,Ec as webgl_util,Zv as webgpu_util,lo as where,Yd as whereAsync,Gr as zeros,Gt as zerosLike}; diff --git a/dist/tfjs.version.js b/dist/tfjs.version.js index 302cccfc..bb067537 100644 --- a/dist/tfjs.version.js +++ b/dist/tfjs.version.js @@ -4,4 +4,4 @@ author: ' */ -var e="4.17.0";var s="4.17.0";var t="4.17.0";var n="4.17.0";var r="4.17.0";var i="4.14.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version}; +var e="4.17.0";var s="4.17.0";var t="4.17.0";var n="4.17.0";var r="4.17.0";var i="4.17.0";var h={tfjs:e,"tfjs-core":e,"tfjs-converter":s,"tfjs-backend-cpu":t,"tfjs-backend-webgl":n,"tfjs-backend-wasm":r,"tfjs-backend-webgpu":i};export{h as version}; diff --git a/package.json b/package.json index c590dfca..2ca23aa6 100644 --- a/package.json +++ b/package.json @@ -78,39 +78,40 @@ "tensorflow" ], "devDependencies": { - "@html-eslint/eslint-plugin": "^0.21.0", - "@html-eslint/parser": "^0.21.0", + "@html-eslint/eslint-plugin": "^0.24.1", + "@html-eslint/parser": "^0.24.1", "@microsoft/api-extractor": "^7.43.1", "@tensorflow/tfjs-backend-cpu": "^4.17.0", "@tensorflow/tfjs-backend-wasm": "^4.17.0", "@tensorflow/tfjs-backend-webgl": "^4.17.0", - "@tensorflow/tfjs-backend-webgpu": "4.14.0", + "@tensorflow/tfjs-backend-webgpu": "4.17.0", "@tensorflow/tfjs-converter": "^4.17.0", "@tensorflow/tfjs-core": "^4.17.0", "@tensorflow/tfjs-data": "^4.17.0", "@tensorflow/tfjs-layers": "^4.17.0", "@tensorflow/tfjs-node": "^4.17.0", "@tensorflow/tfjs-node-gpu": "^4.17.0", + "@types/emscripten": "^1.39.10", "@types/node": "^20.12.7", "@types/offscreencanvas": "^2019.7.3", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@typescript-eslint/eslint-plugin": "^7.7.0", + "@typescript-eslint/parser": "^7.7.0", "@vladmandic/build": "^0.9.3", "@vladmandic/pilogger": "^0.4.9", "@vladmandic/tfjs": "github:vladmandic/tfjs", "canvas": "^2.11.2", - "esbuild": "^0.19.12", - "eslint": "8.55.0", + "esbuild": "^0.20.2", + "eslint": "9.0.0", "eslint-config-airbnb-base": "^15.0.0", - "eslint-plugin-html": "^7.1.0", + "eslint-plugin-html": "^8.1.0", "eslint-plugin-import": "^2.29.1", "eslint-plugin-json": "^3.1.0", - "eslint-plugin-markdown": "^3.0.1", + "eslint-plugin-markdown": "^4.0.1", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "rimraf": "^5.0.5", "tslib": "^2.6.2", - "typedoc": "0.25.4", - "typescript": "~5.3.3" + "typedoc": "0.25.13", + "typescript": "~5.4.5" } } diff --git a/src/config.ts b/src/config.ts index c91f767c..357a0528 100644 --- a/src/config.ts +++ b/src/config.ts @@ -388,7 +388,7 @@ const config: Config = { minConfidence: 0.2, minSize: 0, iouThreshold: 0.1, - scale: 1.4, + scale: 1.0, mask: false, return: false, }, diff --git a/src/face/blazeface.ts b/src/face/blazeface.ts index e957237c..dad8981e 100644 --- a/src/face/blazeface.ts +++ b/src/face/blazeface.ts @@ -57,7 +57,7 @@ export async function getBoxes(inputImage: Tensor4D, config: Config): Promise = {}; t.resized = tf.image.resizeBilinear(inputImage, [inputSize, inputSize]); t.div = tf.div(t.resized, constants.tf127); - t.normalized = tf.sub(t.div, constants.tf05); + t.normalized = tf.sub(t.div, constants.tf1); const res = model?.execute(t.normalized) as Tensor[]; if (Array.isArray(res) && res.length > 2) { // pinto converted model? const sorted = res.sort((a, b) => a.size - b.size); diff --git a/test/build.log b/test/build.log index d1077ffd..3fa2b838 100644 --- a/test/build.log +++ b/test/build.log @@ -1,51 +1,51 @@ -2024-02-15 12:49:25 DATA:  Build {"name":"@vladmandic/human","version":"3.2.1"} -2024-02-15 12:49:25 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.1"} -2024-02-15 12:49:25 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} -2024-02-15 12:49:25 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.12","typescript":"5.3.3","typedoc":"0.25.4","eslint":"8.55.0"} -2024-02-15 12:49:25 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} -2024-02-15 12:49:25 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676266,"outputBytes":320934} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676274,"outputBytes":320938} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677312,"outputBytes":321049} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":675999,"outputBytes":319515} -2024-02-15 12:49:25 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1294474} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1969783,"outputBytes":1609692} -2024-02-15 12:49:25 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1969783,"outputBytes":2120081} -2024-02-15 12:49:26 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14} -2024-02-15 12:49:28 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} -2024-02-15 12:49:28 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970} -2024-02-15 12:49:28 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399} -2024-02-15 12:49:28 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791} -2024-02-15 12:49:35 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":172,"errors":0,"warnings":0} -2024-02-15 12:49:35 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} -2024-02-15 12:49:35 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} -2024-02-15 12:49:35 INFO:  Done... -2024-02-15 12:49:35 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} -2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} -2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} -2024-02-15 12:49:35 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} -2024-02-15 12:49:35 STATE: Filter: {"input":"types/tfjs-core.d.ts"} -2024-02-15 12:49:36 ERROR: API-Extractor: {} -2024-02-15 12:49:36 STATE: Filter: {"input":"types/human.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.esm.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node.d.ts"} -2024-02-15 12:49:36 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} -2024-02-15 12:49:36 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} -2024-02-15 12:49:36 STATE: Models {"folder":"./models","models":12} -2024-02-15 12:49:36 STATE: Models {"folder":"../human-models/models","models":44} -2024-02-15 12:49:36 STATE: Models {"folder":"../blazepose/model/","models":4} -2024-02-15 12:49:36 STATE: Models {"folder":"../anti-spoofing/model","models":1} -2024-02-15 12:49:36 STATE: Models {"folder":"../efficientpose/models","models":3} -2024-02-15 12:49:36 STATE: Models {"folder":"../insightface/models","models":5} -2024-02-15 12:49:36 STATE: Models {"folder":"../movenet/models","models":3} -2024-02-15 12:49:36 STATE: Models {"folder":"../nanodet/models","models":4} -2024-02-15 12:49:36 STATE: Models: {"count":58,"totalSize":380063249} -2024-02-15 12:49:36 INFO:  Human Build complete... {"logFile":"test/build.log"} +2024-04-17 11:29:17 DATA:  Build {"name":"@vladmandic/human","version":"3.2.2"} +2024-04-17 11:29:17 INFO:  Application: {"name":"@vladmandic/human","version":"3.2.2"} +2024-04-17 11:29:17 INFO:  Environment: {"profile":"production","config":".build.json","package":"package.json","tsconfig":true,"eslintrc":true,"git":true} +2024-04-17 11:29:17 INFO:  Toolchain: {"build":"0.9.2","esbuild":"0.19.12","typescript":"5.3.3","typedoc":"0.25.13","eslint":"8.55.0"} +2024-04-17 11:29:17 INFO:  Build: {"profile":"production","steps":["clean","compile","typings","typedoc","lint","changelog"]} +2024-04-17 11:29:17 STATE: Clean: {"locations":["dist/*","types/*","typedoc/*"]} +2024-04-17 11:29:17 STATE: Compile: {"name":"tfjs/browser/version","format":"esm","platform":"browser","input":"tfjs/tf-version.ts","output":"dist/tfjs.version.js","files":1,"inputBytes":1289,"outputBytes":358} +2024-04-17 11:29:17 STATE: Compile: {"name":"tfjs/nodejs/cpu","format":"cjs","platform":"node","input":"tfjs/tf-node.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":566,"outputBytes":957} +2024-04-17 11:29:17 STATE: Compile: {"name":"human/nodejs/cpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node.js","files":80,"inputBytes":676298,"outputBytes":320931} +2024-04-17 11:29:17 STATE: Compile: {"name":"tfjs/nodejs/gpu","format":"cjs","platform":"node","input":"tfjs/tf-node-gpu.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":574,"outputBytes":965} +2024-04-17 11:29:17 STATE: Compile: {"name":"human/nodejs/gpu","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-gpu.js","files":80,"inputBytes":676306,"outputBytes":320935} +2024-04-17 11:29:17 STATE: Compile: {"name":"tfjs/nodejs/wasm","format":"cjs","platform":"node","input":"tfjs/tf-node-wasm.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":662,"outputBytes":2003} +2024-04-17 11:29:17 STATE: Compile: {"name":"human/nodejs/wasm","format":"cjs","platform":"node","input":"src/human.ts","output":"dist/human.node-wasm.js","files":80,"inputBytes":677344,"outputBytes":321046} +2024-04-17 11:29:17 STATE: Compile: {"name":"tfjs/browser/esm/nobundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":2,"inputBytes":1403,"outputBytes":690} +2024-04-17 11:29:17 STATE: Compile: {"name":"human/browser/esm/nobundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm-nobundle.js","files":80,"inputBytes":676031,"outputBytes":319512} +2024-04-17 11:29:18 STATE: Compile: {"name":"tfjs/browser/esm/bundle","format":"esm","platform":"browser","input":"tfjs/tf-browser.ts","output":"dist/tfjs.esm.js","files":10,"inputBytes":1403,"outputBytes":1267270} +2024-04-17 11:29:18 STATE: Compile: {"name":"human/browser/iife/bundle","format":"iife","platform":"browser","input":"src/human.ts","output":"dist/human.js","files":80,"inputBytes":1942611,"outputBytes":1582520} +2024-04-17 11:29:18 STATE: Compile: {"name":"human/browser/esm/bundle","format":"esm","platform":"browser","input":"src/human.ts","output":"dist/human.esm.js","files":80,"inputBytes":1942611,"outputBytes":2081292} +2024-04-17 11:29:19 STATE: Typings: {"input":"src/human.ts","output":"types/lib","files":14} +2024-04-17 11:29:21 STATE: TypeDoc: {"input":"src/human.ts","output":"typedoc","objects":81,"generated":true} +2024-04-17 11:29:21 STATE: Compile: {"name":"demo/typescript","format":"esm","platform":"browser","input":"demo/typescript/index.ts","output":"demo/typescript/index.js","files":1,"inputBytes":6318,"outputBytes":2970} +2024-04-17 11:29:21 STATE: Compile: {"name":"demo/faceid","format":"esm","platform":"browser","input":"demo/faceid/index.ts","output":"demo/faceid/index.js","files":2,"inputBytes":17499,"outputBytes":9399} +2024-04-17 11:29:21 STATE: Compile: {"name":"demo/tracker","format":"esm","platform":"browser","input":"demo/tracker/index.ts","output":"demo/tracker/index.js","files":2,"inputBytes":54375,"outputBytes":22791} +2024-04-17 11:29:29 STATE: Lint: {"locations":["**/*.json","src/**/*.ts","test/**/*.js","demo/**/*.js","**/*.md"],"files":171,"errors":0,"warnings":0} +2024-04-17 11:29:30 STATE: ChangeLog: {"repository":"https://github.com/vladmandic/human","branch":"main","output":"CHANGELOG.md"} +2024-04-17 11:29:30 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs-core.d.ts","output":"types/tfjs-core.d.ts"} +2024-04-17 11:29:30 INFO:  Done... +2024-04-17 11:29:30 STATE: Copy: {"input":"node_modules/@vladmandic/tfjs/types/tfjs.d.ts","output":"types/tfjs.esm.d.ts"} +2024-04-17 11:29:30 STATE: Copy: {"input":"src/types/tsconfig.json","output":"types/tsconfig.json"} +2024-04-17 11:29:30 STATE: Copy: {"input":"src/types/eslint.json","output":"types/.eslintrc.json"} +2024-04-17 11:29:30 STATE: Copy: {"input":"src/types/tfjs.esm.d.ts","output":"dist/tfjs.esm.d.ts"} +2024-04-17 11:29:30 STATE: Filter: {"input":"types/tfjs-core.d.ts"} +2024-04-17 11:29:30 ERROR: API-Extractor: {} +2024-04-17 11:29:30 STATE: Filter: {"input":"types/human.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.esm-nobundle.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.esm.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.node-gpu.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.node.d.ts"} +2024-04-17 11:29:30 STATE: Write: {"output":"dist/human.node-wasm.d.ts"} +2024-04-17 11:29:30 INFO:  Analyze models: {"folders":8,"result":"models/models.json"} +2024-04-17 11:29:30 STATE: Models {"folder":"./models","models":12} +2024-04-17 11:29:30 STATE: Models {"folder":"../human-models/models","models":44} +2024-04-17 11:29:30 STATE: Models {"folder":"../blazepose/model/","models":4} +2024-04-17 11:29:30 STATE: Models {"folder":"../anti-spoofing/model","models":1} +2024-04-17 11:29:30 STATE: Models {"folder":"../efficientpose/models","models":3} +2024-04-17 11:29:30 STATE: Models {"folder":"../insightface/models","models":5} +2024-04-17 11:29:30 STATE: Models {"folder":"../movenet/models","models":3} +2024-04-17 11:29:30 STATE: Models {"folder":"../nanodet/models","models":4} +2024-04-17 11:29:31 STATE: Models: {"count":58,"totalSize":380063249} +2024-04-17 11:29:31 INFO:  Human Build complete... {"logFile":"test/build.log"} diff --git a/typedoc/assets/icons.js b/typedoc/assets/icons.js new file mode 100644 index 00000000..b79c9e89 --- /dev/null +++ b/typedoc/assets/icons.js @@ -0,0 +1,15 @@ +(function(svg) { + svg.innerHTML = ``; + svg.style.display = 'none'; + if (location.protocol === 'file:') { + if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', updateUseElements); + else updateUseElements() + function updateUseElements() { + document.querySelectorAll('use').forEach(el => { + if (el.getAttribute('href').includes('#icon-')) { + el.setAttribute('href', el.getAttribute('href').replace(/.*#/, '#')); + } + }); + } + } +})(document.body.appendChild(document.createElementNS('http://www.w3.org/2000/svg', 'svg'))) \ No newline at end of file diff --git a/typedoc/assets/icons.svg b/typedoc/assets/icons.svg new file mode 100644 index 00000000..7dead611 --- /dev/null +++ b/typedoc/assets/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/typedoc/assets/main.js b/typedoc/assets/main.js index d0aa8d5f..d6f13886 100644 --- a/typedoc/assets/main.js +++ b/typedoc/assets/main.js @@ -1,8 +1,8 @@ "use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +"use strict";(()=>{var Ce=Object.create;var ne=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Pe(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Ce(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),y=s.str.charAt(1),p;y in s.node.edges?p=s.node.edges[y]:(p=new t.TokenSet,s.node.edges[y]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(console.log("Show page"),document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){console.log("Scorlling");let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!e.checkVisibility()){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ve(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ne(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ve(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let y=document.createElement("li");y.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,y.append(p),e.appendChild(y)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ne(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var He={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>He[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",fe="mousemove",H="mouseup",J={x:0,y:0},pe=!1,ee=!1,Be=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(Be=!0,F="touchstart",fe="touchmove",H="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(H,()=>{ee=!1});document.addEventListener("click",t=>{pe&&(t.preventDefault(),t.stopImmediatePropagation(),pe=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(H,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(H,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ye=document.head.appendChild(document.createElement("style"));ye.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ye.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ve(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ve(t.value)})}function ve(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.pathname===r.pathname&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/typedoc/assets/style.css b/typedoc/assets/style.css index 07a385b7..778b9492 100644 --- a/typedoc/assets/style.css +++ b/typedoc/assets/style.css @@ -29,7 +29,7 @@ --light-color-ts-constructor-signature: var(--light-color-ts-constructor); --light-color-ts-parameter: var(--light-color-ts-variable); /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-type-parameter: #a55c0e; --light-color-ts-accessor: var(--light-color-ts-property); --light-color-ts-get-signature: var(--light-color-ts-accessor); --light-color-ts-set-signature: var(--light-color-ts-accessor); @@ -69,7 +69,7 @@ --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); --dark-color-ts-parameter: var(--dark-color-ts-variable); /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-type-parameter: #e07d13; --dark-color-ts-accessor: var(--dark-color-ts-property); --dark-color-ts-get-signature: var(--dark-color-ts-accessor); --dark-color-ts-set-signature: var(--dark-color-ts-accessor); @@ -266,12 +266,12 @@ h6 { line-height: 1.2; } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { +h1 > a:not(.link), +h2 > a:not(.link), +h3 > a:not(.link), +h4 > a:not(.link), +h5 > a:not(.link), +h6 > a:not(.link) { text-decoration: none; color: var(--color-text); } @@ -327,17 +327,14 @@ dd { } /* Footer */ -.tsd-generator { +footer { border-top: 1px solid var(--color-accent); padding-top: 1rem; padding-bottom: 1rem; max-height: 3.5rem; } - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; +.tsd-generator { + margin: 0 1em; } .container-main { @@ -405,7 +402,8 @@ dd { } body { background: var(--color-background); - font-family: "Segoe UI", sans-serif; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); } @@ -649,6 +647,28 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { font-weight: bold; } +.tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); +} +.tsd-full-hierarchy, +.tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; +} +.tsd-full-hierarchy ul { + padding-left: 1.5rem; +} +.tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} + .tsd-panel-group.tsd-index-group { margin-bottom: 0; } @@ -714,12 +734,15 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { } .tsd-navigation > a, .tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); + width: calc(100% - 0.25rem); + display: flex; + align-items: center; } .tsd-navigation a, .tsd-navigation summary > span, .tsd-page-navigation a { - display: inline-flex; + display: flex; + width: calc(100% - 0.25rem); align-items: center; padding: 0.25rem; color: var(--color-text); @@ -759,11 +782,6 @@ input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { margin-left: -1.5rem; } -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - .tsd-page-navigation ul { padding-left: 1.75rem; } diff --git a/typedoc/classes/Env.html b/typedoc/classes/Env.html index cbf65f55..83f6309c 100644 --- a/typedoc/classes/Env.html +++ b/typedoc/classes/Env.html @@ -1,44 +1,44 @@ -Env | @vladmandic/human - v3.2.1

Env class that holds detected capabilities

-

Constructors

Properties

agent: string = ''

Detected agent

-
backends: string[] = []

List of supported backends

-
browser: boolean

Running in Browser

-
cpu: {
    flags: string[];
    model: undefined | string;
} = ...

CPU info

-

Type declaration

  • flags: string[]
  • model: undefined | string
filter: undefined | boolean

Are image filters supported?

-
initial: boolean

Has any work been performed so far

-
kernels: string[] = []

List of supported kernels for current backend

-
node: boolean

Running in NodeJS

-
offscreen: undefined | boolean

Is offscreenCanvas supported?

-
perfadd: boolean = false

Are performance counter instant values or additive

-
platform: string = ''

Detected platform

-
tensorflow: {
    gpu: undefined | boolean;
    version: undefined | string;
} = ...

If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled

-

Type declaration

  • gpu: undefined | boolean
  • version: undefined | string
tfjs: {
    version: undefined | string;
}

TFJS instance details

-

Type declaration

  • version: undefined | string
wasm: {
    backend: undefined | boolean;
    multithread: undefined | boolean;
    simd: undefined | boolean;
    supported: undefined | boolean;
} = ...

WASM detected capabilities

-

Type declaration

  • backend: undefined | boolean
  • multithread: undefined | boolean
  • simd: undefined | boolean
  • supported: undefined | boolean
webgl: {
    backend: undefined | boolean;
    renderer: undefined | string;
    shader: undefined | string;
    supported: undefined | boolean;
    vendor: undefined | string;
    version: undefined | string;
} = ...

WebGL detected capabilities

-

Type declaration

  • backend: undefined | boolean
  • renderer: undefined | string
  • shader: undefined | string
  • supported: undefined | boolean
  • vendor: undefined | string
  • version: undefined | string
webgpu: {
    adapter: undefined | GPUAdapterInfo;
    backend: undefined | boolean;
    supported: undefined | boolean;
} = ...

WebGPU detected capabilities

-

Type declaration

  • adapter: undefined | GPUAdapterInfo
  • backend: undefined | boolean
  • supported: undefined | boolean
worker: boolean

Running in WebWorker thread

-

Accessors

Methods

  • update backend information

    -

    Returns Promise<void>

\ No newline at end of file +Env | @vladmandic/human - v3.2.2

Env class that holds detected capabilities

+

Constructors

Properties

agent: string = ''

Detected agent

+
backends: string[] = []

List of supported backends

+
browser: boolean

Running in Browser

+
cpu: {
    flags: string[];
    model: undefined | string;
} = ...

CPU info

+

Type declaration

  • flags: string[]
  • model: undefined | string
filter: undefined | boolean

Are image filters supported?

+
initial: boolean

Has any work been performed so far

+
kernels: string[] = []

List of supported kernels for current backend

+
node: boolean

Running in NodeJS

+
offscreen: undefined | boolean

Is offscreenCanvas supported?

+
perfadd: boolean = false

Are performance counter instant values or additive

+
platform: string = ''

Detected platform

+
tensorflow: {
    gpu: undefined | boolean;
    version: undefined | string;
} = ...

If using tfjs-node get version of underlying tensorflow shared library and if gpu acceleration is enabled

+

Type declaration

  • gpu: undefined | boolean
  • version: undefined | string
tfjs: {
    version: undefined | string;
}

TFJS instance details

+

Type declaration

  • version: undefined | string
wasm: {
    backend: undefined | boolean;
    multithread: undefined | boolean;
    simd: undefined | boolean;
    supported: undefined | boolean;
} = ...

WASM detected capabilities

+

Type declaration

  • backend: undefined | boolean
  • multithread: undefined | boolean
  • simd: undefined | boolean
  • supported: undefined | boolean
webgl: {
    backend: undefined | boolean;
    renderer: undefined | string;
    shader: undefined | string;
    supported: undefined | boolean;
    vendor: undefined | string;
    version: undefined | string;
} = ...

WebGL detected capabilities

+

Type declaration

  • backend: undefined | boolean
  • renderer: undefined | string
  • shader: undefined | string
  • supported: undefined | boolean
  • vendor: undefined | string
  • version: undefined | string
webgpu: {
    adapter: undefined | GPUAdapterInfo;
    backend: undefined | boolean;
    supported: undefined | boolean;
} = ...

WebGPU detected capabilities

+

Type declaration

  • adapter: undefined | GPUAdapterInfo
  • backend: undefined | boolean
  • supported: undefined | boolean
worker: boolean

Running in WebWorker thread

+

Accessors

Methods

  • update backend information

    +

    Returns Promise<void>

\ No newline at end of file diff --git a/typedoc/classes/GraphModel.html b/typedoc/classes/GraphModel.html index b9b300b3..6f0148b5 100644 --- a/typedoc/classes/GraphModel.html +++ b/typedoc/classes/GraphModel.html @@ -1,36 +1,36 @@ -GraphModel | @vladmandic/human - v3.2.1

Class GraphModel<ModelURL>

A tf.GraphModel is a directed, acyclic graph built from a +GraphModel | @vladmandic/human - v3.2.2

Class GraphModel<ModelURL>

A tf.GraphModel is a directed, acyclic graph built from a SavedModel GraphDef and allows inference execution.

A tf.GraphModel can only be created by loading from a model converted from a TensorFlow SavedModel using the command line converter tool and loaded via tf.loadGraphModel.

-

Doc

Type Parameters

  • ModelURL extends Url = string | io.IOHandler

Implements

  • InferenceModel

Constructors

  • Type Parameters

    • ModelURL extends Url = string | IOHandler

    Parameters

    • modelUrl: ModelURL

      url for the model, or an io.IOHandler.

      -
    • Optional loadOptions: LoadOptions
    • Optional tfio: __module

    Returns GraphModel<ModelURL>

Accessors

  • get inputNodes(): string[]
  • Returns string[]

  • get inputs(): TensorInfo[]
  • Returns TensorInfo[]

  • get metadata(): {}
  • Returns {}

    • get modelSignature(): {}
    • Returns {}

      • get modelStructuredOutputKeys(): {}
      • Returns {}

        • get modelVersion(): string
        • Returns string

        • get outputNodes(): string[]
        • Returns string[]

        • get outputs(): TensorInfo[]
        • Returns TensorInfo[]

        • get weights(): NamedTensorsMap
        • Returns NamedTensorsMap

        Methods

        • Releases the memory used by the weight tensors and resourceManager.

          -

          Returns void

          Doc

        • Dispose intermediate tensors for model debugging mode (flag +

          Doc

        Type Parameters

        • ModelURL extends Url = string | io.IOHandler

        Implements

        • InferenceModel

        Constructors

        • Type Parameters

          • ModelURL extends Url = string | IOHandler

          Parameters

          • modelUrl: ModelURL

            url for the model, or an io.IOHandler.

            +
          • Optional loadOptions: LoadOptions
          • Optional tfio: __module

          Returns GraphModel<ModelURL>

        Accessors

        • get inputNodes(): string[]
        • Returns string[]

        • get inputs(): TensorInfo[]
        • Returns TensorInfo[]

        • get metadata(): {}
        • Returns {}

          • get modelSignature(): {}
          • Returns {}

            • get modelStructuredOutputKeys(): {}
            • Returns {}

              • get modelVersion(): string
              • Returns string

              • get outputNodes(): string[]
              • Returns string[]

              • get outputs(): TensorInfo[]
              • Returns TensorInfo[]

              • get weights(): NamedTensorsMap
              • Returns NamedTensorsMap

              Methods

              • Releases the memory used by the weight tensors and resourceManager.

                +

                Returns void

                Doc

              • Dispose intermediate tensors for model debugging mode (flag KEEP_INTERMEDIATE_TENSORS is true).

                -

                Returns void

                Doc

              • Executes inference for the model for given input tensors.

                -

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                  tensor, tensor array or tensor map of the inputs for the +

                  Returns void

                  Doc

              • Executes inference for the model for given input tensors.

                +

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                  tensor, tensor array or tensor map of the inputs for the model, keyed by the input node names.

                  -
                • Optional outputs: string | string[]

                  output node name from the TensorFlow model, if no +

                • Optional outputs: string | string[]

                  output node name from the TensorFlow model, if no outputs are specified, the default outputs of the model would be used. You can inspect intermediate nodes of the model by adding them to the outputs array.

                  @@ -38,27 +38,27 @@ are provided and there is only one default output, otherwise return a tensor array. The order of the tensor array is the same as the outputs if provided, otherwise the order of outputNodes attribute of the model.

                  -

                  Doc

              • Executes inference for the model for given input tensors in async +

                Doc

              • Executes inference for the model for given input tensors in async fashion, use this method when your model contains control flow ops.

                -

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                  tensor, tensor array or tensor map of the inputs for the +

                  Parameters

                  • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                    tensor, tensor array or tensor map of the inputs for the model, keyed by the input node names.

                    -
                  • Optional outputs: string | string[]

                    output node name from the TensorFlow model, if no outputs +

                  • Optional outputs: string | string[]

                    output node name from the TensorFlow model, if no outputs are specified, the default outputs of the model would be used. You can inspect intermediate nodes of the model by adding them to the outputs array.

                    -

                  Returns Promise<Tensor<Rank> | Tensor<Rank>[]>

                  A Promise of single tensor if provided with a single output or +

              Returns Promise<Tensor<Rank> | Tensor<Rank>[]>

              A Promise of single tensor if provided with a single output or no outputs are provided and there is only one default output, otherwise return a tensor map.

              -

              Doc

              • Get intermediate tensors for model debugging mode (flag +

                Doc

              • Get intermediate tensors for model debugging mode (flag KEEP_INTERMEDIATE_TENSORS is true).

                -

                Returns NamedTensorsMap

                Doc

              • Loads the model and weight files, construct the in memory weight map and +

                Returns NamedTensorsMap

                Doc

              • Loads the model and weight files, construct the in memory weight map and compile the inference graph.

                -

                Returns UrlIOHandler<ModelURL> extends IOHandlerSync
                    ? boolean
                    : Promise<boolean>

              • Synchronously construct the in memory weight map and +

                Returns UrlIOHandler<ModelURL> extends IOHandlerSync
                    ? boolean
                    : Promise<boolean>

              • Synchronously construct the in memory weight map and compile the inference graph.

                -

                Parameters

                • artifacts: ModelArtifacts

                Returns boolean

                Doc

              • Execute the inference for the input tensors.

                -

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                • Optional config: ModelPredictConfig

                  Prediction configuration for specifying the batch size. +

                  Parameters

                  • artifacts: ModelArtifacts

                  Returns boolean

                  Doc

              • Execute the inference for the input tensors.

                +

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                • Optional config: ModelPredictConfig

                  Prediction configuration for specifying the batch size. Currently the batch size option is ignored for graph model.

                  -

                Returns Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

                Inference result tensors. If the model is converted and it +

              Returns Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap

              Inference result tensors. If the model is converted and it originally had structured_outputs in tensorflow, then a NamedTensorMap will be returned matching the structured_outputs. If no structured_outputs are present, the output will be single tf.Tensor if the model has single @@ -76,11 +76,11 @@ is [1, 244, 244, 3], which represents the [batch, height, width, channel]. If we are provide a batched data of 100 images, the input tensor should be in the shape of [100, 244, 244, 3].

              -

              Doc

              • Execute the inference for the input tensors in async fashion, use this +

                Doc

              • Execute the inference for the input tensors in async fashion, use this method when your model contains control flow ops.

                -

                Parameters

                • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                • Optional config: ModelPredictConfig

                  Prediction configuration for specifying the batch size. +

                  Parameters

                  • inputs: Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap
                  • Optional config: ModelPredictConfig

                    Prediction configuration for specifying the batch size. Currently the batch size option is ignored for graph model.

                    -

                  Returns Promise<Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap>

                  A Promise of inference result tensors. If the model is converted +

              Returns Promise<Tensor<Rank> | Tensor<Rank>[] | NamedTensorMap>

              A Promise of inference result tensors. If the model is converted and it originally had structured_outputs in tensorflow, then a NamedTensorMap will be returned matching the structured_outputs. If no structured_outputs are present, the output will be single tf.Tensor if @@ -98,7 +98,7 @@

              Doc

              • Save the configuration and/or weights of the GraphModel.

                +

                Doc

              • Save the configuration and/or weights of the GraphModel.

                An IOHandler is an object that has a save method of the proper signature defined. The save method manages the storing or transmission of serialized data ("artifacts") that represent the @@ -116,10 +116,10 @@

                Doc

              \ No newline at end of file +

              Doc

              \ No newline at end of file diff --git a/typedoc/classes/Human.html b/typedoc/classes/Human.html index fecf43e5..988c2aa2 100644 --- a/typedoc/classes/Human.html +++ b/typedoc/classes/Human.html @@ -1,4 +1,4 @@ -Human | @vladmandic/human - v3.2.1

              Human* library main class

              +Human | @vladmandic/human - v3.2.2

              Human* library main class

              All methods and properties are available only as members of Human class

              • Configuration object definition: Config
              • @@ -7,51 +7,51 @@

              Param: userConfig

              Config

              Returns

              instance of Human

              -

              Constructors

              • Constructor for Human library that is futher used for all operations

                -

                Parameters

                • Optional userConfig: Partial<Config>

                  user configuration object Config

                  -

                Returns Human

              Properties

              config: Config

              Current configuration

              +

              Constructors

              • Constructor for Human library that is futher used for all operations

                +

                Parameters

                • Optional userConfig: Partial<Config>

                  user configuration object Config

                  +

                Returns Human

              Properties

              config: Config

              Current configuration

              -
              draw: draw = draw

              Draw helper classes that can draw detected objects on canvas using specified draw

              +
              draw: draw = draw

              Draw helper classes that can draw detected objects on canvas using specified draw

              • canvas: draws input to canvas
              • options: are global settings for all draw operations, can be overriden for each draw method DrawOptions
              • face, body, hand, gesture, object, person: draws detected results as overlays on canvas
              -
              env: Env = env

              Object containing environment information used for diagnostics

              -
              events: undefined | EventTarget

              Container for events dispatched by Human +

              env: Env = env

              Object containing environment information used for diagnostics

              +
              events: undefined | EventTarget

              Container for events dispatched by Human Possible events:

              -
              faceTriangulation: number[]

              Reference face triangualtion array of 468 points, used for triangle references between points

              -
              faceUVMap: [number, number][]

              Refernce UV map of 468 values, used for 3D mapping of the face mesh

              -
              match: match = match

              Face Matching

              +
              faceTriangulation: number[]

              Reference face triangualtion array of 468 points, used for triangle references between points

              +
              faceUVMap: [number, number][]

              Refernce UV map of 468 values, used for 3D mapping of the face mesh

              +
              match: match = match

              Face Matching

              • similarity: compare two face descriptors and return similarity index
              • distance: compare two face descriptors and return raw calculated differences
              • find: compare face descriptor to array of face descriptors and return best match
              -
              performance: Record<string, number>

              Performance object that contains values for all recently performed operations

              -
              process: {
                  canvas: null | AnyCanvas;
                  tensor: null | Tensor<Rank>;
              }

              currenty processed image tensor and canvas

              -

              Type declaration

              result: Result

              Last known result of detect run

              +
              performance: Record<string, number>

              Performance object that contains values for all recently performed operations

              +
              process: {
                  canvas: null | AnyCanvas;
                  tensor: null | Tensor<Rank>;
              }

              currenty processed image tensor and canvas

              +

              Type declaration

              result: Result

              Last known result of detect run

              • Can be accessed anytime after initial detection
              -
              state: string

              Current state of Human library

              +
              state: string

              Current state of Human library

              • Can be polled to determine operations that are currently executed
              • Progresses through: 'config', 'check', 'backend', 'load', 'run:', 'idle'
              -
              tf: any

              Instance of TensorFlow/JS used by Human

              +
              tf: any

              Instance of TensorFlow/JS used by Human

              • Can be embedded or externally provided TFJS API
              -
              version: string

              Current version of Human library in semver format

              -
              webcam: WebCam = ...

              WebCam helper methods

              -

              Methods

              • internal function to measure tensor leaks

                -

                Parameters

                • Rest ...msg: string[]

                Returns void

              • Compare two input tensors for pixel similarity

                +
              version: string

              Current version of Human library in semver format

              +
              webcam: WebCam = ...

              WebCam helper methods

              +

              Methods

              • internal function to measure tensor leaks

                +

                Parameters

                • Rest ...msg: string[]

                Returns void

              • emit event

                -

                Parameters

                • event: string

                Returns void

              • Process input as return canvas and tensor

                -

                Parameters

              • emit event

                +

                Parameters

                • event: string

                Returns void

              • Process input as return canvas and tensor

                +

                Parameters

                • input: Input

                  any input Input

                  +
                • getTensor: boolean = false

                  should image processing also return tensor or just canvas Returns object with tensor and canvas

                  -

                Returns Promise<{
                    canvas: null | AnyCanvas;
                    tensor: null | Tensor4D;
                }>

              • Explicit backend initialization

                +

              Returns Promise<{
                  canvas: null | AnyCanvas;
                  tensor: null | Tensor4D;
              }>

              • Explicit backend initialization

                • Normally done implicitly during initial load phase
                • Call to explictly register and initialize TFJS backend without any other operations
                • Use when changing backend during runtime
                -

                Returns Promise<void>

              • Load method preloads all configured models on-demand

                +

                Returns Promise<void>

              • Load method preloads all configured models on-demand

                • Not explicitly required as any required model is load implicitly on it's first run
                -

                Parameters

                Returns Promise<void>

              • Runs interpolation using last known result and returns smoothened result +

                Parameters

                Returns Promise<void>

              • Runs interpolation using last known result and returns smoothened result Interpolation is based on time since last known result so can be called independently

                -

                Parameters

              • Utility wrapper for performance.now()

                -

                Returns number

              • Run detect with tensorflow profiling

                +
              • Utility wrapper for performance.now()

                +

                Returns number

              • Run detect with tensorflow profiling

                • result object will contain total exeuction time information for top-20 kernels
                • actual detection object can be accessed via human.result
                -

                Parameters

                Returns Promise<{
                    kernel: string;
                    perc: number;
                    time: number;
                }[]>

              • Reset configuration to default values

                -

                Returns void

              • Segmentation method takes any input and returns RGBA tensor +

                Parameters

                Returns Promise<{
                    kernel: string;
                    perc: number;
                    time: number;
                }[]>

              • Reset configuration to default values

                +

                Returns void

              • Segmentation method takes any input and returns RGBA tensor Note: Segmentation is not triggered as part of detect process

                -

                Parameters

              • Helper function

                -

                Parameters

                • ms: number

                  sleep time in miliseconds

                  -

                Returns Promise<void>

              • Validate current configuration schema

                -

                Parameters

                • Optional userConfig: Partial<Config>

                Returns {
                    expected?: string;
                    reason: string;
                    where: string;
                }[]

              • Continously detect video frames

                -

                Parameters

                • element: HTMLVideoElement

                  HTMLVideoElement input

                  -
                • run: boolean = true

                  boolean run continously or stop if already running, default true

                  -
                • delay: number = 0

                  number delay detection between frames for number of miliseconds, default 0

                  -

                Returns Promise<void>

              • Warmup method pre-initializes all configured models for faster inference

                +
              • Optional userConfig: Partial<Config>

              Returns Promise<null | Tensor<Rank>>

              • Helper function

                +

                Parameters

                • ms: number

                  sleep time in miliseconds

                  +

                Returns Promise<void>

              • Validate current configuration schema

                +

                Parameters

                • Optional userConfig: Partial<Config>

                Returns {
                    expected?: string;
                    reason: string;
                    where: string;
                }[]

              • Continously detect video frames

                +

                Parameters

                • element: HTMLVideoElement

                  HTMLVideoElement input

                  +
                • run: boolean = true

                  boolean run continously or stop if already running, default true

                  +
                • delay: number = 0

                  number delay detection between frames for number of miliseconds, default 0

                  +

                Returns Promise<void>

              • Warmup method pre-initializes all configured models for faster inference

                • can take significant time on startup
                • only used for webgl and humangl backends
                -

                Parameters

                Returns Promise<undefined | Result>

                result - Result

                -
              \ No newline at end of file +

              Parameters

              Returns Promise<undefined | Result>

              result - Result

              +
              \ No newline at end of file diff --git a/typedoc/classes/Tensor-1.html b/typedoc/classes/Tensor-1.html index b4afe0bb..a796f4f2 100644 --- a/typedoc/classes/Tensor-1.html +++ b/typedoc/classes/Tensor-1.html @@ -1,4 +1,4 @@ -Tensor | @vladmandic/human - v3.2.1

              A tf.Tensor object represents an immutable, multidimensional array of +Tensor | @vladmandic/human - v3.2.2

              A tf.Tensor object represents an immutable, multidimensional array of numbers that has a shape and a data type.

              For performance reasons, functions that create tensors do not necessarily perform a copy of the data passed to them (e.g. if the data is passed as a @@ -6,202 +6,202 @@ a feature and is not supported. To avoid this behavior, use the tensor before changing the input data or create a copy with copy = tf.add(yourTensor, 0).

              See tf.tensor for details on how to create a tf.Tensor.

              -

              Doc

              Type Parameters

              Implements

              • TensorInfo

              Constructors

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]
                • dtype: keyof DataTypeMap
                • dataId: object
                • id: number

                Returns Tensor<R>

              Properties

              dataId: object

              Id of the bucket holding the data for this tensor. Multiple arrays can +

              Doc

              Type Parameters

              Implements

              • TensorInfo

              Constructors

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]
                • dtype: keyof DataTypeMap
                • dataId: object
                • id: number

                Returns Tensor<R>

              Properties

              dataId: object

              Id of the bucket holding the data for this tensor. Multiple arrays can point to the same bucket (e.g. when calling array.reshape()).

              -
              dtype: keyof DataTypeMap

              The data type for the array.

              -
              id: number

              Unique id of this tensor.

              -
              kept: boolean

              Whether this tensor has been globally kept.

              -
              kerasMask?: Tensor<Rank>

              The keras mask that some keras layers attach to the tensor

              -
              rankType: R

              The rank type for the array (see Rank enum).

              -
              scopeId: number

              The id of the scope this tensor is being tracked in.

              -
              shape: ShapeMap[R]

              The shape of the tensor.

              -
              size: number

              Number of elements in the tensor.

              -
              strides: number[]

              Number of elements to skip in each dimension when indexing. See +

              dtype: keyof DataTypeMap

              The data type for the array.

              +
              id: number

              Unique id of this tensor.

              +
              kept: boolean

              Whether this tensor has been globally kept.

              +
              kerasMask?: Tensor<Rank>

              The keras mask that some keras layers attach to the tensor

              +
              rankType: R

              The rank type for the array (see Rank enum).

              +
              scopeId: number

              The id of the scope this tensor is being tracked in.

              +
              shape: ShapeMap[R]

              The shape of the tensor.

              +
              size: number

              Number of elements in the tensor.

              +
              strides: number[]

              Number of elements to skip in each dimension when indexing. See https://docs.scipy.org/doc/numpy/reference/generated/\ numpy.ndarray.strides.html

              -

              Accessors

              • get isDisposed(): boolean
              • Returns boolean

              • get rank(): number
              • Returns number

              Methods

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Returns the tensor data as a nested array. The transfer of data is done +

              Accessors

              • get isDisposed(): boolean
              • Returns boolean

              • get rank(): number
              • Returns number

              Methods

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Returns the tensor data as a nested array. The transfer of data is done asynchronously.

                -

                Returns Promise<ArrayMap[R]>

                Doc

              • Returns the tensor data as a nested array. The transfer of data is done +

                Returns Promise<ArrayMap[R]>

                Doc

              • Returns the tensor data as a nested array. The transfer of data is done synchronously.

                -

                Returns ArrayMap[R]

                Doc

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number

                Returns Tensor2D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number

                Returns Tensor3D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number

                Returns Tensor4D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number
                • depth3: number

                Returns Tensor5D

              • Type Parameters

                Returns Scalar

              • Type Parameters

                Parameters

                • this: T
                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • crops: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]

                Returns Tensor<R>

              • Returns a promise of tf.TensorBuffer that holds the underlying data.

                -

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns Promise<TensorBuffer<R, D>>

                Doc

              • Returns a tf.TensorBuffer that holds the underlying data.

                -

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns TensorBuffer<R, D>

                Doc

              • Returns the underlying bytes of the tensor's data.

                -

                Returns Promise<Uint8Array | Uint8Array[]>

              • Type Parameters

                Parameters

                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • min: number
                • max: number

                Returns Tensor<Rank>

              • Returns a copy of the tensor. See tf.clone for details.

                -

                Type Parameters

                Parameters

                • this: T

                Returns T

                Doc

              • Type Parameters

                Parameters

                • tensors: T | (TensorLike | T)[]
                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • stride: number
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dataFormat: "NWC" | "NCW"
                • Optional dilation: number
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • outputShape: [number, number, number] | [number, number, number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Asynchronously downloads the values from the tf.Tensor. Returns a +

                Returns ArrayMap[R]

                Doc

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number

                Returns Tensor2D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number

                Returns Tensor3D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number

                Returns Tensor4D

              • Type Parameters

                Parameters

                • rows: number
                • columns: number
                • depth: number
                • depth2: number
                • depth3: number

                Returns Tensor5D

              • Type Parameters

                Returns Scalar

              • Type Parameters

                Parameters

                • this: T
                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • crops: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • shape: ShapeMap[R]

                Returns Tensor<R>

              • Returns a promise of tf.TensorBuffer that holds the underlying data.

                +

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns Promise<TensorBuffer<R, D>>

                Doc

              • Returns a tf.TensorBuffer that holds the underlying data.

                +

                Type Parameters

                • D extends keyof DataTypeMap = "float32"

                Returns TensorBuffer<R, D>

                Doc

              • Returns the underlying bytes of the tensor's data.

                +

                Returns Promise<Uint8Array | Uint8Array[]>

              • Type Parameters

                Parameters

                • dtype: keyof DataTypeMap

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • min: number
                • max: number

                Returns Tensor<Rank>

              • Returns a copy of the tensor. See tf.clone for details.

                +

                Type Parameters

                Parameters

                • this: T

                Returns T

                Doc

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • stride: number
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dataFormat: "NWC" | "NCW"
                • Optional dilation: number
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • outputShape: [number, number, number] | [number, number, number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • Optional axis: number
                • Optional exclusive: boolean
                • Optional reverse: boolean

                Returns Tensor<R>

              • Asynchronously downloads the values from the tf.Tensor. Returns a promise of TypedArray that resolves when the computation has finished.

                -

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns Promise<DataTypeMap[D]>

                Doc

              • Synchronously downloads the values from the tf.Tensor. This blocks the +

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns Promise<DataTypeMap[D]>

                Doc

              • Synchronously downloads the values from the tf.Tensor. This blocks the UI thread until the values are ready, which can cause performance issues.

                -

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns DataTypeMap[D]

                Doc

              • Copy the tensor's data to a new GPU resource. Comparing to the dataSync() +

                Type Parameters

                • D extends keyof DataTypeMap = NumericDataType

                Returns DataTypeMap[D]

                Doc

              • Copy the tensor's data to a new GPU resource. Comparing to the dataSync() and data(), this method prevents data from being downloaded to CPU.

                For WebGL backend, the data will be stored on a densely packed texture. This means that the texture will use the RGBA channels to store value.

                For WebGPU backend, the data will be stored on a buffer. There is no parameter, so can not use a user-defined size to create the buffer.

                -

                Parameters

                • Optional options: DataToGPUWebGLOption

                Returns GPUData

                For WebGL backend, a GPUData contains the new texture and +

              Parameters

              • Optional options: DataToGPUWebGLOption

              Returns GPUData

              For WebGL backend, a GPUData contains the new texture and its information. { tensorRef: The tensor that is associated with this texture, @@ -210,9 +210,9 @@ }

              For WebGPU backend, a GPUData contains the new buffer.
              {
              tensorRef: The tensor that is associated with this buffer,
              buffer: GPUBuffer,
              }

              Remember to dispose the GPUData after it is used by
              `res.tensorRef.dispose()`.
              -

              Doc

              • Type Parameters

                Parameters

                • blockSize: number
                • dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilations: number | [number, number]
                • Optional dataFormat: "NHWC"

                Returns T

              • Disposes tf.Tensor from memory.

                -

                Returns void

                Doc

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • alpha: number

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional depthRadius: number
                • Optional bias: number
                • Optional alpha: number
                • Optional beta: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • mode: "reflect" | "symmetric"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional ord: number | "euclidean" | "fro"
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Parameters

                • depth: number
                • onValue: number
                • offValue: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • Optional constantValue: number

                Returns T

              • Type Parameters

                Parameters

                • windowShape: number | [number, number]
                • poolingType: "avg" | "max"
                • padding: number | "valid" | "same" | ExplicitPadding
                • Optional diationRate: number | [number, number]
                • Optional strides: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Prints the tf.Tensor. See tf.print for details.

                -

                Parameters

                • Optional verbose: boolean

                  Whether to print verbose information about the tensor, +

                  Doc

              • Type Parameters

                Parameters

                • blockSize: number
                • dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor4D | TensorLike4D
                • strides: number | [number, number]
                • pad: number | "valid" | "same"
                • Optional dataFormat: "NHWC" | "NCHW"
                • Optional dilations: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                • filter: Tensor3D | TensorLike3D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilations: number | [number, number]
                • Optional dataFormat: "NHWC"

                Returns T

              • Disposes tf.Tensor from memory.

                +

                Returns void

                Doc

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Returns Tensor1D

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • alpha: number

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional depthRadius: number
                • Optional bias: number
                • Optional alpha: number
                • Optional beta: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • filterSize: number | [number, number]
                • strides: number | [number, number]
                • pad: number | "valid" | "same" | ExplicitPadding
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • mode: "reflect" | "symmetric"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • Optional ord: number | "euclidean" | "fro"
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Parameters

                • depth: number
                • onValue: number
                • offValue: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • paddings: [number, number][]
                • Optional constantValue: number

                Returns T

              • Type Parameters

                Parameters

                • windowShape: number | [number, number]
                • poolingType: "avg" | "max"
                • padding: number | "valid" | "same" | ExplicitPadding
                • Optional diationRate: number | [number, number]
                • Optional strides: number | [number, number]
                • Optional dimRoundingMode: "floor" | "round" | "ceil"

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Prints the tf.Tensor. See tf.print for details.

                +

                Parameters

                • Optional verbose: boolean

                  Whether to print verbose information about the tensor, including dtype and size.

                  -

                Returns void

                Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • shape: number[]

                Returns T

              • Type Parameters

                Parameters

                • x: T

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfPixelCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfFloatCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • depthwiseFilter: Tensor4D | TensorLike4D
                • pointwiseFilter: TensorLike | Tensor4D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilation: number | [number, number]
                • Optional dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • begin: number | number[]
                • Optional size: number | number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional dim: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • paddings: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • numOrSizeSplits: number | number[]
                • Optional axis: number

                Returns T[]

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional alpha: number

                Returns T

              • Type Parameters

                Parameters

                • this: Tensor<Rank>
                • begin: number[]
                • end: number[]
                • strides: number[]
                • Optional beginMask: number
                • Optional endMask: number
                • Optional ellipsisMask: number
                • Optional newAxisMask: number
                • Optional shrinkAxisMask: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns void

              • Type Parameters

                Parameters

                • b: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns a human-readable description of the tensor. Useful for logging.

                -

                Parameters

                • Optional verbose: boolean

                Returns string

                Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional k: number
                • Optional sorted: boolean

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • Optional perm: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • this: T
                • segmentIds: Tensor1D | TensorLike1D
                • numSegments: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T[]

              • Parameters

                • Optional trainable: boolean
                • Optional name: string
                • Optional dtype: keyof DataTypeMap

                Returns Variable<R>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              \ No newline at end of file +

              Returns void

              Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • shape: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfPixelCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • newShape2D: [number, number]
                • Optional alignCorners: boolean
                • Optional halfFloatCenters: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number | number[]

                Returns T

              • Type Parameters

                Parameters

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Returns T

              • Type Parameters

                Parameters

                • depthwiseFilter: Tensor4D | TensorLike4D
                • pointwiseFilter: TensorLike | Tensor4D
                • strides: number | [number, number]
                • pad: "valid" | "same"
                • Optional dilation: number | [number, number]
                • Optional dataFormat: "NHWC" | "NCHW"

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • begin: number | number[]
                • Optional size: number | number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional dim: number

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • blockShape: number[]
                • paddings: number[][]

                Returns Tensor<R>

              • Type Parameters

                Parameters

                • numOrSizeSplits: number | number[]
                • Optional axis: number

                Returns T[]

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number[]

                Returns T

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional alpha: number

                Returns T

              • Type Parameters

                Parameters

                • this: Tensor<Rank>
                • begin: number[]
                • end: number[]
                • strides: number[]
                • Optional beginMask: number
                • Optional endMask: number
                • Optional ellipsisMask: number
                • Optional newAxisMask: number
                • Optional shrinkAxisMask: number

                Returns Tensor<Rank>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number | number[]
                • Optional keepDims: boolean

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns void

              • Type Parameters

                Parameters

                • b: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              • Returns a human-readable description of the tensor. Useful for logging.

                +

                Parameters

                • Optional verbose: boolean

                Returns string

                Doc

              • Type Parameters

                Parameters

                • this: T
                • Optional k: number
                • Optional sorted: boolean

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • Optional perm: number[]

                Returns T

              • Type Parameters

                Parameters

                • this: T
                • Optional axis: number

                Returns {
                    indices: T;
                    values: T;
                }

                • indices: T
                • values: T
              • Type Parameters

                Parameters

                • this: T
                • segmentIds: Tensor1D | TensorLike1D
                • numSegments: number

                Returns T

              • Type Parameters

                Parameters

                • Optional axis: number

                Returns T[]

              • Parameters

                • Optional trainable: boolean
                • Optional name: string
                • Optional dtype: keyof DataTypeMap

                Returns Variable<R>

              • Type Parameters

                Parameters

                Returns T

              • Type Parameters

                Parameters

                • this: T

                Returns T

              \ No newline at end of file diff --git a/typedoc/classes/WebCam.html b/typedoc/classes/WebCam.html index ba245b80..4ab76314 100644 --- a/typedoc/classes/WebCam.html +++ b/typedoc/classes/WebCam.html @@ -1,35 +1,35 @@ -WebCam | @vladmandic/human - v3.2.1

              Constructors

              Properties

              config: WebCamConfig

              current webcam configuration

              -
              devices: MediaDeviceInfo[] = []

              enumerated video devices

              -
              element: undefined | HTMLVideoElement

              instance of dom element associated with webcam stream

              -
              stream: undefined | MediaStream

              active webcam stream

              -

              Accessors

              • get capabilities(): undefined | MediaTrackCapabilities
              • get webcam capabilities

                -

                Returns undefined | MediaTrackCapabilities

              • get constraints(): undefined | MediaTrackConstraints
              • get webcam constraints

                -

                Returns undefined | MediaTrackConstraints

              • get settings(): undefined | MediaTrackSettings
              • get webcam settings

                -

                Returns undefined | MediaTrackSettings

              • get track(): undefined | MediaStreamTrack
              • get active webcam stream track

                -

                Returns undefined | MediaStreamTrack

              Methods

              • Returns Promise<MediaDeviceInfo[]>

              • start method initializizes webcam stream and associates it with a dom video element

                -

                Parameters

                Returns Promise<string>

              • stop method stops active webcam stream track and disconnects webcam

                -

                Returns void

              \ No newline at end of file +WebCam | @vladmandic/human - v3.2.2

              Constructors

              Properties

              config: WebCamConfig

              current webcam configuration

              +
              devices: MediaDeviceInfo[] = []

              enumerated video devices

              +
              element: undefined | HTMLVideoElement

              instance of dom element associated with webcam stream

              +
              stream: undefined | MediaStream

              active webcam stream

              +

              Accessors

              • get capabilities(): undefined | MediaTrackCapabilities
              • get webcam capabilities

                +

                Returns undefined | MediaTrackCapabilities

              • get constraints(): undefined | MediaTrackConstraints
              • get webcam constraints

                +

                Returns undefined | MediaTrackConstraints

              • get settings(): undefined | MediaTrackSettings
              • get webcam settings

                +

                Returns undefined | MediaTrackSettings

              • get track(): undefined | MediaStreamTrack
              • get active webcam stream track

                +

                Returns undefined | MediaStreamTrack

              Methods

              • Returns Promise<MediaDeviceInfo[]>

              • start method initializizes webcam stream and associates it with a dom video element

                +

                Parameters

                Returns Promise<string>

              • stop method stops active webcam stream track and disconnects webcam

                +

                Returns void

              \ No newline at end of file diff --git a/typedoc/classes/models.Models.html b/typedoc/classes/models.Models.html index bbeaf43c..4c2d56cd 100644 --- a/typedoc/classes/models.Models.html +++ b/typedoc/classes/models.Models.html @@ -1,4 +1,4 @@ -Models | @vladmandic/human - v3.2.1

              Models class used by Human

              +Models | @vladmandic/human - v3.2.2

              Models class used by Human

              • models: record of all GraphModels
              • list: returns list of configured models with their stats
              • @@ -7,12 +7,12 @@
              • validate: checks loaded models for valid kernel ops vs current backend
              • stats: live detailed model stats that can be checked during model load phase
              -

              Constructors

              Properties

              Methods

              Constructors

              Properties

              models: Record<string, null | GraphModel<string | IOHandler>> = {}

              Methods

              • Returns {
                    loaded: boolean;
                    name: string;
                    size: number;
                    url: any;
                }[]

              • Parameters

                Returns Promise<void>

              • Returns {
                    missing: string[];
                    name: string;
                }[]

              \ No newline at end of file +

              Constructors

              Properties

              Methods

              Constructors

              Properties

              models: Record<string, null | GraphModel<string | IOHandler>> = {}

              Methods

              • Returns {
                    loaded: boolean;
                    name: string;
                    size: number;
                    url: any;
                }[]

              • Parameters

                Returns Promise<void>

              • Returns {
                    missing: string[];
                    name: string;
                }[]

              \ No newline at end of file diff --git a/typedoc/enums/Rank.html b/typedoc/enums/Rank.html index 6ccd6b15..305386bd 100644 --- a/typedoc/enums/Rank.html +++ b/typedoc/enums/Rank.html @@ -1,8 +1,8 @@ -Rank | @vladmandic/human - v3.2.1

              Enumeration Rank

              Enumeration Members

              R0 -R1 -R2 -R3 -R4 -R5 -R6 -

              Enumeration Members

              R0: "R0"
              R1: "R1"
              R2: "R2"
              R3: "R3"
              R4: "R4"
              R5: "R5"
              R6: "R6"
              \ No newline at end of file +Rank | @vladmandic/human - v3.2.2

              Enumeration Rank

              Enumeration Members

              R0 +R1 +R2 +R3 +R4 +R5 +R6 +

              Enumeration Members

              R0: "R0"
              R1: "R1"
              R2: "R2"
              R3: "R3"
              R4: "R4"
              R5: "R5"
              R6: "R6"
              \ No newline at end of file diff --git a/typedoc/functions/draw.all.html b/typedoc/functions/draw.all.html index 88ce7b2a..bd7fdd0e 100644 --- a/typedoc/functions/draw.all.html +++ b/typedoc/functions/draw.all.html @@ -1,2 +1,2 @@ -all | @vladmandic/human - v3.2.1
              • meta-function that performs draw for: canvas, face, body, hand

                -

                Parameters

                Returns Promise<null | [void, void, void, void, void]>

              \ No newline at end of file +all | @vladmandic/human - v3.2.2
              • meta-function that performs draw for: canvas, face, body, hand

                +

                Parameters

                Returns Promise<null | [void, void, void, void, void]>

              \ No newline at end of file diff --git a/typedoc/functions/draw.body.html b/typedoc/functions/draw.body.html index 5f119860..1d4ec797 100644 --- a/typedoc/functions/draw.body.html +++ b/typedoc/functions/draw.body.html @@ -1,2 +1,2 @@ -body | @vladmandic/human - v3.2.1
              \ No newline at end of file +body | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.canvas.html b/typedoc/functions/draw.canvas.html index bb5cdc50..4b0a55e1 100644 --- a/typedoc/functions/draw.canvas.html +++ b/typedoc/functions/draw.canvas.html @@ -1,2 +1,2 @@ -canvas | @vladmandic/human - v3.2.1
              \ No newline at end of file +canvas | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.face.html b/typedoc/functions/draw.face.html index d870795e..51b143d9 100644 --- a/typedoc/functions/draw.face.html +++ b/typedoc/functions/draw.face.html @@ -1,2 +1,2 @@ -face | @vladmandic/human - v3.2.1
              \ No newline at end of file +face | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.gesture.html b/typedoc/functions/draw.gesture.html index 5c132c80..c5779d5f 100644 --- a/typedoc/functions/draw.gesture.html +++ b/typedoc/functions/draw.gesture.html @@ -1,2 +1,2 @@ -gesture | @vladmandic/human - v3.2.1
              \ No newline at end of file +gesture | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.hand.html b/typedoc/functions/draw.hand.html index 6f0ba316..47edf0d7 100644 --- a/typedoc/functions/draw.hand.html +++ b/typedoc/functions/draw.hand.html @@ -1,2 +1,2 @@ -hand | @vladmandic/human - v3.2.1
              \ No newline at end of file +hand | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.init.html b/typedoc/functions/draw.init.html index 2451061f..9adf05e8 100644 --- a/typedoc/functions/draw.init.html +++ b/typedoc/functions/draw.init.html @@ -1,2 +1,2 @@ -init | @vladmandic/human - v3.2.1
              \ No newline at end of file +init | @vladmandic/human - v3.2.2
              • sets default label templates for face/body/hand/object/gestures

                +

                Returns void

              \ No newline at end of file diff --git a/typedoc/functions/draw.object.html b/typedoc/functions/draw.object.html index 14ba163e..8c4f94f1 100644 --- a/typedoc/functions/draw.object.html +++ b/typedoc/functions/draw.object.html @@ -1,2 +1,2 @@ -object | @vladmandic/human - v3.2.1
              \ No newline at end of file +object | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/draw.person.html b/typedoc/functions/draw.person.html index 6aa09444..527719a8 100644 --- a/typedoc/functions/draw.person.html +++ b/typedoc/functions/draw.person.html @@ -1,2 +1,2 @@ -person | @vladmandic/human - v3.2.1
              • draw combined person results instead of individual detection result objects

                -

                Parameters

                Returns void

              \ No newline at end of file +person | @vladmandic/human - v3.2.2
              • draw combined person results instead of individual detection result objects

                +

                Parameters

                Returns void

              \ No newline at end of file diff --git a/typedoc/functions/empty.html b/typedoc/functions/empty.html index d20cd9f5..5640bfc5 100644 --- a/typedoc/functions/empty.html +++ b/typedoc/functions/empty.html @@ -1 +1 @@ -empty | @vladmandic/human - v3.2.1
              \ No newline at end of file +empty | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/functions/match.distance.html b/typedoc/functions/match.distance.html index a4bf5f75..83616961 100644 --- a/typedoc/functions/match.distance.html +++ b/typedoc/functions/match.distance.html @@ -1,9 +1,9 @@ -distance | @vladmandic/human - v3.2.1
              \ No newline at end of file diff --git a/typedoc/functions/match.find.html b/typedoc/functions/match.find.html index 5012b4a2..6164725b 100644 --- a/typedoc/functions/match.find.html +++ b/typedoc/functions/match.find.html @@ -1,11 +1,11 @@ -find | @vladmandic/human - v3.2.1
              • Matches given descriptor to a closest entry in array of descriptors

                -

                Parameters

                Returns {
                    distance: number;
                    index: number;
                    similarity: number;
                }

                • distance: number
                • index: number
                • similarity: number
              \ No newline at end of file diff --git a/typedoc/functions/match.similarity.html b/typedoc/functions/match.similarity.html index 9803247e..d8ef2604 100644 --- a/typedoc/functions/match.similarity.html +++ b/typedoc/functions/match.similarity.html @@ -1,5 +1,5 @@ -similarity | @vladmandic/human - v3.2.1
              \ No newline at end of file diff --git a/typedoc/functions/models.validateModel.html b/typedoc/functions/models.validateModel.html index a5bc69fe..2d7a9e32 100644 --- a/typedoc/functions/models.validateModel.html +++ b/typedoc/functions/models.validateModel.html @@ -1 +1 @@ -validateModel | @vladmandic/human - v3.2.1
              \ No newline at end of file +validateModel | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/hierarchy.html b/typedoc/hierarchy.html new file mode 100644 index 00000000..24a1065b --- /dev/null +++ b/typedoc/hierarchy.html @@ -0,0 +1 @@ +@vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/index.html b/typedoc/index.html index 326a3627..2b6a594f 100644 --- a/typedoc/index.html +++ b/typedoc/index.html @@ -1,82 +1,82 @@ -@vladmandic/human - v3.2.1
              \ No newline at end of file +@vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/interfaces/BodyConfig.html b/typedoc/interfaces/BodyConfig.html index e8928245..e55d8d87 100644 --- a/typedoc/interfaces/BodyConfig.html +++ b/typedoc/interfaces/BodyConfig.html @@ -1,16 +1,16 @@ -BodyConfig | @vladmandic/human - v3.2.1

              Interface BodyConfig

              Configures all body detection specific options

              -
              interface BodyConfig {
                  enabled: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              maxDetected: number

              maximum number of detected bodies

              -
              minConfidence: number

              minimum confidence for a detected body before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +BodyConfig | @vladmandic/human - v3.2.2

              Interface BodyConfig

              Configures all body detection specific options

              +
              interface BodyConfig {
                  enabled: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              maxDetected: number

              maximum number of detected bodies

              +
              minConfidence: number

              minimum confidence for a detected body before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/BodyKeypoint.html b/typedoc/interfaces/BodyKeypoint.html index 683c4788..54d334cc 100644 --- a/typedoc/interfaces/BodyKeypoint.html +++ b/typedoc/interfaces/BodyKeypoint.html @@ -1,12 +1,12 @@ -BodyKeypoint | @vladmandic/human - v3.2.1

              Interface BodyKeypoint

              Body Result keypoints

              -
              interface BodyKeypoint {
                  distance?: Point;
                  part: BodyLandmark;
                  position: Point;
                  positionRaw: Point;
                  score: number;
              }

              Properties

              distance?: Point

              body part position relative to body center in meters

              -

              body part name

              -
              position: Point

              body part position

              -
              positionRaw: Point

              body part position normalized to 0..1

              -
              score: number

              body part detection score

              -
              \ No newline at end of file +BodyKeypoint | @vladmandic/human - v3.2.2

              Interface BodyKeypoint

              Body Result keypoints

              +
              interface BodyKeypoint {
                  distance?: Point;
                  part: BodyLandmark;
                  position: Point;
                  positionRaw: Point;
                  score: number;
              }

              Properties

              distance?: Point

              body part position relative to body center in meters

              +

              body part name

              +
              position: Point

              body part position

              +
              positionRaw: Point

              body part position normalized to 0..1

              +
              score: number

              body part detection score

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/BodyResult.html b/typedoc/interfaces/BodyResult.html index dee2cbfd..c57e54f4 100644 --- a/typedoc/interfaces/BodyResult.html +++ b/typedoc/interfaces/BodyResult.html @@ -1,14 +1,14 @@ -BodyResult | @vladmandic/human - v3.2.1

              Interface BodyResult

              Body results

              -
              interface BodyResult {
                  annotations: Record<BodyAnnotation, Point[][]>;
                  box: Box;
                  boxRaw: Box;
                  id: number;
                  keypoints: BodyKeypoint[];
                  score: number;
              }

              Properties

              annotations: Record<BodyAnnotation, Point[][]>

              detected body keypoints combined into annotated parts

              -
              box: Box

              detected body box

              -
              boxRaw: Box

              detected body box normalized to 0..1

              -
              id: number

              body id

              -
              keypoints: BodyKeypoint[]

              detected body keypoints

              -
              score: number

              body detection score

              -
              \ No newline at end of file +BodyResult | @vladmandic/human - v3.2.2

              Interface BodyResult

              Body results

              +
              interface BodyResult {
                  annotations: Record<BodyAnnotation, Point[][]>;
                  box: Box;
                  boxRaw: Box;
                  id: number;
                  keypoints: BodyKeypoint[];
                  score: number;
              }

              Properties

              annotations: Record<BodyAnnotation, Point[][]>

              detected body keypoints combined into annotated parts

              +
              box: Box

              detected body box

              +
              boxRaw: Box

              detected body box normalized to 0..1

              +
              id: number

              body id

              +
              keypoints: BodyKeypoint[]

              detected body keypoints

              +
              score: number

              body detection score

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/Config.html b/typedoc/interfaces/Config.html index 5295e09a..e965ce17 100644 --- a/typedoc/interfaces/Config.html +++ b/typedoc/interfaces/Config.html @@ -1,74 +1,74 @@ -Config | @vladmandic/human - v3.2.1

              Interface Config

              Configuration interface definition for Human library +Config | @vladmandic/human - v3.2.2

              Interface Config

              Configuration interface definition for Human library Contains all configurable parameters Defaults: config

              -
              interface Config {
                  async: boolean;
                  backend: BackendEnum;
                  body: Partial<BodyConfig>;
                  cacheModels: boolean;
                  cacheSensitivity: number;
                  deallocate: boolean;
                  debug: boolean;
                  face: Partial<FaceConfig>;
                  filter: Partial<FilterConfig>;
                  flags: Record<string, unknown>;
                  gesture: Partial<GestureConfig>;
                  hand: Partial<HandConfig>;
                  modelBasePath: string;
                  object: Partial<ObjectConfig>;
                  segmentation: Partial<SegmentationConfig>;
                  skipAllowed: boolean;
                  softwareKernels: boolean;
                  validateModels: boolean;
                  warmup: WarmupEnum;
                  wasmPath: string;
                  wasmPlatformFetch: boolean;
              }

              Properties

              async: boolean

              Perform model loading and inference concurrently or sequentially

              +
              interface Config {
                  async: boolean;
                  backend: BackendEnum;
                  body: Partial<BodyConfig>;
                  cacheModels: boolean;
                  cacheSensitivity: number;
                  deallocate: boolean;
                  debug: boolean;
                  face: Partial<FaceConfig>;
                  filter: Partial<FilterConfig>;
                  flags: Record<string, unknown>;
                  gesture: Partial<GestureConfig>;
                  hand: Partial<HandConfig>;
                  modelBasePath: string;
                  object: Partial<ObjectConfig>;
                  segmentation: Partial<SegmentationConfig>;
                  skipAllowed: boolean;
                  softwareKernels: boolean;
                  validateModels: boolean;
                  warmup: WarmupEnum;
                  wasmPath: string;
                  wasmPlatformFetch: boolean;
              }

              Properties

              async: boolean

              Perform model loading and inference concurrently or sequentially

              default: true

              -
              backend: BackendEnum

              Backend used for TFJS operations +

              backend: BackendEnum

              Backend used for TFJS operations valid build-in backends are:

              • Browser: cpu, wasm, webgl, humangl, webgpu
              • NodeJS: cpu, wasm, tensorflow default: webgl for browser and tensorflow for nodejs
              -
              body: Partial<BodyConfig>

              Body config BodyConfig

              -
              cacheModels: boolean

              Cache models in IndexDB on first sucessfull load +

              body: Partial<BodyConfig>

              Body config BodyConfig

              +
              cacheModels: boolean

              Cache models in IndexDB on first sucessfull load default: true if indexdb is available (browsers), false if its not (nodejs)

              -
              cacheSensitivity: number

              Cache sensitivity

              +
              cacheSensitivity: number

              Cache sensitivity

              • values 0..1 where 0.01 means reset cache if input changed more than 1%
              • set to 0 to disable caching

              default: 0.7

              -
              deallocate: boolean

              Perform immediate garbage collection on deallocated tensors instead of caching them

              -
              debug: boolean

              Print debug statements to console

              +
              deallocate: boolean

              Perform immediate garbage collection on deallocated tensors instead of caching them

              +
              debug: boolean

              Print debug statements to console

              default: true

              -
              face: Partial<FaceConfig>

              Face config FaceConfig

              -
              filter: Partial<FilterConfig>

              Filter config FilterConfig

              -
              flags: Record<string, unknown>

              Explicit flags passed to initialize TFJS

              -
              gesture: Partial<GestureConfig>

              Gesture config GestureConfig

              -
              hand: Partial<HandConfig>

              Hand config HandConfig

              -
              modelBasePath: string

              Base model path (typically starting with file://, http:// or https://) for all models

              +
              face: Partial<FaceConfig>

              Face config FaceConfig

              +
              filter: Partial<FilterConfig>

              Filter config FilterConfig

              +
              flags: Record<string, unknown>

              Explicit flags passed to initialize TFJS

              +
              gesture: Partial<GestureConfig>

              Gesture config GestureConfig

              +
              hand: Partial<HandConfig>

              Hand config HandConfig

              +
              modelBasePath: string

              Base model path (typically starting with file://, http:// or https://) for all models

              • individual modelPath values are relative to this path

              default: ../models/ for browsers and file://models/ for nodejs

              -
              object: Partial<ObjectConfig>

              Object config ObjectConfig

              -
              segmentation: Partial<SegmentationConfig>

              Segmentation config SegmentationConfig

              -
              skipAllowed: boolean

              Internal Variable

              -
              softwareKernels: boolean

              Software Kernels +

              object: Partial<ObjectConfig>

              Object config ObjectConfig

              +
              segmentation: Partial<SegmentationConfig>

              Segmentation config SegmentationConfig

              +
              skipAllowed: boolean

              Internal Variable

              +
              softwareKernels: boolean

              Software Kernels Registers software kernel ops running on CPU when accelerated version of kernel is not found in the current backend

              -
              validateModels: boolean

              Validate kernel ops used in model during model load +

              validateModels: boolean

              Validate kernel ops used in model during model load default: true any errors will be printed on console but will be treated as non-fatal

              -
              warmup: WarmupEnum

              What to use for human.warmup()

              +
              warmup: WarmupEnum

              What to use for human.warmup()

              • warmup pre-initializes all models for faster inference but can take significant time on startup
              • used by webgl, humangl and webgpu backends

              default: full

              -
              wasmPath: string

              Path to *.wasm files if backend is set to wasm

              +
              wasmPath: string

              Path to *.wasm files if backend is set to wasm

              default: auto-detects to link to CDN jsdelivr when running in browser

              -
              wasmPlatformFetch: boolean

              Force WASM loader to use platform fetch

              +
              wasmPlatformFetch: boolean

              Force WASM loader to use platform fetch

              default: false

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/DrawOptions.html b/typedoc/interfaces/DrawOptions.html index 9e6a4c98..c7919461 100644 --- a/typedoc/interfaces/DrawOptions.html +++ b/typedoc/interfaces/DrawOptions.html @@ -1,57 +1,57 @@ -DrawOptions | @vladmandic/human - v3.2.1

              Interface DrawOptions

              Draw Options

              +DrawOptions | @vladmandic/human - v3.2.2

              Interface DrawOptions

              Draw Options

              • Accessed via human.draw.options or provided per each draw method as the drawOptions optional parameter
              -
              interface DrawOptions {
                  alpha: number;
                  bodyLabels: string;
                  bodyPartLabels: string;
                  color: string;
                  drawAttention: boolean;
                  drawBoxes: boolean;
                  drawGaze: boolean;
                  drawGestures: boolean;
                  drawLabels: boolean;
                  drawPoints: boolean;
                  drawPolygons: boolean;
                  faceLabels: string;
                  fillPolygons: boolean;
                  fingerLabels: string;
                  font: string;
                  gestureLabels: string;
                  handLabels: string;
                  labelColor: string;
                  lineHeight: number;
                  lineWidth: number;
                  objectLabels: string;
                  pointSize: number;
                  roundRect: number;
                  shadowColor: string;
                  useCurves: boolean;
                  useDepth: boolean;
              }

              Properties

              alpha: number

              alpha value used for lines

              -
              bodyLabels: string

              string template for body labels

              -
              bodyPartLabels: string

              string template for body part labels

              -
              color: string

              draw line color

              -
              drawAttention: boolean

              should face attention keypoints be highlighted

              -
              drawBoxes: boolean

              should draw boxes around detection results?

              -
              drawGaze: boolean

              should draw gaze arrows?

              -
              drawGestures: boolean

              should detected gestures be drawn?

              -
              drawLabels: boolean

              should labels be drawn?

              -
              drawPoints: boolean

              should points be drawn?

              -
              drawPolygons: boolean

              should draw polygons from detection points?

              -
              faceLabels: string

              string template for face labels

              -
              fillPolygons: boolean

              should fill polygons?

              -
              fingerLabels: string

              string template for hand labels

              -
              font: string

              label font

              -
              gestureLabels: string

              string template for gesture labels

              -
              handLabels: string

              string template for hand labels

              -
              labelColor: string

              label color

              -
              lineHeight: number

              line spacing between labels

              -
              lineWidth: number

              line width for drawn lines

              -
              objectLabels: string

              string template for object labels

              -
              pointSize: number

              size of drawn points

              -
              roundRect: number

              draw rounded boxes by n pixels

              -
              shadowColor: string

              label shadow color

              -
              useCurves: boolean

              should lines be curved?

              -
              useDepth: boolean

              use z-coordinate when available

              -
              \ No newline at end of file +
              interface DrawOptions {
                  alpha: number;
                  bodyLabels: string;
                  bodyPartLabels: string;
                  color: string;
                  drawAttention: boolean;
                  drawBoxes: boolean;
                  drawGaze: boolean;
                  drawGestures: boolean;
                  drawLabels: boolean;
                  drawPoints: boolean;
                  drawPolygons: boolean;
                  faceLabels: string;
                  fillPolygons: boolean;
                  fingerLabels: string;
                  font: string;
                  gestureLabels: string;
                  handLabels: string;
                  labelColor: string;
                  lineHeight: number;
                  lineWidth: number;
                  objectLabels: string;
                  pointSize: number;
                  roundRect: number;
                  shadowColor: string;
                  useCurves: boolean;
                  useDepth: boolean;
              }

              Properties

              alpha: number

              alpha value used for lines

              +
              bodyLabels: string

              string template for body labels

              +
              bodyPartLabels: string

              string template for body part labels

              +
              color: string

              draw line color

              +
              drawAttention: boolean

              should face attention keypoints be highlighted

              +
              drawBoxes: boolean

              should draw boxes around detection results?

              +
              drawGaze: boolean

              should draw gaze arrows?

              +
              drawGestures: boolean

              should detected gestures be drawn?

              +
              drawLabels: boolean

              should labels be drawn?

              +
              drawPoints: boolean

              should points be drawn?

              +
              drawPolygons: boolean

              should draw polygons from detection points?

              +
              faceLabels: string

              string template for face labels

              +
              fillPolygons: boolean

              should fill polygons?

              +
              fingerLabels: string

              string template for hand labels

              +
              font: string

              label font

              +
              gestureLabels: string

              string template for gesture labels

              +
              handLabels: string

              string template for hand labels

              +
              labelColor: string

              label color

              +
              lineHeight: number

              line spacing between labels

              +
              lineWidth: number

              line width for drawn lines

              +
              objectLabels: string

              string template for object labels

              +
              pointSize: number

              size of drawn points

              +
              roundRect: number

              draw rounded boxes by n pixels

              +
              shadowColor: string

              label shadow color

              +
              useCurves: boolean

              should lines be curved?

              +
              useDepth: boolean

              use z-coordinate when available

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceAntiSpoofConfig.html b/typedoc/interfaces/FaceAntiSpoofConfig.html index c7c219d7..c47fad52 100644 --- a/typedoc/interfaces/FaceAntiSpoofConfig.html +++ b/typedoc/interfaces/FaceAntiSpoofConfig.html @@ -1,12 +1,12 @@ -FaceAntiSpoofConfig | @vladmandic/human - v3.2.1

              Interface FaceAntiSpoofConfig

              Anti-spoofing part of face configuration

              -
              interface FaceAntiSpoofConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceAntiSpoofConfig | @vladmandic/human - v3.2.2

              Interface FaceAntiSpoofConfig

              Anti-spoofing part of face configuration

              +
              interface FaceAntiSpoofConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceAttentionConfig.html b/typedoc/interfaces/FaceAttentionConfig.html index 9361401a..12f7f604 100644 --- a/typedoc/interfaces/FaceAttentionConfig.html +++ b/typedoc/interfaces/FaceAttentionConfig.html @@ -1,12 +1,12 @@ -FaceAttentionConfig | @vladmandic/human - v3.2.1

              Interface FaceAttentionConfig

              Attention part of face configuration

              -
              interface FaceAttentionConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceAttentionConfig | @vladmandic/human - v3.2.2

              Interface FaceAttentionConfig

              Attention part of face configuration

              +
              interface FaceAttentionConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceConfig.html b/typedoc/interfaces/FaceConfig.html index a1571929..a545c87d 100644 --- a/typedoc/interfaces/FaceConfig.html +++ b/typedoc/interfaces/FaceConfig.html @@ -1,21 +1,21 @@ -FaceConfig | @vladmandic/human - v3.2.1

              Interface FaceConfig

              Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description

              -
              interface FaceConfig {
                  antispoof: Partial<FaceAntiSpoofConfig>;
                  attention: Partial<FaceAttentionConfig>;
                  description: Partial<FaceDescriptionConfig>;
                  detector: Partial<FaceDetectorConfig>;
                  emotion: Partial<FaceEmotionConfig>;
                  enabled: boolean;
                  gear: Partial<FaceGearConfig>;
                  iris: Partial<FaceIrisConfig>;
                  liveness: Partial<FaceLivenessConfig>;
                  mesh: Partial<FaceMeshConfig>;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              antispoof: Partial<FaceAntiSpoofConfig>
              attention: Partial<FaceAttentionConfig>
              description: Partial<FaceDescriptionConfig>
              detector: Partial<FaceDetectorConfig>
              emotion: Partial<FaceEmotionConfig>
              enabled: boolean

              is module enabled?

              -
              gear: Partial<FaceGearConfig>
              iris: Partial<FaceIrisConfig>
              liveness: Partial<FaceLivenessConfig>
              mesh: Partial<FaceMeshConfig>
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceConfig | @vladmandic/human - v3.2.2

              Interface FaceConfig

              Configures all face-specific options: face detection, mesh analysis, age, gender, emotion detection and face description

              +
              interface FaceConfig {
                  antispoof: Partial<FaceAntiSpoofConfig>;
                  attention: Partial<FaceAttentionConfig>;
                  description: Partial<FaceDescriptionConfig>;
                  detector: Partial<FaceDetectorConfig>;
                  emotion: Partial<FaceEmotionConfig>;
                  enabled: boolean;
                  gear: Partial<FaceGearConfig>;
                  iris: Partial<FaceIrisConfig>;
                  liveness: Partial<FaceLivenessConfig>;
                  mesh: Partial<FaceMeshConfig>;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              antispoof: Partial<FaceAntiSpoofConfig>
              attention: Partial<FaceAttentionConfig>
              description: Partial<FaceDescriptionConfig>
              detector: Partial<FaceDetectorConfig>
              emotion: Partial<FaceEmotionConfig>
              enabled: boolean

              is module enabled?

              +
              gear: Partial<FaceGearConfig>
              iris: Partial<FaceIrisConfig>
              liveness: Partial<FaceLivenessConfig>
              mesh: Partial<FaceMeshConfig>
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceDescriptionConfig.html b/typedoc/interfaces/FaceDescriptionConfig.html index dac5fe9e..194a17f2 100644 --- a/typedoc/interfaces/FaceDescriptionConfig.html +++ b/typedoc/interfaces/FaceDescriptionConfig.html @@ -1,17 +1,17 @@ -FaceDescriptionConfig | @vladmandic/human - v3.2.1

              Interface FaceDescriptionConfig

              Description or face embedding part of face configuration

              +FaceDescriptionConfig | @vladmandic/human - v3.2.2

              Interface FaceDescriptionConfig

              Description or face embedding part of face configuration

              • also used by age and gender detection
              -
              interface FaceDescriptionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +

              interface FaceDescriptionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceDetectorConfig.html b/typedoc/interfaces/FaceDetectorConfig.html index 2114a820..1f41c996 100644 --- a/typedoc/interfaces/FaceDetectorConfig.html +++ b/typedoc/interfaces/FaceDetectorConfig.html @@ -1,30 +1,30 @@ -FaceDetectorConfig | @vladmandic/human - v3.2.1

              Interface FaceDetectorConfig

              Detector part of face configuration

              -
              interface FaceDetectorConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  mask: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  minSize: number;
                  modelPath: string;
                  return: boolean;
                  rotation: boolean;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              iouThreshold: number

              minimum overlap between two detected faces before one is discarded

              -
              mask: boolean

              should child models perform on masked image of a face

              -
              maxDetected: number

              maximum number of detected faces

              -
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              -
              minSize: number

              minimum size in pixels of a detected face box before resutls are discared

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              return: boolean

              should face detection return processed and cropped face tensor that can with an external model for addtional processing? +FaceDetectorConfig | @vladmandic/human - v3.2.2

              Interface FaceDetectorConfig

              Detector part of face configuration

              +
              interface FaceDetectorConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  mask: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  minSize: number;
                  modelPath: string;
                  return: boolean;
                  rotation: boolean;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              iouThreshold: number

              minimum overlap between two detected faces before one is discarded

              +
              mask: boolean

              should child models perform on masked image of a face

              +
              maxDetected: number

              maximum number of detected faces

              +
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              +
              minSize: number

              minimum size in pixels of a detected face box before resutls are discared

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              return: boolean

              should face detection return processed and cropped face tensor that can with an external model for addtional processing? if enabled it must be manually deallocated to avoid memory leak

              -
              rotation: boolean

              is face rotation correction performed after detecting face? +

              rotation: boolean

              is face rotation correction performed after detecting face? used to correctly analyze faces under high angles

              -
              scale: number

              how much should face box be enlarged over the min/max facial coordinates

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +

              scale: number

              how much should face box be enlarged over the min/max facial coordinates

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceEmotionConfig.html b/typedoc/interfaces/FaceEmotionConfig.html index a1a471b1..cdfe2deb 100644 --- a/typedoc/interfaces/FaceEmotionConfig.html +++ b/typedoc/interfaces/FaceEmotionConfig.html @@ -1,14 +1,14 @@ -FaceEmotionConfig | @vladmandic/human - v3.2.1

              Interface FaceEmotionConfig

              Emotion part of face configuration

              -
              interface FaceEmotionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceEmotionConfig | @vladmandic/human - v3.2.2

              Interface FaceEmotionConfig

              Emotion part of face configuration

              +
              interface FaceEmotionConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              minConfidence: number

              minimum confidence for a detected face before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceGearConfig.html b/typedoc/interfaces/FaceGearConfig.html index a01f8b60..3eec129f 100644 --- a/typedoc/interfaces/FaceGearConfig.html +++ b/typedoc/interfaces/FaceGearConfig.html @@ -1,14 +1,14 @@ -FaceGearConfig | @vladmandic/human - v3.2.1

              Interface FaceGearConfig

              Gear part of face configuration

              -
              interface FaceGearConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              minConfidence: number

              minimum confidence for a detected race before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceGearConfig | @vladmandic/human - v3.2.2

              Interface FaceGearConfig

              Gear part of face configuration

              +
              interface FaceGearConfig {
                  enabled: boolean;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              minConfidence: number

              minimum confidence for a detected race before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceIrisConfig.html b/typedoc/interfaces/FaceIrisConfig.html index 63aa1639..35d1ad9c 100644 --- a/typedoc/interfaces/FaceIrisConfig.html +++ b/typedoc/interfaces/FaceIrisConfig.html @@ -1,14 +1,14 @@ -FaceIrisConfig | @vladmandic/human - v3.2.1

              Interface FaceIrisConfig

              Iris part of face configuration

              -
              interface FaceIrisConfig {
                  enabled: boolean;
                  modelPath: string;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              scale: number

              how much should iris box be enlarged over the min/max iris coordinates

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceIrisConfig | @vladmandic/human - v3.2.2

              Interface FaceIrisConfig

              Iris part of face configuration

              +
              interface FaceIrisConfig {
                  enabled: boolean;
                  modelPath: string;
                  scale: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              scale: number

              how much should iris box be enlarged over the min/max iris coordinates

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceLivenessConfig.html b/typedoc/interfaces/FaceLivenessConfig.html index a4fe74d7..d12ad5f0 100644 --- a/typedoc/interfaces/FaceLivenessConfig.html +++ b/typedoc/interfaces/FaceLivenessConfig.html @@ -1,12 +1,12 @@ -FaceLivenessConfig | @vladmandic/human - v3.2.1

              Interface FaceLivenessConfig

              Liveness part of face configuration

              -
              interface FaceLivenessConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceLivenessConfig | @vladmandic/human - v3.2.2

              Interface FaceLivenessConfig

              Liveness part of face configuration

              +
              interface FaceLivenessConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceMeshConfig.html b/typedoc/interfaces/FaceMeshConfig.html index 738bdbdf..1f437f16 100644 --- a/typedoc/interfaces/FaceMeshConfig.html +++ b/typedoc/interfaces/FaceMeshConfig.html @@ -1,14 +1,14 @@ -FaceMeshConfig | @vladmandic/human - v3.2.1

              Interface FaceMeshConfig

              Mesh part of face configuration

              -
              interface FaceMeshConfig {
                  enabled: boolean;
                  keepInvalid: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              keepInvalid: boolean

              Keep detected faces that cannot be verified using facemesh

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +FaceMeshConfig | @vladmandic/human - v3.2.2

              Interface FaceMeshConfig

              Mesh part of face configuration

              +
              interface FaceMeshConfig {
                  enabled: boolean;
                  keepInvalid: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              keepInvalid: boolean

              Keep detected faces that cannot be verified using facemesh

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/FaceResult.html b/typedoc/interfaces/FaceResult.html index 0259a6b4..818fc80b 100644 --- a/typedoc/interfaces/FaceResult.html +++ b/typedoc/interfaces/FaceResult.html @@ -1,48 +1,48 @@ -FaceResult | @vladmandic/human - v3.2.1

              Interface FaceResult

              Face results

              +FaceResult | @vladmandic/human - v3.2.2

              Interface FaceResult

              Face results

              • Combined results of face detector, face mesh, age, gender, emotion, embedding, iris models
              • Some values may be null if specific model is not enabled
              -
              interface FaceResult {
                  age?: number;
                  annotations: Record<FaceLandmark, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  distance?: number;
                  embedding?: number[];
                  emotion?: {
                      emotion: Emotion;
                      score: number;
                  }[];
                  faceScore: number;
                  gender?: Gender;
                  genderScore?: number;
                  id: number;
                  live?: number;
                  mesh: Point[];
                  meshRaw: Point[];
                  race?: {
                      race: Race;
                      score: number;
                  }[];
                  real?: number;
                  rotation?: null | {
                      angle: {
                          pitch: number;
                          roll: number;
                          yaw: number;
                      };
                      gaze: {
                          bearing: number;
                          strength: number;
                      };
                      matrix: [number, number, number, number, number, number, number, number, number];
                  };
                  score: number;
                  size: [number, number];
                  tensor?: Tensor<Rank>;
              }

              Properties

              age?: number

              detected age

              -
              annotations: Record<FaceLandmark, Point[]>

              mesh keypoints combined into annotated results

              -
              box: Box

              detected face box

              -
              boxRaw: Box

              detected face box normalized to 0..1

              -
              boxScore: number

              detection score

              -
              distance?: number

              face distance from camera

              -
              embedding?: number[]

              face descriptor

              -
              emotion?: {
                  emotion: Emotion;
                  score: number;
              }[]

              detected emotions

              -

              Type declaration

              faceScore: number

              mesh score

              -
              gender?: Gender

              detected gender

              -
              genderScore?: number

              gender detection score

              -
              id: number

              face id

              -
              live?: number

              face liveness result confidence

              -
              mesh: Point[]

              detected face mesh

              -
              meshRaw: Point[]

              detected face mesh normalized to 0..1

              -
              race?: {
                  race: Race;
                  score: number;
              }[]

              detected race

              -

              Type declaration

              • race: Race
              • score: number
              real?: number

              face anti-spoofing result confidence

              -
              rotation?: null | {
                  angle: {
                      pitch: number;
                      roll: number;
                      yaw: number;
                  };
                  gaze: {
                      bearing: number;
                      strength: number;
                  };
                  matrix: [number, number, number, number, number, number, number, number, number];
              }

              face rotation details

              -

              Type declaration

              • angle: {
                    pitch: number;
                    roll: number;
                    yaw: number;
                }
                • pitch: number
                • roll: number
                • yaw: number
              • gaze: {
                    bearing: number;
                    strength: number;
                }
                • bearing: number
                • strength: number
              • matrix: [number, number, number, number, number, number, number, number, number]
              score: number

              overall face score

              -
              size: [number, number]

              detected face box size

              -
              tensor?: Tensor<Rank>

              detected face as tensor that can be used in further pipelines

              -
              \ No newline at end of file +
              interface FaceResult {
                  age?: number;
                  annotations: Record<FaceLandmark, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  distance?: number;
                  embedding?: number[];
                  emotion?: {
                      emotion: Emotion;
                      score: number;
                  }[];
                  faceScore: number;
                  gender?: Gender;
                  genderScore?: number;
                  id: number;
                  live?: number;
                  mesh: Point[];
                  meshRaw: Point[];
                  race?: {
                      race: Race;
                      score: number;
                  }[];
                  real?: number;
                  rotation?: null | {
                      angle: {
                          pitch: number;
                          roll: number;
                          yaw: number;
                      };
                      gaze: {
                          bearing: number;
                          strength: number;
                      };
                      matrix: [number, number, number, number, number, number, number, number, number];
                  };
                  score: number;
                  size: [number, number];
                  tensor?: Tensor<Rank>;
              }

              Properties

              age?: number

              detected age

              +
              annotations: Record<FaceLandmark, Point[]>

              mesh keypoints combined into annotated results

              +
              box: Box

              detected face box

              +
              boxRaw: Box

              detected face box normalized to 0..1

              +
              boxScore: number

              detection score

              +
              distance?: number

              face distance from camera

              +
              embedding?: number[]

              face descriptor

              +
              emotion?: {
                  emotion: Emotion;
                  score: number;
              }[]

              detected emotions

              +

              Type declaration

              faceScore: number

              mesh score

              +
              gender?: Gender

              detected gender

              +
              genderScore?: number

              gender detection score

              +
              id: number

              face id

              +
              live?: number

              face liveness result confidence

              +
              mesh: Point[]

              detected face mesh

              +
              meshRaw: Point[]

              detected face mesh normalized to 0..1

              +
              race?: {
                  race: Race;
                  score: number;
              }[]

              detected race

              +

              Type declaration

              • race: Race
              • score: number
              real?: number

              face anti-spoofing result confidence

              +
              rotation?: null | {
                  angle: {
                      pitch: number;
                      roll: number;
                      yaw: number;
                  };
                  gaze: {
                      bearing: number;
                      strength: number;
                  };
                  matrix: [number, number, number, number, number, number, number, number, number];
              }

              face rotation details

              +

              Type declaration

              • angle: {
                    pitch: number;
                    roll: number;
                    yaw: number;
                }
                • pitch: number
                • roll: number
                • yaw: number
              • gaze: {
                    bearing: number;
                    strength: number;
                }
                • bearing: number
                • strength: number
              • matrix: [number, number, number, number, number, number, number, number, number]
              score: number

              overall face score

              +
              size: [number, number]

              detected face box size

              +
              tensor?: Tensor<Rank>

              detected face as tensor that can be used in further pipelines

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/FilterConfig.html b/typedoc/interfaces/FilterConfig.html index 3880912b..aee9925e 100644 --- a/typedoc/interfaces/FilterConfig.html +++ b/typedoc/interfaces/FilterConfig.html @@ -1,59 +1,59 @@ -FilterConfig | @vladmandic/human - v3.2.1

              Interface FilterConfig

              Run input through image filters before inference

              +FilterConfig | @vladmandic/human - v3.2.2

              Interface FilterConfig

              Run input through image filters before inference

              • available only in Browser environments
              • image filters run with near-zero latency as they are executed on the GPU using WebGL
              -
              interface FilterConfig {
                  autoBrightness: boolean;
                  blur: number;
                  brightness: number;
                  contrast: number;
                  enabled: boolean;
                  equalization: boolean;
                  flip: boolean;
                  height: number;
                  hue: number;
                  kodachrome: boolean;
                  negative: boolean;
                  pixelate: number;
                  polaroid: boolean;
                  return: boolean;
                  saturation: number;
                  sepia: boolean;
                  sharpness: number;
                  technicolor: boolean;
                  vintage: boolean;
                  width: number;
              }

              Properties

              autoBrightness: boolean

              apply auto-brighness

              -
              blur: number

              range: 0 (no blur) to N (blur radius in pixels)

              -
              brightness: number

              range: -1 (darken) to 1 (lighten)

              -
              contrast: number

              range: -1 (reduce contrast) to 1 (increase contrast)

              -
              enabled: boolean

              are image filters enabled?

              -
              equalization: boolean

              perform image histogram equalization

              +
              interface FilterConfig {
                  autoBrightness: boolean;
                  blur: number;
                  brightness: number;
                  contrast: number;
                  enabled: boolean;
                  equalization: boolean;
                  flip: boolean;
                  height: number;
                  hue: number;
                  kodachrome: boolean;
                  negative: boolean;
                  pixelate: number;
                  polaroid: boolean;
                  return: boolean;
                  saturation: number;
                  sepia: boolean;
                  sharpness: number;
                  technicolor: boolean;
                  vintage: boolean;
                  width: number;
              }

              Properties

              autoBrightness: boolean

              apply auto-brighness

              +
              blur: number

              range: 0 (no blur) to N (blur radius in pixels)

              +
              brightness: number

              range: -1 (darken) to 1 (lighten)

              +
              contrast: number

              range: -1 (reduce contrast) to 1 (increase contrast)

              +
              enabled: boolean

              are image filters enabled?

              +
              equalization: boolean

              perform image histogram equalization

              • equalization is performed on input as a whole and detected face before its passed for further analysis
              -
              flip: boolean

              flip input as mirror image

              -
              height: number

              resize input height

              +
              flip: boolean

              flip input as mirror image

              +
              height: number

              resize input height

              • if both width and height are set to 0, there is no resizing
              • if just one is set, second one is scaled automatically
              • if both are set, values are used as-is
              -
              hue: number

              range: 0 (no change) to 360 (hue rotation in degrees)

              -
              kodachrome: boolean

              image kodachrome colors

              -
              negative: boolean

              image negative

              -
              pixelate: number

              range: 0 (no pixelate) to N (number of pixels to pixelate)

              -
              polaroid: boolean

              image polaroid camera effect

              -
              return: boolean

              return processed canvas imagedata in result

              -
              saturation: number

              range: -1 (reduce saturation) to 1 (increase saturation)

              -
              sepia: boolean

              image sepia colors

              -
              sharpness: number

              range: 0 (no sharpening) to 1 (maximum sharpening)

              -
              technicolor: boolean

              image technicolor colors

              -
              vintage: boolean

              image vintage colors

              -
              width: number

              resize input width

              +
              hue: number

              range: 0 (no change) to 360 (hue rotation in degrees)

              +
              kodachrome: boolean

              image kodachrome colors

              +
              negative: boolean

              image negative

              +
              pixelate: number

              range: 0 (no pixelate) to N (number of pixels to pixelate)

              +
              polaroid: boolean

              image polaroid camera effect

              +
              return: boolean

              return processed canvas imagedata in result

              +
              saturation: number

              range: -1 (reduce saturation) to 1 (increase saturation)

              +
              sepia: boolean

              image sepia colors

              +
              sharpness: number

              range: 0 (no sharpening) to 1 (maximum sharpening)

              +
              technicolor: boolean

              image technicolor colors

              +
              vintage: boolean

              image vintage colors

              +
              width: number

              resize input width

              • if both width and height are set to 0, there is no resizing
              • if just one is set, second one is scaled automatically
              • if both are set, values are used as-is
              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/GenericConfig.html b/typedoc/interfaces/GenericConfig.html index 882c2c95..53015112 100644 --- a/typedoc/interfaces/GenericConfig.html +++ b/typedoc/interfaces/GenericConfig.html @@ -1,12 +1,12 @@ -GenericConfig | @vladmandic/human - v3.2.1

              Interface GenericConfig

              Generic config type inherited by all module types

              -
              interface GenericConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +GenericConfig | @vladmandic/human - v3.2.2

              Interface GenericConfig

              Generic config type inherited by all module types

              +
              interface GenericConfig {
                  enabled: boolean;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/GestureConfig.html b/typedoc/interfaces/GestureConfig.html index eebc8627..3e3dccc2 100644 --- a/typedoc/interfaces/GestureConfig.html +++ b/typedoc/interfaces/GestureConfig.html @@ -1,4 +1,4 @@ -GestureConfig | @vladmandic/human - v3.2.1

              Interface GestureConfig

              Controlls gesture detection

              -
              interface GestureConfig {
                  enabled: boolean;
              }

              Properties

              Properties

              enabled: boolean

              is gesture detection enabled?

              -
              \ No newline at end of file +GestureConfig | @vladmandic/human - v3.2.2

              Interface GestureConfig

              Controlls gesture detection

              +
              interface GestureConfig {
                  enabled: boolean;
              }

              Properties

              Properties

              enabled: boolean

              is gesture detection enabled?

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/HandConfig.html b/typedoc/interfaces/HandConfig.html index 7fd5c7e3..18ade98c 100644 --- a/typedoc/interfaces/HandConfig.html +++ b/typedoc/interfaces/HandConfig.html @@ -1,26 +1,26 @@ -HandConfig | @vladmandic/human - v3.2.1

              Interface HandConfig

              Configures all hand detection specific options

              -
              interface HandConfig {
                  detector: {
                      modelPath?: string;
                  };
                  enabled: boolean;
                  iouThreshold: number;
                  landmarks: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  rotation: boolean;
                  skeleton: {
                      modelPath?: string;
                  };
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              detector: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand detector model json

                -
              enabled: boolean

              is module enabled?

              -
              iouThreshold: number

              minimum overlap between two detected hands before one is discarded

              -
              landmarks: boolean

              should hand landmarks be detected or just return detected hand box

              -
              maxDetected: number

              maximum number of detected hands

              -
              minConfidence: number

              minimum confidence for a detected hand before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              rotation: boolean

              should hand rotation correction be performed after hand detection?

              -
              skeleton: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand skeleton model json

                -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +HandConfig | @vladmandic/human - v3.2.2

              Interface HandConfig

              Configures all hand detection specific options

              +
              interface HandConfig {
                  detector: {
                      modelPath?: string;
                  };
                  enabled: boolean;
                  iouThreshold: number;
                  landmarks: boolean;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  rotation: boolean;
                  skeleton: {
                      modelPath?: string;
                  };
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              detector: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand detector model json

                +
              enabled: boolean

              is module enabled?

              +
              iouThreshold: number

              minimum overlap between two detected hands before one is discarded

              +
              landmarks: boolean

              should hand landmarks be detected or just return detected hand box

              +
              maxDetected: number

              maximum number of detected hands

              +
              minConfidence: number

              minimum confidence for a detected hand before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              rotation: boolean

              should hand rotation correction be performed after hand detection?

              +
              skeleton: {
                  modelPath?: string;
              }

              Type declaration

              • Optional modelPath?: string

                path to hand skeleton model json

                +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/HandResult.html b/typedoc/interfaces/HandResult.html index f87ac166..9f4451be 100644 --- a/typedoc/interfaces/HandResult.html +++ b/typedoc/interfaces/HandResult.html @@ -1,22 +1,22 @@ -HandResult | @vladmandic/human - v3.2.1

              Interface HandResult

              Hand results

              -
              interface HandResult {
                  annotations: Record<Finger, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  fingerScore: number;
                  id: number;
                  keypoints: Point[];
                  label: HandType;
                  landmarks: Record<Finger, {
                      curl: FingerCurl;
                      direction: FingerDirection;
                  }>;
                  score: number;
              }

              Properties

              annotations: Record<Finger, Point[]>

              detected hand keypoints combined into annotated parts

              -
              box: Box

              detected hand box

              -
              boxRaw: Box

              detected hand box normalized to 0..1

              -
              boxScore: number

              hand detection score

              -
              fingerScore: number

              hand skelton score

              -
              id: number

              hand id

              -
              keypoints: Point[]

              detected hand keypoints

              -
              label: HandType

              detected hand class

              -
              landmarks: Record<Finger, {
                  curl: FingerCurl;
                  direction: FingerDirection;
              }>

              detected hand parts annotated with part gestures

              -

              Type declaration

              score: number

              hand overal score

              -
              \ No newline at end of file +HandResult | @vladmandic/human - v3.2.2

              Interface HandResult

              Hand results

              +
              interface HandResult {
                  annotations: Record<Finger, Point[]>;
                  box: Box;
                  boxRaw: Box;
                  boxScore: number;
                  fingerScore: number;
                  id: number;
                  keypoints: Point[];
                  label: HandType;
                  landmarks: Record<Finger, {
                      curl: FingerCurl;
                      direction: FingerDirection;
                  }>;
                  score: number;
              }

              Properties

              annotations: Record<Finger, Point[]>

              detected hand keypoints combined into annotated parts

              +
              box: Box

              detected hand box

              +
              boxRaw: Box

              detected hand box normalized to 0..1

              +
              boxScore: number

              hand detection score

              +
              fingerScore: number

              hand skelton score

              +
              id: number

              hand id

              +
              keypoints: Point[]

              detected hand keypoints

              +
              label: HandType

              detected hand class

              +
              landmarks: Record<Finger, {
                  curl: FingerCurl;
                  direction: FingerDirection;
              }>

              detected hand parts annotated with part gestures

              +

              Type declaration

              score: number

              hand overal score

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/ModelInfo.html b/typedoc/interfaces/ModelInfo.html index 2981f61f..a65179e7 100644 --- a/typedoc/interfaces/ModelInfo.html +++ b/typedoc/interfaces/ModelInfo.html @@ -1,7 +1,7 @@ -ModelInfo | @vladmandic/human - v3.2.1

              Interface ModelInfo

              interface ModelInfo {
                  inCache: boolean;
                  name: string;
                  sizeDesired: number;
                  sizeFromManifest: number;
                  sizeLoadedWeights: number;
                  url: string;
              }

              Properties

              inCache: boolean
              name: string
              sizeDesired: number
              sizeFromManifest: number
              sizeLoadedWeights: number
              url: string
              \ No newline at end of file +ModelInfo | @vladmandic/human - v3.2.2

              Interface ModelInfo

              interface ModelInfo {
                  inCache: boolean;
                  name: string;
                  sizeDesired: number;
                  sizeFromManifest: number;
                  sizeLoadedWeights: number;
                  url: string;
              }

              Properties

              inCache: boolean
              name: string
              sizeDesired: number
              sizeFromManifest: number
              sizeLoadedWeights: number
              url: string
              \ No newline at end of file diff --git a/typedoc/interfaces/ObjectConfig.html b/typedoc/interfaces/ObjectConfig.html index d18cb768..eaf47ea0 100644 --- a/typedoc/interfaces/ObjectConfig.html +++ b/typedoc/interfaces/ObjectConfig.html @@ -1,18 +1,18 @@ -ObjectConfig | @vladmandic/human - v3.2.1

              Interface ObjectConfig

              Configures all object detection specific options

              -
              interface ObjectConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -
              iouThreshold: number

              minimum overlap between two detected objects before one is discarded

              -
              maxDetected: number

              maximum number of detected objects

              -
              minConfidence: number

              minimum confidence for a detected objects before results are discarded

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +ObjectConfig | @vladmandic/human - v3.2.2

              Interface ObjectConfig

              Configures all object detection specific options

              +
              interface ObjectConfig {
                  enabled: boolean;
                  iouThreshold: number;
                  maxDetected: number;
                  minConfidence: number;
                  modelPath: string;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +
              iouThreshold: number

              minimum overlap between two detected objects before one is discarded

              +
              maxDetected: number

              maximum number of detected objects

              +
              minConfidence: number

              minimum confidence for a detected objects before results are discarded

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/ObjectResult.html b/typedoc/interfaces/ObjectResult.html index ee463a42..009e474c 100644 --- a/typedoc/interfaces/ObjectResult.html +++ b/typedoc/interfaces/ObjectResult.html @@ -1,14 +1,14 @@ -ObjectResult | @vladmandic/human - v3.2.1

              Interface ObjectResult

              Object results

              -
              interface ObjectResult {
                  box: Box;
                  boxRaw: Box;
                  class: number;
                  id: number;
                  label: ObjectType;
                  score: number;
              }

              Properties

              Properties

              box: Box

              detected object box

              -
              boxRaw: Box

              detected object box normalized to 0..1

              -
              class: number

              detected object class id

              -
              id: number

              object id

              -
              label: ObjectType

              detected object class name

              -
              score: number

              object detection score

              -
              \ No newline at end of file +ObjectResult | @vladmandic/human - v3.2.2

              Interface ObjectResult

              Object results

              +
              interface ObjectResult {
                  box: Box;
                  boxRaw: Box;
                  class: number;
                  id: number;
                  label: ObjectType;
                  score: number;
              }

              Properties

              Properties

              box: Box

              detected object box

              +
              boxRaw: Box

              detected object box normalized to 0..1

              +
              class: number

              detected object class id

              +
              id: number

              object id

              +
              label: ObjectType

              detected object class name

              +
              score: number

              object detection score

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/PersonResult.html b/typedoc/interfaces/PersonResult.html index e8c900a8..9e42b394 100644 --- a/typedoc/interfaces/PersonResult.html +++ b/typedoc/interfaces/PersonResult.html @@ -1,19 +1,19 @@ -PersonResult | @vladmandic/human - v3.2.1

              Interface PersonResult

              Person getter

              +PersonResult | @vladmandic/human - v3.2.2

              Interface PersonResult

              Person getter

              • Triggers combining all individual results into a virtual person object
              -
              interface PersonResult {
                  body: null | BodyResult;
                  box: Box;
                  boxRaw?: Box;
                  face: FaceResult;
                  gestures: GestureResult[];
                  hands: {
                      left: null | HandResult;
                      right: null | HandResult;
                  };
                  id: number;
              }

              Properties

              Properties

              body: null | BodyResult

              body result that belongs to this person

              -
              box: Box

              box that defines the person

              -
              boxRaw?: Box

              box that defines the person normalized to 0..1

              -

              face result that belongs to this person

              -
              gestures: GestureResult[]

              detected gestures specific to this person

              -
              hands: {
                  left: null | HandResult;
                  right: null | HandResult;
              }

              left and right hand results that belong to this person

              -

              Type declaration

              id: number

              person id

              -
              \ No newline at end of file +
              interface PersonResult {
                  body: null | BodyResult;
                  box: Box;
                  boxRaw?: Box;
                  face: FaceResult;
                  gestures: GestureResult[];
                  hands: {
                      left: null | HandResult;
                      right: null | HandResult;
                  };
                  id: number;
              }

              Properties

              Properties

              body: null | BodyResult

              body result that belongs to this person

              +
              box: Box

              box that defines the person

              +
              boxRaw?: Box

              box that defines the person normalized to 0..1

              +

              face result that belongs to this person

              +
              gestures: GestureResult[]

              detected gestures specific to this person

              +
              hands: {
                  left: null | HandResult;
                  right: null | HandResult;
              }

              left and right hand results that belong to this person

              +

              Type declaration

              id: number

              person id

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/Result.html b/typedoc/interfaces/Result.html index dfb8f939..633cc66b 100644 --- a/typedoc/interfaces/Result.html +++ b/typedoc/interfaces/Result.html @@ -1,27 +1,27 @@ -Result | @vladmandic/human - v3.2.1

              Interface Result

              Result interface definition for Human library

              +Result | @vladmandic/human - v3.2.2

              Interface Result

              Result interface definition for Human library

              Contains all possible detection results

              -
              interface Result {
                  body: BodyResult[];
                  canvas?: null | AnyCanvas;
                  error: null | string;
                  face: FaceResult[];
                  gesture: GestureResult[];
                  hand: HandResult[];
                  height: number;
                  object: ObjectResult[];
                  performance: Record<string, number>;
                  persons: PersonResult[];
                  timestamp: number;
                  width: number;
              }

              Properties

              body: BodyResult[]

              BodyResult: detection & analysis results

              -
              canvas?: null | AnyCanvas

              optional processed canvas that can be used to draw input on screen

              -
              error: null | string

              Last known error message

              -
              face: FaceResult[]

              FaceResult: detection & analysis results

              -
              gesture: GestureResult[]

              GestureResult: detection & analysis results

              -
              hand: HandResult[]

              HandResult: detection & analysis results

              -
              height: number

              Resolution height

              -
              object: ObjectResult[]

              ObjectResult: detection & analysis results

              -
              performance: Record<string, number>

              global performance object with timing values for each operation

              -
              persons: PersonResult[]

              getter property that returns unified persons object

              -
              timestamp: number

              timestamp of detection representing the milliseconds elapsed since the UNIX epoch

              -
              width: number

              Resolution width

              -
              \ No newline at end of file +
              interface Result {
                  body: BodyResult[];
                  canvas?: null | AnyCanvas;
                  error: null | string;
                  face: FaceResult[];
                  gesture: GestureResult[];
                  hand: HandResult[];
                  height: number;
                  object: ObjectResult[];
                  performance: Record<string, number>;
                  persons: PersonResult[];
                  timestamp: number;
                  width: number;
              }

              Properties

              body: BodyResult[]

              BodyResult: detection & analysis results

              +
              canvas?: null | AnyCanvas

              optional processed canvas that can be used to draw input on screen

              +
              error: null | string

              Last known error message

              +
              face: FaceResult[]

              FaceResult: detection & analysis results

              +
              gesture: GestureResult[]

              GestureResult: detection & analysis results

              +
              hand: HandResult[]

              HandResult: detection & analysis results

              +
              height: number

              Resolution height

              +
              object: ObjectResult[]

              ObjectResult: detection & analysis results

              +
              performance: Record<string, number>

              global performance object with timing values for each operation

              +
              persons: PersonResult[]

              getter property that returns unified persons object

              +
              timestamp: number

              timestamp of detection representing the milliseconds elapsed since the UNIX epoch

              +
              width: number

              Resolution width

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/SegmentationConfig.html b/typedoc/interfaces/SegmentationConfig.html index e5627438..ffb08ca0 100644 --- a/typedoc/interfaces/SegmentationConfig.html +++ b/typedoc/interfaces/SegmentationConfig.html @@ -1,20 +1,20 @@ -SegmentationConfig | @vladmandic/human - v3.2.1

              Interface SegmentationConfig

              Configures all body segmentation module +SegmentationConfig | @vladmandic/human - v3.2.2

              Interface SegmentationConfig

              Configures all body segmentation module removes background from input containing person if segmentation is enabled it will run as preprocessing task before any other model alternatively leave it disabled and use it on-demand using human.segmentation method which can remove background or replace it with user-provided background

              -
              interface SegmentationConfig {
                  enabled: boolean;
                  mode: SegmentationEnum;
                  modelPath: string;
                  ratio: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy

              Properties

              enabled: boolean

              is module enabled?

              -

              possible rvm segmentation mode

              -
              modelPath: string

              path to model json file (relative to modelBasePath

              -
              ratio: number

              downsample ratio, adjust to reflect approximately how much of input is taken by body

              -
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable +

              interface SegmentationConfig {
                  enabled: boolean;
                  mode: SegmentationEnum;
                  modelPath: string;
                  ratio: number;
                  skipFrames: number;
                  skipTime: number;
              }

              Hierarchy (view full)

              Properties

              enabled: boolean

              is module enabled?

              +

              possible rvm segmentation mode

              +
              modelPath: string

              path to model json file (relative to modelBasePath

              +
              ratio: number

              downsample ratio, adjust to reflect approximately how much of input is taken by body

              +
              skipFrames: number

              how many max frames to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable +

              skipTime: number

              how many max milliseconds to go without re-running model if cached results are acceptable for two-phase models such as face and hand caching applies to bounding boxes detection only

              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/interfaces/WebCamConfig.html b/typedoc/interfaces/WebCamConfig.html index 2f8f2b53..5d14e62b 100644 --- a/typedoc/interfaces/WebCamConfig.html +++ b/typedoc/interfaces/WebCamConfig.html @@ -1,21 +1,21 @@ -WebCamConfig | @vladmandic/human - v3.2.1

              Interface WebCamConfig

              WebCam configuration

              -
              interface WebCamConfig {
                  crop: boolean;
                  debug: boolean;
                  element: undefined | string | HTMLVideoElement;
                  height: number;
                  id?: string;
                  mode: "front" | "back";
                  width: number;
              }

              Properties

              Properties

              crop: boolean

              camera crop mode

              -
              debug: boolean

              print messages on console

              -
              element: undefined | string | HTMLVideoElement

              element can be:

              +WebCamConfig | @vladmandic/human - v3.2.2

              Interface WebCamConfig

              WebCam configuration

              +
              interface WebCamConfig {
                  crop: boolean;
                  debug: boolean;
                  element: undefined | string | HTMLVideoElement;
                  height: number;
                  id?: string;
                  mode: "front" | "back";
                  width: number;
              }

              Properties

              Properties

              crop: boolean

              camera crop mode

              +
              debug: boolean

              print messages on console

              +
              element: undefined | string | HTMLVideoElement

              element can be:

              • string which indicates dom element id
              • actual HTMLVideo dom element
              • undefined in which case a new HTMLVideoElement will be created
              -
              height: number

              desired webcam height

              -
              id?: string

              deviceId of the video device to use

              -
              mode: "front" | "back"

              use front or back camera

              -
              width: number

              desired webcam width

              -
              \ No newline at end of file +
              height: number

              desired webcam height

              +
              id?: string

              deviceId of the video device to use

              +
              mode: "front" | "back"

              use front or back camera

              +
              width: number

              desired webcam width

              +
              \ No newline at end of file diff --git a/typedoc/interfaces/models.KernelOps.html b/typedoc/interfaces/models.KernelOps.html index 545901a7..d26074fc 100644 --- a/typedoc/interfaces/models.KernelOps.html +++ b/typedoc/interfaces/models.KernelOps.html @@ -1,5 +1,5 @@ -KernelOps | @vladmandic/human - v3.2.1
              interface KernelOps {
                  missing: string[];
                  name: string;
                  ops: string[];
                  url: string;
              }

              Properties

              Properties

              missing: string[]
              name: string
              ops: string[]
              url: string
              \ No newline at end of file +KernelOps | @vladmandic/human - v3.2.2
              interface KernelOps {
                  missing: string[];
                  name: string;
                  ops: string[];
                  url: string;
              }

              Properties

              Properties

              missing: string[]
              name: string
              ops: string[]
              url: string
              \ No newline at end of file diff --git a/typedoc/interfaces/models.ModelStats.html b/typedoc/interfaces/models.ModelStats.html index ef0d9972..c570a302 100644 --- a/typedoc/interfaces/models.ModelStats.html +++ b/typedoc/interfaces/models.ModelStats.html @@ -1,9 +1,9 @@ -ModelStats | @vladmandic/human - v3.2.1

              structure that holds global stats for currently loaded models

              -
              interface ModelStats {
                  modelStats: ModelInfo[];
                  numDefinedModels: number;
                  numLoadedModels: number;
                  percentageLoaded: number;
                  totalSizeFromManifest: number;
                  totalSizeLoading: number;
                  totalSizeWeights: number;
              }

              Properties

              modelStats: ModelInfo[]
              numDefinedModels: number
              numLoadedModels: number
              percentageLoaded: number
              totalSizeFromManifest: number
              totalSizeLoading: number
              totalSizeWeights: number
              \ No newline at end of file +ModelStats | @vladmandic/human - v3.2.2

              structure that holds global stats for currently loaded models

              +
              interface ModelStats {
                  modelStats: ModelInfo[];
                  numDefinedModels: number;
                  numLoadedModels: number;
                  percentageLoaded: number;
                  totalSizeFromManifest: number;
                  totalSizeLoading: number;
                  totalSizeWeights: number;
              }

              Properties

              modelStats: ModelInfo[]
              numDefinedModels: number
              numLoadedModels: number
              percentageLoaded: number
              totalSizeFromManifest: number
              totalSizeLoading: number
              totalSizeWeights: number
              \ No newline at end of file diff --git a/typedoc/modules/Tensor.html b/typedoc/modules/Tensor.html index acb8670c..6192528a 100644 --- a/typedoc/modules/Tensor.html +++ b/typedoc/modules/Tensor.html @@ -1,2 +1,2 @@ -Tensor | @vladmandic/human - v3.2.1

              Namespace Tensor

              Explict reexport of main @tensorflow/tfjs types

              -
              \ No newline at end of file +Tensor | @vladmandic/human - v3.2.2

              Namespace Tensor

              Explict reexport of main @tensorflow/tfjs types

              +
              \ No newline at end of file diff --git a/typedoc/modules/draw.html b/typedoc/modules/draw.html index 604ab997..ff5979e4 100644 --- a/typedoc/modules/draw.html +++ b/typedoc/modules/draw.html @@ -1,12 +1,12 @@ -draw | @vladmandic/human - v3.2.1
              \ No newline at end of file +draw | @vladmandic/human - v3.2.2

              Namespace draw

              Class Human as default export

              +

              Index

              Variables

              Functions

              \ No newline at end of file diff --git a/typedoc/modules/match.html b/typedoc/modules/match.html index 992d2e77..160ecc4b 100644 --- a/typedoc/modules/match.html +++ b/typedoc/modules/match.html @@ -1,7 +1,7 @@ -match | @vladmandic/human - v3.2.1
              \ No newline at end of file +match | @vladmandic/human - v3.2.2

              Namespace match

              Class Human as default export

              +

              Index

              Type Aliases

              Functions

              \ No newline at end of file diff --git a/typedoc/modules/models.html b/typedoc/modules/models.html index b15380a3..538f6089 100644 --- a/typedoc/modules/models.html +++ b/typedoc/modules/models.html @@ -1,6 +1,6 @@ -models | @vladmandic/human - v3.2.1
              \ No newline at end of file +models | @vladmandic/human - v3.2.2

              Namespace models

              Class Human as default export

              +

              Index

              Classes

              Interfaces

              Functions

              \ No newline at end of file diff --git a/typedoc/types/AnyCanvas.html b/typedoc/types/AnyCanvas.html index 304f3db9..71ff8308 100644 --- a/typedoc/types/AnyCanvas.html +++ b/typedoc/types/AnyCanvas.html @@ -1,2 +1,2 @@ -AnyCanvas | @vladmandic/human - v3.2.1
              \ No newline at end of file +AnyCanvas | @vladmandic/human - v3.2.2

              Type alias AnyCanvas

              AnyCanvas: HTMLCanvasElement | OffscreenCanvas

              Defines all possible canvas types

              +
              \ No newline at end of file diff --git a/typedoc/types/AnyImage.html b/typedoc/types/AnyImage.html index 7b3e624b..b07ff97b 100644 --- a/typedoc/types/AnyImage.html +++ b/typedoc/types/AnyImage.html @@ -1,2 +1,2 @@ -AnyImage | @vladmandic/human - v3.2.1
              \ No newline at end of file +AnyImage | @vladmandic/human - v3.2.2

              Type alias AnyImage

              AnyImage: HTMLImageElement | typeof Image

              Defines all possible image types

              +
              \ No newline at end of file diff --git a/typedoc/types/AnyVideo.html b/typedoc/types/AnyVideo.html index 1b8385f5..0077a14d 100644 --- a/typedoc/types/AnyVideo.html +++ b/typedoc/types/AnyVideo.html @@ -1,2 +1,2 @@ -AnyVideo | @vladmandic/human - v3.2.1
              \ No newline at end of file +AnyVideo | @vladmandic/human - v3.2.2

              Type alias AnyVideo

              AnyVideo: HTMLMediaElement | HTMLVideoElement

              Defines all possible video types

              +
              \ No newline at end of file diff --git a/typedoc/types/BackendEnum.html b/typedoc/types/BackendEnum.html index 7aeb7032..219fdf0f 100644 --- a/typedoc/types/BackendEnum.html +++ b/typedoc/types/BackendEnum.html @@ -1,2 +1,2 @@ -BackendEnum | @vladmandic/human - v3.2.1

              Type alias BackendEnum

              BackendEnum: "" | "cpu" | "wasm" | "webgl" | "humangl" | "tensorflow" | "webgpu"

              Possible TensorFlow backends

              -
              \ No newline at end of file +BackendEnum | @vladmandic/human - v3.2.2

              Type alias BackendEnum

              BackendEnum: "" | "cpu" | "wasm" | "webgl" | "humangl" | "tensorflow" | "webgpu"

              Possible TensorFlow backends

              +
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotation.html b/typedoc/types/BodyAnnotation.html index 5280c953..bb9a7fd0 100644 --- a/typedoc/types/BodyAnnotation.html +++ b/typedoc/types/BodyAnnotation.html @@ -1 +1 @@ -BodyAnnotation | @vladmandic/human - v3.2.1
              \ No newline at end of file +BodyAnnotation | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotationBlazePose.html b/typedoc/types/BodyAnnotationBlazePose.html index 59dcd609..05683d94 100644 --- a/typedoc/types/BodyAnnotationBlazePose.html +++ b/typedoc/types/BodyAnnotationBlazePose.html @@ -1 +1 @@ -BodyAnnotationBlazePose | @vladmandic/human - v3.2.1

              Type alias BodyAnnotationBlazePose

              BodyAnnotationBlazePose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "leftEye" | "rightEye" | "mouth"
              \ No newline at end of file +BodyAnnotationBlazePose | @vladmandic/human - v3.2.2

              Type alias BodyAnnotationBlazePose

              BodyAnnotationBlazePose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "leftEye" | "rightEye" | "mouth"
              \ No newline at end of file diff --git a/typedoc/types/BodyAnnotationEfficientPose.html b/typedoc/types/BodyAnnotationEfficientPose.html index bd0c124a..e566b03a 100644 --- a/typedoc/types/BodyAnnotationEfficientPose.html +++ b/typedoc/types/BodyAnnotationEfficientPose.html @@ -1 +1 @@ -BodyAnnotationEfficientPose | @vladmandic/human - v3.2.1

              Type alias BodyAnnotationEfficientPose

              BodyAnnotationEfficientPose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "head"
              \ No newline at end of file +BodyAnnotationEfficientPose | @vladmandic/human - v3.2.2

              Type alias BodyAnnotationEfficientPose

              BodyAnnotationEfficientPose: "leftLeg" | "rightLeg" | "torso" | "leftArm" | "rightArm" | "head"
              \ No newline at end of file diff --git a/typedoc/types/BodyGesture.html b/typedoc/types/BodyGesture.html index 0f7d8591..f435d5a6 100644 --- a/typedoc/types/BodyGesture.html +++ b/typedoc/types/BodyGesture.html @@ -1,2 +1,2 @@ -BodyGesture | @vladmandic/human - v3.2.1

              Type alias BodyGesture

              BodyGesture: `leaning ${"left" | "right"}` | `raise ${"left" | "right"} hand` | "i give up"

              body gesture type

              -
              \ No newline at end of file +BodyGesture | @vladmandic/human - v3.2.2

              Type alias BodyGesture

              BodyGesture: `leaning ${"left" | "right"}` | `raise ${"left" | "right"} hand` | "i give up"

              body gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmark.html b/typedoc/types/BodyLandmark.html index e5469e58..259cc759 100644 --- a/typedoc/types/BodyLandmark.html +++ b/typedoc/types/BodyLandmark.html @@ -1 +1 @@ -BodyLandmark | @vladmandic/human - v3.2.1
              \ No newline at end of file +BodyLandmark | @vladmandic/human - v3.2.2
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkBlazePose.html b/typedoc/types/BodyLandmarkBlazePose.html index 7d87f033..785f2788 100644 --- a/typedoc/types/BodyLandmarkBlazePose.html +++ b/typedoc/types/BodyLandmarkBlazePose.html @@ -1 +1 @@ -BodyLandmarkBlazePose | @vladmandic/human - v3.2.1

              Type alias BodyLandmarkBlazePose

              BodyLandmarkBlazePose: "nose" | "leftEyeInside" | "leftEye" | "leftEyeOutside" | "rightEyeInside" | "rightEye" | "rightEyeOutside" | "leftEar" | "rightEar" | "leftMouth" | "rightMouth" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftPinky" | "rightPinky" | "leftIndex" | "rightIndex" | "leftThumb" | "rightThumb" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle" | "leftHeel" | "rightHeel" | "leftFoot" | "rightFoot" | "bodyCenter" | "bodyTop" | "leftPalm" | "leftHand" | "rightPalm" | "rightHand"
              \ No newline at end of file +BodyLandmarkBlazePose | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkBlazePose

              BodyLandmarkBlazePose: "nose" | "leftEyeInside" | "leftEye" | "leftEyeOutside" | "rightEyeInside" | "rightEye" | "rightEyeOutside" | "leftEar" | "rightEar" | "leftMouth" | "rightMouth" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftPinky" | "rightPinky" | "leftIndex" | "rightIndex" | "leftThumb" | "rightThumb" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle" | "leftHeel" | "rightHeel" | "leftFoot" | "rightFoot" | "bodyCenter" | "bodyTop" | "leftPalm" | "leftHand" | "rightPalm" | "rightHand"
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkEfficientNet.html b/typedoc/types/BodyLandmarkEfficientNet.html index 82528766..e57fa267 100644 --- a/typedoc/types/BodyLandmarkEfficientNet.html +++ b/typedoc/types/BodyLandmarkEfficientNet.html @@ -1 +1 @@ -BodyLandmarkEfficientNet | @vladmandic/human - v3.2.1

              Type alias BodyLandmarkEfficientNet

              BodyLandmarkEfficientNet: "head" | "neck" | "rightShoulder" | "rightElbow" | "rightWrist" | "chest" | "leftShoulder" | "leftElbow" | "leftWrist" | "bodyCenter" | "rightHip" | "rightKnee" | "rightAnkle" | "leftHip" | "leftKnee" | "leftAnkle"
              \ No newline at end of file +BodyLandmarkEfficientNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkEfficientNet

              BodyLandmarkEfficientNet: "head" | "neck" | "rightShoulder" | "rightElbow" | "rightWrist" | "chest" | "leftShoulder" | "leftElbow" | "leftWrist" | "bodyCenter" | "rightHip" | "rightKnee" | "rightAnkle" | "leftHip" | "leftKnee" | "leftAnkle"
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkMoveNet.html b/typedoc/types/BodyLandmarkMoveNet.html index d161b81d..3d2a9297 100644 --- a/typedoc/types/BodyLandmarkMoveNet.html +++ b/typedoc/types/BodyLandmarkMoveNet.html @@ -1 +1 @@ -BodyLandmarkMoveNet | @vladmandic/human - v3.2.1

              Type alias BodyLandmarkMoveNet

              BodyLandmarkMoveNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file +BodyLandmarkMoveNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkMoveNet

              BodyLandmarkMoveNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file diff --git a/typedoc/types/BodyLandmarkPoseNet.html b/typedoc/types/BodyLandmarkPoseNet.html index 4d2aef5e..eb23580f 100644 --- a/typedoc/types/BodyLandmarkPoseNet.html +++ b/typedoc/types/BodyLandmarkPoseNet.html @@ -1 +1 @@ -BodyLandmarkPoseNet | @vladmandic/human - v3.2.1

              Type alias BodyLandmarkPoseNet

              BodyLandmarkPoseNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file +BodyLandmarkPoseNet | @vladmandic/human - v3.2.2

              Type alias BodyLandmarkPoseNet

              BodyLandmarkPoseNet: "nose" | "leftEye" | "rightEye" | "leftEar" | "rightEar" | "leftShoulder" | "rightShoulder" | "leftElbow" | "rightElbow" | "leftWrist" | "rightWrist" | "leftHip" | "rightHip" | "leftKnee" | "rightKnee" | "leftAnkle" | "rightAnkle"
              \ No newline at end of file diff --git a/typedoc/types/Box.html b/typedoc/types/Box.html index 89017766..292ea215 100644 --- a/typedoc/types/Box.html +++ b/typedoc/types/Box.html @@ -1,2 +1,2 @@ -Box | @vladmandic/human - v3.2.1
              \ No newline at end of file +Box | @vladmandic/human - v3.2.2

              Type alias Box

              Box: [number, number, number, number]

              generic box as [x, y, width, height]

              +
              \ No newline at end of file diff --git a/typedoc/types/Emotion.html b/typedoc/types/Emotion.html index 5f6fc5d9..c4fd2eae 100644 --- a/typedoc/types/Emotion.html +++ b/typedoc/types/Emotion.html @@ -1 +1 @@ -Emotion | @vladmandic/human - v3.2.1
              \ No newline at end of file +Emotion | @vladmandic/human - v3.2.2

              Type alias Emotion

              Emotion: "angry" | "disgust" | "fear" | "happy" | "sad" | "surprise" | "neutral"
              \ No newline at end of file diff --git a/typedoc/types/Events.html b/typedoc/types/Events.html index 9b7c08a3..cf41564a 100644 --- a/typedoc/types/Events.html +++ b/typedoc/types/Events.html @@ -1,4 +1,4 @@ -Events | @vladmandic/human - v3.2.1

              Type alias Events

              Events: "create" | "load" | "image" | "result" | "warmup" | "error"

              Events dispatched by human.events

              +Events | @vladmandic/human - v3.2.2

              Type alias Events

              Events: "create" | "load" | "image" | "result" | "warmup" | "error"

              Events dispatched by human.events

              • create: triggered when Human object is instantiated
              • load: triggered when models are loaded (explicitly or on-demand)
              • @@ -6,4 +6,4 @@
              • result: triggered when detection is complete
              • warmup: triggered when warmup is complete
              -
              \ No newline at end of file +
              \ No newline at end of file diff --git a/typedoc/types/ExternalCanvas.html b/typedoc/types/ExternalCanvas.html index 2ab58e8b..71c1f0f7 100644 --- a/typedoc/types/ExternalCanvas.html +++ b/typedoc/types/ExternalCanvas.html @@ -1,2 +1,2 @@ -ExternalCanvas | @vladmandic/human - v3.2.1
              \ No newline at end of file +ExternalCanvas | @vladmandic/human - v3.2.2

              Type alias ExternalCanvas

              ExternalCanvas: typeof Canvas

              Defines possible externally defined canvas

              +
              \ No newline at end of file diff --git a/typedoc/types/FaceGesture.html b/typedoc/types/FaceGesture.html index a857097a..8aaafc82 100644 --- a/typedoc/types/FaceGesture.html +++ b/typedoc/types/FaceGesture.html @@ -1,2 +1,2 @@ -FaceGesture | @vladmandic/human - v3.2.1

              Type alias FaceGesture

              FaceGesture: `facing ${"left" | "center" | "right"}` | `blink ${"left" | "right"} eye` | `mouth ${number}% open` | `head ${"up" | "down"}`

              face gesture type

              -
              \ No newline at end of file +FaceGesture | @vladmandic/human - v3.2.2

              Type alias FaceGesture

              FaceGesture: `facing ${"left" | "center" | "right"}` | `blink ${"left" | "right"} eye` | `mouth ${number}% open` | `head ${"up" | "down"}`

              face gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/FaceLandmark.html b/typedoc/types/FaceLandmark.html index 8111d603..5dd7c9cf 100644 --- a/typedoc/types/FaceLandmark.html +++ b/typedoc/types/FaceLandmark.html @@ -1 +1 @@ -FaceLandmark | @vladmandic/human - v3.2.1

              Type alias FaceLandmark

              FaceLandmark: "leftEye" | "rightEye" | "nose" | "mouth" | "leftEar" | "rightEar" | "symmetryLine" | "silhouette" | "lipsUpperOuter" | "lipsLowerOuter" | "lipsUpperInner" | "lipsLowerInner" | "rightEyeUpper0" | "rightEyeLower0" | "rightEyeUpper1" | "rightEyeLower1" | "rightEyeUpper2" | "rightEyeLower2" | "rightEyeLower3" | "rightEyebrowUpper" | "rightEyebrowLower" | "rightEyeIris" | "leftEyeUpper0" | "leftEyeLower0" | "leftEyeUpper1" | "leftEyeLower1" | "leftEyeUpper2" | "leftEyeLower2" | "leftEyeLower3" | "leftEyebrowUpper" | "leftEyebrowLower" | "leftEyeIris" | "midwayBetweenEyes" | "noseTip" | "noseBottom" | "noseRightCorner" | "noseLeftCorner" | "rightCheek" | "leftCheek"
              \ No newline at end of file +FaceLandmark | @vladmandic/human - v3.2.2

              Type alias FaceLandmark

              FaceLandmark: "leftEye" | "rightEye" | "nose" | "mouth" | "leftEar" | "rightEar" | "symmetryLine" | "silhouette" | "lipsUpperOuter" | "lipsLowerOuter" | "lipsUpperInner" | "lipsLowerInner" | "rightEyeUpper0" | "rightEyeLower0" | "rightEyeUpper1" | "rightEyeLower1" | "rightEyeUpper2" | "rightEyeLower2" | "rightEyeLower3" | "rightEyebrowUpper" | "rightEyebrowLower" | "rightEyeIris" | "leftEyeUpper0" | "leftEyeLower0" | "leftEyeUpper1" | "leftEyeLower1" | "leftEyeUpper2" | "leftEyeLower2" | "leftEyeLower3" | "leftEyebrowUpper" | "leftEyebrowLower" | "leftEyeIris" | "midwayBetweenEyes" | "noseTip" | "noseBottom" | "noseRightCorner" | "noseLeftCorner" | "rightCheek" | "leftCheek"
              \ No newline at end of file diff --git a/typedoc/types/Finger.html b/typedoc/types/Finger.html index 620f0397..5edabe3e 100644 --- a/typedoc/types/Finger.html +++ b/typedoc/types/Finger.html @@ -1 +1 @@ -Finger | @vladmandic/human - v3.2.1
              \ No newline at end of file +Finger | @vladmandic/human - v3.2.2

              Type alias Finger

              Finger: "index" | "middle" | "pinky" | "ring" | "thumb" | "palm"
              \ No newline at end of file diff --git a/typedoc/types/FingerCurl.html b/typedoc/types/FingerCurl.html index 90ca7116..b00d084a 100644 --- a/typedoc/types/FingerCurl.html +++ b/typedoc/types/FingerCurl.html @@ -1 +1 @@ -FingerCurl | @vladmandic/human - v3.2.1
              \ No newline at end of file +FingerCurl | @vladmandic/human - v3.2.2

              Type alias FingerCurl

              FingerCurl: "none" | "half" | "full"
              \ No newline at end of file diff --git a/typedoc/types/FingerDirection.html b/typedoc/types/FingerDirection.html index 59a703f7..a707e999 100644 --- a/typedoc/types/FingerDirection.html +++ b/typedoc/types/FingerDirection.html @@ -1 +1 @@ -FingerDirection | @vladmandic/human - v3.2.1

              Type alias FingerDirection

              FingerDirection: "verticalUp" | "verticalDown" | "horizontalLeft" | "horizontalRight" | "diagonalUpRight" | "diagonalUpLeft" | "diagonalDownRight" | "diagonalDownLeft"
              \ No newline at end of file +FingerDirection | @vladmandic/human - v3.2.2

              Type alias FingerDirection

              FingerDirection: "verticalUp" | "verticalDown" | "horizontalLeft" | "horizontalRight" | "diagonalUpRight" | "diagonalUpLeft" | "diagonalDownRight" | "diagonalDownLeft"
              \ No newline at end of file diff --git a/typedoc/types/Gender.html b/typedoc/types/Gender.html index 97d1bd0a..709c00e1 100644 --- a/typedoc/types/Gender.html +++ b/typedoc/types/Gender.html @@ -1 +1 @@ -Gender | @vladmandic/human - v3.2.1
              \ No newline at end of file +Gender | @vladmandic/human - v3.2.2

              Type alias Gender

              Gender: "male" | "female" | "unknown"
              \ No newline at end of file diff --git a/typedoc/types/GestureResult.html b/typedoc/types/GestureResult.html index ffef34a5..1f507726 100644 --- a/typedoc/types/GestureResult.html +++ b/typedoc/types/GestureResult.html @@ -1,7 +1,7 @@ -GestureResult | @vladmandic/human - v3.2.1

              Type alias GestureResult

              GestureResult: {
                  face: number;
                  gesture: FaceGesture;
              } | {
                  gesture: IrisGesture;
                  iris: number;
              } | {
                  body: number;
                  gesture: BodyGesture;
              } | {
                  gesture: HandGesture;
                  hand: number;
              }

              Gesture combined results +GestureResult | @vladmandic/human - v3.2.2

              Type alias GestureResult

              GestureResult: {
                  face: number;
                  gesture: FaceGesture;
              } | {
                  gesture: IrisGesture;
                  iris: number;
              } | {
                  body: number;
                  gesture: BodyGesture;
              } | {
                  gesture: HandGesture;
                  hand: number;
              }

              Gesture combined results Each result has:

              • part: part name and number where gesture was detected: face, iris, body, hand
              • gesture: gesture detected
              -

              Type declaration

              Type declaration

              Type declaration

              Type declaration

              \ No newline at end of file +

              Type declaration

              Type declaration

              Type declaration

              Type declaration

              \ No newline at end of file diff --git a/typedoc/types/HandGesture.html b/typedoc/types/HandGesture.html index 8af5e565..a8ce44ee 100644 --- a/typedoc/types/HandGesture.html +++ b/typedoc/types/HandGesture.html @@ -1,2 +1,2 @@ -HandGesture | @vladmandic/human - v3.2.1

              Type alias HandGesture

              HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"

              hand gesture type

              -
              \ No newline at end of file +HandGesture | @vladmandic/human - v3.2.2

              Type alias HandGesture

              HandGesture: `${"thumb" | "index" | "middle" | "ring" | "pinky"} forward` | `${"thumb" | "index" | "middle" | "ring" | "pinky"} up` | "victory" | "thumbs up"

              hand gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/HandType.html b/typedoc/types/HandType.html index 36648b9f..855dc83e 100644 --- a/typedoc/types/HandType.html +++ b/typedoc/types/HandType.html @@ -1 +1 @@ -HandType | @vladmandic/human - v3.2.1
              \ No newline at end of file +HandType | @vladmandic/human - v3.2.2

              Type alias HandType

              HandType: "hand" | "fist" | "pinch" | "point" | "face" | "tip" | "pinchtip"
              \ No newline at end of file diff --git a/typedoc/types/ImageObjects.html b/typedoc/types/ImageObjects.html index ab2fa3df..490158fd 100644 --- a/typedoc/types/ImageObjects.html +++ b/typedoc/types/ImageObjects.html @@ -1,2 +1,2 @@ -ImageObjects | @vladmandic/human - v3.2.1
              \ No newline at end of file +ImageObjects | @vladmandic/human - v3.2.2

              Type alias ImageObjects

              ImageObjects: ImageData | ImageBitmap

              Defines all possible image objects

              +
              \ No newline at end of file diff --git a/typedoc/types/Input.html b/typedoc/types/Input.html index 6ef3b8de..44b69fd1 100644 --- a/typedoc/types/Input.html +++ b/typedoc/types/Input.html @@ -1,2 +1,2 @@ -Input | @vladmandic/human - v3.2.1
              \ No newline at end of file +Input | @vladmandic/human - v3.2.2

              Type alias Input

              Defines all possible input types for Human detection

              +
              \ No newline at end of file diff --git a/typedoc/types/IrisGesture.html b/typedoc/types/IrisGesture.html index 1211e0bd..d472b7e3 100644 --- a/typedoc/types/IrisGesture.html +++ b/typedoc/types/IrisGesture.html @@ -1,2 +1,2 @@ -IrisGesture | @vladmandic/human - v3.2.1

              Type alias IrisGesture

              IrisGesture: "facing center" | `looking ${"left" | "right" | "up" | "down"}` | "looking center"

              iris gesture type

              -
              \ No newline at end of file +IrisGesture | @vladmandic/human - v3.2.2

              Type alias IrisGesture

              IrisGesture: "facing center" | `looking ${"left" | "right" | "up" | "down"}` | "looking center"

              iris gesture type

              +
              \ No newline at end of file diff --git a/typedoc/types/ObjectType.html b/typedoc/types/ObjectType.html index 0e73361d..ef94d13d 100644 --- a/typedoc/types/ObjectType.html +++ b/typedoc/types/ObjectType.html @@ -1 +1 @@ -ObjectType | @vladmandic/human - v3.2.1

              Type alias ObjectType

              ObjectType: "person" | "bicycle" | "car" | "motorcycle" | "airplane" | "bus" | "train" | "truck" | "boat" | "traffic light" | "fire hydrant" | "stop sign" | "parking meter" | "bench" | "bird" | "cat" | "dog" | "horse" | "sheep" | "cow" | "elephant" | "bear" | "zebra" | "giraffe" | "backpack" | "umbrella" | "handbag" | "tie" | "suitcase" | "frisbee" | "skis" | "snowboard" | "sports ball" | "kite" | "baseball bat" | "baseball glove" | "skateboard" | "surfboard" | "tennis racket" | "bottle" | "wine glass" | "cup" | "fork" | "knife" | "spoon" | "bowl" | "banana" | "apple" | "sandwich" | "orange" | "broccoli" | "carrot" | "hot dog" | "pizza" | "donut" | "cake" | "chair" | "couch" | "potted plant" | "bed" | "dining table" | "toilet" | "tv" | "laptop" | "mouse" | "remote" | "keyboard" | "cell phone" | "microwave" | "oven" | "toaster" | "sink" | "refrigerator" | "book" | "clock" | "vase" | "scissors" | "teddy bear" | "hair drier" | "toothbrush"
              \ No newline at end of file +ObjectType | @vladmandic/human - v3.2.2

              Type alias ObjectType

              ObjectType: "person" | "bicycle" | "car" | "motorcycle" | "airplane" | "bus" | "train" | "truck" | "boat" | "traffic light" | "fire hydrant" | "stop sign" | "parking meter" | "bench" | "bird" | "cat" | "dog" | "horse" | "sheep" | "cow" | "elephant" | "bear" | "zebra" | "giraffe" | "backpack" | "umbrella" | "handbag" | "tie" | "suitcase" | "frisbee" | "skis" | "snowboard" | "sports ball" | "kite" | "baseball bat" | "baseball glove" | "skateboard" | "surfboard" | "tennis racket" | "bottle" | "wine glass" | "cup" | "fork" | "knife" | "spoon" | "bowl" | "banana" | "apple" | "sandwich" | "orange" | "broccoli" | "carrot" | "hot dog" | "pizza" | "donut" | "cake" | "chair" | "couch" | "potted plant" | "bed" | "dining table" | "toilet" | "tv" | "laptop" | "mouse" | "remote" | "keyboard" | "cell phone" | "microwave" | "oven" | "toaster" | "sink" | "refrigerator" | "book" | "clock" | "vase" | "scissors" | "teddy bear" | "hair drier" | "toothbrush"
              \ No newline at end of file diff --git a/typedoc/types/Point.html b/typedoc/types/Point.html index ffe08b0c..13fc7b8d 100644 --- a/typedoc/types/Point.html +++ b/typedoc/types/Point.html @@ -1,2 +1,2 @@ -Point | @vladmandic/human - v3.2.1
              \ No newline at end of file +Point | @vladmandic/human - v3.2.2

              Type alias Point

              Point: [number, number, number?]

              generic point as [x, y, z?]

              +
              \ No newline at end of file diff --git a/typedoc/types/Race.html b/typedoc/types/Race.html index ef71de66..b7d430a7 100644 --- a/typedoc/types/Race.html +++ b/typedoc/types/Race.html @@ -1 +1 @@ -Race | @vladmandic/human - v3.2.1
              \ No newline at end of file +Race | @vladmandic/human - v3.2.2

              Type alias Race

              Race: "white" | "black" | "asian" | "indian" | "other"
              \ No newline at end of file diff --git a/typedoc/types/SegmentationEnum.html b/typedoc/types/SegmentationEnum.html index 4632e116..2410fae5 100644 --- a/typedoc/types/SegmentationEnum.html +++ b/typedoc/types/SegmentationEnum.html @@ -1,2 +1,2 @@ -SegmentationEnum | @vladmandic/human - v3.2.1

              Type alias SegmentationEnum

              SegmentationEnum: "default" | "alpha" | "foreground" | "state"

              Possible segmentation model behavior

              -
              \ No newline at end of file +SegmentationEnum | @vladmandic/human - v3.2.2

              Type alias SegmentationEnum

              SegmentationEnum: "default" | "alpha" | "foreground" | "state"

              Possible segmentation model behavior

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor1D.html b/typedoc/types/Tensor1D.html index 06eadae1..07809f05 100644 --- a/typedoc/types/Tensor1D.html +++ b/typedoc/types/Tensor1D.html @@ -1,2 +1,2 @@ -Tensor1D | @vladmandic/human - v3.2.1

              Type alias Tensor1D

              Tensor1D: Tensor<R1>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor1D | @vladmandic/human - v3.2.2

              Type alias Tensor1D

              Tensor1D: Tensor<R1>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor2D.html b/typedoc/types/Tensor2D.html index 2f21f384..beb1e277 100644 --- a/typedoc/types/Tensor2D.html +++ b/typedoc/types/Tensor2D.html @@ -1,2 +1,2 @@ -Tensor2D | @vladmandic/human - v3.2.1

              Type alias Tensor2D

              Tensor2D: Tensor<R2>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor2D | @vladmandic/human - v3.2.2

              Type alias Tensor2D

              Tensor2D: Tensor<R2>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor3D.html b/typedoc/types/Tensor3D.html index 901ccb2a..fec7f617 100644 --- a/typedoc/types/Tensor3D.html +++ b/typedoc/types/Tensor3D.html @@ -1,2 +1,2 @@ -Tensor3D | @vladmandic/human - v3.2.1

              Type alias Tensor3D

              Tensor3D: Tensor<R3>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor3D | @vladmandic/human - v3.2.2

              Type alias Tensor3D

              Tensor3D: Tensor<R3>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/Tensor4D.html b/typedoc/types/Tensor4D.html index 77823bbb..6ddda0cf 100644 --- a/typedoc/types/Tensor4D.html +++ b/typedoc/types/Tensor4D.html @@ -1,2 +1,2 @@ -Tensor4D | @vladmandic/human - v3.2.1

              Type alias Tensor4D

              Tensor4D: Tensor<R4>

              Doclink

              Tensor

              -
              \ No newline at end of file +Tensor4D | @vladmandic/human - v3.2.2

              Type alias Tensor4D

              Tensor4D: Tensor<R4>

              Doclink

              Tensor

              +
              \ No newline at end of file diff --git a/typedoc/types/TensorLike.html b/typedoc/types/TensorLike.html index ce514ff1..e1338a0a 100644 --- a/typedoc/types/TensorLike.html +++ b/typedoc/types/TensorLike.html @@ -1,2 +1,2 @@ -TensorLike | @vladmandic/human - v3.2.1

              Type alias TensorLike

              TensorLike: TypedArray | number | boolean | string | RecursiveArray<number | number[] | TypedArray> | RecursiveArray<boolean> | RecursiveArray<string> | Uint8Array[]

              Docalias

              TypedArray|Array

              -
              \ No newline at end of file +TensorLike | @vladmandic/human - v3.2.2

              Type alias TensorLike

              TensorLike: TypedArray | number | boolean | string | RecursiveArray<number | number[] | TypedArray> | RecursiveArray<boolean> | RecursiveArray<string> | Uint8Array[]

              Docalias

              TypedArray|Array

              +
              \ No newline at end of file diff --git a/typedoc/types/WarmupEnum.html b/typedoc/types/WarmupEnum.html index 1dbd41bd..4ff07117 100644 --- a/typedoc/types/WarmupEnum.html +++ b/typedoc/types/WarmupEnum.html @@ -1,2 +1,2 @@ -WarmupEnum | @vladmandic/human - v3.2.1
              \ No newline at end of file +WarmupEnum | @vladmandic/human - v3.2.2

              Type alias WarmupEnum

              WarmupEnum: "" | "none" | "face" | "full" | "body"

              Possible values for human.warmup

              +
              \ No newline at end of file diff --git a/typedoc/types/match.Descriptor.html b/typedoc/types/match.Descriptor.html index bf38191f..40b3da58 100644 --- a/typedoc/types/match.Descriptor.html +++ b/typedoc/types/match.Descriptor.html @@ -1,2 +1,2 @@ -Descriptor | @vladmandic/human - v3.2.1
              \ No newline at end of file +Descriptor | @vladmandic/human - v3.2.2
              Descriptor: number[]

              Face descriptor type as number array

              +
              \ No newline at end of file diff --git a/typedoc/types/match.MatchOptions.html b/typedoc/types/match.MatchOptions.html index 1bd0a782..fc0d0972 100644 --- a/typedoc/types/match.MatchOptions.html +++ b/typedoc/types/match.MatchOptions.html @@ -1 +1 @@ -MatchOptions | @vladmandic/human - v3.2.1

              Type alias MatchOptions

              MatchOptions: {
                  max?: number;
                  min?: number;
                  multiplier?: number;
                  order?: number;
                  threshold?: number;
              } | undefined

              Type declaration

              • Optional max?: number
              • Optional min?: number
              • Optional multiplier?: number
              • Optional order?: number
              • Optional threshold?: number
              \ No newline at end of file +MatchOptions | @vladmandic/human - v3.2.2

              Type alias MatchOptions

              MatchOptions: {
                  max?: number;
                  min?: number;
                  multiplier?: number;
                  order?: number;
                  threshold?: number;
              } | undefined

              Type declaration

              • Optional max?: number
              • Optional min?: number
              • Optional multiplier?: number
              • Optional order?: number
              • Optional threshold?: number
              \ No newline at end of file diff --git a/typedoc/variables/defaults.html b/typedoc/variables/defaults.html index 18ffdd76..8c685f47 100644 --- a/typedoc/variables/defaults.html +++ b/typedoc/variables/defaults.html @@ -1,4 +1,4 @@ -defaults | @vladmandic/human - v3.2.1

              Variable defaultsConst

              defaults: Config = ...
              \ No newline at end of file diff --git a/typedoc/variables/draw.options.html b/typedoc/variables/draw.options.html index cff48653..5de21fc4 100644 --- a/typedoc/variables/draw.options.html +++ b/typedoc/variables/draw.options.html @@ -1,2 +1,2 @@ -options | @vladmandic/human - v3.2.1
              \ No newline at end of file +options | @vladmandic/human - v3.2.2

              Variable optionsConst

              options: DrawOptions = ...

              currently set draw options DrawOptions

              +
              \ No newline at end of file diff --git a/typedoc/variables/env-1.html b/typedoc/variables/env-1.html index 1bcda0c3..85c22744 100644 --- a/typedoc/variables/env-1.html +++ b/typedoc/variables/env-1.html @@ -1 +1 @@ -env | @vladmandic/human - v3.2.1
              \ No newline at end of file +env | @vladmandic/human - v3.2.2

              Variable envConst

              env: Env = ...
              \ No newline at end of file